/ Hex Artifact Content
Login

Artifact bdf4118f1194272241feb97fbeebf83aa228ef95287fe6dc2cccc533ef0fc90c:


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 30 20 29 7b  pMem->enc)==0 ){
32b0: 0a 20 20 20 20 72 65 74 75 72 6e 20 4d 45 4d 5f  .    return MEM_
32c0: 49 6e 74 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72  Int;.  }.  retur
32d0: 6e 20 4d 45 4d 5f 52 65 61 6c 3b 0a 7d 0a 0a 2f  n MEM_Real;.}../
32e0: 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74 68 65 20  *.** Return the 
32f0: 6e 75 6d 65 72 69 63 20 74 79 70 65 20 66 6f 72  numeric type for
3300: 20 70 4d 65 6d 2c 20 65 69 74 68 65 72 20 4d 45   pMem, either ME
3310: 4d 5f 49 6e 74 20 6f 72 20 4d 45 4d 5f 52 65 61  M_Int or MEM_Rea
3320: 6c 20 6f 72 20 62 6f 74 68 20 6f 72 0a 2a 2a 20  l or both or.** 
3330: 6e 6f 6e 65 2e 20 20 0a 2a 2a 0a 2a 2a 20 55 6e  none.  .**.** Un
3340: 6c 69 6b 65 20 61 70 70 6c 79 4e 75 6d 65 72 69  like applyNumeri
3350: 63 41 66 66 69 6e 69 74 79 28 29 2c 20 74 68 69  cAffinity(), thi
3360: 73 20 72 6f 75 74 69 6e 65 20 64 6f 65 73 20 6e  s routine does n
3370: 6f 74 20 6d 6f 64 69 66 79 20 70 4d 65 6d 2d 3e  ot modify pMem->
3380: 66 6c 61 67 73 2e 0a 2a 2a 20 42 75 74 20 69 74  flags..** But it
3390: 20 64 6f 65 73 20 73 65 74 20 70 4d 65 6d 2d 3e   does set pMem->
33a0: 75 2e 72 20 61 6e 64 20 70 4d 65 6d 2d 3e 75 2e  u.r and pMem->u.
33b0: 69 20 61 70 70 72 6f 70 72 69 61 74 65 6c 79 2e  i appropriately.
33c0: 0a 2a 2f 0a 73 74 61 74 69 63 20 75 31 36 20 6e  .*/.static u16 n
33d0: 75 6d 65 72 69 63 54 79 70 65 28 4d 65 6d 20 2a  umericType(Mem *
33e0: 70 4d 65 6d 29 7b 0a 20 20 69 66 28 20 70 4d 65  pMem){.  if( pMe
33f0: 6d 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f  m->flags & (MEM_
3400: 49 6e 74 7c 4d 45 4d 5f 52 65 61 6c 29 20 29 7b  Int|MEM_Real) ){
3410: 0a 20 20 20 20 72 65 74 75 72 6e 20 70 4d 65 6d  .    return pMem
3420: 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f 49  ->flags & (MEM_I
3430: 6e 74 7c 4d 45 4d 5f 52 65 61 6c 29 3b 0a 20 20  nt|MEM_Real);.  
3440: 7d 0a 20 20 69 66 28 20 70 4d 65 6d 2d 3e 66 6c  }.  if( pMem->fl
3450: 61 67 73 20 26 20 28 4d 45 4d 5f 53 74 72 7c 4d  ags & (MEM_Str|M
3460: 45 4d 5f 42 6c 6f 62 29 20 29 7b 0a 20 20 20 20  EM_Blob) ){.    
3470: 72 65 74 75 72 6e 20 63 6f 6d 70 75 74 65 4e 75  return computeNu
3480: 6d 65 72 69 63 54 79 70 65 28 70 4d 65 6d 29 3b  mericType(pMem);
3490: 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 30 3b  .  }.  return 0;
34a0: 0a 7d 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54  .}..#ifdef SQLIT
34b0: 45 5f 44 45 42 55 47 0a 2f 2a 0a 2a 2a 20 57 72  E_DEBUG./*.** Wr
34c0: 69 74 65 20 61 20 6e 69 63 65 20 73 74 72 69 6e  ite a nice strin
34d0: 67 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e  g representation
34e0: 20 6f 66 20 74 68 65 20 63 6f 6e 74 65 6e 74 73   of the contents
34f0: 20 6f 66 20 63 65 6c 6c 20 70 4d 65 6d 0a 2a 2a   of cell pMem.**
3500: 20 69 6e 74 6f 20 62 75 66 66 65 72 20 7a 42 75   into buffer zBu
3510: 66 2c 20 6c 65 6e 67 74 68 20 6e 42 75 66 2e 0a  f, length nBuf..
3520: 2a 2f 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56  */.void sqlite3V
3530: 64 62 65 4d 65 6d 50 72 65 74 74 79 50 72 69 6e  dbeMemPrettyPrin
3540: 74 28 4d 65 6d 20 2a 70 4d 65 6d 2c 20 63 68 61  t(Mem *pMem, cha
3550: 72 20 2a 7a 42 75 66 29 7b 0a 20 20 63 68 61 72  r *zBuf){.  char
3560: 20 2a 7a 43 73 72 20 3d 20 7a 42 75 66 3b 0a 20   *zCsr = zBuf;. 
3570: 20 69 6e 74 20 66 20 3d 20 70 4d 65 6d 2d 3e 66   int f = pMem->f
3580: 6c 61 67 73 3b 0a 0a 20 20 73 74 61 74 69 63 20  lags;..  static 
3590: 63 6f 6e 73 74 20 63 68 61 72 20 2a 63 6f 6e 73  const char *cons
35a0: 74 20 65 6e 63 6e 61 6d 65 73 5b 5d 20 3d 20 7b  t encnames[] = {
35b0: 22 28 58 29 22 2c 20 22 28 38 29 22 2c 20 22 28  "(X)", "(8)", "(
35c0: 31 36 4c 45 29 22 2c 20 22 28 31 36 42 45 29 22  16LE)", "(16BE)"
35d0: 7d 3b 0a 0a 20 20 69 66 28 20 66 26 4d 45 4d 5f  };..  if( f&MEM_
35e0: 42 6c 6f 62 20 29 7b 0a 20 20 20 20 69 6e 74 20  Blob ){.    int 
35f0: 69 3b 0a 20 20 20 20 63 68 61 72 20 63 3b 0a 20  i;.    char c;. 
3600: 20 20 20 69 66 28 20 66 20 26 20 4d 45 4d 5f 44     if( f & MEM_D
3610: 79 6e 20 29 7b 0a 20 20 20 20 20 20 63 20 3d 20  yn ){.      c = 
3620: 27 7a 27 3b 0a 20 20 20 20 20 20 61 73 73 65 72  'z';.      asser
3630: 74 28 20 28 66 20 26 20 28 4d 45 4d 5f 53 74 61  t( (f & (MEM_Sta
3640: 74 69 63 7c 4d 45 4d 5f 45 70 68 65 6d 29 29 3d  tic|MEM_Ephem))=
3650: 3d 30 20 29 3b 0a 20 20 20 20 7d 65 6c 73 65 20  =0 );.    }else 
3660: 69 66 28 20 66 20 26 20 4d 45 4d 5f 53 74 61 74  if( f & MEM_Stat
3670: 69 63 20 29 7b 0a 20 20 20 20 20 20 63 20 3d 20  ic ){.      c = 
3680: 27 74 27 3b 0a 20 20 20 20 20 20 61 73 73 65 72  't';.      asser
3690: 74 28 20 28 66 20 26 20 28 4d 45 4d 5f 44 79 6e  t( (f & (MEM_Dyn
36a0: 7c 4d 45 4d 5f 45 70 68 65 6d 29 29 3d 3d 30 20  |MEM_Ephem))==0 
36b0: 29 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28  );.    }else if(
36c0: 20 66 20 26 20 4d 45 4d 5f 45 70 68 65 6d 20 29   f & MEM_Ephem )
36d0: 7b 0a 20 20 20 20 20 20 63 20 3d 20 27 65 27 3b  {.      c = 'e';
36e0: 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 28  .      assert( (
36f0: 66 20 26 20 28 4d 45 4d 5f 53 74 61 74 69 63 7c  f & (MEM_Static|
3700: 4d 45 4d 5f 44 79 6e 29 29 3d 3d 30 20 29 3b 0a  MEM_Dyn))==0 );.
3710: 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
3720: 20 63 20 3d 20 27 73 27 3b 0a 20 20 20 20 7d 0a   c = 's';.    }.
3730: 20 20 20 20 2a 28 7a 43 73 72 2b 2b 29 20 3d 20      *(zCsr++) = 
3740: 63 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 73  c;.    sqlite3_s
3750: 6e 70 72 69 6e 74 66 28 31 30 30 2c 20 7a 43 73  nprintf(100, zCs
3760: 72 2c 20 22 25 64 5b 22 2c 20 70 4d 65 6d 2d 3e  r, "%d[", pMem->
3770: 6e 29 3b 0a 20 20 20 20 7a 43 73 72 20 2b 3d 20  n);.    zCsr += 
3780: 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28  sqlite3Strlen30(
3790: 7a 43 73 72 29 3b 0a 20 20 20 20 66 6f 72 28 69  zCsr);.    for(i
37a0: 3d 30 3b 20 69 3c 31 36 20 26 26 20 69 3c 70 4d  =0; i<16 && i<pM
37b0: 65 6d 2d 3e 6e 3b 20 69 2b 2b 29 7b 0a 20 20 20  em->n; i++){.   
37c0: 20 20 20 73 71 6c 69 74 65 33 5f 73 6e 70 72 69     sqlite3_snpri
37d0: 6e 74 66 28 31 30 30 2c 20 7a 43 73 72 2c 20 22  ntf(100, zCsr, "
37e0: 25 30 32 58 22 2c 20 28 28 69 6e 74 29 70 4d 65  %02X", ((int)pMe
37f0: 6d 2d 3e 7a 5b 69 5d 20 26 20 30 78 46 46 29 29  m->z[i] & 0xFF))
3800: 3b 0a 20 20 20 20 20 20 7a 43 73 72 20 2b 3d 20  ;.      zCsr += 
3810: 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28  sqlite3Strlen30(
3820: 7a 43 73 72 29 3b 0a 20 20 20 20 7d 0a 20 20 20  zCsr);.    }.   
3830: 20 66 6f 72 28 69 3d 30 3b 20 69 3c 31 36 20 26   for(i=0; i<16 &
3840: 26 20 69 3c 70 4d 65 6d 2d 3e 6e 3b 20 69 2b 2b  & i<pMem->n; i++
3850: 29 7b 0a 20 20 20 20 20 20 63 68 61 72 20 7a 20  ){.      char z 
3860: 3d 20 70 4d 65 6d 2d 3e 7a 5b 69 5d 3b 0a 20 20  = pMem->z[i];.  
3870: 20 20 20 20 69 66 28 20 7a 3c 33 32 20 7c 7c 20      if( z<32 || 
3880: 7a 3e 31 32 36 20 29 20 2a 7a 43 73 72 2b 2b 20  z>126 ) *zCsr++ 
3890: 3d 20 27 2e 27 3b 0a 20 20 20 20 20 20 65 6c 73  = '.';.      els
38a0: 65 20 2a 7a 43 73 72 2b 2b 20 3d 20 7a 3b 0a 20  e *zCsr++ = z;. 
38b0: 20 20 20 7d 0a 20 20 20 20 2a 28 7a 43 73 72 2b     }.    *(zCsr+
38c0: 2b 29 20 3d 20 27 5d 27 3b 0a 20 20 20 20 69 66  +) = ']';.    if
38d0: 28 20 66 20 26 20 4d 45 4d 5f 5a 65 72 6f 20 29  ( f & MEM_Zero )
38e0: 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f  {.      sqlite3_
38f0: 73 6e 70 72 69 6e 74 66 28 31 30 30 2c 20 7a 43  snprintf(100, zC
3900: 73 72 2c 22 2b 25 64 7a 22 2c 70 4d 65 6d 2d 3e  sr,"+%dz",pMem->
3910: 75 2e 6e 5a 65 72 6f 29 3b 0a 20 20 20 20 20 20  u.nZero);.      
3920: 7a 43 73 72 20 2b 3d 20 73 71 6c 69 74 65 33 53  zCsr += sqlite3S
3930: 74 72 6c 65 6e 33 30 28 7a 43 73 72 29 3b 0a 20  trlen30(zCsr);. 
3940: 20 20 20 7d 0a 20 20 20 20 2a 7a 43 73 72 20 3d     }.    *zCsr =
3950: 20 27 5c 30 27 3b 0a 20 20 7d 65 6c 73 65 20 69   '\0';.  }else i
3960: 66 28 20 66 20 26 20 4d 45 4d 5f 53 74 72 20 29  f( f & MEM_Str )
3970: 7b 0a 20 20 20 20 69 6e 74 20 6a 2c 20 6b 3b 0a  {.    int j, k;.
3980: 20 20 20 20 7a 42 75 66 5b 30 5d 20 3d 20 27 20      zBuf[0] = ' 
3990: 27 3b 0a 20 20 20 20 69 66 28 20 66 20 26 20 4d  ';.    if( f & M
39a0: 45 4d 5f 44 79 6e 20 29 7b 0a 20 20 20 20 20 20  EM_Dyn ){.      
39b0: 7a 42 75 66 5b 31 5d 20 3d 20 27 7a 27 3b 0a 20  zBuf[1] = 'z';. 
39c0: 20 20 20 20 20 61 73 73 65 72 74 28 20 28 66 20       assert( (f 
39d0: 26 20 28 4d 45 4d 5f 53 74 61 74 69 63 7c 4d 45  & (MEM_Static|ME
39e0: 4d 5f 45 70 68 65 6d 29 29 3d 3d 30 20 29 3b 0a  M_Ephem))==0 );.
39f0: 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 66 20      }else if( f 
3a00: 26 20 4d 45 4d 5f 53 74 61 74 69 63 20 29 7b 0a  & MEM_Static ){.
3a10: 20 20 20 20 20 20 7a 42 75 66 5b 31 5d 20 3d 20        zBuf[1] = 
3a20: 27 74 27 3b 0a 20 20 20 20 20 20 61 73 73 65 72  't';.      asser
3a30: 74 28 20 28 66 20 26 20 28 4d 45 4d 5f 44 79 6e  t( (f & (MEM_Dyn
3a40: 7c 4d 45 4d 5f 45 70 68 65 6d 29 29 3d 3d 30 20  |MEM_Ephem))==0 
3a50: 29 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28  );.    }else if(
3a60: 20 66 20 26 20 4d 45 4d 5f 45 70 68 65 6d 20 29   f & MEM_Ephem )
3a70: 7b 0a 20 20 20 20 20 20 7a 42 75 66 5b 31 5d 20  {.      zBuf[1] 
3a80: 3d 20 27 65 27 3b 0a 20 20 20 20 20 20 61 73 73  = 'e';.      ass
3a90: 65 72 74 28 20 28 66 20 26 20 28 4d 45 4d 5f 53  ert( (f & (MEM_S
3aa0: 74 61 74 69 63 7c 4d 45 4d 5f 44 79 6e 29 29 3d  tatic|MEM_Dyn))=
3ab0: 3d 30 20 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b  =0 );.    }else{
3ac0: 0a 20 20 20 20 20 20 7a 42 75 66 5b 31 5d 20 3d  .      zBuf[1] =
3ad0: 20 27 73 27 3b 0a 20 20 20 20 7d 0a 20 20 20 20   's';.    }.    
3ae0: 6b 20 3d 20 32 3b 0a 20 20 20 20 73 71 6c 69 74  k = 2;.    sqlit
3af0: 65 33 5f 73 6e 70 72 69 6e 74 66 28 31 30 30 2c  e3_snprintf(100,
3b00: 20 26 7a 42 75 66 5b 6b 5d 2c 20 22 25 64 22 2c   &zBuf[k], "%d",
3b10: 20 70 4d 65 6d 2d 3e 6e 29 3b 0a 20 20 20 20 6b   pMem->n);.    k
3b20: 20 2b 3d 20 73 71 6c 69 74 65 33 53 74 72 6c 65   += sqlite3Strle
3b30: 6e 33 30 28 26 7a 42 75 66 5b 6b 5d 29 3b 0a 20  n30(&zBuf[k]);. 
3b40: 20 20 20 7a 42 75 66 5b 6b 2b 2b 5d 20 3d 20 27     zBuf[k++] = '
3b50: 5b 27 3b 0a 20 20 20 20 66 6f 72 28 6a 3d 30 3b  [';.    for(j=0;
3b60: 20 6a 3c 31 35 20 26 26 20 6a 3c 70 4d 65 6d 2d   j<15 && j<pMem-
3b70: 3e 6e 3b 20 6a 2b 2b 29 7b 0a 20 20 20 20 20 20  >n; j++){.      
3b80: 75 38 20 63 20 3d 20 70 4d 65 6d 2d 3e 7a 5b 6a  u8 c = pMem->z[j
3b90: 5d 3b 0a 20 20 20 20 20 20 69 66 28 20 63 3e 3d  ];.      if( c>=
3ba0: 30 78 32 30 20 26 26 20 63 3c 30 78 37 66 20 29  0x20 && c<0x7f )
3bb0: 7b 0a 20 20 20 20 20 20 20 20 7a 42 75 66 5b 6b  {.        zBuf[k
3bc0: 2b 2b 5d 20 3d 20 63 3b 0a 20 20 20 20 20 20 7d  ++] = c;.      }
3bd0: 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 7a 42  else{.        zB
3be0: 75 66 5b 6b 2b 2b 5d 20 3d 20 27 2e 27 3b 0a 20  uf[k++] = '.';. 
3bf0: 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20       }.    }.   
3c00: 20 7a 42 75 66 5b 6b 2b 2b 5d 20 3d 20 27 5d 27   zBuf[k++] = ']'
3c10: 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 73 6e  ;.    sqlite3_sn
3c20: 70 72 69 6e 74 66 28 31 30 30 2c 26 7a 42 75 66  printf(100,&zBuf
3c30: 5b 6b 5d 2c 20 65 6e 63 6e 61 6d 65 73 5b 70 4d  [k], encnames[pM
3c40: 65 6d 2d 3e 65 6e 63 5d 29 3b 0a 20 20 20 20 6b  em->enc]);.    k
3c50: 20 2b 3d 20 73 71 6c 69 74 65 33 53 74 72 6c 65   += sqlite3Strle
3c60: 6e 33 30 28 26 7a 42 75 66 5b 6b 5d 29 3b 0a 20  n30(&zBuf[k]);. 
3c70: 20 20 20 7a 42 75 66 5b 6b 2b 2b 5d 20 3d 20 30     zBuf[k++] = 0
3c80: 3b 0a 20 20 7d 0a 7d 0a 23 65 6e 64 69 66 0a 0a  ;.  }.}.#endif..
3c90: 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45  #ifdef SQLITE_DE
3ca0: 42 55 47 0a 2f 2a 0a 2a 2a 20 50 72 69 6e 74 20  BUG./*.** Print 
3cb0: 74 68 65 20 76 61 6c 75 65 20 6f 66 20 61 20 72  the value of a r
3cc0: 65 67 69 73 74 65 72 20 66 6f 72 20 74 72 61 63  egister for trac
3cd0: 69 6e 67 20 70 75 72 70 6f 73 65 73 3a 0a 2a 2f  ing purposes:.*/
3ce0: 0a 73 74 61 74 69 63 20 76 6f 69 64 20 6d 65 6d  .static void mem
3cf0: 54 72 61 63 65 50 72 69 6e 74 28 4d 65 6d 20 2a  TracePrint(Mem *
3d00: 70 29 7b 0a 20 20 69 66 28 20 70 2d 3e 66 6c 61  p){.  if( p->fla
3d10: 67 73 20 26 20 4d 45 4d 5f 55 6e 64 65 66 69 6e  gs & MEM_Undefin
3d20: 65 64 20 29 7b 0a 20 20 20 20 70 72 69 6e 74 66  ed ){.    printf
3d30: 28 22 20 75 6e 64 65 66 69 6e 65 64 22 29 3b 0a  (" undefined");.
3d40: 20 20 7d 65 6c 73 65 20 69 66 28 20 70 2d 3e 66    }else if( p->f
3d50: 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20  lags & MEM_Null 
3d60: 29 7b 0a 20 20 20 20 70 72 69 6e 74 66 28 22 20  ){.    printf(" 
3d70: 4e 55 4c 4c 22 29 3b 0a 20 20 7d 65 6c 73 65 20  NULL");.  }else 
3d80: 69 66 28 20 28 70 2d 3e 66 6c 61 67 73 20 26 20  if( (p->flags & 
3d90: 28 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 53 74 72  (MEM_Int|MEM_Str
3da0: 29 29 3d 3d 28 4d 45 4d 5f 49 6e 74 7c 4d 45 4d  ))==(MEM_Int|MEM
3db0: 5f 53 74 72 29 20 29 7b 0a 20 20 20 20 70 72 69  _Str) ){.    pri
3dc0: 6e 74 66 28 22 20 73 69 3a 25 6c 6c 64 22 2c 20  ntf(" si:%lld", 
3dd0: 70 2d 3e 75 2e 69 29 3b 0a 20 20 7d 65 6c 73 65  p->u.i);.  }else
3de0: 20 69 66 28 20 70 2d 3e 66 6c 61 67 73 20 26 20   if( p->flags & 
3df0: 4d 45 4d 5f 49 6e 74 20 29 7b 0a 20 20 20 20 70  MEM_Int ){.    p
3e00: 72 69 6e 74 66 28 22 20 69 3a 25 6c 6c 64 22 2c  rintf(" i:%lld",
3e10: 20 70 2d 3e 75 2e 69 29 3b 0a 23 69 66 6e 64 65   p->u.i);.#ifnde
3e20: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c  f SQLITE_OMIT_FL
3e30: 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 0a 20 20 7d  OATING_POINT.  }
3e40: 65 6c 73 65 20 69 66 28 20 70 2d 3e 66 6c 61 67  else if( p->flag
3e50: 73 20 26 20 4d 45 4d 5f 52 65 61 6c 20 29 7b 0a  s & MEM_Real ){.
3e60: 20 20 20 20 70 72 69 6e 74 66 28 22 20 72 3a 25      printf(" r:%
3e70: 67 22 2c 20 70 2d 3e 75 2e 72 29 3b 0a 23 65 6e  g", p->u.r);.#en
3e80: 64 69 66 0a 20 20 7d 65 6c 73 65 20 69 66 28 20  dif.  }else if( 
3e90: 70 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52  p->flags & MEM_R
3ea0: 6f 77 53 65 74 20 29 7b 0a 20 20 20 20 70 72 69  owSet ){.    pri
3eb0: 6e 74 66 28 22 20 28 72 6f 77 73 65 74 29 22 29  ntf(" (rowset)")
3ec0: 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 63  ;.  }else{.    c
3ed0: 68 61 72 20 7a 42 75 66 5b 32 30 30 5d 3b 0a 20  har zBuf[200];. 
3ee0: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
3ef0: 6d 50 72 65 74 74 79 50 72 69 6e 74 28 70 2c 20  mPrettyPrint(p, 
3f00: 7a 42 75 66 29 3b 0a 20 20 20 20 70 72 69 6e 74  zBuf);.    print
3f10: 66 28 22 20 25 73 22 2c 20 7a 42 75 66 29 3b 0a  f(" %s", zBuf);.
3f20: 20 20 7d 0a 20 20 69 66 28 20 70 2d 3e 66 6c 61    }.  if( p->fla
3f30: 67 73 20 26 20 4d 45 4d 5f 53 75 62 74 79 70 65  gs & MEM_Subtype
3f40: 20 29 20 70 72 69 6e 74 66 28 22 20 73 75 62 74   ) printf(" subt
3f50: 79 70 65 3d 30 78 25 30 32 78 22 2c 20 70 2d 3e  ype=0x%02x", p->
3f60: 65 53 75 62 74 79 70 65 29 3b 0a 7d 0a 73 74 61  eSubtype);.}.sta
3f70: 74 69 63 20 76 6f 69 64 20 72 65 67 69 73 74 65  tic void registe
3f80: 72 54 72 61 63 65 28 69 6e 74 20 69 52 65 67 2c  rTrace(int iReg,
3f90: 20 4d 65 6d 20 2a 70 29 7b 0a 20 20 70 72 69 6e   Mem *p){.  prin
3fa0: 74 66 28 22 52 45 47 5b 25 64 5d 20 3d 20 22 2c  tf("REG[%d] = ",
3fb0: 20 69 52 65 67 29 3b 0a 20 20 6d 65 6d 54 72 61   iReg);.  memTra
3fc0: 63 65 50 72 69 6e 74 28 70 29 3b 0a 20 20 70 72  cePrint(p);.  pr
3fd0: 69 6e 74 66 28 22 5c 6e 22 29 3b 0a 20 20 73 71  intf("\n");.  sq
3fe0: 6c 69 74 65 33 56 64 62 65 43 68 65 63 6b 4d 65  lite3VdbeCheckMe
3ff0: 6d 49 6e 76 61 72 69 61 6e 74 73 28 70 29 3b 0a  mInvariants(p);.
4000: 7d 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66  }.#endif..#ifdef
4010: 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 23 20   SQLITE_DEBUG.# 
4020: 20 64 65 66 69 6e 65 20 52 45 47 49 53 54 45 52   define REGISTER
4030: 5f 54 52 41 43 45 28 52 2c 4d 29 20 69 66 28 64  _TRACE(R,M) if(d
4040: 62 2d 3e 66 6c 61 67 73 26 53 51 4c 49 54 45 5f  b->flags&SQLITE_
4050: 56 64 62 65 54 72 61 63 65 29 72 65 67 69 73 74  VdbeTrace)regist
4060: 65 72 54 72 61 63 65 28 52 2c 4d 29 0a 23 65 6c  erTrace(R,M).#el
4070: 73 65 0a 23 20 20 64 65 66 69 6e 65 20 52 45 47  se.#  define REG
4080: 49 53 54 45 52 5f 54 52 41 43 45 28 52 2c 4d 29  ISTER_TRACE(R,M)
4090: 0a 23 65 6e 64 69 66 0a 0a 0a 23 69 66 64 65 66  .#endif...#ifdef
40a0: 20 56 44 42 45 5f 50 52 4f 46 49 4c 45 0a 0a 2f   VDBE_PROFILE../
40b0: 2a 20 0a 2a 2a 20 68 77 74 69 6d 65 2e 68 20 63  * .** hwtime.h c
40c0: 6f 6e 74 61 69 6e 73 20 69 6e 6c 69 6e 65 20 61  ontains inline a
40d0: 73 73 65 6d 62 6c 65 72 20 63 6f 64 65 20 66 6f  ssembler code fo
40e0: 72 20 69 6d 70 6c 65 6d 65 6e 74 69 6e 67 20 0a  r implementing .
40f0: 2a 2a 20 68 69 67 68 2d 70 65 72 66 6f 72 6d 61  ** high-performa
4100: 6e 63 65 20 74 69 6d 69 6e 67 20 72 6f 75 74 69  nce timing routi
4110: 6e 65 73 2e 0a 2a 2f 0a 23 69 6e 63 6c 75 64 65  nes..*/.#include
4120: 20 22 68 77 74 69 6d 65 2e 68 22 0a 0a 23 65 6e   "hwtime.h"..#en
4130: 64 69 66 0a 0a 23 69 66 6e 64 65 66 20 4e 44 45  dif..#ifndef NDE
4140: 42 55 47 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 66  BUG./*.** This f
4150: 75 6e 63 74 69 6f 6e 20 69 73 20 6f 6e 6c 79 20  unction is only 
4160: 63 61 6c 6c 65 64 20 66 72 6f 6d 20 77 69 74 68  called from with
4170: 69 6e 20 61 6e 20 61 73 73 65 72 74 28 29 20 65  in an assert() e
4180: 78 70 72 65 73 73 69 6f 6e 2e 20 49 74 0a 2a 2a  xpression. It.**
4190: 20 63 68 65 63 6b 73 20 74 68 61 74 20 74 68 65   checks that the
41a0: 20 73 71 6c 69 74 65 33 2e 6e 54 72 61 6e 73 61   sqlite3.nTransa
41b0: 63 74 69 6f 6e 20 76 61 72 69 61 62 6c 65 20 69  ction variable i
41c0: 73 20 63 6f 72 72 65 63 74 6c 79 20 73 65 74 20  s correctly set 
41d0: 74 6f 0a 2a 2a 20 74 68 65 20 6e 75 6d 62 65 72  to.** the number
41e0: 20 6f 66 20 6e 6f 6e 2d 74 72 61 6e 73 61 63 74   of non-transact
41f0: 69 6f 6e 20 73 61 76 65 70 6f 69 6e 74 73 20 63  ion savepoints c
4200: 75 72 72 65 6e 74 6c 79 20 69 6e 20 74 68 65 20  urrently in the 
4210: 0a 2a 2a 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20  .** linked list 
4220: 73 74 61 72 74 69 6e 67 20 61 74 20 73 71 6c 69  starting at sqli
4230: 74 65 33 2e 70 53 61 76 65 70 6f 69 6e 74 2e 0a  te3.pSavepoint..
4240: 2a 2a 20 0a 2a 2a 20 55 73 61 67 65 3a 0a 2a 2a  ** .** Usage:.**
4250: 0a 2a 2a 20 20 20 20 20 61 73 73 65 72 74 28 20  .**     assert( 
4260: 63 68 65 63 6b 53 61 76 65 70 6f 69 6e 74 43 6f  checkSavepointCo
4270: 75 6e 74 28 64 62 29 20 29 3b 0a 2a 2f 0a 73 74  unt(db) );.*/.st
4280: 61 74 69 63 20 69 6e 74 20 63 68 65 63 6b 53 61  atic int checkSa
4290: 76 65 70 6f 69 6e 74 43 6f 75 6e 74 28 73 71 6c  vepointCount(sql
42a0: 69 74 65 33 20 2a 64 62 29 7b 0a 20 20 69 6e 74  ite3 *db){.  int
42b0: 20 6e 20 3d 20 30 3b 0a 20 20 53 61 76 65 70 6f   n = 0;.  Savepo
42c0: 69 6e 74 20 2a 70 3b 0a 20 20 66 6f 72 28 70 3d  int *p;.  for(p=
42d0: 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74 3b 20  db->pSavepoint; 
42e0: 70 3b 20 70 3d 70 2d 3e 70 4e 65 78 74 29 20 6e  p; p=p->pNext) n
42f0: 2b 2b 3b 0a 20 20 61 73 73 65 72 74 28 20 6e 3d  ++;.  assert( n=
4300: 3d 28 64 62 2d 3e 6e 53 61 76 65 70 6f 69 6e 74  =(db->nSavepoint
4310: 20 2b 20 64 62 2d 3e 69 73 54 72 61 6e 73 61 63   + db->isTransac
4320: 74 69 6f 6e 53 61 76 65 70 6f 69 6e 74 29 20 29  tionSavepoint) )
4330: 3b 0a 20 20 72 65 74 75 72 6e 20 31 3b 0a 7d 0a  ;.  return 1;.}.
4340: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 52 65  #endif../*.** Re
4350: 74 75 72 6e 20 74 68 65 20 72 65 67 69 73 74 65  turn the registe
4360: 72 20 6f 66 20 70 4f 70 2d 3e 70 32 20 61 66 74  r of pOp->p2 aft
4370: 65 72 20 66 69 72 73 74 20 70 72 65 70 61 72 69  er first prepari
4380: 6e 67 20 69 74 20 74 6f 20 62 65 0a 2a 2a 20 6f  ng it to be.** o
4390: 76 65 72 77 72 69 74 74 65 6e 20 77 69 74 68 20  verwritten with 
43a0: 61 6e 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65  an integer value
43b0: 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 53 51 4c 49  ..*/.static SQLI
43c0: 54 45 5f 4e 4f 49 4e 4c 49 4e 45 20 4d 65 6d 20  TE_NOINLINE Mem 
43d0: 2a 6f 75 74 32 50 72 65 72 65 6c 65 61 73 65 57  *out2PrereleaseW
43e0: 69 74 68 43 6c 65 61 72 28 4d 65 6d 20 2a 70 4f  ithClear(Mem *pO
43f0: 75 74 29 7b 0a 20 20 73 71 6c 69 74 65 33 56 64  ut){.  sqlite3Vd
4400: 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 4f 75  beMemSetNull(pOu
4410: 74 29 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67  t);.  pOut->flag
4420: 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20 72  s = MEM_Int;.  r
4430: 65 74 75 72 6e 20 70 4f 75 74 3b 0a 7d 0a 73 74  eturn pOut;.}.st
4440: 61 74 69 63 20 4d 65 6d 20 2a 6f 75 74 32 50 72  atic Mem *out2Pr
4450: 65 72 65 6c 65 61 73 65 28 56 64 62 65 20 2a 70  erelease(Vdbe *p
4460: 2c 20 56 64 62 65 4f 70 20 2a 70 4f 70 29 7b 0a  , VdbeOp *pOp){.
4470: 20 20 4d 65 6d 20 2a 70 4f 75 74 3b 0a 20 20 61    Mem *pOut;.  a
4480: 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e 30  ssert( pOp->p2>0
4490: 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   );.  assert( pO
44a0: 70 2d 3e 70 32 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b  p->p2<=(p->nMem+
44b0: 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29 20  1 - p->nCursor) 
44c0: 29 3b 0a 20 20 70 4f 75 74 20 3d 20 26 70 2d 3e  );.  pOut = &p->
44d0: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20  aMem[pOp->p2];. 
44e0: 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67   memAboutToChang
44f0: 65 28 70 2c 20 70 4f 75 74 29 3b 0a 20 20 69 66  e(p, pOut);.  if
4500: 28 20 56 64 62 65 4d 65 6d 44 79 6e 61 6d 69 63  ( VdbeMemDynamic
4510: 28 70 4f 75 74 29 20 29 7b 20 2f 2a 4f 50 54 49  (pOut) ){ /*OPTI
4520: 4d 49 5a 41 54 49 4f 4e 2d 49 46 2d 46 41 4c 53  MIZATION-IF-FALS
4530: 45 2a 2f 0a 20 20 20 20 72 65 74 75 72 6e 20 6f  E*/.    return o
4540: 75 74 32 50 72 65 72 65 6c 65 61 73 65 57 69 74  ut2PrereleaseWit
4550: 68 43 6c 65 61 72 28 70 4f 75 74 29 3b 0a 20 20  hClear(pOut);.  
4560: 7d 65 6c 73 65 7b 0a 20 20 20 20 70 4f 75 74 2d  }else{.    pOut-
4570: 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 49 6e 74  >flags = MEM_Int
4580: 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 70 4f 75  ;.    return pOu
4590: 74 3b 0a 20 20 7d 0a 7d 0a 0a 0a 2f 2a 0a 2a 2a  t;.  }.}.../*.**
45a0: 20 45 78 65 63 75 74 65 20 61 73 20 6d 75 63 68   Execute as much
45b0: 20 6f 66 20 61 20 56 44 42 45 20 70 72 6f 67 72   of a VDBE progr
45c0: 61 6d 20 61 73 20 77 65 20 63 61 6e 2e 0a 2a 2a  am as we can..**
45d0: 20 54 68 69 73 20 69 73 20 74 68 65 20 63 6f 72   This is the cor
45e0: 65 20 6f 66 20 73 71 6c 69 74 65 33 5f 73 74 65  e of sqlite3_ste
45f0: 70 28 29 2e 20 20 0a 2a 2f 0a 69 6e 74 20 73 71  p().  .*/.int sq
4600: 6c 69 74 65 33 56 64 62 65 45 78 65 63 28 0a 20  lite3VdbeExec(. 
4610: 20 56 64 62 65 20 2a 70 20 20 20 20 20 20 20 20   Vdbe *p        
4620: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
4630: 68 65 20 56 44 42 45 20 2a 2f 0a 29 7b 0a 20 20  he VDBE */.){.  
4640: 4f 70 20 2a 61 4f 70 20 3d 20 70 2d 3e 61 4f 70  Op *aOp = p->aOp
4650: 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f  ;          /* Co
4660: 70 79 20 6f 66 20 70 2d 3e 61 4f 70 20 2a 2f 0a  py of p->aOp */.
4670: 20 20 4f 70 20 2a 70 4f 70 20 3d 20 61 4f 70 3b    Op *pOp = aOp;
4680: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
4690: 43 75 72 72 65 6e 74 20 6f 70 65 72 61 74 69 6f  Current operatio
46a0: 6e 20 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64  n */.#if defined
46b0: 28 53 51 4c 49 54 45 5f 44 45 42 55 47 29 20 7c  (SQLITE_DEBUG) |
46c0: 7c 20 64 65 66 69 6e 65 64 28 56 44 42 45 5f 50  | defined(VDBE_P
46d0: 52 4f 46 49 4c 45 29 0a 20 20 4f 70 20 2a 70 4f  ROFILE).  Op *pO
46e0: 72 69 67 4f 70 3b 20 20 20 20 20 20 20 20 20 20  rigOp;          
46f0: 20 20 20 20 20 2f 2a 20 56 61 6c 75 65 20 6f 66       /* Value of
4700: 20 70 4f 70 20 61 74 20 74 68 65 20 74 6f 70 20   pOp at the top 
4710: 6f 66 20 74 68 65 20 6c 6f 6f 70 20 2a 2f 0a 23  of the loop */.#
4720: 65 6e 64 69 66 0a 23 69 66 64 65 66 20 53 51 4c  endif.#ifdef SQL
4730: 49 54 45 5f 44 45 42 55 47 0a 20 20 69 6e 74 20  ITE_DEBUG.  int 
4740: 6e 45 78 74 72 61 44 65 6c 65 74 65 20 3d 20 30  nExtraDelete = 0
4750: 3b 20 20 20 20 20 20 2f 2a 20 56 65 72 69 66 69  ;      /* Verifi
4760: 65 73 20 46 4f 52 44 45 4c 45 54 45 20 61 6e 64  es FORDELETE and
4770: 20 41 55 58 44 45 4c 45 54 45 20 66 6c 61 67 73   AUXDELETE flags
4780: 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 69 6e 74   */.#endif.  int
4790: 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b   rc = SQLITE_OK;
47a0: 20 20 20 20 20 20 20 20 2f 2a 20 56 61 6c 75 65          /* Value
47b0: 20 74 6f 20 72 65 74 75 72 6e 20 2a 2f 0a 20 20   to return */.  
47c0: 73 71 6c 69 74 65 33 20 2a 64 62 20 3d 20 70 2d  sqlite3 *db = p-
47d0: 3e 64 62 3b 20 20 20 20 20 20 20 2f 2a 20 54 68  >db;       /* Th
47e0: 65 20 64 61 74 61 62 61 73 65 20 2a 2f 0a 20 20  e database */.  
47f0: 75 38 20 72 65 73 65 74 53 63 68 65 6d 61 4f 6e  u8 resetSchemaOn
4800: 46 61 75 6c 74 20 3d 20 30 3b 20 2f 2a 20 52 65  Fault = 0; /* Re
4810: 73 65 74 20 73 63 68 65 6d 61 20 61 66 74 65 72  set schema after
4820: 20 61 6e 20 65 72 72 6f 72 20 69 66 20 70 6f 73   an error if pos
4830: 69 74 69 76 65 20 2a 2f 0a 20 20 75 38 20 65 6e  itive */.  u8 en
4840: 63 6f 64 69 6e 67 20 3d 20 45 4e 43 28 64 62 29  coding = ENC(db)
4850: 3b 20 20 20 20 20 2f 2a 20 54 68 65 20 64 61 74  ;     /* The dat
4860: 61 62 61 73 65 20 65 6e 63 6f 64 69 6e 67 20 2a  abase encoding *
4870: 2f 0a 20 20 69 6e 74 20 69 43 6f 6d 70 61 72 65  /.  int iCompare
4880: 20 3d 20 30 3b 20 20 20 20 20 20 20 20 20 20 2f   = 0;          /
4890: 2a 20 52 65 73 75 6c 74 20 6f 66 20 6c 61 73 74  * Result of last
48a0: 20 63 6f 6d 70 61 72 69 73 6f 6e 20 2a 2f 0a 20   comparison */. 
48b0: 20 75 6e 73 69 67 6e 65 64 20 6e 56 6d 53 74 65   unsigned nVmSte
48c0: 70 20 3d 20 30 3b 20 20 20 20 20 20 2f 2a 20 4e  p = 0;      /* N
48d0: 75 6d 62 65 72 20 6f 66 20 76 69 72 74 75 61 6c  umber of virtual
48e0: 20 6d 61 63 68 69 6e 65 20 73 74 65 70 73 20 2a   machine steps *
48f0: 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  /.#ifndef SQLITE
4900: 5f 4f 4d 49 54 5f 50 52 4f 47 52 45 53 53 5f 43  _OMIT_PROGRESS_C
4910: 41 4c 4c 42 41 43 4b 0a 20 20 75 6e 73 69 67 6e  ALLBACK.  unsign
4920: 65 64 20 6e 50 72 6f 67 72 65 73 73 4c 69 6d 69  ed nProgressLimi
4930: 74 3b 20 20 20 2f 2a 20 49 6e 76 6f 6b 65 20 78  t;   /* Invoke x
4940: 50 72 6f 67 72 65 73 73 28 29 20 77 68 65 6e 20  Progress() when 
4950: 6e 56 6d 53 74 65 70 20 72 65 61 63 68 65 73 20  nVmStep reaches 
4960: 74 68 69 73 20 2a 2f 0a 23 65 6e 64 69 66 0a 20  this */.#endif. 
4970: 20 4d 65 6d 20 2a 61 4d 65 6d 20 3d 20 70 2d 3e   Mem *aMem = p->
4980: 61 4d 65 6d 3b 20 20 20 20 20 20 20 2f 2a 20 43  aMem;       /* C
4990: 6f 70 79 20 6f 66 20 70 2d 3e 61 4d 65 6d 20 2a  opy of p->aMem *
49a0: 2f 0a 20 20 4d 65 6d 20 2a 70 49 6e 31 20 3d 20  /.  Mem *pIn1 = 
49b0: 30 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  0;             /
49c0: 2a 20 31 73 74 20 69 6e 70 75 74 20 6f 70 65 72  * 1st input oper
49d0: 61 6e 64 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 49  and */.  Mem *pI
49e0: 6e 32 20 3d 20 30 3b 20 20 20 20 20 20 20 20 20  n2 = 0;         
49f0: 20 20 20 20 2f 2a 20 32 6e 64 20 69 6e 70 75 74      /* 2nd input
4a00: 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20 4d 65   operand */.  Me
4a10: 6d 20 2a 70 49 6e 33 20 3d 20 30 3b 20 20 20 20  m *pIn3 = 0;    
4a20: 20 20 20 20 20 20 20 20 20 2f 2a 20 33 72 64 20           /* 3rd 
4a30: 69 6e 70 75 74 20 6f 70 65 72 61 6e 64 20 2a 2f  input operand */
4a40: 0a 20 20 4d 65 6d 20 2a 70 4f 75 74 20 3d 20 30  .  Mem *pOut = 0
4a50: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
4a60: 20 4f 75 74 70 75 74 20 6f 70 65 72 61 6e 64 20   Output operand 
4a70: 2a 2f 0a 23 69 66 64 65 66 20 56 44 42 45 5f 50  */.#ifdef VDBE_P
4a80: 52 4f 46 49 4c 45 0a 20 20 75 36 34 20 73 74 61  ROFILE.  u64 sta
4a90: 72 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  rt;             
4aa0: 20 20 20 20 2f 2a 20 43 50 55 20 63 6c 6f 63 6b      /* CPU clock
4ab0: 20 63 6f 75 6e 74 20 61 74 20 73 74 61 72 74 20   count at start 
4ac0: 6f 66 20 6f 70 63 6f 64 65 20 2a 2f 0a 23 65 6e  of opcode */.#en
4ad0: 64 69 66 0a 20 20 2f 2a 2a 2a 20 49 4e 53 45 52  dif.  /*** INSER
4ae0: 54 20 53 54 41 43 4b 20 55 4e 49 4f 4e 20 48 45  T STACK UNION HE
4af0: 52 45 20 2a 2a 2a 2f 0a 0a 20 20 61 73 73 65 72  RE ***/..  asser
4b00: 74 28 20 70 2d 3e 6d 61 67 69 63 3d 3d 56 44 42  t( p->magic==VDB
4b10: 45 5f 4d 41 47 49 43 5f 52 55 4e 20 29 3b 20 20  E_MAGIC_RUN );  
4b20: 2f 2a 20 73 71 6c 69 74 65 33 5f 73 74 65 70 28  /* sqlite3_step(
4b30: 29 20 76 65 72 69 66 69 65 73 20 74 68 69 73 20  ) verifies this 
4b40: 2a 2f 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65  */.  sqlite3Vdbe
4b50: 45 6e 74 65 72 28 70 29 3b 0a 20 20 69 66 28 20  Enter(p);.  if( 
4b60: 70 2d 3e 72 63 3d 3d 53 51 4c 49 54 45 5f 4e 4f  p->rc==SQLITE_NO
4b70: 4d 45 4d 20 29 7b 0a 20 20 20 20 2f 2a 20 54 68  MEM ){.    /* Th
4b80: 69 73 20 68 61 70 70 65 6e 73 20 69 66 20 61 20  is happens if a 
4b90: 6d 61 6c 6c 6f 63 28 29 20 69 6e 73 69 64 65 20  malloc() inside 
4ba0: 61 20 63 61 6c 6c 20 74 6f 20 73 71 6c 69 74 65  a call to sqlite
4bb0: 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 28 29 20  3_column_text() 
4bc0: 6f 72 0a 20 20 20 20 2a 2a 20 73 71 6c 69 74 65  or.    ** sqlite
4bd0: 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 31 36 28  3_column_text16(
4be0: 29 20 66 61 69 6c 65 64 2e 20 20 2a 2f 0a 20 20  ) failed.  */.  
4bf0: 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20    goto no_mem;. 
4c00: 20 7d 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e   }.  assert( p->
4c10: 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 7c 7c  rc==SQLITE_OK ||
4c20: 20 28 70 2d 3e 72 63 26 30 78 66 66 29 3d 3d 53   (p->rc&0xff)==S
4c30: 51 4c 49 54 45 5f 42 55 53 59 0a 20 20 20 20 20  QLITE_BUSY.     
4c40: 20 20 20 20 20 20 20 7c 7c 20 28 70 2d 3e 72 63         || (p->rc
4c50: 26 30 78 46 46 29 3d 3d 53 51 4c 49 54 45 5f 4c  &0xFF)==SQLITE_L
4c60: 4f 43 4b 45 44 20 29 3b 0a 20 20 61 73 73 65 72  OCKED );.  asser
4c70: 74 28 20 70 2d 3e 62 49 73 52 65 61 64 65 72 20  t( p->bIsReader 
4c80: 7c 7c 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 21 3d  || p->readOnly!=
4c90: 30 20 29 3b 0a 20 20 70 2d 3e 69 43 75 72 72 65  0 );.  p->iCurre
4ca0: 6e 74 54 69 6d 65 20 3d 20 30 3b 0a 20 20 61 73  ntTime = 0;.  as
4cb0: 73 65 72 74 28 20 70 2d 3e 65 78 70 6c 61 69 6e  sert( p->explain
4cc0: 3d 3d 30 20 29 3b 0a 20 20 70 2d 3e 70 52 65 73  ==0 );.  p->pRes
4cd0: 75 6c 74 53 65 74 20 3d 20 30 3b 0a 20 20 64 62  ultSet = 0;.  db
4ce0: 2d 3e 62 75 73 79 48 61 6e 64 6c 65 72 2e 6e 42  ->busyHandler.nB
4cf0: 75 73 79 20 3d 20 30 3b 0a 20 20 69 66 28 20 64  usy = 0;.  if( d
4d00: 62 2d 3e 75 31 2e 69 73 49 6e 74 65 72 72 75 70  b->u1.isInterrup
4d10: 74 65 64 20 29 20 67 6f 74 6f 20 61 62 6f 72 74  ted ) goto abort
4d20: 5f 64 75 65 5f 74 6f 5f 69 6e 74 65 72 72 75 70  _due_to_interrup
4d30: 74 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65  t;.  sqlite3Vdbe
4d40: 49 4f 54 72 61 63 65 53 71 6c 28 70 29 3b 0a 23  IOTraceSql(p);.#
4d50: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
4d60: 49 54 5f 50 52 4f 47 52 45 53 53 5f 43 41 4c 4c  IT_PROGRESS_CALL
4d70: 42 41 43 4b 0a 20 20 69 66 28 20 64 62 2d 3e 78  BACK.  if( db->x
4d80: 50 72 6f 67 72 65 73 73 20 29 7b 0a 20 20 20 20  Progress ){.    
4d90: 75 33 32 20 69 50 72 69 6f 72 20 3d 20 70 2d 3e  u32 iPrior = p->
4da0: 61 43 6f 75 6e 74 65 72 5b 53 51 4c 49 54 45 5f  aCounter[SQLITE_
4db0: 53 54 4d 54 53 54 41 54 55 53 5f 56 4d 5f 53 54  STMTSTATUS_VM_ST
4dc0: 45 50 5d 3b 0a 20 20 20 20 61 73 73 65 72 74 28  EP];.    assert(
4dd0: 20 30 20 3c 20 64 62 2d 3e 6e 50 72 6f 67 72 65   0 < db->nProgre
4de0: 73 73 4f 70 73 20 29 3b 0a 20 20 20 20 6e 50 72  ssOps );.    nPr
4df0: 6f 67 72 65 73 73 4c 69 6d 69 74 20 3d 20 64 62  ogressLimit = db
4e00: 2d 3e 6e 50 72 6f 67 72 65 73 73 4f 70 73 20 2d  ->nProgressOps -
4e10: 20 28 69 50 72 69 6f 72 20 25 20 64 62 2d 3e 6e   (iPrior % db->n
4e20: 50 72 6f 67 72 65 73 73 4f 70 73 29 3b 0a 20 20  ProgressOps);.  
4e30: 7d 65 6c 73 65 7b 0a 20 20 20 20 6e 50 72 6f 67  }else{.    nProg
4e40: 72 65 73 73 4c 69 6d 69 74 20 3d 20 30 78 66 66  ressLimit = 0xff
4e50: 66 66 66 66 66 66 3b 0a 20 20 7d 0a 23 65 6e 64  ffffff;.  }.#end
4e60: 69 66 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  if.#ifdef SQLITE
4e70: 5f 44 45 42 55 47 0a 20 20 73 71 6c 69 74 65 33  _DEBUG.  sqlite3
4e80: 42 65 67 69 6e 42 65 6e 69 67 6e 4d 61 6c 6c 6f  BeginBenignMallo
4e90: 63 28 29 3b 0a 20 20 69 66 28 20 70 2d 3e 70 63  c();.  if( p->pc
4ea0: 3d 3d 30 0a 20 20 20 26 26 20 28 70 2d 3e 64 62  ==0.   && (p->db
4eb0: 2d 3e 66 6c 61 67 73 20 26 20 28 53 51 4c 49 54  ->flags & (SQLIT
4ec0: 45 5f 56 64 62 65 4c 69 73 74 69 6e 67 7c 53 51  E_VdbeListing|SQ
4ed0: 4c 49 54 45 5f 56 64 62 65 45 51 50 7c 53 51 4c  LITE_VdbeEQP|SQL
4ee0: 49 54 45 5f 56 64 62 65 54 72 61 63 65 29 29 21  ITE_VdbeTrace))!
4ef0: 3d 30 0a 20 20 29 7b 0a 20 20 20 20 69 6e 74 20  =0.  ){.    int 
4f00: 69 3b 0a 20 20 20 20 69 6e 74 20 6f 6e 63 65 20  i;.    int once 
4f10: 3d 20 31 3b 0a 20 20 20 20 73 71 6c 69 74 65 33  = 1;.    sqlite3
4f20: 56 64 62 65 50 72 69 6e 74 53 71 6c 28 70 29 3b  VdbePrintSql(p);
4f30: 0a 20 20 20 20 69 66 28 20 70 2d 3e 64 62 2d 3e  .    if( p->db->
4f40: 66 6c 61 67 73 20 26 20 53 51 4c 49 54 45 5f 56  flags & SQLITE_V
4f50: 64 62 65 4c 69 73 74 69 6e 67 20 29 7b 0a 20 20  dbeListing ){.  
4f60: 20 20 20 20 70 72 69 6e 74 66 28 22 56 44 42 45      printf("VDBE
4f70: 20 50 72 6f 67 72 61 6d 20 4c 69 73 74 69 6e 67   Program Listing
4f80: 3a 5c 6e 22 29 3b 0a 20 20 20 20 20 20 66 6f 72  :\n");.      for
4f90: 28 69 3d 30 3b 20 69 3c 70 2d 3e 6e 4f 70 3b 20  (i=0; i<p->nOp; 
4fa0: 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 73 71  i++){.        sq
4fb0: 6c 69 74 65 33 56 64 62 65 50 72 69 6e 74 4f 70  lite3VdbePrintOp
4fc0: 28 73 74 64 6f 75 74 2c 20 69 2c 20 26 61 4f 70  (stdout, i, &aOp
4fd0: 5b 69 5d 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20  [i]);.      }.  
4fe0: 20 20 7d 0a 20 20 20 20 69 66 28 20 70 2d 3e 64    }.    if( p->d
4ff0: 62 2d 3e 66 6c 61 67 73 20 26 20 53 51 4c 49 54  b->flags & SQLIT
5000: 45 5f 56 64 62 65 45 51 50 20 29 7b 0a 20 20 20  E_VdbeEQP ){.   
5010: 20 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 70 2d     for(i=0; i<p-
5020: 3e 6e 4f 70 3b 20 69 2b 2b 29 7b 0a 20 20 20 20  >nOp; i++){.    
5030: 20 20 20 20 69 66 28 20 61 4f 70 5b 69 5d 2e 6f      if( aOp[i].o
5040: 70 63 6f 64 65 3d 3d 4f 50 5f 45 78 70 6c 61 69  pcode==OP_Explai
5050: 6e 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 69  n ){.          i
5060: 66 28 20 6f 6e 63 65 20 29 20 70 72 69 6e 74 66  f( once ) printf
5070: 28 22 56 44 42 45 20 51 75 65 72 79 20 50 6c 61  ("VDBE Query Pla
5080: 6e 3a 5c 6e 22 29 3b 0a 20 20 20 20 20 20 20 20  n:\n");.        
5090: 20 20 70 72 69 6e 74 66 28 22 25 73 5c 6e 22 2c    printf("%s\n",
50a0: 20 61 4f 70 5b 69 5d 2e 70 34 2e 7a 29 3b 0a 20   aOp[i].p4.z);. 
50b0: 20 20 20 20 20 20 20 20 20 6f 6e 63 65 20 3d 20           once = 
50c0: 30 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20  0;.        }.   
50d0: 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 69     }.    }.    i
50e0: 66 28 20 70 2d 3e 64 62 2d 3e 66 6c 61 67 73 20  f( p->db->flags 
50f0: 26 20 53 51 4c 49 54 45 5f 56 64 62 65 54 72 61  & SQLITE_VdbeTra
5100: 63 65 20 29 20 20 70 72 69 6e 74 66 28 22 56 44  ce )  printf("VD
5110: 42 45 20 54 72 61 63 65 3a 5c 6e 22 29 3b 0a 20  BE Trace:\n");. 
5120: 20 7d 0a 20 20 73 71 6c 69 74 65 33 45 6e 64 42   }.  sqlite3EndB
5130: 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28 29 3b 0a 23  enignMalloc();.#
5140: 65 6e 64 69 66 0a 20 20 66 6f 72 28 70 4f 70 3d  endif.  for(pOp=
5150: 26 61 4f 70 5b 70 2d 3e 70 63 5d 3b 20 31 3b 20  &aOp[p->pc]; 1; 
5160: 70 4f 70 2b 2b 29 7b 0a 20 20 20 20 2f 2a 20 45  pOp++){.    /* E
5170: 72 72 6f 72 73 20 61 72 65 20 64 65 74 65 63 74  rrors are detect
5180: 65 64 20 62 79 20 69 6e 64 69 76 69 64 75 61 6c  ed by individual
5190: 20 6f 70 63 6f 64 65 73 2c 20 77 69 74 68 20 61   opcodes, with a
51a0: 6e 20 69 6d 6d 65 64 69 61 74 65 0a 20 20 20 20  n immediate.    
51b0: 2a 2a 20 6a 75 6d 70 73 20 74 6f 20 61 62 6f 72  ** jumps to abor
51c0: 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 2e 20  t_due_to_error. 
51d0: 2a 2f 0a 20 20 20 20 61 73 73 65 72 74 28 20 72  */.    assert( r
51e0: 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 3b 0a  c==SQLITE_OK );.
51f0: 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70  .    assert( pOp
5200: 3e 3d 61 4f 70 20 26 26 20 70 4f 70 3c 26 61 4f  >=aOp && pOp<&aO
5210: 70 5b 70 2d 3e 6e 4f 70 5d 29 3b 0a 23 69 66 64  p[p->nOp]);.#ifd
5220: 65 66 20 56 44 42 45 5f 50 52 4f 46 49 4c 45 0a  ef VDBE_PROFILE.
5230: 20 20 20 20 73 74 61 72 74 20 3d 20 73 71 6c 69      start = sqli
5240: 74 65 33 48 77 74 69 6d 65 28 29 3b 0a 23 65 6e  te3Hwtime();.#en
5250: 64 69 66 0a 20 20 20 20 6e 56 6d 53 74 65 70 2b  dif.    nVmStep+
5260: 2b 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  +;.#ifdef SQLITE
5270: 5f 45 4e 41 42 4c 45 5f 53 54 4d 54 5f 53 43 41  _ENABLE_STMT_SCA
5280: 4e 53 54 41 54 55 53 0a 20 20 20 20 69 66 28 20  NSTATUS.    if( 
5290: 70 2d 3e 61 6e 45 78 65 63 20 29 20 70 2d 3e 61  p->anExec ) p->a
52a0: 6e 45 78 65 63 5b 28 69 6e 74 29 28 70 4f 70 2d  nExec[(int)(pOp-
52b0: 61 4f 70 29 5d 2b 2b 3b 0a 23 65 6e 64 69 66 0a  aOp)]++;.#endif.
52c0: 0a 20 20 20 20 2f 2a 20 4f 6e 6c 79 20 61 6c 6c  .    /* Only all
52d0: 6f 77 20 74 72 61 63 69 6e 67 20 69 66 20 53 51  ow tracing if SQ
52e0: 4c 49 54 45 5f 44 45 42 55 47 20 69 73 20 64 65  LITE_DEBUG is de
52f0: 66 69 6e 65 64 2e 0a 20 20 20 20 2a 2f 0a 23 69  fined..    */.#i
5300: 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55  fdef SQLITE_DEBU
5310: 47 0a 20 20 20 20 69 66 28 20 64 62 2d 3e 66 6c  G.    if( db->fl
5320: 61 67 73 20 26 20 53 51 4c 49 54 45 5f 56 64 62  ags & SQLITE_Vdb
5330: 65 54 72 61 63 65 20 29 7b 0a 20 20 20 20 20 20  eTrace ){.      
5340: 73 71 6c 69 74 65 33 56 64 62 65 50 72 69 6e 74  sqlite3VdbePrint
5350: 4f 70 28 73 74 64 6f 75 74 2c 20 28 69 6e 74 29  Op(stdout, (int)
5360: 28 70 4f 70 20 2d 20 61 4f 70 29 2c 20 70 4f 70  (pOp - aOp), pOp
5370: 29 3b 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a  );.    }.#endif.
5380: 20 20 20 20 20 20 0a 0a 20 20 20 20 2f 2a 20 43        ..    /* C
5390: 68 65 63 6b 20 74 6f 20 73 65 65 20 69 66 20 77  heck to see if w
53a0: 65 20 6e 65 65 64 20 74 6f 20 73 69 6d 75 6c 61  e need to simula
53b0: 74 65 20 61 6e 20 69 6e 74 65 72 72 75 70 74 2e  te an interrupt.
53c0: 20 20 54 68 69 73 20 6f 6e 6c 79 20 68 61 70 70    This only happ
53d0: 65 6e 73 0a 20 20 20 20 2a 2a 20 69 66 20 77 65  ens.    ** if we
53e0: 20 68 61 76 65 20 61 20 73 70 65 63 69 61 6c 20   have a special 
53f0: 74 65 73 74 20 62 75 69 6c 64 2e 0a 20 20 20 20  test build..    
5400: 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  */.#ifdef SQLITE
5410: 5f 54 45 53 54 0a 20 20 20 20 69 66 28 20 73 71  _TEST.    if( sq
5420: 6c 69 74 65 33 5f 69 6e 74 65 72 72 75 70 74 5f  lite3_interrupt_
5430: 63 6f 75 6e 74 3e 30 20 29 7b 0a 20 20 20 20 20  count>0 ){.     
5440: 20 73 71 6c 69 74 65 33 5f 69 6e 74 65 72 72 75   sqlite3_interru
5450: 70 74 5f 63 6f 75 6e 74 2d 2d 3b 0a 20 20 20 20  pt_count--;.    
5460: 20 20 69 66 28 20 73 71 6c 69 74 65 33 5f 69 6e    if( sqlite3_in
5470: 74 65 72 72 75 70 74 5f 63 6f 75 6e 74 3d 3d 30  terrupt_count==0
5480: 20 29 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69   ){.        sqli
5490: 74 65 33 5f 69 6e 74 65 72 72 75 70 74 28 64 62  te3_interrupt(db
54a0: 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  );.      }.    }
54b0: 0a 23 65 6e 64 69 66 0a 0a 20 20 20 20 2f 2a 20  .#endif..    /* 
54c0: 53 61 6e 69 74 79 20 63 68 65 63 6b 69 6e 67 20  Sanity checking 
54d0: 6f 6e 20 6f 74 68 65 72 20 6f 70 65 72 61 6e 64  on other operand
54e0: 73 20 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49  s */.#ifdef SQLI
54f0: 54 45 5f 44 45 42 55 47 0a 20 20 20 20 7b 0a 20  TE_DEBUG.    {. 
5500: 20 20 20 20 20 75 38 20 6f 70 50 72 6f 70 65 72       u8 opProper
5510: 74 79 20 3d 20 73 71 6c 69 74 65 33 4f 70 63 6f  ty = sqlite3Opco
5520: 64 65 50 72 6f 70 65 72 74 79 5b 70 4f 70 2d 3e  deProperty[pOp->
5530: 6f 70 63 6f 64 65 5d 3b 0a 20 20 20 20 20 20 69  opcode];.      i
5540: 66 28 20 28 6f 70 50 72 6f 70 65 72 74 79 20 26  f( (opProperty &
5550: 20 4f 50 46 4c 47 5f 49 4e 31 29 21 3d 30 20 29   OPFLG_IN1)!=0 )
5560: 7b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74  {.        assert
5570: 28 20 70 4f 70 2d 3e 70 31 3e 30 20 29 3b 0a 20  ( pOp->p1>0 );. 
5580: 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70         assert( p
5590: 4f 70 2d 3e 70 31 3c 3d 28 70 2d 3e 6e 4d 65 6d  Op->p1<=(p->nMem
55a0: 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29  +1 - p->nCursor)
55b0: 20 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65   );.        asse
55c0: 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 26  rt( memIsValid(&
55d0: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 29 20 29  aMem[pOp->p1]) )
55e0: 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74  ;.        assert
55f0: 28 20 73 71 6c 69 74 65 33 56 64 62 65 43 68 65  ( sqlite3VdbeChe
5600: 63 6b 4d 65 6d 49 6e 76 61 72 69 61 6e 74 73 28  ckMemInvariants(
5610: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 29 20  &aMem[pOp->p1]) 
5620: 29 3b 0a 20 20 20 20 20 20 20 20 52 45 47 49 53  );.        REGIS
5630: 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70  TER_TRACE(pOp->p
5640: 31 2c 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31  1, &aMem[pOp->p1
5650: 5d 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  ]);.      }.    
5660: 20 20 69 66 28 20 28 6f 70 50 72 6f 70 65 72 74    if( (opPropert
5670: 79 20 26 20 4f 50 46 4c 47 5f 49 4e 32 29 21 3d  y & OPFLG_IN2)!=
5680: 30 20 29 7b 0a 20 20 20 20 20 20 20 20 61 73 73  0 ){.        ass
5690: 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e 30 20 29  ert( pOp->p2>0 )
56a0: 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74  ;.        assert
56b0: 28 20 70 4f 70 2d 3e 70 32 3c 3d 28 70 2d 3e 6e  ( pOp->p2<=(p->n
56c0: 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73  Mem+1 - p->nCurs
56d0: 6f 72 29 20 29 3b 0a 20 20 20 20 20 20 20 20 61  or) );.        a
56e0: 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69  ssert( memIsVali
56f0: 64 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d  d(&aMem[pOp->p2]
5700: 29 20 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73  ) );.        ass
5710: 65 72 74 28 20 73 71 6c 69 74 65 33 56 64 62 65  ert( sqlite3Vdbe
5720: 43 68 65 63 6b 4d 65 6d 49 6e 76 61 72 69 61 6e  CheckMemInvarian
5730: 74 73 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32  ts(&aMem[pOp->p2
5740: 5d 29 20 29 3b 0a 20 20 20 20 20 20 20 20 52 45  ]) );.        RE
5750: 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70  GISTER_TRACE(pOp
5760: 2d 3e 70 32 2c 20 26 61 4d 65 6d 5b 70 4f 70 2d  ->p2, &aMem[pOp-
5770: 3e 70 32 5d 29 3b 0a 20 20 20 20 20 20 7d 0a 20  >p2]);.      }. 
5780: 20 20 20 20 20 69 66 28 20 28 6f 70 50 72 6f 70       if( (opProp
5790: 65 72 74 79 20 26 20 4f 50 46 4c 47 5f 49 4e 33  erty & OPFLG_IN3
57a0: 29 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20  )!=0 ){.        
57b0: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e  assert( pOp->p3>
57c0: 30 20 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73  0 );.        ass
57d0: 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c 3d 28 70  ert( pOp->p3<=(p
57e0: 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43  ->nMem+1 - p->nC
57f0: 75 72 73 6f 72 29 20 29 3b 0a 20 20 20 20 20 20  ursor) );.      
5800: 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56    assert( memIsV
5810: 61 6c 69 64 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e  alid(&aMem[pOp->
5820: 70 33 5d 29 20 29 3b 0a 20 20 20 20 20 20 20 20  p3]) );.        
5830: 61 73 73 65 72 74 28 20 73 71 6c 69 74 65 33 56  assert( sqlite3V
5840: 64 62 65 43 68 65 63 6b 4d 65 6d 49 6e 76 61 72  dbeCheckMemInvar
5850: 69 61 6e 74 73 28 26 61 4d 65 6d 5b 70 4f 70 2d  iants(&aMem[pOp-
5860: 3e 70 33 5d 29 20 29 3b 0a 20 20 20 20 20 20 20  >p3]) );.       
5870: 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28   REGISTER_TRACE(
5880: 70 4f 70 2d 3e 70 33 2c 20 26 61 4d 65 6d 5b 70  pOp->p3, &aMem[p
5890: 4f 70 2d 3e 70 33 5d 29 3b 0a 20 20 20 20 20 20  Op->p3]);.      
58a0: 7d 0a 20 20 20 20 20 20 69 66 28 20 28 6f 70 50  }.      if( (opP
58b0: 72 6f 70 65 72 74 79 20 26 20 4f 50 46 4c 47 5f  roperty & OPFLG_
58c0: 4f 55 54 32 29 21 3d 30 20 29 7b 0a 20 20 20 20  OUT2)!=0 ){.    
58d0: 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d      assert( pOp-
58e0: 3e 70 32 3e 30 20 29 3b 0a 20 20 20 20 20 20 20  >p2>0 );.       
58f0: 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32   assert( pOp->p2
5900: 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70  <=(p->nMem+1 - p
5910: 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20  ->nCursor) );.  
5920: 20 20 20 20 20 20 6d 65 6d 41 62 6f 75 74 54 6f        memAboutTo
5930: 43 68 61 6e 67 65 28 70 2c 20 26 61 4d 65 6d 5b  Change(p, &aMem[
5940: 70 4f 70 2d 3e 70 32 5d 29 3b 0a 20 20 20 20 20  pOp->p2]);.     
5950: 20 7d 0a 20 20 20 20 20 20 69 66 28 20 28 6f 70   }.      if( (op
5960: 50 72 6f 70 65 72 74 79 20 26 20 4f 50 46 4c 47  Property & OPFLG
5970: 5f 4f 55 54 33 29 21 3d 30 20 29 7b 0a 20 20 20  _OUT3)!=0 ){.   
5980: 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70       assert( pOp
5990: 2d 3e 70 33 3e 30 20 29 3b 0a 20 20 20 20 20 20  ->p3>0 );.      
59a0: 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
59b0: 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20  3<=(p->nMem+1 - 
59c0: 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20  p->nCursor) );. 
59d0: 20 20 20 20 20 20 20 6d 65 6d 41 62 6f 75 74 54         memAboutT
59e0: 6f 43 68 61 6e 67 65 28 70 2c 20 26 61 4d 65 6d  oChange(p, &aMem
59f0: 5b 70 4f 70 2d 3e 70 33 5d 29 3b 0a 20 20 20 20  [pOp->p3]);.    
5a00: 20 20 7d 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66    }.    }.#endif
5a10: 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c  .#if defined(SQL
5a20: 49 54 45 5f 44 45 42 55 47 29 20 7c 7c 20 64 65  ITE_DEBUG) || de
5a30: 66 69 6e 65 64 28 56 44 42 45 5f 50 52 4f 46 49  fined(VDBE_PROFI
5a40: 4c 45 29 0a 20 20 20 20 70 4f 72 69 67 4f 70 20  LE).    pOrigOp 
5a50: 3d 20 70 4f 70 3b 0a 23 65 6e 64 69 66 0a 20 20  = pOp;.#endif.  
5a60: 0a 20 20 20 20 73 77 69 74 63 68 28 20 70 4f 70  .    switch( pOp
5a70: 2d 3e 6f 70 63 6f 64 65 20 29 7b 0a 0a 2f 2a 2a  ->opcode ){../**
5a80: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5a90: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5aa0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5ab0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5ac0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 2a 2a 20 57  ***********.** W
5ad0: 68 61 74 20 66 6f 6c 6c 6f 77 73 20 69 73 20 61  hat follows is a
5ae0: 20 6d 61 73 73 69 76 65 20 73 77 69 74 63 68 20   massive switch 
5af0: 73 74 61 74 65 6d 65 6e 74 20 77 68 65 72 65 20  statement where 
5b00: 65 61 63 68 20 63 61 73 65 20 69 6d 70 6c 65 6d  each case implem
5b10: 65 6e 74 73 20 61 0a 2a 2a 20 73 65 70 61 72 61  ents a.** separa
5b20: 74 65 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 69  te instruction i
5b30: 6e 20 74 68 65 20 76 69 72 74 75 61 6c 20 6d 61  n the virtual ma
5b40: 63 68 69 6e 65 2e 20 20 49 66 20 77 65 20 66 6f  chine.  If we fo
5b50: 6c 6c 6f 77 20 74 68 65 20 75 73 75 61 6c 0a 2a  llow the usual.*
5b60: 2a 20 69 6e 64 65 6e 74 61 74 69 6f 6e 20 63 6f  * indentation co
5b70: 6e 76 65 6e 74 69 6f 6e 73 2c 20 65 61 63 68 20  nventions, each 
5b80: 63 61 73 65 20 73 68 6f 75 6c 64 20 62 65 20 69  case should be i
5b90: 6e 64 65 6e 74 65 64 20 62 79 20 36 20 73 70 61  ndented by 6 spa
5ba0: 63 65 73 2e 20 20 42 75 74 0a 2a 2a 20 74 68 61  ces.  But.** tha
5bb0: 74 20 69 73 20 61 20 6c 6f 74 20 6f 66 20 77 61  t is a lot of wa
5bc0: 73 74 65 64 20 73 70 61 63 65 20 6f 6e 20 74 68  sted space on th
5bd0: 65 20 6c 65 66 74 20 6d 61 72 67 69 6e 2e 20 20  e left margin.  
5be0: 53 6f 20 74 68 65 20 63 6f 64 65 20 77 69 74 68  So the code with
5bf0: 69 6e 0a 2a 2a 20 74 68 65 20 73 77 69 74 63 68  in.** the switch
5c00: 20 73 74 61 74 65 6d 65 6e 74 20 77 69 6c 6c 20   statement will 
5c10: 62 72 65 61 6b 20 77 69 74 68 20 63 6f 6e 76 65  break with conve
5c20: 6e 74 69 6f 6e 20 61 6e 64 20 62 65 20 66 6c 75  ntion and be flu
5c30: 73 68 2d 6c 65 66 74 2e 20 41 6e 6f 74 68 65 72  sh-left. Another
5c40: 0a 2a 2a 20 62 69 67 20 63 6f 6d 6d 65 6e 74 20  .** big comment 
5c50: 28 73 69 6d 69 6c 61 72 20 74 6f 20 74 68 69 73  (similar to this
5c60: 20 6f 6e 65 29 20 77 69 6c 6c 20 6d 61 72 6b 20   one) will mark 
5c70: 74 68 65 20 70 6f 69 6e 74 20 69 6e 20 74 68 65  the point in the
5c80: 20 63 6f 64 65 20 77 68 65 72 65 0a 2a 2a 20 77   code where.** w
5c90: 65 20 74 72 61 6e 73 69 74 69 6f 6e 20 62 61 63  e transition bac
5ca0: 6b 20 74 6f 20 6e 6f 72 6d 61 6c 20 69 6e 64 65  k to normal inde
5cb0: 6e 74 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54  ntation..**.** T
5cc0: 68 65 20 66 6f 72 6d 61 74 74 69 6e 67 20 6f 66  he formatting of
5cd0: 20 65 61 63 68 20 63 61 73 65 20 69 73 20 69 6d   each case is im
5ce0: 70 6f 72 74 61 6e 74 2e 20 20 54 68 65 20 6d 61  portant.  The ma
5cf0: 6b 65 66 69 6c 65 20 66 6f 72 20 53 51 4c 69 74  kefile for SQLit
5d00: 65 0a 2a 2a 20 67 65 6e 65 72 61 74 65 73 20 74  e.** generates t
5d10: 77 6f 20 43 20 66 69 6c 65 73 20 22 6f 70 63 6f  wo C files "opco
5d20: 64 65 73 2e 68 22 20 61 6e 64 20 22 6f 70 63 6f  des.h" and "opco
5d30: 64 65 73 2e 63 22 20 62 79 20 73 63 61 6e 6e 69  des.c" by scanni
5d40: 6e 67 20 74 68 69 73 0a 2a 2a 20 66 69 6c 65 20  ng this.** file 
5d50: 6c 6f 6f 6b 69 6e 67 20 66 6f 72 20 6c 69 6e 65  looking for line
5d60: 73 20 74 68 61 74 20 62 65 67 69 6e 20 77 69 74  s that begin wit
5d70: 68 20 22 63 61 73 65 20 4f 50 5f 22 2e 20 20 54  h "case OP_".  T
5d80: 68 65 20 6f 70 63 6f 64 65 73 2e 68 20 66 69 6c  he opcodes.h fil
5d90: 65 73 0a 2a 2a 20 77 69 6c 6c 20 62 65 20 66 69  es.** will be fi
5da0: 6c 6c 65 64 20 77 69 74 68 20 23 64 65 66 69 6e  lled with #defin
5db0: 65 73 20 74 68 61 74 20 67 69 76 65 20 75 6e 69  es that give uni
5dc0: 71 75 65 20 69 6e 74 65 67 65 72 20 76 61 6c 75  que integer valu
5dd0: 65 73 20 74 6f 20 65 61 63 68 0a 2a 2a 20 6f 70  es to each.** op
5de0: 63 6f 64 65 20 61 6e 64 20 74 68 65 20 6f 70 63  code and the opc
5df0: 6f 64 65 73 2e 63 20 66 69 6c 65 20 69 73 20 66  odes.c file is f
5e00: 69 6c 6c 65 64 20 77 69 74 68 20 61 6e 20 61 72  illed with an ar
5e10: 72 61 79 20 6f 66 20 73 74 72 69 6e 67 73 20 77  ray of strings w
5e20: 68 65 72 65 0a 2a 2a 20 65 61 63 68 20 73 74 72  here.** each str
5e30: 69 6e 67 20 69 73 20 74 68 65 20 73 79 6d 62 6f  ing is the symbo
5e40: 6c 69 63 20 6e 61 6d 65 20 66 6f 72 20 74 68 65  lic name for the
5e50: 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 6f   corresponding o
5e60: 70 63 6f 64 65 2e 20 20 49 66 20 74 68 65 0a 2a  pcode.  If the.*
5e70: 2a 20 63 61 73 65 20 73 74 61 74 65 6d 65 6e 74  * case statement
5e80: 20 69 73 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20   is followed by 
5e90: 61 20 63 6f 6d 6d 65 6e 74 20 6f 66 20 74 68 65  a comment of the
5ea0: 20 66 6f 72 6d 20 22 2f 23 20 73 61 6d 65 20 61   form "/# same a
5eb0: 73 20 2e 2e 2e 20 23 2f 22 0a 2a 2a 20 74 68 61  s ... #/".** tha
5ec0: 74 20 63 6f 6d 6d 65 6e 74 20 69 73 20 75 73 65  t comment is use
5ed0: 64 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 20 74  d to determine t
5ee0: 68 65 20 70 61 72 74 69 63 75 6c 61 72 20 76 61  he particular va
5ef0: 6c 75 65 20 6f 66 20 74 68 65 20 6f 70 63 6f 64  lue of the opcod
5f00: 65 2e 0a 2a 2a 0a 2a 2a 20 4f 74 68 65 72 20 6b  e..**.** Other k
5f10: 65 79 77 6f 72 64 73 20 69 6e 20 74 68 65 20 63  eywords in the c
5f20: 6f 6d 6d 65 6e 74 20 74 68 61 74 20 66 6f 6c 6c  omment that foll
5f30: 6f 77 73 20 65 61 63 68 20 63 61 73 65 20 61 72  ows each case ar
5f40: 65 20 75 73 65 64 20 74 6f 0a 2a 2a 20 63 6f 6e  e used to.** con
5f50: 73 74 72 75 63 74 20 74 68 65 20 4f 50 46 4c 47  struct the OPFLG
5f60: 5f 49 4e 49 54 49 41 4c 49 5a 45 52 20 76 61 6c  _INITIALIZER val
5f70: 75 65 20 74 68 61 74 20 69 6e 69 74 69 61 6c 69  ue that initiali
5f80: 7a 65 73 20 6f 70 63 6f 64 65 50 72 6f 70 65 72  zes opcodeProper
5f90: 74 79 5b 5d 2e 0a 2a 2a 20 4b 65 79 77 6f 72 64  ty[]..** Keyword
5fa0: 73 20 69 6e 63 6c 75 64 65 3a 20 69 6e 31 2c 20  s include: in1, 
5fb0: 69 6e 32 2c 20 69 6e 33 2c 20 6f 75 74 32 2c 20  in2, in3, out2, 
5fc0: 6f 75 74 33 2e 20 20 53 65 65 0a 2a 2a 20 74 68  out3.  See.** th
5fd0: 65 20 6d 6b 6f 70 63 6f 64 65 68 2e 61 77 6b 20  e mkopcodeh.awk 
5fe0: 73 63 72 69 70 74 20 66 6f 72 20 61 64 64 69 74  script for addit
5ff0: 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f  ional informatio
6000: 6e 2e 0a 2a 2a 0a 2a 2a 20 44 6f 63 75 6d 65 6e  n..**.** Documen
6010: 74 61 74 69 6f 6e 20 61 62 6f 75 74 20 56 44 42  tation about VDB
6020: 45 20 6f 70 63 6f 64 65 73 20 69 73 20 67 65 6e  E opcodes is gen
6030: 65 72 61 74 65 64 20 62 79 20 73 63 61 6e 6e 69  erated by scanni
6040: 6e 67 20 74 68 69 73 20 66 69 6c 65 0a 2a 2a 20  ng this file.** 
6050: 66 6f 72 20 6c 69 6e 65 73 20 6f 66 20 74 68 61  for lines of tha
6060: 74 20 63 6f 6e 74 61 69 6e 20 22 4f 70 63 6f 64  t contain "Opcod
6070: 65 3a 22 2e 20 20 54 68 61 74 20 6c 69 6e 65 20  e:".  That line 
6080: 61 6e 64 20 61 6c 6c 20 73 75 62 73 65 71 75 65  and all subseque
6090: 6e 74 0a 2a 2a 20 63 6f 6d 6d 65 6e 74 20 6c 69  nt.** comment li
60a0: 6e 65 73 20 61 72 65 20 75 73 65 64 20 69 6e 20  nes are used in 
60b0: 74 68 65 20 67 65 6e 65 72 61 74 69 6f 6e 20 6f  the generation o
60c0: 66 20 74 68 65 20 6f 70 63 6f 64 65 2e 68 74 6d  f the opcode.htm
60d0: 6c 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f 6e 0a  l documentation.
60e0: 2a 2a 20 66 69 6c 65 2e 0a 2a 2a 0a 2a 2a 20 53  ** file..**.** S
60f0: 55 4d 4d 41 52 59 3a 0a 2a 2a 0a 2a 2a 20 20 20  UMMARY:.**.**   
6100: 20 20 46 6f 72 6d 61 74 74 69 6e 67 20 69 73 20    Formatting is 
6110: 69 6d 70 6f 72 74 61 6e 74 20 74 6f 20 73 63 72  important to scr
6120: 69 70 74 73 20 74 68 61 74 20 73 63 61 6e 20 74  ipts that scan t
6130: 68 69 73 20 66 69 6c 65 2e 0a 2a 2a 20 20 20 20  his file..**    
6140: 20 44 6f 20 6e 6f 74 20 64 65 76 69 61 74 65 20   Do not deviate 
6150: 66 72 6f 6d 20 74 68 65 20 66 6f 72 6d 61 74 74  from the formatt
6160: 69 6e 67 20 73 74 79 6c 65 20 63 75 72 72 65 6e  ing style curren
6170: 74 6c 79 20 69 6e 20 75 73 65 2e 0a 2a 2a 0a 2a  tly in use..**.*
6180: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
6190: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
61a0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
61b0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
61c0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a 2f  ************/../
61d0: 2a 20 4f 70 63 6f 64 65 3a 20 20 47 6f 74 6f 20  * Opcode:  Goto 
61e0: 2a 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a  * P2 * * *.**.**
61f0: 20 41 6e 20 75 6e 63 6f 6e 64 69 74 69 6f 6e 61   An unconditiona
6200: 6c 20 6a 75 6d 70 20 74 6f 20 61 64 64 72 65 73  l jump to addres
6210: 73 20 50 32 2e 0a 2a 2a 20 54 68 65 20 6e 65 78  s P2..** The nex
6220: 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 65 78  t instruction ex
6230: 65 63 75 74 65 64 20 77 69 6c 6c 20 62 65 20 0a  ecuted will be .
6240: 2a 2a 20 74 68 65 20 6f 6e 65 20 61 74 20 69 6e  ** the one at in
6250: 64 65 78 20 50 32 20 66 72 6f 6d 20 74 68 65 20  dex P2 from the 
6260: 62 65 67 69 6e 6e 69 6e 67 20 6f 66 0a 2a 2a 20  beginning of.** 
6270: 74 68 65 20 70 72 6f 67 72 61 6d 2e 0a 2a 2a 0a  the program..**.
6280: 2a 2a 20 54 68 65 20 50 31 20 70 61 72 61 6d 65  ** The P1 parame
6290: 74 65 72 20 69 73 20 6e 6f 74 20 61 63 74 75 61  ter is not actua
62a0: 6c 6c 79 20 75 73 65 64 20 62 79 20 74 68 69 73  lly used by this
62b0: 20 6f 70 63 6f 64 65 2e 20 20 48 6f 77 65 76 65   opcode.  Howeve
62c0: 72 2c 20 69 74 0a 2a 2a 20 69 73 20 73 6f 6d 65  r, it.** is some
62d0: 74 69 6d 65 73 20 73 65 74 20 74 6f 20 31 20 69  times set to 1 i
62e0: 6e 73 74 65 61 64 20 6f 66 20 30 20 61 73 20 61  nstead of 0 as a
62f0: 20 68 69 6e 74 20 74 6f 20 74 68 65 20 63 6f 6d   hint to the com
6300: 6d 61 6e 64 2d 6c 69 6e 65 20 73 68 65 6c 6c 0a  mand-line shell.
6310: 2a 2a 20 74 68 61 74 20 74 68 69 73 20 47 6f 74  ** that this Got
6320: 6f 20 69 73 20 74 68 65 20 62 6f 74 74 6f 6d 20  o is the bottom 
6330: 6f 66 20 61 20 6c 6f 6f 70 20 61 6e 64 20 74 68  of a loop and th
6340: 61 74 20 74 68 65 20 6c 69 6e 65 73 20 66 72 6f  at the lines fro
6350: 6d 20 50 32 20 64 6f 77 6e 0a 2a 2a 20 74 6f 20  m P2 down.** to 
6360: 74 68 65 20 63 75 72 72 65 6e 74 20 6c 69 6e 65  the current line
6370: 20 73 68 6f 75 6c 64 20 62 65 20 69 6e 64 65 6e   should be inden
6380: 74 65 64 20 66 6f 72 20 45 58 50 4c 41 49 4e 20  ted for EXPLAIN 
6390: 6f 75 74 70 75 74 2e 0a 2a 2f 0a 63 61 73 65 20  output..*/.case 
63a0: 4f 50 5f 47 6f 74 6f 3a 20 7b 20 20 20 20 20 20  OP_Goto: {      
63b0: 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a         /* jump *
63c0: 2f 0a 6a 75 6d 70 5f 74 6f 5f 70 32 5f 61 6e 64  /.jump_to_p2_and
63d0: 5f 63 68 65 63 6b 5f 66 6f 72 5f 69 6e 74 65 72  _check_for_inter
63e0: 72 75 70 74 3a 0a 20 20 70 4f 70 20 3d 20 26 61  rupt:.  pOp = &a
63f0: 4f 70 5b 70 4f 70 2d 3e 70 32 20 2d 20 31 5d 3b  Op[pOp->p2 - 1];
6400: 0a 0a 20 20 2f 2a 20 4f 70 63 6f 64 65 73 20 74  ..  /* Opcodes t
6410: 68 61 74 20 61 72 65 20 75 73 65 64 20 61 73 20  hat are used as 
6420: 74 68 65 20 62 6f 74 74 6f 6d 20 6f 66 20 61 20  the bottom of a 
6430: 6c 6f 6f 70 20 28 4f 50 5f 4e 65 78 74 2c 20 4f  loop (OP_Next, O
6440: 50 5f 50 72 65 76 2c 0a 20 20 2a 2a 20 4f 50 5f  P_Prev,.  ** OP_
6450: 56 4e 65 78 74 2c 20 6f 72 20 4f 50 5f 53 6f 72  VNext, or OP_Sor
6460: 74 65 72 4e 65 78 74 29 20 61 6c 6c 20 6a 75 6d  terNext) all jum
6470: 70 20 68 65 72 65 20 75 70 6f 6e 0a 20 20 2a 2a  p here upon.  **
6480: 20 63 6f 6d 70 6c 65 74 69 6f 6e 2e 20 20 43 68   completion.  Ch
6490: 65 63 6b 20 74 6f 20 73 65 65 20 69 66 20 73 71  eck to see if sq
64a0: 6c 69 74 65 33 5f 69 6e 74 65 72 72 75 70 74 28  lite3_interrupt(
64b0: 29 20 68 61 73 20 62 65 65 6e 20 63 61 6c 6c 65  ) has been calle
64c0: 64 0a 20 20 2a 2a 20 6f 72 20 69 66 20 74 68 65  d.  ** or if the
64d0: 20 70 72 6f 67 72 65 73 73 20 63 61 6c 6c 62 61   progress callba
64e0: 63 6b 20 6e 65 65 64 73 20 74 6f 20 62 65 20 69  ck needs to be i
64f0: 6e 76 6f 6b 65 64 2e 20 0a 20 20 2a 2a 0a 20 20  nvoked. .  **.  
6500: 2a 2a 20 54 68 69 73 20 63 6f 64 65 20 75 73 65  ** This code use
6510: 73 20 75 6e 73 74 72 75 63 74 75 72 65 64 20 22  s unstructured "
6520: 67 6f 74 6f 22 20 73 74 61 74 65 6d 65 6e 74 73  goto" statements
6530: 20 61 6e 64 20 64 6f 65 73 20 6e 6f 74 20 6c 6f   and does not lo
6540: 6f 6b 20 63 6c 65 61 6e 2e 0a 20 20 2a 2a 20 42  ok clean..  ** B
6550: 75 74 20 74 68 61 74 20 69 73 20 6e 6f 74 20 64  ut that is not d
6560: 75 65 20 74 6f 20 73 6c 6f 70 70 79 20 63 6f 64  ue to sloppy cod
6570: 69 6e 67 20 68 61 62 69 74 73 2e 20 54 68 65 20  ing habits. The 
6580: 63 6f 64 65 20 69 73 20 77 72 69 74 74 65 6e 20  code is written 
6590: 74 68 69 73 0a 20 20 2a 2a 20 77 61 79 20 66 6f  this.  ** way fo
65a0: 72 20 70 65 72 66 6f 72 6d 61 6e 63 65 2c 20 74  r performance, t
65b0: 6f 20 61 76 6f 69 64 20 68 61 76 69 6e 67 20 74  o avoid having t
65c0: 6f 20 72 75 6e 20 74 68 65 20 69 6e 74 65 72 72  o run the interr
65d0: 75 70 74 20 61 6e 64 20 70 72 6f 67 72 65 73 73  upt and progress
65e0: 0a 20 20 2a 2a 20 63 68 65 63 6b 73 20 6f 6e 20  .  ** checks on 
65f0: 65 76 65 72 79 20 6f 70 63 6f 64 65 2e 20 20 54  every opcode.  T
6600: 68 69 73 20 68 65 6c 70 73 20 73 71 6c 69 74 65  his helps sqlite
6610: 33 5f 73 74 65 70 28 29 20 74 6f 20 72 75 6e 20  3_step() to run 
6620: 61 62 6f 75 74 20 31 2e 35 25 0a 20 20 2a 2a 20  about 1.5%.  ** 
6630: 66 61 73 74 65 72 20 61 63 63 6f 72 64 69 6e 67  faster according
6640: 20 74 6f 20 22 76 61 6c 67 72 69 6e 64 20 2d 2d   to "valgrind --
6650: 74 6f 6f 6c 3d 63 61 63 68 65 67 72 69 6e 64 22  tool=cachegrind"
6660: 20 2a 2f 0a 63 68 65 63 6b 5f 66 6f 72 5f 69 6e   */.check_for_in
6670: 74 65 72 72 75 70 74 3a 0a 20 20 69 66 28 20 64  terrupt:.  if( d
6680: 62 2d 3e 75 31 2e 69 73 49 6e 74 65 72 72 75 70  b->u1.isInterrup
6690: 74 65 64 20 29 20 67 6f 74 6f 20 61 62 6f 72 74  ted ) goto abort
66a0: 5f 64 75 65 5f 74 6f 5f 69 6e 74 65 72 72 75 70  _due_to_interrup
66b0: 74 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  t;.#ifndef SQLIT
66c0: 45 5f 4f 4d 49 54 5f 50 52 4f 47 52 45 53 53 5f  E_OMIT_PROGRESS_
66d0: 43 41 4c 4c 42 41 43 4b 0a 20 20 2f 2a 20 43 61  CALLBACK.  /* Ca
66e0: 6c 6c 20 74 68 65 20 70 72 6f 67 72 65 73 73 20  ll the progress 
66f0: 63 61 6c 6c 62 61 63 6b 20 69 66 20 69 74 20 69  callback if it i
6700: 73 20 63 6f 6e 66 69 67 75 72 65 64 20 61 6e 64  s configured and
6710: 20 74 68 65 20 72 65 71 75 69 72 65 64 20 6e 75   the required nu
6720: 6d 62 65 72 0a 20 20 2a 2a 20 6f 66 20 56 44 42  mber.  ** of VDB
6730: 45 20 6f 70 73 20 68 61 76 65 20 62 65 65 6e 20  E ops have been 
6740: 65 78 65 63 75 74 65 64 20 28 65 69 74 68 65 72  executed (either
6750: 20 73 69 6e 63 65 20 74 68 69 73 20 69 6e 76 6f   since this invo
6760: 63 61 74 69 6f 6e 20 6f 66 0a 20 20 2a 2a 20 73  cation of.  ** s
6770: 71 6c 69 74 65 33 56 64 62 65 45 78 65 63 28 29  qlite3VdbeExec()
6780: 20 6f 72 20 73 69 6e 63 65 20 6c 61 73 74 20 74   or since last t
6790: 69 6d 65 20 74 68 65 20 70 72 6f 67 72 65 73 73  ime the progress
67a0: 20 63 61 6c 6c 62 61 63 6b 20 77 61 73 20 63 61   callback was ca
67b0: 6c 6c 65 64 29 2e 0a 20 20 2a 2a 20 49 66 20 74  lled)..  ** If t
67c0: 68 65 20 70 72 6f 67 72 65 73 73 20 63 61 6c 6c  he progress call
67d0: 62 61 63 6b 20 72 65 74 75 72 6e 73 20 6e 6f 6e  back returns non
67e0: 2d 7a 65 72 6f 2c 20 65 78 69 74 20 74 68 65 20  -zero, exit the 
67f0: 76 69 72 74 75 61 6c 20 6d 61 63 68 69 6e 65 20  virtual machine 
6800: 77 69 74 68 0a 20 20 2a 2a 20 61 20 72 65 74 75  with.  ** a retu
6810: 72 6e 20 63 6f 64 65 20 53 51 4c 49 54 45 5f 41  rn code SQLITE_A
6820: 42 4f 52 54 2e 0a 20 20 2a 2f 0a 20 20 69 66 28  BORT..  */.  if(
6830: 20 6e 56 6d 53 74 65 70 3e 3d 6e 50 72 6f 67 72   nVmStep>=nProgr
6840: 65 73 73 4c 69 6d 69 74 20 26 26 20 64 62 2d 3e  essLimit && db->
6850: 78 50 72 6f 67 72 65 73 73 21 3d 30 20 29 7b 0a  xProgress!=0 ){.
6860: 20 20 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e      assert( db->
6870: 6e 50 72 6f 67 72 65 73 73 4f 70 73 21 3d 30 20  nProgressOps!=0 
6880: 29 3b 0a 20 20 20 20 6e 50 72 6f 67 72 65 73 73  );.    nProgress
6890: 4c 69 6d 69 74 20 3d 20 6e 56 6d 53 74 65 70 20  Limit = nVmStep 
68a0: 2b 20 64 62 2d 3e 6e 50 72 6f 67 72 65 73 73 4f  + db->nProgressO
68b0: 70 73 20 2d 20 28 6e 56 6d 53 74 65 70 25 64 62  ps - (nVmStep%db
68c0: 2d 3e 6e 50 72 6f 67 72 65 73 73 4f 70 73 29 3b  ->nProgressOps);
68d0: 0a 20 20 20 20 69 66 28 20 64 62 2d 3e 78 50 72  .    if( db->xPr
68e0: 6f 67 72 65 73 73 28 64 62 2d 3e 70 50 72 6f 67  ogress(db->pProg
68f0: 72 65 73 73 41 72 67 29 20 29 7b 0a 20 20 20 20  ressArg) ){.    
6900: 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 49 4e    rc = SQLITE_IN
6910: 54 45 52 52 55 50 54 3b 0a 20 20 20 20 20 20 67  TERRUPT;.      g
6920: 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
6930: 5f 65 72 72 6f 72 3b 0a 20 20 20 20 7d 0a 20 20  _error;.    }.  
6940: 7d 0a 23 65 6e 64 69 66 0a 20 20 0a 20 20 62 72  }.#endif.  .  br
6950: 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
6960: 65 3a 20 20 47 6f 73 75 62 20 50 31 20 50 32 20  e:  Gosub P1 P2 
6970: 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 57 72 69 74  * * *.**.** Writ
6980: 65 20 74 68 65 20 63 75 72 72 65 6e 74 20 61 64  e the current ad
6990: 64 72 65 73 73 20 6f 6e 74 6f 20 72 65 67 69 73  dress onto regis
69a0: 74 65 72 20 50 31 0a 2a 2a 20 61 6e 64 20 74 68  ter P1.** and th
69b0: 65 6e 20 6a 75 6d 70 20 74 6f 20 61 64 64 72 65  en jump to addre
69c0: 73 73 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f  ss P2..*/.case O
69d0: 50 5f 47 6f 73 75 62 3a 20 7b 20 20 20 20 20 20  P_Gosub: {      
69e0: 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f        /* jump */
69f0: 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
6a00: 70 31 3e 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c  p1>0 && pOp->p1<
6a10: 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d  =(p->nMem+1 - p-
6a20: 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 70  >nCursor) );.  p
6a30: 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In1 = &aMem[pOp-
6a40: 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p1];.  assert( 
6a50: 56 64 62 65 4d 65 6d 44 79 6e 61 6d 69 63 28 70  VdbeMemDynamic(p
6a60: 49 6e 31 29 3d 3d 30 20 29 3b 0a 20 20 6d 65 6d  In1)==0 );.  mem
6a70: 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c  AboutToChange(p,
6a80: 20 70 49 6e 31 29 3b 0a 20 20 70 49 6e 31 2d 3e   pIn1);.  pIn1->
6a90: 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b  flags = MEM_Int;
6aa0: 0a 20 20 70 49 6e 31 2d 3e 75 2e 69 20 3d 20 28  .  pIn1->u.i = (
6ab0: 69 6e 74 29 28 70 4f 70 2d 61 4f 70 29 3b 0a 20  int)(pOp-aOp);. 
6ac0: 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28   REGISTER_TRACE(
6ad0: 70 4f 70 2d 3e 70 31 2c 20 70 49 6e 31 29 3b 0a  pOp->p1, pIn1);.
6ae0: 0a 20 20 2f 2a 20 4d 6f 73 74 20 6a 75 6d 70 20  .  /* Most jump 
6af0: 6f 70 65 72 61 74 69 6f 6e 73 20 64 6f 20 61 20  operations do a 
6b00: 67 6f 74 6f 20 74 6f 20 74 68 69 73 20 73 70 6f  goto to this spo
6b10: 74 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 75 70  t in order to up
6b20: 64 61 74 65 0a 20 20 2a 2a 20 74 68 65 20 70 4f  date.  ** the pO
6b30: 70 20 70 6f 69 6e 74 65 72 2e 20 2a 2f 0a 6a 75  p pointer. */.ju
6b40: 6d 70 5f 74 6f 5f 70 32 3a 0a 20 20 70 4f 70 20  mp_to_p2:.  pOp 
6b50: 3d 20 26 61 4f 70 5b 70 4f 70 2d 3e 70 32 20 2d  = &aOp[pOp->p2 -
6b60: 20 31 5d 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a   1];.  break;.}.
6b70: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 20 52 65 74  ./* Opcode:  Ret
6b80: 75 72 6e 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a  urn P1 * * * *.*
6b90: 2a 0a 2a 2a 20 4a 75 6d 70 20 74 6f 20 74 68 65  *.** Jump to the
6ba0: 20 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f   next instructio
6bb0: 6e 20 61 66 74 65 72 20 74 68 65 20 61 64 64 72  n after the addr
6bc0: 65 73 73 20 69 6e 20 72 65 67 69 73 74 65 72 20  ess in register 
6bd0: 50 31 2e 20 20 41 66 74 65 72 0a 2a 2a 20 74 68  P1.  After.** th
6be0: 65 20 6a 75 6d 70 2c 20 72 65 67 69 73 74 65 72  e jump, register
6bf0: 20 50 31 20 62 65 63 6f 6d 65 73 20 75 6e 64 65   P1 becomes unde
6c00: 66 69 6e 65 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f  fined..*/.case O
6c10: 50 5f 52 65 74 75 72 6e 3a 20 7b 20 20 20 20 20  P_Return: {     
6c20: 20 20 20 20 20 20 2f 2a 20 69 6e 31 20 2a 2f 0a        /* in1 */.
6c30: 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70    pIn1 = &aMem[p
6c40: 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72  Op->p1];.  asser
6c50: 74 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 3d 3d  t( pIn1->flags==
6c60: 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 70 4f 70  MEM_Int );.  pOp
6c70: 20 3d 20 26 61 4f 70 5b 70 49 6e 31 2d 3e 75 2e   = &aOp[pIn1->u.
6c80: 69 5d 3b 0a 20 20 70 49 6e 31 2d 3e 66 6c 61 67  i];.  pIn1->flag
6c90: 73 20 3d 20 4d 45 4d 5f 55 6e 64 65 66 69 6e 65  s = MEM_Undefine
6ca0: 64 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  d;.  break;.}../
6cb0: 2a 20 4f 70 63 6f 64 65 3a 20 49 6e 69 74 43 6f  * Opcode: InitCo
6cc0: 72 6f 75 74 69 6e 65 20 50 31 20 50 32 20 50 33  routine P1 P2 P3
6cd0: 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 53 65 74 20 75   * *.**.** Set u
6ce0: 70 20 72 65 67 69 73 74 65 72 20 50 31 20 73 6f  p register P1 so
6cf0: 20 74 68 61 74 20 69 74 20 77 69 6c 6c 20 59 69   that it will Yi
6d00: 65 6c 64 20 74 6f 20 74 68 65 20 63 6f 72 6f 75  eld to the corou
6d10: 74 69 6e 65 0a 2a 2a 20 6c 6f 63 61 74 65 64 20  tine.** located 
6d20: 61 74 20 61 64 64 72 65 73 73 20 50 33 2e 0a 2a  at address P3..*
6d30: 2a 0a 2a 2a 20 49 66 20 50 32 21 3d 30 20 74 68  *.** If P2!=0 th
6d40: 65 6e 20 74 68 65 20 63 6f 72 6f 75 74 69 6e 65  en the coroutine
6d50: 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20   implementation 
6d60: 69 6d 6d 65 64 69 61 74 65 6c 79 20 66 6f 6c 6c  immediately foll
6d70: 6f 77 73 0a 2a 2a 20 74 68 69 73 20 6f 70 63 6f  ows.** this opco
6d80: 64 65 2e 20 20 53 6f 20 6a 75 6d 70 20 6f 76 65  de.  So jump ove
6d90: 72 20 74 68 65 20 63 6f 72 6f 75 74 69 6e 65 20  r the coroutine 
6da0: 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 74  implementation t
6db0: 6f 0a 2a 2a 20 61 64 64 72 65 73 73 20 50 32 2e  o.** address P2.
6dc0: 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a  .**.** See also:
6dd0: 20 45 6e 64 43 6f 72 6f 75 74 69 6e 65 0a 2a 2f   EndCoroutine.*/
6de0: 0a 63 61 73 65 20 4f 50 5f 49 6e 69 74 43 6f 72  .case OP_InitCor
6df0: 6f 75 74 69 6e 65 3a 20 7b 20 20 20 20 20 2f 2a  outine: {     /*
6e00: 20 6a 75 6d 70 20 2a 2f 0a 20 20 61 73 73 65 72   jump */.  asser
6e10: 74 28 20 70 4f 70 2d 3e 70 31 3e 30 20 26 26 20  t( pOp->p1>0 && 
6e20: 20 70 4f 70 2d 3e 70 31 3c 3d 28 70 2d 3e 6e 4d   pOp->p1<=(p->nM
6e30: 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f  em+1 - p->nCurso
6e40: 72 29 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  r) );.  assert( 
6e50: 70 4f 70 2d 3e 70 32 3e 3d 30 20 26 26 20 70 4f  pOp->p2>=0 && pO
6e60: 70 2d 3e 70 32 3c 70 2d 3e 6e 4f 70 20 29 3b 0a  p->p2<p->nOp );.
6e70: 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
6e80: 33 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 33 3c  3>=0 && pOp->p3<
6e90: 70 2d 3e 6e 4f 70 20 29 3b 0a 20 20 70 4f 75 74  p->nOp );.  pOut
6ea0: 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31   = &aMem[pOp->p1
6eb0: 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 21 56 64  ];.  assert( !Vd
6ec0: 62 65 4d 65 6d 44 79 6e 61 6d 69 63 28 70 4f 75  beMemDynamic(pOu
6ed0: 74 29 20 29 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e  t) );.  pOut->u.
6ee0: 69 20 3d 20 70 4f 70 2d 3e 70 33 20 2d 20 31 3b  i = pOp->p3 - 1;
6ef0: 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d  .  pOut->flags =
6f00: 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20 69 66 28 20   MEM_Int;.  if( 
6f10: 70 4f 70 2d 3e 70 32 20 29 20 67 6f 74 6f 20 6a  pOp->p2 ) goto j
6f20: 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 62 72 65  ump_to_p2;.  bre
6f30: 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
6f40: 3a 20 20 45 6e 64 43 6f 72 6f 75 74 69 6e 65 20  :  EndCoroutine 
6f50: 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a  P1 * * * *.**.**
6f60: 20 54 68 65 20 69 6e 73 74 72 75 63 74 69 6f 6e   The instruction
6f70: 20 61 74 20 74 68 65 20 61 64 64 72 65 73 73 20   at the address 
6f80: 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 69  in register P1 i
6f90: 73 20 61 20 59 69 65 6c 64 2e 0a 2a 2a 20 4a 75  s a Yield..** Ju
6fa0: 6d 70 20 74 6f 20 74 68 65 20 50 32 20 70 61 72  mp to the P2 par
6fb0: 61 6d 65 74 65 72 20 6f 66 20 74 68 61 74 20 59  ameter of that Y
6fc0: 69 65 6c 64 2e 0a 2a 2a 20 41 66 74 65 72 20 74  ield..** After t
6fd0: 68 65 20 6a 75 6d 70 2c 20 72 65 67 69 73 74 65  he jump, registe
6fe0: 72 20 50 31 20 62 65 63 6f 6d 65 73 20 75 6e 64  r P1 becomes und
6ff0: 65 66 69 6e 65 64 2e 0a 2a 2a 0a 2a 2a 20 53 65  efined..**.** Se
7000: 65 20 61 6c 73 6f 3a 20 49 6e 69 74 43 6f 72 6f  e also: InitCoro
7010: 75 74 69 6e 65 0a 2a 2f 0a 63 61 73 65 20 4f 50  utine.*/.case OP
7020: 5f 45 6e 64 43 6f 72 6f 75 74 69 6e 65 3a 20 7b  _EndCoroutine: {
7030: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e             /* in
7040: 31 20 2a 2f 0a 20 20 56 64 62 65 4f 70 20 2a 70  1 */.  VdbeOp *p
7050: 43 61 6c 6c 65 72 3b 0a 20 20 70 49 6e 31 20 3d  Caller;.  pIn1 =
7060: 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b   &aMem[pOp->p1];
7070: 0a 20 20 61 73 73 65 72 74 28 20 70 49 6e 31 2d  .  assert( pIn1-
7080: 3e 66 6c 61 67 73 3d 3d 4d 45 4d 5f 49 6e 74 20  >flags==MEM_Int 
7090: 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 49 6e  );.  assert( pIn
70a0: 31 2d 3e 75 2e 69 3e 3d 30 20 26 26 20 70 49 6e  1->u.i>=0 && pIn
70b0: 31 2d 3e 75 2e 69 3c 70 2d 3e 6e 4f 70 20 29 3b  1->u.i<p->nOp );
70c0: 0a 20 20 70 43 61 6c 6c 65 72 20 3d 20 26 61 4f  .  pCaller = &aO
70d0: 70 5b 70 49 6e 31 2d 3e 75 2e 69 5d 3b 0a 20 20  p[pIn1->u.i];.  
70e0: 61 73 73 65 72 74 28 20 70 43 61 6c 6c 65 72 2d  assert( pCaller-
70f0: 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 59 69 65 6c  >opcode==OP_Yiel
7100: 64 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  d );.  assert( p
7110: 43 61 6c 6c 65 72 2d 3e 70 32 3e 3d 30 20 26 26  Caller->p2>=0 &&
7120: 20 70 43 61 6c 6c 65 72 2d 3e 70 32 3c 70 2d 3e   pCaller->p2<p->
7130: 6e 4f 70 20 29 3b 0a 20 20 70 4f 70 20 3d 20 26  nOp );.  pOp = &
7140: 61 4f 70 5b 70 43 61 6c 6c 65 72 2d 3e 70 32 20  aOp[pCaller->p2 
7150: 2d 20 31 5d 3b 0a 20 20 70 49 6e 31 2d 3e 66 6c  - 1];.  pIn1->fl
7160: 61 67 73 20 3d 20 4d 45 4d 5f 55 6e 64 65 66 69  ags = MEM_Undefi
7170: 6e 65 64 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  ned;.  break;.}.
7180: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 20 59 69 65  ./* Opcode:  Yie
7190: 6c 64 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  ld P1 P2 * * *.*
71a0: 2a 0a 2a 2a 20 53 77 61 70 20 74 68 65 20 70 72  *.** Swap the pr
71b0: 6f 67 72 61 6d 20 63 6f 75 6e 74 65 72 20 77 69  ogram counter wi
71c0: 74 68 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20  th the value in 
71d0: 72 65 67 69 73 74 65 72 20 50 31 2e 20 20 54 68  register P1.  Th
71e0: 69 73 0a 2a 2a 20 68 61 73 20 74 68 65 20 65 66  is.** has the ef
71f0: 66 65 63 74 20 6f 66 20 79 69 65 6c 64 69 6e 67  fect of yielding
7200: 20 74 6f 20 61 20 63 6f 72 6f 75 74 69 6e 65 2e   to a coroutine.
7210: 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 63 6f  .**.** If the co
7220: 72 6f 75 74 69 6e 65 20 74 68 61 74 20 69 73 20  routine that is 
7230: 6c 61 75 6e 63 68 65 64 20 62 79 20 74 68 69 73  launched by this
7240: 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 65 6e 64   instruction end
7250: 73 20 77 69 74 68 0a 2a 2a 20 59 69 65 6c 64 20  s with.** Yield 
7260: 6f 72 20 52 65 74 75 72 6e 20 74 68 65 6e 20 63  or Return then c
7270: 6f 6e 74 69 6e 75 65 20 74 6f 20 74 68 65 20 6e  ontinue to the n
7280: 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e  ext instruction.
7290: 20 20 42 75 74 20 69 66 0a 2a 2a 20 74 68 65 20    But if.** the 
72a0: 63 6f 72 6f 75 74 69 6e 65 20 6c 61 75 6e 63 68  coroutine launch
72b0: 65 64 20 62 79 20 74 68 69 73 20 69 6e 73 74 72  ed by this instr
72c0: 75 63 74 69 6f 6e 20 65 6e 64 73 20 77 69 74 68  uction ends with
72d0: 0a 2a 2a 20 45 6e 64 43 6f 72 6f 75 74 69 6e 65  .** EndCoroutine
72e0: 2c 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20 50  , then jump to P
72f0: 32 20 72 61 74 68 65 72 20 74 68 61 6e 20 63 6f  2 rather than co
7300: 6e 74 69 6e 75 69 6e 67 20 77 69 74 68 20 74 68  ntinuing with th
7310: 65 0a 2a 2a 20 6e 65 78 74 20 69 6e 73 74 72 75  e.** next instru
7320: 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 53 65 65  ction..**.** See
7330: 20 61 6c 73 6f 3a 20 49 6e 69 74 43 6f 72 6f 75   also: InitCorou
7340: 74 69 6e 65 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  tine.*/.case OP_
7350: 59 69 65 6c 64 3a 20 7b 20 20 20 20 20 20 20 20  Yield: {        
7360: 20 20 20 20 2f 2a 20 69 6e 31 2c 20 6a 75 6d 70      /* in1, jump
7370: 20 2a 2f 0a 20 20 69 6e 74 20 70 63 44 65 73 74   */.  int pcDest
7380: 3b 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d  ;.  pIn1 = &aMem
7390: 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
73a0: 65 72 74 28 20 56 64 62 65 4d 65 6d 44 79 6e 61  ert( VdbeMemDyna
73b0: 6d 69 63 28 70 49 6e 31 29 3d 3d 30 20 29 3b 0a  mic(pIn1)==0 );.
73c0: 20 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 3d 20    pIn1->flags = 
73d0: 4d 45 4d 5f 49 6e 74 3b 0a 20 20 70 63 44 65 73  MEM_Int;.  pcDes
73e0: 74 20 3d 20 28 69 6e 74 29 70 49 6e 31 2d 3e 75  t = (int)pIn1->u
73f0: 2e 69 3b 0a 20 20 70 49 6e 31 2d 3e 75 2e 69 20  .i;.  pIn1->u.i 
7400: 3d 20 28 69 6e 74 29 28 70 4f 70 20 2d 20 61 4f  = (int)(pOp - aO
7410: 70 29 3b 0a 20 20 52 45 47 49 53 54 45 52 5f 54  p);.  REGISTER_T
7420: 52 41 43 45 28 70 4f 70 2d 3e 70 31 2c 20 70 49  RACE(pOp->p1, pI
7430: 6e 31 29 3b 0a 20 20 70 4f 70 20 3d 20 26 61 4f  n1);.  pOp = &aO
7440: 70 5b 70 63 44 65 73 74 5d 3b 0a 20 20 62 72 65  p[pcDest];.  bre
7450: 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
7460: 3a 20 20 48 61 6c 74 49 66 4e 75 6c 6c 20 20 50  :  HaltIfNull  P
7470: 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a  1 P2 P3 P4 P5.**
7480: 20 53 79 6e 6f 70 73 69 73 3a 20 69 66 20 72 5b   Synopsis: if r[
7490: 50 33 5d 3d 6e 75 6c 6c 20 68 61 6c 74 0a 2a 2a  P3]=null halt.**
74a0: 0a 2a 2a 20 43 68 65 63 6b 20 74 68 65 20 76 61  .** Check the va
74b0: 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  lue in register 
74c0: 50 33 2e 20 20 49 66 20 69 74 20 69 73 20 4e 55  P3.  If it is NU
74d0: 4c 4c 20 74 68 65 6e 20 48 61 6c 74 20 75 73 69  LL then Halt usi
74e0: 6e 67 0a 2a 2a 20 70 61 72 61 6d 65 74 65 72 20  ng.** parameter 
74f0: 50 31 2c 20 50 32 2c 20 61 6e 64 20 50 34 20 61  P1, P2, and P4 a
7500: 73 20 69 66 20 74 68 69 73 20 77 65 72 65 20 61  s if this were a
7510: 20 48 61 6c 74 20 69 6e 73 74 72 75 63 74 69 6f   Halt instructio
7520: 6e 2e 20 20 49 66 20 74 68 65 0a 2a 2a 20 76 61  n.  If the.** va
7530: 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  lue in register 
7540: 50 33 20 69 73 20 6e 6f 74 20 4e 55 4c 4c 2c 20  P3 is not NULL, 
7550: 74 68 65 6e 20 74 68 69 73 20 72 6f 75 74 69 6e  then this routin
7560: 65 20 69 73 20 61 20 6e 6f 2d 6f 70 2e 0a 2a 2a  e is a no-op..**
7570: 20 54 68 65 20 50 35 20 70 61 72 61 6d 65 74 65   The P5 paramete
7580: 72 20 73 68 6f 75 6c 64 20 62 65 20 31 2e 0a 2a  r should be 1..*
7590: 2f 0a 63 61 73 65 20 4f 50 5f 48 61 6c 74 49 66  /.case OP_HaltIf
75a0: 4e 75 6c 6c 3a 20 7b 20 20 20 20 20 20 2f 2a 20  Null: {      /* 
75b0: 69 6e 33 20 2a 2f 0a 20 20 70 49 6e 33 20 3d 20  in3 */.  pIn3 = 
75c0: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a  &aMem[pOp->p3];.
75d0: 20 20 69 66 28 20 28 70 49 6e 33 2d 3e 66 6c 61    if( (pIn3->fla
75e0: 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29 3d 3d  gs & MEM_Null)==
75f0: 30 20 29 20 62 72 65 61 6b 3b 0a 20 20 2f 2a 20  0 ) break;.  /* 
7600: 46 61 6c 6c 20 74 68 72 6f 75 67 68 20 69 6e 74  Fall through int
7610: 6f 20 4f 50 5f 48 61 6c 74 20 2a 2f 0a 7d 0a 0a  o OP_Halt */.}..
7620: 2f 2a 20 4f 70 63 6f 64 65 3a 20 20 48 61 6c 74  /* Opcode:  Halt
7630: 20 50 31 20 50 32 20 2a 20 50 34 20 50 35 0a 2a   P1 P2 * P4 P5.*
7640: 2a 0a 2a 2a 20 45 78 69 74 20 69 6d 6d 65 64 69  *.** Exit immedi
7650: 61 74 65 6c 79 2e 20 20 41 6c 6c 20 6f 70 65 6e  ately.  All open
7660: 20 63 75 72 73 6f 72 73 2c 20 65 74 63 20 61 72   cursors, etc ar
7670: 65 20 63 6c 6f 73 65 64 0a 2a 2a 20 61 75 74 6f  e closed.** auto
7680: 6d 61 74 69 63 61 6c 6c 79 2e 0a 2a 2a 0a 2a 2a  matically..**.**
7690: 20 50 31 20 69 73 20 74 68 65 20 72 65 73 75 6c   P1 is the resul
76a0: 74 20 63 6f 64 65 20 72 65 74 75 72 6e 65 64 20  t code returned 
76b0: 62 79 20 73 71 6c 69 74 65 33 5f 65 78 65 63 28  by sqlite3_exec(
76c0: 29 2c 20 73 71 6c 69 74 65 33 5f 72 65 73 65 74  ), sqlite3_reset
76d0: 28 29 2c 0a 2a 2a 20 6f 72 20 73 71 6c 69 74 65  (),.** or sqlite
76e0: 33 5f 66 69 6e 61 6c 69 7a 65 28 29 2e 20 20 46  3_finalize().  F
76f0: 6f 72 20 61 20 6e 6f 72 6d 61 6c 20 68 61 6c 74  or a normal halt
7700: 2c 20 74 68 69 73 20 73 68 6f 75 6c 64 20 62 65  , this should be
7710: 20 53 51 4c 49 54 45 5f 4f 4b 20 28 30 29 2e 0a   SQLITE_OK (0)..
7720: 2a 2a 20 46 6f 72 20 65 72 72 6f 72 73 2c 20 69  ** For errors, i
7730: 74 20 63 61 6e 20 62 65 20 73 6f 6d 65 20 6f 74  t can be some ot
7740: 68 65 72 20 76 61 6c 75 65 2e 20 20 49 66 20 50  her value.  If P
7750: 31 21 3d 30 20 74 68 65 6e 20 50 32 20 77 69 6c  1!=0 then P2 wil
7760: 6c 20 64 65 74 65 72 6d 69 6e 65 0a 2a 2a 20 77  l determine.** w
7770: 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 74 6f  hether or not to
7780: 20 72 6f 6c 6c 62 61 63 6b 20 74 68 65 20 63 75   rollback the cu
7790: 72 72 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f  rrent transactio
77a0: 6e 2e 20 20 44 6f 20 6e 6f 74 20 72 6f 6c 6c 62  n.  Do not rollb
77b0: 61 63 6b 0a 2a 2a 20 69 66 20 50 32 3d 3d 4f 45  ack.** if P2==OE
77c0: 5f 46 61 69 6c 2e 20 44 6f 20 74 68 65 20 72 6f  _Fail. Do the ro
77d0: 6c 6c 62 61 63 6b 20 69 66 20 50 32 3d 3d 4f 45  llback if P2==OE
77e0: 5f 52 6f 6c 6c 62 61 63 6b 2e 20 20 49 66 20 50  _Rollback.  If P
77f0: 32 3d 3d 4f 45 5f 41 62 6f 72 74 2c 0a 2a 2a 20  2==OE_Abort,.** 
7800: 74 68 65 6e 20 62 61 63 6b 20 6f 75 74 20 61 6c  then back out al
7810: 6c 20 63 68 61 6e 67 65 73 20 74 68 61 74 20 68  l changes that h
7820: 61 76 65 20 6f 63 63 75 72 72 65 64 20 64 75 72  ave occurred dur
7830: 69 6e 67 20 74 68 69 73 20 65 78 65 63 75 74 69  ing this executi
7840: 6f 6e 20 6f 66 20 74 68 65 0a 2a 2a 20 56 44 42  on of the.** VDB
7850: 45 2c 20 62 75 74 20 64 6f 20 6e 6f 74 20 72 6f  E, but do not ro
7860: 6c 6c 62 61 63 6b 20 74 68 65 20 74 72 61 6e 73  llback the trans
7870: 61 63 74 69 6f 6e 2e 20 0a 2a 2a 0a 2a 2a 20 49  action. .**.** I
7880: 66 20 50 34 20 69 73 20 6e 6f 74 20 6e 75 6c 6c  f P4 is not null
7890: 20 74 68 65 6e 20 69 74 20 69 73 20 61 6e 20 65   then it is an e
78a0: 72 72 6f 72 20 6d 65 73 73 61 67 65 20 73 74 72  rror message str
78b0: 69 6e 67 2e 0a 2a 2a 0a 2a 2a 20 50 35 20 69 73  ing..**.** P5 is
78c0: 20 61 20 76 61 6c 75 65 20 62 65 74 77 65 65 6e   a value between
78d0: 20 30 20 61 6e 64 20 34 2c 20 69 6e 63 6c 75 73   0 and 4, inclus
78e0: 69 76 65 2c 20 74 68 61 74 20 6d 6f 64 69 66 69  ive, that modifi
78f0: 65 73 20 74 68 65 20 50 34 20 73 74 72 69 6e 67  es the P4 string
7900: 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 30 3a 20 20 28  ..**.**    0:  (
7910: 6e 6f 20 63 68 61 6e 67 65 29 0a 2a 2a 20 20 20  no change).**   
7920: 20 31 3a 20 20 4e 4f 54 20 4e 55 4c 4c 20 63 6f   1:  NOT NULL co
7930: 6e 74 72 61 69 6e 74 20 66 61 69 6c 65 64 3a 20  ntraint failed: 
7940: 50 34 0a 2a 2a 20 20 20 20 32 3a 20 20 55 4e 49  P4.**    2:  UNI
7950: 51 55 45 20 63 6f 6e 73 74 72 61 69 6e 74 20 66  QUE constraint f
7960: 61 69 6c 65 64 3a 20 50 34 0a 2a 2a 20 20 20 20  ailed: P4.**    
7970: 33 3a 20 20 43 48 45 43 4b 20 63 6f 6e 73 74 72  3:  CHECK constr
7980: 61 69 6e 74 20 66 61 69 6c 65 64 3a 20 50 34 0a  aint failed: P4.
7990: 2a 2a 20 20 20 20 34 3a 20 20 46 4f 52 45 49 47  **    4:  FOREIG
79a0: 4e 20 4b 45 59 20 63 6f 6e 73 74 72 61 69 6e 74  N KEY constraint
79b0: 20 66 61 69 6c 65 64 3a 20 50 34 0a 2a 2a 0a 2a   failed: P4.**.*
79c0: 2a 20 49 66 20 50 35 20 69 73 20 6e 6f 74 20 7a  * If P5 is not z
79d0: 65 72 6f 20 61 6e 64 20 50 34 20 69 73 20 4e 55  ero and P4 is NU
79e0: 4c 4c 2c 20 74 68 65 6e 20 65 76 65 72 79 74 68  LL, then everyth
79f0: 69 6e 67 20 61 66 74 65 72 20 74 68 65 20 22 3a  ing after the ":
7a00: 22 20 69 73 0a 2a 2a 20 6f 6d 69 74 74 65 64 2e  " is.** omitted.
7a10: 0a 2a 2a 0a 2a 2a 20 54 68 65 72 65 20 69 73 20  .**.** There is 
7a20: 61 6e 20 69 6d 70 6c 69 65 64 20 22 48 61 6c 74  an implied "Halt
7a30: 20 30 20 30 20 30 22 20 69 6e 73 74 72 75 63 74   0 0 0" instruct
7a40: 69 6f 6e 20 69 6e 73 65 72 74 65 64 20 61 74 20  ion inserted at 
7a50: 74 68 65 20 76 65 72 79 20 65 6e 64 20 6f 66 0a  the very end of.
7a60: 2a 2a 20 65 76 65 72 79 20 70 72 6f 67 72 61 6d  ** every program
7a70: 2e 20 20 53 6f 20 61 20 6a 75 6d 70 20 70 61 73  .  So a jump pas
7a80: 74 20 74 68 65 20 6c 61 73 74 20 69 6e 73 74 72  t the last instr
7a90: 75 63 74 69 6f 6e 20 6f 66 20 74 68 65 20 70 72  uction of the pr
7aa0: 6f 67 72 61 6d 0a 2a 2a 20 69 73 20 74 68 65 20  ogram.** is the 
7ab0: 73 61 6d 65 20 61 73 20 65 78 65 63 75 74 69 6e  same as executin
7ac0: 67 20 48 61 6c 74 2e 0a 2a 2f 0a 63 61 73 65 20  g Halt..*/.case 
7ad0: 4f 50 5f 48 61 6c 74 3a 20 7b 0a 20 20 56 64 62  OP_Halt: {.  Vdb
7ae0: 65 46 72 61 6d 65 20 2a 70 46 72 61 6d 65 3b 0a  eFrame *pFrame;.
7af0: 20 20 69 6e 74 20 70 63 78 3b 0a 0a 20 20 70 63    int pcx;..  pc
7b00: 78 20 3d 20 28 69 6e 74 29 28 70 4f 70 20 2d 20  x = (int)(pOp - 
7b10: 61 4f 70 29 3b 0a 20 20 69 66 28 20 70 4f 70 2d  aOp);.  if( pOp-
7b20: 3e 70 31 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 26  >p1==SQLITE_OK &
7b30: 26 20 70 2d 3e 70 46 72 61 6d 65 20 29 7b 0a 20  & p->pFrame ){. 
7b40: 20 20 20 2f 2a 20 48 61 6c 74 20 74 68 65 20 73     /* Halt the s
7b50: 75 62 2d 70 72 6f 67 72 61 6d 2e 20 52 65 74 75  ub-program. Retu
7b60: 72 6e 20 63 6f 6e 74 72 6f 6c 20 74 6f 20 74 68  rn control to th
7b70: 65 20 70 61 72 65 6e 74 20 66 72 61 6d 65 2e 20  e parent frame. 
7b80: 2a 2f 0a 20 20 20 20 70 46 72 61 6d 65 20 3d 20  */.    pFrame = 
7b90: 70 2d 3e 70 46 72 61 6d 65 3b 0a 20 20 20 20 70  p->pFrame;.    p
7ba0: 2d 3e 70 46 72 61 6d 65 20 3d 20 70 46 72 61 6d  ->pFrame = pFram
7bb0: 65 2d 3e 70 50 61 72 65 6e 74 3b 0a 20 20 20 20  e->pParent;.    
7bc0: 70 2d 3e 6e 46 72 61 6d 65 2d 2d 3b 0a 20 20 20  p->nFrame--;.   
7bd0: 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 43   sqlite3VdbeSetC
7be0: 68 61 6e 67 65 73 28 64 62 2c 20 70 2d 3e 6e 43  hanges(db, p->nC
7bf0: 68 61 6e 67 65 29 3b 0a 20 20 20 20 70 63 78 20  hange);.    pcx 
7c00: 3d 20 73 71 6c 69 74 65 33 56 64 62 65 46 72 61  = sqlite3VdbeFra
7c10: 6d 65 52 65 73 74 6f 72 65 28 70 46 72 61 6d 65  meRestore(pFrame
7c20: 29 3b 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e  );.    if( pOp->
7c30: 70 32 3d 3d 4f 45 5f 49 67 6e 6f 72 65 20 29 7b  p2==OE_Ignore ){
7c40: 0a 20 20 20 20 20 20 2f 2a 20 49 6e 73 74 72 75  .      /* Instru
7c50: 63 74 69 6f 6e 20 70 63 78 20 69 73 20 74 68 65  ction pcx is the
7c60: 20 4f 50 5f 50 72 6f 67 72 61 6d 20 74 68 61 74   OP_Program that
7c70: 20 69 6e 76 6f 6b 65 64 20 74 68 65 20 73 75 62   invoked the sub
7c80: 2d 70 72 6f 67 72 61 6d 20 0a 20 20 20 20 20 20  -program .      
7c90: 2a 2a 20 63 75 72 72 65 6e 74 6c 79 20 62 65 69  ** currently bei
7ca0: 6e 67 20 68 61 6c 74 65 64 2e 20 49 66 20 74 68  ng halted. If th
7cb0: 65 20 70 32 20 69 6e 73 74 72 75 63 74 69 6f 6e  e p2 instruction
7cc0: 20 6f 66 20 74 68 69 73 20 4f 50 5f 48 61 6c 74   of this OP_Halt
7cd0: 0a 20 20 20 20 20 20 2a 2a 20 69 6e 73 74 72 75  .      ** instru
7ce0: 63 74 69 6f 6e 20 69 73 20 73 65 74 20 74 6f 20  ction is set to 
7cf0: 4f 45 5f 49 67 6e 6f 72 65 2c 20 74 68 65 6e 20  OE_Ignore, then 
7d00: 74 68 65 20 73 75 62 2d 70 72 6f 67 72 61 6d 20  the sub-program 
7d10: 69 73 20 74 68 72 6f 77 69 6e 67 0a 20 20 20 20  is throwing.    
7d20: 20 20 2a 2a 20 61 6e 20 49 47 4e 4f 52 45 20 65    ** an IGNORE e
7d30: 78 63 65 70 74 69 6f 6e 2e 20 49 6e 20 74 68 69  xception. In thi
7d40: 73 20 63 61 73 65 20 6a 75 6d 70 20 74 6f 20 74  s case jump to t
7d50: 68 65 20 61 64 64 72 65 73 73 20 73 70 65 63 69  he address speci
7d60: 66 69 65 64 0a 20 20 20 20 20 20 2a 2a 20 61 73  fied.      ** as
7d70: 20 74 68 65 20 70 32 20 6f 66 20 74 68 65 20 63   the p2 of the c
7d80: 61 6c 6c 69 6e 67 20 4f 50 5f 50 72 6f 67 72 61  alling OP_Progra
7d90: 6d 2e 20 20 2a 2f 0a 20 20 20 20 20 20 70 63 78  m.  */.      pcx
7da0: 20 3d 20 70 2d 3e 61 4f 70 5b 70 63 78 5d 2e 70   = p->aOp[pcx].p
7db0: 32 2d 31 3b 0a 20 20 20 20 7d 0a 20 20 20 20 61  2-1;.    }.    a
7dc0: 4f 70 20 3d 20 70 2d 3e 61 4f 70 3b 0a 20 20 20  Op = p->aOp;.   
7dd0: 20 61 4d 65 6d 20 3d 20 70 2d 3e 61 4d 65 6d 3b   aMem = p->aMem;
7de0: 0a 20 20 20 20 70 4f 70 20 3d 20 26 61 4f 70 5b  .    pOp = &aOp[
7df0: 70 63 78 5d 3b 0a 20 20 20 20 62 72 65 61 6b 3b  pcx];.    break;
7e00: 0a 20 20 7d 0a 20 20 70 2d 3e 72 63 20 3d 20 70  .  }.  p->rc = p
7e10: 4f 70 2d 3e 70 31 3b 0a 20 20 70 2d 3e 65 72 72  Op->p1;.  p->err
7e20: 6f 72 41 63 74 69 6f 6e 20 3d 20 28 75 38 29 70  orAction = (u8)p
7e30: 4f 70 2d 3e 70 32 3b 0a 20 20 70 2d 3e 70 63 20  Op->p2;.  p->pc 
7e40: 3d 20 70 63 78 3b 0a 20 20 61 73 73 65 72 74 28  = pcx;.  assert(
7e50: 20 70 4f 70 2d 3e 70 35 3c 3d 34 20 29 3b 0a 20   pOp->p5<=4 );. 
7e60: 20 69 66 28 20 70 2d 3e 72 63 20 29 7b 0a 20 20   if( p->rc ){.  
7e70: 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 29 7b    if( pOp->p5 ){
7e80: 0a 20 20 20 20 20 20 73 74 61 74 69 63 20 63 6f  .      static co
7e90: 6e 73 74 20 63 68 61 72 20 2a 20 63 6f 6e 73 74  nst char * const
7ea0: 20 61 7a 54 79 70 65 5b 5d 20 3d 20 7b 20 22 4e   azType[] = { "N
7eb0: 4f 54 20 4e 55 4c 4c 22 2c 20 22 55 4e 49 51 55  OT NULL", "UNIQU
7ec0: 45 22 2c 20 22 43 48 45 43 4b 22 2c 0a 20 20 20  E", "CHECK",.   
7ed0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7ee0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7ef0: 20 20 20 20 20 20 20 20 20 20 22 46 4f 52 45 49            "FOREI
7f00: 47 4e 20 4b 45 59 22 20 7d 3b 0a 20 20 20 20 20  GN KEY" };.     
7f10: 20 74 65 73 74 63 61 73 65 28 20 70 4f 70 2d 3e   testcase( pOp->
7f20: 70 35 3d 3d 31 20 29 3b 0a 20 20 20 20 20 20 74  p5==1 );.      t
7f30: 65 73 74 63 61 73 65 28 20 70 4f 70 2d 3e 70 35  estcase( pOp->p5
7f40: 3d 3d 32 20 29 3b 0a 20 20 20 20 20 20 74 65 73  ==2 );.      tes
7f50: 74 63 61 73 65 28 20 70 4f 70 2d 3e 70 35 3d 3d  tcase( pOp->p5==
7f60: 33 20 29 3b 0a 20 20 20 20 20 20 74 65 73 74 63  3 );.      testc
7f70: 61 73 65 28 20 70 4f 70 2d 3e 70 35 3d 3d 34 20  ase( pOp->p5==4 
7f80: 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  );.      sqlite3
7f90: 56 64 62 65 45 72 72 6f 72 28 70 2c 20 22 25 73  VdbeError(p, "%s
7fa0: 20 63 6f 6e 73 74 72 61 69 6e 74 20 66 61 69 6c   constraint fail
7fb0: 65 64 22 2c 20 61 7a 54 79 70 65 5b 70 4f 70 2d  ed", azType[pOp-
7fc0: 3e 70 35 2d 31 5d 29 3b 0a 20 20 20 20 20 20 69  >p5-1]);.      i
7fd0: 66 28 20 70 4f 70 2d 3e 70 34 2e 7a 20 29 7b 0a  f( pOp->p4.z ){.
7fe0: 20 20 20 20 20 20 20 20 70 2d 3e 7a 45 72 72 4d          p->zErrM
7ff0: 73 67 20 3d 20 73 71 6c 69 74 65 33 4d 50 72 69  sg = sqlite3MPri
8000: 6e 74 66 28 64 62 2c 20 22 25 7a 3a 20 25 73 22  ntf(db, "%z: %s"
8010: 2c 20 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 70 4f  , p->zErrMsg, pO
8020: 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20 20 20 20 20  p->p4.z);.      
8030: 7d 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20  }.    }else{.   
8040: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 45 72     sqlite3VdbeEr
8050: 72 6f 72 28 70 2c 20 22 25 73 22 2c 20 70 4f 70  ror(p, "%s", pOp
8060: 2d 3e 70 34 2e 7a 29 3b 0a 20 20 20 20 7d 0a 20  ->p4.z);.    }. 
8070: 20 20 20 73 71 6c 69 74 65 33 5f 6c 6f 67 28 70     sqlite3_log(p
8080: 4f 70 2d 3e 70 31 2c 20 22 61 62 6f 72 74 20 61  Op->p1, "abort a
8090: 74 20 25 64 20 69 6e 20 5b 25 73 5d 3a 20 25 73  t %d in [%s]: %s
80a0: 22 2c 20 70 63 78 2c 20 70 2d 3e 7a 53 71 6c 2c  ", pcx, p->zSql,
80b0: 20 70 2d 3e 7a 45 72 72 4d 73 67 29 3b 0a 20 20   p->zErrMsg);.  
80c0: 7d 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  }.  rc = sqlite3
80d0: 56 64 62 65 48 61 6c 74 28 70 29 3b 0a 20 20 61  VdbeHalt(p);.  a
80e0: 73 73 65 72 74 28 20 72 63 3d 3d 53 51 4c 49 54  ssert( rc==SQLIT
80f0: 45 5f 42 55 53 59 20 7c 7c 20 72 63 3d 3d 53 51  E_BUSY || rc==SQ
8100: 4c 49 54 45 5f 4f 4b 20 7c 7c 20 72 63 3d 3d 53  LITE_OK || rc==S
8110: 51 4c 49 54 45 5f 45 52 52 4f 52 20 29 3b 0a 20  QLITE_ERROR );. 
8120: 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f   if( rc==SQLITE_
8130: 42 55 53 59 20 29 7b 0a 20 20 20 20 70 2d 3e 72  BUSY ){.    p->r
8140: 63 20 3d 20 53 51 4c 49 54 45 5f 42 55 53 59 3b  c = SQLITE_BUSY;
8150: 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73  .  }else{.    as
8160: 73 65 72 74 28 20 72 63 3d 3d 53 51 4c 49 54 45  sert( rc==SQLITE
8170: 5f 4f 4b 20 7c 7c 20 28 70 2d 3e 72 63 26 30 78  _OK || (p->rc&0x
8180: 66 66 29 3d 3d 53 51 4c 49 54 45 5f 43 4f 4e 53  ff)==SQLITE_CONS
8190: 54 52 41 49 4e 54 20 29 3b 0a 20 20 20 20 61 73  TRAINT );.    as
81a0: 73 65 72 74 28 20 72 63 3d 3d 53 51 4c 49 54 45  sert( rc==SQLITE
81b0: 5f 4f 4b 20 7c 7c 20 64 62 2d 3e 6e 44 65 66 65  _OK || db->nDefe
81c0: 72 72 65 64 43 6f 6e 73 3e 30 20 7c 7c 20 64 62  rredCons>0 || db
81d0: 2d 3e 6e 44 65 66 65 72 72 65 64 49 6d 6d 43 6f  ->nDeferredImmCo
81e0: 6e 73 3e 30 20 29 3b 0a 20 20 20 20 72 63 20 3d  ns>0 );.    rc =
81f0: 20 70 2d 3e 72 63 20 3f 20 53 51 4c 49 54 45 5f   p->rc ? SQLITE_
8200: 45 52 52 4f 52 20 3a 20 53 51 4c 49 54 45 5f 44  ERROR : SQLITE_D
8210: 4f 4e 45 3b 0a 20 20 7d 0a 20 20 67 6f 74 6f 20  ONE;.  }.  goto 
8220: 76 64 62 65 5f 72 65 74 75 72 6e 3b 0a 7d 0a 0a  vdbe_return;.}..
8230: 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 6e 74 65 67  /* Opcode: Integ
8240: 65 72 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  er P1 P2 * * *.*
8250: 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32  * Synopsis: r[P2
8260: 5d 3d 50 31 0a 2a 2a 0a 2a 2a 20 54 68 65 20 33  ]=P1.**.** The 3
8270: 32 2d 62 69 74 20 69 6e 74 65 67 65 72 20 76 61  2-bit integer va
8280: 6c 75 65 20 50 31 20 69 73 20 77 72 69 74 74 65  lue P1 is writte
8290: 6e 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20  n into register 
82a0: 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49  P2..*/.case OP_I
82b0: 6e 74 65 67 65 72 3a 20 7b 20 20 20 20 20 20 20  nteger: {       
82c0: 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20 20 70    /* out2 */.  p
82d0: 4f 75 74 20 3d 20 6f 75 74 32 50 72 65 72 65 6c  Out = out2Prerel
82e0: 65 61 73 65 28 70 2c 20 70 4f 70 29 3b 0a 20 20  ease(p, pOp);.  
82f0: 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 70 4f 70 2d  pOut->u.i = pOp-
8300: 3e 70 31 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  >p1;.  break;.}.
8310: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 6e 74 36  ./* Opcode: Int6
8320: 34 20 2a 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a  4 * P2 * P4 *.**
8330: 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d   Synopsis: r[P2]
8340: 3d 50 34 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20  =P4.**.** P4 is 
8350: 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 36  a pointer to a 6
8360: 34 2d 62 69 74 20 69 6e 74 65 67 65 72 20 76 61  4-bit integer va
8370: 6c 75 65 2e 0a 2a 2a 20 57 72 69 74 65 20 74 68  lue..** Write th
8380: 61 74 20 76 61 6c 75 65 20 69 6e 74 6f 20 72 65  at value into re
8390: 67 69 73 74 65 72 20 50 32 2e 0a 2a 2f 0a 63 61  gister P2..*/.ca
83a0: 73 65 20 4f 50 5f 49 6e 74 36 34 3a 20 7b 20 20  se OP_Int64: {  
83b0: 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32           /* out2
83c0: 20 2a 2f 0a 20 20 70 4f 75 74 20 3d 20 6f 75 74   */.  pOut = out
83d0: 32 50 72 65 72 65 6c 65 61 73 65 28 70 2c 20 70  2Prerelease(p, p
83e0: 4f 70 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  Op);.  assert( p
83f0: 4f 70 2d 3e 70 34 2e 70 49 36 34 21 3d 30 20 29  Op->p4.pI64!=0 )
8400: 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20  ;.  pOut->u.i = 
8410: 2a 70 4f 70 2d 3e 70 34 2e 70 49 36 34 3b 0a 20  *pOp->p4.pI64;. 
8420: 20 62 72 65 61 6b 3b 0a 7d 0a 0a 23 69 66 6e 64   break;.}..#ifnd
8430: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46  ef SQLITE_OMIT_F
8440: 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 0a 2f 2a  LOATING_POINT./*
8450: 20 4f 70 63 6f 64 65 3a 20 52 65 61 6c 20 2a 20   Opcode: Real * 
8460: 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 20 53 79 6e  P2 * P4 *.** Syn
8470: 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 50 34 0a  opsis: r[P2]=P4.
8480: 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20 70 6f  **.** P4 is a po
8490: 69 6e 74 65 72 20 74 6f 20 61 20 36 34 2d 62 69  inter to a 64-bi
84a0: 74 20 66 6c 6f 61 74 69 6e 67 20 70 6f 69 6e 74  t floating point
84b0: 20 76 61 6c 75 65 2e 0a 2a 2a 20 57 72 69 74 65   value..** Write
84c0: 20 74 68 61 74 20 76 61 6c 75 65 20 69 6e 74 6f   that value into
84d0: 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2f   register P2..*/
84e0: 0a 63 61 73 65 20 4f 50 5f 52 65 61 6c 3a 20 7b  .case OP_Real: {
84f0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73              /* s
8500: 61 6d 65 20 61 73 20 54 4b 5f 46 4c 4f 41 54 2c  ame as TK_FLOAT,
8510: 20 6f 75 74 32 20 2a 2f 0a 20 20 70 4f 75 74 20   out2 */.  pOut 
8520: 3d 20 6f 75 74 32 50 72 65 72 65 6c 65 61 73 65  = out2Prerelease
8530: 28 70 2c 20 70 4f 70 29 3b 0a 20 20 70 4f 75 74  (p, pOp);.  pOut
8540: 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 52 65  ->flags = MEM_Re
8550: 61 6c 3b 0a 20 20 61 73 73 65 72 74 28 20 21 73  al;.  assert( !s
8560: 71 6c 69 74 65 33 49 73 4e 61 4e 28 2a 70 4f 70  qlite3IsNaN(*pOp
8570: 2d 3e 70 34 2e 70 52 65 61 6c 29 20 29 3b 0a 20  ->p4.pReal) );. 
8580: 20 70 4f 75 74 2d 3e 75 2e 72 20 3d 20 2a 70 4f   pOut->u.r = *pO
8590: 70 2d 3e 70 34 2e 70 52 65 61 6c 3b 0a 20 20 62  p->p4.pReal;.  b
85a0: 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a  reak;.}.#endif..
85b0: 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 74 72 69 6e  /* Opcode: Strin
85c0: 67 38 20 2a 20 50 32 20 2a 20 50 34 20 2a 0a 2a  g8 * P2 * P4 *.*
85d0: 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32  * Synopsis: r[P2
85e0: 5d 3d 27 50 34 27 0a 2a 2a 0a 2a 2a 20 50 34 20  ]='P4'.**.** P4 
85f0: 70 6f 69 6e 74 73 20 74 6f 20 61 20 6e 75 6c 20  points to a nul 
8600: 74 65 72 6d 69 6e 61 74 65 64 20 55 54 46 2d 38  terminated UTF-8
8610: 20 73 74 72 69 6e 67 2e 20 54 68 69 73 20 6f 70   string. This op
8620: 63 6f 64 65 20 69 73 20 74 72 61 6e 73 66 6f 72  code is transfor
8630: 6d 65 64 20 0a 2a 2a 20 69 6e 74 6f 20 61 20 53  med .** into a S
8640: 74 72 69 6e 67 20 6f 70 63 6f 64 65 20 62 65 66  tring opcode bef
8650: 6f 72 65 20 69 74 20 69 73 20 65 78 65 63 75 74  ore it is execut
8660: 65 64 20 66 6f 72 20 74 68 65 20 66 69 72 73 74  ed for the first
8670: 20 74 69 6d 65 2e 20 20 44 75 72 69 6e 67 0a 2a   time.  During.*
8680: 2a 20 74 68 69 73 20 74 72 61 6e 73 66 6f 72 6d  * this transform
8690: 61 74 69 6f 6e 2c 20 74 68 65 20 6c 65 6e 67 74  ation, the lengt
86a0: 68 20 6f 66 20 73 74 72 69 6e 67 20 50 34 20 69  h of string P4 i
86b0: 73 20 63 6f 6d 70 75 74 65 64 20 61 6e 64 20 73  s computed and s
86c0: 74 6f 72 65 64 0a 2a 2a 20 61 73 20 74 68 65 20  tored.** as the 
86d0: 50 31 20 70 61 72 61 6d 65 74 65 72 2e 0a 2a 2f  P1 parameter..*/
86e0: 0a 63 61 73 65 20 4f 50 5f 53 74 72 69 6e 67 38  .case OP_String8
86f0: 3a 20 7b 20 20 20 20 20 20 20 20 20 2f 2a 20 73  : {         /* s
8700: 61 6d 65 20 61 73 20 54 4b 5f 53 54 52 49 4e 47  ame as TK_STRING
8710: 2c 20 6f 75 74 32 20 2a 2f 0a 20 20 61 73 73 65  , out2 */.  asse
8720: 72 74 28 20 70 4f 70 2d 3e 70 34 2e 7a 21 3d 30  rt( pOp->p4.z!=0
8730: 20 29 3b 0a 20 20 70 4f 75 74 20 3d 20 6f 75 74   );.  pOut = out
8740: 32 50 72 65 72 65 6c 65 61 73 65 28 70 2c 20 70  2Prerelease(p, p
8750: 4f 70 29 3b 0a 20 20 70 4f 70 2d 3e 6f 70 63 6f  Op);.  pOp->opco
8760: 64 65 20 3d 20 4f 50 5f 53 74 72 69 6e 67 3b 0a  de = OP_String;.
8770: 20 20 70 4f 70 2d 3e 70 31 20 3d 20 73 71 6c 69    pOp->p1 = sqli
8780: 74 65 33 53 74 72 6c 65 6e 33 30 28 70 4f 70 2d  te3Strlen30(pOp-
8790: 3e 70 34 2e 7a 29 3b 0a 0a 23 69 66 6e 64 65 66  >p4.z);..#ifndef
87a0: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46   SQLITE_OMIT_UTF
87b0: 31 36 0a 20 20 69 66 28 20 65 6e 63 6f 64 69 6e  16.  if( encodin
87c0: 67 21 3d 53 51 4c 49 54 45 5f 55 54 46 38 20 29  g!=SQLITE_UTF8 )
87d0: 7b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74  {.    rc = sqlit
87e0: 65 33 56 64 62 65 4d 65 6d 53 65 74 53 74 72 28  e3VdbeMemSetStr(
87f0: 70 4f 75 74 2c 20 70 4f 70 2d 3e 70 34 2e 7a 2c  pOut, pOp->p4.z,
8800: 20 2d 31 2c 20 53 51 4c 49 54 45 5f 55 54 46 38   -1, SQLITE_UTF8
8810: 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29  , SQLITE_STATIC)
8820: 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 72 63  ;.    assert( rc
8830: 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 7c 7c 20 72  ==SQLITE_OK || r
8840: 63 3d 3d 53 51 4c 49 54 45 5f 54 4f 4f 42 49 47  c==SQLITE_TOOBIG
8850: 20 29 3b 0a 20 20 20 20 69 66 28 20 53 51 4c 49   );.    if( SQLI
8860: 54 45 5f 4f 4b 21 3d 73 71 6c 69 74 65 33 56 64  TE_OK!=sqlite3Vd
8870: 62 65 43 68 61 6e 67 65 45 6e 63 6f 64 69 6e 67  beChangeEncoding
8880: 28 70 4f 75 74 2c 20 65 6e 63 6f 64 69 6e 67 29  (pOut, encoding)
8890: 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a   ) goto no_mem;.
88a0: 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 75 74      assert( pOut
88b0: 2d 3e 73 7a 4d 61 6c 6c 6f 63 3e 30 20 26 26 20  ->szMalloc>0 && 
88c0: 70 4f 75 74 2d 3e 7a 4d 61 6c 6c 6f 63 3d 3d 70  pOut->zMalloc==p
88d0: 4f 75 74 2d 3e 7a 20 29 3b 0a 20 20 20 20 61 73  Out->z );.    as
88e0: 73 65 72 74 28 20 56 64 62 65 4d 65 6d 44 79 6e  sert( VdbeMemDyn
88f0: 61 6d 69 63 28 70 4f 75 74 29 3d 3d 30 20 29 3b  amic(pOut)==0 );
8900: 0a 20 20 20 20 70 4f 75 74 2d 3e 73 7a 4d 61 6c  .    pOut->szMal
8910: 6c 6f 63 20 3d 20 30 3b 0a 20 20 20 20 70 4f 75  loc = 0;.    pOu
8920: 74 2d 3e 66 6c 61 67 73 20 7c 3d 20 4d 45 4d 5f  t->flags |= MEM_
8930: 53 74 61 74 69 63 3b 0a 20 20 20 20 69 66 28 20  Static;.    if( 
8940: 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f  pOp->p4type==P4_
8950: 44 59 4e 41 4d 49 43 20 29 7b 0a 20 20 20 20 20  DYNAMIC ){.     
8960: 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 28 64   sqlite3DbFree(d
8970: 62 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20  b, pOp->p4.z);. 
8980: 20 20 20 7d 0a 20 20 20 20 70 4f 70 2d 3e 70 34     }.    pOp->p4
8990: 74 79 70 65 20 3d 20 50 34 5f 44 59 4e 41 4d 49  type = P4_DYNAMI
89a0: 43 3b 0a 20 20 20 20 70 4f 70 2d 3e 70 34 2e 7a  C;.    pOp->p4.z
89b0: 20 3d 20 70 4f 75 74 2d 3e 7a 3b 0a 20 20 20 20   = pOut->z;.    
89c0: 70 4f 70 2d 3e 70 31 20 3d 20 70 4f 75 74 2d 3e  pOp->p1 = pOut->
89d0: 6e 3b 0a 20 20 7d 0a 20 20 74 65 73 74 63 61 73  n;.  }.  testcas
89e0: 65 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 54 4f  e( rc==SQLITE_TO
89f0: 4f 42 49 47 20 29 3b 0a 23 65 6e 64 69 66 0a 20  OBIG );.#endif. 
8a00: 20 69 66 28 20 70 4f 70 2d 3e 70 31 3e 64 62 2d   if( pOp->p1>db-
8a10: 3e 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4c  >aLimit[SQLITE_L
8a20: 49 4d 49 54 5f 4c 45 4e 47 54 48 5d 20 29 7b 0a  IMIT_LENGTH] ){.
8a30: 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67      goto too_big
8a40: 3b 0a 20 20 7d 0a 20 20 61 73 73 65 72 74 28 20  ;.  }.  assert( 
8a50: 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 3b  rc==SQLITE_OK );
8a60: 0a 20 20 2f 2a 20 46 61 6c 6c 20 74 68 72 6f 75  .  /* Fall throu
8a70: 67 68 20 74 6f 20 74 68 65 20 6e 65 78 74 20 63  gh to the next c
8a80: 61 73 65 2c 20 4f 50 5f 53 74 72 69 6e 67 20 2a  ase, OP_String *
8a90: 2f 0a 7d 0a 20 20 0a 2f 2a 20 4f 70 63 6f 64 65  /.}.  ./* Opcode
8aa0: 3a 20 53 74 72 69 6e 67 20 50 31 20 50 32 20 50  : String P1 P2 P
8ab0: 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70  3 P4 P5.** Synop
8ac0: 73 69 73 3a 20 72 5b 50 32 5d 3d 27 50 34 27 20  sis: r[P2]='P4' 
8ad0: 28 6c 65 6e 3d 50 31 29 0a 2a 2a 0a 2a 2a 20 54  (len=P1).**.** T
8ae0: 68 65 20 73 74 72 69 6e 67 20 76 61 6c 75 65 20  he string value 
8af0: 50 34 20 6f 66 20 6c 65 6e 67 74 68 20 50 31 20  P4 of length P1 
8b00: 28 62 79 74 65 73 29 20 69 73 20 73 74 6f 72 65  (bytes) is store
8b10: 64 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32  d in register P2
8b20: 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 33 20 69 73  ..**.** If P3 is
8b30: 20 6e 6f 74 20 7a 65 72 6f 20 61 6e 64 20 74 68   not zero and th
8b40: 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 72 65 67  e content of reg
8b50: 69 73 74 65 72 20 50 33 20 69 73 20 65 71 75 61  ister P3 is equa
8b60: 6c 20 74 6f 20 50 35 2c 20 74 68 65 6e 0a 2a 2a  l to P5, then.**
8b70: 20 74 68 65 20 64 61 74 61 74 79 70 65 20 6f 66   the datatype of
8b80: 20 74 68 65 20 72 65 67 69 73 74 65 72 20 50 32   the register P2
8b90: 20 69 73 20 63 6f 6e 76 65 72 74 65 64 20 74 6f   is converted to
8ba0: 20 42 4c 4f 42 2e 20 20 54 68 65 20 63 6f 6e 74   BLOB.  The cont
8bb0: 65 6e 74 20 69 73 0a 2a 2a 20 74 68 65 20 73 61  ent is.** the sa
8bc0: 6d 65 20 73 65 71 75 65 6e 63 65 20 6f 66 20 62  me sequence of b
8bd0: 79 74 65 73 2c 20 69 74 20 69 73 20 6d 65 72 65  ytes, it is mere
8be0: 6c 79 20 69 6e 74 65 72 70 72 65 74 65 64 20 61  ly interpreted a
8bf0: 73 20 61 20 42 4c 4f 42 20 69 6e 73 74 65 61 64  s a BLOB instead
8c00: 0a 2a 2a 20 6f 66 20 61 20 73 74 72 69 6e 67 2c  .** of a string,
8c10: 20 61 73 20 69 66 20 69 74 20 68 61 64 20 62 65   as if it had be
8c20: 65 6e 20 43 41 53 54 2e 20 20 49 6e 20 6f 74 68  en CAST.  In oth
8c30: 65 72 20 77 6f 72 64 73 3a 0a 2a 2a 0a 2a 2a 20  er words:.**.** 
8c40: 69 66 28 20 50 33 21 3d 30 20 61 6e 64 20 72 65  if( P3!=0 and re
8c50: 67 5b 50 33 5d 3d 3d 50 35 20 29 20 72 65 67 5b  g[P3]==P5 ) reg[
8c60: 50 32 5d 20 3a 3d 20 43 41 53 54 28 72 65 67 5b  P2] := CAST(reg[
8c70: 50 32 5d 20 61 73 20 42 4c 4f 42 29 0a 2a 2f 0a  P2] as BLOB).*/.
8c80: 63 61 73 65 20 4f 50 5f 53 74 72 69 6e 67 3a 20  case OP_String: 
8c90: 7b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75  {          /* ou
8ca0: 74 32 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20  t2 */.  assert( 
8cb0: 70 4f 70 2d 3e 70 34 2e 7a 21 3d 30 20 29 3b 0a  pOp->p4.z!=0 );.
8cc0: 20 20 70 4f 75 74 20 3d 20 6f 75 74 32 50 72 65    pOut = out2Pre
8cd0: 72 65 6c 65 61 73 65 28 70 2c 20 70 4f 70 29 3b  release(p, pOp);
8ce0: 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d  .  pOut->flags =
8cf0: 20 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f 53 74 61   MEM_Str|MEM_Sta
8d00: 74 69 63 7c 4d 45 4d 5f 54 65 72 6d 3b 0a 20 20  tic|MEM_Term;.  
8d10: 70 4f 75 74 2d 3e 7a 20 3d 20 70 4f 70 2d 3e 70  pOut->z = pOp->p
8d20: 34 2e 7a 3b 0a 20 20 70 4f 75 74 2d 3e 6e 20 3d  4.z;.  pOut->n =
8d30: 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 70 4f 75 74   pOp->p1;.  pOut
8d40: 2d 3e 65 6e 63 20 3d 20 65 6e 63 6f 64 69 6e 67  ->enc = encoding
8d50: 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42  ;.  UPDATE_MAX_B
8d60: 4c 4f 42 53 49 5a 45 28 70 4f 75 74 29 3b 0a 23  LOBSIZE(pOut);.#
8d70: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4c 49  ifndef SQLITE_LI
8d80: 4b 45 5f 44 4f 45 53 4e 54 5f 4d 41 54 43 48 5f  KE_DOESNT_MATCH_
8d90: 42 4c 4f 42 53 0a 20 20 69 66 28 20 70 4f 70 2d  BLOBS.  if( pOp-
8da0: 3e 70 33 3e 30 20 29 7b 0a 20 20 20 20 61 73 73  >p3>0 ){.    ass
8db0: 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c 3d 28 70  ert( pOp->p3<=(p
8dc0: 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43  ->nMem+1 - p->nC
8dd0: 75 72 73 6f 72 29 20 29 3b 0a 20 20 20 20 70 49  ursor) );.    pI
8de0: 6e 33 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n3 = &aMem[pOp->
8df0: 70 33 5d 3b 0a 20 20 20 20 61 73 73 65 72 74 28  p3];.    assert(
8e00: 20 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d   pIn3->flags & M
8e10: 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 20 20 69 66  EM_Int );.    if
8e20: 28 20 70 49 6e 33 2d 3e 75 2e 69 3d 3d 70 4f 70  ( pIn3->u.i==pOp
8e30: 2d 3e 70 35 20 29 20 70 4f 75 74 2d 3e 66 6c 61  ->p5 ) pOut->fla
8e40: 67 73 20 3d 20 4d 45 4d 5f 42 6c 6f 62 7c 4d 45  gs = MEM_Blob|ME
8e50: 4d 5f 53 74 61 74 69 63 7c 4d 45 4d 5f 54 65 72  M_Static|MEM_Ter
8e60: 6d 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20  m;.  }.#endif.  
8e70: 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
8e80: 6f 64 65 3a 20 4e 75 6c 6c 20 50 31 20 50 32 20  ode: Null P1 P2 
8e90: 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73  P3 * *.** Synops
8ea0: 69 73 3a 20 72 5b 50 32 2e 2e 50 33 5d 3d 4e 55  is: r[P2..P3]=NU
8eb0: 4c 4c 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 61  LL.**.** Write a
8ec0: 20 4e 55 4c 4c 20 69 6e 74 6f 20 72 65 67 69 73   NULL into regis
8ed0: 74 65 72 73 20 50 32 2e 20 20 49 66 20 50 33 20  ters P2.  If P3 
8ee0: 67 72 65 61 74 65 72 20 74 68 61 6e 20 50 32 2c  greater than P2,
8ef0: 20 74 68 65 6e 20 61 6c 73 6f 20 77 72 69 74 65   then also write
8f00: 0a 2a 2a 20 4e 55 4c 4c 20 69 6e 74 6f 20 72 65  .** NULL into re
8f10: 67 69 73 74 65 72 20 50 33 20 61 6e 64 20 65 76  gister P3 and ev
8f20: 65 72 79 20 72 65 67 69 73 74 65 72 20 69 6e 20  ery register in 
8f30: 62 65 74 77 65 65 6e 20 50 32 20 61 6e 64 20 50  between P2 and P
8f40: 33 2e 20 20 49 66 20 50 33 0a 2a 2a 20 69 73 20  3.  If P3.** is 
8f50: 6c 65 73 73 20 74 68 61 6e 20 50 32 20 28 74 79  less than P2 (ty
8f60: 70 69 63 61 6c 6c 79 20 50 33 20 69 73 20 7a 65  pically P3 is ze
8f70: 72 6f 29 20 74 68 65 6e 20 6f 6e 6c 79 20 72 65  ro) then only re
8f80: 67 69 73 74 65 72 20 50 32 20 69 73 0a 2a 2a 20  gister P2 is.** 
8f90: 73 65 74 20 74 6f 20 4e 55 4c 4c 2e 0a 2a 2a 0a  set to NULL..**.
8fa0: 2a 2a 20 49 66 20 74 68 65 20 50 31 20 76 61 6c  ** If the P1 val
8fb0: 75 65 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20  ue is non-zero, 
8fc0: 74 68 65 6e 20 61 6c 73 6f 20 73 65 74 20 74 68  then also set th
8fd0: 65 20 4d 45 4d 5f 43 6c 65 61 72 65 64 20 66 6c  e MEM_Cleared fl
8fe0: 61 67 20 73 6f 20 74 68 61 74 0a 2a 2a 20 4e 55  ag so that.** NU
8ff0: 4c 4c 20 76 61 6c 75 65 73 20 77 69 6c 6c 20 6e  LL values will n
9000: 6f 74 20 63 6f 6d 70 61 72 65 20 65 71 75 61 6c  ot compare equal
9010: 20 65 76 65 6e 20 69 66 20 53 51 4c 49 54 45 5f   even if SQLITE_
9020: 4e 55 4c 4c 45 51 20 69 73 20 73 65 74 20 6f 6e  NULLEQ is set on
9030: 0a 2a 2a 20 4f 50 5f 4e 65 20 6f 72 20 4f 50 5f  .** OP_Ne or OP_
9040: 45 71 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e  Eq..*/.case OP_N
9050: 75 6c 6c 3a 20 7b 20 20 20 20 20 20 20 20 20 20  ull: {          
9060: 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20 20 69 6e   /* out2 */.  in
9070: 74 20 63 6e 74 3b 0a 20 20 75 31 36 20 6e 75 6c  t cnt;.  u16 nul
9080: 6c 46 6c 61 67 3b 0a 20 20 70 4f 75 74 20 3d 20  lFlag;.  pOut = 
9090: 6f 75 74 32 50 72 65 72 65 6c 65 61 73 65 28 70  out2Prerelease(p
90a0: 2c 20 70 4f 70 29 3b 0a 20 20 63 6e 74 20 3d 20  , pOp);.  cnt = 
90b0: 70 4f 70 2d 3e 70 33 2d 70 4f 70 2d 3e 70 32 3b  pOp->p3-pOp->p2;
90c0: 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
90d0: 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d  p3<=(p->nMem+1 -
90e0: 20 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a   p->nCursor) );.
90f0: 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20    pOut->flags = 
9100: 6e 75 6c 6c 46 6c 61 67 20 3d 20 70 4f 70 2d 3e  nullFlag = pOp->
9110: 70 31 20 3f 20 28 4d 45 4d 5f 4e 75 6c 6c 7c 4d  p1 ? (MEM_Null|M
9120: 45 4d 5f 43 6c 65 61 72 65 64 29 20 3a 20 4d 45  EM_Cleared) : ME
9130: 4d 5f 4e 75 6c 6c 3b 0a 20 20 70 4f 75 74 2d 3e  M_Null;.  pOut->
9140: 6e 20 3d 20 30 3b 0a 20 20 77 68 69 6c 65 28 20  n = 0;.  while( 
9150: 63 6e 74 3e 30 20 29 7b 0a 20 20 20 20 70 4f 75  cnt>0 ){.    pOu
9160: 74 2b 2b 3b 0a 20 20 20 20 6d 65 6d 41 62 6f 75  t++;.    memAbou
9170: 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 4f 75  tToChange(p, pOu
9180: 74 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56  t);.    sqlite3V
9190: 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 4f  dbeMemSetNull(pO
91a0: 75 74 29 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 66  ut);.    pOut->f
91b0: 6c 61 67 73 20 3d 20 6e 75 6c 6c 46 6c 61 67 3b  lags = nullFlag;
91c0: 0a 20 20 20 20 70 4f 75 74 2d 3e 6e 20 3d 20 30  .    pOut->n = 0
91d0: 3b 0a 20 20 20 20 63 6e 74 2d 2d 3b 0a 20 20 7d  ;.    cnt--;.  }
91e0: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
91f0: 4f 70 63 6f 64 65 3a 20 53 6f 66 74 4e 75 6c 6c  Opcode: SoftNull
9200: 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 20 53   P1 * * * *.** S
9210: 79 6e 6f 70 73 69 73 3a 20 72 5b 50 31 5d 3d 4e  ynopsis: r[P1]=N
9220: 55 4c 4c 0a 2a 2a 0a 2a 2a 20 53 65 74 20 72 65  ULL.**.** Set re
9230: 67 69 73 74 65 72 20 50 31 20 74 6f 20 68 61 76  gister P1 to hav
9240: 65 20 74 68 65 20 76 61 6c 75 65 20 4e 55 4c 4c  e the value NULL
9250: 20 61 73 20 73 65 65 6e 20 62 79 20 74 68 65 20   as seen by the 
9260: 4f 50 5f 4d 61 6b 65 52 65 63 6f 72 64 0a 2a 2a  OP_MakeRecord.**
9270: 20 69 6e 73 74 72 75 63 74 69 6f 6e 2c 20 62 75   instruction, bu
9280: 74 20 64 6f 20 6e 6f 74 20 66 72 65 65 20 61 6e  t do not free an
9290: 79 20 73 74 72 69 6e 67 20 6f 72 20 62 6c 6f 62  y string or blob
92a0: 20 6d 65 6d 6f 72 79 20 61 73 73 6f 63 69 61 74   memory associat
92b0: 65 64 20 77 69 74 68 0a 2a 2a 20 74 68 65 20 72  ed with.** the r
92c0: 65 67 69 73 74 65 72 2c 20 73 6f 20 74 68 61 74  egister, so that
92d0: 20 69 66 20 74 68 65 20 76 61 6c 75 65 20 77 61   if the value wa
92e0: 73 20 61 20 73 74 72 69 6e 67 20 6f 72 20 62 6c  s a string or bl
92f0: 6f 62 20 74 68 61 74 20 77 61 73 0a 2a 2a 20 70  ob that was.** p
9300: 72 65 76 69 6f 75 73 6c 79 20 63 6f 70 69 65 64  reviously copied
9310: 20 75 73 69 6e 67 20 4f 50 5f 53 43 6f 70 79 2c   using OP_SCopy,
9320: 20 74 68 65 20 63 6f 70 69 65 73 20 77 69 6c 6c   the copies will
9330: 20 63 6f 6e 74 69 6e 75 65 20 74 6f 20 62 65 20   continue to be 
9340: 76 61 6c 69 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f  valid..*/.case O
9350: 50 5f 53 6f 66 74 4e 75 6c 6c 3a 20 7b 0a 20 20  P_SoftNull: {.  
9360: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
9370: 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 3d 28 70  0 && pOp->p1<=(p
9380: 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43  ->nMem+1 - p->nC
9390: 75 72 73 6f 72 29 20 29 3b 0a 20 20 70 4f 75 74  ursor) );.  pOut
93a0: 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31   = &aMem[pOp->p1
93b0: 5d 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73  ];.  pOut->flags
93c0: 20 3d 20 28 70 4f 75 74 2d 3e 66 6c 61 67 73 26   = (pOut->flags&
93d0: 7e 28 4d 45 4d 5f 55 6e 64 65 66 69 6e 65 64 7c  ~(MEM_Undefined|
93e0: 4d 45 4d 5f 41 66 66 4d 61 73 6b 29 29 7c 4d 45  MEM_AffMask))|ME
93f0: 4d 5f 4e 75 6c 6c 3b 0a 20 20 62 72 65 61 6b 3b  M_Null;.  break;
9400: 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 42  .}../* Opcode: B
9410: 6c 6f 62 20 50 31 20 50 32 20 2a 20 50 34 20 2a  lob P1 P2 * P4 *
9420: 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b  .** Synopsis: r[
9430: 50 32 5d 3d 50 34 20 28 6c 65 6e 3d 50 31 29 0a  P2]=P4 (len=P1).
9440: 2a 2a 0a 2a 2a 20 50 34 20 70 6f 69 6e 74 73 20  **.** P4 points 
9450: 74 6f 20 61 20 62 6c 6f 62 20 6f 66 20 64 61 74  to a blob of dat
9460: 61 20 50 31 20 62 79 74 65 73 20 6c 6f 6e 67 2e  a P1 bytes long.
9470: 20 20 53 74 6f 72 65 20 74 68 69 73 0a 2a 2a 20    Store this.** 
9480: 62 6c 6f 62 20 69 6e 20 72 65 67 69 73 74 65 72  blob in register
9490: 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f   P2..*/.case OP_
94a0: 42 6c 6f 62 3a 20 7b 20 20 20 20 20 20 20 20 20  Blob: {         
94b0: 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a         /* out2 *
94c0: 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  /.  assert( pOp-
94d0: 3e 70 31 20 3c 3d 20 53 51 4c 49 54 45 5f 4d 41  >p1 <= SQLITE_MA
94e0: 58 5f 4c 45 4e 47 54 48 20 29 3b 0a 20 20 70 4f  X_LENGTH );.  pO
94f0: 75 74 20 3d 20 6f 75 74 32 50 72 65 72 65 6c 65  ut = out2Prerele
9500: 61 73 65 28 70 2c 20 70 4f 70 29 3b 0a 20 20 73  ase(p, pOp);.  s
9510: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74  qlite3VdbeMemSet
9520: 53 74 72 28 70 4f 75 74 2c 20 70 4f 70 2d 3e 70  Str(pOut, pOp->p
9530: 34 2e 7a 2c 20 70 4f 70 2d 3e 70 31 2c 20 30 2c  4.z, pOp->p1, 0,
9540: 20 30 29 3b 0a 20 20 70 4f 75 74 2d 3e 65 6e 63   0);.  pOut->enc
9550: 20 3d 20 65 6e 63 6f 64 69 6e 67 3b 0a 20 20 55   = encoding;.  U
9560: 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49  PDATE_MAX_BLOBSI
9570: 5a 45 28 70 4f 75 74 29 3b 0a 20 20 62 72 65 61  ZE(pOut);.  brea
9580: 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
9590: 20 56 61 72 69 61 62 6c 65 20 50 31 20 50 32 20   Variable P1 P2 
95a0: 2a 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73  * P4 *.** Synops
95b0: 69 73 3a 20 72 5b 50 32 5d 3d 70 61 72 61 6d 65  is: r[P2]=parame
95c0: 74 65 72 28 50 31 2c 50 34 29 0a 2a 2a 0a 2a 2a  ter(P1,P4).**.**
95d0: 20 54 72 61 6e 73 66 65 72 20 74 68 65 20 76 61   Transfer the va
95e0: 6c 75 65 73 20 6f 66 20 62 6f 75 6e 64 20 70 61  lues of bound pa
95f0: 72 61 6d 65 74 65 72 20 50 31 20 69 6e 74 6f 20  rameter P1 into 
9600: 72 65 67 69 73 74 65 72 20 50 32 0a 2a 2a 0a 2a  register P2.**.*
9610: 2a 20 49 66 20 74 68 65 20 70 61 72 61 6d 65 74  * If the paramet
9620: 65 72 20 69 73 20 6e 61 6d 65 64 2c 20 74 68 65  er is named, the
9630: 6e 20 69 74 73 20 6e 61 6d 65 20 61 70 70 65 61  n its name appea
9640: 72 73 20 69 6e 20 50 34 2e 0a 2a 2a 20 54 68 65  rs in P4..** The
9650: 20 50 34 20 76 61 6c 75 65 20 69 73 20 75 73 65   P4 value is use
9660: 64 20 62 79 20 73 71 6c 69 74 65 33 5f 62 69 6e  d by sqlite3_bin
9670: 64 5f 70 61 72 61 6d 65 74 65 72 5f 6e 61 6d 65  d_parameter_name
9680: 28 29 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56  ()..*/.case OP_V
9690: 61 72 69 61 62 6c 65 3a 20 7b 20 20 20 20 20 20  ariable: {      
96a0: 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f        /* out2 */
96b0: 0a 20 20 4d 65 6d 20 2a 70 56 61 72 3b 20 20 20  .  Mem *pVar;   
96c0: 20 20 20 20 2f 2a 20 56 61 6c 75 65 20 62 65 69      /* Value bei
96d0: 6e 67 20 74 72 61 6e 73 66 65 72 72 65 64 20 2a  ng transferred *
96e0: 2f 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  /..  assert( pOp
96f0: 2d 3e 70 31 3e 30 20 26 26 20 70 4f 70 2d 3e 70  ->p1>0 && pOp->p
9700: 31 3c 3d 70 2d 3e 6e 56 61 72 20 29 3b 0a 20 20  1<=p->nVar );.  
9710: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 2e  assert( pOp->p4.
9720: 7a 3d 3d 30 20 7c 7c 20 70 4f 70 2d 3e 70 34 2e  z==0 || pOp->p4.
9730: 7a 3d 3d 73 71 6c 69 74 65 33 56 4c 69 73 74 4e  z==sqlite3VListN
9740: 75 6d 54 6f 4e 61 6d 65 28 70 2d 3e 70 56 4c 69  umToName(p->pVLi
9750: 73 74 2c 70 4f 70 2d 3e 70 31 29 20 29 3b 0a 20  st,pOp->p1) );. 
9760: 20 70 56 61 72 20 3d 20 26 70 2d 3e 61 56 61 72   pVar = &p->aVar
9770: 5b 70 4f 70 2d 3e 70 31 20 2d 20 31 5d 3b 0a 20  [pOp->p1 - 1];. 
9780: 20 69 66 28 20 73 71 6c 69 74 65 33 56 64 62 65   if( sqlite3Vdbe
9790: 4d 65 6d 54 6f 6f 42 69 67 28 70 56 61 72 29 20  MemTooBig(pVar) 
97a0: 29 7b 0a 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f  ){.    goto too_
97b0: 62 69 67 3b 0a 20 20 7d 0a 20 20 70 4f 75 74 20  big;.  }.  pOut 
97c0: 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d  = &aMem[pOp->p2]
97d0: 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d  ;.  sqlite3VdbeM
97e0: 65 6d 53 68 61 6c 6c 6f 77 43 6f 70 79 28 70 4f  emShallowCopy(pO
97f0: 75 74 2c 20 70 56 61 72 2c 20 4d 45 4d 5f 53 74  ut, pVar, MEM_St
9800: 61 74 69 63 29 3b 0a 20 20 55 50 44 41 54 45 5f  atic);.  UPDATE_
9810: 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 4f 75  MAX_BLOBSIZE(pOu
9820: 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  t);.  break;.}..
9830: 2f 2a 20 4f 70 63 6f 64 65 3a 20 4d 6f 76 65 20  /* Opcode: Move 
9840: 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20  P1 P2 P3 * *.** 
9850: 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 40 50  Synopsis: r[P2@P
9860: 33 5d 3d 72 5b 50 31 40 50 33 5d 0a 2a 2a 0a 2a  3]=r[P1@P3].**.*
9870: 2a 20 4d 6f 76 65 20 74 68 65 20 50 33 20 76 61  * Move the P3 va
9880: 6c 75 65 73 20 69 6e 20 72 65 67 69 73 74 65 72  lues in register
9890: 20 50 31 2e 2e 50 31 2b 50 33 2d 31 20 6f 76 65   P1..P1+P3-1 ove
98a0: 72 20 69 6e 74 6f 0a 2a 2a 20 72 65 67 69 73 74  r into.** regist
98b0: 65 72 73 20 50 32 2e 2e 50 32 2b 50 33 2d 31 2e  ers P2..P2+P3-1.
98c0: 20 20 52 65 67 69 73 74 65 72 73 20 50 31 2e 2e    Registers P1..
98d0: 50 31 2b 50 33 2d 31 20 61 72 65 0a 2a 2a 20 6c  P1+P3-1 are.** l
98e0: 65 66 74 20 68 6f 6c 64 69 6e 67 20 61 20 4e 55  eft holding a NU
98f0: 4c 4c 2e 20 20 49 74 20 69 73 20 61 6e 20 65 72  LL.  It is an er
9900: 72 6f 72 20 66 6f 72 20 72 65 67 69 73 74 65 72  ror for register
9910: 20 72 61 6e 67 65 73 0a 2a 2a 20 50 31 2e 2e 50   ranges.** P1..P
9920: 31 2b 50 33 2d 31 20 61 6e 64 20 50 32 2e 2e 50  1+P3-1 and P2..P
9930: 32 2b 50 33 2d 31 20 74 6f 20 6f 76 65 72 6c 61  2+P3-1 to overla
9940: 70 2e 20 20 49 74 20 69 73 20 61 6e 20 65 72 72  p.  It is an err
9950: 6f 72 0a 2a 2a 20 66 6f 72 20 50 33 20 74 6f 20  or.** for P3 to 
9960: 62 65 20 6c 65 73 73 20 74 68 61 6e 20 31 2e 0a  be less than 1..
9970: 2a 2f 0a 63 61 73 65 20 4f 50 5f 4d 6f 76 65 3a  */.case OP_Move:
9980: 20 7b 0a 20 20 69 6e 74 20 6e 3b 20 20 20 20 20   {.  int n;     
9990: 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
99a0: 6f 66 20 72 65 67 69 73 74 65 72 73 20 6c 65 66  of registers lef
99b0: 74 20 74 6f 20 63 6f 70 79 20 2a 2f 0a 20 20 69  t to copy */.  i
99c0: 6e 74 20 70 31 3b 20 20 20 20 20 20 20 20 20 20  nt p1;          
99d0: 2f 2a 20 52 65 67 69 73 74 65 72 20 74 6f 20 63  /* Register to c
99e0: 6f 70 79 20 66 72 6f 6d 20 2a 2f 0a 20 20 69 6e  opy from */.  in
99f0: 74 20 70 32 3b 20 20 20 20 20 20 20 20 20 20 2f  t p2;          /
9a00: 2a 20 52 65 67 69 73 74 65 72 20 74 6f 20 63 6f  * Register to co
9a10: 70 79 20 74 6f 20 2a 2f 0a 0a 20 20 6e 20 3d 20  py to */..  n = 
9a20: 70 4f 70 2d 3e 70 33 3b 0a 20 20 70 31 20 3d 20  pOp->p3;.  p1 = 
9a30: 70 4f 70 2d 3e 70 31 3b 0a 20 20 70 32 20 3d 20  pOp->p1;.  p2 = 
9a40: 70 4f 70 2d 3e 70 32 3b 0a 20 20 61 73 73 65 72  pOp->p2;.  asser
9a50: 74 28 20 6e 3e 30 20 26 26 20 70 31 3e 30 20 26  t( n>0 && p1>0 &
9a60: 26 20 70 32 3e 30 20 29 3b 0a 20 20 61 73 73 65  & p2>0 );.  asse
9a70: 72 74 28 20 70 31 2b 6e 3c 3d 70 32 20 7c 7c 20  rt( p1+n<=p2 || 
9a80: 70 32 2b 6e 3c 3d 70 31 20 29 3b 0a 0a 20 20 70  p2+n<=p1 );..  p
9a90: 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 31 5d 3b  In1 = &aMem[p1];
9aa0: 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b  .  pOut = &aMem[
9ab0: 70 32 5d 3b 0a 20 20 64 6f 7b 0a 20 20 20 20 61  p2];.  do{.    a
9ac0: 73 73 65 72 74 28 20 70 4f 75 74 3c 3d 26 61 4d  ssert( pOut<=&aM
9ad0: 65 6d 5b 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20  em[(p->nMem+1 - 
9ae0: 70 2d 3e 6e 43 75 72 73 6f 72 29 5d 20 29 3b 0a  p->nCursor)] );.
9af0: 20 20 20 20 61 73 73 65 72 74 28 20 70 49 6e 31      assert( pIn1
9b00: 3c 3d 26 61 4d 65 6d 5b 28 70 2d 3e 6e 4d 65 6d  <=&aMem[(p->nMem
9b10: 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29  +1 - p->nCursor)
9b20: 5d 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  ] );.    assert(
9b30: 20 6d 65 6d 49 73 56 61 6c 69 64 28 70 49 6e 31   memIsValid(pIn1
9b40: 29 20 29 3b 0a 20 20 20 20 6d 65 6d 41 62 6f 75  ) );.    memAbou
9b50: 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 4f 75  tToChange(p, pOu
9b60: 74 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56  t);.    sqlite3V
9b70: 64 62 65 4d 65 6d 4d 6f 76 65 28 70 4f 75 74 2c  dbeMemMove(pOut,
9b80: 20 70 49 6e 31 29 3b 0a 23 69 66 64 65 66 20 53   pIn1);.#ifdef S
9b90: 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 20 20  QLITE_DEBUG.    
9ba0: 69 66 28 20 70 4f 75 74 2d 3e 70 53 63 6f 70 79  if( pOut->pScopy
9bb0: 46 72 6f 6d 3e 3d 26 61 4d 65 6d 5b 70 31 5d 20  From>=&aMem[p1] 
9bc0: 26 26 20 70 4f 75 74 2d 3e 70 53 63 6f 70 79 46  && pOut->pScopyF
9bd0: 72 6f 6d 3c 70 4f 75 74 20 29 7b 0a 20 20 20 20  rom<pOut ){.    
9be0: 20 20 70 4f 75 74 2d 3e 70 53 63 6f 70 79 46 72    pOut->pScopyFr
9bf0: 6f 6d 20 2b 3d 20 70 4f 70 2d 3e 70 32 20 2d 20  om += pOp->p2 - 
9c00: 70 31 3b 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66  p1;.    }.#endif
9c10: 0a 20 20 20 20 44 65 65 70 68 65 6d 65 72 61 6c  .    Deephemeral
9c20: 69 7a 65 28 70 4f 75 74 29 3b 0a 20 20 20 20 52  ize(pOut);.    R
9c30: 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 32  EGISTER_TRACE(p2
9c40: 2b 2b 2c 20 70 4f 75 74 29 3b 0a 20 20 20 20 70  ++, pOut);.    p
9c50: 49 6e 31 2b 2b 3b 0a 20 20 20 20 70 4f 75 74 2b  In1++;.    pOut+
9c60: 2b 3b 0a 20 20 7d 77 68 69 6c 65 28 20 2d 2d 6e  +;.  }while( --n
9c70: 20 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a   );.  break;.}..
9c80: 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6f 70 79 20  /* Opcode: Copy 
9c90: 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20  P1 P2 P3 * *.** 
9ca0: 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 40 50  Synopsis: r[P2@P
9cb0: 33 2b 31 5d 3d 72 5b 50 31 40 50 33 2b 31 5d 0a  3+1]=r[P1@P3+1].
9cc0: 2a 2a 0a 2a 2a 20 4d 61 6b 65 20 61 20 63 6f 70  **.** Make a cop
9cd0: 79 20 6f 66 20 72 65 67 69 73 74 65 72 73 20 50  y of registers P
9ce0: 31 2e 2e 50 31 2b 50 33 20 69 6e 74 6f 20 72 65  1..P1+P3 into re
9cf0: 67 69 73 74 65 72 73 20 50 32 2e 2e 50 32 2b 50  gisters P2..P2+P
9d00: 33 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 6e  3..**.** This in
9d10: 73 74 72 75 63 74 69 6f 6e 20 6d 61 6b 65 73 20  struction makes 
9d20: 61 20 64 65 65 70 20 63 6f 70 79 20 6f 66 20 74  a deep copy of t
9d30: 68 65 20 76 61 6c 75 65 2e 20 20 41 20 64 75 70  he value.  A dup
9d40: 6c 69 63 61 74 65 0a 2a 2a 20 69 73 20 6d 61 64  licate.** is mad
9d50: 65 20 6f 66 20 61 6e 79 20 73 74 72 69 6e 67 20  e of any string 
9d60: 6f 72 20 62 6c 6f 62 20 63 6f 6e 73 74 61 6e 74  or blob constant
9d70: 2e 20 20 53 65 65 20 61 6c 73 6f 20 4f 50 5f 53  .  See also OP_S
9d80: 43 6f 70 79 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  Copy..*/.case OP
9d90: 5f 43 6f 70 79 3a 20 7b 0a 20 20 69 6e 74 20 6e  _Copy: {.  int n
9da0: 3b 0a 0a 20 20 6e 20 3d 20 70 4f 70 2d 3e 70 33  ;..  n = pOp->p3
9db0: 3b 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d  ;.  pIn1 = &aMem
9dc0: 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 4f 75  [pOp->p1];.  pOu
9dd0: 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  t = &aMem[pOp->p
9de0: 32 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f  2];.  assert( pO
9df0: 75 74 21 3d 70 49 6e 31 20 29 3b 0a 20 20 77 68  ut!=pIn1 );.  wh
9e00: 69 6c 65 28 20 31 20 29 7b 0a 20 20 20 20 73 71  ile( 1 ){.    sq
9e10: 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 68 61 6c  lite3VdbeMemShal
9e20: 6c 6f 77 43 6f 70 79 28 70 4f 75 74 2c 20 70 49  lowCopy(pOut, pI
9e30: 6e 31 2c 20 4d 45 4d 5f 45 70 68 65 6d 29 3b 0a  n1, MEM_Ephem);.
9e40: 20 20 20 20 44 65 65 70 68 65 6d 65 72 61 6c 69      Deephemerali
9e50: 7a 65 28 70 4f 75 74 29 3b 0a 23 69 66 64 65 66  ze(pOut);.#ifdef
9e60: 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20   SQLITE_DEBUG.  
9e70: 20 20 70 4f 75 74 2d 3e 70 53 63 6f 70 79 46 72    pOut->pScopyFr
9e80: 6f 6d 20 3d 20 30 3b 0a 23 65 6e 64 69 66 0a 20  om = 0;.#endif. 
9e90: 20 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43     REGISTER_TRAC
9ea0: 45 28 70 4f 70 2d 3e 70 32 2b 70 4f 70 2d 3e 70  E(pOp->p2+pOp->p
9eb0: 33 2d 6e 2c 20 70 4f 75 74 29 3b 0a 20 20 20 20  3-n, pOut);.    
9ec0: 69 66 28 20 28 6e 2d 2d 29 3d 3d 30 20 29 20 62  if( (n--)==0 ) b
9ed0: 72 65 61 6b 3b 0a 20 20 20 20 70 4f 75 74 2b 2b  reak;.    pOut++
9ee0: 3b 0a 20 20 20 20 70 49 6e 31 2b 2b 3b 0a 20 20  ;.    pIn1++;.  
9ef0: 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  }.  break;.}../*
9f00: 20 4f 70 63 6f 64 65 3a 20 53 43 6f 70 79 20 50   Opcode: SCopy P
9f10: 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79  1 P2 * * *.** Sy
9f20: 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 72 5b  nopsis: r[P2]=r[
9f30: 50 31 5d 0a 2a 2a 0a 2a 2a 20 4d 61 6b 65 20 61  P1].**.** Make a
9f40: 20 73 68 61 6c 6c 6f 77 20 63 6f 70 79 20 6f 66   shallow copy of
9f50: 20 72 65 67 69 73 74 65 72 20 50 31 20 69 6e 74   register P1 int
9f60: 6f 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a  o register P2..*
9f70: 2a 0a 2a 2a 20 54 68 69 73 20 69 6e 73 74 72 75  *.** This instru
9f80: 63 74 69 6f 6e 20 6d 61 6b 65 73 20 61 20 73 68  ction makes a sh
9f90: 61 6c 6c 6f 77 20 63 6f 70 79 20 6f 66 20 74 68  allow copy of th
9fa0: 65 20 76 61 6c 75 65 2e 20 20 49 66 20 74 68 65  e value.  If the
9fb0: 20 76 61 6c 75 65 0a 2a 2a 20 69 73 20 61 20 73   value.** is a s
9fc0: 74 72 69 6e 67 20 6f 72 20 62 6c 6f 62 2c 20 74  tring or blob, t
9fd0: 68 65 6e 20 74 68 65 20 63 6f 70 79 20 69 73 20  hen the copy is 
9fe0: 6f 6e 6c 79 20 61 20 70 6f 69 6e 74 65 72 20 74  only a pointer t
9ff0: 6f 20 74 68 65 0a 2a 2a 20 6f 72 69 67 69 6e 61  o the.** origina
a000: 6c 20 61 6e 64 20 68 65 6e 63 65 20 69 66 20 74  l and hence if t
a010: 68 65 20 6f 72 69 67 69 6e 61 6c 20 63 68 61 6e  he original chan
a020: 67 65 73 20 73 6f 20 77 69 6c 6c 20 74 68 65 20  ges so will the 
a030: 63 6f 70 79 2e 0a 2a 2a 20 57 6f 72 73 65 2c 20  copy..** Worse, 
a040: 69 66 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 20  if the original 
a050: 69 73 20 64 65 61 6c 6c 6f 63 61 74 65 64 2c 20  is deallocated, 
a060: 74 68 65 20 63 6f 70 79 20 62 65 63 6f 6d 65 73  the copy becomes
a070: 20 69 6e 76 61 6c 69 64 2e 0a 2a 2a 20 54 68 75   invalid..** Thu
a080: 73 20 74 68 65 20 70 72 6f 67 72 61 6d 20 6d 75  s the program mu
a090: 73 74 20 67 75 61 72 61 6e 74 65 65 20 74 68 61  st guarantee tha
a0a0: 74 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 20 77  t the original w
a0b0: 69 6c 6c 20 6e 6f 74 20 63 68 61 6e 67 65 0a 2a  ill not change.*
a0c0: 2a 20 64 75 72 69 6e 67 20 74 68 65 20 6c 69 66  * during the lif
a0d0: 65 74 69 6d 65 20 6f 66 20 74 68 65 20 63 6f 70  etime of the cop
a0e0: 79 2e 20 20 55 73 65 20 4f 50 5f 43 6f 70 79 20  y.  Use OP_Copy 
a0f0: 74 6f 20 6d 61 6b 65 20 61 20 63 6f 6d 70 6c 65  to make a comple
a100: 74 65 0a 2a 2a 20 63 6f 70 79 2e 0a 2a 2f 0a 63  te.** copy..*/.c
a110: 61 73 65 20 4f 50 5f 53 43 6f 70 79 3a 20 7b 20  ase OP_SCopy: { 
a120: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75             /* ou
a130: 74 32 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26  t2 */.  pIn1 = &
a140: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  aMem[pOp->p1];. 
a150: 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f   pOut = &aMem[pO
a160: 70 2d 3e 70 32 5d 3b 0a 20 20 61 73 73 65 72 74  p->p2];.  assert
a170: 28 20 70 4f 75 74 21 3d 70 49 6e 31 20 29 3b 0a  ( pOut!=pIn1 );.
a180: 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
a190: 53 68 61 6c 6c 6f 77 43 6f 70 79 28 70 4f 75 74  ShallowCopy(pOut
a1a0: 2c 20 70 49 6e 31 2c 20 4d 45 4d 5f 45 70 68 65  , pIn1, MEM_Ephe
a1b0: 6d 29 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54  m);.#ifdef SQLIT
a1c0: 45 5f 44 45 42 55 47 0a 20 20 69 66 28 20 70 4f  E_DEBUG.  if( pO
a1d0: 75 74 2d 3e 70 53 63 6f 70 79 46 72 6f 6d 3d 3d  ut->pScopyFrom==
a1e0: 30 20 29 20 70 4f 75 74 2d 3e 70 53 63 6f 70 79  0 ) pOut->pScopy
a1f0: 46 72 6f 6d 20 3d 20 70 49 6e 31 3b 0a 23 65 6e  From = pIn1;.#en
a200: 64 69 66 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  dif.  break;.}..
a210: 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 6e 74 43 6f  /* Opcode: IntCo
a220: 70 79 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  py P1 P2 * * *.*
a230: 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32  * Synopsis: r[P2
a240: 5d 3d 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 54 72  ]=r[P1].**.** Tr
a250: 61 6e 73 66 65 72 20 74 68 65 20 69 6e 74 65 67  ansfer the integ
a260: 65 72 20 76 61 6c 75 65 20 68 65 6c 64 20 69 6e  er value held in
a270: 20 72 65 67 69 73 74 65 72 20 50 31 20 69 6e 74   register P1 int
a280: 6f 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a  o register P2..*
a290: 2a 0a 2a 2a 20 54 68 69 73 20 69 73 20 61 6e 20  *.** This is an 
a2a0: 6f 70 74 69 6d 69 7a 65 64 20 76 65 72 73 69 6f  optimized versio
a2b0: 6e 20 6f 66 20 53 43 6f 70 79 20 74 68 61 74 20  n of SCopy that 
a2c0: 77 6f 72 6b 73 20 6f 6e 6c 79 20 66 6f 72 20 69  works only for i
a2d0: 6e 74 65 67 65 72 0a 2a 2a 20 76 61 6c 75 65 73  nteger.** values
a2e0: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 6e 74  ..*/.case OP_Int
a2f0: 43 6f 70 79 3a 20 7b 20 20 20 20 20 20 20 20 20  Copy: {         
a300: 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20 20     /* out2 */.  
a310: 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn1 = &aMem[pOp
a320: 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p1];.  assert(
a330: 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20   (pIn1->flags & 
a340: 4d 45 4d 5f 49 6e 74 29 21 3d 30 20 29 3b 0a 20  MEM_Int)!=0 );. 
a350: 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f   pOut = &aMem[pO
a360: 70 2d 3e 70 32 5d 3b 0a 20 20 73 71 6c 69 74 65  p->p2];.  sqlite
a370: 33 56 64 62 65 4d 65 6d 53 65 74 49 6e 74 36 34  3VdbeMemSetInt64
a380: 28 70 4f 75 74 2c 20 70 49 6e 31 2d 3e 75 2e 69  (pOut, pIn1->u.i
a390: 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  );.  break;.}../
a3a0: 2a 20 4f 70 63 6f 64 65 3a 20 52 65 73 75 6c 74  * Opcode: Result
a3b0: 52 6f 77 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  Row P1 P2 * * *.
a3c0: 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6f 75 74  ** Synopsis: out
a3d0: 70 75 74 3d 72 5b 50 31 40 50 32 5d 0a 2a 2a 0a  put=r[P1@P2].**.
a3e0: 2a 2a 20 54 68 65 20 72 65 67 69 73 74 65 72 73  ** The registers
a3f0: 20 50 31 20 74 68 72 6f 75 67 68 20 50 31 2b 50   P1 through P1+P
a400: 32 2d 31 20 63 6f 6e 74 61 69 6e 20 61 20 73 69  2-1 contain a si
a410: 6e 67 6c 65 20 72 6f 77 20 6f 66 0a 2a 2a 20 72  ngle row of.** r
a420: 65 73 75 6c 74 73 2e 20 54 68 69 73 20 6f 70 63  esults. This opc
a430: 6f 64 65 20 63 61 75 73 65 73 20 74 68 65 20 73  ode causes the s
a440: 71 6c 69 74 65 33 5f 73 74 65 70 28 29 20 63 61  qlite3_step() ca
a450: 6c 6c 20 74 6f 20 74 65 72 6d 69 6e 61 74 65 0a  ll to terminate.
a460: 2a 2a 20 77 69 74 68 20 61 6e 20 53 51 4c 49 54  ** with an SQLIT
a470: 45 5f 52 4f 57 20 72 65 74 75 72 6e 20 63 6f 64  E_ROW return cod
a480: 65 20 61 6e 64 20 69 74 20 73 65 74 73 20 75 70  e and it sets up
a490: 20 74 68 65 20 73 71 6c 69 74 65 33 5f 73 74 6d   the sqlite3_stm
a4a0: 74 0a 2a 2a 20 73 74 72 75 63 74 75 72 65 20 74  t.** structure t
a4b0: 6f 20 70 72 6f 76 69 64 65 20 61 63 63 65 73 73  o provide access
a4c0: 20 74 6f 20 74 68 65 20 72 28 50 31 29 2e 2e 72   to the r(P1)..r
a4d0: 28 50 31 2b 50 32 2d 31 29 20 76 61 6c 75 65 73  (P1+P2-1) values
a4e0: 20 61 73 0a 2a 2a 20 74 68 65 20 72 65 73 75 6c   as.** the resul
a4f0: 74 20 72 6f 77 2e 0a 2a 2f 0a 63 61 73 65 20 4f  t row..*/.case O
a500: 50 5f 52 65 73 75 6c 74 52 6f 77 3a 20 7b 0a 20  P_ResultRow: {. 
a510: 20 4d 65 6d 20 2a 70 4d 65 6d 3b 0a 20 20 69 6e   Mem *pMem;.  in
a520: 74 20 69 3b 0a 20 20 61 73 73 65 72 74 28 20 70  t i;.  assert( p
a530: 2d 3e 6e 52 65 73 43 6f 6c 75 6d 6e 3d 3d 70 4f  ->nResColumn==pO
a540: 70 2d 3e 70 32 20 29 3b 0a 20 20 61 73 73 65 72  p->p2 );.  asser
a550: 74 28 20 70 4f 70 2d 3e 70 31 3e 30 20 29 3b 0a  t( pOp->p1>0 );.
a560: 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
a570: 31 2b 70 4f 70 2d 3e 70 32 3c 3d 28 70 2d 3e 6e  1+pOp->p2<=(p->n
a580: 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73  Mem+1 - p->nCurs
a590: 6f 72 29 2b 31 20 29 3b 0a 0a 23 69 66 6e 64 65  or)+1 );..#ifnde
a5a0: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 52  f SQLITE_OMIT_PR
a5b0: 4f 47 52 45 53 53 5f 43 41 4c 4c 42 41 43 4b 0a  OGRESS_CALLBACK.
a5c0: 20 20 2f 2a 20 52 75 6e 20 74 68 65 20 70 72 6f    /* Run the pro
a5d0: 67 72 65 73 73 20 63 6f 75 6e 74 65 72 20 6a 75  gress counter ju
a5e0: 73 74 20 62 65 66 6f 72 65 20 72 65 74 75 72 6e  st before return
a5f0: 69 6e 67 2e 0a 20 20 2a 2f 0a 20 20 69 66 28 20  ing..  */.  if( 
a600: 64 62 2d 3e 78 50 72 6f 67 72 65 73 73 21 3d 30  db->xProgress!=0
a610: 0a 20 20 20 26 26 20 6e 56 6d 53 74 65 70 3e 3d  .   && nVmStep>=
a620: 6e 50 72 6f 67 72 65 73 73 4c 69 6d 69 74 20 0a  nProgressLimit .
a630: 20 20 20 26 26 20 64 62 2d 3e 78 50 72 6f 67 72     && db->xProgr
a640: 65 73 73 28 64 62 2d 3e 70 50 72 6f 67 72 65 73  ess(db->pProgres
a650: 73 41 72 67 29 21 3d 30 0a 20 20 29 7b 0a 20 20  sArg)!=0.  ){.  
a660: 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 49 4e    rc = SQLITE_IN
a670: 54 45 52 52 55 50 54 3b 0a 20 20 20 20 67 6f 74  TERRUPT;.    got
a680: 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
a690: 72 72 6f 72 3b 0a 20 20 7d 0a 23 65 6e 64 69 66  rror;.  }.#endif
a6a0: 0a 0a 20 20 2f 2a 20 49 66 20 74 68 69 73 20 73  ..  /* If this s
a6b0: 74 61 74 65 6d 65 6e 74 20 68 61 73 20 76 69 6f  tatement has vio
a6c0: 6c 61 74 65 64 20 69 6d 6d 65 64 69 61 74 65 20  lated immediate 
a6d0: 66 6f 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73  foreign key cons
a6e0: 74 72 61 69 6e 74 73 2c 20 64 6f 0a 20 20 2a 2a  traints, do.  **
a6f0: 20 6e 6f 74 20 72 65 74 75 72 6e 20 74 68 65 20   not return the 
a700: 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 20 6d  number of rows m
a710: 6f 64 69 66 69 65 64 2e 20 41 6e 64 20 64 6f 20  odified. And do 
a720: 6e 6f 74 20 52 45 4c 45 41 53 45 20 74 68 65 20  not RELEASE the 
a730: 73 74 61 74 65 6d 65 6e 74 0a 20 20 2a 2a 20 74  statement.  ** t
a740: 72 61 6e 73 61 63 74 69 6f 6e 2e 20 49 74 20 6e  ransaction. It n
a750: 65 65 64 73 20 74 6f 20 62 65 20 72 6f 6c 6c 65  eeds to be rolle
a760: 64 20 62 61 63 6b 2e 20 20 2a 2f 0a 20 20 69 66  d back.  */.  if
a770: 28 20 53 51 4c 49 54 45 5f 4f 4b 21 3d 28 72 63  ( SQLITE_OK!=(rc
a780: 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 43 68   = sqlite3VdbeCh
a790: 65 63 6b 46 6b 28 70 2c 20 30 29 29 20 29 7b 0a  eckFk(p, 0)) ){.
a7a0: 20 20 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e      assert( db->
a7b0: 66 6c 61 67 73 26 53 51 4c 49 54 45 5f 43 6f 75  flags&SQLITE_Cou
a7c0: 6e 74 52 6f 77 73 20 29 3b 0a 20 20 20 20 61 73  ntRows );.    as
a7d0: 73 65 72 74 28 20 70 2d 3e 75 73 65 73 53 74 6d  sert( p->usesStm
a7e0: 74 4a 6f 75 72 6e 61 6c 20 29 3b 0a 20 20 20 20  tJournal );.    
a7f0: 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
a800: 6f 5f 65 72 72 6f 72 3b 0a 20 20 7d 0a 0a 20 20  o_error;.  }..  
a810: 2f 2a 20 49 66 20 74 68 65 20 53 51 4c 49 54 45  /* If the SQLITE
a820: 5f 43 6f 75 6e 74 52 6f 77 73 20 66 6c 61 67 20  _CountRows flag 
a830: 69 73 20 73 65 74 20 69 6e 20 73 71 6c 69 74 65  is set in sqlite
a840: 33 2e 66 6c 61 67 73 20 6d 61 73 6b 2c 20 74 68  3.flags mask, th
a850: 65 6e 20 0a 20 20 2a 2a 20 44 4d 4c 20 73 74 61  en .  ** DML sta
a860: 74 65 6d 65 6e 74 73 20 69 6e 76 6f 6b 65 20 74  tements invoke t
a870: 68 69 73 20 6f 70 63 6f 64 65 20 74 6f 20 72 65  his opcode to re
a880: 74 75 72 6e 20 74 68 65 20 6e 75 6d 62 65 72 20  turn the number 
a890: 6f 66 20 72 6f 77 73 20 0a 20 20 2a 2a 20 6d 6f  of rows .  ** mo
a8a0: 64 69 66 69 65 64 20 74 6f 20 74 68 65 20 75 73  dified to the us
a8b0: 65 72 2e 20 54 68 69 73 20 69 73 20 74 68 65 20  er. This is the 
a8c0: 6f 6e 6c 79 20 77 61 79 20 74 68 61 74 20 61 20  only way that a 
a8d0: 56 4d 20 74 68 61 74 0a 20 20 2a 2a 20 6f 70 65  VM that.  ** ope
a8e0: 6e 73 20 61 20 73 74 61 74 65 6d 65 6e 74 20 74  ns a statement t
a8f0: 72 61 6e 73 61 63 74 69 6f 6e 20 6d 61 79 20 69  ransaction may i
a900: 6e 76 6f 6b 65 20 74 68 69 73 20 6f 70 63 6f 64  nvoke this opcod
a910: 65 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 49 6e 20  e..  **.  ** In 
a920: 63 61 73 65 20 74 68 69 73 20 69 73 20 73 75 63  case this is suc
a930: 68 20 61 20 73 74 61 74 65 6d 65 6e 74 2c 20 63  h a statement, c
a940: 6c 6f 73 65 20 61 6e 79 20 73 74 61 74 65 6d 65  lose any stateme
a950: 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 0a 20  nt transaction. 
a960: 20 2a 2a 20 6f 70 65 6e 65 64 20 62 79 20 74 68   ** opened by th
a970: 69 73 20 56 4d 20 62 65 66 6f 72 65 20 72 65 74  is VM before ret
a980: 75 72 6e 69 6e 67 20 63 6f 6e 74 72 6f 6c 20 74  urning control t
a990: 6f 20 74 68 65 20 75 73 65 72 2e 20 54 68 69 73  o the user. This
a9a0: 20 69 73 20 74 6f 0a 20 20 2a 2a 20 65 6e 73 75   is to.  ** ensu
a9b0: 72 65 20 74 68 61 74 20 73 74 61 74 65 6d 65 6e  re that statemen
a9c0: 74 2d 74 72 61 6e 73 61 63 74 69 6f 6e 73 20 61  t-transactions a
a9d0: 72 65 20 61 6c 77 61 79 73 20 6e 65 73 74 65 64  re always nested
a9e0: 2c 20 6e 6f 74 20 6f 76 65 72 6c 61 70 70 69 6e  , not overlappin
a9f0: 67 2e 0a 20 20 2a 2a 20 49 66 20 74 68 65 20 6f  g..  ** If the o
aa00: 70 65 6e 20 73 74 61 74 65 6d 65 6e 74 2d 74 72  pen statement-tr
aa10: 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 6e 6f 74  ansaction is not
aa20: 20 63 6c 6f 73 65 64 20 68 65 72 65 2c 20 74 68   closed here, th
aa30: 65 6e 20 74 68 65 20 75 73 65 72 0a 20 20 2a 2a  en the user.  **
aa40: 20 6d 61 79 20 73 74 65 70 20 61 6e 6f 74 68 65   may step anothe
aa50: 72 20 56 4d 20 74 68 61 74 20 6f 70 65 6e 73 20  r VM that opens 
aa60: 69 74 73 20 6f 77 6e 20 73 74 61 74 65 6d 65 6e  its own statemen
aa70: 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20 54  t transaction. T
aa80: 68 69 73 0a 20 20 2a 2a 20 6d 61 79 20 6c 65 61  his.  ** may lea
aa90: 64 20 74 6f 20 6f 76 65 72 6c 61 70 70 69 6e 67  d to overlapping
aaa0: 20 73 74 61 74 65 6d 65 6e 74 20 74 72 61 6e 73   statement trans
aab0: 61 63 74 69 6f 6e 73 2e 0a 20 20 2a 2a 0a 20 20  actions..  **.  
aac0: 2a 2a 20 54 68 65 20 73 74 61 74 65 6d 65 6e 74  ** The statement
aad0: 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20   transaction is 
aae0: 6e 65 76 65 72 20 61 20 74 6f 70 2d 6c 65 76 65  never a top-leve
aaf0: 6c 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20 20  l transaction.  
ab00: 48 65 6e 63 65 0a 20 20 2a 2a 20 74 68 65 20 52  Hence.  ** the R
ab10: 45 4c 45 41 53 45 20 63 61 6c 6c 20 62 65 6c 6f  ELEASE call belo
ab20: 77 20 63 61 6e 20 6e 65 76 65 72 20 66 61 69 6c  w can never fail
ab30: 2e 0a 20 20 2a 2f 0a 20 20 61 73 73 65 72 74 28  ..  */.  assert(
ab40: 20 70 2d 3e 69 53 74 61 74 65 6d 65 6e 74 3d 3d   p->iStatement==
ab50: 30 20 7c 7c 20 64 62 2d 3e 66 6c 61 67 73 26 53  0 || db->flags&S
ab60: 51 4c 49 54 45 5f 43 6f 75 6e 74 52 6f 77 73 20  QLITE_CountRows 
ab70: 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65  );.  rc = sqlite
ab80: 33 56 64 62 65 43 6c 6f 73 65 53 74 61 74 65 6d  3VdbeCloseStatem
ab90: 65 6e 74 28 70 2c 20 53 41 56 45 50 4f 49 4e 54  ent(p, SAVEPOINT
aba0: 5f 52 45 4c 45 41 53 45 29 3b 0a 20 20 61 73 73  _RELEASE);.  ass
abb0: 65 72 74 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f  ert( rc==SQLITE_
abc0: 4f 4b 20 29 3b 0a 0a 20 20 2f 2a 20 49 6e 76 61  OK );..  /* Inva
abd0: 6c 69 64 61 74 65 20 61 6c 6c 20 65 70 68 65 6d  lidate all ephem
abe0: 65 72 61 6c 20 63 75 72 73 6f 72 20 72 6f 77 20  eral cursor row 
abf0: 63 61 63 68 65 73 20 2a 2f 0a 20 20 70 2d 3e 63  caches */.  p->c
ac00: 61 63 68 65 43 74 72 20 3d 20 28 70 2d 3e 63 61  acheCtr = (p->ca
ac10: 63 68 65 43 74 72 20 2b 20 32 29 7c 31 3b 0a 0a  cheCtr + 2)|1;..
ac20: 20 20 2f 2a 20 4d 61 6b 65 20 73 75 72 65 20 74    /* Make sure t
ac30: 68 65 20 72 65 73 75 6c 74 73 20 6f 66 20 74 68  he results of th
ac40: 65 20 63 75 72 72 65 6e 74 20 72 6f 77 20 61 72  e current row ar
ac50: 65 20 5c 30 30 30 20 74 65 72 6d 69 6e 61 74 65  e \000 terminate
ac60: 64 0a 20 20 2a 2a 20 61 6e 64 20 68 61 76 65 20  d.  ** and have 
ac70: 61 6e 20 61 73 73 69 67 6e 65 64 20 74 79 70 65  an assigned type
ac80: 2e 20 20 54 68 65 20 72 65 73 75 6c 74 73 20 61  .  The results a
ac90: 72 65 20 64 65 2d 65 70 68 65 6d 65 72 61 6c 69  re de-ephemerali
aca0: 7a 65 64 20 61 73 0a 20 20 2a 2a 20 61 20 73 69  zed as.  ** a si
acb0: 64 65 20 65 66 66 65 63 74 2e 0a 20 20 2a 2f 0a  de effect..  */.
acc0: 20 20 70 4d 65 6d 20 3d 20 70 2d 3e 70 52 65 73    pMem = p->pRes
acd0: 75 6c 74 53 65 74 20 3d 20 26 61 4d 65 6d 5b 70  ultSet = &aMem[p
ace0: 4f 70 2d 3e 70 31 5d 3b 0a 20 20 66 6f 72 28 69  Op->p1];.  for(i
acf0: 3d 30 3b 20 69 3c 70 4f 70 2d 3e 70 32 3b 20 69  =0; i<pOp->p2; i
ad00: 2b 2b 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28  ++){.    assert(
ad10: 20 6d 65 6d 49 73 56 61 6c 69 64 28 26 70 4d 65   memIsValid(&pMe
ad20: 6d 5b 69 5d 29 20 29 3b 0a 20 20 20 20 44 65 65  m[i]) );.    Dee
ad30: 70 68 65 6d 65 72 61 6c 69 7a 65 28 26 70 4d 65  phemeralize(&pMe
ad40: 6d 5b 69 5d 29 3b 0a 20 20 20 20 61 73 73 65 72  m[i]);.    asser
ad50: 74 28 20 28 70 4d 65 6d 5b 69 5d 2e 66 6c 61 67  t( (pMem[i].flag
ad60: 73 20 26 20 4d 45 4d 5f 45 70 68 65 6d 29 3d 3d  s & MEM_Ephem)==
ad70: 30 0a 20 20 20 20 20 20 20 20 20 20 20 20 7c 7c  0.            ||
ad80: 20 28 70 4d 65 6d 5b 69 5d 2e 66 6c 61 67 73 20   (pMem[i].flags 
ad90: 26 20 28 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f 42  & (MEM_Str|MEM_B
ada0: 6c 6f 62 29 29 3d 3d 30 20 29 3b 0a 20 20 20 20  lob))==0 );.    
adb0: 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 4e 75  sqlite3VdbeMemNu
adc0: 6c 54 65 72 6d 69 6e 61 74 65 28 26 70 4d 65 6d  lTerminate(&pMem
add0: 5b 69 5d 29 3b 0a 20 20 20 20 52 45 47 49 53 54  [i]);.    REGIST
ade0: 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 31  ER_TRACE(pOp->p1
adf0: 2b 69 2c 20 26 70 4d 65 6d 5b 69 5d 29 3b 0a 20  +i, &pMem[i]);. 
ae00: 20 7d 0a 20 20 69 66 28 20 64 62 2d 3e 6d 61 6c   }.  if( db->mal
ae10: 6c 6f 63 46 61 69 6c 65 64 20 29 20 67 6f 74 6f  locFailed ) goto
ae20: 20 6e 6f 5f 6d 65 6d 3b 0a 0a 20 20 69 66 28 20   no_mem;..  if( 
ae30: 64 62 2d 3e 6d 54 72 61 63 65 20 26 20 53 51 4c  db->mTrace & SQL
ae40: 49 54 45 5f 54 52 41 43 45 5f 52 4f 57 20 29 7b  ITE_TRACE_ROW ){
ae50: 0a 20 20 20 20 64 62 2d 3e 78 54 72 61 63 65 28  .    db->xTrace(
ae60: 53 51 4c 49 54 45 5f 54 52 41 43 45 5f 52 4f 57  SQLITE_TRACE_ROW
ae70: 2c 20 64 62 2d 3e 70 54 72 61 63 65 41 72 67 2c  , db->pTraceArg,
ae80: 20 70 2c 20 30 29 3b 0a 20 20 7d 0a 0a 20 20 2f   p, 0);.  }..  /
ae90: 2a 20 52 65 74 75 72 6e 20 53 51 4c 49 54 45 5f  * Return SQLITE_
aea0: 52 4f 57 0a 20 20 2a 2f 0a 20 20 70 2d 3e 70 63  ROW.  */.  p->pc
aeb0: 20 3d 20 28 69 6e 74 29 28 70 4f 70 20 2d 20 61   = (int)(pOp - a
aec0: 4f 70 29 20 2b 20 31 3b 0a 20 20 72 63 20 3d 20  Op) + 1;.  rc = 
aed0: 53 51 4c 49 54 45 5f 52 4f 57 3b 0a 20 20 67 6f  SQLITE_ROW;.  go
aee0: 74 6f 20 76 64 62 65 5f 72 65 74 75 72 6e 3b 0a  to vdbe_return;.
aef0: 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6f  }../* Opcode: Co
af00: 6e 63 61 74 20 50 31 20 50 32 20 50 33 20 2a 20  ncat P1 P2 P3 * 
af10: 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72  *.** Synopsis: r
af20: 5b 50 33 5d 3d 72 5b 50 32 5d 2b 72 5b 50 31 5d  [P3]=r[P2]+r[P1]
af30: 0a 2a 2a 0a 2a 2a 20 41 64 64 20 74 68 65 20 74  .**.** Add the t
af40: 65 78 74 20 69 6e 20 72 65 67 69 73 74 65 72 20  ext in register 
af50: 50 31 20 6f 6e 74 6f 20 74 68 65 20 65 6e 64 20  P1 onto the end 
af60: 6f 66 20 74 68 65 20 74 65 78 74 20 69 6e 0a 2a  of the text in.*
af70: 2a 20 72 65 67 69 73 74 65 72 20 50 32 20 61 6e  * register P2 an
af80: 64 20 73 74 6f 72 65 20 74 68 65 20 72 65 73 75  d store the resu
af90: 6c 74 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  lt in register P
afa0: 33 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20  3..** If either 
afb0: 74 68 65 20 50 31 20 6f 72 20 50 32 20 74 65 78  the P1 or P2 tex
afc0: 74 20 61 72 65 20 4e 55 4c 4c 20 74 68 65 6e 20  t are NULL then 
afd0: 73 74 6f 72 65 20 4e 55 4c 4c 20 69 6e 20 50 33  store NULL in P3
afe0: 2e 0a 2a 2a 0a 2a 2a 20 20 20 50 33 20 3d 20 50  ..**.**   P3 = P
aff0: 32 20 7c 7c 20 50 31 0a 2a 2a 0a 2a 2a 20 49 74  2 || P1.**.** It
b000: 20 69 73 20 69 6c 6c 65 67 61 6c 20 66 6f 72 20   is illegal for 
b010: 50 31 20 61 6e 64 20 50 33 20 74 6f 20 62 65 20  P1 and P3 to be 
b020: 74 68 65 20 73 61 6d 65 20 72 65 67 69 73 74 65  the same registe
b030: 72 2e 20 53 6f 6d 65 74 69 6d 65 73 2c 0a 2a 2a  r. Sometimes,.**
b040: 20 69 66 20 50 33 20 69 73 20 74 68 65 20 73 61   if P3 is the sa
b050: 6d 65 20 72 65 67 69 73 74 65 72 20 61 73 20 50  me register as P
b060: 32 2c 20 74 68 65 20 69 6d 70 6c 65 6d 65 6e 74  2, the implement
b070: 61 74 69 6f 6e 20 69 73 20 61 62 6c 65 0a 2a 2a  ation is able.**
b080: 20 74 6f 20 61 76 6f 69 64 20 61 20 6d 65 6d 63   to avoid a memc
b090: 70 79 28 29 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  py()..*/.case OP
b0a0: 5f 43 6f 6e 63 61 74 3a 20 7b 20 20 20 20 20 20  _Concat: {      
b0b0: 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20       /* same as 
b0c0: 54 4b 5f 43 4f 4e 43 41 54 2c 20 69 6e 31 2c 20  TK_CONCAT, in1, 
b0d0: 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 20 20 69  in2, out3 */.  i
b0e0: 36 34 20 6e 42 79 74 65 3b 0a 0a 20 20 70 49 6e  64 nByte;..  pIn
b0f0: 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  1 = &aMem[pOp->p
b100: 31 5d 3b 0a 20 20 70 49 6e 32 20 3d 20 26 61 4d  1];.  pIn2 = &aM
b110: 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 70  em[pOp->p2];.  p
b120: 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  Out = &aMem[pOp-
b130: 3e 70 33 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p3];.  assert( 
b140: 70 49 6e 31 21 3d 70 4f 75 74 20 29 3b 0a 20 20  pIn1!=pOut );.  
b150: 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73  if( (pIn1->flags
b160: 20 7c 20 70 49 6e 32 2d 3e 66 6c 61 67 73 29 20   | pIn2->flags) 
b170: 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20  & MEM_Null ){.  
b180: 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
b190: 53 65 74 4e 75 6c 6c 28 70 4f 75 74 29 3b 0a 20  SetNull(pOut);. 
b1a0: 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 20 20     break;.  }.  
b1b0: 69 66 28 20 45 78 70 61 6e 64 42 6c 6f 62 28 70  if( ExpandBlob(p
b1c0: 49 6e 31 29 20 7c 7c 20 45 78 70 61 6e 64 42 6c  In1) || ExpandBl
b1d0: 6f 62 28 70 49 6e 32 29 20 29 20 67 6f 74 6f 20  ob(pIn2) ) goto 
b1e0: 6e 6f 5f 6d 65 6d 3b 0a 20 20 53 74 72 69 6e 67  no_mem;.  String
b1f0: 69 66 79 28 70 49 6e 31 2c 20 65 6e 63 6f 64 69  ify(pIn1, encodi
b200: 6e 67 29 3b 0a 20 20 53 74 72 69 6e 67 69 66 79  ng);.  Stringify
b210: 28 70 49 6e 32 2c 20 65 6e 63 6f 64 69 6e 67 29  (pIn2, encoding)
b220: 3b 0a 20 20 6e 42 79 74 65 20 3d 20 70 49 6e 31  ;.  nByte = pIn1
b230: 2d 3e 6e 20 2b 20 70 49 6e 32 2d 3e 6e 3b 0a 20  ->n + pIn2->n;. 
b240: 20 69 66 28 20 6e 42 79 74 65 3e 64 62 2d 3e 61   if( nByte>db->a
b250: 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4c 49 4d  Limit[SQLITE_LIM
b260: 49 54 5f 4c 45 4e 47 54 48 5d 20 29 7b 0a 20 20  IT_LENGTH] ){.  
b270: 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a    goto too_big;.
b280: 20 20 7d 0a 20 20 69 66 28 20 73 71 6c 69 74 65    }.  if( sqlite
b290: 33 56 64 62 65 4d 65 6d 47 72 6f 77 28 70 4f 75  3VdbeMemGrow(pOu
b2a0: 74 2c 20 28 69 6e 74 29 6e 42 79 74 65 2b 32 2c  t, (int)nByte+2,
b2b0: 20 70 4f 75 74 3d 3d 70 49 6e 32 29 20 29 7b 0a   pOut==pIn2) ){.
b2c0: 20 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b      goto no_mem;
b2d0: 0a 20 20 7d 0a 20 20 4d 65 6d 53 65 74 54 79 70  .  }.  MemSetTyp
b2e0: 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f  eFlag(pOut, MEM_
b2f0: 53 74 72 29 3b 0a 20 20 69 66 28 20 70 4f 75 74  Str);.  if( pOut
b300: 21 3d 70 49 6e 32 20 29 7b 0a 20 20 20 20 6d 65  !=pIn2 ){.    me
b310: 6d 63 70 79 28 70 4f 75 74 2d 3e 7a 2c 20 70 49  mcpy(pOut->z, pI
b320: 6e 32 2d 3e 7a 2c 20 70 49 6e 32 2d 3e 6e 29 3b  n2->z, pIn2->n);
b330: 0a 20 20 7d 0a 20 20 6d 65 6d 63 70 79 28 26 70  .  }.  memcpy(&p
b340: 4f 75 74 2d 3e 7a 5b 70 49 6e 32 2d 3e 6e 5d 2c  Out->z[pIn2->n],
b350: 20 70 49 6e 31 2d 3e 7a 2c 20 70 49 6e 31 2d 3e   pIn1->z, pIn1->
b360: 6e 29 3b 0a 20 20 70 4f 75 74 2d 3e 7a 5b 6e 42  n);.  pOut->z[nB
b370: 79 74 65 5d 3d 30 3b 0a 20 20 70 4f 75 74 2d 3e  yte]=0;.  pOut->
b380: 7a 5b 6e 42 79 74 65 2b 31 5d 20 3d 20 30 3b 0a  z[nByte+1] = 0;.
b390: 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 7c 3d    pOut->flags |=
b3a0: 20 4d 45 4d 5f 54 65 72 6d 3b 0a 20 20 70 4f 75   MEM_Term;.  pOu
b3b0: 74 2d 3e 6e 20 3d 20 28 69 6e 74 29 6e 42 79 74  t->n = (int)nByt
b3c0: 65 3b 0a 20 20 70 4f 75 74 2d 3e 65 6e 63 20 3d  e;.  pOut->enc =
b3d0: 20 65 6e 63 6f 64 69 6e 67 3b 0a 20 20 55 50 44   encoding;.  UPD
b3e0: 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45  ATE_MAX_BLOBSIZE
b3f0: 28 70 4f 75 74 29 3b 0a 20 20 62 72 65 61 6b 3b  (pOut);.  break;
b400: 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 41  .}../* Opcode: A
b410: 64 64 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a  dd P1 P2 P3 * *.
b420: 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50  ** Synopsis: r[P
b430: 33 5d 3d 72 5b 50 31 5d 2b 72 5b 50 32 5d 0a 2a  3]=r[P1]+r[P2].*
b440: 2a 0a 2a 2a 20 41 64 64 20 74 68 65 20 76 61 6c  *.** Add the val
b450: 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
b460: 31 20 74 6f 20 74 68 65 20 76 61 6c 75 65 20 69  1 to the value i
b470: 6e 20 72 65 67 69 73 74 65 72 20 50 32 0a 2a 2a  n register P2.**
b480: 20 61 6e 64 20 73 74 6f 72 65 20 74 68 65 20 72   and store the r
b490: 65 73 75 6c 74 20 69 6e 20 72 65 67 69 73 74 65  esult in registe
b4a0: 72 20 50 33 2e 0a 2a 2a 20 49 66 20 65 69 74 68  r P3..** If eith
b4b0: 65 72 20 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c  er input is NULL
b4c0: 2c 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20  , the result is 
b4d0: 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f  NULL..*/./* Opco
b4e0: 64 65 3a 20 4d 75 6c 74 69 70 6c 79 20 50 31 20  de: Multiply P1 
b4f0: 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e  P2 P3 * *.** Syn
b500: 6f 70 73 69 73 3a 20 72 5b 50 33 5d 3d 72 5b 50  opsis: r[P3]=r[P
b510: 31 5d 2a 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a 0a 2a  1]*r[P2].**.**.*
b520: 2a 20 4d 75 6c 74 69 70 6c 79 20 74 68 65 20 76  * Multiply 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 62 79 20 74 68 65 20 76 61 6c 75 65   P1 by 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 53 75 62 74 72 61 63 74 20 50  code: Subtract 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 32 5d 2d 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a  [P2]-r[P1].**.**
b600: 20 53 75 62 74 72 61 63 74 20 74 68 65 20 76 61   Subtract the va
b610: 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  lue in register 
b620: 50 31 20 66 72 6f 6d 20 74 68 65 20 76 61 6c 75  P1 from the valu
b630: 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32  e in register P2
b640: 0a 2a 2a 20 61 6e 64 20 73 74 6f 72 65 20 74 68  .** and store th
b650: 65 20 72 65 73 75 6c 74 20 69 6e 20 72 65 67 69  e result in regi
b660: 73 74 65 72 20 50 33 2e 0a 2a 2a 20 49 66 20 65  ster P3..** If e
b670: 69 74 68 65 72 20 69 6e 70 75 74 20 69 73 20 4e  ither input is N
b680: 55 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c 74 20  ULL, the result 
b690: 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f  is NULL..*/./* O
b6a0: 70 63 6f 64 65 3a 20 44 69 76 69 64 65 20 50 31  pcode: Divide P1
b6b0: 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79   P2 P3 * *.** Sy
b6c0: 6e 6f 70 73 69 73 3a 20 72 5b 50 33 5d 3d 72 5b  nopsis: r[P3]=r[
b6d0: 50 32 5d 2f 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20  P2]/r[P1].**.** 
b6e0: 44 69 76 69 64 65 20 74 68 65 20 76 61 6c 75 65  Divide the value
b6f0: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20   in register P1 
b700: 62 79 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20  by the value in 
b710: 72 65 67 69 73 74 65 72 20 50 32 0a 2a 2a 20 61  register P2.** a
b720: 6e 64 20 73 74 6f 72 65 20 74 68 65 20 72 65 73  nd store the res
b730: 75 6c 74 20 69 6e 20 72 65 67 69 73 74 65 72 20  ult in register 
b740: 50 33 20 28 50 33 3d 50 32 2f 50 31 29 2e 20 49  P3 (P3=P2/P1). I
b750: 66 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 0a  f the value in .
b760: 2a 2a 20 72 65 67 69 73 74 65 72 20 50 31 20 69  ** register P1 i
b770: 73 20 7a 65 72 6f 2c 20 74 68 65 6e 20 74 68 65  s zero, then the
b780: 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e   result is NULL.
b790: 20 49 66 20 65 69 74 68 65 72 20 69 6e 70 75 74   If either input
b7a0: 20 69 73 20 0a 2a 2a 20 4e 55 4c 4c 2c 20 74 68   is .** NULL, th
b7b0: 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c  e result is NULL
b7c0: 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ..*/./* Opcode: 
b7d0: 52 65 6d 61 69 6e 64 65 72 20 50 31 20 50 32 20  Remainder P1 P2 
b7e0: 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73  P3 * *.** Synops
b7f0: 69 73 3a 20 72 5b 50 33 5d 3d 72 5b 50 32 5d 25  is: r[P3]=r[P2]%
b800: 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 43 6f 6d 70  r[P1].**.** Comp
b810: 75 74 65 20 74 68 65 20 72 65 6d 61 69 6e 64 65  ute the remainde
b820: 72 20 61 66 74 65 72 20 69 6e 74 65 67 65 72 20  r after integer 
b830: 72 65 67 69 73 74 65 72 20 50 32 20 69 73 20 64  register P2 is d
b840: 69 76 69 64 65 64 20 62 79 20 0a 2a 2a 20 72 65  ivided by .** re
b850: 67 69 73 74 65 72 20 50 31 20 61 6e 64 20 73 74  gister P1 and st
b860: 6f 72 65 20 74 68 65 20 72 65 73 75 6c 74 20 69  ore the result i
b870: 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e 20 0a  n register P3. .
b880: 2a 2a 20 49 66 20 74 68 65 20 76 61 6c 75 65 20  ** If the value 
b890: 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 69  in register P1 i
b8a0: 73 20 7a 65 72 6f 20 74 68 65 20 72 65 73 75 6c  s zero the resul
b8b0: 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2a 20 49 66  t is NULL..** If
b8c0: 20 65 69 74 68 65 72 20 6f 70 65 72 61 6e 64 20   either operand 
b8d0: 69 73 20 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73  is NULL, the res
b8e0: 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a  ult is NULL..*/.
b8f0: 63 61 73 65 20 4f 50 5f 41 64 64 3a 20 20 20 20  case OP_Add:    
b900: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
b910: 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 50 4c 55  * same as TK_PLU
b920: 53 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74  S, in1, in2, out
b930: 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 75 62  3 */.case OP_Sub
b940: 74 72 61 63 74 3a 20 20 20 20 20 20 20 20 20 20  tract:          
b950: 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54      /* same as T
b960: 4b 5f 4d 49 4e 55 53 2c 20 69 6e 31 2c 20 69 6e  K_MINUS, in1, in
b970: 32 2c 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20  2, out3 */.case 
b980: 4f 50 5f 4d 75 6c 74 69 70 6c 79 3a 20 20 20 20  OP_Multiply:    
b990: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d            /* sam
b9a0: 65 20 61 73 20 54 4b 5f 53 54 41 52 2c 20 69 6e  e as TK_STAR, in
b9b0: 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a  1, in2, out3 */.
b9c0: 63 61 73 65 20 4f 50 5f 44 69 76 69 64 65 3a 20  case OP_Divide: 
b9d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
b9e0: 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 53 4c 41  * same as TK_SLA
b9f0: 53 48 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75  SH, in1, in2, ou
ba00: 74 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65  t3 */.case OP_Re
ba10: 6d 61 69 6e 64 65 72 3a 20 7b 20 20 20 20 20 20  mainder: {      
ba20: 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20       /* same as 
ba30: 54 4b 5f 52 45 4d 2c 20 69 6e 31 2c 20 69 6e 32  TK_REM, in1, in2
ba40: 2c 20 6f 75 74 33 20 2a 2f 0a 20 20 63 68 61 72  , out3 */.  char
ba50: 20 62 49 6e 74 69 6e 74 3b 20 20 20 2f 2a 20 53   bIntint;   /* S
ba60: 74 61 72 74 65 64 20 6f 75 74 20 61 73 20 74 77  tarted out as tw
ba70: 6f 20 69 6e 74 65 67 65 72 20 6f 70 65 72 61 6e  o integer operan
ba80: 64 73 20 2a 2f 0a 20 20 75 31 36 20 66 6c 61 67  ds */.  u16 flag
ba90: 73 3b 20 20 20 20 20 20 2f 2a 20 43 6f 6d 62 69  s;      /* Combi
baa0: 6e 65 64 20 4d 45 4d 5f 2a 20 66 6c 61 67 73 20  ned MEM_* flags 
bab0: 66 72 6f 6d 20 62 6f 74 68 20 69 6e 70 75 74 73  from both inputs
bac0: 20 2a 2f 0a 20 20 75 31 36 20 74 79 70 65 31 3b   */.  u16 type1;
bad0: 20 20 20 20 20 20 2f 2a 20 4e 75 6d 65 72 69 63        /* Numeric
bae0: 20 74 79 70 65 20 6f 66 20 6c 65 66 74 20 6f 70   type of left op
baf0: 65 72 61 6e 64 20 2a 2f 0a 20 20 75 31 36 20 74  erand */.  u16 t
bb00: 79 70 65 32 3b 20 20 20 20 20 20 2f 2a 20 4e 75  ype2;      /* Nu
bb10: 6d 65 72 69 63 20 74 79 70 65 20 6f 66 20 72 69  meric type of ri
bb20: 67 68 74 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20  ght operand */. 
bb30: 20 69 36 34 20 69 41 3b 20 20 20 20 20 20 20 20   i64 iA;        
bb40: 20 2f 2a 20 49 6e 74 65 67 65 72 20 76 61 6c 75   /* Integer valu
bb50: 65 20 6f 66 20 6c 65 66 74 20 6f 70 65 72 61 6e  e of left operan
bb60: 64 20 2a 2f 0a 20 20 69 36 34 20 69 42 3b 20 20  d */.  i64 iB;  
bb70: 20 20 20 20 20 20 20 2f 2a 20 49 6e 74 65 67 65         /* Intege
bb80: 72 20 76 61 6c 75 65 20 6f 66 20 72 69 67 68 74  r value of right
bb90: 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20 64 6f   operand */.  do
bba0: 75 62 6c 65 20 72 41 3b 20 20 20 20 20 20 2f 2a  uble rA;      /*
bbb0: 20 52 65 61 6c 20 76 61 6c 75 65 20 6f 66 20 6c   Real value of l
bbc0: 65 66 74 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20  eft operand */. 
bbd0: 20 64 6f 75 62 6c 65 20 72 42 3b 20 20 20 20 20   double rB;     
bbe0: 20 2f 2a 20 52 65 61 6c 20 76 61 6c 75 65 20 6f   /* Real value o
bbf0: 66 20 72 69 67 68 74 20 6f 70 65 72 61 6e 64 20  f right operand 
bc00: 2a 2f 0a 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d  */..  pIn1 = &aM
bc10: 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 74  em[pOp->p1];.  t
bc20: 79 70 65 31 20 3d 20 6e 75 6d 65 72 69 63 54 79  ype1 = numericTy
bc30: 70 65 28 70 49 6e 31 29 3b 0a 20 20 70 49 6e 32  pe(pIn1);.  pIn2
bc40: 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32   = &aMem[pOp->p2
bc50: 5d 3b 0a 20 20 74 79 70 65 32 20 3d 20 6e 75 6d  ];.  type2 = num
bc60: 65 72 69 63 54 79 70 65 28 70 49 6e 32 29 3b 0a  ericType(pIn2);.
bc70: 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70    pOut = &aMem[p
bc80: 4f 70 2d 3e 70 33 5d 3b 0a 20 20 66 6c 61 67 73  Op->p3];.  flags
bc90: 20 3d 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 7c   = pIn1->flags |
bca0: 20 70 49 6e 32 2d 3e 66 6c 61 67 73 3b 0a 20 20   pIn2->flags;.  
bcb0: 69 66 28 20 28 74 79 70 65 31 20 26 20 74 79 70  if( (type1 & typ
bcc0: 65 32 20 26 20 4d 45 4d 5f 49 6e 74 29 21 3d 30  e2 & MEM_Int)!=0
bcd0: 20 29 7b 0a 20 20 20 20 69 41 20 3d 20 70 49 6e   ){.    iA = pIn
bce0: 31 2d 3e 75 2e 69 3b 0a 20 20 20 20 69 42 20 3d  1->u.i;.    iB =
bcf0: 20 70 49 6e 32 2d 3e 75 2e 69 3b 0a 20 20 20 20   pIn2->u.i;.    
bd00: 62 49 6e 74 69 6e 74 20 3d 20 31 3b 0a 20 20 20  bIntint = 1;.   
bd10: 20 73 77 69 74 63 68 28 20 70 4f 70 2d 3e 6f 70   switch( pOp->op
bd20: 63 6f 64 65 20 29 7b 0a 20 20 20 20 20 20 63 61  code ){.      ca
bd30: 73 65 20 4f 50 5f 41 64 64 3a 20 20 20 20 20 20  se OP_Add:      
bd40: 20 69 66 28 20 73 71 6c 69 74 65 33 41 64 64 49   if( sqlite3AddI
bd50: 6e 74 36 34 28 26 69 42 2c 69 41 29 20 29 20 67  nt64(&iB,iA) ) g
bd60: 6f 74 6f 20 66 70 5f 6d 61 74 68 3b 20 20 62 72  oto fp_math;  br
bd70: 65 61 6b 3b 0a 20 20 20 20 20 20 63 61 73 65 20  eak;.      case 
bd80: 4f 50 5f 53 75 62 74 72 61 63 74 3a 20 20 69 66  OP_Subtract:  if
bd90: 28 20 73 71 6c 69 74 65 33 53 75 62 49 6e 74 36  ( sqlite3SubInt6
bda0: 34 28 26 69 42 2c 69 41 29 20 29 20 67 6f 74 6f  4(&iB,iA) ) goto
bdb0: 20 66 70 5f 6d 61 74 68 3b 20 20 62 72 65 61 6b   fp_math;  break
bdc0: 3b 0a 20 20 20 20 20 20 63 61 73 65 20 4f 50 5f  ;.      case OP_
bdd0: 4d 75 6c 74 69 70 6c 79 3a 20 20 69 66 28 20 73  Multiply:  if( s
bde0: 71 6c 69 74 65 33 4d 75 6c 49 6e 74 36 34 28 26  qlite3MulInt64(&
bdf0: 69 42 2c 69 41 29 20 29 20 67 6f 74 6f 20 66 70  iB,iA) ) goto fp
be00: 5f 6d 61 74 68 3b 20 20 62 72 65 61 6b 3b 0a 20  _math;  break;. 
be10: 20 20 20 20 20 63 61 73 65 20 4f 50 5f 44 69 76       case OP_Div
be20: 69 64 65 3a 20 7b 0a 20 20 20 20 20 20 20 20 69  ide: {.        i
be30: 66 28 20 69 41 3d 3d 30 20 29 20 67 6f 74 6f 20  f( iA==0 ) goto 
be40: 61 72 69 74 68 6d 65 74 69 63 5f 72 65 73 75 6c  arithmetic_resul
be50: 74 5f 69 73 5f 6e 75 6c 6c 3b 0a 20 20 20 20 20  t_is_null;.     
be60: 20 20 20 69 66 28 20 69 41 3d 3d 2d 31 20 26 26     if( iA==-1 &&
be70: 20 69 42 3d 3d 53 4d 41 4c 4c 45 53 54 5f 49 4e   iB==SMALLEST_IN
be80: 54 36 34 20 29 20 67 6f 74 6f 20 66 70 5f 6d 61  T64 ) goto fp_ma
be90: 74 68 3b 0a 20 20 20 20 20 20 20 20 69 42 20 2f  th;.        iB /
bea0: 3d 20 69 41 3b 0a 20 20 20 20 20 20 20 20 62 72  = iA;.        br
beb0: 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  eak;.      }.   
bec0: 20 20 20 64 65 66 61 75 6c 74 3a 20 7b 0a 20 20     default: {.  
bed0: 20 20 20 20 20 20 69 66 28 20 69 41 3d 3d 30 20        if( iA==0 
bee0: 29 20 67 6f 74 6f 20 61 72 69 74 68 6d 65 74 69  ) goto arithmeti
bef0: 63 5f 72 65 73 75 6c 74 5f 69 73 5f 6e 75 6c 6c  c_result_is_null
bf00: 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 69 41  ;.        if( iA
bf10: 3d 3d 2d 31 20 29 20 69 41 20 3d 20 31 3b 0a 20  ==-1 ) iA = 1;. 
bf20: 20 20 20 20 20 20 20 69 42 20 25 3d 20 69 41 3b         iB %= iA;
bf30: 0a 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a  .        break;.
bf40: 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20        }.    }.  
bf50: 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 69 42    pOut->u.i = iB
bf60: 3b 0a 20 20 20 20 4d 65 6d 53 65 74 54 79 70 65  ;.    MemSetType
bf70: 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 49  Flag(pOut, MEM_I
bf80: 6e 74 29 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28  nt);.  }else if(
bf90: 20 28 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75   (flags & MEM_Nu
bfa0: 6c 6c 29 21 3d 30 20 29 7b 0a 20 20 20 20 67 6f  ll)!=0 ){.    go
bfb0: 74 6f 20 61 72 69 74 68 6d 65 74 69 63 5f 72 65  to arithmetic_re
bfc0: 73 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3b 0a 20 20  sult_is_null;.  
bfd0: 7d 65 6c 73 65 7b 0a 20 20 20 20 62 49 6e 74 69  }else{.    bInti
bfe0: 6e 74 20 3d 20 30 3b 0a 66 70 5f 6d 61 74 68 3a  nt = 0;.fp_math:
bff0: 0a 20 20 20 20 72 41 20 3d 20 73 71 6c 69 74 65  .    rA = sqlite
c000: 33 56 64 62 65 52 65 61 6c 56 61 6c 75 65 28 70  3VdbeRealValue(p
c010: 49 6e 31 29 3b 0a 20 20 20 20 72 42 20 3d 20 73  In1);.    rB = s
c020: 71 6c 69 74 65 33 56 64 62 65 52 65 61 6c 56 61  qlite3VdbeRealVa
c030: 6c 75 65 28 70 49 6e 32 29 3b 0a 20 20 20 20 73  lue(pIn2);.    s
c040: 77 69 74 63 68 28 20 70 4f 70 2d 3e 6f 70 63 6f  witch( pOp->opco
c050: 64 65 20 29 7b 0a 20 20 20 20 20 20 63 61 73 65  de ){.      case
c060: 20 4f 50 5f 41 64 64 3a 20 20 20 20 20 20 20 20   OP_Add:        
c070: 20 72 42 20 2b 3d 20 72 41 3b 20 20 20 20 20 20   rB += rA;      
c080: 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 63 61   break;.      ca
c090: 73 65 20 4f 50 5f 53 75 62 74 72 61 63 74 3a 20  se OP_Subtract: 
c0a0: 20 20 20 72 42 20 2d 3d 20 72 41 3b 20 20 20 20     rB -= rA;    
c0b0: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20     break;.      
c0c0: 63 61 73 65 20 4f 50 5f 4d 75 6c 74 69 70 6c 79  case OP_Multiply
c0d0: 3a 20 20 20 20 72 42 20 2a 3d 20 72 41 3b 20 20  :    rB *= rA;  
c0e0: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
c0f0: 20 20 63 61 73 65 20 4f 50 5f 44 69 76 69 64 65    case OP_Divide
c100: 3a 20 7b 0a 20 20 20 20 20 20 20 20 2f 2a 20 28  : {.        /* (
c110: 64 6f 75 62 6c 65 29 30 20 49 6e 20 63 61 73 65  double)0 In case
c120: 20 6f 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f   of SQLITE_OMIT_
c130: 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 2e 2e  FLOATING_POINT..
c140: 2e 20 2a 2f 0a 20 20 20 20 20 20 20 20 69 66 28  . */.        if(
c150: 20 72 41 3d 3d 28 64 6f 75 62 6c 65 29 30 20 29   rA==(double)0 )
c160: 20 67 6f 74 6f 20 61 72 69 74 68 6d 65 74 69 63   goto arithmetic
c170: 5f 72 65 73 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3b  _result_is_null;
c180: 0a 20 20 20 20 20 20 20 20 72 42 20 2f 3d 20 72  .        rB /= r
c190: 41 3b 0a 20 20 20 20 20 20 20 20 62 72 65 61 6b  A;.        break
c1a0: 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  ;.      }.      
c1b0: 64 65 66 61 75 6c 74 3a 20 7b 0a 20 20 20 20 20  default: {.     
c1c0: 20 20 20 69 41 20 3d 20 28 69 36 34 29 72 41 3b     iA = (i64)rA;
c1d0: 0a 20 20 20 20 20 20 20 20 69 42 20 3d 20 28 69  .        iB = (i
c1e0: 36 34 29 72 42 3b 0a 20 20 20 20 20 20 20 20 69  64)rB;.        i
c1f0: 66 28 20 69 41 3d 3d 30 20 29 20 67 6f 74 6f 20  f( iA==0 ) goto 
c200: 61 72 69 74 68 6d 65 74 69 63 5f 72 65 73 75 6c  arithmetic_resul
c210: 74 5f 69 73 5f 6e 75 6c 6c 3b 0a 20 20 20 20 20  t_is_null;.     
c220: 20 20 20 69 66 28 20 69 41 3d 3d 2d 31 20 29 20     if( iA==-1 ) 
c230: 69 41 20 3d 20 31 3b 0a 20 20 20 20 20 20 20 20  iA = 1;.        
c240: 72 42 20 3d 20 28 64 6f 75 62 6c 65 29 28 69 42  rB = (double)(iB
c250: 20 25 20 69 41 29 3b 0a 20 20 20 20 20 20 20 20   % iA);.        
c260: 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 20  break;.      }. 
c270: 20 20 20 7d 0a 23 69 66 64 65 66 20 53 51 4c 49     }.#ifdef SQLI
c280: 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47  TE_OMIT_FLOATING
c290: 5f 50 4f 49 4e 54 0a 20 20 20 20 70 4f 75 74 2d  _POINT.    pOut-
c2a0: 3e 75 2e 69 20 3d 20 72 42 3b 0a 20 20 20 20 4d  >u.i = rB;.    M
c2b0: 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70 4f  emSetTypeFlag(pO
c2c0: 75 74 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a 23 65  ut, MEM_Int);.#e
c2d0: 6c 73 65 0a 20 20 20 20 69 66 28 20 73 71 6c 69  lse.    if( sqli
c2e0: 74 65 33 49 73 4e 61 4e 28 72 42 29 20 29 7b 0a  te3IsNaN(rB) ){.
c2f0: 20 20 20 20 20 20 67 6f 74 6f 20 61 72 69 74 68        goto arith
c300: 6d 65 74 69 63 5f 72 65 73 75 6c 74 5f 69 73 5f  metic_result_is_
c310: 6e 75 6c 6c 3b 0a 20 20 20 20 7d 0a 20 20 20 20  null;.    }.    
c320: 70 4f 75 74 2d 3e 75 2e 72 20 3d 20 72 42 3b 0a  pOut->u.r = rB;.
c330: 20 20 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c      MemSetTypeFl
c340: 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 52 65 61  ag(pOut, MEM_Rea
c350: 6c 29 3b 0a 20 20 20 20 69 66 28 20 28 28 74 79  l);.    if( ((ty
c360: 70 65 31 7c 74 79 70 65 32 29 26 4d 45 4d 5f 52  pe1|type2)&MEM_R
c370: 65 61 6c 29 3d 3d 30 20 26 26 20 21 62 49 6e 74  eal)==0 && !bInt
c380: 69 6e 74 20 29 7b 0a 20 20 20 20 20 20 73 71 6c  int ){.      sql
c390: 69 74 65 33 56 64 62 65 49 6e 74 65 67 65 72 41  ite3VdbeIntegerA
c3a0: 66 66 69 6e 69 74 79 28 70 4f 75 74 29 3b 0a 20  ffinity(pOut);. 
c3b0: 20 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20 7d 0a     }.#endif.  }.
c3c0: 20 20 62 72 65 61 6b 3b 0a 0a 61 72 69 74 68 6d    break;..arithm
c3d0: 65 74 69 63 5f 72 65 73 75 6c 74 5f 69 73 5f 6e  etic_result_is_n
c3e0: 75 6c 6c 3a 0a 20 20 73 71 6c 69 74 65 33 56 64  ull:.  sqlite3Vd
c3f0: 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 4f 75  beMemSetNull(pOu
c400: 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  t);.  break;.}..
c410: 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6f 6c 6c 53  /* Opcode: CollS
c420: 65 71 20 50 31 20 2a 20 2a 20 50 34 0a 2a 2a 0a  eq P1 * * P4.**.
c430: 2a 2a 20 50 34 20 69 73 20 61 20 70 6f 69 6e 74  ** P4 is a point
c440: 65 72 20 74 6f 20 61 20 43 6f 6c 6c 53 65 71 20  er to a CollSeq 
c450: 6f 62 6a 65 63 74 2e 20 49 66 20 74 68 65 20 6e  object. If the n
c460: 65 78 74 20 63 61 6c 6c 20 74 6f 20 61 20 75 73  ext call to a us
c470: 65 72 20 66 75 6e 63 74 69 6f 6e 0a 2a 2a 20 6f  er function.** o
c480: 72 20 61 67 67 72 65 67 61 74 65 20 63 61 6c 6c  r aggregate call
c490: 73 20 73 71 6c 69 74 65 33 47 65 74 46 75 6e 63  s sqlite3GetFunc
c4a0: 43 6f 6c 6c 53 65 71 28 29 2c 20 74 68 69 73 20  CollSeq(), this 
c4b0: 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e  collation sequen
c4c0: 63 65 20 77 69 6c 6c 0a 2a 2a 20 62 65 20 72 65  ce will.** be re
c4d0: 74 75 72 6e 65 64 2e 20 54 68 69 73 20 69 73 20  turned. This is 
c4e0: 75 73 65 64 20 62 79 20 74 68 65 20 62 75 69 6c  used by the buil
c4f0: 74 2d 69 6e 20 6d 69 6e 28 29 2c 20 6d 61 78 28  t-in min(), max(
c500: 29 20 61 6e 64 20 6e 75 6c 6c 69 66 28 29 0a 2a  ) and nullif().*
c510: 2a 20 66 75 6e 63 74 69 6f 6e 73 2e 0a 2a 2a 0a  * functions..**.
c520: 2a 2a 20 49 66 20 50 31 20 69 73 20 6e 6f 74 20  ** If P1 is not 
c530: 7a 65 72 6f 2c 20 74 68 65 6e 20 69 74 20 69 73  zero, then it is
c540: 20 61 20 72 65 67 69 73 74 65 72 20 74 68 61 74   a register that
c550: 20 61 20 73 75 62 73 65 71 75 65 6e 74 20 6d 69   a subsequent mi
c560: 6e 28 29 20 6f 72 0a 2a 2a 20 6d 61 78 28 29 20  n() or.** max() 
c570: 61 67 67 72 65 67 61 74 65 20 77 69 6c 6c 20 73  aggregate will s
c580: 65 74 20 74 6f 20 31 20 69 66 20 74 68 65 20 63  et to 1 if the c
c590: 75 72 72 65 6e 74 20 72 6f 77 20 69 73 20 6e 6f  urrent row is no
c5a0: 74 20 74 68 65 20 6d 69 6e 69 6d 75 6d 20 6f 72  t the minimum or
c5b0: 0a 2a 2a 20 6d 61 78 69 6d 75 6d 2e 20 20 54 68  .** maximum.  Th
c5c0: 65 20 50 31 20 72 65 67 69 73 74 65 72 20 69 73  e P1 register is
c5d0: 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 74 6f 20   initialized to 
c5e0: 30 20 62 79 20 74 68 69 73 20 69 6e 73 74 72 75  0 by this instru
c5f0: 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  ction..**.** The
c600: 20 69 6e 74 65 72 66 61 63 65 20 75 73 65 64 20   interface used 
c610: 62 79 20 74 68 65 20 69 6d 70 6c 65 6d 65 6e 74  by the implement
c620: 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 61 66 6f  ation of the afo
c630: 72 65 6d 65 6e 74 69 6f 6e 65 64 20 66 75 6e 63  rementioned func
c640: 74 69 6f 6e 73 0a 2a 2a 20 74 6f 20 72 65 74 72  tions.** to retr
c650: 69 65 76 65 20 74 68 65 20 63 6f 6c 6c 61 74 69  ieve the collati
c660: 6f 6e 20 73 65 71 75 65 6e 63 65 20 73 65 74 20  on sequence set 
c670: 62 79 20 74 68 69 73 20 6f 70 63 6f 64 65 20 69  by this opcode i
c680: 73 20 6e 6f 74 20 61 76 61 69 6c 61 62 6c 65 0a  s not available.
c690: 2a 2a 20 70 75 62 6c 69 63 6c 79 2e 20 20 4f 6e  ** publicly.  On
c6a0: 6c 79 20 62 75 69 6c 74 2d 69 6e 20 66 75 6e 63  ly built-in func
c6b0: 74 69 6f 6e 73 20 68 61 76 65 20 61 63 63 65 73  tions have acces
c6c0: 73 20 74 6f 20 74 68 69 73 20 66 65 61 74 75 72  s to this featur
c6d0: 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 6f  e..*/.case OP_Co
c6e0: 6c 6c 53 65 71 3a 20 7b 0a 20 20 61 73 73 65 72  llSeq: {.  asser
c6f0: 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d  t( pOp->p4type==
c700: 50 34 5f 43 4f 4c 4c 53 45 51 20 29 3b 0a 20 20  P4_COLLSEQ );.  
c710: 69 66 28 20 70 4f 70 2d 3e 70 31 20 29 7b 0a 20  if( pOp->p1 ){. 
c720: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
c730: 6d 53 65 74 49 6e 74 36 34 28 26 61 4d 65 6d 5b  mSetInt64(&aMem[
c740: 70 4f 70 2d 3e 70 31 5d 2c 20 30 29 3b 0a 20 20  pOp->p1], 0);.  
c750: 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  }.  break;.}../*
c760: 20 4f 70 63 6f 64 65 3a 20 42 69 74 41 6e 64 20   Opcode: BitAnd 
c770: 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20  P1 P2 P3 * *.** 
c780: 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 33 5d 3d  Synopsis: r[P3]=
c790: 72 5b 50 31 5d 26 72 5b 50 32 5d 0a 2a 2a 0a 2a  r[P1]&r[P2].**.*
c7a0: 2a 20 54 61 6b 65 20 74 68 65 20 62 69 74 2d 77  * Take the bit-w
c7b0: 69 73 65 20 41 4e 44 20 6f 66 20 74 68 65 20 76  ise AND of the v
c7c0: 61 6c 75 65 73 20 69 6e 20 72 65 67 69 73 74 65  alues in registe
c7d0: 72 20 50 31 20 61 6e 64 20 50 32 20 61 6e 64 0a  r P1 and P2 and.
c7e0: 2a 2a 20 73 74 6f 72 65 20 74 68 65 20 72 65 73  ** store the res
c7f0: 75 6c 74 20 69 6e 20 72 65 67 69 73 74 65 72 20  ult in register 
c800: 50 33 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65 72  P3..** If either
c810: 20 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2c 20   input is NULL, 
c820: 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55  the result is NU
c830: 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65  LL..*/./* Opcode
c840: 3a 20 42 69 74 4f 72 20 50 31 20 50 32 20 50 33  : BitOr P1 P2 P3
c850: 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73   * *.** Synopsis
c860: 3a 20 72 5b 50 33 5d 3d 72 5b 50 31 5d 7c 72 5b  : r[P3]=r[P1]|r[
c870: 50 32 5d 0a 2a 2a 0a 2a 2a 20 54 61 6b 65 20 74  P2].**.** Take t
c880: 68 65 20 62 69 74 2d 77 69 73 65 20 4f 52 20 6f  he bit-wise OR o
c890: 66 20 74 68 65 20 76 61 6c 75 65 73 20 69 6e 20  f the values in 
c8a0: 72 65 67 69 73 74 65 72 20 50 31 20 61 6e 64 20  register P1 and 
c8b0: 50 32 20 61 6e 64 0a 2a 2a 20 73 74 6f 72 65 20  P2 and.** store 
c8c0: 74 68 65 20 72 65 73 75 6c 74 20 69 6e 20 72 65  the result in re
c8d0: 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a 20 49 66  gister P3..** If
c8e0: 20 65 69 74 68 65 72 20 69 6e 70 75 74 20 69 73   either input is
c8f0: 20 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c   NULL, the resul
c900: 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a  t is NULL..*/./*
c910: 20 4f 70 63 6f 64 65 3a 20 53 68 69 66 74 4c 65   Opcode: ShiftLe
c920: 66 74 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a  ft P1 P2 P3 * *.
c930: 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50  ** Synopsis: r[P
c940: 33 5d 3d 72 5b 50 32 5d 3c 3c 72 5b 50 31 5d 0a  3]=r[P2]<<r[P1].
c950: 2a 2a 0a 2a 2a 20 53 68 69 66 74 20 74 68 65 20  **.** Shift the 
c960: 69 6e 74 65 67 65 72 20 76 61 6c 75 65 20 69 6e  integer value in
c970: 20 72 65 67 69 73 74 65 72 20 50 32 20 74 6f 20   register P2 to 
c980: 74 68 65 20 6c 65 66 74 20 62 79 20 74 68 65 0a  the left by the.
c990: 2a 2a 20 6e 75 6d 62 65 72 20 6f 66 20 62 69 74  ** number of bit
c9a0: 73 20 73 70 65 63 69 66 69 65 64 20 62 79 20 74  s specified by t
c9b0: 68 65 20 69 6e 74 65 67 65 72 20 69 6e 20 72 65  he integer in re
c9c0: 67 69 73 74 65 72 20 50 31 2e 0a 2a 2a 20 53 74  gister P1..** St
c9d0: 6f 72 65 20 74 68 65 20 72 65 73 75 6c 74 20 69  ore the result i
c9e0: 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a  n register P3..*
c9f0: 2a 20 49 66 20 65 69 74 68 65 72 20 69 6e 70 75  * If either inpu
ca00: 74 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65 20 72  t is NULL, the r
ca10: 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a  esult is NULL..*
ca20: 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 68 69  /./* Opcode: Shi
ca30: 66 74 52 69 67 68 74 20 50 31 20 50 32 20 50 33  ftRight P1 P2 P3
ca40: 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73   * *.** Synopsis
ca50: 3a 20 72 5b 50 33 5d 3d 72 5b 50 32 5d 3e 3e 72  : r[P3]=r[P2]>>r
ca60: 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 53 68 69 66 74  [P1].**.** Shift
ca70: 20 74 68 65 20 69 6e 74 65 67 65 72 20 76 61 6c   the integer val
ca80: 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
ca90: 32 20 74 6f 20 74 68 65 20 72 69 67 68 74 20 62  2 to the right b
caa0: 79 20 74 68 65 0a 2a 2a 20 6e 75 6d 62 65 72 20  y the.** number 
cab0: 6f 66 20 62 69 74 73 20 73 70 65 63 69 66 69 65  of bits specifie
cac0: 64 20 62 79 20 74 68 65 20 69 6e 74 65 67 65 72  d by the integer
cad0: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 2e   in register P1.
cae0: 0a 2a 2a 20 53 74 6f 72 65 20 74 68 65 20 72 65  .** Store the re
caf0: 73 75 6c 74 20 69 6e 20 72 65 67 69 73 74 65 72  sult in register
cb00: 20 50 33 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65   P3..** If eithe
cb10: 72 20 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2c  r input is NULL,
cb20: 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e   the result is N
cb30: 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ULL..*/.case OP_
cb40: 42 69 74 41 6e 64 3a 20 20 20 20 20 20 20 20 20  BitAnd:         
cb50: 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20          /* same 
cb60: 61 73 20 54 4b 5f 42 49 54 41 4e 44 2c 20 69 6e  as TK_BITAND, in
cb70: 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a  1, in2, out3 */.
cb80: 63 61 73 65 20 4f 50 5f 42 69 74 4f 72 3a 20 20  case OP_BitOr:  
cb90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cba0: 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 42 49  /* same as TK_BI
cbb0: 54 4f 52 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f  TOR, in1, in2, o
cbc0: 75 74 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 53  ut3 */.case OP_S
cbd0: 68 69 66 74 4c 65 66 74 3a 20 20 20 20 20 20 20  hiftLeft:       
cbe0: 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61         /* same a
cbf0: 73 20 54 4b 5f 4c 53 48 49 46 54 2c 20 69 6e 31  s TK_LSHIFT, in1
cc00: 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 63  , in2, out3 */.c
cc10: 61 73 65 20 4f 50 5f 53 68 69 66 74 52 69 67 68  ase OP_ShiftRigh
cc20: 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 2f  t: {           /
cc30: 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 52 53 48  * same as TK_RSH
cc40: 49 46 54 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f  IFT, in1, in2, o
cc50: 75 74 33 20 2a 2f 0a 20 20 69 36 34 20 69 41 3b  ut3 */.  i64 iA;
cc60: 0a 20 20 75 36 34 20 75 41 3b 0a 20 20 69 36 34  .  u64 uA;.  i64
cc70: 20 69 42 3b 0a 20 20 75 38 20 6f 70 3b 0a 0a 20   iB;.  u8 op;.. 
cc80: 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn1 = &aMem[pO
cc90: 70 2d 3e 70 31 5d 3b 0a 20 20 70 49 6e 32 20 3d  p->p1];.  pIn2 =
cca0: 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b   &aMem[pOp->p2];
ccb0: 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b  .  pOut = &aMem[
ccc0: 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 69 66 28 20  pOp->p3];.  if( 
ccd0: 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 7c 20 70  (pIn1->flags | p
cce0: 49 6e 32 2d 3e 66 6c 61 67 73 29 20 26 20 4d 45  In2->flags) & ME
ccf0: 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 73 71  M_Null ){.    sq
cd00: 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e  lite3VdbeMemSetN
cd10: 75 6c 6c 28 70 4f 75 74 29 3b 0a 20 20 20 20 62  ull(pOut);.    b
cd20: 72 65 61 6b 3b 0a 20 20 7d 0a 20 20 69 41 20 3d  reak;.  }.  iA =
cd30: 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74 56   sqlite3VdbeIntV
cd40: 61 6c 75 65 28 70 49 6e 32 29 3b 0a 20 20 69 42  alue(pIn2);.  iB
cd50: 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e   = sqlite3VdbeIn
cd60: 74 56 61 6c 75 65 28 70 49 6e 31 29 3b 0a 20 20  tValue(pIn1);.  
cd70: 6f 70 20 3d 20 70 4f 70 2d 3e 6f 70 63 6f 64 65  op = pOp->opcode
cd80: 3b 0a 20 20 69 66 28 20 6f 70 3d 3d 4f 50 5f 42  ;.  if( op==OP_B
cd90: 69 74 41 6e 64 20 29 7b 0a 20 20 20 20 69 41 20  itAnd ){.    iA 
cda0: 26 3d 20 69 42 3b 0a 20 20 7d 65 6c 73 65 20 69  &= iB;.  }else i
cdb0: 66 28 20 6f 70 3d 3d 4f 50 5f 42 69 74 4f 72 20  f( op==OP_BitOr 
cdc0: 29 7b 0a 20 20 20 20 69 41 20 7c 3d 20 69 42 3b  ){.    iA |= iB;
cdd0: 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 69 42 21  .  }else if( iB!
cde0: 3d 30 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74  =0 ){.    assert
cdf0: 28 20 6f 70 3d 3d 4f 50 5f 53 68 69 66 74 52 69  ( op==OP_ShiftRi
ce00: 67 68 74 20 7c 7c 20 6f 70 3d 3d 4f 50 5f 53 68  ght || op==OP_Sh
ce10: 69 66 74 4c 65 66 74 20 29 3b 0a 0a 20 20 20 20  iftLeft );..    
ce20: 2f 2a 20 49 66 20 73 68 69 66 74 69 6e 67 20 62  /* If shifting b
ce30: 79 20 61 20 6e 65 67 61 74 69 76 65 20 61 6d 6f  y a negative amo
ce40: 75 6e 74 2c 20 73 68 69 66 74 20 69 6e 20 74 68  unt, shift in th
ce50: 65 20 6f 74 68 65 72 20 64 69 72 65 63 74 69 6f  e other directio
ce60: 6e 20 2a 2f 0a 20 20 20 20 69 66 28 20 69 42 3c  n */.    if( iB<
ce70: 30 20 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72  0 ){.      asser
ce80: 74 28 20 4f 50 5f 53 68 69 66 74 52 69 67 68 74  t( OP_ShiftRight
ce90: 3d 3d 4f 50 5f 53 68 69 66 74 4c 65 66 74 2b 31  ==OP_ShiftLeft+1
cea0: 20 29 3b 0a 20 20 20 20 20 20 6f 70 20 3d 20 32   );.      op = 2
ceb0: 2a 4f 50 5f 53 68 69 66 74 4c 65 66 74 20 2b 20  *OP_ShiftLeft + 
cec0: 31 20 2d 20 6f 70 3b 0a 20 20 20 20 20 20 69 42  1 - op;.      iB
ced0: 20 3d 20 69 42 3e 28 2d 36 34 29 20 3f 20 2d 69   = iB>(-64) ? -i
cee0: 42 20 3a 20 36 34 3b 0a 20 20 20 20 7d 0a 0a 20  B : 64;.    }.. 
cef0: 20 20 20 69 66 28 20 69 42 3e 3d 36 34 20 29 7b     if( iB>=64 ){
cf00: 0a 20 20 20 20 20 20 69 41 20 3d 20 28 69 41 3e  .      iA = (iA>
cf10: 3d 30 20 7c 7c 20 6f 70 3d 3d 4f 50 5f 53 68 69  =0 || op==OP_Shi
cf20: 66 74 4c 65 66 74 29 20 3f 20 30 20 3a 20 2d 31  ftLeft) ? 0 : -1
cf30: 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20  ;.    }else{.   
cf40: 20 20 20 6d 65 6d 63 70 79 28 26 75 41 2c 20 26     memcpy(&uA, &
cf50: 69 41 2c 20 73 69 7a 65 6f 66 28 75 41 29 29 3b  iA, sizeof(uA));
cf60: 0a 20 20 20 20 20 20 69 66 28 20 6f 70 3d 3d 4f  .      if( op==O
cf70: 50 5f 53 68 69 66 74 4c 65 66 74 20 29 7b 0a 20  P_ShiftLeft ){. 
cf80: 20 20 20 20 20 20 20 75 41 20 3c 3c 3d 20 69 42         uA <<= iB
cf90: 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20  ;.      }else{. 
cfa0: 20 20 20 20 20 20 20 75 41 20 3e 3e 3d 20 69 42         uA >>= iB
cfb0: 3b 0a 20 20 20 20 20 20 20 20 2f 2a 20 53 69 67  ;.        /* Sig
cfc0: 6e 2d 65 78 74 65 6e 64 20 6f 6e 20 61 20 72 69  n-extend on a ri
cfd0: 67 68 74 20 73 68 69 66 74 20 6f 66 20 61 20 6e  ght shift of a n
cfe0: 65 67 61 74 69 76 65 20 6e 75 6d 62 65 72 20 2a  egative number *
cff0: 2f 0a 20 20 20 20 20 20 20 20 69 66 28 20 69 41  /.        if( iA
d000: 3c 30 20 29 20 75 41 20 7c 3d 20 28 28 28 28 75  <0 ) uA |= ((((u
d010: 36 34 29 30 78 66 66 66 66 66 66 66 66 29 3c 3c  64)0xffffffff)<<
d020: 33 32 29 7c 30 78 66 66 66 66 66 66 66 66 29 20  32)|0xffffffff) 
d030: 3c 3c 20 28 36 34 2d 69 42 29 3b 0a 20 20 20 20  << (64-iB);.    
d040: 20 20 7d 0a 20 20 20 20 20 20 6d 65 6d 63 70 79    }.      memcpy
d050: 28 26 69 41 2c 20 26 75 41 2c 20 73 69 7a 65 6f  (&iA, &uA, sizeo
d060: 66 28 69 41 29 29 3b 0a 20 20 20 20 7d 0a 20 20  f(iA));.    }.  
d070: 7d 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20  }.  pOut->u.i = 
d080: 69 41 3b 0a 20 20 4d 65 6d 53 65 74 54 79 70 65  iA;.  MemSetType
d090: 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 49  Flag(pOut, MEM_I
d0a0: 6e 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  nt);.  break;.}.
d0b0: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 41 64 64 49  ./* Opcode: AddI
d0c0: 6d 6d 20 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  mm  P1 P2 * * *.
d0d0: 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50  ** Synopsis: r[P
d0e0: 31 5d 3d 72 5b 50 31 5d 2b 50 32 0a 2a 2a 20 0a  1]=r[P1]+P2.** .
d0f0: 2a 2a 20 41 64 64 20 74 68 65 20 63 6f 6e 73 74  ** Add the const
d100: 61 6e 74 20 50 32 20 74 6f 20 74 68 65 20 76 61  ant P2 to the va
d110: 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  lue in register 
d120: 50 31 2e 0a 2a 2a 20 54 68 65 20 72 65 73 75 6c  P1..** The resul
d130: 74 20 69 73 20 61 6c 77 61 79 73 20 61 6e 20 69  t is always an i
d140: 6e 74 65 67 65 72 2e 0a 2a 2a 0a 2a 2a 20 54 6f  nteger..**.** To
d150: 20 66 6f 72 63 65 20 61 6e 79 20 72 65 67 69 73   force any regis
d160: 74 65 72 20 74 6f 20 62 65 20 61 6e 20 69 6e 74  ter to be an int
d170: 65 67 65 72 2c 20 6a 75 73 74 20 61 64 64 20 30  eger, just add 0
d180: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 41 64 64  ..*/.case OP_Add
d190: 49 6d 6d 3a 20 7b 20 20 20 20 20 20 20 20 20 20  Imm: {          
d1a0: 20 20 2f 2a 20 69 6e 31 20 2a 2f 0a 20 20 70 49    /* in1 */.  pI
d1b0: 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n1 = &aMem[pOp->
d1c0: 70 31 5d 3b 0a 20 20 6d 65 6d 41 62 6f 75 74 54  p1];.  memAboutT
d1d0: 6f 43 68 61 6e 67 65 28 70 2c 20 70 49 6e 31 29  oChange(p, pIn1)
d1e0: 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d  ;.  sqlite3VdbeM
d1f0: 65 6d 49 6e 74 65 67 65 72 69 66 79 28 70 49 6e  emIntegerify(pIn
d200: 31 29 3b 0a 20 20 70 49 6e 31 2d 3e 75 2e 69 20  1);.  pIn1->u.i 
d210: 2b 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 62 72  += pOp->p2;.  br
d220: 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
d230: 65 3a 20 4d 75 73 74 42 65 49 6e 74 20 50 31 20  e: MustBeInt P1 
d240: 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 0a 2a 2a 20  P2 * * *.** .** 
d250: 46 6f 72 63 65 20 74 68 65 20 76 61 6c 75 65 20  Force the value 
d260: 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 74  in register P1 t
d270: 6f 20 62 65 20 61 6e 20 69 6e 74 65 67 65 72 2e  o be an integer.
d280: 20 20 49 66 20 74 68 65 20 76 61 6c 75 65 0a 2a    If the value.*
d290: 2a 20 69 6e 20 50 31 20 69 73 20 6e 6f 74 20 61  * in P1 is not a
d2a0: 6e 20 69 6e 74 65 67 65 72 20 61 6e 64 20 63 61  n integer and ca
d2b0: 6e 6e 6f 74 20 62 65 20 63 6f 6e 76 65 72 74 65  nnot be converte
d2c0: 64 20 69 6e 74 6f 20 61 6e 20 69 6e 74 65 67 65  d into an intege
d2d0: 72 0a 2a 2a 20 77 69 74 68 6f 75 74 20 64 61 74  r.** without dat
d2e0: 61 20 6c 6f 73 73 2c 20 74 68 65 6e 20 6a 75 6d  a loss, then jum
d2f0: 70 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f  p immediately to
d300: 20 50 32 2c 20 6f 72 20 69 66 20 50 32 3d 3d 30   P2, or if P2==0
d310: 0a 2a 2a 20 72 61 69 73 65 20 61 6e 20 53 51 4c  .** raise an SQL
d320: 49 54 45 5f 4d 49 53 4d 41 54 43 48 20 65 78 63  ITE_MISMATCH exc
d330: 65 70 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20  eption..*/.case 
d340: 4f 50 5f 4d 75 73 74 42 65 49 6e 74 3a 20 7b 20  OP_MustBeInt: { 
d350: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75             /* ju
d360: 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e  mp, in1 */.  pIn
d370: 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  1 = &aMem[pOp->p
d380: 31 5d 3b 0a 20 20 69 66 28 20 28 70 49 6e 31 2d  1];.  if( (pIn1-
d390: 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74  >flags & MEM_Int
d3a0: 29 3d 3d 30 20 29 7b 0a 20 20 20 20 61 70 70 6c  )==0 ){.    appl
d3b0: 79 41 66 66 69 6e 69 74 79 28 70 49 6e 31 2c 20  yAffinity(pIn1, 
d3c0: 53 51 4c 49 54 45 5f 41 46 46 5f 4e 55 4d 45 52  SQLITE_AFF_NUMER
d3d0: 49 43 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20  IC, encoding);. 
d3e0: 20 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b     VdbeBranchTak
d3f0: 65 6e 28 28 70 49 6e 31 2d 3e 66 6c 61 67 73 26  en((pIn1->flags&
d400: 4d 45 4d 5f 49 6e 74 29 3d 3d 30 2c 20 32 29 3b  MEM_Int)==0, 2);
d410: 0a 20 20 20 20 69 66 28 20 28 70 49 6e 31 2d 3e  .    if( (pIn1->
d420: 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29  flags & MEM_Int)
d430: 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 69 66 28  ==0 ){.      if(
d440: 20 70 4f 70 2d 3e 70 32 3d 3d 30 20 29 7b 0a 20   pOp->p2==0 ){. 
d450: 20 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49         rc = SQLI
d460: 54 45 5f 4d 49 53 4d 41 54 43 48 3b 0a 20 20 20  TE_MISMATCH;.   
d470: 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f       goto abort_
d480: 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
d490: 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
d4a0: 20 20 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f     goto jump_to_
d4b0: 70 32 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  p2;.      }.    
d4c0: 7d 0a 20 20 7d 0a 20 20 4d 65 6d 53 65 74 54 79  }.  }.  MemSetTy
d4d0: 70 65 46 6c 61 67 28 70 49 6e 31 2c 20 4d 45 4d  peFlag(pIn1, MEM
d4e0: 5f 49 6e 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a  _Int);.  break;.
d4f0: 7d 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  }..#ifndef SQLIT
d500: 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f  E_OMIT_FLOATING_
d510: 50 4f 49 4e 54 0a 2f 2a 20 4f 70 63 6f 64 65 3a  POINT./* Opcode:
d520: 20 52 65 61 6c 41 66 66 69 6e 69 74 79 20 50 31   RealAffinity P1
d530: 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 49   * * * *.**.** I
d540: 66 20 72 65 67 69 73 74 65 72 20 50 31 20 68 6f  f register P1 ho
d550: 6c 64 73 20 61 6e 20 69 6e 74 65 67 65 72 20 63  lds an integer c
d560: 6f 6e 76 65 72 74 20 69 74 20 74 6f 20 61 20 72  onvert it to a r
d570: 65 61 6c 20 76 61 6c 75 65 2e 0a 2a 2a 0a 2a 2a  eal value..**.**
d580: 20 54 68 69 73 20 6f 70 63 6f 64 65 20 69 73 20   This opcode is 
d590: 75 73 65 64 20 77 68 65 6e 20 65 78 74 72 61 63  used when extrac
d5a0: 74 69 6e 67 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  ting information
d5b0: 20 66 72 6f 6d 20 61 20 63 6f 6c 75 6d 6e 20 74   from a column t
d5c0: 68 61 74 0a 2a 2a 20 68 61 73 20 52 45 41 4c 20  hat.** has REAL 
d5d0: 61 66 66 69 6e 69 74 79 2e 20 20 53 75 63 68 20  affinity.  Such 
d5e0: 63 6f 6c 75 6d 6e 20 76 61 6c 75 65 73 20 6d 61  column values ma
d5f0: 79 20 73 74 69 6c 6c 20 62 65 20 73 74 6f 72 65  y still be store
d600: 64 20 61 73 0a 2a 2a 20 69 6e 74 65 67 65 72 73  d as.** integers
d610: 2c 20 66 6f 72 20 73 70 61 63 65 20 65 66 66 69  , for space effi
d620: 63 69 65 6e 63 79 2c 20 62 75 74 20 61 66 74 65  ciency, but afte
d630: 72 20 65 78 74 72 61 63 74 69 6f 6e 20 77 65 20  r extraction we 
d640: 77 61 6e 74 20 74 68 65 6d 0a 2a 2a 20 74 6f 20  want them.** to 
d650: 68 61 76 65 20 6f 6e 6c 79 20 61 20 72 65 61 6c  have only a real
d660: 20 76 61 6c 75 65 2e 0a 2a 2f 0a 63 61 73 65 20   value..*/.case 
d670: 4f 50 5f 52 65 61 6c 41 66 66 69 6e 69 74 79 3a  OP_RealAffinity:
d680: 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 20   {              
d690: 20 20 20 20 2f 2a 20 69 6e 31 20 2a 2f 0a 20 20      /* in1 */.  
d6a0: 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn1 = &aMem[pOp
d6b0: 2d 3e 70 31 5d 3b 0a 20 20 69 66 28 20 70 49 6e  ->p1];.  if( pIn
d6c0: 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49  1->flags & MEM_I
d6d0: 6e 74 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  nt ){.    sqlite
d6e0: 33 56 64 62 65 4d 65 6d 52 65 61 6c 69 66 79 28  3VdbeMemRealify(
d6f0: 70 49 6e 31 29 3b 0a 20 20 7d 0a 20 20 62 72 65  pIn1);.  }.  bre
d700: 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 23 69  ak;.}.#endif..#i
d710: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
d720: 54 5f 43 41 53 54 0a 2f 2a 20 4f 70 63 6f 64 65  T_CAST./* Opcode
d730: 3a 20 43 61 73 74 20 50 31 20 50 32 20 2a 20 2a  : Cast P1 P2 * *
d740: 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
d750: 61 66 66 69 6e 69 74 79 28 72 5b 50 31 5d 29 0a  affinity(r[P1]).
d760: 2a 2a 0a 2a 2a 20 46 6f 72 63 65 20 74 68 65 20  **.** Force the 
d770: 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65  value in registe
d780: 72 20 50 31 20 74 6f 20 62 65 20 74 68 65 20 74  r P1 to be the t
d790: 79 70 65 20 64 65 66 69 6e 65 64 20 62 79 20 50  ype defined by P
d7a0: 32 2e 0a 2a 2a 20 0a 2a 2a 20 3c 75 6c 3e 0a 2a  2..** .** <ul>.*
d7b0: 2a 20 3c 6c 69 3e 20 50 32 3d 3d 27 41 27 20 26  * <li> P2=='A' &
d7c0: 72 61 72 72 3b 20 42 4c 4f 42 0a 2a 2a 20 3c 6c  rarr; BLOB.** <l
d7d0: 69 3e 20 50 32 3d 3d 27 42 27 20 26 72 61 72 72  i> P2=='B' &rarr
d7e0: 3b 20 54 45 58 54 0a 2a 2a 20 3c 6c 69 3e 20 50  ; TEXT.** <li> P
d7f0: 32 3d 3d 27 43 27 20 26 72 61 72 72 3b 20 4e 55  2=='C' &rarr; NU
d800: 4d 45 52 49 43 0a 2a 2a 20 3c 6c 69 3e 20 50 32  MERIC.** <li> P2
d810: 3d 3d 27 44 27 20 26 72 61 72 72 3b 20 49 4e 54  =='D' &rarr; INT
d820: 45 47 45 52 0a 2a 2a 20 3c 6c 69 3e 20 50 32 3d  EGER.** <li> P2=
d830: 3d 27 45 27 20 26 72 61 72 72 3b 20 52 45 41 4c  ='E' &rarr; REAL
d840: 0a 2a 2a 20 3c 2f 75 6c 3e 0a 2a 2a 0a 2a 2a 20  .** </ul>.**.** 
d850: 41 20 4e 55 4c 4c 20 76 61 6c 75 65 20 69 73 20  A NULL value is 
d860: 6e 6f 74 20 63 68 61 6e 67 65 64 20 62 79 20 74  not changed by t
d870: 68 69 73 20 72 6f 75 74 69 6e 65 2e 20 20 49 74  his routine.  It
d880: 20 72 65 6d 61 69 6e 73 20 4e 55 4c 4c 2e 0a 2a   remains NULL..*
d890: 2f 0a 63 61 73 65 20 4f 50 5f 43 61 73 74 3a 20  /.case OP_Cast: 
d8a0: 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  {               
d8b0: 20 20 20 2f 2a 20 69 6e 31 20 2a 2f 0a 20 20 61     /* in1 */.  a
d8c0: 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e 3d  ssert( pOp->p2>=
d8d0: 53 51 4c 49 54 45 5f 41 46 46 5f 42 4c 4f 42 20  SQLITE_AFF_BLOB 
d8e0: 26 26 20 70 4f 70 2d 3e 70 32 3c 3d 53 51 4c 49  && pOp->p2<=SQLI
d8f0: 54 45 5f 41 46 46 5f 52 45 41 4c 20 29 3b 0a 20  TE_AFF_REAL );. 
d900: 20 74 65 73 74 63 61 73 65 28 20 70 4f 70 2d 3e   testcase( pOp->
d910: 70 32 3d 3d 53 51 4c 49 54 45 5f 41 46 46 5f 54  p2==SQLITE_AFF_T
d920: 45 58 54 20 29 3b 0a 20 20 74 65 73 74 63 61 73  EXT );.  testcas
d930: 65 28 20 70 4f 70 2d 3e 70 32 3d 3d 53 51 4c 49  e( pOp->p2==SQLI
d940: 54 45 5f 41 46 46 5f 42 4c 4f 42 20 29 3b 0a 20  TE_AFF_BLOB );. 
d950: 20 74 65 73 74 63 61 73 65 28 20 70 4f 70 2d 3e   testcase( pOp->
d960: 70 32 3d 3d 53 51 4c 49 54 45 5f 41 46 46 5f 4e  p2==SQLITE_AFF_N
d970: 55 4d 45 52 49 43 20 29 3b 0a 20 20 74 65 73 74  UMERIC );.  test
d980: 63 61 73 65 28 20 70 4f 70 2d 3e 70 32 3d 3d 53  case( pOp->p2==S
d990: 51 4c 49 54 45 5f 41 46 46 5f 49 4e 54 45 47 45  QLITE_AFF_INTEGE
d9a0: 52 20 29 3b 0a 20 20 74 65 73 74 63 61 73 65 28  R );.  testcase(
d9b0: 20 70 4f 70 2d 3e 70 32 3d 3d 53 51 4c 49 54 45   pOp->p2==SQLITE
d9c0: 5f 41 46 46 5f 52 45 41 4c 20 29 3b 0a 20 20 70  _AFF_REAL );.  p
d9d0: 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In1 = &aMem[pOp-
d9e0: 3e 70 31 5d 3b 0a 20 20 6d 65 6d 41 62 6f 75 74  >p1];.  memAbout
d9f0: 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 49 6e 31  ToChange(p, pIn1
da00: 29 3b 0a 20 20 72 63 20 3d 20 45 78 70 61 6e 64  );.  rc = Expand
da10: 42 6c 6f 62 28 70 49 6e 31 29 3b 0a 20 20 73 71  Blob(pIn1);.  sq
da20: 6c 69 74 65 33 56 64 62 65 4d 65 6d 43 61 73 74  lite3VdbeMemCast
da30: 28 70 49 6e 31 2c 20 70 4f 70 2d 3e 70 32 2c 20  (pIn1, pOp->p2, 
da40: 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 55 50 44  encoding);.  UPD
da50: 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45  ATE_MAX_BLOBSIZE
da60: 28 70 49 6e 31 29 3b 0a 20 20 69 66 28 20 72 63  (pIn1);.  if( rc
da70: 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75   ) goto abort_du
da80: 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 62 72  e_to_error;.  br
da90: 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a  eak;.}.#endif /*
daa0: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 43 41 53   SQLITE_OMIT_CAS
dab0: 54 20 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  T */../* Opcode:
dac0: 20 45 71 20 50 31 20 50 32 20 50 33 20 50 34 20   Eq P1 P2 P3 P4 
dad0: 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20  P5.** Synopsis: 
dae0: 49 46 20 72 5b 50 33 5d 3d 3d 72 5b 50 31 5d 0a  IF r[P3]==r[P1].
daf0: 2a 2a 0a 2a 2a 20 43 6f 6d 70 61 72 65 20 74 68  **.** Compare th
db00: 65 20 76 61 6c 75 65 73 20 69 6e 20 72 65 67 69  e values in regi
db10: 73 74 65 72 20 50 31 20 61 6e 64 20 50 33 2e 20  ster P1 and P3. 
db20: 20 49 66 20 72 65 67 28 50 33 29 3d 3d 72 65 67   If reg(P3)==reg
db30: 28 50 31 29 20 74 68 65 6e 0a 2a 2a 20 6a 75 6d  (P1) then.** jum
db40: 70 20 74 6f 20 61 64 64 72 65 73 73 20 50 32 2e  p to address P2.
db50: 20 20 4f 72 20 69 66 20 74 68 65 20 53 51 4c 49    Or if the SQLI
db60: 54 45 5f 53 54 4f 52 45 50 32 20 66 6c 61 67 20  TE_STOREP2 flag 
db70: 69 73 20 73 65 74 20 69 6e 20 50 35 2c 20 74 68  is set in P5, th
db80: 65 6e 0a 2a 2a 20 73 74 6f 72 65 20 74 68 65 20  en.** store the 
db90: 72 65 73 75 6c 74 20 6f 66 20 63 6f 6d 70 61 72  result of compar
dba0: 69 73 6f 6e 20 69 6e 20 72 65 67 69 73 74 65 72  ison in register
dbb0: 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 53   P2..**.** The S
dbc0: 51 4c 49 54 45 5f 41 46 46 5f 4d 41 53 4b 20 70  QLITE_AFF_MASK p
dbd0: 6f 72 74 69 6f 6e 20 6f 66 20 50 35 20 6d 75 73  ortion of P5 mus
dbe0: 74 20 62 65 20 61 6e 20 61 66 66 69 6e 69 74 79  t be an affinity
dbf0: 20 63 68 61 72 61 63 74 65 72 20 2d 0a 2a 2a 20   character -.** 
dc00: 53 51 4c 49 54 45 5f 41 46 46 5f 54 45 58 54 2c  SQLITE_AFF_TEXT,
dc10: 20 53 51 4c 49 54 45 5f 41 46 46 5f 49 4e 54 45   SQLITE_AFF_INTE
dc20: 47 45 52 2c 20 61 6e 64 20 73 6f 20 66 6f 72 74  GER, and so fort
dc30: 68 2e 20 41 6e 20 61 74 74 65 6d 70 74 20 69 73  h. An attempt is
dc40: 20 6d 61 64 65 20 0a 2a 2a 20 74 6f 20 63 6f 65   made .** to coe
dc50: 72 63 65 20 62 6f 74 68 20 69 6e 70 75 74 73 20  rce both inputs 
dc60: 61 63 63 6f 72 64 69 6e 67 20 74 6f 20 74 68 69  according to thi
dc70: 73 20 61 66 66 69 6e 69 74 79 20 62 65 66 6f 72  s affinity befor
dc80: 65 20 74 68 65 0a 2a 2a 20 63 6f 6d 70 61 72 69  e the.** compari
dc90: 73 6f 6e 20 69 73 20 6d 61 64 65 2e 20 49 66 20  son is made. If 
dca0: 74 68 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 4d  the SQLITE_AFF_M
dcb0: 41 53 4b 20 69 73 20 30 78 30 30 2c 20 74 68 65  ASK is 0x00, the
dcc0: 6e 20 6e 75 6d 65 72 69 63 0a 2a 2a 20 61 66 66  n numeric.** aff
dcd0: 69 6e 69 74 79 20 69 73 20 75 73 65 64 2e 20 4e  inity is used. N
dce0: 6f 74 65 20 74 68 61 74 20 74 68 65 20 61 66 66  ote that the aff
dcf0: 69 6e 69 74 79 20 63 6f 6e 76 65 72 73 69 6f 6e  inity conversion
dd00: 73 20 61 72 65 20 73 74 6f 72 65 64 0a 2a 2a 20  s are stored.** 
dd10: 62 61 63 6b 20 69 6e 74 6f 20 74 68 65 20 69 6e  back into the in
dd20: 70 75 74 20 72 65 67 69 73 74 65 72 73 20 50 31  put registers P1
dd30: 20 61 6e 64 20 50 33 2e 20 20 53 6f 20 74 68 69   and P3.  So thi
dd40: 73 20 6f 70 63 6f 64 65 20 63 61 6e 20 63 61 75  s opcode can cau
dd50: 73 65 0a 2a 2a 20 70 65 72 73 69 73 74 65 6e 74  se.** persistent
dd60: 20 63 68 61 6e 67 65 73 20 74 6f 20 72 65 67 69   changes to regi
dd70: 73 74 65 72 73 20 50 31 20 61 6e 64 20 50 33 2e  sters P1 and P3.
dd80: 0a 2a 2a 0a 2a 2a 20 4f 6e 63 65 20 61 6e 79 20  .**.** Once any 
dd90: 63 6f 6e 76 65 72 73 69 6f 6e 73 20 68 61 76 65  conversions have
dda0: 20 74 61 6b 65 6e 20 70 6c 61 63 65 2c 20 61 6e   taken place, an
ddb0: 64 20 6e 65 69 74 68 65 72 20 76 61 6c 75 65 20  d neither value 
ddc0: 69 73 20 4e 55 4c 4c 2c 20 0a 2a 2a 20 74 68 65  is NULL, .** the
ddd0: 20 76 61 6c 75 65 73 20 61 72 65 20 63 6f 6d 70   values are comp
dde0: 61 72 65 64 2e 20 49 66 20 62 6f 74 68 20 76 61  ared. If both va
ddf0: 6c 75 65 73 20 61 72 65 20 62 6c 6f 62 73 20 74  lues are blobs t
de00: 68 65 6e 20 6d 65 6d 63 6d 70 28 29 20 69 73 0a  hen memcmp() is.
de10: 2a 2a 20 75 73 65 64 20 74 6f 20 64 65 74 65 72  ** used to deter
de20: 6d 69 6e 65 20 74 68 65 20 72 65 73 75 6c 74 73  mine the results
de30: 20 6f 66 20 74 68 65 20 63 6f 6d 70 61 72 69 73   of the comparis
de40: 6f 6e 2e 20 20 49 66 20 62 6f 74 68 20 76 61 6c  on.  If both val
de50: 75 65 73 0a 2a 2a 20 61 72 65 20 74 65 78 74 2c  ues.** are text,
de60: 20 74 68 65 6e 20 74 68 65 20 61 70 70 72 6f 70   then the approp
de70: 72 69 61 74 65 20 63 6f 6c 6c 61 74 69 6e 67 20  riate collating 
de80: 66 75 6e 63 74 69 6f 6e 20 73 70 65 63 69 66 69  function specifi
de90: 65 64 20 69 6e 0a 2a 2a 20 50 34 20 69 73 20 75  ed in.** P4 is u
dea0: 73 65 64 20 74 6f 20 64 6f 20 74 68 65 20 63 6f  sed to do the co
deb0: 6d 70 61 72 69 73 6f 6e 2e 20 20 49 66 20 50 34  mparison.  If P4
dec0: 20 69 73 20 6e 6f 74 20 73 70 65 63 69 66 69 65   is not specifie
ded0: 64 20 74 68 65 6e 0a 2a 2a 20 6d 65 6d 63 6d 70  d then.** memcmp
dee0: 28 29 20 69 73 20 75 73 65 64 20 74 6f 20 63 6f  () is used to co
def0: 6d 70 61 72 65 20 74 65 78 74 20 73 74 72 69 6e  mpare text strin
df00: 67 2e 20 20 49 66 20 62 6f 74 68 20 76 61 6c 75  g.  If both valu
df10: 65 73 20 61 72 65 0a 2a 2a 20 6e 75 6d 65 72 69  es are.** numeri
df20: 63 2c 20 74 68 65 6e 20 61 20 6e 75 6d 65 72 69  c, then a numeri
df30: 63 20 63 6f 6d 70 61 72 69 73 6f 6e 20 69 73 20  c comparison is 
df40: 75 73 65 64 2e 20 49 66 20 74 68 65 20 74 77 6f  used. If the two
df50: 20 76 61 6c 75 65 73 0a 2a 2a 20 61 72 65 20 6f   values.** are o
df60: 66 20 64 69 66 66 65 72 65 6e 74 20 74 79 70 65  f different type
df70: 73 2c 20 74 68 65 6e 20 6e 75 6d 62 65 72 73 20  s, then numbers 
df80: 61 72 65 20 63 6f 6e 73 69 64 65 72 65 64 20 6c  are considered l
df90: 65 73 73 20 74 68 61 6e 0a 2a 2a 20 73 74 72 69  ess than.** stri
dfa0: 6e 67 73 20 61 6e 64 20 73 74 72 69 6e 67 73 20  ngs and strings 
dfb0: 61 72 65 20 63 6f 6e 73 69 64 65 72 65 64 20 6c  are considered l
dfc0: 65 73 73 20 74 68 61 6e 20 62 6c 6f 62 73 2e 0a  ess than blobs..
dfd0: 2a 2a 0a 2a 2a 20 49 66 20 53 51 4c 49 54 45 5f  **.** If SQLITE_
dfe0: 4e 55 4c 4c 45 51 20 69 73 20 73 65 74 20 69 6e  NULLEQ is set in
dff0: 20 50 35 20 74 68 65 6e 20 74 68 65 20 72 65 73   P5 then the res
e000: 75 6c 74 20 6f 66 20 63 6f 6d 70 61 72 69 73 6f  ult of compariso
e010: 6e 20 69 73 20 61 6c 77 61 79 73 20 65 69 74 68  n is always eith
e020: 65 72 0a 2a 2a 20 74 72 75 65 20 6f 72 20 66 61  er.** true or fa
e030: 6c 73 65 20 61 6e 64 20 69 73 20 6e 65 76 65 72  lse and is never
e040: 20 4e 55 4c 4c 2e 20 20 49 66 20 62 6f 74 68 20   NULL.  If both 
e050: 6f 70 65 72 61 6e 64 73 20 61 72 65 20 4e 55 4c  operands are NUL
e060: 4c 20 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c  L then the resul
e070: 74 0a 2a 2a 20 6f 66 20 63 6f 6d 70 61 72 69 73  t.** of comparis
e080: 6f 6e 20 69 73 20 74 72 75 65 2e 20 20 49 66 20  on is true.  If 
e090: 65 69 74 68 65 72 20 6f 70 65 72 61 6e 64 20 69  either operand i
e0a0: 73 20 4e 55 4c 4c 20 74 68 65 6e 20 74 68 65 20  s NULL then the 
e0b0: 72 65 73 75 6c 74 20 69 73 20 66 61 6c 73 65 2e  result is false.
e0c0: 0a 2a 2a 20 49 66 20 6e 65 69 74 68 65 72 20 6f  .** If neither o
e0d0: 70 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c 20 74  perand is NULL t
e0e0: 68 65 20 72 65 73 75 6c 74 20 69 73 20 74 68 65  he result is the
e0f0: 20 73 61 6d 65 20 61 73 20 69 74 20 77 6f 75 6c   same as it woul
e100: 64 20 62 65 20 69 66 0a 2a 2a 20 74 68 65 20 53  d be if.** the S
e110: 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 20 66 6c 61  QLITE_NULLEQ fla
e120: 67 20 77 65 72 65 20 6f 6d 69 74 74 65 64 20 66  g were omitted f
e130: 72 6f 6d 20 50 35 2e 0a 2a 2a 0a 2a 2a 20 49 66  rom P5..**.** If
e140: 20 62 6f 74 68 20 53 51 4c 49 54 45 5f 53 54 4f   both SQLITE_STO
e150: 52 45 50 32 20 61 6e 64 20 53 51 4c 49 54 45 5f  REP2 and SQLITE_
e160: 4b 45 45 50 4e 55 4c 4c 20 66 6c 61 67 73 20 61  KEEPNULL flags a
e170: 72 65 20 73 65 74 20 74 68 65 6e 20 74 68 65 0a  re set then the.
e180: 2a 2a 20 63 6f 6e 74 65 6e 74 20 6f 66 20 72 5b  ** content of r[
e190: 50 32 5d 20 69 73 20 6f 6e 6c 79 20 63 68 61 6e  P2] is only chan
e1a0: 67 65 64 20 69 66 20 74 68 65 20 6e 65 77 20 76  ged if the new v
e1b0: 61 6c 75 65 20 69 73 20 4e 55 4c 4c 20 6f 72 20  alue is NULL or 
e1c0: 30 20 28 66 61 6c 73 65 29 2e 0a 2a 2a 20 49 6e  0 (false)..** In
e1d0: 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 61 20   other words, a 
e1e0: 70 72 69 6f 72 20 72 5b 50 32 5d 20 76 61 6c 75  prior r[P2] valu
e1f0: 65 20 77 69 6c 6c 20 6e 6f 74 20 62 65 20 6f 76  e will not be ov
e200: 65 72 77 72 69 74 74 65 6e 20 62 79 20 31 20 28  erwritten by 1 (
e210: 74 72 75 65 29 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63  true)..*/./* Opc
e220: 6f 64 65 3a 20 4e 65 20 50 31 20 50 32 20 50 33  ode: Ne P1 P2 P3
e230: 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73   P4 P5.** Synops
e240: 69 73 3a 20 49 46 20 72 5b 50 33 5d 21 3d 72 5b  is: IF r[P3]!=r[
e250: 50 31 5d 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 77  P1].**.** This w
e260: 6f 72 6b 73 20 6a 75 73 74 20 6c 69 6b 65 20 74  orks just like t
e270: 68 65 20 45 71 20 6f 70 63 6f 64 65 20 65 78 63  he Eq opcode exc
e280: 65 70 74 20 74 68 61 74 20 74 68 65 20 6a 75 6d  ept that the jum
e290: 70 20 69 73 20 74 61 6b 65 6e 20 69 66 0a 2a 2a  p is taken if.**
e2a0: 20 74 68 65 20 6f 70 65 72 61 6e 64 73 20 69 6e   the operands in
e2b0: 20 72 65 67 69 73 74 65 72 73 20 50 31 20 61 6e   registers P1 an
e2c0: 64 20 50 33 20 61 72 65 20 6e 6f 74 20 65 71 75  d P3 are not equ
e2d0: 61 6c 2e 20 20 53 65 65 20 74 68 65 20 45 71 20  al.  See the Eq 
e2e0: 6f 70 63 6f 64 65 20 66 6f 72 0a 2a 2a 20 61 64  opcode for.** ad
e2f0: 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61  ditional informa
e300: 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 62  tion..**.** If b
e310: 6f 74 68 20 53 51 4c 49 54 45 5f 53 54 4f 52 45  oth SQLITE_STORE
e320: 50 32 20 61 6e 64 20 53 51 4c 49 54 45 5f 4b 45  P2 and SQLITE_KE
e330: 45 50 4e 55 4c 4c 20 66 6c 61 67 73 20 61 72 65  EPNULL flags are
e340: 20 73 65 74 20 74 68 65 6e 20 74 68 65 0a 2a 2a   set then the.**
e350: 20 63 6f 6e 74 65 6e 74 20 6f 66 20 72 5b 50 32   content of r[P2
e360: 5d 20 69 73 20 6f 6e 6c 79 20 63 68 61 6e 67 65  ] is only change
e370: 64 20 69 66 20 74 68 65 20 6e 65 77 20 76 61 6c  d if the new val
e380: 75 65 20 69 73 20 4e 55 4c 4c 20 6f 72 20 31 20  ue is NULL or 1 
e390: 28 74 72 75 65 29 2e 0a 2a 2a 20 49 6e 20 6f 74  (true)..** In ot
e3a0: 68 65 72 20 77 6f 72 64 73 2c 20 61 20 70 72 69  her words, a pri
e3b0: 6f 72 20 72 5b 50 32 5d 20 76 61 6c 75 65 20 77  or r[P2] value w
e3c0: 69 6c 6c 20 6e 6f 74 20 62 65 20 6f 76 65 72 77  ill not be overw
e3d0: 72 69 74 74 65 6e 20 62 79 20 30 20 28 66 61 6c  ritten by 0 (fal
e3e0: 73 65 29 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64  se)..*/./* Opcod
e3f0: 65 3a 20 4c 74 20 50 31 20 50 32 20 50 33 20 50  e: Lt P1 P2 P3 P
e400: 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73  4 P5.** Synopsis
e410: 3a 20 49 46 20 72 5b 50 33 5d 3c 72 5b 50 31 5d  : IF r[P3]<r[P1]
e420: 0a 2a 2a 0a 2a 2a 20 43 6f 6d 70 61 72 65 20 74  .**.** Compare t
e430: 68 65 20 76 61 6c 75 65 73 20 69 6e 20 72 65 67  he values in reg
e440: 69 73 74 65 72 20 50 31 20 61 6e 64 20 50 33 2e  ister P1 and P3.
e450: 20 20 49 66 20 72 65 67 28 50 33 29 3c 72 65 67    If reg(P3)<reg
e460: 28 50 31 29 20 74 68 65 6e 0a 2a 2a 20 6a 75 6d  (P1) then.** jum
e470: 70 20 74 6f 20 61 64 64 72 65 73 73 20 50 32 2e  p to address P2.
e480: 20 20 4f 72 20 69 66 20 74 68 65 20 53 51 4c 49    Or if the SQLI
e490: 54 45 5f 53 54 4f 52 45 50 32 20 66 6c 61 67 20  TE_STOREP2 flag 
e4a0: 69 73 20 73 65 74 20 69 6e 20 50 35 20 73 74 6f  is set in P5 sto
e4b0: 72 65 0a 2a 2a 20 74 68 65 20 72 65 73 75 6c 74  re.** the result
e4c0: 20 6f 66 20 63 6f 6d 70 61 72 69 73 6f 6e 20 28   of comparison (
e4d0: 30 20 6f 72 20 31 20 6f 72 20 4e 55 4c 4c 29 20  0 or 1 or NULL) 
e4e0: 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 32  into register P2
e4f0: 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 53  ..**.** If the S
e500: 51 4c 49 54 45 5f 4a 55 4d 50 49 46 4e 55 4c 4c  QLITE_JUMPIFNULL
e510: 20 62 69 74 20 6f 66 20 50 35 20 69 73 20 73 65   bit of P5 is se
e520: 74 20 61 6e 64 20 65 69 74 68 65 72 20 72 65 67  t and either reg
e530: 28 50 31 29 20 6f 72 0a 2a 2a 20 72 65 67 28 50  (P1) or.** reg(P
e540: 33 29 20 69 73 20 4e 55 4c 4c 20 74 68 65 6e 20  3) is NULL then 
e550: 74 68 65 20 74 61 6b 65 20 74 68 65 20 6a 75 6d  the take the jum
e560: 70 2e 20 20 49 66 20 74 68 65 20 53 51 4c 49 54  p.  If the SQLIT
e570: 45 5f 4a 55 4d 50 49 46 4e 55 4c 4c 20 0a 2a 2a  E_JUMPIFNULL .**
e580: 20 62 69 74 20 69 73 20 63 6c 65 61 72 20 74 68   bit is clear th
e590: 65 6e 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 20  en fall through 
e5a0: 69 66 20 65 69 74 68 65 72 20 6f 70 65 72 61 6e  if either operan
e5b0: 64 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2a 0a 2a 2a  d is NULL..**.**
e5c0: 20 54 68 65 20 53 51 4c 49 54 45 5f 41 46 46 5f   The SQLITE_AFF_
e5d0: 4d 41 53 4b 20 70 6f 72 74 69 6f 6e 20 6f 66 20  MASK portion of 
e5e0: 50 35 20 6d 75 73 74 20 62 65 20 61 6e 20 61 66  P5 must be an af
e5f0: 66 69 6e 69 74 79 20 63 68 61 72 61 63 74 65 72  finity character
e600: 20 2d 0a 2a 2a 20 53 51 4c 49 54 45 5f 41 46 46   -.** SQLITE_AFF
e610: 5f 54 45 58 54 2c 20 53 51 4c 49 54 45 5f 41 46  _TEXT, SQLITE_AF
e620: 46 5f 49 4e 54 45 47 45 52 2c 20 61 6e 64 20 73  F_INTEGER, and s
e630: 6f 20 66 6f 72 74 68 2e 20 41 6e 20 61 74 74 65  o forth. An atte
e640: 6d 70 74 20 69 73 20 6d 61 64 65 20 0a 2a 2a 20  mpt is made .** 
e650: 74 6f 20 63 6f 65 72 63 65 20 62 6f 74 68 20 69  to coerce both i
e660: 6e 70 75 74 73 20 61 63 63 6f 72 64 69 6e 67 20  nputs according 
e670: 74 6f 20 74 68 69 73 20 61 66 66 69 6e 69 74 79  to this affinity
e680: 20 62 65 66 6f 72 65 20 74 68 65 0a 2a 2a 20 63   before the.** c
e690: 6f 6d 70 61 72 69 73 6f 6e 20 69 73 20 6d 61 64  omparison is mad
e6a0: 65 2e 20 49 66 20 74 68 65 20 53 51 4c 49 54 45  e. If the SQLITE
e6b0: 5f 41 46 46 5f 4d 41 53 4b 20 69 73 20 30 78 30  _AFF_MASK is 0x0
e6c0: 30 2c 20 74 68 65 6e 20 6e 75 6d 65 72 69 63 0a  0, then numeric.
e6d0: 2a 2a 20 61 66 66 69 6e 69 74 79 20 69 73 20 75  ** affinity is u
e6e0: 73 65 64 2e 20 4e 6f 74 65 20 74 68 61 74 20 74  sed. Note that t
e6f0: 68 65 20 61 66 66 69 6e 69 74 79 20 63 6f 6e 76  he affinity conv
e700: 65 72 73 69 6f 6e 73 20 61 72 65 20 73 74 6f 72  ersions are stor
e710: 65 64 0a 2a 2a 20 62 61 63 6b 20 69 6e 74 6f 20  ed.** back into 
e720: 74 68 65 20 69 6e 70 75 74 20 72 65 67 69 73 74  the input regist
e730: 65 72 73 20 50 31 20 61 6e 64 20 50 33 2e 20 20  ers P1 and P3.  
e740: 53 6f 20 74 68 69 73 20 6f 70 63 6f 64 65 20 63  So this opcode c
e750: 61 6e 20 63 61 75 73 65 0a 2a 2a 20 70 65 72 73  an cause.** pers
e760: 69 73 74 65 6e 74 20 63 68 61 6e 67 65 73 20 74  istent changes t
e770: 6f 20 72 65 67 69 73 74 65 72 73 20 50 31 20 61  o registers P1 a
e780: 6e 64 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 4f 6e 63  nd P3..**.** Onc
e790: 65 20 61 6e 79 20 63 6f 6e 76 65 72 73 69 6f 6e  e any conversion
e7a0: 73 20 68 61 76 65 20 74 61 6b 65 6e 20 70 6c 61  s have taken pla
e7b0: 63 65 2c 20 61 6e 64 20 6e 65 69 74 68 65 72 20  ce, and neither 
e7c0: 76 61 6c 75 65 20 69 73 20 4e 55 4c 4c 2c 20 0a  value is NULL, .
e7d0: 2a 2a 20 74 68 65 20 76 61 6c 75 65 73 20 61 72  ** the values ar
e7e0: 65 20 63 6f 6d 70 61 72 65 64 2e 20 49 66 20 62  e compared. If b
e7f0: 6f 74 68 20 76 61 6c 75 65 73 20 61 72 65 20 62  oth values are b
e800: 6c 6f 62 73 20 74 68 65 6e 20 6d 65 6d 63 6d 70  lobs then memcmp
e810: 28 29 20 69 73 0a 2a 2a 20 75 73 65 64 20 74 6f  () is.** used to
e820: 20 64 65 74 65 72 6d 69 6e 65 20 74 68 65 20 72   determine the r
e830: 65 73 75 6c 74 73 20 6f 66 20 74 68 65 20 63 6f  esults of the co
e840: 6d 70 61 72 69 73 6f 6e 2e 20 20 49 66 20 62 6f  mparison.  If bo
e850: 74 68 20 76 61 6c 75 65 73 0a 2a 2a 20 61 72 65  th values.** are
e860: 20 74 65 78 74 2c 20 74 68 65 6e 20 74 68 65 20   text, then the 
e870: 61 70 70 72 6f 70 72 69 61 74 65 20 63 6f 6c 6c  appropriate coll
e880: 61 74 69 6e 67 20 66 75 6e 63 74 69 6f 6e 20 73  ating function s
e890: 70 65 63 69 66 69 65 64 20 69 6e 0a 2a 2a 20 50  pecified in.** P
e8a0: 34 20 69 73 20 20 75 73 65 64 20 74 6f 20 64 6f  4 is  used to do
e8b0: 20 74 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e 2e   the comparison.
e8c0: 20 20 49 66 20 50 34 20 69 73 20 6e 6f 74 20 73    If P4 is not s
e8d0: 70 65 63 69 66 69 65 64 20 74 68 65 6e 0a 2a 2a  pecified then.**
e8e0: 20 6d 65 6d 63 6d 70 28 29 20 69 73 20 75 73 65   memcmp() is use
e8f0: 64 20 74 6f 20 63 6f 6d 70 61 72 65 20 74 65 78  d to compare tex
e900: 74 20 73 74 72 69 6e 67 2e 20 20 49 66 20 62 6f  t string.  If bo
e910: 74 68 20 76 61 6c 75 65 73 20 61 72 65 0a 2a 2a  th values are.**
e920: 20 6e 75 6d 65 72 69 63 2c 20 74 68 65 6e 20 61   numeric, then a
e930: 20 6e 75 6d 65 72 69 63 20 63 6f 6d 70 61 72 69   numeric compari
e940: 73 6f 6e 20 69 73 20 75 73 65 64 2e 20 49 66 20  son is used. If 
e950: 74 68 65 20 74 77 6f 20 76 61 6c 75 65 73 0a 2a  the two values.*
e960: 2a 20 61 72 65 20 6f 66 20 64 69 66 66 65 72 65  * are of differe
e970: 6e 74 20 74 79 70 65 73 2c 20 74 68 65 6e 20 6e  nt types, then n
e980: 75 6d 62 65 72 73 20 61 72 65 20 63 6f 6e 73 69  umbers are consi
e990: 64 65 72 65 64 20 6c 65 73 73 20 74 68 61 6e 0a  dered less than.
e9a0: 2a 2a 20 73 74 72 69 6e 67 73 20 61 6e 64 20 73  ** strings and s
e9b0: 74 72 69 6e 67 73 20 61 72 65 20 63 6f 6e 73 69  trings are consi
e9c0: 64 65 72 65 64 20 6c 65 73 73 20 74 68 61 6e 20  dered less than 
e9d0: 62 6c 6f 62 73 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63  blobs..*/./* Opc
e9e0: 6f 64 65 3a 20 4c 65 20 50 31 20 50 32 20 50 33  ode: Le P1 P2 P3
e9f0: 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73   P4 P5.** Synops
ea00: 69 73 3a 20 49 46 20 72 5b 50 33 5d 3c 3d 72 5b  is: IF r[P3]<=r[
ea10: 50 31 5d 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 77  P1].**.** This w
ea20: 6f 72 6b 73 20 6a 75 73 74 20 6c 69 6b 65 20 74  orks just like t
ea30: 68 65 20 4c 74 20 6f 70 63 6f 64 65 20 65 78 63  he Lt opcode exc
ea40: 65 70 74 20 74 68 61 74 20 74 68 65 20 6a 75 6d  ept that the jum
ea50: 70 20 69 73 20 74 61 6b 65 6e 20 69 66 0a 2a 2a  p is taken if.**
ea60: 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20   the content of 
ea70: 72 65 67 69 73 74 65 72 20 50 33 20 69 73 20 6c  register P3 is l
ea80: 65 73 73 20 74 68 61 6e 20 6f 72 20 65 71 75 61  ess than or equa
ea90: 6c 20 74 6f 20 74 68 65 20 63 6f 6e 74 65 6e 74  l to the content
eaa0: 20 6f 66 0a 2a 2a 20 72 65 67 69 73 74 65 72 20   of.** register 
eab0: 50 31 2e 20 20 53 65 65 20 74 68 65 20 4c 74 20  P1.  See the Lt 
eac0: 6f 70 63 6f 64 65 20 66 6f 72 20 61 64 64 69 74  opcode for addit
ead0: 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f  ional informatio
eae0: 6e 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a  n..*/./* Opcode:
eaf0: 20 47 74 20 50 31 20 50 32 20 50 33 20 50 34 20   Gt P1 P2 P3 P4 
eb00: 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20  P5.** Synopsis: 
eb10: 49 46 20 72 5b 50 33 5d 3e 72 5b 50 31 5d 0a 2a  IF r[P3]>r[P1].*
eb20: 2a 0a 2a 2a 20 54 68 69 73 20 77 6f 72 6b 73 20  *.** This works 
eb30: 6a 75 73 74 20 6c 69 6b 65 20 74 68 65 20 4c 74  just like the Lt
eb40: 20 6f 70 63 6f 64 65 20 65 78 63 65 70 74 20 74   opcode except t
eb50: 68 61 74 20 74 68 65 20 6a 75 6d 70 20 69 73 20  hat the jump is 
eb60: 74 61 6b 65 6e 20 69 66 0a 2a 2a 20 74 68 65 20  taken if.** the 
eb70: 63 6f 6e 74 65 6e 74 20 6f 66 20 72 65 67 69 73  content of regis
eb80: 74 65 72 20 50 33 20 69 73 20 67 72 65 61 74 65  ter P3 is greate
eb90: 72 20 74 68 61 6e 20 74 68 65 20 63 6f 6e 74 65  r than the conte
eba0: 6e 74 20 6f 66 0a 2a 2a 20 72 65 67 69 73 74 65  nt of.** registe
ebb0: 72 20 50 31 2e 20 20 53 65 65 20 74 68 65 20 4c  r P1.  See the L
ebc0: 74 20 6f 70 63 6f 64 65 20 66 6f 72 20 61 64 64  t opcode for add
ebd0: 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74  itional informat
ebe0: 69 6f 6e 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64  ion..*/./* Opcod
ebf0: 65 3a 20 47 65 20 50 31 20 50 32 20 50 33 20 50  e: Ge P1 P2 P3 P
ec00: 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73  4 P5.** Synopsis
ec10: 3a 20 49 46 20 72 5b 50 33 5d 3e 3d 72 5b 50 31  : IF r[P3]>=r[P1
ec20: 5d 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 77 6f 72  ].**.** This wor
ec30: 6b 73 20 6a 75 73 74 20 6c 69 6b 65 20 74 68 65  ks just like the
ec40: 20 4c 74 20 6f 70 63 6f 64 65 20 65 78 63 65 70   Lt opcode excep
ec50: 74 20 74 68 61 74 20 74 68 65 20 6a 75 6d 70 20  t that the jump 
ec60: 69 73 20 74 61 6b 65 6e 20 69 66 0a 2a 2a 20 74  is taken if.** t
ec70: 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 72 65  he content of re
ec80: 67 69 73 74 65 72 20 50 33 20 69 73 20 67 72 65  gister P3 is gre
ec90: 61 74 65 72 20 74 68 61 6e 20 6f 72 20 65 71 75  ater than or equ
eca0: 61 6c 20 74 6f 20 74 68 65 20 63 6f 6e 74 65 6e  al to the conten
ecb0: 74 20 6f 66 0a 2a 2a 20 72 65 67 69 73 74 65 72  t of.** register
ecc0: 20 50 31 2e 20 20 53 65 65 20 74 68 65 20 4c 74   P1.  See the Lt
ecd0: 20 6f 70 63 6f 64 65 20 66 6f 72 20 61 64 64 69   opcode for addi
ece0: 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69  tional informati
ecf0: 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 45  on..*/.case OP_E
ed00: 71 3a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  q:              
ed10: 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 45   /* same as TK_E
ed20: 51 2c 20 6a 75 6d 70 2c 20 69 6e 31 2c 20 69 6e  Q, jump, in1, in
ed30: 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 65 3a  3 */.case OP_Ne:
ed40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
ed50: 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 4e 45 2c  * same as TK_NE,
ed60: 20 6a 75 6d 70 2c 20 69 6e 31 2c 20 69 6e 33 20   jump, in1, in3 
ed70: 2a 2f 0a 63 61 73 65 20 4f 50 5f 4c 74 3a 20 20  */.case OP_Lt:  
ed80: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
ed90: 73 61 6d 65 20 61 73 20 54 4b 5f 4c 54 2c 20 6a  same as TK_LT, j
eda0: 75 6d 70 2c 20 69 6e 31 2c 20 69 6e 33 20 2a 2f  ump, in1, in3 */
edb0: 0a 63 61 73 65 20 4f 50 5f 4c 65 3a 20 20 20 20  .case OP_Le:    
edc0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61             /* sa
edd0: 6d 65 20 61 73 20 54 4b 5f 4c 45 2c 20 6a 75 6d  me as TK_LE, jum
ede0: 70 2c 20 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a 63  p, in1, in3 */.c
edf0: 61 73 65 20 4f 50 5f 47 74 3a 20 20 20 20 20 20  ase OP_Gt:      
ee00: 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65           /* same
ee10: 20 61 73 20 54 4b 5f 47 54 2c 20 6a 75 6d 70 2c   as TK_GT, jump,
ee20: 20 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a 63 61 73   in1, in3 */.cas
ee30: 65 20 4f 50 5f 47 65 3a 20 7b 20 20 20 20 20 20  e OP_Ge: {      
ee40: 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61         /* same a
ee50: 73 20 54 4b 5f 47 45 2c 20 6a 75 6d 70 2c 20 69  s TK_GE, jump, i
ee60: 6e 31 2c 20 69 6e 33 20 2a 2f 0a 20 20 69 6e 74  n1, in3 */.  int
ee70: 20 72 65 73 2c 20 72 65 73 32 3b 20 20 20 20 20   res, res2;     
ee80: 20 2f 2a 20 52 65 73 75 6c 74 20 6f 66 20 74 68   /* Result of th
ee90: 65 20 63 6f 6d 70 61 72 69 73 6f 6e 20 6f 66 20  e comparison of 
eea0: 70 49 6e 31 20 61 67 61 69 6e 73 74 20 70 49 6e  pIn1 against pIn
eeb0: 33 20 2a 2f 0a 20 20 63 68 61 72 20 61 66 66 69  3 */.  char affi
eec0: 6e 69 74 79 3b 20 20 20 20 20 20 2f 2a 20 41 66  nity;      /* Af
eed0: 66 69 6e 69 74 79 20 74 6f 20 75 73 65 20 66 6f  finity to use fo
eee0: 72 20 63 6f 6d 70 61 72 69 73 6f 6e 20 2a 2f 0a  r comparison */.
eef0: 20 20 75 31 36 20 66 6c 61 67 73 31 3b 20 20 20    u16 flags1;   
ef00: 20 20 20 20 20 20 2f 2a 20 43 6f 70 79 20 6f 66        /* Copy of
ef10: 20 69 6e 69 74 69 61 6c 20 76 61 6c 75 65 20 6f   initial value o
ef20: 66 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 2a 2f  f pIn1->flags */
ef30: 0a 20 20 75 31 36 20 66 6c 61 67 73 33 3b 20 20  .  u16 flags3;  
ef40: 20 20 20 20 20 20 20 2f 2a 20 43 6f 70 79 20 6f         /* Copy o
ef50: 66 20 69 6e 69 74 69 61 6c 20 76 61 6c 75 65 20  f initial value 
ef60: 6f 66 20 70 49 6e 33 2d 3e 66 6c 61 67 73 20 2a  of pIn3->flags *
ef70: 2f 0a 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65  /..  pIn1 = &aMe
ef80: 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 49  m[pOp->p1];.  pI
ef90: 6e 33 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n3 = &aMem[pOp->
efa0: 70 33 5d 3b 0a 20 20 66 6c 61 67 73 31 20 3d 20  p3];.  flags1 = 
efb0: 70 49 6e 31 2d 3e 66 6c 61 67 73 3b 0a 20 20 66  pIn1->flags;.  f
efc0: 6c 61 67 73 33 20 3d 20 70 49 6e 33 2d 3e 66 6c  lags3 = pIn3->fl
efd0: 61 67 73 3b 0a 20 20 69 66 28 20 28 66 6c 61 67  ags;.  if( (flag
efe0: 73 31 20 7c 20 66 6c 61 67 73 33 29 26 4d 45 4d  s1 | flags3)&MEM
eff0: 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 2f 2a 20  _Null ){.    /* 
f000: 4f 6e 65 20 6f 72 20 62 6f 74 68 20 6f 70 65 72  One or both oper
f010: 61 6e 64 73 20 61 72 65 20 4e 55 4c 4c 20 2a 2f  ands are NULL */
f020: 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 35  .    if( pOp->p5
f030: 20 26 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51   & SQLITE_NULLEQ
f040: 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 49 66 20   ){.      /* If 
f050: 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 20 69 73  SQLITE_NULLEQ is
f060: 20 73 65 74 20 28 77 68 69 63 68 20 77 69 6c 6c   set (which will
f070: 20 6f 6e 6c 79 20 68 61 70 70 65 6e 20 69 66 20   only happen if 
f080: 74 68 65 20 6f 70 65 72 61 74 6f 72 20 69 73 0a  the operator is.
f090: 20 20 20 20 20 20 2a 2a 20 4f 50 5f 45 71 20 6f        ** OP_Eq o
f0a0: 72 20 4f 50 5f 4e 65 29 20 74 68 65 6e 20 74 61  r OP_Ne) then ta
f0b0: 6b 65 20 74 68 65 20 6a 75 6d 70 20 6f 72 20 6e  ke the jump or n
f0c0: 6f 74 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20  ot depending on 
f0d0: 77 68 65 74 68 65 72 0a 20 20 20 20 20 20 2a 2a  whether.      **
f0e0: 20 6f 72 20 6e 6f 74 20 62 6f 74 68 20 6f 70 65   or not both ope
f0f0: 72 61 6e 64 73 20 61 72 65 20 6e 75 6c 6c 2e 0a  rands are null..
f100: 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 61        */.      a
f110: 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f  ssert( pOp->opco
f120: 64 65 3d 3d 4f 50 5f 45 71 20 7c 7c 20 70 4f 70  de==OP_Eq || pOp
f130: 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4e 65 20  ->opcode==OP_Ne 
f140: 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  );.      assert(
f150: 20 28 66 6c 61 67 73 31 20 26 20 4d 45 4d 5f 43   (flags1 & MEM_C
f160: 6c 65 61 72 65 64 29 3d 3d 30 20 29 3b 0a 20 20  leared)==0 );.  
f170: 20 20 20 20 61 73 73 65 72 74 28 20 28 70 4f 70      assert( (pOp
f180: 2d 3e 70 35 20 26 20 53 51 4c 49 54 45 5f 4a 55  ->p5 & SQLITE_JU
f190: 4d 50 49 46 4e 55 4c 4c 29 3d 3d 30 20 29 3b 0a  MPIFNULL)==0 );.
f1a0: 20 20 20 20 20 20 69 66 28 20 28 66 6c 61 67 73        if( (flags
f1b0: 31 26 66 6c 61 67 73 33 26 4d 45 4d 5f 4e 75 6c  1&flags3&MEM_Nul
f1c0: 6c 29 21 3d 30 0a 20 20 20 20 20 20 20 26 26 20  l)!=0.       && 
f1d0: 28 66 6c 61 67 73 33 26 4d 45 4d 5f 43 6c 65 61  (flags3&MEM_Clea
f1e0: 72 65 64 29 3d 3d 30 0a 20 20 20 20 20 20 29 7b  red)==0.      ){
f1f0: 0a 20 20 20 20 20 20 20 20 72 65 73 20 3d 20 30  .        res = 0
f200: 3b 20 20 2f 2a 20 4f 70 65 72 61 6e 64 73 20 61  ;  /* Operands a
f210: 72 65 20 65 71 75 61 6c 20 2a 2f 0a 20 20 20 20  re equal */.    
f220: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20    }else{.       
f230: 20 72 65 73 20 3d 20 31 3b 20 20 2f 2a 20 4f 70   res = 1;  /* Op
f240: 65 72 61 6e 64 73 20 61 72 65 20 6e 6f 74 20 65  erands are not e
f250: 71 75 61 6c 20 2a 2f 0a 20 20 20 20 20 20 7d 0a  qual */.      }.
f260: 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
f270: 20 2f 2a 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45   /* SQLITE_NULLE
f280: 51 20 69 73 20 63 6c 65 61 72 20 61 6e 64 20 61  Q is clear and a
f290: 74 20 6c 65 61 73 74 20 6f 6e 65 20 6f 70 65 72  t least one oper
f2a0: 61 6e 64 20 69 73 20 4e 55 4c 4c 2c 0a 20 20 20  and is NULL,.   
f2b0: 20 20 20 2a 2a 20 74 68 65 6e 20 74 68 65 20 72     ** then the r
f2c0: 65 73 75 6c 74 20 69 73 20 61 6c 77 61 79 73 20  esult is always 
f2d0: 4e 55 4c 4c 2e 0a 20 20 20 20 20 20 2a 2a 20 54  NULL..      ** T
f2e0: 68 65 20 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e  he jump is taken
f2f0: 20 69 66 20 74 68 65 20 53 51 4c 49 54 45 5f 4a   if the SQLITE_J
f300: 55 4d 50 49 46 4e 55 4c 4c 20 62 69 74 20 69 73  UMPIFNULL bit is
f310: 20 73 65 74 2e 0a 20 20 20 20 20 20 2a 2f 0a 20   set..      */. 
f320: 20 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 35       if( pOp->p5
f330: 20 26 20 53 51 4c 49 54 45 5f 53 54 4f 52 45 50   & SQLITE_STOREP
f340: 32 20 29 7b 0a 20 20 20 20 20 20 20 20 70 4f 75  2 ){.        pOu
f350: 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  t = &aMem[pOp->p
f360: 32 5d 3b 0a 20 20 20 20 20 20 20 20 69 43 6f 6d  2];.        iCom
f370: 70 61 72 65 20 3d 20 31 3b 20 20 20 20 2f 2a 20  pare = 1;    /* 
f380: 4f 70 65 72 61 6e 64 73 20 61 72 65 20 6e 6f 74  Operands are not
f390: 20 65 71 75 61 6c 20 2a 2f 0a 20 20 20 20 20 20   equal */.      
f3a0: 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e    memAboutToChan
f3b0: 67 65 28 70 2c 20 70 4f 75 74 29 3b 0a 20 20 20  ge(p, pOut);.   
f3c0: 20 20 20 20 20 4d 65 6d 53 65 74 54 79 70 65 46       MemSetTypeF
f3d0: 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 4e 75  lag(pOut, MEM_Nu
f3e0: 6c 6c 29 3b 0a 20 20 20 20 20 20 20 20 52 45 47  ll);.        REG
f3f0: 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d  ISTER_TRACE(pOp-
f400: 3e 70 32 2c 20 70 4f 75 74 29 3b 0a 20 20 20 20  >p2, pOut);.    
f410: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20    }else{.       
f420: 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e   VdbeBranchTaken
f430: 28 32 2c 33 29 3b 0a 20 20 20 20 20 20 20 20 69  (2,3);.        i
f440: 66 28 20 70 4f 70 2d 3e 70 35 20 26 20 53 51 4c  f( pOp->p5 & SQL
f450: 49 54 45 5f 4a 55 4d 50 49 46 4e 55 4c 4c 20 29  ITE_JUMPIFNULL )
f460: 7b 0a 20 20 20 20 20 20 20 20 20 20 67 6f 74 6f  {.          goto
f470: 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 20   jump_to_p2;.   
f480: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20       }.      }. 
f490: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
f4a0: 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 2f  }.  }else{.    /
f4b0: 2a 20 4e 65 69 74 68 65 72 20 6f 70 65 72 61 6e  * Neither operan
f4c0: 64 20 69 73 20 4e 55 4c 4c 2e 20 20 44 6f 20 61  d is NULL.  Do a
f4d0: 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 20 2a 2f 0a   comparison. */.
f4e0: 20 20 20 20 61 66 66 69 6e 69 74 79 20 3d 20 70      affinity = p
f4f0: 4f 70 2d 3e 70 35 20 26 20 53 51 4c 49 54 45 5f  Op->p5 & SQLITE_
f500: 41 46 46 5f 4d 41 53 4b 3b 0a 20 20 20 20 69 66  AFF_MASK;.    if
f510: 28 20 61 66 66 69 6e 69 74 79 3e 3d 53 51 4c 49  ( affinity>=SQLI
f520: 54 45 5f 41 46 46 5f 4e 55 4d 45 52 49 43 20 29  TE_AFF_NUMERIC )
f530: 7b 0a 20 20 20 20 20 20 69 66 28 20 28 66 6c 61  {.      if( (fla
f540: 67 73 31 20 7c 20 66 6c 61 67 73 33 29 26 4d 45  gs1 | flags3)&ME
f550: 4d 5f 53 74 72 20 29 7b 0a 20 20 20 20 20 20 20  M_Str ){.       
f560: 20 69 66 28 20 28 66 6c 61 67 73 31 20 26 20 28   if( (flags1 & (
f570: 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 52 65 61 6c  MEM_Int|MEM_Real
f580: 7c 4d 45 4d 5f 53 74 72 29 29 3d 3d 4d 45 4d 5f  |MEM_Str))==MEM_
f590: 53 74 72 20 29 7b 0a 20 20 20 20 20 20 20 20 20  Str ){.         
f5a0: 20 61 70 70 6c 79 4e 75 6d 65 72 69 63 41 66 66   applyNumericAff
f5b0: 69 6e 69 74 79 28 70 49 6e 31 2c 30 29 3b 0a 20  inity(pIn1,0);. 
f5c0: 20 20 20 20 20 20 20 20 20 74 65 73 74 63 61 73           testcas
f5d0: 65 28 20 66 6c 61 67 73 33 21 3d 70 49 6e 33 2d  e( flags3!=pIn3-
f5e0: 3e 66 6c 61 67 73 20 29 3b 20 2f 2a 20 50 6f 73  >flags ); /* Pos
f5f0: 73 69 62 6c 65 20 69 66 20 70 49 6e 31 3d 3d 70  sible if pIn1==p
f600: 49 6e 33 20 2a 2f 0a 20 20 20 20 20 20 20 20 20  In3 */.         
f610: 20 66 6c 61 67 73 33 20 3d 20 70 49 6e 33 2d 3e   flags3 = pIn3->
f620: 66 6c 61 67 73 3b 0a 20 20 20 20 20 20 20 20 7d  flags;.        }
f630: 0a 20 20 20 20 20 20 20 20 69 66 28 20 28 66 6c  .        if( (fl
f640: 61 67 73 33 20 26 20 28 4d 45 4d 5f 49 6e 74 7c  ags3 & (MEM_Int|
f650: 4d 45 4d 5f 52 65 61 6c 7c 4d 45 4d 5f 53 74 72  MEM_Real|MEM_Str
f660: 29 29 3d 3d 4d 45 4d 5f 53 74 72 20 29 7b 0a 20  ))==MEM_Str ){. 
f670: 20 20 20 20 20 20 20 20 20 61 70 70 6c 79 4e 75           applyNu
f680: 6d 65 72 69 63 41 66 66 69 6e 69 74 79 28 70 49  mericAffinity(pI
f690: 6e 33 2c 30 29 3b 0a 20 20 20 20 20 20 20 20 7d  n3,0);.        }
f6a0: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 2f  .      }.      /
f6b0: 2a 20 48 61 6e 64 6c 65 20 74 68 65 20 63 6f 6d  * Handle the com
f6c0: 6d 6f 6e 20 63 61 73 65 20 6f 66 20 69 6e 74 65  mon case of inte
f6d0: 67 65 72 20 63 6f 6d 70 61 72 69 73 6f 6e 20 68  ger comparison h
f6e0: 65 72 65 2c 20 61 73 20 61 6e 0a 20 20 20 20 20  ere, as an.     
f6f0: 20 2a 2a 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e   ** optimization
f700: 2c 20 74 6f 20 61 76 6f 69 64 20 61 20 63 61 6c  , to avoid a cal
f710: 6c 20 74 6f 20 73 71 6c 69 74 65 33 4d 65 6d 43  l to sqlite3MemC
f720: 6f 6d 70 61 72 65 28 29 20 2a 2f 0a 20 20 20 20  ompare() */.    
f730: 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61    if( (pIn1->fla
f740: 67 73 20 26 20 70 49 6e 33 2d 3e 66 6c 61 67 73  gs & pIn3->flags
f750: 20 26 20 4d 45 4d 5f 49 6e 74 29 21 3d 30 20 29   & MEM_Int)!=0 )
f760: 7b 0a 20 20 20 20 20 20 20 20 69 66 28 20 70 49  {.        if( pI
f770: 6e 33 2d 3e 75 2e 69 20 3e 20 70 49 6e 31 2d 3e  n3->u.i > pIn1->
f780: 75 2e 69 20 29 7b 20 72 65 73 20 3d 20 2b 31 3b  u.i ){ res = +1;
f790: 20 67 6f 74 6f 20 63 6f 6d 70 61 72 65 5f 6f 70   goto compare_op
f7a0: 3b 20 7d 0a 20 20 20 20 20 20 20 20 69 66 28 20  ; }.        if( 
f7b0: 70 49 6e 33 2d 3e 75 2e 69 20 3c 20 70 49 6e 31  pIn3->u.i < pIn1
f7c0: 2d 3e 75 2e 69 20 29 7b 20 72 65 73 20 3d 20 2d  ->u.i ){ res = -
f7d0: 31 3b 20 67 6f 74 6f 20 63 6f 6d 70 61 72 65 5f  1; goto compare_
f7e0: 6f 70 3b 20 7d 0a 20 20 20 20 20 20 20 20 72 65  op; }.        re
f7f0: 73 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 67  s = 0;.        g
f800: 6f 74 6f 20 63 6f 6d 70 61 72 65 5f 6f 70 3b 0a  oto compare_op;.
f810: 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 65 6c 73        }.    }els
f820: 65 20 69 66 28 20 61 66 66 69 6e 69 74 79 3d 3d  e if( affinity==
f830: 53 51 4c 49 54 45 5f 41 46 46 5f 54 45 58 54 20  SQLITE_AFF_TEXT 
f840: 29 7b 0a 20 20 20 20 20 20 69 66 28 20 28 66 6c  ){.      if( (fl
f850: 61 67 73 31 20 26 20 4d 45 4d 5f 53 74 72 29 3d  ags1 & MEM_Str)=
f860: 3d 30 20 26 26 20 28 66 6c 61 67 73 31 20 26 20  =0 && (flags1 & 
f870: 28 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 52 65 61  (MEM_Int|MEM_Rea
f880: 6c 29 29 21 3d 30 20 29 7b 0a 20 20 20 20 20 20  l))!=0 ){.      
f890: 20 20 74 65 73 74 63 61 73 65 28 20 70 49 6e 31    testcase( pIn1
f8a0: 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e  ->flags & MEM_In
f8b0: 74 20 29 3b 0a 20 20 20 20 20 20 20 20 74 65 73  t );.        tes
f8c0: 74 63 61 73 65 28 20 70 49 6e 31 2d 3e 66 6c 61  tcase( pIn1->fla
f8d0: 67 73 20 26 20 4d 45 4d 5f 52 65 61 6c 20 29 3b  gs & MEM_Real );
f8e0: 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
f8f0: 56 64 62 65 4d 65 6d 53 74 72 69 6e 67 69 66 79  VdbeMemStringify
f900: 28 70 49 6e 31 2c 20 65 6e 63 6f 64 69 6e 67 2c  (pIn1, encoding,
f910: 20 31 29 3b 0a 20 20 20 20 20 20 20 20 74 65 73   1);.        tes
f920: 74 63 61 73 65 28 20 28 66 6c 61 67 73 31 26 4d  tcase( (flags1&M
f930: 45 4d 5f 44 79 6e 29 20 21 3d 20 28 70 49 6e 31  EM_Dyn) != (pIn1
f940: 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 44 79 6e 29  ->flags&MEM_Dyn)
f950: 20 29 3b 0a 20 20 20 20 20 20 20 20 66 6c 61 67   );.        flag
f960: 73 31 20 3d 20 28 70 49 6e 31 2d 3e 66 6c 61 67  s1 = (pIn1->flag
f970: 73 20 26 20 7e 4d 45 4d 5f 54 79 70 65 4d 61 73  s & ~MEM_TypeMas
f980: 6b 29 20 7c 20 28 66 6c 61 67 73 31 20 26 20 4d  k) | (flags1 & M
f990: 45 4d 5f 54 79 70 65 4d 61 73 6b 29 3b 0a 20 20  EM_TypeMask);.  
f9a0: 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70 49        assert( pI
f9b0: 6e 31 21 3d 70 49 6e 33 20 29 3b 0a 20 20 20 20  n1!=pIn3 );.    
f9c0: 20 20 7d 0a 20 20 20 20 20 20 69 66 28 20 28 66    }.      if( (f
f9d0: 6c 61 67 73 33 20 26 20 4d 45 4d 5f 53 74 72 29  lags3 & MEM_Str)
f9e0: 3d 3d 30 20 26 26 20 28 66 6c 61 67 73 33 20 26  ==0 && (flags3 &
f9f0: 20 28 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 52 65   (MEM_Int|MEM_Re
fa00: 61 6c 29 29 21 3d 30 20 29 7b 0a 20 20 20 20 20  al))!=0 ){.     
fa10: 20 20 20 74 65 73 74 63 61 73 65 28 20 70 49 6e     testcase( pIn
fa20: 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49  3->flags & MEM_I
fa30: 6e 74 20 29 3b 0a 20 20 20 20 20 20 20 20 74 65  nt );.        te
fa40: 73 74 63 61 73 65 28 20 70 49 6e 33 2d 3e 66 6c  stcase( pIn3->fl
fa50: 61 67 73 20 26 20 4d 45 4d 5f 52 65 61 6c 20 29  ags & MEM_Real )
fa60: 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  ;.        sqlite
fa70: 33 56 64 62 65 4d 65 6d 53 74 72 69 6e 67 69 66  3VdbeMemStringif
fa80: 79 28 70 49 6e 33 2c 20 65 6e 63 6f 64 69 6e 67  y(pIn3, encoding
fa90: 2c 20 31 29 3b 0a 20 20 20 20 20 20 20 20 74 65  , 1);.        te
faa0: 73 74 63 61 73 65 28 20 28 66 6c 61 67 73 33 26  stcase( (flags3&
fab0: 4d 45 4d 5f 44 79 6e 29 20 21 3d 20 28 70 49 6e  MEM_Dyn) != (pIn
fac0: 33 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 44 79 6e  3->flags&MEM_Dyn
fad0: 29 20 29 3b 0a 20 20 20 20 20 20 20 20 66 6c 61  ) );.        fla
fae0: 67 73 33 20 3d 20 28 70 49 6e 33 2d 3e 66 6c 61  gs3 = (pIn3->fla
faf0: 67 73 20 26 20 7e 4d 45 4d 5f 54 79 70 65 4d 61  gs & ~MEM_TypeMa
fb00: 73 6b 29 20 7c 20 28 66 6c 61 67 73 33 20 26 20  sk) | (flags3 & 
fb10: 4d 45 4d 5f 54 79 70 65 4d 61 73 6b 29 3b 0a 20  MEM_TypeMask);. 
fb20: 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20       }.    }.   
fb30: 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34   assert( pOp->p4
fb40: 74 79 70 65 3d 3d 50 34 5f 43 4f 4c 4c 53 45 51  type==P4_COLLSEQ
fb50: 20 7c 7c 20 70 4f 70 2d 3e 70 34 2e 70 43 6f 6c   || pOp->p4.pCol
fb60: 6c 3d 3d 30 20 29 3b 0a 20 20 20 20 72 65 73 20  l==0 );.    res 
fb70: 3d 20 73 71 6c 69 74 65 33 4d 65 6d 43 6f 6d 70  = sqlite3MemComp
fb80: 61 72 65 28 70 49 6e 33 2c 20 70 49 6e 31 2c 20  are(pIn3, pIn1, 
fb90: 70 4f 70 2d 3e 70 34 2e 70 43 6f 6c 6c 29 3b 0a  pOp->p4.pColl);.
fba0: 20 20 7d 0a 63 6f 6d 70 61 72 65 5f 6f 70 3a 0a    }.compare_op:.
fbb0: 20 20 2f 2a 20 41 74 20 74 68 69 73 20 70 6f 69    /* At this poi
fbc0: 6e 74 2c 20 72 65 73 20 69 73 20 6e 65 67 61 74  nt, res is negat
fbd0: 69 76 65 2c 20 7a 65 72 6f 2c 20 6f 72 20 70 6f  ive, zero, or po
fbe0: 73 69 74 69 76 65 20 69 66 20 72 65 67 5b 50 31  sitive if reg[P1
fbf0: 5d 20 69 73 0a 20 20 2a 2a 20 6c 65 73 73 20 74  ] is.  ** less t
fc00: 68 61 6e 2c 20 65 71 75 61 6c 20 74 6f 2c 20 6f  han, equal to, o
fc10: 72 20 67 72 65 61 74 65 72 20 74 68 61 6e 20 72  r greater than r
fc20: 65 67 5b 50 33 5d 2c 20 72 65 73 70 65 63 74 69  eg[P3], respecti
fc30: 76 65 6c 79 2e 20 20 43 6f 6d 70 75 74 65 0a 20  vely.  Compute. 
fc40: 20 2a 2a 20 74 68 65 20 61 6e 73 77 65 72 20 74   ** the answer t
fc50: 6f 20 74 68 69 73 20 6f 70 65 72 61 74 6f 72 20  o this operator 
fc60: 69 6e 20 72 65 73 32 2c 20 64 65 70 65 6e 64 69  in res2, dependi
fc70: 6e 67 20 6f 6e 20 77 68 61 74 20 74 68 65 20 63  ng on what the c
fc80: 6f 6d 70 61 72 69 73 6f 6e 0a 20 20 2a 2a 20 6f  omparison.  ** o
fc90: 70 65 72 61 74 6f 72 20 61 63 74 75 61 6c 6c 79  perator actually
fca0: 20 69 73 2e 20 20 54 68 65 20 6e 65 78 74 20 62   is.  The next b
fcb0: 6c 6f 63 6b 20 6f 66 20 63 6f 64 65 20 64 65 70  lock of code dep
fcc0: 65 6e 64 73 20 6f 6e 20 74 68 65 20 66 61 63 74  ends on the fact
fcd0: 0a 20 20 2a 2a 20 74 68 61 74 20 74 68 65 20 36  .  ** that the 6
fce0: 20 63 6f 6d 70 61 72 69 73 6f 6e 20 6f 70 65 72   comparison oper
fcf0: 61 74 6f 72 73 20 61 72 65 20 63 6f 6e 73 65 63  ators are consec
fd00: 75 74 69 76 65 20 69 6e 74 65 67 65 72 73 20 69  utive integers i
fd10: 6e 20 74 68 69 73 0a 20 20 2a 2a 20 6f 72 64 65  n this.  ** orde
fd20: 72 3a 20 20 4e 45 2c 20 45 51 2c 20 47 54 2c 20  r:  NE, EQ, GT, 
fd30: 4c 45 2c 20 4c 54 2c 20 47 45 20 2a 2f 0a 20 20  LE, LT, GE */.  
fd40: 61 73 73 65 72 74 28 20 4f 50 5f 45 71 3d 3d 4f  assert( OP_Eq==O
fd50: 50 5f 4e 65 2b 31 20 29 3b 20 61 73 73 65 72 74  P_Ne+1 ); assert
fd60: 28 20 4f 50 5f 47 74 3d 3d 4f 50 5f 4e 65 2b 32  ( OP_Gt==OP_Ne+2
fd70: 20 29 3b 20 61 73 73 65 72 74 28 20 4f 50 5f 4c   ); assert( OP_L
fd80: 65 3d 3d 4f 50 5f 4e 65 2b 33 20 29 3b 0a 20 20  e==OP_Ne+3 );.  
fd90: 61 73 73 65 72 74 28 20 4f 50 5f 4c 74 3d 3d 4f  assert( OP_Lt==O
fda0: 50 5f 4e 65 2b 34 20 29 3b 20 61 73 73 65 72 74  P_Ne+4 ); assert
fdb0: 28 20 4f 50 5f 47 65 3d 3d 4f 50 5f 4e 65 2b 35  ( OP_Ge==OP_Ne+5
fdc0: 20 29 3b 0a 20 20 69 66 28 20 72 65 73 3c 30 20   );.  if( res<0 
fdd0: 29 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ){              
fde0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6e 65 2c            /* ne,
fdf0: 20 65 71 2c 20 67 74 2c 20 6c 65 2c 20 6c 74 2c   eq, gt, le, lt,
fe00: 20 67 65 20 2a 2f 0a 20 20 20 20 73 74 61 74 69   ge */.    stati
fe10: 63 20 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64  c const unsigned
fe20: 20 63 68 61 72 20 61 4c 54 62 5b 5d 20 3d 20 7b   char aLTb[] = {
fe30: 20 31 2c 20 20 30 2c 20 20 30 2c 20 20 31 2c 20   1,  0,  0,  1, 
fe40: 20 31 2c 20 20 30 20 7d 3b 0a 20 20 20 20 72 65   1,  0 };.    re
fe50: 73 32 20 3d 20 61 4c 54 62 5b 70 4f 70 2d 3e 6f  s2 = aLTb[pOp->o
fe60: 70 63 6f 64 65 20 2d 20 4f 50 5f 4e 65 5d 3b 0a  pcode - OP_Ne];.
fe70: 20 20 7d 65 6c 73 65 20 69 66 28 20 72 65 73 3d    }else if( res=
fe80: 3d 30 20 29 7b 0a 20 20 20 20 73 74 61 74 69 63  =0 ){.    static
fe90: 20 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20   const unsigned 
fea0: 63 68 61 72 20 61 45 51 62 5b 5d 20 3d 20 7b 20  char aEQb[] = { 
feb0: 30 2c 20 20 31 2c 20 20 30 2c 20 20 31 2c 20 20  0,  1,  0,  1,  
fec0: 30 2c 20 20 31 20 7d 3b 0a 20 20 20 20 72 65 73  0,  1 };.    res
fed0: 32 20 3d 20 61 45 51 62 5b 70 4f 70 2d 3e 6f 70  2 = aEQb[pOp->op
fee0: 63 6f 64 65 20 2d 20 4f 50 5f 4e 65 5d 3b 0a 20  code - OP_Ne];. 
fef0: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 73 74 61 74   }else{.    stat
ff00: 69 63 20 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65  ic const unsigne
ff10: 64 20 63 68 61 72 20 61 47 54 62 5b 5d 20 3d 20  d char aGTb[] = 
ff20: 7b 20 31 2c 20 20 30 2c 20 20 31 2c 20 20 30 2c  { 1,  0,  1,  0,
ff30: 20 20 30 2c 20 20 31 20 7d 3b 0a 20 20 20 20 72    0,  1 };.    r
ff40: 65 73 32 20 3d 20 61 47 54 62 5b 70 4f 70 2d 3e  es2 = aGTb[pOp->
ff50: 6f 70 63 6f 64 65 20 2d 20 4f 50 5f 4e 65 5d 3b  opcode - OP_Ne];
ff60: 0a 20 20 7d 0a 0a 20 20 2f 2a 20 55 6e 64 6f 20  .  }..  /* Undo 
ff70: 61 6e 79 20 63 68 61 6e 67 65 73 20 6d 61 64 65  any changes made
ff80: 20 62 79 20 61 70 70 6c 79 41 66 66 69 6e 69 74   by applyAffinit
ff90: 79 28 29 20 74 6f 20 74 68 65 20 69 6e 70 75 74  y() to the input
ffa0: 20 72 65 67 69 73 74 65 72 73 2e 20 2a 2f 0a 20   registers. */. 
ffb0: 20 61 73 73 65 72 74 28 20 28 70 49 6e 31 2d 3e   assert( (pIn1->
ffc0: 66 6c 61 67 73 20 26 20 4d 45 4d 5f 44 79 6e 29  flags & MEM_Dyn)
ffd0: 20 3d 3d 20 28 66 6c 61 67 73 31 20 26 20 4d 45   == (flags1 & ME
ffe0: 4d 5f 44 79 6e 29 20 29 3b 0a 20 20 70 49 6e 31  M_Dyn) );.  pIn1
fff0: 2d 3e 66 6c 61 67 73 20 3d 20 66 6c 61 67 73 31  ->flags = flags1
10000 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70 49 6e  ;.  assert( (pIn
10010 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 44  3->flags & MEM_D
10020 79 6e 29 20 3d 3d 20 28 66 6c 61 67 73 33 20 26  yn) == (flags3 &
10030 20 4d 45 4d 5f 44 79 6e 29 20 29 3b 0a 20 20 70   MEM_Dyn) );.  p
10040 49 6e 33 2d 3e 66 6c 61 67 73 20 3d 20 66 6c 61  In3->flags = fla
10050 67 73 33 3b 0a 0a 20 20 69 66 28 20 70 4f 70 2d  gs3;..  if( pOp-
10060 3e 70 35 20 26 20 53 51 4c 49 54 45 5f 53 54 4f  >p5 & SQLITE_STO
10070 52 45 50 32 20 29 7b 0a 20 20 20 20 70 4f 75 74  REP2 ){.    pOut
10080 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32   = &aMem[pOp->p2
10090 5d 3b 0a 20 20 20 20 69 43 6f 6d 70 61 72 65 20  ];.    iCompare 
100a0 3d 20 72 65 73 3b 0a 20 20 20 20 69 66 28 20 28  = res;.    if( (
100b0 70 4f 70 2d 3e 70 35 20 26 20 53 51 4c 49 54 45  pOp->p5 & SQLITE
100c0 5f 4b 45 45 50 4e 55 4c 4c 29 21 3d 30 20 29 7b  _KEEPNULL)!=0 ){
100d0 0a 20 20 20 20 20 20 2f 2a 20 54 68 65 20 4b 45  .      /* The KE
100e0 45 50 4e 55 4c 4c 20 66 6c 61 67 20 70 72 65 76  EPNULL flag prev
100f0 65 6e 74 73 20 4f 50 5f 45 71 20 66 72 6f 6d 20  ents OP_Eq from 
10100 6f 76 65 72 77 72 69 74 69 6e 67 20 61 20 4e 55  overwriting a NU
10110 4c 4c 20 77 69 74 68 20 31 0a 20 20 20 20 20 20  LL with 1.      
10120 2a 2a 20 61 6e 64 20 70 72 65 76 65 6e 74 73 20  ** and prevents 
10130 4f 50 5f 4e 65 20 66 72 6f 6d 20 6f 76 65 72 77  OP_Ne from overw
10140 72 69 74 69 6e 67 20 4e 55 4c 4c 20 77 69 74 68  riting NULL with
10150 20 30 2e 20 20 54 68 69 73 20 66 6c 61 67 0a 20   0.  This flag. 
10160 20 20 20 20 20 2a 2a 20 69 73 20 6f 6e 6c 79 20       ** is only 
10170 75 73 65 64 20 69 6e 20 63 6f 6e 74 65 78 74 73  used in contexts
10180 20 77 68 65 72 65 20 65 69 74 68 65 72 3a 0a 20   where either:. 
10190 20 20 20 20 20 2a 2a 20 20 20 28 31 29 20 6f 70       **   (1) op
101a0 3d 3d 4f 50 5f 45 71 20 26 26 20 28 72 5b 50 32  ==OP_Eq && (r[P2
101b0 5d 3d 3d 4e 55 4c 4c 20 7c 7c 20 72 5b 50 32 5d  ]==NULL || r[P2]
101c0 3d 3d 30 29 0a 20 20 20 20 20 20 2a 2a 20 20 20  ==0).      **   
101d0 28 32 29 20 6f 70 3d 3d 4f 50 5f 4e 65 20 26 26  (2) op==OP_Ne &&
101e0 20 28 72 5b 50 32 5d 3d 3d 4e 55 4c 4c 20 7c 7c   (r[P2]==NULL ||
101f0 20 72 5b 50 32 5d 3d 3d 31 29 0a 20 20 20 20 20   r[P2]==1).     
10200 20 2a 2a 20 54 68 65 72 65 66 6f 72 65 20 69 74   ** Therefore it
10210 20 69 73 20 6e 6f 74 20 6e 65 63 65 73 73 61 72   is not necessar
10220 79 20 74 6f 20 63 68 65 63 6b 20 74 68 65 20 63  y to check the c
10230 6f 6e 74 65 6e 74 20 6f 66 20 72 5b 50 32 5d 20  ontent of r[P2] 
10240 66 6f 72 0a 20 20 20 20 20 20 2a 2a 20 4e 55 4c  for.      ** NUL
10250 4c 2e 20 2a 2f 0a 20 20 20 20 20 20 61 73 73 65  L. */.      asse
10260 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d  rt( pOp->opcode=
10270 3d 4f 50 5f 4e 65 20 7c 7c 20 70 4f 70 2d 3e 6f  =OP_Ne || pOp->o
10280 70 63 6f 64 65 3d 3d 4f 50 5f 45 71 20 29 3b 0a  pcode==OP_Eq );.
10290 20 20 20 20 20 20 61 73 73 65 72 74 28 20 72 65        assert( re
102a0 73 32 3d 3d 30 20 7c 7c 20 72 65 73 32 3d 3d 31  s2==0 || res2==1
102b0 20 29 3b 0a 20 20 20 20 20 20 74 65 73 74 63 61   );.      testca
102c0 73 65 28 20 72 65 73 32 3d 3d 30 20 26 26 20 70  se( res2==0 && p
102d0 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 45  Op->opcode==OP_E
102e0 71 20 29 3b 0a 20 20 20 20 20 20 74 65 73 74 63  q );.      testc
102f0 61 73 65 28 20 72 65 73 32 3d 3d 31 20 26 26 20  ase( res2==1 && 
10300 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  pOp->opcode==OP_
10310 45 71 20 29 3b 0a 20 20 20 20 20 20 74 65 73 74  Eq );.      test
10320 63 61 73 65 28 20 72 65 73 32 3d 3d 30 20 26 26  case( res2==0 &&
10330 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50   pOp->opcode==OP
10340 5f 4e 65 20 29 3b 0a 20 20 20 20 20 20 74 65 73  _Ne );.      tes
10350 74 63 61 73 65 28 20 72 65 73 32 3d 3d 31 20 26  tcase( res2==1 &
10360 26 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f  & pOp->opcode==O
10370 50 5f 4e 65 20 29 3b 0a 20 20 20 20 20 20 69 66  P_Ne );.      if
10380 28 20 28 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d  ( (pOp->opcode==
10390 4f 50 5f 45 71 29 3d 3d 72 65 73 32 20 29 20 62  OP_Eq)==res2 ) b
103a0 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 20 20 20 20  reak;.    }.    
103b0 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65  memAboutToChange
103c0 28 70 2c 20 70 4f 75 74 29 3b 0a 20 20 20 20 4d  (p, pOut);.    M
103d0 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70 4f  emSetTypeFlag(pO
103e0 75 74 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20  ut, MEM_Int);.  
103f0 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 72 65    pOut->u.i = re
10400 73 32 3b 0a 20 20 20 20 52 45 47 49 53 54 45 52  s2;.    REGISTER
10410 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 32 2c 20  _TRACE(pOp->p2, 
10420 70 4f 75 74 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a  pOut);.  }else{.
10430 20 20 20 20 56 64 62 65 42 72 61 6e 63 68 54 61      VdbeBranchTa
10440 6b 65 6e 28 72 65 73 21 3d 30 2c 20 28 70 4f 70  ken(res!=0, (pOp
10450 2d 3e 70 35 20 26 20 53 51 4c 49 54 45 5f 4e 55  ->p5 & SQLITE_NU
10460 4c 4c 45 51 29 3f 32 3a 33 29 3b 0a 20 20 20 20  LLEQ)?2:3);.    
10470 69 66 28 20 72 65 73 32 20 29 7b 0a 20 20 20 20  if( res2 ){.    
10480 20 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70    goto jump_to_p
10490 32 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62  2;.    }.  }.  b
104a0 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
104b0 64 65 3a 20 45 6c 73 65 4e 6f 74 45 71 20 2a 20  de: ElseNotEq * 
104c0 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54  P2 * * *.**.** T
104d0 68 69 73 20 6f 70 63 6f 64 65 20 6d 75 73 74 20  his opcode must 
104e0 69 6d 6d 65 64 69 61 74 65 6c 79 20 66 6f 6c 6c  immediately foll
104f0 6f 77 20 61 6e 20 4f 50 5f 4c 74 20 6f 72 20 4f  ow an OP_Lt or O
10500 50 5f 47 74 20 63 6f 6d 70 61 72 69 73 6f 6e 20  P_Gt comparison 
10510 6f 70 65 72 61 74 6f 72 2e 0a 2a 2a 20 49 66 20  operator..** If 
10520 72 65 73 75 6c 74 20 6f 66 20 61 6e 20 4f 50 5f  result of an OP_
10530 45 71 20 63 6f 6d 70 61 72 69 73 6f 6e 20 6f 6e  Eq comparison on
10540 20 74 68 65 20 73 61 6d 65 20 74 77 6f 20 6f 70   the same two op
10550 65 72 61 6e 64 73 0a 2a 2a 20 77 6f 75 6c 64 20  erands.** would 
10560 68 61 76 65 20 62 65 20 4e 55 4c 4c 20 6f 72 20  have be NULL or 
10570 66 61 6c 73 65 20 28 30 29 2c 20 74 68 65 6e 20  false (0), then 
10580 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20 50 32 2e  then jump to P2.
10590 20 0a 2a 2a 20 49 66 20 74 68 65 20 72 65 73 75   .** If the resu
105a0 6c 74 20 6f 66 20 61 6e 20 4f 50 5f 45 71 20 63  lt of an OP_Eq c
105b0 6f 6d 70 61 72 69 73 6f 6e 20 6f 6e 20 74 68 65  omparison on the
105c0 20 74 77 6f 20 70 72 65 76 69 6f 75 73 20 6f 70   two previous op
105d0 65 72 61 6e 64 73 0a 2a 2a 20 77 6f 75 6c 64 20  erands.** would 
105e0 68 61 76 65 20 62 65 65 6e 20 74 72 75 65 20 28  have been true (
105f0 31 29 2c 20 74 68 65 6e 20 66 61 6c 6c 20 74 68  1), then fall th
10600 72 6f 75 67 68 2e 0a 2a 2f 0a 63 61 73 65 20 4f  rough..*/.case O
10610 50 5f 45 6c 73 65 4e 6f 74 45 71 3a 20 7b 20 20  P_ElseNotEq: {  
10620 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20       /* same as 
10630 54 4b 5f 45 53 43 41 50 45 2c 20 6a 75 6d 70 20  TK_ESCAPE, jump 
10640 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  */.  assert( pOp
10650 3e 61 4f 70 20 29 3b 0a 20 20 61 73 73 65 72 74  >aOp );.  assert
10660 28 20 70 4f 70 5b 2d 31 5d 2e 6f 70 63 6f 64 65  ( pOp[-1].opcode
10670 3d 3d 4f 50 5f 4c 74 20 7c 7c 20 70 4f 70 5b 2d  ==OP_Lt || pOp[-
10680 31 5d 2e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 47 74  1].opcode==OP_Gt
10690 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   );.  assert( pO
106a0 70 5b 2d 31 5d 2e 70 35 20 26 20 53 51 4c 49 54  p[-1].p5 & SQLIT
106b0 45 5f 53 54 4f 52 45 50 32 20 29 3b 0a 20 20 56  E_STOREP2 );.  V
106c0 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 69  dbeBranchTaken(i
106d0 43 6f 6d 70 61 72 65 21 3d 30 2c 20 32 29 3b 0a  Compare!=0, 2);.
106e0 20 20 69 66 28 20 69 43 6f 6d 70 61 72 65 21 3d    if( iCompare!=
106f0 30 20 29 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f  0 ) goto jump_to
10700 5f 70 32 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  _p2;.  break;.}.
10710 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 50 65 72  ../* Opcode: Per
10720 6d 75 74 61 74 69 6f 6e 20 2a 20 2a 20 2a 20 50  mutation * * * P
10730 34 20 2a 0a 2a 2a 0a 2a 2a 20 53 65 74 20 74 68  4 *.**.** Set th
10740 65 20 70 65 72 6d 75 74 61 74 69 6f 6e 20 75 73  e permutation us
10750 65 64 20 62 79 20 74 68 65 20 4f 50 5f 43 6f 6d  ed by the OP_Com
10760 70 61 72 65 20 6f 70 65 72 61 74 6f 72 20 69 6e  pare operator in
10770 20 74 68 65 20 6e 65 78 74 0a 2a 2a 20 69 6e 73   the next.** ins
10780 74 72 75 63 74 69 6f 6e 2e 20 20 54 68 65 20 70  truction.  The p
10790 65 72 6d 75 74 61 74 69 6f 6e 20 69 73 20 73 74  ermutation is st
107a0 6f 72 65 64 20 69 6e 20 74 68 65 20 50 34 20 6f  ored in the P4 o
107b0 70 65 72 61 6e 64 2e 0a 2a 2a 0a 2a 2a 20 54 68  perand..**.** Th
107c0 65 20 70 65 72 6d 75 74 61 74 69 6f 6e 20 69 73  e permutation is
107d0 20 6f 6e 6c 79 20 76 61 6c 69 64 20 75 6e 74 69   only valid unti
107e0 6c 20 74 68 65 20 6e 65 78 74 20 4f 50 5f 43 6f  l the next OP_Co
107f0 6d 70 61 72 65 20 74 68 61 74 20 68 61 73 0a 2a  mpare that has.*
10800 2a 20 74 68 65 20 4f 50 46 4c 41 47 5f 50 45 52  * the OPFLAG_PER
10810 4d 55 54 45 20 62 69 74 20 73 65 74 20 69 6e 20  MUTE bit set in 
10820 50 35 2e 20 54 79 70 69 63 61 6c 6c 79 20 74 68  P5. Typically th
10830 65 20 4f 50 5f 50 65 72 6d 75 74 61 74 69 6f 6e  e OP_Permutation
10840 20 73 68 6f 75 6c 64 20 0a 2a 2a 20 6f 63 63 75   should .** occu
10850 72 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 70 72  r immediately pr
10860 69 6f 72 20 74 6f 20 74 68 65 20 4f 50 5f 43 6f  ior to the OP_Co
10870 6d 70 61 72 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  mpare..**.** The
10880 20 66 69 72 73 74 20 69 6e 74 65 67 65 72 20 69   first integer i
10890 6e 20 74 68 65 20 50 34 20 69 6e 74 65 67 65 72  n the P4 integer
108a0 20 61 72 72 61 79 20 69 73 20 74 68 65 20 6c 65   array is the le
108b0 6e 67 74 68 20 6f 66 20 74 68 65 20 61 72 72 61  ngth of the arra
108c0 79 0a 2a 2a 20 61 6e 64 20 64 6f 65 73 20 6e 6f  y.** and does no
108d0 74 20 62 65 63 6f 6d 65 20 70 61 72 74 20 6f 66  t become part of
108e0 20 74 68 65 20 70 65 72 6d 75 74 61 74 69 6f 6e   the permutation
108f0 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 50 65 72  ..*/.case OP_Per
10900 6d 75 74 61 74 69 6f 6e 3a 20 7b 0a 20 20 61 73  mutation: {.  as
10910 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70  sert( pOp->p4typ
10920 65 3d 3d 50 34 5f 49 4e 54 41 52 52 41 59 20 29  e==P4_INTARRAY )
10930 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
10940 3e 70 34 2e 61 69 20 29 3b 0a 20 20 61 73 73 65  >p4.ai );.  asse
10950 72 74 28 20 70 4f 70 5b 31 5d 2e 6f 70 63 6f 64  rt( pOp[1].opcod
10960 65 3d 3d 4f 50 5f 43 6f 6d 70 61 72 65 20 29 3b  e==OP_Compare );
10970 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 5b 31  .  assert( pOp[1
10980 5d 2e 70 35 20 26 20 4f 50 46 4c 41 47 5f 50 45  ].p5 & OPFLAG_PE
10990 52 4d 55 54 45 20 29 3b 0a 20 20 62 72 65 61 6b  RMUTE );.  break
109a0 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
109b0 43 6f 6d 70 61 72 65 20 50 31 20 50 32 20 50 33  Compare P1 P2 P3
109c0 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73   P4 P5.** Synops
109d0 69 73 3a 20 72 5b 50 31 40 50 33 5d 20 3c 2d 3e  is: r[P1@P3] <->
109e0 20 72 5b 50 32 40 50 33 5d 0a 2a 2a 0a 2a 2a 20   r[P2@P3].**.** 
109f0 43 6f 6d 70 61 72 65 20 74 77 6f 20 76 65 63 74  Compare two vect
10a00 6f 72 73 20 6f 66 20 72 65 67 69 73 74 65 72 73  ors of registers
10a10 20 69 6e 20 72 65 67 28 50 31 29 2e 2e 72 65 67   in reg(P1)..reg
10a20 28 50 31 2b 50 33 2d 31 29 20 28 63 61 6c 6c 20  (P1+P3-1) (call 
10a30 74 68 69 73 0a 2a 2a 20 76 65 63 74 6f 72 20 22  this.** vector "
10a40 41 22 29 20 61 6e 64 20 69 6e 20 72 65 67 28 50  A") and in reg(P
10a50 32 29 2e 2e 72 65 67 28 50 32 2b 50 33 2d 31 29  2)..reg(P2+P3-1)
10a60 20 28 22 42 22 29 2e 20 20 53 61 76 65 20 74 68   ("B").  Save th
10a70 65 20 72 65 73 75 6c 74 20 6f 66 0a 2a 2a 20 74  e result of.** t
10a80 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e 20 66 6f  he comparison fo
10a90 72 20 75 73 65 20 62 79 20 74 68 65 20 6e 65 78  r use by the nex
10aa0 74 20 4f 50 5f 4a 75 6d 70 20 69 6e 73 74 72 75  t OP_Jump instru
10ab0 63 74 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 20  ct..**.** If P5 
10ac0 68 61 73 20 74 68 65 20 4f 50 46 4c 41 47 5f 50  has the OPFLAG_P
10ad0 45 52 4d 55 54 45 20 62 69 74 20 73 65 74 2c 20  ERMUTE bit set, 
10ae0 74 68 65 6e 20 74 68 65 20 6f 72 64 65 72 20 6f  then the order o
10af0 66 20 63 6f 6d 70 61 72 69 73 6f 6e 20 69 73 0a  f comparison is.
10b00 2a 2a 20 64 65 74 65 72 6d 69 6e 65 64 20 62 79  ** determined by
10b10 20 74 68 65 20 6d 6f 73 74 20 72 65 63 65 6e 74   the most recent
10b20 20 4f 50 5f 50 65 72 6d 75 74 61 74 69 6f 6e 20   OP_Permutation 
10b30 6f 70 65 72 61 74 6f 72 2e 20 20 49 66 20 74 68  operator.  If th
10b40 65 0a 2a 2a 20 4f 50 46 4c 41 47 5f 50 45 52 4d  e.** OPFLAG_PERM
10b50 55 54 45 20 62 69 74 20 69 73 20 63 6c 65 61 72  UTE bit is clear
10b60 2c 20 74 68 65 6e 20 72 65 67 69 73 74 65 72 20  , then register 
10b70 61 72 65 20 63 6f 6d 70 61 72 65 64 20 69 6e 20  are compared in 
10b80 73 65 71 75 65 6e 74 69 61 6c 0a 2a 2a 20 6f 72  sequential.** or
10b90 64 65 72 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73  der..**.** P4 is
10ba0 20 61 20 4b 65 79 49 6e 66 6f 20 73 74 72 75 63   a KeyInfo struc
10bb0 74 75 72 65 20 74 68 61 74 20 64 65 66 69 6e 65  ture that define
10bc0 73 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75  s collating sequ
10bd0 65 6e 63 65 73 20 61 6e 64 20 73 6f 72 74 0a 2a  ences and sort.*
10be0 2a 20 6f 72 64 65 72 73 20 66 6f 72 20 74 68 65  * orders for the
10bf0 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 20 20 54 68   comparison.  Th
10c00 65 20 70 65 72 6d 75 74 61 74 69 6f 6e 20 61 70  e permutation ap
10c10 70 6c 69 65 73 20 74 6f 20 72 65 67 69 73 74 65  plies to registe
10c20 72 73 0a 2a 2a 20 6f 6e 6c 79 2e 20 20 54 68 65  rs.** only.  The
10c30 20 4b 65 79 49 6e 66 6f 20 65 6c 65 6d 65 6e 74   KeyInfo element
10c40 73 20 61 72 65 20 75 73 65 64 20 73 65 71 75 65  s are used seque
10c50 6e 74 69 61 6c 6c 79 2e 0a 2a 2a 0a 2a 2a 20 54  ntially..**.** T
10c60 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e 20 69 73  he comparison is
10c70 20 61 20 73 6f 72 74 20 63 6f 6d 70 61 72 69 73   a sort comparis
10c80 6f 6e 2c 20 73 6f 20 4e 55 4c 4c 73 20 63 6f 6d  on, so NULLs com
10c90 70 61 72 65 20 65 71 75 61 6c 2c 0a 2a 2a 20 4e  pare equal,.** N
10ca0 55 4c 4c 73 20 61 72 65 20 6c 65 73 73 20 74 68  ULLs are less th
10cb0 61 6e 20 6e 75 6d 62 65 72 73 2c 20 6e 75 6d 62  an numbers, numb
10cc0 65 72 73 20 61 72 65 20 6c 65 73 73 20 74 68 61  ers are less tha
10cd0 6e 20 73 74 72 69 6e 67 73 2c 0a 2a 2a 20 61 6e  n strings,.** an
10ce0 64 20 73 74 72 69 6e 67 73 20 61 72 65 20 6c 65  d strings are le
10cf0 73 73 20 74 68 61 6e 20 62 6c 6f 62 73 2e 0a 2a  ss than blobs..*
10d00 2f 0a 63 61 73 65 20 4f 50 5f 43 6f 6d 70 61 72  /.case OP_Compar
10d10 65 3a 20 7b 0a 20 20 69 6e 74 20 6e 3b 0a 20 20  e: {.  int n;.  
10d20 69 6e 74 20 69 3b 0a 20 20 69 6e 74 20 70 31 3b  int i;.  int p1;
10d30 0a 20 20 69 6e 74 20 70 32 3b 0a 20 20 63 6f 6e  .  int p2;.  con
10d40 73 74 20 4b 65 79 49 6e 66 6f 20 2a 70 4b 65 79  st KeyInfo *pKey
10d50 49 6e 66 6f 3b 0a 20 20 69 6e 74 20 69 64 78 3b  Info;.  int idx;
10d60 0a 20 20 43 6f 6c 6c 53 65 71 20 2a 70 43 6f 6c  .  CollSeq *pCol
10d70 6c 3b 20 20 20 20 2f 2a 20 43 6f 6c 6c 61 74 69  l;    /* Collati
10d80 6e 67 20 73 65 71 75 65 6e 63 65 20 74 6f 20 75  ng sequence to u
10d90 73 65 20 6f 6e 20 74 68 69 73 20 74 65 72 6d 20  se on this term 
10da0 2a 2f 0a 20 20 69 6e 74 20 62 52 65 76 3b 20 20  */.  int bRev;  
10db0 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20          /* True 
10dc0 66 6f 72 20 44 45 53 43 45 4e 44 49 4e 47 20 73  for DESCENDING s
10dd0 6f 72 74 20 6f 72 64 65 72 20 2a 2f 0a 20 20 69  ort order */.  i
10de0 6e 74 20 2a 61 50 65 72 6d 75 74 65 3b 20 20 20  nt *aPermute;   
10df0 20 20 2f 2a 20 54 68 65 20 70 65 72 6d 75 74 61    /* The permuta
10e00 74 69 6f 6e 20 2a 2f 0a 0a 20 20 69 66 28 20 28  tion */..  if( (
10e10 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47  pOp->p5 & OPFLAG
10e20 5f 50 45 52 4d 55 54 45 29 3d 3d 30 20 29 7b 0a  _PERMUTE)==0 ){.
10e30 20 20 20 20 61 50 65 72 6d 75 74 65 20 3d 20 30      aPermute = 0
10e40 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61  ;.  }else{.    a
10e50 73 73 65 72 74 28 20 70 4f 70 3e 61 4f 70 20 29  ssert( pOp>aOp )
10e60 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4f  ;.    assert( pO
10e70 70 5b 2d 31 5d 2e 6f 70 63 6f 64 65 3d 3d 4f 50  p[-1].opcode==OP
10e80 5f 50 65 72 6d 75 74 61 74 69 6f 6e 20 29 3b 0a  _Permutation );.
10e90 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 5b      assert( pOp[
10ea0 2d 31 5d 2e 70 34 74 79 70 65 3d 3d 50 34 5f 49  -1].p4type==P4_I
10eb0 4e 54 41 52 52 41 59 20 29 3b 0a 20 20 20 20 61  NTARRAY );.    a
10ec0 50 65 72 6d 75 74 65 20 3d 20 70 4f 70 5b 2d 31  Permute = pOp[-1
10ed0 5d 2e 70 34 2e 61 69 20 2b 20 31 3b 0a 20 20 20  ].p4.ai + 1;.   
10ee0 20 61 73 73 65 72 74 28 20 61 50 65 72 6d 75 74   assert( aPermut
10ef0 65 21 3d 30 20 29 3b 0a 20 20 7d 0a 20 20 6e 20  e!=0 );.  }.  n 
10f00 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 70 4b 65  = pOp->p3;.  pKe
10f10 79 49 6e 66 6f 20 3d 20 70 4f 70 2d 3e 70 34 2e  yInfo = pOp->p4.
10f20 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 61 73 73 65  pKeyInfo;.  asse
10f30 72 74 28 20 6e 3e 30 20 29 3b 0a 20 20 61 73 73  rt( n>0 );.  ass
10f40 65 72 74 28 20 70 4b 65 79 49 6e 66 6f 21 3d 30  ert( pKeyInfo!=0
10f50 20 29 3b 0a 20 20 70 31 20 3d 20 70 4f 70 2d 3e   );.  p1 = pOp->
10f60 70 31 3b 0a 20 20 70 32 20 3d 20 70 4f 70 2d 3e  p1;.  p2 = pOp->
10f70 70 32 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54  p2;.#ifdef SQLIT
10f80 45 5f 44 45 42 55 47 0a 20 20 69 66 28 20 61 50  E_DEBUG.  if( aP
10f90 65 72 6d 75 74 65 20 29 7b 0a 20 20 20 20 69 6e  ermute ){.    in
10fa0 74 20 6b 2c 20 6d 78 20 3d 20 30 3b 0a 20 20 20  t k, mx = 0;.   
10fb0 20 66 6f 72 28 6b 3d 30 3b 20 6b 3c 6e 3b 20 6b   for(k=0; k<n; k
10fc0 2b 2b 29 20 69 66 28 20 61 50 65 72 6d 75 74 65  ++) if( aPermute
10fd0 5b 6b 5d 3e 6d 78 20 29 20 6d 78 20 3d 20 61 50  [k]>mx ) mx = aP
10fe0 65 72 6d 75 74 65 5b 6b 5d 3b 0a 20 20 20 20 61  ermute[k];.    a
10ff0 73 73 65 72 74 28 20 70 31 3e 30 20 26 26 20 70  ssert( p1>0 && p
11000 31 2b 6d 78 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31  1+mx<=(p->nMem+1
11010 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29 2b 31   - p->nCursor)+1
11020 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20   );.    assert( 
11030 70 32 3e 30 20 26 26 20 70 32 2b 6d 78 3c 3d 28  p2>0 && p2+mx<=(
11040 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e  p->nMem+1 - p->n
11050 43 75 72 73 6f 72 29 2b 31 20 29 3b 0a 20 20 7d  Cursor)+1 );.  }
11060 65 6c 73 65 7b 0a 20 20 20 20 61 73 73 65 72 74  else{.    assert
11070 28 20 70 31 3e 30 20 26 26 20 70 31 2b 6e 3c 3d  ( p1>0 && p1+n<=
11080 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e  (p->nMem+1 - p->
11090 6e 43 75 72 73 6f 72 29 2b 31 20 29 3b 0a 20 20  nCursor)+1 );.  
110a0 20 20 61 73 73 65 72 74 28 20 70 32 3e 30 20 26    assert( p2>0 &
110b0 26 20 70 32 2b 6e 3c 3d 28 70 2d 3e 6e 4d 65 6d  & p2+n<=(p->nMem
110c0 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29  +1 - p->nCursor)
110d0 2b 31 20 29 3b 0a 20 20 7d 0a 23 65 6e 64 69 66  +1 );.  }.#endif
110e0 20 2f 2a 20 53 51 4c 49 54 45 5f 44 45 42 55 47   /* SQLITE_DEBUG
110f0 20 2a 2f 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69   */.  for(i=0; i
11100 3c 6e 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 69 64  <n; i++){.    id
11110 78 20 3d 20 61 50 65 72 6d 75 74 65 20 3f 20 61  x = aPermute ? a
11120 50 65 72 6d 75 74 65 5b 69 5d 20 3a 20 69 3b 0a  Permute[i] : i;.
11130 20 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49      assert( memI
11140 73 56 61 6c 69 64 28 26 61 4d 65 6d 5b 70 31 2b  sValid(&aMem[p1+
11150 69 64 78 5d 29 20 29 3b 0a 20 20 20 20 61 73 73  idx]) );.    ass
11160 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28  ert( memIsValid(
11170 26 61 4d 65 6d 5b 70 32 2b 69 64 78 5d 29 20 29  &aMem[p2+idx]) )
11180 3b 0a 20 20 20 20 52 45 47 49 53 54 45 52 5f 54  ;.    REGISTER_T
11190 52 41 43 45 28 70 31 2b 69 64 78 2c 20 26 61 4d  RACE(p1+idx, &aM
111a0 65 6d 5b 70 31 2b 69 64 78 5d 29 3b 0a 20 20 20  em[p1+idx]);.   
111b0 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28   REGISTER_TRACE(
111c0 70 32 2b 69 64 78 2c 20 26 61 4d 65 6d 5b 70 32  p2+idx, &aMem[p2
111d0 2b 69 64 78 5d 29 3b 0a 20 20 20 20 61 73 73 65  +idx]);.    asse
111e0 72 74 28 20 69 3c 70 4b 65 79 49 6e 66 6f 2d 3e  rt( i<pKeyInfo->
111f0 6e 4b 65 79 46 69 65 6c 64 20 29 3b 0a 20 20 20  nKeyField );.   
11200 20 70 43 6f 6c 6c 20 3d 20 70 4b 65 79 49 6e 66   pColl = pKeyInf
11210 6f 2d 3e 61 43 6f 6c 6c 5b 69 5d 3b 0a 20 20 20  o->aColl[i];.   
11220 20 62 52 65 76 20 3d 20 70 4b 65 79 49 6e 66 6f   bRev = pKeyInfo
11230 2d 3e 61 53 6f 72 74 4f 72 64 65 72 5b 69 5d 3b  ->aSortOrder[i];
11240 0a 20 20 20 20 69 43 6f 6d 70 61 72 65 20 3d 20  .    iCompare = 
11250 73 71 6c 69 74 65 33 4d 65 6d 43 6f 6d 70 61 72  sqlite3MemCompar
11260 65 28 26 61 4d 65 6d 5b 70 31 2b 69 64 78 5d 2c  e(&aMem[p1+idx],
11270 20 26 61 4d 65 6d 5b 70 32 2b 69 64 78 5d 2c 20   &aMem[p2+idx], 
11280 70 43 6f 6c 6c 29 3b 0a 20 20 20 20 69 66 28 20  pColl);.    if( 
11290 69 43 6f 6d 70 61 72 65 20 29 7b 0a 20 20 20 20  iCompare ){.    
112a0 20 20 69 66 28 20 62 52 65 76 20 29 20 69 43 6f    if( bRev ) iCo
112b0 6d 70 61 72 65 20 3d 20 2d 69 43 6f 6d 70 61 72  mpare = -iCompar
112c0 65 3b 0a 20 20 20 20 20 20 62 72 65 61 6b 3b 0a  e;.      break;.
112d0 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61      }.  }.  brea
112e0 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
112f0 20 4a 75 6d 70 20 50 31 20 50 32 20 50 33 20 2a   Jump P1 P2 P3 *
11300 20 2a 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70 20 74 6f   *.**.** Jump to
11310 20 74 68 65 20 69 6e 73 74 72 75 63 74 69 6f 6e   the instruction
11320 20 61 74 20 61 64 64 72 65 73 73 20 50 31 2c 20   at address P1, 
11330 50 32 2c 20 6f 72 20 50 33 20 64 65 70 65 6e 64  P2, or P3 depend
11340 69 6e 67 20 6f 6e 20 77 68 65 74 68 65 72 0a 2a  ing on whether.*
11350 2a 20 69 6e 20 74 68 65 20 6d 6f 73 74 20 72 65  * in the most re
11360 63 65 6e 74 20 4f 50 5f 43 6f 6d 70 61 72 65 20  cent OP_Compare 
11370 69 6e 73 74 72 75 63 74 69 6f 6e 20 74 68 65 20  instruction the 
11380 50 31 20 76 65 63 74 6f 72 20 77 61 73 20 6c 65  P1 vector was le
11390 73 73 20 74 68 61 6e 0a 2a 2a 20 65 71 75 61 6c  ss than.** equal
113a0 20 74 6f 2c 20 6f 72 20 67 72 65 61 74 65 72 20   to, or greater 
113b0 74 68 61 6e 20 74 68 65 20 50 32 20 76 65 63 74  than the P2 vect
113c0 6f 72 2c 20 72 65 73 70 65 63 74 69 76 65 6c 79  or, respectively
113d0 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4a 75 6d  ..*/.case OP_Jum
113e0 70 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20  p: {            
113f0 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 69 66   /* jump */.  if
11400 28 20 69 43 6f 6d 70 61 72 65 3c 30 20 29 7b 0a  ( iCompare<0 ){.
11410 20 20 20 20 56 64 62 65 42 72 61 6e 63 68 54 61      VdbeBranchTa
11420 6b 65 6e 28 30 2c 33 29 3b 20 70 4f 70 20 3d 20  ken(0,3); pOp = 
11430 26 61 4f 70 5b 70 4f 70 2d 3e 70 31 20 2d 20 31  &aOp[pOp->p1 - 1
11440 5d 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 69  ];.  }else if( i
11450 43 6f 6d 70 61 72 65 3d 3d 30 20 29 7b 0a 20 20  Compare==0 ){.  
11460 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65    VdbeBranchTake
11470 6e 28 31 2c 33 29 3b 20 70 4f 70 20 3d 20 26 61  n(1,3); pOp = &a
11480 4f 70 5b 70 4f 70 2d 3e 70 32 20 2d 20 31 5d 3b  Op[pOp->p2 - 1];
11490 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 56 64  .  }else{.    Vd
114a0 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 32 2c  beBranchTaken(2,
114b0 33 29 3b 20 70 4f 70 20 3d 20 26 61 4f 70 5b 70  3); pOp = &aOp[p
114c0 4f 70 2d 3e 70 33 20 2d 20 31 5d 3b 0a 20 20 7d  Op->p3 - 1];.  }
114d0 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
114e0 4f 70 63 6f 64 65 3a 20 41 6e 64 20 50 31 20 50  Opcode: And P1 P
114f0 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f  2 P3 * *.** Syno
11500 70 73 69 73 3a 20 72 5b 50 33 5d 3d 28 72 5b 50  psis: r[P3]=(r[P
11510 31 5d 20 26 26 20 72 5b 50 32 5d 29 0a 2a 2a 0a  1] && r[P2]).**.
11520 2a 2a 20 54 61 6b 65 20 74 68 65 20 6c 6f 67 69  ** Take the logi
11530 63 61 6c 20 41 4e 44 20 6f 66 20 74 68 65 20 76  cal AND of the v
11540 61 6c 75 65 73 20 69 6e 20 72 65 67 69 73 74 65  alues in registe
11550 72 73 20 50 31 20 61 6e 64 20 50 32 20 61 6e 64  rs P1 and P2 and
11560 0a 2a 2a 20 77 72 69 74 65 20 74 68 65 20 72 65  .** write the re
11570 73 75 6c 74 20 69 6e 74 6f 20 72 65 67 69 73 74  sult into regist
11580 65 72 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  er P3..**.** If 
11590 65 69 74 68 65 72 20 50 31 20 6f 72 20 50 32 20  either P1 or P2 
115a0 69 73 20 30 20 28 66 61 6c 73 65 29 20 74 68 65  is 0 (false) the
115b0 6e 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20  n the result is 
115c0 30 20 65 76 65 6e 20 69 66 0a 2a 2a 20 74 68 65  0 even if.** the
115d0 20 6f 74 68 65 72 20 69 6e 70 75 74 20 69 73 20   other input is 
115e0 4e 55 4c 4c 2e 20 20 41 20 4e 55 4c 4c 20 61 6e  NULL.  A NULL an
115f0 64 20 74 72 75 65 20 6f 72 20 74 77 6f 20 4e 55  d true or two NU
11600 4c 4c 73 20 67 69 76 65 0a 2a 2a 20 61 20 4e 55  LLs give.** a NU
11610 4c 4c 20 6f 75 74 70 75 74 2e 0a 2a 2f 0a 2f 2a  LL output..*/./*
11620 20 4f 70 63 6f 64 65 3a 20 4f 72 20 50 31 20 50   Opcode: Or P1 P
11630 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f  2 P3 * *.** Syno
11640 70 73 69 73 3a 20 72 5b 50 33 5d 3d 28 72 5b 50  psis: r[P3]=(r[P
11650 31 5d 20 7c 7c 20 72 5b 50 32 5d 29 0a 2a 2a 0a  1] || r[P2]).**.
11660 2a 2a 20 54 61 6b 65 20 74 68 65 20 6c 6f 67 69  ** Take the logi
11670 63 61 6c 20 4f 52 20 6f 66 20 74 68 65 20 76 61  cal OR of the va
11680 6c 75 65 73 20 69 6e 20 72 65 67 69 73 74 65 72  lues in register
11690 20 50 31 20 61 6e 64 20 50 32 20 61 6e 64 0a 2a   P1 and P2 and.*
116a0 2a 20 73 74 6f 72 65 20 74 68 65 20 61 6e 73 77  * store the answ
116b0 65 72 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  er in register P
116c0 33 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 65 69 74 68  3..**.** If eith
116d0 65 72 20 50 31 20 6f 72 20 50 32 20 69 73 20 6e  er P1 or P2 is n
116e0 6f 6e 7a 65 72 6f 20 28 74 72 75 65 29 20 74 68  onzero (true) th
116f0 65 6e 20 74 68 65 20 72 65 73 75 6c 74 20 69 73  en the result is
11700 20 31 20 28 74 72 75 65 29 0a 2a 2a 20 65 76 65   1 (true).** eve
11710 6e 20 69 66 20 74 68 65 20 6f 74 68 65 72 20 69  n if the other i
11720 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2e 20 20 41  nput is NULL.  A
11730 20 4e 55 4c 4c 20 61 6e 64 20 66 61 6c 73 65 20   NULL and false 
11740 6f 72 20 74 77 6f 20 4e 55 4c 4c 73 0a 2a 2a 20  or two NULLs.** 
11750 67 69 76 65 20 61 20 4e 55 4c 4c 20 6f 75 74 70  give a NULL outp
11760 75 74 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 41  ut..*/.case OP_A
11770 6e 64 3a 20 20 20 20 20 20 20 20 20 20 20 20 20  nd:             
11780 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 41   /* same as TK_A
11790 4e 44 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75  ND, in1, in2, ou
117a0 74 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 4f 72  t3 */.case OP_Or
117b0 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20  : {             
117c0 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 4f 52  /* same as TK_OR
117d0 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33  , in1, in2, out3
117e0 20 2a 2f 0a 20 20 69 6e 74 20 76 31 3b 20 20 20   */.  int v1;   
117f0 20 2f 2a 20 4c 65 66 74 20 6f 70 65 72 61 6e 64   /* Left operand
11800 3a 20 20 30 3d 3d 46 41 4c 53 45 2c 20 31 3d 3d  :  0==FALSE, 1==
11810 54 52 55 45 2c 20 32 3d 3d 55 4e 4b 4e 4f 57 4e  TRUE, 2==UNKNOWN
11820 20 6f 72 20 4e 55 4c 4c 20 2a 2f 0a 20 20 69 6e   or NULL */.  in
11830 74 20 76 32 3b 20 20 20 20 2f 2a 20 52 69 67 68  t v2;    /* Righ
11840 74 20 6f 70 65 72 61 6e 64 3a 20 30 3d 3d 46 41  t operand: 0==FA
11850 4c 53 45 2c 20 31 3d 3d 54 52 55 45 2c 20 32 3d  LSE, 1==TRUE, 2=
11860 3d 55 4e 4b 4e 4f 57 4e 20 6f 72 20 4e 55 4c 4c  =UNKNOWN or NULL
11870 20 2a 2f 0a 0a 20 20 70 49 6e 31 20 3d 20 26 61   */..  pIn1 = &a
11880 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
11890 69 66 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20  if( pIn1->flags 
118a0 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20  & MEM_Null ){.  
118b0 20 20 76 31 20 3d 20 32 3b 0a 20 20 7d 65 6c 73    v1 = 2;.  }els
118c0 65 7b 0a 20 20 20 20 76 31 20 3d 20 73 71 6c 69  e{.    v1 = sqli
118d0 74 65 33 56 64 62 65 49 6e 74 56 61 6c 75 65 28  te3VdbeIntValue(
118e0 70 49 6e 31 29 21 3d 30 3b 0a 20 20 7d 0a 20 20  pIn1)!=0;.  }.  
118f0 70 49 6e 32 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn2 = &aMem[pOp
11900 2d 3e 70 32 5d 3b 0a 20 20 69 66 28 20 70 49 6e  ->p2];.  if( pIn
11910 32 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e  2->flags & MEM_N
11920 75 6c 6c 20 29 7b 0a 20 20 20 20 76 32 20 3d 20  ull ){.    v2 = 
11930 32 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  2;.  }else{.    
11940 76 32 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  v2 = sqlite3Vdbe
11950 49 6e 74 56 61 6c 75 65 28 70 49 6e 32 29 21 3d  IntValue(pIn2)!=
11960 30 3b 0a 20 20 7d 0a 20 20 69 66 28 20 70 4f 70  0;.  }.  if( pOp
11970 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 41 6e 64  ->opcode==OP_And
11980 20 29 7b 0a 20 20 20 20 73 74 61 74 69 63 20 63   ){.    static c
11990 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68  onst unsigned ch
119a0 61 72 20 61 6e 64 5f 6c 6f 67 69 63 5b 5d 20 3d  ar and_logic[] =
119b0 20 7b 20 30 2c 20 30 2c 20 30 2c 20 30 2c 20 31   { 0, 0, 0, 0, 1
119c0 2c 20 32 2c 20 30 2c 20 32 2c 20 32 20 7d 3b 0a  , 2, 0, 2, 2 };.
119d0 20 20 20 20 76 31 20 3d 20 61 6e 64 5f 6c 6f 67      v1 = and_log
119e0 69 63 5b 76 31 2a 33 2b 76 32 5d 3b 0a 20 20 7d  ic[v1*3+v2];.  }
119f0 65 6c 73 65 7b 0a 20 20 20 20 73 74 61 74 69 63  else{.    static
11a00 20 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20   const unsigned 
11a10 63 68 61 72 20 6f 72 5f 6c 6f 67 69 63 5b 5d 20  char or_logic[] 
11a20 3d 20 7b 20 30 2c 20 31 2c 20 32 2c 20 31 2c 20  = { 0, 1, 2, 1, 
11a30 31 2c 20 31 2c 20 32 2c 20 31 2c 20 32 20 7d 3b  1, 1, 2, 1, 2 };
11a40 0a 20 20 20 20 76 31 20 3d 20 6f 72 5f 6c 6f 67  .    v1 = or_log
11a50 69 63 5b 76 31 2a 33 2b 76 32 5d 3b 0a 20 20 7d  ic[v1*3+v2];.  }
11a60 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b  .  pOut = &aMem[
11a70 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 69 66 28 20  pOp->p3];.  if( 
11a80 76 31 3d 3d 32 20 29 7b 0a 20 20 20 20 4d 65 6d  v1==2 ){.    Mem
11a90 53 65 74 54 79 70 65 46 6c 61 67 28 70 4f 75 74  SetTypeFlag(pOut
11aa0 2c 20 4d 45 4d 5f 4e 75 6c 6c 29 3b 0a 20 20 7d  , MEM_Null);.  }
11ab0 65 6c 73 65 7b 0a 20 20 20 20 70 4f 75 74 2d 3e  else{.    pOut->
11ac0 75 2e 69 20 3d 20 76 31 3b 0a 20 20 20 20 4d 65  u.i = v1;.    Me
11ad0 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70 4f 75  mSetTypeFlag(pOu
11ae0 74 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20 7d  t, MEM_Int);.  }
11af0 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
11b00 4f 70 63 6f 64 65 3a 20 4e 6f 74 20 50 31 20 50  Opcode: Not P1 P
11b10 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70  2 * * *.** Synop
11b20 73 69 73 3a 20 72 5b 50 32 5d 3d 20 21 72 5b 50  sis: r[P2]= !r[P
11b30 31 5d 0a 2a 2a 0a 2a 2a 20 49 6e 74 65 72 70 72  1].**.** Interpr
11b40 65 74 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20  et the value in 
11b50 72 65 67 69 73 74 65 72 20 50 31 20 61 73 20 61  register P1 as a
11b60 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 2e 20   boolean value. 
11b70 20 53 74 6f 72 65 20 74 68 65 0a 2a 2a 20 62 6f   Store the.** bo
11b80 6f 6c 65 61 6e 20 63 6f 6d 70 6c 65 6d 65 6e 74  olean complement
11b90 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 2e   in register P2.
11ba0 20 20 49 66 20 74 68 65 20 76 61 6c 75 65 20 69    If the value i
11bb0 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 69 73  n register P1 is
11bc0 20 0a 2a 2a 20 4e 55 4c 4c 2c 20 74 68 65 6e 20   .** NULL, then 
11bd0 61 20 4e 55 4c 4c 20 69 73 20 73 74 6f 72 65 64  a NULL is stored
11be0 20 69 6e 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20   in P2..*/.case 
11bf0 4f 50 5f 4e 6f 74 3a 20 7b 20 20 20 20 20 20 20  OP_Not: {       
11c00 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65           /* same
11c10 20 61 73 20 54 4b 5f 4e 4f 54 2c 20 69 6e 31 2c   as TK_NOT, in1,
11c20 20 6f 75 74 32 20 2a 2f 0a 20 20 70 49 6e 31 20   out2 */.  pIn1 
11c30 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  = &aMem[pOp->p1]
11c40 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d  ;.  pOut = &aMem
11c50 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 73 71 6c  [pOp->p2];.  sql
11c60 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75  ite3VdbeMemSetNu
11c70 6c 6c 28 70 4f 75 74 29 3b 0a 20 20 69 66 28 20  ll(pOut);.  if( 
11c80 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d  (pIn1->flags & M
11c90 45 4d 5f 4e 75 6c 6c 29 3d 3d 30 20 29 7b 0a 20  EM_Null)==0 ){. 
11ca0 20 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d     pOut->flags =
11cb0 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20 20 20 70 4f   MEM_Int;.    pO
11cc0 75 74 2d 3e 75 2e 69 20 3d 20 21 73 71 6c 69 74  ut->u.i = !sqlit
11cd0 65 33 56 64 62 65 49 6e 74 56 61 6c 75 65 28 70  e3VdbeIntValue(p
11ce0 49 6e 31 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61  In1);.  }.  brea
11cf0 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
11d00 20 42 69 74 4e 6f 74 20 50 31 20 50 32 20 2a 20   BitNot P1 P2 * 
11d10 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  * *.** Synopsis:
11d20 20 72 5b 50 31 5d 3d 20 7e 72 5b 50 31 5d 0a 2a   r[P1]= ~r[P1].*
11d30 2a 0a 2a 2a 20 49 6e 74 65 72 70 72 65 74 20 74  *.** Interpret t
11d40 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 72 65  he content of re
11d50 67 69 73 74 65 72 20 50 31 20 61 73 20 61 6e 20  gister P1 as an 
11d60 69 6e 74 65 67 65 72 2e 20 20 53 74 6f 72 65 20  integer.  Store 
11d70 74 68 65 0a 2a 2a 20 6f 6e 65 73 2d 63 6f 6d 70  the.** ones-comp
11d80 6c 65 6d 65 6e 74 20 6f 66 20 74 68 65 20 50 31  lement of the P1
11d90 20 76 61 6c 75 65 20 69 6e 74 6f 20 72 65 67 69   value into regi
11da0 73 74 65 72 20 50 32 2e 20 20 49 66 20 50 31 20  ster P2.  If P1 
11db0 68 6f 6c 64 73 0a 2a 2a 20 61 20 4e 55 4c 4c 20  holds.** a NULL 
11dc0 74 68 65 6e 20 73 74 6f 72 65 20 61 20 4e 55 4c  then store a NUL
11dd0 4c 20 69 6e 20 50 32 2e 0a 2a 2f 0a 63 61 73 65  L in P2..*/.case
11de0 20 4f 50 5f 42 69 74 4e 6f 74 3a 20 7b 20 20 20   OP_BitNot: {   
11df0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d            /* sam
11e00 65 20 61 73 20 54 4b 5f 42 49 54 4e 4f 54 2c 20  e as TK_BITNOT, 
11e10 69 6e 31 2c 20 6f 75 74 32 20 2a 2f 0a 20 20 70  in1, out2 */.  p
11e20 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In1 = &aMem[pOp-
11e30 3e 70 31 5d 3b 0a 20 20 70 4f 75 74 20 3d 20 26  >p1];.  pOut = &
11e40 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20  aMem[pOp->p2];. 
11e50 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53   sqlite3VdbeMemS
11e60 65 74 4e 75 6c 6c 28 70 4f 75 74 29 3b 0a 20 20  etNull(pOut);.  
11e70 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73  if( (pIn1->flags
11e80 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29 3d 3d 30 20   & MEM_Null)==0 
11e90 29 7b 0a 20 20 20 20 70 4f 75 74 2d 3e 66 6c 61  ){.    pOut->fla
11ea0 67 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20  gs = MEM_Int;.  
11eb0 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 7e 73    pOut->u.i = ~s
11ec0 71 6c 69 74 65 33 56 64 62 65 49 6e 74 56 61 6c  qlite3VdbeIntVal
11ed0 75 65 28 70 49 6e 31 29 3b 0a 20 20 7d 0a 20 20  ue(pIn1);.  }.  
11ee0 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
11ef0 6f 64 65 3a 20 4f 6e 63 65 20 50 31 20 50 32 20  ode: Once P1 P2 
11f00 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 46 61 6c 6c  * * *.**.** Fall
11f10 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20   through to the 
11f20 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e  next instruction
11f30 20 74 68 65 20 66 69 72 73 74 20 74 69 6d 65 20   the first time 
11f40 74 68 69 73 20 6f 70 63 6f 64 65 20 69 73 0a 2a  this opcode is.*
11f50 2a 20 65 6e 63 6f 75 6e 74 65 72 65 64 20 6f 6e  * encountered on
11f60 20 65 61 63 68 20 69 6e 76 6f 63 61 74 69 6f 6e   each invocation
11f70 20 6f 66 20 74 68 65 20 62 79 74 65 2d 63 6f 64   of the byte-cod
11f80 65 20 70 72 6f 67 72 61 6d 2e 20 20 4a 75 6d 70  e program.  Jump
11f90 20 74 6f 20 50 32 0a 2a 2a 20 6f 6e 20 74 68 65   to P2.** on the
11fa0 20 73 65 63 6f 6e 64 20 61 6e 64 20 61 6c 6c 20   second and all 
11fb0 73 75 62 73 65 71 75 65 6e 74 20 65 6e 63 6f 75  subsequent encou
11fc0 6e 74 65 72 73 20 64 75 72 69 6e 67 20 74 68 65  nters during the
11fd0 20 73 61 6d 65 20 69 6e 76 6f 63 61 74 69 6f 6e   same invocation
11fe0 2e 0a 2a 2a 0a 2a 2a 20 54 6f 70 2d 6c 65 76 65  ..**.** Top-leve
11ff0 6c 20 70 72 6f 67 72 61 6d 73 20 64 65 74 65 72  l programs deter
12000 6d 69 6e 65 20 66 69 72 73 74 20 69 6e 76 6f 63  mine first invoc
12010 61 74 69 6f 6e 20 62 79 20 63 6f 6d 70 61 72 69  ation by compari
12020 6e 67 20 74 68 65 20 50 31 0a 2a 2a 20 6f 70 65  ng the P1.** ope
12030 72 61 6e 64 20 61 67 61 69 6e 73 74 20 74 68 65  rand against the
12040 20 50 31 20 6f 70 65 72 61 6e 64 20 6f 6e 20 74   P1 operand on t
12050 68 65 20 4f 50 5f 49 6e 69 74 20 6f 70 63 6f 64  he OP_Init opcod
12060 65 20 61 74 20 74 68 65 20 62 65 67 69 6e 6e 69  e at the beginni
12070 6e 67 0a 2a 2a 20 6f 66 20 74 68 65 20 70 72 6f  ng.** of the pro
12080 67 72 61 6d 2e 20 20 49 66 20 74 68 65 20 50 31  gram.  If the P1
12090 20 76 61 6c 75 65 73 20 64 69 66 66 65 72 2c 20   values differ, 
120a0 74 68 65 6e 20 66 61 6c 6c 20 74 68 72 6f 75 67  then fall throug
120b0 68 20 61 6e 64 20 6d 61 6b 65 0a 2a 2a 20 74 68  h and make.** th
120c0 65 20 50 31 20 6f 66 20 74 68 69 73 20 6f 70 63  e P1 of this opc
120d0 6f 64 65 20 65 71 75 61 6c 20 74 6f 20 74 68 65  ode equal to the
120e0 20 50 31 20 6f 66 20 4f 50 5f 49 6e 69 74 2e 20   P1 of OP_Init. 
120f0 20 49 66 20 50 31 20 76 61 6c 75 65 73 20 61 72   If P1 values ar
12100 65 0a 2a 2a 20 74 68 65 20 73 61 6d 65 20 74 68  e.** the same th
12110 65 6e 20 74 61 6b 65 20 74 68 65 20 6a 75 6d 70  en take the jump
12120 2e 0a 2a 2a 0a 2a 2a 20 46 6f 72 20 73 75 62 70  ..**.** For subp
12130 72 6f 67 72 61 6d 73 2c 20 74 68 65 72 65 20 69  rograms, there i
12140 73 20 61 20 62 69 74 6d 61 73 6b 20 69 6e 20 74  s a bitmask in t
12150 68 65 20 56 64 62 65 46 72 61 6d 65 20 74 68 61  he VdbeFrame tha
12160 74 20 64 65 74 65 72 6d 69 6e 65 73 0a 2a 2a 20  t determines.** 
12170 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 74  whether or not t
12180 68 65 20 6a 75 6d 70 20 73 68 6f 75 6c 64 20 62  he jump should b
12190 65 20 74 61 6b 65 6e 2e 20 20 54 68 65 20 62 69  e taken.  The bi
121a0 74 6d 61 73 6b 20 69 73 20 6e 65 63 65 73 73 61  tmask is necessa
121b0 72 79 0a 2a 2a 20 62 65 63 61 75 73 65 20 74 68  ry.** because th
121c0 65 20 73 65 6c 66 2d 61 6c 74 65 72 69 6e 67 20  e self-altering 
121d0 63 6f 64 65 20 74 72 69 63 6b 20 64 6f 65 73 20  code trick does 
121e0 6e 6f 74 20 77 6f 72 6b 20 66 6f 72 20 72 65 63  not work for rec
121f0 75 72 73 69 76 65 0a 2a 2a 20 74 72 69 67 67 65  ursive.** trigge
12200 72 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4f  rs..*/.case OP_O
12210 6e 63 65 3a 20 7b 20 20 20 20 20 20 20 20 20 20  nce: {          
12220 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20     /* jump */.  
12230 75 33 32 20 69 41 64 64 72 3b 20 20 20 20 20 20  u32 iAddr;      
12240 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 64 64            /* Add
12250 72 65 73 73 20 6f 66 20 74 68 69 73 20 69 6e 73  ress of this ins
12260 74 72 75 63 74 69 6f 6e 20 2a 2f 0a 20 20 61 73  truction */.  as
12270 73 65 72 74 28 20 70 2d 3e 61 4f 70 5b 30 5d 2e  sert( p->aOp[0].
12280 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 6e 69 74 20  opcode==OP_Init 
12290 29 3b 0a 20 20 69 66 28 20 70 2d 3e 70 46 72 61  );.  if( p->pFra
122a0 6d 65 20 29 7b 0a 20 20 20 20 69 41 64 64 72 20  me ){.    iAddr 
122b0 3d 20 28 69 6e 74 29 28 70 4f 70 20 2d 20 70 2d  = (int)(pOp - p-
122c0 3e 61 4f 70 29 3b 0a 20 20 20 20 69 66 28 20 28  >aOp);.    if( (
122d0 70 2d 3e 70 46 72 61 6d 65 2d 3e 61 4f 6e 63 65  p->pFrame->aOnce
122e0 5b 69 41 64 64 72 2f 38 5d 20 26 20 28 31 3c 3c  [iAddr/8] & (1<<
122f0 28 69 41 64 64 72 20 26 20 37 29 29 29 21 3d 30  (iAddr & 7)))!=0
12300 20 29 7b 0a 20 20 20 20 20 20 56 64 62 65 42 72   ){.      VdbeBr
12310 61 6e 63 68 54 61 6b 65 6e 28 31 2c 20 32 29 3b  anchTaken(1, 2);
12320 0a 20 20 20 20 20 20 67 6f 74 6f 20 6a 75 6d 70  .      goto jump
12330 5f 74 6f 5f 70 32 3b 0a 20 20 20 20 7d 0a 20 20  _to_p2;.    }.  
12340 20 20 70 2d 3e 70 46 72 61 6d 65 2d 3e 61 4f 6e    p->pFrame->aOn
12350 63 65 5b 69 41 64 64 72 2f 38 5d 20 7c 3d 20 31  ce[iAddr/8] |= 1
12360 3c 3c 28 69 41 64 64 72 20 26 20 37 29 3b 0a 20  <<(iAddr & 7);. 
12370 20 7d 65 6c 73 65 7b 0a 20 20 20 20 69 66 28 20   }else{.    if( 
12380 70 2d 3e 61 4f 70 5b 30 5d 2e 70 31 3d 3d 70 4f  p->aOp[0].p1==pO
12390 70 2d 3e 70 31 20 29 7b 0a 20 20 20 20 20 20 56  p->p1 ){.      V
123a0 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 31  dbeBranchTaken(1
123b0 2c 20 32 29 3b 0a 20 20 20 20 20 20 67 6f 74 6f  , 2);.      goto
123c0 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 20   jump_to_p2;.   
123d0 20 7d 0a 20 20 7d 0a 20 20 56 64 62 65 42 72 61   }.  }.  VdbeBra
123e0 6e 63 68 54 61 6b 65 6e 28 30 2c 20 32 29 3b 0a  nchTaken(0, 2);.
123f0 20 20 70 4f 70 2d 3e 70 31 20 3d 20 70 2d 3e 61    pOp->p1 = p->a
12400 4f 70 5b 30 5d 2e 70 31 3b 0a 20 20 62 72 65 61  Op[0].p1;.  brea
12410 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
12420 20 49 66 20 50 31 20 50 32 20 50 33 20 2a 20 2a   If P1 P2 P3 * *
12430 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70 20 74 6f 20 50  .**.** Jump to P
12440 32 20 69 66 20 74 68 65 20 76 61 6c 75 65 20 69  2 if the value i
12450 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 69 73  n register P1 is
12460 20 74 72 75 65 2e 20 20 54 68 65 20 76 61 6c 75   true.  The valu
12470 65 0a 2a 2a 20 69 73 20 63 6f 6e 73 69 64 65 72  e.** is consider
12480 65 64 20 74 72 75 65 20 69 66 20 69 74 20 69 73  ed true if it is
12490 20 6e 75 6d 65 72 69 63 20 61 6e 64 20 6e 6f 6e   numeric and non
124a0 2d 7a 65 72 6f 2e 20 20 49 66 20 74 68 65 20 76  -zero.  If the v
124b0 61 6c 75 65 0a 2a 2a 20 69 6e 20 50 31 20 69 73  alue.** in P1 is
124c0 20 4e 55 4c 4c 20 74 68 65 6e 20 74 61 6b 65 20   NULL then take 
124d0 74 68 65 20 6a 75 6d 70 20 69 66 20 61 6e 64 20  the jump if and 
124e0 6f 6e 6c 79 20 69 66 20 50 33 20 69 73 20 6e 6f  only if P3 is no
124f0 6e 2d 7a 65 72 6f 2e 0a 2a 2f 0a 2f 2a 20 4f 70  n-zero..*/./* Op
12500 63 6f 64 65 3a 20 49 66 4e 6f 74 20 50 31 20 50  code: IfNot P1 P
12510 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4a  2 P3 * *.**.** J
12520 75 6d 70 20 74 6f 20 50 32 20 69 66 20 74 68 65  ump to P2 if the
12530 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
12540 65 72 20 50 31 20 69 73 20 46 61 6c 73 65 2e 20  er P1 is False. 
12550 20 54 68 65 20 76 61 6c 75 65 0a 2a 2a 20 69 73   The value.** is
12560 20 63 6f 6e 73 69 64 65 72 65 64 20 66 61 6c 73   considered fals
12570 65 20 69 66 20 69 74 20 68 61 73 20 61 20 6e 75  e if it has a nu
12580 6d 65 72 69 63 20 76 61 6c 75 65 20 6f 66 20 7a  meric value of z
12590 65 72 6f 2e 20 20 49 66 20 74 68 65 20 76 61 6c  ero.  If the val
125a0 75 65 0a 2a 2a 20 69 6e 20 50 31 20 69 73 20 4e  ue.** in P1 is N
125b0 55 4c 4c 20 74 68 65 6e 20 74 61 6b 65 20 74 68  ULL then take th
125c0 65 20 6a 75 6d 70 20 69 66 20 61 6e 64 20 6f 6e  e jump if and on
125d0 6c 79 20 69 66 20 50 33 20 69 73 20 6e 6f 6e 2d  ly if P3 is non-
125e0 7a 65 72 6f 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  zero..*/.case OP
125f0 5f 49 66 3a 20 20 20 20 20 20 20 20 20 20 20 20  _If:            
12600 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e       /* jump, in
12610 31 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 66 4e  1 */.case OP_IfN
12620 6f 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  ot: {           
12630 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f   /* jump, in1 */
12640 0a 20 20 69 6e 74 20 63 3b 0a 20 20 70 49 6e 31  .  int c;.  pIn1
12650 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31   = &aMem[pOp->p1
12660 5d 3b 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e 66  ];.  if( pIn1->f
12670 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20  lags & MEM_Null 
12680 29 7b 0a 20 20 20 20 63 20 3d 20 70 4f 70 2d 3e  ){.    c = pOp->
12690 70 33 3b 0a 20 20 7d 65 6c 73 65 7b 0a 23 69 66  p3;.  }else{.#if
126a0 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
126b0 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 0a 20  FLOATING_POINT. 
126c0 20 20 20 63 20 3d 20 73 71 6c 69 74 65 33 56 64     c = sqlite3Vd
126d0 62 65 49 6e 74 56 61 6c 75 65 28 70 49 6e 31 29  beIntValue(pIn1)
126e0 21 3d 30 3b 0a 23 65 6c 73 65 0a 20 20 20 20 63  !=0;.#else.    c
126f0 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 52 65   = sqlite3VdbeRe
12700 61 6c 56 61 6c 75 65 28 70 49 6e 31 29 21 3d 30  alValue(pIn1)!=0
12710 2e 30 3b 0a 23 65 6e 64 69 66 0a 20 20 20 20 69  .0;.#endif.    i
12720 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d  f( pOp->opcode==
12730 4f 50 5f 49 66 4e 6f 74 20 29 20 63 20 3d 20 21  OP_IfNot ) c = !
12740 63 3b 0a 20 20 7d 0a 20 20 56 64 62 65 42 72 61  c;.  }.  VdbeBra
12750 6e 63 68 54 61 6b 65 6e 28 63 21 3d 30 2c 20 32  nchTaken(c!=0, 2
12760 29 3b 0a 20 20 69 66 28 20 63 20 29 7b 0a 20 20  );.  if( c ){.  
12770 20 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70    goto jump_to_p
12780 32 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  2;.  }.  break;.
12790 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 73  }../* Opcode: Is
127a0 4e 75 6c 6c 20 50 31 20 50 32 20 2a 20 2a 20 2a  Null P1 P2 * * *
127b0 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 66  .** Synopsis: if
127c0 20 72 5b 50 31 5d 3d 3d 4e 55 4c 4c 20 67 6f 74   r[P1]==NULL got
127d0 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70 20  o P2.**.** Jump 
127e0 74 6f 20 50 32 20 69 66 20 74 68 65 20 76 61 6c  to P2 if the val
127f0 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
12800 31 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61  1 is NULL..*/.ca
12810 73 65 20 4f 50 5f 49 73 4e 75 6c 6c 3a 20 7b 20  se OP_IsNull: { 
12820 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61             /* sa
12830 6d 65 20 61 73 20 54 4b 5f 49 53 4e 55 4c 4c 2c  me as TK_ISNULL,
12840 20 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20   jump, in1 */.  
12850 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn1 = &aMem[pOp
12860 2d 3e 70 31 5d 3b 0a 20 20 56 64 62 65 42 72 61  ->p1];.  VdbeBra
12870 6e 63 68 54 61 6b 65 6e 28 20 28 70 49 6e 31 2d  nchTaken( (pIn1-
12880 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c  >flags & MEM_Nul
12890 6c 29 21 3d 30 2c 20 32 29 3b 0a 20 20 69 66 28  l)!=0, 2);.  if(
128a0 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20   (pIn1->flags & 
128b0 4d 45 4d 5f 4e 75 6c 6c 29 21 3d 30 20 29 7b 0a  MEM_Null)!=0 ){.
128c0 20 20 20 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f      goto jump_to
128d0 5f 70 32 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  _p2;.  }.  break
128e0 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
128f0 4e 6f 74 4e 75 6c 6c 20 50 31 20 50 32 20 2a 20  NotNull P1 P2 * 
12900 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  * *.** Synopsis:
12910 20 69 66 20 72 5b 50 31 5d 21 3d 4e 55 4c 4c 20   if r[P1]!=NULL 
12920 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 4a 75  goto P2.**.** Ju
12930 6d 70 20 74 6f 20 50 32 20 69 66 20 74 68 65 20  mp to P2 if the 
12940 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65  value in registe
12950 72 20 50 31 20 69 73 20 6e 6f 74 20 4e 55 4c 4c  r P1 is not NULL
12960 2e 20 20 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e  .  .*/.case OP_N
12970 6f 74 4e 75 6c 6c 3a 20 7b 20 20 20 20 20 20 20  otNull: {       
12980 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20       /* same as 
12990 54 4b 5f 4e 4f 54 4e 55 4c 4c 2c 20 6a 75 6d 70  TK_NOTNULL, jump
129a0 2c 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20  , in1 */.  pIn1 
129b0 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  = &aMem[pOp->p1]
129c0 3b 0a 20 20 56 64 62 65 42 72 61 6e 63 68 54 61  ;.  VdbeBranchTa
129d0 6b 65 6e 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67  ken( (pIn1->flag
129e0 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29 3d 3d 30  s & MEM_Null)==0
129f0 2c 20 32 29 3b 0a 20 20 69 66 28 20 28 70 49 6e  , 2);.  if( (pIn
12a00 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e  1->flags & MEM_N
12a10 75 6c 6c 29 3d 3d 30 20 29 7b 0a 20 20 20 20 67  ull)==0 ){.    g
12a20 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a  oto jump_to_p2;.
12a30 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
12a40 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 66 4e 75 6c  /* Opcode: IfNul
12a50 6c 52 6f 77 20 50 31 20 50 32 20 50 33 20 2a 20  lRow P1 P2 P3 * 
12a60 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69  *.** Synopsis: i
12a70 66 20 50 31 2e 6e 75 6c 6c 52 6f 77 20 74 68 65  f P1.nullRow the
12a80 6e 20 72 5b 50 33 5d 3d 4e 55 4c 4c 2c 20 67 6f  n r[P3]=NULL, go
12a90 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 43 68 65 63  to P2.**.** Chec
12aa0 6b 20 74 68 65 20 63 75 72 73 6f 72 20 50 31 20  k the cursor P1 
12ab0 74 6f 20 73 65 65 20 69 66 20 69 74 20 69 73 20  to see if it is 
12ac0 63 75 72 72 65 6e 74 6c 79 20 70 6f 69 6e 74 69  currently pointi
12ad0 6e 67 20 61 74 20 61 20 4e 55 4c 4c 20 72 6f 77  ng at a NULL row
12ae0 2e 0a 2a 2a 20 49 66 20 69 74 20 69 73 2c 20 74  ..** If it is, t
12af0 68 65 6e 20 73 65 74 20 72 65 67 69 73 74 65 72  hen set register
12b00 20 50 33 20 74 6f 20 4e 55 4c 4c 20 61 6e 64 20   P3 to NULL and 
12b10 6a 75 6d 70 20 69 6d 6d 65 64 69 61 74 65 6c 79  jump immediately
12b20 20 74 6f 20 50 32 2e 0a 2a 2a 20 49 66 20 50 31   to P2..** If P1
12b30 20 69 73 20 6e 6f 74 20 6f 6e 20 61 20 4e 55 4c   is not on a NUL
12b40 4c 20 72 6f 77 2c 20 74 68 65 6e 20 66 61 6c 6c  L row, then fall
12b50 20 74 68 72 6f 75 67 68 20 77 69 74 68 6f 75 74   through without
12b60 20 6d 61 6b 69 6e 67 20 61 6e 79 0a 2a 2a 20 63   making any.** c
12b70 68 61 6e 67 65 73 2e 0a 2a 2f 0a 63 61 73 65 20  hanges..*/.case 
12b80 4f 50 5f 49 66 4e 75 6c 6c 52 6f 77 3a 20 7b 20  OP_IfNullRow: { 
12b90 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20          /* jump 
12ba0 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  */.  assert( pOp
12bb0 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e  ->p1>=0 && pOp->
12bc0 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b  p1<p->nCursor );
12bd0 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 61 70  .  assert( p->ap
12be0 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 21 3d 30 20  Csr[pOp->p1]!=0 
12bf0 29 3b 0a 20 20 69 66 28 20 70 2d 3e 61 70 43 73  );.  if( p->apCs
12c00 72 5b 70 4f 70 2d 3e 70 31 5d 2d 3e 6e 75 6c 6c  r[pOp->p1]->null
12c10 52 6f 77 20 29 7b 0a 20 20 20 20 73 71 6c 69 74  Row ){.    sqlit
12c20 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c  e3VdbeMemSetNull
12c30 28 61 4d 65 6d 20 2b 20 70 4f 70 2d 3e 70 33 29  (aMem + pOp->p3)
12c40 3b 0a 20 20 20 20 67 6f 74 6f 20 6a 75 6d 70 5f  ;.    goto jump_
12c50 74 6f 5f 70 32 3b 0a 20 20 7d 0a 20 20 62 72 65  to_p2;.  }.  bre
12c60 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
12c70 3a 20 43 6f 6c 75 6d 6e 20 50 31 20 50 32 20 50  : Column P1 P2 P
12c80 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70  3 P4 P5.** Synop
12c90 73 69 73 3a 20 72 5b 50 33 5d 3d 50 58 0a 2a 2a  sis: r[P3]=PX.**
12ca0 0a 2a 2a 20 49 6e 74 65 72 70 72 65 74 20 74 68  .** Interpret th
12cb0 65 20 64 61 74 61 20 74 68 61 74 20 63 75 72 73  e data that curs
12cc0 6f 72 20 50 31 20 70 6f 69 6e 74 73 20 74 6f 20  or P1 points to 
12cd0 61 73 20 61 20 73 74 72 75 63 74 75 72 65 20 62  as a structure b
12ce0 75 69 6c 74 20 75 73 69 6e 67 0a 2a 2a 20 74 68  uilt using.** th
12cf0 65 20 4d 61 6b 65 52 65 63 6f 72 64 20 69 6e 73  e MakeRecord ins
12d00 74 72 75 63 74 69 6f 6e 2e 20 20 28 53 65 65 20  truction.  (See 
12d10 74 68 65 20 4d 61 6b 65 52 65 63 6f 72 64 20 6f  the MakeRecord o
12d20 70 63 6f 64 65 20 66 6f 72 20 61 64 64 69 74 69  pcode for additi
12d30 6f 6e 61 6c 0a 2a 2a 20 69 6e 66 6f 72 6d 61 74  onal.** informat
12d40 69 6f 6e 20 61 62 6f 75 74 20 74 68 65 20 66 6f  ion about the fo
12d50 72 6d 61 74 20 6f 66 20 74 68 65 20 64 61 74 61  rmat of the data
12d60 2e 29 20 20 45 78 74 72 61 63 74 20 74 68 65 20  .)  Extract the 
12d70 50 32 2d 74 68 20 63 6f 6c 75 6d 6e 0a 2a 2a 20  P2-th column.** 
12d80 66 72 6f 6d 20 74 68 69 73 20 72 65 63 6f 72 64  from this record
12d90 2e 20 20 49 66 20 74 68 65 72 65 20 61 72 65 20  .  If there are 
12da0 6c 65 73 73 20 74 68 61 74 20 28 50 32 2b 31 29  less that (P2+1)
12db0 20 0a 2a 2a 20 76 61 6c 75 65 73 20 69 6e 20 74   .** values in t
12dc0 68 65 20 72 65 63 6f 72 64 2c 20 65 78 74 72 61  he record, extra
12dd0 63 74 20 61 20 4e 55 4c 4c 2e 0a 2a 2a 0a 2a 2a  ct a NULL..**.**
12de0 20 54 68 65 20 76 61 6c 75 65 20 65 78 74 72 61   The value extra
12df0 63 74 65 64 20 69 73 20 73 74 6f 72 65 64 20 69  cted is stored i
12e00 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a  n register P3..*
12e10 2a 0a 2a 2a 20 49 66 20 74 68 65 20 72 65 63 6f  *.** If the reco
12e20 72 64 20 63 6f 6e 74 61 69 6e 73 20 66 65 77 65  rd contains fewe
12e30 72 20 74 68 61 6e 20 50 32 20 66 69 65 6c 64 73  r than P2 fields
12e40 2c 20 74 68 65 6e 20 65 78 74 72 61 63 74 20 61  , then extract a
12e50 20 4e 55 4c 4c 2e 20 20 4f 72 2c 0a 2a 2a 20 69   NULL.  Or,.** i
12e60 66 20 74 68 65 20 50 34 20 61 72 67 75 6d 65 6e  f the P4 argumen
12e70 74 20 69 73 20 61 20 50 34 5f 4d 45 4d 20 75 73  t is a P4_MEM us
12e80 65 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74  e the value of t
12e90 68 65 20 50 34 20 61 72 67 75 6d 65 6e 74 20 61  he P4 argument a
12ea0 73 0a 2a 2a 20 74 68 65 20 72 65 73 75 6c 74 2e  s.** the result.
12eb0 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 4f 50  .**.** If the OP
12ec0 46 4c 41 47 5f 43 4c 45 41 52 43 41 43 48 45 20  FLAG_CLEARCACHE 
12ed0 62 69 74 20 69 73 20 73 65 74 20 6f 6e 20 50 35  bit is set on P5
12ee0 20 61 6e 64 20 50 31 20 69 73 20 61 20 70 73 65   and P1 is a pse
12ef0 75 64 6f 2d 74 61 62 6c 65 20 63 75 72 73 6f 72  udo-table cursor
12f00 2c 0a 2a 2a 20 74 68 65 6e 20 74 68 65 20 63 61  ,.** then the ca
12f10 63 68 65 20 6f 66 20 74 68 65 20 63 75 72 73 6f  che of the curso
12f20 72 20 69 73 20 72 65 73 65 74 20 70 72 69 6f 72  r is reset prior
12f30 20 74 6f 20 65 78 74 72 61 63 74 69 6e 67 20 74   to extracting t
12f40 68 65 20 63 6f 6c 75 6d 6e 2e 0a 2a 2a 20 54 68  he column..** Th
12f50 65 20 66 69 72 73 74 20 4f 50 5f 43 6f 6c 75 6d  e first OP_Colum
12f60 6e 20 61 67 61 69 6e 73 74 20 61 20 70 73 65 75  n against a pseu
12f70 64 6f 2d 74 61 62 6c 65 20 61 66 74 65 72 20 74  do-table after t
12f80 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20  he value of the 
12f90 63 6f 6e 74 65 6e 74 0a 2a 2a 20 72 65 67 69 73  content.** regis
12fa0 74 65 72 20 68 61 73 20 63 68 61 6e 67 65 64 20  ter has changed 
12fb0 73 68 6f 75 6c 64 20 68 61 76 65 20 74 68 69 73  should have this
12fc0 20 62 69 74 20 73 65 74 2e 0a 2a 2a 0a 2a 2a 20   bit set..**.** 
12fd0 49 66 20 74 68 65 20 4f 50 46 4c 41 47 5f 4c 45  If the OPFLAG_LE
12fe0 4e 47 54 48 41 52 47 20 61 6e 64 20 4f 50 46 4c  NGTHARG and OPFL
12ff0 41 47 5f 54 59 50 45 4f 46 41 52 47 20 62 69 74  AG_TYPEOFARG bit
13000 73 20 61 72 65 20 73 65 74 20 6f 6e 20 50 35 20  s are set on P5 
13010 74 68 65 6e 0a 2a 2a 20 74 68 65 20 72 65 73 75  then.** the resu
13020 6c 74 20 69 73 20 67 75 61 72 61 6e 74 65 65 64  lt is guaranteed
13030 20 74 6f 20 6f 6e 6c 79 20 62 65 20 75 73 65 64   to only be used
13040 20 61 73 20 74 68 65 20 61 72 67 75 6d 65 6e 74   as the argument
13050 20 6f 66 20 61 20 6c 65 6e 67 74 68 28 29 0a 2a   of a length().*
13060 2a 20 6f 72 20 74 79 70 65 6f 66 28 29 20 66 75  * or typeof() fu
13070 6e 63 74 69 6f 6e 2c 20 72 65 73 70 65 63 74 69  nction, respecti
13080 76 65 6c 79 2e 20 20 54 68 65 20 6c 6f 61 64 69  vely.  The loadi
13090 6e 67 20 6f 66 20 6c 61 72 67 65 20 62 6c 6f 62  ng of large blob
130a0 73 20 63 61 6e 20 62 65 0a 2a 2a 20 73 6b 69 70  s can be.** skip
130b0 70 65 64 20 66 6f 72 20 6c 65 6e 67 74 68 28 29  ped for length()
130c0 20 61 6e 64 20 61 6c 6c 20 63 6f 6e 74 65 6e 74   and all content
130d0 20 6c 6f 61 64 69 6e 67 20 63 61 6e 20 62 65 20   loading can be 
130e0 73 6b 69 70 70 65 64 20 66 6f 72 20 74 79 70 65  skipped for type
130f0 6f 66 28 29 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  of()..*/.case OP
13100 5f 43 6f 6c 75 6d 6e 3a 20 7b 0a 20 20 69 6e 74  _Column: {.  int
13110 20 70 32 3b 20 20 20 20 20 20 20 20 20 20 20 20   p2;            
13120 2f 2a 20 63 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72  /* column number
13130 20 74 6f 20 72 65 74 72 69 65 76 65 20 2a 2f 0a   to retrieve */.
13140 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43    VdbeCursor *pC
13150 3b 20 20 20 20 2f 2a 20 54 68 65 20 56 44 42 45  ;    /* The VDBE
13160 20 63 75 72 73 6f 72 20 2a 2f 0a 20 20 42 74 43   cursor */.  BtC
13170 75 72 73 6f 72 20 2a 70 43 72 73 72 3b 20 20 20  ursor *pCrsr;   
13180 2f 2a 20 54 68 65 20 42 54 72 65 65 20 63 75 72  /* The BTree cur
13190 73 6f 72 20 2a 2f 0a 20 20 75 33 32 20 2a 61 4f  sor */.  u32 *aO
131a0 66 66 73 65 74 3b 20 20 20 20 20 20 2f 2a 20 61  ffset;      /* a
131b0 4f 66 66 73 65 74 5b 69 5d 20 69 73 20 6f 66 66  Offset[i] is off
131c0 73 65 74 20 74 6f 20 73 74 61 72 74 20 6f 66 20  set to start of 
131d0 64 61 74 61 20 66 6f 72 20 69 2d 74 68 20 63 6f  data for i-th co
131e0 6c 75 6d 6e 20 2a 2f 0a 20 20 69 6e 74 20 6c 65  lumn */.  int le
131f0 6e 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  n;           /* 
13200 54 68 65 20 6c 65 6e 67 74 68 20 6f 66 20 74 68  The length of th
13210 65 20 73 65 72 69 61 6c 69 7a 65 64 20 64 61 74  e serialized dat
13220 61 20 66 6f 72 20 74 68 65 20 63 6f 6c 75 6d 6e  a for the column
13230 20 2a 2f 0a 20 20 69 6e 74 20 69 3b 20 20 20 20   */.  int i;    
13240 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 6f 6f 70           /* Loop
13250 20 63 6f 75 6e 74 65 72 20 2a 2f 0a 20 20 4d 65   counter */.  Me
13260 6d 20 2a 70 44 65 73 74 3b 20 20 20 20 20 20 20  m *pDest;       
13270 20 2f 2a 20 57 68 65 72 65 20 74 6f 20 77 72 69   /* Where to wri
13280 74 65 20 74 68 65 20 65 78 74 72 61 63 74 65 64  te the extracted
13290 20 76 61 6c 75 65 20 2a 2f 0a 20 20 4d 65 6d 20   value */.  Mem 
132a0 73 4d 65 6d 3b 20 20 20 20 20 20 20 20 20 20 2f  sMem;          /
132b0 2a 20 46 6f 72 20 73 74 6f 72 69 6e 67 20 74 68  * For storing th
132c0 65 20 72 65 63 6f 72 64 20 62 65 69 6e 67 20 64  e record being d
132d0 65 63 6f 64 65 64 20 2a 2f 0a 20 20 63 6f 6e 73  ecoded */.  cons
132e0 74 20 75 38 20 2a 7a 44 61 74 61 3b 20 20 20 2f  t u8 *zData;   /
132f0 2a 20 50 61 72 74 20 6f 66 20 74 68 65 20 72 65  * Part of the re
13300 63 6f 72 64 20 62 65 69 6e 67 20 64 65 63 6f 64  cord being decod
13310 65 64 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 75 38  ed */.  const u8
13320 20 2a 7a 48 64 72 3b 20 20 20 20 2f 2a 20 4e 65   *zHdr;    /* Ne
13330 78 74 20 75 6e 70 61 72 73 65 64 20 62 79 74 65  xt unparsed byte
13340 20 6f 66 20 74 68 65 20 68 65 61 64 65 72 20 2a   of the header *
13350 2f 0a 20 20 63 6f 6e 73 74 20 75 38 20 2a 7a 45  /.  const u8 *zE
13360 6e 64 48 64 72 3b 20 2f 2a 20 50 6f 69 6e 74 65  ndHdr; /* Pointe
13370 72 20 74 6f 20 66 69 72 73 74 20 62 79 74 65 20  r to first byte 
13380 61 66 74 65 72 20 74 68 65 20 68 65 61 64 65 72  after the header
13390 20 2a 2f 0a 20 20 75 36 34 20 6f 66 66 73 65 74   */.  u64 offset
133a0 36 34 3b 20 20 20 20 20 20 2f 2a 20 36 34 2d 62  64;      /* 64-b
133b0 69 74 20 6f 66 66 73 65 74 20 2a 2f 0a 20 20 75  it offset */.  u
133c0 33 32 20 74 3b 20 20 20 20 20 20 20 20 20 20 20  32 t;           
133d0 20 20 2f 2a 20 41 20 74 79 70 65 20 63 6f 64 65    /* A type code
133e0 20 66 72 6f 6d 20 74 68 65 20 72 65 63 6f 72 64   from the record
133f0 20 68 65 61 64 65 72 20 2a 2f 0a 20 20 4d 65 6d   header */.  Mem
13400 20 2a 70 52 65 67 3b 20 20 20 20 20 20 20 20 20   *pReg;         
13410 2f 2a 20 50 73 65 75 64 6f 54 61 62 6c 65 20 69  /* PseudoTable i
13420 6e 70 75 74 20 72 65 67 69 73 74 65 72 20 2a 2f  nput register */
13430 0a 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73  ..  pC = p->apCs
13440 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 32  r[pOp->p1];.  p2
13450 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 0a 20 20 2f   = pOp->p2;..  /
13460 2a 20 49 66 20 74 68 65 20 63 75 72 73 6f 72 20  * If the cursor 
13470 63 61 63 68 65 20 69 73 20 73 74 61 6c 65 20 28  cache is stale (
13480 6d 65 61 6e 69 6e 67 20 69 74 20 69 73 20 6e 6f  meaning it is no
13490 74 20 63 75 72 72 65 6e 74 6c 79 20 70 6f 69 6e  t currently poin
134a0 74 20 61 74 0a 20 20 2a 2a 20 74 68 65 20 63 6f  t at.  ** the co
134b0 72 72 65 63 74 20 72 6f 77 29 20 74 68 65 6e 20  rrect row) then 
134c0 62 72 69 6e 67 20 69 74 20 75 70 2d 74 6f 2d 64  bring it up-to-d
134d0 61 74 65 20 62 79 20 64 6f 69 6e 67 20 74 68 65  ate by doing the
134e0 20 6e 65 63 65 73 73 61 72 79 20 0a 20 20 2a 2a   necessary .  **
134f0 20 42 2d 54 72 65 65 20 73 65 65 6b 2e 20 2a 2f   B-Tree seek. */
13500 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56  .  rc = sqlite3V
13510 64 62 65 43 75 72 73 6f 72 4d 6f 76 65 74 6f 28  dbeCursorMoveto(
13520 26 70 43 2c 20 26 70 32 29 3b 0a 20 20 69 66 28  &pC, &p2);.  if(
13530 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74   rc ) goto abort
13540 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 0a  _due_to_error;..
13550 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
13560 33 3e 30 20 26 26 20 70 4f 70 2d 3e 70 33 3c 3d  3>0 && pOp->p3<=
13570 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e  (p->nMem+1 - p->
13580 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 70 44  nCursor) );.  pD
13590 65 73 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  est = &aMem[pOp-
135a0 3e 70 33 5d 3b 0a 20 20 6d 65 6d 41 62 6f 75 74  >p3];.  memAbout
135b0 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 44 65 73  ToChange(p, pDes
135c0 74 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f  t);.  assert( pO
135d0 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d  p->p1>=0 && pOp-
135e0 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29  >p1<p->nCursor )
135f0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d  ;.  assert( pC!=
13600 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  0 );.  assert( p
13610 32 3c 70 43 2d 3e 6e 46 69 65 6c 64 20 29 3b 0a  2<pC->nField );.
13620 20 20 61 4f 66 66 73 65 74 20 3d 20 70 43 2d 3e    aOffset = pC->
13630 61 4f 66 66 73 65 74 3b 0a 20 20 61 73 73 65 72  aOffset;.  asser
13640 74 28 20 70 43 2d 3e 65 43 75 72 54 79 70 65 21  t( pC->eCurType!
13650 3d 43 55 52 54 59 50 45 5f 56 54 41 42 20 29 3b  =CURTYPE_VTAB );
13660 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 65  .  assert( pC->e
13670 43 75 72 54 79 70 65 21 3d 43 55 52 54 59 50 45  CurType!=CURTYPE
13680 5f 50 53 45 55 44 4f 20 7c 7c 20 70 43 2d 3e 6e  _PSEUDO || pC->n
13690 75 6c 6c 52 6f 77 20 29 3b 0a 20 20 61 73 73 65  ullRow );.  asse
136a0 72 74 28 20 70 43 2d 3e 65 43 75 72 54 79 70 65  rt( pC->eCurType
136b0 21 3d 43 55 52 54 59 50 45 5f 53 4f 52 54 45 52  !=CURTYPE_SORTER
136c0 20 29 3b 0a 0a 20 20 69 66 28 20 70 43 2d 3e 63   );..  if( pC->c
136d0 61 63 68 65 53 74 61 74 75 73 21 3d 70 2d 3e 63  acheStatus!=p->c
136e0 61 63 68 65 43 74 72 20 29 7b 20 20 20 20 20 20  acheCtr ){      
136f0 20 20 20 20 20 20 20 20 20 20 2f 2a 4f 50 54 49            /*OPTI
13700 4d 49 5a 41 54 49 4f 4e 2d 49 46 2d 46 41 4c 53  MIZATION-IF-FALS
13710 45 2a 2f 0a 20 20 20 20 69 66 28 20 70 43 2d 3e  E*/.    if( pC->
13720 6e 75 6c 6c 52 6f 77 20 29 7b 0a 20 20 20 20 20  nullRow ){.     
13730 20 69 66 28 20 70 43 2d 3e 65 43 75 72 54 79 70   if( pC->eCurTyp
13740 65 3d 3d 43 55 52 54 59 50 45 5f 50 53 45 55 44  e==CURTYPE_PSEUD
13750 4f 20 29 7b 0a 20 20 20 20 20 20 20 20 2f 2a 20  O ){.        /* 
13760 46 6f 72 20 74 68 65 20 73 70 65 63 69 61 6c 20  For the special 
13770 63 61 73 65 20 6f 66 20 61 73 20 70 73 65 75 64  case of as pseud
13780 6f 2d 63 75 72 73 6f 72 2c 20 74 68 65 20 73 65  o-cursor, the se
13790 65 6b 52 65 73 75 6c 74 20 66 69 65 6c 64 0a 20  ekResult field. 
137a0 20 20 20 20 20 20 20 2a 2a 20 69 64 65 6e 74 69         ** identi
137b0 66 69 65 73 20 74 68 65 20 72 65 67 69 73 74 65  fies the registe
137c0 72 20 74 68 61 74 20 68 6f 6c 64 73 20 74 68 65  r that holds the
137d0 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 20 20 20   record */.     
137e0 20 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 73     assert( pC->s
137f0 65 65 6b 52 65 73 75 6c 74 3e 30 20 29 3b 0a 20  eekResult>0 );. 
13800 20 20 20 20 20 20 20 70 52 65 67 20 3d 20 26 61         pReg = &a
13810 4d 65 6d 5b 70 43 2d 3e 73 65 65 6b 52 65 73 75  Mem[pC->seekResu
13820 6c 74 5d 3b 0a 20 20 20 20 20 20 20 20 61 73 73  lt];.        ass
13830 65 72 74 28 20 70 52 65 67 2d 3e 66 6c 61 67 73  ert( pReg->flags
13840 20 26 20 4d 45 4d 5f 42 6c 6f 62 20 29 3b 0a 20   & MEM_Blob );. 
13850 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20 6d         assert( m
13860 65 6d 49 73 56 61 6c 69 64 28 70 52 65 67 29 20  emIsValid(pReg) 
13870 29 3b 0a 20 20 20 20 20 20 20 20 70 43 2d 3e 70  );.        pC->p
13880 61 79 6c 6f 61 64 53 69 7a 65 20 3d 20 70 43 2d  ayloadSize = pC-
13890 3e 73 7a 52 6f 77 20 3d 20 70 52 65 67 2d 3e 6e  >szRow = pReg->n
138a0 3b 0a 20 20 20 20 20 20 20 20 70 43 2d 3e 61 52  ;.        pC->aR
138b0 6f 77 20 3d 20 28 75 38 2a 29 70 52 65 67 2d 3e  ow = (u8*)pReg->
138c0 7a 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a  z;.      }else{.
138d0 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
138e0 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 44  dbeMemSetNull(pD
138f0 65 73 74 29 3b 0a 20 20 20 20 20 20 20 20 67 6f  est);.        go
13900 74 6f 20 6f 70 5f 63 6f 6c 75 6d 6e 5f 6f 75 74  to op_column_out
13910 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 65  ;.      }.    }e
13920 6c 73 65 7b 0a 20 20 20 20 20 20 70 43 72 73 72  lse{.      pCrsr
13930 20 3d 20 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f   = pC->uc.pCurso
13940 72 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  r;.      assert(
13950 20 70 43 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43   pC->eCurType==C
13960 55 52 54 59 50 45 5f 42 54 52 45 45 20 29 3b 0a  URTYPE_BTREE );.
13970 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70 43        assert( pC
13980 72 73 72 20 29 3b 0a 20 20 20 20 20 20 61 73 73  rsr );.      ass
13990 65 72 74 28 20 73 71 6c 69 74 65 33 42 74 72 65  ert( sqlite3Btre
139a0 65 43 75 72 73 6f 72 49 73 56 61 6c 69 64 28 70  eCursorIsValid(p
139b0 43 72 73 72 29 20 29 3b 0a 20 20 20 20 20 20 70  Crsr) );.      p
139c0 43 2d 3e 70 61 79 6c 6f 61 64 53 69 7a 65 20 3d  C->payloadSize =
139d0 20 73 71 6c 69 74 65 33 42 74 72 65 65 50 61 79   sqlite3BtreePay
139e0 6c 6f 61 64 53 69 7a 65 28 70 43 72 73 72 29 3b  loadSize(pCrsr);
139f0 0a 20 20 20 20 20 20 70 43 2d 3e 61 52 6f 77 20  .      pC->aRow 
13a00 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 50 61  = sqlite3BtreePa
13a10 79 6c 6f 61 64 46 65 74 63 68 28 70 43 72 73 72  yloadFetch(pCrsr
13a20 2c 20 26 70 43 2d 3e 73 7a 52 6f 77 29 3b 0a 20  , &pC->szRow);. 
13a30 20 20 20 20 20 61 73 73 65 72 74 28 20 70 43 2d       assert( pC-
13a40 3e 73 7a 52 6f 77 3c 3d 70 43 2d 3e 70 61 79 6c  >szRow<=pC->payl
13a50 6f 61 64 53 69 7a 65 20 29 3b 0a 20 20 20 20 20  oadSize );.     
13a60 20 61 73 73 65 72 74 28 20 70 43 2d 3e 73 7a 52   assert( pC->szR
13a70 6f 77 3c 3d 36 35 35 33 36 20 29 3b 20 20 2f 2a  ow<=65536 );  /*
13a80 20 4d 61 78 69 6d 75 6d 20 70 61 67 65 20 73 69   Maximum page si
13a90 7a 65 20 69 73 20 36 34 4b 69 42 20 2a 2f 0a 20  ze is 64KiB */. 
13aa0 20 20 20 20 20 69 66 28 20 70 43 2d 3e 70 61 79       if( pC->pay
13ab0 6c 6f 61 64 53 69 7a 65 20 3e 20 28 75 33 32 29  loadSize > (u32)
13ac0 64 62 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c 49 54  db->aLimit[SQLIT
13ad0 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54 48 5d 20  E_LIMIT_LENGTH] 
13ae0 29 7b 0a 20 20 20 20 20 20 20 20 67 6f 74 6f 20  ){.        goto 
13af0 74 6f 6f 5f 62 69 67 3b 0a 20 20 20 20 20 20 7d  too_big;.      }
13b00 0a 20 20 20 20 7d 0a 20 20 20 20 70 43 2d 3e 63  .    }.    pC->c
13b10 61 63 68 65 53 74 61 74 75 73 20 3d 20 70 2d 3e  acheStatus = p->
13b20 63 61 63 68 65 43 74 72 3b 0a 20 20 20 20 70 43  cacheCtr;.    pC
13b30 2d 3e 69 48 64 72 4f 66 66 73 65 74 20 3d 20 67  ->iHdrOffset = g
13b40 65 74 56 61 72 69 6e 74 33 32 28 70 43 2d 3e 61  etVarint32(pC->a
13b50 52 6f 77 2c 20 61 4f 66 66 73 65 74 5b 30 5d 29  Row, aOffset[0])
13b60 3b 0a 20 20 20 20 70 43 2d 3e 6e 48 64 72 50 61  ;.    pC->nHdrPa
13b70 72 73 65 64 20 3d 20 30 3b 0a 0a 0a 20 20 20 20  rsed = 0;...    
13b80 69 66 28 20 70 43 2d 3e 73 7a 52 6f 77 3c 61 4f  if( pC->szRow<aO
13b90 66 66 73 65 74 5b 30 5d 20 29 7b 20 20 20 20 20  ffset[0] ){     
13ba0 20 2f 2a 4f 50 54 49 4d 49 5a 41 54 49 4f 4e 2d   /*OPTIMIZATION-
13bb0 49 46 2d 46 41 4c 53 45 2a 2f 0a 20 20 20 20 20  IF-FALSE*/.     
13bc0 20 2f 2a 20 70 43 2d 3e 61 52 6f 77 20 64 6f 65   /* pC->aRow doe
13bd0 73 20 6e 6f 74 20 68 61 76 65 20 74 6f 20 68 6f  s not have to ho
13be0 6c 64 20 74 68 65 20 65 6e 74 69 72 65 20 72 6f  ld the entire ro
13bf0 77 2c 20 62 75 74 20 69 74 20 64 6f 65 73 20 61  w, but it does a
13c00 74 20 6c 65 61 73 74 0a 20 20 20 20 20 20 2a 2a  t least.      **
13c10 20 6e 65 65 64 20 74 6f 20 63 6f 76 65 72 20 74   need to cover t
13c20 68 65 20 68 65 61 64 65 72 20 6f 66 20 74 68 65  he header of the
13c30 20 72 65 63 6f 72 64 2e 20 20 49 66 20 70 43 2d   record.  If pC-
13c40 3e 61 52 6f 77 20 64 6f 65 73 20 6e 6f 74 20 63  >aRow does not c
13c50 6f 6e 74 61 69 6e 0a 20 20 20 20 20 20 2a 2a 20  ontain.      ** 
13c60 74 68 65 20 63 6f 6d 70 6c 65 74 65 20 68 65 61  the complete hea
13c70 64 65 72 2c 20 74 68 65 6e 20 73 65 74 20 69 74  der, then set it
13c80 20 74 6f 20 7a 65 72 6f 2c 20 66 6f 72 63 69 6e   to zero, forcin
13c90 67 20 74 68 65 20 68 65 61 64 65 72 20 74 6f 20  g the header to 
13ca0 62 65 0a 20 20 20 20 20 20 2a 2a 20 64 79 6e 61  be.      ** dyna
13cb0 6d 69 63 61 6c 6c 79 20 61 6c 6c 6f 63 61 74 65  mically allocate
13cc0 64 2e 20 2a 2f 0a 20 20 20 20 20 20 70 43 2d 3e  d. */.      pC->
13cd0 61 52 6f 77 20 3d 20 30 3b 0a 20 20 20 20 20 20  aRow = 0;.      
13ce0 70 43 2d 3e 73 7a 52 6f 77 20 3d 20 30 3b 0a 0a  pC->szRow = 0;..
13cf0 20 20 20 20 20 20 2f 2a 20 4d 61 6b 65 20 73 75        /* Make su
13d00 72 65 20 61 20 63 6f 72 72 75 70 74 20 64 61 74  re a corrupt dat
13d10 61 62 61 73 65 20 68 61 73 20 6e 6f 74 20 67 69  abase has not gi
13d20 76 65 6e 20 75 73 20 61 6e 20 6f 76 65 72 73 69  ven us an oversi
13d30 7a 65 20 68 65 61 64 65 72 2e 0a 20 20 20 20 20  ze header..     
13d40 20 2a 2a 20 44 6f 20 74 68 69 73 20 6e 6f 77 20   ** Do this now 
13d50 74 6f 20 61 76 6f 69 64 20 61 6e 20 6f 76 65 72  to avoid an over
13d60 73 69 7a 65 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f  size memory allo
13d70 63 61 74 69 6f 6e 2e 0a 20 20 20 20 20 20 2a 2a  cation..      **
13d80 0a 20 20 20 20 20 20 2a 2a 20 54 79 70 65 20 65  .      ** Type e
13d90 6e 74 72 69 65 73 20 63 61 6e 20 62 65 20 62 65  ntries can be be
13da0 74 77 65 65 6e 20 31 20 61 6e 64 20 35 20 62 79  tween 1 and 5 by
13db0 74 65 73 20 65 61 63 68 2e 20 20 42 75 74 20 34  tes each.  But 4
13dc0 20 61 6e 64 20 35 20 62 79 74 65 0a 20 20 20 20   and 5 byte.    
13dd0 20 20 2a 2a 20 74 79 70 65 73 20 75 73 65 20 73    ** types use s
13de0 6f 20 6d 75 63 68 20 64 61 74 61 20 73 70 61 63  o much data spac
13df0 65 20 74 68 61 74 20 74 68 65 72 65 20 63 61 6e  e that there can
13e00 20 6f 6e 6c 79 20 62 65 20 34 30 39 36 20 61 6e   only be 4096 an
13e10 64 20 33 32 20 6f 66 0a 20 20 20 20 20 20 2a 2a  d 32 of.      **
13e20 20 74 68 65 6d 2c 20 72 65 73 70 65 63 74 69 76   them, respectiv
13e30 65 6c 79 2e 20 20 53 6f 20 74 68 65 20 6d 61 78  ely.  So the max
13e40 69 6d 75 6d 20 68 65 61 64 65 72 20 6c 65 6e 67  imum header leng
13e50 74 68 20 72 65 73 75 6c 74 73 20 66 72 6f 6d 20  th results from 
13e60 61 0a 20 20 20 20 20 20 2a 2a 20 33 2d 62 79 74  a.      ** 3-byt
13e70 65 20 74 79 70 65 20 66 6f 72 20 65 61 63 68 20  e type for each 
13e80 6f 66 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 6f  of the maximum o
13e90 66 20 33 32 37 36 38 20 63 6f 6c 75 6d 6e 73 20  f 32768 columns 
13ea0 70 6c 75 73 20 74 68 72 65 65 0a 20 20 20 20 20  plus three.     
13eb0 20 2a 2a 20 65 78 74 72 61 20 62 79 74 65 73 20   ** extra bytes 
13ec0 66 6f 72 20 74 68 65 20 68 65 61 64 65 72 20 6c  for the header l
13ed0 65 6e 67 74 68 20 69 74 73 65 6c 66 2e 20 20 33  ength itself.  3
13ee0 32 37 36 38 2a 33 20 2b 20 33 20 3d 20 39 38 33  2768*3 + 3 = 983
13ef0 30 37 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20  07..      */.   
13f00 20 20 20 69 66 28 20 61 4f 66 66 73 65 74 5b 30     if( aOffset[0
13f10 5d 20 3e 20 39 38 33 30 37 20 7c 7c 20 61 4f 66  ] > 98307 || aOf
13f20 66 73 65 74 5b 30 5d 20 3e 20 70 43 2d 3e 70 61  fset[0] > pC->pa
13f30 79 6c 6f 61 64 53 69 7a 65 20 29 7b 0a 20 20 20  yloadSize ){.   
13f40 20 20 20 20 20 67 6f 74 6f 20 6f 70 5f 63 6f 6c       goto op_col
13f50 75 6d 6e 5f 63 6f 72 72 75 70 74 3b 0a 20 20 20  umn_corrupt;.   
13f60 20 20 20 7d 0a 20 20 20 20 7d 65 6c 73 65 7b 0a     }.    }else{.
13f70 20 20 20 20 20 20 2f 2a 20 54 68 69 73 20 69 73        /* This is
13f80 20 61 6e 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e   an optimization
13f90 2e 20 20 42 79 20 73 6b 69 70 70 69 6e 67 20 6f  .  By skipping o
13fa0 76 65 72 20 74 68 65 20 66 69 72 73 74 20 66 65  ver the first fe
13fb0 77 20 74 65 73 74 73 0a 20 20 20 20 20 20 2a 2a  w tests.      **
13fc0 20 28 65 78 3a 20 70 43 2d 3e 6e 48 64 72 50 61   (ex: pC->nHdrPa
13fd0 72 73 65 64 3c 3d 70 32 29 20 69 6e 20 74 68 65  rsed<=p2) in the
13fe0 20 6e 65 78 74 20 73 65 63 74 69 6f 6e 2c 20 77   next section, w
13ff0 65 20 61 63 68 69 65 76 65 20 61 0a 20 20 20 20  e achieve a.    
14000 20 20 2a 2a 20 6d 65 61 73 75 72 61 62 6c 65 20    ** measurable 
14010 70 65 72 66 6f 72 6d 61 6e 63 65 20 67 61 69 6e  performance gain
14020 2e 0a 20 20 20 20 20 20 2a 2a 0a 20 20 20 20 20  ..      **.     
14030 20 2a 2a 20 54 68 69 73 20 62 72 61 6e 63 68 20   ** This branch 
14040 69 73 20 74 61 6b 65 6e 20 65 76 65 6e 20 69 66  is taken even if
14050 20 61 4f 66 66 73 65 74 5b 30 5d 3d 3d 30 2e 20   aOffset[0]==0. 
14060 20 53 75 63 68 20 61 20 72 65 63 6f 72 64 20 69   Such a record i
14070 73 20 6e 65 76 65 72 0a 20 20 20 20 20 20 2a 2a  s never.      **
14080 20 67 65 6e 65 72 61 74 65 64 20 62 79 20 53 51   generated by SQ
14090 4c 69 74 65 2c 20 61 6e 64 20 63 6f 75 6c 64 20  Lite, and could 
140a0 62 65 20 63 6f 6e 73 69 64 65 72 65 64 20 63 6f  be considered co
140b0 72 72 75 70 74 69 6f 6e 2c 20 62 75 74 20 77 65  rruption, but we
140c0 0a 20 20 20 20 20 20 2a 2a 20 61 63 63 65 70 74  .      ** accept
140d0 20 69 74 20 66 6f 72 20 68 69 73 74 6f 72 69 63   it for historic
140e0 61 6c 20 72 65 61 73 6f 6e 73 2e 20 20 57 68 65  al reasons.  Whe
140f0 6e 20 61 4f 66 66 73 65 74 5b 30 5d 3d 3d 30 2c  n aOffset[0]==0,
14100 20 74 68 65 20 63 6f 64 65 20 74 68 69 73 0a 20   the code this. 
14110 20 20 20 20 20 2a 2a 20 62 72 61 6e 63 68 20 6a       ** branch j
14120 75 6d 70 73 20 74 6f 20 72 65 61 64 73 20 70 61  umps to reads pa
14130 73 74 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68  st the end of th
14140 65 20 72 65 63 6f 72 64 2c 20 62 75 74 20 6e 65  e record, but ne
14150 76 65 72 20 6d 6f 72 65 0a 20 20 20 20 20 20 2a  ver more.      *
14160 2a 20 74 68 61 6e 20 61 20 66 65 77 20 62 79 74  * than a few byt
14170 65 73 2e 20 20 45 76 65 6e 20 69 66 20 74 68 65  es.  Even if the
14180 20 72 65 63 6f 72 64 20 6f 63 63 75 72 73 20 61   record occurs a
14190 74 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68 65  t the end of the
141a0 20 70 61 67 65 0a 20 20 20 20 20 20 2a 2a 20 63   page.      ** c
141b0 6f 6e 74 65 6e 74 20 61 72 65 61 2c 20 74 68 65  ontent area, the
141c0 20 22 70 61 67 65 20 68 65 61 64 65 72 22 20 63   "page header" c
141d0 6f 6d 65 73 20 61 66 74 65 72 20 74 68 65 20 70  omes after the p
141e0 61 67 65 20 63 6f 6e 74 65 6e 74 20 61 6e 64 20  age content and 
141f0 73 6f 0a 20 20 20 20 20 20 2a 2a 20 74 68 69 73  so.      ** this
14200 20 6f 76 65 72 72 65 61 64 20 69 73 20 68 61 72   overread is har
14210 6d 6c 65 73 73 2e 20 20 53 69 6d 69 6c 61 72 20  mless.  Similar 
14220 6f 76 65 72 72 65 61 64 73 20 63 61 6e 20 6f 63  overreads can oc
14230 63 75 72 20 66 6f 72 20 61 20 63 6f 72 72 75 70  cur for a corrup
14240 74 0a 20 20 20 20 20 20 2a 2a 20 64 61 74 61 62  t.      ** datab
14250 61 73 65 20 66 69 6c 65 2e 0a 20 20 20 20 20 20  ase file..      
14260 2a 2f 0a 20 20 20 20 20 20 7a 44 61 74 61 20 3d  */.      zData =
14270 20 70 43 2d 3e 61 52 6f 77 3b 0a 20 20 20 20 20   pC->aRow;.     
14280 20 61 73 73 65 72 74 28 20 70 43 2d 3e 6e 48 64   assert( pC->nHd
14290 72 50 61 72 73 65 64 3c 3d 70 32 20 29 3b 20 20  rParsed<=p2 );  
142a0 20 20 20 20 20 20 20 2f 2a 20 43 6f 6e 64 69 74         /* Condit
142b0 69 6f 6e 61 6c 20 73 6b 69 70 70 65 64 20 2a 2f  ional skipped */
142c0 0a 20 20 20 20 20 20 74 65 73 74 63 61 73 65 28  .      testcase(
142d0 20 61 4f 66 66 73 65 74 5b 30 5d 3d 3d 30 20 29   aOffset[0]==0 )
142e0 3b 0a 20 20 20 20 20 20 67 6f 74 6f 20 6f 70 5f  ;.      goto op_
142f0 63 6f 6c 75 6d 6e 5f 72 65 61 64 5f 68 65 61 64  column_read_head
14300 65 72 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 0a 20  er;.    }.  }.. 
14310 20 2f 2a 20 4d 61 6b 65 20 73 75 72 65 20 61 74   /* Make sure at
14320 20 6c 65 61 73 74 20 74 68 65 20 66 69 72 73 74   least the first
14330 20 70 32 2b 31 20 65 6e 74 72 69 65 73 20 6f 66   p2+1 entries of
14340 20 74 68 65 20 68 65 61 64 65 72 20 68 61 76 65   the header have
14350 20 62 65 65 6e 0a 20 20 2a 2a 20 70 61 72 73 65   been.  ** parse
14360 64 20 61 6e 64 20 76 61 6c 69 64 20 69 6e 66 6f  d and valid info
14370 72 6d 61 74 69 6f 6e 20 69 73 20 69 6e 20 61 4f  rmation is in aO
14380 66 66 73 65 74 5b 5d 20 61 6e 64 20 70 43 2d 3e  ffset[] and pC->
14390 61 54 79 70 65 5b 5d 2e 0a 20 20 2a 2f 0a 20 20  aType[]..  */.  
143a0 69 66 28 20 70 43 2d 3e 6e 48 64 72 50 61 72 73  if( pC->nHdrPars
143b0 65 64 3c 3d 70 32 20 29 7b 0a 20 20 20 20 2f 2a  ed<=p2 ){.    /*
143c0 20 49 66 20 74 68 65 72 65 20 69 73 20 6d 6f 72   If there is mor
143d0 65 20 68 65 61 64 65 72 20 61 76 61 69 6c 61 62  e header availab
143e0 6c 65 20 66 6f 72 20 70 61 72 73 69 6e 67 20 69  le for parsing i
143f0 6e 20 74 68 65 20 72 65 63 6f 72 64 2c 20 74 72  n the record, tr
14400 79 0a 20 20 20 20 2a 2a 20 74 6f 20 65 78 74 72  y.    ** to extr
14410 61 63 74 20 61 64 64 69 74 69 6f 6e 61 6c 20 66  act additional f
14420 69 65 6c 64 73 20 75 70 20 74 68 72 6f 75 67 68  ields up through
14430 20 74 68 65 20 70 32 2b 31 2d 74 68 20 66 69 65   the p2+1-th fie
14440 6c 64 20 0a 20 20 20 20 2a 2f 0a 20 20 20 20 69  ld .    */.    i
14450 66 28 20 70 43 2d 3e 69 48 64 72 4f 66 66 73 65  f( pC->iHdrOffse
14460 74 3c 61 4f 66 66 73 65 74 5b 30 5d 20 29 7b 0a  t<aOffset[0] ){.
14470 20 20 20 20 20 20 2f 2a 20 4d 61 6b 65 20 73 75        /* Make su
14480 72 65 20 7a 44 61 74 61 20 70 6f 69 6e 74 73 20  re zData points 
14490 74 6f 20 65 6e 6f 75 67 68 20 6f 66 20 74 68 65  to enough of the
144a0 20 72 65 63 6f 72 64 20 74 6f 20 63 6f 76 65 72   record to cover
144b0 20 74 68 65 20 68 65 61 64 65 72 2e 20 2a 2f 0a   the header. */.
144c0 20 20 20 20 20 20 69 66 28 20 70 43 2d 3e 61 52        if( pC->aR
144d0 6f 77 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20  ow==0 ){.       
144e0 20 6d 65 6d 73 65 74 28 26 73 4d 65 6d 2c 20 30   memset(&sMem, 0
144f0 2c 20 73 69 7a 65 6f 66 28 73 4d 65 6d 29 29 3b  , sizeof(sMem));
14500 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20 73 71  .        rc = sq
14510 6c 69 74 65 33 56 64 62 65 4d 65 6d 46 72 6f 6d  lite3VdbeMemFrom
14520 42 74 72 65 65 28 70 43 2d 3e 75 63 2e 70 43 75  Btree(pC->uc.pCu
14530 72 73 6f 72 2c 20 30 2c 20 61 4f 66 66 73 65 74  rsor, 0, aOffset
14540 5b 30 5d 2c 20 26 73 4d 65 6d 29 3b 0a 20 20 20  [0], &sMem);.   
14550 20 20 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c       if( rc!=SQL
14560 49 54 45 5f 4f 4b 20 29 20 67 6f 74 6f 20 61 62  ITE_OK ) goto ab
14570 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
14580 3b 0a 20 20 20 20 20 20 20 20 7a 44 61 74 61 20  ;.        zData 
14590 3d 20 28 75 38 2a 29 73 4d 65 6d 2e 7a 3b 0a 20  = (u8*)sMem.z;. 
145a0 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
145b0 20 20 20 20 7a 44 61 74 61 20 3d 20 70 43 2d 3e      zData = pC->
145c0 61 52 6f 77 3b 0a 20 20 20 20 20 20 7d 0a 20 20  aRow;.      }.  
145d0 0a 20 20 20 20 20 20 2f 2a 20 46 69 6c 6c 20 69  .      /* Fill i
145e0 6e 20 70 43 2d 3e 61 54 79 70 65 5b 69 5d 20 61  n pC->aType[i] a
145f0 6e 64 20 61 4f 66 66 73 65 74 5b 69 5d 20 76 61  nd aOffset[i] va
14600 6c 75 65 73 20 74 68 72 6f 75 67 68 20 74 68 65  lues through the
14610 20 70 32 2d 74 68 20 66 69 65 6c 64 2e 20 2a 2f   p2-th field. */
14620 0a 20 20 20 20 6f 70 5f 63 6f 6c 75 6d 6e 5f 72  .    op_column_r
14630 65 61 64 5f 68 65 61 64 65 72 3a 0a 20 20 20 20  ead_header:.    
14640 20 20 69 20 3d 20 70 43 2d 3e 6e 48 64 72 50 61    i = pC->nHdrPa
14650 72 73 65 64 3b 0a 20 20 20 20 20 20 6f 66 66 73  rsed;.      offs
14660 65 74 36 34 20 3d 20 61 4f 66 66 73 65 74 5b 69  et64 = aOffset[i
14670 5d 3b 0a 20 20 20 20 20 20 7a 48 64 72 20 3d 20  ];.      zHdr = 
14680 7a 44 61 74 61 20 2b 20 70 43 2d 3e 69 48 64 72  zData + pC->iHdr
14690 4f 66 66 73 65 74 3b 0a 20 20 20 20 20 20 7a 45  Offset;.      zE
146a0 6e 64 48 64 72 20 3d 20 7a 44 61 74 61 20 2b 20  ndHdr = zData + 
146b0 61 4f 66 66 73 65 74 5b 30 5d 3b 0a 20 20 20 20  aOffset[0];.    
146c0 20 20 74 65 73 74 63 61 73 65 28 20 7a 48 64 72    testcase( zHdr
146d0 3e 3d 7a 45 6e 64 48 64 72 20 29 3b 0a 20 20 20  >=zEndHdr );.   
146e0 20 20 20 64 6f 7b 0a 20 20 20 20 20 20 20 20 69     do{.        i
146f0 66 28 20 28 74 20 3d 20 7a 48 64 72 5b 30 5d 29  f( (t = zHdr[0])
14700 3c 30 78 38 30 20 29 7b 0a 20 20 20 20 20 20 20  <0x80 ){.       
14710 20 20 20 7a 48 64 72 2b 2b 3b 0a 20 20 20 20 20     zHdr++;.     
14720 20 20 20 20 20 6f 66 66 73 65 74 36 34 20 2b 3d       offset64 +=
14730 20 73 71 6c 69 74 65 33 56 64 62 65 4f 6e 65 42   sqlite3VdbeOneB
14740 79 74 65 53 65 72 69 61 6c 54 79 70 65 4c 65 6e  yteSerialTypeLen
14750 28 74 29 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c  (t);.        }el
14760 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20 7a 48  se{.          zH
14770 64 72 20 2b 3d 20 73 71 6c 69 74 65 33 47 65 74  dr += sqlite3Get
14780 56 61 72 69 6e 74 33 32 28 7a 48 64 72 2c 20 26  Varint32(zHdr, &
14790 74 29 3b 0a 20 20 20 20 20 20 20 20 20 20 6f 66  t);.          of
147a0 66 73 65 74 36 34 20 2b 3d 20 73 71 6c 69 74 65  fset64 += sqlite
147b0 33 56 64 62 65 53 65 72 69 61 6c 54 79 70 65 4c  3VdbeSerialTypeL
147c0 65 6e 28 74 29 3b 0a 20 20 20 20 20 20 20 20 7d  en(t);.        }
147d0 0a 20 20 20 20 20 20 20 20 70 43 2d 3e 61 54 79  .        pC->aTy
147e0 70 65 5b 69 2b 2b 5d 20 3d 20 74 3b 0a 20 20 20  pe[i++] = t;.   
147f0 20 20 20 20 20 61 4f 66 66 73 65 74 5b 69 5d 20       aOffset[i] 
14800 3d 20 28 75 33 32 29 28 6f 66 66 73 65 74 36 34  = (u32)(offset64
14810 20 26 20 30 78 66 66 66 66 66 66 66 66 29 3b 0a   & 0xffffffff);.
14820 20 20 20 20 20 20 7d 77 68 69 6c 65 28 20 69 3c        }while( i<
14830 3d 70 32 20 26 26 20 7a 48 64 72 3c 7a 45 6e 64  =p2 && zHdr<zEnd
14840 48 64 72 20 29 3b 0a 0a 20 20 20 20 20 20 2f 2a  Hdr );..      /*
14850 20 54 68 65 20 72 65 63 6f 72 64 20 69 73 20 63   The record is c
14860 6f 72 72 75 70 74 20 69 66 20 61 6e 79 20 6f 66  orrupt if any of
14870 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 61   the following a
14880 72 65 20 74 72 75 65 3a 0a 20 20 20 20 20 20 2a  re true:.      *
14890 2a 20 28 31 29 20 74 68 65 20 62 79 74 65 73 20  * (1) the bytes 
148a0 6f 66 20 74 68 65 20 68 65 61 64 65 72 20 65 78  of the header ex
148b0 74 65 6e 64 20 70 61 73 74 20 74 68 65 20 64 65  tend past the de
148c0 63 6c 61 72 65 64 20 68 65 61 64 65 72 20 73 69  clared header si
148d0 7a 65 0a 20 20 20 20 20 20 2a 2a 20 28 32 29 20  ze.      ** (2) 
148e0 74 68 65 20 65 6e 74 69 72 65 20 68 65 61 64 65  the entire heade
148f0 72 20 77 61 73 20 75 73 65 64 20 62 75 74 20 6e  r was used but n
14900 6f 74 20 61 6c 6c 20 64 61 74 61 20 77 61 73 20  ot all data was 
14910 75 73 65 64 0a 20 20 20 20 20 20 2a 2a 20 28 33  used.      ** (3
14920 29 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68 65  ) the end of the
14930 20 64 61 74 61 20 65 78 74 65 6e 64 73 20 62 65   data extends be
14940 79 6f 6e 64 20 74 68 65 20 65 6e 64 20 6f 66 20  yond the end of 
14950 74 68 65 20 72 65 63 6f 72 64 2e 0a 20 20 20 20  the record..    
14960 20 20 2a 2f 0a 20 20 20 20 20 20 69 66 28 20 28    */.      if( (
14970 7a 48 64 72 3e 3d 7a 45 6e 64 48 64 72 20 26 26  zHdr>=zEndHdr &&
14980 20 28 7a 48 64 72 3e 7a 45 6e 64 48 64 72 20 7c   (zHdr>zEndHdr |
14990 7c 20 6f 66 66 73 65 74 36 34 21 3d 70 43 2d 3e  | offset64!=pC->
149a0 70 61 79 6c 6f 61 64 53 69 7a 65 29 29 0a 20 20  payloadSize)).  
149b0 20 20 20 20 20 7c 7c 20 28 6f 66 66 73 65 74 36       || (offset6
149c0 34 20 3e 20 70 43 2d 3e 70 61 79 6c 6f 61 64 53  4 > pC->payloadS
149d0 69 7a 65 29 0a 20 20 20 20 20 20 29 7b 0a 20 20  ize).      ){.  
149e0 20 20 20 20 20 20 69 66 28 20 61 4f 66 66 73 65        if( aOffse
149f0 74 5b 30 5d 3d 3d 30 20 29 7b 0a 20 20 20 20 20  t[0]==0 ){.     
14a00 20 20 20 20 20 69 20 3d 20 30 3b 0a 20 20 20 20       i = 0;.    
14a10 20 20 20 20 20 20 7a 48 64 72 20 3d 20 7a 45 6e        zHdr = zEn
14a20 64 48 64 72 3b 0a 20 20 20 20 20 20 20 20 7d 65  dHdr;.        }e
14a30 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20 69  lse{.          i
14a40 66 28 20 70 43 2d 3e 61 52 6f 77 3d 3d 30 20 29  f( pC->aRow==0 )
14a50 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 52   sqlite3VdbeMemR
14a60 65 6c 65 61 73 65 28 26 73 4d 65 6d 29 3b 0a 20  elease(&sMem);. 
14a70 20 20 20 20 20 20 20 20 20 67 6f 74 6f 20 6f 70           goto op
14a80 5f 63 6f 6c 75 6d 6e 5f 63 6f 72 72 75 70 74 3b  _column_corrupt;
14a90 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20  .        }.     
14aa0 20 7d 0a 0a 20 20 20 20 20 20 70 43 2d 3e 6e 48   }..      pC->nH
14ab0 64 72 50 61 72 73 65 64 20 3d 20 69 3b 0a 20 20  drParsed = i;.  
14ac0 20 20 20 20 70 43 2d 3e 69 48 64 72 4f 66 66 73      pC->iHdrOffs
14ad0 65 74 20 3d 20 28 75 33 32 29 28 7a 48 64 72 20  et = (u32)(zHdr 
14ae0 2d 20 7a 44 61 74 61 29 3b 0a 20 20 20 20 20 20  - zData);.      
14af0 69 66 28 20 70 43 2d 3e 61 52 6f 77 3d 3d 30 20  if( pC->aRow==0 
14b00 29 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d  ) sqlite3VdbeMem
14b10 52 65 6c 65 61 73 65 28 26 73 4d 65 6d 29 3b 0a  Release(&sMem);.
14b20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
14b30 20 74 20 3d 20 30 3b 0a 20 20 20 20 7d 0a 0a 20   t = 0;.    }.. 
14b40 20 20 20 2f 2a 20 49 66 20 61 66 74 65 72 20 74     /* If after t
14b50 72 79 69 6e 67 20 74 6f 20 65 78 74 72 61 63 74  rying to extract
14b60 20 6e 65 77 20 65 6e 74 72 69 65 73 20 66 72 6f   new entries fro
14b70 6d 20 74 68 65 20 68 65 61 64 65 72 2c 20 6e 48  m the header, nH
14b80 64 72 50 61 72 73 65 64 20 69 73 0a 20 20 20 20  drParsed is.    
14b90 2a 2a 20 73 74 69 6c 6c 20 6e 6f 74 20 75 70 20  ** still not up 
14ba0 74 6f 20 70 32 2c 20 74 68 61 74 20 6d 65 61 6e  to p2, that mean
14bb0 73 20 74 68 61 74 20 74 68 65 20 72 65 63 6f 72  s that the recor
14bc0 64 20 68 61 73 20 66 65 77 65 72 20 74 68 61 6e  d has fewer than
14bd0 20 70 32 0a 20 20 20 20 2a 2a 20 63 6f 6c 75 6d   p2.    ** colum
14be0 6e 73 2e 20 20 53 6f 20 74 68 65 20 72 65 73 75  ns.  So the resu
14bf0 6c 74 20 77 69 6c 6c 20 62 65 20 65 69 74 68 65  lt will be eithe
14c00 72 20 74 68 65 20 64 65 66 61 75 6c 74 20 76 61  r the default va
14c10 6c 75 65 20 6f 72 20 61 20 4e 55 4c 4c 2e 0a 20  lue or a NULL.. 
14c20 20 20 20 2a 2f 0a 20 20 20 20 69 66 28 20 70 43     */.    if( pC
14c30 2d 3e 6e 48 64 72 50 61 72 73 65 64 3c 3d 70 32  ->nHdrParsed<=p2
14c40 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20 70 4f   ){.      if( pO
14c50 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 4d 45  p->p4type==P4_ME
14c60 4d 20 29 7b 0a 20 20 20 20 20 20 20 20 73 71 6c  M ){.        sql
14c70 69 74 65 33 56 64 62 65 4d 65 6d 53 68 61 6c 6c  ite3VdbeMemShall
14c80 6f 77 43 6f 70 79 28 70 44 65 73 74 2c 20 70 4f  owCopy(pDest, pO
14c90 70 2d 3e 70 34 2e 70 4d 65 6d 2c 20 4d 45 4d 5f  p->p4.pMem, MEM_
14ca0 53 74 61 74 69 63 29 3b 0a 20 20 20 20 20 20 7d  Static);.      }
14cb0 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 73 71  else{.        sq
14cc0 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e  lite3VdbeMemSetN
14cd0 75 6c 6c 28 70 44 65 73 74 29 3b 0a 20 20 20 20  ull(pDest);.    
14ce0 20 20 7d 0a 20 20 20 20 20 20 67 6f 74 6f 20 6f    }.      goto o
14cf0 70 5f 63 6f 6c 75 6d 6e 5f 6f 75 74 3b 0a 20 20  p_column_out;.  
14d00 20 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20    }.  }else{.   
14d10 20 74 20 3d 20 70 43 2d 3e 61 54 79 70 65 5b 70   t = pC->aType[p
14d20 32 5d 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 45 78  2];.  }..  /* Ex
14d30 74 72 61 63 74 20 74 68 65 20 63 6f 6e 74 65 6e  tract the conten
14d40 74 20 66 6f 72 20 74 68 65 20 70 32 2b 31 2d 74  t for the p2+1-t
14d50 68 20 63 6f 6c 75 6d 6e 2e 20 20 43 6f 6e 74 72  h column.  Contr
14d60 6f 6c 20 63 61 6e 20 6f 6e 6c 79 0a 20 20 2a 2a  ol can only.  **
14d70 20 72 65 61 63 68 20 74 68 69 73 20 70 6f 69 6e   reach this poin
14d80 74 20 69 66 20 61 4f 66 66 73 65 74 5b 70 32 5d  t if aOffset[p2]
14d90 2c 20 61 4f 66 66 73 65 74 5b 70 32 2b 31 5d 2c  , aOffset[p2+1],
14da0 20 61 6e 64 20 70 43 2d 3e 61 54 79 70 65 5b 70   and pC->aType[p
14db0 32 5d 20 61 72 65 0a 20 20 2a 2a 20 61 6c 6c 20  2] are.  ** all 
14dc0 76 61 6c 69 64 2e 0a 20 20 2a 2f 0a 20 20 61 73  valid..  */.  as
14dd0 73 65 72 74 28 20 70 32 3c 70 43 2d 3e 6e 48 64  sert( p2<pC->nHd
14de0 72 50 61 72 73 65 64 20 29 3b 0a 20 20 61 73 73  rParsed );.  ass
14df0 65 72 74 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f  ert( rc==SQLITE_
14e00 4f 4b 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  OK );.  assert( 
14e10 73 71 6c 69 74 65 33 56 64 62 65 43 68 65 63 6b  sqlite3VdbeCheck
14e20 4d 65 6d 49 6e 76 61 72 69 61 6e 74 73 28 70 44  MemInvariants(pD
14e30 65 73 74 29 20 29 3b 0a 20 20 69 66 28 20 56 64  est) );.  if( Vd
14e40 62 65 4d 65 6d 44 79 6e 61 6d 69 63 28 70 44 65  beMemDynamic(pDe
14e50 73 74 29 20 29 7b 0a 20 20 20 20 73 71 6c 69 74  st) ){.    sqlit
14e60 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c  e3VdbeMemSetNull
14e70 28 70 44 65 73 74 29 3b 0a 20 20 7d 0a 20 20 61  (pDest);.  }.  a
14e80 73 73 65 72 74 28 20 74 3d 3d 70 43 2d 3e 61 54  ssert( t==pC->aT
14e90 79 70 65 5b 70 32 5d 20 29 3b 0a 20 20 69 66 28  ype[p2] );.  if(
14ea0 20 70 43 2d 3e 73 7a 52 6f 77 3e 3d 61 4f 66 66   pC->szRow>=aOff
14eb0 73 65 74 5b 70 32 2b 31 5d 20 29 7b 0a 20 20 20  set[p2+1] ){.   
14ec0 20 2f 2a 20 54 68 69 73 20 69 73 20 74 68 65 20   /* This is the 
14ed0 63 6f 6d 6d 6f 6e 20 63 61 73 65 20 77 68 65 72  common case wher
14ee0 65 20 74 68 65 20 64 65 73 69 72 65 64 20 63 6f  e the desired co
14ef0 6e 74 65 6e 74 20 66 69 74 73 20 6f 6e 20 74 68  ntent fits on th
14f00 65 20 6f 72 69 67 69 6e 61 6c 0a 20 20 20 20 2a  e original.    *
14f10 2a 20 70 61 67 65 20 2d 20 77 68 65 72 65 20 74  * page - where t
14f20 68 65 20 63 6f 6e 74 65 6e 74 20 69 73 20 6e 6f  he content is no
14f30 74 20 6f 6e 20 61 6e 20 6f 76 65 72 66 6c 6f 77  t on an overflow
14f40 20 70 61 67 65 20 2a 2f 0a 20 20 20 20 7a 44 61   page */.    zDa
14f50 74 61 20 3d 20 70 43 2d 3e 61 52 6f 77 20 2b 20  ta = pC->aRow + 
14f60 61 4f 66 66 73 65 74 5b 70 32 5d 3b 0a 20 20 20  aOffset[p2];.   
14f70 20 69 66 28 20 74 3c 31 32 20 29 7b 0a 20 20 20   if( t<12 ){.   
14f80 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65     sqlite3VdbeSe
14f90 72 69 61 6c 47 65 74 28 7a 44 61 74 61 2c 20 74  rialGet(zData, t
14fa0 2c 20 70 44 65 73 74 29 3b 0a 20 20 20 20 7d 65  , pDest);.    }e
14fb0 6c 73 65 7b 0a 20 20 20 20 20 20 2f 2a 20 49 66  lse{.      /* If
14fc0 20 74 68 65 20 63 6f 6c 75 6d 6e 20 76 61 6c 75   the column valu
14fd0 65 20 69 73 20 61 20 73 74 72 69 6e 67 2c 20 77  e is a string, w
14fe0 65 20 6e 65 65 64 20 61 20 70 65 72 73 69 73 74  e need a persist
14ff0 65 6e 74 20 76 61 6c 75 65 2c 20 6e 6f 74 0a 20  ent value, not. 
15000 20 20 20 20 20 2a 2a 20 61 20 4d 45 4d 5f 45 70       ** a MEM_Ep
15010 68 65 6d 20 76 61 6c 75 65 2e 20 20 54 68 69 73  hem value.  This
15020 20 62 72 61 6e 63 68 20 69 73 20 61 20 66 61 73   branch is a fas
15030 74 20 73 68 6f 72 74 2d 63 75 74 20 74 68 61 74  t short-cut that
15040 20 69 73 20 65 71 75 69 76 61 6c 65 6e 74 0a 20   is equivalent. 
15050 20 20 20 20 20 2a 2a 20 74 6f 20 63 61 6c 6c 69       ** to calli
15060 6e 67 20 73 71 6c 69 74 65 33 56 64 62 65 53 65  ng sqlite3VdbeSe
15070 72 69 61 6c 47 65 74 28 29 20 61 6e 64 20 73 71  rialGet() and sq
15080 6c 69 74 65 33 56 64 62 65 44 65 65 70 68 65 6d  lite3VdbeDeephem
15090 65 72 61 6c 69 7a 65 28 29 2e 0a 20 20 20 20 20  eralize()..     
150a0 20 2a 2f 0a 20 20 20 20 20 20 73 74 61 74 69 63   */.      static
150b0 20 63 6f 6e 73 74 20 75 31 36 20 61 46 6c 61 67   const u16 aFlag
150c0 5b 5d 20 3d 20 7b 20 4d 45 4d 5f 42 6c 6f 62 2c  [] = { MEM_Blob,
150d0 20 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f 54 65 72   MEM_Str|MEM_Ter
150e0 6d 20 7d 3b 0a 20 20 20 20 20 20 70 44 65 73 74  m };.      pDest
150f0 2d 3e 6e 20 3d 20 6c 65 6e 20 3d 20 28 74 2d 31  ->n = len = (t-1
15100 32 29 2f 32 3b 0a 20 20 20 20 20 20 70 44 65 73  2)/2;.      pDes
15110 74 2d 3e 65 6e 63 20 3d 20 65 6e 63 6f 64 69 6e  t->enc = encodin
15120 67 3b 0a 20 20 20 20 20 20 69 66 28 20 70 44 65  g;.      if( pDe
15130 73 74 2d 3e 73 7a 4d 61 6c 6c 6f 63 20 3c 20 6c  st->szMalloc < l
15140 65 6e 2b 32 20 29 7b 0a 20 20 20 20 20 20 20 20  en+2 ){.        
15150 70 44 65 73 74 2d 3e 66 6c 61 67 73 20 3d 20 4d  pDest->flags = M
15160 45 4d 5f 4e 75 6c 6c 3b 0a 20 20 20 20 20 20 20  EM_Null;.       
15170 20 69 66 28 20 73 71 6c 69 74 65 33 56 64 62 65   if( sqlite3Vdbe
15180 4d 65 6d 47 72 6f 77 28 70 44 65 73 74 2c 20 6c  MemGrow(pDest, l
15190 65 6e 2b 32 2c 20 30 29 20 29 20 67 6f 74 6f 20  en+2, 0) ) goto 
151a0 6e 6f 5f 6d 65 6d 3b 0a 20 20 20 20 20 20 7d 65  no_mem;.      }e
151b0 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 70 44 65  lse{.        pDe
151c0 73 74 2d 3e 7a 20 3d 20 70 44 65 73 74 2d 3e 7a  st->z = pDest->z
151d0 4d 61 6c 6c 6f 63 3b 0a 20 20 20 20 20 20 7d 0a  Malloc;.      }.
151e0 20 20 20 20 20 20 6d 65 6d 63 70 79 28 70 44 65        memcpy(pDe
151f0 73 74 2d 3e 7a 2c 20 7a 44 61 74 61 2c 20 6c 65  st->z, zData, le
15200 6e 29 3b 0a 20 20 20 20 20 20 70 44 65 73 74 2d  n);.      pDest-
15210 3e 7a 5b 6c 65 6e 5d 20 3d 20 30 3b 0a 20 20 20  >z[len] = 0;.   
15220 20 20 20 70 44 65 73 74 2d 3e 7a 5b 6c 65 6e 2b     pDest->z[len+
15230 31 5d 20 3d 20 30 3b 0a 20 20 20 20 20 20 70 44  1] = 0;.      pD
15240 65 73 74 2d 3e 66 6c 61 67 73 20 3d 20 61 46 6c  est->flags = aFl
15250 61 67 5b 74 26 31 5d 3b 0a 20 20 20 20 7d 0a 20  ag[t&1];.    }. 
15260 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70 44 65 73   }else{.    pDes
15270 74 2d 3e 65 6e 63 20 3d 20 65 6e 63 6f 64 69 6e  t->enc = encodin
15280 67 3b 0a 20 20 20 20 2f 2a 20 54 68 69 73 20 62  g;.    /* This b
15290 72 61 6e 63 68 20 68 61 70 70 65 6e 73 20 6f 6e  ranch happens on
152a0 6c 79 20 77 68 65 6e 20 63 6f 6e 74 65 6e 74 20  ly when content 
152b0 69 73 20 6f 6e 20 6f 76 65 72 66 6c 6f 77 20 70  is on overflow p
152c0 61 67 65 73 20 2a 2f 0a 20 20 20 20 69 66 28 20  ages */.    if( 
152d0 28 28 70 4f 70 2d 3e 70 35 20 26 20 28 4f 50 46  ((pOp->p5 & (OPF
152e0 4c 41 47 5f 4c 45 4e 47 54 48 41 52 47 7c 4f 50  LAG_LENGTHARG|OP
152f0 46 4c 41 47 5f 54 59 50 45 4f 46 41 52 47 29 29  FLAG_TYPEOFARG))
15300 21 3d 30 0a 20 20 20 20 20 20 20 20 20 20 26 26  !=0.          &&
15310 20 28 28 74 3e 3d 31 32 20 26 26 20 28 74 26 31   ((t>=12 && (t&1
15320 29 3d 3d 30 29 20 7c 7c 20 28 70 4f 70 2d 3e 70  )==0) || (pOp->p
15330 35 20 26 20 4f 50 46 4c 41 47 5f 54 59 50 45 4f  5 & OPFLAG_TYPEO
15340 46 41 52 47 29 21 3d 30 29 29 0a 20 20 20 20 20  FARG)!=0)).     
15350 7c 7c 20 28 6c 65 6e 20 3d 20 73 71 6c 69 74 65  || (len = sqlite
15360 33 56 64 62 65 53 65 72 69 61 6c 54 79 70 65 4c  3VdbeSerialTypeL
15370 65 6e 28 74 29 29 3d 3d 30 0a 20 20 20 20 29 7b  en(t))==0.    ){
15380 0a 20 20 20 20 20 20 2f 2a 20 43 6f 6e 74 65 6e  .      /* Conten
15390 74 20 69 73 20 69 72 72 65 6c 65 76 61 6e 74 20  t is irrelevant 
153a0 66 6f 72 0a 20 20 20 20 20 20 2a 2a 20 20 20 20  for.      **    
153b0 31 2e 20 74 68 65 20 74 79 70 65 6f 66 28 29 20  1. the typeof() 
153c0 66 75 6e 63 74 69 6f 6e 2c 0a 20 20 20 20 20 20  function,.      
153d0 2a 2a 20 20 20 20 32 2e 20 74 68 65 20 6c 65 6e  **    2. the len
153e0 67 74 68 28 58 29 20 66 75 6e 63 74 69 6f 6e 20  gth(X) function 
153f0 69 66 20 58 20 69 73 20 61 20 62 6c 6f 62 2c 20  if X is a blob, 
15400 61 6e 64 0a 20 20 20 20 20 20 2a 2a 20 20 20 20  and.      **    
15410 33 2e 20 69 66 20 74 68 65 20 63 6f 6e 74 65 6e  3. if the conten
15420 74 20 6c 65 6e 67 74 68 20 69 73 20 7a 65 72 6f  t length is zero
15430 2e 0a 20 20 20 20 20 20 2a 2a 20 53 6f 20 77 65  ..      ** So we
15440 20 6d 69 67 68 74 20 61 73 20 77 65 6c 6c 20 75   might as well u
15450 73 65 20 62 6f 67 75 73 20 63 6f 6e 74 65 6e 74  se bogus content
15460 20 72 61 74 68 65 72 20 74 68 61 6e 20 72 65 61   rather than rea
15470 64 69 6e 67 0a 20 20 20 20 20 20 2a 2a 20 63 6f  ding.      ** co
15480 6e 74 65 6e 74 20 66 72 6f 6d 20 64 69 73 6b 2e  ntent from disk.
15490 20 0a 20 20 20 20 20 20 2a 2a 0a 20 20 20 20 20   .      **.     
154a0 20 2a 2a 20 41 6c 74 68 6f 75 67 68 20 73 71 6c   ** Although sql
154b0 69 74 65 33 56 64 62 65 53 65 72 69 61 6c 47 65  ite3VdbeSerialGe
154c0 74 28 29 20 6d 61 79 20 72 65 61 64 20 61 74 20  t() may read at 
154d0 6d 6f 73 74 20 38 20 62 79 74 65 73 20 66 72 6f  most 8 bytes fro
154e0 6d 20 74 68 65 0a 20 20 20 20 20 20 2a 2a 20 62  m the.      ** b
154f0 75 66 66 65 72 20 70 61 73 73 65 64 20 74 6f 20  uffer passed to 
15500 69 74 2c 20 64 65 62 75 67 67 69 6e 67 20 66 75  it, debugging fu
15510 6e 63 74 69 6f 6e 20 56 64 62 65 4d 65 6d 50 72  nction VdbeMemPr
15520 65 74 74 79 50 72 69 6e 74 28 29 20 6d 61 79 0a  ettyPrint() may.
15530 20 20 20 20 20 20 2a 2a 20 72 65 61 64 20 75 70        ** read up
15540 20 74 6f 20 31 36 2e 20 53 6f 20 31 36 20 62 79   to 16. So 16 by
15550 74 65 73 20 6f 66 20 62 6f 67 75 73 20 63 6f 6e  tes of bogus con
15560 74 65 6e 74 20 69 73 20 73 75 70 70 6c 69 65 64  tent is supplied
15570 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20  ..      */.     
15580 20 73 74 61 74 69 63 20 75 38 20 61 5a 65 72 6f   static u8 aZero
15590 5b 31 36 5d 3b 20 20 2f 2a 20 54 68 69 73 20 69  [16];  /* This i
155a0 73 20 74 68 65 20 62 6f 67 75 73 20 63 6f 6e 74  s the bogus cont
155b0 65 6e 74 20 2a 2f 0a 20 20 20 20 20 20 73 71 6c  ent */.      sql
155c0 69 74 65 33 56 64 62 65 53 65 72 69 61 6c 47 65  ite3VdbeSerialGe
155d0 74 28 61 5a 65 72 6f 2c 20 74 2c 20 70 44 65 73  t(aZero, t, pDes
155e0 74 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20  t);.    }else{. 
155f0 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65       rc = sqlite
15600 33 56 64 62 65 4d 65 6d 46 72 6f 6d 42 74 72 65  3VdbeMemFromBtre
15610 65 28 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72  e(pC->uc.pCursor
15620 2c 20 61 4f 66 66 73 65 74 5b 70 32 5d 2c 20 6c  , aOffset[p2], l
15630 65 6e 2c 20 70 44 65 73 74 29 3b 0a 20 20 20 20  en, pDest);.    
15640 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45    if( rc!=SQLITE
15650 5f 4f 4b 20 29 20 67 6f 74 6f 20 61 62 6f 72 74  _OK ) goto abort
15660 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20  _due_to_error;. 
15670 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
15680 53 65 72 69 61 6c 47 65 74 28 28 63 6f 6e 73 74  SerialGet((const
15690 20 75 38 2a 29 70 44 65 73 74 2d 3e 7a 2c 20 74   u8*)pDest->z, t
156a0 2c 20 70 44 65 73 74 29 3b 0a 20 20 20 20 20 20  , pDest);.      
156b0 70 44 65 73 74 2d 3e 66 6c 61 67 73 20 26 3d 20  pDest->flags &= 
156c0 7e 4d 45 4d 5f 45 70 68 65 6d 3b 0a 20 20 20 20  ~MEM_Ephem;.    
156d0 7d 0a 20 20 7d 0a 0a 6f 70 5f 63 6f 6c 75 6d 6e  }.  }..op_column
156e0 5f 6f 75 74 3a 0a 20 20 55 50 44 41 54 45 5f 4d  _out:.  UPDATE_M
156f0 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 44 65 73  AX_BLOBSIZE(pDes
15700 74 29 3b 0a 20 20 52 45 47 49 53 54 45 52 5f 54  t);.  REGISTER_T
15710 52 41 43 45 28 70 4f 70 2d 3e 70 33 2c 20 70 44  RACE(pOp->p3, pD
15720 65 73 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 0a  est);.  break;..
15730 6f 70 5f 63 6f 6c 75 6d 6e 5f 63 6f 72 72 75 70  op_column_corrup
15740 74 3a 0a 20 20 69 66 28 20 61 4f 70 5b 30 5d 2e  t:.  if( aOp[0].
15750 70 33 3e 30 20 29 7b 0a 20 20 20 20 70 4f 70 20  p3>0 ){.    pOp 
15760 3d 20 26 61 4f 70 5b 61 4f 70 5b 30 5d 2e 70 33  = &aOp[aOp[0].p3
15770 2d 31 5d 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a  -1];.    break;.
15780 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 72 63 20    }else{.    rc 
15790 3d 20 53 51 4c 49 54 45 5f 43 4f 52 52 55 50 54  = SQLITE_CORRUPT
157a0 5f 42 4b 50 54 3b 0a 20 20 20 20 67 6f 74 6f 20  _BKPT;.    goto 
157b0 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
157c0 6f 72 3b 0a 20 20 7d 0a 7d 0a 0a 2f 2a 20 4f 70  or;.  }.}../* Op
157d0 63 6f 64 65 3a 20 41 66 66 69 6e 69 74 79 20 50  code: Affinity P
157e0 31 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 20 53  1 P2 * P4 *.** S
157f0 79 6e 6f 70 73 69 73 3a 20 61 66 66 69 6e 69 74  ynopsis: affinit
15800 79 28 72 5b 50 31 40 50 32 5d 29 0a 2a 2a 0a 2a  y(r[P1@P2]).**.*
15810 2a 20 41 70 70 6c 79 20 61 66 66 69 6e 69 74 69  * Apply affiniti
15820 65 73 20 74 6f 20 61 20 72 61 6e 67 65 20 6f 66  es to a range of
15830 20 50 32 20 72 65 67 69 73 74 65 72 73 20 73 74   P2 registers st
15840 61 72 74 69 6e 67 20 77 69 74 68 20 50 31 2e 0a  arting with P1..
15850 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20 73 74  **.** P4 is a st
15860 72 69 6e 67 20 74 68 61 74 20 69 73 20 50 32 20  ring that is P2 
15870 63 68 61 72 61 63 74 65 72 73 20 6c 6f 6e 67 2e  characters long.
15880 20 54 68 65 20 4e 2d 74 68 20 63 68 61 72 61 63   The N-th charac
15890 74 65 72 20 6f 66 20 74 68 65 0a 2a 2a 20 73 74  ter of the.** st
158a0 72 69 6e 67 20 69 6e 64 69 63 61 74 65 73 20 74  ring indicates t
158b0 68 65 20 63 6f 6c 75 6d 6e 20 61 66 66 69 6e 69  he column affini
158c0 74 79 20 74 68 61 74 20 73 68 6f 75 6c 64 20 62  ty that should b
158d0 65 20 75 73 65 64 20 66 6f 72 20 74 68 65 20 4e  e used for the N
158e0 2d 74 68 0a 2a 2a 20 6d 65 6d 6f 72 79 20 63 65  -th.** memory ce
158f0 6c 6c 20 69 6e 20 74 68 65 20 72 61 6e 67 65 2e  ll in the range.
15900 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 41 66 66 69  .*/.case OP_Affi
15910 6e 69 74 79 3a 20 7b 0a 20 20 63 6f 6e 73 74 20  nity: {.  const 
15920 63 68 61 72 20 2a 7a 41 66 66 69 6e 69 74 79 3b  char *zAffinity;
15930 20 20 20 2f 2a 20 54 68 65 20 61 66 66 69 6e 69     /* The affini
15940 74 79 20 74 6f 20 62 65 20 61 70 70 6c 69 65 64  ty to be applied
15950 20 2a 2f 0a 0a 20 20 7a 41 66 66 69 6e 69 74 79   */..  zAffinity
15960 20 3d 20 70 4f 70 2d 3e 70 34 2e 7a 3b 0a 20 20   = pOp->p4.z;.  
15970 61 73 73 65 72 74 28 20 7a 41 66 66 69 6e 69 74  assert( zAffinit
15980 79 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  y!=0 );.  assert
15990 28 20 70 4f 70 2d 3e 70 32 3e 30 20 29 3b 0a 20  ( pOp->p2>0 );. 
159a0 20 61 73 73 65 72 74 28 20 7a 41 66 66 69 6e 69   assert( zAffini
159b0 74 79 5b 70 4f 70 2d 3e 70 32 5d 3d 3d 30 20 29  ty[pOp->p2]==0 )
159c0 3b 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d  ;.  pIn1 = &aMem
159d0 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 64 6f 7b  [pOp->p1];.  do{
159e0 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 49 6e  .    assert( pIn
159f0 31 20 3c 3d 20 26 70 2d 3e 61 4d 65 6d 5b 28 70  1 <= &p->aMem[(p
15a00 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43  ->nMem+1 - p->nC
15a10 75 72 73 6f 72 29 5d 20 29 3b 0a 20 20 20 20 61  ursor)] );.    a
15a20 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69  ssert( memIsVali
15a30 64 28 70 49 6e 31 29 20 29 3b 0a 20 20 20 20 61  d(pIn1) );.    a
15a40 70 70 6c 79 41 66 66 69 6e 69 74 79 28 70 49 6e  pplyAffinity(pIn
15a50 31 2c 20 2a 28 7a 41 66 66 69 6e 69 74 79 2b 2b  1, *(zAffinity++
15a60 29 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20  ), encoding);.  
15a70 20 20 70 49 6e 31 2b 2b 3b 0a 20 20 7d 77 68 69    pIn1++;.  }whi
15a80 6c 65 28 20 7a 41 66 66 69 6e 69 74 79 5b 30 5d  le( zAffinity[0]
15a90 20 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a   );.  break;.}..
15aa0 2f 2a 20 4f 70 63 6f 64 65 3a 20 4d 61 6b 65 52  /* Opcode: MakeR
15ab0 65 63 6f 72 64 20 50 31 20 50 32 20 50 33 20 50  ecord P1 P2 P3 P
15ac0 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  4 *.** Synopsis:
15ad0 20 72 5b 50 33 5d 3d 6d 6b 72 65 63 28 72 5b 50   r[P3]=mkrec(r[P
15ae0 31 40 50 32 5d 29 0a 2a 2a 0a 2a 2a 20 43 6f 6e  1@P2]).**.** Con
15af0 76 65 72 74 20 50 32 20 72 65 67 69 73 74 65 72  vert P2 register
15b00 73 20 62 65 67 69 6e 6e 69 6e 67 20 77 69 74 68  s beginning with
15b10 20 50 31 20 69 6e 74 6f 20 74 68 65 20 5b 72 65   P1 into the [re
15b20 63 6f 72 64 20 66 6f 72 6d 61 74 5d 0a 2a 2a 20  cord format].** 
15b30 75 73 65 20 61 73 20 61 20 64 61 74 61 20 72 65  use as a data re
15b40 63 6f 72 64 20 69 6e 20 61 20 64 61 74 61 62 61  cord in a databa
15b50 73 65 20 74 61 62 6c 65 20 6f 72 20 61 73 20 61  se table or as a
15b60 20 6b 65 79 0a 2a 2a 20 69 6e 20 61 6e 20 69 6e   key.** in an in
15b70 64 65 78 2e 20 20 54 68 65 20 4f 50 5f 43 6f 6c  dex.  The OP_Col
15b80 75 6d 6e 20 6f 70 63 6f 64 65 20 63 61 6e 20 64  umn opcode can d
15b90 65 63 6f 64 65 20 74 68 65 20 72 65 63 6f 72 64  ecode the record
15ba0 20 6c 61 74 65 72 2e 0a 2a 2a 0a 2a 2a 20 50 34   later..**.** P4
15bb0 20 6d 61 79 20 62 65 20 61 20 73 74 72 69 6e 67   may be a string
15bc0 20 74 68 61 74 20 69 73 20 50 32 20 63 68 61 72   that is P2 char
15bd0 61 63 74 65 72 73 20 6c 6f 6e 67 2e 20 20 54 68  acters long.  Th
15be0 65 20 4e 2d 74 68 20 63 68 61 72 61 63 74 65 72  e N-th character
15bf0 20 6f 66 20 74 68 65 0a 2a 2a 20 73 74 72 69 6e   of the.** strin
15c00 67 20 69 6e 64 69 63 61 74 65 73 20 74 68 65 20  g indicates the 
15c10 63 6f 6c 75 6d 6e 20 61 66 66 69 6e 69 74 79 20  column affinity 
15c20 74 68 61 74 20 73 68 6f 75 6c 64 20 62 65 20 75  that should be u
15c30 73 65 64 20 66 6f 72 20 74 68 65 20 4e 2d 74 68  sed for the N-th
15c40 0a 2a 2a 20 66 69 65 6c 64 20 6f 66 20 74 68 65  .** field of the
15c50 20 69 6e 64 65 78 20 6b 65 79 2e 0a 2a 2a 0a 2a   index key..**.*
15c60 2a 20 54 68 65 20 6d 61 70 70 69 6e 67 20 66 72  * The mapping fr
15c70 6f 6d 20 63 68 61 72 61 63 74 65 72 20 74 6f 20  om character to 
15c80 61 66 66 69 6e 69 74 79 20 69 73 20 67 69 76 65  affinity is give
15c90 6e 20 62 79 20 74 68 65 20 53 51 4c 49 54 45 5f  n by the SQLITE_
15ca0 41 46 46 5f 0a 2a 2a 20 6d 61 63 72 6f 73 20 64  AFF_.** macros d
15cb0 65 66 69 6e 65 64 20 69 6e 20 73 71 6c 69 74 65  efined in sqlite
15cc0 49 6e 74 2e 68 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  Int.h..**.** If 
15cd0 50 34 20 69 73 20 4e 55 4c 4c 20 74 68 65 6e 20  P4 is NULL then 
15ce0 61 6c 6c 20 69 6e 64 65 78 20 66 69 65 6c 64 73  all index fields
15cf0 20 68 61 76 65 20 74 68 65 20 61 66 66 69 6e 69   have the affini
15d00 74 79 20 42 4c 4f 42 2e 0a 2a 2f 0a 63 61 73 65  ty BLOB..*/.case
15d10 20 4f 50 5f 4d 61 6b 65 52 65 63 6f 72 64 3a 20   OP_MakeRecord: 
15d20 7b 0a 20 20 75 38 20 2a 7a 4e 65 77 52 65 63 6f  {.  u8 *zNewReco
15d30 72 64 3b 20 20 20 20 20 20 20 20 2f 2a 20 41 20  rd;        /* A 
15d40 62 75 66 66 65 72 20 74 6f 20 68 6f 6c 64 20 74  buffer to hold t
15d50 68 65 20 64 61 74 61 20 66 6f 72 20 74 68 65 20  he data for the 
15d60 6e 65 77 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20  new record */.  
15d70 4d 65 6d 20 2a 70 52 65 63 3b 20 20 20 20 20 20  Mem *pRec;      
15d80 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6e 65         /* The ne
15d90 77 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 75 36  w record */.  u6
15da0 34 20 6e 44 61 74 61 3b 20 20 20 20 20 20 20 20  4 nData;        
15db0 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
15dc0 66 20 62 79 74 65 73 20 6f 66 20 64 61 74 61 20  f bytes of data 
15dd0 73 70 61 63 65 20 2a 2f 0a 20 20 69 6e 74 20 6e  space */.  int n
15de0 48 64 72 3b 20 20 20 20 20 20 20 20 20 20 20 20  Hdr;            
15df0 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62    /* Number of b
15e00 79 74 65 73 20 6f 66 20 68 65 61 64 65 72 20 73  ytes of header s
15e10 70 61 63 65 20 2a 2f 0a 20 20 69 36 34 20 6e 42  pace */.  i64 nB
15e20 79 74 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  yte;            
15e30 20 2f 2a 20 44 61 74 61 20 73 70 61 63 65 20 72   /* Data space r
15e40 65 71 75 69 72 65 64 20 66 6f 72 20 74 68 69 73  equired for this
15e50 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69 36 34   record */.  i64
15e60 20 6e 5a 65 72 6f 3b 20 20 20 20 20 20 20 20 20   nZero;         
15e70 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
15e80 20 7a 65 72 6f 20 62 79 74 65 73 20 61 74 20 74   zero bytes at t
15e90 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20 72 65  he end of the re
15ea0 63 6f 72 64 20 2a 2f 0a 20 20 69 6e 74 20 6e 56  cord */.  int nV
15eb0 61 72 69 6e 74 3b 20 20 20 20 20 20 20 20 20 20  arint;          
15ec0 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62 79   /* Number of by
15ed0 74 65 73 20 69 6e 20 61 20 76 61 72 69 6e 74 20  tes in a varint 
15ee0 2a 2f 0a 20 20 75 33 32 20 73 65 72 69 61 6c 5f  */.  u32 serial_
15ef0 74 79 70 65 3b 20 20 20 20 20 20 20 2f 2a 20 54  type;       /* T
15f00 79 70 65 20 66 69 65 6c 64 20 2a 2f 0a 20 20 4d  ype field */.  M
15f10 65 6d 20 2a 70 44 61 74 61 30 3b 20 20 20 20 20  em *pData0;     
15f20 20 20 20 20 20 20 2f 2a 20 46 69 72 73 74 20 66        /* First f
15f30 69 65 6c 64 20 74 6f 20 62 65 20 63 6f 6d 62 69  ield to be combi
15f40 6e 65 64 20 69 6e 74 6f 20 74 68 65 20 72 65 63  ned into the rec
15f50 6f 72 64 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 4c  ord */.  Mem *pL
15f60 61 73 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  ast;            
15f70 2f 2a 20 4c 61 73 74 20 66 69 65 6c 64 20 6f 66  /* Last field of
15f80 20 74 68 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20   the record */. 
15f90 20 69 6e 74 20 6e 46 69 65 6c 64 3b 20 20 20 20   int nField;    
15fa0 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
15fb0 72 20 6f 66 20 66 69 65 6c 64 73 20 69 6e 20 74  r of fields in t
15fc0 68 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 63  he record */.  c
15fd0 68 61 72 20 2a 7a 41 66 66 69 6e 69 74 79 3b 20  har *zAffinity; 
15fe0 20 20 20 20 20 20 2f 2a 20 54 68 65 20 61 66 66        /* The aff
15ff0 69 6e 69 74 79 20 73 74 72 69 6e 67 20 66 6f 72  inity string for
16000 20 74 68 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20   the record */. 
16010 20 69 6e 74 20 66 69 6c 65 5f 66 6f 72 6d 61 74   int file_format
16020 3b 20 20 20 20 20 20 20 2f 2a 20 46 69 6c 65 20  ;       /* File 
16030 66 6f 72 6d 61 74 20 74 6f 20 75 73 65 20 66 6f  format to use fo
16040 72 20 65 6e 63 6f 64 69 6e 67 20 2a 2f 0a 20 20  r encoding */.  
16050 69 6e 74 20 69 3b 20 20 20 20 20 20 20 20 20 20  int i;          
16060 20 20 20 20 20 20 20 2f 2a 20 53 70 61 63 65 20         /* Space 
16070 75 73 65 64 20 69 6e 20 7a 4e 65 77 52 65 63 6f  used in zNewReco
16080 72 64 5b 5d 20 68 65 61 64 65 72 20 2a 2f 0a 20  rd[] header */. 
16090 20 69 6e 74 20 6a 3b 20 20 20 20 20 20 20 20 20   int j;         
160a0 20 20 20 20 20 20 20 20 2f 2a 20 53 70 61 63 65          /* Space
160b0 20 75 73 65 64 20 69 6e 20 7a 4e 65 77 52 65 63   used in zNewRec
160c0 6f 72 64 5b 5d 20 63 6f 6e 74 65 6e 74 20 2a 2f  ord[] content */
160d0 0a 20 20 75 33 32 20 6c 65 6e 3b 20 20 20 20 20  .  u32 len;     
160e0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 65 6e            /* Len
160f0 67 74 68 20 6f 66 20 61 20 66 69 65 6c 64 20 2a  gth of a field *
16100 2f 0a 0a 20 20 2f 2a 20 41 73 73 75 6d 69 6e 67  /..  /* Assuming
16110 20 74 68 65 20 72 65 63 6f 72 64 20 63 6f 6e 74   the record cont
16120 61 69 6e 73 20 4e 20 66 69 65 6c 64 73 2c 20 74  ains N fields, t
16130 68 65 20 72 65 63 6f 72 64 20 66 6f 72 6d 61 74  he record format
16140 20 6c 6f 6f 6b 73 0a 20 20 2a 2a 20 6c 69 6b 65   looks.  ** like
16150 20 74 68 69 73 3a 0a 20 20 2a 2a 0a 20 20 2a 2a   this:.  **.  **
16160 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d   ---------------
16170 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
16180 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
16190 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
161a0 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 20 20 2a 2a 20 7c  ---------.  ** |
161b0 20 68 64 72 2d 73 69 7a 65 20 7c 20 74 79 70 65   hdr-size | type
161c0 20 30 20 7c 20 74 79 70 65 20 31 20 7c 20 2e 2e   0 | type 1 | ..
161d0 2e 20 7c 20 74 79 70 65 20 4e 2d 31 20 7c 20 64  . | type N-1 | d
161e0 61 74 61 30 20 7c 20 2e 2e 2e 20 7c 20 64 61 74  ata0 | ... | dat
161f0 61 20 4e 2d 31 20 7c 20 0a 20 20 2a 2a 20 2d 2d  a N-1 | .  ** --
16200 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
16210 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
16220 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
16230 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
16240 2d 2d 2d 2d 2d 2d 0a 20 20 2a 2a 0a 20 20 2a 2a  ------.  **.  **
16250 20 44 61 74 61 28 30 29 20 69 73 20 74 61 6b 65   Data(0) is take
16260 6e 20 66 72 6f 6d 20 72 65 67 69 73 74 65 72 20  n from register 
16270 50 31 2e 20 20 44 61 74 61 28 31 29 20 63 6f 6d  P1.  Data(1) com
16280 65 73 20 66 72 6f 6d 20 72 65 67 69 73 74 65 72  es from register
16290 20 50 31 2b 31 0a 20 20 2a 2a 20 61 6e 64 20 73   P1+1.  ** and s
162a0 6f 20 66 6f 72 74 68 2e 0a 20 20 2a 2a 0a 20 20  o forth..  **.  
162b0 2a 2a 20 45 61 63 68 20 74 79 70 65 20 66 69 65  ** Each type fie
162c0 6c 64 20 69 73 20 61 20 76 61 72 69 6e 74 20 72  ld is a varint r
162d0 65 70 72 65 73 65 6e 74 69 6e 67 20 74 68 65 20  epresenting the 
162e0 73 65 72 69 61 6c 20 74 79 70 65 20 6f 66 20 74  serial type of t
162f0 68 65 20 0a 20 20 2a 2a 20 63 6f 72 72 65 73 70  he .  ** corresp
16300 6f 6e 64 69 6e 67 20 64 61 74 61 20 65 6c 65 6d  onding data elem
16310 65 6e 74 20 28 73 65 65 20 73 71 6c 69 74 65 33  ent (see sqlite3
16320 56 64 62 65 53 65 72 69 61 6c 54 79 70 65 28 29  VdbeSerialType()
16330 29 2e 20 54 68 65 0a 20 20 2a 2a 20 68 64 72 2d  ). The.  ** hdr-
16340 73 69 7a 65 20 66 69 65 6c 64 20 69 73 20 61 6c  size field is al
16350 73 6f 20 61 20 76 61 72 69 6e 74 20 77 68 69 63  so a varint whic
16360 68 20 69 73 20 74 68 65 20 6f 66 66 73 65 74 20  h is the offset 
16370 66 72 6f 6d 20 74 68 65 20 62 65 67 69 6e 6e 69  from the beginni
16380 6e 67 0a 20 20 2a 2a 20 6f 66 20 74 68 65 20 72  ng.  ** of the r
16390 65 63 6f 72 64 20 74 6f 20 64 61 74 61 30 2e 0a  ecord to data0..
163a0 20 20 2a 2f 0a 20 20 6e 44 61 74 61 20 3d 20 30    */.  nData = 0
163b0 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d  ;         /* Num
163c0 62 65 72 20 6f 66 20 62 79 74 65 73 20 6f 66 20  ber of bytes of 
163d0 64 61 74 61 20 73 70 61 63 65 20 2a 2f 0a 20 20  data space */.  
163e0 6e 48 64 72 20 3d 20 30 3b 20 20 20 20 20 20 20  nHdr = 0;       
163f0 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
16400 62 79 74 65 73 20 6f 66 20 68 65 61 64 65 72 20  bytes of header 
16410 73 70 61 63 65 20 2a 2f 0a 20 20 6e 5a 65 72 6f  space */.  nZero
16420 20 3d 20 30 3b 20 20 20 20 20 20 20 20 20 2f 2a   = 0;         /*
16430 20 4e 75 6d 62 65 72 20 6f 66 20 7a 65 72 6f 20   Number of zero 
16440 62 79 74 65 73 20 61 74 20 74 68 65 20 65 6e 64  bytes at the end
16450 20 6f 66 20 74 68 65 20 72 65 63 6f 72 64 20 2a   of the record *
16460 2f 0a 20 20 6e 46 69 65 6c 64 20 3d 20 70 4f 70  /.  nField = pOp
16470 2d 3e 70 31 3b 0a 20 20 7a 41 66 66 69 6e 69 74  ->p1;.  zAffinit
16480 79 20 3d 20 70 4f 70 2d 3e 70 34 2e 7a 3b 0a 20  y = pOp->p4.z;. 
16490 20 61 73 73 65 72 74 28 20 6e 46 69 65 6c 64 3e   assert( nField>
164a0 30 20 26 26 20 70 4f 70 2d 3e 70 32 3e 30 20 26  0 && pOp->p2>0 &
164b0 26 20 70 4f 70 2d 3e 70 32 2b 6e 46 69 65 6c 64  & pOp->p2+nField
164c0 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70  <=(p->nMem+1 - p
164d0 2d 3e 6e 43 75 72 73 6f 72 29 2b 31 20 29 3b 0a  ->nCursor)+1 );.
164e0 20 20 70 44 61 74 61 30 20 3d 20 26 61 4d 65 6d    pData0 = &aMem
164f0 5b 6e 46 69 65 6c 64 5d 3b 0a 20 20 6e 46 69 65  [nField];.  nFie
16500 6c 64 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20  ld = pOp->p2;.  
16510 70 4c 61 73 74 20 3d 20 26 70 44 61 74 61 30 5b  pLast = &pData0[
16520 6e 46 69 65 6c 64 2d 31 5d 3b 0a 20 20 66 69 6c  nField-1];.  fil
16530 65 5f 66 6f 72 6d 61 74 20 3d 20 70 2d 3e 6d 69  e_format = p->mi
16540 6e 57 72 69 74 65 46 69 6c 65 46 6f 72 6d 61 74  nWriteFileFormat
16550 3b 0a 0a 20 20 2f 2a 20 49 64 65 6e 74 69 66 79  ;..  /* Identify
16560 20 74 68 65 20 6f 75 74 70 75 74 20 72 65 67 69   the output regi
16570 73 74 65 72 20 2a 2f 0a 20 20 61 73 73 65 72 74  ster */.  assert
16580 28 20 70 4f 70 2d 3e 70 33 3c 70 4f 70 2d 3e 70  ( pOp->p3<pOp->p
16590 31 20 7c 7c 20 70 4f 70 2d 3e 70 33 3e 3d 70 4f  1 || pOp->p3>=pO
165a0 70 2d 3e 70 31 2b 70 4f 70 2d 3e 70 32 20 29 3b  p->p1+pOp->p2 );
165b0 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b  .  pOut = &aMem[
165c0 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 6d 65 6d 41  pOp->p3];.  memA
165d0 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20  boutToChange(p, 
165e0 70 4f 75 74 29 3b 0a 0a 20 20 2f 2a 20 41 70 70  pOut);..  /* App
165f0 6c 79 20 74 68 65 20 72 65 71 75 65 73 74 65 64  ly the requested
16600 20 61 66 66 69 6e 69 74 79 20 74 6f 20 61 6c 6c   affinity to all
16610 20 69 6e 70 75 74 73 0a 20 20 2a 2f 0a 20 20 61   inputs.  */.  a
16620 73 73 65 72 74 28 20 70 44 61 74 61 30 3c 3d 70  ssert( pData0<=p
16630 4c 61 73 74 20 29 3b 0a 20 20 69 66 28 20 7a 41  Last );.  if( zA
16640 66 66 69 6e 69 74 79 20 29 7b 0a 20 20 20 20 70  ffinity ){.    p
16650 52 65 63 20 3d 20 70 44 61 74 61 30 3b 0a 20 20  Rec = pData0;.  
16660 20 20 64 6f 7b 0a 20 20 20 20 20 20 61 70 70 6c    do{.      appl
16670 79 41 66 66 69 6e 69 74 79 28 70 52 65 63 2b 2b  yAffinity(pRec++
16680 2c 20 2a 28 7a 41 66 66 69 6e 69 74 79 2b 2b 29  , *(zAffinity++)
16690 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 20  , encoding);.   
166a0 20 20 20 61 73 73 65 72 74 28 20 7a 41 66 66 69     assert( zAffi
166b0 6e 69 74 79 5b 30 5d 3d 3d 30 20 7c 7c 20 70 52  nity[0]==0 || pR
166c0 65 63 3c 3d 70 4c 61 73 74 20 29 3b 0a 20 20 20  ec<=pLast );.   
166d0 20 7d 77 68 69 6c 65 28 20 7a 41 66 66 69 6e 69   }while( zAffini
166e0 74 79 5b 30 5d 20 29 3b 0a 20 20 7d 0a 0a 23 69  ty[0] );.  }..#i
166f0 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42  fdef SQLITE_ENAB
16700 4c 45 5f 4e 55 4c 4c 5f 54 52 49 4d 0a 20 20 2f  LE_NULL_TRIM.  /
16710 2a 20 4e 55 4c 4c 73 20 63 61 6e 20 62 65 20 73  * NULLs can be s
16720 61 66 65 6c 79 20 74 72 69 6d 6d 65 64 20 66 72  afely trimmed fr
16730 6f 6d 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68  om the end of th
16740 65 20 72 65 63 6f 72 64 2c 20 61 73 20 6c 6f 6e  e record, as lon
16750 67 20 61 73 0a 20 20 2a 2a 20 61 73 20 74 68 65  g as.  ** as the
16760 20 73 63 68 65 6d 61 20 66 6f 72 6d 61 74 20 69   schema format i
16770 73 20 32 20 6f 72 20 6d 6f 72 65 20 61 6e 64 20  s 2 or more and 
16780 6e 6f 6e 65 20 6f 66 20 74 68 65 20 6f 6d 69 74  none of the omit
16790 74 65 64 20 63 6f 6c 75 6d 6e 73 0a 20 20 2a 2a  ted columns.  **
167a0 20 68 61 76 65 20 61 20 6e 6f 6e 2d 4e 55 4c 4c   have a non-NULL
167b0 20 64 65 66 61 75 6c 74 20 76 61 6c 75 65 2e 20   default value. 
167c0 20 41 6c 73 6f 2c 20 74 68 65 20 72 65 63 6f 72   Also, the recor
167d0 64 20 6d 75 73 74 20 62 65 20 6c 65 66 74 20 77  d must be left w
167e0 69 74 68 0a 20 20 2a 2a 20 61 74 20 6c 65 61 73  ith.  ** at leas
167f0 74 20 6f 6e 65 20 66 69 65 6c 64 2e 20 20 49 66  t one field.  If
16800 20 50 35 3e 30 20 74 68 65 6e 20 69 74 20 77 69   P5>0 then it wi
16810 6c 6c 20 62 65 20 6f 6e 65 20 6d 6f 72 65 20 74  ll be one more t
16820 68 61 6e 20 74 68 65 0a 20 20 2a 2a 20 69 6e 64  han the.  ** ind
16830 65 78 20 6f 66 20 74 68 65 20 72 69 67 68 74 2d  ex of the right-
16840 6d 6f 73 74 20 63 6f 6c 75 6d 6e 20 77 69 74 68  most column with
16850 20 61 20 6e 6f 6e 2d 4e 55 4c 4c 20 64 65 66 61   a non-NULL defa
16860 75 6c 74 20 76 61 6c 75 65 20 2a 2f 0a 20 20 69  ult value */.  i
16870 66 28 20 70 4f 70 2d 3e 70 35 20 29 7b 0a 20 20  f( pOp->p5 ){.  
16880 20 20 77 68 69 6c 65 28 20 28 70 4c 61 73 74 2d    while( (pLast-
16890 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c  >flags & MEM_Nul
168a0 6c 29 21 3d 30 20 26 26 20 6e 46 69 65 6c 64 3e  l)!=0 && nField>
168b0 70 4f 70 2d 3e 70 35 20 29 7b 0a 20 20 20 20 20  pOp->p5 ){.     
168c0 20 70 4c 61 73 74 2d 2d 3b 0a 20 20 20 20 20 20   pLast--;.      
168d0 6e 46 69 65 6c 64 2d 2d 3b 0a 20 20 20 20 7d 0a  nField--;.    }.
168e0 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 20 20 2f 2a    }.#endif..  /*
168f0 20 4c 6f 6f 70 20 74 68 72 6f 75 67 68 20 74 68   Loop through th
16900 65 20 65 6c 65 6d 65 6e 74 73 20 74 68 61 74 20  e elements that 
16910 77 69 6c 6c 20 6d 61 6b 65 20 75 70 20 74 68 65  will make up the
16920 20 72 65 63 6f 72 64 20 74 6f 20 66 69 67 75 72   record to figur
16930 65 0a 20 20 2a 2a 20 6f 75 74 20 68 6f 77 20 6d  e.  ** out how m
16940 75 63 68 20 73 70 61 63 65 20 69 73 20 72 65 71  uch space is req
16950 75 69 72 65 64 20 66 6f 72 20 74 68 65 20 6e 65  uired for the ne
16960 77 20 72 65 63 6f 72 64 2e 0a 20 20 2a 2f 0a 20  w record..  */. 
16970 20 70 52 65 63 20 3d 20 70 4c 61 73 74 3b 0a 20   pRec = pLast;. 
16980 20 64 6f 7b 0a 20 20 20 20 61 73 73 65 72 74 28   do{.    assert(
16990 20 6d 65 6d 49 73 56 61 6c 69 64 28 70 52 65 63   memIsValid(pRec
169a0 29 20 29 3b 0a 20 20 20 20 70 52 65 63 2d 3e 75  ) );.    pRec->u
169b0 54 65 6d 70 20 3d 20 73 65 72 69 61 6c 5f 74 79  Temp = serial_ty
169c0 70 65 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  pe = sqlite3Vdbe
169d0 53 65 72 69 61 6c 54 79 70 65 28 70 52 65 63 2c  SerialType(pRec,
169e0 20 66 69 6c 65 5f 66 6f 72 6d 61 74 2c 20 26 6c   file_format, &l
169f0 65 6e 29 3b 0a 20 20 20 20 69 66 28 20 70 52 65  en);.    if( pRe
16a00 63 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 5a  c->flags & MEM_Z
16a10 65 72 6f 20 29 7b 0a 20 20 20 20 20 20 69 66 28  ero ){.      if(
16a20 20 6e 44 61 74 61 20 29 7b 0a 20 20 20 20 20 20   nData ){.      
16a30 20 20 69 66 28 20 73 71 6c 69 74 65 33 56 64 62    if( sqlite3Vdb
16a40 65 4d 65 6d 45 78 70 61 6e 64 42 6c 6f 62 28 70  eMemExpandBlob(p
16a50 52 65 63 29 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d  Rec) ) goto no_m
16a60 65 6d 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b  em;.      }else{
16a70 0a 20 20 20 20 20 20 20 20 6e 5a 65 72 6f 20 2b  .        nZero +
16a80 3d 20 70 52 65 63 2d 3e 75 2e 6e 5a 65 72 6f 3b  = pRec->u.nZero;
16a90 0a 20 20 20 20 20 20 20 20 6c 65 6e 20 2d 3d 20  .        len -= 
16aa0 70 52 65 63 2d 3e 75 2e 6e 5a 65 72 6f 3b 0a 20  pRec->u.nZero;. 
16ab0 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20       }.    }.   
16ac0 20 6e 44 61 74 61 20 2b 3d 20 6c 65 6e 3b 0a 20   nData += len;. 
16ad0 20 20 20 74 65 73 74 63 61 73 65 28 20 73 65 72     testcase( ser
16ae0 69 61 6c 5f 74 79 70 65 3d 3d 31 32 37 20 29 3b  ial_type==127 );
16af0 0a 20 20 20 20 74 65 73 74 63 61 73 65 28 20 73  .    testcase( s
16b00 65 72 69 61 6c 5f 74 79 70 65 3d 3d 31 32 38 20  erial_type==128 
16b10 29 3b 0a 20 20 20 20 6e 48 64 72 20 2b 3d 20 73  );.    nHdr += s
16b20 65 72 69 61 6c 5f 74 79 70 65 3c 3d 31 32 37 20  erial_type<=127 
16b30 3f 20 31 20 3a 20 73 71 6c 69 74 65 33 56 61 72  ? 1 : sqlite3Var
16b40 69 6e 74 4c 65 6e 28 73 65 72 69 61 6c 5f 74 79  intLen(serial_ty
16b50 70 65 29 3b 0a 20 20 20 20 69 66 28 20 70 52 65  pe);.    if( pRe
16b60 63 3d 3d 70 44 61 74 61 30 20 29 20 62 72 65 61  c==pData0 ) brea
16b70 6b 3b 0a 20 20 20 20 70 52 65 63 2d 2d 3b 0a 20  k;.    pRec--;. 
16b80 20 7d 77 68 69 6c 65 28 31 29 3b 0a 0a 20 20 2f   }while(1);..  /
16b90 2a 20 45 56 49 44 45 4e 43 45 2d 4f 46 3a 20 52  * EVIDENCE-OF: R
16ba0 2d 32 32 35 36 34 2d 31 31 36 34 37 20 54 68 65  -22564-11647 The
16bb0 20 68 65 61 64 65 72 20 62 65 67 69 6e 73 20 77   header begins w
16bc0 69 74 68 20 61 20 73 69 6e 67 6c 65 20 76 61 72  ith a single var
16bd0 69 6e 74 0a 20 20 2a 2a 20 77 68 69 63 68 20 64  int.  ** which d
16be0 65 74 65 72 6d 69 6e 65 73 20 74 68 65 20 74 6f  etermines the to
16bf0 74 61 6c 20 6e 75 6d 62 65 72 20 6f 66 20 62 79  tal number of by
16c00 74 65 73 20 69 6e 20 74 68 65 20 68 65 61 64 65  tes in the heade
16c10 72 2e 20 54 68 65 20 76 61 72 69 6e 74 0a 20 20  r. The varint.  
16c20 2a 2a 20 76 61 6c 75 65 20 69 73 20 74 68 65 20  ** value is the 
16c30 73 69 7a 65 20 6f 66 20 74 68 65 20 68 65 61 64  size of the head
16c40 65 72 20 69 6e 20 62 79 74 65 73 20 69 6e 63 6c  er in bytes incl
16c50 75 64 69 6e 67 20 74 68 65 20 73 69 7a 65 20 76  uding the size v
16c60 61 72 69 6e 74 0a 20 20 2a 2a 20 69 74 73 65 6c  arint.  ** itsel
16c70 66 2e 20 2a 2f 0a 20 20 74 65 73 74 63 61 73 65  f. */.  testcase
16c80 28 20 6e 48 64 72 3d 3d 31 32 36 20 29 3b 0a 20  ( nHdr==126 );. 
16c90 20 74 65 73 74 63 61 73 65 28 20 6e 48 64 72 3d   testcase( nHdr=
16ca0 3d 31 32 37 20 29 3b 0a 20 20 69 66 28 20 6e 48  =127 );.  if( nH
16cb0 64 72 3c 3d 31 32 36 20 29 7b 0a 20 20 20 20 2f  dr<=126 ){.    /
16cc0 2a 20 54 68 65 20 63 6f 6d 6d 6f 6e 20 63 61 73  * The common cas
16cd0 65 20 2a 2f 0a 20 20 20 20 6e 48 64 72 20 2b 3d  e */.    nHdr +=
16ce0 20 31 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20   1;.  }else{.   
16cf0 20 2f 2a 20 52 61 72 65 20 63 61 73 65 20 6f 66   /* Rare case of
16d00 20 61 20 72 65 61 6c 6c 79 20 6c 61 72 67 65 20   a really large 
16d10 68 65 61 64 65 72 20 2a 2f 0a 20 20 20 20 6e 56  header */.    nV
16d20 61 72 69 6e 74 20 3d 20 73 71 6c 69 74 65 33 56  arint = sqlite3V
16d30 61 72 69 6e 74 4c 65 6e 28 6e 48 64 72 29 3b 0a  arintLen(nHdr);.
16d40 20 20 20 20 6e 48 64 72 20 2b 3d 20 6e 56 61 72      nHdr += nVar
16d50 69 6e 74 3b 0a 20 20 20 20 69 66 28 20 6e 56 61  int;.    if( nVa
16d60 72 69 6e 74 3c 73 71 6c 69 74 65 33 56 61 72 69  rint<sqlite3Vari
16d70 6e 74 4c 65 6e 28 6e 48 64 72 29 20 29 20 6e 48  ntLen(nHdr) ) nH
16d80 64 72 2b 2b 3b 0a 20 20 7d 0a 20 20 6e 42 79 74  dr++;.  }.  nByt
16d90 65 20 3d 20 6e 48 64 72 2b 6e 44 61 74 61 3b 0a  e = nHdr+nData;.
16da0 20 20 69 66 28 20 6e 42 79 74 65 2b 6e 5a 65 72    if( nByte+nZer
16db0 6f 3e 64 62 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c  o>db->aLimit[SQL
16dc0 49 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54 48  ITE_LIMIT_LENGTH
16dd0 5d 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 74 6f  ] ){.    goto to
16de0 6f 5f 62 69 67 3b 0a 20 20 7d 0a 0a 20 20 2f 2a  o_big;.  }..  /*
16df0 20 4d 61 6b 65 20 73 75 72 65 20 74 68 65 20 6f   Make sure the o
16e00 75 74 70 75 74 20 72 65 67 69 73 74 65 72 20 68  utput register h
16e10 61 73 20 61 20 62 75 66 66 65 72 20 6c 61 72 67  as a buffer larg
16e20 65 20 65 6e 6f 75 67 68 20 74 6f 20 73 74 6f 72  e enough to stor
16e30 65 20 0a 20 20 2a 2a 20 74 68 65 20 6e 65 77 20  e .  ** the new 
16e40 72 65 63 6f 72 64 2e 20 54 68 65 20 6f 75 74 70  record. The outp
16e50 75 74 20 72 65 67 69 73 74 65 72 20 28 70 4f 70  ut register (pOp
16e60 2d 3e 70 33 29 20 69 73 20 6e 6f 74 20 61 6c 6c  ->p3) is not all
16e70 6f 77 65 64 20 74 6f 0a 20 20 2a 2a 20 62 65 20  owed to.  ** be 
16e80 6f 6e 65 20 6f 66 20 74 68 65 20 69 6e 70 75 74  one of the input
16e90 20 72 65 67 69 73 74 65 72 73 20 28 62 65 63 61   registers (beca
16ea0 75 73 65 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e  use the followin
16eb0 67 20 63 61 6c 6c 20 74 6f 0a 20 20 2a 2a 20 73  g call to.  ** s
16ec0 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 43 6c 65  qlite3VdbeMemCle
16ed0 61 72 41 6e 64 52 65 73 69 7a 65 28 29 20 63 6f  arAndResize() co
16ee0 75 6c 64 20 63 6c 6f 62 62 65 72 20 74 68 65 20  uld clobber the 
16ef0 76 61 6c 75 65 20 62 65 66 6f 72 65 20 69 74 20  value before it 
16f00 69 73 20 75 73 65 64 29 2e 0a 20 20 2a 2f 0a 20  is used)..  */. 
16f10 20 69 66 28 20 73 71 6c 69 74 65 33 56 64 62 65   if( sqlite3Vdbe
16f20 4d 65 6d 43 6c 65 61 72 41 6e 64 52 65 73 69 7a  MemClearAndResiz
16f30 65 28 70 4f 75 74 2c 20 28 69 6e 74 29 6e 42 79  e(pOut, (int)nBy
16f40 74 65 29 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20  te) ){.    goto 
16f50 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 20 20 7a 4e  no_mem;.  }.  zN
16f60 65 77 52 65 63 6f 72 64 20 3d 20 28 75 38 20 2a  ewRecord = (u8 *
16f70 29 70 4f 75 74 2d 3e 7a 3b 0a 0a 20 20 2f 2a 20  )pOut->z;..  /* 
16f80 57 72 69 74 65 20 74 68 65 20 72 65 63 6f 72 64  Write the record
16f90 20 2a 2f 0a 20 20 69 20 3d 20 70 75 74 56 61 72   */.  i = putVar
16fa0 69 6e 74 33 32 28 7a 4e 65 77 52 65 63 6f 72 64  int32(zNewRecord
16fb0 2c 20 6e 48 64 72 29 3b 0a 20 20 6a 20 3d 20 6e  , nHdr);.  j = n
16fc0 48 64 72 3b 0a 20 20 61 73 73 65 72 74 28 20 70  Hdr;.  assert( p
16fd0 44 61 74 61 30 3c 3d 70 4c 61 73 74 20 29 3b 0a  Data0<=pLast );.
16fe0 20 20 70 52 65 63 20 3d 20 70 44 61 74 61 30 3b    pRec = pData0;
16ff0 0a 20 20 64 6f 7b 0a 20 20 20 20 73 65 72 69 61  .  do{.    seria
17000 6c 5f 74 79 70 65 20 3d 20 70 52 65 63 2d 3e 75  l_type = pRec->u
17010 54 65 6d 70 3b 0a 20 20 20 20 2f 2a 20 45 56 49  Temp;.    /* EVI
17020 44 45 4e 43 45 2d 4f 46 3a 20 52 2d 30 36 35 32  DENCE-OF: R-0652
17030 39 2d 34 37 33 36 32 20 46 6f 6c 6c 6f 77 69 6e  9-47362 Followin
17040 67 20 74 68 65 20 73 69 7a 65 20 76 61 72 69 6e  g the size varin
17050 74 20 61 72 65 20 6f 6e 65 20 6f 72 20 6d 6f 72  t are one or mor
17060 65 0a 20 20 20 20 2a 2a 20 61 64 64 69 74 69 6f  e.    ** additio
17070 6e 61 6c 20 76 61 72 69 6e 74 73 2c 20 6f 6e 65  nal varints, one
17080 20 70 65 72 20 63 6f 6c 75 6d 6e 2e 20 2a 2f 0a   per column. */.
17090 20 20 20 20 69 20 2b 3d 20 70 75 74 56 61 72 69      i += putVari
170a0 6e 74 33 32 28 26 7a 4e 65 77 52 65 63 6f 72 64  nt32(&zNewRecord
170b0 5b 69 5d 2c 20 73 65 72 69 61 6c 5f 74 79 70 65  [i], serial_type
170c0 29 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  );            /*
170d0 20 73 65 72 69 61 6c 20 74 79 70 65 20 2a 2f 0a   serial type */.
170e0 20 20 20 20 2f 2a 20 45 56 49 44 45 4e 43 45 2d      /* EVIDENCE-
170f0 4f 46 3a 20 52 2d 36 34 35 33 36 2d 35 31 37 32  OF: R-64536-5172
17100 38 20 54 68 65 20 76 61 6c 75 65 73 20 66 6f 72  8 The values for
17110 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 69 6e 20   each column in 
17120 74 68 65 20 72 65 63 6f 72 64 0a 20 20 20 20 2a  the record.    *
17130 2a 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 66 6f  * immediately fo
17140 6c 6c 6f 77 20 74 68 65 20 68 65 61 64 65 72 2e  llow the header.
17150 20 2a 2f 0a 20 20 20 20 6a 20 2b 3d 20 73 71 6c   */.    j += sql
17160 69 74 65 33 56 64 62 65 53 65 72 69 61 6c 50 75  ite3VdbeSerialPu
17170 74 28 26 7a 4e 65 77 52 65 63 6f 72 64 5b 6a 5d  t(&zNewRecord[j]
17180 2c 20 70 52 65 63 2c 20 73 65 72 69 61 6c 5f 74  , pRec, serial_t
17190 79 70 65 29 3b 20 2f 2a 20 63 6f 6e 74 65 6e 74  ype); /* content
171a0 20 2a 2f 0a 20 20 7d 77 68 69 6c 65 28 20 28 2b   */.  }while( (+
171b0 2b 70 52 65 63 29 3c 3d 70 4c 61 73 74 20 29 3b  +pRec)<=pLast );
171c0 0a 20 20 61 73 73 65 72 74 28 20 69 3d 3d 6e 48  .  assert( i==nH
171d0 64 72 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  dr );.  assert( 
171e0 6a 3d 3d 6e 42 79 74 65 20 29 3b 0a 0a 20 20 61  j==nByte );..  a
171f0 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30  ssert( pOp->p3>0
17200 20 26 26 20 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d   && pOp->p3<=(p-
17210 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75  >nMem+1 - p->nCu
17220 72 73 6f 72 29 20 29 3b 0a 20 20 70 4f 75 74 2d  rsor) );.  pOut-
17230 3e 6e 20 3d 20 28 69 6e 74 29 6e 42 79 74 65 3b  >n = (int)nByte;
17240 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d  .  pOut->flags =
17250 20 4d 45 4d 5f 42 6c 6f 62 3b 0a 20 20 69 66 28   MEM_Blob;.  if(
17260 20 6e 5a 65 72 6f 20 29 7b 0a 20 20 20 20 70 4f   nZero ){.    pO
17270 75 74 2d 3e 75 2e 6e 5a 65 72 6f 20 3d 20 6e 5a  ut->u.nZero = nZ
17280 65 72 6f 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 66  ero;.    pOut->f
17290 6c 61 67 73 20 7c 3d 20 4d 45 4d 5f 5a 65 72 6f  lags |= MEM_Zero
172a0 3b 0a 20 20 7d 0a 20 20 52 45 47 49 53 54 45 52  ;.  }.  REGISTER
172b0 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 33 2c 20  _TRACE(pOp->p3, 
172c0 70 4f 75 74 29 3b 0a 20 20 55 50 44 41 54 45 5f  pOut);.  UPDATE_
172d0 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 4f 75  MAX_BLOBSIZE(pOu
172e0 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  t);.  break;.}..
172f0 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6f 75 6e 74  /* Opcode: Count
17300 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20   P1 P2 * * *.** 
17310 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d  Synopsis: r[P2]=
17320 63 6f 75 6e 74 28 29 0a 2a 2a 0a 2a 2a 20 53 74  count().**.** St
17330 6f 72 65 20 74 68 65 20 6e 75 6d 62 65 72 20 6f  ore the number o
17340 66 20 65 6e 74 72 69 65 73 20 28 61 6e 20 69 6e  f entries (an in
17350 74 65 67 65 72 20 76 61 6c 75 65 29 20 69 6e 20  teger value) in 
17360 74 68 65 20 74 61 62 6c 65 20 6f 72 20 69 6e 64  the table or ind
17370 65 78 20 0a 2a 2a 20 6f 70 65 6e 65 64 20 62 79  ex .** opened by
17380 20 63 75 72 73 6f 72 20 50 31 20 69 6e 20 72 65   cursor P1 in re
17390 67 69 73 74 65 72 20 50 32 0a 2a 2f 0a 23 69 66  gister P2.*/.#if
173a0 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
173b0 5f 42 54 52 45 45 43 4f 55 4e 54 0a 63 61 73 65  _BTREECOUNT.case
173c0 20 4f 50 5f 43 6f 75 6e 74 3a 20 7b 20 20 20 20   OP_Count: {    
173d0 20 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a       /* out2 */.
173e0 20 20 69 36 34 20 6e 45 6e 74 72 79 3b 0a 20 20    i64 nEntry;.  
173f0 42 74 43 75 72 73 6f 72 20 2a 70 43 72 73 72 3b  BtCursor *pCrsr;
17400 0a 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 61  ..  assert( p->a
17410 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 2d 3e 65  pCsr[pOp->p1]->e
17420 43 75 72 54 79 70 65 3d 3d 43 55 52 54 59 50 45  CurType==CURTYPE
17430 5f 42 54 52 45 45 20 29 3b 0a 20 20 70 43 72 73  _BTREE );.  pCrs
17440 72 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70  r = p->apCsr[pOp
17450 2d 3e 70 31 5d 2d 3e 75 63 2e 70 43 75 72 73 6f  ->p1]->uc.pCurso
17460 72 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 72  r;.  assert( pCr
17470 73 72 20 29 3b 0a 20 20 6e 45 6e 74 72 79 20 3d  sr );.  nEntry =
17480 20 30 3b 20 20 2f 2a 20 4e 6f 74 20 6e 65 65 64   0;  /* Not need
17490 65 64 2e 20 20 4f 6e 6c 79 20 75 73 65 64 20 74  ed.  Only used t
174a0 6f 20 73 69 6c 65 6e 63 65 20 61 20 77 61 72 6e  o silence a warn
174b0 69 6e 67 2e 20 2a 2f 0a 20 20 72 63 20 3d 20 73  ing. */.  rc = s
174c0 71 6c 69 74 65 33 42 74 72 65 65 43 6f 75 6e 74  qlite3BtreeCount
174d0 28 70 43 72 73 72 2c 20 26 6e 45 6e 74 72 79 29  (pCrsr, &nEntry)
174e0 3b 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f 74  ;.  if( rc ) got
174f0 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
17500 72 72 6f 72 3b 0a 20 20 70 4f 75 74 20 3d 20 6f  rror;.  pOut = o
17510 75 74 32 50 72 65 72 65 6c 65 61 73 65 28 70 2c  ut2Prerelease(p,
17520 20 70 4f 70 29 3b 0a 20 20 70 4f 75 74 2d 3e 75   pOp);.  pOut->u
17530 2e 69 20 3d 20 6e 45 6e 74 72 79 3b 0a 20 20 62  .i = nEntry;.  b
17540 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a  reak;.}.#endif..
17550 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 61 76 65 70  /* Opcode: Savep
17560 6f 69 6e 74 20 50 31 20 2a 20 2a 20 50 34 20 2a  oint P1 * * P4 *
17570 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e 2c 20 72 65 6c  .**.** Open, rel
17580 65 61 73 65 20 6f 72 20 72 6f 6c 6c 62 61 63 6b  ease or rollback
17590 20 74 68 65 20 73 61 76 65 70 6f 69 6e 74 20 6e   the savepoint n
175a0 61 6d 65 64 20 62 79 20 70 61 72 61 6d 65 74 65  amed by paramete
175b0 72 20 50 34 2c 20 64 65 70 65 6e 64 69 6e 67 0a  r P4, depending.
175c0 2a 2a 20 6f 6e 20 74 68 65 20 76 61 6c 75 65 20  ** on the value 
175d0 6f 66 20 50 31 2e 20 54 6f 20 6f 70 65 6e 20 61  of P1. To open a
175e0 20 6e 65 77 20 73 61 76 65 70 6f 69 6e 74 2c 20   new savepoint, 
175f0 50 31 3d 3d 30 2e 20 54 6f 20 72 65 6c 65 61 73  P1==0. To releas
17600 65 20 28 63 6f 6d 6d 69 74 29 20 61 6e 0a 2a 2a  e (commit) an.**
17610 20 65 78 69 73 74 69 6e 67 20 73 61 76 65 70 6f   existing savepo
17620 69 6e 74 2c 20 50 31 3d 3d 31 2c 20 6f 72 20 74  int, P1==1, or t
17630 6f 20 72 6f 6c 6c 62 61 63 6b 20 61 6e 20 65 78  o rollback an ex
17640 69 73 74 69 6e 67 20 73 61 76 65 70 6f 69 6e 74  isting savepoint
17650 20 50 31 3d 3d 32 2e 0a 2a 2f 0a 63 61 73 65 20   P1==2..*/.case 
17660 4f 50 5f 53 61 76 65 70 6f 69 6e 74 3a 20 7b 0a  OP_Savepoint: {.
17670 20 20 69 6e 74 20 70 31 3b 20 20 20 20 20 20 20    int p1;       
17680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17690 20 20 2f 2a 20 56 61 6c 75 65 20 6f 66 20 50 31    /* Value of P1
176a0 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20 63 68   operand */.  ch
176b0 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20  ar *zName;      
176c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
176d0 20 4e 61 6d 65 20 6f 66 20 73 61 76 65 70 6f 69   Name of savepoi
176e0 6e 74 20 2a 2f 0a 20 20 69 6e 74 20 6e 4e 61 6d  nt */.  int nNam
176f0 65 3b 0a 20 20 53 61 76 65 70 6f 69 6e 74 20 2a  e;.  Savepoint *
17700 70 4e 65 77 3b 0a 20 20 53 61 76 65 70 6f 69 6e  pNew;.  Savepoin
17710 74 20 2a 70 53 61 76 65 70 6f 69 6e 74 3b 0a 20  t *pSavepoint;. 
17720 20 53 61 76 65 70 6f 69 6e 74 20 2a 70 54 6d 70   Savepoint *pTmp
17730 3b 0a 20 20 69 6e 74 20 69 53 61 76 65 70 6f 69  ;.  int iSavepoi
17740 6e 74 3b 0a 20 20 69 6e 74 20 69 69 3b 0a 0a 20  nt;.  int ii;.. 
17750 20 70 31 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20   p1 = pOp->p1;. 
17760 20 7a 4e 61 6d 65 20 3d 20 70 4f 70 2d 3e 70 34   zName = pOp->p4
17770 2e 7a 3b 0a 0a 20 20 2f 2a 20 41 73 73 65 72 74  .z;..  /* Assert
17780 20 74 68 61 74 20 74 68 65 20 70 31 20 70 61 72   that the p1 par
17790 61 6d 65 74 65 72 20 69 73 20 76 61 6c 69 64 2e  ameter is valid.
177a0 20 41 6c 73 6f 20 74 68 61 74 20 69 66 20 74 68   Also that if th
177b0 65 72 65 20 69 73 20 6e 6f 20 6f 70 65 6e 0a 20  ere is no open. 
177c0 20 2a 2a 20 74 72 61 6e 73 61 63 74 69 6f 6e 2c   ** transaction,
177d0 20 74 68 65 6e 20 74 68 65 72 65 20 63 61 6e 6e   then there cann
177e0 6f 74 20 62 65 20 61 6e 79 20 73 61 76 65 70 6f  ot be any savepo
177f0 69 6e 74 73 2e 20 0a 20 20 2a 2f 0a 20 20 61 73  ints. .  */.  as
17800 73 65 72 74 28 20 64 62 2d 3e 70 53 61 76 65 70  sert( db->pSavep
17810 6f 69 6e 74 3d 3d 30 20 7c 7c 20 64 62 2d 3e 61  oint==0 || db->a
17820 75 74 6f 43 6f 6d 6d 69 74 3d 3d 30 20 29 3b 0a  utoCommit==0 );.
17830 20 20 61 73 73 65 72 74 28 20 70 31 3d 3d 53 41    assert( p1==SA
17840 56 45 50 4f 49 4e 54 5f 42 45 47 49 4e 7c 7c 70  VEPOINT_BEGIN||p
17850 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 52 45 4c  1==SAVEPOINT_REL
17860 45 41 53 45 7c 7c 70 31 3d 3d 53 41 56 45 50 4f  EASE||p1==SAVEPO
17870 49 4e 54 5f 52 4f 4c 4c 42 41 43 4b 20 29 3b 0a  INT_ROLLBACK );.
17880 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e 70 53    assert( db->pS
17890 61 76 65 70 6f 69 6e 74 20 7c 7c 20 64 62 2d 3e  avepoint || db->
178a0 69 73 54 72 61 6e 73 61 63 74 69 6f 6e 53 61 76  isTransactionSav
178b0 65 70 6f 69 6e 74 3d 3d 30 20 29 3b 0a 20 20 61  epoint==0 );.  a
178c0 73 73 65 72 74 28 20 63 68 65 63 6b 53 61 76 65  ssert( checkSave
178d0 70 6f 69 6e 74 43 6f 75 6e 74 28 64 62 29 20 29  pointCount(db) )
178e0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 62  ;.  assert( p->b
178f0 49 73 52 65 61 64 65 72 20 29 3b 0a 0a 20 20 69  IsReader );..  i
17900 66 28 20 70 31 3d 3d 53 41 56 45 50 4f 49 4e 54  f( p1==SAVEPOINT
17910 5f 42 45 47 49 4e 20 29 7b 0a 20 20 20 20 69 66  _BEGIN ){.    if
17920 28 20 64 62 2d 3e 6e 56 64 62 65 57 72 69 74 65  ( db->nVdbeWrite
17930 3e 30 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 41  >0 ){.      /* A
17940 20 6e 65 77 20 73 61 76 65 70 6f 69 6e 74 20 63   new savepoint c
17950 61 6e 6e 6f 74 20 62 65 20 63 72 65 61 74 65 64  annot be created
17960 20 69 66 20 74 68 65 72 65 20 61 72 65 20 61 63   if there are ac
17970 74 69 76 65 20 77 72 69 74 65 20 0a 20 20 20 20  tive write .    
17980 20 20 2a 2a 20 73 74 61 74 65 6d 65 6e 74 73 20    ** statements 
17990 28 69 2e 65 2e 20 6f 70 65 6e 20 72 65 61 64 2f  (i.e. open read/
179a0 77 72 69 74 65 20 69 6e 63 72 65 6d 65 6e 74 61  write incrementa
179b0 6c 20 62 6c 6f 62 20 68 61 6e 64 6c 65 73 29 2e  l blob handles).
179c0 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20  .      */.      
179d0 73 71 6c 69 74 65 33 56 64 62 65 45 72 72 6f 72  sqlite3VdbeError
179e0 28 70 2c 20 22 63 61 6e 6e 6f 74 20 6f 70 65 6e  (p, "cannot open
179f0 20 73 61 76 65 70 6f 69 6e 74 20 2d 20 53 51 4c   savepoint - SQL
17a00 20 73 74 61 74 65 6d 65 6e 74 73 20 69 6e 20 70   statements in p
17a10 72 6f 67 72 65 73 73 22 29 3b 0a 20 20 20 20 20  rogress");.     
17a20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 42 55 53   rc = SQLITE_BUS
17a30 59 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  Y;.    }else{.  
17a40 20 20 20 20 6e 4e 61 6d 65 20 3d 20 73 71 6c 69      nName = sqli
17a50 74 65 33 53 74 72 6c 65 6e 33 30 28 7a 4e 61 6d  te3Strlen30(zNam
17a60 65 29 3b 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c  e);..#ifndef SQL
17a70 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c  ITE_OMIT_VIRTUAL
17a80 54 41 42 4c 45 0a 20 20 20 20 20 20 2f 2a 20 54  TABLE.      /* T
17a90 68 69 73 20 63 61 6c 6c 20 69 73 20 4f 6b 20 65  his call is Ok e
17aa0 76 65 6e 20 69 66 20 74 68 69 73 20 73 61 76 65  ven if this save
17ab0 70 6f 69 6e 74 20 69 73 20 61 63 74 75 61 6c 6c  point is actuall
17ac0 79 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 0a  y a transaction.
17ad0 20 20 20 20 20 20 2a 2a 20 73 61 76 65 70 6f 69        ** savepoi
17ae0 6e 74 20 28 61 6e 64 20 74 68 65 72 65 66 6f 72  nt (and therefor
17af0 65 20 73 68 6f 75 6c 64 20 6e 6f 74 20 70 72 6f  e should not pro
17b00 6d 70 74 20 78 53 61 76 65 70 6f 69 6e 74 28 29  mpt xSavepoint()
17b10 29 20 63 61 6c 6c 62 61 63 6b 73 2e 0a 20 20 20  ) callbacks..   
17b20 20 20 20 2a 2a 20 49 66 20 74 68 69 73 20 69 73     ** If this is
17b30 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 73   a transaction s
17b40 61 76 65 70 6f 69 6e 74 20 62 65 69 6e 67 20 6f  avepoint being o
17b50 70 65 6e 65 64 2c 20 69 74 20 69 73 20 67 75 61  pened, it is gua
17b60 72 61 6e 74 65 65 64 0a 20 20 20 20 20 20 2a 2a  ranteed.      **
17b70 20 74 68 61 74 20 74 68 65 20 64 62 2d 3e 61 56   that the db->aV
17b80 54 72 61 6e 73 5b 5d 20 61 72 72 61 79 20 69 73  Trans[] array is
17b90 20 65 6d 70 74 79 2e 20 20 2a 2f 0a 20 20 20 20   empty.  */.    
17ba0 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e 61 75    assert( db->au
17bb0 74 6f 43 6f 6d 6d 69 74 3d 3d 30 20 7c 7c 20 64  toCommit==0 || d
17bc0 62 2d 3e 6e 56 54 72 61 6e 73 3d 3d 30 20 29 3b  b->nVTrans==0 );
17bd0 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69  .      rc = sqli
17be0 74 65 33 56 74 61 62 53 61 76 65 70 6f 69 6e 74  te3VtabSavepoint
17bf0 28 64 62 2c 20 53 41 56 45 50 4f 49 4e 54 5f 42  (db, SAVEPOINT_B
17c00 45 47 49 4e 2c 0a 20 20 20 20 20 20 20 20 20 20  EGIN,.          
17c10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17c20 20 20 20 20 20 20 64 62 2d 3e 6e 53 74 61 74 65        db->nState
17c30 6d 65 6e 74 2b 64 62 2d 3e 6e 53 61 76 65 70 6f  ment+db->nSavepo
17c40 69 6e 74 29 3b 0a 20 20 20 20 20 20 69 66 28 20  int);.      if( 
17c50 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 20  rc!=SQLITE_OK ) 
17c60 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
17c70 6f 5f 65 72 72 6f 72 3b 0a 23 65 6e 64 69 66 0a  o_error;.#endif.
17c80 0a 20 20 20 20 20 20 2f 2a 20 43 72 65 61 74 65  .      /* Create
17c90 20 61 20 6e 65 77 20 73 61 76 65 70 6f 69 6e 74   a new savepoint
17ca0 20 73 74 72 75 63 74 75 72 65 2e 20 2a 2f 0a 20   structure. */. 
17cb0 20 20 20 20 20 70 4e 65 77 20 3d 20 73 71 6c 69       pNew = sqli
17cc0 74 65 33 44 62 4d 61 6c 6c 6f 63 52 61 77 4e 4e  te3DbMallocRawNN
17cd0 28 64 62 2c 20 73 69 7a 65 6f 66 28 53 61 76 65  (db, sizeof(Save
17ce0 70 6f 69 6e 74 29 2b 6e 4e 61 6d 65 2b 31 29 3b  point)+nName+1);
17cf0 0a 20 20 20 20 20 20 69 66 28 20 70 4e 65 77 20  .      if( pNew 
17d00 29 7b 0a 20 20 20 20 20 20 20 20 70 4e 65 77 2d  ){.        pNew-
17d10 3e 7a 4e 61 6d 65 20 3d 20 28 63 68 61 72 20 2a  >zName = (char *
17d20 29 26 70 4e 65 77 5b 31 5d 3b 0a 20 20 20 20 20  )&pNew[1];.     
17d30 20 20 20 6d 65 6d 63 70 79 28 70 4e 65 77 2d 3e     memcpy(pNew->
17d40 7a 4e 61 6d 65 2c 20 7a 4e 61 6d 65 2c 20 6e 4e  zName, zName, nN
17d50 61 6d 65 2b 31 29 3b 0a 20 20 20 20 0a 20 20 20  ame+1);.    .   
17d60 20 20 20 20 20 2f 2a 20 49 66 20 74 68 65 72 65       /* If there
17d70 20 69 73 20 6e 6f 20 6f 70 65 6e 20 74 72 61 6e   is no open tran
17d80 73 61 63 74 69 6f 6e 2c 20 74 68 65 6e 20 6d 61  saction, then ma
17d90 72 6b 20 74 68 69 73 20 61 73 20 61 20 73 70 65  rk this as a spe
17da0 63 69 61 6c 0a 20 20 20 20 20 20 20 20 2a 2a 20  cial.        ** 
17db0 22 74 72 61 6e 73 61 63 74 69 6f 6e 20 73 61 76  "transaction sav
17dc0 65 70 6f 69 6e 74 22 2e 20 2a 2f 0a 20 20 20 20  epoint". */.    
17dd0 20 20 20 20 69 66 28 20 64 62 2d 3e 61 75 74 6f      if( db->auto
17de0 43 6f 6d 6d 69 74 20 29 7b 0a 20 20 20 20 20 20  Commit ){.      
17df0 20 20 20 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d      db->autoComm
17e00 69 74 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20  it = 0;.        
17e10 20 20 64 62 2d 3e 69 73 54 72 61 6e 73 61 63 74    db->isTransact
17e20 69 6f 6e 53 61 76 65 70 6f 69 6e 74 20 3d 20 31  ionSavepoint = 1
17e30 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b  ;.        }else{
17e40 0a 20 20 20 20 20 20 20 20 20 20 64 62 2d 3e 6e  .          db->n
17e50 53 61 76 65 70 6f 69 6e 74 2b 2b 3b 0a 20 20 20  Savepoint++;.   
17e60 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 20 20       }..        
17e70 2f 2a 20 4c 69 6e 6b 20 74 68 65 20 6e 65 77 20  /* Link the new 
17e80 73 61 76 65 70 6f 69 6e 74 20 69 6e 74 6f 20 74  savepoint into t
17e90 68 65 20 64 61 74 61 62 61 73 65 20 68 61 6e 64  he database hand
17ea0 6c 65 27 73 20 6c 69 73 74 2e 20 2a 2f 0a 20 20  le's list. */.  
17eb0 20 20 20 20 20 20 70 4e 65 77 2d 3e 70 4e 65 78        pNew->pNex
17ec0 74 20 3d 20 64 62 2d 3e 70 53 61 76 65 70 6f 69  t = db->pSavepoi
17ed0 6e 74 3b 0a 20 20 20 20 20 20 20 20 64 62 2d 3e  nt;.        db->
17ee0 70 53 61 76 65 70 6f 69 6e 74 20 3d 20 70 4e 65  pSavepoint = pNe
17ef0 77 3b 0a 20 20 20 20 20 20 20 20 70 4e 65 77 2d  w;.        pNew-
17f00 3e 6e 44 65 66 65 72 72 65 64 43 6f 6e 73 20 3d  >nDeferredCons =
17f10 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 43 6f   db->nDeferredCo
17f20 6e 73 3b 0a 20 20 20 20 20 20 20 20 70 4e 65 77  ns;.        pNew
17f30 2d 3e 6e 44 65 66 65 72 72 65 64 49 6d 6d 43 6f  ->nDeferredImmCo
17f40 6e 73 20 3d 20 64 62 2d 3e 6e 44 65 66 65 72 72  ns = db->nDeferr
17f50 65 64 49 6d 6d 43 6f 6e 73 3b 0a 20 20 20 20 20  edImmCons;.     
17f60 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65   }.    }.  }else
17f70 7b 0a 20 20 20 20 69 53 61 76 65 70 6f 69 6e 74  {.    iSavepoint
17f80 20 3d 20 30 3b 0a 0a 20 20 20 20 2f 2a 20 46 69   = 0;..    /* Fi
17f90 6e 64 20 74 68 65 20 6e 61 6d 65 64 20 73 61 76  nd the named sav
17fa0 65 70 6f 69 6e 74 2e 20 49 66 20 74 68 65 72 65  epoint. If there
17fb0 20 69 73 20 6e 6f 20 73 75 63 68 20 73 61 76 65   is no such save
17fc0 70 6f 69 6e 74 2c 20 74 68 65 6e 20 61 6e 0a 20  point, then an. 
17fd0 20 20 20 2a 2a 20 61 6e 20 65 72 72 6f 72 20 69     ** an error i
17fe0 73 20 72 65 74 75 72 6e 65 64 20 74 6f 20 74 68  s returned to th
17ff0 65 20 75 73 65 72 2e 20 20 2a 2f 0a 20 20 20 20  e user.  */.    
18000 66 6f 72 28 0a 20 20 20 20 20 20 70 53 61 76 65  for(.      pSave
18010 70 6f 69 6e 74 20 3d 20 64 62 2d 3e 70 53 61 76  point = db->pSav
18020 65 70 6f 69 6e 74 3b 20 0a 20 20 20 20 20 20 70  epoint; .      p
18030 53 61 76 65 70 6f 69 6e 74 20 26 26 20 73 71 6c  Savepoint && sql
18040 69 74 65 33 53 74 72 49 43 6d 70 28 70 53 61 76  ite3StrICmp(pSav
18050 65 70 6f 69 6e 74 2d 3e 7a 4e 61 6d 65 2c 20 7a  epoint->zName, z
18060 4e 61 6d 65 29 3b 0a 20 20 20 20 20 20 70 53 61  Name);.      pSa
18070 76 65 70 6f 69 6e 74 20 3d 20 70 53 61 76 65 70  vepoint = pSavep
18080 6f 69 6e 74 2d 3e 70 4e 65 78 74 0a 20 20 20 20  oint->pNext.    
18090 29 7b 0a 20 20 20 20 20 20 69 53 61 76 65 70 6f  ){.      iSavepo
180a0 69 6e 74 2b 2b 3b 0a 20 20 20 20 7d 0a 20 20 20  int++;.    }.   
180b0 20 69 66 28 20 21 70 53 61 76 65 70 6f 69 6e 74   if( !pSavepoint
180c0 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65   ){.      sqlite
180d0 33 56 64 62 65 45 72 72 6f 72 28 70 2c 20 22 6e  3VdbeError(p, "n
180e0 6f 20 73 75 63 68 20 73 61 76 65 70 6f 69 6e 74  o such savepoint
180f0 3a 20 25 73 22 2c 20 7a 4e 61 6d 65 29 3b 0a 20  : %s", zName);. 
18100 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45       rc = SQLITE
18110 5f 45 52 52 4f 52 3b 0a 20 20 20 20 7d 65 6c 73  _ERROR;.    }els
18120 65 20 69 66 28 20 64 62 2d 3e 6e 56 64 62 65 57  e if( db->nVdbeW
18130 72 69 74 65 3e 30 20 26 26 20 70 31 3d 3d 53 41  rite>0 && p1==SA
18140 56 45 50 4f 49 4e 54 5f 52 45 4c 45 41 53 45 20  VEPOINT_RELEASE 
18150 29 7b 0a 20 20 20 20 20 20 2f 2a 20 49 74 20 69  ){.      /* It i
18160 73 20 6e 6f 74 20 70 6f 73 73 69 62 6c 65 20 74  s not possible t
18170 6f 20 72 65 6c 65 61 73 65 20 28 63 6f 6d 6d 69  o release (commi
18180 74 29 20 61 20 73 61 76 65 70 6f 69 6e 74 20 69  t) a savepoint i
18190 66 20 74 68 65 72 65 20 61 72 65 20 0a 20 20 20  f there are .   
181a0 20 20 20 2a 2a 20 61 63 74 69 76 65 20 77 72 69     ** active wri
181b0 74 65 20 73 74 61 74 65 6d 65 6e 74 73 2e 0a 20  te statements.. 
181c0 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 73 71       */.      sq
181d0 6c 69 74 65 33 56 64 62 65 45 72 72 6f 72 28 70  lite3VdbeError(p
181e0 2c 20 22 63 61 6e 6e 6f 74 20 72 65 6c 65 61 73  , "cannot releas
181f0 65 20 73 61 76 65 70 6f 69 6e 74 20 2d 20 22 0a  e savepoint - ".
18200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18210 20 20 20 20 20 20 20 20 20 20 22 53 51 4c 20 73            "SQL s
18220 74 61 74 65 6d 65 6e 74 73 20 69 6e 20 70 72 6f  tatements in pro
18230 67 72 65 73 73 22 29 3b 0a 20 20 20 20 20 20 72  gress");.      r
18240 63 20 3d 20 53 51 4c 49 54 45 5f 42 55 53 59 3b  c = SQLITE_BUSY;
18250 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 0a 20 20 20  .    }else{..   
18260 20 20 20 2f 2a 20 44 65 74 65 72 6d 69 6e 65 20     /* Determine 
18270 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 74  whether or not t
18280 68 69 73 20 69 73 20 61 20 74 72 61 6e 73 61 63  his is a transac
18290 74 69 6f 6e 20 73 61 76 65 70 6f 69 6e 74 2e 20  tion savepoint. 
182a0 49 66 20 73 6f 2c 0a 20 20 20 20 20 20 2a 2a 20  If so,.      ** 
182b0 61 6e 64 20 74 68 69 73 20 69 73 20 61 20 52 45  and this is a RE
182c0 4c 45 41 53 45 20 63 6f 6d 6d 61 6e 64 2c 20 74  LEASE command, t
182d0 68 65 6e 20 74 68 65 20 63 75 72 72 65 6e 74 20  hen the current 
182e0 74 72 61 6e 73 61 63 74 69 6f 6e 20 0a 20 20 20  transaction .   
182f0 20 20 20 2a 2a 20 69 73 20 63 6f 6d 6d 69 74 74     ** is committ
18300 65 64 2e 20 0a 20 20 20 20 20 20 2a 2f 0a 20 20  ed. .      */.  
18310 20 20 20 20 69 6e 74 20 69 73 54 72 61 6e 73 61      int isTransa
18320 63 74 69 6f 6e 20 3d 20 70 53 61 76 65 70 6f 69  ction = pSavepoi
18330 6e 74 2d 3e 70 4e 65 78 74 3d 3d 30 20 26 26 20  nt->pNext==0 && 
18340 64 62 2d 3e 69 73 54 72 61 6e 73 61 63 74 69 6f  db->isTransactio
18350 6e 53 61 76 65 70 6f 69 6e 74 3b 0a 20 20 20 20  nSavepoint;.    
18360 20 20 69 66 28 20 69 73 54 72 61 6e 73 61 63 74    if( isTransact
18370 69 6f 6e 20 26 26 20 70 31 3d 3d 53 41 56 45 50  ion && p1==SAVEP
18380 4f 49 4e 54 5f 52 45 4c 45 41 53 45 20 29 7b 0a  OINT_RELEASE ){.
18390 20 20 20 20 20 20 20 20 69 66 28 20 28 72 63 20          if( (rc 
183a0 3d 20 73 71 6c 69 74 65 33 56 64 62 65 43 68 65  = sqlite3VdbeChe
183b0 63 6b 46 6b 28 70 2c 20 31 29 29 21 3d 53 51 4c  ckFk(p, 1))!=SQL
183c0 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20  ITE_OK ){.      
183d0 20 20 20 20 67 6f 74 6f 20 76 64 62 65 5f 72 65      goto vdbe_re
183e0 74 75 72 6e 3b 0a 20 20 20 20 20 20 20 20 7d 0a  turn;.        }.
183f0 20 20 20 20 20 20 20 20 64 62 2d 3e 61 75 74 6f          db->auto
18400 43 6f 6d 6d 69 74 20 3d 20 31 3b 0a 20 20 20 20  Commit = 1;.    
18410 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 56      if( sqlite3V
18420 64 62 65 48 61 6c 74 28 70 29 3d 3d 53 51 4c 49  dbeHalt(p)==SQLI
18430 54 45 5f 42 55 53 59 20 29 7b 0a 20 20 20 20 20  TE_BUSY ){.     
18440 20 20 20 20 20 70 2d 3e 70 63 20 3d 20 28 69 6e       p->pc = (in
18450 74 29 28 70 4f 70 20 2d 20 61 4f 70 29 3b 0a 20  t)(pOp - aOp);. 
18460 20 20 20 20 20 20 20 20 20 64 62 2d 3e 61 75 74           db->aut
18470 6f 43 6f 6d 6d 69 74 20 3d 20 30 3b 0a 20 20 20  oCommit = 0;.   
18480 20 20 20 20 20 20 20 70 2d 3e 72 63 20 3d 20 72         p->rc = r
18490 63 20 3d 20 53 51 4c 49 54 45 5f 42 55 53 59 3b  c = SQLITE_BUSY;
184a0 0a 20 20 20 20 20 20 20 20 20 20 67 6f 74 6f 20  .          goto 
184b0 76 64 62 65 5f 72 65 74 75 72 6e 3b 0a 20 20 20  vdbe_return;.   
184c0 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 64       }.        d
184d0 62 2d 3e 69 73 54 72 61 6e 73 61 63 74 69 6f 6e  b->isTransaction
184e0 53 61 76 65 70 6f 69 6e 74 20 3d 20 30 3b 0a 20  Savepoint = 0;. 
184f0 20 20 20 20 20 20 20 72 63 20 3d 20 70 2d 3e 72         rc = p->r
18500 63 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a  c;.      }else{.
18510 20 20 20 20 20 20 20 20 69 6e 74 20 69 73 53 63          int isSc
18520 68 65 6d 61 43 68 61 6e 67 65 3b 0a 20 20 20 20  hemaChange;.    
18530 20 20 20 20 69 53 61 76 65 70 6f 69 6e 74 20 3d      iSavepoint =
18540 20 64 62 2d 3e 6e 53 61 76 65 70 6f 69 6e 74 20   db->nSavepoint 
18550 2d 20 69 53 61 76 65 70 6f 69 6e 74 20 2d 20 31  - iSavepoint - 1
18560 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 70 31  ;.        if( p1
18570 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 52 4f 4c 4c  ==SAVEPOINT_ROLL
18580 42 41 43 4b 20 29 7b 0a 20 20 20 20 20 20 20 20  BACK ){.        
18590 20 20 69 73 53 63 68 65 6d 61 43 68 61 6e 67 65    isSchemaChange
185a0 20 3d 20 28 64 62 2d 3e 6d 44 62 46 6c 61 67 73   = (db->mDbFlags
185b0 20 26 20 44 42 46 4c 41 47 5f 53 63 68 65 6d 61   & DBFLAG_Schema
185c0 43 68 61 6e 67 65 29 21 3d 30 3b 0a 20 20 20 20  Change)!=0;.    
185d0 20 20 20 20 20 20 66 6f 72 28 69 69 3d 30 3b 20        for(ii=0; 
185e0 69 69 3c 64 62 2d 3e 6e 44 62 3b 20 69 69 2b 2b  ii<db->nDb; ii++
185f0 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  ){.            r
18600 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
18610 54 72 69 70 41 6c 6c 43 75 72 73 6f 72 73 28 64  TripAllCursors(d
18620 62 2d 3e 61 44 62 5b 69 69 5d 2e 70 42 74 2c 0a  b->aDb[ii].pBt,.
18630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18650 20 20 20 20 20 20 20 53 51 4c 49 54 45 5f 41 42         SQLITE_AB
18660 4f 52 54 5f 52 4f 4c 4c 42 41 43 4b 2c 0a 20 20  ORT_ROLLBACK,.  
18670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18690 20 20 20 20 20 69 73 53 63 68 65 6d 61 43 68 61       isSchemaCha
186a0 6e 67 65 3d 3d 30 29 3b 0a 20 20 20 20 20 20 20  nge==0);.       
186b0 20 20 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c       if( rc!=SQL
186c0 49 54 45 5f 4f 4b 20 29 20 67 6f 74 6f 20 61 62  ITE_OK ) goto ab
186d0 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
186e0 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20  ;.          }.  
186f0 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20        }else{.   
18700 20 20 20 20 20 20 20 69 73 53 63 68 65 6d 61 43         isSchemaC
18710 68 61 6e 67 65 20 3d 20 30 3b 0a 20 20 20 20 20  hange = 0;.     
18720 20 20 20 7d 0a 20 20 20 20 20 20 20 20 66 6f 72     }.        for
18730 28 69 69 3d 30 3b 20 69 69 3c 64 62 2d 3e 6e 44  (ii=0; ii<db->nD
18740 62 3b 20 69 69 2b 2b 29 7b 0a 20 20 20 20 20 20  b; ii++){.      
18750 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
18760 42 74 72 65 65 53 61 76 65 70 6f 69 6e 74 28 64  BtreeSavepoint(d
18770 62 2d 3e 61 44 62 5b 69 69 5d 2e 70 42 74 2c 20  b->aDb[ii].pBt, 
18780 70 31 2c 20 69 53 61 76 65 70 6f 69 6e 74 29 3b  p1, iSavepoint);
18790 0a 20 20 20 20 20 20 20 20 20 20 69 66 28 20 72  .          if( r
187a0 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a  c!=SQLITE_OK ){.
187b0 20 20 20 20 20 20 20 20 20 20 20 20 67 6f 74 6f              goto
187c0 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
187d0 72 6f 72 3b 0a 20 20 20 20 20 20 20 20 20 20 7d  ror;.          }
187e0 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20  .        }.     
187f0 20 20 20 69 66 28 20 69 73 53 63 68 65 6d 61 43     if( isSchemaC
18800 68 61 6e 67 65 20 29 7b 0a 20 20 20 20 20 20 20  hange ){.       
18810 20 20 20 73 71 6c 69 74 65 33 45 78 70 69 72 65     sqlite3Expire
18820 50 72 65 70 61 72 65 64 53 74 61 74 65 6d 65 6e  PreparedStatemen
18830 74 73 28 64 62 29 3b 0a 20 20 20 20 20 20 20 20  ts(db);.        
18840 20 20 73 71 6c 69 74 65 33 52 65 73 65 74 41 6c    sqlite3ResetAl
18850 6c 53 63 68 65 6d 61 73 4f 66 43 6f 6e 6e 65 63  lSchemasOfConnec
18860 74 69 6f 6e 28 64 62 29 3b 0a 20 20 20 20 20 20  tion(db);.      
18870 20 20 20 20 64 62 2d 3e 6d 44 62 46 6c 61 67 73      db->mDbFlags
18880 20 7c 3d 20 44 42 46 4c 41 47 5f 53 63 68 65 6d   |= DBFLAG_Schem
18890 61 43 68 61 6e 67 65 3b 0a 20 20 20 20 20 20 20  aChange;.       
188a0 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20 0a 20 20   }.      }.  .  
188b0 20 20 20 20 2f 2a 20 52 65 67 61 72 64 6c 65 73      /* Regardles
188c0 73 20 6f 66 20 77 68 65 74 68 65 72 20 74 68 69  s of whether thi
188d0 73 20 69 73 20 61 20 52 45 4c 45 41 53 45 20 6f  s is a RELEASE o
188e0 72 20 52 4f 4c 4c 42 41 43 4b 2c 20 64 65 73 74  r ROLLBACK, dest
188f0 72 6f 79 20 61 6c 6c 20 0a 20 20 20 20 20 20 2a  roy all .      *
18900 2a 20 73 61 76 65 70 6f 69 6e 74 73 20 6e 65 73  * savepoints nes
18910 74 65 64 20 69 6e 73 69 64 65 20 6f 66 20 74 68  ted inside of th
18920 65 20 73 61 76 65 70 6f 69 6e 74 20 62 65 69 6e  e savepoint bein
18930 67 20 6f 70 65 72 61 74 65 64 20 6f 6e 2e 20 2a  g operated on. *
18940 2f 0a 20 20 20 20 20 20 77 68 69 6c 65 28 20 64  /.      while( d
18950 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74 21 3d 70  b->pSavepoint!=p
18960 53 61 76 65 70 6f 69 6e 74 20 29 7b 0a 20 20 20  Savepoint ){.   
18970 20 20 20 20 20 70 54 6d 70 20 3d 20 64 62 2d 3e       pTmp = db->
18980 70 53 61 76 65 70 6f 69 6e 74 3b 0a 20 20 20 20  pSavepoint;.    
18990 20 20 20 20 64 62 2d 3e 70 53 61 76 65 70 6f 69      db->pSavepoi
189a0 6e 74 20 3d 20 70 54 6d 70 2d 3e 70 4e 65 78 74  nt = pTmp->pNext
189b0 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  ;.        sqlite
189c0 33 44 62 46 72 65 65 28 64 62 2c 20 70 54 6d 70  3DbFree(db, pTmp
189d0 29 3b 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 6e  );.        db->n
189e0 53 61 76 65 70 6f 69 6e 74 2d 2d 3b 0a 20 20 20  Savepoint--;.   
189f0 20 20 20 7d 0a 0a 20 20 20 20 20 20 2f 2a 20 49     }..      /* I
18a00 66 20 69 74 20 69 73 20 61 20 52 45 4c 45 41 53  f it is a RELEAS
18a10 45 2c 20 74 68 65 6e 20 64 65 73 74 72 6f 79 20  E, then destroy 
18a20 74 68 65 20 73 61 76 65 70 6f 69 6e 74 20 62 65  the savepoint be
18a30 69 6e 67 20 6f 70 65 72 61 74 65 64 20 6f 6e 20  ing operated on 
18a40 0a 20 20 20 20 20 20 2a 2a 20 74 6f 6f 2e 20 49  .      ** too. I
18a50 66 20 69 74 20 69 73 20 61 20 52 4f 4c 4c 42 41  f it is a ROLLBA
18a60 43 4b 20 54 4f 2c 20 74 68 65 6e 20 73 65 74 20  CK TO, then set 
18a70 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 64 65  the number of de
18a80 66 65 72 72 65 64 20 0a 20 20 20 20 20 20 2a 2a  ferred .      **
18a90 20 63 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c   constraint viol
18aa0 61 74 69 6f 6e 73 20 70 72 65 73 65 6e 74 20 69  ations present i
18ab0 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20 74  n the database t
18ac0 6f 20 74 68 65 20 76 61 6c 75 65 20 73 74 6f 72  o the value stor
18ad0 65 64 0a 20 20 20 20 20 20 2a 2a 20 77 68 65 6e  ed.      ** when
18ae0 20 74 68 65 20 73 61 76 65 70 6f 69 6e 74 20 77   the savepoint w
18af0 61 73 20 63 72 65 61 74 65 64 2e 20 20 2a 2f 0a  as created.  */.
18b00 20 20 20 20 20 20 69 66 28 20 70 31 3d 3d 53 41        if( p1==SA
18b10 56 45 50 4f 49 4e 54 5f 52 45 4c 45 41 53 45 20  VEPOINT_RELEASE 
18b20 29 7b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72  ){.        asser
18b30 74 28 20 70 53 61 76 65 70 6f 69 6e 74 3d 3d 64  t( pSavepoint==d
18b40 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74 20 29 3b  b->pSavepoint );
18b50 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 70 53 61  .        db->pSa
18b60 76 65 70 6f 69 6e 74 20 3d 20 70 53 61 76 65 70  vepoint = pSavep
18b70 6f 69 6e 74 2d 3e 70 4e 65 78 74 3b 0a 20 20 20  oint->pNext;.   
18b80 20 20 20 20 20 73 71 6c 69 74 65 33 44 62 46 72       sqlite3DbFr
18b90 65 65 28 64 62 2c 20 70 53 61 76 65 70 6f 69 6e  ee(db, pSavepoin
18ba0 74 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20  t);.        if( 
18bb0 21 69 73 54 72 61 6e 73 61 63 74 69 6f 6e 20 29  !isTransaction )
18bc0 7b 0a 20 20 20 20 20 20 20 20 20 20 64 62 2d 3e  {.          db->
18bd0 6e 53 61 76 65 70 6f 69 6e 74 2d 2d 3b 0a 20 20  nSavepoint--;.  
18be0 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 65        }.      }e
18bf0 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 64 62 2d  lse{.        db-
18c00 3e 6e 44 65 66 65 72 72 65 64 43 6f 6e 73 20 3d  >nDeferredCons =
18c10 20 70 53 61 76 65 70 6f 69 6e 74 2d 3e 6e 44 65   pSavepoint->nDe
18c20 66 65 72 72 65 64 43 6f 6e 73 3b 0a 20 20 20 20  ferredCons;.    
18c30 20 20 20 20 64 62 2d 3e 6e 44 65 66 65 72 72 65      db->nDeferre
18c40 64 49 6d 6d 43 6f 6e 73 20 3d 20 70 53 61 76 65  dImmCons = pSave
18c50 70 6f 69 6e 74 2d 3e 6e 44 65 66 65 72 72 65 64  point->nDeferred
18c60 49 6d 6d 43 6f 6e 73 3b 0a 20 20 20 20 20 20 7d  ImmCons;.      }
18c70 0a 0a 20 20 20 20 20 20 69 66 28 20 21 69 73 54  ..      if( !isT
18c80 72 61 6e 73 61 63 74 69 6f 6e 20 7c 7c 20 70 31  ransaction || p1
18c90 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 52 4f 4c 4c  ==SAVEPOINT_ROLL
18ca0 42 41 43 4b 20 29 7b 0a 20 20 20 20 20 20 20 20  BACK ){.        
18cb0 72 63 20 3d 20 73 71 6c 69 74 65 33 56 74 61 62  rc = sqlite3Vtab
18cc0 53 61 76 65 70 6f 69 6e 74 28 64 62 2c 20 70 31  Savepoint(db, p1
18cd0 2c 20 69 53 61 76 65 70 6f 69 6e 74 29 3b 0a 20  , iSavepoint);. 
18ce0 20 20 20 20 20 20 20 69 66 28 20 72 63 21 3d 53         if( rc!=S
18cf0 51 4c 49 54 45 5f 4f 4b 20 29 20 67 6f 74 6f 20  QLITE_OK ) goto 
18d00 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
18d10 6f 72 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  or;.      }.    
18d20 7d 0a 20 20 7d 0a 20 20 69 66 28 20 72 63 20 29  }.  }.  if( rc )
18d30 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
18d40 74 6f 5f 65 72 72 6f 72 3b 0a 0a 20 20 62 72 65  to_error;..  bre
18d50 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
18d60 3a 20 41 75 74 6f 43 6f 6d 6d 69 74 20 50 31 20  : AutoCommit P1 
18d70 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 53  P2 * * *.**.** S
18d80 65 74 20 74 68 65 20 64 61 74 61 62 61 73 65 20  et the database 
18d90 61 75 74 6f 2d 63 6f 6d 6d 69 74 20 66 6c 61 67  auto-commit flag
18da0 20 74 6f 20 50 31 20 28 31 20 6f 72 20 30 29 2e   to P1 (1 or 0).
18db0 20 49 66 20 50 32 20 69 73 20 74 72 75 65 2c 20   If P2 is true, 
18dc0 72 6f 6c 6c 0a 2a 2a 20 62 61 63 6b 20 61 6e 79  roll.** back any
18dd0 20 63 75 72 72 65 6e 74 6c 79 20 61 63 74 69 76   currently activ
18de0 65 20 62 74 72 65 65 20 74 72 61 6e 73 61 63 74  e btree transact
18df0 69 6f 6e 73 2e 20 49 66 20 74 68 65 72 65 20 61  ions. If there a
18e00 72 65 20 61 6e 79 20 61 63 74 69 76 65 0a 2a 2a  re any active.**
18e10 20 56 4d 73 20 28 61 70 61 72 74 20 66 72 6f 6d   VMs (apart from
18e20 20 74 68 69 73 20 6f 6e 65 29 2c 20 74 68 65 6e   this one), then
18e30 20 61 20 52 4f 4c 4c 42 41 43 4b 20 66 61 69 6c   a ROLLBACK fail
18e40 73 2e 20 20 41 20 43 4f 4d 4d 49 54 20 66 61 69  s.  A COMMIT fai
18e50 6c 73 20 69 66 0a 2a 2a 20 74 68 65 72 65 20 61  ls if.** there a
18e60 72 65 20 61 63 74 69 76 65 20 77 72 69 74 69 6e  re active writin
18e70 67 20 56 4d 73 20 6f 72 20 61 63 74 69 76 65 20  g VMs or active 
18e80 56 4d 73 20 74 68 61 74 20 75 73 65 20 73 68 61  VMs that use sha
18e90 72 65 64 20 63 61 63 68 65 2e 0a 2a 2a 0a 2a 2a  red cache..**.**
18ea0 20 54 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f   This instructio
18eb0 6e 20 63 61 75 73 65 73 20 74 68 65 20 56 4d 20  n causes the VM 
18ec0 74 6f 20 68 61 6c 74 2e 0a 2a 2f 0a 63 61 73 65  to halt..*/.case
18ed0 20 4f 50 5f 41 75 74 6f 43 6f 6d 6d 69 74 3a 20   OP_AutoCommit: 
18ee0 7b 0a 20 20 69 6e 74 20 64 65 73 69 72 65 64 41  {.  int desiredA
18ef0 75 74 6f 43 6f 6d 6d 69 74 3b 0a 20 20 69 6e 74  utoCommit;.  int
18f00 20 69 52 6f 6c 6c 62 61 63 6b 3b 0a 0a 20 20 64   iRollback;..  d
18f10 65 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74  esiredAutoCommit
18f20 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 69 52   = pOp->p1;.  iR
18f30 6f 6c 6c 62 61 63 6b 20 3d 20 70 4f 70 2d 3e 70  ollback = pOp->p
18f40 32 3b 0a 20 20 61 73 73 65 72 74 28 20 64 65 73  2;.  assert( des
18f50 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74 3d 3d  iredAutoCommit==
18f60 31 20 7c 7c 20 64 65 73 69 72 65 64 41 75 74 6f  1 || desiredAuto
18f70 43 6f 6d 6d 69 74 3d 3d 30 20 29 3b 0a 20 20 61  Commit==0 );.  a
18f80 73 73 65 72 74 28 20 64 65 73 69 72 65 64 41 75  ssert( desiredAu
18f90 74 6f 43 6f 6d 6d 69 74 3d 3d 31 20 7c 7c 20 69  toCommit==1 || i
18fa0 52 6f 6c 6c 62 61 63 6b 3d 3d 30 20 29 3b 0a 20  Rollback==0 );. 
18fb0 20 61 73 73 65 72 74 28 20 64 62 2d 3e 6e 56 64   assert( db->nVd
18fc0 62 65 41 63 74 69 76 65 3e 30 20 29 3b 20 20 2f  beActive>0 );  /
18fd0 2a 20 41 74 20 6c 65 61 73 74 20 74 68 69 73 20  * At least this 
18fe0 6f 6e 65 20 56 4d 20 69 73 20 61 63 74 69 76 65  one VM is active
18ff0 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70 2d   */.  assert( p-
19000 3e 62 49 73 52 65 61 64 65 72 20 29 3b 0a 0a 20  >bIsReader );.. 
19010 20 69 66 28 20 64 65 73 69 72 65 64 41 75 74 6f   if( desiredAuto
19020 43 6f 6d 6d 69 74 21 3d 64 62 2d 3e 61 75 74 6f  Commit!=db->auto
19030 43 6f 6d 6d 69 74 20 29 7b 0a 20 20 20 20 69 66  Commit ){.    if
19040 28 20 69 52 6f 6c 6c 62 61 63 6b 20 29 7b 0a 20  ( iRollback ){. 
19050 20 20 20 20 20 61 73 73 65 72 74 28 20 64 65 73       assert( des
19060 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74 3d 3d  iredAutoCommit==
19070 31 20 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74  1 );.      sqlit
19080 65 33 52 6f 6c 6c 62 61 63 6b 41 6c 6c 28 64 62  e3RollbackAll(db
19090 2c 20 53 51 4c 49 54 45 5f 41 42 4f 52 54 5f 52  , SQLITE_ABORT_R
190a0 4f 4c 4c 42 41 43 4b 29 3b 0a 20 20 20 20 20 20  OLLBACK);.      
190b0 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 3d  db->autoCommit =
190c0 20 31 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66   1;.    }else if
190d0 28 20 64 65 73 69 72 65 64 41 75 74 6f 43 6f 6d  ( desiredAutoCom
190e0 6d 69 74 20 26 26 20 64 62 2d 3e 6e 56 64 62 65  mit && db->nVdbe
190f0 57 72 69 74 65 3e 30 20 29 7b 0a 20 20 20 20 20  Write>0 ){.     
19100 20 2f 2a 20 49 66 20 74 68 69 73 20 69 6e 73 74   /* If this inst
19110 72 75 63 74 69 6f 6e 20 69 6d 70 6c 65 6d 65 6e  ruction implemen
19120 74 73 20 61 20 43 4f 4d 4d 49 54 20 61 6e 64 20  ts a COMMIT and 
19130 6f 74 68 65 72 20 56 4d 73 20 61 72 65 20 77 72  other VMs are wr
19140 69 74 69 6e 67 0a 20 20 20 20 20 20 2a 2a 20 72  iting.      ** r
19150 65 74 75 72 6e 20 61 6e 20 65 72 72 6f 72 20 69  eturn an error i
19160 6e 64 69 63 61 74 69 6e 67 20 74 68 61 74 20 74  ndicating that t
19170 68 65 20 6f 74 68 65 72 20 56 4d 73 20 6d 75 73  he other VMs mus
19180 74 20 63 6f 6d 70 6c 65 74 65 20 66 69 72 73 74  t complete first
19190 2e 20 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20  . .      */.    
191a0 20 20 73 71 6c 69 74 65 33 56 64 62 65 45 72 72    sqlite3VdbeErr
191b0 6f 72 28 70 2c 20 22 63 61 6e 6e 6f 74 20 63 6f  or(p, "cannot co
191c0 6d 6d 69 74 20 74 72 61 6e 73 61 63 74 69 6f 6e  mmit transaction
191d0 20 2d 20 22 0a 20 20 20 20 20 20 20 20 20 20 20   - ".           
191e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
191f0 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 73 20 69  SQL statements i
19200 6e 20 70 72 6f 67 72 65 73 73 22 29 3b 0a 20 20  n progress");.  
19210 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f      rc = SQLITE_
19220 42 55 53 59 3b 0a 20 20 20 20 20 20 67 6f 74 6f  BUSY;.      goto
19230 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
19240 72 6f 72 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69  ror;.    }else i
19250 66 28 20 28 72 63 20 3d 20 73 71 6c 69 74 65 33  f( (rc = sqlite3
19260 56 64 62 65 43 68 65 63 6b 46 6b 28 70 2c 20 31  VdbeCheckFk(p, 1
19270 29 29 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b  ))!=SQLITE_OK ){
19280 0a 20 20 20 20 20 20 67 6f 74 6f 20 76 64 62 65  .      goto vdbe
19290 5f 72 65 74 75 72 6e 3b 0a 20 20 20 20 7d 65 6c  _return;.    }el
192a0 73 65 7b 0a 20 20 20 20 20 20 64 62 2d 3e 61 75  se{.      db->au
192b0 74 6f 43 6f 6d 6d 69 74 20 3d 20 28 75 38 29 64  toCommit = (u8)d
192c0 65 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74  esiredAutoCommit
192d0 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20  ;.    }.    if( 
192e0 73 71 6c 69 74 65 33 56 64 62 65 48 61 6c 74 28  sqlite3VdbeHalt(
192f0 70 29 3d 3d 53 51 4c 49 54 45 5f 42 55 53 59 20  p)==SQLITE_BUSY 
19300 29 7b 0a 20 20 20 20 20 20 70 2d 3e 70 63 20 3d  ){.      p->pc =
19310 20 28 69 6e 74 29 28 70 4f 70 20 2d 20 61 4f 70   (int)(pOp - aOp
19320 29 3b 0a 20 20 20 20 20 20 64 62 2d 3e 61 75 74  );.      db->aut
19330 6f 43 6f 6d 6d 69 74 20 3d 20 28 75 38 29 28 31  oCommit = (u8)(1
19340 2d 64 65 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d  -desiredAutoComm
19350 69 74 29 3b 0a 20 20 20 20 20 20 70 2d 3e 72 63  it);.      p->rc
19360 20 3d 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 42   = rc = SQLITE_B
19370 55 53 59 3b 0a 20 20 20 20 20 20 67 6f 74 6f 20  USY;.      goto 
19380 76 64 62 65 5f 72 65 74 75 72 6e 3b 0a 20 20 20  vdbe_return;.   
19390 20 7d 0a 20 20 20 20 61 73 73 65 72 74 28 20 64   }.    assert( d
193a0 62 2d 3e 6e 53 74 61 74 65 6d 65 6e 74 3d 3d 30  b->nStatement==0
193b0 20 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 43   );.    sqlite3C
193c0 6c 6f 73 65 53 61 76 65 70 6f 69 6e 74 73 28 64  loseSavepoints(d
193d0 62 29 3b 0a 20 20 20 20 69 66 28 20 70 2d 3e 72  b);.    if( p->r
193e0 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a  c==SQLITE_OK ){.
193f0 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54        rc = SQLIT
19400 45 5f 44 4f 4e 45 3b 0a 20 20 20 20 7d 65 6c 73  E_DONE;.    }els
19410 65 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 53 51  e{.      rc = SQ
19420 4c 49 54 45 5f 45 52 52 4f 52 3b 0a 20 20 20 20  LITE_ERROR;.    
19430 7d 0a 20 20 20 20 67 6f 74 6f 20 76 64 62 65 5f  }.    goto vdbe_
19440 72 65 74 75 72 6e 3b 0a 20 20 7d 65 6c 73 65 7b  return;.  }else{
19450 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
19460 45 72 72 6f 72 28 70 2c 0a 20 20 20 20 20 20 20  Error(p,.       
19470 20 28 21 64 65 73 69 72 65 64 41 75 74 6f 43 6f   (!desiredAutoCo
19480 6d 6d 69 74 29 3f 22 63 61 6e 6e 6f 74 20 73 74  mmit)?"cannot st
19490 61 72 74 20 61 20 74 72 61 6e 73 61 63 74 69 6f  art a transactio
194a0 6e 20 77 69 74 68 69 6e 20 61 20 74 72 61 6e 73  n within a trans
194b0 61 63 74 69 6f 6e 22 3a 28 0a 20 20 20 20 20 20  action":(.      
194c0 20 20 28 69 52 6f 6c 6c 62 61 63 6b 29 3f 22 63    (iRollback)?"c
194d0 61 6e 6e 6f 74 20 72 6f 6c 6c 62 61 63 6b 20 2d  annot rollback -
194e0 20 6e 6f 20 74 72 61 6e 73 61 63 74 69 6f 6e 20   no transaction 
194f0 69 73 20 61 63 74 69 76 65 22 3a 0a 20 20 20 20  is active":.    
19500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
19510 63 61 6e 6e 6f 74 20 63 6f 6d 6d 69 74 20 2d 20  cannot commit - 
19520 6e 6f 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69  no transaction i
19530 73 20 61 63 74 69 76 65 22 29 29 3b 0a 20 20 20  s active"));.   
19540 20 20 20 20 20 20 0a 20 20 20 20 72 63 20 3d 20        .    rc = 
19550 53 51 4c 49 54 45 5f 45 52 52 4f 52 3b 0a 20 20  SQLITE_ERROR;.  
19560 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65    goto abort_due
19570 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 7d 0a 20  _to_error;.  }. 
19580 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
19590 63 6f 64 65 3a 20 54 72 61 6e 73 61 63 74 69 6f  code: Transactio
195a0 6e 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35  n P1 P2 P3 P4 P5
195b0 0a 2a 2a 0a 2a 2a 20 42 65 67 69 6e 20 61 20 74  .**.** Begin a t
195c0 72 61 6e 73 61 63 74 69 6f 6e 20 6f 6e 20 64 61  ransaction on da
195d0 74 61 62 61 73 65 20 50 31 20 69 66 20 61 20 74  tabase P1 if a t
195e0 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 6e 6f  ransaction is no
195f0 74 20 61 6c 72 65 61 64 79 0a 2a 2a 20 61 63 74  t already.** act
19600 69 76 65 2e 0a 2a 2a 20 49 66 20 50 32 20 69 73  ive..** If P2 is
19610 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65 6e 20   non-zero, then 
19620 61 20 77 72 69 74 65 2d 74 72 61 6e 73 61 63 74  a write-transact
19630 69 6f 6e 20 69 73 20 73 74 61 72 74 65 64 2c 20  ion is started, 
19640 6f 72 20 69 66 20 61 20 0a 2a 2a 20 72 65 61 64  or if a .** read
19650 2d 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20  -transaction is 
19660 61 6c 72 65 61 64 79 20 61 63 74 69 76 65 2c 20  already active, 
19670 69 74 20 69 73 20 75 70 67 72 61 64 65 64 20 74  it is upgraded t
19680 6f 20 61 20 77 72 69 74 65 2d 74 72 61 6e 73 61  o a write-transa
19690 63 74 69 6f 6e 2e 0a 2a 2a 20 49 66 20 50 32 20  ction..** If P2 
196a0 69 73 20 7a 65 72 6f 2c 20 74 68 65 6e 20 61 20  is zero, then a 
196b0 72 65 61 64 2d 74 72 61 6e 73 61 63 74 69 6f 6e  read-transaction
196c0 20 69 73 20 73 74 61 72 74 65 64 2e 0a 2a 2a 0a   is started..**.
196d0 2a 2a 20 50 31 20 69 73 20 74 68 65 20 69 6e 64  ** P1 is the ind
196e0 65 78 20 6f 66 20 74 68 65 20 64 61 74 61 62 61  ex of the databa
196f0 73 65 20 66 69 6c 65 20 6f 6e 20 77 68 69 63 68  se file on which
19700 20 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e   the transaction
19710 20 69 73 0a 2a 2a 20 73 74 61 72 74 65 64 2e 20   is.** started. 
19720 20 49 6e 64 65 78 20 30 20 69 73 20 74 68 65 20   Index 0 is the 
19730 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 66 69  main database fi
19740 6c 65 20 61 6e 64 20 69 6e 64 65 78 20 31 20 69  le and index 1 i
19750 73 20 74 68 65 0a 2a 2a 20 66 69 6c 65 20 75 73  s the.** file us
19760 65 64 20 66 6f 72 20 74 65 6d 70 6f 72 61 72 79  ed for temporary
19770 20 74 61 62 6c 65 73 2e 20 20 49 6e 64 69 63 65   tables.  Indice
19780 73 20 6f 66 20 32 20 6f 72 20 6d 6f 72 65 20 61  s of 2 or more a
19790 72 65 20 75 73 65 64 20 66 6f 72 0a 2a 2a 20 61  re used for.** a
197a0 74 74 61 63 68 65 64 20 64 61 74 61 62 61 73 65  ttached database
197b0 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 61 20 77 72  s..**.** If a wr
197c0 69 74 65 2d 74 72 61 6e 73 61 63 74 69 6f 6e 20  ite-transaction 
197d0 69 73 20 73 74 61 72 74 65 64 20 61 6e 64 20 74  is started and t
197e0 68 65 20 56 64 62 65 2e 75 73 65 73 53 74 6d 74  he Vdbe.usesStmt
197f0 4a 6f 75 72 6e 61 6c 20 66 6c 61 67 20 69 73 0a  Journal flag is.
19800 2a 2a 20 74 72 75 65 20 28 74 68 69 73 20 66 6c  ** true (this fl
19810 61 67 20 69 73 20 73 65 74 20 69 66 20 74 68 65  ag is set if the
19820 20 56 64 62 65 20 6d 61 79 20 6d 6f 64 69 66 79   Vdbe may modify
19830 20 6d 6f 72 65 20 74 68 61 6e 20 6f 6e 65 20 72   more than one r
19840 6f 77 20 61 6e 64 20 6d 61 79 0a 2a 2a 20 74 68  ow and may.** th
19850 72 6f 77 20 61 6e 20 41 42 4f 52 54 20 65 78 63  row an ABORT exc
19860 65 70 74 69 6f 6e 29 2c 20 61 20 73 74 61 74 65  eption), a state
19870 6d 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e  ment transaction
19880 20 6d 61 79 20 61 6c 73 6f 20 62 65 20 6f 70 65   may also be ope
19890 6e 65 64 2e 0a 2a 2a 20 4d 6f 72 65 20 73 70 65  ned..** More spe
198a0 63 69 66 69 63 61 6c 6c 79 2c 20 61 20 73 74 61  cifically, a sta
198b0 74 65 6d 65 6e 74 20 74 72 61 6e 73 61 63 74 69  tement transacti
198c0 6f 6e 20 69 73 20 6f 70 65 6e 65 64 20 69 66 66  on is opened iff
198d0 20 74 68 65 20 64 61 74 61 62 61 73 65 0a 2a 2a   the database.**
198e0 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 69 73 20 63   connection is c
198f0 75 72 72 65 6e 74 6c 79 20 6e 6f 74 20 69 6e 20  urrently not in 
19900 61 75 74 6f 63 6f 6d 6d 69 74 20 6d 6f 64 65 2c  autocommit mode,
19910 20 6f 72 20 69 66 20 74 68 65 72 65 20 61 72 65   or if there are
19920 20 6f 74 68 65 72 0a 2a 2a 20 61 63 74 69 76 65   other.** active
19930 20 73 74 61 74 65 6d 65 6e 74 73 2e 20 41 20 73   statements. A s
19940 74 61 74 65 6d 65 6e 74 20 74 72 61 6e 73 61 63  tatement transac
19950 74 69 6f 6e 20 61 6c 6c 6f 77 73 20 74 68 65 20  tion allows the 
19960 63 68 61 6e 67 65 73 20 6d 61 64 65 20 62 79 20  changes made by 
19970 74 68 69 73 0a 2a 2a 20 56 44 42 45 20 74 6f 20  this.** VDBE to 
19980 62 65 20 72 6f 6c 6c 65 64 20 62 61 63 6b 20 61  be rolled back a
19990 66 74 65 72 20 61 6e 20 65 72 72 6f 72 20 77 69  fter an error wi
199a0 74 68 6f 75 74 20 68 61 76 69 6e 67 20 74 6f 20  thout having to 
199b0 72 6f 6c 6c 20 62 61 63 6b 20 74 68 65 0a 2a 2a  roll back the.**
199c0 20 65 6e 74 69 72 65 20 74 72 61 6e 73 61 63 74   entire transact
199d0 69 6f 6e 2e 20 49 66 20 6e 6f 20 65 72 72 6f 72  ion. If no error
199e0 20 69 73 20 65 6e 63 6f 75 6e 74 65 72 65 64 2c   is encountered,
199f0 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74 20 74   the statement t
19a00 72 61 6e 73 61 63 74 69 6f 6e 0a 2a 2a 20 77 69  ransaction.** wi
19a10 6c 6c 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79  ll automatically
19a20 20 63 6f 6d 6d 69 74 20 77 68 65 6e 20 74 68 65   commit when the
19a30 20 56 44 42 45 20 68 61 6c 74 73 2e 0a 2a 2a 0a   VDBE halts..**.
19a40 2a 2a 20 49 66 20 50 35 21 3d 30 20 74 68 65 6e  ** If P5!=0 then
19a50 20 74 68 69 73 20 6f 70 63 6f 64 65 20 61 6c 73   this opcode als
19a60 6f 20 63 68 65 63 6b 73 20 74 68 65 20 73 63 68  o checks the sch
19a70 65 6d 61 20 63 6f 6f 6b 69 65 20 61 67 61 69 6e  ema cookie again
19a80 73 74 20 50 33 0a 2a 2a 20 61 6e 64 20 74 68 65  st P3.** and the
19a90 20 73 63 68 65 6d 61 20 67 65 6e 65 72 61 74 69   schema generati
19aa0 6f 6e 20 63 6f 75 6e 74 65 72 20 61 67 61 69 6e  on counter again
19ab0 73 74 20 50 34 2e 0a 2a 2a 20 54 68 65 20 63 6f  st P4..** The co
19ac0 6f 6b 69 65 20 63 68 61 6e 67 65 73 20 69 74 73  okie changes its
19ad0 20 76 61 6c 75 65 20 77 68 65 6e 65 76 65 72 20   value whenever 
19ae0 74 68 65 20 64 61 74 61 62 61 73 65 20 73 63 68  the database sch
19af0 65 6d 61 20 63 68 61 6e 67 65 73 2e 0a 2a 2a 20  ema changes..** 
19b00 54 68 69 73 20 6f 70 65 72 61 74 69 6f 6e 20 69  This operation i
19b10 73 20 75 73 65 64 20 74 6f 20 64 65 74 65 63 74  s used to detect
19b20 20 77 68 65 6e 20 74 68 61 74 20 74 68 65 20 63   when that the c
19b30 6f 6f 6b 69 65 20 68 61 73 20 63 68 61 6e 67 65  ookie has change
19b40 64 0a 2a 2a 20 61 6e 64 20 74 68 61 74 20 74 68  d.** and that th
19b50 65 20 63 75 72 72 65 6e 74 20 70 72 6f 63 65 73  e current proces
19b60 73 20 6e 65 65 64 73 20 74 6f 20 72 65 72 65 61  s needs to rerea
19b70 64 20 74 68 65 20 73 63 68 65 6d 61 2e 20 20 49  d the schema.  I
19b80 66 20 74 68 65 20 73 63 68 65 6d 61 0a 2a 2a 20  f the schema.** 
19b90 63 6f 6f 6b 69 65 20 69 6e 20 50 33 20 64 69 66  cookie in P3 dif
19ba0 66 65 72 73 20 66 72 6f 6d 20 74 68 65 20 73 63  fers from the sc
19bb0 68 65 6d 61 20 63 6f 6f 6b 69 65 20 69 6e 20 74  hema cookie in t
19bc0 68 65 20 64 61 74 61 62 61 73 65 20 68 65 61 64  he database head
19bd0 65 72 20 6f 72 0a 2a 2a 20 69 66 20 74 68 65 20  er or.** if the 
19be0 73 63 68 65 6d 61 20 67 65 6e 65 72 61 74 69 6f  schema generatio
19bf0 6e 20 63 6f 75 6e 74 65 72 20 69 6e 20 50 34 20  n counter in P4 
19c00 64 69 66 66 65 72 73 20 66 72 6f 6d 20 74 68 65  differs from the
19c10 20 63 75 72 72 65 6e 74 0a 2a 2a 20 67 65 6e 65   current.** gene
19c20 72 61 74 69 6f 6e 20 63 6f 75 6e 74 65 72 2c 20  ration counter, 
19c30 74 68 65 6e 20 61 6e 20 53 51 4c 49 54 45 5f 53  then an SQLITE_S
19c40 43 48 45 4d 41 20 65 72 72 6f 72 20 69 73 20 72  CHEMA error is r
19c50 61 69 73 65 64 20 61 6e 64 20 65 78 65 63 75 74  aised and execut
19c60 69 6f 6e 0a 2a 2a 20 68 61 6c 74 73 2e 20 20 54  ion.** halts.  T
19c70 68 65 20 73 71 6c 69 74 65 33 5f 73 74 65 70 28  he sqlite3_step(
19c80 29 20 77 72 61 70 70 65 72 20 66 75 6e 63 74 69  ) wrapper functi
19c90 6f 6e 20 6d 69 67 68 74 20 74 68 65 6e 20 72 65  on might then re
19ca0 70 72 65 70 61 72 65 20 74 68 65 0a 2a 2a 20 73  prepare the.** s
19cb0 74 61 74 65 6d 65 6e 74 20 61 6e 64 20 72 65 72  tatement and rer
19cc0 75 6e 20 69 74 20 66 72 6f 6d 20 74 68 65 20 62  un it from the b
19cd0 65 67 69 6e 6e 69 6e 67 2e 0a 2a 2f 0a 63 61 73  eginning..*/.cas
19ce0 65 20 4f 50 5f 54 72 61 6e 73 61 63 74 69 6f 6e  e OP_Transaction
19cf0 3a 20 7b 0a 20 20 42 74 72 65 65 20 2a 70 42 74  : {.  Btree *pBt
19d00 3b 0a 20 20 69 6e 74 20 69 4d 65 74 61 3b 0a 20  ;.  int iMeta;. 
19d10 20 69 6e 74 20 69 47 65 6e 3b 0a 0a 20 20 61 73   int iGen;..  as
19d20 73 65 72 74 28 20 70 2d 3e 62 49 73 52 65 61 64  sert( p->bIsRead
19d30 65 72 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  er );.  assert( 
19d40 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30 20 7c  p->readOnly==0 |
19d50 7c 20 70 4f 70 2d 3e 70 32 3d 3d 30 20 29 3b 0a  | pOp->p2==0 );.
19d60 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
19d70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c  1>=0 && pOp->p1<
19d80 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73  db->nDb );.  ass
19d90 65 72 74 28 20 44 62 4d 61 73 6b 54 65 73 74 28  ert( DbMaskTest(
19da0 70 2d 3e 62 74 72 65 65 4d 61 73 6b 2c 20 70 4f  p->btreeMask, pO
19db0 70 2d 3e 70 31 29 20 29 3b 0a 20 20 69 66 28 20  p->p1) );.  if( 
19dc0 70 4f 70 2d 3e 70 32 20 26 26 20 28 64 62 2d 3e  pOp->p2 && (db->
19dd0 66 6c 61 67 73 20 26 20 53 51 4c 49 54 45 5f 51  flags & SQLITE_Q
19de0 75 65 72 79 4f 6e 6c 79 29 21 3d 30 20 29 7b 0a  ueryOnly)!=0 ){.
19df0 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f      rc = SQLITE_
19e00 52 45 41 44 4f 4e 4c 59 3b 0a 20 20 20 20 67 6f  READONLY;.    go
19e10 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
19e20 65 72 72 6f 72 3b 0a 20 20 7d 0a 20 20 70 42 74  error;.  }.  pBt
19e30 20 3d 20 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e   = db->aDb[pOp->
19e40 70 31 5d 2e 70 42 74 3b 0a 0a 20 20 69 66 28 20  p1].pBt;..  if( 
19e50 70 42 74 20 29 7b 0a 20 20 20 20 72 63 20 3d 20  pBt ){.    rc = 
19e60 73 71 6c 69 74 65 33 42 74 72 65 65 42 65 67 69  sqlite3BtreeBegi
19e70 6e 54 72 61 6e 73 28 70 42 74 2c 20 70 4f 70 2d  nTrans(pBt, pOp-
19e80 3e 70 32 29 3b 0a 20 20 20 20 74 65 73 74 63 61  >p2);.    testca
19e90 73 65 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 42  se( rc==SQLITE_B
19ea0 55 53 59 5f 53 4e 41 50 53 48 4f 54 20 29 3b 0a  USY_SNAPSHOT );.
19eb0 20 20 20 20 74 65 73 74 63 61 73 65 28 20 72 63      testcase( rc
19ec0 3d 3d 53 51 4c 49 54 45 5f 42 55 53 59 5f 52 45  ==SQLITE_BUSY_RE
19ed0 43 4f 56 45 52 59 20 29 3b 0a 20 20 20 20 69 66  COVERY );.    if
19ee0 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc!=SQLITE_OK 
19ef0 29 7b 0a 20 20 20 20 20 20 69 66 28 20 28 72 63  ){.      if( (rc
19f00 26 30 78 66 66 29 3d 3d 53 51 4c 49 54 45 5f 42  &0xff)==SQLITE_B
19f10 55 53 59 20 29 7b 0a 20 20 20 20 20 20 20 20 70  USY ){.        p
19f20 2d 3e 70 63 20 3d 20 28 69 6e 74 29 28 70 4f 70  ->pc = (int)(pOp
19f30 20 2d 20 61 4f 70 29 3b 0a 20 20 20 20 20 20 20   - aOp);.       
19f40 20 70 2d 3e 72 63 20 3d 20 72 63 3b 0a 20 20 20   p->rc = rc;.   
19f50 20 20 20 20 20 67 6f 74 6f 20 76 64 62 65 5f 72       goto vdbe_r
19f60 65 74 75 72 6e 3b 0a 20 20 20 20 20 20 7d 0a 20  eturn;.      }. 
19f70 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f       goto abort_
19f80 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
19f90 20 20 7d 0a 0a 20 20 20 20 69 66 28 20 70 4f 70    }..    if( pOp
19fa0 2d 3e 70 32 20 26 26 20 70 2d 3e 75 73 65 73 53  ->p2 && p->usesS
19fb0 74 6d 74 4a 6f 75 72 6e 61 6c 20 0a 20 20 20 20  tmtJournal .    
19fc0 20 26 26 20 28 64 62 2d 3e 61 75 74 6f 43 6f 6d   && (db->autoCom
19fd0 6d 69 74 3d 3d 30 20 7c 7c 20 64 62 2d 3e 6e 56  mit==0 || db->nV
19fe0 64 62 65 52 65 61 64 3e 31 29 20 0a 20 20 20 20  dbeRead>1) .    
19ff0 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  ){.      assert(
1a000 20 73 71 6c 69 74 65 33 42 74 72 65 65 49 73 49   sqlite3BtreeIsI
1a010 6e 54 72 61 6e 73 28 70 42 74 29 20 29 3b 0a 20  nTrans(pBt) );. 
1a020 20 20 20 20 20 69 66 28 20 70 2d 3e 69 53 74 61       if( p->iSta
1a030 74 65 6d 65 6e 74 3d 3d 30 20 29 7b 0a 20 20 20  tement==0 ){.   
1a040 20 20 20 20 20 61 73 73 65 72 74 28 20 64 62 2d       assert( db-
1a050 3e 6e 53 74 61 74 65 6d 65 6e 74 3e 3d 30 20 26  >nStatement>=0 &
1a060 26 20 64 62 2d 3e 6e 53 61 76 65 70 6f 69 6e 74  & db->nSavepoint
1a070 3e 3d 30 20 29 3b 0a 20 20 20 20 20 20 20 20 64  >=0 );.        d
1a080 62 2d 3e 6e 53 74 61 74 65 6d 65 6e 74 2b 2b 3b  b->nStatement++;
1a090 20 0a 20 20 20 20 20 20 20 20 70 2d 3e 69 53 74   .        p->iSt
1a0a0 61 74 65 6d 65 6e 74 20 3d 20 64 62 2d 3e 6e 53  atement = db->nS
1a0b0 61 76 65 70 6f 69 6e 74 20 2b 20 64 62 2d 3e 6e  avepoint + db->n
1a0c0 53 74 61 74 65 6d 65 6e 74 3b 0a 20 20 20 20 20  Statement;.     
1a0d0 20 7d 0a 0a 20 20 20 20 20 20 72 63 20 3d 20 73   }..      rc = s
1a0e0 71 6c 69 74 65 33 56 74 61 62 53 61 76 65 70 6f  qlite3VtabSavepo
1a0f0 69 6e 74 28 64 62 2c 20 53 41 56 45 50 4f 49 4e  int(db, SAVEPOIN
1a100 54 5f 42 45 47 49 4e 2c 20 70 2d 3e 69 53 74 61  T_BEGIN, p->iSta
1a110 74 65 6d 65 6e 74 2d 31 29 3b 0a 20 20 20 20 20  tement-1);.     
1a120 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f   if( rc==SQLITE_
1a130 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 72 63  OK ){.        rc
1a140 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 42   = sqlite3BtreeB
1a150 65 67 69 6e 53 74 6d 74 28 70 42 74 2c 20 70 2d  eginStmt(pBt, p-
1a160 3e 69 53 74 61 74 65 6d 65 6e 74 29 3b 0a 20 20  >iStatement);.  
1a170 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 2f 2a 20      }..      /* 
1a180 53 74 6f 72 65 20 74 68 65 20 63 75 72 72 65 6e  Store the curren
1a190 74 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 64  t value of the d
1a1a0 61 74 61 62 61 73 65 20 68 61 6e 64 6c 65 73 20  atabase handles 
1a1b0 64 65 66 65 72 72 65 64 20 63 6f 6e 73 74 72 61  deferred constra
1a1c0 69 6e 74 0a 20 20 20 20 20 20 2a 2a 20 63 6f 75  int.      ** cou
1a1d0 6e 74 65 72 2e 20 49 66 20 74 68 65 20 73 74 61  nter. If the sta
1a1e0 74 65 6d 65 6e 74 20 74 72 61 6e 73 61 63 74 69  tement transacti
1a1f0 6f 6e 20 6e 65 65 64 73 20 74 6f 20 62 65 20 72  on needs to be r
1a200 6f 6c 6c 65 64 20 62 61 63 6b 2c 0a 20 20 20 20  olled back,.    
1a210 20 20 2a 2a 20 74 68 65 20 76 61 6c 75 65 20 6f    ** the value o
1a220 66 20 74 68 69 73 20 63 6f 75 6e 74 65 72 20 6e  f this counter n
1a230 65 65 64 73 20 74 6f 20 62 65 20 72 65 73 74 6f  eeds to be resto
1a240 72 65 64 20 74 6f 6f 2e 20 20 2a 2f 0a 20 20 20  red too.  */.   
1a250 20 20 20 70 2d 3e 6e 53 74 6d 74 44 65 66 43 6f     p->nStmtDefCo
1a260 6e 73 20 3d 20 64 62 2d 3e 6e 44 65 66 65 72 72  ns = db->nDeferr
1a270 65 64 43 6f 6e 73 3b 0a 20 20 20 20 20 20 70 2d  edCons;.      p-
1a280 3e 6e 53 74 6d 74 44 65 66 49 6d 6d 43 6f 6e 73  >nStmtDefImmCons
1a290 20 3d 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64   = db->nDeferred
1a2a0 49 6d 6d 43 6f 6e 73 3b 0a 20 20 20 20 7d 0a 0a  ImmCons;.    }..
1a2b0 20 20 20 20 2f 2a 20 47 61 74 68 65 72 20 74 68      /* Gather th
1a2c0 65 20 73 63 68 65 6d 61 20 76 65 72 73 69 6f 6e  e schema version
1a2d0 20 6e 75 6d 62 65 72 20 66 6f 72 20 63 68 65 63   number for chec
1a2e0 6b 69 6e 67 3a 0a 20 20 20 20 2a 2a 20 49 4d 50  king:.    ** IMP
1a2f0 4c 45 4d 45 4e 54 41 54 49 4f 4e 2d 4f 46 3a 20  LEMENTATION-OF: 
1a300 52 2d 30 33 31 38 39 2d 35 31 31 33 35 20 41 73  R-03189-51135 As
1a310 20 65 61 63 68 20 53 51 4c 20 73 74 61 74 65 6d   each SQL statem
1a320 65 6e 74 20 72 75 6e 73 2c 20 74 68 65 20 73 63  ent runs, the sc
1a330 68 65 6d 61 0a 20 20 20 20 2a 2a 20 76 65 72 73  hema.    ** vers
1a340 69 6f 6e 20 69 73 20 63 68 65 63 6b 65 64 20 74  ion is checked t
1a350 6f 20 65 6e 73 75 72 65 20 74 68 61 74 20 74 68  o ensure that th
1a360 65 20 73 63 68 65 6d 61 20 68 61 73 20 6e 6f 74  e schema has not
1a370 20 63 68 61 6e 67 65 64 20 73 69 6e 63 65 20 74   changed since t
1a380 68 65 0a 20 20 20 20 2a 2a 20 53 51 4c 20 73 74  he.    ** SQL st
1a390 61 74 65 6d 65 6e 74 20 77 61 73 20 70 72 65 70  atement was prep
1a3a0 61 72 65 64 2e 0a 20 20 20 20 2a 2f 0a 20 20 20  ared..    */.   
1a3b0 20 73 71 6c 69 74 65 33 42 74 72 65 65 47 65 74   sqlite3BtreeGet
1a3c0 4d 65 74 61 28 70 42 74 2c 20 42 54 52 45 45 5f  Meta(pBt, BTREE_
1a3d0 53 43 48 45 4d 41 5f 56 45 52 53 49 4f 4e 2c 20  SCHEMA_VERSION, 
1a3e0 28 75 33 32 20 2a 29 26 69 4d 65 74 61 29 3b 0a  (u32 *)&iMeta);.
1a3f0 20 20 20 20 69 47 65 6e 20 3d 20 64 62 2d 3e 61      iGen = db->a
1a400 44 62 5b 70 4f 70 2d 3e 70 31 5d 2e 70 53 63 68  Db[pOp->p1].pSch
1a410 65 6d 61 2d 3e 69 47 65 6e 65 72 61 74 69 6f 6e  ema->iGeneration
1a420 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 69  ;.  }else{.    i
1a430 47 65 6e 20 3d 20 69 4d 65 74 61 20 3d 20 30 3b  Gen = iMeta = 0;
1a440 0a 20 20 7d 0a 20 20 61 73 73 65 72 74 28 20 70  .  }.  assert( p
1a450 4f 70 2d 3e 70 35 3d 3d 30 20 7c 7c 20 70 4f 70  Op->p5==0 || pOp
1a460 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54  ->p4type==P4_INT
1a470 33 32 20 29 3b 0a 20 20 69 66 28 20 70 4f 70 2d  32 );.  if( pOp-
1a480 3e 70 35 20 26 26 20 28 69 4d 65 74 61 21 3d 70  >p5 && (iMeta!=p
1a490 4f 70 2d 3e 70 33 20 7c 7c 20 69 47 65 6e 21 3d  Op->p3 || iGen!=
1a4a0 70 4f 70 2d 3e 70 34 2e 69 29 20 29 7b 0a 20 20  pOp->p4.i) ){.  
1a4b0 20 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 28    sqlite3DbFree(
1a4c0 64 62 2c 20 70 2d 3e 7a 45 72 72 4d 73 67 29 3b  db, p->zErrMsg);
1a4d0 0a 20 20 20 20 70 2d 3e 7a 45 72 72 4d 73 67 20  .    p->zErrMsg 
1a4e0 3d 20 73 71 6c 69 74 65 33 44 62 53 74 72 44 75  = sqlite3DbStrDu
1a4f0 70 28 64 62 2c 20 22 64 61 74 61 62 61 73 65 20  p(db, "database 
1a500 73 63 68 65 6d 61 20 68 61 73 20 63 68 61 6e 67  schema has chang
1a510 65 64 22 29 3b 0a 20 20 20 20 2f 2a 20 49 66 20  ed");.    /* If 
1a520 74 68 65 20 73 63 68 65 6d 61 2d 63 6f 6f 6b 69  the schema-cooki
1a530 65 20 66 72 6f 6d 20 74 68 65 20 64 61 74 61 62  e from the datab
1a540 61 73 65 20 66 69 6c 65 20 6d 61 74 63 68 65 73  ase file matches
1a550 20 74 68 65 20 63 6f 6f 6b 69 65 20 0a 20 20 20   the cookie .   
1a560 20 2a 2a 20 73 74 6f 72 65 64 20 77 69 74 68 20   ** stored with 
1a570 74 68 65 20 69 6e 2d 6d 65 6d 6f 72 79 20 72 65  the in-memory re
1a580 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66 20  presentation of 
1a590 74 68 65 20 73 63 68 65 6d 61 2c 20 64 6f 0a 20  the schema, do. 
1a5a0 20 20 20 2a 2a 20 6e 6f 74 20 72 65 6c 6f 61 64     ** not reload
1a5b0 20 74 68 65 20 73 63 68 65 6d 61 20 66 72 6f 6d   the schema from
1a5c0 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69   the database fi
1a5d0 6c 65 2e 0a 20 20 20 20 2a 2a 0a 20 20 20 20 2a  le..    **.    *
1a5e0 2a 20 49 66 20 76 69 72 74 75 61 6c 2d 74 61 62  * If virtual-tab
1a5f0 6c 65 73 20 61 72 65 20 69 6e 20 75 73 65 2c 20  les are in use, 
1a600 74 68 69 73 20 69 73 20 6e 6f 74 20 6a 75 73 74  this is not just
1a610 20 61 6e 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e   an optimization
1a620 2e 0a 20 20 20 20 2a 2a 20 4f 66 74 65 6e 2c 20  ..    ** Often, 
1a630 76 2d 74 61 62 6c 65 73 20 73 74 6f 72 65 20 74  v-tables store t
1a640 68 65 69 72 20 64 61 74 61 20 69 6e 20 6f 74 68  heir data in oth
1a650 65 72 20 53 51 4c 69 74 65 20 74 61 62 6c 65 73  er SQLite tables
1a660 2c 20 77 68 69 63 68 0a 20 20 20 20 2a 2a 20 61  , which.    ** a
1a670 72 65 20 71 75 65 72 69 65 64 20 66 72 6f 6d 20  re queried from 
1a680 77 69 74 68 69 6e 20 78 4e 65 78 74 28 29 20 61  within xNext() a
1a690 6e 64 20 6f 74 68 65 72 20 76 2d 74 61 62 6c 65  nd other v-table
1a6a0 20 6d 65 74 68 6f 64 73 20 75 73 69 6e 67 0a 20   methods using. 
1a6b0 20 20 20 2a 2a 20 70 72 65 70 61 72 65 64 20 71     ** prepared q
1a6c0 75 65 72 69 65 73 2e 20 49 66 20 73 75 63 68 20  ueries. If such 
1a6d0 61 20 71 75 65 72 79 20 69 73 20 6f 75 74 2d 6f  a query is out-o
1a6e0 66 2d 64 61 74 65 2c 20 77 65 20 64 6f 20 6e 6f  f-date, we do no
1a6f0 74 20 77 61 6e 74 20 74 6f 0a 20 20 20 20 2a 2a  t want to.    **
1a700 20 64 69 73 63 61 72 64 20 74 68 65 20 64 61 74   discard the dat
1a710 61 62 61 73 65 20 73 63 68 65 6d 61 2c 20 61 73  abase schema, as
1a720 20 74 68 65 20 75 73 65 72 20 63 6f 64 65 20 69   the user code i
1a730 6d 70 6c 65 6d 65 6e 74 69 6e 67 20 74 68 65 0a  mplementing the.
1a740 20 20 20 20 2a 2a 20 76 2d 74 61 62 6c 65 20 77      ** v-table w
1a750 6f 75 6c 64 20 68 61 76 65 20 74 6f 20 62 65 20  ould have to be 
1a760 72 65 61 64 79 20 66 6f 72 20 74 68 65 20 73 71  ready for the sq
1a770 6c 69 74 65 33 5f 76 74 61 62 20 73 74 72 75 63  lite3_vtab struc
1a780 74 75 72 65 20 69 74 73 65 6c 66 0a 20 20 20 20  ture itself.    
1a790 2a 2a 20 74 6f 20 62 65 20 69 6e 76 61 6c 69 64  ** to be invalid
1a7a0 61 74 65 64 20 77 68 65 6e 65 76 65 72 20 73 71  ated whenever sq
1a7b0 6c 69 74 65 33 5f 73 74 65 70 28 29 20 69 73 20  lite3_step() is 
1a7c0 63 61 6c 6c 65 64 20 66 72 6f 6d 20 77 69 74 68  called from with
1a7d0 69 6e 20 0a 20 20 20 20 2a 2a 20 61 20 76 2d 74  in .    ** a v-t
1a7e0 61 62 6c 65 20 6d 65 74 68 6f 64 2e 0a 20 20 20  able method..   
1a7f0 20 2a 2f 0a 20 20 20 20 69 66 28 20 64 62 2d 3e   */.    if( db->
1a800 61 44 62 5b 70 4f 70 2d 3e 70 31 5d 2e 70 53 63  aDb[pOp->p1].pSc
1a810 68 65 6d 61 2d 3e 73 63 68 65 6d 61 5f 63 6f 6f  hema->schema_coo
1a820 6b 69 65 21 3d 69 4d 65 74 61 20 29 7b 0a 20 20  kie!=iMeta ){.  
1a830 20 20 20 20 73 71 6c 69 74 65 33 52 65 73 65 74      sqlite3Reset
1a840 4f 6e 65 53 63 68 65 6d 61 28 64 62 2c 20 70 4f  OneSchema(db, pO
1a850 70 2d 3e 70 31 29 3b 0a 20 20 20 20 7d 0a 20 20  p->p1);.    }.  
1a860 20 20 70 2d 3e 65 78 70 69 72 65 64 20 3d 20 31    p->expired = 1
1a870 3b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54  ;.    rc = SQLIT
1a880 45 5f 53 43 48 45 4d 41 3b 0a 20 20 7d 0a 20 20  E_SCHEMA;.  }.  
1a890 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62  if( rc ) goto ab
1a8a0 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
1a8b0 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
1a8c0 20 4f 70 63 6f 64 65 3a 20 52 65 61 64 43 6f 6f   Opcode: ReadCoo
1a8d0 6b 69 65 20 50 31 20 50 32 20 50 33 20 2a 20 2a  kie P1 P2 P3 * *
1a8e0 0a 2a 2a 0a 2a 2a 20 52 65 61 64 20 63 6f 6f 6b  .**.** Read cook
1a8f0 69 65 20 6e 75 6d 62 65 72 20 50 33 20 66 72 6f  ie number P3 fro
1a900 6d 20 64 61 74 61 62 61 73 65 20 50 31 20 61 6e  m database P1 an
1a910 64 20 77 72 69 74 65 20 69 74 20 69 6e 74 6f 20  d write it into 
1a920 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 20  register P2..** 
1a930 50 33 3d 3d 31 20 69 73 20 74 68 65 20 73 63 68  P3==1 is the sch
1a940 65 6d 61 20 76 65 72 73 69 6f 6e 2e 20 20 50 33  ema version.  P3
1a950 3d 3d 32 20 69 73 20 74 68 65 20 64 61 74 61 62  ==2 is the datab
1a960 61 73 65 20 66 6f 72 6d 61 74 2e 0a 2a 2a 20 50  ase format..** P
1a970 33 3d 3d 33 20 69 73 20 74 68 65 20 72 65 63 6f  3==3 is the reco
1a980 6d 6d 65 6e 64 65 64 20 70 61 67 65 72 20 63 61  mmended pager ca
1a990 63 68 65 20 73 69 7a 65 2c 20 61 6e 64 20 73 6f  che size, and so
1a9a0 20 66 6f 72 74 68 2e 20 20 50 31 3d 3d 30 20 69   forth.  P1==0 i
1a9b0 73 0a 2a 2a 20 74 68 65 20 6d 61 69 6e 20 64 61  s.** the main da
1a9c0 74 61 62 61 73 65 20 66 69 6c 65 20 61 6e 64 20  tabase file and 
1a9d0 50 31 3d 3d 31 20 69 73 20 74 68 65 20 64 61 74  P1==1 is the dat
1a9e0 61 62 61 73 65 20 66 69 6c 65 20 75 73 65 64 20  abase file used 
1a9f0 74 6f 20 73 74 6f 72 65 0a 2a 2a 20 74 65 6d 70  to store.** temp
1aa00 6f 72 61 72 79 20 74 61 62 6c 65 73 2e 0a 2a 2a  orary tables..**
1aa10 0a 2a 2a 20 54 68 65 72 65 20 6d 75 73 74 20 62  .** There must b
1aa20 65 20 61 20 72 65 61 64 2d 6c 6f 63 6b 20 6f 6e  e a read-lock on
1aa30 20 74 68 65 20 64 61 74 61 62 61 73 65 20 28 65   the database (e
1aa40 69 74 68 65 72 20 61 20 74 72 61 6e 73 61 63 74  ither a transact
1aa50 69 6f 6e 0a 2a 2a 20 6d 75 73 74 20 62 65 20 73  ion.** must be s
1aa60 74 61 72 74 65 64 20 6f 72 20 74 68 65 72 65 20  tarted or there 
1aa70 6d 75 73 74 20 62 65 20 61 6e 20 6f 70 65 6e 20  must be an open 
1aa80 63 75 72 73 6f 72 29 20 62 65 66 6f 72 65 0a 2a  cursor) before.*
1aa90 2a 20 65 78 65 63 75 74 69 6e 67 20 74 68 69 73  * executing this
1aaa0 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f   instruction..*/
1aab0 0a 63 61 73 65 20 4f 50 5f 52 65 61 64 43 6f 6f  .case OP_ReadCoo
1aac0 6b 69 65 3a 20 7b 20 20 20 20 20 20 20 20 20 20  kie: {          
1aad0 20 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a       /* out2 */.
1aae0 20 20 69 6e 74 20 69 4d 65 74 61 3b 0a 20 20 69    int iMeta;.  i
1aaf0 6e 74 20 69 44 62 3b 0a 20 20 69 6e 74 20 69 43  nt iDb;.  int iC
1ab00 6f 6f 6b 69 65 3b 0a 0a 20 20 61 73 73 65 72 74  ookie;..  assert
1ab10 28 20 70 2d 3e 62 49 73 52 65 61 64 65 72 20 29  ( p->bIsReader )
1ab20 3b 0a 20 20 69 44 62 20 3d 20 70 4f 70 2d 3e 70  ;.  iDb = pOp->p
1ab30 31 3b 0a 20 20 69 43 6f 6f 6b 69 65 20 3d 20 70  1;.  iCookie = p
1ab40 4f 70 2d 3e 70 33 3b 0a 20 20 61 73 73 65 72 74  Op->p3;.  assert
1ab50 28 20 70 4f 70 2d 3e 70 33 3c 53 51 4c 49 54 45  ( pOp->p3<SQLITE
1ab60 5f 4e 5f 42 54 52 45 45 5f 4d 45 54 41 20 29 3b  _N_BTREE_META );
1ab70 0a 20 20 61 73 73 65 72 74 28 20 69 44 62 3e 3d  .  assert( iDb>=
1ab80 30 20 26 26 20 69 44 62 3c 64 62 2d 3e 6e 44 62  0 && iDb<db->nDb
1ab90 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 64 62   );.  assert( db
1aba0 2d 3e 61 44 62 5b 69 44 62 5d 2e 70 42 74 21 3d  ->aDb[iDb].pBt!=
1abb0 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 44  0 );.  assert( D
1abc0 62 4d 61 73 6b 54 65 73 74 28 70 2d 3e 62 74 72  bMaskTest(p->btr
1abd0 65 65 4d 61 73 6b 2c 20 69 44 62 29 20 29 3b 0a  eeMask, iDb) );.
1abe0 0a 20 20 73 71 6c 69 74 65 33 42 74 72 65 65 47  .  sqlite3BtreeG
1abf0 65 74 4d 65 74 61 28 64 62 2d 3e 61 44 62 5b 69  etMeta(db->aDb[i
1ac00 44 62 5d 2e 70 42 74 2c 20 69 43 6f 6f 6b 69 65  Db].pBt, iCookie
1ac10 2c 20 28 75 33 32 20 2a 29 26 69 4d 65 74 61 29  , (u32 *)&iMeta)
1ac20 3b 0a 20 20 70 4f 75 74 20 3d 20 6f 75 74 32 50  ;.  pOut = out2P
1ac30 72 65 72 65 6c 65 61 73 65 28 70 2c 20 70 4f 70  rerelease(p, pOp
1ac40 29 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d  );.  pOut->u.i =
1ac50 20 69 4d 65 74 61 3b 0a 20 20 62 72 65 61 6b 3b   iMeta;.  break;
1ac60 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53  .}../* Opcode: S
1ac70 65 74 43 6f 6f 6b 69 65 20 50 31 20 50 32 20 50  etCookie P1 P2 P
1ac80 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 57 72 69 74  3 * *.**.** Writ
1ac90 65 20 74 68 65 20 69 6e 74 65 67 65 72 20 76 61  e the integer va
1aca0 6c 75 65 20 50 33 20 69 6e 74 6f 20 63 6f 6f 6b  lue P3 into cook
1acb0 69 65 20 6e 75 6d 62 65 72 20 50 32 20 6f 66 20  ie number P2 of 
1acc0 64 61 74 61 62 61 73 65 20 50 31 2e 0a 2a 2a 20  database P1..** 
1acd0 50 32 3d 3d 31 20 69 73 20 74 68 65 20 73 63 68  P2==1 is the sch
1ace0 65 6d 61 20 76 65 72 73 69 6f 6e 2e 20 20 50 32  ema version.  P2
1acf0 3d 3d 32 20 69 73 20 74 68 65 20 64 61 74 61 62  ==2 is the datab
1ad00 61 73 65 20 66 6f 72 6d 61 74 2e 0a 2a 2a 20 50  ase format..** P
1ad10 32 3d 3d 33 20 69 73 20 74 68 65 20 72 65 63 6f  2==3 is the reco
1ad20 6d 6d 65 6e 64 65 64 20 70 61 67 65 72 20 63 61  mmended pager ca
1ad30 63 68 65 20 0a 2a 2a 20 73 69 7a 65 2c 20 61 6e  che .** size, an
1ad40 64 20 73 6f 20 66 6f 72 74 68 2e 20 20 50 31 3d  d so forth.  P1=
1ad50 3d 30 20 69 73 20 74 68 65 20 6d 61 69 6e 20 64  =0 is the main d
1ad60 61 74 61 62 61 73 65 20 66 69 6c 65 20 61 6e 64  atabase file and
1ad70 20 50 31 3d 3d 31 20 69 73 20 74 68 65 20 0a 2a   P1==1 is the .*
1ad80 2a 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  * database file 
1ad90 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20 74 65  used to store te
1ada0 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 73 2e 0a  mporary tables..
1adb0 2a 2a 0a 2a 2a 20 41 20 74 72 61 6e 73 61 63 74  **.** A transact
1adc0 69 6f 6e 20 6d 75 73 74 20 62 65 20 73 74 61 72  ion must be star
1add0 74 65 64 20 62 65 66 6f 72 65 20 65 78 65 63 75  ted before execu
1ade0 74 69 6e 67 20 74 68 69 73 20 6f 70 63 6f 64 65  ting this opcode
1adf0 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 65 74  ..*/.case OP_Set
1ae00 43 6f 6f 6b 69 65 3a 20 7b 0a 20 20 44 62 20 2a  Cookie: {.  Db *
1ae10 70 44 62 3b 0a 20 20 61 73 73 65 72 74 28 20 70  pDb;.  assert( p
1ae20 4f 70 2d 3e 70 32 3c 53 51 4c 49 54 45 5f 4e 5f  Op->p2<SQLITE_N_
1ae30 42 54 52 45 45 5f 4d 45 54 41 20 29 3b 0a 20 20  BTREE_META );.  
1ae40 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
1ae50 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 64 62  =0 && pOp->p1<db
1ae60 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73 65 72  ->nDb );.  asser
1ae70 74 28 20 44 62 4d 61 73 6b 54 65 73 74 28 70 2d  t( DbMaskTest(p-
1ae80 3e 62 74 72 65 65 4d 61 73 6b 2c 20 70 4f 70 2d  >btreeMask, pOp-
1ae90 3e 70 31 29 20 29 3b 0a 20 20 61 73 73 65 72 74  >p1) );.  assert
1aea0 28 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30  ( p->readOnly==0
1aeb0 20 29 3b 0a 20 20 70 44 62 20 3d 20 26 64 62 2d   );.  pDb = &db-
1aec0 3e 61 44 62 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  >aDb[pOp->p1];. 
1aed0 20 61 73 73 65 72 74 28 20 70 44 62 2d 3e 70 42   assert( pDb->pB
1aee0 74 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  t!=0 );.  assert
1aef0 28 20 73 71 6c 69 74 65 33 53 63 68 65 6d 61 4d  ( sqlite3SchemaM
1af00 75 74 65 78 48 65 6c 64 28 64 62 2c 20 70 4f 70  utexHeld(db, pOp
1af10 2d 3e 70 31 2c 20 30 29 20 29 3b 0a 20 20 2f 2a  ->p1, 0) );.  /*
1af20 20 53 65 65 20 6e 6f 74 65 20 61 62 6f 75 74 20   See note about 
1af30 69 6e 64 65 78 20 73 68 69 66 74 69 6e 67 20 6f  index shifting o
1af40 6e 20 4f 50 5f 52 65 61 64 43 6f 6f 6b 69 65 20  n OP_ReadCookie 
1af50 2a 2f 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65  */.  rc = sqlite
1af60 33 42 74 72 65 65 55 70 64 61 74 65 4d 65 74 61  3BtreeUpdateMeta
1af70 28 70 44 62 2d 3e 70 42 74 2c 20 70 4f 70 2d 3e  (pDb->pBt, pOp->
1af80 70 32 2c 20 70 4f 70 2d 3e 70 33 29 3b 0a 20 20  p2, pOp->p3);.  
1af90 69 66 28 20 70 4f 70 2d 3e 70 32 3d 3d 42 54 52  if( pOp->p2==BTR
1afa0 45 45 5f 53 43 48 45 4d 41 5f 56 45 52 53 49 4f  EE_SCHEMA_VERSIO
1afb0 4e 20 29 7b 0a 20 20 20 20 2f 2a 20 57 68 65 6e  N ){.    /* When
1afc0 20 74 68 65 20 73 63 68 65 6d 61 20 63 6f 6f 6b   the schema cook
1afd0 69 65 20 63 68 61 6e 67 65 73 2c 20 72 65 63 6f  ie changes, reco
1afe0 72 64 20 74 68 65 20 6e 65 77 20 63 6f 6f 6b 69  rd the new cooki
1aff0 65 20 69 6e 74 65 72 6e 61 6c 6c 79 20 2a 2f 0a  e internally */.
1b000 20 20 20 20 70 44 62 2d 3e 70 53 63 68 65 6d 61      pDb->pSchema
1b010 2d 3e 73 63 68 65 6d 61 5f 63 6f 6f 6b 69 65 20  ->schema_cookie 
1b020 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 20 20 64  = pOp->p3;.    d
1b030 62 2d 3e 6d 44 62 46 6c 61 67 73 20 7c 3d 20 44  b->mDbFlags |= D
1b040 42 46 4c 41 47 5f 53 63 68 65 6d 61 43 68 61 6e  BFLAG_SchemaChan
1b050 67 65 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20  ge;.  }else if( 
1b060 70 4f 70 2d 3e 70 32 3d 3d 42 54 52 45 45 5f 46  pOp->p2==BTREE_F
1b070 49 4c 45 5f 46 4f 52 4d 41 54 20 29 7b 0a 20 20  ILE_FORMAT ){.  
1b080 20 20 2f 2a 20 52 65 63 6f 72 64 20 63 68 61 6e    /* Record chan
1b090 67 65 73 20 69 6e 20 74 68 65 20 66 69 6c 65 20  ges in the file 
1b0a0 66 6f 72 6d 61 74 20 2a 2f 0a 20 20 20 20 70 44  format */.    pD
1b0b0 62 2d 3e 70 53 63 68 65 6d 61 2d 3e 66 69 6c 65  b->pSchema->file
1b0c0 5f 66 6f 72 6d 61 74 20 3d 20 70 4f 70 2d 3e 70  _format = pOp->p
1b0d0 33 3b 0a 20 20 7d 0a 20 20 69 66 28 20 70 4f 70  3;.  }.  if( pOp
1b0e0 2d 3e 70 31 3d 3d 31 20 29 7b 0a 20 20 20 20 2f  ->p1==1 ){.    /
1b0f0 2a 20 49 6e 76 61 6c 69 64 61 74 65 20 61 6c 6c  * Invalidate all
1b100 20 70 72 65 70 61 72 65 64 20 73 74 61 74 65 6d   prepared statem
1b110 65 6e 74 73 20 77 68 65 6e 65 76 65 72 20 74 68  ents whenever th
1b120 65 20 54 45 4d 50 20 64 61 74 61 62 61 73 65 0a  e TEMP database.
1b130 20 20 20 20 2a 2a 20 73 63 68 65 6d 61 20 69 73      ** schema is
1b140 20 63 68 61 6e 67 65 64 2e 20 20 54 69 63 6b 65   changed.  Ticke
1b150 74 20 23 31 36 34 34 20 2a 2f 0a 20 20 20 20 73  t #1644 */.    s
1b160 71 6c 69 74 65 33 45 78 70 69 72 65 50 72 65 70  qlite3ExpirePrep
1b170 61 72 65 64 53 74 61 74 65 6d 65 6e 74 73 28 64  aredStatements(d
1b180 62 29 3b 0a 20 20 20 20 70 2d 3e 65 78 70 69 72  b);.    p->expir
1b190 65 64 20 3d 20 30 3b 0a 20 20 7d 0a 20 20 69 66  ed = 0;.  }.  if
1b1a0 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72  ( rc ) goto abor
1b1b0 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
1b1c0 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
1b1d0 70 63 6f 64 65 3a 20 4f 70 65 6e 52 65 61 64 20  pcode: OpenRead 
1b1e0 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a  P1 P2 P3 P4 P5.*
1b1f0 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 6f 6f 74  * Synopsis: root
1b200 3d 50 32 20 69 44 62 3d 50 33 0a 2a 2a 0a 2a 2a  =P2 iDb=P3.**.**
1b210 20 4f 70 65 6e 20 61 20 72 65 61 64 2d 6f 6e 6c   Open a read-onl
1b220 79 20 63 75 72 73 6f 72 20 66 6f 72 20 74 68 65  y cursor for the
1b230 20 64 61 74 61 62 61 73 65 20 74 61 62 6c 65 20   database table 
1b240 77 68 6f 73 65 20 72 6f 6f 74 20 70 61 67 65 20  whose root page 
1b250 69 73 0a 2a 2a 20 50 32 20 69 6e 20 61 20 64 61  is.** P2 in a da
1b260 74 61 62 61 73 65 20 66 69 6c 65 2e 20 20 54 68  tabase file.  Th
1b270 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  e database file 
1b280 69 73 20 64 65 74 65 72 6d 69 6e 65 64 20 62 79  is determined by
1b290 20 50 33 2e 20 0a 2a 2a 20 50 33 3d 3d 30 20 6d   P3. .** P3==0 m
1b2a0 65 61 6e 73 20 74 68 65 20 6d 61 69 6e 20 64 61  eans the main da
1b2b0 74 61 62 61 73 65 2c 20 50 33 3d 3d 31 20 6d 65  tabase, P3==1 me
1b2c0 61 6e 73 20 74 68 65 20 64 61 74 61 62 61 73 65  ans the database
1b2d0 20 75 73 65 64 20 66 6f 72 20 0a 2a 2a 20 74 65   used for .** te
1b2e0 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 73 2c 20  mporary tables, 
1b2f0 61 6e 64 20 50 33 3e 31 20 6d 65 61 6e 73 20 75  and P3>1 means u
1b300 73 65 64 20 74 68 65 20 63 6f 72 72 65 73 70 6f  sed the correspo
1b310 6e 64 69 6e 67 20 61 74 74 61 63 68 65 64 0a 2a  nding attached.*
1b320 2a 20 64 61 74 61 62 61 73 65 2e 20 20 47 69 76  * database.  Giv
1b330 65 20 74 68 65 20 6e 65 77 20 63 75 72 73 6f 72  e the new cursor
1b340 20 61 6e 20 69 64 65 6e 74 69 66 69 65 72 20 6f   an identifier o
1b350 66 20 50 31 2e 20 20 54 68 65 20 50 31 0a 2a 2a  f P1.  The P1.**
1b360 20 76 61 6c 75 65 73 20 6e 65 65 64 20 6e 6f 74   values need not
1b370 20 62 65 20 63 6f 6e 74 69 67 75 6f 75 73 20 62   be contiguous b
1b380 75 74 20 61 6c 6c 20 50 31 20 76 61 6c 75 65 73  ut all P1 values
1b390 20 73 68 6f 75 6c 64 20 62 65 20 73 6d 61 6c 6c   should be small
1b3a0 20 69 6e 74 65 67 65 72 73 2e 0a 2a 2a 20 49 74   integers..** It
1b3b0 20 69 73 20 61 6e 20 65 72 72 6f 72 20 66 6f 72   is an error for
1b3c0 20 50 31 20 74 6f 20 62 65 20 6e 65 67 61 74 69   P1 to be negati
1b3d0 76 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 21  ve..**.** If P5!
1b3e0 3d 30 20 74 68 65 6e 20 75 73 65 20 74 68 65 20  =0 then use the 
1b3f0 63 6f 6e 74 65 6e 74 20 6f 66 20 72 65 67 69 73  content of regis
1b400 74 65 72 20 50 32 20 61 73 20 74 68 65 20 72 6f  ter P2 as the ro
1b410 6f 74 20 70 61 67 65 2c 20 6e 6f 74 0a 2a 2a 20  ot page, not.** 
1b420 74 68 65 20 76 61 6c 75 65 20 6f 66 20 50 32 20  the value of P2 
1b430 69 74 73 65 6c 66 2e 0a 2a 2a 0a 2a 2a 20 54 68  itself..**.** Th
1b440 65 72 65 20 77 69 6c 6c 20 62 65 20 61 20 72 65  ere will be a re
1b450 61 64 20 6c 6f 63 6b 20 6f 6e 20 74 68 65 20 64  ad lock on the d
1b460 61 74 61 62 61 73 65 20 77 68 65 6e 65 76 65 72  atabase whenever
1b470 20 74 68 65 72 65 20 69 73 20 61 6e 0a 2a 2a 20   there is an.** 
1b480 6f 70 65 6e 20 63 75 72 73 6f 72 2e 20 20 49 66  open cursor.  If
1b490 20 74 68 65 20 64 61 74 61 62 61 73 65 20 77 61   the database wa
1b4a0 73 20 75 6e 6c 6f 63 6b 65 64 20 70 72 69 6f 72  s unlocked prior
1b4b0 20 74 6f 20 74 68 69 73 20 69 6e 73 74 72 75 63   to this instruc
1b4c0 74 69 6f 6e 0a 2a 2a 20 74 68 65 6e 20 61 20 72  tion.** then a r
1b4d0 65 61 64 20 6c 6f 63 6b 20 69 73 20 61 63 71 75  ead lock is acqu
1b4e0 69 72 65 64 20 61 73 20 70 61 72 74 20 6f 66 20  ired as part of 
1b4f0 74 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e  this instruction
1b500 2e 20 20 41 20 72 65 61 64 0a 2a 2a 20 6c 6f 63  .  A read.** loc
1b510 6b 20 61 6c 6c 6f 77 73 20 6f 74 68 65 72 20 70  k allows other p
1b520 72 6f 63 65 73 73 65 73 20 74 6f 20 72 65 61 64  rocesses to read
1b530 20 74 68 65 20 64 61 74 61 62 61 73 65 20 62 75   the database bu
1b540 74 20 70 72 6f 68 69 62 69 74 73 0a 2a 2a 20 61  t prohibits.** a
1b550 6e 79 20 6f 74 68 65 72 20 70 72 6f 63 65 73 73  ny other process
1b560 20 66 72 6f 6d 20 6d 6f 64 69 66 79 69 6e 67 20   from modifying 
1b570 74 68 65 20 64 61 74 61 62 61 73 65 2e 20 20 54  the database.  T
1b580 68 65 20 72 65 61 64 20 6c 6f 63 6b 20 69 73 0a  he read lock is.
1b590 2a 2a 20 72 65 6c 65 61 73 65 64 20 77 68 65 6e  ** released when
1b5a0 20 61 6c 6c 20 63 75 72 73 6f 72 73 20 61 72 65   all cursors are
1b5b0 20 63 6c 6f 73 65 64 2e 20 20 49 66 20 74 68 69   closed.  If thi
1b5c0 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 61 74  s instruction at
1b5d0 74 65 6d 70 74 73 0a 2a 2a 20 74 6f 20 67 65 74  tempts.** to get
1b5e0 20 61 20 72 65 61 64 20 6c 6f 63 6b 20 62 75 74   a read lock but
1b5f0 20 66 61 69 6c 73 2c 20 74 68 65 20 73 63 72 69   fails, the scri
1b600 70 74 20 74 65 72 6d 69 6e 61 74 65 73 20 77 69  pt terminates wi
1b610 74 68 20 61 6e 0a 2a 2a 20 53 51 4c 49 54 45 5f  th an.** SQLITE_
1b620 42 55 53 59 20 65 72 72 6f 72 20 63 6f 64 65 2e  BUSY error code.
1b630 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 34 20 76 61  .**.** The P4 va
1b640 6c 75 65 20 6d 61 79 20 62 65 20 65 69 74 68 65  lue may be eithe
1b650 72 20 61 6e 20 69 6e 74 65 67 65 72 20 28 50 34  r an integer (P4
1b660 5f 49 4e 54 33 32 29 20 6f 72 20 61 20 70 6f 69  _INT32) or a poi
1b670 6e 74 65 72 20 74 6f 0a 2a 2a 20 61 20 4b 65 79  nter to.** a Key
1b680 49 6e 66 6f 20 73 74 72 75 63 74 75 72 65 20 28  Info structure (
1b690 50 34 5f 4b 45 59 49 4e 46 4f 29 2e 20 49 66 20  P4_KEYINFO). If 
1b6a0 69 74 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20  it is a pointer 
1b6b0 74 6f 20 61 20 4b 65 79 49 6e 66 6f 20 0a 2a 2a  to a KeyInfo .**
1b6c0 20 73 74 72 75 63 74 75 72 65 2c 20 74 68 65 6e   structure, then
1b6d0 20 73 61 69 64 20 73 74 72 75 63 74 75 72 65 20   said structure 
1b6e0 64 65 66 69 6e 65 73 20 74 68 65 20 63 6f 6e 74  defines the cont
1b6f0 65 6e 74 20 61 6e 64 20 63 6f 6c 6c 61 74 69 6e  ent and collatin
1b700 67 20 0a 2a 2a 20 73 65 71 75 65 6e 63 65 20 6f  g .** sequence o
1b710 66 20 74 68 65 20 69 6e 64 65 78 20 62 65 69 6e  f the index bein
1b720 67 20 6f 70 65 6e 65 64 2e 20 4f 74 68 65 72 77  g opened. Otherw
1b730 69 73 65 2c 20 69 66 20 50 34 20 69 73 20 61 6e  ise, if P4 is an
1b740 20 69 6e 74 65 67 65 72 20 0a 2a 2a 20 76 61 6c   integer .** val
1b750 75 65 2c 20 69 74 20 69 73 20 73 65 74 20 74 6f  ue, it is set to
1b760 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63   the number of c
1b770 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 74 61  olumns in the ta
1b780 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61  ble..**.** See a
1b790 6c 73 6f 3a 20 4f 70 65 6e 57 72 69 74 65 2c 20  lso: OpenWrite, 
1b7a0 52 65 6f 70 65 6e 49 64 78 0a 2a 2f 0a 2f 2a 20  ReopenIdx.*/./* 
1b7b0 4f 70 63 6f 64 65 3a 20 52 65 6f 70 65 6e 49 64  Opcode: ReopenId
1b7c0 78 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35  x P1 P2 P3 P4 P5
1b7d0 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 6f  .** Synopsis: ro
1b7e0 6f 74 3d 50 32 20 69 44 62 3d 50 33 0a 2a 2a 0a  ot=P2 iDb=P3.**.
1b7f0 2a 2a 20 54 68 65 20 52 65 6f 70 65 6e 49 64 78  ** The ReopenIdx
1b800 20 6f 70 63 6f 64 65 20 77 6f 72 6b 73 20 65 78   opcode works ex
1b810 61 63 74 6c 79 20 6c 69 6b 65 20 52 65 61 64 4f  actly like ReadO
1b820 70 65 6e 20 65 78 63 65 70 74 20 74 68 61 74 20  pen except that 
1b830 69 74 20 66 69 72 73 74 0a 2a 2a 20 63 68 65 63  it first.** chec
1b840 6b 73 20 74 6f 20 73 65 65 20 69 66 20 74 68 65  ks to see if the
1b850 20 63 75 72 73 6f 72 20 6f 6e 20 50 31 20 69 73   cursor on P1 is
1b860 20 61 6c 72 65 61 64 79 20 6f 70 65 6e 20 77 69   already open wi
1b870 74 68 20 61 20 72 6f 6f 74 20 70 61 67 65 0a 2a  th a root page.*
1b880 2a 20 6e 75 6d 62 65 72 20 6f 66 20 50 32 20 61  * number of P2 a
1b890 6e 64 20 69 66 20 69 74 20 69 73 20 74 68 69 73  nd if it is this
1b8a0 20 6f 70 63 6f 64 65 20 62 65 63 6f 6d 65 73 20   opcode becomes 
1b8b0 61 20 6e 6f 2d 6f 70 2e 20 20 49 6e 20 6f 74 68  a no-op.  In oth
1b8c0 65 72 20 77 6f 72 64 73 2c 0a 2a 2a 20 69 66 20  er words,.** if 
1b8d0 74 68 65 20 63 75 72 73 6f 72 20 69 73 20 61 6c  the cursor is al
1b8e0 72 65 61 64 79 20 6f 70 65 6e 2c 20 64 6f 20 6e  ready open, do n
1b8f0 6f 74 20 72 65 6f 70 65 6e 20 69 74 2e 0a 2a 2a  ot reopen it..**
1b900 0a 2a 2a 20 54 68 65 20 52 65 6f 70 65 6e 49 64  .** The ReopenId
1b910 78 20 6f 70 63 6f 64 65 20 6d 61 79 20 6f 6e 6c  x opcode may onl
1b920 79 20 62 65 20 75 73 65 64 20 77 69 74 68 20 50  y be used with P
1b930 35 3d 3d 30 20 61 6e 64 20 77 69 74 68 20 50 34  5==0 and with P4
1b940 20 62 65 69 6e 67 0a 2a 2a 20 61 20 50 34 5f 4b   being.** a P4_K
1b950 45 59 49 4e 46 4f 20 6f 62 6a 65 63 74 2e 20 20  EYINFO object.  
1b960 46 75 72 74 68 65 72 6d 6f 72 65 2c 20 74 68 65  Furthermore, the
1b970 20 50 33 20 76 61 6c 75 65 20 6d 75 73 74 20 62   P3 value must b
1b980 65 20 74 68 65 20 73 61 6d 65 20 61 73 0a 2a 2a  e the same as.**
1b990 20 65 76 65 72 79 20 6f 74 68 65 72 20 52 65 6f   every other Reo
1b9a0 70 65 6e 49 64 78 20 6f 72 20 4f 70 65 6e 52 65  penIdx or OpenRe
1b9b0 61 64 20 66 6f 72 20 74 68 65 20 73 61 6d 65 20  ad for the same 
1b9c0 63 75 72 73 6f 72 20 6e 75 6d 62 65 72 2e 0a 2a  cursor number..*
1b9d0 2a 0a 2a 2a 20 53 65 65 20 74 68 65 20 4f 70 65  *.** See the Ope
1b9e0 6e 52 65 61 64 20 6f 70 63 6f 64 65 20 64 6f 63  nRead opcode doc
1b9f0 75 6d 65 6e 74 61 74 69 6f 6e 20 66 6f 72 20 61  umentation for a
1ba00 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d  dditional inform
1ba10 61 74 69 6f 6e 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63  ation..*/./* Opc
1ba20 6f 64 65 3a 20 4f 70 65 6e 57 72 69 74 65 20 50  ode: OpenWrite P
1ba30 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a  1 P2 P3 P4 P5.**
1ba40 20 53 79 6e 6f 70 73 69 73 3a 20 72 6f 6f 74 3d   Synopsis: root=
1ba50 50 32 20 69 44 62 3d 50 33 0a 2a 2a 0a 2a 2a 20  P2 iDb=P3.**.** 
1ba60 4f 70 65 6e 20 61 20 72 65 61 64 2f 77 72 69 74  Open a read/writ
1ba70 65 20 63 75 72 73 6f 72 20 6e 61 6d 65 64 20 50  e cursor named P
1ba80 31 20 6f 6e 20 74 68 65 20 74 61 62 6c 65 20 6f  1 on the table o
1ba90 72 20 69 6e 64 65 78 20 77 68 6f 73 65 20 72 6f  r index whose ro
1baa0 6f 74 0a 2a 2a 20 70 61 67 65 20 69 73 20 50 32  ot.** page is P2
1bab0 2e 20 20 4f 72 20 69 66 20 50 35 21 3d 30 20 75  .  Or if P5!=0 u
1bac0 73 65 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f  se the content o
1bad0 66 20 72 65 67 69 73 74 65 72 20 50 32 20 74 6f  f register P2 to
1bae0 20 66 69 6e 64 20 74 68 65 0a 2a 2a 20 72 6f 6f   find the.** roo
1baf0 74 20 70 61 67 65 2e 0a 2a 2a 0a 2a 2a 20 54 68  t page..**.** Th
1bb00 65 20 50 34 20 76 61 6c 75 65 20 6d 61 79 20 62  e P4 value may b
1bb10 65 20 65 69 74 68 65 72 20 61 6e 20 69 6e 74 65  e either an inte
1bb20 67 65 72 20 28 50 34 5f 49 4e 54 33 32 29 20 6f  ger (P4_INT32) o
1bb30 72 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 0a 2a  r a pointer to.*
1bb40 2a 20 61 20 4b 65 79 49 6e 66 6f 20 73 74 72 75  * a KeyInfo stru
1bb50 63 74 75 72 65 20 28 50 34 5f 4b 45 59 49 4e 46  cture (P4_KEYINF
1bb60 4f 29 2e 20 49 66 20 69 74 20 69 73 20 61 20 70  O). If it is a p
1bb70 6f 69 6e 74 65 72 20 74 6f 20 61 20 4b 65 79 49  ointer to a KeyI
1bb80 6e 66 6f 20 0a 2a 2a 20 73 74 72 75 63 74 75 72  nfo .** structur
1bb90 65 2c 20 74 68 65 6e 20 73 61 69 64 20 73 74 72  e, then said str
1bba0 75 63 74 75 72 65 20 64 65 66 69 6e 65 73 20 74  ucture defines t
1bbb0 68 65 20 63 6f 6e 74 65 6e 74 20 61 6e 64 20 63  he content and c
1bbc0 6f 6c 6c 61 74 69 6e 67 20 0a 2a 2a 20 73 65 71  ollating .** seq
1bbd0 75 65 6e 63 65 20 6f 66 20 74 68 65 20 69 6e 64  uence of the ind
1bbe0 65 78 20 62 65 69 6e 67 20 6f 70 65 6e 65 64 2e  ex being opened.
1bbf0 20 4f 74 68 65 72 77 69 73 65 2c 20 69 66 20 50   Otherwise, if P
1bc00 34 20 69 73 20 61 6e 20 69 6e 74 65 67 65 72 20  4 is an integer 
1bc10 0a 2a 2a 20 76 61 6c 75 65 2c 20 69 74 20 69 73  .** value, it is
1bc20 20 73 65 74 20 74 6f 20 74 68 65 20 6e 75 6d 62   set to the numb
1bc30 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e  er of columns in
1bc40 20 74 68 65 20 74 61 62 6c 65 2c 20 6f 72 20 74   the table, or t
1bc50 6f 20 74 68 65 0a 2a 2a 20 6c 61 72 67 65 73 74  o the.** largest
1bc60 20 69 6e 64 65 78 20 6f 66 20 61 6e 79 20 63 6f   index of any co
1bc70 6c 75 6d 6e 20 6f 66 20 74 68 65 20 74 61 62 6c  lumn of the tabl
1bc80 65 20 74 68 61 74 20 69 73 20 61 63 74 75 61 6c  e that is actual
1bc90 6c 79 20 75 73 65 64 2e 0a 2a 2a 0a 2a 2a 20 54  ly used..**.** T
1bca0 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20  his instruction 
1bcb0 77 6f 72 6b 73 20 6a 75 73 74 20 6c 69 6b 65 20  works just like 
1bcc0 4f 70 65 6e 52 65 61 64 20 65 78 63 65 70 74 20  OpenRead except 
1bcd0 74 68 61 74 20 69 74 20 6f 70 65 6e 73 20 74 68  that it opens th
1bce0 65 20 63 75 72 73 6f 72 0a 2a 2a 20 69 6e 20 72  e cursor.** in r
1bcf0 65 61 64 2f 77 72 69 74 65 20 6d 6f 64 65 2e 20  ead/write mode. 
1bd00 20 46 6f 72 20 61 20 67 69 76 65 6e 20 74 61 62   For a given tab
1bd10 6c 65 2c 20 74 68 65 72 65 20 63 61 6e 20 62 65  le, there can be
1bd20 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 72 65 61   one or more rea
1bd30 64 2d 6f 6e 6c 79 0a 2a 2a 20 63 75 72 73 6f 72  d-only.** cursor
1bd40 73 20 6f 72 20 61 20 73 69 6e 67 6c 65 20 72 65  s or a single re
1bd50 61 64 2f 77 72 69 74 65 20 63 75 72 73 6f 72 20  ad/write cursor 
1bd60 62 75 74 20 6e 6f 74 20 62 6f 74 68 2e 0a 2a 2a  but not both..**
1bd70 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 20 4f 70 65  .** See also Ope
1bd80 6e 52 65 61 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f  nRead..*/.case O
1bd90 50 5f 52 65 6f 70 65 6e 49 64 78 3a 20 7b 0a 20  P_ReopenIdx: {. 
1bda0 20 69 6e 74 20 6e 46 69 65 6c 64 3b 0a 20 20 4b   int nField;.  K
1bdb0 65 79 49 6e 66 6f 20 2a 70 4b 65 79 49 6e 66 6f  eyInfo *pKeyInfo
1bdc0 3b 0a 20 20 69 6e 74 20 70 32 3b 0a 20 20 69 6e  ;.  int p2;.  in
1bdd0 74 20 69 44 62 3b 0a 20 20 69 6e 74 20 77 72 46  t iDb;.  int wrF
1bde0 6c 61 67 3b 0a 20 20 42 74 72 65 65 20 2a 70 58  lag;.  Btree *pX
1bdf0 3b 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a  ;.  VdbeCursor *
1be00 70 43 75 72 3b 0a 20 20 44 62 20 2a 70 44 62 3b  pCur;.  Db *pDb;
1be10 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ..  assert( pOp-
1be20 3e 70 35 3d 3d 30 20 7c 7c 20 70 4f 70 2d 3e 70  >p5==0 || pOp->p
1be30 35 3d 3d 4f 50 46 4c 41 47 5f 53 45 45 4b 45 51  5==OPFLAG_SEEKEQ
1be40 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   );.  assert( pO
1be50 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 4b 45  p->p4type==P4_KE
1be60 59 49 4e 46 4f 20 29 3b 0a 20 20 70 43 75 72 20  YINFO );.  pCur 
1be70 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e  = p->apCsr[pOp->
1be80 70 31 5d 3b 0a 20 20 69 66 28 20 70 43 75 72 20  p1];.  if( pCur 
1be90 26 26 20 70 43 75 72 2d 3e 70 67 6e 6f 52 6f 6f  && pCur->pgnoRoo
1bea0 74 3d 3d 28 75 33 32 29 70 4f 70 2d 3e 70 32 20  t==(u32)pOp->p2 
1beb0 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  ){.    assert( p
1bec0 43 75 72 2d 3e 69 44 62 3d 3d 70 4f 70 2d 3e 70  Cur->iDb==pOp->p
1bed0 33 20 29 3b 20 20 20 20 20 20 2f 2a 20 47 75 61  3 );      /* Gua
1bee0 72 61 6e 74 65 65 64 20 62 79 20 74 68 65 20 63  ranteed by the c
1bef0 6f 64 65 20 67 65 6e 65 72 61 74 6f 72 20 2a 2f  ode generator */
1bf00 0a 20 20 20 20 67 6f 74 6f 20 6f 70 65 6e 5f 63  .    goto open_c
1bf10 75 72 73 6f 72 5f 73 65 74 5f 68 69 6e 74 73 3b  ursor_set_hints;
1bf20 0a 20 20 7d 0a 20 20 2f 2a 20 49 66 20 74 68 65  .  }.  /* If the
1bf30 20 63 75 72 73 6f 72 20 69 73 20 6e 6f 74 20 63   cursor is not c
1bf40 75 72 72 65 6e 74 6c 79 20 6f 70 65 6e 20 6f 72  urrently open or
1bf50 20 69 73 20 6f 70 65 6e 20 6f 6e 20 61 20 64 69   is open on a di
1bf60 66 66 65 72 65 6e 74 0a 20 20 2a 2a 20 69 6e 64  fferent.  ** ind
1bf70 65 78 2c 20 74 68 65 6e 20 66 61 6c 6c 20 74 68  ex, then fall th
1bf80 72 6f 75 67 68 20 69 6e 74 6f 20 4f 50 5f 4f 70  rough into OP_Op
1bf90 65 6e 52 65 61 64 20 74 6f 20 66 6f 72 63 65 20  enRead to force 
1bfa0 61 20 72 65 6f 70 65 6e 20 2a 2f 0a 63 61 73 65  a reopen */.case
1bfb0 20 4f 50 5f 4f 70 65 6e 52 65 61 64 3a 0a 63 61   OP_OpenRead:.ca
1bfc0 73 65 20 4f 50 5f 4f 70 65 6e 57 72 69 74 65 3a  se OP_OpenWrite:
1bfd0 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ..  assert( pOp-
1bfe0 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4f 70 65 6e  >opcode==OP_Open
1bff0 57 72 69 74 65 20 7c 7c 20 70 4f 70 2d 3e 70 35  Write || pOp->p5
1c000 3d 3d 30 20 7c 7c 20 70 4f 70 2d 3e 70 35 3d 3d  ==0 || pOp->p5==
1c010 4f 50 46 4c 41 47 5f 53 45 45 4b 45 51 20 29 3b  OPFLAG_SEEKEQ );
1c020 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 62 49  .  assert( p->bI
1c030 73 52 65 61 64 65 72 20 29 3b 0a 20 20 61 73 73  sReader );.  ass
1c040 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65  ert( pOp->opcode
1c050 3d 3d 4f 50 5f 4f 70 65 6e 52 65 61 64 20 7c 7c  ==OP_OpenRead ||
1c060 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50   pOp->opcode==OP
1c070 5f 52 65 6f 70 65 6e 49 64 78 0a 20 20 20 20 20  _ReopenIdx.     
1c080 20 20 20 20 20 7c 7c 20 70 2d 3e 72 65 61 64 4f       || p->readO
1c090 6e 6c 79 3d 3d 30 20 29 3b 0a 0a 20 20 69 66 28  nly==0 );..  if(
1c0a0 20 70 2d 3e 65 78 70 69 72 65 64 20 29 7b 0a 20   p->expired ){. 
1c0b0 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 41     rc = SQLITE_A
1c0c0 42 4f 52 54 5f 52 4f 4c 4c 42 41 43 4b 3b 0a 20  BORT_ROLLBACK;. 
1c0d0 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75     goto abort_du
1c0e0 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 7d 0a  e_to_error;.  }.
1c0f0 0a 20 20 6e 46 69 65 6c 64 20 3d 20 30 3b 0a 20  .  nField = 0;. 
1c100 20 70 4b 65 79 49 6e 66 6f 20 3d 20 30 3b 0a 20   pKeyInfo = 0;. 
1c110 20 70 32 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20   p2 = pOp->p2;. 
1c120 20 69 44 62 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a   iDb = pOp->p3;.
1c130 20 20 61 73 73 65 72 74 28 20 69 44 62 3e 3d 30    assert( iDb>=0
1c140 20 26 26 20 69 44 62 3c 64 62 2d 3e 6e 44 62 20   && iDb<db->nDb 
1c150 29 3b 0a 20 20 61 73 73 65 72 74 28 20 44 62 4d  );.  assert( DbM
1c160 61 73 6b 54 65 73 74 28 70 2d 3e 62 74 72 65 65  askTest(p->btree
1c170 4d 61 73 6b 2c 20 69 44 62 29 20 29 3b 0a 20 20  Mask, iDb) );.  
1c180 70 44 62 20 3d 20 26 64 62 2d 3e 61 44 62 5b 69  pDb = &db->aDb[i
1c190 44 62 5d 3b 0a 20 20 70 58 20 3d 20 70 44 62 2d  Db];.  pX = pDb-
1c1a0 3e 70 42 74 3b 0a 20 20 61 73 73 65 72 74 28 20  >pBt;.  assert( 
1c1b0 70 58 21 3d 30 20 29 3b 0a 20 20 69 66 28 20 70  pX!=0 );.  if( p
1c1c0 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4f  Op->opcode==OP_O
1c1d0 70 65 6e 57 72 69 74 65 20 29 7b 0a 20 20 20 20  penWrite ){.    
1c1e0 61 73 73 65 72 74 28 20 4f 50 46 4c 41 47 5f 46  assert( OPFLAG_F
1c1f0 4f 52 44 45 4c 45 54 45 3d 3d 42 54 52 45 45 5f  ORDELETE==BTREE_
1c200 46 4f 52 44 45 4c 45 54 45 20 29 3b 0a 20 20 20  FORDELETE );.   
1c210 20 77 72 46 6c 61 67 20 3d 20 42 54 52 45 45 5f   wrFlag = BTREE_
1c220 57 52 43 53 52 20 7c 20 28 70 4f 70 2d 3e 70 35  WRCSR | (pOp->p5
1c230 20 26 20 4f 50 46 4c 41 47 5f 46 4f 52 44 45 4c   & OPFLAG_FORDEL
1c240 45 54 45 29 3b 0a 20 20 20 20 61 73 73 65 72 74  ETE);.    assert
1c250 28 20 73 71 6c 69 74 65 33 53 63 68 65 6d 61 4d  ( sqlite3SchemaM
1c260 75 74 65 78 48 65 6c 64 28 64 62 2c 20 69 44 62  utexHeld(db, iDb
1c270 2c 20 30 29 20 29 3b 0a 20 20 20 20 69 66 28 20  , 0) );.    if( 
1c280 70 44 62 2d 3e 70 53 63 68 65 6d 61 2d 3e 66 69  pDb->pSchema->fi
1c290 6c 65 5f 66 6f 72 6d 61 74 20 3c 20 70 2d 3e 6d  le_format < p->m
1c2a0 69 6e 57 72 69 74 65 46 69 6c 65 46 6f 72 6d 61  inWriteFileForma
1c2b0 74 20 29 7b 0a 20 20 20 20 20 20 70 2d 3e 6d 69  t ){.      p->mi
1c2c0 6e 57 72 69 74 65 46 69 6c 65 46 6f 72 6d 61 74  nWriteFileFormat
1c2d0 20 3d 20 70 44 62 2d 3e 70 53 63 68 65 6d 61 2d   = pDb->pSchema-
1c2e0 3e 66 69 6c 65 5f 66 6f 72 6d 61 74 3b 0a 20 20  >file_format;.  
1c2f0 20 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20    }.  }else{.   
1c300 20 77 72 46 6c 61 67 20 3d 20 30 3b 0a 20 20 7d   wrFlag = 0;.  }
1c310 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 26  .  if( pOp->p5 &
1c320 20 4f 50 46 4c 41 47 5f 50 32 49 53 52 45 47 20   OPFLAG_P2ISREG 
1c330 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  ){.    assert( p
1c340 32 3e 30 20 29 3b 0a 20 20 20 20 61 73 73 65 72  2>0 );.    asser
1c350 74 28 20 70 32 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b  t( p2<=(p->nMem+
1c360 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29 20  1 - p->nCursor) 
1c370 29 3b 0a 20 20 20 20 70 49 6e 32 20 3d 20 26 61  );.    pIn2 = &a
1c380 4d 65 6d 5b 70 32 5d 3b 0a 20 20 20 20 61 73 73  Mem[p2];.    ass
1c390 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28  ert( memIsValid(
1c3a0 70 49 6e 32 29 20 29 3b 0a 20 20 20 20 61 73 73  pIn2) );.    ass
1c3b0 65 72 74 28 20 28 70 49 6e 32 2d 3e 66 6c 61 67  ert( (pIn2->flag
1c3c0 73 20 26 20 4d 45 4d 5f 49 6e 74 29 21 3d 30 20  s & MEM_Int)!=0 
1c3d0 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  );.    sqlite3Vd
1c3e0 62 65 4d 65 6d 49 6e 74 65 67 65 72 69 66 79 28  beMemIntegerify(
1c3f0 70 49 6e 32 29 3b 0a 20 20 20 20 70 32 20 3d 20  pIn2);.    p2 = 
1c400 28 69 6e 74 29 70 49 6e 32 2d 3e 75 2e 69 3b 0a  (int)pIn2->u.i;.
1c410 20 20 20 20 2f 2a 20 54 68 65 20 70 32 20 76 61      /* The p2 va
1c420 6c 75 65 20 61 6c 77 61 79 73 20 63 6f 6d 65 73  lue always comes
1c430 20 66 72 6f 6d 20 61 20 70 72 69 6f 72 20 4f 50   from a prior OP
1c440 5f 43 72 65 61 74 65 42 74 72 65 65 20 6f 70 63  _CreateBtree opc
1c450 6f 64 65 20 61 6e 64 0a 20 20 20 20 2a 2a 20 74  ode and.    ** t
1c460 68 61 74 20 6f 70 63 6f 64 65 20 77 69 6c 6c 20  hat opcode will 
1c470 61 6c 77 61 79 73 20 73 65 74 20 74 68 65 20 70  always set the p
1c480 32 20 76 61 6c 75 65 20 74 6f 20 32 20 6f 72 20  2 value to 2 or 
1c490 6d 6f 72 65 20 6f 72 20 65 6c 73 65 20 66 61 69  more or else fai
1c4a0 6c 2e 0a 20 20 20 20 2a 2a 20 49 66 20 74 68 65  l..    ** If the
1c4b0 72 65 20 77 65 72 65 20 61 20 66 61 69 6c 75 72  re were a failur
1c4c0 65 2c 20 74 68 65 20 70 72 65 70 61 72 65 64 20  e, the prepared 
1c4d0 73 74 61 74 65 6d 65 6e 74 20 77 6f 75 6c 64 20  statement would 
1c4e0 68 61 76 65 20 68 61 6c 74 65 64 0a 20 20 20 20  have halted.    
1c4f0 2a 2a 20 62 65 66 6f 72 65 20 72 65 61 63 68 69  ** before reachi
1c500 6e 67 20 74 68 69 73 20 69 6e 73 74 72 75 63 74  ng this instruct
1c510 69 6f 6e 2e 20 2a 2f 0a 20 20 20 20 61 73 73 65  ion. */.    asse
1c520 72 74 28 20 70 32 3e 3d 32 20 29 3b 0a 20 20 7d  rt( p2>=2 );.  }
1c530 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 34 74 79  .  if( pOp->p4ty
1c540 70 65 3d 3d 50 34 5f 4b 45 59 49 4e 46 4f 20 29  pe==P4_KEYINFO )
1c550 7b 0a 20 20 20 20 70 4b 65 79 49 6e 66 6f 20 3d  {.    pKeyInfo =
1c560 20 70 4f 70 2d 3e 70 34 2e 70 4b 65 79 49 6e 66   pOp->p4.pKeyInf
1c570 6f 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  o;.    assert( p
1c580 4b 65 79 49 6e 66 6f 2d 3e 65 6e 63 3d 3d 45 4e  KeyInfo->enc==EN
1c590 43 28 64 62 29 20 29 3b 0a 20 20 20 20 61 73 73  C(db) );.    ass
1c5a0 65 72 74 28 20 70 4b 65 79 49 6e 66 6f 2d 3e 64  ert( pKeyInfo->d
1c5b0 62 3d 3d 64 62 20 29 3b 0a 20 20 20 20 6e 46 69  b==db );.    nFi
1c5c0 65 6c 64 20 3d 20 70 4b 65 79 49 6e 66 6f 2d 3e  eld = pKeyInfo->
1c5d0 6e 41 6c 6c 46 69 65 6c 64 3b 0a 20 20 7d 65 6c  nAllField;.  }el
1c5e0 73 65 20 69 66 28 20 70 4f 70 2d 3e 70 34 74 79  se if( pOp->p4ty
1c5f0 70 65 3d 3d 50 34 5f 49 4e 54 33 32 20 29 7b 0a  pe==P4_INT32 ){.
1c600 20 20 20 20 6e 46 69 65 6c 64 20 3d 20 70 4f 70      nField = pOp
1c610 2d 3e 70 34 2e 69 3b 0a 20 20 7d 0a 20 20 61 73  ->p4.i;.  }.  as
1c620 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30  sert( pOp->p1>=0
1c630 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 6e 46   );.  assert( nF
1c640 69 65 6c 64 3e 3d 30 20 29 3b 0a 20 20 74 65 73  ield>=0 );.  tes
1c650 74 63 61 73 65 28 20 6e 46 69 65 6c 64 3d 3d 30  tcase( nField==0
1c660 20 29 3b 20 20 2f 2a 20 54 61 62 6c 65 20 77 69   );  /* Table wi
1c670 74 68 20 49 4e 54 45 47 45 52 20 50 52 49 4d 41  th INTEGER PRIMA
1c680 52 59 20 4b 45 59 20 61 6e 64 20 6e 6f 74 68 69  RY KEY and nothi
1c690 6e 67 20 65 6c 73 65 20 2a 2f 0a 20 20 70 43 75  ng else */.  pCu
1c6a0 72 20 3d 20 61 6c 6c 6f 63 61 74 65 43 75 72 73  r = allocateCurs
1c6b0 6f 72 28 70 2c 20 70 4f 70 2d 3e 70 31 2c 20 6e  or(p, pOp->p1, n
1c6c0 46 69 65 6c 64 2c 20 69 44 62 2c 20 43 55 52 54  Field, iDb, CURT
1c6d0 59 50 45 5f 42 54 52 45 45 29 3b 0a 20 20 69 66  YPE_BTREE);.  if
1c6e0 28 20 70 43 75 72 3d 3d 30 20 29 20 67 6f 74 6f  ( pCur==0 ) goto
1c6f0 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 70 43 75 72 2d   no_mem;.  pCur-
1c700 3e 6e 75 6c 6c 52 6f 77 20 3d 20 31 3b 0a 20 20  >nullRow = 1;.  
1c710 70 43 75 72 2d 3e 69 73 4f 72 64 65 72 65 64 20  pCur->isOrdered 
1c720 3d 20 31 3b 0a 20 20 70 43 75 72 2d 3e 70 67 6e  = 1;.  pCur->pgn
1c730 6f 52 6f 6f 74 20 3d 20 70 32 3b 0a 23 69 66 64  oRoot = p2;.#ifd
1c740 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a  ef SQLITE_DEBUG.
1c750 20 20 70 43 75 72 2d 3e 77 72 46 6c 61 67 20 3d    pCur->wrFlag =
1c760 20 77 72 46 6c 61 67 3b 0a 23 65 6e 64 69 66 0a   wrFlag;.#endif.
1c770 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
1c780 72 65 65 43 75 72 73 6f 72 28 70 58 2c 20 70 32  reeCursor(pX, p2
1c790 2c 20 77 72 46 6c 61 67 2c 20 70 4b 65 79 49 6e  , wrFlag, pKeyIn
1c7a0 66 6f 2c 20 70 43 75 72 2d 3e 75 63 2e 70 43 75  fo, pCur->uc.pCu
1c7b0 72 73 6f 72 29 3b 0a 20 20 70 43 75 72 2d 3e 70  rsor);.  pCur->p
1c7c0 4b 65 79 49 6e 66 6f 20 3d 20 70 4b 65 79 49 6e  KeyInfo = pKeyIn
1c7d0 66 6f 3b 0a 20 20 2f 2a 20 53 65 74 20 74 68 65  fo;.  /* Set the
1c7e0 20 56 64 62 65 43 75 72 73 6f 72 2e 69 73 54 61   VdbeCursor.isTa
1c7f0 62 6c 65 20 76 61 72 69 61 62 6c 65 2e 20 50 72  ble variable. Pr
1c800 65 76 69 6f 75 73 20 76 65 72 73 69 6f 6e 73 20  evious versions 
1c810 6f 66 0a 20 20 2a 2a 20 53 51 4c 69 74 65 20 75  of.  ** SQLite u
1c820 73 65 64 20 74 6f 20 63 68 65 63 6b 20 69 66 20  sed to check if 
1c830 74 68 65 20 72 6f 6f 74 2d 70 61 67 65 20 66 6c  the root-page fl
1c840 61 67 73 20 77 65 72 65 20 73 61 6e 65 20 61 74  ags were sane at
1c850 20 74 68 69 73 20 70 6f 69 6e 74 0a 20 20 2a 2a   this point.  **
1c860 20 61 6e 64 20 72 65 70 6f 72 74 20 64 61 74 61   and report data
1c870 62 61 73 65 20 63 6f 72 72 75 70 74 69 6f 6e 20  base corruption 
1c880 69 66 20 74 68 65 79 20 77 65 72 65 20 6e 6f 74  if they were not
1c890 2c 20 62 75 74 20 74 68 69 73 20 63 68 65 63 6b  , but this check
1c8a0 20 68 61 73 0a 20 20 2a 2a 20 73 69 6e 63 65 20   has.  ** since 
1c8b0 6d 6f 76 65 64 20 69 6e 74 6f 20 74 68 65 20 62  moved into the b
1c8c0 74 72 65 65 20 6c 61 79 65 72 2e 20 20 2a 2f 20  tree layer.  */ 
1c8d0 20 0a 20 20 70 43 75 72 2d 3e 69 73 54 61 62 6c   .  pCur->isTabl
1c8e0 65 20 3d 20 70 4f 70 2d 3e 70 34 74 79 70 65 21  e = pOp->p4type!
1c8f0 3d 50 34 5f 4b 45 59 49 4e 46 4f 3b 0a 0a 6f 70  =P4_KEYINFO;..op
1c900 65 6e 5f 63 75 72 73 6f 72 5f 73 65 74 5f 68 69  en_cursor_set_hi
1c910 6e 74 73 3a 0a 20 20 61 73 73 65 72 74 28 20 4f  nts:.  assert( O
1c920 50 46 4c 41 47 5f 42 55 4c 4b 43 53 52 3d 3d 42  PFLAG_BULKCSR==B
1c930 54 52 45 45 5f 42 55 4c 4b 4c 4f 41 44 20 29 3b  TREE_BULKLOAD );
1c940 0a 20 20 61 73 73 65 72 74 28 20 4f 50 46 4c 41  .  assert( OPFLA
1c950 47 5f 53 45 45 4b 45 51 3d 3d 42 54 52 45 45 5f  G_SEEKEQ==BTREE_
1c960 53 45 45 4b 5f 45 51 20 29 3b 0a 20 20 74 65 73  SEEK_EQ );.  tes
1c970 74 63 61 73 65 28 20 70 4f 70 2d 3e 70 35 20 26  tcase( pOp->p5 &
1c980 20 4f 50 46 4c 41 47 5f 42 55 4c 4b 43 53 52 20   OPFLAG_BULKCSR 
1c990 29 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  );.#ifdef SQLITE
1c9a0 5f 45 4e 41 42 4c 45 5f 43 55 52 53 4f 52 5f 48  _ENABLE_CURSOR_H
1c9b0 49 4e 54 53 0a 20 20 74 65 73 74 63 61 73 65 28  INTS.  testcase(
1c9c0 20 70 4f 70 2d 3e 70 32 20 26 20 4f 50 46 4c 41   pOp->p2 & OPFLA
1c9d0 47 5f 53 45 45 4b 45 51 20 29 3b 0a 23 65 6e 64  G_SEEKEQ );.#end
1c9e0 69 66 0a 20 20 73 71 6c 69 74 65 33 42 74 72 65  if.  sqlite3Btre
1c9f0 65 43 75 72 73 6f 72 48 69 6e 74 46 6c 61 67 73  eCursorHintFlags
1ca00 28 70 43 75 72 2d 3e 75 63 2e 70 43 75 72 73 6f  (pCur->uc.pCurso
1ca10 72 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  r,.             
1ca20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ca30 20 20 28 70 4f 70 2d 3e 70 35 20 26 20 28 4f 50    (pOp->p5 & (OP
1ca40 46 4c 41 47 5f 42 55 4c 4b 43 53 52 7c 4f 50 46  FLAG_BULKCSR|OPF
1ca50 4c 41 47 5f 53 45 45 4b 45 51 29 29 29 3b 0a 20  LAG_SEEKEQ)));. 
1ca60 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61   if( rc ) goto a
1ca70 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
1ca80 72 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  r;.  break;.}../
1ca90 2a 20 4f 70 63 6f 64 65 3a 20 4f 70 65 6e 44 75  * Opcode: OpenDu
1caa0 70 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  p P1 P2 * * *.**
1cab0 0a 2a 2a 20 4f 70 65 6e 20 61 20 6e 65 77 20 63  .** Open a new c
1cac0 75 72 73 6f 72 20 50 31 20 74 68 61 74 20 70 6f  ursor P1 that po
1cad0 69 6e 74 73 20 74 6f 20 74 68 65 20 73 61 6d 65  ints to the same
1cae0 20 65 70 68 65 6d 65 72 61 6c 20 74 61 62 6c 65   ephemeral table
1caf0 20 61 73 0a 2a 2a 20 63 75 72 73 6f 72 20 50 32   as.** cursor P2
1cb00 2e 20 20 54 68 65 20 50 32 20 63 75 72 73 6f 72  .  The P2 cursor
1cb10 20 6d 75 73 74 20 68 61 76 65 20 62 65 65 6e 20   must have been 
1cb20 6f 70 65 6e 65 64 20 62 79 20 61 20 70 72 69 6f  opened by a prio
1cb30 72 20 4f 50 5f 4f 70 65 6e 45 70 68 65 6d 65 72  r OP_OpenEphemer
1cb40 61 6c 0a 2a 2a 20 6f 70 63 6f 64 65 2e 20 20 4f  al.** opcode.  O
1cb50 6e 6c 79 20 65 70 68 65 6d 65 72 61 6c 20 63 75  nly ephemeral cu
1cb60 72 73 6f 72 73 20 6d 61 79 20 62 65 20 64 75 70  rsors may be dup
1cb70 6c 69 63 61 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 44  licated..**.** D
1cb80 75 70 6c 69 63 61 74 65 20 65 70 68 65 6d 65 72  uplicate ephemer
1cb90 61 6c 20 63 75 72 73 6f 72 73 20 61 72 65 20 75  al cursors are u
1cba0 73 65 64 20 66 6f 72 20 73 65 6c 66 2d 6a 6f 69  sed for self-joi
1cbb0 6e 73 20 6f 66 20 6d 61 74 65 72 69 61 6c 69 7a  ns of materializ
1cbc0 65 64 20 76 69 65 77 73 2e 0a 2a 2f 0a 63 61 73  ed views..*/.cas
1cbd0 65 20 4f 50 5f 4f 70 65 6e 44 75 70 3a 20 7b 0a  e OP_OpenDup: {.
1cbe0 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 4f    VdbeCursor *pO
1cbf0 72 69 67 3b 20 20 20 20 2f 2a 20 54 68 65 20 6f  rig;    /* The o
1cc00 72 69 67 69 6e 61 6c 20 63 75 72 73 6f 72 20 74  riginal cursor t
1cc10 6f 20 62 65 20 64 75 70 6c 69 63 61 74 65 64 20  o be duplicated 
1cc20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20  */.  VdbeCursor 
1cc30 2a 70 43 78 3b 20 20 20 20 20 20 2f 2a 20 54 68  *pCx;      /* Th
1cc40 65 20 6e 65 77 20 63 75 72 73 6f 72 20 2a 2f 0a  e new cursor */.
1cc50 0a 20 20 70 4f 72 69 67 20 3d 20 70 2d 3e 61 70  .  pOrig = p->ap
1cc60 43 73 72 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20  Csr[pOp->p2];.  
1cc70 61 73 73 65 72 74 28 20 70 4f 72 69 67 2d 3e 70  assert( pOrig->p
1cc80 42 74 78 21 3d 30 20 29 3b 20 20 2f 2a 20 4f 6e  Btx!=0 );  /* On
1cc90 6c 79 20 65 70 68 65 6d 65 72 61 6c 20 63 75 72  ly ephemeral cur
1cca0 73 6f 72 73 20 63 61 6e 20 62 65 20 64 75 70 6c  sors can be dupl
1ccb0 69 63 61 74 65 64 20 2a 2f 0a 0a 20 20 70 43 78  icated */..  pCx
1ccc0 20 3d 20 61 6c 6c 6f 63 61 74 65 43 75 72 73 6f   = allocateCurso
1ccd0 72 28 70 2c 20 70 4f 70 2d 3e 70 31 2c 20 70 4f  r(p, pOp->p1, pO
1cce0 72 69 67 2d 3e 6e 46 69 65 6c 64 2c 20 2d 31 2c  rig->nField, -1,
1ccf0 20 43 55 52 54 59 50 45 5f 42 54 52 45 45 29 3b   CURTYPE_BTREE);
1cd00 0a 20 20 69 66 28 20 70 43 78 3d 3d 30 20 29 20  .  if( pCx==0 ) 
1cd10 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 70  goto no_mem;.  p
1cd20 43 78 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 31 3b  Cx->nullRow = 1;
1cd30 0a 20 20 70 43 78 2d 3e 69 73 45 70 68 65 6d 65  .  pCx->isEpheme
1cd40 72 61 6c 20 3d 20 31 3b 0a 20 20 70 43 78 2d 3e  ral = 1;.  pCx->
1cd50 70 4b 65 79 49 6e 66 6f 20 3d 20 70 4f 72 69 67  pKeyInfo = pOrig
1cd60 2d 3e 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 70 43  ->pKeyInfo;.  pC
1cd70 78 2d 3e 69 73 54 61 62 6c 65 20 3d 20 70 4f 72  x->isTable = pOr
1cd80 69 67 2d 3e 69 73 54 61 62 6c 65 3b 0a 20 20 72  ig->isTable;.  r
1cd90 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
1cda0 43 75 72 73 6f 72 28 70 4f 72 69 67 2d 3e 70 42  Cursor(pOrig->pB
1cdb0 74 78 2c 20 4d 41 53 54 45 52 5f 52 4f 4f 54 2c  tx, MASTER_ROOT,
1cdc0 20 42 54 52 45 45 5f 57 52 43 53 52 2c 0a 20 20   BTREE_WRCSR,.  
1cdd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cde0 20 20 20 20 20 20 20 20 70 43 78 2d 3e 70 4b 65          pCx->pKe
1cdf0 79 49 6e 66 6f 2c 20 70 43 78 2d 3e 75 63 2e 70  yInfo, pCx->uc.p
1ce00 43 75 72 73 6f 72 29 3b 0a 20 20 2f 2a 20 54 68  Cursor);.  /* Th
1ce10 65 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 75  e sqlite3BtreeCu
1ce20 72 73 6f 72 28 29 20 72 6f 75 74 69 6e 65 20 63  rsor() routine c
1ce30 61 6e 20 6f 6e 6c 79 20 66 61 69 6c 20 66 6f 72  an only fail for
1ce40 20 74 68 65 20 66 69 72 73 74 20 63 75 72 73 6f   the first curso
1ce50 72 0a 20 20 2a 2a 20 6f 70 65 6e 65 64 20 66 6f  r.  ** opened fo
1ce60 72 20 61 20 64 61 74 61 62 61 73 65 2e 20 20 53  r a database.  S
1ce70 69 6e 63 65 20 74 68 65 72 65 20 69 73 20 61 6c  ince there is al
1ce80 72 65 61 64 79 20 61 6e 20 6f 70 65 6e 20 63 75  ready an open cu
1ce90 72 73 6f 72 20 77 68 65 6e 20 74 68 69 73 0a 20  rsor when this. 
1cea0 20 2a 2a 20 6f 70 63 6f 64 65 20 69 73 20 72 75   ** opcode is ru
1ceb0 6e 2c 20 74 68 65 20 73 71 6c 69 74 65 33 42 74  n, the sqlite3Bt
1cec0 72 65 65 43 75 72 73 6f 72 28 29 20 63 61 6e 6e  reeCursor() cann
1ced0 6f 74 20 66 61 69 6c 20 2a 2f 0a 20 20 61 73 73  ot fail */.  ass
1cee0 65 72 74 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f  ert( rc==SQLITE_
1cef0 4f 4b 20 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  OK );.  break;.}
1cf00 0a 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f 70  .../* Opcode: Op
1cf10 65 6e 45 70 68 65 6d 65 72 61 6c 20 50 31 20 50  enEphemeral P1 P
1cf20 32 20 2a 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e  2 * P4 P5.** Syn
1cf30 6f 70 73 69 73 3a 20 6e 43 6f 6c 75 6d 6e 3d 50  opsis: nColumn=P
1cf40 32 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e 20 61 20 6e  2.**.** Open a n
1cf50 65 77 20 63 75 72 73 6f 72 20 50 31 20 74 6f 20  ew cursor P1 to 
1cf60 61 20 74 72 61 6e 73 69 65 6e 74 20 74 61 62 6c  a transient tabl
1cf70 65 2e 0a 2a 2a 20 54 68 65 20 63 75 72 73 6f 72  e..** The cursor
1cf80 20 69 73 20 61 6c 77 61 79 73 20 6f 70 65 6e 65   is always opene
1cf90 64 20 72 65 61 64 2f 77 72 69 74 65 20 65 76 65  d read/write eve
1cfa0 6e 20 69 66 20 0a 2a 2a 20 74 68 65 20 6d 61 69  n if .** the mai
1cfb0 6e 20 64 61 74 61 62 61 73 65 20 69 73 20 72 65  n database is re
1cfc0 61 64 2d 6f 6e 6c 79 2e 20 20 54 68 65 20 65 70  ad-only.  The ep
1cfd0 68 65 6d 65 72 61 6c 0a 2a 2a 20 74 61 62 6c 65  hemeral.** table
1cfe0 20 69 73 20 64 65 6c 65 74 65 64 20 61 75 74 6f   is deleted auto
1cff0 6d 61 74 69 63 61 6c 6c 79 20 77 68 65 6e 20 74  matically when t
1d000 68 65 20 63 75 72 73 6f 72 20 69 73 20 63 6c 6f  he cursor is clo
1d010 73 65 64 2e 0a 2a 2a 0a 2a 2a 20 50 32 20 69 73  sed..**.** P2 is
1d020 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63   the number of c
1d030 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 65 70  olumns in the ep
1d040 68 65 6d 65 72 61 6c 20 74 61 62 6c 65 2e 0a 2a  hemeral table..*
1d050 2a 20 54 68 65 20 63 75 72 73 6f 72 20 70 6f 69  * The cursor poi
1d060 6e 74 73 20 74 6f 20 61 20 42 54 72 65 65 20 74  nts to a BTree t
1d070 61 62 6c 65 20 69 66 20 50 34 3d 3d 30 20 61 6e  able if P4==0 an
1d080 64 20 74 6f 20 61 20 42 54 72 65 65 20 69 6e 64  d to a BTree ind
1d090 65 78 0a 2a 2a 20 69 66 20 50 34 20 69 73 20 6e  ex.** if P4 is n
1d0a0 6f 74 20 30 2e 20 20 49 66 20 50 34 20 69 73 20  ot 0.  If P4 is 
1d0b0 6e 6f 74 20 4e 55 4c 4c 2c 20 69 74 20 70 6f 69  not NULL, it poi
1d0c0 6e 74 73 20 74 6f 20 61 20 4b 65 79 49 6e 66 6f  nts to a KeyInfo
1d0d0 20 73 74 72 75 63 74 75 72 65 0a 2a 2a 20 74 68   structure.** th
1d0e0 61 74 20 64 65 66 69 6e 65 73 20 74 68 65 20 66  at defines the f
1d0f0 6f 72 6d 61 74 20 6f 66 20 6b 65 79 73 20 69 6e  ormat of keys in
1d100 20 74 68 65 20 69 6e 64 65 78 2e 0a 2a 2a 0a 2a   the index..**.*
1d110 2a 20 54 68 65 20 50 35 20 70 61 72 61 6d 65 74  * The P5 paramet
1d120 65 72 20 63 61 6e 20 62 65 20 61 20 6d 61 73 6b  er can be a mask
1d130 20 6f 66 20 74 68 65 20 42 54 52 45 45 5f 2a 20   of the BTREE_* 
1d140 66 6c 61 67 73 20 64 65 66 69 6e 65 64 0a 2a 2a  flags defined.**
1d150 20 69 6e 20 62 74 72 65 65 2e 68 2e 20 20 54 68   in btree.h.  Th
1d160 65 73 65 20 66 6c 61 67 73 20 63 6f 6e 74 72 6f  ese flags contro
1d170 6c 20 61 73 70 65 63 74 73 20 6f 66 20 74 68 65  l aspects of the
1d180 20 6f 70 65 72 61 74 69 6f 6e 20 6f 66 0a 2a 2a   operation of.**
1d190 20 74 68 65 20 62 74 72 65 65 2e 20 20 54 68 65   the btree.  The
1d1a0 20 42 54 52 45 45 5f 4f 4d 49 54 5f 4a 4f 55 52   BTREE_OMIT_JOUR
1d1b0 4e 41 4c 20 61 6e 64 20 42 54 52 45 45 5f 53 49  NAL and BTREE_SI
1d1c0 4e 47 4c 45 20 66 6c 61 67 73 20 61 72 65 0a 2a  NGLE flags are.*
1d1d0 2a 20 61 64 64 65 64 20 61 75 74 6f 6d 61 74 69  * added automati
1d1e0 63 61 6c 6c 79 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63  cally..*/./* Opc
1d1f0 6f 64 65 3a 20 4f 70 65 6e 41 75 74 6f 69 6e 64  ode: OpenAutoind
1d200 65 78 20 50 31 20 50 32 20 2a 20 50 34 20 2a 0a  ex P1 P2 * P4 *.
1d210 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6e 43 6f  ** Synopsis: nCo
1d220 6c 75 6d 6e 3d 50 32 0a 2a 2a 0a 2a 2a 20 54 68  lumn=P2.**.** Th
1d230 69 73 20 6f 70 63 6f 64 65 20 77 6f 72 6b 73 20  is opcode works 
1d240 74 68 65 20 73 61 6d 65 20 61 73 20 4f 50 5f 4f  the same as OP_O
1d250 70 65 6e 45 70 68 65 6d 65 72 61 6c 2e 20 20 49  penEphemeral.  I
1d260 74 20 68 61 73 20 61 0a 2a 2a 20 64 69 66 66 65  t has a.** diffe
1d270 72 65 6e 74 20 6e 61 6d 65 20 74 6f 20 64 69 73  rent name to dis
1d280 74 69 6e 67 75 69 73 68 20 69 74 73 20 75 73 65  tinguish its use
1d290 2e 20 20 54 61 62 6c 65 73 20 63 72 65 61 74 65  .  Tables create
1d2a0 64 20 75 73 69 6e 67 0a 2a 2a 20 62 79 20 74 68  d using.** by th
1d2b0 69 73 20 6f 70 63 6f 64 65 20 77 69 6c 6c 20 62  is opcode will b
1d2c0 65 20 75 73 65 64 20 66 6f 72 20 61 75 74 6f 6d  e used for autom
1d2d0 61 74 69 63 61 6c 6c 79 20 63 72 65 61 74 65 64  atically created
1d2e0 20 74 72 61 6e 73 69 65 6e 74 0a 2a 2a 20 69 6e   transient.** in
1d2f0 64 69 63 65 73 20 69 6e 20 6a 6f 69 6e 73 2e 0a  dices in joins..
1d300 2a 2f 0a 63 61 73 65 20 4f 50 5f 4f 70 65 6e 41  */.case OP_OpenA
1d310 75 74 6f 69 6e 64 65 78 3a 20 0a 63 61 73 65 20  utoindex: .case 
1d320 4f 50 5f 4f 70 65 6e 45 70 68 65 6d 65 72 61 6c  OP_OpenEphemeral
1d330 3a 20 7b 0a 20 20 56 64 62 65 43 75 72 73 6f 72  : {.  VdbeCursor
1d340 20 2a 70 43 78 3b 0a 20 20 4b 65 79 49 6e 66 6f   *pCx;.  KeyInfo
1d350 20 2a 70 4b 65 79 49 6e 66 6f 3b 0a 0a 20 20 73   *pKeyInfo;..  s
1d360 74 61 74 69 63 20 63 6f 6e 73 74 20 69 6e 74 20  tatic const int 
1d370 76 66 73 46 6c 61 67 73 20 3d 20 0a 20 20 20 20  vfsFlags = .    
1d380 20 20 53 51 4c 49 54 45 5f 4f 50 45 4e 5f 52 45    SQLITE_OPEN_RE
1d390 41 44 57 52 49 54 45 20 7c 0a 20 20 20 20 20 20  ADWRITE |.      
1d3a0 53 51 4c 49 54 45 5f 4f 50 45 4e 5f 43 52 45 41  SQLITE_OPEN_CREA
1d3b0 54 45 20 7c 0a 20 20 20 20 20 20 53 51 4c 49 54  TE |.      SQLIT
1d3c0 45 5f 4f 50 45 4e 5f 45 58 43 4c 55 53 49 56 45  E_OPEN_EXCLUSIVE
1d3d0 20 7c 0a 20 20 20 20 20 20 53 51 4c 49 54 45 5f   |.      SQLITE_
1d3e0 4f 50 45 4e 5f 44 45 4c 45 54 45 4f 4e 43 4c 4f  OPEN_DELETEONCLO
1d3f0 53 45 20 7c 0a 20 20 20 20 20 20 53 51 4c 49 54  SE |.      SQLIT
1d400 45 5f 4f 50 45 4e 5f 54 52 41 4e 53 49 45 4e 54  E_OPEN_TRANSIENT
1d410 5f 44 42 3b 0a 20 20 61 73 73 65 72 74 28 20 70  _DB;.  assert( p
1d420 4f 70 2d 3e 70 31 3e 3d 30 20 29 3b 0a 20 20 61  Op->p1>=0 );.  a
1d430 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e 3d  ssert( pOp->p2>=
1d440 30 20 29 3b 0a 20 20 70 43 78 20 3d 20 61 6c 6c  0 );.  pCx = all
1d450 6f 63 61 74 65 43 75 72 73 6f 72 28 70 2c 20 70  ocateCursor(p, p
1d460 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70 32 2c  Op->p1, pOp->p2,
1d470 20 2d 31 2c 20 43 55 52 54 59 50 45 5f 42 54 52   -1, CURTYPE_BTR
1d480 45 45 29 3b 0a 20 20 69 66 28 20 70 43 78 3d 3d  EE);.  if( pCx==
1d490 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b  0 ) goto no_mem;
1d4a0 0a 20 20 70 43 78 2d 3e 6e 75 6c 6c 52 6f 77 20  .  pCx->nullRow 
1d4b0 3d 20 31 3b 0a 20 20 70 43 78 2d 3e 69 73 45 70  = 1;.  pCx->isEp
1d4c0 68 65 6d 65 72 61 6c 20 3d 20 31 3b 0a 20 20 72  hemeral = 1;.  r
1d4d0 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
1d4e0 4f 70 65 6e 28 64 62 2d 3e 70 56 66 73 2c 20 30  Open(db->pVfs, 0
1d4f0 2c 20 64 62 2c 20 26 70 43 78 2d 3e 70 42 74 78  , db, &pCx->pBtx
1d500 2c 20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  , .             
1d510 20 20 20 20 20 20 20 20 20 20 20 42 54 52 45 45             BTREE
1d520 5f 4f 4d 49 54 5f 4a 4f 55 52 4e 41 4c 20 7c 20  _OMIT_JOURNAL | 
1d530 42 54 52 45 45 5f 53 49 4e 47 4c 45 20 7c 20 70  BTREE_SINGLE | p
1d540 4f 70 2d 3e 70 35 2c 20 76 66 73 46 6c 61 67 73  Op->p5, vfsFlags
1d550 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c  );.  if( rc==SQL
1d560 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 72 63  ITE_OK ){.    rc
1d570 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 42   = sqlite3BtreeB
1d580 65 67 69 6e 54 72 61 6e 73 28 70 43 78 2d 3e 70  eginTrans(pCx->p
1d590 42 74 78 2c 20 31 29 3b 0a 20 20 7d 0a 20 20 69  Btx, 1);.  }.  i
1d5a0 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc==SQLITE_OK
1d5b0 20 29 7b 0a 20 20 20 20 2f 2a 20 49 66 20 61 20   ){.    /* If a 
1d5c0 74 72 61 6e 73 69 65 6e 74 20 69 6e 64 65 78 20  transient index 
1d5d0 69 73 20 72 65 71 75 69 72 65 64 2c 20 63 72 65  is required, cre
1d5e0 61 74 65 20 69 74 20 62 79 20 63 61 6c 6c 69 6e  ate it by callin
1d5f0 67 0a 20 20 20 20 2a 2a 20 73 71 6c 69 74 65 33  g.    ** sqlite3
1d600 42 74 72 65 65 43 72 65 61 74 65 54 61 62 6c 65  BtreeCreateTable
1d610 28 29 20 77 69 74 68 20 74 68 65 20 42 54 52 45  () with the BTRE
1d620 45 5f 42 4c 4f 42 4b 45 59 20 66 6c 61 67 20 62  E_BLOBKEY flag b
1d630 65 66 6f 72 65 0a 20 20 20 20 2a 2a 20 6f 70 65  efore.    ** ope
1d640 6e 69 6e 67 20 69 74 2e 20 49 66 20 61 20 74 72  ning it. If a tr
1d650 61 6e 73 69 65 6e 74 20 74 61 62 6c 65 20 69 73  ansient table is
1d660 20 72 65 71 75 69 72 65 64 2c 20 6a 75 73 74 20   required, just 
1d670 75 73 65 20 74 68 65 0a 20 20 20 20 2a 2a 20 61  use the.    ** a
1d680 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 63 72 65  utomatically cre
1d690 61 74 65 64 20 74 61 62 6c 65 20 77 69 74 68 20  ated table with 
1d6a0 72 6f 6f 74 2d 70 61 67 65 20 31 20 28 61 6e 20  root-page 1 (an 
1d6b0 42 4c 4f 42 5f 49 4e 54 4b 45 59 20 74 61 62 6c  BLOB_INTKEY tabl
1d6c0 65 29 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 69  e)..    */.    i
1d6d0 66 28 20 28 70 43 78 2d 3e 70 4b 65 79 49 6e 66  f( (pCx->pKeyInf
1d6e0 6f 20 3d 20 70 4b 65 79 49 6e 66 6f 20 3d 20 70  o = pKeyInfo = p
1d6f0 4f 70 2d 3e 70 34 2e 70 4b 65 79 49 6e 66 6f 29  Op->p4.pKeyInfo)
1d700 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 69 6e 74  !=0 ){.      int
1d710 20 70 67 6e 6f 3b 0a 20 20 20 20 20 20 61 73 73   pgno;.      ass
1d720 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65  ert( pOp->p4type
1d730 3d 3d 50 34 5f 4b 45 59 49 4e 46 4f 20 29 3b 0a  ==P4_KEYINFO );.
1d740 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74        rc = sqlit
1d750 65 33 42 74 72 65 65 43 72 65 61 74 65 54 61 62  e3BtreeCreateTab
1d760 6c 65 28 70 43 78 2d 3e 70 42 74 78 2c 20 26 70  le(pCx->pBtx, &p
1d770 67 6e 6f 2c 20 42 54 52 45 45 5f 42 4c 4f 42 4b  gno, BTREE_BLOBK
1d780 45 59 20 7c 20 70 4f 70 2d 3e 70 35 29 3b 20 0a  EY | pOp->p5); .
1d790 20 20 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51        if( rc==SQ
1d7a0 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20  LITE_OK ){.     
1d7b0 20 20 20 61 73 73 65 72 74 28 20 70 67 6e 6f 3d     assert( pgno=
1d7c0 3d 4d 41 53 54 45 52 5f 52 4f 4f 54 2b 31 20 29  =MASTER_ROOT+1 )
1d7d0 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74  ;.        assert
1d7e0 28 20 70 4b 65 79 49 6e 66 6f 2d 3e 64 62 3d 3d  ( pKeyInfo->db==
1d7f0 64 62 20 29 3b 0a 20 20 20 20 20 20 20 20 61 73  db );.        as
1d800 73 65 72 74 28 20 70 4b 65 79 49 6e 66 6f 2d 3e  sert( pKeyInfo->
1d810 65 6e 63 3d 3d 45 4e 43 28 64 62 29 20 29 3b 0a  enc==ENC(db) );.
1d820 20 20 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c          rc = sql
1d830 69 74 65 33 42 74 72 65 65 43 75 72 73 6f 72 28  ite3BtreeCursor(
1d840 70 43 78 2d 3e 70 42 74 78 2c 20 70 67 6e 6f 2c  pCx->pBtx, pgno,
1d850 20 42 54 52 45 45 5f 57 52 43 53 52 2c 0a 20 20   BTREE_WRCSR,.  
1d860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70 4b                pK
1d880 65 79 49 6e 66 6f 2c 20 70 43 78 2d 3e 75 63 2e  eyInfo, pCx->uc.
1d890 70 43 75 72 73 6f 72 29 3b 0a 20 20 20 20 20 20  pCursor);.      
1d8a0 7d 0a 20 20 20 20 20 20 70 43 78 2d 3e 69 73 54  }.      pCx->isT
1d8b0 61 62 6c 65 20 3d 20 30 3b 0a 20 20 20 20 7d 65  able = 0;.    }e
1d8c0 6c 73 65 7b 0a 20 20 20 20 20 20 72 63 20 3d 20  lse{.      rc = 
1d8d0 73 71 6c 69 74 65 33 42 74 72 65 65 43 75 72 73  sqlite3BtreeCurs
1d8e0 6f 72 28 70 43 78 2d 3e 70 42 74 78 2c 20 4d 41  or(pCx->pBtx, MA
1d8f0 53 54 45 52 5f 52 4f 4f 54 2c 20 42 54 52 45 45  STER_ROOT, BTREE
1d900 5f 57 52 43 53 52 2c 0a 20 20 20 20 20 20 20 20  _WRCSR,.        
1d910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d920 20 20 20 20 20 20 30 2c 20 70 43 78 2d 3e 75 63        0, pCx->uc
1d930 2e 70 43 75 72 73 6f 72 29 3b 0a 20 20 20 20 20  .pCursor);.     
1d940 20 70 43 78 2d 3e 69 73 54 61 62 6c 65 20 3d 20   pCx->isTable = 
1d950 31 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 69  1;.    }.  }.  i
1d960 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f  f( rc ) goto abo
1d970 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
1d980 0a 20 20 70 43 78 2d 3e 69 73 4f 72 64 65 72 65  .  pCx->isOrdere
1d990 64 20 3d 20 28 70 4f 70 2d 3e 70 35 21 3d 42 54  d = (pOp->p5!=BT
1d9a0 52 45 45 5f 55 4e 4f 52 44 45 52 45 44 29 3b 0a  REE_UNORDERED);.
1d9b0 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
1d9c0 70 63 6f 64 65 3a 20 53 6f 72 74 65 72 4f 70 65  pcode: SorterOpe
1d9d0 6e 20 50 31 20 50 32 20 50 33 20 50 34 20 2a 0a  n P1 P2 P3 P4 *.
1d9e0 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64  **.** This opcod
1d9f0 65 20 77 6f 72 6b 73 20 6c 69 6b 65 20 4f 50 5f  e works like OP_
1da00 4f 70 65 6e 45 70 68 65 6d 65 72 61 6c 20 65 78  OpenEphemeral ex
1da10 63 65 70 74 20 74 68 61 74 20 69 74 20 6f 70 65  cept that it ope
1da20 6e 73 0a 2a 2a 20 61 20 74 72 61 6e 73 69 65 6e  ns.** a transien
1da30 74 20 69 6e 64 65 78 20 74 68 61 74 20 69 73 20  t index that is 
1da40 73 70 65 63 69 66 69 63 61 6c 6c 79 20 64 65 73  specifically des
1da50 69 67 6e 65 64 20 74 6f 20 73 6f 72 74 20 6c 61  igned to sort la
1da60 72 67 65 0a 2a 2a 20 74 61 62 6c 65 73 20 75 73  rge.** tables us
1da70 69 6e 67 20 61 6e 20 65 78 74 65 72 6e 61 6c 20  ing an external 
1da80 6d 65 72 67 65 2d 73 6f 72 74 20 61 6c 67 6f 72  merge-sort algor
1da90 69 74 68 6d 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 61  ithm..**.** If a
1daa0 72 67 75 6d 65 6e 74 20 50 33 20 69 73 20 6e 6f  rgument P3 is no
1dab0 6e 2d 7a 65 72 6f 2c 20 74 68 65 6e 20 69 74 20  n-zero, then it 
1dac0 69 6e 64 69 63 61 74 65 73 20 74 68 61 74 20 74  indicates that t
1dad0 68 65 20 73 6f 72 74 65 72 20 6d 61 79 0a 2a 2a  he sorter may.**
1dae0 20 61 73 73 75 6d 65 20 74 68 61 74 20 61 20 73   assume that a s
1daf0 74 61 62 6c 65 20 73 6f 72 74 20 63 6f 6e 73 69  table sort consi
1db00 64 65 72 69 6e 67 20 74 68 65 20 66 69 72 73 74  dering the first
1db10 20 50 33 20 66 69 65 6c 64 73 20 6f 66 20 65 61   P3 fields of ea
1db20 63 68 0a 2a 2a 20 6b 65 79 20 69 73 20 73 75 66  ch.** key is suf
1db30 66 69 63 69 65 6e 74 20 74 6f 20 70 72 6f 64 75  ficient to produ
1db40 63 65 20 74 68 65 20 72 65 71 75 69 72 65 64 20  ce the required 
1db50 72 65 73 75 6c 74 73 2e 0a 2a 2f 0a 63 61 73 65  results..*/.case
1db60 20 4f 50 5f 53 6f 72 74 65 72 4f 70 65 6e 3a 20   OP_SorterOpen: 
1db70 7b 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a  {.  VdbeCursor *
1db80 70 43 78 3b 0a 0a 20 20 61 73 73 65 72 74 28 20  pCx;..  assert( 
1db90 70 4f 70 2d 3e 70 31 3e 3d 30 20 29 3b 0a 20 20  pOp->p1>=0 );.  
1dba0 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e  assert( pOp->p2>
1dbb0 3d 30 20 29 3b 0a 20 20 70 43 78 20 3d 20 61 6c  =0 );.  pCx = al
1dbc0 6c 6f 63 61 74 65 43 75 72 73 6f 72 28 70 2c 20  locateCursor(p, 
1dbd0 70 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70 32  pOp->p1, pOp->p2
1dbe0 2c 20 2d 31 2c 20 43 55 52 54 59 50 45 5f 53 4f  , -1, CURTYPE_SO
1dbf0 52 54 45 52 29 3b 0a 20 20 69 66 28 20 70 43 78  RTER);.  if( pCx
1dc00 3d 3d 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65  ==0 ) goto no_me
1dc10 6d 3b 0a 20 20 70 43 78 2d 3e 70 4b 65 79 49 6e  m;.  pCx->pKeyIn
1dc20 66 6f 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 4b 65  fo = pOp->p4.pKe
1dc30 79 49 6e 66 6f 3b 0a 20 20 61 73 73 65 72 74 28  yInfo;.  assert(
1dc40 20 70 43 78 2d 3e 70 4b 65 79 49 6e 66 6f 2d 3e   pCx->pKeyInfo->
1dc50 64 62 3d 3d 64 62 20 29 3b 0a 20 20 61 73 73 65  db==db );.  asse
1dc60 72 74 28 20 70 43 78 2d 3e 70 4b 65 79 49 6e 66  rt( pCx->pKeyInf
1dc70 6f 2d 3e 65 6e 63 3d 3d 45 4e 43 28 64 62 29 20  o->enc==ENC(db) 
1dc80 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65  );.  rc = sqlite
1dc90 33 56 64 62 65 53 6f 72 74 65 72 49 6e 69 74 28  3VdbeSorterInit(
1dca0 64 62 2c 20 70 4f 70 2d 3e 70 33 2c 20 70 43 78  db, pOp->p3, pCx
1dcb0 29 3b 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f  );.  if( rc ) go
1dcc0 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
1dcd0 65 72 72 6f 72 3b 0a 20 20 62 72 65 61 6b 3b 0a  error;.  break;.
1dce0 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 65  }../* Opcode: Se
1dcf0 71 75 65 6e 63 65 54 65 73 74 20 50 31 20 50 32  quenceTest P1 P2
1dd00 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73   * * *.** Synops
1dd10 69 73 3a 20 69 66 28 20 63 75 72 73 6f 72 5b 50  is: if( cursor[P
1dd20 31 5d 2e 63 74 72 2b 2b 20 29 20 70 63 20 3d 20  1].ctr++ ) pc = 
1dd30 50 32 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 61  P2.**.** P1 is a
1dd40 20 73 6f 72 74 65 72 20 63 75 72 73 6f 72 2e 20   sorter cursor. 
1dd50 49 66 20 74 68 65 20 73 65 71 75 65 6e 63 65 20  If the sequence 
1dd60 63 6f 75 6e 74 65 72 20 69 73 20 63 75 72 72 65  counter is curre
1dd70 6e 74 6c 79 20 7a 65 72 6f 2c 20 6a 75 6d 70 0a  ntly zero, jump.
1dd80 2a 2a 20 74 6f 20 50 32 2e 20 52 65 67 61 72 64  ** to P2. Regard
1dd90 6c 65 73 73 20 6f 66 20 77 68 65 74 68 65 72 20  less of whether 
1dda0 6f 72 20 6e 6f 74 20 74 68 65 20 6a 75 6d 70 20  or not the jump 
1ddb0 69 73 20 74 61 6b 65 6e 2c 20 69 6e 63 72 65 6d  is taken, increm
1ddc0 65 6e 74 20 74 68 65 0a 2a 2a 20 74 68 65 20 73  ent the.** the s
1ddd0 65 71 75 65 6e 63 65 20 76 61 6c 75 65 2e 0a 2a  equence value..*
1dde0 2f 0a 63 61 73 65 20 4f 50 5f 53 65 71 75 65 6e  /.case OP_Sequen
1ddf0 63 65 54 65 73 74 3a 20 7b 0a 20 20 56 64 62 65  ceTest: {.  Vdbe
1de00 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 61 73  Cursor *pC;.  as
1de10 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30  sert( pOp->p1>=0
1de20 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e   && pOp->p1<p->n
1de30 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d  Cursor );.  pC =
1de40 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70   p->apCsr[pOp->p
1de50 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 69 73  1];.  assert( is
1de60 53 6f 72 74 65 72 28 70 43 29 20 29 3b 0a 20 20  Sorter(pC) );.  
1de70 69 66 28 20 28 70 43 2d 3e 73 65 71 43 6f 75 6e  if( (pC->seqCoun
1de80 74 2b 2b 29 3d 3d 30 20 29 7b 0a 20 20 20 20 67  t++)==0 ){.    g
1de90 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a  oto jump_to_p2;.
1dea0 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
1deb0 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f 70 65 6e 50  /* Opcode: OpenP
1dec0 73 65 75 64 6f 20 50 31 20 50 32 20 50 33 20 2a  seudo P1 P2 P3 *
1ded0 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
1dee0 50 33 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 72 5b  P3 columns in r[
1def0 50 32 5d 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e 20 61  P2].**.** Open a
1df00 20 6e 65 77 20 63 75 72 73 6f 72 20 74 68 61 74   new cursor that
1df10 20 70 6f 69 6e 74 73 20 74 6f 20 61 20 66 61 6b   points to a fak
1df20 65 20 74 61 62 6c 65 20 74 68 61 74 20 63 6f 6e  e table that con
1df30 74 61 69 6e 73 20 61 20 73 69 6e 67 6c 65 0a 2a  tains a single.*
1df40 2a 20 72 6f 77 20 6f 66 20 64 61 74 61 2e 20 20  * row of data.  
1df50 54 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 74  The content of t
1df60 68 61 74 20 6f 6e 65 20 72 6f 77 20 69 73 20 74  hat one row is t
1df70 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 6d 65  he content of me
1df80 6d 6f 72 79 0a 2a 2a 20 72 65 67 69 73 74 65 72  mory.** register
1df90 20 50 32 2e 20 20 49 6e 20 6f 74 68 65 72 20 77   P2.  In other w
1dfa0 6f 72 64 73 2c 20 63 75 72 73 6f 72 20 50 31 20  ords, cursor P1 
1dfb0 62 65 63 6f 6d 65 73 20 61 6e 20 61 6c 69 61 73  becomes an alias
1dfc0 20 66 6f 72 20 74 68 65 20 0a 2a 2a 20 4d 45 4d   for the .** MEM
1dfd0 5f 42 6c 6f 62 20 63 6f 6e 74 65 6e 74 20 63 6f  _Blob content co
1dfe0 6e 74 61 69 6e 65 64 20 69 6e 20 72 65 67 69 73  ntained in regis
1dff0 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 41 20  ter P2..**.** A 
1e000 70 73 65 75 64 6f 2d 74 61 62 6c 65 20 63 72 65  pseudo-table cre
1e010 61 74 65 64 20 62 79 20 74 68 69 73 20 6f 70 63  ated by this opc
1e020 6f 64 65 20 69 73 20 75 73 65 64 20 74 6f 20 68  ode is used to h
1e030 6f 6c 64 20 61 20 73 69 6e 67 6c 65 0a 2a 2a 20  old a single.** 
1e040 72 6f 77 20 6f 75 74 70 75 74 20 66 72 6f 6d 20  row output from 
1e050 74 68 65 20 73 6f 72 74 65 72 20 73 6f 20 74 68  the sorter so th
1e060 61 74 20 74 68 65 20 72 6f 77 20 63 61 6e 20 62  at the row can b
1e070 65 20 64 65 63 6f 6d 70 6f 73 65 64 20 69 6e 74  e decomposed int
1e080 6f 0a 2a 2a 20 69 6e 64 69 76 69 64 75 61 6c 20  o.** individual 
1e090 63 6f 6c 75 6d 6e 73 20 75 73 69 6e 67 20 74 68  columns using th
1e0a0 65 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 70 63 6f  e OP_Column opco
1e0b0 64 65 2e 20 20 54 68 65 20 4f 50 5f 43 6f 6c 75  de.  The OP_Colu
1e0c0 6d 6e 20 6f 70 63 6f 64 65 0a 2a 2a 20 69 73 20  mn opcode.** is 
1e0d0 74 68 65 20 6f 6e 6c 79 20 63 75 72 73 6f 72 20  the only cursor 
1e0e0 6f 70 63 6f 64 65 20 74 68 61 74 20 77 6f 72 6b  opcode that work
1e0f0 73 20 77 69 74 68 20 61 20 70 73 65 75 64 6f 2d  s with a pseudo-
1e100 74 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 50 33 20  table..**.** P3 
1e110 69 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  is the number of
1e120 20 66 69 65 6c 64 73 20 69 6e 20 74 68 65 20 72   fields in the r
1e130 65 63 6f 72 64 73 20 74 68 61 74 20 77 69 6c 6c  ecords that will
1e140 20 62 65 20 73 74 6f 72 65 64 20 62 79 0a 2a 2a   be stored by.**
1e150 20 74 68 65 20 70 73 65 75 64 6f 2d 74 61 62 6c   the pseudo-tabl
1e160 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4f 70  e..*/.case OP_Op
1e170 65 6e 50 73 65 75 64 6f 3a 20 7b 0a 20 20 56 64  enPseudo: {.  Vd
1e180 62 65 43 75 72 73 6f 72 20 2a 70 43 78 3b 0a 0a  beCursor *pCx;..
1e190 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
1e1a0 31 3e 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  1>=0 );.  assert
1e1b0 28 20 70 4f 70 2d 3e 70 33 3e 3d 30 20 29 3b 0a  ( pOp->p3>=0 );.
1e1c0 20 20 70 43 78 20 3d 20 61 6c 6c 6f 63 61 74 65    pCx = allocate
1e1d0 43 75 72 73 6f 72 28 70 2c 20 70 4f 70 2d 3e 70  Cursor(p, pOp->p
1e1e0 31 2c 20 70 4f 70 2d 3e 70 33 2c 20 2d 31 2c 20  1, pOp->p3, -1, 
1e1f0 43 55 52 54 59 50 45 5f 50 53 45 55 44 4f 29 3b  CURTYPE_PSEUDO);
1e200 0a 20 20 69 66 28 20 70 43 78 3d 3d 30 20 29 20  .  if( pCx==0 ) 
1e210 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 70  goto no_mem;.  p
1e220 43 78 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 31 3b  Cx->nullRow = 1;
1e230 0a 20 20 70 43 78 2d 3e 73 65 65 6b 52 65 73 75  .  pCx->seekResu
1e240 6c 74 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20  lt = pOp->p2;.  
1e250 70 43 78 2d 3e 69 73 54 61 62 6c 65 20 3d 20 31  pCx->isTable = 1
1e260 3b 0a 20 20 2f 2a 20 47 69 76 65 20 74 68 69 73  ;.  /* Give this
1e270 20 70 73 65 75 64 6f 2d 63 75 72 73 6f 72 20 61   pseudo-cursor a
1e280 20 66 61 6b 65 20 42 74 43 75 72 73 6f 72 20 70   fake BtCursor p
1e290 6f 69 6e 74 65 72 20 73 6f 20 74 68 61 74 20 70  ointer so that p
1e2a0 43 78 0a 20 20 2a 2a 20 63 61 6e 20 62 65 20 73  Cx.  ** can be s
1e2b0 61 66 65 6c 79 20 70 61 73 73 65 64 20 74 6f 20  afely passed to 
1e2c0 73 71 6c 69 74 65 33 56 64 62 65 43 75 72 73 6f  sqlite3VdbeCurso
1e2d0 72 4d 6f 76 65 74 6f 28 29 2e 20 20 54 68 69 73  rMoveto().  This
1e2e0 20 61 76 6f 69 64 73 20 61 20 74 65 73 74 0a 20   avoids a test. 
1e2f0 20 2a 2a 20 66 6f 72 20 70 43 78 2d 3e 65 43 75   ** for pCx->eCu
1e300 72 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f 42  rType==CURTYPE_B
1e310 54 52 45 45 20 69 6e 73 69 64 65 20 6f 66 20 73  TREE inside of s
1e320 71 6c 69 74 65 33 56 64 62 65 43 75 72 73 6f 72  qlite3VdbeCursor
1e330 4d 6f 76 65 74 6f 28 29 0a 20 20 2a 2a 20 77 68  Moveto().  ** wh
1e340 69 63 68 20 69 73 20 61 20 70 65 72 66 6f 72 6d  ich is a perform
1e350 61 6e 63 65 20 6f 70 74 69 6d 69 7a 61 74 69 6f  ance optimizatio
1e360 6e 20 2a 2f 0a 20 20 70 43 78 2d 3e 75 63 2e 70  n */.  pCx->uc.p
1e370 43 75 72 73 6f 72 20 3d 20 73 71 6c 69 74 65 33  Cursor = sqlite3
1e380 42 74 72 65 65 46 61 6b 65 56 61 6c 69 64 43 75  BtreeFakeValidCu
1e390 72 73 6f 72 28 29 3b 0a 20 20 61 73 73 65 72 74  rsor();.  assert
1e3a0 28 20 70 4f 70 2d 3e 70 35 3d 3d 30 20 29 3b 0a  ( pOp->p5==0 );.
1e3b0 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
1e3c0 70 63 6f 64 65 3a 20 43 6c 6f 73 65 20 50 31 20  pcode: Close P1 
1e3d0 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 43 6c  * * * *.**.** Cl
1e3e0 6f 73 65 20 61 20 63 75 72 73 6f 72 20 70 72 65  ose a cursor pre
1e3f0 76 69 6f 75 73 6c 79 20 6f 70 65 6e 65 64 20 61  viously opened a
1e400 73 20 50 31 2e 20 20 49 66 20 50 31 20 69 73 20  s P1.  If P1 is 
1e410 6e 6f 74 0a 2a 2a 20 63 75 72 72 65 6e 74 6c 79  not.** currently
1e420 20 6f 70 65 6e 2c 20 74 68 69 73 20 69 6e 73 74   open, this inst
1e430 72 75 63 74 69 6f 6e 20 69 73 20 61 20 6e 6f 2d  ruction is a no-
1e440 6f 70 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43  op..*/.case OP_C
1e450 6c 6f 73 65 3a 20 7b 0a 20 20 61 73 73 65 72 74  lose: {.  assert
1e460 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20  ( pOp->p1>=0 && 
1e470 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73  pOp->p1<p->nCurs
1e480 6f 72 20 29 3b 0a 20 20 73 71 6c 69 74 65 33 56  or );.  sqlite3V
1e490 64 62 65 46 72 65 65 43 75 72 73 6f 72 28 70 2c  dbeFreeCursor(p,
1e4a0 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70   p->apCsr[pOp->p
1e4b0 31 5d 29 3b 0a 20 20 70 2d 3e 61 70 43 73 72 5b  1]);.  p->apCsr[
1e4c0 70 4f 70 2d 3e 70 31 5d 20 3d 20 30 3b 0a 20 20  pOp->p1] = 0;.  
1e4d0 62 72 65 61 6b 3b 0a 7d 0a 0a 23 69 66 64 65 66  break;.}..#ifdef
1e4e0 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 43   SQLITE_ENABLE_C
1e4f0 4f 4c 55 4d 4e 5f 55 53 45 44 5f 4d 41 53 4b 0a  OLUMN_USED_MASK.
1e500 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6f 6c 75 6d  /* Opcode: Colum
1e510 6e 73 55 73 65 64 20 50 31 20 2a 20 2a 20 50 34  nsUsed P1 * * P4
1e520 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70   *.**.** This op
1e530 63 6f 64 65 20 28 77 68 69 63 68 20 6f 6e 6c 79  code (which only
1e540 20 65 78 69 73 74 73 20 69 66 20 53 51 4c 69 74   exists if SQLit
1e550 65 20 77 61 73 20 63 6f 6d 70 69 6c 65 64 20 77  e was compiled w
1e560 69 74 68 0a 2a 2a 20 53 51 4c 49 54 45 5f 45 4e  ith.** SQLITE_EN
1e570 41 42 4c 45 5f 43 4f 4c 55 4d 4e 5f 55 53 45 44  ABLE_COLUMN_USED
1e580 5f 4d 41 53 4b 29 20 69 64 65 6e 74 69 66 69 65  _MASK) identifie
1e590 73 20 77 68 69 63 68 20 63 6f 6c 75 6d 6e 73 20  s which columns 
1e5a0 6f 66 20 74 68 65 0a 2a 2a 20 74 61 62 6c 65 20  of the.** table 
1e5b0 6f 72 20 69 6e 64 65 78 20 66 6f 72 20 63 75 72  or index for cur
1e5c0 73 6f 72 20 50 31 20 61 72 65 20 75 73 65 64 2e  sor P1 are used.
1e5d0 20 20 50 34 20 69 73 20 61 20 36 34 2d 62 69 74    P4 is a 64-bit
1e5e0 20 69 6e 74 65 67 65 72 0a 2a 2a 20 28 50 34 5f   integer.** (P4_
1e5f0 49 4e 54 36 34 29 20 69 6e 20 77 68 69 63 68 20  INT64) in which 
1e600 74 68 65 20 66 69 72 73 74 20 36 33 20 62 69 74  the first 63 bit
1e610 73 20 61 72 65 20 6f 6e 65 20 66 6f 72 20 65 61  s are one for ea
1e620 63 68 20 6f 66 20 74 68 65 0a 2a 2a 20 66 69 72  ch of the.** fir
1e630 73 74 20 36 33 20 63 6f 6c 75 6d 6e 73 20 6f 66  st 63 columns of
1e640 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20 69 6e   the table or in
1e650 64 65 78 20 74 68 61 74 20 61 72 65 20 61 63 74  dex that are act
1e660 75 61 6c 6c 79 20 75 73 65 64 0a 2a 2a 20 62 79  ually used.** by
1e670 20 74 68 65 20 63 75 72 73 6f 72 2e 20 20 54 68   the cursor.  Th
1e680 65 20 68 69 67 68 2d 6f 72 64 65 72 20 62 69 74  e high-order bit
1e690 20 69 73 20 73 65 74 20 69 66 20 61 6e 79 20 63   is set if any c
1e6a0 6f 6c 75 6d 6e 20 61 66 74 65 72 0a 2a 2a 20 74  olumn after.** t
1e6b0 68 65 20 36 34 74 68 20 69 73 20 75 73 65 64 2e  he 64th is used.
1e6c0 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 6f 6c 75  .*/.case OP_Colu
1e6d0 6d 6e 73 55 73 65 64 3a 20 7b 0a 20 20 56 64 62  mnsUsed: {.  Vdb
1e6e0 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 70  eCursor *pC;.  p
1e6f0 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70  C = p->apCsr[pOp
1e700 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p1];.  assert(
1e710 20 70 43 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43   pC->eCurType==C
1e720 55 52 54 59 50 45 5f 42 54 52 45 45 20 29 3b 0a  URTYPE_BTREE );.
1e730 20 20 70 43 2d 3e 6d 61 73 6b 55 73 65 64 20 3d    pC->maskUsed =
1e740 20 2a 28 75 36 34 2a 29 70 4f 70 2d 3e 70 34 2e   *(u64*)pOp->p4.
1e750 70 49 36 34 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  pI64;.  break;.}
1e760 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20 4f 70 63 6f  .#endif../* Opco
1e770 64 65 3a 20 53 65 65 6b 47 45 20 50 31 20 50 32  de: SeekGE P1 P2
1e780 20 50 33 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f   P3 P4 *.** Syno
1e790 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50 33 40 50  psis: key=r[P3@P
1e7a0 34 5d 0a 2a 2a 0a 2a 2a 20 49 66 20 63 75 72 73  4].**.** If curs
1e7b0 6f 72 20 50 31 20 72 65 66 65 72 73 20 74 6f 20  or P1 refers to 
1e7c0 61 6e 20 53 51 4c 20 74 61 62 6c 65 20 28 42 2d  an SQL table (B-
1e7d0 54 72 65 65 20 74 68 61 74 20 75 73 65 73 20 69  Tree that uses i
1e7e0 6e 74 65 67 65 72 20 6b 65 79 73 29 2c 20 0a 2a  nteger keys), .*
1e7f0 2a 20 75 73 65 20 74 68 65 20 76 61 6c 75 65 20  * use the value 
1e800 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 20 61  in register P3 a
1e810 73 20 74 68 65 20 6b 65 79 2e 20 20 49 66 20 63  s the key.  If c
1e820 75 72 73 6f 72 20 50 31 20 72 65 66 65 72 73 20  ursor P1 refers 
1e830 0a 2a 2a 20 74 6f 20 61 6e 20 53 51 4c 20 69 6e  .** to an SQL in
1e840 64 65 78 2c 20 74 68 65 6e 20 50 33 20 69 73 20  dex, then P3 is 
1e850 74 68 65 20 66 69 72 73 74 20 69 6e 20 61 6e 20  the first in an 
1e860 61 72 72 61 79 20 6f 66 20 50 34 20 72 65 67 69  array of P4 regi
1e870 73 74 65 72 73 20 0a 2a 2a 20 74 68 61 74 20 61  sters .** that a
1e880 72 65 20 75 73 65 64 20 61 73 20 61 6e 20 75 6e  re used as an un
1e890 70 61 63 6b 65 64 20 69 6e 64 65 78 20 6b 65 79  packed index key
1e8a0 2e 20 0a 2a 2a 0a 2a 2a 20 52 65 70 6f 73 69 74  . .**.** Reposit
1e8b0 69 6f 6e 20 63 75 72 73 6f 72 20 50 31 20 73 6f  ion cursor P1 so
1e8c0 20 74 68 61 74 20 20 69 74 20 70 6f 69 6e 74 73   that  it points
1e8d0 20 74 6f 20 74 68 65 20 73 6d 61 6c 6c 65 73 74   to the smallest
1e8e0 20 65 6e 74 72 79 20 74 68 61 74 20 0a 2a 2a 20   entry that .** 
1e8f0 69 73 20 67 72 65 61 74 65 72 20 74 68 61 6e 20  is greater than 
1e900 6f 72 20 65 71 75 61 6c 20 74 6f 20 74 68 65 20  or equal to the 
1e910 6b 65 79 20 76 61 6c 75 65 2e 20 49 66 20 74 68  key value. If th
1e920 65 72 65 20 61 72 65 20 6e 6f 20 72 65 63 6f 72  ere are no recor
1e930 64 73 20 0a 2a 2a 20 67 72 65 61 74 65 72 20 74  ds .** greater t
1e940 68 61 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f 20  han or equal to 
1e950 74 68 65 20 6b 65 79 20 61 6e 64 20 50 32 20 69  the key and P2 i
1e960 73 20 6e 6f 74 20 7a 65 72 6f 2c 20 74 68 65 6e  s not zero, then
1e970 20 6a 75 6d 70 20 74 6f 20 50 32 2e 0a 2a 2a 0a   jump to P2..**.
1e980 2a 2a 20 49 66 20 74 68 65 20 63 75 72 73 6f 72  ** If the cursor
1e990 20 50 31 20 77 61 73 20 6f 70 65 6e 65 64 20 75   P1 was opened u
1e9a0 73 69 6e 67 20 74 68 65 20 4f 50 46 4c 41 47 5f  sing the OPFLAG_
1e9b0 53 45 45 4b 45 51 20 66 6c 61 67 2c 20 74 68 65  SEEKEQ flag, the
1e9c0 6e 20 74 68 69 73 0a 2a 2a 20 6f 70 63 6f 64 65  n this.** opcode
1e9d0 20 77 69 6c 6c 20 61 6c 77 61 79 73 20 6c 61 6e   will always lan
1e9e0 64 20 6f 6e 20 61 20 72 65 63 6f 72 64 20 74 68  d on a record th
1e9f0 61 74 20 65 71 75 61 6c 6c 79 20 65 71 75 61 6c  at equally equal
1ea00 73 20 74 68 65 20 6b 65 79 2c 20 6f 72 0a 2a 2a  s the key, or.**
1ea10 20 65 6c 73 65 20 6a 75 6d 70 20 69 6d 6d 65 64   else jump immed
1ea20 69 61 74 65 6c 79 20 74 6f 20 50 32 2e 20 20 57  iately to P2.  W
1ea30 68 65 6e 20 74 68 65 20 63 75 72 73 6f 72 20 69  hen the cursor i
1ea40 73 20 4f 50 46 4c 41 47 5f 53 45 45 4b 45 51 2c  s OPFLAG_SEEKEQ,
1ea50 20 74 68 69 73 0a 2a 2a 20 6f 70 63 6f 64 65 20   this.** opcode 
1ea60 6d 75 73 74 20 62 65 20 66 6f 6c 6c 6f 77 65 64  must be followed
1ea70 20 62 79 20 61 6e 20 49 64 78 4c 45 20 6f 70 63   by an IdxLE opc
1ea80 6f 64 65 20 77 69 74 68 20 74 68 65 20 73 61 6d  ode with the sam
1ea90 65 20 61 72 67 75 6d 65 6e 74 73 2e 0a 2a 2a 20  e arguments..** 
1eaa0 54 68 65 20 49 64 78 4c 45 20 6f 70 63 6f 64 65  The IdxLE opcode
1eab0 20 77 69 6c 6c 20 62 65 20 73 6b 69 70 70 65 64   will be skipped
1eac0 20 69 66 20 74 68 69 73 20 6f 70 63 6f 64 65 20   if this opcode 
1ead0 73 75 63 63 65 65 64 73 2c 20 62 75 74 20 74 68  succeeds, but th
1eae0 65 0a 2a 2a 20 49 64 78 4c 45 20 6f 70 63 6f 64  e.** IdxLE opcod
1eaf0 65 20 77 69 6c 6c 20 62 65 20 75 73 65 64 20 6f  e will be used o
1eb00 6e 20 73 75 62 73 65 71 75 65 6e 74 20 6c 6f 6f  n subsequent loo
1eb10 70 20 69 74 65 72 61 74 69 6f 6e 73 2e 0a 2a 2a  p iterations..**
1eb20 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20  .** This opcode 
1eb30 6c 65 61 76 65 73 20 74 68 65 20 63 75 72 73 6f  leaves the curso
1eb40 72 20 63 6f 6e 66 69 67 75 72 65 64 20 74 6f 20  r configured to 
1eb50 6d 6f 76 65 20 69 6e 20 66 6f 72 77 61 72 64 20  move in forward 
1eb60 6f 72 64 65 72 2c 0a 2a 2a 20 66 72 6f 6d 20 74  order,.** from t
1eb70 68 65 20 62 65 67 69 6e 6e 69 6e 67 20 74 6f 77  he beginning tow
1eb80 61 72 64 20 74 68 65 20 65 6e 64 2e 20 20 49 6e  ard the end.  In
1eb90 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 74 68   other words, th
1eba0 65 20 63 75 72 73 6f 72 20 69 73 0a 2a 2a 20 63  e cursor is.** c
1ebb0 6f 6e 66 69 67 75 72 65 64 20 74 6f 20 75 73 65  onfigured to use
1ebc0 20 4e 65 78 74 2c 20 6e 6f 74 20 50 72 65 76 2e   Next, not Prev.
1ebd0 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a  .**.** See also:
1ebe0 20 46 6f 75 6e 64 2c 20 4e 6f 74 46 6f 75 6e 64   Found, NotFound
1ebf0 2c 20 53 65 65 6b 4c 74 2c 20 53 65 65 6b 47 74  , SeekLt, SeekGt
1ec00 2c 20 53 65 65 6b 4c 65 0a 2a 2f 0a 2f 2a 20 4f  , SeekLe.*/./* O
1ec10 70 63 6f 64 65 3a 20 53 65 65 6b 47 54 20 50 31  pcode: SeekGT P1
1ec20 20 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a 20 53   P2 P3 P4 *.** S
1ec30 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50  ynopsis: key=r[P
1ec40 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 49 66 20 63  3@P4].**.** If c
1ec50 75 72 73 6f 72 20 50 31 20 72 65 66 65 72 73 20  ursor P1 refers 
1ec60 74 6f 20 61 6e 20 53 51 4c 20 74 61 62 6c 65 20  to an SQL table 
1ec70 28 42 2d 54 72 65 65 20 74 68 61 74 20 75 73 65  (B-Tree that use
1ec80 73 20 69 6e 74 65 67 65 72 20 6b 65 79 73 29 2c  s integer keys),
1ec90 20 0a 2a 2a 20 75 73 65 20 74 68 65 20 76 61 6c   .** use the val
1eca0 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
1ecb0 33 20 61 73 20 61 20 6b 65 79 2e 20 49 66 20 63  3 as a key. If c
1ecc0 75 72 73 6f 72 20 50 31 20 72 65 66 65 72 73 20  ursor P1 refers 
1ecd0 0a 2a 2a 20 74 6f 20 61 6e 20 53 51 4c 20 69 6e  .** to an SQL in
1ece0 64 65 78 2c 20 74 68 65 6e 20 50 33 20 69 73 20  dex, then P3 is 
1ecf0 74 68 65 20 66 69 72 73 74 20 69 6e 20 61 6e 20  the first in an 
1ed00 61 72 72 61 79 20 6f 66 20 50 34 20 72 65 67 69  array of P4 regi
1ed10 73 74 65 72 73 20 0a 2a 2a 20 74 68 61 74 20 61  sters .** that a
1ed20 72 65 20 75 73 65 64 20 61 73 20 61 6e 20 75 6e  re used as an un
1ed30 70 61 63 6b 65 64 20 69 6e 64 65 78 20 6b 65 79  packed index key
1ed40 2e 20 0a 2a 2a 0a 2a 2a 20 52 65 70 6f 73 69 74  . .**.** Reposit
1ed50 69 6f 6e 20 63 75 72 73 6f 72 20 50 31 20 73 6f  ion cursor P1 so
1ed60 20 74 68 61 74 20 20 69 74 20 70 6f 69 6e 74 73   that  it points
1ed70 20 74 6f 20 74 68 65 20 73 6d 61 6c 6c 65 73 74   to the smallest
1ed80 20 65 6e 74 72 79 20 74 68 61 74 20 0a 2a 2a 20   entry that .** 
1ed90 69 73 20 67 72 65 61 74 65 72 20 74 68 61 6e 20  is greater than 
1eda0 74 68 65 20 6b 65 79 20 76 61 6c 75 65 2e 20 49  the key value. I
1edb0 66 20 74 68 65 72 65 20 61 72 65 20 6e 6f 20 72  f there are no r
1edc0 65 63 6f 72 64 73 20 67 72 65 61 74 65 72 20 74  ecords greater t
1edd0 68 61 6e 20 0a 2a 2a 20 74 68 65 20 6b 65 79 20  han .** the key 
1ede0 61 6e 64 20 50 32 20 69 73 20 6e 6f 74 20 7a 65  and P2 is not ze
1edf0 72 6f 2c 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f  ro, then jump to
1ee00 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20   P2..**.** This 
1ee10 6f 70 63 6f 64 65 20 6c 65 61 76 65 73 20 74 68  opcode leaves th
1ee20 65 20 63 75 72 73 6f 72 20 63 6f 6e 66 69 67 75  e cursor configu
1ee30 72 65 64 20 74 6f 20 6d 6f 76 65 20 69 6e 20 66  red to move in f
1ee40 6f 72 77 61 72 64 20 6f 72 64 65 72 2c 0a 2a 2a  orward order,.**
1ee50 20 66 72 6f 6d 20 74 68 65 20 62 65 67 69 6e 6e   from the beginn
1ee60 69 6e 67 20 74 6f 77 61 72 64 20 74 68 65 20 65  ing toward the e
1ee70 6e 64 2e 20 20 49 6e 20 6f 74 68 65 72 20 77 6f  nd.  In other wo
1ee80 72 64 73 2c 20 74 68 65 20 63 75 72 73 6f 72 20  rds, the cursor 
1ee90 69 73 0a 2a 2a 20 63 6f 6e 66 69 67 75 72 65 64  is.** configured
1eea0 20 74 6f 20 75 73 65 20 4e 65 78 74 2c 20 6e 6f   to use Next, no
1eeb0 74 20 50 72 65 76 2e 0a 2a 2a 0a 2a 2a 20 53 65  t Prev..**.** Se
1eec0 65 20 61 6c 73 6f 3a 20 46 6f 75 6e 64 2c 20 4e  e also: Found, N
1eed0 6f 74 46 6f 75 6e 64 2c 20 53 65 65 6b 4c 74 2c  otFound, SeekLt,
1eee0 20 53 65 65 6b 47 65 2c 20 53 65 65 6b 4c 65 0a   SeekGe, SeekLe.
1eef0 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 65  */./* Opcode: Se
1ef00 65 6b 4c 54 20 50 31 20 50 32 20 50 33 20 50 34  ekLT P1 P2 P3 P4
1ef10 20 2a 20 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a   * .** Synopsis:
1ef20 20 6b 65 79 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a   key=r[P3@P4].**
1ef30 0a 2a 2a 20 49 66 20 63 75 72 73 6f 72 20 50 31  .** If cursor P1
1ef40 20 72 65 66 65 72 73 20 74 6f 20 61 6e 20 53 51   refers to an SQ
1ef50 4c 20 74 61 62 6c 65 20 28 42 2d 54 72 65 65 20  L table (B-Tree 
1ef60 74 68 61 74 20 75 73 65 73 20 69 6e 74 65 67 65  that uses intege
1ef70 72 20 6b 65 79 73 29 2c 20 0a 2a 2a 20 75 73 65  r keys), .** use
1ef80 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65   the value in re
1ef90 67 69 73 74 65 72 20 50 33 20 61 73 20 61 20 6b  gister P3 as a k
1efa0 65 79 2e 20 49 66 20 63 75 72 73 6f 72 20 50 31  ey. If cursor P1
1efb0 20 72 65 66 65 72 73 20 0a 2a 2a 20 74 6f 20 61   refers .** to a
1efc0 6e 20 53 51 4c 20 69 6e 64 65 78 2c 20 74 68 65  n SQL index, the
1efd0 6e 20 50 33 20 69 73 20 74 68 65 20 66 69 72 73  n P3 is the firs
1efe0 74 20 69 6e 20 61 6e 20 61 72 72 61 79 20 6f 66  t in an array of
1eff0 20 50 34 20 72 65 67 69 73 74 65 72 73 20 0a 2a   P4 registers .*
1f000 2a 20 74 68 61 74 20 61 72 65 20 75 73 65 64 20  * that are used 
1f010 61 73 20 61 6e 20 75 6e 70 61 63 6b 65 64 20 69  as an unpacked i
1f020 6e 64 65 78 20 6b 65 79 2e 20 0a 2a 2a 0a 2a 2a  ndex key. .**.**
1f030 20 52 65 70 6f 73 69 74 69 6f 6e 20 63 75 72 73   Reposition curs
1f040 6f 72 20 50 31 20 73 6f 20 74 68 61 74 20 20 69  or P1 so that  i
1f050 74 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 20  t points to the 
1f060 6c 61 72 67 65 73 74 20 65 6e 74 72 79 20 74 68  largest entry th
1f070 61 74 20 0a 2a 2a 20 69 73 20 6c 65 73 73 20 74  at .** is less t
1f080 68 61 6e 20 74 68 65 20 6b 65 79 20 76 61 6c 75  han the key valu
1f090 65 2e 20 49 66 20 74 68 65 72 65 20 61 72 65 20  e. If there are 
1f0a0 6e 6f 20 72 65 63 6f 72 64 73 20 6c 65 73 73 20  no records less 
1f0b0 74 68 61 6e 20 0a 2a 2a 20 74 68 65 20 6b 65 79  than .** the key
1f0c0 20 61 6e 64 20 50 32 20 69 73 20 6e 6f 74 20 7a   and P2 is not z
1f0d0 65 72 6f 2c 20 74 68 65 6e 20 6a 75 6d 70 20 74  ero, then jump t
1f0e0 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73  o P2..**.** This
1f0f0 20 6f 70 63 6f 64 65 20 6c 65 61 76 65 73 20 74   opcode leaves t
1f100 68 65 20 63 75 72 73 6f 72 20 63 6f 6e 66 69 67  he cursor config
1f110 75 72 65 64 20 74 6f 20 6d 6f 76 65 20 69 6e 20  ured to move in 
1f120 72 65 76 65 72 73 65 20 6f 72 64 65 72 2c 0a 2a  reverse order,.*
1f130 2a 20 66 72 6f 6d 20 74 68 65 20 65 6e 64 20 74  * from the end t
1f140 6f 77 61 72 64 20 74 68 65 20 62 65 67 69 6e 6e  oward the beginn
1f150 69 6e 67 2e 20 20 49 6e 20 6f 74 68 65 72 20 77  ing.  In other w
1f160 6f 72 64 73 2c 20 74 68 65 20 63 75 72 73 6f 72  ords, the cursor
1f170 20 69 73 0a 2a 2a 20 63 6f 6e 66 69 67 75 72 65   is.** configure
1f180 64 20 74 6f 20 75 73 65 20 50 72 65 76 2c 20 6e  d to use Prev, n
1f190 6f 74 20 4e 65 78 74 2e 0a 2a 2a 0a 2a 2a 20 53  ot Next..**.** S
1f1a0 65 65 20 61 6c 73 6f 3a 20 46 6f 75 6e 64 2c 20  ee also: Found, 
1f1b0 4e 6f 74 46 6f 75 6e 64 2c 20 53 65 65 6b 47 74  NotFound, SeekGt
1f1c0 2c 20 53 65 65 6b 47 65 2c 20 53 65 65 6b 4c 65  , SeekGe, SeekLe
1f1d0 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53  .*/./* Opcode: S
1f1e0 65 65 6b 4c 45 20 50 31 20 50 32 20 50 33 20 50  eekLE P1 P2 P3 P
1f1f0 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  4 *.** Synopsis:
1f200 20 6b 65 79 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a   key=r[P3@P4].**
1f210 0a 2a 2a 20 49 66 20 63 75 72 73 6f 72 20 50 31  .** If cursor P1
1f220 20 72 65 66 65 72 73 20 74 6f 20 61 6e 20 53 51   refers to an SQ
1f230 4c 20 74 61 62 6c 65 20 28 42 2d 54 72 65 65 20  L table (B-Tree 
1f240 74 68 61 74 20 75 73 65 73 20 69 6e 74 65 67 65  that uses intege
1f250 72 20 6b 65 79 73 29 2c 20 0a 2a 2a 20 75 73 65  r keys), .** use
1f260 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65   the value in re
1f270 67 69 73 74 65 72 20 50 33 20 61 73 20 61 20 6b  gister P3 as a k
1f280 65 79 2e 20 49 66 20 63 75 72 73 6f 72 20 50 31  ey. If cursor P1
1f290 20 72 65 66 65 72 73 20 0a 2a 2a 20 74 6f 20 61   refers .** to a
1f2a0 6e 20 53 51 4c 20 69 6e 64 65 78 2c 20 74 68 65  n SQL index, the
1f2b0 6e 20 50 33 20 69 73 20 74 68 65 20 66 69 72 73  n P3 is the firs
1f2c0 74 20 69 6e 20 61 6e 20 61 72 72 61 79 20 6f 66  t in an array of
1f2d0 20 50 34 20 72 65 67 69 73 74 65 72 73 20 0a 2a   P4 registers .*
1f2e0 2a 20 74 68 61 74 20 61 72 65 20 75 73 65 64 20  * that are used 
1f2f0 61 73 20 61 6e 20 75 6e 70 61 63 6b 65 64 20 69  as an unpacked i
1f300 6e 64 65 78 20 6b 65 79 2e 20 0a 2a 2a 0a 2a 2a  ndex key. .**.**
1f310 20 52 65 70 6f 73 69 74 69 6f 6e 20 63 75 72 73   Reposition curs
1f320 6f 72 20 50 31 20 73 6f 20 74 68 61 74 20 69 74  or P1 so that it
1f330 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 20 6c   points to the l
1f340 61 72 67 65 73 74 20 65 6e 74 72 79 20 74 68 61  argest entry tha
1f350 74 20 0a 2a 2a 20 69 73 20 6c 65 73 73 20 74 68  t .** is less th
1f360 61 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f 20 74  an or equal to t
1f370 68 65 20 6b 65 79 20 76 61 6c 75 65 2e 20 49 66  he key value. If
1f380 20 74 68 65 72 65 20 61 72 65 20 6e 6f 20 72 65   there are no re
1f390 63 6f 72 64 73 20 0a 2a 2a 20 6c 65 73 73 20 74  cords .** less t
1f3a0 68 61 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f 20  han or equal to 
1f3b0 74 68 65 20 6b 65 79 20 61 6e 64 20 50 32 20 69  the key and P2 i
1f3c0 73 20 6e 6f 74 20 7a 65 72 6f 2c 20 74 68 65 6e  s not zero, then
1f3d0 20 6a 75 6d 70 20 74 6f 20 50 32 2e 0a 2a 2a 0a   jump to P2..**.
1f3e0 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 6c  ** This opcode l
1f3f0 65 61 76 65 73 20 74 68 65 20 63 75 72 73 6f 72  eaves the cursor
1f400 20 63 6f 6e 66 69 67 75 72 65 64 20 74 6f 20 6d   configured to m
1f410 6f 76 65 20 69 6e 20 72 65 76 65 72 73 65 20 6f  ove in reverse o
1f420 72 64 65 72 2c 0a 2a 2a 20 66 72 6f 6d 20 74 68  rder,.** from th
1f430 65 20 65 6e 64 20 74 6f 77 61 72 64 20 74 68 65  e end toward the
1f440 20 62 65 67 69 6e 6e 69 6e 67 2e 20 20 49 6e 20   beginning.  In 
1f450 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 74 68 65  other words, the
1f460 20 63 75 72 73 6f 72 20 69 73 0a 2a 2a 20 63 6f   cursor is.** co
1f470 6e 66 69 67 75 72 65 64 20 74 6f 20 75 73 65 20  nfigured to use 
1f480 50 72 65 76 2c 20 6e 6f 74 20 4e 65 78 74 2e 0a  Prev, not Next..
1f490 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 63 75 72  **.** If the cur
1f4a0 73 6f 72 20 50 31 20 77 61 73 20 6f 70 65 6e 65  sor P1 was opene
1f4b0 64 20 75 73 69 6e 67 20 74 68 65 20 4f 50 46 4c  d using the OPFL
1f4c0 41 47 5f 53 45 45 4b 45 51 20 66 6c 61 67 2c 20  AG_SEEKEQ flag, 
1f4d0 74 68 65 6e 20 74 68 69 73 0a 2a 2a 20 6f 70 63  then this.** opc
1f4e0 6f 64 65 20 77 69 6c 6c 20 61 6c 77 61 79 73 20  ode will always 
1f4f0 6c 61 6e 64 20 6f 6e 20 61 20 72 65 63 6f 72 64  land on a record
1f500 20 74 68 61 74 20 65 71 75 61 6c 6c 79 20 65 71   that equally eq
1f510 75 61 6c 73 20 74 68 65 20 6b 65 79 2c 20 6f 72  uals the key, or
1f520 0a 2a 2a 20 65 6c 73 65 20 6a 75 6d 70 20 69 6d  .** else jump im
1f530 6d 65 64 69 61 74 65 6c 79 20 74 6f 20 50 32 2e  mediately to P2.
1f540 20 20 57 68 65 6e 20 74 68 65 20 63 75 72 73 6f    When the curso
1f550 72 20 69 73 20 4f 50 46 4c 41 47 5f 53 45 45 4b  r is OPFLAG_SEEK
1f560 45 51 2c 20 74 68 69 73 0a 2a 2a 20 6f 70 63 6f  EQ, this.** opco
1f570 64 65 20 6d 75 73 74 20 62 65 20 66 6f 6c 6c 6f  de must be follo
1f580 77 65 64 20 62 79 20 61 6e 20 49 64 78 47 45 20  wed by an IdxGE 
1f590 6f 70 63 6f 64 65 20 77 69 74 68 20 74 68 65 20  opcode with the 
1f5a0 73 61 6d 65 20 61 72 67 75 6d 65 6e 74 73 2e 0a  same arguments..
1f5b0 2a 2a 20 54 68 65 20 49 64 78 47 45 20 6f 70 63  ** The IdxGE opc
1f5c0 6f 64 65 20 77 69 6c 6c 20 62 65 20 73 6b 69 70  ode will be skip
1f5d0 70 65 64 20 69 66 20 74 68 69 73 20 6f 70 63 6f  ped if this opco
1f5e0 64 65 20 73 75 63 63 65 65 64 73 2c 20 62 75 74  de succeeds, but
1f5f0 20 74 68 65 0a 2a 2a 20 49 64 78 47 45 20 6f 70   the.** IdxGE op
1f600 63 6f 64 65 20 77 69 6c 6c 20 62 65 20 75 73 65  code will be use
1f610 64 20 6f 6e 20 73 75 62 73 65 71 75 65 6e 74 20  d on subsequent 
1f620 6c 6f 6f 70 20 69 74 65 72 61 74 69 6f 6e 73 2e  loop iterations.
1f630 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a  .**.** See also:
1f640 20 46 6f 75 6e 64 2c 20 4e 6f 74 46 6f 75 6e 64   Found, NotFound
1f650 2c 20 53 65 65 6b 47 74 2c 20 53 65 65 6b 47 65  , SeekGt, SeekGe
1f660 2c 20 53 65 65 6b 4c 74 0a 2a 2f 0a 63 61 73 65  , SeekLt.*/.case
1f670 20 4f 50 5f 53 65 65 6b 4c 54 3a 20 20 20 20 20   OP_SeekLT:     
1f680 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33      /* jump, in3
1f690 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 65 65 6b   */.case OP_Seek
1f6a0 4c 45 3a 20 20 20 20 20 20 20 20 20 2f 2a 20 6a  LE:         /* j
1f6b0 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65  ump, in3 */.case
1f6c0 20 4f 50 5f 53 65 65 6b 47 45 3a 20 20 20 20 20   OP_SeekGE:     
1f6d0 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33      /* jump, in3
1f6e0 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 65 65 6b   */.case OP_Seek
1f6f0 47 54 3a 20 7b 20 20 20 20 20 20 20 2f 2a 20 6a  GT: {       /* j
1f700 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 20 20 69 6e  ump, in3 */.  in
1f710 74 20 72 65 73 3b 20 20 20 20 20 20 20 20 20 20  t res;          
1f720 20 2f 2a 20 43 6f 6d 70 61 72 69 73 6f 6e 20 72   /* Comparison r
1f730 65 73 75 6c 74 20 2a 2f 0a 20 20 69 6e 74 20 6f  esult */.  int o
1f740 63 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  c;            /*
1f750 20 4f 70 63 6f 64 65 20 2a 2f 0a 20 20 56 64 62   Opcode */.  Vdb
1f760 65 43 75 72 73 6f 72 20 2a 70 43 3b 20 20 20 20  eCursor *pC;    
1f770 2f 2a 20 54 68 65 20 63 75 72 73 6f 72 20 74 6f  /* The cursor to
1f780 20 73 65 65 6b 20 2a 2f 0a 20 20 55 6e 70 61 63   seek */.  Unpac
1f790 6b 65 64 52 65 63 6f 72 64 20 72 3b 20 20 2f 2a  kedRecord r;  /*
1f7a0 20 54 68 65 20 6b 65 79 20 74 6f 20 73 65 65 6b   The key to seek
1f7b0 20 66 6f 72 20 2a 2f 0a 20 20 69 6e 74 20 6e 46   for */.  int nF
1f7c0 69 65 6c 64 3b 20 20 20 20 20 20 20 20 2f 2a 20  ield;        /* 
1f7d0 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e  Number of column
1f7e0 73 20 6f 72 20 66 69 65 6c 64 73 20 69 6e 20 74  s or fields in t
1f7f0 68 65 20 6b 65 79 20 2a 2f 0a 20 20 69 36 34 20  he key */.  i64 
1f800 69 4b 65 79 3b 20 20 20 20 20 20 20 20 20 20 2f  iKey;          /
1f810 2a 20 54 68 65 20 72 6f 77 69 64 20 77 65 20 61  * The rowid we a
1f820 72 65 20 74 6f 20 73 65 65 6b 20 74 6f 20 2a 2f  re to seek to */
1f830 0a 20 20 69 6e 74 20 65 71 4f 6e 6c 79 3b 20 20  .  int eqOnly;  
1f840 20 20 20 20 20 20 2f 2a 20 4f 6e 6c 79 20 69 6e        /* Only in
1f850 74 65 72 65 73 74 65 64 20 69 6e 20 3d 3d 20 72  terested in == r
1f860 65 73 75 6c 74 73 20 2a 2f 0a 0a 20 20 61 73 73  esults */..  ass
1f870 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20  ert( pOp->p1>=0 
1f880 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43  && pOp->p1<p->nC
1f890 75 72 73 6f 72 20 29 3b 0a 20 20 61 73 73 65 72  ursor );.  asser
1f8a0 74 28 20 70 4f 70 2d 3e 70 32 21 3d 30 20 29 3b  t( pOp->p2!=0 );
1f8b0 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72  .  pC = p->apCsr
1f8c0 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
1f8d0 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20  ert( pC!=0 );.  
1f8e0 61 73 73 65 72 74 28 20 70 43 2d 3e 65 43 75 72  assert( pC->eCur
1f8f0 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f 42 54  Type==CURTYPE_BT
1f900 52 45 45 20 29 3b 0a 20 20 61 73 73 65 72 74 28  REE );.  assert(
1f910 20 4f 50 5f 53 65 65 6b 4c 45 20 3d 3d 20 4f 50   OP_SeekLE == OP
1f920 5f 53 65 65 6b 4c 54 2b 31 20 29 3b 0a 20 20 61  _SeekLT+1 );.  a
1f930 73 73 65 72 74 28 20 4f 50 5f 53 65 65 6b 47 45  ssert( OP_SeekGE
1f940 20 3d 3d 20 4f 50 5f 53 65 65 6b 4c 54 2b 32 20   == OP_SeekLT+2 
1f950 29 3b 0a 20 20 61 73 73 65 72 74 28 20 4f 50 5f  );.  assert( OP_
1f960 53 65 65 6b 47 54 20 3d 3d 20 4f 50 5f 53 65 65  SeekGT == OP_See
1f970 6b 4c 54 2b 33 20 29 3b 0a 20 20 61 73 73 65 72  kLT+3 );.  asser
1f980 74 28 20 70 43 2d 3e 69 73 4f 72 64 65 72 65 64  t( pC->isOrdered
1f990 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43   );.  assert( pC
1f9a0 2d 3e 75 63 2e 70 43 75 72 73 6f 72 21 3d 30 20  ->uc.pCursor!=0 
1f9b0 29 3b 0a 20 20 6f 63 20 3d 20 70 4f 70 2d 3e 6f  );.  oc = pOp->o
1f9c0 70 63 6f 64 65 3b 0a 20 20 65 71 4f 6e 6c 79 20  pcode;.  eqOnly 
1f9d0 3d 20 30 3b 0a 20 20 70 43 2d 3e 6e 75 6c 6c 52  = 0;.  pC->nullR
1f9e0 6f 77 20 3d 20 30 3b 0a 23 69 66 64 65 66 20 53  ow = 0;.#ifdef S
1f9f0 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 70 43  QLITE_DEBUG.  pC
1fa00 2d 3e 73 65 65 6b 4f 70 20 3d 20 70 4f 70 2d 3e  ->seekOp = pOp->
1fa10 6f 70 63 6f 64 65 3b 0a 23 65 6e 64 69 66 0a 0a  opcode;.#endif..
1fa20 20 20 69 66 28 20 70 43 2d 3e 69 73 54 61 62 6c    if( pC->isTabl
1fa30 65 20 29 7b 0a 20 20 20 20 2f 2a 20 54 68 65 20  e ){.    /* The 
1fa40 42 54 52 45 45 5f 53 45 45 4b 5f 45 51 20 66 6c  BTREE_SEEK_EQ fl
1fa50 61 67 20 69 73 20 6f 6e 6c 79 20 73 65 74 20 6f  ag is only set o
1fa60 6e 20 69 6e 64 65 78 20 63 75 72 73 6f 72 73 20  n index cursors 
1fa70 2a 2f 0a 20 20 20 20 61 73 73 65 72 74 28 20 73  */.    assert( s
1fa80 71 6c 69 74 65 33 42 74 72 65 65 43 75 72 73 6f  qlite3BtreeCurso
1fa90 72 48 61 73 48 69 6e 74 28 70 43 2d 3e 75 63 2e  rHasHint(pC->uc.
1faa0 70 43 75 72 73 6f 72 2c 20 42 54 52 45 45 5f 53  pCursor, BTREE_S
1fab0 45 45 4b 5f 45 51 29 3d 3d 30 0a 20 20 20 20 20  EEK_EQ)==0.     
1fac0 20 20 20 20 20 20 20 20 20 7c 7c 20 43 4f 52 52           || CORR
1fad0 55 50 54 5f 44 42 20 29 3b 0a 0a 20 20 20 20 2f  UPT_DB );..    /
1fae0 2a 20 54 68 65 20 69 6e 70 75 74 20 76 61 6c 75  * The input valu
1faf0 65 20 69 6e 20 50 33 20 6d 69 67 68 74 20 62 65  e in P3 might be
1fb00 20 6f 66 20 61 6e 79 20 74 79 70 65 3a 20 69 6e   of any type: in
1fb10 74 65 67 65 72 2c 20 72 65 61 6c 2c 20 73 74 72  teger, real, str
1fb20 69 6e 67 2c 0a 20 20 20 20 2a 2a 20 62 6c 6f 62  ing,.    ** blob
1fb30 2c 20 6f 72 20 4e 55 4c 4c 2e 20 20 42 75 74 20  , or NULL.  But 
1fb40 69 74 20 6e 65 65 64 73 20 74 6f 20 62 65 20 61  it needs to be a
1fb50 6e 20 69 6e 74 65 67 65 72 20 62 65 66 6f 72 65  n integer before
1fb60 20 77 65 20 63 61 6e 20 64 6f 0a 20 20 20 20 2a   we can do.    *
1fb70 2a 20 74 68 65 20 73 65 65 6b 2c 20 73 6f 20 63  * the seek, so c
1fb80 6f 6e 76 65 72 74 20 69 74 2e 20 2a 2f 0a 20 20  onvert it. */.  
1fb90 20 20 70 49 6e 33 20 3d 20 26 61 4d 65 6d 5b 70    pIn3 = &aMem[p
1fba0 4f 70 2d 3e 70 33 5d 3b 0a 20 20 20 20 69 66 28  Op->p3];.    if(
1fbb0 20 28 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20   (pIn3->flags & 
1fbc0 28 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 52 65 61  (MEM_Int|MEM_Rea
1fbd0 6c 7c 4d 45 4d 5f 53 74 72 29 29 3d 3d 4d 45 4d  l|MEM_Str))==MEM
1fbe0 5f 53 74 72 20 29 7b 0a 20 20 20 20 20 20 61 70  _Str ){.      ap
1fbf0 70 6c 79 4e 75 6d 65 72 69 63 41 66 66 69 6e 69  plyNumericAffini
1fc00 74 79 28 70 49 6e 33 2c 20 30 29 3b 0a 20 20 20  ty(pIn3, 0);.   
1fc10 20 7d 0a 20 20 20 20 69 4b 65 79 20 3d 20 73 71   }.    iKey = sq
1fc20 6c 69 74 65 33 56 64 62 65 49 6e 74 56 61 6c 75  lite3VdbeIntValu
1fc30 65 28 70 49 6e 33 29 3b 0a 0a 20 20 20 20 2f 2a  e(pIn3);..    /*
1fc40 20 49 66 20 74 68 65 20 50 33 20 76 61 6c 75 65   If the P3 value
1fc50 20 63 6f 75 6c 64 20 6e 6f 74 20 62 65 20 63 6f   could not be co
1fc60 6e 76 65 72 74 65 64 20 69 6e 74 6f 20 61 6e 20  nverted into an 
1fc70 69 6e 74 65 67 65 72 20 77 69 74 68 6f 75 74 0a  integer without.
1fc80 20 20 20 20 2a 2a 20 6c 6f 73 73 20 6f 66 20 69      ** loss of i
1fc90 6e 66 6f 72 6d 61 74 69 6f 6e 2c 20 74 68 65 6e  nformation, then
1fca0 20 73 70 65 63 69 61 6c 20 70 72 6f 63 65 73 73   special process
1fcb0 69 6e 67 20 69 73 20 72 65 71 75 69 72 65 64 2e  ing is required.
1fcc0 2e 2e 20 2a 2f 0a 20 20 20 20 69 66 28 20 28 70  .. */.    if( (p
1fcd0 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  In3->flags & MEM
1fce0 5f 49 6e 74 29 3d 3d 30 20 29 7b 0a 20 20 20 20  _Int)==0 ){.    
1fcf0 20 20 69 66 28 20 28 70 49 6e 33 2d 3e 66 6c 61    if( (pIn3->fla
1fd00 67 73 20 26 20 4d 45 4d 5f 52 65 61 6c 29 3d 3d  gs & MEM_Real)==
1fd10 30 20 29 7b 0a 20 20 20 20 20 20 20 20 2f 2a 20  0 ){.        /* 
1fd20 49 66 20 74 68 65 20 50 33 20 76 61 6c 75 65 20  If the P3 value 
1fd30 63 61 6e 6e 6f 74 20 62 65 20 63 6f 6e 76 65 72  cannot be conver
1fd40 74 65 64 20 69 6e 74 6f 20 61 6e 79 20 6b 69 6e  ted into any kin
1fd50 64 20 6f 66 20 61 20 6e 75 6d 62 65 72 2c 0a 20  d of a number,. 
1fd60 20 20 20 20 20 20 20 2a 2a 20 74 68 65 6e 20 74         ** then t
1fd70 68 65 20 73 65 65 6b 20 69 73 20 6e 6f 74 20 70  he seek is not p
1fd80 6f 73 73 69 62 6c 65 2c 20 73 6f 20 6a 75 6d 70  ossible, so jump
1fd90 20 74 6f 20 50 32 20 2a 2f 0a 20 20 20 20 20 20   to P2 */.      
1fda0 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65    VdbeBranchTake
1fdb0 6e 28 31 2c 32 29 3b 20 67 6f 74 6f 20 6a 75 6d  n(1,2); goto jum
1fdc0 70 5f 74 6f 5f 70 32 3b 0a 20 20 20 20 20 20 20  p_to_p2;.       
1fdd0 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a   break;.      }.
1fde0 0a 20 20 20 20 20 20 2f 2a 20 49 66 20 74 68 65  .      /* If the
1fdf0 20 61 70 70 72 6f 78 69 6d 61 74 69 6f 6e 20 69   approximation i
1fe00 4b 65 79 20 69 73 20 6c 61 72 67 65 72 20 74 68  Key is larger th
1fe10 61 6e 20 74 68 65 20 61 63 74 75 61 6c 20 72 65  an the actual re
1fe20 61 6c 20 73 65 61 72 63 68 0a 20 20 20 20 20 20  al search.      
1fe30 2a 2a 20 74 65 72 6d 2c 20 73 75 62 73 74 69 74  ** term, substit
1fe40 75 74 65 20 3e 3d 20 66 6f 72 20 3e 20 61 6e 64  ute >= for > and
1fe50 20 3c 20 66 6f 72 20 3c 3d 2e 20 65 2e 67 2e 20   < for <=. e.g. 
1fe60 69 66 20 74 68 65 20 73 65 61 72 63 68 20 74 65  if the search te
1fe70 72 6d 0a 20 20 20 20 20 20 2a 2a 20 69 73 20 34  rm.      ** is 4
1fe80 2e 39 20 61 6e 64 20 74 68 65 20 69 6e 74 65 67  .9 and the integ
1fe90 65 72 20 61 70 70 72 6f 78 69 6d 61 74 69 6f 6e  er approximation
1fea0 20 35 3a 0a 20 20 20 20 20 20 2a 2a 0a 20 20 20   5:.      **.   
1feb0 20 20 20 2a 2a 20 20 20 20 20 20 20 20 28 78 20     **        (x 
1fec0 3e 20 20 34 2e 39 29 20 20 20 20 2d 3e 20 20 20  >  4.9)    ->   
1fed0 20 20 28 78 20 3e 3d 20 35 29 0a 20 20 20 20 20    (x >= 5).     
1fee0 20 2a 2a 20 20 20 20 20 20 20 20 28 78 20 3c 3d   **        (x <=
1fef0 20 34 2e 39 29 20 20 20 20 2d 3e 20 20 20 20 20   4.9)    ->     
1ff00 28 78 20 3c 20 20 35 29 0a 20 20 20 20 20 20 2a  (x <  5).      *
1ff10 2f 0a 20 20 20 20 20 20 69 66 28 20 70 49 6e 33  /.      if( pIn3
1ff20 2d 3e 75 2e 72 3c 28 64 6f 75 62 6c 65 29 69 4b  ->u.r<(double)iK
1ff30 65 79 20 29 7b 0a 20 20 20 20 20 20 20 20 61 73  ey ){.        as
1ff40 73 65 72 74 28 20 4f 50 5f 53 65 65 6b 47 45 3d  sert( OP_SeekGE=
1ff50 3d 28 4f 50 5f 53 65 65 6b 47 54 2d 31 29 20 29  =(OP_SeekGT-1) )
1ff60 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74  ;.        assert
1ff70 28 20 4f 50 5f 53 65 65 6b 4c 54 3d 3d 28 4f 50  ( OP_SeekLT==(OP
1ff80 5f 53 65 65 6b 4c 45 2d 31 29 20 29 3b 0a 20 20  _SeekLE-1) );.  
1ff90 20 20 20 20 20 20 61 73 73 65 72 74 28 20 28 4f        assert( (O
1ffa0 50 5f 53 65 65 6b 4c 45 20 26 20 30 78 30 30 30  P_SeekLE & 0x000
1ffb0 31 29 3d 3d 28 4f 50 5f 53 65 65 6b 47 54 20 26  1)==(OP_SeekGT &
1ffc0 20 30 78 30 30 30 31 29 20 29 3b 0a 20 20 20 20   0x0001) );.    
1ffd0 20 20 20 20 69 66 28 20 28 6f 63 20 26 20 30 78      if( (oc & 0x
1ffe0 30 30 30 31 29 3d 3d 28 4f 50 5f 53 65 65 6b 47  0001)==(OP_SeekG
1fff0 54 20 26 20 30 78 30 30 30 31 29 20 29 20 6f 63  T & 0x0001) ) oc
20000 2d 2d 3b 0a 20 20 20 20 20 20 7d 0a 0a 20 20 20  --;.      }..   
20010 20 20 20 2f 2a 20 49 66 20 74 68 65 20 61 70 70     /* If the app
20020 72 6f 78 69 6d 61 74 69 6f 6e 20 69 4b 65 79 20  roximation iKey 
20030 69 73 20 73 6d 61 6c 6c 65 72 20 74 68 61 6e 20  is smaller than 
20040 74 68 65 20 61 63 74 75 61 6c 20 72 65 61 6c 20  the actual real 
20050 73 65 61 72 63 68 0a 20 20 20 20 20 20 2a 2a 20  search.      ** 
20060 74 65 72 6d 2c 20 73 75 62 73 74 69 74 75 74 65  term, substitute
20070 20 3c 3d 20 66 6f 72 20 3c 20 61 6e 64 20 3e 20   <= for < and > 
20080 66 6f 72 20 3e 3d 2e 20 20 2a 2f 0a 20 20 20 20  for >=.  */.    
20090 20 20 65 6c 73 65 20 69 66 28 20 70 49 6e 33 2d    else if( pIn3-
200a0 3e 75 2e 72 3e 28 64 6f 75 62 6c 65 29 69 4b 65  >u.r>(double)iKe
200b0 79 20 29 7b 0a 20 20 20 20 20 20 20 20 61 73 73  y ){.        ass
200c0 65 72 74 28 20 4f 50 5f 53 65 65 6b 4c 45 3d 3d  ert( OP_SeekLE==
200d0 28 4f 50 5f 53 65 65 6b 4c 54 2b 31 29 20 29 3b  (OP_SeekLT+1) );
200e0 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28  .        assert(
200f0 20 4f 50 5f 53 65 65 6b 47 54 3d 3d 28 4f 50 5f   OP_SeekGT==(OP_
20100 53 65 65 6b 47 45 2b 31 29 20 29 3b 0a 20 20 20  SeekGE+1) );.   
20110 20 20 20 20 20 61 73 73 65 72 74 28 20 28 4f 50       assert( (OP
20120 5f 53 65 65 6b 4c 54 20 26 20 30 78 30 30 30 31  _SeekLT & 0x0001
20130 29 3d 3d 28 4f 50 5f 53 65 65 6b 47 45 20 26 20  )==(OP_SeekGE & 
20140 30 78 30 30 30 31 29 20 29 3b 0a 20 20 20 20 20  0x0001) );.     
20150 20 20 20 69 66 28 20 28 6f 63 20 26 20 30 78 30     if( (oc & 0x0
20160 30 30 31 29 3d 3d 28 4f 50 5f 53 65 65 6b 4c 54  001)==(OP_SeekLT
20170 20 26 20 30 78 30 30 30 31 29 20 29 20 6f 63 2b   & 0x0001) ) oc+
20180 2b 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  +;.      }.    }
20190 20 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74   .    rc = sqlit
201a0 65 33 42 74 72 65 65 4d 6f 76 65 74 6f 55 6e 70  e3BtreeMovetoUnp
201b0 61 63 6b 65 64 28 70 43 2d 3e 75 63 2e 70 43 75  acked(pC->uc.pCu
201c0 72 73 6f 72 2c 20 30 2c 20 28 75 36 34 29 69 4b  rsor, 0, (u64)iK
201d0 65 79 2c 20 30 2c 20 26 72 65 73 29 3b 0a 20 20  ey, 0, &res);.  
201e0 20 20 70 43 2d 3e 6d 6f 76 65 74 6f 54 61 72 67    pC->movetoTarg
201f0 65 74 20 3d 20 69 4b 65 79 3b 20 20 2f 2a 20 55  et = iKey;  /* U
20200 73 65 64 20 62 79 20 4f 50 5f 44 65 6c 65 74 65  sed by OP_Delete
20210 20 2a 2f 0a 20 20 20 20 69 66 28 20 72 63 21 3d   */.    if( rc!=
20220 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20  SQLITE_OK ){.   
20230 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75     goto abort_du
20240 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20  e_to_error;.    
20250 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 2f  }.  }else{.    /
20260 2a 20 46 6f 72 20 61 20 63 75 72 73 6f 72 20 77  * For a cursor w
20270 69 74 68 20 74 68 65 20 42 54 52 45 45 5f 53 45  ith the BTREE_SE
20280 45 4b 5f 45 51 20 68 69 6e 74 2c 20 6f 6e 6c 79  EK_EQ hint, only
20290 20 74 68 65 20 4f 50 5f 53 65 65 6b 47 45 20 61   the OP_SeekGE a
202a0 6e 64 0a 20 20 20 20 2a 2a 20 4f 50 5f 53 65 65  nd.    ** OP_See
202b0 6b 4c 45 20 6f 70 63 6f 64 65 73 20 61 72 65 20  kLE opcodes are 
202c0 61 6c 6c 6f 77 65 64 2c 20 61 6e 64 20 74 68 65  allowed, and the
202d0 73 65 20 6d 75 73 74 20 62 65 20 69 6d 6d 65 64  se must be immed
202e0 69 61 74 65 6c 79 20 66 6f 6c 6c 6f 77 65 64 0a  iately followed.
202f0 20 20 20 20 2a 2a 20 62 79 20 61 6e 20 4f 50 5f      ** by an OP_
20300 49 64 78 47 54 20 6f 72 20 4f 50 5f 49 64 78 4c  IdxGT or OP_IdxL
20310 54 20 6f 70 63 6f 64 65 2c 20 72 65 73 70 65 63  T opcode, respec
20320 74 69 76 65 6c 79 2c 20 77 69 74 68 20 74 68 65  tively, with the
20330 20 73 61 6d 65 20 6b 65 79 2e 0a 20 20 20 20 2a   same key..    *
20340 2f 0a 20 20 20 20 69 66 28 20 73 71 6c 69 74 65  /.    if( sqlite
20350 33 42 74 72 65 65 43 75 72 73 6f 72 48 61 73 48  3BtreeCursorHasH
20360 69 6e 74 28 70 43 2d 3e 75 63 2e 70 43 75 72 73  int(pC->uc.pCurs
20370 6f 72 2c 20 42 54 52 45 45 5f 53 45 45 4b 5f 45  or, BTREE_SEEK_E
20380 51 29 20 29 7b 0a 20 20 20 20 20 20 65 71 4f 6e  Q) ){.      eqOn
20390 6c 79 20 3d 20 31 3b 0a 20 20 20 20 20 20 61 73  ly = 1;.      as
203a0 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64  sert( pOp->opcod
203b0 65 3d 3d 4f 50 5f 53 65 65 6b 47 45 20 7c 7c 20  e==OP_SeekGE || 
203c0 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  pOp->opcode==OP_
203d0 53 65 65 6b 4c 45 20 29 3b 0a 20 20 20 20 20 20  SeekLE );.      
203e0 61 73 73 65 72 74 28 20 70 4f 70 5b 31 5d 2e 6f  assert( pOp[1].o
203f0 70 63 6f 64 65 3d 3d 4f 50 5f 49 64 78 4c 54 20  pcode==OP_IdxLT 
20400 7c 7c 20 70 4f 70 5b 31 5d 2e 6f 70 63 6f 64 65  || pOp[1].opcode
20410 3d 3d 4f 50 5f 49 64 78 47 54 20 29 3b 0a 20 20  ==OP_IdxGT );.  
20420 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 5b      assert( pOp[
20430 31 5d 2e 70 31 3d 3d 70 4f 70 5b 30 5d 2e 70 31  1].p1==pOp[0].p1
20440 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74   );.      assert
20450 28 20 70 4f 70 5b 31 5d 2e 70 32 3d 3d 70 4f 70  ( pOp[1].p2==pOp
20460 5b 30 5d 2e 70 32 20 29 3b 0a 20 20 20 20 20 20  [0].p2 );.      
20470 61 73 73 65 72 74 28 20 70 4f 70 5b 31 5d 2e 70  assert( pOp[1].p
20480 33 3d 3d 70 4f 70 5b 30 5d 2e 70 33 20 29 3b 0a  3==pOp[0].p3 );.
20490 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f        assert( pO
204a0 70 5b 31 5d 2e 70 34 2e 69 3d 3d 70 4f 70 5b 30  p[1].p4.i==pOp[0
204b0 5d 2e 70 34 2e 69 20 29 3b 0a 20 20 20 20 7d 0a  ].p4.i );.    }.
204c0 0a 20 20 20 20 6e 46 69 65 6c 64 20 3d 20 70 4f  .    nField = pO
204d0 70 2d 3e 70 34 2e 69 3b 0a 20 20 20 20 61 73 73  p->p4.i;.    ass
204e0 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65  ert( pOp->p4type
204f0 3d 3d 50 34 5f 49 4e 54 33 32 20 29 3b 0a 20 20  ==P4_INT32 );.  
20500 20 20 61 73 73 65 72 74 28 20 6e 46 69 65 6c 64    assert( nField
20510 3e 30 20 29 3b 0a 20 20 20 20 72 2e 70 4b 65 79  >0 );.    r.pKey
20520 49 6e 66 6f 20 3d 20 70 43 2d 3e 70 4b 65 79 49  Info = pC->pKeyI
20530 6e 66 6f 3b 0a 20 20 20 20 72 2e 6e 46 69 65 6c  nfo;.    r.nFiel
20540 64 20 3d 20 28 75 31 36 29 6e 46 69 65 6c 64 3b  d = (u16)nField;
20550 0a 0a 20 20 20 20 2f 2a 20 54 68 65 20 6e 65 78  ..    /* The nex
20560 74 20 6c 69 6e 65 20 6f 66 20 63 6f 64 65 20 63  t line of code c
20570 6f 6d 70 75 74 65 73 20 61 73 20 66 6f 6c 6c 6f  omputes as follo
20580 77 73 2c 20 6f 6e 6c 79 20 66 61 73 74 65 72 3a  ws, only faster:
20590 0a 20 20 20 20 2a 2a 20 20 20 69 66 28 20 6f 63  .    **   if( oc
205a0 3d 3d 4f 50 5f 53 65 65 6b 47 54 20 7c 7c 20 6f  ==OP_SeekGT || o
205b0 63 3d 3d 4f 50 5f 53 65 65 6b 4c 45 20 29 7b 0a  c==OP_SeekLE ){.
205c0 20 20 20 20 2a 2a 20 20 20 20 20 72 2e 64 65 66      **     r.def
205d0 61 75 6c 74 5f 72 63 20 3d 20 2d 31 3b 0a 20 20  ault_rc = -1;.  
205e0 20 20 2a 2a 20 20 20 7d 65 6c 73 65 7b 0a 20 20    **   }else{.  
205f0 20 20 2a 2a 20 20 20 20 20 72 2e 64 65 66 61 75    **     r.defau
20600 6c 74 5f 72 63 20 3d 20 2b 31 3b 0a 20 20 20 20  lt_rc = +1;.    
20610 2a 2a 20 20 20 7d 0a 20 20 20 20 2a 2f 0a 20 20  **   }.    */.  
20620 20 20 72 2e 64 65 66 61 75 6c 74 5f 72 63 20 3d    r.default_rc =
20630 20 28 28 31 20 26 20 28 6f 63 20 2d 20 4f 50 5f   ((1 & (oc - OP_
20640 53 65 65 6b 4c 54 29 29 20 3f 20 2d 31 20 3a 20  SeekLT)) ? -1 : 
20650 2b 31 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  +1);.    assert(
20660 20 6f 63 21 3d 4f 50 5f 53 65 65 6b 47 54 20 7c   oc!=OP_SeekGT |
20670 7c 20 72 2e 64 65 66 61 75 6c 74 5f 72 63 3d 3d  | r.default_rc==
20680 2d 31 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74  -1 );.    assert
20690 28 20 6f 63 21 3d 4f 50 5f 53 65 65 6b 4c 45 20  ( oc!=OP_SeekLE 
206a0 7c 7c 20 72 2e 64 65 66 61 75 6c 74 5f 72 63 3d  || r.default_rc=
206b0 3d 2d 31 20 29 3b 0a 20 20 20 20 61 73 73 65 72  =-1 );.    asser
206c0 74 28 20 6f 63 21 3d 4f 50 5f 53 65 65 6b 47 45  t( oc!=OP_SeekGE
206d0 20 7c 7c 20 72 2e 64 65 66 61 75 6c 74 5f 72 63   || r.default_rc
206e0 3d 3d 2b 31 20 29 3b 0a 20 20 20 20 61 73 73 65  ==+1 );.    asse
206f0 72 74 28 20 6f 63 21 3d 4f 50 5f 53 65 65 6b 4c  rt( oc!=OP_SeekL
20700 54 20 7c 7c 20 72 2e 64 65 66 61 75 6c 74 5f 72  T || r.default_r
20710 63 3d 3d 2b 31 20 29 3b 0a 0a 20 20 20 20 72 2e  c==+1 );..    r.
20720 61 4d 65 6d 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  aMem = &aMem[pOp
20730 2d 3e 70 33 5d 3b 0a 23 69 66 64 65 66 20 53 51  ->p3];.#ifdef SQ
20740 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 20 20 7b  LITE_DEBUG.    {
20750 20 69 6e 74 20 69 3b 20 66 6f 72 28 69 3d 30 3b   int i; for(i=0;
20760 20 69 3c 72 2e 6e 46 69 65 6c 64 3b 20 69 2b 2b   i<r.nField; i++
20770 29 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56  ) assert( memIsV
20780 61 6c 69 64 28 26 72 2e 61 4d 65 6d 5b 69 5d 29  alid(&r.aMem[i])
20790 20 29 3b 20 7d 0a 23 65 6e 64 69 66 0a 20 20 20   ); }.#endif.   
207a0 20 72 2e 65 71 53 65 65 6e 20 3d 20 30 3b 0a 20   r.eqSeen = 0;. 
207b0 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42     rc = sqlite3B
207c0 74 72 65 65 4d 6f 76 65 74 6f 55 6e 70 61 63 6b  treeMovetoUnpack
207d0 65 64 28 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f  ed(pC->uc.pCurso
207e0 72 2c 20 26 72 2c 20 30 2c 20 30 2c 20 26 72 65  r, &r, 0, 0, &re
207f0 73 29 3b 0a 20 20 20 20 69 66 28 20 72 63 21 3d  s);.    if( rc!=
20800 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20  SQLITE_OK ){.   
20810 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75     goto abort_du
20820 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20  e_to_error;.    
20830 7d 0a 20 20 20 20 69 66 28 20 65 71 4f 6e 6c 79  }.    if( eqOnly
20840 20 26 26 20 72 2e 65 71 53 65 65 6e 3d 3d 30 20   && r.eqSeen==0 
20850 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  ){.      assert(
20860 20 72 65 73 21 3d 30 20 29 3b 0a 20 20 20 20 20   res!=0 );.     
20870 20 67 6f 74 6f 20 73 65 65 6b 5f 6e 6f 74 5f 66   goto seek_not_f
20880 6f 75 6e 64 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a  ound;.    }.  }.
20890 20 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f    pC->deferredMo
208a0 76 65 74 6f 20 3d 20 30 3b 0a 20 20 70 43 2d 3e  veto = 0;.  pC->
208b0 63 61 63 68 65 53 74 61 74 75 73 20 3d 20 43 41  cacheStatus = CA
208c0 43 48 45 5f 53 54 41 4c 45 3b 0a 23 69 66 64 65  CHE_STALE;.#ifde
208d0 66 20 53 51 4c 49 54 45 5f 54 45 53 54 0a 20 20  f SQLITE_TEST.  
208e0 73 71 6c 69 74 65 33 5f 73 65 61 72 63 68 5f 63  sqlite3_search_c
208f0 6f 75 6e 74 2b 2b 3b 0a 23 65 6e 64 69 66 0a 20  ount++;.#endif. 
20900 20 69 66 28 20 6f 63 3e 3d 4f 50 5f 53 65 65 6b   if( oc>=OP_Seek
20910 47 45 20 29 7b 20 20 61 73 73 65 72 74 28 20 6f  GE ){  assert( o
20920 63 3d 3d 4f 50 5f 53 65 65 6b 47 45 20 7c 7c 20  c==OP_SeekGE || 
20930 6f 63 3d 3d 4f 50 5f 53 65 65 6b 47 54 20 29 3b  oc==OP_SeekGT );
20940 0a 20 20 20 20 69 66 28 20 72 65 73 3c 30 20 7c  .    if( res<0 |
20950 7c 20 28 72 65 73 3d 3d 30 20 26 26 20 6f 63 3d  | (res==0 && oc=
20960 3d 4f 50 5f 53 65 65 6b 47 54 29 20 29 7b 0a 20  =OP_SeekGT) ){. 
20970 20 20 20 20 20 72 65 73 20 3d 20 30 3b 0a 20 20       res = 0;.  
20980 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
20990 42 74 72 65 65 4e 65 78 74 28 70 43 2d 3e 75 63  BtreeNext(pC->uc
209a0 2e 70 43 75 72 73 6f 72 2c 20 30 29 3b 0a 20 20  .pCursor, 0);.  
209b0 20 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49      if( rc!=SQLI
209c0 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20  TE_OK ){.       
209d0 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f   if( rc==SQLITE_
209e0 44 4f 4e 45 20 29 7b 0a 20 20 20 20 20 20 20 20  DONE ){.        
209f0 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b    rc = SQLITE_OK
20a00 3b 0a 20 20 20 20 20 20 20 20 20 20 72 65 73 20  ;.          res 
20a10 3d 20 31 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c  = 1;.        }el
20a20 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20 67 6f  se{.          go
20a30 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
20a40 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 20 20 7d  error;.        }
20a50 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 65 6c  .      }.    }el
20a60 73 65 7b 0a 20 20 20 20 20 20 72 65 73 20 3d 20  se{.      res = 
20a70 30 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65  0;.    }.  }else
20a80 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 6f 63  {.    assert( oc
20a90 3d 3d 4f 50 5f 53 65 65 6b 4c 54 20 7c 7c 20 6f  ==OP_SeekLT || o
20aa0 63 3d 3d 4f 50 5f 53 65 65 6b 4c 45 20 29 3b 0a  c==OP_SeekLE );.
20ab0 20 20 20 20 69 66 28 20 72 65 73 3e 30 20 7c 7c      if( res>0 ||
20ac0 20 28 72 65 73 3d 3d 30 20 26 26 20 6f 63 3d 3d   (res==0 && oc==
20ad0 4f 50 5f 53 65 65 6b 4c 54 29 20 29 7b 0a 20 20  OP_SeekLT) ){.  
20ae0 20 20 20 20 72 65 73 20 3d 20 30 3b 0a 20 20 20      res = 0;.   
20af0 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42     rc = sqlite3B
20b00 74 72 65 65 50 72 65 76 69 6f 75 73 28 70 43 2d  treePrevious(pC-
20b10 3e 75 63 2e 70 43 75 72 73 6f 72 2c 20 30 29 3b  >uc.pCursor, 0);
20b20 0a 20 20 20 20 20 20 69 66 28 20 72 63 21 3d 53  .      if( rc!=S
20b30 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20  QLITE_OK ){.    
20b40 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49      if( rc==SQLI
20b50 54 45 5f 44 4f 4e 45 20 29 7b 0a 20 20 20 20 20  TE_DONE ){.     
20b60 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45       rc = SQLITE
20b70 5f 4f 4b 3b 0a 20 20 20 20 20 20 20 20 20 20 72  _OK;.          r
20b80 65 73 20 3d 20 31 3b 0a 20 20 20 20 20 20 20 20  es = 1;.        
20b90 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20  }else{.         
20ba0 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
20bb0 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20  to_error;.      
20bc0 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20 20    }.      }.    
20bd0 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 2f 2a 20  }else{.      /* 
20be0 72 65 73 20 6d 69 67 68 74 20 62 65 20 6e 65 67  res might be neg
20bf0 61 74 69 76 65 20 62 65 63 61 75 73 65 20 74 68  ative because th
20c00 65 20 74 61 62 6c 65 20 69 73 20 65 6d 70 74 79  e table is empty
20c10 2e 20 20 43 68 65 63 6b 20 74 6f 0a 20 20 20 20  .  Check to.    
20c20 20 20 2a 2a 20 73 65 65 20 69 66 20 74 68 69 73    ** see if this
20c30 20 69 73 20 74 68 65 20 63 61 73 65 2e 0a 20 20   is the case..  
20c40 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 72 65 73      */.      res
20c50 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 45   = sqlite3BtreeE
20c60 6f 66 28 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f  of(pC->uc.pCurso
20c70 72 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 73 65  r);.    }.  }.se
20c80 65 6b 5f 6e 6f 74 5f 66 6f 75 6e 64 3a 0a 20 20  ek_not_found:.  
20c90 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e  assert( pOp->p2>
20ca0 30 20 29 3b 0a 20 20 56 64 62 65 42 72 61 6e 63  0 );.  VdbeBranc
20cb0 68 54 61 6b 65 6e 28 72 65 73 21 3d 30 2c 32 29  hTaken(res!=0,2)
20cc0 3b 0a 20 20 69 66 28 20 72 65 73 20 29 7b 0a 20  ;.  if( res ){. 
20cd0 20 20 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f     goto jump_to_
20ce0 70 32 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20  p2;.  }else if( 
20cf0 65 71 4f 6e 6c 79 20 29 7b 0a 20 20 20 20 61 73  eqOnly ){.    as
20d00 73 65 72 74 28 20 70 4f 70 5b 31 5d 2e 6f 70 63  sert( pOp[1].opc
20d10 6f 64 65 3d 3d 4f 50 5f 49 64 78 4c 54 20 7c 7c  ode==OP_IdxLT ||
20d20 20 70 4f 70 5b 31 5d 2e 6f 70 63 6f 64 65 3d 3d   pOp[1].opcode==
20d30 4f 50 5f 49 64 78 47 54 20 29 3b 0a 20 20 20 20  OP_IdxGT );.    
20d40 70 4f 70 2b 2b 3b 20 2f 2a 20 53 6b 69 70 20 74  pOp++; /* Skip t
20d50 68 65 20 4f 50 5f 49 64 78 4c 74 20 6f 72 20 4f  he OP_IdxLt or O
20d60 50 5f 49 64 78 47 54 20 74 68 61 74 20 66 6f 6c  P_IdxGT that fol
20d70 6c 6f 77 73 20 2a 2f 0a 20 20 7d 0a 20 20 62 72  lows */.  }.  br
20d80 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
20d90 65 3a 20 46 6f 75 6e 64 20 50 31 20 50 32 20 50  e: Found P1 P2 P
20da0 33 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73  3 P4 *.** Synops
20db0 69 73 3a 20 6b 65 79 3d 72 5b 50 33 40 50 34 5d  is: key=r[P3@P4]
20dc0 0a 2a 2a 0a 2a 2a 20 49 66 20 50 34 3d 3d 30 20  .**.** If P4==0 
20dd0 74 68 65 6e 20 72 65 67 69 73 74 65 72 20 50 33  then register P3
20de0 20 68 6f 6c 64 73 20 61 20 62 6c 6f 62 20 63 6f   holds a blob co
20df0 6e 73 74 72 75 63 74 65 64 20 62 79 20 4d 61 6b  nstructed by Mak
20e00 65 52 65 63 6f 72 64 2e 20 20 49 66 0a 2a 2a 20  eRecord.  If.** 
20e10 50 34 3e 30 20 74 68 65 6e 20 72 65 67 69 73 74  P4>0 then regist
20e20 65 72 20 50 33 20 69 73 20 74 68 65 20 66 69 72  er P3 is the fir
20e30 73 74 20 6f 66 20 50 34 20 72 65 67 69 73 74 65  st of P4 registe
20e40 72 73 20 74 68 61 74 20 66 6f 72 6d 20 61 6e 20  rs that form an 
20e50 75 6e 70 61 63 6b 65 64 0a 2a 2a 20 72 65 63 6f  unpacked.** reco
20e60 72 64 2e 0a 2a 2a 0a 2a 2a 20 43 75 72 73 6f 72  rd..**.** Cursor
20e70 20 50 31 20 69 73 20 6f 6e 20 61 6e 20 69 6e 64   P1 is on an ind
20e80 65 78 20 62 74 72 65 65 2e 20 20 49 66 20 74 68  ex btree.  If th
20e90 65 20 72 65 63 6f 72 64 20 69 64 65 6e 74 69 66  e record identif
20ea0 69 65 64 20 62 79 20 50 33 20 61 6e 64 20 50 34  ied by P3 and P4
20eb0 0a 2a 2a 20 69 73 20 61 20 70 72 65 66 69 78 20  .** is a prefix 
20ec0 6f 66 20 61 6e 79 20 65 6e 74 72 79 20 69 6e 20  of any entry in 
20ed0 50 31 20 74 68 65 6e 20 61 20 6a 75 6d 70 20 69  P1 then a jump i
20ee0 73 20 6d 61 64 65 20 74 6f 20 50 32 20 61 6e 64  s made to P2 and
20ef0 0a 2a 2a 20 50 31 20 69 73 20 6c 65 66 74 20 70  .** P1 is left p
20f00 6f 69 6e 74 69 6e 67 20 61 74 20 74 68 65 20 6d  ointing at the m
20f10 61 74 63 68 69 6e 67 20 65 6e 74 72 79 2e 0a 2a  atching entry..*
20f20 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 65 72 61 74  *.** This operat
20f30 69 6f 6e 20 6c 65 61 76 65 73 20 74 68 65 20 63  ion leaves the c
20f40 75 72 73 6f 72 20 69 6e 20 61 20 73 74 61 74 65  ursor in a state
20f50 20 77 68 65 72 65 20 69 74 20 63 61 6e 20 62 65   where it can be
20f60 0a 2a 2a 20 61 64 76 61 6e 63 65 64 20 69 6e 20  .** advanced in 
20f70 74 68 65 20 66 6f 72 77 61 72 64 20 64 69 72 65  the forward dire
20f80 63 74 69 6f 6e 2e 20 20 54 68 65 20 4e 65 78 74  ction.  The Next
20f90 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 77 69 6c   instruction wil
20fa0 6c 20 77 6f 72 6b 2c 0a 2a 2a 20 62 75 74 20 6e  l work,.** but n
20fb0 6f 74 20 74 68 65 20 50 72 65 76 20 69 6e 73 74  ot the Prev inst
20fc0 72 75 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 53  ruction..**.** S
20fd0 65 65 20 61 6c 73 6f 3a 20 4e 6f 74 46 6f 75 6e  ee also: NotFoun
20fe0 64 2c 20 4e 6f 43 6f 6e 66 6c 69 63 74 2c 20 4e  d, NoConflict, N
20ff0 6f 74 45 78 69 73 74 73 2e 20 53 65 65 6b 47 65  otExists. SeekGe
21000 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e  .*/./* Opcode: N
21010 6f 74 46 6f 75 6e 64 20 50 31 20 50 32 20 50 33  otFound P1 P2 P3
21020 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69   P4 *.** Synopsi
21030 73 3a 20 6b 65 79 3d 72 5b 50 33 40 50 34 5d 0a  s: key=r[P3@P4].
21040 2a 2a 0a 2a 2a 20 49 66 20 50 34 3d 3d 30 20 74  **.** If P4==0 t
21050 68 65 6e 20 72 65 67 69 73 74 65 72 20 50 33 20  hen register P3 
21060 68 6f 6c 64 73 20 61 20 62 6c 6f 62 20 63 6f 6e  holds a blob con
21070 73 74 72 75 63 74 65 64 20 62 79 20 4d 61 6b 65  structed by Make
21080 52 65 63 6f 72 64 2e 20 20 49 66 0a 2a 2a 20 50  Record.  If.** P
21090 34 3e 30 20 74 68 65 6e 20 72 65 67 69 73 74 65  4>0 then registe
210a0 72 20 50 33 20 69 73 20 74 68 65 20 66 69 72 73  r P3 is the firs
210b0 74 20 6f 66 20 50 34 20 72 65 67 69 73 74 65 72  t of P4 register
210c0 73 20 74 68 61 74 20 66 6f 72 6d 20 61 6e 20 75  s that form an u
210d0 6e 70 61 63 6b 65 64 0a 2a 2a 20 72 65 63 6f 72  npacked.** recor
210e0 64 2e 0a 2a 2a 20 0a 2a 2a 20 43 75 72 73 6f 72  d..** .** Cursor
210f0 20 50 31 20 69 73 20 6f 6e 20 61 6e 20 69 6e 64   P1 is on an ind
21100 65 78 20 62 74 72 65 65 2e 20 20 49 66 20 74 68  ex btree.  If th
21110 65 20 72 65 63 6f 72 64 20 69 64 65 6e 74 69 66  e record identif
21120 69 65 64 20 62 79 20 50 33 20 61 6e 64 20 50 34  ied by P3 and P4
21130 0a 2a 2a 20 69 73 20 6e 6f 74 20 74 68 65 20 70  .** is not the p
21140 72 65 66 69 78 20 6f 66 20 61 6e 79 20 65 6e 74  refix of any ent
21150 72 79 20 69 6e 20 50 31 20 74 68 65 6e 20 61 20  ry in P1 then a 
21160 6a 75 6d 70 20 69 73 20 6d 61 64 65 20 74 6f 20  jump is made to 
21170 50 32 2e 20 20 49 66 20 50 31 20 0a 2a 2a 20 64  P2.  If P1 .** d
21180 6f 65 73 20 63 6f 6e 74 61 69 6e 20 61 6e 20 65  oes contain an e
21190 6e 74 72 79 20 77 68 6f 73 65 20 70 72 65 66 69  ntry whose prefi
211a0 78 20 6d 61 74 63 68 65 73 20 74 68 65 20 50 33  x matches the P3
211b0 2f 50 34 20 72 65 63 6f 72 64 20 74 68 65 6e 20  /P4 record then 
211c0 63 6f 6e 74 72 6f 6c 0a 2a 2a 20 66 61 6c 6c 73  control.** falls
211d0 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20   through to the 
211e0 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e  next instruction
211f0 20 61 6e 64 20 50 31 20 69 73 20 6c 65 66 74 20   and P1 is left 
21200 70 6f 69 6e 74 69 6e 67 20 61 74 20 74 68 65 0a  pointing at the.
21210 2a 2a 20 6d 61 74 63 68 69 6e 67 20 65 6e 74 72  ** matching entr
21220 79 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70  y..**.** This op
21230 65 72 61 74 69 6f 6e 20 6c 65 61 76 65 73 20 74  eration leaves t
21240 68 65 20 63 75 72 73 6f 72 20 69 6e 20 61 20 73  he cursor in a s
21250 74 61 74 65 20 77 68 65 72 65 20 69 74 20 63 61  tate where it ca
21260 6e 6e 6f 74 20 62 65 0a 2a 2a 20 61 64 76 61 6e  nnot be.** advan
21270 63 65 64 20 69 6e 20 65 69 74 68 65 72 20 64 69  ced in either di
21280 72 65 63 74 69 6f 6e 2e 20 20 49 6e 20 6f 74 68  rection.  In oth
21290 65 72 20 77 6f 72 64 73 2c 20 74 68 65 20 4e 65  er words, the Ne
212a0 78 74 20 61 6e 64 20 50 72 65 76 0a 2a 2a 20 6f  xt and Prev.** o
212b0 70 63 6f 64 65 73 20 64 6f 20 6e 6f 74 20 77 6f  pcodes do not wo
212c0 72 6b 20 61 66 74 65 72 20 74 68 69 73 20 6f 70  rk after this op
212d0 65 72 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 53  eration..**.** S
212e0 65 65 20 61 6c 73 6f 3a 20 46 6f 75 6e 64 2c 20  ee also: Found, 
212f0 4e 6f 74 45 78 69 73 74 73 2c 20 4e 6f 43 6f 6e  NotExists, NoCon
21300 66 6c 69 63 74 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f  flict.*/./* Opco
21310 64 65 3a 20 4e 6f 43 6f 6e 66 6c 69 63 74 20 50  de: NoConflict P
21320 31 20 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a 20  1 P2 P3 P4 *.** 
21330 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b  Synopsis: key=r[
21340 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 49 66 20  P3@P4].**.** If 
21350 50 34 3d 3d 30 20 74 68 65 6e 20 72 65 67 69 73  P4==0 then regis
21360 74 65 72 20 50 33 20 68 6f 6c 64 73 20 61 20 62  ter P3 holds a b
21370 6c 6f 62 20 63 6f 6e 73 74 72 75 63 74 65 64 20  lob constructed 
21380 62 79 20 4d 61 6b 65 52 65 63 6f 72 64 2e 20 20  by MakeRecord.  
21390 49 66 0a 2a 2a 20 50 34 3e 30 20 74 68 65 6e 20  If.** P4>0 then 
213a0 72 65 67 69 73 74 65 72 20 50 33 20 69 73 20 74  register P3 is t
213b0 68 65 20 66 69 72 73 74 20 6f 66 20 50 34 20 72  he first of P4 r
213c0 65 67 69 73 74 65 72 73 20 74 68 61 74 20 66 6f  egisters that fo
213d0 72 6d 20 61 6e 20 75 6e 70 61 63 6b 65 64 0a 2a  rm an unpacked.*
213e0 2a 20 72 65 63 6f 72 64 2e 0a 2a 2a 20 0a 2a 2a  * record..** .**
213f0 20 43 75 72 73 6f 72 20 50 31 20 69 73 20 6f 6e   Cursor P1 is on
21400 20 61 6e 20 69 6e 64 65 78 20 62 74 72 65 65 2e   an index btree.
21410 20 20 49 66 20 74 68 65 20 72 65 63 6f 72 64 20    If the record 
21420 69 64 65 6e 74 69 66 69 65 64 20 62 79 20 50 33  identified by P3
21430 20 61 6e 64 20 50 34 0a 2a 2a 20 63 6f 6e 74 61   and P4.** conta
21440 69 6e 73 20 61 6e 79 20 4e 55 4c 4c 20 76 61 6c  ins any NULL val
21450 75 65 2c 20 6a 75 6d 70 20 69 6d 6d 65 64 69 61  ue, jump immedia
21460 74 65 6c 79 20 74 6f 20 50 32 2e 20 20 49 66 20  tely to P2.  If 
21470 61 6c 6c 20 74 65 72 6d 73 20 6f 66 20 74 68 65  all terms of the
21480 0a 2a 2a 20 72 65 63 6f 72 64 20 61 72 65 20 6e  .** record are n
21490 6f 74 2d 4e 55 4c 4c 20 74 68 65 6e 20 61 20 63  ot-NULL then a c
214a0 68 65 63 6b 20 69 73 20 64 6f 6e 65 20 74 6f 20  heck is done to 
214b0 64 65 74 65 72 6d 69 6e 65 20 69 66 20 61 6e 79  determine if any
214c0 20 72 6f 77 20 69 6e 20 74 68 65 0a 2a 2a 20 50   row in the.** P
214d0 31 20 69 6e 64 65 78 20 62 74 72 65 65 20 68 61  1 index btree ha
214e0 73 20 61 20 6d 61 74 63 68 69 6e 67 20 6b 65 79  s a matching key
214f0 20 70 72 65 66 69 78 2e 20 20 49 66 20 74 68 65   prefix.  If the
21500 72 65 20 61 72 65 20 6e 6f 20 6d 61 74 63 68 65  re are no matche
21510 73 2c 20 6a 75 6d 70 0a 2a 2a 20 69 6d 6d 65 64  s, jump.** immed
21520 69 61 74 65 6c 79 20 74 6f 20 50 32 2e 20 20 49  iately to P2.  I
21530 66 20 74 68 65 72 65 20 69 73 20 61 20 6d 61 74  f there is a mat
21540 63 68 2c 20 66 61 6c 6c 20 74 68 72 6f 75 67 68  ch, fall through
21550 20 61 6e 64 20 6c 65 61 76 65 20 74 68 65 20 50   and leave the P
21560 31 0a 2a 2a 20 63 75 72 73 6f 72 20 70 6f 69 6e  1.** cursor poin
21570 74 69 6e 67 20 74 6f 20 74 68 65 20 6d 61 74 63  ting to the matc
21580 68 69 6e 67 20 72 6f 77 2e 0a 2a 2a 0a 2a 2a 20  hing row..**.** 
21590 54 68 69 73 20 6f 70 63 6f 64 65 20 69 73 20 73  This opcode is s
215a0 69 6d 69 6c 61 72 20 74 6f 20 4f 50 5f 4e 6f 74  imilar to OP_Not
215b0 46 6f 75 6e 64 20 77 69 74 68 20 74 68 65 20 65  Found with the e
215c0 78 63 65 70 74 69 6f 6e 73 20 74 68 61 74 20 74  xceptions that t
215d0 68 65 0a 2a 2a 20 62 72 61 6e 63 68 20 69 73 20  he.** branch is 
215e0 61 6c 77 61 79 73 20 74 61 6b 65 6e 20 69 66 20  always taken if 
215f0 61 6e 79 20 70 61 72 74 20 6f 66 20 74 68 65 20  any part of the 
21600 73 65 61 72 63 68 20 6b 65 79 20 69 6e 70 75 74  search key input
21610 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2a 0a 2a 2a 20   is NULL..**.** 
21620 54 68 69 73 20 6f 70 65 72 61 74 69 6f 6e 20 6c  This operation l
21630 65 61 76 65 73 20 74 68 65 20 63 75 72 73 6f 72  eaves the cursor
21640 20 69 6e 20 61 20 73 74 61 74 65 20 77 68 65 72   in a state wher
21650 65 20 69 74 20 63 61 6e 6e 6f 74 20 62 65 0a 2a  e it cannot be.*
21660 2a 20 61 64 76 61 6e 63 65 64 20 69 6e 20 65 69  * advanced in ei
21670 74 68 65 72 20 64 69 72 65 63 74 69 6f 6e 2e 20  ther direction. 
21680 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c   In other words,
21690 20 74 68 65 20 4e 65 78 74 20 61 6e 64 20 50 72   the Next and Pr
216a0 65 76 0a 2a 2a 20 6f 70 63 6f 64 65 73 20 64 6f  ev.** opcodes do
216b0 20 6e 6f 74 20 77 6f 72 6b 20 61 66 74 65 72 20   not work after 
216c0 74 68 69 73 20 6f 70 65 72 61 74 69 6f 6e 2e 0a  this operation..
216d0 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20  **.** See also: 
216e0 4e 6f 74 46 6f 75 6e 64 2c 20 46 6f 75 6e 64 2c  NotFound, Found,
216f0 20 4e 6f 74 45 78 69 73 74 73 0a 2a 2f 0a 63 61   NotExists.*/.ca
21700 73 65 20 4f 50 5f 4e 6f 43 6f 6e 66 6c 69 63 74  se OP_NoConflict
21710 3a 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69  :     /* jump, i
21720 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 6f  n3 */.case OP_No
21730 74 46 6f 75 6e 64 3a 20 20 20 20 20 20 20 2f 2a  tFound:       /*
21740 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 63 61   jump, in3 */.ca
21750 73 65 20 4f 50 5f 46 6f 75 6e 64 3a 20 7b 20 20  se OP_Found: {  
21760 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69        /* jump, i
21770 6e 33 20 2a 2f 0a 20 20 69 6e 74 20 61 6c 72 65  n3 */.  int alre
21780 61 64 79 45 78 69 73 74 73 3b 0a 20 20 69 6e 74  adyExists;.  int
21790 20 74 61 6b 65 4a 75 6d 70 3b 0a 20 20 69 6e 74   takeJump;.  int
217a0 20 69 69 3b 0a 20 20 56 64 62 65 43 75 72 73 6f   ii;.  VdbeCurso
217b0 72 20 2a 70 43 3b 0a 20 20 69 6e 74 20 72 65 73  r *pC;.  int res
217c0 3b 0a 20 20 55 6e 70 61 63 6b 65 64 52 65 63 6f  ;.  UnpackedReco
217d0 72 64 20 2a 70 46 72 65 65 3b 0a 20 20 55 6e 70  rd *pFree;.  Unp
217e0 61 63 6b 65 64 52 65 63 6f 72 64 20 2a 70 49 64  ackedRecord *pId
217f0 78 4b 65 79 3b 0a 20 20 55 6e 70 61 63 6b 65 64  xKey;.  Unpacked
21800 52 65 63 6f 72 64 20 72 3b 0a 0a 23 69 66 64 65  Record r;..#ifde
21810 66 20 53 51 4c 49 54 45 5f 54 45 53 54 0a 20 20  f SQLITE_TEST.  
21820 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 21  if( pOp->opcode!
21830 3d 4f 50 5f 4e 6f 43 6f 6e 66 6c 69 63 74 20 29  =OP_NoConflict )
21840 20 73 71 6c 69 74 65 33 5f 66 6f 75 6e 64 5f 63   sqlite3_found_c
21850 6f 75 6e 74 2b 2b 3b 0a 23 65 6e 64 69 66 0a 0a  ount++;.#endif..
21860 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
21870 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c  1>=0 && pOp->p1<
21880 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20  p->nCursor );.  
21890 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74  assert( pOp->p4t
218a0 79 70 65 3d 3d 50 34 5f 49 4e 54 33 32 20 29 3b  ype==P4_INT32 );
218b0 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72  .  pC = p->apCsr
218c0 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
218d0 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 23 69  ert( pC!=0 );.#i
218e0 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55  fdef SQLITE_DEBU
218f0 47 0a 20 20 70 43 2d 3e 73 65 65 6b 4f 70 20 3d  G.  pC->seekOp =
21900 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3b 0a 23 65   pOp->opcode;.#e
21910 6e 64 69 66 0a 20 20 70 49 6e 33 20 3d 20 26 61  ndif.  pIn3 = &a
21920 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20  Mem[pOp->p3];.  
21930 61 73 73 65 72 74 28 20 70 43 2d 3e 65 43 75 72  assert( pC->eCur
21940 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f 42 54  Type==CURTYPE_BT
21950 52 45 45 20 29 3b 0a 20 20 61 73 73 65 72 74 28  REE );.  assert(
21960 20 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 21   pC->uc.pCursor!
21970 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
21980 70 43 2d 3e 69 73 54 61 62 6c 65 3d 3d 30 20 29  pC->isTable==0 )
21990 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 34 2e  ;.  if( pOp->p4.
219a0 69 3e 30 20 29 7b 0a 20 20 20 20 72 2e 70 4b 65  i>0 ){.    r.pKe
219b0 79 49 6e 66 6f 20 3d 20 70 43 2d 3e 70 4b 65 79  yInfo = pC->pKey
219c0 49 6e 66 6f 3b 0a 20 20 20 20 72 2e 6e 46 69 65  Info;.    r.nFie
219d0 6c 64 20 3d 20 28 75 31 36 29 70 4f 70 2d 3e 70  ld = (u16)pOp->p
219e0 34 2e 69 3b 0a 20 20 20 20 72 2e 61 4d 65 6d 20  4.i;.    r.aMem 
219f0 3d 20 70 49 6e 33 3b 0a 23 69 66 64 65 66 20 53  = pIn3;.#ifdef S
21a00 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 20 20  QLITE_DEBUG.    
21a10 66 6f 72 28 69 69 3d 30 3b 20 69 69 3c 72 2e 6e  for(ii=0; ii<r.n
21a20 46 69 65 6c 64 3b 20 69 69 2b 2b 29 7b 0a 20 20  Field; ii++){.  
21a30 20 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49      assert( memI
21a40 73 56 61 6c 69 64 28 26 72 2e 61 4d 65 6d 5b 69  sValid(&r.aMem[i
21a50 69 5d 29 20 29 3b 0a 20 20 20 20 20 20 61 73 73  i]) );.      ass
21a60 65 72 74 28 20 28 72 2e 61 4d 65 6d 5b 69 69 5d  ert( (r.aMem[ii]
21a70 2e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 5a 65 72  .flags & MEM_Zer
21a80 6f 29 3d 3d 30 20 7c 7c 20 72 2e 61 4d 65 6d 5b  o)==0 || r.aMem[
21a90 69 69 5d 2e 6e 3d 3d 30 20 29 3b 0a 20 20 20 20  ii].n==0 );.    
21aa0 20 20 69 66 28 20 69 69 20 29 20 52 45 47 49 53    if( ii ) REGIS
21ab0 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70  TER_TRACE(pOp->p
21ac0 33 2b 69 69 2c 20 26 72 2e 61 4d 65 6d 5b 69 69  3+ii, &r.aMem[ii
21ad0 5d 29 3b 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66  ]);.    }.#endif
21ae0 0a 20 20 20 20 70 49 64 78 4b 65 79 20 3d 20 26  .    pIdxKey = &
21af0 72 3b 0a 20 20 20 20 70 46 72 65 65 20 3d 20 30  r;.    pFree = 0
21b00 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61  ;.  }else{.    a
21b10 73 73 65 72 74 28 20 70 49 6e 33 2d 3e 66 6c 61  ssert( pIn3->fla
21b20 67 73 20 26 20 4d 45 4d 5f 42 6c 6f 62 20 29 3b  gs & MEM_Blob );
21b30 0a 20 20 20 20 72 63 20 3d 20 45 78 70 61 6e 64  .    rc = Expand
21b40 42 6c 6f 62 28 70 49 6e 33 29 3b 0a 20 20 20 20  Blob(pIn3);.    
21b50 61 73 73 65 72 74 28 20 72 63 3d 3d 53 51 4c 49  assert( rc==SQLI
21b60 54 45 5f 4f 4b 20 7c 7c 20 72 63 3d 3d 53 51 4c  TE_OK || rc==SQL
21b70 49 54 45 5f 4e 4f 4d 45 4d 20 29 3b 0a 20 20 20  ITE_NOMEM );.   
21b80 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20 6e   if( rc ) goto n
21b90 6f 5f 6d 65 6d 3b 0a 20 20 20 20 70 46 72 65 65  o_mem;.    pFree
21ba0 20 3d 20 70 49 64 78 4b 65 79 20 3d 20 73 71 6c   = pIdxKey = sql
21bb0 69 74 65 33 56 64 62 65 41 6c 6c 6f 63 55 6e 70  ite3VdbeAllocUnp
21bc0 61 63 6b 65 64 52 65 63 6f 72 64 28 70 43 2d 3e  ackedRecord(pC->
21bd0 70 4b 65 79 49 6e 66 6f 29 3b 0a 20 20 20 20 69  pKeyInfo);.    i
21be0 66 28 20 70 49 64 78 4b 65 79 3d 3d 30 20 29 20  f( pIdxKey==0 ) 
21bf0 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 20  goto no_mem;.   
21c00 20 73 71 6c 69 74 65 33 56 64 62 65 52 65 63 6f   sqlite3VdbeReco
21c10 72 64 55 6e 70 61 63 6b 28 70 43 2d 3e 70 4b 65  rdUnpack(pC->pKe
21c20 79 49 6e 66 6f 2c 20 70 49 6e 33 2d 3e 6e 2c 20  yInfo, pIn3->n, 
21c30 70 49 6e 33 2d 3e 7a 2c 20 70 49 64 78 4b 65 79  pIn3->z, pIdxKey
21c40 29 3b 0a 20 20 7d 0a 20 20 70 49 64 78 4b 65 79  );.  }.  pIdxKey
21c50 2d 3e 64 65 66 61 75 6c 74 5f 72 63 20 3d 20 30  ->default_rc = 0
21c60 3b 0a 20 20 74 61 6b 65 4a 75 6d 70 20 3d 20 30  ;.  takeJump = 0
21c70 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63  ;.  if( pOp->opc
21c80 6f 64 65 3d 3d 4f 50 5f 4e 6f 43 6f 6e 66 6c 69  ode==OP_NoConfli
21c90 63 74 20 29 7b 0a 20 20 20 20 2f 2a 20 46 6f 72  ct ){.    /* For
21ca0 20 74 68 65 20 4f 50 5f 4e 6f 43 6f 6e 66 6c 69   the OP_NoConfli
21cb0 63 74 20 6f 70 63 6f 64 65 2c 20 74 61 6b 65 20  ct opcode, take 
21cc0 74 68 65 20 6a 75 6d 70 20 69 66 20 61 6e 79 20  the jump if any 
21cd0 6f 66 20 74 68 65 0a 20 20 20 20 2a 2a 20 69 6e  of the.    ** in
21ce0 70 75 74 20 66 69 65 6c 64 73 20 61 72 65 20 4e  put fields are N
21cf0 55 4c 4c 2c 20 73 69 6e 63 65 20 61 6e 79 20 6b  ULL, since any k
21d00 65 79 20 77 69 74 68 20 61 20 4e 55 4c 4c 20 77  ey with a NULL w
21d10 69 6c 6c 20 6e 6f 74 0a 20 20 20 20 2a 2a 20 63  ill not.    ** c
21d20 6f 6e 66 6c 69 63 74 20 2a 2f 0a 20 20 20 20 66  onflict */.    f
21d30 6f 72 28 69 69 3d 30 3b 20 69 69 3c 70 49 64 78  or(ii=0; ii<pIdx
21d40 4b 65 79 2d 3e 6e 46 69 65 6c 64 3b 20 69 69 2b  Key->nField; ii+
21d50 2b 29 7b 0a 20 20 20 20 20 20 69 66 28 20 70 49  +){.      if( pI
21d60 64 78 4b 65 79 2d 3e 61 4d 65 6d 5b 69 69 5d 2e  dxKey->aMem[ii].
21d70 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c  flags & MEM_Null
21d80 20 29 7b 0a 20 20 20 20 20 20 20 20 74 61 6b 65   ){.        take
21d90 4a 75 6d 70 20 3d 20 31 3b 0a 20 20 20 20 20 20  Jump = 1;.      
21da0 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d    break;.      }
21db0 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 72 63 20  .    }.  }.  rc 
21dc0 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 4d 6f  = sqlite3BtreeMo
21dd0 76 65 74 6f 55 6e 70 61 63 6b 65 64 28 70 43 2d  vetoUnpacked(pC-
21de0 3e 75 63 2e 70 43 75 72 73 6f 72 2c 20 70 49 64  >uc.pCursor, pId
21df0 78 4b 65 79 2c 20 30 2c 20 30 2c 20 26 72 65 73  xKey, 0, 0, &res
21e00 29 3b 0a 20 20 69 66 28 20 70 46 72 65 65 20 29  );.  if( pFree )
21e10 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 4e 4e   sqlite3DbFreeNN
21e20 28 64 62 2c 20 70 46 72 65 65 29 3b 0a 20 20 69  (db, pFree);.  i
21e30 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc!=SQLITE_OK
21e40 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 61 62 6f   ){.    goto abo
21e50 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
21e60 0a 20 20 7d 0a 20 20 70 43 2d 3e 73 65 65 6b 52  .  }.  pC->seekR
21e70 65 73 75 6c 74 20 3d 20 72 65 73 3b 0a 20 20 61  esult = res;.  a
21e80 6c 72 65 61 64 79 45 78 69 73 74 73 20 3d 20 28  lreadyExists = (
21e90 72 65 73 3d 3d 30 29 3b 0a 20 20 70 43 2d 3e 6e  res==0);.  pC->n
21ea0 75 6c 6c 52 6f 77 20 3d 20 31 2d 61 6c 72 65 61  ullRow = 1-alrea
21eb0 64 79 45 78 69 73 74 73 3b 0a 20 20 70 43 2d 3e  dyExists;.  pC->
21ec0 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d  deferredMoveto =
21ed0 20 30 3b 0a 20 20 70 43 2d 3e 63 61 63 68 65 53   0;.  pC->cacheS
21ee0 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54  tatus = CACHE_ST
21ef0 41 4c 45 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e  ALE;.  if( pOp->
21f00 6f 70 63 6f 64 65 3d 3d 4f 50 5f 46 6f 75 6e 64  opcode==OP_Found
21f10 20 29 7b 0a 20 20 20 20 56 64 62 65 42 72 61 6e   ){.    VdbeBran
21f20 63 68 54 61 6b 65 6e 28 61 6c 72 65 61 64 79 45  chTaken(alreadyE
21f30 78 69 73 74 73 21 3d 30 2c 32 29 3b 0a 20 20 20  xists!=0,2);.   
21f40 20 69 66 28 20 61 6c 72 65 61 64 79 45 78 69 73   if( alreadyExis
21f50 74 73 20 29 20 67 6f 74 6f 20 6a 75 6d 70 5f 74  ts ) goto jump_t
21f60 6f 5f 70 32 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  o_p2;.  }else{. 
21f70 20 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b     VdbeBranchTak
21f80 65 6e 28 74 61 6b 65 4a 75 6d 70 7c 7c 61 6c 72  en(takeJump||alr
21f90 65 61 64 79 45 78 69 73 74 73 3d 3d 30 2c 32 29  eadyExists==0,2)
21fa0 3b 0a 20 20 20 20 69 66 28 20 74 61 6b 65 4a 75  ;.    if( takeJu
21fb0 6d 70 20 7c 7c 20 21 61 6c 72 65 61 64 79 45 78  mp || !alreadyEx
21fc0 69 73 74 73 20 29 20 67 6f 74 6f 20 6a 75 6d 70  ists ) goto jump
21fd0 5f 74 6f 5f 70 32 3b 0a 20 20 7d 0a 20 20 62 72  _to_p2;.  }.  br
21fe0 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
21ff0 65 3a 20 53 65 65 6b 52 6f 77 69 64 20 50 31 20  e: SeekRowid P1 
22000 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e  P2 P3 * *.** Syn
22010 6f 70 73 69 73 3a 20 69 6e 74 6b 65 79 3d 72 5b  opsis: intkey=r[
22020 50 33 5d 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20  P3].**.** P1 is 
22030 74 68 65 20 69 6e 64 65 78 20 6f 66 20 61 20 63  the index of a c
22040 75 72 73 6f 72 20 6f 70 65 6e 20 6f 6e 20 61 6e  ursor open on an
22050 20 53 51 4c 20 74 61 62 6c 65 20 62 74 72 65 65   SQL table btree
22060 20 28 77 69 74 68 20 69 6e 74 65 67 65 72 0a 2a   (with integer.*
22070 2a 20 6b 65 79 73 29 2e 20 20 49 66 20 72 65 67  * keys).  If reg
22080 69 73 74 65 72 20 50 33 20 64 6f 65 73 20 6e 6f  ister P3 does no
22090 74 20 63 6f 6e 74 61 69 6e 20 61 6e 20 69 6e 74  t contain an int
220a0 65 67 65 72 20 6f 72 20 69 66 20 50 31 20 64 6f  eger or if P1 do
220b0 65 73 20 6e 6f 74 0a 2a 2a 20 63 6f 6e 74 61 69  es not.** contai
220c0 6e 20 61 20 72 65 63 6f 72 64 20 77 69 74 68 20  n a record with 
220d0 72 6f 77 69 64 20 50 33 20 74 68 65 6e 20 6a 75  rowid P3 then ju
220e0 6d 70 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 74  mp immediately t
220f0 6f 20 50 32 2e 20 20 0a 2a 2a 20 4f 72 2c 20 69  o P2.  .** Or, i
22100 66 20 50 32 20 69 73 20 30 2c 20 72 61 69 73 65  f P2 is 0, raise
22110 20 61 6e 20 53 51 4c 49 54 45 5f 43 4f 52 52 55   an SQLITE_CORRU
22120 50 54 20 65 72 72 6f 72 2e 20 49 66 20 50 31 20  PT error. If P1 
22130 64 6f 65 73 20 63 6f 6e 74 61 69 6e 0a 2a 2a 20  does contain.** 
22140 61 20 72 65 63 6f 72 64 20 77 69 74 68 20 72 6f  a record with ro
22150 77 69 64 20 50 33 20 74 68 65 6e 20 0a 2a 2a 20  wid P3 then .** 
22160 6c 65 61 76 65 20 74 68 65 20 63 75 72 73 6f 72  leave the cursor
22170 20 70 6f 69 6e 74 69 6e 67 20 61 74 20 74 68 61   pointing at tha
22180 74 20 72 65 63 6f 72 64 20 61 6e 64 20 66 61 6c  t record and fal
22190 6c 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65  l through to the
221a0 20 6e 65 78 74 0a 2a 2a 20 69 6e 73 74 72 75 63   next.** instruc
221b0 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  tion..**.** The 
221c0 4f 50 5f 4e 6f 74 45 78 69 73 74 73 20 6f 70 63  OP_NotExists opc
221d0 6f 64 65 20 70 65 72 66 6f 72 6d 73 20 74 68 65  ode performs the
221e0 20 73 61 6d 65 20 6f 70 65 72 61 74 69 6f 6e 2c   same operation,
221f0 20 62 75 74 20 77 69 74 68 20 4f 50 5f 4e 6f 74   but with OP_Not
22200 45 78 69 73 74 73 0a 2a 2a 20 74 68 65 20 50 33  Exists.** the P3
22210 20 72 65 67 69 73 74 65 72 20 6d 75 73 74 20 62   register must b
22220 65 20 67 75 61 72 61 6e 74 65 65 64 20 74 6f 20  e guaranteed to 
22230 63 6f 6e 74 61 69 6e 20 61 6e 20 69 6e 74 65 67  contain an integ
22240 65 72 20 76 61 6c 75 65 2e 20 20 57 69 74 68 20  er value.  With 
22250 74 68 69 73 0a 2a 2a 20 6f 70 63 6f 64 65 2c 20  this.** opcode, 
22260 72 65 67 69 73 74 65 72 20 50 33 20 6d 69 67 68  register P3 migh
22270 74 20 6e 6f 74 20 63 6f 6e 74 61 69 6e 20 61 6e  t not contain an
22280 20 69 6e 74 65 67 65 72 2e 0a 2a 2a 0a 2a 2a 20   integer..**.** 
22290 54 68 65 20 4f 50 5f 4e 6f 74 46 6f 75 6e 64 20  The OP_NotFound 
222a0 6f 70 63 6f 64 65 20 70 65 72 66 6f 72 6d 73 20  opcode performs 
222b0 74 68 65 20 73 61 6d 65 20 6f 70 65 72 61 74 69  the same operati
222c0 6f 6e 20 6f 6e 20 69 6e 64 65 78 20 62 74 72 65  on on index btre
222d0 65 73 0a 2a 2a 20 28 77 69 74 68 20 61 72 62 69  es.** (with arbi
222e0 74 72 61 72 79 20 6d 75 6c 74 69 2d 76 61 6c 75  trary multi-valu
222f0 65 20 6b 65 79 73 29 2e 0a 2a 2a 0a 2a 2a 20 54  e keys)..**.** T
22300 68 69 73 20 6f 70 63 6f 64 65 20 6c 65 61 76 65  his opcode leave
22310 73 20 74 68 65 20 63 75 72 73 6f 72 20 69 6e 20  s the cursor in 
22320 61 20 73 74 61 74 65 20 77 68 65 72 65 20 69 74  a state where it
22330 20 63 61 6e 6e 6f 74 20 62 65 20 61 64 76 61 6e   cannot be advan
22340 63 65 64 0a 2a 2a 20 69 6e 20 65 69 74 68 65 72  ced.** in either
22350 20 64 69 72 65 63 74 69 6f 6e 2e 20 20 49 6e 20   direction.  In 
22360 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 74 68 65  other words, the
22370 20 4e 65 78 74 20 61 6e 64 20 50 72 65 76 20 6f   Next and Prev o
22380 70 63 6f 64 65 73 20 77 69 6c 6c 0a 2a 2a 20 6e  pcodes will.** n
22390 6f 74 20 77 6f 72 6b 20 66 6f 6c 6c 6f 77 69 6e  ot work followin
223a0 67 20 74 68 69 73 20 6f 70 63 6f 64 65 2e 0a 2a  g this opcode..*
223b0 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 46  *.** See also: F
223c0 6f 75 6e 64 2c 20 4e 6f 74 46 6f 75 6e 64 2c 20  ound, NotFound, 
223d0 4e 6f 43 6f 6e 66 6c 69 63 74 2c 20 53 65 65 6b  NoConflict, Seek
223e0 52 6f 77 69 64 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f  Rowid.*/./* Opco
223f0 64 65 3a 20 4e 6f 74 45 78 69 73 74 73 20 50 31  de: NotExists P1
22400 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79   P2 P3 * *.** Sy
22410 6e 6f 70 73 69 73 3a 20 69 6e 74 6b 65 79 3d 72  nopsis: intkey=r
22420 5b 50 33 5d 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73  [P3].**.** P1 is
22430 20 74 68 65 20 69 6e 64 65 78 20 6f 66 20 61 20   the index of a 
22440 63 75 72 73 6f 72 20 6f 70 65 6e 20 6f 6e 20 61  cursor open on a
22450 6e 20 53 51 4c 20 74 61 62 6c 65 20 62 74 72 65  n SQL table btre
22460 65 20 28 77 69 74 68 20 69 6e 74 65 67 65 72 0a  e (with integer.
22470 2a 2a 20 6b 65 79 73 29 2e 20 20 50 33 20 69 73  ** keys).  P3 is
22480 20 61 6e 20 69 6e 74 65 67 65 72 20 72 6f 77 69   an integer rowi
22490 64 2e 20 20 49 66 20 50 31 20 64 6f 65 73 20 6e  d.  If P1 does n
224a0 6f 74 20 63 6f 6e 74 61 69 6e 20 61 20 72 65 63  ot contain a rec
224b0 6f 72 64 20 77 69 74 68 0a 2a 2a 20 72 6f 77 69  ord with.** rowi
224c0 64 20 50 33 20 74 68 65 6e 20 6a 75 6d 70 20 69  d P3 then jump i
224d0 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f 20 50 32  mmediately to P2
224e0 2e 20 20 4f 72 2c 20 69 66 20 50 32 20 69 73 20  .  Or, if P2 is 
224f0 30 2c 20 72 61 69 73 65 20 61 6e 0a 2a 2a 20 53  0, raise an.** S
22500 51 4c 49 54 45 5f 43 4f 52 52 55 50 54 20 65 72  QLITE_CORRUPT er
22510 72 6f 72 2e 20 49 66 20 50 31 20 64 6f 65 73 20  ror. If P1 does 
22520 63 6f 6e 74 61 69 6e 20 61 20 72 65 63 6f 72 64  contain a record
22530 20 77 69 74 68 20 72 6f 77 69 64 20 50 33 20 74   with rowid P3 t
22540 68 65 6e 20 0a 2a 2a 20 6c 65 61 76 65 20 74 68  hen .** leave th
22550 65 20 63 75 72 73 6f 72 20 70 6f 69 6e 74 69 6e  e cursor pointin
22560 67 20 61 74 20 74 68 61 74 20 72 65 63 6f 72 64  g at that record
22570 20 61 6e 64 20 66 61 6c 6c 20 74 68 72 6f 75 67   and fall throug
22580 68 20 74 6f 20 74 68 65 20 6e 65 78 74 0a 2a 2a  h to the next.**
22590 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a   instruction..**
225a0 0a 2a 2a 20 54 68 65 20 4f 50 5f 53 65 65 6b 52  .** The OP_SeekR
225b0 6f 77 69 64 20 6f 70 63 6f 64 65 20 70 65 72 66  owid opcode perf
225c0 6f 72 6d 73 20 74 68 65 20 73 61 6d 65 20 6f 70  orms the same op
225d0 65 72 61 74 69 6f 6e 20 62 75 74 20 61 6c 73 6f  eration but also
225e0 20 61 6c 6c 6f 77 73 20 74 68 65 0a 2a 2a 20 50   allows the.** P
225f0 33 20 72 65 67 69 73 74 65 72 20 74 6f 20 63 6f  3 register to co
22600 6e 74 61 69 6e 20 61 20 6e 6f 6e 2d 69 6e 74 65  ntain a non-inte
22610 67 65 72 20 76 61 6c 75 65 2c 20 69 6e 20 77 68  ger value, in wh
22620 69 63 68 20 63 61 73 65 20 74 68 65 20 6a 75 6d  ich case the jum
22630 70 20 69 73 0a 2a 2a 20 61 6c 77 61 79 73 20 74  p is.** always t
22640 61 6b 65 6e 2e 20 20 54 68 69 73 20 6f 70 63 6f  aken.  This opco
22650 64 65 20 72 65 71 75 69 72 65 73 20 74 68 61 74  de requires that
22660 20 50 33 20 61 6c 77 61 79 73 20 63 6f 6e 74 61   P3 always conta
22670 69 6e 20 61 6e 20 69 6e 74 65 67 65 72 2e 0a 2a  in an integer..*
22680 2a 0a 2a 2a 20 54 68 65 20 4f 50 5f 4e 6f 74 46  *.** The OP_NotF
22690 6f 75 6e 64 20 6f 70 63 6f 64 65 20 70 65 72 66  ound opcode perf
226a0 6f 72 6d 73 20 74 68 65 20 73 61 6d 65 20 6f 70  orms the same op
226b0 65 72 61 74 69 6f 6e 20 6f 6e 20 69 6e 64 65 78  eration on index
226c0 20 62 74 72 65 65 73 0a 2a 2a 20 28 77 69 74 68   btrees.** (with
226d0 20 61 72 62 69 74 72 61 72 79 20 6d 75 6c 74 69   arbitrary multi
226e0 2d 76 61 6c 75 65 20 6b 65 79 73 29 2e 0a 2a 2a  -value keys)..**
226f0 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20  .** This opcode 
22700 6c 65 61 76 65 73 20 74 68 65 20 63 75 72 73 6f  leaves the curso
22710 72 20 69 6e 20 61 20 73 74 61 74 65 20 77 68 65  r in a state whe
22720 72 65 20 69 74 20 63 61 6e 6e 6f 74 20 62 65 20  re it cannot be 
22730 61 64 76 61 6e 63 65 64 0a 2a 2a 20 69 6e 20 65  advanced.** in e
22740 69 74 68 65 72 20 64 69 72 65 63 74 69 6f 6e 2e  ither direction.
22750 20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73    In other words
22760 2c 20 74 68 65 20 4e 65 78 74 20 61 6e 64 20 50  , the Next and P
22770 72 65 76 20 6f 70 63 6f 64 65 73 20 77 69 6c 6c  rev opcodes will
22780 0a 2a 2a 20 6e 6f 74 20 77 6f 72 6b 20 66 6f 6c  .** not work fol
22790 6c 6f 77 69 6e 67 20 74 68 69 73 20 6f 70 63 6f  lowing this opco
227a0 64 65 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c  de..**.** See al
227b0 73 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f 74 46 6f  so: Found, NotFo
227c0 75 6e 64 2c 20 4e 6f 43 6f 6e 66 6c 69 63 74 2c  und, NoConflict,
227d0 20 53 65 65 6b 52 6f 77 69 64 0a 2a 2f 0a 63 61   SeekRowid.*/.ca
227e0 73 65 20 4f 50 5f 53 65 65 6b 52 6f 77 69 64 3a  se OP_SeekRowid:
227f0 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d   {        /* jum
22800 70 2c 20 69 6e 33 20 2a 2f 0a 20 20 56 64 62 65  p, in3 */.  Vdbe
22810 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 42 74  Cursor *pC;.  Bt
22820 43 75 72 73 6f 72 20 2a 70 43 72 73 72 3b 0a 20  Cursor *pCrsr;. 
22830 20 69 6e 74 20 72 65 73 3b 0a 20 20 75 36 34 20   int res;.  u64 
22840 69 4b 65 79 3b 0a 0a 20 20 70 49 6e 33 20 3d 20  iKey;..  pIn3 = 
22850 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a  &aMem[pOp->p3];.
22860 20 20 69 66 28 20 28 70 49 6e 33 2d 3e 66 6c 61    if( (pIn3->fla
22870 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29 3d 3d 30  gs & MEM_Int)==0
22880 20 29 7b 0a 20 20 20 20 61 70 70 6c 79 41 66 66   ){.    applyAff
22890 69 6e 69 74 79 28 70 49 6e 33 2c 20 53 51 4c 49  inity(pIn3, SQLI
228a0 54 45 5f 41 46 46 5f 4e 55 4d 45 52 49 43 2c 20  TE_AFF_NUMERIC, 
228b0 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 20 20 69  encoding);.    i
228c0 66 28 20 28 70 49 6e 33 2d 3e 66 6c 61 67 73 20  f( (pIn3->flags 
228d0 26 20 4d 45 4d 5f 49 6e 74 29 3d 3d 30 20 29 20  & MEM_Int)==0 ) 
228e0 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b  goto jump_to_p2;
228f0 0a 20 20 7d 0a 20 20 2f 2a 20 46 61 6c 6c 20 74  .  }.  /* Fall t
22900 68 72 6f 75 67 68 20 69 6e 74 6f 20 4f 50 5f 4e  hrough into OP_N
22910 6f 74 45 78 69 73 74 73 20 2a 2f 0a 63 61 73 65  otExists */.case
22920 20 4f 50 5f 4e 6f 74 45 78 69 73 74 73 3a 20 20   OP_NotExists:  
22930 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c          /* jump,
22940 20 69 6e 33 20 2a 2f 0a 20 20 70 49 6e 33 20 3d   in3 */.  pIn3 =
22950 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b   &aMem[pOp->p3];
22960 0a 20 20 61 73 73 65 72 74 28 20 70 49 6e 33 2d  .  assert( pIn3-
22970 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74  >flags & MEM_Int
22980 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   );.  assert( pO
22990 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d  p->p1>=0 && pOp-
229a0 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29  >p1<p->nCursor )
229b0 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73  ;.  pC = p->apCs
229c0 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  r[pOp->p1];.  as
229d0 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 23  sert( pC!=0 );.#
229e0 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42  ifdef SQLITE_DEB
229f0 55 47 0a 20 20 70 43 2d 3e 73 65 65 6b 4f 70 20  UG.  pC->seekOp 
22a00 3d 20 30 3b 0a 23 65 6e 64 69 66 0a 20 20 61 73  = 0;.#endif.  as
22a10 73 65 72 74 28 20 70 43 2d 3e 69 73 54 61 62 6c  sert( pC->isTabl
22a20 65 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  e );.  assert( p
22a30 43 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43 55 52  C->eCurType==CUR
22a40 54 59 50 45 5f 42 54 52 45 45 20 29 3b 0a 20 20  TYPE_BTREE );.  
22a50 70 43 72 73 72 20 3d 20 70 43 2d 3e 75 63 2e 70  pCrsr = pC->uc.p
22a60 43 75 72 73 6f 72 3b 0a 20 20 61 73 73 65 72 74  Cursor;.  assert
22a70 28 20 70 43 72 73 72 21 3d 30 20 29 3b 0a 20 20  ( pCrsr!=0 );.  
22a80 72 65 73 20 3d 20 30 3b 0a 20 20 69 4b 65 79 20  res = 0;.  iKey 
22a90 3d 20 70 49 6e 33 2d 3e 75 2e 69 3b 0a 20 20 72  = pIn3->u.i;.  r
22aa0 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
22ab0 4d 6f 76 65 74 6f 55 6e 70 61 63 6b 65 64 28 70  MovetoUnpacked(p
22ac0 43 72 73 72 2c 20 30 2c 20 69 4b 65 79 2c 20 30  Crsr, 0, iKey, 0
22ad0 2c 20 26 72 65 73 29 3b 0a 20 20 61 73 73 65 72  , &res);.  asser
22ae0 74 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  t( rc==SQLITE_OK
22af0 20 7c 7c 20 72 65 73 3d 3d 30 20 29 3b 0a 20 20   || res==0 );.  
22b00 70 43 2d 3e 6d 6f 76 65 74 6f 54 61 72 67 65 74  pC->movetoTarget
22b10 20 3d 20 69 4b 65 79 3b 20 20 2f 2a 20 55 73 65   = iKey;  /* Use
22b20 64 20 62 79 20 4f 50 5f 44 65 6c 65 74 65 20 2a  d by OP_Delete *
22b30 2f 0a 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20  /.  pC->nullRow 
22b40 3d 20 30 3b 0a 20 20 70 43 2d 3e 63 61 63 68 65  = 0;.  pC->cache
22b50 53 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53  Status = CACHE_S
22b60 54 41 4c 45 3b 0a 20 20 70 43 2d 3e 64 65 66 65  TALE;.  pC->defe
22b70 72 72 65 64 4d 6f 76 65 74 6f 20 3d 20 30 3b 0a  rredMoveto = 0;.
22b80 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65    VdbeBranchTake
22b90 6e 28 72 65 73 21 3d 30 2c 32 29 3b 0a 20 20 70  n(res!=0,2);.  p
22ba0 43 2d 3e 73 65 65 6b 52 65 73 75 6c 74 20 3d 20  C->seekResult = 
22bb0 72 65 73 3b 0a 20 20 69 66 28 20 72 65 73 21 3d  res;.  if( res!=
22bc0 30 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28  0 ){.    assert(
22bd0 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc==SQLITE_OK )
22be0 3b 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70  ;.    if( pOp->p
22bf0 32 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 72 63  2==0 ){.      rc
22c00 20 3d 20 53 51 4c 49 54 45 5f 43 4f 52 52 55 50   = SQLITE_CORRUP
22c10 54 5f 42 4b 50 54 3b 0a 20 20 20 20 7d 65 6c 73  T_BKPT;.    }els
22c20 65 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20 6a 75  e{.      goto ju
22c30 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 20 20 7d 0a  mp_to_p2;.    }.
22c40 20 20 7d 0a 20 20 69 66 28 20 72 63 20 29 20 67    }.  if( rc ) g
22c50 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
22c60 5f 65 72 72 6f 72 3b 0a 20 20 62 72 65 61 6b 3b  _error;.  break;
22c70 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53  .}../* Opcode: S
22c80 65 71 75 65 6e 63 65 20 50 31 20 50 32 20 2a 20  equence P1 P2 * 
22c90 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  * *.** Synopsis:
22ca0 20 72 5b 50 32 5d 3d 63 75 72 73 6f 72 5b 50 31   r[P2]=cursor[P1
22cb0 5d 2e 63 74 72 2b 2b 0a 2a 2a 0a 2a 2a 20 46 69  ].ctr++.**.** Fi
22cc0 6e 64 20 74 68 65 20 6e 65 78 74 20 61 76 61 69  nd the next avai
22cd0 6c 61 62 6c 65 20 73 65 71 75 65 6e 63 65 20 6e  lable sequence n
22ce0 75 6d 62 65 72 20 66 6f 72 20 63 75 72 73 6f 72  umber for cursor
22cf0 20 50 31 2e 0a 2a 2a 20 57 72 69 74 65 20 74 68   P1..** Write th
22d00 65 20 73 65 71 75 65 6e 63 65 20 6e 75 6d 62 65  e sequence numbe
22d10 72 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20  r into register 
22d20 50 32 2e 0a 2a 2a 20 54 68 65 20 73 65 71 75 65  P2..** The seque
22d30 6e 63 65 20 6e 75 6d 62 65 72 20 6f 6e 20 74 68  nce number on th
22d40 65 20 63 75 72 73 6f 72 20 69 73 20 69 6e 63 72  e cursor is incr
22d50 65 6d 65 6e 74 65 64 20 61 66 74 65 72 20 74 68  emented after th
22d60 69 73 0a 2a 2a 20 69 6e 73 74 72 75 63 74 69 6f  is.** instructio
22d70 6e 2e 20 20 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  n.  .*/.case OP_
22d80 53 65 71 75 65 6e 63 65 3a 20 7b 20 20 20 20 20  Sequence: {     
22d90 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f        /* out2 */
22da0 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
22db0 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31  p1>=0 && pOp->p1
22dc0 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20  <p->nCursor );. 
22dd0 20 61 73 73 65 72 74 28 20 70 2d 3e 61 70 43 73   assert( p->apCs
22de0 72 5b 70 4f 70 2d 3e 70 31 5d 21 3d 30 20 29 3b  r[pOp->p1]!=0 );
22df0 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 61 70  .  assert( p->ap
22e00 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 2d 3e 65 43  Csr[pOp->p1]->eC
22e10 75 72 54 79 70 65 21 3d 43 55 52 54 59 50 45 5f  urType!=CURTYPE_
22e20 56 54 41 42 20 29 3b 0a 20 20 70 4f 75 74 20 3d  VTAB );.  pOut =
22e30 20 6f 75 74 32 50 72 65 72 65 6c 65 61 73 65 28   out2Prerelease(
22e40 70 2c 20 70 4f 70 29 3b 0a 20 20 70 4f 75 74 2d  p, pOp);.  pOut-
22e50 3e 75 2e 69 20 3d 20 70 2d 3e 61 70 43 73 72 5b  >u.i = p->apCsr[
22e60 70 4f 70 2d 3e 70 31 5d 2d 3e 73 65 71 43 6f 75  pOp->p1]->seqCou
22e70 6e 74 2b 2b 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  nt++;.  break;.}
22e80 0a 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 65  .../* Opcode: Ne
22e90 77 52 6f 77 69 64 20 50 31 20 50 32 20 50 33 20  wRowid P1 P2 P3 
22ea0 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  * *.** Synopsis:
22eb0 20 72 5b 50 32 5d 3d 72 6f 77 69 64 0a 2a 2a 0a   r[P2]=rowid.**.
22ec0 2a 2a 20 47 65 74 20 61 20 6e 65 77 20 69 6e 74  ** Get a new int
22ed0 65 67 65 72 20 72 65 63 6f 72 64 20 6e 75 6d 62  eger record numb
22ee0 65 72 20 28 61 2e 6b 2e 61 20 22 72 6f 77 69 64  er (a.k.a "rowid
22ef0 22 29 20 75 73 65 64 20 61 73 20 74 68 65 20 6b  ") used as the k
22f00 65 79 20 74 6f 20 61 20 74 61 62 6c 65 2e 0a 2a  ey to a table..*
22f10 2a 20 54 68 65 20 72 65 63 6f 72 64 20 6e 75 6d  * The record num
22f20 62 65 72 20 69 73 20 6e 6f 74 20 70 72 65 76 69  ber is not previ
22f30 6f 75 73 6c 79 20 75 73 65 64 20 61 73 20 61 20  ously used as a 
22f40 6b 65 79 20 69 6e 20 74 68 65 20 64 61 74 61 62  key in the datab
22f50 61 73 65 0a 2a 2a 20 74 61 62 6c 65 20 74 68 61  ase.** table tha
22f60 74 20 63 75 72 73 6f 72 20 50 31 20 70 6f 69 6e  t cursor P1 poin
22f70 74 73 20 74 6f 2e 20 20 54 68 65 20 6e 65 77 20  ts to.  The new 
22f80 72 65 63 6f 72 64 20 6e 75 6d 62 65 72 20 69 73  record number is
22f90 20 77 72 69 74 74 65 6e 0a 2a 2a 20 77 72 69 74   written.** writ
22fa0 74 65 6e 20 74 6f 20 72 65 67 69 73 74 65 72 20  ten to register 
22fb0 50 32 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 33 3e  P2..**.** If P3>
22fc0 30 20 74 68 65 6e 20 50 33 20 69 73 20 61 20 72  0 then P3 is a r
22fd0 65 67 69 73 74 65 72 20 69 6e 20 74 68 65 20 72  egister in the r
22fe0 6f 6f 74 20 66 72 61 6d 65 20 6f 66 20 74 68 69  oot frame of thi
22ff0 73 20 56 44 42 45 20 74 68 61 74 20 68 6f 6c 64  s VDBE that hold
23000 73 20 0a 2a 2a 20 74 68 65 20 6c 61 72 67 65 73  s .** the larges
23010 74 20 70 72 65 76 69 6f 75 73 6c 79 20 67 65 6e  t previously gen
23020 65 72 61 74 65 64 20 72 65 63 6f 72 64 20 6e 75  erated record nu
23030 6d 62 65 72 2e 20 4e 6f 20 6e 65 77 20 72 65 63  mber. No new rec
23040 6f 72 64 20 6e 75 6d 62 65 72 73 20 61 72 65 0a  ord numbers are.
23050 2a 2a 20 61 6c 6c 6f 77 65 64 20 74 6f 20 62 65  ** allowed to be
23060 20 6c 65 73 73 20 74 68 61 6e 20 74 68 69 73 20   less than this 
23070 76 61 6c 75 65 2e 20 57 68 65 6e 20 74 68 69 73  value. When this
23080 20 76 61 6c 75 65 20 72 65 61 63 68 65 73 20 69   value reaches i
23090 74 73 20 6d 61 78 69 6d 75 6d 2c 20 0a 2a 2a 20  ts maximum, .** 
230a0 61 6e 20 53 51 4c 49 54 45 5f 46 55 4c 4c 20 65  an SQLITE_FULL e
230b0 72 72 6f 72 20 69 73 20 67 65 6e 65 72 61 74 65  rror is generate
230c0 64 2e 20 54 68 65 20 50 33 20 72 65 67 69 73 74  d. The P3 regist
230d0 65 72 20 69 73 20 75 70 64 61 74 65 64 20 77 69  er is updated wi
230e0 74 68 20 74 68 65 20 27 0a 2a 2a 20 67 65 6e 65  th the '.** gene
230f0 72 61 74 65 64 20 72 65 63 6f 72 64 20 6e 75 6d  rated record num
23100 62 65 72 2e 20 54 68 69 73 20 50 33 20 6d 65 63  ber. This P3 mec
23110 68 61 6e 69 73 6d 20 69 73 20 75 73 65 64 20 74  hanism is used t
23120 6f 20 68 65 6c 70 20 69 6d 70 6c 65 6d 65 6e 74  o help implement
23130 20 74 68 65 0a 2a 2a 20 41 55 54 4f 49 4e 43 52   the.** AUTOINCR
23140 45 4d 45 4e 54 20 66 65 61 74 75 72 65 2e 0a 2a  EMENT feature..*
23150 2f 0a 63 61 73 65 20 4f 50 5f 4e 65 77 52 6f 77  /.case OP_NewRow
23160 69 64 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  id: {           
23170 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20 20 69 36 34  /* out2 */.  i64
23180 20 76 3b 20 20 20 20 20 20 20 20 20 20 20 20 20   v;             
23190 20 20 20 20 2f 2a 20 54 68 65 20 6e 65 77 20 72      /* The new r
231a0 6f 77 69 64 20 2a 2f 0a 20 20 56 64 62 65 43 75  owid */.  VdbeCu
231b0 72 73 6f 72 20 2a 70 43 3b 20 20 20 20 20 20 20  rsor *pC;       
231c0 20 2f 2a 20 43 75 72 73 6f 72 20 6f 66 20 74 61   /* Cursor of ta
231d0 62 6c 65 20 74 6f 20 67 65 74 20 74 68 65 20 6e  ble to get the n
231e0 65 77 20 72 6f 77 69 64 20 2a 2f 0a 20 20 69 6e  ew rowid */.  in
231f0 74 20 72 65 73 3b 20 20 20 20 20 20 20 20 20 20  t res;          
23200 20 20 20 20 20 2f 2a 20 52 65 73 75 6c 74 20 6f       /* Result o
23210 66 20 61 6e 20 73 71 6c 69 74 65 33 42 74 72 65  f an sqlite3Btre
23220 65 4c 61 73 74 28 29 20 2a 2f 0a 20 20 69 6e 74  eLast() */.  int
23230 20 63 6e 74 3b 20 20 20 20 20 20 20 20 20 20 20   cnt;           
23240 20 20 20 20 2f 2a 20 43 6f 75 6e 74 65 72 20 74      /* Counter t
23250 6f 20 6c 69 6d 69 74 20 74 68 65 20 6e 75 6d 62  o limit the numb
23260 65 72 20 6f 66 20 73 65 61 72 63 68 65 73 20 2a  er of searches *
23270 2f 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d 3b 20 20  /.  Mem *pMem;  
23280 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65             /* Re
23290 67 69 73 74 65 72 20 68 6f 6c 64 69 6e 67 20 6c  gister holding l
232a0 61 72 67 65 73 74 20 72 6f 77 69 64 20 66 6f 72  argest rowid for
232b0 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20 2a   AUTOINCREMENT *
232c0 2f 0a 20 20 56 64 62 65 46 72 61 6d 65 20 2a 70  /.  VdbeFrame *p
232d0 46 72 61 6d 65 3b 20 20 20 20 20 2f 2a 20 52 6f  Frame;     /* Ro
232e0 6f 74 20 66 72 61 6d 65 20 6f 66 20 56 44 42 45  ot frame of VDBE
232f0 20 2a 2f 0a 0a 20 20 76 20 3d 20 30 3b 0a 20 20   */..  v = 0;.  
23300 72 65 73 20 3d 20 30 3b 0a 20 20 70 4f 75 74 20  res = 0;.  pOut 
23310 3d 20 6f 75 74 32 50 72 65 72 65 6c 65 61 73 65  = out2Prerelease
23320 28 70 2c 20 70 4f 70 29 3b 0a 20 20 61 73 73 65  (p, pOp);.  asse
23330 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26  rt( pOp->p1>=0 &
23340 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75  & pOp->p1<p->nCu
23350 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70  rsor );.  pC = p
23360 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d  ->apCsr[pOp->p1]
23370 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d  ;.  assert( pC!=
23380 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  0 );.  assert( p
23390 43 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43 55 52  C->eCurType==CUR
233a0 54 59 50 45 5f 42 54 52 45 45 20 29 3b 0a 20 20  TYPE_BTREE );.  
233b0 61 73 73 65 72 74 28 20 70 43 2d 3e 75 63 2e 70  assert( pC->uc.p
233c0 43 75 72 73 6f 72 21 3d 30 20 29 3b 0a 20 20 7b  Cursor!=0 );.  {
233d0 0a 20 20 20 20 2f 2a 20 54 68 65 20 6e 65 78 74  .    /* The next
233e0 20 72 6f 77 69 64 20 6f 72 20 72 65 63 6f 72 64   rowid or record
233f0 20 6e 75 6d 62 65 72 20 28 64 69 66 66 65 72 65   number (differe
23400 6e 74 20 74 65 72 6d 73 20 66 6f 72 20 74 68 65  nt terms for the
23410 20 73 61 6d 65 0a 20 20 20 20 2a 2a 20 74 68 69   same.    ** thi
23420 6e 67 29 20 69 73 20 6f 62 74 61 69 6e 65 64 20  ng) is obtained 
23430 69 6e 20 61 20 74 77 6f 2d 73 74 65 70 20 61 6c  in a two-step al
23440 67 6f 72 69 74 68 6d 2e 0a 20 20 20 20 2a 2a 0a  gorithm..    **.
23450 20 20 20 20 2a 2a 20 46 69 72 73 74 20 77 65 20      ** First we 
23460 61 74 74 65 6d 70 74 20 74 6f 20 66 69 6e 64 20  attempt to find 
23470 74 68 65 20 6c 61 72 67 65 73 74 20 65 78 69 73  the largest exis
23480 74 69 6e 67 20 72 6f 77 69 64 20 61 6e 64 20 61  ting rowid and a
23490 64 64 20 6f 6e 65 0a 20 20 20 20 2a 2a 20 74 6f  dd one.    ** to
234a0 20 74 68 61 74 2e 20 20 42 75 74 20 69 66 20 74   that.  But if t
234b0 68 65 20 6c 61 72 67 65 73 74 20 65 78 69 73 74  he largest exist
234c0 69 6e 67 20 72 6f 77 69 64 20 69 73 20 61 6c 72  ing rowid is alr
234d0 65 61 64 79 20 74 68 65 20 6d 61 78 69 6d 75 6d  eady the maximum
234e0 0a 20 20 20 20 2a 2a 20 70 6f 73 69 74 69 76 65  .    ** positive
234f0 20 69 6e 74 65 67 65 72 2c 20 77 65 20 68 61 76   integer, we hav
23500 65 20 74 6f 20 66 61 6c 6c 20 74 68 72 6f 75 67  e to fall throug
23510 68 20 74 6f 20 74 68 65 20 73 65 63 6f 6e 64 0a  h to the second.
23520 20 20 20 20 2a 2a 20 70 72 6f 62 61 62 69 6c 69      ** probabili
23530 73 74 69 63 20 61 6c 67 6f 72 69 74 68 6d 0a 20  stic algorithm. 
23540 20 20 20 2a 2a 0a 20 20 20 20 2a 2a 20 54 68 65     **.    ** The
23550 20 73 65 63 6f 6e 64 20 61 6c 67 6f 72 69 74 68   second algorith
23560 6d 20 69 73 20 74 6f 20 73 65 6c 65 63 74 20 61  m is to select a
23570 20 72 6f 77 69 64 20 61 74 20 72 61 6e 64 6f 6d   rowid at random
23580 20 61 6e 64 20 73 65 65 20 69 66 0a 20 20 20 20   and see if.    
23590 2a 2a 20 69 74 20 61 6c 72 65 61 64 79 20 65 78  ** it already ex
235a0 69 73 74 73 20 69 6e 20 74 68 65 20 74 61 62 6c  ists in the tabl
235b0 65 2e 20 20 49 66 20 69 74 20 64 6f 65 73 20 6e  e.  If it does n
235c0 6f 74 20 65 78 69 73 74 2c 20 77 65 20 68 61 76  ot exist, we hav
235d0 65 0a 20 20 20 20 2a 2a 20 73 75 63 63 65 65 64  e.    ** succeed
235e0 65 64 2e 20 20 49 66 20 74 68 65 20 72 61 6e 64  ed.  If the rand
235f0 6f 6d 20 72 6f 77 69 64 20 64 6f 65 73 20 65 78  om rowid does ex
23600 69 73 74 2c 20 77 65 20 73 65 6c 65 63 74 20 61  ist, we select a
23610 20 6e 65 77 20 6f 6e 65 0a 20 20 20 20 2a 2a 20   new one.    ** 
23620 61 6e 64 20 74 72 79 20 61 67 61 69 6e 2c 20 75  and try again, u
23630 70 20 74 6f 20 31 30 30 20 74 69 6d 65 73 2e 0a  p to 100 times..
23640 20 20 20 20 2a 2f 0a 20 20 20 20 61 73 73 65 72      */.    asser
23650 74 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 20 29  t( pC->isTable )
23660 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  ;..#ifdef SQLITE
23670 5f 33 32 42 49 54 5f 52 4f 57 49 44 0a 23 20 20  _32BIT_ROWID.#  
23680 20 64 65 66 69 6e 65 20 4d 41 58 5f 52 4f 57 49   define MAX_ROWI
23690 44 20 30 78 37 66 66 66 66 66 66 66 0a 23 65 6c  D 0x7fffffff.#el
236a0 73 65 0a 20 20 20 20 2f 2a 20 53 6f 6d 65 20 63  se.    /* Some c
236b0 6f 6d 70 69 6c 65 72 73 20 63 6f 6d 70 6c 61 69  ompilers complai
236c0 6e 20 61 62 6f 75 74 20 63 6f 6e 73 74 61 6e 74  n about constant
236d0 73 20 6f 66 20 74 68 65 20 66 6f 72 6d 20 30 78  s of the form 0x
236e0 37 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66  7fffffffffffffff
236f0 2e 0a 20 20 20 20 2a 2a 20 4f 74 68 65 72 73 20  ..    ** Others 
23700 63 6f 6d 70 6c 61 69 6e 20 61 62 6f 75 74 20 30  complain about 0
23710 78 37 66 66 66 66 66 66 66 66 66 66 66 66 66 66  x7ffffffffffffff
23720 66 66 4c 4c 2e 20 20 54 68 65 20 66 6f 6c 6c 6f  ffLL.  The follo
23730 77 69 6e 67 20 6d 61 63 72 6f 20 73 65 65 6d 73  wing macro seems
23740 0a 20 20 20 20 2a 2a 20 74 6f 20 70 72 6f 76 69  .    ** to provi
23750 64 65 20 74 68 65 20 63 6f 6e 73 74 61 6e 74 20  de the constant 
23760 77 68 69 6c 65 20 6d 61 6b 69 6e 67 20 61 6c 6c  while making all
23770 20 63 6f 6d 70 69 6c 65 72 73 20 68 61 70 70 79   compilers happy
23780 2e 0a 20 20 20 20 2a 2f 0a 23 20 20 20 64 65 66  ..    */.#   def
23790 69 6e 65 20 4d 41 58 5f 52 4f 57 49 44 20 20 28  ine MAX_ROWID  (
237a0 69 36 34 29 28 20 28 28 28 75 36 34 29 30 78 37  i64)( (((u64)0x7
237b0 66 66 66 66 66 66 66 29 3c 3c 33 32 29 20 7c 20  fffffff)<<32) | 
237c0 28 75 36 34 29 30 78 66 66 66 66 66 66 66 66 20  (u64)0xffffffff 
237d0 29 0a 23 65 6e 64 69 66 0a 0a 20 20 20 20 69 66  ).#endif..    if
237e0 28 20 21 70 43 2d 3e 75 73 65 52 61 6e 64 6f 6d  ( !pC->useRandom
237f0 52 6f 77 69 64 20 29 7b 0a 20 20 20 20 20 20 72  Rowid ){.      r
23800 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
23810 4c 61 73 74 28 70 43 2d 3e 75 63 2e 70 43 75 72  Last(pC->uc.pCur
23820 73 6f 72 2c 20 26 72 65 73 29 3b 0a 20 20 20 20  sor, &res);.    
23830 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45    if( rc!=SQLITE
23840 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 67  _OK ){.        g
23850 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
23860 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 7d 0a  _error;.      }.
23870 20 20 20 20 20 20 69 66 28 20 72 65 73 20 29 7b        if( res ){
23880 0a 20 20 20 20 20 20 20 20 76 20 3d 20 31 3b 20  .        v = 1; 
23890 20 20 2f 2a 20 49 4d 50 3a 20 52 2d 36 31 39 31    /* IMP: R-6191
238a0 34 2d 34 38 30 37 34 20 2a 2f 0a 20 20 20 20 20  4-48074 */.     
238b0 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20   }else{.        
238c0 61 73 73 65 72 74 28 20 73 71 6c 69 74 65 33 42  assert( sqlite3B
238d0 74 72 65 65 43 75 72 73 6f 72 49 73 56 61 6c 69  treeCursorIsVali
238e0 64 28 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72  d(pC->uc.pCursor
238f0 29 20 29 3b 0a 20 20 20 20 20 20 20 20 76 20 3d  ) );.        v =
23900 20 73 71 6c 69 74 65 33 42 74 72 65 65 49 6e 74   sqlite3BtreeInt
23910 65 67 65 72 4b 65 79 28 70 43 2d 3e 75 63 2e 70  egerKey(pC->uc.p
23920 43 75 72 73 6f 72 29 3b 0a 20 20 20 20 20 20 20  Cursor);.       
23930 20 69 66 28 20 76 3e 3d 4d 41 58 5f 52 4f 57 49   if( v>=MAX_ROWI
23940 44 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 70  D ){.          p
23950 43 2d 3e 75 73 65 52 61 6e 64 6f 6d 52 6f 77 69  C->useRandomRowi
23960 64 20 3d 20 31 3b 0a 20 20 20 20 20 20 20 20 7d  d = 1;.        }
23970 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20  else{.          
23980 76 2b 2b 3b 20 20 20 2f 2a 20 49 4d 50 3a 20 52  v++;   /* IMP: R
23990 2d 32 39 35 33 38 2d 33 34 39 38 37 20 2a 2f 0a  -29538-34987 */.
239a0 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
239b0 7d 0a 20 20 20 20 7d 0a 0a 23 69 66 6e 64 65 66  }.    }..#ifndef
239c0 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54   SQLITE_OMIT_AUT
239d0 4f 49 4e 43 52 45 4d 45 4e 54 0a 20 20 20 20 69  OINCREMENT.    i
239e0 66 28 20 70 4f 70 2d 3e 70 33 20 29 7b 0a 20 20  f( pOp->p3 ){.  
239f0 20 20 20 20 2f 2a 20 41 73 73 65 72 74 20 74 68      /* Assert th
23a00 61 74 20 50 33 20 69 73 20 61 20 76 61 6c 69 64  at P3 is a valid
23a10 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 2e 20 2a 2f   memory cell. */
23a20 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70  .      assert( p
23a30 4f 70 2d 3e 70 33 3e 30 20 29 3b 0a 20 20 20 20  Op->p3>0 );.    
23a40 20 20 69 66 28 20 70 2d 3e 70 46 72 61 6d 65 20    if( p->pFrame 
23a50 29 7b 0a 20 20 20 20 20 20 20 20 66 6f 72 28 70  ){.        for(p
23a60 46 72 61 6d 65 3d 70 2d 3e 70 46 72 61 6d 65 3b  Frame=p->pFrame;
23a70 20 70 46 72 61 6d 65 2d 3e 70 50 61 72 65 6e 74   pFrame->pParent
23a80 3b 20 70 46 72 61 6d 65 3d 70 46 72 61 6d 65 2d  ; pFrame=pFrame-
23a90 3e 70 50 61 72 65 6e 74 29 3b 0a 20 20 20 20 20  >pParent);.     
23aa0 20 20 20 2f 2a 20 41 73 73 65 72 74 20 74 68 61     /* Assert tha
23ab0 74 20 50 33 20 69 73 20 61 20 76 61 6c 69 64 20  t P3 is a valid 
23ac0 6d 65 6d 6f 72 79 20 63 65 6c 6c 2e 20 2a 2f 0a  memory cell. */.
23ad0 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20          assert( 
23ae0 70 4f 70 2d 3e 70 33 3c 3d 70 46 72 61 6d 65 2d  pOp->p3<=pFrame-
23af0 3e 6e 4d 65 6d 20 29 3b 0a 20 20 20 20 20 20 20  >nMem );.       
23b00 20 70 4d 65 6d 20 3d 20 26 70 46 72 61 6d 65 2d   pMem = &pFrame-
23b10 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a  >aMem[pOp->p3];.
23b20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20        }else{.   
23b30 20 20 20 20 20 2f 2a 20 41 73 73 65 72 74 20 74       /* Assert t
23b40 68 61 74 20 50 33 20 69 73 20 61 20 76 61 6c 69  hat P3 is a vali
23b50 64 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 2e 20 2a  d memory cell. *
23b60 2f 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74  /.        assert
23b70 28 20 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e  ( pOp->p3<=(p->n
23b80 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73  Mem+1 - p->nCurs
23b90 6f 72 29 20 29 3b 0a 20 20 20 20 20 20 20 20 70  or) );.        p
23ba0 4d 65 6d 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  Mem = &aMem[pOp-
23bb0 3e 70 33 5d 3b 0a 20 20 20 20 20 20 20 20 6d 65  >p3];.        me
23bc0 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70  mAboutToChange(p
23bd0 2c 20 70 4d 65 6d 29 3b 0a 20 20 20 20 20 20 7d  , pMem);.      }
23be0 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 6d  .      assert( m
23bf0 65 6d 49 73 56 61 6c 69 64 28 70 4d 65 6d 29 20  emIsValid(pMem) 
23c00 29 3b 0a 0a 20 20 20 20 20 20 52 45 47 49 53 54  );..      REGIST
23c10 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 33  ER_TRACE(pOp->p3
23c20 2c 20 70 4d 65 6d 29 3b 0a 20 20 20 20 20 20 73  , pMem);.      s
23c30 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 49 6e 74  qlite3VdbeMemInt
23c40 65 67 65 72 69 66 79 28 70 4d 65 6d 29 3b 0a 20  egerify(pMem);. 
23c50 20 20 20 20 20 61 73 73 65 72 74 28 20 28 70 4d       assert( (pM
23c60 65 6d 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  em->flags & MEM_
23c70 49 6e 74 29 21 3d 30 20 29 3b 20 20 2f 2a 20 6d  Int)!=0 );  /* m
23c80 65 6d 28 50 33 29 20 68 6f 6c 64 73 20 61 6e 20  em(P3) holds an 
23c90 69 6e 74 65 67 65 72 20 2a 2f 0a 20 20 20 20 20  integer */.     
23ca0 20 69 66 28 20 70 4d 65 6d 2d 3e 75 2e 69 3d 3d   if( pMem->u.i==
23cb0 4d 41 58 5f 52 4f 57 49 44 20 7c 7c 20 70 43 2d  MAX_ROWID || pC-
23cc0 3e 75 73 65 52 61 6e 64 6f 6d 52 6f 77 69 64 20  >useRandomRowid 
23cd0 29 7b 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20  ){.        rc = 
23ce0 53 51 4c 49 54 45 5f 46 55 4c 4c 3b 20 20 20 2f  SQLITE_FULL;   /
23cf0 2a 20 49 4d 50 3a 20 52 2d 31 37 38 31 37 2d 30  * IMP: R-17817-0
23d00 30 36 33 30 20 2a 2f 0a 20 20 20 20 20 20 20 20  0630 */.        
23d10 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
23d20 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 7d  o_error;.      }
23d30 0a 20 20 20 20 20 20 69 66 28 20 76 3c 70 4d 65  .      if( v<pMe
23d40 6d 2d 3e 75 2e 69 2b 31 20 29 7b 0a 20 20 20 20  m->u.i+1 ){.    
23d50 20 20 20 20 76 20 3d 20 70 4d 65 6d 2d 3e 75 2e      v = pMem->u.
23d60 69 20 2b 20 31 3b 0a 20 20 20 20 20 20 7d 0a 20  i + 1;.      }. 
23d70 20 20 20 20 20 70 4d 65 6d 2d 3e 75 2e 69 20 3d       pMem->u.i =
23d80 20 76 3b 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66   v;.    }.#endif
23d90 0a 20 20 20 20 69 66 28 20 70 43 2d 3e 75 73 65  .    if( pC->use
23da0 52 61 6e 64 6f 6d 52 6f 77 69 64 20 29 7b 0a 20  RandomRowid ){. 
23db0 20 20 20 20 20 2f 2a 20 49 4d 50 4c 45 4d 45 4e       /* IMPLEMEN
23dc0 54 41 54 49 4f 4e 2d 4f 46 3a 20 52 2d 30 37 36  TATION-OF: R-076
23dd0 37 37 2d 34 31 38 38 31 20 49 66 20 74 68 65 20  77-41881 If the 
23de0 6c 61 72 67 65 73 74 20 52 4f 57 49 44 20 69 73  largest ROWID is
23df0 20 65 71 75 61 6c 20 74 6f 20 74 68 65 0a 20 20   equal to the.  
23e00 20 20 20 20 2a 2a 20 6c 61 72 67 65 73 74 20 70      ** largest p
23e10 6f 73 73 69 62 6c 65 20 69 6e 74 65 67 65 72 20  ossible integer 
23e20 28 39 32 32 33 33 37 32 30 33 36 38 35 34 37 37  (922337203685477
23e30 35 38 30 37 29 20 74 68 65 6e 20 74 68 65 20 64  5807) then the d
23e40 61 74 61 62 61 73 65 0a 20 20 20 20 20 20 2a 2a  atabase.      **
23e50 20 65 6e 67 69 6e 65 20 73 74 61 72 74 73 20 70   engine starts p
23e60 69 63 6b 69 6e 67 20 70 6f 73 69 74 69 76 65 20  icking positive 
23e70 63 61 6e 64 69 64 61 74 65 20 52 4f 57 49 44 73  candidate ROWIDs
23e80 20 61 74 20 72 61 6e 64 6f 6d 20 75 6e 74 69 6c   at random until
23e90 0a 20 20 20 20 20 20 2a 2a 20 69 74 20 66 69 6e  .      ** it fin
23ea0 64 73 20 6f 6e 65 20 74 68 61 74 20 69 73 20 6e  ds one that is n
23eb0 6f 74 20 70 72 65 76 69 6f 75 73 6c 79 20 75 73  ot previously us
23ec0 65 64 2e 20 2a 2f 0a 20 20 20 20 20 20 61 73 73  ed. */.      ass
23ed0 65 72 74 28 20 70 4f 70 2d 3e 70 33 3d 3d 30 20  ert( pOp->p3==0 
23ee0 29 3b 20 20 2f 2a 20 57 65 20 63 61 6e 6e 6f 74  );  /* We cannot
23ef0 20 62 65 20 69 6e 20 72 61 6e 64 6f 6d 20 72 6f   be in random ro
23f00 77 69 64 20 6d 6f 64 65 20 69 66 20 74 68 69 73  wid mode if this
23f10 20 69 73 0a 20 20 20 20 20 20 20 20 20 20 20 20   is.            
23f20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23f30 20 2a 2a 20 61 6e 20 41 55 54 4f 49 4e 43 52 45   ** an AUTOINCRE
23f40 4d 45 4e 54 20 74 61 62 6c 65 2e 20 2a 2f 0a 20  MENT table. */. 
23f50 20 20 20 20 20 63 6e 74 20 3d 20 30 3b 0a 20 20       cnt = 0;.  
23f60 20 20 20 20 64 6f 7b 0a 20 20 20 20 20 20 20 20      do{.        
23f70 73 71 6c 69 74 65 33 5f 72 61 6e 64 6f 6d 6e 65  sqlite3_randomne
23f80 73 73 28 73 69 7a 65 6f 66 28 76 29 2c 20 26 76  ss(sizeof(v), &v
23f90 29 3b 0a 20 20 20 20 20 20 20 20 76 20 26 3d 20  );.        v &= 
23fa0 28 4d 41 58 5f 52 4f 57 49 44 3e 3e 31 29 3b 20  (MAX_ROWID>>1); 
23fb0 76 2b 2b 3b 20 20 2f 2a 20 45 6e 73 75 72 65 20  v++;  /* Ensure 
23fc0 74 68 61 74 20 76 20 69 73 20 67 72 65 61 74 65  that v is greate
23fd0 72 20 74 68 61 6e 20 7a 65 72 6f 20 2a 2f 0a 20  r than zero */. 
23fe0 20 20 20 20 20 7d 77 68 69 6c 65 28 20 20 28 28       }while(  ((
23ff0 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
24000 65 4d 6f 76 65 74 6f 55 6e 70 61 63 6b 65 64 28  eMovetoUnpacked(
24010 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 2c 20  pC->uc.pCursor, 
24020 30 2c 20 28 75 36 34 29 76 2c 0a 20 20 20 20 20  0, (u64)v,.     
24030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24050 20 20 20 20 20 20 20 20 20 20 20 20 30 2c 20 26              0, &
24060 72 65 73 29 29 3d 3d 53 51 4c 49 54 45 5f 4f 4b  res))==SQLITE_OK
24070 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 26 26  ).            &&
24080 20 28 72 65 73 3d 3d 30 29 0a 20 20 20 20 20 20   (res==0).      
24090 20 20 20 20 20 20 26 26 20 28 2b 2b 63 6e 74 3c        && (++cnt<
240a0 31 30 30 29 29 3b 0a 20 20 20 20 20 20 69 66 28  100));.      if(
240b0 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74   rc ) goto abort
240c0 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20  _due_to_error;. 
240d0 20 20 20 20 20 69 66 28 20 72 65 73 3d 3d 30 20       if( res==0 
240e0 29 7b 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20  ){.        rc = 
240f0 53 51 4c 49 54 45 5f 46 55 4c 4c 3b 20 20 20 2f  SQLITE_FULL;   /
24100 2a 20 49 4d 50 3a 20 52 2d 33 38 32 31 39 2d 35  * IMP: R-38219-5
24110 33 30 30 32 20 2a 2f 0a 20 20 20 20 20 20 20 20  3002 */.        
24120 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
24130 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 7d  o_error;.      }
24140 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 76  .      assert( v
24150 3e 30 20 29 3b 20 20 2f 2a 20 45 56 3a 20 52 2d  >0 );  /* EV: R-
24160 34 30 38 31 32 2d 30 33 35 37 30 20 2a 2f 0a 20  40812-03570 */. 
24170 20 20 20 7d 0a 20 20 20 20 70 43 2d 3e 64 65 66     }.    pC->def
24180 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d 20 30 3b  erredMoveto = 0;
24190 0a 20 20 20 20 70 43 2d 3e 63 61 63 68 65 53 74  .    pC->cacheSt
241a0 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41  atus = CACHE_STA
241b0 4c 45 3b 0a 20 20 7d 0a 20 20 70 4f 75 74 2d 3e  LE;.  }.  pOut->
241c0 75 2e 69 20 3d 20 76 3b 0a 20 20 62 72 65 61 6b  u.i = v;.  break
241d0 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
241e0 49 6e 73 65 72 74 20 50 31 20 50 32 20 50 33 20  Insert P1 P2 P3 
241f0 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69  P4 P5.** Synopsi
24200 73 3a 20 69 6e 74 6b 65 79 3d 72 5b 50 33 5d 20  s: intkey=r[P3] 
24210 64 61 74 61 3d 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a  data=r[P2].**.**
24220 20 57 72 69 74 65 20 61 6e 20 65 6e 74 72 79 20   Write an entry 
24230 69 6e 74 6f 20 74 68 65 20 74 61 62 6c 65 20 6f  into the table o
24240 66 20 63 75 72 73 6f 72 20 50 31 2e 20 20 41 20  f cursor P1.  A 
24250 6e 65 77 20 65 6e 74 72 79 20 69 73 0a 2a 2a 20  new entry is.** 
24260 63 72 65 61 74 65 64 20 69 66 20 69 74 20 64 6f  created if it do
24270 65 73 6e 27 74 20 61 6c 72 65 61 64 79 20 65 78  esn't already ex
24280 69 73 74 20 6f 72 20 74 68 65 20 64 61 74 61 20  ist or the data 
24290 66 6f 72 20 61 6e 20 65 78 69 73 74 69 6e 67 0a  for an existing.
242a0 2a 2a 20 65 6e 74 72 79 20 69 73 20 6f 76 65 72  ** entry is over
242b0 77 72 69 74 74 65 6e 2e 20 20 54 68 65 20 64 61  written.  The da
242c0 74 61 20 69 73 20 74 68 65 20 76 61 6c 75 65 20  ta is the value 
242d0 4d 45 4d 5f 42 6c 6f 62 20 73 74 6f 72 65 64 20  MEM_Blob stored 
242e0 69 6e 20 72 65 67 69 73 74 65 72 0a 2a 2a 20 6e  in register.** n
242f0 75 6d 62 65 72 20 50 32 2e 20 54 68 65 20 6b 65  umber P2. The ke
24300 79 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 72  y is stored in r
24310 65 67 69 73 74 65 72 20 50 33 2e 20 54 68 65 20  egister P3. The 
24320 6b 65 79 20 6d 75 73 74 0a 2a 2a 20 62 65 20 61  key must.** be a
24330 20 4d 45 4d 5f 49 6e 74 2e 0a 2a 2a 0a 2a 2a 20   MEM_Int..**.** 
24340 49 66 20 74 68 65 20 4f 50 46 4c 41 47 5f 4e 43  If the OPFLAG_NC
24350 48 41 4e 47 45 20 66 6c 61 67 20 6f 66 20 50 35  HANGE flag of P5
24360 20 69 73 20 73 65 74 2c 20 74 68 65 6e 20 74 68   is set, then th
24370 65 20 72 6f 77 20 63 68 61 6e 67 65 20 63 6f 75  e row change cou
24380 6e 74 20 69 73 0a 2a 2a 20 69 6e 63 72 65 6d 65  nt is.** increme
24390 6e 74 65 64 20 28 6f 74 68 65 72 77 69 73 65 20  nted (otherwise 
243a0 6e 6f 74 29 2e 20 20 49 66 20 74 68 65 20 4f 50  not).  If the OP
243b0 46 4c 41 47 5f 4c 41 53 54 52 4f 57 49 44 20 66  FLAG_LASTROWID f
243c0 6c 61 67 20 6f 66 20 50 35 20 69 73 20 73 65 74  lag of P5 is set
243d0 2c 0a 2a 2a 20 74 68 65 6e 20 72 6f 77 69 64 20  ,.** then rowid 
243e0 69 73 20 73 74 6f 72 65 64 20 66 6f 72 20 73 75  is stored for su
243f0 62 73 65 71 75 65 6e 74 20 72 65 74 75 72 6e 20  bsequent return 
24400 62 79 20 74 68 65 0a 2a 2a 20 73 71 6c 69 74 65  by the.** sqlite
24410 33 5f 6c 61 73 74 5f 69 6e 73 65 72 74 5f 72 6f  3_last_insert_ro
24420 77 69 64 28 29 20 66 75 6e 63 74 69 6f 6e 20 28  wid() function (
24430 6f 74 68 65 72 77 69 73 65 20 69 74 20 69 73 20  otherwise it is 
24440 75 6e 6d 6f 64 69 66 69 65 64 29 2e 0a 2a 2a 0a  unmodified)..**.
24450 2a 2a 20 49 66 20 74 68 65 20 4f 50 46 4c 41 47  ** If the OPFLAG
24460 5f 55 53 45 53 45 45 4b 52 45 53 55 4c 54 20 66  _USESEEKRESULT f
24470 6c 61 67 20 6f 66 20 50 35 20 69 73 20 73 65 74  lag of P5 is set
24480 2c 20 74 68 65 20 69 6d 70 6c 65 6d 65 6e 74 61  , the implementa
24490 74 69 6f 6e 20 6d 69 67 68 74 0a 2a 2a 20 72 75  tion might.** ru
244a0 6e 20 66 61 73 74 65 72 20 62 79 20 61 76 6f 69  n faster by avoi
244b0 64 69 6e 67 20 61 6e 20 75 6e 6e 65 63 65 73 73  ding an unnecess
244c0 61 72 79 20 73 65 65 6b 20 6f 6e 20 63 75 72 73  ary seek on curs
244d0 6f 72 20 50 31 2e 20 20 48 6f 77 65 76 65 72 2c  or P1.  However,
244e0 0a 2a 2a 20 74 68 65 20 4f 50 46 4c 41 47 5f 55  .** the OPFLAG_U
244f0 53 45 53 45 45 4b 52 45 53 55 4c 54 20 66 6c 61  SESEEKRESULT fla
24500 67 20 6d 75 73 74 20 6f 6e 6c 79 20 62 65 20 73  g must only be s
24510 65 74 20 69 66 20 74 68 65 72 65 20 68 61 76 65  et if there have
24520 20 62 65 65 6e 20 6e 6f 20 70 72 69 6f 72 0a 2a   been no prior.*
24530 2a 20 73 65 65 6b 73 20 6f 6e 20 74 68 65 20 63  * seeks on the c
24540 75 72 73 6f 72 20 6f 72 20 69 66 20 74 68 65 20  ursor or if the 
24550 6d 6f 73 74 20 72 65 63 65 6e 74 20 73 65 65 6b  most recent seek
24560 20 75 73 65 64 20 61 20 6b 65 79 20 65 71 75 61   used a key equa
24570 6c 20 74 6f 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 49  l to P3..**.** I
24580 66 20 74 68 65 20 4f 50 46 4c 41 47 5f 49 53 55  f the OPFLAG_ISU
24590 50 44 41 54 45 20 66 6c 61 67 20 69 73 20 73 65  PDATE flag is se
245a0 74 2c 20 74 68 65 6e 20 74 68 69 73 20 6f 70 63  t, then this opc
245b0 6f 64 65 20 69 73 20 70 61 72 74 20 6f 66 20 61  ode is part of a
245c0 6e 0a 2a 2a 20 55 50 44 41 54 45 20 6f 70 65 72  n.** UPDATE oper
245d0 61 74 69 6f 6e 2e 20 20 4f 74 68 65 72 77 69 73  ation.  Otherwis
245e0 65 20 28 69 66 20 74 68 65 20 66 6c 61 67 20 69  e (if the flag i
245f0 73 20 63 6c 65 61 72 29 20 74 68 65 6e 20 74 68  s clear) then th
24600 69 73 20 6f 70 63 6f 64 65 0a 2a 2a 20 69 73 20  is opcode.** is 
24610 70 61 72 74 20 6f 66 20 61 6e 20 49 4e 53 45 52  part of an INSER
24620 54 20 6f 70 65 72 61 74 69 6f 6e 2e 20 20 54 68  T operation.  Th
24630 65 20 64 69 66 66 65 72 65 6e 63 65 20 69 73 20  e difference is 
24640 6f 6e 6c 79 20 69 6d 70 6f 72 74 61 6e 74 20 74  only important t
24650 6f 0a 2a 2a 20 74 68 65 20 75 70 64 61 74 65 20  o.** the update 
24660 68 6f 6f 6b 2e 0a 2a 2a 0a 2a 2a 20 50 61 72 61  hook..**.** Para
24670 6d 65 74 65 72 20 50 34 20 6d 61 79 20 70 6f 69  meter P4 may poi
24680 6e 74 20 74 6f 20 61 20 54 61 62 6c 65 20 73 74  nt to a Table st
24690 72 75 63 74 75 72 65 2c 20 6f 72 20 6d 61 79 20  ructure, or may 
246a0 62 65 20 4e 55 4c 4c 2e 20 49 66 20 69 74 20 69  be NULL. If it i
246b0 73 20 0a 2a 2a 20 6e 6f 74 20 4e 55 4c 4c 2c 20  s .** not NULL, 
246c0 74 68 65 6e 20 74 68 65 20 75 70 64 61 74 65 2d  then the update-
246d0 68 6f 6f 6b 20 28 73 71 6c 69 74 65 33 2e 78 55  hook (sqlite3.xU
246e0 70 64 61 74 65 43 61 6c 6c 62 61 63 6b 29 20 69  pdateCallback) i
246f0 73 20 69 6e 76 6f 6b 65 64 20 0a 2a 2a 20 66 6f  s invoked .** fo
24700 6c 6c 6f 77 69 6e 67 20 61 20 73 75 63 63 65 73  llowing a succes
24710 73 66 75 6c 20 69 6e 73 65 72 74 2e 0a 2a 2a 0a  sful insert..**.
24720 2a 2a 20 28 57 41 52 4e 49 4e 47 2f 54 4f 44 4f  ** (WARNING/TODO
24730 3a 20 49 66 20 50 31 20 69 73 20 61 20 70 73 65  : If P1 is a pse
24740 75 64 6f 2d 63 75 72 73 6f 72 20 61 6e 64 20 50  udo-cursor and P
24750 32 20 69 73 20 64 79 6e 61 6d 69 63 61 6c 6c 79  2 is dynamically
24760 0a 2a 2a 20 61 6c 6c 6f 63 61 74 65 64 2c 20 74  .** allocated, t
24770 68 65 6e 20 6f 77 6e 65 72 73 68 69 70 20 6f 66  hen ownership of
24780 20 50 32 20 69 73 20 74 72 61 6e 73 66 65 72 72   P2 is transferr
24790 65 64 20 74 6f 20 74 68 65 20 70 73 65 75 64 6f  ed to the pseudo
247a0 2d 63 75 72 73 6f 72 0a 2a 2a 20 61 6e 64 20 72  -cursor.** and r
247b0 65 67 69 73 74 65 72 20 50 32 20 62 65 63 6f 6d  egister P2 becom
247c0 65 73 20 65 70 68 65 6d 65 72 61 6c 2e 20 20 49  es ephemeral.  I
247d0 66 20 74 68 65 20 63 75 72 73 6f 72 20 69 73 20  f the cursor is 
247e0 63 68 61 6e 67 65 64 2c 20 74 68 65 0a 2a 2a 20  changed, the.** 
247f0 76 61 6c 75 65 20 6f 66 20 72 65 67 69 73 74 65  value of registe
24800 72 20 50 32 20 77 69 6c 6c 20 74 68 65 6e 20 63  r P2 will then c
24810 68 61 6e 67 65 2e 20 20 4d 61 6b 65 20 73 75 72  hange.  Make sur
24820 65 20 74 68 69 73 20 64 6f 65 73 20 6e 6f 74 0a  e this does not.
24830 2a 2a 20 63 61 75 73 65 20 61 6e 79 20 70 72 6f  ** cause any pro
24840 62 6c 65 6d 73 2e 29 0a 2a 2a 0a 2a 2a 20 54 68  blems.).**.** Th
24850 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 6f  is instruction o
24860 6e 6c 79 20 77 6f 72 6b 73 20 6f 6e 20 74 61 62  nly works on tab
24870 6c 65 73 2e 20 20 54 68 65 20 65 71 75 69 76 61  les.  The equiva
24880 6c 65 6e 74 20 69 6e 73 74 72 75 63 74 69 6f 6e  lent instruction
24890 0a 2a 2a 20 66 6f 72 20 69 6e 64 69 63 65 73 20  .** for indices 
248a0 69 73 20 4f 50 5f 49 64 78 49 6e 73 65 72 74 2e  is OP_IdxInsert.
248b0 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49  .*/./* Opcode: I
248c0 6e 73 65 72 74 49 6e 74 20 50 31 20 50 32 20 50  nsertInt P1 P2 P
248d0 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70  3 P4 P5.** Synop
248e0 73 69 73 3a 20 69 6e 74 6b 65 79 3d 50 33 20 64  sis: intkey=P3 d
248f0 61 74 61 3d 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20  ata=r[P2].**.** 
24900 54 68 69 73 20 77 6f 72 6b 73 20 65 78 61 63 74  This works exact
24910 6c 79 20 6c 69 6b 65 20 4f 50 5f 49 6e 73 65 72  ly like OP_Inser
24920 74 20 65 78 63 65 70 74 20 74 68 61 74 20 74 68  t except that th
24930 65 20 6b 65 79 20 69 73 20 74 68 65 0a 2a 2a 20  e key is the.** 
24940 69 6e 74 65 67 65 72 20 76 61 6c 75 65 20 50 33  integer value P3
24950 2c 20 6e 6f 74 20 74 68 65 20 76 61 6c 75 65 20  , not the value 
24960 6f 66 20 74 68 65 20 69 6e 74 65 67 65 72 20 73  of the integer s
24970 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74 65  tored in registe
24980 72 20 50 33 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  r P3..*/.case OP
24990 5f 49 6e 73 65 72 74 3a 20 0a 63 61 73 65 20 4f  _Insert: .case O
249a0 50 5f 49 6e 73 65 72 74 49 6e 74 3a 20 7b 0a 20  P_InsertInt: {. 
249b0 20 4d 65 6d 20 2a 70 44 61 74 61 3b 20 20 20 20   Mem *pData;    
249c0 20 20 20 2f 2a 20 4d 45 4d 20 63 65 6c 6c 20 68     /* MEM cell h
249d0 6f 6c 64 69 6e 67 20 64 61 74 61 20 66 6f 72 20  olding data for 
249e0 74 68 65 20 72 65 63 6f 72 64 20 74 6f 20 62 65  the record to be
249f0 20 69 6e 73 65 72 74 65 64 20 2a 2f 0a 20 20 4d   inserted */.  M
24a00 65 6d 20 2a 70 4b 65 79 3b 20 20 20 20 20 20 20  em *pKey;       
24a10 20 2f 2a 20 4d 45 4d 20 63 65 6c 6c 20 68 6f 6c   /* MEM cell hol
24a20 64 69 6e 67 20 6b 65 79 20 20 66 6f 72 20 74 68  ding key  for th
24a30 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 56 64  e record */.  Vd
24a40 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 20 20 20  beCursor *pC;   
24a50 2f 2a 20 43 75 72 73 6f 72 20 74 6f 20 74 61 62  /* Cursor to tab
24a60 6c 65 20 69 6e 74 6f 20 77 68 69 63 68 20 69 6e  le into which in
24a70 73 65 72 74 20 69 73 20 77 72 69 74 74 65 6e 20  sert is written 
24a80 2a 2f 0a 20 20 69 6e 74 20 73 65 65 6b 52 65 73  */.  int seekRes
24a90 75 6c 74 3b 20 20 20 2f 2a 20 52 65 73 75 6c 74  ult;   /* Result
24aa0 20 6f 66 20 70 72 69 6f 72 20 73 65 65 6b 20 6f   of prior seek o
24ab0 72 20 30 20 69 66 20 6e 6f 20 55 53 45 53 45 45  r 0 if no USESEE
24ac0 4b 52 45 53 55 4c 54 20 66 6c 61 67 20 2a 2f 0a  KRESULT flag */.
24ad0 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 44    const char *zD
24ae0 62 3b 20 20 2f 2a 20 64 61 74 61 62 61 73 65 20  b;  /* database 
24af0 6e 61 6d 65 20 2d 20 75 73 65 64 20 62 79 20 74  name - used by t
24b00 68 65 20 75 70 64 61 74 65 20 68 6f 6f 6b 20 2a  he update hook *
24b10 2f 0a 20 20 54 61 62 6c 65 20 2a 70 54 61 62 3b  /.  Table *pTab;
24b20 20 20 20 20 20 20 2f 2a 20 54 61 62 6c 65 20 73        /* Table s
24b30 74 72 75 63 74 75 72 65 20 2d 20 75 73 65 64 20  tructure - used 
24b40 62 79 20 75 70 64 61 74 65 20 61 6e 64 20 70 72  by update and pr
24b50 65 2d 75 70 64 61 74 65 20 68 6f 6f 6b 73 20 2a  e-update hooks *
24b60 2f 0a 20 20 69 6e 74 20 6f 70 3b 20 20 20 20 20  /.  int op;     
24b70 20 20 20 20 20 20 2f 2a 20 4f 70 63 6f 64 65 20        /* Opcode 
24b80 66 6f 72 20 75 70 64 61 74 65 20 68 6f 6f 6b 3a  for update hook:
24b90 20 53 51 4c 49 54 45 5f 55 50 44 41 54 45 20 6f   SQLITE_UPDATE o
24ba0 72 20 53 51 4c 49 54 45 5f 49 4e 53 45 52 54 20  r SQLITE_INSERT 
24bb0 2a 2f 0a 20 20 42 74 72 65 65 50 61 79 6c 6f 61  */.  BtreePayloa
24bc0 64 20 78 3b 20 20 20 2f 2a 20 50 61 79 6c 6f 61  d x;   /* Payloa
24bd0 64 20 74 6f 20 62 65 20 69 6e 73 65 72 74 65 64  d to be inserted
24be0 20 2a 2f 0a 0a 20 20 6f 70 20 3d 20 30 3b 0a 20   */..  op = 0;. 
24bf0 20 70 44 61 74 61 20 3d 20 26 61 4d 65 6d 5b 70   pData = &aMem[p
24c00 4f 70 2d 3e 70 32 5d 3b 0a 20 20 61 73 73 65 72  Op->p2];.  asser
24c10 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26  t( pOp->p1>=0 &&
24c20 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72   pOp->p1<p->nCur
24c30 73 6f 72 20 29 3b 0a 20 20 61 73 73 65 72 74 28  sor );.  assert(
24c40 20 6d 65 6d 49 73 56 61 6c 69 64 28 70 44 61 74   memIsValid(pDat
24c50 61 29 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e  a) );.  pC = p->
24c60 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  apCsr[pOp->p1];.
24c70 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20    assert( pC!=0 
24c80 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d  );.  assert( pC-
24c90 3e 65 43 75 72 54 79 70 65 3d 3d 43 55 52 54 59  >eCurType==CURTY
24ca0 50 45 5f 42 54 52 45 45 20 29 3b 0a 20 20 61 73  PE_BTREE );.  as
24cb0 73 65 72 74 28 20 70 43 2d 3e 75 63 2e 70 43 75  sert( pC->uc.pCu
24cc0 72 73 6f 72 21 3d 30 20 29 3b 0a 20 20 61 73 73  rsor!=0 );.  ass
24cd0 65 72 74 28 20 28 70 4f 70 2d 3e 70 35 20 26 20  ert( (pOp->p5 & 
24ce0 4f 50 46 4c 41 47 5f 49 53 4e 4f 4f 50 29 20 7c  OPFLAG_ISNOOP) |
24cf0 7c 20 70 43 2d 3e 69 73 54 61 62 6c 65 20 29 3b  | pC->isTable );
24d00 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
24d10 70 34 74 79 70 65 3d 3d 50 34 5f 54 41 42 4c 45  p4type==P4_TABLE
24d20 20 7c 7c 20 70 4f 70 2d 3e 70 34 74 79 70 65 3e   || pOp->p4type>
24d30 3d 50 34 5f 53 54 41 54 49 43 20 29 3b 0a 20 20  =P4_STATIC );.  
24d40 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70  REGISTER_TRACE(p
24d50 4f 70 2d 3e 70 32 2c 20 70 44 61 74 61 29 3b 0a  Op->p2, pData);.
24d60 0a 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f  .  if( pOp->opco
24d70 64 65 3d 3d 4f 50 5f 49 6e 73 65 72 74 20 29 7b  de==OP_Insert ){
24d80 0a 20 20 20 20 70 4b 65 79 20 3d 20 26 61 4d 65  .    pKey = &aMe
24d90 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 20 20  m[pOp->p3];.    
24da0 61 73 73 65 72 74 28 20 70 4b 65 79 2d 3e 66 6c  assert( pKey->fl
24db0 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 20 29 3b  ags & MEM_Int );
24dc0 0a 20 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d  .    assert( mem
24dd0 49 73 56 61 6c 69 64 28 70 4b 65 79 29 20 29 3b  IsValid(pKey) );
24de0 0a 20 20 20 20 52 45 47 49 53 54 45 52 5f 54 52  .    REGISTER_TR
24df0 41 43 45 28 70 4f 70 2d 3e 70 33 2c 20 70 4b 65  ACE(pOp->p3, pKe
24e00 79 29 3b 0a 20 20 20 20 78 2e 6e 4b 65 79 20 3d  y);.    x.nKey =
24e10 20 70 4b 65 79 2d 3e 75 2e 69 3b 0a 20 20 7d 65   pKey->u.i;.  }e
24e20 6c 73 65 7b 0a 20 20 20 20 61 73 73 65 72 74 28  lse{.    assert(
24e30 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50   pOp->opcode==OP
24e40 5f 49 6e 73 65 72 74 49 6e 74 20 29 3b 0a 20 20  _InsertInt );.  
24e50 20 20 78 2e 6e 4b 65 79 20 3d 20 70 4f 70 2d 3e    x.nKey = pOp->
24e60 70 33 3b 0a 20 20 7d 0a 0a 20 20 69 66 28 20 70  p3;.  }..  if( p
24e70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 54  Op->p4type==P4_T
24e80 41 42 4c 45 20 26 26 20 48 41 53 5f 55 50 44 41  ABLE && HAS_UPDA
24e90 54 45 5f 48 4f 4f 4b 28 64 62 29 20 29 7b 0a 20  TE_HOOK(db) ){. 
24ea0 20 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69     assert( pC->i
24eb0 44 62 3e 3d 30 20 29 3b 0a 20 20 20 20 7a 44 62  Db>=0 );.    zDb
24ec0 20 3d 20 64 62 2d 3e 61 44 62 5b 70 43 2d 3e 69   = db->aDb[pC->i
24ed0 44 62 5d 2e 7a 44 62 53 4e 61 6d 65 3b 0a 20 20  Db].zDbSName;.  
24ee0 20 20 70 54 61 62 20 3d 20 70 4f 70 2d 3e 70 34    pTab = pOp->p4
24ef0 2e 70 54 61 62 3b 0a 20 20 20 20 61 73 73 65 72  .pTab;.    asser
24f00 74 28 20 28 70 4f 70 2d 3e 70 35 20 26 20 4f 50  t( (pOp->p5 & OP
24f10 46 4c 41 47 5f 49 53 4e 4f 4f 50 29 20 7c 7c 20  FLAG_ISNOOP) || 
24f20 48 61 73 52 6f 77 69 64 28 70 54 61 62 29 20 29  HasRowid(pTab) )
24f30 3b 0a 20 20 20 20 6f 70 20 3d 20 28 28 70 4f 70  ;.    op = ((pOp
24f40 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 49 53  ->p5 & OPFLAG_IS
24f50 55 50 44 41 54 45 29 20 3f 20 53 51 4c 49 54 45  UPDATE) ? SQLITE
24f60 5f 55 50 44 41 54 45 20 3a 20 53 51 4c 49 54 45  _UPDATE : SQLITE
24f70 5f 49 4e 53 45 52 54 29 3b 0a 20 20 7d 65 6c 73  _INSERT);.  }els
24f80 65 7b 0a 20 20 20 20 70 54 61 62 20 3d 20 30 3b  e{.    pTab = 0;
24f90 20 2f 2a 20 4e 6f 74 20 6e 65 65 64 65 64 2e 20   /* Not needed. 
24fa0 20 53 69 6c 65 6e 63 65 20 61 20 63 6f 6d 70 69   Silence a compi
24fb0 6c 65 72 20 77 61 72 6e 69 6e 67 2e 20 2a 2f 0a  ler warning. */.
24fc0 20 20 20 20 7a 44 62 20 3d 20 30 3b 20 20 2f 2a      zDb = 0;  /*
24fd0 20 4e 6f 74 20 6e 65 65 64 65 64 2e 20 20 53 69   Not needed.  Si
24fe0 6c 65 6e 63 65 20 61 20 63 6f 6d 70 69 6c 65 72  lence a compiler
24ff0 20 77 61 72 6e 69 6e 67 2e 20 2a 2f 0a 20 20 7d   warning. */.  }
25000 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ..#ifdef SQLITE_
25010 45 4e 41 42 4c 45 5f 50 52 45 55 50 44 41 54 45  ENABLE_PREUPDATE
25020 5f 48 4f 4f 4b 0a 20 20 2f 2a 20 49 6e 76 6f 6b  _HOOK.  /* Invok
25030 65 20 74 68 65 20 70 72 65 2d 75 70 64 61 74 65  e the pre-update
25040 20 68 6f 6f 6b 2c 20 69 66 20 61 6e 79 20 2a 2f   hook, if any */
25050 0a 20 20 69 66 28 20 64 62 2d 3e 78 50 72 65 55  .  if( db->xPreU
25060 70 64 61 74 65 43 61 6c 6c 62 61 63 6b 20 0a 20  pdateCallback . 
25070 20 20 26 26 20 70 4f 70 2d 3e 70 34 74 79 70 65    && pOp->p4type
25080 3d 3d 50 34 5f 54 41 42 4c 45 0a 20 20 20 26 26  ==P4_TABLE.   &&
25090 20 21 28 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46   !(pOp->p5 & OPF
250a0 4c 41 47 5f 49 53 55 50 44 41 54 45 29 0a 20 20  LAG_ISUPDATE).  
250b0 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  ){.    sqlite3Vd
250c0 62 65 50 72 65 55 70 64 61 74 65 48 6f 6f 6b 28  bePreUpdateHook(
250d0 70 2c 20 70 43 2c 20 53 51 4c 49 54 45 5f 49 4e  p, pC, SQLITE_IN
250e0 53 45 52 54 2c 20 7a 44 62 2c 20 70 54 61 62 2c  SERT, zDb, pTab,
250f0 20 78 2e 6e 4b 65 79 2c 20 70 4f 70 2d 3e 70 32   x.nKey, pOp->p2
25100 29 3b 0a 20 20 7d 0a 20 20 69 66 28 20 70 4f 70  );.  }.  if( pOp
25110 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 49 53  ->p5 & OPFLAG_IS
25120 4e 4f 4f 50 20 29 20 62 72 65 61 6b 3b 0a 23 65  NOOP ) break;.#e
25130 6e 64 69 66 0a 0a 20 20 69 66 28 20 70 4f 70 2d  ndif..  if( pOp-
25140 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 4e 43 48  >p5 & OPFLAG_NCH
25150 41 4e 47 45 20 29 20 70 2d 3e 6e 43 68 61 6e 67  ANGE ) p->nChang
25160 65 2b 2b 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e  e++;.  if( pOp->
25170 70 35 20 26 20 4f 50 46 4c 41 47 5f 4c 41 53 54  p5 & OPFLAG_LAST
25180 52 4f 57 49 44 20 29 20 64 62 2d 3e 6c 61 73 74  ROWID ) db->last
25190 52 6f 77 69 64 20 3d 20 78 2e 6e 4b 65 79 3b 0a  Rowid = x.nKey;.
251a0 20 20 61 73 73 65 72 74 28 20 70 44 61 74 61 2d    assert( pData-
251b0 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f 42 6c  >flags & (MEM_Bl
251c0 6f 62 7c 4d 45 4d 5f 53 74 72 29 20 29 3b 0a 20  ob|MEM_Str) );. 
251d0 20 78 2e 70 44 61 74 61 20 3d 20 70 44 61 74 61   x.pData = pData
251e0 2d 3e 7a 3b 0a 20 20 78 2e 6e 44 61 74 61 20 3d  ->z;.  x.nData =
251f0 20 70 44 61 74 61 2d 3e 6e 3b 0a 20 20 73 65 65   pData->n;.  see
25200 6b 52 65 73 75 6c 74 20 3d 20 28 28 70 4f 70 2d  kResult = ((pOp-
25210 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 55 53 45  >p5 & OPFLAG_USE
25220 53 45 45 4b 52 45 53 55 4c 54 29 20 3f 20 70 43  SEEKRESULT) ? pC
25230 2d 3e 73 65 65 6b 52 65 73 75 6c 74 20 3a 20 30  ->seekResult : 0
25240 29 3b 0a 20 20 69 66 28 20 70 44 61 74 61 2d 3e  );.  if( pData->
25250 66 6c 61 67 73 20 26 20 4d 45 4d 5f 5a 65 72 6f  flags & MEM_Zero
25260 20 29 7b 0a 20 20 20 20 78 2e 6e 5a 65 72 6f 20   ){.    x.nZero 
25270 3d 20 70 44 61 74 61 2d 3e 75 2e 6e 5a 65 72 6f  = pData->u.nZero
25280 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 78  ;.  }else{.    x
25290 2e 6e 5a 65 72 6f 20 3d 20 30 3b 0a 20 20 7d 0a  .nZero = 0;.  }.
252a0 20 20 78 2e 70 4b 65 79 20 3d 20 30 3b 0a 20 20    x.pKey = 0;.  
252b0 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
252c0 65 49 6e 73 65 72 74 28 70 43 2d 3e 75 63 2e 70  eInsert(pC->uc.p
252d0 43 75 72 73 6f 72 2c 20 26 78 2c 0a 20 20 20 20  Cursor, &x,.    
252e0 20 20 28 70 4f 70 2d 3e 70 35 20 26 20 28 4f 50    (pOp->p5 & (OP
252f0 46 4c 41 47 5f 41 50 50 45 4e 44 7c 4f 50 46 4c  FLAG_APPEND|OPFL
25300 41 47 5f 53 41 56 45 50 4f 53 49 54 49 4f 4e 29  AG_SAVEPOSITION)
25310 29 2c 20 73 65 65 6b 52 65 73 75 6c 74 0a 20 20  ), seekResult.  
25320 29 3b 0a 20 20 70 43 2d 3e 64 65 66 65 72 72 65  );.  pC->deferre
25330 64 4d 6f 76 65 74 6f 20 3d 20 30 3b 0a 20 20 70  dMoveto = 0;.  p
25340 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d  C->cacheStatus =
25350 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 0a 20   CACHE_STALE;.. 
25360 20 2f 2a 20 49 6e 76 6f 6b 65 20 74 68 65 20 75   /* Invoke the u
25370 70 64 61 74 65 2d 68 6f 6f 6b 20 69 66 20 72 65  pdate-hook if re
25380 71 75 69 72 65 64 2e 20 2a 2f 0a 20 20 69 66 28  quired. */.  if(
25390 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74   rc ) goto abort
253a0 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20  _due_to_error;. 
253b0 20 69 66 28 20 64 62 2d 3e 78 55 70 64 61 74 65   if( db->xUpdate
253c0 43 61 6c 6c 62 61 63 6b 20 26 26 20 6f 70 20 29  Callback && op )
253d0 7b 0a 20 20 20 20 64 62 2d 3e 78 55 70 64 61 74  {.    db->xUpdat
253e0 65 43 61 6c 6c 62 61 63 6b 28 64 62 2d 3e 70 55  eCallback(db->pU
253f0 70 64 61 74 65 41 72 67 2c 20 6f 70 2c 20 7a 44  pdateArg, op, zD
25400 62 2c 20 70 54 61 62 2d 3e 7a 4e 61 6d 65 2c 20  b, pTab->zName, 
25410 78 2e 6e 4b 65 79 29 3b 0a 20 20 7d 0a 20 20 62  x.nKey);.  }.  b
25420 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
25430 64 65 3a 20 44 65 6c 65 74 65 20 50 31 20 50 32  de: Delete P1 P2
25440 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20   P3 P4 P5.**.** 
25450 44 65 6c 65 74 65 20 74 68 65 20 72 65 63 6f 72  Delete the recor
25460 64 20 61 74 20 77 68 69 63 68 20 74 68 65 20 50  d at which the P
25470 31 20 63 75 72 73 6f 72 20 69 73 20 63 75 72 72  1 cursor is curr
25480 65 6e 74 6c 79 20 70 6f 69 6e 74 69 6e 67 2e 0a  ently pointing..
25490 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 4f 50 46  **.** If the OPF
254a0 4c 41 47 5f 53 41 56 45 50 4f 53 49 54 49 4f 4e  LAG_SAVEPOSITION
254b0 20 62 69 74 20 6f 66 20 74 68 65 20 50 35 20 70   bit of the P5 p
254c0 61 72 61 6d 65 74 65 72 20 69 73 20 73 65 74 2c  arameter is set,
254d0 20 74 68 65 6e 0a 2a 2a 20 74 68 65 20 63 75 72   then.** the cur
254e0 73 6f 72 20 77 69 6c 6c 20 62 65 20 6c 65 66 74  sor will be left
254f0 20 70 6f 69 6e 74 69 6e 67 20 61 74 20 20 65 69   pointing at  ei
25500 74 68 65 72 20 74 68 65 20 6e 65 78 74 20 6f 72  ther the next or
25510 20 74 68 65 20 70 72 65 76 69 6f 75 73 0a 2a 2a   the previous.**
25520 20 72 65 63 6f 72 64 20 69 6e 20 74 68 65 20 74   record in the t
25530 61 62 6c 65 2e 20 49 66 20 69 74 20 69 73 20 6c  able. If it is l
25540 65 66 74 20 70 6f 69 6e 74 69 6e 67 20 61 74 20  eft pointing at 
25550 74 68 65 20 6e 65 78 74 20 72 65 63 6f 72 64 2c  the next record,
25560 20 74 68 65 6e 0a 2a 2a 20 74 68 65 20 6e 65 78   then.** the nex
25570 74 20 4e 65 78 74 20 69 6e 73 74 72 75 63 74 69  t Next instructi
25580 6f 6e 20 77 69 6c 6c 20 62 65 20 61 20 6e 6f 2d  on will be a no-
25590 6f 70 2e 20 41 73 20 61 20 72 65 73 75 6c 74 2c  op. As a result,
255a0 20 69 6e 20 74 68 69 73 20 63 61 73 65 0a 2a 2a   in this case.**
255b0 20 69 74 20 69 73 20 6f 6b 20 74 6f 20 64 65 6c   it is ok to del
255c0 65 74 65 20 61 20 72 65 63 6f 72 64 20 66 72 6f  ete a record fro
255d0 6d 20 77 69 74 68 69 6e 20 61 20 4e 65 78 74 20  m within a Next 
255e0 6c 6f 6f 70 2e 20 49 66 20 0a 2a 2a 20 4f 50 46  loop. If .** OPF
255f0 4c 41 47 5f 53 41 56 45 50 4f 53 49 54 49 4f 4e  LAG_SAVEPOSITION
25600 20 62 69 74 20 6f 66 20 50 35 20 69 73 20 63 6c   bit of P5 is cl
25610 65 61 72 2c 20 74 68 65 6e 20 74 68 65 20 63 75  ear, then the cu
25620 72 73 6f 72 20 77 69 6c 6c 20 62 65 0a 2a 2a 20  rsor will be.** 
25630 6c 65 66 74 20 69 6e 20 61 6e 20 75 6e 64 65 66  left in an undef
25640 69 6e 65 64 20 73 74 61 74 65 2e 0a 2a 2a 0a 2a  ined state..**.*
25650 2a 20 49 66 20 74 68 65 20 4f 50 46 4c 41 47 5f  * If the OPFLAG_
25660 41 55 58 44 45 4c 45 54 45 20 62 69 74 20 69 73  AUXDELETE bit is
25670 20 73 65 74 20 6f 6e 20 50 35 2c 20 74 68 61 74   set on P5, that
25680 20 69 6e 64 69 63 61 74 65 73 20 74 68 61 74 20   indicates that 
25690 74 68 69 73 0a 2a 2a 20 64 65 6c 65 74 65 20 6f  this.** delete o
256a0 6e 65 20 6f 66 20 73 65 76 65 72 61 6c 20 61 73  ne of several as
256b0 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 64 65  sociated with de
256c0 6c 65 74 69 6e 67 20 61 20 74 61 62 6c 65 20 72  leting a table r
256d0 6f 77 20 61 6e 64 20 61 6c 6c 20 69 74 73 0a 2a  ow and all its.*
256e0 2a 20 61 73 73 6f 63 69 61 74 65 64 20 69 6e 64  * associated ind
256f0 65 78 20 65 6e 74 72 69 65 73 2e 20 20 45 78 61  ex entries.  Exa
25700 63 74 6c 79 20 6f 6e 65 20 6f 66 20 74 68 6f 73  ctly one of thos
25710 65 20 64 65 6c 65 74 65 73 20 69 73 20 74 68 65  e deletes is the
25720 20 22 70 72 69 6d 61 72 79 22 0a 2a 2a 20 64 65   "primary".** de
25730 6c 65 74 65 2e 20 20 54 68 65 20 6f 74 68 65 72  lete.  The other
25740 73 20 61 72 65 20 61 6c 6c 20 6f 6e 20 4f 50 46  s are all on OPF
25750 4c 41 47 5f 46 4f 52 44 45 4c 45 54 45 20 63 75  LAG_FORDELETE cu
25760 72 73 6f 72 73 20 6f 72 20 65 6c 73 65 20 61 72  rsors or else ar
25770 65 0a 2a 2a 20 6d 61 72 6b 65 64 20 77 69 74 68  e.** marked with
25780 20 74 68 65 20 41 55 58 44 45 4c 45 54 45 20 66   the AUXDELETE f
25790 6c 61 67 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68  lag..**.** If th
257a0 65 20 4f 50 46 4c 41 47 5f 4e 43 48 41 4e 47 45  e OPFLAG_NCHANGE
257b0 20 66 6c 61 67 20 6f 66 20 50 32 20 28 4e 42 3a   flag of P2 (NB:
257c0 20 50 32 20 6e 6f 74 20 50 35 29 20 69 73 20 73   P2 not P5) is s
257d0 65 74 2c 20 74 68 65 6e 20 74 68 65 20 72 6f 77  et, then the row
257e0 0a 2a 2a 20 63 68 61 6e 67 65 20 63 6f 75 6e 74  .** change count
257f0 20 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 20   is incremented 
25800 28 6f 74 68 65 72 77 69 73 65 20 6e 6f 74 29 2e  (otherwise not).
25810 0a 2a 2a 0a 2a 2a 20 50 31 20 6d 75 73 74 20 6e  .**.** P1 must n
25820 6f 74 20 62 65 20 70 73 65 75 64 6f 2d 74 61 62  ot be pseudo-tab
25830 6c 65 2e 20 20 49 74 20 68 61 73 20 74 6f 20 62  le.  It has to b
25840 65 20 61 20 72 65 61 6c 20 74 61 62 6c 65 20 77  e a real table w
25850 69 74 68 0a 2a 2a 20 6d 75 6c 74 69 70 6c 65 20  ith.** multiple 
25860 72 6f 77 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50  rows..**.** If P
25870 34 20 69 73 20 6e 6f 74 20 4e 55 4c 4c 20 74 68  4 is not NULL th
25880 65 6e 20 69 74 20 70 6f 69 6e 74 73 20 74 6f 20  en it points to 
25890 61 20 54 61 62 6c 65 20 6f 62 6a 65 63 74 2e 20  a Table object. 
258a0 49 6e 20 74 68 69 73 20 63 61 73 65 20 65 69 74  In this case eit
258b0 68 65 72 20 0a 2a 2a 20 74 68 65 20 75 70 64 61  her .** the upda
258c0 74 65 20 6f 72 20 70 72 65 2d 75 70 64 61 74 65  te or pre-update
258d0 20 68 6f 6f 6b 2c 20 6f 72 20 62 6f 74 68 2c 20   hook, or both, 
258e0 6d 61 79 20 62 65 20 69 6e 76 6f 6b 65 64 2e 20  may be invoked. 
258f0 54 68 65 20 50 31 20 63 75 72 73 6f 72 20 6d 75  The P1 cursor mu
25900 73 74 0a 2a 2a 20 68 61 76 65 20 62 65 65 6e 20  st.** have been 
25910 70 6f 73 69 74 69 6f 6e 65 64 20 75 73 69 6e 67  positioned using
25920 20 4f 50 5f 4e 6f 74 46 6f 75 6e 64 20 70 72 69   OP_NotFound pri
25930 6f 72 20 74 6f 20 69 6e 76 6f 6b 69 6e 67 20 74  or to invoking t
25940 68 69 73 20 6f 70 63 6f 64 65 20 69 6e 20 0a 2a  his opcode in .*
25950 2a 20 74 68 69 73 20 63 61 73 65 2e 20 53 70 65  * this case. Spe
25960 63 69 66 69 63 61 6c 6c 79 2c 20 69 66 20 6f 6e  cifically, if on
25970 65 20 69 73 20 63 6f 6e 66 69 67 75 72 65 64 2c  e is configured,
25980 20 74 68 65 20 70 72 65 2d 75 70 64 61 74 65 20   the pre-update 
25990 68 6f 6f 6b 20 69 73 20 0a 2a 2a 20 69 6e 76 6f  hook is .** invo
259a0 6b 65 64 20 69 66 20 50 34 20 69 73 20 6e 6f 74  ked if P4 is not
259b0 20 4e 55 4c 4c 2e 20 54 68 65 20 75 70 64 61 74   NULL. The updat
259c0 65 2d 68 6f 6f 6b 20 69 73 20 69 6e 76 6f 6b 65  e-hook is invoke
259d0 64 20 69 66 20 6f 6e 65 20 69 73 20 63 6f 6e 66  d if one is conf
259e0 69 67 75 72 65 64 2c 20 0a 2a 2a 20 50 34 20 69  igured, .** P4 i
259f0 73 20 6e 6f 74 20 4e 55 4c 4c 2c 20 61 6e 64 20  s not NULL, and 
25a00 74 68 65 20 4f 50 46 4c 41 47 5f 4e 43 48 41 4e  the OPFLAG_NCHAN
25a10 47 45 20 66 6c 61 67 20 69 73 20 73 65 74 20 69  GE flag is set i
25a20 6e 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74  n P2..**.** If t
25a30 68 65 20 4f 50 46 4c 41 47 5f 49 53 55 50 44 41  he OPFLAG_ISUPDA
25a40 54 45 20 66 6c 61 67 20 69 73 20 73 65 74 20 69  TE flag is set i
25a50 6e 20 50 32 2c 20 74 68 65 6e 20 50 33 20 63 6f  n P2, then P3 co
25a60 6e 74 61 69 6e 73 20 74 68 65 20 61 64 64 72 65  ntains the addre
25a70 73 73 0a 2a 2a 20 6f 66 20 74 68 65 20 6d 65 6d  ss.** of the mem
25a80 6f 72 79 20 63 65 6c 6c 20 74 68 61 74 20 63 6f  ory cell that co
25a90 6e 74 61 69 6e 73 20 74 68 65 20 76 61 6c 75 65  ntains the value
25aa0 20 74 68 61 74 20 74 68 65 20 72 6f 77 69 64 20   that the rowid 
25ab0 6f 66 20 74 68 65 20 72 6f 77 20 77 69 6c 6c 0a  of the row will.
25ac0 2a 2a 20 62 65 20 73 65 74 20 74 6f 20 62 79 20  ** be set to by 
25ad0 74 68 65 20 75 70 64 61 74 65 2e 0a 2a 2f 0a 63  the update..*/.c
25ae0 61 73 65 20 4f 50 5f 44 65 6c 65 74 65 3a 20 7b  ase OP_Delete: {
25af0 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70  .  VdbeCursor *p
25b00 43 3b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20  C;.  const char 
25b10 2a 7a 44 62 3b 0a 20 20 54 61 62 6c 65 20 2a 70  *zDb;.  Table *p
25b20 54 61 62 3b 0a 20 20 69 6e 74 20 6f 70 66 6c 61  Tab;.  int opfla
25b30 67 73 3b 0a 0a 20 20 6f 70 66 6c 61 67 73 20 3d  gs;..  opflags =
25b40 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 61 73 73 65   pOp->p2;.  asse
25b50 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26  rt( pOp->p1>=0 &
25b60 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75  & pOp->p1<p->nCu
25b70 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70  rsor );.  pC = p
25b80 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d  ->apCsr[pOp->p1]
25b90 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d  ;.  assert( pC!=
25ba0 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  0 );.  assert( p
25bb0 43 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43 55 52  C->eCurType==CUR
25bc0 54 59 50 45 5f 42 54 52 45 45 20 29 3b 0a 20 20  TYPE_BTREE );.  
25bd0 61 73 73 65 72 74 28 20 70 43 2d 3e 75 63 2e 70  assert( pC->uc.p
25be0 43 75 72 73 6f 72 21 3d 30 20 29 3b 0a 20 20 61  Cursor!=0 );.  a
25bf0 73 73 65 72 74 28 20 70 43 2d 3e 64 65 66 65 72  ssert( pC->defer
25c00 72 65 64 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a  redMoveto==0 );.
25c10 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44  .#ifdef SQLITE_D
25c20 45 42 55 47 0a 20 20 69 66 28 20 70 4f 70 2d 3e  EBUG.  if( pOp->
25c30 70 34 74 79 70 65 3d 3d 50 34 5f 54 41 42 4c 45  p4type==P4_TABLE
25c40 20 26 26 20 48 61 73 52 6f 77 69 64 28 70 4f 70   && HasRowid(pOp
25c50 2d 3e 70 34 2e 70 54 61 62 29 20 26 26 20 70 4f  ->p4.pTab) && pO
25c60 70 2d 3e 70 35 3d 3d 30 20 29 7b 0a 20 20 20 20  p->p5==0 ){.    
25c70 2f 2a 20 49 66 20 70 35 20 69 73 20 7a 65 72 6f  /* If p5 is zero
25c80 2c 20 74 68 65 20 73 65 65 6b 20 6f 70 65 72 61  , the seek opera
25c90 74 69 6f 6e 20 74 68 61 74 20 70 6f 73 69 74 69  tion that positi
25ca0 6f 6e 65 64 20 74 68 65 20 63 75 72 73 6f 72 20  oned the cursor 
25cb0 70 72 69 6f 72 20 74 6f 0a 20 20 20 20 2a 2a 20  prior to.    ** 
25cc0 4f 50 5f 44 65 6c 65 74 65 20 77 69 6c 6c 20 68  OP_Delete will h
25cd0 61 76 65 20 61 6c 73 6f 20 73 65 74 20 74 68 65  ave also set the
25ce0 20 70 43 2d 3e 6d 6f 76 65 74 6f 54 61 72 67 65   pC->movetoTarge
25cf0 74 20 66 69 65 6c 64 20 74 6f 20 74 68 65 20 72  t field to the r
25d00 6f 77 69 64 20 6f 66 0a 20 20 20 20 2a 2a 20 74  owid of.    ** t
25d10 68 65 20 72 6f 77 20 74 68 61 74 20 69 73 20 62  he row that is b
25d20 65 69 6e 67 20 64 65 6c 65 74 65 64 20 2a 2f 0a  eing deleted */.
25d30 20 20 20 20 69 36 34 20 69 4b 65 79 20 3d 20 73      i64 iKey = s
25d40 71 6c 69 74 65 33 42 74 72 65 65 49 6e 74 65 67  qlite3BtreeInteg
25d50 65 72 4b 65 79 28 70 43 2d 3e 75 63 2e 70 43 75  erKey(pC->uc.pCu
25d60 72 73 6f 72 29 3b 0a 20 20 20 20 61 73 73 65 72  rsor);.    asser
25d70 74 28 20 70 43 2d 3e 6d 6f 76 65 74 6f 54 61 72  t( pC->movetoTar
25d80 67 65 74 3d 3d 69 4b 65 79 20 29 3b 0a 20 20 7d  get==iKey );.  }
25d90 0a 23 65 6e 64 69 66 0a 0a 20 20 2f 2a 20 49 66  .#endif..  /* If
25da0 20 74 68 65 20 75 70 64 61 74 65 2d 68 6f 6f 6b   the update-hook
25db0 20 6f 72 20 70 72 65 2d 75 70 64 61 74 65 2d 68   or pre-update-h
25dc0 6f 6f 6b 20 77 69 6c 6c 20 62 65 20 69 6e 76 6f  ook will be invo
25dd0 6b 65 64 2c 20 73 65 74 20 7a 44 62 20 74 6f 0a  ked, set zDb to.
25de0 20 20 2a 2a 20 74 68 65 20 6e 61 6d 65 20 6f 66    ** the name of
25df0 20 74 68 65 20 64 62 20 74 6f 20 70 61 73 73 20   the db to pass 
25e00 61 73 20 74 6f 20 69 74 2e 20 41 6c 73 6f 20 73  as to it. Also s
25e10 65 74 20 6c 6f 63 61 6c 20 70 54 61 62 20 74 6f  et local pTab to
25e20 20 61 20 63 6f 70 79 0a 20 20 2a 2a 20 6f 66 20   a copy.  ** of 
25e30 70 34 2e 70 54 61 62 2e 20 46 69 6e 61 6c 6c 79  p4.pTab. Finally
25e40 2c 20 69 66 20 70 35 20 69 73 20 74 72 75 65 2c  , if p5 is true,
25e50 20 69 6e 64 69 63 61 74 69 6e 67 20 74 68 61 74   indicating that
25e60 20 74 68 69 73 20 63 75 72 73 6f 72 20 77 61 73   this cursor was
25e70 0a 20 20 2a 2a 20 6c 61 73 74 20 6d 6f 76 65 64  .  ** last moved
25e80 20 77 69 74 68 20 4f 50 5f 4e 65 78 74 20 6f 72   with OP_Next or
25e90 20 4f 50 5f 50 72 65 76 2c 20 6e 6f 74 20 53 65   OP_Prev, not Se
25ea0 65 6b 20 6f 72 20 4e 6f 74 46 6f 75 6e 64 2c 20  ek or NotFound, 
25eb0 73 65 74 20 0a 20 20 2a 2a 20 56 64 62 65 43 75  set .  ** VdbeCu
25ec0 72 73 6f 72 2e 6d 6f 76 65 74 6f 54 61 72 67 65  rsor.movetoTarge
25ed0 74 20 74 6f 20 74 68 65 20 63 75 72 72 65 6e 74  t to the current
25ee0 20 72 6f 77 69 64 2e 20 20 2a 2f 0a 20 20 69 66   rowid.  */.  if
25ef0 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50  ( pOp->p4type==P
25f00 34 5f 54 41 42 4c 45 20 26 26 20 48 41 53 5f 55  4_TABLE && HAS_U
25f10 50 44 41 54 45 5f 48 4f 4f 4b 28 64 62 29 20 29  PDATE_HOOK(db) )
25f20 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 43  {.    assert( pC
25f30 2d 3e 69 44 62 3e 3d 30 20 29 3b 0a 20 20 20 20  ->iDb>=0 );.    
25f40 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 2e  assert( pOp->p4.
25f50 70 54 61 62 21 3d 30 20 29 3b 0a 20 20 20 20 7a  pTab!=0 );.    z
25f60 44 62 20 3d 20 64 62 2d 3e 61 44 62 5b 70 43 2d  Db = db->aDb[pC-
25f70 3e 69 44 62 5d 2e 7a 44 62 53 4e 61 6d 65 3b 0a  >iDb].zDbSName;.
25f80 20 20 20 20 70 54 61 62 20 3d 20 70 4f 70 2d 3e      pTab = pOp->
25f90 70 34 2e 70 54 61 62 3b 0a 20 20 20 20 69 66 28  p4.pTab;.    if(
25fa0 20 28 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c   (pOp->p5 & OPFL
25fb0 41 47 5f 53 41 56 45 50 4f 53 49 54 49 4f 4e 29  AG_SAVEPOSITION)
25fc0 21 3d 30 20 26 26 20 70 43 2d 3e 69 73 54 61 62  !=0 && pC->isTab
25fd0 6c 65 20 29 7b 0a 20 20 20 20 20 20 70 43 2d 3e  le ){.      pC->
25fe0 6d 6f 76 65 74 6f 54 61 72 67 65 74 20 3d 20 73  movetoTarget = s
25ff0 71 6c 69 74 65 33 42 74 72 65 65 49 6e 74 65 67  qlite3BtreeInteg
26000 65 72 4b 65 79 28 70 43 2d 3e 75 63 2e 70 43 75  erKey(pC->uc.pCu
26010 72 73 6f 72 29 3b 0a 20 20 20 20 7d 0a 20 20 7d  rsor);.    }.  }
26020 65 6c 73 65 7b 0a 20 20 20 20 7a 44 62 20 3d 20  else{.    zDb = 
26030 30 3b 20 20 20 2f 2a 20 4e 6f 74 20 6e 65 65 64  0;   /* Not need
26040 65 64 2e 20 20 53 69 6c 65 6e 63 65 20 61 20 63  ed.  Silence a c
26050 6f 6d 70 69 6c 65 72 20 77 61 72 6e 69 6e 67 2e  ompiler warning.
26060 20 2a 2f 0a 20 20 20 20 70 54 61 62 20 3d 20 30   */.    pTab = 0
26070 3b 20 20 2f 2a 20 4e 6f 74 20 6e 65 65 64 65 64  ;  /* Not needed
26080 2e 20 20 53 69 6c 65 6e 63 65 20 61 20 63 6f 6d  .  Silence a com
26090 70 69 6c 65 72 20 77 61 72 6e 69 6e 67 2e 20 2a  piler warning. *
260a0 2f 0a 20 20 7d 0a 0a 23 69 66 64 65 66 20 53 51  /.  }..#ifdef SQ
260b0 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 50 52 45 55  LITE_ENABLE_PREU
260c0 50 44 41 54 45 5f 48 4f 4f 4b 0a 20 20 2f 2a 20  PDATE_HOOK.  /* 
260d0 49 6e 76 6f 6b 65 20 74 68 65 20 70 72 65 2d 75  Invoke the pre-u
260e0 70 64 61 74 65 2d 68 6f 6f 6b 20 69 66 20 72 65  pdate-hook if re
260f0 71 75 69 72 65 64 2e 20 2a 2f 0a 20 20 69 66 28  quired. */.  if(
26100 20 64 62 2d 3e 78 50 72 65 55 70 64 61 74 65 43   db->xPreUpdateC
26110 61 6c 6c 62 61 63 6b 20 26 26 20 70 4f 70 2d 3e  allback && pOp->
26120 70 34 2e 70 54 61 62 20 29 7b 0a 20 20 20 20 61  p4.pTab ){.    a
26130 73 73 65 72 74 28 20 21 28 6f 70 66 6c 61 67 73  ssert( !(opflags
26140 20 26 20 4f 50 46 4c 41 47 5f 49 53 55 50 44 41   & OPFLAG_ISUPDA
26150 54 45 29 20 0a 20 20 20 20 20 20 20 20 20 7c 7c  TE) .         ||
26160 20 48 61 73 52 6f 77 69 64 28 70 54 61 62 29 3d   HasRowid(pTab)=
26170 3d 30 20 0a 20 20 20 20 20 20 20 20 20 7c 7c 20  =0 .         || 
26180 28 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 2e 66  (aMem[pOp->p3].f
26190 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29 20  lags & MEM_Int) 
261a0 0a 20 20 20 20 29 3b 0a 20 20 20 20 73 71 6c 69  .    );.    sqli
261b0 74 65 33 56 64 62 65 50 72 65 55 70 64 61 74 65  te3VdbePreUpdate
261c0 48 6f 6f 6b 28 70 2c 20 70 43 2c 0a 20 20 20 20  Hook(p, pC,.    
261d0 20 20 20 20 28 6f 70 66 6c 61 67 73 20 26 20 4f      (opflags & O
261e0 50 46 4c 41 47 5f 49 53 55 50 44 41 54 45 29 20  PFLAG_ISUPDATE) 
261f0 3f 20 53 51 4c 49 54 45 5f 55 50 44 41 54 45 20  ? SQLITE_UPDATE 
26200 3a 20 53 51 4c 49 54 45 5f 44 45 4c 45 54 45 2c  : SQLITE_DELETE,
26210 20 0a 20 20 20 20 20 20 20 20 7a 44 62 2c 20 70   .        zDb, p
26220 54 61 62 2c 20 70 43 2d 3e 6d 6f 76 65 74 6f 54  Tab, pC->movetoT
26230 61 72 67 65 74 2c 0a 20 20 20 20 20 20 20 20 70  arget,.        p
26240 4f 70 2d 3e 70 33 0a 20 20 20 20 29 3b 0a 20 20  Op->p3.    );.  
26250 7d 0a 20 20 69 66 28 20 6f 70 66 6c 61 67 73 20  }.  if( opflags 
26260 26 20 4f 50 46 4c 41 47 5f 49 53 4e 4f 4f 50 20  & OPFLAG_ISNOOP 
26270 29 20 62 72 65 61 6b 3b 0a 23 65 6e 64 69 66 0a  ) break;.#endif.
26280 20 0a 20 20 2f 2a 20 4f 6e 6c 79 20 66 6c 61 67   .  /* Only flag
26290 73 20 74 68 61 74 20 63 61 6e 20 62 65 20 73 65  s that can be se
262a0 74 20 61 72 65 20 53 41 56 45 50 4f 49 53 54 49  t are SAVEPOISTI
262b0 4f 4e 20 61 6e 64 20 41 55 58 44 45 4c 45 54 45  ON and AUXDELETE
262c0 20 2a 2f 20 0a 20 20 61 73 73 65 72 74 28 20 28   */ .  assert( (
262d0 70 4f 70 2d 3e 70 35 20 26 20 7e 28 4f 50 46 4c  pOp->p5 & ~(OPFL
262e0 41 47 5f 53 41 56 45 50 4f 53 49 54 49 4f 4e 7c  AG_SAVEPOSITION|
262f0 4f 50 46 4c 41 47 5f 41 55 58 44 45 4c 45 54 45  OPFLAG_AUXDELETE
26300 29 29 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  ))==0 );.  asser
26310 74 28 20 4f 50 46 4c 41 47 5f 53 41 56 45 50 4f  t( OPFLAG_SAVEPO
26320 53 49 54 49 4f 4e 3d 3d 42 54 52 45 45 5f 53 41  SITION==BTREE_SA
26330 56 45 50 4f 53 49 54 49 4f 4e 20 29 3b 0a 20 20  VEPOSITION );.  
26340 61 73 73 65 72 74 28 20 4f 50 46 4c 41 47 5f 41  assert( OPFLAG_A
26350 55 58 44 45 4c 45 54 45 3d 3d 42 54 52 45 45 5f  UXDELETE==BTREE_
26360 41 55 58 44 45 4c 45 54 45 20 29 3b 0a 0a 23 69  AUXDELETE );..#i
26370 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55  fdef SQLITE_DEBU
26380 47 0a 20 20 69 66 28 20 70 2d 3e 70 46 72 61 6d  G.  if( p->pFram
26390 65 3d 3d 30 20 29 7b 0a 20 20 20 20 69 66 28 20  e==0 ){.    if( 
263a0 70 43 2d 3e 69 73 45 70 68 65 6d 65 72 61 6c 3d  pC->isEphemeral=
263b0 3d 30 0a 20 20 20 20 20 20 20 20 26 26 20 28 70  =0.        && (p
263c0 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f  Op->p5 & OPFLAG_
263d0 41 55 58 44 45 4c 45 54 45 29 3d 3d 30 0a 20 20  AUXDELETE)==0.  
263e0 20 20 20 20 20 20 26 26 20 28 70 43 2d 3e 77 72        && (pC->wr
263f0 46 6c 61 67 20 26 20 4f 50 46 4c 41 47 5f 46 4f  Flag & OPFLAG_FO
26400 52 44 45 4c 45 54 45 29 3d 3d 30 0a 20 20 20 20  RDELETE)==0.    
26410 20 20 29 7b 0a 20 20 20 20 20 20 6e 45 78 74 72    ){.      nExtr
26420 61 44 65 6c 65 74 65 2b 2b 3b 0a 20 20 20 20 7d  aDelete++;.    }
26430 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 32  .    if( pOp->p2
26440 20 26 20 4f 50 46 4c 41 47 5f 4e 43 48 41 4e 47   & OPFLAG_NCHANG
26450 45 20 29 7b 0a 20 20 20 20 20 20 6e 45 78 74 72  E ){.      nExtr
26460 61 44 65 6c 65 74 65 2d 2d 3b 0a 20 20 20 20 7d  aDelete--;.    }
26470 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 20 20 72  .  }.#endif..  r
26480 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
26490 44 65 6c 65 74 65 28 70 43 2d 3e 75 63 2e 70 43  Delete(pC->uc.pC
264a0 75 72 73 6f 72 2c 20 70 4f 70 2d 3e 70 35 29 3b  ursor, pOp->p5);
264b0 0a 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74  .  pC->cacheStat
264c0 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45  us = CACHE_STALE
264d0 3b 0a 20 20 70 43 2d 3e 73 65 65 6b 52 65 73 75  ;.  pC->seekResu
264e0 6c 74 20 3d 20 30 3b 0a 20 20 69 66 28 20 72 63  lt = 0;.  if( rc
264f0 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75   ) goto abort_du
26500 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 0a 20 20 2f  e_to_error;..  /
26510 2a 20 49 6e 76 6f 6b 65 20 74 68 65 20 75 70 64  * Invoke the upd
26520 61 74 65 2d 68 6f 6f 6b 20 69 66 20 72 65 71 75  ate-hook if requ
26530 69 72 65 64 2e 20 2a 2f 0a 20 20 69 66 28 20 6f  ired. */.  if( o
26540 70 66 6c 61 67 73 20 26 20 4f 50 46 4c 41 47 5f  pflags & OPFLAG_
26550 4e 43 48 41 4e 47 45 20 29 7b 0a 20 20 20 20 70  NCHANGE ){.    p
26560 2d 3e 6e 43 68 61 6e 67 65 2b 2b 3b 0a 20 20 20  ->nChange++;.   
26570 20 69 66 28 20 64 62 2d 3e 78 55 70 64 61 74 65   if( db->xUpdate
26580 43 61 6c 6c 62 61 63 6b 20 26 26 20 48 61 73 52  Callback && HasR
26590 6f 77 69 64 28 70 54 61 62 29 20 29 7b 0a 20 20  owid(pTab) ){.  
265a0 20 20 20 20 64 62 2d 3e 78 55 70 64 61 74 65 43      db->xUpdateC
265b0 61 6c 6c 62 61 63 6b 28 64 62 2d 3e 70 55 70 64  allback(db->pUpd
265c0 61 74 65 41 72 67 2c 20 53 51 4c 49 54 45 5f 44  ateArg, SQLITE_D
265d0 45 4c 45 54 45 2c 20 7a 44 62 2c 20 70 54 61 62  ELETE, zDb, pTab
265e0 2d 3e 7a 4e 61 6d 65 2c 0a 20 20 20 20 20 20 20  ->zName,.       
265f0 20 20 20 70 43 2d 3e 6d 6f 76 65 74 6f 54 61 72     pC->movetoTar
26600 67 65 74 29 3b 0a 20 20 20 20 20 20 61 73 73 65  get);.      asse
26610 72 74 28 20 70 43 2d 3e 69 44 62 3e 3d 30 20 29  rt( pC->iDb>=0 )
26620 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 0a 20 20 62  ;.    }.  }..  b
26630 72 65 61 6b 3b 0a 7d 0a 2f 2a 20 4f 70 63 6f 64  reak;.}./* Opcod
26640 65 3a 20 52 65 73 65 74 43 6f 75 6e 74 20 2a 20  e: ResetCount * 
26650 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68  * * * *.**.** Th
26660 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 63  e value of the c
26670 68 61 6e 67 65 20 63 6f 75 6e 74 65 72 20 69 73  hange counter is
26680 20 63 6f 70 69 65 64 20 74 6f 20 74 68 65 20 64   copied to the d
26690 61 74 61 62 61 73 65 20 68 61 6e 64 6c 65 0a 2a  atabase handle.*
266a0 2a 20 63 68 61 6e 67 65 20 63 6f 75 6e 74 65 72  * change counter
266b0 20 28 72 65 74 75 72 6e 65 64 20 62 79 20 73 75   (returned by su
266c0 62 73 65 71 75 65 6e 74 20 63 61 6c 6c 73 20 74  bsequent calls t
266d0 6f 20 73 71 6c 69 74 65 33 5f 63 68 61 6e 67 65  o sqlite3_change
266e0 73 28 29 29 2e 0a 2a 2a 20 54 68 65 6e 20 74 68  s())..** Then th
266f0 65 20 56 4d 73 20 69 6e 74 65 72 6e 61 6c 20 63  e VMs internal c
26700 68 61 6e 67 65 20 63 6f 75 6e 74 65 72 20 72 65  hange counter re
26710 73 65 74 73 20 74 6f 20 30 2e 0a 2a 2a 20 54 68  sets to 0..** Th
26720 69 73 20 69 73 20 75 73 65 64 20 62 79 20 74 72  is is used by tr
26730 69 67 67 65 72 20 70 72 6f 67 72 61 6d 73 2e 0a  igger programs..
26740 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65 73 65 74  */.case OP_Reset
26750 43 6f 75 6e 74 3a 20 7b 0a 20 20 73 71 6c 69 74  Count: {.  sqlit
26760 65 33 56 64 62 65 53 65 74 43 68 61 6e 67 65 73  e3VdbeSetChanges
26770 28 64 62 2c 20 70 2d 3e 6e 43 68 61 6e 67 65 29  (db, p->nChange)
26780 3b 0a 20 20 70 2d 3e 6e 43 68 61 6e 67 65 20 3d  ;.  p->nChange =
26790 20 30 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a   0;.  break;.}..
267a0 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 6f 72 74 65  /* Opcode: Sorte
267b0 72 43 6f 6d 70 61 72 65 20 50 31 20 50 32 20 50  rCompare P1 P2 P
267c0 33 20 50 34 0a 2a 2a 20 53 79 6e 6f 70 73 69 73  3 P4.** Synopsis
267d0 3a 20 69 66 20 6b 65 79 28 50 31 29 21 3d 74 72  : if key(P1)!=tr
267e0 69 6d 28 72 5b 50 33 5d 2c 50 34 29 20 67 6f 74  im(r[P3],P4) got
267f0 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73  o P2.**.** P1 is
26800 20 61 20 73 6f 72 74 65 72 20 63 75 72 73 6f 72   a sorter cursor
26810 2e 20 54 68 69 73 20 69 6e 73 74 72 75 63 74 69  . This instructi
26820 6f 6e 20 63 6f 6d 70 61 72 65 73 20 61 20 70 72  on compares a pr
26830 65 66 69 78 20 6f 66 20 74 68 65 0a 2a 2a 20 72  efix of the.** r
26840 65 63 6f 72 64 20 62 6c 6f 62 20 69 6e 20 72 65  ecord blob in re
26850 67 69 73 74 65 72 20 50 33 20 61 67 61 69 6e 73  gister P3 agains
26860 74 20 61 20 70 72 65 66 69 78 20 6f 66 20 74 68  t a prefix of th
26870 65 20 65 6e 74 72 79 20 74 68 61 74 20 0a 2a 2a  e entry that .**
26880 20 74 68 65 20 73 6f 72 74 65 72 20 63 75 72 73   the sorter curs
26890 6f 72 20 63 75 72 72 65 6e 74 6c 79 20 70 6f 69  or currently poi
268a0 6e 74 73 20 74 6f 2e 20 20 4f 6e 6c 79 20 74 68  nts to.  Only th
268b0 65 20 66 69 72 73 74 20 50 34 20 66 69 65 6c 64  e first P4 field
268c0 73 0a 2a 2a 20 6f 66 20 72 5b 50 33 5d 20 61 6e  s.** of r[P3] an
268d0 64 20 74 68 65 20 73 6f 72 74 65 72 20 72 65 63  d the sorter rec
268e0 6f 72 64 20 61 72 65 20 63 6f 6d 70 61 72 65 64  ord are compared
268f0 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 65 69 74 68 65  ..**.** If eithe
26900 72 20 50 33 20 6f 72 20 74 68 65 20 73 6f 72 74  r P3 or the sort
26910 65 72 20 63 6f 6e 74 61 69 6e 73 20 61 20 4e 55  er contains a NU
26920 4c 4c 20 69 6e 20 6f 6e 65 20 6f 66 20 74 68 65  LL in one of the
26930 69 72 20 73 69 67 6e 69 66 69 63 61 6e 74 0a 2a  ir significant.*
26940 2a 20 66 69 65 6c 64 73 20 28 6e 6f 74 20 63 6f  * fields (not co
26950 75 6e 74 69 6e 67 20 74 68 65 20 50 34 20 66 69  unting the P4 fi
26960 65 6c 64 73 20 61 74 20 74 68 65 20 65 6e 64 20  elds at the end 
26970 77 68 69 63 68 20 61 72 65 20 69 67 6e 6f 72 65  which are ignore
26980 64 29 20 74 68 65 6e 0a 2a 2a 20 74 68 65 20 63  d) then.** the c
26990 6f 6d 70 61 72 69 73 6f 6e 20 69 73 20 61 73 73  omparison is ass
269a0 75 6d 65 64 20 74 6f 20 62 65 20 65 71 75 61 6c  umed to be equal
269b0 2e 0a 2a 2a 0a 2a 2a 20 46 61 6c 6c 20 74 68 72  ..**.** Fall thr
269c0 6f 75 67 68 20 74 6f 20 6e 65 78 74 20 69 6e 73  ough to next ins
269d0 74 72 75 63 74 69 6f 6e 20 69 66 20 74 68 65 20  truction if the 
269e0 74 77 6f 20 72 65 63 6f 72 64 73 20 63 6f 6d 70  two records comp
269f0 61 72 65 20 65 71 75 61 6c 20 74 6f 0a 2a 2a 20  are equal to.** 
26a00 65 61 63 68 20 6f 74 68 65 72 2e 20 20 4a 75 6d  each other.  Jum
26a10 70 20 74 6f 20 50 32 20 69 66 20 74 68 65 79 20  p to P2 if they 
26a20 61 72 65 20 64 69 66 66 65 72 65 6e 74 2e 0a 2a  are different..*
26a30 2f 0a 63 61 73 65 20 4f 50 5f 53 6f 72 74 65 72  /.case OP_Sorter
26a40 43 6f 6d 70 61 72 65 3a 20 7b 0a 20 20 56 64 62  Compare: {.  Vdb
26a50 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 69  eCursor *pC;.  i
26a60 6e 74 20 72 65 73 3b 0a 20 20 69 6e 74 20 6e 4b  nt res;.  int nK
26a70 65 79 43 6f 6c 3b 0a 0a 20 20 70 43 20 3d 20 70  eyCol;..  pC = p
26a80 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d  ->apCsr[pOp->p1]
26a90 3b 0a 20 20 61 73 73 65 72 74 28 20 69 73 53 6f  ;.  assert( isSo
26aa0 72 74 65 72 28 70 43 29 20 29 3b 0a 20 20 61 73  rter(pC) );.  as
26ab0 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70  sert( pOp->p4typ
26ac0 65 3d 3d 50 34 5f 49 4e 54 33 32 20 29 3b 0a 20  e==P4_INT32 );. 
26ad0 20 70 49 6e 33 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn3 = &aMem[pO
26ae0 70 2d 3e 70 33 5d 3b 0a 20 20 6e 4b 65 79 43 6f  p->p3];.  nKeyCo
26af0 6c 20 3d 20 70 4f 70 2d 3e 70 34 2e 69 3b 0a 20  l = pOp->p4.i;. 
26b00 20 72 65 73 20 3d 20 30 3b 0a 20 20 72 63 20 3d   res = 0;.  rc =
26b10 20 73 71 6c 69 74 65 33 56 64 62 65 53 6f 72 74   sqlite3VdbeSort
26b20 65 72 43 6f 6d 70 61 72 65 28 70 43 2c 20 70 49  erCompare(pC, pI
26b30 6e 33 2c 20 6e 4b 65 79 43 6f 6c 2c 20 26 72 65  n3, nKeyCol, &re
26b40 73 29 3b 0a 20 20 56 64 62 65 42 72 61 6e 63 68  s);.  VdbeBranch
26b50 54 61 6b 65 6e 28 72 65 73 21 3d 30 2c 32 29 3b  Taken(res!=0,2);
26b60 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f  .  if( rc ) goto
26b70 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
26b80 72 6f 72 3b 0a 20 20 69 66 28 20 72 65 73 20 29  ror;.  if( res )
26b90 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32   goto jump_to_p2
26ba0 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 3b 0a 0a 2f  ;.  break;.};../
26bb0 2a 20 4f 70 63 6f 64 65 3a 20 53 6f 72 74 65 72  * Opcode: Sorter
26bc0 44 61 74 61 20 50 31 20 50 32 20 50 33 20 2a 20  Data P1 P2 P3 * 
26bd0 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72  *.** Synopsis: r
26be0 5b 50 32 5d 3d 64 61 74 61 0a 2a 2a 0a 2a 2a 20  [P2]=data.**.** 
26bf0 57 72 69 74 65 20 69 6e 74 6f 20 72 65 67 69 73  Write into regis
26c00 74 65 72 20 50 32 20 74 68 65 20 63 75 72 72 65  ter P2 the curre
26c10 6e 74 20 73 6f 72 74 65 72 20 64 61 74 61 20 66  nt sorter data f
26c20 6f 72 20 73 6f 72 74 65 72 20 63 75 72 73 6f 72  or sorter cursor
26c30 20 50 31 2e 0a 2a 2a 20 54 68 65 6e 20 63 6c 65   P1..** Then cle
26c40 61 72 20 74 68 65 20 63 6f 6c 75 6d 6e 20 68 65  ar the column he
26c50 61 64 65 72 20 63 61 63 68 65 20 6f 6e 20 63 75  ader cache on cu
26c60 72 73 6f 72 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 54  rsor P3..**.** T
26c70 68 69 73 20 6f 70 63 6f 64 65 20 69 73 20 6e 6f  his opcode is no
26c80 72 6d 61 6c 6c 79 20 75 73 65 20 74 6f 20 6d 6f  rmally use to mo
26c90 76 65 20 61 20 72 65 63 6f 72 64 20 6f 75 74 20  ve a record out 
26ca0 6f 66 20 74 68 65 20 73 6f 72 74 65 72 20 61 6e  of the sorter an
26cb0 64 20 69 6e 74 6f 0a 2a 2a 20 61 20 72 65 67 69  d into.** a regi
26cc0 73 74 65 72 20 74 68 61 74 20 69 73 20 74 68 65  ster that is the
26cd0 20 73 6f 75 72 63 65 20 66 6f 72 20 61 20 70 73   source for a ps
26ce0 65 75 64 6f 2d 74 61 62 6c 65 20 63 75 72 73 6f  eudo-table curso
26cf0 72 20 63 72 65 61 74 65 64 20 75 73 69 6e 67 0a  r created using.
26d00 2a 2a 20 4f 70 65 6e 50 73 65 75 64 6f 2e 20 20  ** OpenPseudo.  
26d10 54 68 61 74 20 70 73 65 75 64 6f 2d 74 61 62 6c  That pseudo-tabl
26d20 65 20 63 75 72 73 6f 72 20 69 73 20 74 68 65 20  e cursor is the 
26d30 6f 6e 65 20 74 68 61 74 20 69 73 20 69 64 65 6e  one that is iden
26d40 74 69 66 69 65 64 20 62 79 0a 2a 2a 20 70 61 72  tified by.** par
26d50 61 6d 65 74 65 72 20 50 33 2e 20 20 43 6c 65 61  ameter P3.  Clea
26d60 72 69 6e 67 20 74 68 65 20 50 33 20 63 6f 6c 75  ring the P3 colu
26d70 6d 6e 20 63 61 63 68 65 20 61 73 20 70 61 72 74  mn cache as part
26d80 20 6f 66 20 74 68 69 73 20 6f 70 63 6f 64 65 20   of this opcode 
26d90 73 61 76 65 73 0a 2a 2a 20 75 73 20 66 72 6f 6d  saves.** us from
26da0 20 68 61 76 69 6e 67 20 74 6f 20 69 73 73 75 65   having to issue
26db0 20 61 20 73 65 70 61 72 61 74 65 20 4e 75 6c 6c   a separate Null
26dc0 52 6f 77 20 69 6e 73 74 72 75 63 74 69 6f 6e 20  Row instruction 
26dd0 74 6f 20 63 6c 65 61 72 20 74 68 61 74 20 63 61  to clear that ca
26de0 63 68 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  che..*/.case OP_
26df0 53 6f 72 74 65 72 44 61 74 61 3a 20 7b 0a 20 20  SorterData: {.  
26e00 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a  VdbeCursor *pC;.
26e10 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b  .  pOut = &aMem[
26e20 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 70 43 20 3d  pOp->p2];.  pC =
26e30 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70   p->apCsr[pOp->p
26e40 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 69 73  1];.  assert( is
26e50 53 6f 72 74 65 72 28 70 43 29 20 29 3b 0a 20 20  Sorter(pC) );.  
26e60 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  rc = sqlite3Vdbe
26e70 53 6f 72 74 65 72 52 6f 77 6b 65 79 28 70 43 2c  SorterRowkey(pC,
26e80 20 70 4f 75 74 29 3b 0a 20 20 61 73 73 65 72 74   pOut);.  assert
26e90 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc!=SQLITE_OK 
26ea0 7c 7c 20 28 70 4f 75 74 2d 3e 66 6c 61 67 73 20  || (pOut->flags 
26eb0 26 20 4d 45 4d 5f 42 6c 6f 62 29 20 29 3b 0a 20  & MEM_Blob) );. 
26ec0 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
26ed0 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70  >=0 && pOp->p1<p
26ee0 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 69  ->nCursor );.  i
26ef0 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f  f( rc ) goto abo
26f00 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
26f10 0a 20 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d  .  p->apCsr[pOp-
26f20 3e 70 33 5d 2d 3e 63 61 63 68 65 53 74 61 74 75  >p3]->cacheStatu
26f30 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b  s = CACHE_STALE;
26f40 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
26f50 4f 70 63 6f 64 65 3a 20 52 6f 77 44 61 74 61 20  Opcode: RowData 
26f60 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20  P1 P2 P3 * *.** 
26f70 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d  Synopsis: r[P2]=
26f80 64 61 74 61 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65  data.**.** Write
26f90 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50   into register P
26fa0 32 20 74 68 65 20 63 6f 6d 70 6c 65 74 65 20 72  2 the complete r
26fb0 6f 77 20 63 6f 6e 74 65 6e 74 20 66 6f 72 20 74  ow content for t
26fc0 68 65 20 72 6f 77 20 61 74 20 0a 2a 2a 20 77 68  he row at .** wh
26fd0 69 63 68 20 63 75 72 73 6f 72 20 50 31 20 69 73  ich cursor P1 is
26fe0 20 63 75 72 72 65 6e 74 6c 79 20 70 6f 69 6e 74   currently point
26ff0 69 6e 67 2e 0a 2a 2a 20 54 68 65 72 65 20 69 73  ing..** There is
27000 20 6e 6f 20 69 6e 74 65 72 70 72 65 74 61 74 69   no interpretati
27010 6f 6e 20 6f 66 20 74 68 65 20 64 61 74 61 2e 20  on of the data. 
27020 20 0a 2a 2a 20 49 74 20 69 73 20 6a 75 73 74 20   .** It is just 
27030 63 6f 70 69 65 64 20 6f 6e 74 6f 20 74 68 65 20  copied onto the 
27040 50 32 20 72 65 67 69 73 74 65 72 20 65 78 61 63  P2 register exac
27050 74 6c 79 20 61 73 20 0a 2a 2a 20 69 74 20 69 73  tly as .** it is
27060 20 66 6f 75 6e 64 20 69 6e 20 74 68 65 20 64 61   found in the da
27070 74 61 62 61 73 65 20 66 69 6c 65 2e 0a 2a 2a 0a  tabase file..**.
27080 2a 2a 20 49 66 20 63 75 72 73 6f 72 20 50 31 20  ** If cursor P1 
27090 69 73 20 61 6e 20 69 6e 64 65 78 2c 20 74 68 65  is an index, the
270a0 6e 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 69 73  n the content is
270b0 20 74 68 65 20 6b 65 79 20 6f 66 20 74 68 65 20   the key of the 
270c0 72 6f 77 2e 0a 2a 2a 20 49 66 20 63 75 72 73 6f  row..** If curso
270d0 72 20 50 32 20 69 73 20 61 20 74 61 62 6c 65 2c  r P2 is a table,
270e0 20 74 68 65 6e 20 74 68 65 20 63 6f 6e 74 65 6e   then the conten
270f0 74 20 65 78 74 72 61 63 74 65 64 20 69 73 20 74  t extracted is t
27100 68 65 20 64 61 74 61 2e 0a 2a 2a 0a 2a 2a 20 49  he data..**.** I
27110 66 20 74 68 65 20 50 31 20 63 75 72 73 6f 72 20  f the P1 cursor 
27120 6d 75 73 74 20 62 65 20 70 6f 69 6e 74 69 6e 67  must be pointing
27130 20 74 6f 20 61 20 76 61 6c 69 64 20 72 6f 77 20   to a valid row 
27140 28 6e 6f 74 20 61 20 4e 55 4c 4c 20 72 6f 77 29  (not a NULL row)
27150 0a 2a 2a 20 6f 66 20 61 20 72 65 61 6c 20 74 61  .** of a real ta
27160 62 6c 65 2c 20 6e 6f 74 20 61 20 70 73 65 75 64  ble, not a pseud
27170 6f 2d 74 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 49  o-table..**.** I
27180 66 20 50 33 21 3d 30 20 74 68 65 6e 20 74 68 69  f P3!=0 then thi
27190 73 20 6f 70 63 6f 64 65 20 69 73 20 61 6c 6c 6f  s opcode is allo
271a0 77 65 64 20 74 6f 20 6d 61 6b 65 20 61 6e 20 65  wed to make an e
271b0 70 68 65 72 6d 65 72 61 6c 20 70 6f 69 6e 74 65  phermeral pointe
271c0 72 0a 2a 2a 20 69 6e 74 6f 20 74 68 65 20 64 61  r.** into the da
271d0 74 61 62 61 73 65 20 70 61 67 65 2e 20 20 54 68  tabase page.  Th
271e0 61 74 20 6d 65 61 6e 73 20 74 68 61 74 20 74 68  at means that th
271f0 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 74 68 65  e content of the
27200 20 6f 75 74 70 75 74 0a 2a 2a 20 72 65 67 69 73   output.** regis
27210 74 65 72 20 77 69 6c 6c 20 62 65 20 69 6e 76 61  ter will be inva
27220 6c 69 64 61 74 65 64 20 61 73 20 73 6f 6f 6e 20  lidated as soon 
27230 61 73 20 74 68 65 20 63 75 72 73 6f 72 20 6d 6f  as the cursor mo
27240 76 65 73 20 2d 20 69 6e 63 6c 75 64 69 6e 67 0a  ves - including.
27250 2a 2a 20 6d 6f 76 65 73 20 63 61 75 73 65 64 20  ** moves caused 
27260 62 79 20 6f 74 68 65 72 20 63 75 72 73 6f 72 73  by other cursors
27270 20 74 68 61 74 20 22 73 61 76 65 22 20 74 68 65   that "save" the
27280 20 74 68 65 20 63 75 72 72 65 6e 74 20 63 75 72   the current cur
27290 73 6f 72 73 0a 2a 2a 20 70 6f 73 69 74 69 6f 6e  sors.** position
272a0 20 69 6e 20 6f 72 64 65 72 20 74 68 61 74 20 74   in order that t
272b0 68 65 79 20 63 61 6e 20 77 72 69 74 65 20 74 6f  hey can write to
272c0 20 74 68 65 20 73 61 6d 65 20 74 61 62 6c 65 2e   the same table.
272d0 20 20 49 66 20 50 33 3d 3d 30 0a 2a 2a 20 74 68    If P3==0.** th
272e0 65 6e 20 61 20 63 6f 70 79 20 6f 66 20 74 68 65  en a copy of the
272f0 20 64 61 74 61 20 69 73 20 6d 61 64 65 20 69 6e   data is made in
27300 74 6f 20 6d 65 6d 6f 72 79 2e 20 20 50 33 21 3d  to memory.  P3!=
27310 30 20 69 73 20 66 61 73 74 65 72 2c 20 62 75 74  0 is faster, but
27320 0a 2a 2a 20 50 33 3d 3d 30 20 69 73 20 73 61 66  .** P3==0 is saf
27330 65 72 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 33 21  er..**.** If P3!
27340 3d 30 20 74 68 65 6e 20 74 68 65 20 63 6f 6e 74  =0 then the cont
27350 65 6e 74 20 6f 66 20 74 68 65 20 50 32 20 72 65  ent of the P2 re
27360 67 69 73 74 65 72 20 69 73 20 75 6e 73 75 69 74  gister is unsuit
27370 61 62 6c 65 20 66 6f 72 20 75 73 65 0a 2a 2a 20  able for use.** 
27380 69 6e 20 4f 50 5f 52 65 73 75 6c 74 20 61 6e 64  in OP_Result and
27390 20 61 6e 79 20 4f 50 5f 52 65 73 75 6c 74 20 77   any OP_Result w
273a0 69 6c 6c 20 69 6e 76 61 6c 69 64 61 74 65 20 74  ill invalidate t
273b0 68 65 20 50 32 20 72 65 67 69 73 74 65 72 20 63  he P2 register c
273c0 6f 6e 74 65 6e 74 2e 0a 2a 2a 20 54 68 65 20 50  ontent..** The P
273d0 32 20 72 65 67 69 73 74 65 72 20 63 6f 6e 74 65  2 register conte
273e0 6e 74 20 69 73 20 69 6e 76 61 6c 69 64 61 74 65  nt is invalidate
273f0 64 20 62 79 20 6f 70 63 6f 64 65 73 20 6c 69 6b  d by opcodes lik
27400 65 20 4f 50 5f 46 75 6e 63 74 69 6f 6e 20 6f 72  e OP_Function or
27410 0a 2a 2a 20 62 79 20 61 6e 79 20 75 73 65 20 6f  .** by any use o
27420 66 20 61 6e 6f 74 68 65 72 20 63 75 72 73 6f 72  f another cursor
27430 20 70 6f 69 6e 74 69 6e 67 20 74 6f 20 74 68 65   pointing to the
27440 20 73 61 6d 65 20 74 61 62 6c 65 2e 0a 2a 2f 0a   same table..*/.
27450 63 61 73 65 20 4f 50 5f 52 6f 77 44 61 74 61 3a  case OP_RowData:
27460 20 7b 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20   {.  VdbeCursor 
27470 2a 70 43 3b 0a 20 20 42 74 43 75 72 73 6f 72 20  *pC;.  BtCursor 
27480 2a 70 43 72 73 72 3b 0a 20 20 75 33 32 20 6e 3b  *pCrsr;.  u32 n;
27490 0a 0a 20 20 70 4f 75 74 20 3d 20 6f 75 74 32 50  ..  pOut = out2P
274a0 72 65 72 65 6c 65 61 73 65 28 70 2c 20 70 4f 70  rerelease(p, pOp
274b0 29 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f  );..  assert( pO
274c0 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d  p->p1>=0 && pOp-
274d0 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29  >p1<p->nCursor )
274e0 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73  ;.  pC = p->apCs
274f0 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  r[pOp->p1];.  as
27500 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20  sert( pC!=0 );. 
27510 20 61 73 73 65 72 74 28 20 70 43 2d 3e 65 43 75   assert( pC->eCu
27520 72 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f 42  rType==CURTYPE_B
27530 54 52 45 45 20 29 3b 0a 20 20 61 73 73 65 72 74  TREE );.  assert
27540 28 20 69 73 53 6f 72 74 65 72 28 70 43 29 3d 3d  ( isSorter(pC)==
27550 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  0 );.  assert( p
27560 43 2d 3e 6e 75 6c 6c 52 6f 77 3d 3d 30 20 29 3b  C->nullRow==0 );
27570 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 75  .  assert( pC->u
27580 63 2e 70 43 75 72 73 6f 72 21 3d 30 20 29 3b 0a  c.pCursor!=0 );.
27590 20 20 70 43 72 73 72 20 3d 20 70 43 2d 3e 75 63    pCrsr = pC->uc
275a0 2e 70 43 75 72 73 6f 72 3b 0a 0a 20 20 2f 2a 20  .pCursor;..  /* 
275b0 54 68 65 20 4f 50 5f 52 6f 77 44 61 74 61 20 6f  The OP_RowData o
275c0 70 63 6f 64 65 73 20 61 6c 77 61 79 73 20 66 6f  pcodes always fo
275d0 6c 6c 6f 77 20 4f 50 5f 4e 6f 74 45 78 69 73 74  llow OP_NotExist
275e0 73 20 6f 72 0a 20 20 2a 2a 20 4f 50 5f 53 65 65  s or.  ** OP_See
275f0 6b 52 6f 77 69 64 20 6f 72 20 4f 50 5f 52 65 77  kRowid or OP_Rew
27600 69 6e 64 2f 4f 70 5f 4e 65 78 74 20 77 69 74 68  ind/Op_Next with
27610 20 6e 6f 20 69 6e 74 65 72 76 65 6e 69 6e 67 20   no intervening 
27620 69 6e 73 74 72 75 63 74 69 6f 6e 73 0a 20 20 2a  instructions.  *
27630 2a 20 74 68 61 74 20 6d 69 67 68 74 20 69 6e 76  * that might inv
27640 61 6c 69 64 61 74 65 20 74 68 65 20 63 75 72 73  alidate the curs
27650 6f 72 2e 0a 20 20 2a 2a 20 49 66 20 74 68 69 73  or..  ** If this
27660 20 77 68 65 72 65 20 6e 6f 74 20 74 68 65 20 63   where not the c
27670 61 73 65 2c 20 6f 6e 20 6f 66 20 74 68 65 20 66  ase, on of the f
27680 6f 6c 6c 6f 77 69 6e 67 20 61 73 73 65 72 74 28  ollowing assert(
27690 29 73 0a 20 20 2a 2a 20 77 6f 75 6c 64 20 66 61  )s.  ** would fa
276a0 69 6c 2e 20 20 53 68 6f 75 6c 64 20 74 68 69 73  il.  Should this
276b0 20 65 76 65 72 20 63 68 61 6e 67 65 20 28 62 65   ever change (be
276c0 63 61 75 73 65 20 6f 66 20 63 68 61 6e 67 65 73  cause of changes
276d0 20 69 6e 20 74 68 65 20 63 6f 64 65 0a 20 20 2a   in the code.  *
276e0 2a 20 67 65 6e 65 72 61 74 6f 72 29 20 74 68 65  * generator) the
276f0 6e 20 74 68 65 20 66 69 78 20 77 6f 75 6c 64 20  n the fix would 
27700 62 65 20 74 6f 20 69 6e 73 65 72 74 20 61 20 63  be to insert a c
27710 61 6c 6c 20 74 6f 0a 20 20 2a 2a 20 73 71 6c 69  all to.  ** sqli
27720 74 65 33 56 64 62 65 43 75 72 73 6f 72 4d 6f 76  te3VdbeCursorMov
27730 65 74 6f 28 29 2e 0a 20 20 2a 2f 0a 20 20 61 73  eto()..  */.  as
27740 73 65 72 74 28 20 70 43 2d 3e 64 65 66 65 72 72  sert( pC->deferr
27750 65 64 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a 20  edMoveto==0 );. 
27760 20 61 73 73 65 72 74 28 20 73 71 6c 69 74 65 33   assert( sqlite3
27770 42 74 72 65 65 43 75 72 73 6f 72 49 73 56 61 6c  BtreeCursorIsVal
27780 69 64 28 70 43 72 73 72 29 20 29 3b 0a 23 69 66  id(pCrsr) );.#if
27790 20 30 20 20 2f 2a 20 4e 6f 74 20 72 65 71 75 69   0  /* Not requi
277a0 72 65 64 20 64 75 65 20 74 6f 20 74 68 65 20 70  red due to the p
277b0 72 65 76 69 6f 75 73 20 74 6f 20 61 73 73 65 72  revious to asser
277c0 74 28 29 20 73 74 61 74 65 6d 65 6e 74 73 20 2a  t() statements *
277d0 2f 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  /.  rc = sqlite3
277e0 56 64 62 65 43 75 72 73 6f 72 4d 6f 76 65 74 6f  VdbeCursorMoveto
277f0 28 70 43 29 3b 0a 20 20 69 66 28 20 72 63 21 3d  (pC);.  if( rc!=
27800 53 51 4c 49 54 45 5f 4f 4b 20 29 20 67 6f 74 6f  SQLITE_OK ) goto
27810 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
27820 72 6f 72 3b 0a 23 65 6e 64 69 66 0a 0a 20 20 6e  ror;.#endif..  n
27830 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 50   = sqlite3BtreeP
27840 61 79 6c 6f 61 64 53 69 7a 65 28 70 43 72 73 72  ayloadSize(pCrsr
27850 29 3b 0a 20 20 69 66 28 20 6e 3e 28 75 33 32 29  );.  if( n>(u32)
27860 64 62 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c 49 54  db->aLimit[SQLIT
27870 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54 48 5d 20  E_LIMIT_LENGTH] 
27880 29 7b 0a 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f  ){.    goto too_
27890 62 69 67 3b 0a 20 20 7d 0a 20 20 74 65 73 74 63  big;.  }.  testc
278a0 61 73 65 28 20 6e 3d 3d 30 20 29 3b 0a 20 20 72  ase( n==0 );.  r
278b0 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 4d  c = sqlite3VdbeM
278c0 65 6d 46 72 6f 6d 42 74 72 65 65 28 70 43 72 73  emFromBtree(pCrs
278d0 72 2c 20 30 2c 20 6e 2c 20 70 4f 75 74 29 3b 0a  r, 0, n, pOut);.
278e0 20 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20    if( rc ) goto 
278f0 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
27900 6f 72 3b 0a 20 20 69 66 28 20 21 70 4f 70 2d 3e  or;.  if( !pOp->
27910 70 33 20 29 20 44 65 65 70 68 65 6d 65 72 61 6c  p3 ) Deephemeral
27920 69 7a 65 28 70 4f 75 74 29 3b 0a 20 20 55 50 44  ize(pOut);.  UPD
27930 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45  ATE_MAX_BLOBSIZE
27940 28 70 4f 75 74 29 3b 0a 20 20 52 45 47 49 53 54  (pOut);.  REGIST
27950 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 32  ER_TRACE(pOp->p2
27960 2c 20 70 4f 75 74 29 3b 0a 20 20 62 72 65 61 6b  , pOut);.  break
27970 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
27980 52 6f 77 69 64 20 50 31 20 50 32 20 2a 20 2a 20  Rowid P1 P2 * * 
27990 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72  *.** Synopsis: r
279a0 5b 50 32 5d 3d 72 6f 77 69 64 0a 2a 2a 0a 2a 2a  [P2]=rowid.**.**
279b0 20 53 74 6f 72 65 20 69 6e 20 72 65 67 69 73 74   Store in regist
279c0 65 72 20 50 32 20 61 6e 20 69 6e 74 65 67 65 72  er P2 an integer
279d0 20 77 68 69 63 68 20 69 73 20 74 68 65 20 6b 65   which is the ke
279e0 79 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 65  y of the table e
279f0 6e 74 72 79 20 74 68 61 74 0a 2a 2a 20 50 31 20  ntry that.** P1 
27a00 69 73 20 63 75 72 72 65 6e 74 6c 79 20 70 6f 69  is currently poi
27a10 6e 74 20 74 6f 2e 0a 2a 2a 0a 2a 2a 20 50 31 20  nt to..**.** P1 
27a20 63 61 6e 20 62 65 20 65 69 74 68 65 72 20 61 6e  can be either an
27a30 20 6f 72 64 69 6e 61 72 79 20 74 61 62 6c 65 20   ordinary table 
27a40 6f 72 20 61 20 76 69 72 74 75 61 6c 20 74 61 62  or a virtual tab
27a50 6c 65 2e 20 20 54 68 65 72 65 20 75 73 65 64 20  le.  There used 
27a60 74 6f 0a 2a 2a 20 62 65 20 61 20 73 65 70 61 72  to.** be a separ
27a70 61 74 65 20 4f 50 5f 56 52 6f 77 69 64 20 6f 70  ate OP_VRowid op
27a80 63 6f 64 65 20 66 6f 72 20 75 73 65 20 77 69 74  code for use wit
27a90 68 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 73  h virtual tables
27aa0 2c 20 62 75 74 20 74 68 69 73 0a 2a 2a 20 6f 6e  , but this.** on
27ab0 65 20 6f 70 63 6f 64 65 20 6e 6f 77 20 77 6f 72  e opcode now wor
27ac0 6b 73 20 66 6f 72 20 62 6f 74 68 20 74 61 62 6c  ks for both tabl
27ad0 65 20 74 79 70 65 73 2e 0a 2a 2f 0a 63 61 73 65  e types..*/.case
27ae0 20 4f 50 5f 52 6f 77 69 64 3a 20 7b 20 20 20 20   OP_Rowid: {    
27af0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
27b00 6f 75 74 32 20 2a 2f 0a 20 20 56 64 62 65 43 75  out2 */.  VdbeCu
27b10 72 73 6f 72 20 2a 70 43 3b 0a 20 20 69 36 34 20  rsor *pC;.  i64 
27b20 76 3b 0a 20 20 73 71 6c 69 74 65 33 5f 76 74 61  v;.  sqlite3_vta
27b30 62 20 2a 70 56 74 61 62 3b 0a 20 20 63 6f 6e 73  b *pVtab;.  cons
27b40 74 20 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65  t sqlite3_module
27b50 20 2a 70 4d 6f 64 75 6c 65 3b 0a 0a 20 20 70 4f   *pModule;..  pO
27b60 75 74 20 3d 20 6f 75 74 32 50 72 65 72 65 6c 65  ut = out2Prerele
27b70 61 73 65 28 70 2c 20 70 4f 70 29 3b 0a 20 20 61  ase(p, pOp);.  a
27b80 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d  ssert( pOp->p1>=
27b90 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e  0 && pOp->p1<p->
27ba0 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20  nCursor );.  pC 
27bb0 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e  = p->apCsr[pOp->
27bc0 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p1];.  assert( p
27bd0 43 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  C!=0 );.  assert
27be0 28 20 70 43 2d 3e 65 43 75 72 54 79 70 65 21 3d  ( pC->eCurType!=
27bf0 43 55 52 54 59 50 45 5f 50 53 45 55 44 4f 20 7c  CURTYPE_PSEUDO |
27c00 7c 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 29 3b  | pC->nullRow );
27c10 0a 20 20 69 66 28 20 70 43 2d 3e 6e 75 6c 6c 52  .  if( pC->nullR
27c20 6f 77 20 29 7b 0a 20 20 20 20 70 4f 75 74 2d 3e  ow ){.    pOut->
27c30 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 4e 75 6c 6c  flags = MEM_Null
27c40 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d  ;.    break;.  }
27c50 65 6c 73 65 20 69 66 28 20 70 43 2d 3e 64 65 66  else if( pC->def
27c60 65 72 72 65 64 4d 6f 76 65 74 6f 20 29 7b 0a 20  erredMoveto ){. 
27c70 20 20 20 76 20 3d 20 70 43 2d 3e 6d 6f 76 65 74     v = pC->movet
27c80 6f 54 61 72 67 65 74 3b 0a 23 69 66 6e 64 65 66  oTarget;.#ifndef
27c90 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52   SQLITE_OMIT_VIR
27ca0 54 55 41 4c 54 41 42 4c 45 0a 20 20 7d 65 6c 73  TUALTABLE.  }els
27cb0 65 20 69 66 28 20 70 43 2d 3e 65 43 75 72 54 79  e if( pC->eCurTy
27cc0 70 65 3d 3d 43 55 52 54 59 50 45 5f 56 54 41 42  pe==CURTYPE_VTAB
27cd0 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20   ){.    assert( 
27ce0 70 43 2d 3e 75 63 2e 70 56 43 75 72 21 3d 30 20  pC->uc.pVCur!=0 
27cf0 29 3b 0a 20 20 20 20 70 56 74 61 62 20 3d 20 70  );.    pVtab = p
27d00 43 2d 3e 75 63 2e 70 56 43 75 72 2d 3e 70 56 74  C->uc.pVCur->pVt
27d10 61 62 3b 0a 20 20 20 20 70 4d 6f 64 75 6c 65 20  ab;.    pModule 
27d20 3d 20 70 56 74 61 62 2d 3e 70 4d 6f 64 75 6c 65  = pVtab->pModule
27d30 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4d  ;.    assert( pM
27d40 6f 64 75 6c 65 2d 3e 78 52 6f 77 69 64 20 29 3b  odule->xRowid );
27d50 0a 20 20 20 20 72 63 20 3d 20 70 4d 6f 64 75 6c  .    rc = pModul
27d60 65 2d 3e 78 52 6f 77 69 64 28 70 43 2d 3e 75 63  e->xRowid(pC->uc
27d70 2e 70 56 43 75 72 2c 20 26 76 29 3b 0a 20 20 20  .pVCur, &v);.   
27d80 20 73 71 6c 69 74 65 33 56 74 61 62 49 6d 70 6f   sqlite3VtabImpo
27d90 72 74 45 72 72 6d 73 67 28 70 2c 20 70 56 74 61  rtErrmsg(p, pVta
27da0 62 29 3b 0a 20 20 20 20 69 66 28 20 72 63 20 29  b);.    if( rc )
27db0 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
27dc0 74 6f 5f 65 72 72 6f 72 3b 0a 23 65 6e 64 69 66  to_error;.#endif
27dd0 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f   /* SQLITE_OMIT_
27de0 56 49 52 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a  VIRTUALTABLE */.
27df0 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73 73    }else{.    ass
27e00 65 72 74 28 20 70 43 2d 3e 65 43 75 72 54 79 70  ert( pC->eCurTyp
27e10 65 3d 3d 43 55 52 54 59 50 45 5f 42 54 52 45 45  e==CURTYPE_BTREE
27e20 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20   );.    assert( 
27e30 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 21 3d  pC->uc.pCursor!=
27e40 30 20 29 3b 0a 20 20 20 20 72 63 20 3d 20 73 71  0 );.    rc = sq
27e50 6c 69 74 65 33 56 64 62 65 43 75 72 73 6f 72 52  lite3VdbeCursorR
27e60 65 73 74 6f 72 65 28 70 43 29 3b 0a 20 20 20 20  estore(pC);.    
27e70 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62  if( rc ) goto ab
27e80 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
27e90 3b 0a 20 20 20 20 69 66 28 20 70 43 2d 3e 6e 75  ;.    if( pC->nu
27ea0 6c 6c 52 6f 77 20 29 7b 0a 20 20 20 20 20 20 70  llRow ){.      p
27eb0 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d  Out->flags = MEM
27ec0 5f 4e 75 6c 6c 3b 0a 20 20 20 20 20 20 62 72 65  _Null;.      bre
27ed0 61 6b 3b 0a 20 20 20 20 7d 0a 20 20 20 20 76 20  ak;.    }.    v 
27ee0 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 49 6e  = sqlite3BtreeIn
27ef0 74 65 67 65 72 4b 65 79 28 70 43 2d 3e 75 63 2e  tegerKey(pC->uc.
27f00 70 43 75 72 73 6f 72 29 3b 0a 20 20 7d 0a 20 20  pCursor);.  }.  
27f10 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 76 3b 0a 20  pOut->u.i = v;. 
27f20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
27f30 63 6f 64 65 3a 20 4e 75 6c 6c 52 6f 77 20 50 31  code: NullRow P1
27f40 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4d   * * * *.**.** M
27f50 6f 76 65 20 74 68 65 20 63 75 72 73 6f 72 20 50  ove the cursor P
27f60 31 20 74 6f 20 61 20 6e 75 6c 6c 20 72 6f 77 2e  1 to a null row.
27f70 20 20 41 6e 79 20 4f 50 5f 43 6f 6c 75 6d 6e 20    Any OP_Column 
27f80 6f 70 65 72 61 74 69 6f 6e 73 0a 2a 2a 20 74 68  operations.** th
27f90 61 74 20 6f 63 63 75 72 20 77 68 69 6c 65 20 74  at occur while t
27fa0 68 65 20 63 75 72 73 6f 72 20 69 73 20 6f 6e 20  he cursor is on 
27fb0 74 68 65 20 6e 75 6c 6c 20 72 6f 77 20 77 69 6c  the null row wil
27fc0 6c 20 61 6c 77 61 79 73 0a 2a 2a 20 77 72 69 74  l always.** writ
27fd0 65 20 61 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73  e a NULL..*/.cas
27fe0 65 20 4f 50 5f 4e 75 6c 6c 52 6f 77 3a 20 7b 0a  e OP_NullRow: {.
27ff0 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43    VdbeCursor *pC
28000 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  ;..  assert( pOp
28010 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e  ->p1>=0 && pOp->
28020 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b  p1<p->nCursor );
28030 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72  .  pC = p->apCsr
28040 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
28050 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20  ert( pC!=0 );.  
28060 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 31 3b  pC->nullRow = 1;
28070 0a 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74  .  pC->cacheStat
28080 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45  us = CACHE_STALE
28090 3b 0a 20 20 69 66 28 20 70 43 2d 3e 65 43 75 72  ;.  if( pC->eCur
280a0 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f 42 54  Type==CURTYPE_BT
280b0 52 45 45 20 29 7b 0a 20 20 20 20 61 73 73 65 72  REE ){.    asser
280c0 74 28 20 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f  t( pC->uc.pCurso
280d0 72 21 3d 30 20 29 3b 0a 20 20 20 20 73 71 6c 69  r!=0 );.    sqli
280e0 74 65 33 42 74 72 65 65 43 6c 65 61 72 43 75 72  te3BtreeClearCur
280f0 73 6f 72 28 70 43 2d 3e 75 63 2e 70 43 75 72 73  sor(pC->uc.pCurs
28100 6f 72 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  or);.  }.  break
28110 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
28120 53 65 65 6b 45 6e 64 20 50 31 20 2a 20 2a 20 2a  SeekEnd P1 * * *
28130 20 2a 0a 2a 2a 0a 2a 2a 20 50 6f 73 69 74 69 6f   *.**.** Positio
28140 6e 20 63 75 72 73 6f 72 20 50 31 20 61 74 20 74  n cursor P1 at t
28150 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20 62 74  he end of the bt
28160 72 65 65 20 66 6f 72 20 74 68 65 20 70 75 72 70  ree for the purp
28170 6f 73 65 20 6f 66 0a 2a 2a 20 61 70 70 65 6e 64  ose of.** append
28180 69 6e 67 20 61 20 6e 65 77 20 65 6e 74 72 79 20  ing a new entry 
28190 6f 6e 74 6f 20 74 68 65 20 62 74 72 65 65 2e 0a  onto the btree..
281a0 2a 2a 0a 2a 2a 20 49 74 20 69 73 20 61 73 73 75  **.** It is assu
281b0 6d 65 64 20 74 68 61 74 20 74 68 65 20 63 75 72  med that the cur
281c0 73 6f 72 20 69 73 20 75 73 65 64 20 6f 6e 6c 79  sor is used only
281d0 20 66 6f 72 20 61 70 70 65 6e 64 69 6e 67 20 61   for appending a
281e0 6e 64 20 73 6f 0a 2a 2a 20 69 66 20 74 68 65 20  nd so.** if the 
281f0 63 75 72 73 6f 72 20 69 73 20 76 61 6c 69 64 2c  cursor is valid,
28200 20 74 68 65 6e 20 74 68 65 20 63 75 72 73 6f 72   then the cursor
28210 20 6d 75 73 74 20 61 6c 72 65 61 64 79 20 62 65   must already be
28220 20 70 6f 69 6e 74 69 6e 67 0a 2a 2a 20 61 74 20   pointing.** at 
28230 74 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20 62  the end of the b
28240 74 72 65 65 20 61 6e 64 20 73 6f 20 6e 6f 20 63  tree and so no c
28250 68 61 6e 67 65 73 20 61 72 65 20 6d 61 64 65 20  hanges are made 
28260 74 6f 0a 2a 2a 20 74 68 65 20 63 75 72 73 6f 72  to.** the cursor
28270 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ..*/./* Opcode: 
28280 4c 61 73 74 20 50 31 20 50 32 20 2a 20 2a 20 2a  Last P1 P2 * * *
28290 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6e 65 78 74 20  .**.** The next 
282a0 75 73 65 20 6f 66 20 74 68 65 20 52 6f 77 69 64  use of the Rowid
282b0 20 6f 72 20 43 6f 6c 75 6d 6e 20 6f 72 20 50 72   or Column or Pr
282c0 65 76 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 66  ev instruction f
282d0 6f 72 20 50 31 20 0a 2a 2a 20 77 69 6c 6c 20 72  or P1 .** will r
282e0 65 66 65 72 20 74 6f 20 74 68 65 20 6c 61 73 74  efer to the last
282f0 20 65 6e 74 72 79 20 69 6e 20 74 68 65 20 64 61   entry in the da
28300 74 61 62 61 73 65 20 74 61 62 6c 65 20 6f 72 20  tabase table or 
28310 69 6e 64 65 78 2e 0a 2a 2a 20 49 66 20 74 68 65  index..** If the
28320 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20   table or index 
28330 69 73 20 65 6d 70 74 79 20 61 6e 64 20 50 32 3e  is empty and P2>
28340 30 2c 20 74 68 65 6e 20 6a 75 6d 70 20 69 6d 6d  0, then jump imm
28350 65 64 69 61 74 65 6c 79 20 74 6f 20 50 32 2e 0a  ediately to P2..
28360 2a 2a 20 49 66 20 50 32 20 69 73 20 30 20 6f 72  ** If P2 is 0 or
28370 20 69 66 20 74 68 65 20 74 61 62 6c 65 20 6f 72   if the table or
28380 20 69 6e 64 65 78 20 69 73 20 6e 6f 74 20 65 6d   index is not em
28390 70 74 79 2c 20 66 61 6c 6c 20 74 68 72 6f 75 67  pty, fall throug
283a0 68 0a 2a 2a 20 74 6f 20 74 68 65 20 66 6f 6c 6c  h.** to the foll
283b0 6f 77 69 6e 67 20 69 6e 73 74 72 75 63 74 69 6f  owing instructio
283c0 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70  n..**.** This op
283d0 63 6f 64 65 20 6c 65 61 76 65 73 20 74 68 65 20  code leaves the 
283e0 63 75 72 73 6f 72 20 63 6f 6e 66 69 67 75 72 65  cursor configure
283f0 64 20 74 6f 20 6d 6f 76 65 20 69 6e 20 72 65 76  d to move in rev
28400 65 72 73 65 20 6f 72 64 65 72 2c 0a 2a 2a 20 66  erse order,.** f
28410 72 6f 6d 20 74 68 65 20 65 6e 64 20 74 6f 77 61  rom the end towa
28420 72 64 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67  rd the beginning
28430 2e 20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64  .  In other word
28440 73 2c 20 74 68 65 20 63 75 72 73 6f 72 20 69 73  s, the cursor is
28450 0a 2a 2a 20 63 6f 6e 66 69 67 75 72 65 64 20 74  .** configured t
28460 6f 20 75 73 65 20 50 72 65 76 2c 20 6e 6f 74 20  o use Prev, not 
28470 4e 65 78 74 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  Next..*/.case OP
28480 5f 53 65 65 6b 45 6e 64 3a 0a 63 61 73 65 20 4f  _SeekEnd:.case O
28490 50 5f 4c 61 73 74 3a 20 7b 20 20 20 20 20 20 20  P_Last: {       
284a0 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 56 64   /* jump */.  Vd
284b0 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20  beCursor *pC;.  
284c0 42 74 43 75 72 73 6f 72 20 2a 70 43 72 73 72 3b  BtCursor *pCrsr;
284d0 0a 20 20 69 6e 74 20 72 65 73 3b 0a 0a 20 20 61  .  int res;..  a
284e0 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d  ssert( pOp->p1>=
284f0 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e  0 && pOp->p1<p->
28500 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20  nCursor );.  pC 
28510 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e  = p->apCsr[pOp->
28520 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p1];.  assert( p
28530 43 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  C!=0 );.  assert
28540 28 20 70 43 2d 3e 65 43 75 72 54 79 70 65 3d 3d  ( pC->eCurType==
28550 43 55 52 54 59 50 45 5f 42 54 52 45 45 20 29 3b  CURTYPE_BTREE );
28560 0a 20 20 70 43 72 73 72 20 3d 20 70 43 2d 3e 75  .  pCrsr = pC->u
28570 63 2e 70 43 75 72 73 6f 72 3b 0a 20 20 72 65 73  c.pCursor;.  res
28580 20 3d 20 30 3b 0a 20 20 61 73 73 65 72 74 28 20   = 0;.  assert( 
28590 70 43 72 73 72 21 3d 30 20 29 3b 0a 23 69 66 64  pCrsr!=0 );.#ifd
285a0 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a  ef SQLITE_DEBUG.
285b0 20 20 70 43 2d 3e 73 65 65 6b 4f 70 20 3d 20 70    pC->seekOp = p
285c0 4f 70 2d 3e 6f 70 63 6f 64 65 3b 0a 23 65 6e 64  Op->opcode;.#end
285d0 69 66 0a 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70  if.  if( pOp->op
285e0 63 6f 64 65 3d 3d 4f 50 5f 53 65 65 6b 45 6e 64  code==OP_SeekEnd
285f0 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20   ){.    assert( 
28600 70 4f 70 2d 3e 70 32 3d 3d 30 20 29 3b 0a 20 20  pOp->p2==0 );.  
28610 20 20 70 43 2d 3e 73 65 65 6b 52 65 73 75 6c 74    pC->seekResult
28620 20 3d 20 2d 31 3b 0a 20 20 20 20 69 66 28 20 73   = -1;.    if( s
28630 71 6c 69 74 65 33 42 74 72 65 65 43 75 72 73 6f  qlite3BtreeCurso
28640 72 49 73 56 61 6c 69 64 4e 4e 28 70 43 72 73 72  rIsValidNN(pCrsr
28650 29 20 29 7b 0a 20 20 20 20 20 20 62 72 65 61 6b  ) ){.      break
28660 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 72 63  ;.    }.  }.  rc
28670 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 4c   = sqlite3BtreeL
28680 61 73 74 28 70 43 72 73 72 2c 20 26 72 65 73 29  ast(pCrsr, &res)
28690 3b 0a 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20  ;.  pC->nullRow 
286a0 3d 20 28 75 38 29 72 65 73 3b 0a 20 20 70 43 2d  = (u8)res;.  pC-
286b0 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 20  >deferredMoveto 
286c0 3d 20 30 3b 0a 20 20 70 43 2d 3e 63 61 63 68 65  = 0;.  pC->cache
286d0 53 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53  Status = CACHE_S
286e0 54 41 4c 45 3b 0a 20 20 69 66 28 20 72 63 20 29  TALE;.  if( rc )
286f0 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
28700 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 69 66 28 20  to_error;.  if( 
28710 70 4f 70 2d 3e 70 32 3e 30 20 29 7b 0a 20 20 20  pOp->p2>0 ){.   
28720 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e   VdbeBranchTaken
28730 28 72 65 73 21 3d 30 2c 32 29 3b 0a 20 20 20 20  (res!=0,2);.    
28740 69 66 28 20 72 65 73 20 29 20 67 6f 74 6f 20 6a  if( res ) goto j
28750 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 7d 0a 20  ump_to_p2;.  }. 
28760 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
28770 63 6f 64 65 3a 20 49 66 53 6d 61 6c 6c 65 72 20  code: IfSmaller 
28780 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a  P1 P2 P3 * *.**.
28790 2a 2a 20 45 73 74 69 6d 61 74 65 20 74 68 65 20  ** Estimate the 
287a0 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 20 69  number of rows i
287b0 6e 20 74 68 65 20 74 61 62 6c 65 20 50 31 2e 20  n the table P1. 
287c0 20 4a 75 6d 70 20 74 6f 20 50 32 20 69 66 20 74   Jump to P2 if t
287d0 68 61 74 0a 2a 2a 20 65 73 74 69 6d 61 74 65 20  hat.** estimate 
287e0 69 73 20 6c 65 73 73 20 74 68 61 6e 20 61 70 70  is less than app
287f0 72 6f 78 69 6d 61 74 65 6c 79 20 32 2a 2a 28 30  roximately 2**(0
28800 2e 31 2a 50 33 29 2e 0a 2a 2f 0a 63 61 73 65 20  .1*P3)..*/.case 
28810 4f 50 5f 49 66 53 6d 61 6c 6c 65 72 3a 20 7b 20  OP_IfSmaller: { 
28820 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a         /* jump *
28830 2f 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a  /.  VdbeCursor *
28840 70 43 3b 0a 20 20 42 74 43 75 72 73 6f 72 20 2a  pC;.  BtCursor *
28850 70 43 72 73 72 3b 0a 20 20 69 6e 74 20 72 65 73  pCrsr;.  int res
28860 3b 0a 20 20 69 36 34 20 73 7a 3b 0a 0a 20 20 61  ;.  i64 sz;..  a
28870 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d  ssert( pOp->p1>=
28880 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e  0 && pOp->p1<p->
28890 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20  nCursor );.  pC 
288a0 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e  = p->apCsr[pOp->
288b0 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p1];.  assert( p
288c0 43 21 3d 30 20 29 3b 0a 20 20 70 43 72 73 72 20  C!=0 );.  pCrsr 
288d0 3d 20 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72  = pC->uc.pCursor
288e0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 72 73  ;.  assert( pCrs
288f0 72 20 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69  r );.  rc = sqli
28900 74 65 33 42 74 72 65 65 46 69 72 73 74 28 70 43  te3BtreeFirst(pC
28910 72 73 72 2c 20 26 72 65 73 29 3b 0a 20 20 69 66  rsr, &res);.  if
28920 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72  ( rc ) goto abor
28930 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
28940 20 20 69 66 28 20 72 65 73 3d 3d 30 20 29 7b 0a    if( res==0 ){.
28950 20 20 20 20 73 7a 20 3d 20 73 71 6c 69 74 65 33      sz = sqlite3
28960 42 74 72 65 65 52 6f 77 43 6f 75 6e 74 45 73 74  BtreeRowCountEst
28970 28 70 43 72 73 72 29 3b 0a 20 20 20 20 69 66 28  (pCrsr);.    if(
28980 20 41 4c 57 41 59 53 28 73 7a 3e 3d 30 29 20 26   ALWAYS(sz>=0) &
28990 26 20 73 71 6c 69 74 65 33 4c 6f 67 45 73 74 28  & sqlite3LogEst(
289a0 28 75 36 34 29 73 7a 29 3c 70 4f 70 2d 3e 70 33  (u64)sz)<pOp->p3
289b0 20 29 20 72 65 73 20 3d 20 31 3b 0a 20 20 7d 0a   ) res = 1;.  }.
289c0 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65    VdbeBranchTake
289d0 6e 28 72 65 73 21 3d 30 2c 32 29 3b 0a 20 20 69  n(res!=0,2);.  i
289e0 66 28 20 72 65 73 20 29 20 67 6f 74 6f 20 6a 75  f( res ) goto ju
289f0 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 62 72 65 61  mp_to_p2;.  brea
28a00 6b 3b 0a 7d 0a 0a 0a 2f 2a 20 4f 70 63 6f 64 65  k;.}.../* Opcode
28a10 3a 20 53 6f 72 74 65 72 53 6f 72 74 20 50 31 20  : SorterSort P1 
28a20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 41  P2 * * *.**.** A
28a30 66 74 65 72 20 61 6c 6c 20 72 65 63 6f 72 64 73  fter all records
28a40 20 68 61 76 65 20 62 65 65 6e 20 69 6e 73 65 72   have been inser
28a50 74 65 64 20 69 6e 74 6f 20 74 68 65 20 53 6f 72  ted into the Sor
28a60 74 65 72 20 6f 62 6a 65 63 74 0a 2a 2a 20 69 64  ter object.** id
28a70 65 6e 74 69 66 69 65 64 20 62 79 20 50 31 2c 20  entified by P1, 
28a80 69 6e 76 6f 6b 65 20 74 68 69 73 20 6f 70 63 6f  invoke this opco
28a90 64 65 20 74 6f 20 61 63 74 75 61 6c 6c 79 20 64  de to actually d
28aa0 6f 20 74 68 65 20 73 6f 72 74 69 6e 67 2e 0a 2a  o the sorting..*
28ab0 2a 20 4a 75 6d 70 20 74 6f 20 50 32 20 69 66 20  * Jump to P2 if 
28ac0 74 68 65 72 65 20 61 72 65 20 6e 6f 20 72 65 63  there are no rec
28ad0 6f 72 64 73 20 74 6f 20 62 65 20 73 6f 72 74 65  ords to be sorte
28ae0 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70  d..**.** This op
28af0 63 6f 64 65 20 69 73 20 61 6e 20 61 6c 69 61 73  code is an alias
28b00 20 66 6f 72 20 4f 50 5f 53 6f 72 74 20 61 6e 64   for OP_Sort and
28b10 20 4f 50 5f 52 65 77 69 6e 64 20 74 68 61 74 20   OP_Rewind that 
28b20 69 73 20 75 73 65 64 0a 2a 2a 20 66 6f 72 20 53  is used.** for S
28b30 6f 72 74 65 72 20 6f 62 6a 65 63 74 73 2e 0a 2a  orter objects..*
28b40 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 6f 72  /./* Opcode: Sor
28b50 74 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  t P1 P2 * * *.**
28b60 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20  .** This opcode 
28b70 64 6f 65 73 20 65 78 61 63 74 6c 79 20 74 68 65  does exactly the
28b80 20 73 61 6d 65 20 74 68 69 6e 67 20 61 73 20 4f   same thing as O
28b90 50 5f 52 65 77 69 6e 64 20 65 78 63 65 70 74 20  P_Rewind except 
28ba0 74 68 61 74 0a 2a 2a 20 69 74 20 69 6e 63 72 65  that.** it incre
28bb0 6d 65 6e 74 73 20 61 6e 20 75 6e 64 6f 63 75 6d  ments an undocum
28bc0 65 6e 74 65 64 20 67 6c 6f 62 61 6c 20 76 61 72  ented global var
28bd0 69 61 62 6c 65 20 75 73 65 64 20 66 6f 72 20 74  iable used for t
28be0 65 73 74 69 6e 67 2e 0a 2a 2a 0a 2a 2a 20 53 6f  esting..**.** So
28bf0 72 74 69 6e 67 20 69 73 20 61 63 63 6f 6d 70 6c  rting is accompl
28c00 69 73 68 65 64 20 62 79 20 77 72 69 74 69 6e 67  ished by writing
28c10 20 72 65 63 6f 72 64 73 20 69 6e 74 6f 20 61 20   records into a 
28c20 73 6f 72 74 69 6e 67 20 69 6e 64 65 78 2c 0a 2a  sorting index,.*
28c30 2a 20 74 68 65 6e 20 72 65 77 69 6e 64 69 6e 67  * then rewinding
28c40 20 74 68 61 74 20 69 6e 64 65 78 20 61 6e 64 20   that index and 
28c50 70 6c 61 79 69 6e 67 20 69 74 20 62 61 63 6b 20  playing it back 
28c60 66 72 6f 6d 20 62 65 67 69 6e 6e 69 6e 67 20 74  from beginning t
28c70 6f 0a 2a 2a 20 65 6e 64 2e 20 20 57 65 20 75 73  o.** end.  We us
28c80 65 20 74 68 65 20 4f 50 5f 53 6f 72 74 20 6f 70  e the OP_Sort op
28c90 63 6f 64 65 20 69 6e 73 74 65 61 64 20 6f 66 20  code instead of 
28ca0 4f 50 5f 52 65 77 69 6e 64 20 74 6f 20 64 6f 20  OP_Rewind to do 
28cb0 74 68 65 0a 2a 2a 20 72 65 77 69 6e 64 69 6e 67  the.** rewinding
28cc0 20 73 6f 20 74 68 61 74 20 74 68 65 20 67 6c 6f   so that the glo
28cd0 62 61 6c 20 76 61 72 69 61 62 6c 65 20 77 69 6c  bal variable wil
28ce0 6c 20 62 65 20 69 6e 63 72 65 6d 65 6e 74 65 64  l be incremented
28cf0 20 61 6e 64 0a 2a 2a 20 72 65 67 72 65 73 73 69   and.** regressi
28d00 6f 6e 20 74 65 73 74 73 20 63 61 6e 20 64 65 74  on tests can det
28d10 65 72 6d 69 6e 65 20 77 68 65 74 68 65 72 20 6f  ermine whether o
28d20 72 20 6e 6f 74 20 74 68 65 20 6f 70 74 69 6d 69  r not the optimi
28d30 7a 65 72 20 69 73 0a 2a 2a 20 63 6f 72 72 65 63  zer is.** correc
28d40 74 6c 79 20 6f 70 74 69 6d 69 7a 69 6e 67 20 6f  tly optimizing o
28d50 75 74 20 73 6f 72 74 73 2e 0a 2a 2f 0a 63 61 73  ut sorts..*/.cas
28d60 65 20 4f 50 5f 53 6f 72 74 65 72 53 6f 72 74 3a  e OP_SorterSort:
28d70 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 63      /* jump */.c
28d80 61 73 65 20 4f 50 5f 53 6f 72 74 3a 20 7b 20 20  ase OP_Sort: {  
28d90 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f        /* jump */
28da0 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 54  .#ifdef SQLITE_T
28db0 45 53 54 0a 20 20 73 71 6c 69 74 65 33 5f 73 6f  EST.  sqlite3_so
28dc0 72 74 5f 63 6f 75 6e 74 2b 2b 3b 0a 20 20 73 71  rt_count++;.  sq
28dd0 6c 69 74 65 33 5f 73 65 61 72 63 68 5f 63 6f 75  lite3_search_cou
28de0 6e 74 2d 2d 3b 0a 23 65 6e 64 69 66 0a 20 20 70  nt--;.#endif.  p
28df0 2d 3e 61 43 6f 75 6e 74 65 72 5b 53 51 4c 49 54  ->aCounter[SQLIT
28e00 45 5f 53 54 4d 54 53 54 41 54 55 53 5f 53 4f 52  E_STMTSTATUS_SOR
28e10 54 5d 2b 2b 3b 0a 20 20 2f 2a 20 46 61 6c 6c 20  T]++;.  /* Fall 
28e20 74 68 72 6f 75 67 68 20 69 6e 74 6f 20 4f 50 5f  through into OP_
28e30 52 65 77 69 6e 64 20 2a 2f 0a 7d 0a 2f 2a 20 4f  Rewind */.}./* O
28e40 70 63 6f 64 65 3a 20 52 65 77 69 6e 64 20 50 31  pcode: Rewind P1
28e50 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20   P2 * * *.**.** 
28e60 54 68 65 20 6e 65 78 74 20 75 73 65 20 6f 66 20  The next use of 
28e70 74 68 65 20 52 6f 77 69 64 20 6f 72 20 43 6f 6c  the Rowid or Col
28e80 75 6d 6e 20 6f 72 20 4e 65 78 74 20 69 6e 73 74  umn or Next inst
28e90 72 75 63 74 69 6f 6e 20 66 6f 72 20 50 31 20 0a  ruction for P1 .
28ea0 2a 2a 20 77 69 6c 6c 20 72 65 66 65 72 20 74 6f  ** will refer to
28eb0 20 74 68 65 20 66 69 72 73 74 20 65 6e 74 72 79   the first entry
28ec0 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65   in the database
28ed0 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 2e   table or index.
28ee0 0a 2a 2a 20 49 66 20 74 68 65 20 74 61 62 6c 65  .** If the table
28ef0 20 6f 72 20 69 6e 64 65 78 20 69 73 20 65 6d 70   or index is emp
28f00 74 79 2c 20 6a 75 6d 70 20 69 6d 6d 65 64 69 61  ty, jump immedia
28f10 74 65 6c 79 20 74 6f 20 50 32 2e 0a 2a 2a 20 49  tely to P2..** I
28f20 66 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20 69  f the table or i
28f30 6e 64 65 78 20 69 73 20 6e 6f 74 20 65 6d 70 74  ndex is not empt
28f40 79 2c 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 20  y, fall through 
28f50 74 6f 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  to the following
28f60 20 0a 2a 2a 20 69 6e 73 74 72 75 63 74 69 6f 6e   .** instruction
28f70 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63  ..**.** This opc
28f80 6f 64 65 20 6c 65 61 76 65 73 20 74 68 65 20 63  ode leaves the c
28f90 75 72 73 6f 72 20 63 6f 6e 66 69 67 75 72 65 64  ursor configured
28fa0 20 74 6f 20 6d 6f 76 65 20 69 6e 20 66 6f 72 77   to move in forw
28fb0 61 72 64 20 6f 72 64 65 72 2c 0a 2a 2a 20 66 72  ard order,.** fr
28fc0 6f 6d 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67  om the beginning
28fd0 20 74 6f 77 61 72 64 20 74 68 65 20 65 6e 64 2e   toward the end.
28fe0 20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73    In other words
28ff0 2c 20 74 68 65 20 63 75 72 73 6f 72 20 69 73 0a  , the cursor is.
29000 2a 2a 20 63 6f 6e 66 69 67 75 72 65 64 20 74 6f  ** configured to
29010 20 75 73 65 20 4e 65 78 74 2c 20 6e 6f 74 20 50   use Next, not P
29020 72 65 76 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  rev..*/.case OP_
29030 52 65 77 69 6e 64 3a 20 7b 20 20 20 20 20 20 20  Rewind: {       
29040 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 56 64   /* jump */.  Vd
29050 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20  beCursor *pC;.  
29060 42 74 43 75 72 73 6f 72 20 2a 70 43 72 73 72 3b  BtCursor *pCrsr;
29070 0a 20 20 69 6e 74 20 72 65 73 3b 0a 0a 20 20 61  .  int res;..  a
29080 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d  ssert( pOp->p1>=
29090 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e  0 && pOp->p1<p->
290a0 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20  nCursor );.  pC 
290b0 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e  = p->apCsr[pOp->
290c0 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p1];.  assert( p
290d0 43 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  C!=0 );.  assert
290e0 28 20 69 73 53 6f 72 74 65 72 28 70 43 29 3d 3d  ( isSorter(pC)==
290f0 28 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50  (pOp->opcode==OP
29100 5f 53 6f 72 74 65 72 53 6f 72 74 29 20 29 3b 0a  _SorterSort) );.
29110 20 20 72 65 73 20 3d 20 31 3b 0a 23 69 66 64 65    res = 1;.#ifde
29120 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20  f SQLITE_DEBUG. 
29130 20 70 43 2d 3e 73 65 65 6b 4f 70 20 3d 20 4f 50   pC->seekOp = OP
29140 5f 52 65 77 69 6e 64 3b 0a 23 65 6e 64 69 66 0a  _Rewind;.#endif.
29150 20 20 69 66 28 20 69 73 53 6f 72 74 65 72 28 70    if( isSorter(p
29160 43 29 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 73  C) ){.    rc = s
29170 71 6c 69 74 65 33 56 64 62 65 53 6f 72 74 65 72  qlite3VdbeSorter
29180 52 65 77 69 6e 64 28 70 43 2c 20 26 72 65 73 29  Rewind(pC, &res)
29190 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61  ;.  }else{.    a
291a0 73 73 65 72 74 28 20 70 43 2d 3e 65 43 75 72 54  ssert( pC->eCurT
291b0 79 70 65 3d 3d 43 55 52 54 59 50 45 5f 42 54 52  ype==CURTYPE_BTR
291c0 45 45 20 29 3b 0a 20 20 20 20 70 43 72 73 72 20  EE );.    pCrsr 
291d0 3d 20 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72  = pC->uc.pCursor
291e0 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 43  ;.    assert( pC
291f0 72 73 72 20 29 3b 0a 20 20 20 20 72 63 20 3d 20  rsr );.    rc = 
29200 73 71 6c 69 74 65 33 42 74 72 65 65 46 69 72 73  sqlite3BtreeFirs
29210 74 28 70 43 72 73 72 2c 20 26 72 65 73 29 3b 0a  t(pCrsr, &res);.
29220 20 20 20 20 70 43 2d 3e 64 65 66 65 72 72 65 64      pC->deferred
29230 4d 6f 76 65 74 6f 20 3d 20 30 3b 0a 20 20 20 20  Moveto = 0;.    
29240 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20  pC->cacheStatus 
29250 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20  = CACHE_STALE;. 
29260 20 7d 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f   }.  if( rc ) go
29270 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
29280 65 72 72 6f 72 3b 0a 20 20 70 43 2d 3e 6e 75 6c  error;.  pC->nul
29290 6c 52 6f 77 20 3d 20 28 75 38 29 72 65 73 3b 0a  lRow = (u8)res;.
292a0 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
292b0 32 3e 30 20 26 26 20 70 4f 70 2d 3e 70 32 3c 70  2>0 && pOp->p2<p
292c0 2d 3e 6e 4f 70 20 29 3b 0a 20 20 56 64 62 65 42  ->nOp );.  VdbeB
292d0 72 61 6e 63 68 54 61 6b 65 6e 28 72 65 73 21 3d  ranchTaken(res!=
292e0 30 2c 32 29 3b 0a 20 20 69 66 28 20 72 65 73 20  0,2);.  if( res 
292f0 29 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70  ) goto jump_to_p
29300 32 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  2;.  break;.}../
29310 2a 20 4f 70 63 6f 64 65 3a 20 4e 65 78 74 20 50  * Opcode: Next P
29320 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a  1 P2 P3 P4 P5.**
29330 0a 2a 2a 20 41 64 76 61 6e 63 65 20 63 75 72 73  .** Advance curs
29340 6f 72 20 50 31 20 73 6f 20 74 68 61 74 20 69 74  or P1 so that it
29350 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 20 6e   points to the n
29360 65 78 74 20 6b 65 79 2f 64 61 74 61 20 70 61 69  ext key/data pai
29370 72 20 69 6e 20 69 74 73 0a 2a 2a 20 74 61 62 6c  r in its.** tabl
29380 65 20 6f 72 20 69 6e 64 65 78 2e 20 20 49 66 20  e or index.  If 
29390 74 68 65 72 65 20 61 72 65 20 6e 6f 20 6d 6f 72  there are no mor
293a0 65 20 6b 65 79 2f 76 61 6c 75 65 20 70 61 69 72  e key/value pair
293b0 73 20 74 68 65 6e 20 66 61 6c 6c 20 74 68 72 6f  s then fall thro
293c0 75 67 68 0a 2a 2a 20 74 6f 20 74 68 65 20 66 6f  ugh.** to the fo
293d0 6c 6c 6f 77 69 6e 67 20 69 6e 73 74 72 75 63 74  llowing instruct
293e0 69 6f 6e 2e 20 20 42 75 74 20 69 66 20 74 68 65  ion.  But if the
293f0 20 63 75 72 73 6f 72 20 61 64 76 61 6e 63 65 20   cursor advance 
29400 77 61 73 20 73 75 63 63 65 73 73 66 75 6c 2c 0a  was successful,.
29410 2a 2a 20 6a 75 6d 70 20 69 6d 6d 65 64 69 61 74  ** jump immediat
29420 65 6c 79 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a  ely to P2..**.**
29430 20 54 68 65 20 4e 65 78 74 20 6f 70 63 6f 64 65   The Next opcode
29440 20 69 73 20 6f 6e 6c 79 20 76 61 6c 69 64 20 66   is only valid f
29450 6f 6c 6c 6f 77 69 6e 67 20 61 6e 20 53 65 65 6b  ollowing an Seek
29460 47 54 2c 20 53 65 65 6b 47 45 2c 20 6f 72 0a 2a  GT, SeekGE, or.*
29470 2a 20 4f 50 5f 52 65 77 69 6e 64 20 6f 70 63 6f  * OP_Rewind opco
29480 64 65 20 75 73 65 64 20 74 6f 20 70 6f 73 69 74  de used to posit
29490 69 6f 6e 20 74 68 65 20 63 75 72 73 6f 72 2e 20  ion the cursor. 
294a0 20 4e 65 78 74 20 69 73 20 6e 6f 74 20 61 6c 6c   Next is not all
294b0 6f 77 65 64 0a 2a 2a 20 74 6f 20 66 6f 6c 6c 6f  owed.** to follo
294c0 77 20 53 65 65 6b 4c 54 2c 20 53 65 65 6b 4c 45  w SeekLT, SeekLE
294d0 2c 20 6f 72 20 4f 50 5f 4c 61 73 74 2e 0a 2a 2a  , or OP_Last..**
294e0 0a 2a 2a 20 54 68 65 20 50 31 20 63 75 72 73 6f  .** The P1 curso
294f0 72 20 6d 75 73 74 20 62 65 20 66 6f 72 20 61 20  r must be for a 
29500 72 65 61 6c 20 74 61 62 6c 65 2c 20 6e 6f 74 20  real table, not 
29510 61 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 2e 20  a pseudo-table. 
29520 20 50 31 20 6d 75 73 74 20 68 61 76 65 0a 2a 2a   P1 must have.**
29530 20 62 65 65 6e 20 6f 70 65 6e 65 64 20 70 72 69   been opened pri
29540 6f 72 20 74 6f 20 74 68 69 73 20 6f 70 63 6f 64  or to this opcod
29550 65 20 6f 72 20 74 68 65 20 70 72 6f 67 72 61 6d  e or the program
29560 20 77 69 6c 6c 20 73 65 67 66 61 75 6c 74 2e 0a   will segfault..
29570 2a 2a 0a 2a 2a 20 54 68 65 20 50 33 20 76 61 6c  **.** The P3 val
29580 75 65 20 69 73 20 61 20 68 69 6e 74 20 74 6f 20  ue is a hint to 
29590 74 68 65 20 62 74 72 65 65 20 69 6d 70 6c 65 6d  the btree implem
295a0 65 6e 74 61 74 69 6f 6e 2e 20 49 66 20 50 33 3d  entation. If P3=
295b0 3d 31 2c 20 74 68 61 74 0a 2a 2a 20 6d 65 61 6e  =1, that.** mean
295c0 73 20 50 31 20 69 73 20 61 6e 20 53 51 4c 20 69  s P1 is an SQL i
295d0 6e 64 65 78 20 61 6e 64 20 74 68 61 74 20 74 68  ndex and that th
295e0 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 63  is instruction c
295f0 6f 75 6c 64 20 68 61 76 65 20 62 65 65 6e 0a 2a  ould have been.*
29600 2a 20 6f 6d 69 74 74 65 64 20 69 66 20 74 68 61  * omitted if tha
29610 74 20 69 6e 64 65 78 20 68 61 64 20 62 65 65 6e  t index had been
29620 20 75 6e 69 71 75 65 2e 20 20 50 33 20 69 73 20   unique.  P3 is 
29630 75 73 75 61 6c 6c 79 20 30 2e 20 20 50 33 20 69  usually 0.  P3 i
29640 73 0a 2a 2a 20 61 6c 77 61 79 73 20 65 69 74 68  s.** always eith
29650 65 72 20 30 20 6f 72 20 31 2e 0a 2a 2a 0a 2a 2a  er 0 or 1..**.**
29660 20 50 34 20 69 73 20 61 6c 77 61 79 73 20 6f 66   P4 is always of
29670 20 74 79 70 65 20 50 34 5f 41 44 56 41 4e 43 45   type P4_ADVANCE
29680 2e 20 54 68 65 20 66 75 6e 63 74 69 6f 6e 20 70  . The function p
29690 6f 69 6e 74 65 72 20 70 6f 69 6e 74 73 20 74 6f  ointer points to
296a0 0a 2a 2a 20 73 71 6c 69 74 65 33 42 74 72 65 65  .** sqlite3Btree
296b0 4e 65 78 74 28 29 2e 0a 2a 2a 0a 2a 2a 20 49 66  Next()..**.** If
296c0 20 50 35 20 69 73 20 70 6f 73 69 74 69 76 65 20   P5 is positive 
296d0 61 6e 64 20 74 68 65 20 6a 75 6d 70 20 69 73 20  and the jump is 
296e0 74 61 6b 65 6e 2c 20 74 68 65 6e 20 65 76 65 6e  taken, then even
296f0 74 20 63 6f 75 6e 74 65 72 0a 2a 2a 20 6e 75 6d  t counter.** num
29700 62 65 72 20 50 35 2d 31 20 69 6e 20 74 68 65 20  ber P5-1 in the 
29710 70 72 65 70 61 72 65 64 20 73 74 61 74 65 6d 65  prepared stateme
29720 6e 74 20 69 73 20 69 6e 63 72 65 6d 65 6e 74 65  nt is incremente
29730 64 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73  d..**.** See als
29740 6f 3a 20 50 72 65 76 2c 20 4e 65 78 74 49 66 4f  o: Prev, NextIfO
29750 70 65 6e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65  pen.*/./* Opcode
29760 3a 20 4e 65 78 74 49 66 4f 70 65 6e 20 50 31 20  : NextIfOpen P1 
29770 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a  P2 P3 P4 P5.**.*
29780 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 77 6f  * This opcode wo
29790 72 6b 73 20 6a 75 73 74 20 6c 69 6b 65 20 4e 65  rks just like Ne
297a0 78 74 20 65 78 63 65 70 74 20 74 68 61 74 20 69  xt except that i
297b0 66 20 63 75 72 73 6f 72 20 50 31 20 69 73 20 6e  f cursor P1 is n
297c0 6f 74 0a 2a 2a 20 6f 70 65 6e 20 69 74 20 62 65  ot.** open it be
297d0 68 61 76 65 73 20 61 20 6e 6f 2d 6f 70 2e 0a 2a  haves a no-op..*
297e0 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 50 72 65  /./* Opcode: Pre
297f0 76 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35  v P1 P2 P3 P4 P5
29800 0a 2a 2a 0a 2a 2a 20 42 61 63 6b 20 75 70 20 63  .**.** Back up c
29810 75 72 73 6f 72 20 50 31 20 73 6f 20 74 68 61 74  ursor P1 so that
29820 20 69 74 20 70 6f 69 6e 74 73 20 74 6f 20 74 68   it points to th
29830 65 20 70 72 65 76 69 6f 75 73 20 6b 65 79 2f 64  e previous key/d
29840 61 74 61 20 70 61 69 72 20 69 6e 20 69 74 73 0a  ata pair in its.
29850 2a 2a 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65  ** table or inde
29860 78 2e 20 20 49 66 20 74 68 65 72 65 20 69 73 20  x.  If there is 
29870 6e 6f 20 70 72 65 76 69 6f 75 73 20 6b 65 79 2f  no previous key/
29880 76 61 6c 75 65 20 70 61 69 72 73 20 74 68 65 6e  value pairs then
29890 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 0a 2a 2a   fall through.**
298a0 20 74 6f 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   to the followin
298b0 67 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20 20  g instruction.  
298c0 42 75 74 20 69 66 20 74 68 65 20 63 75 72 73 6f  But if the curso
298d0 72 20 62 61 63 6b 75 70 20 77 61 73 20 73 75 63  r backup was suc
298e0 63 65 73 73 66 75 6c 2c 0a 2a 2a 20 6a 75 6d 70  cessful,.** jump
298f0 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f 20   immediately to 
29900 50 32 2e 0a 2a 2a 0a 2a 2a 0a 2a 2a 20 54 68 65  P2..**.**.** The
29910 20 50 72 65 76 20 6f 70 63 6f 64 65 20 69 73 20   Prev opcode is 
29920 6f 6e 6c 79 20 76 61 6c 69 64 20 66 6f 6c 6c 6f  only valid follo
29930 77 69 6e 67 20 61 6e 20 53 65 65 6b 4c 54 2c 20  wing an SeekLT, 
29940 53 65 65 6b 4c 45 2c 20 6f 72 0a 2a 2a 20 4f 50  SeekLE, or.** OP
29950 5f 4c 61 73 74 20 6f 70 63 6f 64 65 20 75 73 65  _Last opcode use
29960 64 20 74 6f 20 70 6f 73 69 74 69 6f 6e 20 74 68  d to position th
29970 65 20 63 75 72 73 6f 72 2e 20 20 50 72 65 76 20  e cursor.  Prev 
29980 69 73 20 6e 6f 74 20 61 6c 6c 6f 77 65 64 0a 2a  is not allowed.*
29990 2a 20 74 6f 20 66 6f 6c 6c 6f 77 20 53 65 65 6b  * to follow Seek
299a0 47 54 2c 20 53 65 65 6b 47 45 2c 20 6f 72 20 4f  GT, SeekGE, or O
299b0 50 5f 52 65 77 69 6e 64 2e 0a 2a 2a 0a 2a 2a 20  P_Rewind..**.** 
299c0 54 68 65 20 50 31 20 63 75 72 73 6f 72 20 6d 75  The P1 cursor mu
299d0 73 74 20 62 65 20 66 6f 72 20 61 20 72 65 61 6c  st be for a real
299e0 20 74 61 62 6c 65 2c 20 6e 6f 74 20 61 20 70 73   table, not a ps
299f0 65 75 64 6f 2d 74 61 62 6c 65 2e 20 20 49 66 20  eudo-table.  If 
29a00 50 31 20 69 73 0a 2a 2a 20 6e 6f 74 20 6f 70 65  P1 is.** not ope
29a10 6e 20 74 68 65 6e 20 74 68 65 20 62 65 68 61 76  n then the behav
29a20 69 6f 72 20 69 73 20 75 6e 64 65 66 69 6e 65 64  ior is undefined
29a30 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 33 20 76  ..**.** The P3 v
29a40 61 6c 75 65 20 69 73 20 61 20 68 69 6e 74 20 74  alue is a hint t
29a50 6f 20 74 68 65 20 62 74 72 65 65 20 69 6d 70 6c  o the btree impl
29a60 65 6d 65 6e 74 61 74 69 6f 6e 2e 20 49 66 20 50  ementation. If P
29a70 33 3d 3d 31 2c 20 74 68 61 74 0a 2a 2a 20 6d 65  3==1, that.** me
29a80 61 6e 73 20 50 31 20 69 73 20 61 6e 20 53 51 4c  ans P1 is an SQL
29a90 20 69 6e 64 65 78 20 61 6e 64 20 74 68 61 74 20   index and that 
29aa0 74 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e  this instruction
29ab0 20 63 6f 75 6c 64 20 68 61 76 65 20 62 65 65 6e   could have been
29ac0 0a 2a 2a 20 6f 6d 69 74 74 65 64 20 69 66 20 74  .** omitted if t
29ad0 68 61 74 20 69 6e 64 65 78 20 68 61 64 20 62 65  hat index had be
29ae0 65 6e 20 75 6e 69 71 75 65 2e 20 20 50 33 20 69  en unique.  P3 i
29af0 73 20 75 73 75 61 6c 6c 79 20 30 2e 20 20 50 33  s usually 0.  P3
29b00 20 69 73 0a 2a 2a 20 61 6c 77 61 79 73 20 65 69   is.** always ei
29b10 74 68 65 72 20 30 20 6f 72 20 31 2e 0a 2a 2a 0a  ther 0 or 1..**.
29b20 2a 2a 20 50 34 20 69 73 20 61 6c 77 61 79 73 20  ** P4 is always 
29b30 6f 66 20 74 79 70 65 20 50 34 5f 41 44 56 41 4e  of type P4_ADVAN
29b40 43 45 2e 20 54 68 65 20 66 75 6e 63 74 69 6f 6e  CE. The function
29b50 20 70 6f 69 6e 74 65 72 20 70 6f 69 6e 74 73 20   pointer points 
29b60 74 6f 0a 2a 2a 20 73 71 6c 69 74 65 33 42 74 72  to.** sqlite3Btr
29b70 65 65 50 72 65 76 69 6f 75 73 28 29 2e 0a 2a 2a  eePrevious()..**
29b80 0a 2a 2a 20 49 66 20 50 35 20 69 73 20 70 6f 73  .** If P5 is pos
29b90 69 74 69 76 65 20 61 6e 64 20 74 68 65 20 6a 75  itive and the ju
29ba0 6d 70 20 69 73 20 74 61 6b 65 6e 2c 20 74 68 65  mp is taken, the
29bb0 6e 20 65 76 65 6e 74 20 63 6f 75 6e 74 65 72 0a  n event counter.
29bc0 2a 2a 20 6e 75 6d 62 65 72 20 50 35 2d 31 20 69  ** number P5-1 i
29bd0 6e 20 74 68 65 20 70 72 65 70 61 72 65 64 20 73  n the prepared s
29be0 74 61 74 65 6d 65 6e 74 20 69 73 20 69 6e 63 72  tatement is incr
29bf0 65 6d 65 6e 74 65 64 2e 0a 2a 2f 0a 2f 2a 20 4f  emented..*/./* O
29c00 70 63 6f 64 65 3a 20 50 72 65 76 49 66 4f 70 65  pcode: PrevIfOpe
29c10 6e 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35  n P1 P2 P3 P4 P5
29c20 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f  .**.** This opco
29c30 64 65 20 77 6f 72 6b 73 20 6a 75 73 74 20 6c 69  de works just li
29c40 6b 65 20 50 72 65 76 20 65 78 63 65 70 74 20 74  ke Prev except t
29c50 68 61 74 20 69 66 20 63 75 72 73 6f 72 20 50 31  hat if cursor P1
29c60 20 69 73 20 6e 6f 74 0a 2a 2a 20 6f 70 65 6e 20   is not.** open 
29c70 69 74 20 62 65 68 61 76 65 73 20 61 20 6e 6f 2d  it behaves a no-
29c80 6f 70 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65  op..*/./* Opcode
29c90 3a 20 53 6f 72 74 65 72 4e 65 78 74 20 50 31 20  : SorterNext P1 
29ca0 50 32 20 2a 20 2a 20 50 35 0a 2a 2a 0a 2a 2a 20  P2 * * P5.**.** 
29cb0 54 68 69 73 20 6f 70 63 6f 64 65 20 77 6f 72 6b  This opcode work
29cc0 73 20 6a 75 73 74 20 6c 69 6b 65 20 4f 50 5f 4e  s just like OP_N
29cd0 65 78 74 20 65 78 63 65 70 74 20 74 68 61 74 20  ext except that 
29ce0 50 31 20 6d 75 73 74 20 62 65 20 61 0a 2a 2a 20  P1 must be a.** 
29cf0 73 6f 72 74 65 72 20 6f 62 6a 65 63 74 20 66 6f  sorter object fo
29d00 72 20 77 68 69 63 68 20 74 68 65 20 4f 50 5f 53  r which the OP_S
29d10 6f 72 74 65 72 53 6f 72 74 20 6f 70 63 6f 64 65  orterSort opcode
29d20 20 68 61 73 20 62 65 65 6e 0a 2a 2a 20 69 6e 76   has been.** inv
29d30 6f 6b 65 64 2e 20 20 54 68 69 73 20 6f 70 63 6f  oked.  This opco
29d40 64 65 20 61 64 76 61 6e 63 65 73 20 74 68 65 20  de advances the 
29d50 63 75 72 73 6f 72 20 74 6f 20 74 68 65 20 6e 65  cursor to the ne
29d60 78 74 20 73 6f 72 74 65 64 0a 2a 2a 20 72 65 63  xt sorted.** rec
29d70 6f 72 64 2c 20 6f 72 20 6a 75 6d 70 73 20 74 6f  ord, or jumps to
29d80 20 50 32 20 69 66 20 74 68 65 72 65 20 61 72 65   P2 if there are
29d90 20 6e 6f 20 6d 6f 72 65 20 73 6f 72 74 65 64 20   no more sorted 
29da0 72 65 63 6f 72 64 73 2e 0a 2a 2f 0a 63 61 73 65  records..*/.case
29db0 20 4f 50 5f 53 6f 72 74 65 72 4e 65 78 74 3a 20   OP_SorterNext: 
29dc0 7b 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20  {  /* jump */.  
29dd0 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a  VdbeCursor *pC;.
29de0 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72  .  pC = p->apCsr
29df0 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
29e00 65 72 74 28 20 69 73 53 6f 72 74 65 72 28 70 43  ert( isSorter(pC
29e10 29 20 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69  ) );.  rc = sqli
29e20 74 65 33 56 64 62 65 53 6f 72 74 65 72 4e 65 78  te3VdbeSorterNex
29e30 74 28 64 62 2c 20 70 43 29 3b 0a 20 20 67 6f 74  t(db, pC);.  got
29e40 6f 20 6e 65 78 74 5f 74 61 69 6c 3b 0a 63 61 73  o next_tail;.cas
29e50 65 20 4f 50 5f 50 72 65 76 49 66 4f 70 65 6e 3a  e OP_PrevIfOpen:
29e60 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 63      /* jump */.c
29e70 61 73 65 20 4f 50 5f 4e 65 78 74 49 66 4f 70 65  ase OP_NextIfOpe
29e80 6e 3a 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f  n:    /* jump */
29e90 0a 20 20 69 66 28 20 70 2d 3e 61 70 43 73 72 5b  .  if( p->apCsr[
29ea0 70 4f 70 2d 3e 70 31 5d 3d 3d 30 20 29 20 62 72  pOp->p1]==0 ) br
29eb0 65 61 6b 3b 0a 20 20 2f 2a 20 46 61 6c 6c 20 74  eak;.  /* Fall t
29ec0 68 72 6f 75 67 68 20 2a 2f 0a 63 61 73 65 20 4f  hrough */.case O
29ed0 50 5f 50 72 65 76 3a 20 20 20 20 20 20 20 20 20  P_Prev:         
29ee0 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 63 61 73 65   /* jump */.case
29ef0 20 4f 50 5f 4e 65 78 74 3a 20 20 20 20 20 20 20   OP_Next:       
29f00 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20     /* jump */.  
29f10 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
29f20 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d  =0 && pOp->p1<p-
29f30 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 61 73  >nCursor );.  as
29f40 73 65 72 74 28 20 70 4f 70 2d 3e 70 35 3c 41 72  sert( pOp->p5<Ar
29f50 72 61 79 53 69 7a 65 28 70 2d 3e 61 43 6f 75 6e  raySize(p->aCoun
29f60 74 65 72 29 20 29 3b 0a 20 20 70 43 20 3d 20 70  ter) );.  pC = p
29f70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d  ->apCsr[pOp->p1]
29f80 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d  ;.  assert( pC!=
29f90 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  0 );.  assert( p
29fa0 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74  C->deferredMovet
29fb0 6f 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  o==0 );.  assert
29fc0 28 20 70 43 2d 3e 65 43 75 72 54 79 70 65 3d 3d  ( pC->eCurType==
29fd0 43 55 52 54 59 50 45 5f 42 54 52 45 45 20 29 3b  CURTYPE_BTREE );
29fe0 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
29ff0 6f 70 63 6f 64 65 21 3d 4f 50 5f 4e 65 78 74 20  opcode!=OP_Next 
2a000 7c 7c 20 70 4f 70 2d 3e 70 34 2e 78 41 64 76 61  || pOp->p4.xAdva
2a010 6e 63 65 3d 3d 73 71 6c 69 74 65 33 42 74 72 65  nce==sqlite3Btre
2a020 65 4e 65 78 74 20 29 3b 0a 20 20 61 73 73 65 72  eNext );.  asser
2a030 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 21 3d  t( pOp->opcode!=
2a040 4f 50 5f 50 72 65 76 20 7c 7c 20 70 4f 70 2d 3e  OP_Prev || pOp->
2a050 70 34 2e 78 41 64 76 61 6e 63 65 3d 3d 73 71 6c  p4.xAdvance==sql
2a060 69 74 65 33 42 74 72 65 65 50 72 65 76 69 6f 75  ite3BtreePreviou
2a070 73 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  s );.  assert( p
2a080 4f 70 2d 3e 6f 70 63 6f 64 65 21 3d 4f 50 5f 4e  Op->opcode!=OP_N
2a090 65 78 74 49 66 4f 70 65 6e 20 7c 7c 20 70 4f 70  extIfOpen || pOp
2a0a0 2d 3e 70 34 2e 78 41 64 76 61 6e 63 65 3d 3d 73  ->p4.xAdvance==s
2a0b0 71 6c 69 74 65 33 42 74 72 65 65 4e 65 78 74 20  qlite3BtreeNext 
2a0c0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  );.  assert( pOp
2a0d0 2d 3e 6f 70 63 6f 64 65 21 3d 4f 50 5f 50 72 65  ->opcode!=OP_Pre
2a0e0 76 49 66 4f 70 65 6e 20 7c 7c 20 70 4f 70 2d 3e  vIfOpen || pOp->
2a0f0 70 34 2e 78 41 64 76 61 6e 63 65 3d 3d 73 71 6c  p4.xAdvance==sql
2a100 69 74 65 33 42 74 72 65 65 50 72 65 76 69 6f 75  ite3BtreePreviou
2a110 73 29 3b 0a 0a 20 20 2f 2a 20 54 68 65 20 4e 65  s);..  /* The Ne
2a120 78 74 20 6f 70 63 6f 64 65 20 69 73 20 6f 6e 6c  xt opcode is onl
2a130 79 20 75 73 65 64 20 61 66 74 65 72 20 53 65 65  y used after See
2a140 6b 47 54 2c 20 53 65 65 6b 47 45 2c 20 61 6e 64  kGT, SeekGE, and
2a150 20 52 65 77 69 6e 64 2e 0a 20 20 2a 2a 20 54 68   Rewind..  ** Th
2a160 65 20 50 72 65 76 20 6f 70 63 6f 64 65 20 69 73  e Prev opcode is
2a170 20 6f 6e 6c 79 20 75 73 65 64 20 61 66 74 65 72   only used after
2a180 20 53 65 65 6b 4c 54 2c 20 53 65 65 6b 4c 45 2c   SeekLT, SeekLE,
2a190 20 61 6e 64 20 4c 61 73 74 2e 20 2a 2f 0a 20 20   and Last. */.  
2a1a0 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63  assert( pOp->opc
2a1b0 6f 64 65 21 3d 4f 50 5f 4e 65 78 74 20 7c 7c 20  ode!=OP_Next || 
2a1c0 70 4f 70 2d 3e 6f 70 63 6f 64 65 21 3d 4f 50 5f  pOp->opcode!=OP_
2a1d0 4e 65 78 74 49 66 4f 70 65 6e 0a 20 20 20 20 20  NextIfOpen.     
2a1e0 20 20 7c 7c 20 70 43 2d 3e 73 65 65 6b 4f 70 3d    || pC->seekOp=
2a1f0 3d 4f 50 5f 53 65 65 6b 47 54 20 7c 7c 20 70 43  =OP_SeekGT || pC
2a200 2d 3e 73 65 65 6b 4f 70 3d 3d 4f 50 5f 53 65 65  ->seekOp==OP_See
2a210 6b 47 45 0a 20 20 20 20 20 20 20 7c 7c 20 70 43  kGE.       || pC
2a220 2d 3e 73 65 65 6b 4f 70 3d 3d 4f 50 5f 52 65 77  ->seekOp==OP_Rew
2a230 69 6e 64 20 7c 7c 20 70 43 2d 3e 73 65 65 6b 4f  ind || pC->seekO
2a240 70 3d 3d 4f 50 5f 46 6f 75 6e 64 29 3b 0a 20 20  p==OP_Found);.  
2a250 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63  assert( pOp->opc
2a260 6f 64 65 21 3d 4f 50 5f 50 72 65 76 20 7c 7c 20  ode!=OP_Prev || 
2a270 70 4f 70 2d 3e 6f 70 63 6f 64 65 21 3d 4f 50 5f  pOp->opcode!=OP_
2a280 50 72 65 76 49 66 4f 70 65 6e 0a 20 20 20 20 20  PrevIfOpen.     
2a290 20 20 7c 7c 20 70 43 2d 3e 73 65 65 6b 4f 70 3d    || pC->seekOp=
2a2a0 3d 4f 50 5f 53 65 65 6b 4c 54 20 7c 7c 20 70 43  =OP_SeekLT || pC
2a2b0 2d 3e 73 65 65 6b 4f 70 3d 3d 4f 50 5f 53 65 65  ->seekOp==OP_See
2a2c0 6b 4c 45 0a 20 20 20 20 20 20 20 7c 7c 20 70 43  kLE.       || pC
2a2d0 2d 3e 73 65 65 6b 4f 70 3d 3d 4f 50 5f 4c 61 73  ->seekOp==OP_Las
2a2e0 74 20 29 3b 0a 0a 20 20 72 63 20 3d 20 70 4f 70  t );..  rc = pOp
2a2f0 2d 3e 70 34 2e 78 41 64 76 61 6e 63 65 28 70 43  ->p4.xAdvance(pC
2a300 2d 3e 75 63 2e 70 43 75 72 73 6f 72 2c 20 70 4f  ->uc.pCursor, pO
2a310 70 2d 3e 70 33 29 3b 0a 6e 65 78 74 5f 74 61 69  p->p3);.next_tai
2a320 6c 3a 0a 20 20 70 43 2d 3e 63 61 63 68 65 53 74  l:.  pC->cacheSt
2a330 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41  atus = CACHE_STA
2a340 4c 45 3b 0a 20 20 56 64 62 65 42 72 61 6e 63 68  LE;.  VdbeBranch
2a350 54 61 6b 65 6e 28 72 63 3d 3d 53 51 4c 49 54 45  Taken(rc==SQLITE
2a360 5f 4f 4b 2c 32 29 3b 0a 20 20 69 66 28 20 72 63  _OK,2);.  if( rc
2a370 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20  ==SQLITE_OK ){. 
2a380 20 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d     pC->nullRow =
2a390 20 30 3b 0a 20 20 20 20 70 2d 3e 61 43 6f 75 6e   0;.    p->aCoun
2a3a0 74 65 72 5b 70 4f 70 2d 3e 70 35 5d 2b 2b 3b 0a  ter[pOp->p5]++;.
2a3b0 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 54 45  #ifdef SQLITE_TE
2a3c0 53 54 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 73  ST.    sqlite3_s
2a3d0 65 61 72 63 68 5f 63 6f 75 6e 74 2b 2b 3b 0a 23  earch_count++;.#
2a3e0 65 6e 64 69 66 0a 20 20 20 20 67 6f 74 6f 20 6a  endif.    goto j
2a3f0 75 6d 70 5f 74 6f 5f 70 32 5f 61 6e 64 5f 63 68  ump_to_p2_and_ch
2a400 65 63 6b 5f 66 6f 72 5f 69 6e 74 65 72 72 75 70  eck_for_interrup
2a410 74 3b 0a 20 20 7d 0a 20 20 69 66 28 20 72 63 21  t;.  }.  if( rc!
2a420 3d 53 51 4c 49 54 45 5f 44 4f 4e 45 20 29 20 67  =SQLITE_DONE ) g
2a430 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
2a440 5f 65 72 72 6f 72 3b 0a 20 20 72 63 20 3d 20 53  _error;.  rc = S
2a450 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20 70 43 2d 3e  QLITE_OK;.  pC->
2a460 6e 75 6c 6c 52 6f 77 20 3d 20 31 3b 0a 20 20 67  nullRow = 1;.  g
2a470 6f 74 6f 20 63 68 65 63 6b 5f 66 6f 72 5f 69 6e  oto check_for_in
2a480 74 65 72 72 75 70 74 3b 0a 7d 0a 0a 2f 2a 20 4f  terrupt;.}../* O
2a490 70 63 6f 64 65 3a 20 49 64 78 49 6e 73 65 72 74  pcode: IdxInsert
2a4a0 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a   P1 P2 P3 P4 P5.
2a4b0 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79  ** Synopsis: key
2a4c0 3d 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20 52 65 67  =r[P2].**.** Reg
2a4d0 69 73 74 65 72 20 50 32 20 68 6f 6c 64 73 20 61  ister P2 holds a
2a4e0 6e 20 53 51 4c 20 69 6e 64 65 78 20 6b 65 79 20  n SQL index key 
2a4f0 6d 61 64 65 20 75 73 69 6e 67 20 74 68 65 0a 2a  made using the.*
2a500 2a 20 4d 61 6b 65 52 65 63 6f 72 64 20 69 6e 73  * MakeRecord ins
2a510 74 72 75 63 74 69 6f 6e 73 2e 20 20 54 68 69 73  tructions.  This
2a520 20 6f 70 63 6f 64 65 20 77 72 69 74 65 73 20 74   opcode writes t
2a530 68 61 74 20 6b 65 79 0a 2a 2a 20 69 6e 74 6f 20  hat key.** into 
2a540 74 68 65 20 69 6e 64 65 78 20 50 31 2e 20 20 44  the index P1.  D
2a550 61 74 61 20 66 6f 72 20 74 68 65 20 65 6e 74 72  ata for the entr
2a560 79 20 69 73 20 6e 69 6c 2e 0a 2a 2a 0a 2a 2a 20  y is nil..**.** 
2a570 49 66 20 50 34 20 69 73 20 6e 6f 74 20 7a 65 72  If P4 is not zer
2a580 6f 2c 20 74 68 65 6e 20 69 74 20 69 73 20 74 68  o, then it is th
2a590 65 20 6e 75 6d 62 65 72 20 6f 66 20 76 61 6c 75  e number of valu
2a5a0 65 73 20 69 6e 20 74 68 65 20 75 6e 70 61 63 6b  es in the unpack
2a5b0 65 64 0a 2a 2a 20 6b 65 79 20 6f 66 20 72 65 67  ed.** key of reg
2a5c0 28 50 32 29 2e 20 20 49 6e 20 74 68 61 74 20 63  (P2).  In that c
2a5d0 61 73 65 2c 20 50 33 20 69 73 20 74 68 65 20 69  ase, P3 is the i
2a5e0 6e 64 65 78 20 6f 66 20 74 68 65 20 66 69 72 73  ndex of the firs
2a5f0 74 20 72 65 67 69 73 74 65 72 0a 2a 2a 20 66 6f  t register.** fo
2a600 72 20 74 68 65 20 75 6e 70 61 63 6b 65 64 20 6b  r the unpacked k
2a610 65 79 2e 20 20 54 68 65 20 61 76 61 69 6c 61 62  ey.  The availab
2a620 69 6c 69 74 79 20 6f 66 20 74 68 65 20 75 6e 70  ility of the unp
2a630 61 63 6b 65 64 20 6b 65 79 20 63 61 6e 20 73 6f  acked key can so
2a640 6d 65 74 69 6d 65 73 0a 2a 2a 20 62 65 20 61 6e  metimes.** be an
2a650 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 2e 0a 2a   optimization..*
2a660 2a 0a 2a 2a 20 49 66 20 50 35 20 68 61 73 20 74  *.** If P5 has t
2a670 68 65 20 4f 50 46 4c 41 47 5f 41 50 50 45 4e 44  he OPFLAG_APPEND
2a680 20 62 69 74 20 73 65 74 2c 20 74 68 61 74 20 69   bit set, that i
2a690 73 20 61 20 68 69 6e 74 20 74 6f 20 74 68 65 20  s a hint to the 
2a6a0 62 2d 74 72 65 65 20 6c 61 79 65 72 0a 2a 2a 20  b-tree layer.** 
2a6b0 74 68 61 74 20 74 68 69 73 20 69 6e 73 65 72 74  that this insert
2a6c0 20 69 73 20 6c 69 6b 65 6c 79 20 74 6f 20 62 65   is likely to be
2a6d0 20 61 6e 20 61 70 70 65 6e 64 2e 0a 2a 2a 0a 2a   an append..**.*
2a6e0 2a 20 49 66 20 50 35 20 68 61 73 20 74 68 65 20  * If P5 has the 
2a6f0 4f 50 46 4c 41 47 5f 4e 43 48 41 4e 47 45 20 62  OPFLAG_NCHANGE b
2a700 69 74 20 73 65 74 2c 20 74 68 65 6e 20 74 68 65  it set, then the
2a710 20 63 68 61 6e 67 65 20 63 6f 75 6e 74 65 72 20   change counter 
2a720 69 73 0a 2a 2a 20 69 6e 63 72 65 6d 65 6e 74 65  is.** incremente
2a730 64 20 62 79 20 74 68 69 73 20 69 6e 73 74 72 75  d by this instru
2a740 63 74 69 6f 6e 2e 20 20 49 66 20 74 68 65 20 4f  ction.  If the O
2a750 50 46 4c 41 47 5f 4e 43 48 41 4e 47 45 20 62 69  PFLAG_NCHANGE bi
2a760 74 20 69 73 20 63 6c 65 61 72 2c 0a 2a 2a 20 74  t is clear,.** t
2a770 68 65 6e 20 74 68 65 20 63 68 61 6e 67 65 20 63  hen the change c
2a780 6f 75 6e 74 65 72 20 69 73 20 75 6e 63 68 61 6e  ounter is unchan
2a790 67 65 64 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68  ged..**.** If th
2a7a0 65 20 4f 50 46 4c 41 47 5f 55 53 45 53 45 45 4b  e OPFLAG_USESEEK
2a7b0 52 45 53 55 4c 54 20 66 6c 61 67 20 6f 66 20 50  RESULT flag of P
2a7c0 35 20 69 73 20 73 65 74 2c 20 74 68 65 20 69 6d  5 is set, the im
2a7d0 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 6d 69 67  plementation mig
2a7e0 68 74 0a 2a 2a 20 72 75 6e 20 66 61 73 74 65 72  ht.** run faster
2a7f0 20 62 79 20 61 76 6f 69 64 69 6e 67 20 61 6e 20   by avoiding an 
2a800 75 6e 6e 65 63 65 73 73 61 72 79 20 73 65 65 6b  unnecessary seek
2a810 20 6f 6e 20 63 75 72 73 6f 72 20 50 31 2e 20 20   on cursor P1.  
2a820 48 6f 77 65 76 65 72 2c 0a 2a 2a 20 74 68 65 20  However,.** the 
2a830 4f 50 46 4c 41 47 5f 55 53 45 53 45 45 4b 52 45  OPFLAG_USESEEKRE
2a840 53 55 4c 54 20 66 6c 61 67 20 6d 75 73 74 20 6f  SULT flag must o
2a850 6e 6c 79 20 62 65 20 73 65 74 20 69 66 20 74 68  nly be set if th
2a860 65 72 65 20 68 61 76 65 20 62 65 65 6e 20 6e 6f  ere have been no
2a870 20 70 72 69 6f 72 0a 2a 2a 20 73 65 65 6b 73 20   prior.** seeks 
2a880 6f 6e 20 74 68 65 20 63 75 72 73 6f 72 20 6f 72  on the cursor or
2a890 20 69 66 20 74 68 65 20 6d 6f 73 74 20 72 65 63   if the most rec
2a8a0 65 6e 74 20 73 65 65 6b 20 75 73 65 64 20 61 20  ent seek used a 
2a8b0 6b 65 79 20 65 71 75 69 76 61 6c 65 6e 74 0a 2a  key equivalent.*
2a8c0 2a 20 74 6f 20 50 32 2e 20 0a 2a 2a 0a 2a 2a 20  * to P2. .**.** 
2a8d0 54 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e  This instruction
2a8e0 20 6f 6e 6c 79 20 77 6f 72 6b 73 20 66 6f 72 20   only works for 
2a8f0 69 6e 64 69 63 65 73 2e 20 20 54 68 65 20 65 71  indices.  The eq
2a900 75 69 76 61 6c 65 6e 74 20 69 6e 73 74 72 75 63  uivalent instruc
2a910 74 69 6f 6e 0a 2a 2a 20 66 6f 72 20 74 61 62 6c  tion.** for tabl
2a920 65 73 20 69 73 20 4f 50 5f 49 6e 73 65 72 74 2e  es is OP_Insert.
2a930 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53  .*/./* Opcode: S
2a940 6f 72 74 65 72 49 6e 73 65 72 74 20 50 31 20 50  orterInsert P1 P
2a950 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70  2 * * *.** Synop
2a960 73 69 73 3a 20 6b 65 79 3d 72 5b 50 32 5d 0a 2a  sis: key=r[P2].*
2a970 2a 0a 2a 2a 20 52 65 67 69 73 74 65 72 20 50 32  *.** Register P2
2a980 20 68 6f 6c 64 73 20 61 6e 20 53 51 4c 20 69 6e   holds an SQL in
2a990 64 65 78 20 6b 65 79 20 6d 61 64 65 20 75 73 69  dex key made usi
2a9a0 6e 67 20 74 68 65 0a 2a 2a 20 4d 61 6b 65 52 65  ng the.** MakeRe
2a9b0 63 6f 72 64 20 69 6e 73 74 72 75 63 74 69 6f 6e  cord instruction
2a9c0 73 2e 20 20 54 68 69 73 20 6f 70 63 6f 64 65 20  s.  This opcode 
2a9d0 77 72 69 74 65 73 20 74 68 61 74 20 6b 65 79 0a  writes that key.
2a9e0 2a 2a 20 69 6e 74 6f 20 74 68 65 20 73 6f 72 74  ** into the sort
2a9f0 65 72 20 50 31 2e 20 20 44 61 74 61 20 66 6f 72  er P1.  Data for
2aa00 20 74 68 65 20 65 6e 74 72 79 20 69 73 20 6e 69   the entry is ni
2aa10 6c 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 6f  l..*/.case OP_So
2aa20 72 74 65 72 49 6e 73 65 72 74 3a 20 20 20 20 20  rterInsert:     
2aa30 20 20 2f 2a 20 69 6e 32 20 2a 2f 0a 63 61 73 65    /* in2 */.case
2aa40 20 4f 50 5f 49 64 78 49 6e 73 65 72 74 3a 20 7b   OP_IdxInsert: {
2aa50 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 32 20 2a          /* in2 *
2aa60 2f 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a  /.  VdbeCursor *
2aa70 70 43 3b 0a 20 20 42 74 72 65 65 50 61 79 6c 6f  pC;.  BtreePaylo
2aa80 61 64 20 78 3b 0a 0a 20 20 61 73 73 65 72 74 28  ad x;..  assert(
2aa90 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70   pOp->p1>=0 && p
2aaa0 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f  Op->p1<p->nCurso
2aab0 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61  r );.  pC = p->a
2aac0 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  pCsr[pOp->p1];. 
2aad0 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29   assert( pC!=0 )
2aae0 3b 0a 20 20 61 73 73 65 72 74 28 20 69 73 53 6f  ;.  assert( isSo
2aaf0 72 74 65 72 28 70 43 29 3d 3d 28 70 4f 70 2d 3e  rter(pC)==(pOp->
2ab00 6f 70 63 6f 64 65 3d 3d 4f 50 5f 53 6f 72 74 65  opcode==OP_Sorte
2ab10 72 49 6e 73 65 72 74 29 20 29 3b 0a 20 20 70 49  rInsert) );.  pI
2ab20 6e 32 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n2 = &aMem[pOp->
2ab30 70 32 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p2];.  assert( p
2ab40 49 6e 32 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  In2->flags & MEM
2ab50 5f 42 6c 6f 62 20 29 3b 0a 20 20 69 66 28 20 70  _Blob );.  if( p
2ab60 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f  Op->p5 & OPFLAG_
2ab70 4e 43 48 41 4e 47 45 20 29 20 70 2d 3e 6e 43 68  NCHANGE ) p->nCh
2ab80 61 6e 67 65 2b 2b 3b 0a 20 20 61 73 73 65 72 74  ange++;.  assert
2ab90 28 20 70 43 2d 3e 65 43 75 72 54 79 70 65 3d 3d  ( pC->eCurType==
2aba0 43 55 52 54 59 50 45 5f 42 54 52 45 45 20 7c 7c  CURTYPE_BTREE ||
2abb0 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50   pOp->opcode==OP
2abc0 5f 53 6f 72 74 65 72 49 6e 73 65 72 74 20 29 3b  _SorterInsert );
2abd0 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69  .  assert( pC->i
2abe0 73 54 61 62 6c 65 3d 3d 30 20 29 3b 0a 20 20 72  sTable==0 );.  r
2abf0 63 20 3d 20 45 78 70 61 6e 64 42 6c 6f 62 28 70  c = ExpandBlob(p
2ac00 49 6e 32 29 3b 0a 20 20 69 66 28 20 72 63 20 29  In2);.  if( rc )
2ac10 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
2ac20 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 69 66 28 20  to_error;.  if( 
2ac30 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  pOp->opcode==OP_
2ac40 53 6f 72 74 65 72 49 6e 73 65 72 74 20 29 7b 0a  SorterInsert ){.
2ac50 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
2ac60 56 64 62 65 53 6f 72 74 65 72 57 72 69 74 65 28  VdbeSorterWrite(
2ac70 70 43 2c 20 70 49 6e 32 29 3b 0a 20 20 7d 65 6c  pC, pIn2);.  }el
2ac80 73 65 7b 0a 20 20 20 20 78 2e 6e 4b 65 79 20 3d  se{.    x.nKey =
2ac90 20 70 49 6e 32 2d 3e 6e 3b 0a 20 20 20 20 78 2e   pIn2->n;.    x.
2aca0 70 4b 65 79 20 3d 20 70 49 6e 32 2d 3e 7a 3b 0a  pKey = pIn2->z;.
2acb0 20 20 20 20 78 2e 61 4d 65 6d 20 3d 20 61 4d 65      x.aMem = aMe
2acc0 6d 20 2b 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 20  m + pOp->p3;.   
2acd0 20 78 2e 6e 4d 65 6d 20 3d 20 28 75 31 36 29 70   x.nMem = (u16)p
2ace0 4f 70 2d 3e 70 34 2e 69 3b 0a 20 20 20 20 72 63  Op->p4.i;.    rc
2acf0 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 49   = sqlite3BtreeI
2ad00 6e 73 65 72 74 28 70 43 2d 3e 75 63 2e 70 43 75  nsert(pC->uc.pCu
2ad10 72 73 6f 72 2c 20 26 78 2c 0a 20 20 20 20 20 20  rsor, &x,.      
2ad20 20 20 20 28 70 4f 70 2d 3e 70 35 20 26 20 28 4f     (pOp->p5 & (O
2ad30 50 46 4c 41 47 5f 41 50 50 45 4e 44 7c 4f 50 46  PFLAG_APPEND|OPF
2ad40 4c 41 47 5f 53 41 56 45 50 4f 53 49 54 49 4f 4e  LAG_SAVEPOSITION
2ad50 29 29 2c 20 0a 20 20 20 20 20 20 20 20 28 28 70  )), .        ((p
2ad60 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f  Op->p5 & OPFLAG_
2ad70 55 53 45 53 45 45 4b 52 45 53 55 4c 54 29 20 3f  USESEEKRESULT) ?
2ad80 20 70 43 2d 3e 73 65 65 6b 52 65 73 75 6c 74 20   pC->seekResult 
2ad90 3a 20 30 29 0a 20 20 20 20 20 20 20 20 29 3b 0a  : 0).        );.
2ada0 20 20 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e      assert( pC->
2adb0 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 3d 3d  deferredMoveto==
2adc0 30 20 29 3b 0a 20 20 20 20 70 43 2d 3e 63 61 63  0 );.    pC->cac
2add0 68 65 53 74 61 74 75 73 20 3d 20 43 41 43 48 45  heStatus = CACHE
2ade0 5f 53 54 41 4c 45 3b 0a 20 20 7d 0a 20 20 69 66  _STALE;.  }.  if
2adf0 28 20 72 63 29 20 67 6f 74 6f 20 61 62 6f 72 74  ( rc) goto abort
2ae00 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20  _due_to_error;. 
2ae10 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
2ae20 63 6f 64 65 3a 20 49 64 78 44 65 6c 65 74 65 20  code: IdxDelete 
2ae30 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20  P1 P2 P3 * *.** 
2ae40 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b  Synopsis: key=r[
2ae50 50 32 40 50 33 5d 0a 2a 2a 0a 2a 2a 20 54 68 65  P2@P3].**.** The
2ae60 20 63 6f 6e 74 65 6e 74 20 6f 66 20 50 33 20 72   content of P3 r
2ae70 65 67 69 73 74 65 72 73 20 73 74 61 72 74 69 6e  egisters startin
2ae80 67 20 61 74 20 72 65 67 69 73 74 65 72 20 50 32  g at register P2
2ae90 20 66 6f 72 6d 0a 2a 2a 20 61 6e 20 75 6e 70 61   form.** an unpa
2aea0 63 6b 65 64 20 69 6e 64 65 78 20 6b 65 79 2e 20  cked index key. 
2aeb0 54 68 69 73 20 6f 70 63 6f 64 65 20 72 65 6d 6f  This opcode remo
2aec0 76 65 73 20 74 68 61 74 20 65 6e 74 72 79 20 66  ves that entry f
2aed0 72 6f 6d 20 74 68 65 20 0a 2a 2a 20 69 6e 64 65  rom the .** inde
2aee0 78 20 6f 70 65 6e 65 64 20 62 79 20 63 75 72 73  x opened by curs
2aef0 6f 72 20 50 31 2e 0a 2a 2f 0a 63 61 73 65 20 4f  or P1..*/.case O
2af00 50 5f 49 64 78 44 65 6c 65 74 65 3a 20 7b 0a 20  P_IdxDelete: {. 
2af10 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b   VdbeCursor *pC;
2af20 0a 20 20 42 74 43 75 72 73 6f 72 20 2a 70 43 72  .  BtCursor *pCr
2af30 73 72 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a 20  sr;.  int res;. 
2af40 20 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 20   UnpackedRecord 
2af50 72 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f  r;..  assert( pO
2af60 70 2d 3e 70 33 3e 30 20 29 3b 0a 20 20 61 73 73  p->p3>0 );.  ass
2af70 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e 30 20 26  ert( pOp->p2>0 &
2af80 26 20 70 4f 70 2d 3e 70 32 2b 70 4f 70 2d 3e 70  & pOp->p2+pOp->p
2af90 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20  3<=(p->nMem+1 - 
2afa0 70 2d 3e 6e 43 75 72 73 6f 72 29 2b 31 20 29 3b  p->nCursor)+1 );
2afb0 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
2afc0 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31  p1>=0 && pOp->p1
2afd0 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20  <p->nCursor );. 
2afe0 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70   pC = p->apCsr[p
2aff0 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72  Op->p1];.  asser
2b000 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 61 73  t( pC!=0 );.  as
2b010 73 65 72 74 28 20 70 43 2d 3e 65 43 75 72 54 79  sert( pC->eCurTy
2b020 70 65 3d 3d 43 55 52 54 59 50 45 5f 42 54 52 45  pe==CURTYPE_BTRE
2b030 45 20 29 3b 0a 20 20 70 43 72 73 72 20 3d 20 70  E );.  pCrsr = p
2b040 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 3b 0a 20  C->uc.pCursor;. 
2b050 20 61 73 73 65 72 74 28 20 70 43 72 73 72 21 3d   assert( pCrsr!=
2b060 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  0 );.  assert( p
2b070 4f 70 2d 3e 70 35 3d 3d 30 20 29 3b 0a 20 20 72  Op->p5==0 );.  r
2b080 2e 70 4b 65 79 49 6e 66 6f 20 3d 20 70 43 2d 3e  .pKeyInfo = pC->
2b090 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 72 2e 6e 46  pKeyInfo;.  r.nF
2b0a0 69 65 6c 64 20 3d 20 28 75 31 36 29 70 4f 70 2d  ield = (u16)pOp-
2b0b0 3e 70 33 3b 0a 20 20 72 2e 64 65 66 61 75 6c 74  >p3;.  r.default
2b0c0 5f 72 63 20 3d 20 30 3b 0a 20 20 72 2e 61 4d 65  _rc = 0;.  r.aMe
2b0d0 6d 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  m = &aMem[pOp->p
2b0e0 32 5d 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74  2];.  rc = sqlit
2b0f0 65 33 42 74 72 65 65 4d 6f 76 65 74 6f 55 6e 70  e3BtreeMovetoUnp
2b100 61 63 6b 65 64 28 70 43 72 73 72 2c 20 26 72 2c  acked(pCrsr, &r,
2b110 20 30 2c 20 30 2c 20 26 72 65 73 29 3b 0a 20 20   0, 0, &res);.  
2b120 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62  if( rc ) goto ab
2b130 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
2b140 3b 0a 20 20 69 66 28 20 72 65 73 3d 3d 30 20 29  ;.  if( res==0 )
2b150 7b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74  {.    rc = sqlit
2b160 65 33 42 74 72 65 65 44 65 6c 65 74 65 28 70 43  e3BtreeDelete(pC
2b170 72 73 72 2c 20 42 54 52 45 45 5f 41 55 58 44 45  rsr, BTREE_AUXDE
2b180 4c 45 54 45 29 3b 0a 20 20 20 20 69 66 28 20 72  LETE);.    if( r
2b190 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64  c ) goto abort_d
2b1a0 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 7d  ue_to_error;.  }
2b1b0 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 64  .  assert( pC->d
2b1c0 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 3d 3d 30  eferredMoveto==0
2b1d0 20 29 3b 0a 20 20 70 43 2d 3e 63 61 63 68 65 53   );.  pC->cacheS
2b1e0 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54  tatus = CACHE_ST
2b1f0 41 4c 45 3b 0a 20 20 70 43 2d 3e 73 65 65 6b 52  ALE;.  pC->seekR
2b200 65 73 75 6c 74 20 3d 20 30 3b 0a 20 20 62 72 65  esult = 0;.  bre
2b210 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
2b220 3a 20 44 65 66 65 72 72 65 64 53 65 65 6b 20 50  : DeferredSeek P
2b230 31 20 2a 20 50 33 20 50 34 20 2a 0a 2a 2a 20 53  1 * P3 P4 *.** S
2b240 79 6e 6f 70 73 69 73 3a 20 4d 6f 76 65 20 50 33  ynopsis: Move P3
2b250 20 74 6f 20 50 31 2e 72 6f 77 69 64 20 69 66 20   to P1.rowid if 
2b260 6e 65 65 64 65 64 0a 2a 2a 0a 2a 2a 20 50 31 20  needed.**.** P1 
2b270 69 73 20 61 6e 20 6f 70 65 6e 20 69 6e 64 65 78  is an open index
2b280 20 63 75 72 73 6f 72 20 61 6e 64 20 50 33 20 69   cursor and P3 i
2b290 73 20 61 20 63 75 72 73 6f 72 20 6f 6e 20 74 68  s a cursor on th
2b2a0 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 0a  e corresponding.
2b2b0 2a 2a 20 74 61 62 6c 65 2e 20 20 54 68 69 73 20  ** table.  This 
2b2c0 6f 70 63 6f 64 65 20 64 6f 65 73 20 61 20 64 65  opcode does a de
2b2d0 66 65 72 72 65 64 20 73 65 65 6b 20 6f 66 20 74  ferred seek of t
2b2e0 68 65 20 50 33 20 74 61 62 6c 65 20 63 75 72 73  he P3 table curs
2b2f0 6f 72 0a 2a 2a 20 74 6f 20 74 68 65 20 72 6f 77  or.** to the row
2b300 20 74 68 61 74 20 63 6f 72 72 65 73 70 6f 6e 64   that correspond
2b310 73 20 74 6f 20 74 68 65 20 63 75 72 72 65 6e 74  s to the current
2b320 20 72 6f 77 20 6f 66 20 50 31 2e 0a 2a 2a 0a 2a   row of P1..**.*
2b330 2a 20 54 68 69 73 20 69 73 20 61 20 64 65 66 65  * This is a defe
2b340 72 72 65 64 20 73 65 65 6b 2e 20 20 4e 6f 74 68  rred seek.  Noth
2b350 69 6e 67 20 61 63 74 75 61 6c 6c 79 20 68 61 70  ing actually hap
2b360 70 65 6e 73 20 75 6e 74 69 6c 0a 2a 2a 20 74 68  pens until.** th
2b370 65 20 63 75 72 73 6f 72 20 69 73 20 75 73 65 64  e cursor is used
2b380 20 74 6f 20 72 65 61 64 20 61 20 72 65 63 6f 72   to read a recor
2b390 64 2e 20 20 54 68 61 74 20 77 61 79 2c 20 69 66  d.  That way, if
2b3a0 20 6e 6f 20 72 65 61 64 73 0a 2a 2a 20 6f 63 63   no reads.** occ
2b3b0 75 72 2c 20 6e 6f 20 75 6e 6e 65 63 65 73 73 61  ur, no unnecessa
2b3c0 72 79 20 49 2f 4f 20 68 61 70 70 65 6e 73 2e 0a  ry I/O happens..
2b3d0 2a 2a 0a 2a 2a 20 50 34 20 6d 61 79 20 62 65 20  **.** P4 may be 
2b3e0 61 6e 20 61 72 72 61 79 20 6f 66 20 69 6e 74 65  an array of inte
2b3f0 67 65 72 73 20 28 74 79 70 65 20 50 34 5f 49 4e  gers (type P4_IN
2b400 54 41 52 52 41 59 29 20 63 6f 6e 74 61 69 6e 69  TARRAY) containi
2b410 6e 67 0a 2a 2a 20 6f 6e 65 20 65 6e 74 72 79 20  ng.** one entry 
2b420 66 6f 72 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20  for each column 
2b430 69 6e 20 74 68 65 20 50 33 20 74 61 62 6c 65 2e  in the P3 table.
2b440 20 20 49 66 20 61 72 72 61 79 20 65 6e 74 72 79    If array entry
2b450 20 61 28 69 29 0a 2a 2a 20 69 73 20 6e 6f 6e 2d   a(i).** is non-
2b460 7a 65 72 6f 2c 20 74 68 65 6e 20 72 65 61 64 69  zero, then readi
2b470 6e 67 20 63 6f 6c 75 6d 6e 20 61 28 69 29 2d 31  ng column a(i)-1
2b480 20 66 72 6f 6d 20 63 75 72 73 6f 72 20 50 33 20   from cursor P3 
2b490 69 73 20 0a 2a 2a 20 65 71 75 69 76 61 6c 65 6e  is .** equivalen
2b4a0 74 20 74 6f 20 70 65 72 66 6f 72 6d 69 6e 67 20  t to performing 
2b4b0 74 68 65 20 64 65 66 65 72 72 65 64 20 73 65 65  the deferred see
2b4c0 6b 20 61 6e 64 20 74 68 65 6e 20 72 65 61 64 69  k and then readi
2b4d0 6e 67 20 63 6f 6c 75 6d 6e 20 69 20 0a 2a 2a 20  ng column i .** 
2b4e0 66 72 6f 6d 20 50 31 2e 20 20 54 68 69 73 20 69  from P1.  This i
2b4f0 6e 66 6f 72 6d 61 74 69 6f 6e 20 69 73 20 73 74  nformation is st
2b500 6f 72 65 64 20 69 6e 20 50 33 20 61 6e 64 20 75  ored in P3 and u
2b510 73 65 64 20 74 6f 20 72 65 64 69 72 65 63 74 0a  sed to redirect.
2b520 2a 2a 20 72 65 61 64 73 20 61 67 61 69 6e 73 74  ** reads against
2b530 20 50 33 20 6f 76 65 72 20 74 6f 20 50 31 2c 20   P3 over to P1, 
2b540 74 68 75 73 20 70 6f 73 73 69 62 6c 79 20 61 76  thus possibly av
2b550 6f 69 64 69 6e 67 20 74 68 65 20 6e 65 65 64 20  oiding the need 
2b560 74 6f 0a 2a 2a 20 73 65 65 6b 20 61 6e 64 20 72  to.** seek and r
2b570 65 61 64 20 63 75 72 73 6f 72 20 50 33 2e 0a 2a  ead cursor P3..*
2b580 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 64 78  /./* Opcode: Idx
2b590 52 6f 77 69 64 20 50 31 20 50 32 20 2a 20 2a 20  Rowid P1 P2 * * 
2b5a0 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72  *.** Synopsis: r
2b5b0 5b 50 32 5d 3d 72 6f 77 69 64 0a 2a 2a 0a 2a 2a  [P2]=rowid.**.**
2b5c0 20 57 72 69 74 65 20 69 6e 74 6f 20 72 65 67 69   Write into regi
2b5d0 73 74 65 72 20 50 32 20 61 6e 20 69 6e 74 65 67  ster P2 an integ
2b5e0 65 72 20 77 68 69 63 68 20 69 73 20 74 68 65 20  er which is the 
2b5f0 6c 61 73 74 20 65 6e 74 72 79 20 69 6e 20 74 68  last entry in th
2b600 65 20 72 65 63 6f 72 64 20 61 74 0a 2a 2a 20 74  e record at.** t
2b610 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20 69 6e  he end of the in
2b620 64 65 78 20 6b 65 79 20 70 6f 69 6e 74 65 64 20  dex key pointed 
2b630 74 6f 20 62 79 20 63 75 72 73 6f 72 20 50 31 2e  to by cursor P1.
2b640 20 20 54 68 69 73 20 69 6e 74 65 67 65 72 20 73    This integer s
2b650 68 6f 75 6c 64 20 62 65 0a 2a 2a 20 74 68 65 20  hould be.** the 
2b660 72 6f 77 69 64 20 6f 66 20 74 68 65 20 74 61 62  rowid of the tab
2b670 6c 65 20 65 6e 74 72 79 20 74 6f 20 77 68 69 63  le entry to whic
2b680 68 20 74 68 69 73 20 69 6e 64 65 78 20 65 6e 74  h this index ent
2b690 72 79 20 70 6f 69 6e 74 73 2e 0a 2a 2a 0a 2a 2a  ry points..**.**
2b6a0 20 53 65 65 20 61 6c 73 6f 3a 20 52 6f 77 69 64   See also: Rowid
2b6b0 2c 20 4d 61 6b 65 52 65 63 6f 72 64 2e 0a 2a 2f  , MakeRecord..*/
2b6c0 0a 63 61 73 65 20 4f 50 5f 44 65 66 65 72 72 65  .case OP_Deferre
2b6d0 64 53 65 65 6b 3a 0a 63 61 73 65 20 4f 50 5f 49  dSeek:.case OP_I
2b6e0 64 78 52 6f 77 69 64 3a 20 7b 20 20 20 20 20 20  dxRowid: {      
2b6f0 20 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a       /* out2 */.
2b700 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43    VdbeCursor *pC
2b710 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
2b720 20 54 68 65 20 50 31 20 69 6e 64 65 78 20 63 75   The P1 index cu
2b730 72 73 6f 72 20 2a 2f 0a 20 20 56 64 62 65 43 75  rsor */.  VdbeCu
2b740 72 73 6f 72 20 2a 70 54 61 62 43 75 72 3b 20 20  rsor *pTabCur;  
2b750 20 20 20 20 20 20 2f 2a 20 54 68 65 20 50 32 20        /* The P2 
2b760 74 61 62 6c 65 20 63 75 72 73 6f 72 20 28 4f 50  table cursor (OP
2b770 5f 44 65 66 65 72 72 65 64 53 65 65 6b 20 6f 6e  _DeferredSeek on
2b780 6c 79 29 20 2a 2f 0a 20 20 69 36 34 20 72 6f 77  ly) */.  i64 row
2b790 69 64 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  id;             
2b7a0 20 20 20 20 20 2f 2a 20 52 6f 77 69 64 20 74 68       /* Rowid th
2b7b0 61 74 20 50 31 20 63 75 72 72 65 6e 74 20 70 6f  at P1 current po
2b7c0 69 6e 74 73 20 74 6f 20 2a 2f 0a 0a 20 20 61 73  ints to */..  as
2b7d0 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30  sert( pOp->p1>=0
2b7e0 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e   && pOp->p1<p->n
2b7f0 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d  Cursor );.  pC =
2b800 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70   p->apCsr[pOp->p
2b810 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43  1];.  assert( pC
2b820 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  !=0 );.  assert(
2b830 20 70 43 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43   pC->eCurType==C
2b840 55 52 54 59 50 45 5f 42 54 52 45 45 20 29 3b 0a  URTYPE_BTREE );.
2b850 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 75 63    assert( pC->uc
2b860 2e 70 43 75 72 73 6f 72 21 3d 30 20 29 3b 0a 20  .pCursor!=0 );. 
2b870 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73 54   assert( pC->isT
2b880 61 62 6c 65 3d 3d 30 20 29 3b 0a 20 20 61 73 73  able==0 );.  ass
2b890 65 72 74 28 20 70 43 2d 3e 64 65 66 65 72 72 65  ert( pC->deferre
2b8a0 64 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a 20 20  dMoveto==0 );.  
2b8b0 61 73 73 65 72 74 28 20 21 70 43 2d 3e 6e 75 6c  assert( !pC->nul
2b8c0 6c 52 6f 77 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63  lRow || pOp->opc
2b8d0 6f 64 65 3d 3d 4f 50 5f 49 64 78 52 6f 77 69 64  ode==OP_IdxRowid
2b8e0 20 29 3b 0a 0a 20 20 2f 2a 20 54 68 65 20 49 64   );..  /* The Id
2b8f0 78 52 6f 77 69 64 20 61 6e 64 20 53 65 65 6b 20  xRowid and Seek 
2b900 6f 70 63 6f 64 65 73 20 61 72 65 20 63 6f 6d 62  opcodes are comb
2b910 69 6e 65 64 20 62 65 63 61 75 73 65 20 6f 66 20  ined because of 
2b920 74 68 65 20 63 6f 6d 6d 6f 6e 61 6c 69 74 79 0a  the commonality.
2b930 20 20 2a 2a 20 6f 66 20 73 71 6c 69 74 65 33 56    ** of sqlite3V
2b940 64 62 65 43 75 72 73 6f 72 52 65 73 74 6f 72 65  dbeCursorRestore
2b950 28 29 20 61 6e 64 20 73 71 6c 69 74 65 33 56 64  () and sqlite3Vd
2b960 62 65 49 64 78 52 6f 77 69 64 28 29 2e 20 2a 2f  beIdxRowid(). */
2b970 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56  .  rc = sqlite3V
2b980 64 62 65 43 75 72 73 6f 72 52 65 73 74 6f 72 65  dbeCursorRestore
2b990 28 70 43 29 3b 0a 0a 20 20 2f 2a 20 73 71 6c 69  (pC);..  /* sqli
2b9a0 74 65 33 56 62 65 43 75 72 73 6f 72 52 65 73 74  te3VbeCursorRest
2b9b0 6f 72 65 28 29 20 63 61 6e 20 6f 6e 6c 79 20 66  ore() can only f
2b9c0 61 69 6c 20 69 66 20 74 68 65 20 72 65 63 6f 72  ail if the recor
2b9d0 64 20 68 61 73 20 62 65 65 6e 20 64 65 6c 65 74  d has been delet
2b9e0 65 64 0a 20 20 2a 2a 20 6f 75 74 20 66 72 6f 6d  ed.  ** out from
2b9f0 20 75 6e 64 65 72 20 74 68 65 20 63 75 72 73 6f   under the curso
2ba00 72 2e 20 20 54 68 61 74 20 77 69 6c 6c 20 6e 65  r.  That will ne
2ba10 76 65 72 20 68 61 70 70 65 6e 73 20 66 6f 72 20  ver happens for 
2ba20 61 6e 20 49 64 78 52 6f 77 69 64 0a 20 20 2a 2a  an IdxRowid.  **
2ba30 20 6f 72 20 53 65 65 6b 20 6f 70 63 6f 64 65 20   or Seek opcode 
2ba40 2a 2f 0a 20 20 69 66 28 20 4e 45 56 45 52 28 72  */.  if( NEVER(r
2ba50 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 29 20 29 20  c!=SQLITE_OK) ) 
2ba60 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
2ba70 6f 5f 65 72 72 6f 72 3b 0a 0a 20 20 69 66 28 20  o_error;..  if( 
2ba80 21 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 29 7b 0a  !pC->nullRow ){.
2ba90 20 20 20 20 72 6f 77 69 64 20 3d 20 30 3b 20 20      rowid = 0;  
2baa0 2f 2a 20 4e 6f 74 20 6e 65 65 64 65 64 2e 20 20  /* Not needed.  
2bab0 4f 6e 6c 79 20 75 73 65 64 20 74 6f 20 73 69 6c  Only used to sil
2bac0 65 6e 63 65 20 61 20 77 61 72 6e 69 6e 67 2e 20  ence a warning. 
2bad0 2a 2f 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69  */.    rc = sqli
2bae0 74 65 33 56 64 62 65 49 64 78 52 6f 77 69 64 28  te3VdbeIdxRowid(
2baf0 64 62 2c 20 70 43 2d 3e 75 63 2e 70 43 75 72 73  db, pC->uc.pCurs
2bb00 6f 72 2c 20 26 72 6f 77 69 64 29 3b 0a 20 20 20  or, &rowid);.   
2bb10 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f   if( rc!=SQLITE_
2bb20 4f 4b 20 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f  OK ){.      goto
2bb30 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
2bb40 72 6f 72 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69  ror;.    }.    i
2bb50 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d  f( pOp->opcode==
2bb60 4f 50 5f 44 65 66 65 72 72 65 64 53 65 65 6b 20  OP_DeferredSeek 
2bb70 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  ){.      assert(
2bb80 20 70 4f 70 2d 3e 70 33 3e 3d 30 20 26 26 20 70   pOp->p3>=0 && p
2bb90 4f 70 2d 3e 70 33 3c 70 2d 3e 6e 43 75 72 73 6f  Op->p3<p->nCurso
2bba0 72 20 29 3b 0a 20 20 20 20 20 20 70 54 61 62 43  r );.      pTabC
2bbb0 75 72 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f  ur = p->apCsr[pO
2bbc0 70 2d 3e 70 33 5d 3b 0a 20 20 20 20 20 20 61 73  p->p3];.      as
2bbd0 73 65 72 74 28 20 70 54 61 62 43 75 72 21 3d 30  sert( pTabCur!=0
2bbe0 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74   );.      assert
2bbf0 28 20 70 54 61 62 43 75 72 2d 3e 65 43 75 72 54  ( pTabCur->eCurT
2bc00 79 70 65 3d 3d 43 55 52 54 59 50 45 5f 42 54 52  ype==CURTYPE_BTR
2bc10 45 45 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65  EE );.      asse
2bc20 72 74 28 20 70 54 61 62 43 75 72 2d 3e 75 63 2e  rt( pTabCur->uc.
2bc30 70 43 75 72 73 6f 72 21 3d 30 20 29 3b 0a 20 20  pCursor!=0 );.  
2bc40 20 20 20 20 61 73 73 65 72 74 28 20 70 54 61 62      assert( pTab
2bc50 43 75 72 2d 3e 69 73 54 61 62 6c 65 20 29 3b 0a  Cur->isTable );.
2bc60 20 20 20 20 20 20 70 54 61 62 43 75 72 2d 3e 6e        pTabCur->n
2bc70 75 6c 6c 52 6f 77 20 3d 20 30 3b 0a 20 20 20 20  ullRow = 0;.    
2bc80 20 20 70 54 61 62 43 75 72 2d 3e 6d 6f 76 65 74    pTabCur->movet
2bc90 6f 54 61 72 67 65 74 20 3d 20 72 6f 77 69 64 3b  oTarget = rowid;
2bca0 0a 20 20 20 20 20 20 70 54 61 62 43 75 72 2d 3e  .      pTabCur->
2bcb0 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d  deferredMoveto =
2bcc0 20 31 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74   1;.      assert
2bcd0 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50  ( pOp->p4type==P
2bce0 34 5f 49 4e 54 41 52 52 41 59 20 7c 7c 20 70 4f  4_INTARRAY || pO
2bcf0 70 2d 3e 70 34 2e 61 69 3d 3d 30 20 29 3b 0a 20  p->p4.ai==0 );. 
2bd00 20 20 20 20 20 70 54 61 62 43 75 72 2d 3e 61 41       pTabCur->aA
2bd10 6c 74 4d 61 70 20 3d 20 70 4f 70 2d 3e 70 34 2e  ltMap = pOp->p4.
2bd20 61 69 3b 0a 20 20 20 20 20 20 70 54 61 62 43 75  ai;.      pTabCu
2bd30 72 2d 3e 70 41 6c 74 43 75 72 73 6f 72 20 3d 20  r->pAltCursor = 
2bd40 70 43 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20  pC;.    }else{. 
2bd50 20 20 20 20 20 70 4f 75 74 20 3d 20 6f 75 74 32       pOut = out2
2bd60 50 72 65 72 65 6c 65 61 73 65 28 70 2c 20 70 4f  Prerelease(p, pO
2bd70 70 29 3b 0a 20 20 20 20 20 20 70 4f 75 74 2d 3e  p);.      pOut->
2bd80 75 2e 69 20 3d 20 72 6f 77 69 64 3b 0a 20 20 20  u.i = rowid;.   
2bd90 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20   }.  }else{.    
2bda0 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63  assert( pOp->opc
2bdb0 6f 64 65 3d 3d 4f 50 5f 49 64 78 52 6f 77 69 64  ode==OP_IdxRowid
2bdc0 20 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56   );.    sqlite3V
2bdd0 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 26 61  dbeMemSetNull(&a
2bde0 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 29 3b 0a 20  Mem[pOp->p2]);. 
2bdf0 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f   }.  break;.}../
2be00 2a 20 4f 70 63 6f 64 65 3a 20 49 64 78 47 45 20  * Opcode: IdxGE 
2be10 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a  P1 P2 P3 P4 P5.*
2be20 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d  * Synopsis: key=
2be30 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 54  r[P3@P4].**.** T
2be40 68 65 20 50 34 20 72 65 67 69 73 74 65 72 20 76  he P4 register v
2be50 61 6c 75 65 73 20 62 65 67 69 6e 6e 69 6e 67 20  alues beginning 
2be60 77 69 74 68 20 50 33 20 66 6f 72 6d 20 61 6e 20  with P3 form an 
2be70 75 6e 70 61 63 6b 65 64 20 69 6e 64 65 78 20 0a  unpacked index .
2be80 2a 2a 20 6b 65 79 20 74 68 61 74 20 6f 6d 69 74  ** key that omit
2be90 73 20 74 68 65 20 50 52 49 4d 41 52 59 20 4b 45  s the PRIMARY KE
2bea0 59 2e 20 20 43 6f 6d 70 61 72 65 20 74 68 69 73  Y.  Compare this
2beb0 20 6b 65 79 20 76 61 6c 75 65 20 61 67 61 69 6e   key value again
2bec0 73 74 20 74 68 65 20 69 6e 64 65 78 20 0a 2a 2a  st the index .**
2bed0 20 74 68 61 74 20 50 31 20 69 73 20 63 75 72 72   that P1 is curr
2bee0 65 6e 74 6c 79 20 70 6f 69 6e 74 69 6e 67 20 74  ently pointing t
2bef0 6f 2c 20 69 67 6e 6f 72 69 6e 67 20 74 68 65 20  o, ignoring the 
2bf00 50 52 49 4d 41 52 59 20 4b 45 59 20 6f 72 20 52  PRIMARY KEY or R
2bf10 4f 57 49 44 20 0a 2a 2a 20 66 69 65 6c 64 73 20  OWID .** fields 
2bf20 61 74 20 74 68 65 20 65 6e 64 2e 0a 2a 2a 0a 2a  at the end..**.*
2bf30 2a 20 49 66 20 74 68 65 20 50 31 20 69 6e 64 65  * If the P1 inde
2bf40 78 20 65 6e 74 72 79 20 69 73 20 67 72 65 61 74  x entry is great
2bf50 65 72 20 74 68 61 6e 20 6f 72 20 65 71 75 61 6c  er than or equal
2bf60 20 74 6f 20 74 68 65 20 6b 65 79 20 76 61 6c 75   to the key valu
2bf70 65 0a 2a 2a 20 74 68 65 6e 20 6a 75 6d 70 20 74  e.** then jump t
2bf80 6f 20 50 32 2e 20 20 4f 74 68 65 72 77 69 73 65  o P2.  Otherwise
2bf90 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f   fall through to
2bfa0 20 74 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75   the next instru
2bfb0 63 74 69 6f 6e 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63  ction..*/./* Opc
2bfc0 6f 64 65 3a 20 49 64 78 47 54 20 50 31 20 50 32  ode: IdxGT P1 P2
2bfd0 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e   P3 P4 P5.** Syn
2bfe0 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50 33 40  opsis: key=r[P3@
2bff0 50 34 5d 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 34  P4].**.** The P4
2c000 20 72 65 67 69 73 74 65 72 20 76 61 6c 75 65 73   register values
2c010 20 62 65 67 69 6e 6e 69 6e 67 20 77 69 74 68 20   beginning with 
2c020 50 33 20 66 6f 72 6d 20 61 6e 20 75 6e 70 61 63  P3 form an unpac
2c030 6b 65 64 20 69 6e 64 65 78 20 0a 2a 2a 20 6b 65  ked index .** ke
2c040 79 20 74 68 61 74 20 6f 6d 69 74 73 20 74 68 65  y that omits the
2c050 20 50 52 49 4d 41 52 59 20 4b 45 59 2e 20 20 43   PRIMARY KEY.  C
2c060 6f 6d 70 61 72 65 20 74 68 69 73 20 6b 65 79 20  ompare this key 
2c070 76 61 6c 75 65 20 61 67 61 69 6e 73 74 20 74 68  value against th
2c080 65 20 69 6e 64 65 78 20 0a 2a 2a 20 74 68 61 74  e index .** that
2c090 20 50 31 20 69 73 20 63 75 72 72 65 6e 74 6c 79   P1 is currently
2c0a0 20 70 6f 69 6e 74 69 6e 67 20 74 6f 2c 20 69 67   pointing to, ig
2c0b0 6e 6f 72 69 6e 67 20 74 68 65 20 50 52 49 4d 41  noring the PRIMA
2c0c0 52 59 20 4b 45 59 20 6f 72 20 52 4f 57 49 44 20  RY KEY or ROWID 
2c0d0 0a 2a 2a 20 66 69 65 6c 64 73 20 61 74 20 74 68  .** fields at th
2c0e0 65 20 65 6e 64 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  e end..**.** If 
2c0f0 74 68 65 20 50 31 20 69 6e 64 65 78 20 65 6e 74  the P1 index ent
2c100 72 79 20 69 73 20 67 72 65 61 74 65 72 20 74 68  ry is greater th
2c110 61 6e 20 74 68 65 20 6b 65 79 20 76 61 6c 75 65  an the key value
2c120 0a 2a 2a 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f  .** then jump to
2c130 20 50 32 2e 20 20 4f 74 68 65 72 77 69 73 65 20   P2.  Otherwise 
2c140 66 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20  fall through to 
2c150 74 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63  the next instruc
2c160 74 69 6f 6e 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f  tion..*/./* Opco
2c170 64 65 3a 20 49 64 78 4c 54 20 50 31 20 50 32 20  de: IdxLT P1 P2 
2c180 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f  P3 P4 P5.** Syno
2c190 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50 33 40 50  psis: key=r[P3@P
2c1a0 34 5d 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 34 20  4].**.** The P4 
2c1b0 72 65 67 69 73 74 65 72 20 76 61 6c 75 65 73 20  register values 
2c1c0 62 65 67 69 6e 6e 69 6e 67 20 77 69 74 68 20 50  beginning with P
2c1d0 33 20 66 6f 72 6d 20 61 6e 20 75 6e 70 61 63 6b  3 form an unpack
2c1e0 65 64 20 69 6e 64 65 78 20 0a 2a 2a 20 6b 65 79  ed index .** key
2c1f0 20 74 68 61 74 20 6f 6d 69 74 73 20 74 68 65 20   that omits the 
2c200 50 52 49 4d 41 52 59 20 4b 45 59 20 6f 72 20 52  PRIMARY KEY or R
2c210 4f 57 49 44 2e 20 20 43 6f 6d 70 61 72 65 20 74  OWID.  Compare t
2c220 68 69 73 20 6b 65 79 20 76 61 6c 75 65 20 61 67  his key value ag
2c230 61 69 6e 73 74 0a 2a 2a 20 74 68 65 20 69 6e 64  ainst.** the ind
2c240 65 78 20 74 68 61 74 20 50 31 20 69 73 20 63 75  ex that P1 is cu
2c250 72 72 65 6e 74 6c 79 20 70 6f 69 6e 74 69 6e 67  rrently pointing
2c260 20 74 6f 2c 20 69 67 6e 6f 72 69 6e 67 20 74 68   to, ignoring th
2c270 65 20 50 52 49 4d 41 52 59 20 4b 45 59 20 6f 72  e PRIMARY KEY or
2c280 0a 2a 2a 20 52 4f 57 49 44 20 6f 6e 20 74 68 65  .** ROWID on the
2c290 20 50 31 20 69 6e 64 65 78 2e 0a 2a 2a 0a 2a 2a   P1 index..**.**
2c2a0 20 49 66 20 74 68 65 20 50 31 20 69 6e 64 65 78   If the P1 index
2c2b0 20 65 6e 74 72 79 20 69 73 20 6c 65 73 73 20 74   entry is less t
2c2c0 68 61 6e 20 74 68 65 20 6b 65 79 20 76 61 6c 75  han the key valu
2c2d0 65 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20 50  e then jump to P
2c2e0 32 2e 0a 2a 2a 20 4f 74 68 65 72 77 69 73 65 20  2..** Otherwise 
2c2f0 66 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20  fall through to 
2c300 74 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63  the next instruc
2c310 74 69 6f 6e 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f  tion..*/./* Opco
2c320 64 65 3a 20 49 64 78 4c 45 20 50 31 20 50 32 20  de: IdxLE P1 P2 
2c330 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f  P3 P4 P5.** Syno
2c340 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50 33 40 50  psis: key=r[P3@P
2c350 34 5d 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 34 20  4].**.** The P4 
2c360 72 65 67 69 73 74 65 72 20 76 61 6c 75 65 73 20  register values 
2c370 62 65 67 69 6e 6e 69 6e 67 20 77 69 74 68 20 50  beginning with P
2c380 33 20 66 6f 72 6d 20 61 6e 20 75 6e 70 61 63 6b  3 form an unpack
2c390 65 64 20 69 6e 64 65 78 20 0a 2a 2a 20 6b 65 79  ed index .** key
2c3a0 20 74 68 61 74 20 6f 6d 69 74 73 20 74 68 65 20   that omits the 
2c3b0 50 52 49 4d 41 52 59 20 4b 45 59 20 6f 72 20 52  PRIMARY KEY or R
2c3c0 4f 57 49 44 2e 20 20 43 6f 6d 70 61 72 65 20 74  OWID.  Compare t
2c3d0 68 69 73 20 6b 65 79 20 76 61 6c 75 65 20 61 67  his key value ag
2c3e0 61 69 6e 73 74 0a 2a 2a 20 74 68 65 20 69 6e 64  ainst.** the ind
2c3f0 65 78 20 74 68 61 74 20 50 31 20 69 73 20 63 75  ex that P1 is cu
2c400 72 72 65 6e 74 6c 79 20 70 6f 69 6e 74 69 6e 67  rrently pointing
2c410 20 74 6f 2c 20 69 67 6e 6f 72 69 6e 67 20 74 68   to, ignoring th
2c420 65 20 50 52 49 4d 41 52 59 20 4b 45 59 20 6f 72  e PRIMARY KEY or
2c430 0a 2a 2a 20 52 4f 57 49 44 20 6f 6e 20 74 68 65  .** ROWID on the
2c440 20 50 31 20 69 6e 64 65 78 2e 0a 2a 2a 0a 2a 2a   P1 index..**.**
2c450 20 49 66 20 74 68 65 20 50 31 20 69 6e 64 65 78   If the P1 index
2c460 20 65 6e 74 72 79 20 69 73 20 6c 65 73 73 20 74   entry is less t
2c470 68 61 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f 20  han or equal to 
2c480 74 68 65 20 6b 65 79 20 76 61 6c 75 65 20 74 68  the key value th
2c490 65 6e 20 6a 75 6d 70 0a 2a 2a 20 74 6f 20 50 32  en jump.** to P2
2c4a0 2e 20 4f 74 68 65 72 77 69 73 65 20 66 61 6c 6c  . Otherwise fall
2c4b0 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20   through to the 
2c4c0 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e  next instruction
2c4d0 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 64 78  ..*/.case OP_Idx
2c4e0 4c 45 3a 20 20 20 20 20 20 20 20 20 20 2f 2a 20  LE:          /* 
2c4f0 6a 75 6d 70 20 2a 2f 0a 63 61 73 65 20 4f 50 5f  jump */.case OP_
2c500 49 64 78 47 54 3a 20 20 20 20 20 20 20 20 20 20  IdxGT:          
2c510 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 63 61 73 65 20  /* jump */.case 
2c520 4f 50 5f 49 64 78 4c 54 3a 20 20 20 20 20 20 20  OP_IdxLT:       
2c530 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 63 61     /* jump */.ca
2c540 73 65 20 4f 50 5f 49 64 78 47 45 3a 20 20 7b 20  se OP_IdxGE:  { 
2c550 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f        /* jump */
2c560 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70  .  VdbeCursor *p
2c570 43 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a 20 20  C;.  int res;.  
2c580 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 20 72  UnpackedRecord r
2c590 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  ;..  assert( pOp
2c5a0 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e  ->p1>=0 && pOp->
2c5b0 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b  p1<p->nCursor );
2c5c0 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72  .  pC = p->apCsr
2c5d0 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
2c5e0 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20  ert( pC!=0 );.  
2c5f0 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73 4f 72  assert( pC->isOr
2c600 64 65 72 65 64 20 29 3b 0a 20 20 61 73 73 65 72  dered );.  asser
2c610 74 28 20 70 43 2d 3e 65 43 75 72 54 79 70 65 3d  t( pC->eCurType=
2c620 3d 43 55 52 54 59 50 45 5f 42 54 52 45 45 20 29  =CURTYPE_BTREE )
2c630 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  ;.  assert( pC->
2c640 75 63 2e 70 43 75 72 73 6f 72 21 3d 30 29 3b 0a  uc.pCursor!=0);.
2c650 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 64 65    assert( pC->de
2c660 66 65 72 72 65 64 4d 6f 76 65 74 6f 3d 3d 30 20  ferredMoveto==0 
2c670 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  );.  assert( pOp
2c680 2d 3e 70 35 3d 3d 30 20 7c 7c 20 70 4f 70 2d 3e  ->p5==0 || pOp->
2c690 70 35 3d 3d 31 20 29 3b 0a 20 20 61 73 73 65 72  p5==1 );.  asser
2c6a0 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d  t( pOp->p4type==
2c6b0 50 34 5f 49 4e 54 33 32 20 29 3b 0a 20 20 72 2e  P4_INT32 );.  r.
2c6c0 70 4b 65 79 49 6e 66 6f 20 3d 20 70 43 2d 3e 70  pKeyInfo = pC->p
2c6d0 4b 65 79 49 6e 66 6f 3b 0a 20 20 72 2e 6e 46 69  KeyInfo;.  r.nFi
2c6e0 65 6c 64 20 3d 20 28 75 31 36 29 70 4f 70 2d 3e  eld = (u16)pOp->
2c6f0 70 34 2e 69 3b 0a 20 20 69 66 28 20 70 4f 70 2d  p4.i;.  if( pOp-
2c700 3e 6f 70 63 6f 64 65 3c 4f 50 5f 49 64 78 4c 54  >opcode<OP_IdxLT
2c710 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20   ){.    assert( 
2c720 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  pOp->opcode==OP_
2c730 49 64 78 4c 45 20 7c 7c 20 70 4f 70 2d 3e 6f 70  IdxLE || pOp->op
2c740 63 6f 64 65 3d 3d 4f 50 5f 49 64 78 47 54 20 29  code==OP_IdxGT )
2c750 3b 0a 20 20 20 20 72 2e 64 65 66 61 75 6c 74 5f  ;.    r.default_
2c760 72 63 20 3d 20 2d 31 3b 0a 20 20 7d 65 6c 73 65  rc = -1;.  }else
2c770 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4f  {.    assert( pO
2c780 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 64  p->opcode==OP_Id
2c790 78 47 45 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f  xGE || pOp->opco
2c7a0 64 65 3d 3d 4f 50 5f 49 64 78 4c 54 20 29 3b 0a  de==OP_IdxLT );.
2c7b0 20 20 20 20 72 2e 64 65 66 61 75 6c 74 5f 72 63      r.default_rc
2c7c0 20 3d 20 30 3b 0a 20 20 7d 0a 20 20 72 2e 61 4d   = 0;.  }.  r.aM
2c7d0 65 6d 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  em = &aMem[pOp->
2c7e0 70 33 5d 3b 0a 23 69 66 64 65 66 20 53 51 4c 49  p3];.#ifdef SQLI
2c7f0 54 45 5f 44 45 42 55 47 0a 20 20 7b 20 69 6e 74  TE_DEBUG.  { int
2c800 20 69 3b 20 66 6f 72 28 69 3d 30 3b 20 69 3c 72   i; for(i=0; i<r
2c810 2e 6e 46 69 65 6c 64 3b 20 69 2b 2b 29 20 61 73  .nField; i++) as
2c820 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64  sert( memIsValid
2c830 28 26 72 2e 61 4d 65 6d 5b 69 5d 29 20 29 3b 20  (&r.aMem[i]) ); 
2c840 7d 0a 23 65 6e 64 69 66 0a 20 20 72 65 73 20 3d  }.#endif.  res =
2c850 20 30 3b 20 20 2f 2a 20 4e 6f 74 20 6e 65 65 64   0;  /* Not need
2c860 65 64 2e 20 20 4f 6e 6c 79 20 75 73 65 64 20 74  ed.  Only used t
2c870 6f 20 73 69 6c 65 6e 63 65 20 61 20 77 61 72 6e  o silence a warn
2c880 69 6e 67 2e 20 2a 2f 0a 20 20 72 63 20 3d 20 73  ing. */.  rc = s
2c890 71 6c 69 74 65 33 56 64 62 65 49 64 78 4b 65 79  qlite3VdbeIdxKey
2c8a0 43 6f 6d 70 61 72 65 28 64 62 2c 20 70 43 2c 20  Compare(db, pC, 
2c8b0 26 72 2c 20 26 72 65 73 29 3b 0a 20 20 61 73 73  &r, &res);.  ass
2c8c0 65 72 74 28 20 28 4f 50 5f 49 64 78 4c 45 26 31  ert( (OP_IdxLE&1
2c8d0 29 3d 3d 28 4f 50 5f 49 64 78 4c 54 26 31 29 20  )==(OP_IdxLT&1) 
2c8e0 26 26 20 28 4f 50 5f 49 64 78 47 45 26 31 29 3d  && (OP_IdxGE&1)=
2c8f0 3d 28 4f 50 5f 49 64 78 47 54 26 31 29 20 29 3b  =(OP_IdxGT&1) );
2c900 0a 20 20 69 66 28 20 28 70 4f 70 2d 3e 6f 70 63  .  if( (pOp->opc
2c910 6f 64 65 26 31 29 3d 3d 28 4f 50 5f 49 64 78 4c  ode&1)==(OP_IdxL
2c920 54 26 31 29 20 29 7b 0a 20 20 20 20 61 73 73 65  T&1) ){.    asse
2c930 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d  rt( pOp->opcode=
2c940 3d 4f 50 5f 49 64 78 4c 45 20 7c 7c 20 70 4f 70  =OP_IdxLE || pOp
2c950 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 64 78  ->opcode==OP_Idx
2c960 4c 54 20 29 3b 0a 20 20 20 20 72 65 73 20 3d 20  LT );.    res = 
2c970 2d 72 65 73 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  -res;.  }else{. 
2c980 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e     assert( pOp->
2c990 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 64 78 47 45  opcode==OP_IdxGE
2c9a0 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d   || pOp->opcode=
2c9b0 3d 4f 50 5f 49 64 78 47 54 20 29 3b 0a 20 20 20  =OP_IdxGT );.   
2c9c0 20 72 65 73 2b 2b 3b 0a 20 20 7d 0a 20 20 56 64   res++;.  }.  Vd
2c9d0 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 72 65  beBranchTaken(re
2c9e0 73 3e 30 2c 32 29 3b 0a 20 20 69 66 28 20 72 63  s>0,2);.  if( rc
2c9f0 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75   ) goto abort_du
2ca00 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 69 66  e_to_error;.  if
2ca10 28 20 72 65 73 3e 30 20 29 20 67 6f 74 6f 20 6a  ( res>0 ) goto j
2ca20 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 62 72 65  ump_to_p2;.  bre
2ca30 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
2ca40 3a 20 44 65 73 74 72 6f 79 20 50 31 20 50 32 20  : Destroy P1 P2 
2ca50 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 44 65 6c  P3 * *.**.** Del
2ca60 65 74 65 20 61 6e 20 65 6e 74 69 72 65 20 64 61  ete an entire da
2ca70 74 61 62 61 73 65 20 74 61 62 6c 65 20 6f 72 20  tabase table or 
2ca80 69 6e 64 65 78 20 77 68 6f 73 65 20 72 6f 6f 74  index whose root
2ca90 20 70 61 67 65 20 69 6e 20 74 68 65 20 64 61 74   page in the dat
2caa0 61 62 61 73 65 0a 2a 2a 20 66 69 6c 65 20 69 73  abase.** file is
2cab0 20 67 69 76 65 6e 20 62 79 20 50 31 2e 0a 2a 2a   given by P1..**
2cac0 0a 2a 2a 20 54 68 65 20 74 61 62 6c 65 20 62 65  .** The table be
2cad0 69 6e 67 20 64 65 73 74 72 6f 79 65 64 20 69 73  ing destroyed is
2cae0 20 69 6e 20 74 68 65 20 6d 61 69 6e 20 64 61 74   in the main dat
2caf0 61 62 61 73 65 20 66 69 6c 65 20 69 66 20 50 33  abase file if P3
2cb00 3d 3d 30 2e 20 20 49 66 0a 2a 2a 20 50 33 3d 3d  ==0.  If.** P3==
2cb10 31 20 74 68 65 6e 20 74 68 65 20 74 61 62 6c 65  1 then the table
2cb20 20 74 6f 20 62 65 20 63 6c 65 61 72 20 69 73 20   to be clear is 
2cb30 69 6e 20 74 68 65 20 61 75 78 69 6c 69 61 72 79  in the auxiliary
2cb40 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 0a 2a   database file.*
2cb50 2a 20 74 68 61 74 20 69 73 20 75 73 65 64 20 74  * that is used t
2cb60 6f 20 73 74 6f 72 65 20 74 61 62 6c 65 73 20 63  o store tables c
2cb70 72 65 61 74 65 20 75 73 69 6e 67 20 43 52 45 41  reate using CREA
2cb80 54 45 20 54 45 4d 50 4f 52 41 52 59 20 54 41 42  TE TEMPORARY TAB
2cb90 4c 45 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 41 55 54  LE..**.** If AUT
2cba0 4f 56 41 43 55 55 4d 20 69 73 20 65 6e 61 62 6c  OVACUUM is enabl
2cbb0 65 64 20 74 68 65 6e 20 69 74 20 69 73 20 70 6f  ed then it is po
2cbc0 73 73 69 62 6c 65 20 74 68 61 74 20 61 6e 6f 74  ssible that anot
2cbd0 68 65 72 20 72 6f 6f 74 20 70 61 67 65 0a 2a 2a  her root page.**
2cbe0 20 6d 69 67 68 74 20 62 65 20 6d 6f 76 65 64 20   might be moved 
2cbf0 69 6e 74 6f 20 74 68 65 20 6e 65 77 6c 79 20 64  into the newly d
2cc00 65 6c 65 74 65 64 20 72 6f 6f 74 20 70 61 67 65  eleted root page
2cc10 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 6b 65 65   in order to kee
2cc20 70 20 61 6c 6c 0a 2a 2a 20 72 6f 6f 74 20 70 61  p all.** root pa
2cc30 67 65 73 20 63 6f 6e 74 69 67 75 6f 75 73 20 61  ges contiguous a
2cc40 74 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 20  t the beginning 
2cc50 6f 66 20 74 68 65 20 64 61 74 61 62 61 73 65 2e  of the database.
2cc60 20 20 54 68 65 20 66 6f 72 6d 65 72 0a 2a 2a 20    The former.** 
2cc70 76 61 6c 75 65 20 6f 66 20 74 68 65 20 72 6f 6f  value of the roo
2cc80 74 20 70 61 67 65 20 74 68 61 74 20 6d 6f 76 65  t page that move
2cc90 64 20 2d 20 69 74 73 20 76 61 6c 75 65 20 62 65  d - its value be
2cca0 66 6f 72 65 20 74 68 65 20 6d 6f 76 65 20 6f 63  fore the move oc
2ccb0 63 75 72 72 65 64 20 2d 0a 2a 2a 20 69 73 20 73  curred -.** is s
2ccc0 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74 65  tored in registe
2ccd0 72 20 50 32 2e 20 49 66 20 6e 6f 20 70 61 67 65  r P2. If no page
2cce0 20 6d 6f 76 65 6d 65 6e 74 20 77 61 73 20 72 65   movement was re
2ccf0 71 75 69 72 65 64 20 28 62 65 63 61 75 73 65 20  quired (because 
2cd00 74 68 65 0a 2a 2a 20 74 61 62 6c 65 20 62 65 69  the.** table bei
2cd10 6e 67 20 64 72 6f 70 70 65 64 20 77 61 73 20 61  ng dropped was a
2cd20 6c 72 65 61 64 79 20 74 68 65 20 6c 61 73 74 20  lready the last 
2cd30 6f 6e 65 20 69 6e 20 74 68 65 20 64 61 74 61 62  one in the datab
2cd40 61 73 65 29 20 74 68 65 6e 20 61 20 0a 2a 2a 20  ase) then a .** 
2cd50 7a 65 72 6f 20 69 73 20 73 74 6f 72 65 64 20 69  zero is stored i
2cd60 6e 20 72 65 67 69 73 74 65 72 20 50 32 2e 20 20  n register P2.  
2cd70 49 66 20 41 55 54 4f 56 41 43 55 55 4d 20 69 73  If AUTOVACUUM is
2cd80 20 64 69 73 61 62 6c 65 64 20 74 68 65 6e 20 61   disabled then a
2cd90 20 7a 65 72 6f 20 0a 2a 2a 20 69 73 20 73 74 6f   zero .** is sto
2cda0 72 65 64 20 69 6e 20 72 65 67 69 73 74 65 72 20  red in register 
2cdb0 50 32 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f  P2..**.** This o
2cdc0 70 63 6f 64 65 20 74 68 72 6f 77 73 20 61 6e 20  pcode throws an 
2cdd0 65 72 72 6f 72 20 69 66 20 74 68 65 72 65 20 61  error if there a
2cde0 72 65 20 61 6e 79 20 61 63 74 69 76 65 20 72 65  re any active re
2cdf0 61 64 65 72 20 56 4d 73 20 77 68 65 6e 0a 2a 2a  ader VMs when.**
2ce00 20 69 74 20 69 73 20 69 6e 76 6f 6b 65 64 2e 20   it is invoked. 
2ce10 54 68 69 73 20 69 73 20 64 6f 6e 65 20 74 6f 20  This is done to 
2ce20 61 76 6f 69 64 20 74 68 65 20 64 69 66 66 69 63  avoid the diffic
2ce30 75 6c 74 79 20 61 73 73 6f 63 69 61 74 65 64 20  ulty associated 
2ce40 77 69 74 68 20 0a 2a 2a 20 75 70 64 61 74 69 6e  with .** updatin
2ce50 67 20 65 78 69 73 74 69 6e 67 20 63 75 72 73 6f  g existing curso
2ce60 72 73 20 77 68 65 6e 20 61 20 72 6f 6f 74 20 70  rs when a root p
2ce70 61 67 65 20 69 73 20 6d 6f 76 65 64 20 69 6e 20  age is moved in 
2ce80 61 6e 20 41 55 54 4f 56 41 43 55 55 4d 20 0a 2a  an AUTOVACUUM .*
2ce90 2a 20 64 61 74 61 62 61 73 65 2e 20 54 68 69 73  * database. This
2cea0 20 65 72 72 6f 72 20 69 73 20 74 68 72 6f 77 6e   error is thrown
2ceb0 20 65 76 65 6e 20 69 66 20 74 68 65 20 64 61 74   even if the dat
2cec0 61 62 61 73 65 20 69 73 20 6e 6f 74 20 61 6e 20  abase is not an 
2ced0 41 55 54 4f 56 41 43 55 55 4d 20 0a 2a 2a 20 64  AUTOVACUUM .** d
2cee0 62 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 61 76  b in order to av
2cef0 6f 69 64 20 69 6e 74 72 6f 64 75 63 69 6e 67 20  oid introducing 
2cf00 61 6e 20 69 6e 63 6f 6d 70 61 74 69 62 69 6c 69  an incompatibili
2cf10 74 79 20 62 65 74 77 65 65 6e 20 61 75 74 6f 76  ty between autov
2cf20 61 63 75 75 6d 20 0a 2a 2a 20 61 6e 64 20 6e 6f  acuum .** and no
2cf30 6e 2d 61 75 74 6f 76 61 63 75 75 6d 20 6d 6f 64  n-autovacuum mod
2cf40 65 73 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c  es..**.** See al
2cf50 73 6f 3a 20 43 6c 65 61 72 0a 2a 2f 0a 63 61 73  so: Clear.*/.cas
2cf60 65 20 4f 50 5f 44 65 73 74 72 6f 79 3a 20 7b 20  e OP_Destroy: { 
2cf70 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20      /* out2 */. 
2cf80 20 69 6e 74 20 69 4d 6f 76 65 64 3b 0a 20 20 69   int iMoved;.  i
2cf90 6e 74 20 69 44 62 3b 0a 0a 20 20 61 73 73 65 72  nt iDb;..  asser
2cfa0 74 28 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d  t( p->readOnly==
2cfb0 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  0 );.  assert( p
2cfc0 4f 70 2d 3e 70 31 3e 31 20 29 3b 0a 20 20 70 4f  Op->p1>1 );.  pO
2cfd0 75 74 20 3d 20 6f 75 74 32 50 72 65 72 65 6c 65  ut = out2Prerele
2cfe0 61 73 65 28 70 2c 20 70 4f 70 29 3b 0a 20 20 70  ase(p, pOp);.  p
2cff0 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d  Out->flags = MEM
2d000 5f 4e 75 6c 6c 3b 0a 20 20 69 66 28 20 64 62 2d  _Null;.  if( db-
2d010 3e 6e 56 64 62 65 52 65 61 64 20 3e 20 64 62 2d  >nVdbeRead > db-
2d020 3e 6e 56 44 65 73 74 72 6f 79 2b 31 20 29 7b 0a  >nVDestroy+1 ){.
2d030 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f      rc = SQLITE_
2d040 4c 4f 43 4b 45 44 3b 0a 20 20 20 20 70 2d 3e 65  LOCKED;.    p->e
2d050 72 72 6f 72 41 63 74 69 6f 6e 20 3d 20 4f 45 5f  rrorAction = OE_
2d060 41 62 6f 72 74 3b 0a 20 20 20 20 67 6f 74 6f 20  Abort;.    goto 
2d070 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
2d080 6f 72 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  or;.  }else{.   
2d090 20 69 44 62 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a   iDb = pOp->p3;.
2d0a0 20 20 20 20 61 73 73 65 72 74 28 20 44 62 4d 61      assert( DbMa
2d0b0 73 6b 54 65 73 74 28 70 2d 3e 62 74 72 65 65 4d  skTest(p->btreeM
2d0c0 61 73 6b 2c 20 69 44 62 29 20 29 3b 0a 20 20 20  ask, iDb) );.   
2d0d0 20 69 4d 6f 76 65 64 20 3d 20 30 3b 20 20 2f 2a   iMoved = 0;  /*
2d0e0 20 4e 6f 74 20 6e 65 65 64 65 64 2e 20 20 4f 6e   Not needed.  On
2d0f0 6c 79 20 74 6f 20 73 69 6c 65 6e 63 65 20 61 20  ly to silence a 
2d100 77 61 72 6e 69 6e 67 2e 20 2a 2f 0a 20 20 20 20  warning. */.    
2d110 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
2d120 65 44 72 6f 70 54 61 62 6c 65 28 64 62 2d 3e 61  eDropTable(db->a
2d130 44 62 5b 69 44 62 5d 2e 70 42 74 2c 20 70 4f 70  Db[iDb].pBt, pOp
2d140 2d 3e 70 31 2c 20 26 69 4d 6f 76 65 64 29 3b 0a  ->p1, &iMoved);.
2d150 20 20 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20      pOut->flags 
2d160 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20 20 20 70  = MEM_Int;.    p
2d170 4f 75 74 2d 3e 75 2e 69 20 3d 20 69 4d 6f 76 65  Out->u.i = iMove
2d180 64 3b 0a 20 20 20 20 69 66 28 20 72 63 20 29 20  d;.    if( rc ) 
2d190 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
2d1a0 6f 5f 65 72 72 6f 72 3b 0a 23 69 66 6e 64 65 66  o_error;.#ifndef
2d1b0 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54   SQLITE_OMIT_AUT
2d1c0 4f 56 41 43 55 55 4d 0a 20 20 20 20 69 66 28 20  OVACUUM.    if( 
2d1d0 69 4d 6f 76 65 64 21 3d 30 20 29 7b 0a 20 20 20  iMoved!=0 ){.   
2d1e0 20 20 20 73 71 6c 69 74 65 33 52 6f 6f 74 50 61     sqlite3RootPa
2d1f0 67 65 4d 6f 76 65 64 28 64 62 2c 20 69 44 62 2c  geMoved(db, iDb,
2d200 20 69 4d 6f 76 65 64 2c 20 70 4f 70 2d 3e 70 31   iMoved, pOp->p1
2d210 29 3b 0a 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20  );.      /* All 
2d220 4f 50 5f 44 65 73 74 72 6f 79 20 6f 70 65 72 61  OP_Destroy opera
2d230 74 69 6f 6e 73 20 6f 63 63 75 72 20 6f 6e 20 74  tions occur on t
2d240 68 65 20 73 61 6d 65 20 62 74 72 65 65 20 2a 2f  he same btree */
2d250 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 72  .      assert( r
2d260 65 73 65 74 53 63 68 65 6d 61 4f 6e 46 61 75 6c  esetSchemaOnFaul
2d270 74 3d 3d 30 20 7c 7c 20 72 65 73 65 74 53 63 68  t==0 || resetSch
2d280 65 6d 61 4f 6e 46 61 75 6c 74 3d 3d 69 44 62 2b  emaOnFault==iDb+
2d290 31 20 29 3b 0a 20 20 20 20 20 20 72 65 73 65 74  1 );.      reset
2d2a0 53 63 68 65 6d 61 4f 6e 46 61 75 6c 74 20 3d 20  SchemaOnFault = 
2d2b0 69 44 62 2b 31 3b 0a 20 20 20 20 7d 0a 23 65 6e  iDb+1;.    }.#en
2d2c0 64 69 66 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  dif.  }.  break;
2d2d0 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43  .}../* Opcode: C
2d2e0 6c 65 61 72 20 50 31 20 50 32 20 50 33 0a 2a 2a  lear P1 P2 P3.**
2d2f0 0a 2a 2a 20 44 65 6c 65 74 65 20 61 6c 6c 20 63  .** Delete all c
2d300 6f 6e 74 65 6e 74 73 20 6f 66 20 74 68 65 20 64  ontents of the d
2d310 61 74 61 62 61 73 65 20 74 61 62 6c 65 20 6f 72  atabase table or
2d320 20 69 6e 64 65 78 20 77 68 6f 73 65 20 72 6f 6f   index whose roo
2d330 74 20 70 61 67 65 0a 2a 2a 20 69 6e 20 74 68 65  t page.** in the
2d340 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 69   database file i
2d350 73 20 67 69 76 65 6e 20 62 79 20 50 31 2e 20 20  s given by P1.  
2d360 42 75 74 2c 20 75 6e 6c 69 6b 65 20 44 65 73 74  But, unlike Dest
2d370 72 6f 79 2c 20 64 6f 20 6e 6f 74 0a 2a 2a 20 72  roy, do not.** r
2d380 65 6d 6f 76 65 20 74 68 65 20 74 61 62 6c 65 20  emove the table 
2d390 6f 72 20 69 6e 64 65 78 20 66 72 6f 6d 20 74 68  or index from th
2d3a0 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e  e database file.
2d3b0 0a 2a 2a 0a 2a 2a 20 54 68 65 20 74 61 62 6c 65  .**.** The table
2d3c0 20 62 65 69 6e 67 20 63 6c 65 61 72 20 69 73 20   being clear is 
2d3d0 69 6e 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61  in the main data
2d3e0 62 61 73 65 20 66 69 6c 65 20 69 66 20 50 32 3d  base file if P2=
2d3f0 3d 30 2e 20 20 49 66 0a 2a 2a 20 50 32 3d 3d 31  =0.  If.** P2==1
2d400 20 74 68 65 6e 20 74 68 65 20 74 61 62 6c 65 20   then the table 
2d410 74 6f 20 62 65 20 63 6c 65 61 72 20 69 73 20 69  to be clear is i
2d420 6e 20 74 68 65 20 61 75 78 69 6c 69 61 72 79 20  n the auxiliary 
2d430 64 61 74 61 62 61 73 65 20 66 69 6c 65 0a 2a 2a  database file.**
2d440 20 74 68 61 74 20 69 73 20 75 73 65 64 20 74 6f   that is used to
2d450 20 73 74 6f 72 65 20 74 61 62 6c 65 73 20 63 72   store tables cr
2d460 65 61 74 65 20 75 73 69 6e 67 20 43 52 45 41 54  eate using CREAT
2d470 45 20 54 45 4d 50 4f 52 41 52 59 20 54 41 42 4c  E TEMPORARY TABL
2d480 45 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20  E..**.** If the 
2d490 50 33 20 76 61 6c 75 65 20 69 73 20 6e 6f 6e 2d  P3 value is non-
2d4a0 7a 65 72 6f 2c 20 74 68 65 6e 20 74 68 65 20 74  zero, then the t
2d4b0 61 62 6c 65 20 72 65 66 65 72 72 65 64 20 74 6f  able referred to
2d4c0 20 6d 75 73 74 20 62 65 20 61 6e 0a 2a 2a 20 69   must be an.** i
2d4d0 6e 74 6b 65 79 20 74 61 62 6c 65 20 28 61 6e 20  ntkey table (an 
2d4e0 53 51 4c 20 74 61 62 6c 65 2c 20 6e 6f 74 20 61  SQL table, not a
2d4f0 6e 20 69 6e 64 65 78 29 2e 20 49 6e 20 74 68 69  n index). In thi
2d500 73 20 63 61 73 65 20 74 68 65 20 72 6f 77 20 63  s case the row c
2d510 68 61 6e 67 65 20 0a 2a 2a 20 63 6f 75 6e 74 20  hange .** count 
2d520 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 62  is incremented b
2d530 79 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  y the number of 
2d540 72 6f 77 73 20 69 6e 20 74 68 65 20 74 61 62 6c  rows in the tabl
2d550 65 20 62 65 69 6e 67 20 63 6c 65 61 72 65 64 2e  e being cleared.
2d560 20 0a 2a 2a 20 49 66 20 50 33 20 69 73 20 67 72   .** If P3 is gr
2d570 65 61 74 65 72 20 74 68 61 6e 20 7a 65 72 6f 2c  eater than zero,
2d580 20 74 68 65 6e 20 74 68 65 20 76 61 6c 75 65 20   then the value 
2d590 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74  stored in regist
2d5a0 65 72 20 50 33 20 69 73 0a 2a 2a 20 61 6c 73 6f  er P3 is.** also
2d5b0 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 62 79 20   incremented by 
2d5c0 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f  the number of ro
2d5d0 77 73 20 69 6e 20 74 68 65 20 74 61 62 6c 65 20  ws in the table 
2d5e0 62 65 69 6e 67 20 63 6c 65 61 72 65 64 2e 0a 2a  being cleared..*
2d5f0 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 44  *.** See also: D
2d600 65 73 74 72 6f 79 0a 2a 2f 0a 63 61 73 65 20 4f  estroy.*/.case O
2d610 50 5f 43 6c 65 61 72 3a 20 7b 0a 20 20 69 6e 74  P_Clear: {.  int
2d620 20 6e 43 68 61 6e 67 65 3b 0a 20 0a 20 20 6e 43   nChange;. .  nC
2d630 68 61 6e 67 65 20 3d 20 30 3b 0a 20 20 61 73 73  hange = 0;.  ass
2d640 65 72 74 28 20 70 2d 3e 72 65 61 64 4f 6e 6c 79  ert( p->readOnly
2d650 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  ==0 );.  assert(
2d660 20 44 62 4d 61 73 6b 54 65 73 74 28 70 2d 3e 62   DbMaskTest(p->b
2d670 74 72 65 65 4d 61 73 6b 2c 20 70 4f 70 2d 3e 70  treeMask, pOp->p
2d680 32 29 20 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c  2) );.  rc = sql
2d690 69 74 65 33 42 74 72 65 65 43 6c 65 61 72 54 61  ite3BtreeClearTa
2d6a0 62 6c 65 28 0a 20 20 20 20 20 20 64 62 2d 3e 61  ble(.      db->a
2d6b0 44 62 5b 70 4f 70 2d 3e 70 32 5d 2e 70 42 74 2c  Db[pOp->p2].pBt,
2d6c0 20 70 4f 70 2d 3e 70 31 2c 20 28 70 4f 70 2d 3e   pOp->p1, (pOp->
2d6d0 70 33 20 3f 20 26 6e 43 68 61 6e 67 65 20 3a 20  p3 ? &nChange : 
2d6e0 30 29 0a 20 20 29 3b 0a 20 20 69 66 28 20 70 4f  0).  );.  if( pO
2d6f0 70 2d 3e 70 33 20 29 7b 0a 20 20 20 20 70 2d 3e  p->p3 ){.    p->
2d700 6e 43 68 61 6e 67 65 20 2b 3d 20 6e 43 68 61 6e  nChange += nChan
2d710 67 65 3b 0a 20 20 20 20 69 66 28 20 70 4f 70 2d  ge;.    if( pOp-
2d720 3e 70 33 3e 30 20 29 7b 0a 20 20 20 20 20 20 61  >p3>0 ){.      a
2d730 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69  ssert( memIsVali
2d740 64 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  d(&aMem[pOp->p3]
2d750 29 20 29 3b 0a 20 20 20 20 20 20 6d 65 6d 41 62  ) );.      memAb
2d760 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 26  outToChange(p, &
2d770 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 29 3b 0a  aMem[pOp->p3]);.
2d780 20 20 20 20 20 20 61 4d 65 6d 5b 70 4f 70 2d 3e        aMem[pOp->
2d790 70 33 5d 2e 75 2e 69 20 2b 3d 20 6e 43 68 61 6e  p3].u.i += nChan
2d7a0 67 65 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20  ge;.    }.  }.  
2d7b0 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62  if( rc ) goto ab
2d7c0 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
2d7d0 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
2d7e0 20 4f 70 63 6f 64 65 3a 20 52 65 73 65 74 53 6f   Opcode: ResetSo
2d7f0 72 74 65 72 20 50 31 20 2a 20 2a 20 2a 20 2a 0a  rter P1 * * * *.
2d800 2a 2a 0a 2a 2a 20 44 65 6c 65 74 65 20 61 6c 6c  **.** Delete all
2d810 20 63 6f 6e 74 65 6e 74 73 20 66 72 6f 6d 20 74   contents from t
2d820 68 65 20 65 70 68 65 6d 65 72 61 6c 20 74 61 62  he ephemeral tab
2d830 6c 65 20 6f 72 20 73 6f 72 74 65 72 0a 2a 2a 20  le or sorter.** 
2d840 74 68 61 74 20 69 73 20 6f 70 65 6e 20 6f 6e 20  that is open on 
2d850 63 75 72 73 6f 72 20 50 31 2e 0a 2a 2a 0a 2a 2a  cursor P1..**.**
2d860 20 54 68 69 73 20 6f 70 63 6f 64 65 20 6f 6e 6c   This opcode onl
2d870 79 20 77 6f 72 6b 73 20 66 6f 72 20 63 75 72 73  y works for curs
2d880 6f 72 73 20 75 73 65 64 20 66 6f 72 20 73 6f 72  ors used for sor
2d890 74 69 6e 67 20 61 6e 64 0a 2a 2a 20 6f 70 65 6e  ting and.** open
2d8a0 65 64 20 77 69 74 68 20 4f 50 5f 4f 70 65 6e 45  ed with OP_OpenE
2d8b0 70 68 65 6d 65 72 61 6c 20 6f 72 20 4f 50 5f 53  phemeral or OP_S
2d8c0 6f 72 74 65 72 4f 70 65 6e 2e 0a 2a 2f 0a 63 61  orterOpen..*/.ca
2d8d0 73 65 20 4f 50 5f 52 65 73 65 74 53 6f 72 74 65  se OP_ResetSorte
2d8e0 72 3a 20 7b 0a 20 20 56 64 62 65 43 75 72 73 6f  r: {.  VdbeCurso
2d8f0 72 20 2a 70 43 3b 0a 20 0a 20 20 61 73 73 65 72  r *pC;. .  asser
2d900 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26  t( pOp->p1>=0 &&
2d910 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72   pOp->p1<p->nCur
2d920 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d  sor );.  pC = p-
2d930 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b  >apCsr[pOp->p1];
2d940 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30  .  assert( pC!=0
2d950 20 29 3b 0a 20 20 69 66 28 20 69 73 53 6f 72 74   );.  if( isSort
2d960 65 72 28 70 43 29 20 29 7b 0a 20 20 20 20 73 71  er(pC) ){.    sq
2d970 6c 69 74 65 33 56 64 62 65 53 6f 72 74 65 72 52  lite3VdbeSorterR
2d980 65 73 65 74 28 64 62 2c 20 70 43 2d 3e 75 63 2e  eset(db, pC->uc.
2d990 70 53 6f 72 74 65 72 29 3b 0a 20 20 7d 65 6c 73  pSorter);.  }els
2d9a0 65 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  e{.    assert( p
2d9b0 43 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43 55 52  C->eCurType==CUR
2d9c0 54 59 50 45 5f 42 54 52 45 45 20 29 3b 0a 20 20  TYPE_BTREE );.  
2d9d0 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73    assert( pC->is
2d9e0 45 70 68 65 6d 65 72 61 6c 20 29 3b 0a 20 20 20  Ephemeral );.   
2d9f0 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
2da00 65 65 43 6c 65 61 72 54 61 62 6c 65 4f 66 43 75  eeClearTableOfCu
2da10 72 73 6f 72 28 70 43 2d 3e 75 63 2e 70 43 75 72  rsor(pC->uc.pCur
2da20 73 6f 72 29 3b 0a 20 20 20 20 69 66 28 20 72 63  sor);.    if( rc
2da30 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75   ) goto abort_du
2da40 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 7d 0a  e_to_error;.  }.
2da50 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
2da60 70 63 6f 64 65 3a 20 43 72 65 61 74 65 42 74 72  pcode: CreateBtr
2da70 65 65 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a  ee P1 P2 P3 * *.
2da80 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50  ** Synopsis: r[P
2da90 32 5d 3d 72 6f 6f 74 20 69 44 62 3d 50 31 20 66  2]=root iDb=P1 f
2daa0 6c 61 67 73 3d 50 33 0a 2a 2a 0a 2a 2a 20 41 6c  lags=P3.**.** Al
2dab0 6c 6f 63 61 74 65 20 61 20 6e 65 77 20 62 2d 74  locate a new b-t
2dac0 72 65 65 20 69 6e 20 74 68 65 20 6d 61 69 6e 20  ree in the main 
2dad0 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 69 66  database file if
2dae0 20 50 31 3d 3d 30 20 6f 72 20 69 6e 20 74 68 65   P1==0 or in the
2daf0 0a 2a 2a 20 54 45 4d 50 20 64 61 74 61 62 61 73  .** TEMP databas
2db00 65 20 66 69 6c 65 20 69 66 20 50 31 3d 3d 31 20  e file if P1==1 
2db10 6f 72 20 69 6e 20 61 6e 20 61 74 74 61 63 68 65  or in an attache
2db20 64 20 64 61 74 61 62 61 73 65 20 69 66 0a 2a 2a  d database if.**
2db30 20 50 31 3e 31 2e 20 20 54 68 65 20 50 33 20 61   P1>1.  The P3 a
2db40 72 67 75 6d 65 6e 74 20 6d 75 73 74 20 62 65 20  rgument must be 
2db50 31 20 28 42 54 52 45 45 5f 49 4e 54 4b 45 59 29  1 (BTREE_INTKEY)
2db60 20 66 6f 72 20 61 20 72 6f 77 69 64 20 74 61 62   for a rowid tab
2db70 6c 65 0a 2a 2a 20 69 74 20 6d 75 73 74 20 62 65  le.** it must be
2db80 20 32 20 28 42 54 52 45 45 5f 42 4c 4f 42 4b 45   2 (BTREE_BLOBKE
2db90 59 29 20 66 6f 72 20 61 20 69 6e 64 65 78 20 6f  Y) for a index o
2dba0 72 20 57 49 54 48 4f 55 54 20 52 4f 57 49 44 20  r WITHOUT ROWID 
2dbb0 74 61 62 6c 65 2e 0a 2a 2a 20 54 68 65 20 72 6f  table..** The ro
2dbc0 6f 74 20 70 61 67 65 20 6e 75 6d 62 65 72 20 6f  ot page number o
2dbd0 66 20 74 68 65 20 6e 65 77 20 62 2d 74 72 65 65  f the new b-tree
2dbe0 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 72 65   is stored in re
2dbf0 67 69 73 74 65 72 20 50 32 2e 0a 2a 2f 0a 63 61  gister P2..*/.ca
2dc00 73 65 20 4f 50 5f 43 72 65 61 74 65 42 74 72 65  se OP_CreateBtre
2dc10 65 3a 20 7b 20 20 20 20 20 20 20 20 20 20 2f 2a  e: {          /*
2dc20 20 6f 75 74 32 20 2a 2f 0a 20 20 69 6e 74 20 70   out2 */.  int p
2dc30 67 6e 6f 3b 0a 20 20 44 62 20 2a 70 44 62 3b 0a  gno;.  Db *pDb;.
2dc40 0a 20 20 70 4f 75 74 20 3d 20 6f 75 74 32 50 72  .  pOut = out2Pr
2dc50 65 72 65 6c 65 61 73 65 28 70 2c 20 70 4f 70 29  erelease(p, pOp)
2dc60 3b 0a 20 20 70 67 6e 6f 20 3d 20 30 3b 0a 20 20  ;.  pgno = 0;.  
2dc70 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3d  assert( pOp->p3=
2dc80 3d 42 54 52 45 45 5f 49 4e 54 4b 45 59 20 7c 7c  =BTREE_INTKEY ||
2dc90 20 70 4f 70 2d 3e 70 33 3d 3d 42 54 52 45 45 5f   pOp->p3==BTREE_
2dca0 42 4c 4f 42 4b 45 59 20 29 3b 0a 20 20 61 73 73  BLOBKEY );.  ass
2dcb0 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20  ert( pOp->p1>=0 
2dcc0 26 26 20 70 4f 70 2d 3e 70 31 3c 64 62 2d 3e 6e  && pOp->p1<db->n
2dcd0 44 62 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  Db );.  assert( 
2dce0 44 62 4d 61 73 6b 54 65 73 74 28 70 2d 3e 62 74  DbMaskTest(p->bt
2dcf0 72 65 65 4d 61 73 6b 2c 20 70 4f 70 2d 3e 70 31  reeMask, pOp->p1
2dd00 29 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  ) );.  assert( p
2dd10 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30 20 29 3b  ->readOnly==0 );
2dd20 0a 20 20 70 44 62 20 3d 20 26 64 62 2d 3e 61 44  .  pDb = &db->aD
2dd30 62 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  b[pOp->p1];.  as
2dd40 73 65 72 74 28 20 70 44 62 2d 3e 70 42 74 21 3d  sert( pDb->pBt!=
2dd50 30 20 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69  0 );.  rc = sqli
2dd60 74 65 33 42 74 72 65 65 43 72 65 61 74 65 54 61  te3BtreeCreateTa
2dd70 62 6c 65 28 70 44 62 2d 3e 70 42 74 2c 20 26 70  ble(pDb->pBt, &p
2dd80 67 6e 6f 2c 20 70 4f 70 2d 3e 70 33 29 3b 0a 20  gno, pOp->p3);. 
2dd90 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61   if( rc ) goto a
2dda0 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
2ddb0 72 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d  r;.  pOut->u.i =
2ddc0 20 70 67 6e 6f 3b 0a 20 20 62 72 65 61 6b 3b 0a   pgno;.  break;.
2ddd0 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 71  }../* Opcode: Sq
2dde0 6c 45 78 65 63 20 2a 20 2a 20 2a 20 50 34 20 2a  lExec * * * P4 *
2ddf0 0a 2a 2a 0a 2a 2a 20 52 75 6e 20 74 68 65 20 53  .**.** Run the S
2de00 51 4c 20 73 74 61 74 65 6d 65 6e 74 20 6f 72 20  QL statement or 
2de10 73 74 61 74 65 6d 65 6e 74 73 20 73 70 65 63 69  statements speci
2de20 66 69 65 64 20 69 6e 20 74 68 65 20 50 34 20 73  fied in the P4 s
2de30 74 72 69 6e 67 2e 0a 2a 2f 0a 63 61 73 65 20 4f  tring..*/.case O
2de40 50 5f 53 71 6c 45 78 65 63 3a 20 7b 0a 20 20 64  P_SqlExec: {.  d
2de50 62 2d 3e 6e 53 71 6c 45 78 65 63 2b 2b 3b 0a 20  b->nSqlExec++;. 
2de60 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 65 78   rc = sqlite3_ex
2de70 65 63 28 64 62 2c 20 70 4f 70 2d 3e 70 34 2e 7a  ec(db, pOp->p4.z
2de80 2c 20 30 2c 20 30 2c 20 30 29 3b 0a 20 20 64 62  , 0, 0, 0);.  db
2de90 2d 3e 6e 53 71 6c 45 78 65 63 2d 2d 3b 0a 20 20  ->nSqlExec--;.  
2dea0 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62  if( rc ) goto ab
2deb0 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
2dec0 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
2ded0 20 4f 70 63 6f 64 65 3a 20 50 61 72 73 65 53 63   Opcode: ParseSc
2dee0 68 65 6d 61 20 50 31 20 2a 20 2a 20 50 34 20 2a  hema P1 * * P4 *
2def0 0a 2a 2a 0a 2a 2a 20 52 65 61 64 20 61 6e 64 20  .**.** Read and 
2df00 70 61 72 73 65 20 61 6c 6c 20 65 6e 74 72 69 65  parse all entrie
2df10 73 20 66 72 6f 6d 20 74 68 65 20 53 51 4c 49 54  s from the SQLIT
2df20 45 5f 4d 41 53 54 45 52 20 74 61 62 6c 65 20 6f  E_MASTER table o
2df30 66 20 64 61 74 61 62 61 73 65 20 50 31 0a 2a 2a  f database P1.**
2df40 20 74 68 61 74 20 6d 61 74 63 68 20 74 68 65 20   that match the 
2df50 57 48 45 52 45 20 63 6c 61 75 73 65 20 50 34 2e  WHERE clause P4.
2df60 20 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63   .**.** This opc
2df70 6f 64 65 20 69 6e 76 6f 6b 65 73 20 74 68 65 20  ode invokes the 
2df80 70 61 72 73 65 72 20 74 6f 20 63 72 65 61 74 65  parser to create
2df90 20 61 20 6e 65 77 20 76 69 72 74 75 61 6c 20 6d   a new virtual m
2dfa0 61 63 68 69 6e 65 2c 0a 2a 2a 20 74 68 65 6e 20  achine,.** then 
2dfb0 72 75 6e 73 20 74 68 65 20 6e 65 77 20 76 69 72  runs the new vir
2dfc0 74 75 61 6c 20 6d 61 63 68 69 6e 65 2e 20 20 49  tual machine.  I
2dfd0 74 20 69 73 20 74 68 75 73 20 61 20 72 65 2d 65  t is thus a re-e
2dfe0 6e 74 72 61 6e 74 20 6f 70 63 6f 64 65 2e 0a 2a  ntrant opcode..*
2dff0 2f 0a 63 61 73 65 20 4f 50 5f 50 61 72 73 65 53  /.case OP_ParseS
2e000 63 68 65 6d 61 3a 20 7b 0a 20 20 69 6e 74 20 69  chema: {.  int i
2e010 44 62 3b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72  Db;.  const char
2e020 20 2a 7a 4d 61 73 74 65 72 3b 0a 20 20 63 68 61   *zMaster;.  cha
2e030 72 20 2a 7a 53 71 6c 3b 0a 20 20 49 6e 69 74 44  r *zSql;.  InitD
2e040 61 74 61 20 69 6e 69 74 44 61 74 61 3b 0a 0a 20  ata initData;.. 
2e050 20 2f 2a 20 41 6e 79 20 70 72 65 70 61 72 65 64   /* Any prepared
2e060 20 73 74 61 74 65 6d 65 6e 74 20 74 68 61 74 20   statement that 
2e070 69 6e 76 6f 6b 65 73 20 74 68 69 73 20 6f 70 63  invokes this opc
2e080 6f 64 65 20 77 69 6c 6c 20 68 6f 6c 64 20 6d 75  ode will hold mu
2e090 74 65 78 65 73 0a 20 20 2a 2a 20 6f 6e 20 65 76  texes.  ** on ev
2e0a0 65 72 79 20 62 74 72 65 65 2e 20 20 54 68 69 73  ery btree.  This
2e0b0 20 69 73 20 61 20 70 72 65 72 65 71 75 69 73 69   is a prerequisi
2e0c0 74 65 20 66 6f 72 20 69 6e 76 6f 6b 69 6e 67 20  te for invoking 
2e0d0 0a 20 20 2a 2a 20 73 71 6c 69 74 65 33 49 6e 69  .  ** sqlite3Ini
2e0e0 74 43 61 6c 6c 62 61 63 6b 28 29 2e 0a 20 20 2a  tCallback()..  *
2e0f0 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
2e100 44 45 42 55 47 0a 20 20 66 6f 72 28 69 44 62 3d  DEBUG.  for(iDb=
2e110 30 3b 20 69 44 62 3c 64 62 2d 3e 6e 44 62 3b 20  0; iDb<db->nDb; 
2e120 69 44 62 2b 2b 29 7b 0a 20 20 20 20 61 73 73 65  iDb++){.    asse
2e130 72 74 28 20 69 44 62 3d 3d 31 20 7c 7c 20 73 71  rt( iDb==1 || sq
2e140 6c 69 74 65 33 42 74 72 65 65 48 6f 6c 64 73 4d  lite3BtreeHoldsM
2e150 75 74 65 78 28 64 62 2d 3e 61 44 62 5b 69 44 62  utex(db->aDb[iDb
2e160 5d 2e 70 42 74 29 20 29 3b 0a 20 20 7d 0a 23 65  ].pBt) );.  }.#e
2e170 6e 64 69 66 0a 0a 20 20 69 44 62 20 3d 20 70 4f  ndif..  iDb = pO
2e180 70 2d 3e 70 31 3b 0a 20 20 61 73 73 65 72 74 28  p->p1;.  assert(
2e190 20 69 44 62 3e 3d 30 20 26 26 20 69 44 62 3c 64   iDb>=0 && iDb<d
2e1a0 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73 65  b->nDb );.  asse
2e1b0 72 74 28 20 44 62 48 61 73 50 72 6f 70 65 72 74  rt( DbHasPropert
2e1c0 79 28 64 62 2c 20 69 44 62 2c 20 44 42 5f 53 63  y(db, iDb, DB_Sc
2e1d0 68 65 6d 61 4c 6f 61 64 65 64 29 20 29 3b 0a 20  hemaLoaded) );. 
2e1e0 20 2f 2a 20 55 73 65 64 20 74 6f 20 62 65 20 61   /* Used to be a
2e1f0 20 63 6f 6e 64 69 74 69 6f 6e 61 6c 20 2a 2f 20   conditional */ 
2e200 7b 0a 20 20 20 20 7a 4d 61 73 74 65 72 20 3d 20  {.    zMaster = 
2e210 4d 41 53 54 45 52 5f 4e 41 4d 45 3b 0a 20 20 20  MASTER_NAME;.   
2e220 20 69 6e 69 74 44 61 74 61 2e 64 62 20 3d 20 64   initData.db = d
2e230 62 3b 0a 20 20 20 20 69 6e 69 74 44 61 74 61 2e  b;.    initData.
2e240 69 44 62 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20  iDb = pOp->p1;. 
2e250 20 20 20 69 6e 69 74 44 61 74 61 2e 70 7a 45 72     initData.pzEr
2e260 72 4d 73 67 20 3d 20 26 70 2d 3e 7a 45 72 72 4d  rMsg = &p->zErrM
2e270 73 67 3b 0a 20 20 20 20 7a 53 71 6c 20 3d 20 73  sg;.    zSql = s
2e280 71 6c 69 74 65 33 4d 50 72 69 6e 74 66 28 64 62  qlite3MPrintf(db
2e290 2c 0a 20 20 20 20 20 20 20 22 53 45 4c 45 43 54  ,.       "SELECT
2e2a0 20 6e 61 6d 65 2c 20 72 6f 6f 74 70 61 67 65 2c   name, rootpage,
2e2b0 20 73 71 6c 20 46 52 4f 4d 20 27 25 71 27 2e 25   sql FROM '%q'.%
2e2c0 73 20 57 48 45 52 45 20 25 73 20 4f 52 44 45 52  s WHERE %s ORDER
2e2d0 20 42 59 20 72 6f 77 69 64 22 2c 0a 20 20 20 20   BY rowid",.    
2e2e0 20 20 20 64 62 2d 3e 61 44 62 5b 69 44 62 5d 2e     db->aDb[iDb].
2e2f0 7a 44 62 53 4e 61 6d 65 2c 20 7a 4d 61 73 74 65  zDbSName, zMaste
2e300 72 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20  r, pOp->p4.z);. 
2e310 20 20 20 69 66 28 20 7a 53 71 6c 3d 3d 30 20 29     if( zSql==0 )
2e320 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c  {.      rc = SQL
2e330 49 54 45 5f 4e 4f 4d 45 4d 5f 42 4b 50 54 3b 0a  ITE_NOMEM_BKPT;.
2e340 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
2e350 20 61 73 73 65 72 74 28 20 64 62 2d 3e 69 6e 69   assert( db->ini
2e360 74 2e 62 75 73 79 3d 3d 30 20 29 3b 0a 20 20 20  t.busy==0 );.   
2e370 20 20 20 64 62 2d 3e 69 6e 69 74 2e 62 75 73 79     db->init.busy
2e380 20 3d 20 31 3b 0a 20 20 20 20 20 20 69 6e 69 74   = 1;.      init
2e390 44 61 74 61 2e 72 63 20 3d 20 53 51 4c 49 54 45  Data.rc = SQLITE
2e3a0 5f 4f 4b 3b 0a 20 20 20 20 20 20 61 73 73 65 72  _OK;.      asser
2e3b0 74 28 20 21 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61  t( !db->mallocFa
2e3c0 69 6c 65 64 20 29 3b 0a 20 20 20 20 20 20 72 63  iled );.      rc
2e3d0 20 3d 20 73 71 6c 69 74 65 33 5f 65 78 65 63 28   = sqlite3_exec(
2e3e0 64 62 2c 20 7a 53 71 6c 2c 20 73 71 6c 69 74 65  db, zSql, sqlite
2e3f0 33 49 6e 69 74 43 61 6c 6c 62 61 63 6b 2c 20 26  3InitCallback, &
2e400 69 6e 69 74 44 61 74 61 2c 20 30 29 3b 0a 20 20  initData, 0);.  
2e410 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49      if( rc==SQLI
2e420 54 45 5f 4f 4b 20 29 20 72 63 20 3d 20 69 6e 69  TE_OK ) rc = ini
2e430 74 44 61 74 61 2e 72 63 3b 0a 20 20 20 20 20 20  tData.rc;.      
2e440 73 71 6c 69 74 65 33 44 62 46 72 65 65 4e 4e 28  sqlite3DbFreeNN(
2e450 64 62 2c 20 7a 53 71 6c 29 3b 0a 20 20 20 20 20  db, zSql);.     
2e460 20 64 62 2d 3e 69 6e 69 74 2e 62 75 73 79 20 3d   db->init.busy =
2e470 20 30 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20   0;.    }.  }.  
2e480 69 66 28 20 72 63 20 29 7b 0a 20 20 20 20 73 71  if( rc ){.    sq
2e490 6c 69 74 65 33 52 65 73 65 74 41 6c 6c 53 63 68  lite3ResetAllSch
2e4a0 65 6d 61 73 4f 66 43 6f 6e 6e 65 63 74 69 6f 6e  emasOfConnection
2e4b0 28 64 62 29 3b 0a 20 20 20 20 69 66 28 20 72 63  (db);.    if( rc
2e4c0 3d 3d 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 20 29  ==SQLITE_NOMEM )
2e4d0 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20 6e 6f 5f  {.      goto no_
2e4e0 6d 65 6d 3b 0a 20 20 20 20 7d 0a 20 20 20 20 67  mem;.    }.    g
2e4f0 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
2e500 5f 65 72 72 6f 72 3b 0a 20 20 7d 0a 20 20 62 72  _error;.  }.  br
2e510 65 61 6b 3b 20 20 0a 7d 0a 0a 23 69 66 20 21 64  eak;  .}..#if !d
2e520 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d  efined(SQLITE_OM
2e530 49 54 5f 41 4e 41 4c 59 5a 45 29 0a 2f 2a 20 4f  IT_ANALYZE)./* O
2e540 70 63 6f 64 65 3a 20 4c 6f 61 64 41 6e 61 6c 79  pcode: LoadAnaly
2e550 73 69 73 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a  sis P1 * * * *.*
2e560 2a 0a 2a 2a 20 52 65 61 64 20 74 68 65 20 73 71  *.** Read the sq
2e570 6c 69 74 65 5f 73 74 61 74 31 20 74 61 62 6c 65  lite_stat1 table
2e580 20 66 6f 72 20 64 61 74 61 62 61 73 65 20 50 31   for database P1
2e590 20 61 6e 64 20 6c 6f 61 64 20 74 68 65 20 63 6f   and load the co
2e5a0 6e 74 65 6e 74 0a 2a 2a 20 6f 66 20 74 68 61 74  ntent.** of that
2e5b0 20 74 61 62 6c 65 20 69 6e 74 6f 20 74 68 65 20   table into the 
2e5c0 69 6e 74 65 72 6e 61 6c 20 69 6e 64 65 78 20 68  internal index h
2e5d0 61 73 68 20 74 61 62 6c 65 2e 20 20 54 68 69 73  ash table.  This
2e5e0 20 77 69 6c 6c 20 63 61 75 73 65 0a 2a 2a 20 74   will cause.** t
2e5f0 68 65 20 61 6e 61 6c 79 73 69 73 20 74 6f 20 62  he analysis to b
2e600 65 20 75 73 65 64 20 77 68 65 6e 20 70 72 65 70  e used when prep
2e610 61 72 69 6e 67 20 61 6c 6c 20 73 75 62 73 65 71  aring all subseq
2e620 75 65 6e 74 20 71 75 65 72 69 65 73 2e 0a 2a 2f  uent queries..*/
2e630 0a 63 61 73 65 20 4f 50 5f 4c 6f 61 64 41 6e 61  .case OP_LoadAna
2e640 6c 79 73 69 73 3a 20 7b 0a 20 20 61 73 73 65 72  lysis: {.  asser
2e650 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26  t( pOp->p1>=0 &&
2e660 20 70 4f 70 2d 3e 70 31 3c 64 62 2d 3e 6e 44 62   pOp->p1<db->nDb
2e670 20 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74   );.  rc = sqlit
2e680 65 33 41 6e 61 6c 79 73 69 73 4c 6f 61 64 28 64  e3AnalysisLoad(d
2e690 62 2c 20 70 4f 70 2d 3e 70 31 29 3b 0a 20 20 69  b, pOp->p1);.  i
2e6a0 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f  f( rc ) goto abo
2e6b0 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
2e6c0 0a 20 20 62 72 65 61 6b 3b 20 20 0a 7d 0a 23 65  .  break;  .}.#e
2e6d0 6e 64 69 66 20 2f 2a 20 21 64 65 66 69 6e 65 64  ndif /* !defined
2e6e0 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 4e 41  (SQLITE_OMIT_ANA
2e6f0 4c 59 5a 45 29 20 2a 2f 0a 0a 2f 2a 20 4f 70 63  LYZE) */../* Opc
2e700 6f 64 65 3a 20 44 72 6f 70 54 61 62 6c 65 20 50  ode: DropTable P
2e710 31 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a  1 * * P4 *.**.**
2e720 20 52 65 6d 6f 76 65 20 74 68 65 20 69 6e 74 65   Remove the inte
2e730 72 6e 61 6c 20 28 69 6e 2d 6d 65 6d 6f 72 79 29  rnal (in-memory)
2e740 20 64 61 74 61 20 73 74 72 75 63 74 75 72 65 73   data structures
2e750 20 74 68 61 74 20 64 65 73 63 72 69 62 65 0a 2a   that describe.*
2e760 2a 20 74 68 65 20 74 61 62 6c 65 20 6e 61 6d 65  * the table name
2e770 64 20 50 34 20 69 6e 20 64 61 74 61 62 61 73 65  d P4 in database
2e780 20 50 31 2e 20 20 54 68 69 73 20 69 73 20 63 61   P1.  This is ca
2e790 6c 6c 65 64 20 61 66 74 65 72 20 61 20 74 61 62  lled after a tab
2e7a0 6c 65 0a 2a 2a 20 69 73 20 64 72 6f 70 70 65 64  le.** is dropped
2e7b0 20 66 72 6f 6d 20 64 69 73 6b 20 28 75 73 69 6e   from disk (usin
2e7c0 67 20 74 68 65 20 44 65 73 74 72 6f 79 20 6f 70  g the Destroy op
2e7d0 63 6f 64 65 29 20 69 6e 20 6f 72 64 65 72 20 74  code) in order t
2e7e0 6f 20 6b 65 65 70 20 0a 2a 2a 20 74 68 65 20 69  o keep .** the i
2e7f0 6e 74 65 72 6e 61 6c 20 72 65 70 72 65 73 65 6e  nternal represen
2e800 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 0a 2a 2a  tation of the.**
2e810 20 73 63 68 65 6d 61 20 63 6f 6e 73 69 73 74 65   schema consiste
2e820 6e 74 20 77 69 74 68 20 77 68 61 74 20 69 73 20  nt with what is 
2e830 6f 6e 20 64 69 73 6b 2e 0a 2a 2f 0a 63 61 73 65  on disk..*/.case
2e840 20 4f 50 5f 44 72 6f 70 54 61 62 6c 65 3a 20 7b   OP_DropTable: {
2e850 0a 20 20 73 71 6c 69 74 65 33 55 6e 6c 69 6e 6b  .  sqlite3Unlink
2e860 41 6e 64 44 65 6c 65 74 65 54 61 62 6c 65 28 64  AndDeleteTable(d
2e870 62 2c 20 70 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d  b, pOp->p1, pOp-
2e880 3e 70 34 2e 7a 29 3b 0a 20 20 62 72 65 61 6b 3b  >p4.z);.  break;
2e890 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 44  .}../* Opcode: D
2e8a0 72 6f 70 49 6e 64 65 78 20 50 31 20 2a 20 2a 20  ropIndex P1 * * 
2e8b0 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 52 65 6d 6f 76  P4 *.**.** Remov
2e8c0 65 20 74 68 65 20 69 6e 74 65 72 6e 61 6c 20 28  e the internal (
2e8d0 69 6e 2d 6d 65 6d 6f 72 79 29 20 64 61 74 61 20  in-memory) data 
2e8e0 73 74 72 75 63 74 75 72 65 73 20 74 68 61 74 20  structures that 
2e8f0 64 65 73 63 72 69 62 65 0a 2a 2a 20 74 68 65 20  describe.** the 
2e900 69 6e 64 65 78 20 6e 61 6d 65 64 20 50 34 20 69  index named P4 i
2e910 6e 20 64 61 74 61 62 61 73 65 20 50 31 2e 20 20  n database P1.  
2e920 54 68 69 73 20 69 73 20 63 61 6c 6c 65 64 20 61  This is called a
2e930 66 74 65 72 20 61 6e 20 69 6e 64 65 78 0a 2a 2a  fter an index.**
2e940 20 69 73 20 64 72 6f 70 70 65 64 20 66 72 6f 6d   is dropped from
2e950 20 64 69 73 6b 20 28 75 73 69 6e 67 20 74 68 65   disk (using the
2e960 20 44 65 73 74 72 6f 79 20 6f 70 63 6f 64 65 29   Destroy opcode)
2e970 0a 2a 2a 20 69 6e 20 6f 72 64 65 72 20 74 6f 20  .** in order to 
2e980 6b 65 65 70 20 74 68 65 20 69 6e 74 65 72 6e 61  keep the interna
2e990 6c 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e  l representation
2e9a0 20 6f 66 20 74 68 65 0a 2a 2a 20 73 63 68 65 6d   of the.** schem
2e9b0 61 20 63 6f 6e 73 69 73 74 65 6e 74 20 77 69 74  a consistent wit
2e9c0 68 20 77 68 61 74 20 69 73 20 6f 6e 20 64 69 73  h what is on dis
2e9d0 6b 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 44 72  k..*/.case OP_Dr
2e9e0 6f 70 49 6e 64 65 78 3a 20 7b 0a 20 20 73 71 6c  opIndex: {.  sql
2e9f0 69 74 65 33 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c  ite3UnlinkAndDel
2ea00 65 74 65 49 6e 64 65 78 28 64 62 2c 20 70 4f 70  eteIndex(db, pOp
2ea10 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29  ->p1, pOp->p4.z)
2ea20 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
2ea30 20 4f 70 63 6f 64 65 3a 20 44 72 6f 70 54 72 69   Opcode: DropTri
2ea40 67 67 65 72 20 50 31 20 2a 20 2a 20 50 34 20 2a  gger P1 * * P4 *
2ea50 0a 2a 2a 0a 2a 2a 20 52 65 6d 6f 76 65 20 74 68  .**.** Remove th
2ea60 65 20 69 6e 74 65 72 6e 61 6c 20 28 69 6e 2d 6d  e internal (in-m
2ea70 65 6d 6f 72 79 29 20 64 61 74 61 20 73 74 72 75  emory) data stru
2ea80 63 74 75 72 65 73 20 74 68 61 74 20 64 65 73 63  ctures that desc
2ea90 72 69 62 65 0a 2a 2a 20 74 68 65 20 74 72 69 67  ribe.** the trig
2eaa0 67 65 72 20 6e 61 6d 65 64 20 50 34 20 69 6e 20  ger named P4 in 
2eab0 64 61 74 61 62 61 73 65 20 50 31 2e 20 20 54 68  database P1.  Th
2eac0 69 73 20 69 73 20 63 61 6c 6c 65 64 20 61 66 74  is is called aft
2ead0 65 72 20 61 20 74 72 69 67 67 65 72 0a 2a 2a 20  er a trigger.** 
2eae0 69 73 20 64 72 6f 70 70 65 64 20 66 72 6f 6d 20  is dropped from 
2eaf0 64 69 73 6b 20 28 75 73 69 6e 67 20 74 68 65 20  disk (using the 
2eb00 44 65 73 74 72 6f 79 20 6f 70 63 6f 64 65 29 20  Destroy opcode) 
2eb10 69 6e 20 6f 72 64 65 72 20 74 6f 20 6b 65 65 70  in order to keep
2eb20 20 0a 2a 2a 20 74 68 65 20 69 6e 74 65 72 6e 61   .** the interna
2eb30 6c 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e  l representation
2eb40 20 6f 66 20 74 68 65 0a 2a 2a 20 73 63 68 65 6d   of the.** schem
2eb50 61 20 63 6f 6e 73 69 73 74 65 6e 74 20 77 69 74  a consistent wit
2eb60 68 20 77 68 61 74 20 69 73 20 6f 6e 20 64 69 73  h what is on dis
2eb70 6b 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 44 72  k..*/.case OP_Dr
2eb80 6f 70 54 72 69 67 67 65 72 3a 20 7b 0a 20 20 73  opTrigger: {.  s
2eb90 71 6c 69 74 65 33 55 6e 6c 69 6e 6b 41 6e 64 44  qlite3UnlinkAndD
2eba0 65 6c 65 74 65 54 72 69 67 67 65 72 28 64 62 2c  eleteTrigger(db,
2ebb0 20 70 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70   pOp->p1, pOp->p
2ebc0 34 2e 7a 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  4.z);.  break;.}
2ebd0 0a 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  ...#ifndef SQLIT
2ebe0 45 5f 4f 4d 49 54 5f 49 4e 54 45 47 52 49 54 59  E_OMIT_INTEGRITY
2ebf0 5f 43 48 45 43 4b 0a 2f 2a 20 4f 70 63 6f 64 65  _CHECK./* Opcode
2ec00 3a 20 49 6e 74 65 67 72 69 74 79 43 6b 20 50 31  : IntegrityCk P1
2ec10 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a   P2 P3 P4 P5.**.
2ec20 2a 2a 20 44 6f 20 61 6e 20 61 6e 61 6c 79 73 69  ** Do an analysi
2ec30 73 20 6f 66 20 74 68 65 20 63 75 72 72 65 6e 74  s of the current
2ec40 6c 79 20 6f 70 65 6e 20 64 61 74 61 62 61 73 65  ly open database
2ec50 2e 20 20 53 74 6f 72 65 20 69 6e 0a 2a 2a 20 72  .  Store in.** r
2ec60 65 67 69 73 74 65 72 20 50 31 20 74 68 65 20 74  egister P1 the t
2ec70 65 78 74 20 6f 66 20 61 6e 20 65 72 72 6f 72 20  ext of an error 
2ec80 6d 65 73 73 61 67 65 20 64 65 73 63 72 69 62 69  message describi
2ec90 6e 67 20 61 6e 79 20 70 72 6f 62 6c 65 6d 73 2e  ng any problems.
2eca0 0a 2a 2a 20 49 66 20 6e 6f 20 70 72 6f 62 6c 65  .** If no proble
2ecb0 6d 73 20 61 72 65 20 66 6f 75 6e 64 2c 20 73 74  ms are found, st
2ecc0 6f 72 65 20 61 20 4e 55 4c 4c 20 69 6e 20 72 65  ore a NULL in re
2ecd0 67 69 73 74 65 72 20 50 31 2e 0a 2a 2a 0a 2a 2a  gister P1..**.**
2ece0 20 54 68 65 20 72 65 67 69 73 74 65 72 20 50 33   The register P3
2ecf0 20 63 6f 6e 74 61 69 6e 73 20 6f 6e 65 20 6c 65   contains one le
2ed00 73 73 20 74 68 61 6e 20 74 68 65 20 6d 61 78 69  ss than the maxi
2ed10 6d 75 6d 20 6e 75 6d 62 65 72 20 6f 66 20 61 6c  mum number of al
2ed20 6c 6f 77 65 64 20 65 72 72 6f 72 73 2e 0a 2a 2a  lowed errors..**
2ed30 20 41 74 20 6d 6f 73 74 20 72 65 67 28 50 33 29   At most reg(P3)
2ed40 20 65 72 72 6f 72 73 20 77 69 6c 6c 20 62 65 20   errors will be 
2ed50 72 65 70 6f 72 74 65 64 2e 0a 2a 2a 20 49 6e 20  reported..** In 
2ed60 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 74 68 65  other words, the
2ed70 20 61 6e 61 6c 79 73 69 73 20 73 74 6f 70 73 20   analysis stops 
2ed80 61 73 20 73 6f 6f 6e 20 61 73 20 72 65 67 28 50  as soon as reg(P
2ed90 31 29 20 65 72 72 6f 72 73 20 61 72 65 20 0a 2a  1) errors are .*
2eda0 2a 20 73 65 65 6e 2e 20 20 52 65 67 28 50 31 29  * seen.  Reg(P1)
2edb0 20 69 73 20 75 70 64 61 74 65 64 20 77 69 74 68   is updated with
2edc0 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 65   the number of e
2edd0 72 72 6f 72 73 20 72 65 6d 61 69 6e 69 6e 67 2e  rrors remaining.
2ede0 0a 2a 2a 0a 2a 2a 20 54 68 65 20 72 6f 6f 74 20  .**.** The root 
2edf0 70 61 67 65 20 6e 75 6d 62 65 72 73 20 6f 66 20  page numbers of 
2ee00 61 6c 6c 20 74 61 62 6c 65 73 20 69 6e 20 74 68  all tables in th
2ee10 65 20 64 61 74 61 62 61 73 65 20 61 72 65 20 69  e database are i
2ee20 6e 74 65 67 65 72 73 0a 2a 2a 20 73 74 6f 72 65  ntegers.** store
2ee30 64 20 69 6e 20 50 34 5f 49 4e 54 41 52 52 41 59  d in P4_INTARRAY
2ee40 20 61 72 67 75 6d 65 6e 74 2e 0a 2a 2a 0a 2a 2a   argument..**.**
2ee50 20 49 66 20 50 35 20 69 73 20 6e 6f 74 20 7a 65   If P5 is not ze
2ee60 72 6f 2c 20 74 68 65 20 63 68 65 63 6b 20 69 73  ro, the check is
2ee70 20 64 6f 6e 65 20 6f 6e 20 74 68 65 20 61 75 78   done on the aux
2ee80 69 6c 69 61 72 79 20 64 61 74 61 62 61 73 65 0a  iliary database.
2ee90 2a 2a 20 66 69 6c 65 2c 20 6e 6f 74 20 74 68 65  ** file, not the
2eea0 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 66   main database f
2eeb0 69 6c 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20  ile..**.** This 
2eec0 6f 70 63 6f 64 65 20 69 73 20 75 73 65 64 20 74  opcode is used t
2eed0 6f 20 69 6d 70 6c 65 6d 65 6e 74 20 74 68 65 20  o implement the 
2eee0 69 6e 74 65 67 72 69 74 79 5f 63 68 65 63 6b 20  integrity_check 
2eef0 70 72 61 67 6d 61 2e 0a 2a 2f 0a 63 61 73 65 20  pragma..*/.case 
2ef00 4f 50 5f 49 6e 74 65 67 72 69 74 79 43 6b 3a 20  OP_IntegrityCk: 
2ef10 7b 0a 20 20 69 6e 74 20 6e 52 6f 6f 74 3b 20 20  {.  int nRoot;  
2ef20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
2ef30 20 74 61 62 6c 65 73 20 74 6f 20 63 68 65 63 6b   tables to check
2ef40 2e 20 20 28 4e 75 6d 62 65 72 20 6f 66 20 72 6f  .  (Number of ro
2ef50 6f 74 20 70 61 67 65 73 2e 29 20 2a 2f 0a 20 20  ot pages.) */.  
2ef60 69 6e 74 20 2a 61 52 6f 6f 74 3b 20 20 20 20 20  int *aRoot;     
2ef70 2f 2a 20 41 72 72 61 79 20 6f 66 20 72 6f 6f 74  /* Array of root
2ef80 70 61 67 65 20 6e 75 6d 62 65 72 73 20 66 6f 72  page numbers for
2ef90 20 74 61 62 6c 65 73 20 74 6f 20 62 65 20 63 68   tables to be ch
2efa0 65 63 6b 65 64 20 2a 2f 0a 20 20 69 6e 74 20 6e  ecked */.  int n
2efb0 45 72 72 3b 20 20 20 20 20 20 20 2f 2a 20 4e 75  Err;       /* Nu
2efc0 6d 62 65 72 20 6f 66 20 65 72 72 6f 72 73 20 72  mber of errors r
2efd0 65 70 6f 72 74 65 64 20 2a 2f 0a 20 20 63 68 61  eported */.  cha
2efe0 72 20 2a 7a 3b 20 20 20 20 20 20 20 20 2f 2a 20  r *z;        /* 
2eff0 54 65 78 74 20 6f 66 20 74 68 65 20 65 72 72 6f  Text of the erro
2f000 72 20 72 65 70 6f 72 74 20 2a 2f 0a 20 20 4d 65  r report */.  Me
2f010 6d 20 2a 70 6e 45 72 72 3b 20 20 20 20 20 2f 2a  m *pnErr;     /*
2f020 20 52 65 67 69 73 74 65 72 20 6b 65 65 70 69 6e   Register keepin
2f030 67 20 74 72 61 63 6b 20 6f 66 20 65 72 72 6f 72  g track of error
2f040 73 20 72 65 6d 61 69 6e 69 6e 67 20 2a 2f 0a 0a  s remaining */..
2f050 20 20 61 73 73 65 72 74 28 20 70 2d 3e 62 49 73    assert( p->bIs
2f060 52 65 61 64 65 72 20 29 3b 0a 20 20 6e 52 6f 6f  Reader );.  nRoo
2f070 74 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 61  t = pOp->p2;.  a
2f080 52 6f 6f 74 20 3d 20 70 4f 70 2d 3e 70 34 2e 61  Root = pOp->p4.a
2f090 69 3b 0a 20 20 61 73 73 65 72 74 28 20 6e 52 6f  i;.  assert( nRo
2f0a0 6f 74 3e 30 20 29 3b 0a 20 20 61 73 73 65 72 74  ot>0 );.  assert
2f0b0 28 20 61 52 6f 6f 74 5b 30 5d 3d 3d 6e 52 6f 6f  ( aRoot[0]==nRoo
2f0c0 74 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  t );.  assert( p
2f0d0 4f 70 2d 3e 70 33 3e 30 20 26 26 20 70 4f 70 2d  Op->p3>0 && pOp-
2f0e0 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20  >p3<=(p->nMem+1 
2f0f0 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b  - p->nCursor) );
2f100 0a 20 20 70 6e 45 72 72 20 3d 20 26 61 4d 65 6d  .  pnErr = &aMem
2f110 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 61 73 73  [pOp->p3];.  ass
2f120 65 72 74 28 20 28 70 6e 45 72 72 2d 3e 66 6c 61  ert( (pnErr->fla
2f130 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29 21 3d 30  gs & MEM_Int)!=0
2f140 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70   );.  assert( (p
2f150 6e 45 72 72 2d 3e 66 6c 61 67 73 20 26 20 28 4d  nErr->flags & (M
2f160 45 4d 5f 53 74 72 7c 4d 45 4d 5f 42 6c 6f 62 29  EM_Str|MEM_Blob)
2f170 29 3d 3d 30 20 29 3b 0a 20 20 70 49 6e 31 20 3d  )==0 );.  pIn1 =
2f180 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b   &aMem[pOp->p1];
2f190 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
2f1a0 70 35 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20  p5<db->nDb );.  
2f1b0 61 73 73 65 72 74 28 20 44 62 4d 61 73 6b 54 65  assert( DbMaskTe
2f1c0 73 74 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b 2c  st(p->btreeMask,
2f1d0 20 70 4f 70 2d 3e 70 35 29 20 29 3b 0a 20 20 7a   pOp->p5) );.  z
2f1e0 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 49   = sqlite3BtreeI
2f1f0 6e 74 65 67 72 69 74 79 43 68 65 63 6b 28 64 62  ntegrityCheck(db
2f200 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 35 5d 2e 70  ->aDb[pOp->p5].p
2f210 42 74 2c 20 26 61 52 6f 6f 74 5b 31 5d 2c 20 6e  Bt, &aRoot[1], n
2f220 52 6f 6f 74 2c 0a 20 20 20 20 20 20 20 20 20 20  Root,.          
2f230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f240 20 20 20 20 20 20 20 28 69 6e 74 29 70 6e 45 72         (int)pnEr
2f250 72 2d 3e 75 2e 69 2b 31 2c 20 26 6e 45 72 72 29  r->u.i+1, &nErr)
2f260 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d  ;.  sqlite3VdbeM
2f270 65 6d 53 65 74 4e 75 6c 6c 28 70 49 6e 31 29 3b  emSetNull(pIn1);
2f280 0a 20 20 69 66 28 20 6e 45 72 72 3d 3d 30 20 29  .  if( nErr==0 )
2f290 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 7a 3d  {.    assert( z=
2f2a0 3d 30 20 29 3b 0a 20 20 7d 65 6c 73 65 20 69 66  =0 );.  }else if
2f2b0 28 20 7a 3d 3d 30 20 29 7b 0a 20 20 20 20 67 6f  ( z==0 ){.    go
2f2c0 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 65 6c  to no_mem;.  }el
2f2d0 73 65 7b 0a 20 20 20 20 70 6e 45 72 72 2d 3e 75  se{.    pnErr->u
2f2e0 2e 69 20 2d 3d 20 6e 45 72 72 2d 31 3b 0a 20 20  .i -= nErr-1;.  
2f2f0 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
2f300 53 65 74 53 74 72 28 70 49 6e 31 2c 20 7a 2c 20  SetStr(pIn1, z, 
2f310 2d 31 2c 20 53 51 4c 49 54 45 5f 55 54 46 38 2c  -1, SQLITE_UTF8,
2f320 20 73 71 6c 69 74 65 33 5f 66 72 65 65 29 3b 0a   sqlite3_free);.
2f330 20 20 7d 0a 20 20 55 50 44 41 54 45 5f 4d 41 58    }.  UPDATE_MAX
2f340 5f 42 4c 4f 42 53 49 5a 45 28 70 49 6e 31 29 3b  _BLOBSIZE(pIn1);
2f350 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 43 68  .  sqlite3VdbeCh
2f360 61 6e 67 65 45 6e 63 6f 64 69 6e 67 28 70 49 6e  angeEncoding(pIn
2f370 31 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20  1, encoding);.  
2f380 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20  break;.}.#endif 
2f390 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 49  /* SQLITE_OMIT_I
2f3a0 4e 54 45 47 52 49 54 59 5f 43 48 45 43 4b 20 2a  NTEGRITY_CHECK *
2f3b0 2f 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 6f  /../* Opcode: Ro
2f3c0 77 53 65 74 41 64 64 20 50 31 20 50 32 20 2a 20  wSetAdd P1 P2 * 
2f3d0 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  * *.** Synopsis:
2f3e0 20 72 6f 77 73 65 74 28 50 31 29 3d 72 5b 50 32   rowset(P1)=r[P2
2f3f0 5d 0a 2a 2a 0a 2a 2a 20 49 6e 73 65 72 74 20 74  ].**.** Insert t
2f400 68 65 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65  he integer value
2f410 20 68 65 6c 64 20 62 79 20 72 65 67 69 73 74 65   held by registe
2f420 72 20 50 32 20 69 6e 74 6f 20 61 20 52 6f 77 53  r P2 into a RowS
2f430 65 74 20 6f 62 6a 65 63 74 0a 2a 2a 20 68 65 6c  et object.** hel
2f440 64 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31  d in register P1
2f450 2e 0a 2a 2a 0a 2a 2a 20 41 6e 20 61 73 73 65 72  ..**.** An asser
2f460 74 69 6f 6e 20 66 61 69 6c 73 20 69 66 20 50 32  tion fails if P2
2f470 20 69 73 20 6e 6f 74 20 61 6e 20 69 6e 74 65 67   is not an integ
2f480 65 72 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52  er..*/.case OP_R
2f490 6f 77 53 65 74 41 64 64 3a 20 7b 20 20 20 20 20  owSetAdd: {     
2f4a0 20 20 2f 2a 20 69 6e 31 2c 20 69 6e 32 20 2a 2f    /* in1, in2 */
2f4b0 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b  .  pIn1 = &aMem[
2f4c0 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 49 6e 32  pOp->p1];.  pIn2
2f4d0 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32   = &aMem[pOp->p2
2f4e0 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70 49  ];.  assert( (pI
2f4f0 6e 32 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  n2->flags & MEM_
2f500 49 6e 74 29 21 3d 30 20 29 3b 0a 20 20 69 66 28  Int)!=0 );.  if(
2f510 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20   (pIn1->flags & 
2f520 4d 45 4d 5f 52 6f 77 53 65 74 29 3d 3d 30 20 29  MEM_RowSet)==0 )
2f530 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  {.    sqlite3Vdb
2f540 65 4d 65 6d 53 65 74 52 6f 77 53 65 74 28 70 49  eMemSetRowSet(pI
2f550 6e 31 29 3b 0a 20 20 20 20 69 66 28 20 28 70 49  n1);.    if( (pI
2f560 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  n1->flags & MEM_
2f570 52 6f 77 53 65 74 29 3d 3d 30 20 29 20 67 6f 74  RowSet)==0 ) got
2f580 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 20 20  o no_mem;.  }.  
2f590 73 71 6c 69 74 65 33 52 6f 77 53 65 74 49 6e 73  sqlite3RowSetIns
2f5a0 65 72 74 28 70 49 6e 31 2d 3e 75 2e 70 52 6f 77  ert(pIn1->u.pRow
2f5b0 53 65 74 2c 20 70 49 6e 32 2d 3e 75 2e 69 29 3b  Set, pIn2->u.i);
2f5c0 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
2f5d0 4f 70 63 6f 64 65 3a 20 52 6f 77 53 65 74 52 65  Opcode: RowSetRe
2f5e0 61 64 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a  ad P1 P2 P3 * *.
2f5f0 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50  ** Synopsis: r[P
2f600 33 5d 3d 72 6f 77 73 65 74 28 50 31 29 0a 2a 2a  3]=rowset(P1).**
2f610 0a 2a 2a 20 45 78 74 72 61 63 74 20 74 68 65 20  .** Extract the 
2f620 73 6d 61 6c 6c 65 73 74 20 76 61 6c 75 65 20 66  smallest value f
2f630 72 6f 6d 20 74 68 65 20 52 6f 77 53 65 74 20 6f  rom the RowSet o
2f640 62 6a 65 63 74 20 69 6e 20 50 31 0a 2a 2a 20 61  bject in P1.** a
2f650 6e 64 20 70 75 74 20 74 68 61 74 20 76 61 6c 75  nd put that valu
2f660 65 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20  e into register 
2f670 50 33 2e 0a 2a 2a 20 4f 72 2c 20 69 66 20 52 6f  P3..** Or, if Ro
2f680 77 53 65 74 20 6f 62 6a 65 63 74 20 50 31 20 69  wSet object P1 i
2f690 73 20 69 6e 69 74 69 61 6c 6c 79 20 65 6d 70 74  s initially empt
2f6a0 79 2c 20 6c 65 61 76 65 20 50 33 0a 2a 2a 20 75  y, leave P3.** u
2f6b0 6e 63 68 61 6e 67 65 64 20 61 6e 64 20 6a 75 6d  nchanged and jum
2f6c0 70 20 74 6f 20 69 6e 73 74 72 75 63 74 69 6f 6e  p to instruction
2f6d0 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f   P2..*/.case OP_
2f6e0 52 6f 77 53 65 74 52 65 61 64 3a 20 7b 20 20 20  RowSetRead: {   
2f6f0 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31      /* jump, in1
2f700 2c 20 6f 75 74 33 20 2a 2f 0a 20 20 69 36 34 20  , out3 */.  i64 
2f710 76 61 6c 3b 0a 0a 20 20 70 49 6e 31 20 3d 20 26  val;..  pIn1 = &
2f720 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  aMem[pOp->p1];. 
2f730 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67   if( (pIn1->flag
2f740 73 20 26 20 4d 45 4d 5f 52 6f 77 53 65 74 29 3d  s & MEM_RowSet)=
2f750 3d 30 20 0a 20 20 20 7c 7c 20 73 71 6c 69 74 65  =0 .   || sqlite
2f760 33 52 6f 77 53 65 74 4e 65 78 74 28 70 49 6e 31  3RowSetNext(pIn1
2f770 2d 3e 75 2e 70 52 6f 77 53 65 74 2c 20 26 76 61  ->u.pRowSet, &va
2f780 6c 29 3d 3d 30 0a 20 20 29 7b 0a 20 20 20 20 2f  l)==0.  ){.    /
2f790 2a 20 54 68 65 20 62 6f 6f 6c 65 61 6e 20 69 6e  * The boolean in
2f7a0 64 65 78 20 69 73 20 65 6d 70 74 79 20 2a 2f 0a  dex is empty */.
2f7b0 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
2f7c0 65 6d 53 65 74 4e 75 6c 6c 28 70 49 6e 31 29 3b  emSetNull(pIn1);
2f7d0 0a 20 20 20 20 56 64 62 65 42 72 61 6e 63 68 54  .    VdbeBranchT
2f7e0 61 6b 65 6e 28 31 2c 32 29 3b 0a 20 20 20 20 67  aken(1,2);.    g
2f7f0 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 5f 61  oto jump_to_p2_a
2f800 6e 64 5f 63 68 65 63 6b 5f 66 6f 72 5f 69 6e 74  nd_check_for_int
2f810 65 72 72 75 70 74 3b 0a 20 20 7d 65 6c 73 65 7b  errupt;.  }else{
2f820 0a 20 20 20 20 2f 2a 20 41 20 76 61 6c 75 65 20  .    /* A value 
2f830 77 61 73 20 70 75 6c 6c 65 64 20 66 72 6f 6d 20  was pulled from 
2f840 74 68 65 20 69 6e 64 65 78 20 2a 2f 0a 20 20 20  the index */.   
2f850 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e   VdbeBranchTaken
2f860 28 30 2c 32 29 3b 0a 20 20 20 20 73 71 6c 69 74  (0,2);.    sqlit
2f870 65 33 56 64 62 65 4d 65 6d 53 65 74 49 6e 74 36  e3VdbeMemSetInt6
2f880 34 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  4(&aMem[pOp->p3]
2f890 2c 20 76 61 6c 29 3b 0a 20 20 7d 0a 20 20 67 6f  , val);.  }.  go
2f8a0 74 6f 20 63 68 65 63 6b 5f 66 6f 72 5f 69 6e 74  to check_for_int
2f8b0 65 72 72 75 70 74 3b 0a 7d 0a 0a 2f 2a 20 4f 70  errupt;.}../* Op
2f8c0 63 6f 64 65 3a 20 52 6f 77 53 65 74 54 65 73 74  code: RowSetTest
2f8d0 20 50 31 20 50 32 20 50 33 20 50 34 0a 2a 2a 20   P1 P2 P3 P4.** 
2f8e0 53 79 6e 6f 70 73 69 73 3a 20 69 66 20 72 5b 50  Synopsis: if r[P
2f8f0 33 5d 20 69 6e 20 72 6f 77 73 65 74 28 50 31 29  3] in rowset(P1)
2f900 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 52   goto P2.**.** R
2f910 65 67 69 73 74 65 72 20 50 33 20 69 73 20 61 73  egister P3 is as
2f920 73 75 6d 65 64 20 74 6f 20 68 6f 6c 64 20 61 20  sumed to hold a 
2f930 36 34 2d 62 69 74 20 69 6e 74 65 67 65 72 20 76  64-bit integer v
2f940 61 6c 75 65 2e 20 49 66 20 72 65 67 69 73 74 65  alue. If registe
2f950 72 20 50 31 0a 2a 2a 20 63 6f 6e 74 61 69 6e 73  r P1.** contains
2f960 20 61 20 52 6f 77 53 65 74 20 6f 62 6a 65 63 74   a RowSet object
2f970 20 61 6e 64 20 74 68 61 74 20 52 6f 77 53 65 74   and that RowSet
2f980 20 6f 62 6a 65 63 74 20 63 6f 6e 74 61 69 6e 73   object contains
2f990 0a 2a 2a 20 74 68 65 20 76 61 6c 75 65 20 68 65  .** the value he
2f9a0 6c 64 20 69 6e 20 50 33 2c 20 6a 75 6d 70 20 74  ld in P3, jump t
2f9b0 6f 20 72 65 67 69 73 74 65 72 20 50 32 2e 20 4f  o register P2. O
2f9c0 74 68 65 72 77 69 73 65 2c 20 69 6e 73 65 72 74  therwise, insert
2f9d0 20 74 68 65 0a 2a 2a 20 69 6e 74 65 67 65 72 20   the.** integer 
2f9e0 69 6e 20 50 33 20 69 6e 74 6f 20 74 68 65 20 52  in P3 into the R
2f9f0 6f 77 53 65 74 20 61 6e 64 20 63 6f 6e 74 69 6e  owSet and contin
2fa00 75 65 20 6f 6e 20 74 6f 20 74 68 65 0a 2a 2a 20  ue on to the.** 
2fa10 6e 65 78 74 20 6f 70 63 6f 64 65 2e 0a 2a 2a 0a  next opcode..**.
2fa20 2a 2a 20 54 68 65 20 52 6f 77 53 65 74 20 6f 62  ** The RowSet ob
2fa30 6a 65 63 74 20 69 73 20 6f 70 74 69 6d 69 7a 65  ject is optimize
2fa40 64 20 66 6f 72 20 74 68 65 20 63 61 73 65 20 77  d for the case w
2fa50 68 65 72 65 20 73 65 74 73 20 6f 66 20 69 6e 74  here sets of int
2fa60 65 67 65 72 73 0a 2a 2a 20 61 72 65 20 69 6e 73  egers.** are ins
2fa70 65 72 74 65 64 20 69 6e 20 64 69 73 74 69 6e 63  erted in distinc
2fa80 74 20 70 68 61 73 65 73 2c 20 77 68 69 63 68 20  t phases, which 
2fa90 65 61 63 68 20 73 65 74 20 63 6f 6e 74 61 69 6e  each set contain
2faa0 73 20 6e 6f 20 64 75 70 6c 69 63 61 74 65 73 2e  s no duplicates.
2fab0 0a 2a 2a 20 45 61 63 68 20 73 65 74 20 69 73 20  .** Each set is 
2fac0 69 64 65 6e 74 69 66 69 65 64 20 62 79 20 61 20  identified by a 
2fad0 75 6e 69 71 75 65 20 50 34 20 76 61 6c 75 65 2e  unique P4 value.
2fae0 20 54 68 65 20 66 69 72 73 74 20 73 65 74 0a 2a   The first set.*
2faf0 2a 20 6d 75 73 74 20 68 61 76 65 20 50 34 3d 3d  * must have P4==
2fb00 30 2c 20 74 68 65 20 66 69 6e 61 6c 20 73 65 74  0, the final set
2fb10 20 6d 75 73 74 20 68 61 76 65 20 50 34 3d 3d 2d   must have P4==-
2fb20 31 2c 20 61 6e 64 20 66 6f 72 20 61 6c 6c 20 6f  1, and for all o
2fb30 74 68 65 72 20 73 65 74 73 0a 2a 2a 20 6d 75 73  ther sets.** mus
2fb40 74 20 68 61 76 65 20 50 34 3e 30 2e 0a 2a 2a 0a  t have P4>0..**.
2fb50 2a 2a 20 54 68 69 73 20 61 6c 6c 6f 77 73 20 6f  ** This allows o
2fb60 70 74 69 6d 69 7a 61 74 69 6f 6e 73 3a 20 28 61  ptimizations: (a
2fb70 29 20 77 68 65 6e 20 50 34 3d 3d 30 20 74 68 65  ) when P4==0 the
2fb80 72 65 20 69 73 20 6e 6f 20 6e 65 65 64 20 74 6f  re is no need to
2fb90 20 74 65 73 74 0a 2a 2a 20 74 68 65 20 52 6f 77   test.** the Row
2fba0 53 65 74 20 6f 62 6a 65 63 74 20 66 6f 72 20 50  Set object for P
2fbb0 33 2c 20 61 73 20 69 74 20 69 73 20 67 75 61 72  3, as it is guar
2fbc0 61 6e 74 65 65 64 20 6e 6f 74 20 74 6f 20 63 6f  anteed not to co
2fbd0 6e 74 61 69 6e 20 69 74 2c 0a 2a 2a 20 28 62 29  ntain it,.** (b)
2fbe0 20 77 68 65 6e 20 50 34 3d 3d 2d 31 20 74 68 65   when P4==-1 the
2fbf0 72 65 20 69 73 20 6e 6f 20 6e 65 65 64 20 74 6f  re is no need to
2fc00 20 69 6e 73 65 72 74 20 74 68 65 20 76 61 6c 75   insert the valu
2fc10 65 2c 20 61 73 20 69 74 20 77 69 6c 6c 0a 2a 2a  e, as it will.**
2fc20 20 6e 65 76 65 72 20 62 65 20 74 65 73 74 65 64   never be tested
2fc30 20 66 6f 72 2c 20 61 6e 64 20 28 63 29 20 77 68   for, and (c) wh
2fc40 65 6e 20 61 20 76 61 6c 75 65 20 74 68 61 74 20  en a value that 
2fc50 69 73 20 70 61 72 74 20 6f 66 20 73 65 74 20 58  is part of set X
2fc60 20 69 73 0a 2a 2a 20 69 6e 73 65 72 74 65 64 2c   is.** inserted,
2fc70 20 74 68 65 72 65 20 69 73 20 6e 6f 20 6e 65 65   there is no nee
2fc80 64 20 74 6f 20 73 65 61 72 63 68 20 74 6f 20 73  d to search to s
2fc90 65 65 20 69 66 20 74 68 65 20 73 61 6d 65 20 76  ee if the same v
2fca0 61 6c 75 65 20 77 61 73 0a 2a 2a 20 70 72 65 76  alue was.** prev
2fcb0 69 6f 75 73 6c 79 20 69 6e 73 65 72 74 65 64 20  iously inserted 
2fcc0 61 73 20 70 61 72 74 20 6f 66 20 73 65 74 20 58  as part of set X
2fcd0 20 28 6f 6e 6c 79 20 69 66 20 69 74 20 77 61 73   (only if it was
2fce0 20 70 72 65 76 69 6f 75 73 6c 79 0a 2a 2a 20 69   previously.** i
2fcf0 6e 73 65 72 74 65 64 20 61 73 20 70 61 72 74 20  nserted as part 
2fd00 6f 66 20 73 6f 6d 65 20 6f 74 68 65 72 20 73 65  of some other se
2fd10 74 29 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52  t)..*/.case OP_R
2fd20 6f 77 53 65 74 54 65 73 74 3a 20 7b 20 20 20 20  owSetTest: {    
2fd30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fd40 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 2c 20 69   /* jump, in1, i
2fd50 6e 33 20 2a 2f 0a 20 20 69 6e 74 20 69 53 65 74  n3 */.  int iSet
2fd60 3b 0a 20 20 69 6e 74 20 65 78 69 73 74 73 3b 0a  ;.  int exists;.
2fd70 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b  .  pIn1 = &aMem[
2fd80 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 49 6e 33  pOp->p1];.  pIn3
2fd90 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33   = &aMem[pOp->p3
2fda0 5d 3b 0a 20 20 69 53 65 74 20 3d 20 70 4f 70 2d  ];.  iSet = pOp-
2fdb0 3e 70 34 2e 69 3b 0a 20 20 61 73 73 65 72 74 28  >p4.i;.  assert(
2fdc0 20 70 49 6e 33 2d 3e 66 6c 61 67 73 26 4d 45 4d   pIn3->flags&MEM
2fdd0 5f 49 6e 74 20 29 3b 0a 0a 20 20 2f 2a 20 49 66  _Int );..  /* If
2fde0 20 74 68 65 72 65 20 69 73 20 61 6e 79 74 68 69   there is anythi
2fdf0 6e 67 20 6f 74 68 65 72 20 74 68 61 6e 20 61 20  ng other than a 
2fe00 72 6f 77 73 65 74 20 6f 62 6a 65 63 74 20 69 6e  rowset object in
2fe10 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 50 31 2c   memory cell P1,
2fe20 0a 20 20 2a 2a 20 64 65 6c 65 74 65 20 69 74 20  .  ** delete it 
2fe30 6e 6f 77 20 61 6e 64 20 69 6e 69 74 69 61 6c 69  now and initiali
2fe40 7a 65 20 50 31 20 77 69 74 68 20 61 6e 20 65 6d  ze P1 with an em
2fe50 70 74 79 20 72 6f 77 73 65 74 0a 20 20 2a 2f 0a  pty rowset.  */.
2fe60 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61    if( (pIn1->fla
2fe70 67 73 20 26 20 4d 45 4d 5f 52 6f 77 53 65 74 29  gs & MEM_RowSet)
2fe80 3d 3d 30 20 29 7b 0a 20 20 20 20 73 71 6c 69 74  ==0 ){.    sqlit
2fe90 65 33 56 64 62 65 4d 65 6d 53 65 74 52 6f 77 53  e3VdbeMemSetRowS
2fea0 65 74 28 70 49 6e 31 29 3b 0a 20 20 20 20 69 66  et(pIn1);.    if
2feb0 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26  ( (pIn1->flags &
2fec0 20 4d 45 4d 5f 52 6f 77 53 65 74 29 3d 3d 30 20   MEM_RowSet)==0 
2fed0 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20  ) goto no_mem;. 
2fee0 20 7d 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f   }..  assert( pO
2fef0 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e  p->p4type==P4_IN
2ff00 54 33 32 20 29 3b 0a 20 20 61 73 73 65 72 74 28  T32 );.  assert(
2ff10 20 69 53 65 74 3d 3d 2d 31 20 7c 7c 20 69 53 65   iSet==-1 || iSe
2ff20 74 3e 3d 30 20 29 3b 0a 20 20 69 66 28 20 69 53  t>=0 );.  if( iS
2ff30 65 74 20 29 7b 0a 20 20 20 20 65 78 69 73 74 73  et ){.    exists
2ff40 20 3d 20 73 71 6c 69 74 65 33 52 6f 77 53 65 74   = sqlite3RowSet
2ff50 54 65 73 74 28 70 49 6e 31 2d 3e 75 2e 70 52 6f  Test(pIn1->u.pRo
2ff60 77 53 65 74 2c 20 69 53 65 74 2c 20 70 49 6e 33  wSet, iSet, pIn3
2ff70 2d 3e 75 2e 69 29 3b 0a 20 20 20 20 56 64 62 65  ->u.i);.    Vdbe
2ff80 42 72 61 6e 63 68 54 61 6b 65 6e 28 65 78 69 73  BranchTaken(exis
2ff90 74 73 21 3d 30 2c 32 29 3b 0a 20 20 20 20 69 66  ts!=0,2);.    if
2ffa0 28 20 65 78 69 73 74 73 20 29 20 67 6f 74 6f 20  ( exists ) goto 
2ffb0 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 7d 0a  jump_to_p2;.  }.
2ffc0 20 20 69 66 28 20 69 53 65 74 3e 3d 30 20 29 7b    if( iSet>=0 ){
2ffd0 0a 20 20 20 20 73 71 6c 69 74 65 33 52 6f 77 53  .    sqlite3RowS
2ffe0 65 74 49 6e 73 65 72 74 28 70 49 6e 31 2d 3e 75  etInsert(pIn1->u
2fff0 2e 70 52 6f 77 53 65 74 2c 20 70 49 6e 33 2d 3e  .pRowSet, pIn3->
30000 75 2e 69 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61  u.i);.  }.  brea
30010 6b 3b 0a 7d 0a 0a 0a 23 69 66 6e 64 65 66 20 53  k;.}...#ifndef S
30020 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 49 47 47  QLITE_OMIT_TRIGG
30030 45 52 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 50  ER../* Opcode: P
30040 72 6f 67 72 61 6d 20 50 31 20 50 32 20 50 33 20  rogram P1 P2 P3 
30050 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 45 78 65 63  P4 P5.**.** Exec
30060 75 74 65 20 74 68 65 20 74 72 69 67 67 65 72 20  ute the trigger 
30070 70 72 6f 67 72 61 6d 20 70 61 73 73 65 64 20 61  program passed a
30080 73 20 50 34 20 28 74 79 70 65 20 50 34 5f 53 55  s P4 (type P4_SU
30090 42 50 52 4f 47 52 41 4d 29 2e 20 0a 2a 2a 0a 2a  BPROGRAM). .**.*
300a0 2a 20 50 31 20 63 6f 6e 74 61 69 6e 73 20 74 68  * P1 contains th
300b0 65 20 61 64 64 72 65 73 73 20 6f 66 20 74 68 65  e address of the
300c0 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 74 68 61   memory cell tha
300d0 74 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 66  t contains the f
300e0 69 72 73 74 20 6d 65 6d 6f 72 79 20 0a 2a 2a 20  irst memory .** 
300f0 63 65 6c 6c 20 69 6e 20 61 6e 20 61 72 72 61 79  cell in an array
30100 20 6f 66 20 76 61 6c 75 65 73 20 75 73 65 64 20   of values used 
30110 61 73 20 61 72 67 75 6d 65 6e 74 73 20 74 6f 20  as arguments to 
30120 74 68 65 20 73 75 62 2d 70 72 6f 67 72 61 6d 2e  the sub-program.
30130 20 50 32 20 0a 2a 2a 20 63 6f 6e 74 61 69 6e 73   P2 .** contains
30140 20 74 68 65 20 61 64 64 72 65 73 73 20 74 6f 20   the address to 
30150 6a 75 6d 70 20 74 6f 20 69 66 20 74 68 65 20 73  jump to if the s
30160 75 62 2d 70 72 6f 67 72 61 6d 20 74 68 72 6f 77  ub-program throw
30170 73 20 61 6e 20 49 47 4e 4f 52 45 20 0a 2a 2a 20  s an IGNORE .** 
30180 65 78 63 65 70 74 69 6f 6e 20 75 73 69 6e 67 20  exception using 
30190 74 68 65 20 52 41 49 53 45 28 29 20 66 75 6e 63  the RAISE() func
301a0 74 69 6f 6e 2e 20 52 65 67 69 73 74 65 72 20 50  tion. Register P
301b0 33 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 61  3 contains the a
301c0 64 64 72 65 73 73 20 0a 2a 2a 20 6f 66 20 61 20  ddress .** of a 
301d0 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 69 6e 20 74  memory cell in t
301e0 68 69 73 20 28 74 68 65 20 70 61 72 65 6e 74 29  his (the parent)
301f0 20 56 4d 20 74 68 61 74 20 69 73 20 75 73 65 64   VM that is used
30200 20 74 6f 20 61 6c 6c 6f 63 61 74 65 20 74 68 65   to allocate the
30210 20 0a 2a 2a 20 6d 65 6d 6f 72 79 20 72 65 71 75   .** memory requ
30220 69 72 65 64 20 62 79 20 74 68 65 20 73 75 62 2d  ired by the sub-
30230 76 64 62 65 20 61 74 20 72 75 6e 74 69 6d 65 2e  vdbe at runtime.
30240 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20 70  .**.** P4 is a p
30250 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20 56 4d  ointer to the VM
30260 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20   containing the 
30270 74 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d 2e  trigger program.
30280 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 20 69 73 20  .**.** If P5 is 
30290 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65 6e 20 72  non-zero, then r
302a0 65 63 75 72 73 69 76 65 20 70 72 6f 67 72 61 6d  ecursive program
302b0 20 69 6e 76 6f 63 61 74 69 6f 6e 20 69 73 20 65   invocation is e
302c0 6e 61 62 6c 65 64 2e 0a 2a 2f 0a 63 61 73 65 20  nabled..*/.case 
302d0 4f 50 5f 50 72 6f 67 72 61 6d 3a 20 7b 20 20 20  OP_Program: {   
302e0 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a       /* jump */.
302f0 20 20 69 6e 74 20 6e 4d 65 6d 3b 20 20 20 20 20    int nMem;     
30300 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
30310 62 65 72 20 6f 66 20 6d 65 6d 6f 72 79 20 72 65  ber of memory re
30320 67 69 73 74 65 72 73 20 66 6f 72 20 73 75 62 2d  gisters for sub-
30330 70 72 6f 67 72 61 6d 20 2a 2f 0a 20 20 69 6e 74  program */.  int
30340 20 6e 42 79 74 65 3b 20 20 20 20 20 20 20 20 20   nByte;         
30350 20 20 20 20 20 2f 2a 20 42 79 74 65 73 20 6f 66       /* Bytes of
30360 20 72 75 6e 74 69 6d 65 20 73 70 61 63 65 20 72   runtime space r
30370 65 71 75 69 72 65 64 20 66 6f 72 20 73 75 62 2d  equired for sub-
30380 70 72 6f 67 72 61 6d 20 2a 2f 0a 20 20 4d 65 6d  program */.  Mem
30390 20 2a 70 52 74 3b 20 20 20 20 20 20 20 20 20 20   *pRt;          
303a0 20 20 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72       /* Register
303b0 20 74 6f 20 61 6c 6c 6f 63 61 74 65 20 72 75 6e   to allocate run
303c0 74 69 6d 65 20 73 70 61 63 65 20 2a 2f 0a 20 20  time space */.  
303d0 4d 65 6d 20 2a 70 4d 65 6d 3b 20 20 20 20 20 20  Mem *pMem;      
303e0 20 20 20 20 20 20 20 20 2f 2a 20 55 73 65 64 20          /* Used 
303f0 74 6f 20 69 74 65 72 61 74 65 20 74 68 72 6f 75  to iterate throu
30400 67 68 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 73 20  gh memory cells 
30410 2a 2f 0a 20 20 4d 65 6d 20 2a 70 45 6e 64 3b 20  */.  Mem *pEnd; 
30420 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
30430 4c 61 73 74 20 6d 65 6d 6f 72 79 20 63 65 6c 6c  Last memory cell
30440 20 69 6e 20 6e 65 77 20 61 72 72 61 79 20 2a 2f   in new array */
30450 0a 20 20 56 64 62 65 46 72 61 6d 65 20 2a 70 46  .  VdbeFrame *pF
30460 72 61 6d 65 3b 20 20 20 20 20 20 2f 2a 20 4e 65  rame;      /* Ne
30470 77 20 76 64 62 65 20 66 72 61 6d 65 20 74 6f 20  w vdbe frame to 
30480 65 78 65 63 75 74 65 20 69 6e 20 2a 2f 0a 20 20  execute in */.  
30490 53 75 62 50 72 6f 67 72 61 6d 20 2a 70 50 72 6f  SubProgram *pPro
304a0 67 72 61 6d 3b 20 20 20 2f 2a 20 53 75 62 2d 70  gram;   /* Sub-p
304b0 72 6f 67 72 61 6d 20 74 6f 20 65 78 65 63 75 74  rogram to execut
304c0 65 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 74 3b 20  e */.  void *t; 
304d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
304e0 2a 20 54 6f 6b 65 6e 20 69 64 65 6e 74 69 66 79  * Token identify
304f0 69 6e 67 20 74 72 69 67 67 65 72 20 2a 2f 0a 0a  ing trigger */..
30500 20 20 70 50 72 6f 67 72 61 6d 20 3d 20 70 4f 70    pProgram = pOp
30510 2d 3e 70 34 2e 70 50 72 6f 67 72 61 6d 3b 0a 20  ->p4.pProgram;. 
30520 20 70 52 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70   pRt = &aMem[pOp
30530 2d 3e 70 33 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p3];.  assert(
30540 20 70 50 72 6f 67 72 61 6d 2d 3e 6e 4f 70 3e 30   pProgram->nOp>0
30550 20 29 3b 0a 20 20 0a 20 20 2f 2a 20 49 66 20 74   );.  .  /* If t
30560 68 65 20 70 35 20 66 6c 61 67 20 69 73 20 63 6c  he p5 flag is cl
30570 65 61 72 2c 20 74 68 65 6e 20 72 65 63 75 72 73  ear, then recurs
30580 69 76 65 20 69 6e 76 6f 63 61 74 69 6f 6e 20 6f  ive invocation o
30590 66 20 74 72 69 67 67 65 72 73 20 69 73 20 0a 20  f triggers is . 
305a0 20 2a 2a 20 64 69 73 61 62 6c 65 64 20 66 6f 72   ** disabled for
305b0 20 62 61 63 6b 77 61 72 64 73 20 63 6f 6d 70 61   backwards compa
305c0 74 69 62 69 6c 69 74 79 20 28 70 35 20 69 73 20  tibility (p5 is 
305d0 73 65 74 20 69 66 20 74 68 69 73 20 73 75 62 2d  set if this sub-
305e0 70 72 6f 67 72 61 6d 0a 20 20 2a 2a 20 69 73 20  program.  ** is 
305f0 72 65 61 6c 6c 79 20 61 20 74 72 69 67 67 65 72  really a trigger
30600 2c 20 6e 6f 74 20 61 20 66 6f 72 65 69 67 6e 20  , not a foreign 
30610 6b 65 79 20 61 63 74 69 6f 6e 2c 20 61 6e 64 20  key action, and 
30620 74 68 65 20 66 6c 61 67 20 73 65 74 0a 20 20 2a  the flag set.  *
30630 2a 20 61 6e 64 20 63 6c 65 61 72 65 64 20 62 79  * and cleared by
30640 20 74 68 65 20 22 50 52 41 47 4d 41 20 72 65 63   the "PRAGMA rec
30650 75 72 73 69 76 65 5f 74 72 69 67 67 65 72 73 22  ursive_triggers"
30660 20 63 6f 6d 6d 61 6e 64 20 69 73 20 63 6c 65 61   command is clea
30670 72 29 2e 0a 20 20 2a 2a 20 0a 20 20 2a 2a 20 49  r)..  ** .  ** I
30680 74 20 69 73 20 72 65 63 75 72 73 69 76 65 20 69  t is recursive i
30690 6e 76 6f 63 61 74 69 6f 6e 20 6f 66 20 74 72 69  nvocation of tri
306a0 67 67 65 72 73 2c 20 61 74 20 74 68 65 20 53 51  ggers, at the SQ
306b0 4c 20 6c 65 76 65 6c 2c 20 74 68 61 74 20 69 73  L level, that is
306c0 20 0a 20 20 2a 2a 20 64 69 73 61 62 6c 65 64 2e   .  ** disabled.
306d0 20 49 6e 20 73 6f 6d 65 20 63 61 73 65 73 20 61   In some cases a
306e0 20 73 69 6e 67 6c 65 20 74 72 69 67 67 65 72 20   single trigger 
306f0 6d 61 79 20 67 65 6e 65 72 61 74 65 20 6d 6f 72  may generate mor
30700 65 20 74 68 61 6e 20 6f 6e 65 20 0a 20 20 2a 2a  e than one .  **
30710 20 53 75 62 50 72 6f 67 72 61 6d 20 28 69 66 20   SubProgram (if 
30720 74 68 65 20 74 72 69 67 67 65 72 20 6d 61 79 20  the trigger may 
30730 62 65 20 65 78 65 63 75 74 65 64 20 77 69 74 68  be executed with
30740 20 6d 6f 72 65 20 74 68 61 6e 20 6f 6e 65 20 64   more than one d
30750 69 66 66 65 72 65 6e 74 20 0a 20 20 2a 2a 20 4f  ifferent .  ** O
30760 4e 20 43 4f 4e 46 4c 49 43 54 20 61 6c 67 6f 72  N CONFLICT algor
30770 69 74 68 6d 29 2e 20 53 75 62 50 72 6f 67 72 61  ithm). SubProgra
30780 6d 20 73 74 72 75 63 74 75 72 65 73 20 61 73 73  m structures ass
30790 6f 63 69 61 74 65 64 20 77 69 74 68 20 61 0a 20  ociated with a. 
307a0 20 2a 2a 20 73 69 6e 67 6c 65 20 74 72 69 67 67   ** single trigg
307b0 65 72 20 61 6c 6c 20 68 61 76 65 20 74 68 65 20  er all have the 
307c0 73 61 6d 65 20 76 61 6c 75 65 20 66 6f 72 20 74  same value for t
307d0 68 65 20 53 75 62 50 72 6f 67 72 61 6d 2e 74 6f  he SubProgram.to
307e0 6b 65 6e 20 0a 20 20 2a 2a 20 76 61 72 69 61 62  ken .  ** variab
307f0 6c 65 2e 20 20 2a 2f 0a 20 20 69 66 28 20 70 4f  le.  */.  if( pO
30800 70 2d 3e 70 35 20 29 7b 0a 20 20 20 20 74 20 3d  p->p5 ){.    t =
30810 20 70 50 72 6f 67 72 61 6d 2d 3e 74 6f 6b 65 6e   pProgram->token
30820 3b 0a 20 20 20 20 66 6f 72 28 70 46 72 61 6d 65  ;.    for(pFrame
30830 3d 70 2d 3e 70 46 72 61 6d 65 3b 20 70 46 72 61  =p->pFrame; pFra
30840 6d 65 20 26 26 20 70 46 72 61 6d 65 2d 3e 74 6f  me && pFrame->to
30850 6b 65 6e 21 3d 74 3b 20 70 46 72 61 6d 65 3d 70  ken!=t; pFrame=p
30860 46 72 61 6d 65 2d 3e 70 50 61 72 65 6e 74 29 3b  Frame->pParent);
30870 0a 20 20 20 20 69 66 28 20 70 46 72 61 6d 65 20  .    if( pFrame 
30880 29 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20  ) break;.  }..  
30890 69 66 28 20 70 2d 3e 6e 46 72 61 6d 65 3e 3d 64  if( p->nFrame>=d
308a0 62 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45  b->aLimit[SQLITE
308b0 5f 4c 49 4d 49 54 5f 54 52 49 47 47 45 52 5f 44  _LIMIT_TRIGGER_D
308c0 45 50 54 48 5d 20 29 7b 0a 20 20 20 20 72 63 20  EPTH] ){.    rc 
308d0 3d 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 3b 0a  = SQLITE_ERROR;.
308e0 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 45      sqlite3VdbeE
308f0 72 72 6f 72 28 70 2c 20 22 74 6f 6f 20 6d 61 6e  rror(p, "too man
30900 79 20 6c 65 76 65 6c 73 20 6f 66 20 74 72 69 67  y levels of trig
30910 67 65 72 20 72 65 63 75 72 73 69 6f 6e 22 29 3b  ger recursion");
30920 0a 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f  .    goto abort_
30930 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
30940 7d 0a 0a 20 20 2f 2a 20 52 65 67 69 73 74 65 72  }..  /* Register
30950 20 70 52 74 20 69 73 20 75 73 65 64 20 74 6f 20   pRt is used to 
30960 73 74 6f 72 65 20 74 68 65 20 6d 65 6d 6f 72 79  store the memory
30970 20 72 65 71 75 69 72 65 64 20 74 6f 20 73 61 76   required to sav
30980 65 20 74 68 65 20 73 74 61 74 65 0a 20 20 2a 2a  e the state.  **
30990 20 6f 66 20 74 68 65 20 63 75 72 72 65 6e 74 20   of the current 
309a0 70 72 6f 67 72 61 6d 2c 20 61 6e 64 20 74 68 65  program, and the
309b0 20 6d 65 6d 6f 72 79 20 72 65 71 75 69 72 65 64   memory required
309c0 20 61 74 20 72 75 6e 74 69 6d 65 20 74 6f 20 65   at runtime to e
309d0 78 65 63 75 74 65 0a 20 20 2a 2a 20 74 68 65 20  xecute.  ** the 
309e0 74 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d 2e  trigger program.
309f0 20 49 66 20 74 68 69 73 20 74 72 69 67 67 65 72   If this trigger
30a00 20 68 61 73 20 62 65 65 6e 20 66 69 72 65 64 20   has been fired 
30a10 62 65 66 6f 72 65 2c 20 74 68 65 6e 20 70 52 74  before, then pRt
30a20 20 0a 20 20 2a 2a 20 69 73 20 61 6c 72 65 61 64   .  ** is alread
30a30 79 20 61 6c 6c 6f 63 61 74 65 64 2e 20 4f 74 68  y allocated. Oth
30a40 65 72 77 69 73 65 2c 20 69 74 20 6d 75 73 74 20  erwise, it must 
30a50 62 65 20 69 6e 69 74 69 61 6c 69 7a 65 64 2e 20  be initialized. 
30a60 20 2a 2f 0a 20 20 69 66 28 20 28 70 52 74 2d 3e   */.  if( (pRt->
30a70 66 6c 61 67 73 26 4d 45 4d 5f 46 72 61 6d 65 29  flags&MEM_Frame)
30a80 3d 3d 30 20 29 7b 0a 20 20 20 20 2f 2a 20 53 75  ==0 ){.    /* Su
30a90 62 50 72 6f 67 72 61 6d 2e 6e 4d 65 6d 20 69 73  bProgram.nMem is
30aa0 20 73 65 74 20 74 6f 20 74 68 65 20 6e 75 6d 62   set to the numb
30ab0 65 72 20 6f 66 20 6d 65 6d 6f 72 79 20 63 65 6c  er of memory cel
30ac0 6c 73 20 75 73 65 64 20 62 79 20 74 68 65 20 0a  ls used by the .
30ad0 20 20 20 20 2a 2a 20 70 72 6f 67 72 61 6d 20 73      ** program s
30ae0 74 6f 72 65 64 20 69 6e 20 53 75 62 50 72 6f 67  tored in SubProg
30af0 72 61 6d 2e 61 4f 70 2e 20 41 73 20 77 65 6c 6c  ram.aOp. As well
30b00 20 61 73 20 74 68 65 73 65 2c 20 6f 6e 65 20 6d   as these, one m
30b10 65 6d 6f 72 79 0a 20 20 20 20 2a 2a 20 63 65 6c  emory.    ** cel
30b20 6c 20 69 73 20 72 65 71 75 69 72 65 64 20 66 6f  l is required fo
30b30 72 20 65 61 63 68 20 63 75 72 73 6f 72 20 75 73  r each cursor us
30b40 65 64 20 62 79 20 74 68 65 20 70 72 6f 67 72 61  ed by the progra
30b50 6d 2e 20 53 65 74 20 6c 6f 63 61 6c 0a 20 20 20  m. Set local.   
30b60 20 2a 2a 20 76 61 72 69 61 62 6c 65 20 6e 4d 65   ** variable nMe
30b70 6d 20 28 61 6e 64 20 6c 61 74 65 72 2c 20 56 64  m (and later, Vd
30b80 62 65 46 72 61 6d 65 2e 6e 43 68 69 6c 64 4d 65  beFrame.nChildMe
30b90 6d 29 20 74 6f 20 74 68 69 73 20 76 61 6c 75 65  m) to this value
30ba0 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 6e 4d 65  ..    */.    nMe
30bb0 6d 20 3d 20 70 50 72 6f 67 72 61 6d 2d 3e 6e 4d  m = pProgram->nM
30bc0 65 6d 20 2b 20 70 50 72 6f 67 72 61 6d 2d 3e 6e  em + pProgram->n
30bd0 43 73 72 3b 0a 20 20 20 20 61 73 73 65 72 74 28  Csr;.    assert(
30be0 20 6e 4d 65 6d 3e 30 20 29 3b 0a 20 20 20 20 69   nMem>0 );.    i
30bf0 66 28 20 70 50 72 6f 67 72 61 6d 2d 3e 6e 43 73  f( pProgram->nCs
30c00 72 3d 3d 30 20 29 20 6e 4d 65 6d 2b 2b 3b 0a 20  r==0 ) nMem++;. 
30c10 20 20 20 6e 42 79 74 65 20 3d 20 52 4f 55 4e 44     nByte = ROUND
30c20 38 28 73 69 7a 65 6f 66 28 56 64 62 65 46 72 61  8(sizeof(VdbeFra
30c30 6d 65 29 29 0a 20 20 20 20 20 20 20 20 20 20 20  me)).           
30c40 20 20 20 2b 20 6e 4d 65 6d 20 2a 20 73 69 7a 65     + nMem * size
30c50 6f 66 28 4d 65 6d 29 0a 20 20 20 20 20 20 20 20  of(Mem).        
30c60 20 20 20 20 20 20 2b 20 70 50 72 6f 67 72 61 6d        + pProgram
30c70 2d 3e 6e 43 73 72 20 2a 20 73 69 7a 65 6f 66 28  ->nCsr * sizeof(
30c80 56 64 62 65 43 75 72 73 6f 72 2a 29 0a 20 20 20  VdbeCursor*).   
30c90 20 20 20 20 20 20 20 20 20 20 20 2b 20 28 70 50             + (pP
30ca0 72 6f 67 72 61 6d 2d 3e 6e 4f 70 20 2b 20 37 29  rogram->nOp + 7)
30cb0 2f 38 3b 0a 20 20 20 20 70 46 72 61 6d 65 20 3d  /8;.    pFrame =
30cc0 20 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63   sqlite3DbMalloc
30cd0 5a 65 72 6f 28 64 62 2c 20 6e 42 79 74 65 29 3b  Zero(db, nByte);
30ce0 0a 20 20 20 20 69 66 28 20 21 70 46 72 61 6d 65  .    if( !pFrame
30cf0 20 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20 6e   ){.      goto n
30d00 6f 5f 6d 65 6d 3b 0a 20 20 20 20 7d 0a 20 20 20  o_mem;.    }.   
30d10 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 52   sqlite3VdbeMemR
30d20 65 6c 65 61 73 65 28 70 52 74 29 3b 0a 20 20 20  elease(pRt);.   
30d30 20 70 52 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45   pRt->flags = ME
30d40 4d 5f 46 72 61 6d 65 3b 0a 20 20 20 20 70 52 74  M_Frame;.    pRt
30d50 2d 3e 75 2e 70 46 72 61 6d 65 20 3d 20 70 46 72  ->u.pFrame = pFr
30d60 61 6d 65 3b 0a 0a 20 20 20 20 70 46 72 61 6d 65  ame;..    pFrame
30d70 2d 3e 76 20 3d 20 70 3b 0a 20 20 20 20 70 46 72  ->v = p;.    pFr
30d80 61 6d 65 2d 3e 6e 43 68 69 6c 64 4d 65 6d 20 3d  ame->nChildMem =
30d90 20 6e 4d 65 6d 3b 0a 20 20 20 20 70 46 72 61 6d   nMem;.    pFram
30da0 65 2d 3e 6e 43 68 69 6c 64 43 73 72 20 3d 20 70  e->nChildCsr = p
30db0 50 72 6f 67 72 61 6d 2d 3e 6e 43 73 72 3b 0a 20  Program->nCsr;. 
30dc0 20 20 20 70 46 72 61 6d 65 2d 3e 70 63 20 3d 20     pFrame->pc = 
30dd0 28 69 6e 74 29 28 70 4f 70 20 2d 20 61 4f 70 29  (int)(pOp - aOp)
30de0 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 61 4d  ;.    pFrame->aM
30df0 65 6d 20 3d 20 70 2d 3e 61 4d 65 6d 3b 0a 20 20  em = p->aMem;.  
30e00 20 20 70 46 72 61 6d 65 2d 3e 6e 4d 65 6d 20 3d    pFrame->nMem =
30e10 20 70 2d 3e 6e 4d 65 6d 3b 0a 20 20 20 20 70 46   p->nMem;.    pF
30e20 72 61 6d 65 2d 3e 61 70 43 73 72 20 3d 20 70 2d  rame->apCsr = p-
30e30 3e 61 70 43 73 72 3b 0a 20 20 20 20 70 46 72 61  >apCsr;.    pFra
30e40 6d 65 2d 3e 6e 43 75 72 73 6f 72 20 3d 20 70 2d  me->nCursor = p-
30e50 3e 6e 43 75 72 73 6f 72 3b 0a 20 20 20 20 70 46  >nCursor;.    pF
30e60 72 61 6d 65 2d 3e 61 4f 70 20 3d 20 70 2d 3e 61  rame->aOp = p->a
30e70 4f 70 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e  Op;.    pFrame->
30e80 6e 4f 70 20 3d 20 70 2d 3e 6e 4f 70 3b 0a 20 20  nOp = p->nOp;.  
30e90 20 20 70 46 72 61 6d 65 2d 3e 74 6f 6b 65 6e 20    pFrame->token 
30ea0 3d 20 70 50 72 6f 67 72 61 6d 2d 3e 74 6f 6b 65  = pProgram->toke
30eb0 6e 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  n;.#ifdef SQLITE
30ec0 5f 45 4e 41 42 4c 45 5f 53 54 4d 54 5f 53 43 41  _ENABLE_STMT_SCA
30ed0 4e 53 54 41 54 55 53 0a 20 20 20 20 70 46 72 61  NSTATUS.    pFra
30ee0 6d 65 2d 3e 61 6e 45 78 65 63 20 3d 20 70 2d 3e  me->anExec = p->
30ef0 61 6e 45 78 65 63 3b 0a 23 65 6e 64 69 66 0a 0a  anExec;.#endif..
30f00 20 20 20 20 70 45 6e 64 20 3d 20 26 56 64 62 65      pEnd = &Vdbe
30f10 46 72 61 6d 65 4d 65 6d 28 70 46 72 61 6d 65 29  FrameMem(pFrame)
30f20 5b 70 46 72 61 6d 65 2d 3e 6e 43 68 69 6c 64 4d  [pFrame->nChildM
30f30 65 6d 5d 3b 0a 20 20 20 20 66 6f 72 28 70 4d 65  em];.    for(pMe
30f40 6d 3d 56 64 62 65 46 72 61 6d 65 4d 65 6d 28 70  m=VdbeFrameMem(p
30f50 46 72 61 6d 65 29 3b 20 70 4d 65 6d 21 3d 70 45  Frame); pMem!=pE
30f60 6e 64 3b 20 70 4d 65 6d 2b 2b 29 7b 0a 20 20 20  nd; pMem++){.   
30f70 20 20 20 70 4d 65 6d 2d 3e 66 6c 61 67 73 20 3d     pMem->flags =
30f80 20 4d 45 4d 5f 55 6e 64 65 66 69 6e 65 64 3b 0a   MEM_Undefined;.
30f90 20 20 20 20 20 20 70 4d 65 6d 2d 3e 64 62 20 3d        pMem->db =
30fa0 20 64 62 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c   db;.    }.  }el
30fb0 73 65 7b 0a 20 20 20 20 70 46 72 61 6d 65 20 3d  se{.    pFrame =
30fc0 20 70 52 74 2d 3e 75 2e 70 46 72 61 6d 65 3b 0a   pRt->u.pFrame;.
30fd0 20 20 20 20 61 73 73 65 72 74 28 20 70 50 72 6f      assert( pPro
30fe0 67 72 61 6d 2d 3e 6e 4d 65 6d 2b 70 50 72 6f 67  gram->nMem+pProg
30ff0 72 61 6d 2d 3e 6e 43 73 72 3d 3d 70 46 72 61 6d  ram->nCsr==pFram
31000 65 2d 3e 6e 43 68 69 6c 64 4d 65 6d 20 0a 20 20  e->nChildMem .  
31010 20 20 20 20 20 20 7c 7c 20 28 70 50 72 6f 67 72        || (pProgr
31020 61 6d 2d 3e 6e 43 73 72 3d 3d 30 20 26 26 20 70  am->nCsr==0 && p
31030 50 72 6f 67 72 61 6d 2d 3e 6e 4d 65 6d 2b 31 3d  Program->nMem+1=
31040 3d 70 46 72 61 6d 65 2d 3e 6e 43 68 69 6c 64 4d  =pFrame->nChildM
31050 65 6d 29 20 29 3b 0a 20 20 20 20 61 73 73 65 72  em) );.    asser
31060 74 28 20 70 50 72 6f 67 72 61 6d 2d 3e 6e 43 73  t( pProgram->nCs
31070 72 3d 3d 70 46 72 61 6d 65 2d 3e 6e 43 68 69 6c  r==pFrame->nChil
31080 64 43 73 72 20 29 3b 0a 20 20 20 20 61 73 73 65  dCsr );.    asse
31090 72 74 28 20 28 69 6e 74 29 28 70 4f 70 20 2d 20  rt( (int)(pOp - 
310a0 61 4f 70 29 3d 3d 70 46 72 61 6d 65 2d 3e 70 63  aOp)==pFrame->pc
310b0 20 29 3b 0a 20 20 7d 0a 0a 20 20 70 2d 3e 6e 46   );.  }..  p->nF
310c0 72 61 6d 65 2b 2b 3b 0a 20 20 70 46 72 61 6d 65  rame++;.  pFrame
310d0 2d 3e 70 50 61 72 65 6e 74 20 3d 20 70 2d 3e 70  ->pParent = p->p
310e0 46 72 61 6d 65 3b 0a 20 20 70 46 72 61 6d 65 2d  Frame;.  pFrame-
310f0 3e 6c 61 73 74 52 6f 77 69 64 20 3d 20 64 62 2d  >lastRowid = db-
31100 3e 6c 61 73 74 52 6f 77 69 64 3b 0a 20 20 70 46  >lastRowid;.  pF
31110 72 61 6d 65 2d 3e 6e 43 68 61 6e 67 65 20 3d 20  rame->nChange = 
31120 70 2d 3e 6e 43 68 61 6e 67 65 3b 0a 20 20 70 46  p->nChange;.  pF
31130 72 61 6d 65 2d 3e 6e 44 62 43 68 61 6e 67 65 20  rame->nDbChange 
31140 3d 20 70 2d 3e 64 62 2d 3e 6e 43 68 61 6e 67 65  = p->db->nChange
31150 3b 0a 20 20 61 73 73 65 72 74 28 20 70 46 72 61  ;.  assert( pFra
31160 6d 65 2d 3e 70 41 75 78 44 61 74 61 3d 3d 30 20  me->pAuxData==0 
31170 29 3b 0a 20 20 70 46 72 61 6d 65 2d 3e 70 41 75  );.  pFrame->pAu
31180 78 44 61 74 61 20 3d 20 70 2d 3e 70 41 75 78 44  xData = p->pAuxD
31190 61 74 61 3b 0a 20 20 70 2d 3e 70 41 75 78 44 61  ata;.  p->pAuxDa
311a0 74 61 20 3d 20 30 3b 0a 20 20 70 2d 3e 6e 43 68  ta = 0;.  p->nCh
311b0 61 6e 67 65 20 3d 20 30 3b 0a 20 20 70 2d 3e 70  ange = 0;.  p->p
311c0 46 72 61 6d 65 20 3d 20 70 46 72 61 6d 65 3b 0a  Frame = pFrame;.
311d0 20 20 70 2d 3e 61 4d 65 6d 20 3d 20 61 4d 65 6d    p->aMem = aMem
311e0 20 3d 20 56 64 62 65 46 72 61 6d 65 4d 65 6d 28   = VdbeFrameMem(
311f0 70 46 72 61 6d 65 29 3b 0a 20 20 70 2d 3e 6e 4d  pFrame);.  p->nM
31200 65 6d 20 3d 20 70 46 72 61 6d 65 2d 3e 6e 43 68  em = pFrame->nCh
31210 69 6c 64 4d 65 6d 3b 0a 20 20 70 2d 3e 6e 43 75  ildMem;.  p->nCu
31220 72 73 6f 72 20 3d 20 28 75 31 36 29 70 46 72 61  rsor = (u16)pFra
31230 6d 65 2d 3e 6e 43 68 69 6c 64 43 73 72 3b 0a 20  me->nChildCsr;. 
31240 20 70 2d 3e 61 70 43 73 72 20 3d 20 28 56 64 62   p->apCsr = (Vdb
31250 65 43 75 72 73 6f 72 20 2a 2a 29 26 61 4d 65 6d  eCursor **)&aMem
31260 5b 70 2d 3e 6e 4d 65 6d 5d 3b 0a 20 20 70 46 72  [p->nMem];.  pFr
31270 61 6d 65 2d 3e 61 4f 6e 63 65 20 3d 20 28 75 38  ame->aOnce = (u8
31280 2a 29 26 70 2d 3e 61 70 43 73 72 5b 70 50 72 6f  *)&p->apCsr[pPro
31290 67 72 61 6d 2d 3e 6e 43 73 72 5d 3b 0a 20 20 6d  gram->nCsr];.  m
312a0 65 6d 73 65 74 28 70 46 72 61 6d 65 2d 3e 61 4f  emset(pFrame->aO
312b0 6e 63 65 2c 20 30 2c 20 28 70 50 72 6f 67 72 61  nce, 0, (pProgra
312c0 6d 2d 3e 6e 4f 70 20 2b 20 37 29 2f 38 29 3b 0a  m->nOp + 7)/8);.
312d0 20 20 70 2d 3e 61 4f 70 20 3d 20 61 4f 70 20 3d    p->aOp = aOp =
312e0 20 70 50 72 6f 67 72 61 6d 2d 3e 61 4f 70 3b 0a   pProgram->aOp;.
312f0 20 20 70 2d 3e 6e 4f 70 20 3d 20 70 50 72 6f 67    p->nOp = pProg
31300 72 61 6d 2d 3e 6e 4f 70 3b 0a 23 69 66 64 65 66  ram->nOp;.#ifdef
31310 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53   SQLITE_ENABLE_S
31320 54 4d 54 5f 53 43 41 4e 53 54 41 54 55 53 0a 20  TMT_SCANSTATUS. 
31330 20 70 2d 3e 61 6e 45 78 65 63 20 3d 20 30 3b 0a   p->anExec = 0;.
31340 23 65 6e 64 69 66 0a 20 20 70 4f 70 20 3d 20 26  #endif.  pOp = &
31350 61 4f 70 5b 2d 31 5d 3b 0a 0a 20 20 62 72 65 61  aOp[-1];..  brea
31360 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
31370 20 50 61 72 61 6d 20 50 31 20 50 32 20 2a 20 2a   Param P1 P2 * *
31380 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70   *.**.** This op
31390 63 6f 64 65 20 69 73 20 6f 6e 6c 79 20 65 76 65  code is only eve
313a0 72 20 70 72 65 73 65 6e 74 20 69 6e 20 73 75 62  r present in sub
313b0 2d 70 72 6f 67 72 61 6d 73 20 63 61 6c 6c 65 64  -programs called
313c0 20 76 69 61 20 74 68 65 20 0a 2a 2a 20 4f 50 5f   via the .** OP_
313d0 50 72 6f 67 72 61 6d 20 69 6e 73 74 72 75 63 74  Program instruct
313e0 69 6f 6e 2e 20 43 6f 70 79 20 61 20 76 61 6c 75  ion. Copy a valu
313f0 65 20 63 75 72 72 65 6e 74 6c 79 20 73 74 6f 72  e currently stor
31400 65 64 20 69 6e 20 61 20 6d 65 6d 6f 72 79 20 0a  ed in a memory .
31410 2a 2a 20 63 65 6c 6c 20 6f 66 20 74 68 65 20 63  ** cell of the c
31420 61 6c 6c 69 6e 67 20 28 70 61 72 65 6e 74 29 20  alling (parent) 
31430 66 72 61 6d 65 20 74 6f 20 63 65 6c 6c 20 50 32  frame to cell P2
31440 20 69 6e 20 74 68 65 20 63 75 72 72 65 6e 74 20   in the current 
31450 66 72 61 6d 65 73 20 0a 2a 2a 20 61 64 64 72 65  frames .** addre
31460 73 73 20 73 70 61 63 65 2e 20 54 68 69 73 20 69  ss space. This i
31470 73 20 75 73 65 64 20 62 79 20 74 72 69 67 67 65  s used by trigge
31480 72 20 70 72 6f 67 72 61 6d 73 20 74 6f 20 61 63  r programs to ac
31490 63 65 73 73 20 74 68 65 20 6e 65 77 2e 2a 20 0a  cess the new.* .
314a0 2a 2a 20 61 6e 64 20 6f 6c 64 2e 2a 20 76 61 6c  ** and old.* val
314b0 75 65 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 61  ues..**.** The a
314c0 64 64 72 65 73 73 20 6f 66 20 74 68 65 20 63 65  ddress of the ce
314d0 6c 6c 20 69 6e 20 74 68 65 20 70 61 72 65 6e 74  ll in the parent
314e0 20 66 72 61 6d 65 20 69 73 20 64 65 74 65 72 6d   frame is determ
314f0 69 6e 65 64 20 62 79 20 61 64 64 69 6e 67 0a 2a  ined by adding.*
31500 2a 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74  * the value of t
31510 68 65 20 50 31 20 61 72 67 75 6d 65 6e 74 20 74  he P1 argument t
31520 6f 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74  o the value of t
31530 68 65 20 50 31 20 61 72 67 75 6d 65 6e 74 20 74  he P1 argument t
31540 6f 20 74 68 65 0a 2a 2a 20 63 61 6c 6c 69 6e 67  o the.** calling
31550 20 4f 50 5f 50 72 6f 67 72 61 6d 20 69 6e 73 74   OP_Program inst
31560 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65  ruction..*/.case
31570 20 4f 50 5f 50 61 72 61 6d 3a 20 7b 20 20 20 20   OP_Param: {    
31580 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a         /* out2 *
31590 2f 0a 20 20 56 64 62 65 46 72 61 6d 65 20 2a 70  /.  VdbeFrame *p
315a0 46 72 61 6d 65 3b 0a 20 20 4d 65 6d 20 2a 70 49  Frame;.  Mem *pI
315b0 6e 3b 0a 20 20 70 4f 75 74 20 3d 20 6f 75 74 32  n;.  pOut = out2
315c0 50 72 65 72 65 6c 65 61 73 65 28 70 2c 20 70 4f  Prerelease(p, pO
315d0 70 29 3b 0a 20 20 70 46 72 61 6d 65 20 3d 20 70  p);.  pFrame = p
315e0 2d 3e 70 46 72 61 6d 65 3b 0a 20 20 70 49 6e 20  ->pFrame;.  pIn 
315f0 3d 20 26 70 46 72 61 6d 65 2d 3e 61 4d 65 6d 5b  = &pFrame->aMem[
31600 70 4f 70 2d 3e 70 31 20 2b 20 70 46 72 61 6d 65  pOp->p1 + pFrame
31610 2d 3e 61 4f 70 5b 70 46 72 61 6d 65 2d 3e 70 63  ->aOp[pFrame->pc
31620 5d 2e 70 31 5d 3b 20 20 20 0a 20 20 73 71 6c 69  ].p1];   .  sqli
31630 74 65 33 56 64 62 65 4d 65 6d 53 68 61 6c 6c 6f  te3VdbeMemShallo
31640 77 43 6f 70 79 28 70 4f 75 74 2c 20 70 49 6e 2c  wCopy(pOut, pIn,
31650 20 4d 45 4d 5f 45 70 68 65 6d 29 3b 0a 20 20 62   MEM_Ephem);.  b
31660 72 65 61 6b 3b 0a 7d 0a 0a 23 65 6e 64 69 66 20  reak;.}..#endif 
31670 2f 2a 20 23 69 66 6e 64 65 66 20 53 51 4c 49 54  /* #ifndef SQLIT
31680 45 5f 4f 4d 49 54 5f 54 52 49 47 47 45 52 20 2a  E_OMIT_TRIGGER *
31690 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  /..#ifndef SQLIT
316a0 45 5f 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b  E_OMIT_FOREIGN_K
316b0 45 59 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 46 6b  EY./* Opcode: Fk
316c0 43 6f 75 6e 74 65 72 20 50 31 20 50 32 20 2a 20  Counter P1 P2 * 
316d0 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  * *.** Synopsis:
316e0 20 66 6b 63 74 72 5b 50 31 5d 2b 3d 50 32 0a 2a   fkctr[P1]+=P2.*
316f0 2a 0a 2a 2a 20 49 6e 63 72 65 6d 65 6e 74 20 61  *.** Increment a
31700 20 22 63 6f 6e 73 74 72 61 69 6e 74 20 63 6f 75   "constraint cou
31710 6e 74 65 72 22 20 62 79 20 50 32 20 28 50 32 20  nter" by P2 (P2 
31720 6d 61 79 20 62 65 20 6e 65 67 61 74 69 76 65 20  may be negative 
31730 6f 72 20 70 6f 73 69 74 69 76 65 29 2e 0a 2a 2a  or positive)..**
31740 20 49 66 20 50 31 20 69 73 20 6e 6f 6e 2d 7a 65   If P1 is non-ze
31750 72 6f 2c 20 74 68 65 20 64 61 74 61 62 61 73 65  ro, the database
31760 20 63 6f 6e 73 74 72 61 69 6e 74 20 63 6f 75 6e   constraint coun
31770 74 65 72 20 69 73 20 69 6e 63 72 65 6d 65 6e 74  ter is increment
31780 65 64 20 0a 2a 2a 20 28 64 65 66 65 72 72 65 64  ed .** (deferred
31790 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e   foreign key con
317a0 73 74 72 61 69 6e 74 73 29 2e 20 4f 74 68 65 72  straints). Other
317b0 77 69 73 65 2c 20 69 66 20 50 31 20 69 73 20 7a  wise, if P1 is z
317c0 65 72 6f 2c 20 74 68 65 20 0a 2a 2a 20 73 74 61  ero, the .** sta
317d0 74 65 6d 65 6e 74 20 63 6f 75 6e 74 65 72 20 69  tement counter i
317e0 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 28 69  s incremented (i
317f0 6d 6d 65 64 69 61 74 65 20 66 6f 72 65 69 67 6e  mmediate foreign
31800 20 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e 74 73   key constraints
31810 29 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 46 6b  )..*/.case OP_Fk
31820 43 6f 75 6e 74 65 72 3a 20 7b 0a 20 20 69 66 28  Counter: {.  if(
31830 20 64 62 2d 3e 66 6c 61 67 73 20 26 20 53 51 4c   db->flags & SQL
31840 49 54 45 5f 44 65 66 65 72 46 4b 73 20 29 7b 0a  ITE_DeferFKs ){.
31850 20 20 20 20 64 62 2d 3e 6e 44 65 66 65 72 72 65      db->nDeferre
31860 64 49 6d 6d 43 6f 6e 73 20 2b 3d 20 70 4f 70 2d  dImmCons += pOp-
31870 3e 70 32 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28  >p2;.  }else if(
31880 20 70 4f 70 2d 3e 70 31 20 29 7b 0a 20 20 20 20   pOp->p1 ){.    
31890 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 43 6f 6e  db->nDeferredCon
318a0 73 20 2b 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20  s += pOp->p2;.  
318b0 7d 65 6c 73 65 7b 0a 20 20 20 20 70 2d 3e 6e 46  }else{.    p->nF
318c0 6b 43 6f 6e 73 74 72 61 69 6e 74 20 2b 3d 20 70  kConstraint += p
318d0 4f 70 2d 3e 70 32 3b 0a 20 20 7d 0a 20 20 62 72  Op->p2;.  }.  br
318e0 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
318f0 65 3a 20 46 6b 49 66 5a 65 72 6f 20 50 31 20 50  e: FkIfZero P1 P
31900 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70  2 * * *.** Synop
31910 73 69 73 3a 20 69 66 20 66 6b 63 74 72 5b 50 31  sis: if fkctr[P1
31920 5d 3d 3d 30 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a  ]==0 goto P2.**.
31930 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 74  ** This opcode t
31940 65 73 74 73 20 69 66 20 61 20 66 6f 72 65 69 67  ests if a foreig
31950 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e 74  n key constraint
31960 2d 63 6f 75 6e 74 65 72 20 69 73 20 63 75 72 72  -counter is curr
31970 65 6e 74 6c 79 20 7a 65 72 6f 2e 0a 2a 2a 20 49  ently zero..** I
31980 66 20 73 6f 2c 20 6a 75 6d 70 20 74 6f 20 69 6e  f so, jump to in
31990 73 74 72 75 63 74 69 6f 6e 20 50 32 2e 20 4f 74  struction P2. Ot
319a0 68 65 72 77 69 73 65 2c 20 66 61 6c 6c 20 74 68  herwise, fall th
319b0 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6e 65 78  rough to the nex
319c0 74 20 0a 2a 2a 20 69 6e 73 74 72 75 63 74 69 6f  t .** instructio
319d0 6e 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 31 20 69  n..**.** If P1 i
319e0 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65 6e  s non-zero, then
319f0 20 74 68 65 20 6a 75 6d 70 20 69 73 20 74 61 6b   the jump is tak
31a00 65 6e 20 69 66 20 74 68 65 20 64 61 74 61 62 61  en if the databa
31a10 73 65 20 63 6f 6e 73 74 72 61 69 6e 74 2d 63 6f  se constraint-co
31a20 75 6e 74 65 72 0a 2a 2a 20 69 73 20 7a 65 72 6f  unter.** is zero
31a30 20 28 74 68 65 20 6f 6e 65 20 74 68 61 74 20 63   (the one that c
31a40 6f 75 6e 74 73 20 64 65 66 65 72 72 65 64 20 63  ounts deferred c
31a50 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61 74  onstraint violat
31a60 69 6f 6e 73 29 2e 20 49 66 20 50 31 20 69 73 0a  ions). If P1 is.
31a70 2a 2a 20 7a 65 72 6f 2c 20 74 68 65 20 6a 75 6d  ** zero, the jum
31a80 70 20 69 73 20 74 61 6b 65 6e 20 69 66 20 74 68  p is taken if th
31a90 65 20 73 74 61 74 65 6d 65 6e 74 20 63 6f 6e 73  e statement cons
31aa0 74 72 61 69 6e 74 2d 63 6f 75 6e 74 65 72 20 69  traint-counter i
31ab0 73 20 7a 65 72 6f 0a 2a 2a 20 28 69 6d 6d 65 64  s zero.** (immed
31ac0 69 61 74 65 20 66 6f 72 65 69 67 6e 20 6b 65 79  iate foreign key
31ad0 20 63 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c   constraint viol
31ae0 61 74 69 6f 6e 73 29 2e 0a 2a 2f 0a 63 61 73 65  ations)..*/.case
31af0 20 4f 50 5f 46 6b 49 66 5a 65 72 6f 3a 20 7b 20   OP_FkIfZero: { 
31b00 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20          /* jump 
31b10 2a 2f 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 31  */.  if( pOp->p1
31b20 20 29 7b 0a 20 20 20 20 56 64 62 65 42 72 61 6e   ){.    VdbeBran
31b30 63 68 54 61 6b 65 6e 28 64 62 2d 3e 6e 44 65 66  chTaken(db->nDef
31b40 65 72 72 65 64 43 6f 6e 73 3d 3d 30 20 26 26 20  erredCons==0 && 
31b50 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 49 6d 6d  db->nDeferredImm
31b60 43 6f 6e 73 3d 3d 30 2c 20 32 29 3b 0a 20 20 20  Cons==0, 2);.   
31b70 20 69 66 28 20 64 62 2d 3e 6e 44 65 66 65 72 72   if( db->nDeferr
31b80 65 64 43 6f 6e 73 3d 3d 30 20 26 26 20 64 62 2d  edCons==0 && db-
31b90 3e 6e 44 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e  >nDeferredImmCon
31ba0 73 3d 3d 30 20 29 20 67 6f 74 6f 20 6a 75 6d 70  s==0 ) goto jump
31bb0 5f 74 6f 5f 70 32 3b 0a 20 20 7d 65 6c 73 65 7b  _to_p2;.  }else{
31bc0 0a 20 20 20 20 56 64 62 65 42 72 61 6e 63 68 54  .    VdbeBranchT
31bd0 61 6b 65 6e 28 70 2d 3e 6e 46 6b 43 6f 6e 73 74  aken(p->nFkConst
31be0 72 61 69 6e 74 3d 3d 30 20 26 26 20 64 62 2d 3e  raint==0 && db->
31bf0 6e 44 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73  nDeferredImmCons
31c00 3d 3d 30 2c 20 32 29 3b 0a 20 20 20 20 69 66 28  ==0, 2);.    if(
31c10 20 70 2d 3e 6e 46 6b 43 6f 6e 73 74 72 61 69 6e   p->nFkConstrain
31c20 74 3d 3d 30 20 26 26 20 64 62 2d 3e 6e 44 65 66  t==0 && db->nDef
31c30 65 72 72 65 64 49 6d 6d 43 6f 6e 73 3d 3d 30 20  erredImmCons==0 
31c40 29 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70  ) goto jump_to_p
31c50 32 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  2;.  }.  break;.
31c60 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 23 69 66 6e  }.#endif /* #ifn
31c70 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
31c80 46 4f 52 45 49 47 4e 5f 4b 45 59 20 2a 2f 0a 0a  FOREIGN_KEY */..
31c90 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
31ca0 4d 49 54 5f 41 55 54 4f 49 4e 43 52 45 4d 45 4e  MIT_AUTOINCREMEN
31cb0 54 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4d 65 6d  T./* Opcode: Mem
31cc0 4d 61 78 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  Max P1 P2 * * *.
31cd0 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50  ** Synopsis: r[P
31ce0 31 5d 3d 6d 61 78 28 72 5b 50 31 5d 2c 72 5b 50  1]=max(r[P1],r[P
31cf0 32 5d 29 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20  2]).**.** P1 is 
31d00 61 20 72 65 67 69 73 74 65 72 20 69 6e 20 74 68  a register in th
31d10 65 20 72 6f 6f 74 20 66 72 61 6d 65 20 6f 66 20  e root frame of 
31d20 74 68 69 73 20 56 4d 20 28 74 68 65 20 72 6f 6f  this VM (the roo
31d30 74 20 66 72 61 6d 65 20 69 73 0a 2a 2a 20 64 69  t frame is.** di
31d40 66 66 65 72 65 6e 74 20 66 72 6f 6d 20 74 68 65  fferent from the
31d50 20 63 75 72 72 65 6e 74 20 66 72 61 6d 65 20 69   current frame i
31d60 66 20 74 68 69 73 20 69 6e 73 74 72 75 63 74 69  f this instructi
31d70 6f 6e 20 69 73 20 62 65 69 6e 67 20 65 78 65 63  on is being exec
31d80 75 74 65 64 0a 2a 2a 20 77 69 74 68 69 6e 20 61  uted.** within a
31d90 20 73 75 62 2d 70 72 6f 67 72 61 6d 29 2e 20 53   sub-program). S
31da0 65 74 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20  et the value of 
31db0 72 65 67 69 73 74 65 72 20 50 31 20 74 6f 20 74  register P1 to t
31dc0 68 65 20 6d 61 78 69 6d 75 6d 20 6f 66 20 0a 2a  he maximum of .*
31dd0 2a 20 69 74 73 20 63 75 72 72 65 6e 74 20 76 61  * its current va
31de0 6c 75 65 20 61 6e 64 20 74 68 65 20 76 61 6c 75  lue and the valu
31df0 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32  e in register P2
31e00 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 6e 73  ..**.** This ins
31e10 74 72 75 63 74 69 6f 6e 20 74 68 72 6f 77 73 20  truction throws 
31e20 61 6e 20 65 72 72 6f 72 20 69 66 20 74 68 65 20  an error if the 
31e30 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 69 73 20 6e  memory cell is n
31e40 6f 74 20 69 6e 69 74 69 61 6c 6c 79 0a 2a 2a 20  ot initially.** 
31e50 61 6e 20 69 6e 74 65 67 65 72 2e 0a 2a 2f 0a 63  an integer..*/.c
31e60 61 73 65 20 4f 50 5f 4d 65 6d 4d 61 78 3a 20 7b  ase OP_MemMax: {
31e70 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 32 20 2a          /* in2 *
31e80 2f 0a 20 20 56 64 62 65 46 72 61 6d 65 20 2a 70  /.  VdbeFrame *p
31e90 46 72 61 6d 65 3b 0a 20 20 69 66 28 20 70 2d 3e  Frame;.  if( p->
31ea0 70 46 72 61 6d 65 20 29 7b 0a 20 20 20 20 66 6f  pFrame ){.    fo
31eb0 72 28 70 46 72 61 6d 65 3d 70 2d 3e 70 46 72 61  r(pFrame=p->pFra
31ec0 6d 65 3b 20 70 46 72 61 6d 65 2d 3e 70 50 61 72  me; pFrame->pPar
31ed0 65 6e 74 3b 20 70 46 72 61 6d 65 3d 70 46 72 61  ent; pFrame=pFra
31ee0 6d 65 2d 3e 70 50 61 72 65 6e 74 29 3b 0a 20 20  me->pParent);.  
31ef0 20 20 70 49 6e 31 20 3d 20 26 70 46 72 61 6d 65    pIn1 = &pFrame
31f00 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b  ->aMem[pOp->p1];
31f10 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70 49  .  }else{.    pI
31f20 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n1 = &aMem[pOp->
31f30 70 31 5d 3b 0a 20 20 7d 0a 20 20 61 73 73 65 72  p1];.  }.  asser
31f40 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 70 49  t( memIsValid(pI
31f50 6e 31 29 20 29 3b 0a 20 20 73 71 6c 69 74 65 33  n1) );.  sqlite3
31f60 56 64 62 65 4d 65 6d 49 6e 74 65 67 65 72 69 66  VdbeMemIntegerif
31f70 79 28 70 49 6e 31 29 3b 0a 20 20 70 49 6e 32 20  y(pIn1);.  pIn2 
31f80 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d  = &aMem[pOp->p2]
31f90 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d  ;.  sqlite3VdbeM
31fa0 65 6d 49 6e 74 65 67 65 72 69 66 79 28 70 49 6e  emIntegerify(pIn
31fb0 32 29 3b 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e  2);.  if( pIn1->
31fc0 75 2e 69 3c 70 49 6e 32 2d 3e 75 2e 69 29 7b 0a  u.i<pIn2->u.i){.
31fd0 20 20 20 20 70 49 6e 31 2d 3e 75 2e 69 20 3d 20      pIn1->u.i = 
31fe0 70 49 6e 32 2d 3e 75 2e 69 3b 0a 20 20 7d 0a 20  pIn2->u.i;.  }. 
31ff0 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66   break;.}.#endif
32000 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f   /* SQLITE_OMIT_
32010 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20 2a 2f  AUTOINCREMENT */
32020 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 66 50  ../* Opcode: IfP
32030 6f 73 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a  os P1 P2 P3 * *.
32040 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 66 20  ** Synopsis: if 
32050 72 5b 50 31 5d 3e 30 20 74 68 65 6e 20 72 5b 50  r[P1]>0 then r[P
32060 31 5d 2d 3d 50 33 2c 20 67 6f 74 6f 20 50 32 0a  1]-=P3, goto P2.
32070 2a 2a 0a 2a 2a 20 52 65 67 69 73 74 65 72 20 50  **.** Register P
32080 31 20 6d 75 73 74 20 63 6f 6e 74 61 69 6e 20 61  1 must contain a
32090 6e 20 69 6e 74 65 67 65 72 2e 0a 2a 2a 20 49 66  n integer..** If
320a0 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 72 65   the value of re
320b0 67 69 73 74 65 72 20 50 31 20 69 73 20 31 20 6f  gister P1 is 1 o
320c0 72 20 67 72 65 61 74 65 72 2c 20 73 75 62 74 72  r greater, subtr
320d0 61 63 74 20 50 33 20 66 72 6f 6d 20 74 68 65 0a  act P3 from the.
320e0 2a 2a 20 76 61 6c 75 65 20 69 6e 20 50 31 20 61  ** value in P1 a
320f0 6e 64 20 6a 75 6d 70 20 74 6f 20 50 32 2e 0a 2a  nd jump to P2..*
32100 2a 0a 2a 2a 20 49 66 20 74 68 65 20 69 6e 69 74  *.** If the init
32110 69 61 6c 20 76 61 6c 75 65 20 6f 66 20 72 65 67  ial value of reg
32120 69 73 74 65 72 20 50 31 20 69 73 20 6c 65 73 73  ister P1 is less
32130 20 74 68 61 6e 20 31 2c 20 74 68 65 6e 20 74 68   than 1, then th
32140 65 0a 2a 2a 20 76 61 6c 75 65 20 69 73 20 75 6e  e.** value is un
32150 63 68 61 6e 67 65 64 20 61 6e 64 20 63 6f 6e 74  changed and cont
32160 72 6f 6c 20 70 61 73 73 65 73 20 74 68 72 6f 75  rol passes throu
32170 67 68 20 74 6f 20 74 68 65 20 6e 65 78 74 20 69  gh to the next i
32180 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 63  nstruction..*/.c
32190 61 73 65 20 4f 50 5f 49 66 50 6f 73 3a 20 7b 20  ase OP_IfPos: { 
321a0 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20         /* jump, 
321b0 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20  in1 */.  pIn1 = 
321c0 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  &aMem[pOp->p1];.
321d0 20 20 61 73 73 65 72 74 28 20 70 49 6e 31 2d 3e    assert( pIn1->
321e0 66 6c 61 67 73 26 4d 45 4d 5f 49 6e 74 20 29 3b  flags&MEM_Int );
321f0 0a 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b  .  VdbeBranchTak
32200 65 6e 28 20 70 49 6e 31 2d 3e 75 2e 69 3e 30 2c  en( pIn1->u.i>0,
32210 20 32 29 3b 0a 20 20 69 66 28 20 70 49 6e 31 2d   2);.  if( pIn1-
32220 3e 75 2e 69 3e 30 20 29 7b 0a 20 20 20 20 70 49  >u.i>0 ){.    pI
32230 6e 31 2d 3e 75 2e 69 20 2d 3d 20 70 4f 70 2d 3e  n1->u.i -= pOp->
32240 70 33 3b 0a 20 20 20 20 67 6f 74 6f 20 6a 75 6d  p3;.    goto jum
32250 70 5f 74 6f 5f 70 32 3b 0a 20 20 7d 0a 20 20 62  p_to_p2;.  }.  b
32260 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
32270 64 65 3a 20 4f 66 66 73 65 74 4c 69 6d 69 74 20  de: OffsetLimit 
32280 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20  P1 P2 P3 * *.** 
32290 53 79 6e 6f 70 73 69 73 3a 20 69 66 20 72 5b 50  Synopsis: if r[P
322a0 31 5d 3e 30 20 74 68 65 6e 20 72 5b 50 32 5d 3d  1]>0 then r[P2]=
322b0 72 5b 50 31 5d 2b 6d 61 78 28 30 2c 72 5b 50 33  r[P1]+max(0,r[P3
322c0 5d 29 20 65 6c 73 65 20 72 5b 50 32 5d 3d 28 2d  ]) else r[P2]=(-
322d0 31 29 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70  1).**.** This op
322e0 63 6f 64 65 20 70 65 72 66 6f 72 6d 73 20 61 20  code performs a 
322f0 63 6f 6d 6d 6f 6e 6c 79 20 75 73 65 64 20 63 6f  commonly used co
32300 6d 70 75 74 61 74 69 6f 6e 20 61 73 73 6f 63 69  mputation associ
32310 61 74 65 64 20 77 69 74 68 0a 2a 2a 20 4c 49 4d  ated with.** LIM
32320 49 54 20 61 6e 64 20 4f 46 46 53 45 54 20 70 72  IT and OFFSET pr
32330 6f 63 65 73 73 2e 20 20 72 5b 50 31 5d 20 68 6f  ocess.  r[P1] ho
32340 6c 64 73 20 74 68 65 20 6c 69 6d 69 74 20 63 6f  lds the limit co
32350 75 6e 74 65 72 2e 20 20 72 5b 50 33 5d 0a 2a 2a  unter.  r[P3].**
32360 20 68 6f 6c 64 73 20 74 68 65 20 6f 66 66 73 65   holds the offse
32370 74 20 63 6f 75 6e 74 65 72 2e 20 20 54 68 65 20  t counter.  The 
32380 6f 70 63 6f 64 65 20 63 6f 6d 70 75 74 65 73 20  opcode computes 
32390 74 68 65 20 63 6f 6d 62 69 6e 65 64 20 76 61 6c  the combined val
323a0 75 65 0a 2a 2a 20 6f 66 20 74 68 65 20 4c 49 4d  ue.** of the LIM
323b0 49 54 20 61 6e 64 20 4f 46 46 53 45 54 20 61 6e  IT and OFFSET an
323c0 64 20 73 74 6f 72 65 73 20 74 68 61 74 20 76 61  d stores that va
323d0 6c 75 65 20 69 6e 20 72 5b 50 32 5d 2e 20 20 54  lue in r[P2].  T
323e0 68 65 20 72 5b 50 32 5d 0a 2a 2a 20 76 61 6c 75  he r[P2].** valu
323f0 65 20 63 6f 6d 70 75 74 65 64 20 69 73 20 74 68  e computed is th
32400 65 20 74 6f 74 61 6c 20 6e 75 6d 62 65 72 20 6f  e total number o
32410 66 20 72 6f 77 73 20 74 68 61 74 20 77 69 6c 6c  f rows that will
32420 20 6e 65 65 64 20 74 6f 20 62 65 0a 2a 2a 20 76   need to be.** v
32430 69 73 69 74 65 64 20 69 6e 20 6f 72 64 65 72 20  isited in order 
32440 74 6f 20 63 6f 6d 70 6c 65 74 65 20 74 68 65 20  to complete the 
32450 71 75 65 72 79 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  query..**.** If 
32460 72 5b 50 33 5d 20 69 73 20 7a 65 72 6f 20 6f 72  r[P3] is zero or
32470 20 6e 65 67 61 74 69 76 65 2c 20 74 68 61 74 20   negative, that 
32480 6d 65 61 6e 73 20 74 68 65 72 65 20 69 73 20 6e  means there is n
32490 6f 20 4f 46 46 53 45 54 0a 2a 2a 20 61 6e 64 20  o OFFSET.** and 
324a0 72 5b 50 32 5d 20 69 73 20 73 65 74 20 74 6f 20  r[P2] is set to 
324b0 62 65 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20  be the value of 
324c0 74 68 65 20 4c 49 4d 49 54 2c 20 72 5b 50 31 5d  the LIMIT, r[P1]
324d0 2e 0a 2a 2a 0a 2a 2a 20 69 66 20 72 5b 50 31 5d  ..**.** if r[P1]
324e0 20 69 73 20 7a 65 72 6f 20 6f 72 20 6e 65 67 61   is zero or nega
324f0 74 69 76 65 2c 20 74 68 61 74 20 6d 65 61 6e 73  tive, that means
32500 20 74 68 65 72 65 20 69 73 20 6e 6f 20 4c 49 4d   there is no LIM
32510 49 54 0a 2a 2a 20 61 6e 64 20 72 5b 50 32 5d 20  IT.** and r[P2] 
32520 69 73 20 73 65 74 20 74 6f 20 2d 31 2e 20 0a 2a  is set to -1. .*
32530 2a 0a 2a 2a 20 4f 74 68 65 72 77 69 73 65 2c 20  *.** Otherwise, 
32540 72 5b 50 32 5d 20 69 73 20 73 65 74 20 74 6f 20  r[P2] is set to 
32550 74 68 65 20 73 75 6d 20 6f 66 20 72 5b 50 31 5d  the sum of r[P1]
32560 20 61 6e 64 20 72 5b 50 33 5d 2e 0a 2a 2f 0a 63   and r[P3]..*/.c
32570 61 73 65 20 4f 50 5f 4f 66 66 73 65 74 4c 69 6d  ase OP_OffsetLim
32580 69 74 3a 20 7b 20 20 20 20 2f 2a 20 69 6e 31 2c  it: {    /* in1,
32590 20 6f 75 74 32 2c 20 69 6e 33 20 2a 2f 0a 20 20   out2, in3 */.  
325a0 69 36 34 20 78 3b 0a 20 20 70 49 6e 31 20 3d 20  i64 x;.  pIn1 = 
325b0 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  &aMem[pOp->p1];.
325c0 20 20 70 49 6e 33 20 3d 20 26 61 4d 65 6d 5b 70    pIn3 = &aMem[p
325d0 4f 70 2d 3e 70 33 5d 3b 0a 20 20 70 4f 75 74 20  Op->p3];.  pOut 
325e0 3d 20 6f 75 74 32 50 72 65 72 65 6c 65 61 73 65  = out2Prerelease
325f0 28 70 2c 20 70 4f 70 29 3b 0a 20 20 61 73 73 65  (p, pOp);.  asse
32600 72 74 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20  rt( pIn1->flags 
32610 26 20 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 61  & MEM_Int );.  a
32620 73 73 65 72 74 28 20 70 49 6e 33 2d 3e 66 6c 61  ssert( pIn3->fla
32630 67 73 20 26 20 4d 45 4d 5f 49 6e 74 20 29 3b 0a  gs & MEM_Int );.
32640 20 20 78 20 3d 20 70 49 6e 31 2d 3e 75 2e 69 3b    x = pIn1->u.i;
32650 0a 20 20 69 66 28 20 78 3c 3d 30 20 7c 7c 20 73  .  if( x<=0 || s
32660 71 6c 69 74 65 33 41 64 64 49 6e 74 36 34 28 26  qlite3AddInt64(&
32670 78 2c 20 70 49 6e 33 2d 3e 75 2e 69 3e 30 3f 70  x, pIn3->u.i>0?p
32680 49 6e 33 2d 3e 75 2e 69 3a 30 29 20 29 7b 0a 20  In3->u.i:0) ){. 
32690 20 20 20 2f 2a 20 49 66 20 74 68 65 20 4c 49 4d     /* If the LIM
326a0 49 54 20 69 73 20 6c 65 73 73 20 74 68 61 6e 20  IT is less than 
326b0 6f 72 20 65 71 75 61 6c 20 74 6f 20 7a 65 72 6f  or equal to zero
326c0 2c 20 6c 6f 6f 70 20 66 6f 72 65 76 65 72 2e 20  , loop forever. 
326d0 20 54 68 69 73 0a 20 20 20 20 2a 2a 20 69 73 20   This.    ** is 
326e0 64 6f 63 75 6d 65 6e 74 65 64 2e 20 20 42 75 74  documented.  But
326f0 20 61 6c 73 6f 2c 20 69 66 20 74 68 65 20 4c 49   also, if the LI
32700 4d 49 54 2b 4f 46 46 53 45 54 20 65 78 63 65 65  MIT+OFFSET excee
32710 64 73 20 32 5e 36 33 20 74 68 65 6e 0a 20 20 20  ds 2^63 then.   
32720 20 2a 2a 20 61 6c 73 6f 20 6c 6f 6f 70 20 66 6f   ** also loop fo
32730 72 65 76 65 72 2e 20 20 54 68 69 73 20 69 73 20  rever.  This is 
32740 75 6e 64 6f 63 75 6d 65 6e 74 65 64 2e 20 20 49  undocumented.  I
32750 6e 20 66 61 63 74 2c 20 6f 6e 65 20 63 6f 75 6c  n fact, one coul
32760 64 20 61 72 67 75 65 0a 20 20 20 20 2a 2a 20 74  d argue.    ** t
32770 68 61 74 20 74 68 65 20 6c 6f 6f 70 20 73 68 6f  hat the loop sho
32780 75 6c 64 20 74 65 72 6d 69 6e 61 74 65 2e 20 20  uld terminate.  
32790 42 75 74 20 61 73 73 75 6d 69 6e 67 20 31 20 62  But assuming 1 b
327a0 69 6c 6c 69 6f 6e 20 69 74 65 72 61 74 69 6f 6e  illion iteration
327b0 73 0a 20 20 20 20 2a 2a 20 70 65 72 20 73 65 63  s.    ** per sec
327c0 6f 6e 64 20 28 66 61 72 20 65 78 63 65 65 64 69  ond (far exceedi
327d0 6e 67 20 74 68 65 20 63 61 70 61 62 69 6c 69 74  ng the capabilit
327e0 69 65 73 20 6f 66 20 61 6e 79 20 63 75 72 72 65  ies of any curre
327f0 6e 74 20 68 61 72 64 77 61 72 65 29 0a 20 20 20  nt hardware).   
32800 20 2a 2a 20 69 74 20 77 6f 75 6c 64 20 74 61 6b   ** it would tak
32810 65 20 6e 65 61 72 6c 79 20 33 30 30 20 79 65 61  e nearly 300 yea
32820 72 73 20 74 6f 20 61 63 74 75 61 6c 6c 79 20 72  rs to actually r
32830 65 61 63 68 20 74 68 65 20 6c 69 6d 69 74 2e 20  each the limit. 
32840 20 53 6f 0a 20 20 20 20 2a 2a 20 6c 6f 6f 70 69   So.    ** loopi
32850 6e 67 20 66 6f 72 65 76 65 72 20 69 73 20 61 20  ng forever is a 
32860 72 65 61 73 6f 6e 61 62 6c 65 20 61 70 70 72 6f  reasonable appro
32870 78 69 6d 61 74 69 6f 6e 2e 20 2a 2f 0a 20 20 20  ximation. */.   
32880 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 2d 31 3b   pOut->u.i = -1;
32890 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70 4f  .  }else{.    pO
328a0 75 74 2d 3e 75 2e 69 20 3d 20 78 3b 0a 20 20 7d  ut->u.i = x;.  }
328b0 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
328c0 4f 70 63 6f 64 65 3a 20 49 66 4e 6f 74 5a 65 72  Opcode: IfNotZer
328d0 6f 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  o P1 P2 * * *.**
328e0 20 53 79 6e 6f 70 73 69 73 3a 20 69 66 20 72 5b   Synopsis: if r[
328f0 50 31 5d 21 3d 30 20 74 68 65 6e 20 72 5b 50 31  P1]!=0 then r[P1
32900 5d 2d 2d 2c 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a  ]--, goto P2.**.
32910 2a 2a 20 52 65 67 69 73 74 65 72 20 50 31 20 6d  ** Register P1 m
32920 75 73 74 20 63 6f 6e 74 61 69 6e 20 61 6e 20 69  ust contain an i
32930 6e 74 65 67 65 72 2e 20 20 49 66 20 74 68 65 20  nteger.  If the 
32940 63 6f 6e 74 65 6e 74 20 6f 66 20 72 65 67 69 73  content of regis
32950 74 65 72 20 50 31 20 69 73 0a 2a 2a 20 69 6e 69  ter P1 is.** ini
32960 74 69 61 6c 6c 79 20 67 72 65 61 74 65 72 20 74  tially greater t
32970 68 61 6e 20 7a 65 72 6f 2c 20 74 68 65 6e 20 64  han zero, then d
32980 65 63 72 65 6d 65 6e 74 20 74 68 65 20 76 61 6c  ecrement the val
32990 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
329a0 31 2e 0a 2a 2a 20 49 66 20 69 74 20 69 73 20 6e  1..** If it is n
329b0 6f 6e 2d 7a 65 72 6f 20 28 6e 65 67 61 74 69 76  on-zero (negativ
329c0 65 20 6f 72 20 70 6f 73 69 74 69 76 65 29 20 61  e or positive) a
329d0 6e 64 20 74 68 65 6e 20 61 6c 73 6f 20 6a 75 6d  nd then also jum
329e0 70 20 74 6f 20 50 32 2e 20 20 0a 2a 2a 20 49 66  p to P2.  .** If
329f0 20 72 65 67 69 73 74 65 72 20 50 31 20 69 73 20   register P1 is 
32a00 69 6e 69 74 69 61 6c 6c 79 20 7a 65 72 6f 2c 20  initially zero, 
32a10 6c 65 61 76 65 20 69 74 20 75 6e 63 68 61 6e 67  leave it unchang
32a20 65 64 20 61 6e 64 20 66 61 6c 6c 20 74 68 72 6f  ed and fall thro
32a30 75 67 68 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ugh..*/.case OP_
32a40 49 66 4e 6f 74 5a 65 72 6f 3a 20 7b 20 20 20 20  IfNotZero: {    
32a50 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31      /* jump, in1
32a60 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d   */.  pIn1 = &aM
32a70 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  em[pOp->p1];.  a
32a80 73 73 65 72 74 28 20 70 49 6e 31 2d 3e 66 6c 61  ssert( pIn1->fla
32a90 67 73 26 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20  gs&MEM_Int );.  
32aa0 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28  VdbeBranchTaken(
32ab0 70 49 6e 31 2d 3e 75 2e 69 3c 30 2c 20 32 29 3b  pIn1->u.i<0, 2);
32ac0 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e 75 2e 69  .  if( pIn1->u.i
32ad0 20 29 7b 0a 20 20 20 20 20 69 66 28 20 70 49 6e   ){.     if( pIn
32ae0 31 2d 3e 75 2e 69 3e 30 20 29 20 70 49 6e 31 2d  1->u.i>0 ) pIn1-
32af0 3e 75 2e 69 2d 2d 3b 0a 20 20 20 20 20 67 6f 74  >u.i--;.     got
32b00 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20  o jump_to_p2;.  
32b10 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  }.  break;.}../*
32b20 20 4f 70 63 6f 64 65 3a 20 44 65 63 72 4a 75 6d   Opcode: DecrJum
32b30 70 5a 65 72 6f 20 50 31 20 50 32 20 2a 20 2a 20  pZero P1 P2 * * 
32b40 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69  *.** Synopsis: i
32b50 66 20 28 2d 2d 72 5b 50 31 5d 29 3d 3d 30 20 67  f (--r[P1])==0 g
32b60 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 52 65 67  oto P2.**.** Reg
32b70 69 73 74 65 72 20 50 31 20 6d 75 73 74 20 68 6f  ister P1 must ho
32b80 6c 64 20 61 6e 20 69 6e 74 65 67 65 72 2e 20 20  ld an integer.  
32b90 44 65 63 72 65 6d 65 6e 74 20 74 68 65 20 76 61  Decrement the va
32ba0 6c 75 65 20 69 6e 20 50 31 0a 2a 2a 20 61 6e 64  lue in P1.** and
32bb0 20 6a 75 6d 70 20 74 6f 20 50 32 20 69 66 20 74   jump to P2 if t
32bc0 68 65 20 6e 65 77 20 76 61 6c 75 65 20 69 73 20  he new value is 
32bd0 65 78 61 63 74 6c 79 20 7a 65 72 6f 2e 0a 2a 2f  exactly zero..*/
32be0 0a 63 61 73 65 20 4f 50 5f 44 65 63 72 4a 75 6d  .case OP_DecrJum
32bf0 70 5a 65 72 6f 3a 20 7b 20 20 20 20 20 20 2f 2a  pZero: {      /*
32c00 20 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20   jump, in1 */.  
32c10 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn1 = &aMem[pOp
32c20 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p1];.  assert(
32c30 20 70 49 6e 31 2d 3e 66 6c 61 67 73 26 4d 45 4d   pIn1->flags&MEM
32c40 5f 49 6e 74 20 29 3b 0a 20 20 69 66 28 20 70 49  _Int );.  if( pI
32c50 6e 31 2d 3e 75 2e 69 3e 53 4d 41 4c 4c 45 53 54  n1->u.i>SMALLEST
32c60 5f 49 4e 54 36 34 20 29 20 70 49 6e 31 2d 3e 75  _INT64 ) pIn1->u
32c70 2e 69 2d 2d 3b 0a 20 20 56 64 62 65 42 72 61 6e  .i--;.  VdbeBran
32c80 63 68 54 61 6b 65 6e 28 70 49 6e 31 2d 3e 75 2e  chTaken(pIn1->u.
32c90 69 3d 3d 30 2c 20 32 29 3b 0a 20 20 69 66 28 20  i==0, 2);.  if( 
32ca0 70 49 6e 31 2d 3e 75 2e 69 3d 3d 30 20 29 20 67  pIn1->u.i==0 ) g
32cb0 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a  oto jump_to_p2;.
32cc0 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 2f 2a 20    break;.}.../* 
32cd0 4f 70 63 6f 64 65 3a 20 41 67 67 53 74 65 70 30  Opcode: AggStep0
32ce0 20 2a 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a   * P2 P3 P4 P5.*
32cf0 2a 20 53 79 6e 6f 70 73 69 73 3a 20 61 63 63 75  * Synopsis: accu
32d00 6d 3d 72 5b 50 33 5d 20 73 74 65 70 28 72 5b 50  m=r[P3] step(r[P
32d10 32 40 50 35 5d 29 0a 2a 2a 0a 2a 2a 20 45 78 65  2@P5]).**.** Exe
32d20 63 75 74 65 20 74 68 65 20 73 74 65 70 20 66 75  cute the step fu
32d30 6e 63 74 69 6f 6e 20 66 6f 72 20 61 6e 20 61 67  nction for an ag
32d40 67 72 65 67 61 74 65 2e 20 20 54 68 65 0a 2a 2a  gregate.  The.**
32d50 20 66 75 6e 63 74 69 6f 6e 20 68 61 73 20 50 35   function has P5
32d60 20 61 72 67 75 6d 65 6e 74 73 2e 20 20 20 50 34   arguments.   P4
32d70 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f   is a pointer to
32d80 20 74 68 65 20 46 75 6e 63 44 65 66 0a 2a 2a 20   the FuncDef.** 
32d90 73 74 72 75 63 74 75 72 65 20 74 68 61 74 20 73  structure that s
32da0 70 65 63 69 66 69 65 73 20 74 68 65 20 66 75 6e  pecifies the fun
32db0 63 74 69 6f 6e 2e 20 20 52 65 67 69 73 74 65 72  ction.  Register
32dc0 20 50 33 20 69 73 20 74 68 65 0a 2a 2a 20 61 63   P3 is the.** ac
32dd0 63 75 6d 75 6c 61 74 6f 72 2e 0a 2a 2a 0a 2a 2a  cumulator..**.**
32de0 20 54 68 65 20 50 35 20 61 72 67 75 6d 65 6e 74   The P5 argument
32df0 73 20 61 72 65 20 74 61 6b 65 6e 20 66 72 6f 6d  s are taken from
32e00 20 72 65 67 69 73 74 65 72 20 50 32 20 61 6e 64   register P2 and
32e10 20 69 74 73 0a 2a 2a 20 73 75 63 63 65 73 73 6f   its.** successo
32e20 72 73 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65  rs..*/./* Opcode
32e30 3a 20 41 67 67 53 74 65 70 20 2a 20 50 32 20 50  : AggStep * P2 P
32e40 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70  3 P4 P5.** Synop
32e50 73 69 73 3a 20 61 63 63 75 6d 3d 72 5b 50 33 5d  sis: accum=r[P3]
32e60 20 73 74 65 70 28 72 5b 50 32 40 50 35 5d 29 0a   step(r[P2@P5]).
32e70 2a 2a 0a 2a 2a 20 45 78 65 63 75 74 65 20 74 68  **.** Execute th
32e80 65 20 73 74 65 70 20 66 75 6e 63 74 69 6f 6e 20  e step function 
32e90 66 6f 72 20 61 6e 20 61 67 67 72 65 67 61 74 65  for an aggregate
32ea0 2e 20 20 54 68 65 0a 2a 2a 20 66 75 6e 63 74 69  .  The.** functi
32eb0 6f 6e 20 68 61 73 20 50 35 20 61 72 67 75 6d 65  on has P5 argume
32ec0 6e 74 73 2e 20 20 20 50 34 20 69 73 20 61 20 70  nts.   P4 is a p
32ed0 6f 69 6e 74 65 72 20 74 6f 20 61 6e 20 73 71 6c  ointer to an sql
32ee0 69 74 65 33 5f 63 6f 6e 74 65 78 74 0a 2a 2a 20  ite3_context.** 
32ef0 6f 62 6a 65 63 74 20 74 68 61 74 20 69 73 20 75  object that is u
32f00 73 65 64 20 74 6f 20 72 75 6e 20 74 68 65 20 66  sed to run the f
32f10 75 6e 63 74 69 6f 6e 2e 20 20 52 65 67 69 73 74  unction.  Regist
32f20 65 72 20 50 33 20 69 73 0a 2a 2a 20 61 73 20 74  er P3 is.** as t
32f30 68 65 20 61 63 63 75 6d 75 6c 61 74 6f 72 2e 0a  he accumulator..
32f40 2a 2a 0a 2a 2a 20 54 68 65 20 50 35 20 61 72 67  **.** The P5 arg
32f50 75 6d 65 6e 74 73 20 61 72 65 20 74 61 6b 65 6e  uments are taken
32f60 20 66 72 6f 6d 20 72 65 67 69 73 74 65 72 20 50   from register P
32f70 32 20 61 6e 64 20 69 74 73 0a 2a 2a 20 73 75 63  2 and its.** suc
32f80 63 65 73 73 6f 72 73 2e 0a 2a 2a 0a 2a 2a 20 54  cessors..**.** T
32f90 68 69 73 20 6f 70 63 6f 64 65 20 69 73 20 69 6e  his opcode is in
32fa0 69 74 69 61 6c 6c 79 20 63 6f 64 65 64 20 61 73  itially coded as
32fb0 20 4f 50 5f 41 67 67 53 74 65 70 30 2e 20 20 4f   OP_AggStep0.  O
32fc0 6e 20 66 69 72 73 74 20 65 76 61 6c 75 61 74 69  n first evaluati
32fd0 6f 6e 2c 0a 2a 2a 20 74 68 65 20 46 75 6e 63 44  on,.** the FuncD
32fe0 65 66 20 73 74 6f 72 65 64 20 69 6e 20 50 34 20  ef stored in P4 
32ff0 69 73 20 63 6f 6e 76 65 72 74 65 64 20 69 6e 74  is converted int
33000 6f 20 61 6e 20 73 71 6c 69 74 65 33 5f 63 6f 6e  o an sqlite3_con
33010 74 65 78 74 20 61 6e 64 0a 2a 2a 20 74 68 65 20  text and.** the 
33020 6f 70 63 6f 64 65 20 69 73 20 63 68 61 6e 67 65  opcode is change
33030 64 2e 20 20 49 6e 20 74 68 69 73 20 77 61 79 2c  d.  In this way,
33040 20 74 68 65 20 69 6e 69 74 69 61 6c 69 7a 61 74   the initializat
33050 69 6f 6e 20 6f 66 20 74 68 65 0a 2a 2a 20 73 71  ion of the.** sq
33060 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 20 6f 6e  lite3_context on
33070 6c 79 20 68 61 70 70 65 6e 73 20 6f 6e 63 65 2c  ly happens once,
33080 20 69 6e 73 74 65 61 64 20 6f 66 20 6f 6e 20 65   instead of on e
33090 61 63 68 20 63 61 6c 6c 20 74 6f 20 74 68 65 0a  ach call to the.
330a0 2a 2a 20 73 74 65 70 20 66 75 6e 63 74 69 6f 6e  ** step function
330b0 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 41 67 67  ..*/.case OP_Agg
330c0 53 74 65 70 30 3a 20 7b 0a 20 20 69 6e 74 20 6e  Step0: {.  int n
330d0 3b 0a 20 20 73 71 6c 69 74 65 33 5f 63 6f 6e 74  ;.  sqlite3_cont
330e0 65 78 74 20 2a 70 43 74 78 3b 0a 0a 20 20 61 73  ext *pCtx;..  as
330f0 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70  sert( pOp->p4typ
33100 65 3d 3d 50 34 5f 46 55 4e 43 44 45 46 20 29 3b  e==P4_FUNCDEF );
33110 0a 20 20 6e 20 3d 20 70 4f 70 2d 3e 70 35 3b 0a  .  n = pOp->p5;.
33120 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
33130 33 3e 30 20 26 26 20 70 4f 70 2d 3e 70 33 3c 3d  3>0 && pOp->p3<=
33140 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e  (p->nMem+1 - p->
33150 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 61 73  nCursor) );.  as
33160 73 65 72 74 28 20 6e 3d 3d 30 20 7c 7c 20 28 70  sert( n==0 || (p
33170 4f 70 2d 3e 70 32 3e 30 20 26 26 20 70 4f 70 2d  Op->p2>0 && pOp-
33180 3e 70 32 2b 6e 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b  >p2+n<=(p->nMem+
33190 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29 2b  1 - p->nCursor)+
331a0 31 29 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  1) );.  assert( 
331b0 70 4f 70 2d 3e 70 33 3c 70 4f 70 2d 3e 70 32 20  pOp->p3<pOp->p2 
331c0 7c 7c 20 70 4f 70 2d 3e 70 33 3e 3d 70 4f 70 2d  || pOp->p3>=pOp-
331d0 3e 70 32 2b 6e 20 29 3b 0a 20 20 70 43 74 78 20  >p2+n );.  pCtx 
331e0 3d 20 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f  = sqlite3DbMallo
331f0 63 52 61 77 4e 4e 28 64 62 2c 20 73 69 7a 65 6f  cRawNN(db, sizeo
33200 66 28 2a 70 43 74 78 29 20 2b 20 28 6e 2d 31 29  f(*pCtx) + (n-1)
33210 2a 73 69 7a 65 6f 66 28 73 71 6c 69 74 65 33 5f  *sizeof(sqlite3_
33220 76 61 6c 75 65 2a 29 29 3b 0a 20 20 69 66 28 20  value*));.  if( 
33230 70 43 74 78 3d 3d 30 20 29 20 67 6f 74 6f 20 6e  pCtx==0 ) goto n
33240 6f 5f 6d 65 6d 3b 0a 20 20 70 43 74 78 2d 3e 70  o_mem;.  pCtx->p
33250 4d 65 6d 20 3d 20 30 3b 0a 20 20 70 43 74 78 2d  Mem = 0;.  pCtx-
33260 3e 70 46 75 6e 63 20 3d 20 70 4f 70 2d 3e 70 34  >pFunc = pOp->p4
33270 2e 70 46 75 6e 63 3b 0a 20 20 70 43 74 78 2d 3e  .pFunc;.  pCtx->
33280 69 4f 70 20 3d 20 28 69 6e 74 29 28 70 4f 70 20  iOp = (int)(pOp 
33290 2d 20 61 4f 70 29 3b 0a 20 20 70 43 74 78 2d 3e  - aOp);.  pCtx->
332a0 70 56 64 62 65 20 3d 20 70 3b 0a 20 20 70 43 74  pVdbe = p;.  pCt
332b0 78 2d 3e 61 72 67 63 20 3d 20 6e 3b 0a 20 20 70  x->argc = n;.  p
332c0 4f 70 2d 3e 70 34 74 79 70 65 20 3d 20 50 34 5f  Op->p4type = P4_
332d0 46 55 4e 43 43 54 58 3b 0a 20 20 70 4f 70 2d 3e  FUNCCTX;.  pOp->
332e0 70 34 2e 70 43 74 78 20 3d 20 70 43 74 78 3b 0a  p4.pCtx = pCtx;.
332f0 20 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 20 3d 20    pOp->opcode = 
33300 4f 50 5f 41 67 67 53 74 65 70 3b 0a 20 20 2f 2a  OP_AggStep;.  /*
33310 20 46 61 6c 6c 20 74 68 72 6f 75 67 68 20 69 6e   Fall through in
33320 74 6f 20 4f 50 5f 41 67 67 53 74 65 70 20 2a 2f  to OP_AggStep */
33330 0a 7d 0a 63 61 73 65 20 4f 50 5f 41 67 67 53 74  .}.case OP_AggSt
33340 65 70 3a 20 7b 0a 20 20 69 6e 74 20 69 3b 0a 20  ep: {.  int i;. 
33350 20 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74   sqlite3_context
33360 20 2a 70 43 74 78 3b 0a 20 20 4d 65 6d 20 2a 70   *pCtx;.  Mem *p
33370 4d 65 6d 3b 0a 20 20 4d 65 6d 20 74 3b 0a 0a 20  Mem;.  Mem t;.. 
33380 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34   assert( pOp->p4
33390 74 79 70 65 3d 3d 50 34 5f 46 55 4e 43 43 54 58  type==P4_FUNCCTX
333a0 20 29 3b 0a 20 20 70 43 74 78 20 3d 20 70 4f 70   );.  pCtx = pOp
333b0 2d 3e 70 34 2e 70 43 74 78 3b 0a 20 20 70 4d 65  ->p4.pCtx;.  pMe
333c0 6d 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  m = &aMem[pOp->p
333d0 33 5d 3b 0a 0a 20 20 2f 2a 20 49 66 20 74 68 69  3];..  /* If thi
333e0 73 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 69 6e  s function is in
333f0 73 69 64 65 20 6f 66 20 61 20 74 72 69 67 67 65  side of a trigge
33400 72 2c 20 74 68 65 20 72 65 67 69 73 74 65 72 20  r, the register 
33410 61 72 72 61 79 20 69 6e 20 61 4d 65 6d 5b 5d 0a  array in aMem[].
33420 20 20 2a 2a 20 6d 69 67 68 74 20 63 68 61 6e 67    ** might chang
33430 65 20 66 72 6f 6d 20 6f 6e 65 20 65 76 61 6c 75  e from one evalu
33440 61 74 69 6f 6e 20 74 6f 20 74 68 65 20 6e 65 78  ation to the nex
33450 74 2e 20 20 54 68 65 20 6e 65 78 74 20 62 6c 6f  t.  The next blo
33460 63 6b 20 6f 66 20 63 6f 64 65 0a 20 20 2a 2a 20  ck of code.  ** 
33470 63 68 65 63 6b 73 20 74 6f 20 73 65 65 20 69 66  checks to see if
33480 20 74 68 65 20 72 65 67 69 73 74 65 72 20 61 72   the register ar
33490 72 61 79 20 68 61 73 20 63 68 61 6e 67 65 64 2c  ray has changed,
334a0 20 61 6e 64 20 69 66 20 73 6f 20 69 74 0a 20 20   and if so it.  
334b0 2a 2a 20 72 65 69 6e 69 74 69 61 6c 69 7a 65 73  ** reinitializes
334c0 20 74 68 65 20 72 65 6c 61 76 61 6e 74 20 70 61   the relavant pa
334d0 72 74 73 20 6f 66 20 74 68 65 20 73 71 6c 69 74  rts of the sqlit
334e0 65 33 5f 63 6f 6e 74 65 78 74 20 6f 62 6a 65 63  e3_context objec
334f0 74 20 2a 2f 0a 20 20 69 66 28 20 70 43 74 78 2d  t */.  if( pCtx-
33500 3e 70 4d 65 6d 20 21 3d 20 70 4d 65 6d 20 29 7b  >pMem != pMem ){
33510 0a 20 20 20 20 70 43 74 78 2d 3e 70 4d 65 6d 20  .    pCtx->pMem 
33520 3d 20 70 4d 65 6d 3b 0a 20 20 20 20 66 6f 72 28  = pMem;.    for(
33530 69 3d 70 43 74 78 2d 3e 61 72 67 63 2d 31 3b 20  i=pCtx->argc-1; 
33540 69 3e 3d 30 3b 20 69 2d 2d 29 20 70 43 74 78 2d  i>=0; i--) pCtx-
33550 3e 61 72 67 76 5b 69 5d 20 3d 20 26 61 4d 65 6d  >argv[i] = &aMem
33560 5b 70 4f 70 2d 3e 70 32 2b 69 5d 3b 0a 20 20 7d  [pOp->p2+i];.  }
33570 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ..#ifdef SQLITE_
33580 44 45 42 55 47 0a 20 20 66 6f 72 28 69 3d 30 3b  DEBUG.  for(i=0;
33590 20 69 3c 70 43 74 78 2d 3e 61 72 67 63 3b 20 69   i<pCtx->argc; i
335a0 2b 2b 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28  ++){.    assert(
335b0 20 6d 65 6d 49 73 56 61 6c 69 64 28 70 43 74 78   memIsValid(pCtx
335c0 2d 3e 61 72 67 76 5b 69 5d 29 20 29 3b 0a 20 20  ->argv[i]) );.  
335d0 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45    REGISTER_TRACE
335e0 28 70 4f 70 2d 3e 70 32 2b 69 2c 20 70 43 74 78  (pOp->p2+i, pCtx
335f0 2d 3e 61 72 67 76 5b 69 5d 29 3b 0a 20 20 7d 0a  ->argv[i]);.  }.
33600 23 65 6e 64 69 66 0a 0a 20 20 70 4d 65 6d 2d 3e  #endif..  pMem->
33610 6e 2b 2b 3b 0a 20 20 73 71 6c 69 74 65 33 56 64  n++;.  sqlite3Vd
33620 62 65 4d 65 6d 49 6e 69 74 28 26 74 2c 20 64 62  beMemInit(&t, db
33630 2c 20 4d 45 4d 5f 4e 75 6c 6c 29 3b 0a 20 20 70  , MEM_Null);.  p
33640 43 74 78 2d 3e 70 4f 75 74 20 3d 20 26 74 3b 0a  Ctx->pOut = &t;.
33650 20 20 70 43 74 78 2d 3e 66 45 72 72 6f 72 4f 72    pCtx->fErrorOr
33660 41 75 78 20 3d 20 30 3b 0a 20 20 70 43 74 78 2d  Aux = 0;.  pCtx-
33670 3e 73 6b 69 70 46 6c 61 67 20 3d 20 30 3b 0a 20  >skipFlag = 0;. 
33680 20 28 70 43 74 78 2d 3e 70 46 75 6e 63 2d 3e 78   (pCtx->pFunc->x
33690 53 46 75 6e 63 29 28 70 43 74 78 2c 70 43 74 78  SFunc)(pCtx,pCtx
336a0 2d 3e 61 72 67 63 2c 70 43 74 78 2d 3e 61 72 67  ->argc,pCtx->arg
336b0 76 29 3b 20 2f 2a 20 49 4d 50 3a 20 52 2d 32 34  v); /* IMP: R-24
336c0 35 30 35 2d 32 33 32 33 30 20 2a 2f 0a 20 20 69  505-23230 */.  i
336d0 66 28 20 70 43 74 78 2d 3e 66 45 72 72 6f 72 4f  f( pCtx->fErrorO
336e0 72 41 75 78 20 29 7b 0a 20 20 20 20 69 66 28 20  rAux ){.    if( 
336f0 70 43 74 78 2d 3e 69 73 45 72 72 6f 72 20 29 7b  pCtx->isError ){
33700 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64  .      sqlite3Vd
33710 62 65 45 72 72 6f 72 28 70 2c 20 22 25 73 22 2c  beError(p, "%s",
33720 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74   sqlite3_value_t
33730 65 78 74 28 26 74 29 29 3b 0a 20 20 20 20 20 20  ext(&t));.      
33740 72 63 20 3d 20 70 43 74 78 2d 3e 69 73 45 72 72  rc = pCtx->isErr
33750 6f 72 3b 0a 20 20 20 20 7d 0a 20 20 20 20 73 71  or;.    }.    sq
33760 6c 69 74 65 33 56 64 62 65 4d 65 6d 52 65 6c 65  lite3VdbeMemRele
33770 61 73 65 28 26 74 29 3b 0a 20 20 20 20 69 66 28  ase(&t);.    if(
33780 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74   rc ) goto abort
33790 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20  _due_to_error;. 
337a0 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73 73 65   }else{.    asse
337b0 72 74 28 20 74 2e 66 6c 61 67 73 3d 3d 4d 45 4d  rt( t.flags==MEM
337c0 5f 4e 75 6c 6c 20 29 3b 0a 20 20 7d 0a 20 20 69  _Null );.  }.  i
337d0 66 28 20 70 43 74 78 2d 3e 73 6b 69 70 46 6c 61  f( pCtx->skipFla
337e0 67 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28  g ){.    assert(
337f0 20 70 4f 70 5b 2d 31 5d 2e 6f 70 63 6f 64 65 3d   pOp[-1].opcode=
33800 3d 4f 50 5f 43 6f 6c 6c 53 65 71 20 29 3b 0a 20  =OP_CollSeq );. 
33810 20 20 20 69 20 3d 20 70 4f 70 5b 2d 31 5d 2e 70     i = pOp[-1].p
33820 31 3b 0a 20 20 20 20 69 66 28 20 69 20 29 20 73  1;.    if( i ) s
33830 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74  qlite3VdbeMemSet
33840 49 6e 74 36 34 28 26 61 4d 65 6d 5b 69 5d 2c 20  Int64(&aMem[i], 
33850 31 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  1);.  }.  break;
33860 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 41  .}../* Opcode: A
33870 67 67 46 69 6e 61 6c 20 50 31 20 50 32 20 2a 20  ggFinal P1 P2 * 
33880 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73  P4 *.** Synopsis
33890 3a 20 61 63 63 75 6d 3d 72 5b 50 31 5d 20 4e 3d  : accum=r[P1] N=
338a0 50 32 0a 2a 2a 0a 2a 2a 20 45 78 65 63 75 74 65  P2.**.** Execute
338b0 20 74 68 65 20 66 69 6e 61 6c 69 7a 65 72 20 66   the finalizer f
338c0 75 6e 63 74 69 6f 6e 20 66 6f 72 20 61 6e 20 61  unction for an a
338d0 67 67 72 65 67 61 74 65 2e 20 20 50 31 20 69 73  ggregate.  P1 is
338e0 0a 2a 2a 20 74 68 65 20 6d 65 6d 6f 72 79 20 6c  .** the memory l
338f0 6f 63 61 74 69 6f 6e 20 74 68 61 74 20 69 73 20  ocation that is 
33900 74 68 65 20 61 63 63 75 6d 75 6c 61 74 6f 72 20  the accumulator 
33910 66 6f 72 20 74 68 65 20 61 67 67 72 65 67 61 74  for the aggregat
33920 65 2e 0a 2a 2a 0a 2a 2a 20 50 32 20 69 73 20 74  e..**.** P2 is t
33930 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 61 72 67  he number of arg
33940 75 6d 65 6e 74 73 20 74 68 61 74 20 74 68 65 20  uments that the 
33950 73 74 65 70 20 66 75 6e 63 74 69 6f 6e 20 74 61  step function ta
33960 6b 65 73 20 61 6e 64 0a 2a 2a 20 50 34 20 69 73  kes and.** P4 is
33970 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68   a pointer to th
33980 65 20 46 75 6e 63 44 65 66 20 66 6f 72 20 74 68  e FuncDef for th
33990 69 73 20 66 75 6e 63 74 69 6f 6e 2e 20 20 54 68  is function.  Th
339a0 65 20 50 32 0a 2a 2a 20 61 72 67 75 6d 65 6e 74  e P2.** argument
339b0 20 69 73 20 6e 6f 74 20 75 73 65 64 20 62 79 20   is not used by 
339c0 74 68 69 73 20 6f 70 63 6f 64 65 2e 20 20 49 74  this opcode.  It
339d0 20 69 73 20 6f 6e 6c 79 20 74 68 65 72 65 20 74   is only there t
339e0 6f 20 64 69 73 61 6d 62 69 67 75 61 74 65 0a 2a  o disambiguate.*
339f0 2a 20 66 75 6e 63 74 69 6f 6e 73 20 74 68 61 74  * functions that
33a00 20 63 61 6e 20 74 61 6b 65 20 76 61 72 79 69 6e   can take varyin
33a10 67 20 6e 75 6d 62 65 72 73 20 6f 66 20 61 72 67  g numbers of arg
33a20 75 6d 65 6e 74 73 2e 20 20 54 68 65 0a 2a 2a 20  uments.  The.** 
33a30 50 34 20 61 72 67 75 6d 65 6e 74 20 69 73 20 6f  P4 argument is o
33a40 6e 6c 79 20 6e 65 65 64 65 64 20 66 6f 72 20 74  nly needed for t
33a50 68 65 20 64 65 67 65 6e 65 72 61 74 65 20 63 61  he degenerate ca
33a60 73 65 20 77 68 65 72 65 0a 2a 2a 20 74 68 65 20  se where.** the 
33a70 73 74 65 70 20 66 75 6e 63 74 69 6f 6e 20 77 61  step function wa
33a80 73 20 6e 6f 74 20 70 72 65 76 69 6f 75 73 6c 79  s not previously
33a90 20 63 61 6c 6c 65 64 2e 0a 2a 2f 0a 63 61 73 65   called..*/.case
33aa0 20 4f 50 5f 41 67 67 46 69 6e 61 6c 3a 20 7b 0a   OP_AggFinal: {.
33ab0 20 20 4d 65 6d 20 2a 70 4d 65 6d 3b 0a 20 20 61    Mem *pMem;.  a
33ac0 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 30  ssert( pOp->p1>0
33ad0 20 26 26 20 70 4f 70 2d 3e 70 31 3c 3d 28 70 2d   && pOp->p1<=(p-
33ae0 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75  >nMem+1 - p->nCu
33af0 72 73 6f 72 29 20 29 3b 0a 20 20 70 4d 65 6d 20  rsor) );.  pMem 
33b00 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  = &aMem[pOp->p1]
33b10 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70 4d 65  ;.  assert( (pMe
33b20 6d 2d 3e 66 6c 61 67 73 20 26 20 7e 28 4d 45 4d  m->flags & ~(MEM
33b30 5f 4e 75 6c 6c 7c 4d 45 4d 5f 41 67 67 29 29 3d  _Null|MEM_Agg))=
33b40 3d 30 20 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c  =0 );.  rc = sql
33b50 69 74 65 33 56 64 62 65 4d 65 6d 46 69 6e 61 6c  ite3VdbeMemFinal
33b60 69 7a 65 28 70 4d 65 6d 2c 20 70 4f 70 2d 3e 70  ize(pMem, pOp->p
33b70 34 2e 70 46 75 6e 63 29 3b 0a 20 20 69 66 28 20  4.pFunc);.  if( 
33b80 72 63 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  rc ){.    sqlite
33b90 33 56 64 62 65 45 72 72 6f 72 28 70 2c 20 22 25  3VdbeError(p, "%
33ba0 73 22 2c 20 73 71 6c 69 74 65 33 5f 76 61 6c 75  s", sqlite3_valu
33bb0 65 5f 74 65 78 74 28 70 4d 65 6d 29 29 3b 0a 20  e_text(pMem));. 
33bc0 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75     goto abort_du
33bd0 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 7d 0a  e_to_error;.  }.
33be0 20 20 73 71 6c 69 74 65 33 56 64 62 65 43 68 61    sqlite3VdbeCha
33bf0 6e 67 65 45 6e 63 6f 64 69 6e 67 28 70 4d 65 6d  ngeEncoding(pMem
33c00 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 55  , encoding);.  U
33c10 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49  PDATE_MAX_BLOBSI
33c20 5a 45 28 70 4d 65 6d 29 3b 0a 20 20 69 66 28 20  ZE(pMem);.  if( 
33c30 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 54 6f  sqlite3VdbeMemTo
33c40 6f 42 69 67 28 70 4d 65 6d 29 20 29 7b 0a 20 20  oBig(pMem) ){.  
33c50 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a    goto too_big;.
33c60 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
33c70 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
33c80 4d 49 54 5f 57 41 4c 0a 2f 2a 20 4f 70 63 6f 64  MIT_WAL./* Opcod
33c90 65 3a 20 43 68 65 63 6b 70 6f 69 6e 74 20 50 31  e: Checkpoint P1
33ca0 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a   P2 P3 * *.**.**
33cb0 20 43 68 65 63 6b 70 6f 69 6e 74 20 64 61 74 61   Checkpoint data
33cc0 62 61 73 65 20 50 31 2e 20 54 68 69 73 20 69 73  base P1. This is
33cd0 20 61 20 6e 6f 2d 6f 70 20 69 66 20 50 31 20 69   a no-op if P1 i
33ce0 73 20 6e 6f 74 20 63 75 72 72 65 6e 74 6c 79 20  s not currently 
33cf0 69 6e 0a 2a 2a 20 57 41 4c 20 6d 6f 64 65 2e 20  in.** WAL mode. 
33d00 50 61 72 61 6d 65 74 65 72 20 50 32 20 69 73 20  Parameter P2 is 
33d10 6f 6e 65 20 6f 66 20 53 51 4c 49 54 45 5f 43 48  one of SQLITE_CH
33d20 45 43 4b 50 4f 49 4e 54 5f 50 41 53 53 49 56 45  ECKPOINT_PASSIVE
33d30 2c 20 46 55 4c 4c 2c 0a 2a 2a 20 52 45 53 54 41  , FULL,.** RESTA
33d40 52 54 2c 20 6f 72 20 54 52 55 4e 43 41 54 45 2e  RT, or TRUNCATE.
33d50 20 20 57 72 69 74 65 20 31 20 6f 72 20 30 20 69    Write 1 or 0 i
33d60 6e 74 6f 20 6d 65 6d 5b 50 33 5d 20 69 66 20 74  nto mem[P3] if t
33d70 68 65 20 63 68 65 63 6b 70 6f 69 6e 74 20 72 65  he checkpoint re
33d80 74 75 72 6e 73 0a 2a 2a 20 53 51 4c 49 54 45 5f  turns.** SQLITE_
33d90 42 55 53 59 20 6f 72 20 6e 6f 74 2c 20 72 65 73  BUSY or not, res
33da0 70 65 63 74 69 76 65 6c 79 2e 20 20 57 72 69 74  pectively.  Writ
33db0 65 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  e the number of 
33dc0 70 61 67 65 73 20 69 6e 20 74 68 65 0a 2a 2a 20  pages in the.** 
33dd0 57 41 4c 20 61 66 74 65 72 20 74 68 65 20 63 68  WAL after the ch
33de0 65 63 6b 70 6f 69 6e 74 20 69 6e 74 6f 20 6d 65  eckpoint into me
33df0 6d 5b 50 33 2b 31 5d 20 61 6e 64 20 74 68 65 20  m[P3+1] and the 
33e00 6e 75 6d 62 65 72 20 6f 66 20 70 61 67 65 73 0a  number of pages.
33e10 2a 2a 20 69 6e 20 74 68 65 20 57 41 4c 20 74 68  ** in the WAL th
33e20 61 74 20 68 61 76 65 20 62 65 65 6e 20 63 68 65  at have been che
33e30 63 6b 70 6f 69 6e 74 65 64 20 61 66 74 65 72 20  ckpointed after 
33e40 74 68 65 20 63 68 65 63 6b 70 6f 69 6e 74 0a 2a  the checkpoint.*
33e50 2a 20 63 6f 6d 70 6c 65 74 65 73 20 69 6e 74 6f  * completes into
33e60 20 6d 65 6d 5b 50 33 2b 32 5d 2e 20 20 48 6f 77   mem[P3+2].  How
33e70 65 76 65 72 20 6f 6e 20 61 6e 20 65 72 72 6f 72  ever on an error
33e80 2c 20 6d 65 6d 5b 50 33 2b 31 5d 20 61 6e 64 0a  , mem[P3+1] and.
33e90 2a 2a 20 6d 65 6d 5b 50 33 2b 32 5d 20 61 72 65  ** mem[P3+2] are
33ea0 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 74 6f 20   initialized to 
33eb0 2d 31 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43  -1..*/.case OP_C
33ec0 68 65 63 6b 70 6f 69 6e 74 3a 20 7b 0a 20 20 69  heckpoint: {.  i
33ed0 6e 74 20 69 3b 20 20 20 20 20 20 20 20 20 20 20  nt i;           
33ee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
33ef0 2a 20 4c 6f 6f 70 20 63 6f 75 6e 74 65 72 20 2a  * Loop counter *
33f00 2f 0a 20 20 69 6e 74 20 61 52 65 73 5b 33 5d 3b  /.  int aRes[3];
33f10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33f20 20 20 20 20 2f 2a 20 52 65 73 75 6c 74 73 20 2a      /* Results *
33f30 2f 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d 3b 20 20  /.  Mem *pMem;  
33f40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33f50 20 20 20 20 2f 2a 20 57 72 69 74 65 20 72 65 73      /* Write res
33f60 75 6c 74 73 20 68 65 72 65 20 2a 2f 0a 0a 20 20  ults here */..  
33f70 61 73 73 65 72 74 28 20 70 2d 3e 72 65 61 64 4f  assert( p->readO
33f80 6e 6c 79 3d 3d 30 20 29 3b 0a 20 20 61 52 65 73  nly==0 );.  aRes
33f90 5b 30 5d 20 3d 20 30 3b 0a 20 20 61 52 65 73 5b  [0] = 0;.  aRes[
33fa0 31 5d 20 3d 20 61 52 65 73 5b 32 5d 20 3d 20 2d  1] = aRes[2] = -
33fb0 31 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  1;.  assert( pOp
33fc0 2d 3e 70 32 3d 3d 53 51 4c 49 54 45 5f 43 48 45  ->p2==SQLITE_CHE
33fd0 43 4b 50 4f 49 4e 54 5f 50 41 53 53 49 56 45 0a  CKPOINT_PASSIVE.
33fe0 20 20 20 20 20 20 20 7c 7c 20 70 4f 70 2d 3e 70         || pOp->p
33ff0 32 3d 3d 53 51 4c 49 54 45 5f 43 48 45 43 4b 50  2==SQLITE_CHECKP
34000 4f 49 4e 54 5f 46 55 4c 4c 0a 20 20 20 20 20 20  OINT_FULL.      
34010 20 7c 7c 20 70 4f 70 2d 3e 70 32 3d 3d 53 51 4c   || pOp->p2==SQL
34020 49 54 45 5f 43 48 45 43 4b 50 4f 49 4e 54 5f 52  ITE_CHECKPOINT_R
34030 45 53 54 41 52 54 0a 20 20 20 20 20 20 20 7c 7c  ESTART.       ||
34040 20 70 4f 70 2d 3e 70 32 3d 3d 53 51 4c 49 54 45   pOp->p2==SQLITE
34050 5f 43 48 45 43 4b 50 4f 49 4e 54 5f 54 52 55 4e  _CHECKPOINT_TRUN
34060 43 41 54 45 0a 20 20 29 3b 0a 20 20 72 63 20 3d  CATE.  );.  rc =
34070 20 73 71 6c 69 74 65 33 43 68 65 63 6b 70 6f 69   sqlite3Checkpoi
34080 6e 74 28 64 62 2c 20 70 4f 70 2d 3e 70 31 2c 20  nt(db, pOp->p1, 
34090 70 4f 70 2d 3e 70 32 2c 20 26 61 52 65 73 5b 31  pOp->p2, &aRes[1
340a0 5d 2c 20 26 61 52 65 73 5b 32 5d 29 3b 0a 20 20  ], &aRes[2]);.  
340b0 69 66 28 20 72 63 20 29 7b 0a 20 20 20 20 69 66  if( rc ){.    if
340c0 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 42 55 53  ( rc!=SQLITE_BUS
340d0 59 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64  Y ) goto abort_d
340e0 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20  ue_to_error;.   
340f0 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b   rc = SQLITE_OK;
34100 0a 20 20 20 20 61 52 65 73 5b 30 5d 20 3d 20 31  .    aRes[0] = 1
34110 3b 0a 20 20 7d 0a 20 20 66 6f 72 28 69 3d 30 2c  ;.  }.  for(i=0,
34120 20 70 4d 65 6d 20 3d 20 26 61 4d 65 6d 5b 70 4f   pMem = &aMem[pO
34130 70 2d 3e 70 33 5d 3b 20 69 3c 33 3b 20 69 2b 2b  p->p3]; i<3; i++
34140 2c 20 70 4d 65 6d 2b 2b 29 7b 0a 20 20 20 20 73  , pMem++){.    s
34150 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74  qlite3VdbeMemSet
34160 49 6e 74 36 34 28 70 4d 65 6d 2c 20 28 69 36 34  Int64(pMem, (i64
34170 29 61 52 65 73 5b 69 5d 29 3b 0a 20 20 7d 20 20  )aRes[i]);.  }  
34180 20 20 0a 20 20 62 72 65 61 6b 3b 0a 7d 3b 20 20    .  break;.};  
34190 0a 23 65 6e 64 69 66 0a 0a 23 69 66 6e 64 65 66  .#endif..#ifndef
341a0 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 52 41   SQLITE_OMIT_PRA
341b0 47 4d 41 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4a  GMA./* Opcode: J
341c0 6f 75 72 6e 61 6c 4d 6f 64 65 20 50 31 20 50 32  ournalMode P1 P2
341d0 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 43 68   P3 * *.**.** Ch
341e0 61 6e 67 65 20 74 68 65 20 6a 6f 75 72 6e 61 6c  ange the journal
341f0 20 6d 6f 64 65 20 6f 66 20 64 61 74 61 62 61 73   mode of databas
34200 65 20 50 31 20 74 6f 20 50 33 2e 20 50 33 20 6d  e P1 to P3. P3 m
34210 75 73 74 20 62 65 20 6f 6e 65 20 6f 66 20 74 68  ust be one of th
34220 65 0a 2a 2a 20 50 41 47 45 52 5f 4a 4f 55 52 4e  e.** PAGER_JOURN
34230 41 4c 4d 4f 44 45 5f 58 58 58 20 76 61 6c 75 65  ALMODE_XXX value
34240 73 2e 20 49 66 20 63 68 61 6e 67 69 6e 67 20 62  s. If changing b
34250 65 74 77 65 65 6e 20 74 68 65 20 76 61 72 69 6f  etween the vario
34260 75 73 20 72 6f 6c 6c 62 61 63 6b 0a 2a 2a 20 6d  us rollback.** m
34270 6f 64 65 73 20 28 64 65 6c 65 74 65 2c 20 74 72  odes (delete, tr
34280 75 6e 63 61 74 65 2c 20 70 65 72 73 69 73 74 2c  uncate, persist,
34290 20 6f 66 66 20 61 6e 64 20 6d 65 6d 6f 72 79 29   off and memory)
342a0 2c 20 74 68 69 73 20 69 73 20 61 20 73 69 6d 70  , this is a simp
342b0 6c 65 0a 2a 2a 20 6f 70 65 72 61 74 69 6f 6e 2e  le.** operation.
342c0 20 4e 6f 20 49 4f 20 69 73 20 72 65 71 75 69 72   No IO is requir
342d0 65 64 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 63 68 61  ed..**.** If cha
342e0 6e 67 69 6e 67 20 69 6e 74 6f 20 6f 72 20 6f 75  nging into or ou
342f0 74 20 6f 66 20 57 41 4c 20 6d 6f 64 65 20 74 68  t of WAL mode th
34300 65 20 70 72 6f 63 65 64 75 72 65 20 69 73 20 6d  e procedure is m
34310 6f 72 65 20 63 6f 6d 70 6c 69 63 61 74 65 64 2e  ore complicated.
34320 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 61 20 73  .**.** Write a s
34330 74 72 69 6e 67 20 63 6f 6e 74 61 69 6e 69 6e 67  tring containing
34340 20 74 68 65 20 66 69 6e 61 6c 20 6a 6f 75 72 6e   the final journ
34350 61 6c 2d 6d 6f 64 65 20 74 6f 20 72 65 67 69 73  al-mode to regis
34360 74 65 72 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20  ter P2..*/.case 
34370 4f 50 5f 4a 6f 75 72 6e 61 6c 4d 6f 64 65 3a 20  OP_JournalMode: 
34380 7b 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a  {    /* out2 */.
34390 20 20 42 74 72 65 65 20 2a 70 42 74 3b 20 20 20    Btree *pBt;   
343a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
343b0 20 20 2f 2a 20 42 74 72 65 65 20 74 6f 20 63 68    /* Btree to ch
343c0 61 6e 67 65 20 6a 6f 75 72 6e 61 6c 20 6d 6f 64  ange journal mod
343d0 65 20 6f 66 20 2a 2f 0a 20 20 50 61 67 65 72 20  e of */.  Pager 
343e0 2a 70 50 61 67 65 72 3b 20 20 20 20 20 20 20 20  *pPager;        
343f0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50 61 67            /* Pag
34400 65 72 20 61 73 73 6f 63 69 61 74 65 64 20 77 69  er associated wi
34410 74 68 20 70 42 74 20 2a 2f 0a 20 20 69 6e 74 20  th pBt */.  int 
34420 65 4e 65 77 3b 20 20 20 20 20 20 20 20 20 20 20  eNew;           
34430 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
34440 65 77 20 6a 6f 75 72 6e 61 6c 20 6d 6f 64 65 20  ew journal mode 
34450 2a 2f 0a 20 20 69 6e 74 20 65 4f 6c 64 3b 20 20  */.  int eOld;  
34460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34470 20 20 20 20 20 2f 2a 20 54 68 65 20 6f 6c 64 20       /* The old 
34480 6a 6f 75 72 6e 61 6c 20 6d 6f 64 65 20 2a 2f 0a  journal mode */.
34490 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
344a0 4d 49 54 5f 57 41 4c 0a 20 20 63 6f 6e 73 74 20  MIT_WAL.  const 
344b0 63 68 61 72 20 2a 7a 46 69 6c 65 6e 61 6d 65 3b  char *zFilename;
344c0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d            /* Nam
344d0 65 20 6f 66 20 64 61 74 61 62 61 73 65 20 66 69  e of database fi
344e0 6c 65 20 66 6f 72 20 70 50 61 67 65 72 20 2a 2f  le for pPager */
344f0 0a 23 65 6e 64 69 66 0a 0a 20 20 70 4f 75 74 20  .#endif..  pOut 
34500 3d 20 6f 75 74 32 50 72 65 72 65 6c 65 61 73 65  = out2Prerelease
34510 28 70 2c 20 70 4f 70 29 3b 0a 20 20 65 4e 65 77  (p, pOp);.  eNew
34520 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 61 73   = pOp->p3;.  as
34530 73 65 72 74 28 20 65 4e 65 77 3d 3d 50 41 47 45  sert( eNew==PAGE
34540 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 44 45  R_JOURNALMODE_DE
34550 4c 45 54 45 20 0a 20 20 20 20 20 20 20 7c 7c 20  LETE .       || 
34560 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52  eNew==PAGER_JOUR
34570 4e 41 4c 4d 4f 44 45 5f 54 52 55 4e 43 41 54 45  NALMODE_TRUNCATE
34580 20 0a 20 20 20 20 20 20 20 7c 7c 20 65 4e 65 77   .       || eNew
34590 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d  ==PAGER_JOURNALM
345a0 4f 44 45 5f 50 45 52 53 49 53 54 20 0a 20 20 20  ODE_PERSIST .   
345b0 20 20 20 20 7c 7c 20 65 4e 65 77 3d 3d 50 41 47      || eNew==PAG
345c0 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 4f  ER_JOURNALMODE_O
345d0 46 46 0a 20 20 20 20 20 20 20 7c 7c 20 65 4e 65  FF.       || eNe
345e0 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c  w==PAGER_JOURNAL
345f0 4d 4f 44 45 5f 4d 45 4d 4f 52 59 0a 20 20 20 20  MODE_MEMORY.    
34600 20 20 20 7c 7c 20 65 4e 65 77 3d 3d 50 41 47 45     || eNew==PAGE
34610 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 57 41  R_JOURNALMODE_WA
34620 4c 0a 20 20 20 20 20 20 20 7c 7c 20 65 4e 65 77  L.       || eNew
34630 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d  ==PAGER_JOURNALM
34640 4f 44 45 5f 51 55 45 52 59 0a 20 20 29 3b 0a 20  ODE_QUERY.  );. 
34650 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
34660 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 64  >=0 && pOp->p1<d
34670 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73 65  b->nDb );.  asse
34680 72 74 28 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d  rt( p->readOnly=
34690 3d 30 20 29 3b 0a 0a 20 20 70 42 74 20 3d 20 64  =0 );..  pBt = d
346a0 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 31 5d 2e  b->aDb[pOp->p1].
346b0 70 42 74 3b 0a 20 20 70 50 61 67 65 72 20 3d 20  pBt;.  pPager = 
346c0 73 71 6c 69 74 65 33 42 74 72 65 65 50 61 67 65  sqlite3BtreePage
346d0 72 28 70 42 74 29 3b 0a 20 20 65 4f 6c 64 20 3d  r(pBt);.  eOld =
346e0 20 73 71 6c 69 74 65 33 50 61 67 65 72 47 65 74   sqlite3PagerGet
346f0 4a 6f 75 72 6e 61 6c 4d 6f 64 65 28 70 50 61 67  JournalMode(pPag
34700 65 72 29 3b 0a 20 20 69 66 28 20 65 4e 65 77 3d  er);.  if( eNew=
34710 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f  =PAGER_JOURNALMO
34720 44 45 5f 51 55 45 52 59 20 29 20 65 4e 65 77 20  DE_QUERY ) eNew 
34730 3d 20 65 4f 6c 64 3b 0a 20 20 69 66 28 20 21 73  = eOld;.  if( !s
34740 71 6c 69 74 65 33 50 61 67 65 72 4f 6b 54 6f 43  qlite3PagerOkToC
34750 68 61 6e 67 65 4a 6f 75 72 6e 61 6c 4d 6f 64 65  hangeJournalMode
34760 28 70 50 61 67 65 72 29 20 29 20 65 4e 65 77 20  (pPager) ) eNew 
34770 3d 20 65 4f 6c 64 3b 0a 0a 23 69 66 6e 64 65 66  = eOld;..#ifndef
34780 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 41 4c   SQLITE_OMIT_WAL
34790 0a 20 20 7a 46 69 6c 65 6e 61 6d 65 20 3d 20 73  .  zFilename = s
347a0 71 6c 69 74 65 33 50 61 67 65 72 46 69 6c 65 6e  qlite3PagerFilen
347b0 61 6d 65 28 70 50 61 67 65 72 2c 20 31 29 3b 0a  ame(pPager, 1);.
347c0 0a 20 20 2f 2a 20 44 6f 20 6e 6f 74 20 61 6c 6c  .  /* Do not all
347d0 6f 77 20 61 20 74 72 61 6e 73 69 74 69 6f 6e 20  ow a transition 
347e0 74 6f 20 6a 6f 75 72 6e 61 6c 5f 6d 6f 64 65 3d  to journal_mode=
347f0 57 41 4c 20 66 6f 72 20 61 20 64 61 74 61 62 61  WAL for a databa
34800 73 65 0a 20 20 2a 2a 20 69 6e 20 74 65 6d 70 6f  se.  ** in tempo
34810 72 61 72 79 20 73 74 6f 72 61 67 65 20 6f 72 20  rary storage or 
34820 69 66 20 74 68 65 20 56 46 53 20 64 6f 65 73 20  if the VFS does 
34830 6e 6f 74 20 73 75 70 70 6f 72 74 20 73 68 61 72  not support shar
34840 65 64 20 6d 65 6d 6f 72 79 20 0a 20 20 2a 2f 0a  ed memory .  */.
34850 20 20 69 66 28 20 65 4e 65 77 3d 3d 50 41 47 45    if( eNew==PAGE
34860 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 57 41  R_JOURNALMODE_WA
34870 4c 0a 20 20 20 26 26 20 28 73 71 6c 69 74 65 33  L.   && (sqlite3
34880 53 74 72 6c 65 6e 33 30 28 7a 46 69 6c 65 6e 61  Strlen30(zFilena
34890 6d 65 29 3d 3d 30 20 20 20 20 20 20 20 20 20 20  me)==0          
348a0 20 2f 2a 20 54 65 6d 70 20 66 69 6c 65 20 2a 2f   /* Temp file */
348b0 0a 20 20 20 20 20 20 20 7c 7c 20 21 73 71 6c 69  .       || !sqli
348c0 74 65 33 50 61 67 65 72 57 61 6c 53 75 70 70 6f  te3PagerWalSuppo
348d0 72 74 65 64 28 70 50 61 67 65 72 29 29 20 20 20  rted(pPager))   
348e0 2f 2a 20 4e 6f 20 73 68 61 72 65 64 2d 6d 65 6d  /* No shared-mem
348f0 6f 72 79 20 73 75 70 70 6f 72 74 20 2a 2f 0a 20  ory support */. 
34900 20 29 7b 0a 20 20 20 20 65 4e 65 77 20 3d 20 65   ){.    eNew = e
34910 4f 6c 64 3b 0a 20 20 7d 0a 0a 20 20 69 66 28 20  Old;.  }..  if( 
34920 28 65 4e 65 77 21 3d 65 4f 6c 64 29 0a 20 20 20  (eNew!=eOld).   
34930 26 26 20 28 65 4f 6c 64 3d 3d 50 41 47 45 52 5f  && (eOld==PAGER_
34940 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 57 41 4c 20  JOURNALMODE_WAL 
34950 7c 7c 20 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a  || eNew==PAGER_J
34960 4f 55 52 4e 41 4c 4d 4f 44 45 5f 57 41 4c 29 0a  OURNALMODE_WAL).
34970 20 20 29 7b 0a 20 20 20 20 69 66 28 20 21 64 62    ){.    if( !db
34980 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 7c 7c 20  ->autoCommit || 
34990 64 62 2d 3e 6e 56 64 62 65 52 65 61 64 3e 31 20  db->nVdbeRead>1 
349a0 29 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 53 51  ){.      rc = SQ
349b0 4c 49 54 45 5f 45 52 52 4f 52 3b 0a 20 20 20 20  LITE_ERROR;.    
349c0 20 20 73 71 6c 69 74 65 33 56 64 62 65 45 72 72    sqlite3VdbeErr
349d0 6f 72 28 70 2c 0a 20 20 20 20 20 20 20 20 20 20  or(p,.          
349e0 22 63 61 6e 6e 6f 74 20 63 68 61 6e 67 65 20 25  "cannot change %
349f0 73 20 77 61 6c 20 6d 6f 64 65 20 66 72 6f 6d 20  s wal mode from 
34a00 77 69 74 68 69 6e 20 61 20 74 72 61 6e 73 61 63  within a transac
34a10 74 69 6f 6e 22 2c 0a 20 20 20 20 20 20 20 20 20  tion",.         
34a20 20 28 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f   (eNew==PAGER_JO
34a30 55 52 4e 41 4c 4d 4f 44 45 5f 57 41 4c 20 3f 20  URNALMODE_WAL ? 
34a40 22 69 6e 74 6f 22 20 3a 20 22 6f 75 74 20 6f 66  "into" : "out of
34a50 22 29 0a 20 20 20 20 20 20 29 3b 0a 20 20 20 20  ").      );.    
34a60 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65    goto abort_due
34a70 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 7d  _to_error;.    }
34a80 65 6c 73 65 7b 0a 20 0a 20 20 20 20 20 20 69 66  else{. .      if
34a90 28 20 65 4f 6c 64 3d 3d 50 41 47 45 52 5f 4a 4f  ( eOld==PAGER_JO
34aa0 55 52 4e 41 4c 4d 4f 44 45 5f 57 41 4c 20 29 7b  URNALMODE_WAL ){
34ab0 0a 20 20 20 20 20 20 20 20 2f 2a 20 49 66 20 6c  .        /* If l
34ac0 65 61 76 69 6e 67 20 57 41 4c 20 6d 6f 64 65 2c  eaving WAL mode,
34ad0 20 63 6c 6f 73 65 20 74 68 65 20 6c 6f 67 20 66   close the log f
34ae0 69 6c 65 2e 20 49 66 20 73 75 63 63 65 73 73 66  ile. If successf
34af0 75 6c 2c 20 74 68 65 20 63 61 6c 6c 0a 20 20 20  ul, the call.   
34b00 20 20 20 20 20 2a 2a 20 74 6f 20 50 61 67 65 72       ** to Pager
34b10 43 6c 6f 73 65 57 61 6c 28 29 20 63 68 65 63 6b  CloseWal() check
34b20 70 6f 69 6e 74 73 20 61 6e 64 20 64 65 6c 65 74  points and delet
34b30 65 73 20 74 68 65 20 77 72 69 74 65 2d 61 68 65  es the write-ahe
34b40 61 64 2d 6c 6f 67 20 0a 20 20 20 20 20 20 20 20  ad-log .        
34b50 2a 2a 20 66 69 6c 65 2e 20 41 6e 20 45 58 43 4c  ** file. An EXCL
34b60 55 53 49 56 45 20 6c 6f 63 6b 20 6d 61 79 20 73  USIVE lock may s
34b70 74 69 6c 6c 20 62 65 20 68 65 6c 64 20 6f 6e 20  till be held on 
34b80 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c  the database fil
34b90 65 20 0a 20 20 20 20 20 20 20 20 2a 2a 20 61 66  e .        ** af
34ba0 74 65 72 20 61 20 73 75 63 63 65 73 73 66 75 6c  ter a successful
34bb0 20 72 65 74 75 72 6e 2e 20 0a 20 20 20 20 20 20   return. .      
34bc0 20 20 2a 2f 0a 20 20 20 20 20 20 20 20 72 63 20    */.        rc 
34bd0 3d 20 73 71 6c 69 74 65 33 50 61 67 65 72 43 6c  = sqlite3PagerCl
34be0 6f 73 65 57 61 6c 28 70 50 61 67 65 72 2c 20 64  oseWal(pPager, d
34bf0 62 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20  b);.        if( 
34c00 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b  rc==SQLITE_OK ){
34c10 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74  .          sqlit
34c20 65 33 50 61 67 65 72 53 65 74 4a 6f 75 72 6e 61  e3PagerSetJourna
34c30 6c 4d 6f 64 65 28 70 50 61 67 65 72 2c 20 65 4e  lMode(pPager, eN
34c40 65 77 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20  ew);.        }. 
34c50 20 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 65       }else if( e
34c60 4f 6c 64 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e  Old==PAGER_JOURN
34c70 41 4c 4d 4f 44 45 5f 4d 45 4d 4f 52 59 20 29 7b  ALMODE_MEMORY ){
34c80 0a 20 20 20 20 20 20 20 20 2f 2a 20 43 61 6e 6e  .        /* Cann
34c90 6f 74 20 74 72 61 6e 73 69 74 69 6f 6e 20 64 69  ot transition di
34ca0 72 65 63 74 6c 79 20 66 72 6f 6d 20 4d 45 4d 4f  rectly from MEMO
34cb0 52 59 20 74 6f 20 57 41 4c 2e 20 20 55 73 65 20  RY to WAL.  Use 
34cc0 6d 6f 64 65 20 4f 46 46 0a 20 20 20 20 20 20 20  mode OFF.       
34cd0 20 2a 2a 20 61 73 20 61 6e 20 69 6e 74 65 72 6d   ** as an interm
34ce0 65 64 69 61 74 65 20 2a 2f 0a 20 20 20 20 20 20  ediate */.      
34cf0 20 20 73 71 6c 69 74 65 33 50 61 67 65 72 53 65    sqlite3PagerSe
34d00 74 4a 6f 75 72 6e 61 6c 4d 6f 64 65 28 70 50 61  tJournalMode(pPa
34d10 67 65 72 2c 20 50 41 47 45 52 5f 4a 4f 55 52 4e  ger, PAGER_JOURN
34d20 41 4c 4d 4f 44 45 5f 4f 46 46 29 3b 0a 20 20 20  ALMODE_OFF);.   
34d30 20 20 20 7d 0a 20 20 0a 20 20 20 20 20 20 2f 2a     }.  .      /*
34d40 20 4f 70 65 6e 20 61 20 74 72 61 6e 73 61 63 74   Open a transact
34d50 69 6f 6e 20 6f 6e 20 74 68 65 20 64 61 74 61 62  ion on the datab
34d60 61 73 65 20 66 69 6c 65 2e 20 52 65 67 61 72 64  ase file. Regard
34d70 6c 65 73 73 20 6f 66 20 74 68 65 20 6a 6f 75 72  less of the jour
34d80 6e 61 6c 0a 20 20 20 20 20 20 2a 2a 20 6d 6f 64  nal.      ** mod
34d90 65 2c 20 74 68 69 73 20 74 72 61 6e 73 61 63 74  e, this transact
34da0 69 6f 6e 20 61 6c 77 61 79 73 20 75 73 65 73 20  ion always uses 
34db0 61 20 72 6f 6c 6c 62 61 63 6b 20 6a 6f 75 72 6e  a rollback journ
34dc0 61 6c 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20  al..      */.   
34dd0 20 20 20 61 73 73 65 72 74 28 20 73 71 6c 69 74     assert( sqlit
34de0 65 33 42 74 72 65 65 49 73 49 6e 54 72 61 6e 73  e3BtreeIsInTrans
34df0 28 70 42 74 29 3d 3d 30 20 29 3b 0a 20 20 20 20  (pBt)==0 );.    
34e00 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45    if( rc==SQLITE
34e10 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 72  _OK ){.        r
34e20 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
34e30 53 65 74 56 65 72 73 69 6f 6e 28 70 42 74 2c 20  SetVersion(pBt, 
34e40 28 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55  (eNew==PAGER_JOU
34e50 52 4e 41 4c 4d 4f 44 45 5f 57 41 4c 20 3f 20 32  RNALMODE_WAL ? 2
34e60 20 3a 20 31 29 29 3b 0a 20 20 20 20 20 20 7d 0a   : 1));.      }.
34e70 20 20 20 20 7d 0a 20 20 7d 0a 23 65 6e 64 69 66      }.  }.#endif
34e80 20 2f 2a 20 69 66 6e 64 65 66 20 53 51 4c 49 54   /* ifndef SQLIT
34e90 45 5f 4f 4d 49 54 5f 57 41 4c 20 2a 2f 0a 0a 20  E_OMIT_WAL */.. 
34ea0 20 69 66 28 20 72 63 20 29 20 65 4e 65 77 20 3d   if( rc ) eNew =
34eb0 20 65 4f 6c 64 3b 0a 20 20 65 4e 65 77 20 3d 20   eOld;.  eNew = 
34ec0 73 71 6c 69 74 65 33 50 61 67 65 72 53 65 74 4a  sqlite3PagerSetJ
34ed0 6f 75 72 6e 61 6c 4d 6f 64 65 28 70 50 61 67 65  ournalMode(pPage
34ee0 72 2c 20 65 4e 65 77 29 3b 0a 0a 20 20 70 4f 75  r, eNew);..  pOu
34ef0 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 53  t->flags = MEM_S
34f00 74 72 7c 4d 45 4d 5f 53 74 61 74 69 63 7c 4d 45  tr|MEM_Static|ME
34f10 4d 5f 54 65 72 6d 3b 0a 20 20 70 4f 75 74 2d 3e  M_Term;.  pOut->
34f20 7a 20 3d 20 28 63 68 61 72 20 2a 29 73 71 6c 69  z = (char *)sqli
34f30 74 65 33 4a 6f 75 72 6e 61 6c 4d 6f 64 65 6e 61  te3JournalModena
34f40 6d 65 28 65 4e 65 77 29 3b 0a 20 20 70 4f 75 74  me(eNew);.  pOut
34f50 2d 3e 6e 20 3d 20 73 71 6c 69 74 65 33 53 74 72  ->n = sqlite3Str
34f60 6c 65 6e 33 30 28 70 4f 75 74 2d 3e 7a 29 3b 0a  len30(pOut->z);.
34f70 20 20 70 4f 75 74 2d 3e 65 6e 63 20 3d 20 53 51    pOut->enc = SQ
34f80 4c 49 54 45 5f 55 54 46 38 3b 0a 20 20 73 71 6c  LITE_UTF8;.  sql
34f90 69 74 65 33 56 64 62 65 43 68 61 6e 67 65 45 6e  ite3VdbeChangeEn
34fa0 63 6f 64 69 6e 67 28 70 4f 75 74 2c 20 65 6e 63  coding(pOut, enc
34fb0 6f 64 69 6e 67 29 3b 0a 20 20 69 66 28 20 72 63  oding);.  if( rc
34fc0 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75   ) goto abort_du
34fd0 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 62 72  e_to_error;.  br
34fe0 65 61 6b 3b 0a 7d 3b 0a 23 65 6e 64 69 66 20 2f  eak;.};.#endif /
34ff0 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 52  * SQLITE_OMIT_PR
35000 41 47 4d 41 20 2a 2f 0a 0a 23 69 66 20 21 64 65  AGMA */..#if !de
35010 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49  fined(SQLITE_OMI
35020 54 5f 56 41 43 55 55 4d 29 20 26 26 20 21 64 65  T_VACUUM) && !de
35030 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49  fined(SQLITE_OMI
35040 54 5f 41 54 54 41 43 48 29 0a 2f 2a 20 4f 70 63  T_ATTACH)./* Opc
35050 6f 64 65 3a 20 56 61 63 75 75 6d 20 50 31 20 2a  ode: Vacuum P1 *
35060 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 56 61 63   * * *.**.** Vac
35070 75 75 6d 20 74 68 65 20 65 6e 74 69 72 65 20 64  uum the entire d
35080 61 74 61 62 61 73 65 20 50 31 2e 20 20 50 31 20  atabase P1.  P1 
35090 69 73 20 30 20 66 6f 72 20 22 6d 61 69 6e 22 2c  is 0 for "main",
350a0 20 61 6e 64 20 32 20 6f 72 20 6d 6f 72 65 0a 2a   and 2 or more.*
350b0 2a 20 66 6f 72 20 61 6e 20 61 74 74 61 63 68 65  * for an attache
350c0 64 20 64 61 74 61 62 61 73 65 2e 20 20 54 68 65  d database.  The
350d0 20 22 74 65 6d 70 22 20 64 61 74 61 62 61 73 65   "temp" database
350e0 20 6d 61 79 20 6e 6f 74 20 62 65 20 76 61 63 75   may not be vacu
350f0 75 6d 65 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  umed..*/.case OP
35100 5f 56 61 63 75 75 6d 3a 20 7b 0a 20 20 61 73 73  _Vacuum: {.  ass
35110 65 72 74 28 20 70 2d 3e 72 65 61 64 4f 6e 6c 79  ert( p->readOnly
35120 3d 3d 30 20 29 3b 0a 20 20 72 63 20 3d 20 73 71  ==0 );.  rc = sq
35130 6c 69 74 65 33 52 75 6e 56 61 63 75 75 6d 28 26  lite3RunVacuum(&
35140 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20  p->zErrMsg, db, 
35150 70 4f 70 2d 3e 70 31 29 3b 0a 20 20 69 66 28 20  pOp->p1);.  if( 
35160 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f  rc ) goto abort_
35170 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
35180 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a  break;.}.#endif.
35190 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51  .#if !defined(SQ
351a0 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 56 41  LITE_OMIT_AUTOVA
351b0 43 55 55 4d 29 0a 2f 2a 20 4f 70 63 6f 64 65 3a  CUUM)./* Opcode:
351c0 20 49 6e 63 72 56 61 63 75 75 6d 20 50 31 20 50   IncrVacuum P1 P
351d0 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 50 65  2 * * *.**.** Pe
351e0 72 66 6f 72 6d 20 61 20 73 69 6e 67 6c 65 20 73  rform a single s
351f0 74 65 70 20 6f 66 20 74 68 65 20 69 6e 63 72 65  tep of the incre
35200 6d 65 6e 74 61 6c 20 76 61 63 75 75 6d 20 70 72  mental vacuum pr
35210 6f 63 65 64 75 72 65 20 6f 6e 0a 2a 2a 20 74 68  ocedure on.** th
35220 65 20 50 31 20 64 61 74 61 62 61 73 65 2e 20 49  e P1 database. I
35230 66 20 74 68 65 20 76 61 63 75 75 6d 20 68 61 73  f the vacuum has
35240 20 66 69 6e 69 73 68 65 64 2c 20 6a 75 6d 70 20   finished, jump 
35250 74 6f 20 69 6e 73 74 72 75 63 74 69 6f 6e 0a 2a  to instruction.*
35260 2a 20 50 32 2e 20 4f 74 68 65 72 77 69 73 65 2c  * P2. Otherwise,
35270 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f   fall through to
35280 20 74 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75   the next instru
35290 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f  ction..*/.case O
352a0 50 5f 49 6e 63 72 56 61 63 75 75 6d 3a 20 7b 20  P_IncrVacuum: { 
352b0 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a         /* jump *
352c0 2f 0a 20 20 42 74 72 65 65 20 2a 70 42 74 3b 0a  /.  Btree *pBt;.
352d0 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
352e0 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31  p1>=0 && pOp->p1
352f0 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73  <db->nDb );.  as
35300 73 65 72 74 28 20 44 62 4d 61 73 6b 54 65 73 74  sert( DbMaskTest
35310 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b 2c 20 70  (p->btreeMask, p
35320 4f 70 2d 3e 70 31 29 20 29 3b 0a 20 20 61 73 73  Op->p1) );.  ass
35330 65 72 74 28 20 70 2d 3e 72 65 61 64 4f 6e 6c 79  ert( p->readOnly
35340 3d 3d 30 20 29 3b 0a 20 20 70 42 74 20 3d 20 64  ==0 );.  pBt = d
35350 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 31 5d 2e  b->aDb[pOp->p1].
35360 70 42 74 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69  pBt;.  rc = sqli
35370 74 65 33 42 74 72 65 65 49 6e 63 72 56 61 63 75  te3BtreeIncrVacu
35380 75 6d 28 70 42 74 29 3b 0a 20 20 56 64 62 65 42  um(pBt);.  VdbeB
35390 72 61 6e 63 68 54 61 6b 65 6e 28 72 63 3d 3d 53  ranchTaken(rc==S
353a0 51 4c 49 54 45 5f 44 4f 4e 45 2c 32 29 3b 0a 20  QLITE_DONE,2);. 
353b0 20 69 66 28 20 72 63 20 29 7b 0a 20 20 20 20 69   if( rc ){.    i
353c0 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 44 4f  f( rc!=SQLITE_DO
353d0 4e 45 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f  NE ) goto abort_
353e0 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
353f0 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b    rc = SQLITE_OK
35400 3b 0a 20 20 20 20 67 6f 74 6f 20 6a 75 6d 70 5f  ;.    goto jump_
35410 74 6f 5f 70 32 3b 0a 20 20 7d 0a 20 20 62 72 65  to_p2;.  }.  bre
35420 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a  ak;.}.#endif../*
35430 20 4f 70 63 6f 64 65 3a 20 45 78 70 69 72 65 20   Opcode: Expire 
35440 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a  P1 * * * *.**.**
35450 20 43 61 75 73 65 20 70 72 65 63 6f 6d 70 69 6c   Cause precompil
35460 65 64 20 73 74 61 74 65 6d 65 6e 74 73 20 74 6f  ed statements to
35470 20 65 78 70 69 72 65 2e 20 20 57 68 65 6e 20 61   expire.  When a
35480 6e 20 65 78 70 69 72 65 64 20 73 74 61 74 65 6d  n expired statem
35490 65 6e 74 0a 2a 2a 20 69 73 20 65 78 65 63 75 74  ent.** is execut
354a0 65 64 20 75 73 69 6e 67 20 73 71 6c 69 74 65 33  ed using sqlite3
354b0 5f 73 74 65 70 28 29 20 69 74 20 77 69 6c 6c 20  _step() it will 
354c0 65 69 74 68 65 72 20 61 75 74 6f 6d 61 74 69 63  either automatic
354d0 61 6c 6c 79 0a 2a 2a 20 72 65 70 72 65 70 61 72  ally.** reprepar
354e0 65 20 69 74 73 65 6c 66 20 28 69 66 20 69 74 20  e itself (if it 
354f0 77 61 73 20 6f 72 69 67 69 6e 61 6c 6c 79 20 63  was originally c
35500 72 65 61 74 65 64 20 75 73 69 6e 67 20 73 71 6c  reated using sql
35510 69 74 65 33 5f 70 72 65 70 61 72 65 5f 76 32 28  ite3_prepare_v2(
35520 29 29 0a 2a 2a 20 6f 72 20 69 74 20 77 69 6c 6c  )).** or it will
35530 20 66 61 69 6c 20 77 69 74 68 20 53 51 4c 49 54   fail with SQLIT
35540 45 5f 53 43 48 45 4d 41 2e 0a 2a 2a 20 0a 2a 2a  E_SCHEMA..** .**
35550 20 49 66 20 50 31 20 69 73 20 30 2c 20 74 68 65   If P1 is 0, the
35560 6e 20 61 6c 6c 20 53 51 4c 20 73 74 61 74 65 6d  n all SQL statem
35570 65 6e 74 73 20 62 65 63 6f 6d 65 20 65 78 70 69  ents become expi
35580 72 65 64 2e 20 49 66 20 50 31 20 69 73 20 6e 6f  red. If P1 is no
35590 6e 2d 7a 65 72 6f 2c 0a 2a 2a 20 74 68 65 6e 20  n-zero,.** then 
355a0 6f 6e 6c 79 20 74 68 65 20 63 75 72 72 65 6e 74  only the current
355b0 6c 79 20 65 78 65 63 75 74 69 6e 67 20 73 74 61  ly executing sta
355c0 74 65 6d 65 6e 74 20 69 73 20 65 78 70 69 72 65  tement is expire
355d0 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 45 78  d..*/.case OP_Ex
355e0 70 69 72 65 3a 20 7b 0a 20 20 69 66 28 20 21 70  pire: {.  if( !p
355f0 4f 70 2d 3e 70 31 20 29 7b 0a 20 20 20 20 73 71  Op->p1 ){.    sq
35600 6c 69 74 65 33 45 78 70 69 72 65 50 72 65 70 61  lite3ExpirePrepa
35610 72 65 64 53 74 61 74 65 6d 65 6e 74 73 28 64 62  redStatements(db
35620 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  );.  }else{.    
35630 70 2d 3e 65 78 70 69 72 65 64 20 3d 20 31 3b 0a  p->expired = 1;.
35640 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
35650 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
35660 4d 49 54 5f 53 48 41 52 45 44 5f 43 41 43 48 45  MIT_SHARED_CACHE
35670 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 54 61 62 6c  ./* Opcode: Tabl
35680 65 4c 6f 63 6b 20 50 31 20 50 32 20 50 33 20 50  eLock P1 P2 P3 P
35690 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  4 *.** Synopsis:
356a0 20 69 44 62 3d 50 31 20 72 6f 6f 74 3d 50 32 20   iDb=P1 root=P2 
356b0 77 72 69 74 65 3d 50 33 0a 2a 2a 0a 2a 2a 20 4f  write=P3.**.** O
356c0 62 74 61 69 6e 20 61 20 6c 6f 63 6b 20 6f 6e 20  btain a lock on 
356d0 61 20 70 61 72 74 69 63 75 6c 61 72 20 74 61 62  a particular tab
356e0 6c 65 2e 20 54 68 69 73 20 69 6e 73 74 72 75 63  le. This instruc
356f0 74 69 6f 6e 20 69 73 20 6f 6e 6c 79 20 75 73 65  tion is only use
35700 64 20 77 68 65 6e 0a 2a 2a 20 74 68 65 20 73 68  d when.** the sh
35710 61 72 65 64 2d 63 61 63 68 65 20 66 65 61 74 75  ared-cache featu
35720 72 65 20 69 73 20 65 6e 61 62 6c 65 64 2e 20 0a  re is enabled. .
35730 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 74 68 65 20  **.** P1 is the 
35740 69 6e 64 65 78 20 6f 66 20 74 68 65 20 64 61 74  index of the dat
35750 61 62 61 73 65 20 69 6e 20 73 71 6c 69 74 65 33  abase in sqlite3
35760 2e 61 44 62 5b 5d 20 6f 66 20 74 68 65 20 64 61  .aDb[] of the da
35770 74 61 62 61 73 65 0a 2a 2a 20 6f 6e 20 77 68 69  tabase.** on whi
35780 63 68 20 74 68 65 20 6c 6f 63 6b 20 69 73 20 61  ch the lock is a
35790 63 71 75 69 72 65 64 2e 20 20 41 20 72 65 61 64  cquired.  A read
357a0 6c 6f 63 6b 20 69 73 20 6f 62 74 61 69 6e 65 64  lock is obtained
357b0 20 69 66 20 50 33 3d 3d 30 20 6f 72 0a 2a 2a 20   if P3==0 or.** 
357c0 61 20 77 72 69 74 65 20 6c 6f 63 6b 20 69 66 20  a write lock if 
357d0 50 33 3d 3d 31 2e 0a 2a 2a 0a 2a 2a 20 50 32 20  P3==1..**.** P2 
357e0 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 72 6f 6f  contains the roo
357f0 74 2d 70 61 67 65 20 6f 66 20 74 68 65 20 74 61  t-page of the ta
35800 62 6c 65 20 74 6f 20 6c 6f 63 6b 2e 0a 2a 2a 0a  ble to lock..**.
35810 2a 2a 20 50 34 20 63 6f 6e 74 61 69 6e 73 20 61  ** P4 contains a
35820 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20   pointer to the 
35830 6e 61 6d 65 20 6f 66 20 74 68 65 20 74 61 62 6c  name of the tabl
35840 65 20 62 65 69 6e 67 20 6c 6f 63 6b 65 64 2e 20  e being locked. 
35850 54 68 69 73 20 69 73 20 6f 6e 6c 79 0a 2a 2a 20  This is only.** 
35860 75 73 65 64 20 74 6f 20 67 65 6e 65 72 61 74 65  used to generate
35870 20 61 6e 20 65 72 72 6f 72 20 6d 65 73 73 61 67   an error messag
35880 65 20 69 66 20 74 68 65 20 6c 6f 63 6b 20 63 61  e if the lock ca
35890 6e 6e 6f 74 20 62 65 20 6f 62 74 61 69 6e 65 64  nnot be obtained
358a0 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 54 61 62  ..*/.case OP_Tab
358b0 6c 65 4c 6f 63 6b 3a 20 7b 0a 20 20 75 38 20 69  leLock: {.  u8 i
358c0 73 57 72 69 74 65 4c 6f 63 6b 20 3d 20 28 75 38  sWriteLock = (u8
358d0 29 70 4f 70 2d 3e 70 33 3b 0a 20 20 69 66 28 20  )pOp->p3;.  if( 
358e0 69 73 57 72 69 74 65 4c 6f 63 6b 20 7c 7c 20 30  isWriteLock || 0
358f0 3d 3d 28 64 62 2d 3e 66 6c 61 67 73 26 53 51 4c  ==(db->flags&SQL
35900 49 54 45 5f 52 65 61 64 55 6e 63 6f 6d 6d 69 74  ITE_ReadUncommit
35910 29 20 29 7b 0a 20 20 20 20 69 6e 74 20 70 31 20  ) ){.    int p1 
35920 3d 20 70 4f 70 2d 3e 70 31 3b 20 0a 20 20 20 20  = pOp->p1; .    
35930 61 73 73 65 72 74 28 20 70 31 3e 3d 30 20 26 26  assert( p1>=0 &&
35940 20 70 31 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20   p1<db->nDb );. 
35950 20 20 20 61 73 73 65 72 74 28 20 44 62 4d 61 73     assert( DbMas
35960 6b 54 65 73 74 28 70 2d 3e 62 74 72 65 65 4d 61  kTest(p->btreeMa
35970 73 6b 2c 20 70 31 29 20 29 3b 0a 20 20 20 20 61  sk, p1) );.    a
35980 73 73 65 72 74 28 20 69 73 57 72 69 74 65 4c 6f  ssert( isWriteLo
35990 63 6b 3d 3d 30 20 7c 7c 20 69 73 57 72 69 74 65  ck==0 || isWrite
359a0 4c 6f 63 6b 3d 3d 31 20 29 3b 0a 20 20 20 20 72  Lock==1 );.    r
359b0 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
359c0 4c 6f 63 6b 54 61 62 6c 65 28 64 62 2d 3e 61 44  LockTable(db->aD
359d0 62 5b 70 31 5d 2e 70 42 74 2c 20 70 4f 70 2d 3e  b[p1].pBt, pOp->
359e0 70 32 2c 20 69 73 57 72 69 74 65 4c 6f 63 6b 29  p2, isWriteLock)
359f0 3b 0a 20 20 20 20 69 66 28 20 72 63 20 29 7b 0a  ;.    if( rc ){.
35a00 20 20 20 20 20 20 69 66 28 20 28 72 63 26 30 78        if( (rc&0x
35a10 46 46 29 3d 3d 53 51 4c 49 54 45 5f 4c 4f 43 4b  FF)==SQLITE_LOCK
35a20 45 44 20 29 7b 0a 20 20 20 20 20 20 20 20 63 6f  ED ){.        co
35a30 6e 73 74 20 63 68 61 72 20 2a 7a 20 3d 20 70 4f  nst char *z = pO
35a40 70 2d 3e 70 34 2e 7a 3b 0a 20 20 20 20 20 20 20  p->p4.z;.       
35a50 20 73 71 6c 69 74 65 33 56 64 62 65 45 72 72 6f   sqlite3VdbeErro
35a60 72 28 70 2c 20 22 64 61 74 61 62 61 73 65 20 74  r(p, "database t
35a70 61 62 6c 65 20 69 73 20 6c 6f 63 6b 65 64 3a 20  able is locked: 
35a80 25 73 22 2c 20 7a 29 3b 0a 20 20 20 20 20 20 7d  %s", z);.      }
35a90 0a 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72  .      goto abor
35aa0 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
35ab0 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61      }.  }.  brea
35ac0 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53  k;.}.#endif /* S
35ad0 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 48 41 52 45  QLITE_OMIT_SHARE
35ae0 44 5f 43 41 43 48 45 20 2a 2f 0a 0a 23 69 66 6e  D_CACHE */..#ifn
35af0 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
35b00 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f 2a 20  VIRTUALTABLE./* 
35b10 4f 70 63 6f 64 65 3a 20 56 42 65 67 69 6e 20 2a  Opcode: VBegin *
35b20 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20   * * P4 *.**.** 
35b30 50 34 20 6d 61 79 20 62 65 20 61 20 70 6f 69 6e  P4 may be a poin
35b40 74 65 72 20 74 6f 20 61 6e 20 73 71 6c 69 74 65  ter to an sqlite
35b50 33 5f 76 74 61 62 20 73 74 72 75 63 74 75 72 65  3_vtab structure
35b60 2e 20 49 66 20 73 6f 2c 20 63 61 6c 6c 20 74 68  . If so, call th
35b70 65 20 0a 2a 2a 20 78 42 65 67 69 6e 20 6d 65 74  e .** xBegin met
35b80 68 6f 64 20 66 6f 72 20 74 68 61 74 20 74 61 62  hod for that tab
35b90 6c 65 2e 0a 2a 2a 0a 2a 2a 20 41 6c 73 6f 2c 20  le..**.** Also, 
35ba0 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 50  whether or not P
35bb0 34 20 69 73 20 73 65 74 2c 20 63 68 65 63 6b 20  4 is set, check 
35bc0 74 68 61 74 20 74 68 69 73 20 69 73 20 6e 6f 74  that this is not
35bd0 20 62 65 69 6e 67 20 63 61 6c 6c 65 64 20 66 72   being called fr
35be0 6f 6d 0a 2a 2a 20 77 69 74 68 69 6e 20 61 20 63  om.** within a c
35bf0 61 6c 6c 62 61 63 6b 20 74 6f 20 61 20 76 69 72  allback to a vir
35c00 74 75 61 6c 20 74 61 62 6c 65 20 78 53 79 6e 63  tual table xSync
35c10 28 29 20 6d 65 74 68 6f 64 2e 20 49 66 20 69 74  () method. If it
35c20 20 69 73 2c 20 74 68 65 20 65 72 72 6f 72 0a 2a   is, the error.*
35c30 2a 20 63 6f 64 65 20 77 69 6c 6c 20 62 65 20 73  * code will be s
35c40 65 74 20 74 6f 20 53 51 4c 49 54 45 5f 4c 4f 43  et to SQLITE_LOC
35c50 4b 45 44 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  KED..*/.case OP_
35c60 56 42 65 67 69 6e 3a 20 7b 0a 20 20 56 54 61 62  VBegin: {.  VTab
35c70 6c 65 20 2a 70 56 54 61 62 3b 0a 20 20 70 56 54  le *pVTab;.  pVT
35c80 61 62 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 56 74  ab = pOp->p4.pVt
35c90 61 62 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74  ab;.  rc = sqlit
35ca0 65 33 56 74 61 62 42 65 67 69 6e 28 64 62 2c 20  e3VtabBegin(db, 
35cb0 70 56 54 61 62 29 3b 0a 20 20 69 66 28 20 70 56  pVTab);.  if( pV
35cc0 54 61 62 20 29 20 73 71 6c 69 74 65 33 56 74 61  Tab ) sqlite3Vta
35cd0 62 49 6d 70 6f 72 74 45 72 72 6d 73 67 28 70 2c  bImportErrmsg(p,
35ce0 20 70 56 54 61 62 2d 3e 70 56 74 61 62 29 3b 0a   pVTab->pVtab);.
35cf0 20 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20    if( rc ) goto 
35d00 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
35d10 6f 72 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23  or;.  break;.}.#
35d20 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f  endif /* SQLITE_
35d30 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c  OMIT_VIRTUALTABL
35d40 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51  E */..#ifndef SQ
35d50 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41  LITE_OMIT_VIRTUA
35d60 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65  LTABLE./* Opcode
35d70 3a 20 56 43 72 65 61 74 65 20 50 31 20 50 32 20  : VCreate P1 P2 
35d80 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 50 32 20 69  * * *.**.** P2 i
35d90 73 20 61 20 72 65 67 69 73 74 65 72 20 74 68 61  s a register tha
35da0 74 20 68 6f 6c 64 73 20 74 68 65 20 6e 61 6d 65  t holds the name
35db0 20 6f 66 20 61 20 76 69 72 74 75 61 6c 20 74 61   of a virtual ta
35dc0 62 6c 65 20 69 6e 20 64 61 74 61 62 61 73 65 20  ble in database 
35dd0 0a 2a 2a 20 50 31 2e 20 43 61 6c 6c 20 74 68 65  .** P1. Call the
35de0 20 78 43 72 65 61 74 65 20 6d 65 74 68 6f 64 20   xCreate method 
35df0 66 6f 72 20 74 68 61 74 20 74 61 62 6c 65 2e 0a  for that table..
35e00 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 43 72 65 61  */.case OP_VCrea
35e10 74 65 3a 20 7b 0a 20 20 4d 65 6d 20 73 4d 65 6d  te: {.  Mem sMem
35e20 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46 6f  ;          /* Fo
35e30 72 20 73 74 6f 72 69 6e 67 20 74 68 65 20 72 65  r storing the re
35e40 63 6f 72 64 20 62 65 69 6e 67 20 64 65 63 6f 64  cord being decod
35e50 65 64 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68  ed */.  const ch
35e60 61 72 20 2a 7a 54 61 62 3b 20 20 2f 2a 20 4e 61  ar *zTab;  /* Na
35e70 6d 65 20 6f 66 20 74 68 65 20 76 69 72 74 75 61  me of the virtua
35e80 6c 20 74 61 62 6c 65 20 2a 2f 0a 0a 20 20 6d 65  l table */..  me
35e90 6d 73 65 74 28 26 73 4d 65 6d 2c 20 30 2c 20 73  mset(&sMem, 0, s
35ea0 69 7a 65 6f 66 28 73 4d 65 6d 29 29 3b 0a 20 20  izeof(sMem));.  
35eb0 73 4d 65 6d 2e 64 62 20 3d 20 64 62 3b 0a 20 20  sMem.db = db;.  
35ec0 2f 2a 20 42 65 63 61 75 73 65 20 50 32 20 69 73  /* Because P2 is
35ed0 20 61 6c 77 61 79 73 20 61 20 73 74 61 74 69 63   always a static
35ee0 20 73 74 72 69 6e 67 2c 20 69 74 20 69 73 20 69   string, it is i
35ef0 6d 70 6f 73 73 69 62 6c 65 20 66 6f 72 20 74 68  mpossible for th
35f00 65 0a 20 20 2a 2a 20 73 71 6c 69 74 65 33 56 64  e.  ** sqlite3Vd
35f10 62 65 4d 65 6d 43 6f 70 79 28 29 20 74 6f 20 66  beMemCopy() to f
35f20 61 69 6c 20 2a 2f 0a 20 20 61 73 73 65 72 74 28  ail */.  assert(
35f30 20 28 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 2e   (aMem[pOp->p2].
35f40 66 6c 61 67 73 20 26 20 4d 45 4d 5f 53 74 72 29  flags & MEM_Str)
35f50 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  !=0 );.  assert(
35f60 20 28 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 2e   (aMem[pOp->p2].
35f70 66 6c 61 67 73 20 26 20 4d 45 4d 5f 53 74 61 74  flags & MEM_Stat
35f80 69 63 29 21 3d 30 20 29 3b 0a 20 20 72 63 20 3d  ic)!=0 );.  rc =
35f90 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 43   sqlite3VdbeMemC
35fa0 6f 70 79 28 26 73 4d 65 6d 2c 20 26 61 4d 65 6d  opy(&sMem, &aMem
35fb0 5b 70 4f 70 2d 3e 70 32 5d 29 3b 0a 20 20 61 73  [pOp->p2]);.  as
35fc0 73 65 72 74 28 20 72 63 3d 3d 53 51 4c 49 54 45  sert( rc==SQLITE
35fd0 5f 4f 4b 20 29 3b 0a 20 20 7a 54 61 62 20 3d 20  _OK );.  zTab = 
35fe0 28 63 6f 6e 73 74 20 63 68 61 72 2a 29 73 71 6c  (const char*)sql
35ff0 69 74 65 33 5f 76 61 6c 75 65 5f 74 65 78 74 28  ite3_value_text(
36000 26 73 4d 65 6d 29 3b 0a 20 20 61 73 73 65 72 74  &sMem);.  assert
36010 28 20 7a 54 61 62 20 7c 7c 20 64 62 2d 3e 6d 61  ( zTab || db->ma
36020 6c 6c 6f 63 46 61 69 6c 65 64 20 29 3b 0a 20 20  llocFailed );.  
36030 69 66 28 20 7a 54 61 62 20 29 7b 0a 20 20 20 20  if( zTab ){.    
36040 72 63 20 3d 20 73 71 6c 69 74 65 33 56 74 61 62  rc = sqlite3Vtab
36050 43 61 6c 6c 43 72 65 61 74 65 28 64 62 2c 20 70  CallCreate(db, p
36060 4f 70 2d 3e 70 31 2c 20 7a 54 61 62 2c 20 26 70  Op->p1, zTab, &p
36070 2d 3e 7a 45 72 72 4d 73 67 29 3b 0a 20 20 7d 0a  ->zErrMsg);.  }.
36080 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
36090 52 65 6c 65 61 73 65 28 26 73 4d 65 6d 29 3b 0a  Release(&sMem);.
360a0 20 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20    if( rc ) goto 
360b0 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
360c0 6f 72 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23  or;.  break;.}.#
360d0 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f  endif /* SQLITE_
360e0 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c  OMIT_VIRTUALTABL
360f0 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51  E */..#ifndef SQ
36100 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41  LITE_OMIT_VIRTUA
36110 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65  LTABLE./* Opcode
36120 3a 20 56 44 65 73 74 72 6f 79 20 50 31 20 2a 20  : VDestroy P1 * 
36130 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 50 34 20  * P4 *.**.** P4 
36140 69 73 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 61  is the name of a
36150 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 69   virtual table i
36160 6e 20 64 61 74 61 62 61 73 65 20 50 31 2e 20 20  n database P1.  
36170 43 61 6c 6c 20 74 68 65 20 78 44 65 73 74 72 6f  Call the xDestro
36180 79 20 6d 65 74 68 6f 64 0a 2a 2a 20 6f 66 20 74  y method.** of t
36190 68 61 74 20 74 61 62 6c 65 2e 0a 2a 2f 0a 63 61  hat table..*/.ca
361a0 73 65 20 4f 50 5f 56 44 65 73 74 72 6f 79 3a 20  se OP_VDestroy: 
361b0 7b 0a 20 20 64 62 2d 3e 6e 56 44 65 73 74 72 6f  {.  db->nVDestro
361c0 79 2b 2b 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69  y++;.  rc = sqli
361d0 74 65 33 56 74 61 62 43 61 6c 6c 44 65 73 74 72  te3VtabCallDestr
361e0 6f 79 28 64 62 2c 20 70 4f 70 2d 3e 70 31 2c 20  oy(db, pOp->p1, 
361f0 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20 64 62  pOp->p4.z);.  db
36200 2d 3e 6e 56 44 65 73 74 72 6f 79 2d 2d 3b 0a 20  ->nVDestroy--;. 
36210 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61   if( rc ) goto a
36220 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
36230 72 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65  r;.  break;.}.#e
36240 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f  ndif /* SQLITE_O
36250 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45  MIT_VIRTUALTABLE
36260 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c   */..#ifndef SQL
36270 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c  ITE_OMIT_VIRTUAL
36280 54 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a  TABLE./* Opcode:
36290 20 56 4f 70 65 6e 20 50 31 20 2a 20 2a 20 50 34   VOpen P1 * * P4
362a0 20 2a 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61   *.**.** P4 is a
362b0 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 76 69   pointer to a vi
362c0 72 74 75 61 6c 20 74 61 62 6c 65 20 6f 62 6a 65  rtual table obje
362d0 63 74 2c 20 61 6e 20 73 71 6c 69 74 65 33 5f 76  ct, an sqlite3_v
362e0 74 61 62 20 73 74 72 75 63 74 75 72 65 2e 0a 2a  tab structure..*
362f0 2a 20 50 31 20 69 73 20 61 20 63 75 72 73 6f 72  * P1 is a cursor
36300 20 6e 75 6d 62 65 72 2e 20 20 54 68 69 73 20 6f   number.  This o
36310 70 63 6f 64 65 20 6f 70 65 6e 73 20 61 20 63 75  pcode opens a cu
36320 72 73 6f 72 20 74 6f 20 74 68 65 20 76 69 72 74  rsor to the virt
36330 75 61 6c 0a 2a 2a 20 74 61 62 6c 65 20 61 6e 64  ual.** table and
36340 20 73 74 6f 72 65 73 20 74 68 61 74 20 63 75 72   stores that cur
36350 73 6f 72 20 69 6e 20 50 31 2e 0a 2a 2f 0a 63 61  sor in P1..*/.ca
36360 73 65 20 4f 50 5f 56 4f 70 65 6e 3a 20 7b 0a 20  se OP_VOpen: {. 
36370 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 75   VdbeCursor *pCu
36380 72 3b 0a 20 20 73 71 6c 69 74 65 33 5f 76 74 61  r;.  sqlite3_vta
36390 62 5f 63 75 72 73 6f 72 20 2a 70 56 43 75 72 3b  b_cursor *pVCur;
363a0 0a 20 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20  .  sqlite3_vtab 
363b0 2a 70 56 74 61 62 3b 0a 20 20 63 6f 6e 73 74 20  *pVtab;.  const 
363c0 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20 2a  sqlite3_module *
363d0 70 4d 6f 64 75 6c 65 3b 0a 0a 20 20 61 73 73 65  pModule;..  asse
363e0 72 74 28 20 70 2d 3e 62 49 73 52 65 61 64 65 72  rt( p->bIsReader
363f0 20 29 3b 0a 20 20 70 43 75 72 20 3d 20 30 3b 0a   );.  pCur = 0;.
36400 20 20 70 56 43 75 72 20 3d 20 30 3b 0a 20 20 70    pVCur = 0;.  p
36410 56 74 61 62 20 3d 20 70 4f 70 2d 3e 70 34 2e 70  Vtab = pOp->p4.p
36420 56 74 61 62 2d 3e 70 56 74 61 62 3b 0a 20 20 69  Vtab->pVtab;.  i
36430 66 28 20 70 56 74 61 62 3d 3d 30 20 7c 7c 20 4e  f( pVtab==0 || N
36440 45 56 45 52 28 70 56 74 61 62 2d 3e 70 4d 6f 64  EVER(pVtab->pMod
36450 75 6c 65 3d 3d 30 29 20 29 7b 0a 20 20 20 20 72  ule==0) ){.    r
36460 63 20 3d 20 53 51 4c 49 54 45 5f 4c 4f 43 4b 45  c = SQLITE_LOCKE
36470 44 3b 0a 20 20 20 20 67 6f 74 6f 20 61 62 6f 72  D;.    goto abor
36480 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
36490 20 20 7d 0a 20 20 70 4d 6f 64 75 6c 65 20 3d 20    }.  pModule = 
364a0 70 56 74 61 62 2d 3e 70 4d 6f 64 75 6c 65 3b 0a  pVtab->pModule;.
364b0 20 20 72 63 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e    rc = pModule->
364c0 78 4f 70 65 6e 28 70 56 74 61 62 2c 20 26 70 56  xOpen(pVtab, &pV
364d0 43 75 72 29 3b 0a 20 20 73 71 6c 69 74 65 33 56  Cur);.  sqlite3V
364e0 74 61 62 49 6d 70 6f 72 74 45 72 72 6d 73 67 28  tabImportErrmsg(
364f0 70 2c 20 70 56 74 61 62 29 3b 0a 20 20 69 66 28  p, pVtab);.  if(
36500 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74   rc ) goto abort
36510 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 0a  _due_to_error;..
36520 20 20 2f 2a 20 49 6e 69 74 69 61 6c 69 7a 65 20    /* Initialize 
36530 73 71 6c 69 74 65 33 5f 76 74 61 62 5f 63 75 72  sqlite3_vtab_cur
36540 73 6f 72 20 62 61 73 65 20 63 6c 61 73 73 20 2a  sor base class *
36550 2f 0a 20 20 70 56 43 75 72 2d 3e 70 56 74 61 62  /.  pVCur->pVtab
36560 20 3d 20 70 56 74 61 62 3b 0a 0a 20 20 2f 2a 20   = pVtab;..  /* 
36570 49 6e 69 74 69 61 6c 69 7a 65 20 76 64 62 65 20  Initialize vdbe 
36580 63 75 72 73 6f 72 20 6f 62 6a 65 63 74 20 2a 2f  cursor object */
36590 0a 20 20 70 43 75 72 20 3d 20 61 6c 6c 6f 63 61  .  pCur = alloca
365a0 74 65 43 75 72 73 6f 72 28 70 2c 20 70 4f 70 2d  teCursor(p, pOp-
365b0 3e 70 31 2c 20 30 2c 20 2d 31 2c 20 43 55 52 54  >p1, 0, -1, CURT
365c0 59 50 45 5f 56 54 41 42 29 3b 0a 20 20 69 66 28  YPE_VTAB);.  if(
365d0 20 70 43 75 72 20 29 7b 0a 20 20 20 20 70 43 75   pCur ){.    pCu
365e0 72 2d 3e 75 63 2e 70 56 43 75 72 20 3d 20 70 56  r->uc.pVCur = pV
365f0 43 75 72 3b 0a 20 20 20 20 70 56 74 61 62 2d 3e  Cur;.    pVtab->
36600 6e 52 65 66 2b 2b 3b 0a 20 20 7d 65 6c 73 65 7b  nRef++;.  }else{
36610 0a 20 20 20 20 61 73 73 65 72 74 28 20 64 62 2d  .    assert( db-
36620 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 29 3b  >mallocFailed );
36630 0a 20 20 20 20 70 4d 6f 64 75 6c 65 2d 3e 78 43  .    pModule->xC
36640 6c 6f 73 65 28 70 56 43 75 72 29 3b 0a 20 20 20  lose(pVCur);.   
36650 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20   goto no_mem;.  
36660 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e  }.  break;.}.#en
36670 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d  dif /* SQLITE_OM
36680 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 20  IT_VIRTUALTABLE 
36690 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  */..#ifndef SQLI
366a0 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
366b0 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ABLE./* Opcode: 
366c0 56 46 69 6c 74 65 72 20 50 31 20 50 32 20 50 33  VFilter P1 P2 P3
366d0 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69   P4 *.** Synopsi
366e0 73 3a 20 69 70 6c 61 6e 3d 72 5b 50 33 5d 20 7a  s: iplan=r[P3] z
366f0 70 6c 61 6e 3d 27 50 34 27 0a 2a 2a 0a 2a 2a 20  plan='P4'.**.** 
36700 50 31 20 69 73 20 61 20 63 75 72 73 6f 72 20 6f  P1 is a cursor o
36710 70 65 6e 65 64 20 75 73 69 6e 67 20 56 4f 70 65  pened using VOpe
36720 6e 2e 20 20 50 32 20 69 73 20 61 6e 20 61 64 64  n.  P2 is an add
36730 72 65 73 73 20 74 6f 20 6a 75 6d 70 20 74 6f 20  ress to jump to 
36740 69 66 0a 2a 2a 20 74 68 65 20 66 69 6c 74 65 72  if.** the filter
36750 65 64 20 72 65 73 75 6c 74 20 73 65 74 20 69 73  ed result set is
36760 20 65 6d 70 74 79 2e 0a 2a 2a 0a 2a 2a 20 50 34   empty..**.** P4
36770 20 69 73 20 65 69 74 68 65 72 20 4e 55 4c 4c 20   is either NULL 
36780 6f 72 20 61 20 73 74 72 69 6e 67 20 74 68 61 74  or a string that
36790 20 77 61 73 20 67 65 6e 65 72 61 74 65 64 20 62   was generated b
367a0 79 20 74 68 65 20 78 42 65 73 74 49 6e 64 65 78  y the xBestIndex
367b0 0a 2a 2a 20 6d 65 74 68 6f 64 20 6f 66 20 74 68  .** method of th
367c0 65 20 6d 6f 64 75 6c 65 2e 20 20 54 68 65 20 69  e module.  The i
367d0 6e 74 65 72 70 72 65 74 61 74 69 6f 6e 20 6f 66  nterpretation of
367e0 20 74 68 65 20 50 34 20 73 74 72 69 6e 67 20 69   the P4 string i
367f0 73 20 6c 65 66 74 0a 2a 2a 20 74 6f 20 74 68 65  s left.** to the
36800 20 6d 6f 64 75 6c 65 20 69 6d 70 6c 65 6d 65 6e   module implemen
36810 74 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68  tation..**.** Th
36820 69 73 20 6f 70 63 6f 64 65 20 69 6e 76 6f 6b 65  is opcode invoke
36830 73 20 74 68 65 20 78 46 69 6c 74 65 72 20 6d 65  s the xFilter me
36840 74 68 6f 64 20 6f 6e 20 74 68 65 20 76 69 72 74  thod on the virt
36850 75 61 6c 20 74 61 62 6c 65 20 73 70 65 63 69 66  ual table specif
36860 69 65 64 0a 2a 2a 20 62 79 20 50 31 2e 20 20 54  ied.** by P1.  T
36870 68 65 20 69 6e 74 65 67 65 72 20 71 75 65 72 79  he integer query
36880 20 70 6c 61 6e 20 70 61 72 61 6d 65 74 65 72 20   plan parameter 
36890 74 6f 20 78 46 69 6c 74 65 72 20 69 73 20 73 74  to xFilter is st
368a0 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74 65 72  ored in register
368b0 0a 2a 2a 20 50 33 2e 20 52 65 67 69 73 74 65 72  .** P3. Register
368c0 20 50 33 2b 31 20 73 74 6f 72 65 73 20 74 68 65   P3+1 stores the
368d0 20 61 72 67 63 20 70 61 72 61 6d 65 74 65 72 20   argc parameter 
368e0 74 6f 20 62 65 20 70 61 73 73 65 64 20 74 6f 20  to be passed to 
368f0 74 68 65 0a 2a 2a 20 78 46 69 6c 74 65 72 20 6d  the.** xFilter m
36900 65 74 68 6f 64 2e 20 52 65 67 69 73 74 65 72 73  ethod. Registers
36910 20 50 33 2b 32 2e 2e 50 33 2b 31 2b 61 72 67 63   P3+2..P3+1+argc
36920 20 61 72 65 20 74 68 65 20 61 72 67 63 0a 2a 2a   are the argc.**
36930 20 61 64 64 69 74 69 6f 6e 61 6c 20 70 61 72 61   additional para
36940 6d 65 74 65 72 73 20 77 68 69 63 68 20 61 72 65  meters which are
36950 20 70 61 73 73 65 64 20 74 6f 0a 2a 2a 20 78 46   passed to.** xF
36960 69 6c 74 65 72 20 61 73 20 61 72 67 76 2e 20 52  ilter as argv. R
36970 65 67 69 73 74 65 72 20 50 33 2b 32 20 62 65 63  egister P3+2 bec
36980 6f 6d 65 73 20 61 72 67 76 5b 30 5d 20 77 68 65  omes argv[0] whe
36990 6e 20 70 61 73 73 65 64 20 74 6f 20 78 46 69 6c  n passed to xFil
369a0 74 65 72 2e 0a 2a 2a 0a 2a 2a 20 41 20 6a 75 6d  ter..**.** A jum
369b0 70 20 69 73 20 6d 61 64 65 20 74 6f 20 50 32 20  p is made to P2 
369c0 69 66 20 74 68 65 20 72 65 73 75 6c 74 20 73 65  if the result se
369d0 74 20 61 66 74 65 72 20 66 69 6c 74 65 72 69 6e  t after filterin
369e0 67 20 77 6f 75 6c 64 20 62 65 20 65 6d 70 74 79  g would be empty
369f0 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 46 69  ..*/.case OP_VFi
36a00 6c 74 65 72 3a 20 7b 20 20 20 2f 2a 20 6a 75 6d  lter: {   /* jum
36a10 70 20 2a 2f 0a 20 20 69 6e 74 20 6e 41 72 67 3b  p */.  int nArg;
36a20 0a 20 20 69 6e 74 20 69 51 75 65 72 79 3b 0a 20  .  int iQuery;. 
36a30 20 63 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d   const sqlite3_m
36a40 6f 64 75 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b 0a  odule *pModule;.
36a50 20 20 4d 65 6d 20 2a 70 51 75 65 72 79 3b 0a 20    Mem *pQuery;. 
36a60 20 4d 65 6d 20 2a 70 41 72 67 63 3b 0a 20 20 73   Mem *pArgc;.  s
36a70 71 6c 69 74 65 33 5f 76 74 61 62 5f 63 75 72 73  qlite3_vtab_curs
36a80 6f 72 20 2a 70 56 43 75 72 3b 0a 20 20 73 71 6c  or *pVCur;.  sql
36a90 69 74 65 33 5f 76 74 61 62 20 2a 70 56 74 61 62  ite3_vtab *pVtab
36aa0 3b 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a  ;.  VdbeCursor *
36ab0 70 43 75 72 3b 0a 20 20 69 6e 74 20 72 65 73 3b  pCur;.  int res;
36ac0 0a 20 20 69 6e 74 20 69 3b 0a 20 20 4d 65 6d 20  .  int i;.  Mem 
36ad0 2a 2a 61 70 41 72 67 3b 0a 0a 20 20 70 51 75 65  **apArg;..  pQue
36ae0 72 79 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  ry = &aMem[pOp->
36af0 70 33 5d 3b 0a 20 20 70 41 72 67 63 20 3d 20 26  p3];.  pArgc = &
36b00 70 51 75 65 72 79 5b 31 5d 3b 0a 20 20 70 43 75  pQuery[1];.  pCu
36b10 72 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70  r = p->apCsr[pOp
36b20 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p1];.  assert(
36b30 20 6d 65 6d 49 73 56 61 6c 69 64 28 70 51 75 65   memIsValid(pQue
36b40 72 79 29 20 29 3b 0a 20 20 52 45 47 49 53 54 45  ry) );.  REGISTE
36b50 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 33 2c  R_TRACE(pOp->p3,
36b60 20 70 51 75 65 72 79 29 3b 0a 20 20 61 73 73 65   pQuery);.  asse
36b70 72 74 28 20 70 43 75 72 2d 3e 65 43 75 72 54 79  rt( pCur->eCurTy
36b80 70 65 3d 3d 43 55 52 54 59 50 45 5f 56 54 41 42  pe==CURTYPE_VTAB
36b90 20 29 3b 0a 20 20 70 56 43 75 72 20 3d 20 70 43   );.  pVCur = pC
36ba0 75 72 2d 3e 75 63 2e 70 56 43 75 72 3b 0a 20 20  ur->uc.pVCur;.  
36bb0 70 56 74 61 62 20 3d 20 70 56 43 75 72 2d 3e 70  pVtab = pVCur->p
36bc0 56 74 61 62 3b 0a 20 20 70 4d 6f 64 75 6c 65 20  Vtab;.  pModule 
36bd0 3d 20 70 56 74 61 62 2d 3e 70 4d 6f 64 75 6c 65  = pVtab->pModule
36be0 3b 0a 0a 20 20 2f 2a 20 47 72 61 62 20 74 68 65  ;..  /* Grab the
36bf0 20 69 6e 64 65 78 20 6e 75 6d 62 65 72 20 61 6e   index number an
36c00 64 20 61 72 67 63 20 70 61 72 61 6d 65 74 65 72  d argc parameter
36c10 73 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 28  s */.  assert( (
36c20 70 51 75 65 72 79 2d 3e 66 6c 61 67 73 26 4d 45  pQuery->flags&ME
36c30 4d 5f 49 6e 74 29 21 3d 30 20 26 26 20 70 41 72  M_Int)!=0 && pAr
36c40 67 63 2d 3e 66 6c 61 67 73 3d 3d 4d 45 4d 5f 49  gc->flags==MEM_I
36c50 6e 74 20 29 3b 0a 20 20 6e 41 72 67 20 3d 20 28  nt );.  nArg = (
36c60 69 6e 74 29 70 41 72 67 63 2d 3e 75 2e 69 3b 0a  int)pArgc->u.i;.
36c70 20 20 69 51 75 65 72 79 20 3d 20 28 69 6e 74 29    iQuery = (int)
36c80 70 51 75 65 72 79 2d 3e 75 2e 69 3b 0a 0a 20 20  pQuery->u.i;..  
36c90 2f 2a 20 49 6e 76 6f 6b 65 20 74 68 65 20 78 46  /* Invoke the xF
36ca0 69 6c 74 65 72 20 6d 65 74 68 6f 64 20 2a 2f 0a  ilter method */.
36cb0 20 20 72 65 73 20 3d 20 30 3b 0a 20 20 61 70 41    res = 0;.  apA
36cc0 72 67 20 3d 20 70 2d 3e 61 70 41 72 67 3b 0a 20  rg = p->apArg;. 
36cd0 20 66 6f 72 28 69 20 3d 20 30 3b 20 69 3c 6e 41   for(i = 0; i<nA
36ce0 72 67 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 61 70  rg; i++){.    ap
36cf0 41 72 67 5b 69 5d 20 3d 20 26 70 41 72 67 63 5b  Arg[i] = &pArgc[
36d00 69 2b 31 5d 3b 0a 20 20 7d 0a 20 20 72 63 20 3d  i+1];.  }.  rc =
36d10 20 70 4d 6f 64 75 6c 65 2d 3e 78 46 69 6c 74 65   pModule->xFilte
36d20 72 28 70 56 43 75 72 2c 20 69 51 75 65 72 79 2c  r(pVCur, iQuery,
36d30 20 70 4f 70 2d 3e 70 34 2e 7a 2c 20 6e 41 72 67   pOp->p4.z, nArg
36d40 2c 20 61 70 41 72 67 29 3b 0a 20 20 73 71 6c 69  , apArg);.  sqli
36d50 74 65 33 56 74 61 62 49 6d 70 6f 72 74 45 72 72  te3VtabImportErr
36d60 6d 73 67 28 70 2c 20 70 56 74 61 62 29 3b 0a 20  msg(p, pVtab);. 
36d70 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61   if( rc ) goto a
36d80 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
36d90 72 3b 0a 20 20 72 65 73 20 3d 20 70 4d 6f 64 75  r;.  res = pModu
36da0 6c 65 2d 3e 78 45 6f 66 28 70 56 43 75 72 29 3b  le->xEof(pVCur);
36db0 0a 20 20 70 43 75 72 2d 3e 6e 75 6c 6c 52 6f 77  .  pCur->nullRow
36dc0 20 3d 20 30 3b 0a 20 20 56 64 62 65 42 72 61 6e   = 0;.  VdbeBran
36dd0 63 68 54 61 6b 65 6e 28 72 65 73 21 3d 30 2c 32  chTaken(res!=0,2
36de0 29 3b 0a 20 20 69 66 28 20 72 65 73 20 29 20 67  );.  if( res ) g
36df0 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a  oto jump_to_p2;.
36e00 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69    break;.}.#endi
36e10 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54  f /* SQLITE_OMIT
36e20 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 20 2a 2f  _VIRTUALTABLE */
36e30 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
36e40 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
36e50 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 43  LE./* Opcode: VC
36e60 6f 6c 75 6d 6e 20 50 31 20 50 32 20 50 33 20 2a  olumn P1 P2 P3 *
36e70 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
36e80 72 5b 50 33 5d 3d 76 63 6f 6c 75 6d 6e 28 50 32  r[P3]=vcolumn(P2
36e90 29 0a 2a 2a 0a 2a 2a 20 53 74 6f 72 65 20 74 68  ).**.** Store th
36ea0 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 50  e value of the P
36eb0 32 2d 74 68 20 63 6f 6c 75 6d 6e 20 6f 66 0a 2a  2-th column of.*
36ec0 2a 20 74 68 65 20 72 6f 77 20 6f 66 20 74 68 65  * the row of the
36ed0 20 76 69 72 74 75 61 6c 2d 74 61 62 6c 65 20 74   virtual-table t
36ee0 68 61 74 20 74 68 65 20 0a 2a 2a 20 50 31 20 63  hat the .** P1 c
36ef0 75 72 73 6f 72 20 69 73 20 70 6f 69 6e 74 69 6e  ursor is pointin
36f00 67 20 74 6f 20 69 6e 74 6f 20 72 65 67 69 73 74  g to into regist
36f10 65 72 20 50 33 2e 0a 2a 2f 0a 63 61 73 65 20 4f  er P3..*/.case O
36f20 50 5f 56 43 6f 6c 75 6d 6e 3a 20 7b 0a 20 20 73  P_VColumn: {.  s
36f30 71 6c 69 74 65 33 5f 76 74 61 62 20 2a 70 56 74  qlite3_vtab *pVt
36f40 61 62 3b 0a 20 20 63 6f 6e 73 74 20 73 71 6c 69  ab;.  const sqli
36f50 74 65 33 5f 6d 6f 64 75 6c 65 20 2a 70 4d 6f 64  te3_module *pMod
36f60 75 6c 65 3b 0a 20 20 4d 65 6d 20 2a 70 44 65 73  ule;.  Mem *pDes
36f70 74 3b 0a 20 20 73 71 6c 69 74 65 33 5f 63 6f 6e  t;.  sqlite3_con
36f80 74 65 78 74 20 73 43 6f 6e 74 65 78 74 3b 0a 0a  text sContext;..
36f90 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43    VdbeCursor *pC
36fa0 75 72 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f  ur = p->apCsr[pO
36fb0 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74  p->p1];.  assert
36fc0 28 20 70 43 75 72 2d 3e 65 43 75 72 54 79 70 65  ( pCur->eCurType
36fd0 3d 3d 43 55 52 54 59 50 45 5f 56 54 41 42 20 29  ==CURTYPE_VTAB )
36fe0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
36ff0 3e 70 33 3e 30 20 26 26 20 70 4f 70 2d 3e 70 33  >p3>0 && pOp->p3
37000 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70  <=(p->nMem+1 - p
37010 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20  ->nCursor) );.  
37020 70 44 65 73 74 20 3d 20 26 61 4d 65 6d 5b 70 4f  pDest = &aMem[pO
37030 70 2d 3e 70 33 5d 3b 0a 20 20 6d 65 6d 41 62 6f  p->p3];.  memAbo
37040 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 44  utToChange(p, pD
37050 65 73 74 29 3b 0a 20 20 69 66 28 20 70 43 75 72  est);.  if( pCur
37060 2d 3e 6e 75 6c 6c 52 6f 77 20 29 7b 0a 20 20 20  ->nullRow ){.   
37070 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53   sqlite3VdbeMemS
37080 65 74 4e 75 6c 6c 28 70 44 65 73 74 29 3b 0a 20  etNull(pDest);. 
37090 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 20 20     break;.  }.  
370a0 70 56 74 61 62 20 3d 20 70 43 75 72 2d 3e 75 63  pVtab = pCur->uc
370b0 2e 70 56 43 75 72 2d 3e 70 56 74 61 62 3b 0a 20  .pVCur->pVtab;. 
370c0 20 70 4d 6f 64 75 6c 65 20 3d 20 70 56 74 61 62   pModule = pVtab
370d0 2d 3e 70 4d 6f 64 75 6c 65 3b 0a 20 20 61 73 73  ->pModule;.  ass
370e0 65 72 74 28 20 70 4d 6f 64 75 6c 65 2d 3e 78 43  ert( pModule->xC
370f0 6f 6c 75 6d 6e 20 29 3b 0a 20 20 6d 65 6d 73 65  olumn );.  memse
37100 74 28 26 73 43 6f 6e 74 65 78 74 2c 20 30 2c 20  t(&sContext, 0, 
37110 73 69 7a 65 6f 66 28 73 43 6f 6e 74 65 78 74 29  sizeof(sContext)
37120 29 3b 0a 20 20 73 43 6f 6e 74 65 78 74 2e 70 4f  );.  sContext.pO
37130 75 74 20 3d 20 70 44 65 73 74 3b 0a 20 20 4d 65  ut = pDest;.  Me
37140 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70 44 65  mSetTypeFlag(pDe
37150 73 74 2c 20 4d 45 4d 5f 4e 75 6c 6c 29 3b 0a 20  st, MEM_Null);. 
37160 20 72 63 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78   rc = pModule->x
37170 43 6f 6c 75 6d 6e 28 70 43 75 72 2d 3e 75 63 2e  Column(pCur->uc.
37180 70 56 43 75 72 2c 20 26 73 43 6f 6e 74 65 78 74  pVCur, &sContext
37190 2c 20 70 4f 70 2d 3e 70 32 29 3b 0a 20 20 73 71  , pOp->p2);.  sq
371a0 6c 69 74 65 33 56 74 61 62 49 6d 70 6f 72 74 45  lite3VtabImportE
371b0 72 72 6d 73 67 28 70 2c 20 70 56 74 61 62 29 3b  rrmsg(p, pVtab);
371c0 0a 20 20 69 66 28 20 73 43 6f 6e 74 65 78 74 2e  .  if( sContext.
371d0 69 73 45 72 72 6f 72 20 29 7b 0a 20 20 20 20 72  isError ){.    r
371e0 63 20 3d 20 73 43 6f 6e 74 65 78 74 2e 69 73 45  c = sContext.isE
371f0 72 72 6f 72 3b 0a 20 20 7d 0a 20 20 73 71 6c 69  rror;.  }.  sqli
37200 74 65 33 56 64 62 65 43 68 61 6e 67 65 45 6e 63  te3VdbeChangeEnc
37210 6f 64 69 6e 67 28 70 44 65 73 74 2c 20 65 6e 63  oding(pDest, enc
37220 6f 64 69 6e 67 29 3b 0a 20 20 52 45 47 49 53 54  oding);.  REGIST
37230 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 33  ER_TRACE(pOp->p3
37240 2c 20 70 44 65 73 74 29 3b 0a 20 20 55 50 44 41  , pDest);.  UPDA
37250 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28  TE_MAX_BLOBSIZE(
37260 70 44 65 73 74 29 3b 0a 0a 20 20 69 66 28 20 73  pDest);..  if( s
37270 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 54 6f 6f  qlite3VdbeMemToo
37280 42 69 67 28 70 44 65 73 74 29 20 29 7b 0a 20 20  Big(pDest) ){.  
37290 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a    goto too_big;.
372a0 20 20 7d 0a 20 20 69 66 28 20 72 63 20 29 20 67    }.  if( rc ) g
372b0 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
372c0 5f 65 72 72 6f 72 3b 0a 20 20 62 72 65 61 6b 3b  _error;.  break;
372d0 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c  .}.#endif /* SQL
372e0 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c  ITE_OMIT_VIRTUAL
372f0 54 41 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64 65  TABLE */..#ifnde
37300 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  f SQLITE_OMIT_VI
37310 52 54 55 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70  RTUALTABLE./* Op
37320 63 6f 64 65 3a 20 56 4e 65 78 74 20 50 31 20 50  code: VNext P1 P
37330 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 41 64  2 * * *.**.** Ad
37340 76 61 6e 63 65 20 76 69 72 74 75 61 6c 20 74 61  vance virtual ta
37350 62 6c 65 20 50 31 20 74 6f 20 74 68 65 20 6e 65  ble P1 to the ne
37360 78 74 20 72 6f 77 20 69 6e 20 69 74 73 20 72 65  xt row in its re
37370 73 75 6c 74 20 73 65 74 20 61 6e 64 0a 2a 2a 20  sult set and.** 
37380 6a 75 6d 70 20 74 6f 20 69 6e 73 74 72 75 63 74  jump to instruct
37390 69 6f 6e 20 50 32 2e 20 20 4f 72 2c 20 69 66 20  ion P2.  Or, if 
373a0 74 68 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c  the virtual tabl
373b0 65 20 68 61 73 20 72 65 61 63 68 65 64 0a 2a 2a  e has reached.**
373c0 20 74 68 65 20 65 6e 64 20 6f 66 20 69 74 73 20   the end of its 
373d0 72 65 73 75 6c 74 20 73 65 74 2c 20 74 68 65 6e  result set, then
373e0 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f   fall through to
373f0 20 74 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75   the next instru
37400 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f  ction..*/.case O
37410 50 5f 56 4e 65 78 74 3a 20 7b 20 20 20 2f 2a 20  P_VNext: {   /* 
37420 6a 75 6d 70 20 2a 2f 0a 20 20 73 71 6c 69 74 65  jump */.  sqlite
37430 33 5f 76 74 61 62 20 2a 70 56 74 61 62 3b 0a 20  3_vtab *pVtab;. 
37440 20 63 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d   const sqlite3_m
37450 6f 64 75 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b 0a  odule *pModule;.
37460 20 20 69 6e 74 20 72 65 73 3b 0a 20 20 56 64 62    int res;.  Vdb
37470 65 43 75 72 73 6f 72 20 2a 70 43 75 72 3b 0a 0a  eCursor *pCur;..
37480 20 20 72 65 73 20 3d 20 30 3b 0a 20 20 70 43 75    res = 0;.  pCu
37490 72 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70  r = p->apCsr[pOp
374a0 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p1];.  assert(
374b0 20 70 43 75 72 2d 3e 65 43 75 72 54 79 70 65 3d   pCur->eCurType=
374c0 3d 43 55 52 54 59 50 45 5f 56 54 41 42 20 29 3b  =CURTYPE_VTAB );
374d0 0a 20 20 69 66 28 20 70 43 75 72 2d 3e 6e 75 6c  .  if( pCur->nul
374e0 6c 52 6f 77 20 29 7b 0a 20 20 20 20 62 72 65 61  lRow ){.    brea
374f0 6b 3b 0a 20 20 7d 0a 20 20 70 56 74 61 62 20 3d  k;.  }.  pVtab =
37500 20 70 43 75 72 2d 3e 75 63 2e 70 56 43 75 72 2d   pCur->uc.pVCur-
37510 3e 70 56 74 61 62 3b 0a 20 20 70 4d 6f 64 75 6c  >pVtab;.  pModul
37520 65 20 3d 20 70 56 74 61 62 2d 3e 70 4d 6f 64 75  e = pVtab->pModu
37530 6c 65 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4d  le;.  assert( pM
37540 6f 64 75 6c 65 2d 3e 78 4e 65 78 74 20 29 3b 0a  odule->xNext );.
37550 0a 20 20 2f 2a 20 49 6e 76 6f 6b 65 20 74 68 65  .  /* Invoke the
37560 20 78 4e 65 78 74 28 29 20 6d 65 74 68 6f 64 20   xNext() method 
37570 6f 66 20 74 68 65 20 6d 6f 64 75 6c 65 2e 20 54  of the module. T
37580 68 65 72 65 20 69 73 20 6e 6f 20 77 61 79 20 66  here is no way f
37590 6f 72 20 74 68 65 0a 20 20 2a 2a 20 75 6e 64 65  or the.  ** unde
375a0 72 6c 79 69 6e 67 20 69 6d 70 6c 65 6d 65 6e 74  rlying implement
375b0 61 74 69 6f 6e 20 74 6f 20 72 65 74 75 72 6e 20  ation to return 
375c0 61 6e 20 65 72 72 6f 72 20 69 66 20 6f 6e 65 20  an error if one 
375d0 6f 63 63 75 72 73 20 64 75 72 69 6e 67 0a 20 20  occurs during.  
375e0 2a 2a 20 78 4e 65 78 74 28 29 2e 20 49 6e 73 74  ** xNext(). Inst
375f0 65 61 64 2c 20 69 66 20 61 6e 20 65 72 72 6f 72  ead, if an error
37600 20 6f 63 63 75 72 73 2c 20 74 72 75 65 20 69 73   occurs, true is
37610 20 72 65 74 75 72 6e 65 64 20 28 69 6e 64 69 63   returned (indic
37620 61 74 69 6e 67 20 74 68 61 74 20 0a 20 20 2a 2a  ating that .  **
37630 20 64 61 74 61 20 69 73 20 61 76 61 69 6c 61 62   data is availab
37640 6c 65 29 20 61 6e 64 20 74 68 65 20 65 72 72 6f  le) and the erro
37650 72 20 63 6f 64 65 20 72 65 74 75 72 6e 65 64 20  r code returned 
37660 77 68 65 6e 20 78 43 6f 6c 75 6d 6e 20 6f 72 0a  when xColumn or.
37670 20 20 2a 2a 20 73 6f 6d 65 20 6f 74 68 65 72 20    ** some other 
37680 6d 65 74 68 6f 64 20 69 73 20 6e 65 78 74 20 69  method is next i
37690 6e 76 6f 6b 65 64 20 6f 6e 20 74 68 65 20 73 61  nvoked on the sa
376a0 76 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65  ve virtual table
376b0 20 63 75 72 73 6f 72 2e 0a 20 20 2a 2f 0a 20 20   cursor..  */.  
376c0 72 63 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78 4e  rc = pModule->xN
376d0 65 78 74 28 70 43 75 72 2d 3e 75 63 2e 70 56 43  ext(pCur->uc.pVC
376e0 75 72 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 74  ur);.  sqlite3Vt
376f0 61 62 49 6d 70 6f 72 74 45 72 72 6d 73 67 28 70  abImportErrmsg(p
37700 2c 20 70 56 74 61 62 29 3b 0a 20 20 69 66 28 20  , pVtab);.  if( 
37710 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f  rc ) goto abort_
37720 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
37730 72 65 73 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78  res = pModule->x
37740 45 6f 66 28 70 43 75 72 2d 3e 75 63 2e 70 56 43  Eof(pCur->uc.pVC
37750 75 72 29 3b 0a 20 20 56 64 62 65 42 72 61 6e 63  ur);.  VdbeBranc
37760 68 54 61 6b 65 6e 28 21 72 65 73 2c 32 29 3b 0a  hTaken(!res,2);.
37770 20 20 69 66 28 20 21 72 65 73 20 29 7b 0a 20 20    if( !res ){.  
37780 20 20 2f 2a 20 49 66 20 74 68 65 72 65 20 69 73    /* If there is
37790 20 64 61 74 61 2c 20 6a 75 6d 70 20 74 6f 20 50   data, jump to P
377a0 32 20 2a 2f 0a 20 20 20 20 67 6f 74 6f 20 6a 75  2 */.    goto ju
377b0 6d 70 5f 74 6f 5f 70 32 5f 61 6e 64 5f 63 68 65  mp_to_p2_and_che
377c0 63 6b 5f 66 6f 72 5f 69 6e 74 65 72 72 75 70 74  ck_for_interrupt
377d0 3b 0a 20 20 7d 0a 20 20 67 6f 74 6f 20 63 68 65  ;.  }.  goto che
377e0 63 6b 5f 66 6f 72 5f 69 6e 74 65 72 72 75 70 74  ck_for_interrupt
377f0 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51  ;.}.#endif /* SQ
37800 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41  LITE_OMIT_VIRTUA
37810 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64  LTABLE */..#ifnd
37820 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56  ef SQLITE_OMIT_V
37830 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f  IRTUALTABLE./* O
37840 70 63 6f 64 65 3a 20 56 52 65 6e 61 6d 65 20 50  pcode: VRename P
37850 31 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a  1 * * P4 *.**.**
37860 20 50 34 20 69 73 20 61 20 70 6f 69 6e 74 65 72   P4 is a pointer
37870 20 74 6f 20 61 20 76 69 72 74 75 61 6c 20 74 61   to a virtual ta
37880 62 6c 65 20 6f 62 6a 65 63 74 2c 20 61 6e 20 73  ble object, an s
37890 71 6c 69 74 65 33 5f 76 74 61 62 20 73 74 72 75  qlite3_vtab stru
378a0 63 74 75 72 65 2e 0a 2a 2a 20 54 68 69 73 20 6f  cture..** This o
378b0 70 63 6f 64 65 20 69 6e 76 6f 6b 65 73 20 74 68  pcode invokes th
378c0 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20  e corresponding 
378d0 78 52 65 6e 61 6d 65 20 6d 65 74 68 6f 64 2e 20  xRename method. 
378e0 54 68 65 20 76 61 6c 75 65 0a 2a 2a 20 69 6e 20  The value.** in 
378f0 72 65 67 69 73 74 65 72 20 50 31 20 69 73 20 70  register P1 is p
37900 61 73 73 65 64 20 61 73 20 74 68 65 20 7a 4e 61  assed as the zNa
37910 6d 65 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 74  me argument to t
37920 68 65 20 78 52 65 6e 61 6d 65 20 6d 65 74 68 6f  he xRename metho
37930 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 52  d..*/.case OP_VR
37940 65 6e 61 6d 65 3a 20 7b 0a 20 20 73 71 6c 69 74  ename: {.  sqlit
37950 65 33 5f 76 74 61 62 20 2a 70 56 74 61 62 3b 0a  e3_vtab *pVtab;.
37960 20 20 4d 65 6d 20 2a 70 4e 61 6d 65 3b 0a 0a 20    Mem *pName;.. 
37970 20 70 56 74 61 62 20 3d 20 70 4f 70 2d 3e 70 34   pVtab = pOp->p4
37980 2e 70 56 74 61 62 2d 3e 70 56 74 61 62 3b 0a 20  .pVtab->pVtab;. 
37990 20 70 4e 61 6d 65 20 3d 20 26 61 4d 65 6d 5b 70   pName = &aMem[p
379a0 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72  Op->p1];.  asser
379b0 74 28 20 70 56 74 61 62 2d 3e 70 4d 6f 64 75 6c  t( pVtab->pModul
379c0 65 2d 3e 78 52 65 6e 61 6d 65 20 29 3b 0a 20 20  e->xRename );.  
379d0 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c  assert( memIsVal
379e0 69 64 28 70 4e 61 6d 65 29 20 29 3b 0a 20 20 61  id(pName) );.  a
379f0 73 73 65 72 74 28 20 70 2d 3e 72 65 61 64 4f 6e  ssert( p->readOn
37a00 6c 79 3d 3d 30 20 29 3b 0a 20 20 52 45 47 49 53  ly==0 );.  REGIS
37a10 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70  TER_TRACE(pOp->p
37a20 31 2c 20 70 4e 61 6d 65 29 3b 0a 20 20 61 73 73  1, pName);.  ass
37a30 65 72 74 28 20 70 4e 61 6d 65 2d 3e 66 6c 61 67  ert( pName->flag
37a40 73 20 26 20 4d 45 4d 5f 53 74 72 20 29 3b 0a 20  s & MEM_Str );. 
37a50 20 74 65 73 74 63 61 73 65 28 20 70 4e 61 6d 65   testcase( pName
37a60 2d 3e 65 6e 63 3d 3d 53 51 4c 49 54 45 5f 55 54  ->enc==SQLITE_UT
37a70 46 38 20 29 3b 0a 20 20 74 65 73 74 63 61 73 65  F8 );.  testcase
37a80 28 20 70 4e 61 6d 65 2d 3e 65 6e 63 3d 3d 53 51  ( pName->enc==SQ
37a90 4c 49 54 45 5f 55 54 46 31 36 42 45 20 29 3b 0a  LITE_UTF16BE );.
37aa0 20 20 74 65 73 74 63 61 73 65 28 20 70 4e 61 6d    testcase( pNam
37ab0 65 2d 3e 65 6e 63 3d 3d 53 51 4c 49 54 45 5f 55  e->enc==SQLITE_U
37ac0 54 46 31 36 4c 45 20 29 3b 0a 20 20 72 63 20 3d  TF16LE );.  rc =
37ad0 20 73 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e   sqlite3VdbeChan
37ae0 67 65 45 6e 63 6f 64 69 6e 67 28 70 4e 61 6d 65  geEncoding(pName
37af0 2c 20 53 51 4c 49 54 45 5f 55 54 46 38 29 3b 0a  , SQLITE_UTF8);.
37b00 20 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20    if( rc ) goto 
37b10 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
37b20 6f 72 3b 0a 20 20 72 63 20 3d 20 70 56 74 61 62  or;.  rc = pVtab
37b30 2d 3e 70 4d 6f 64 75 6c 65 2d 3e 78 52 65 6e 61  ->pModule->xRena
37b40 6d 65 28 70 56 74 61 62 2c 20 70 4e 61 6d 65 2d  me(pVtab, pName-
37b50 3e 7a 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 74  >z);.  sqlite3Vt
37b60 61 62 49 6d 70 6f 72 74 45 72 72 6d 73 67 28 70  abImportErrmsg(p
37b70 2c 20 70 56 74 61 62 29 3b 0a 20 20 70 2d 3e 65  , pVtab);.  p->e
37b80 78 70 69 72 65 64 20 3d 20 30 3b 0a 20 20 69 66  xpired = 0;.  if
37b90 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72  ( rc ) goto abor
37ba0 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
37bb0 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69    break;.}.#endi
37bc0 66 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  f..#ifndef SQLIT
37bd0 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41  E_OMIT_VIRTUALTA
37be0 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56  BLE./* Opcode: V
37bf0 55 70 64 61 74 65 20 50 31 20 50 32 20 50 33 20  Update P1 P2 P3 
37c00 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69  P4 P5.** Synopsi
37c10 73 3a 20 64 61 74 61 3d 72 5b 50 33 40 50 32 5d  s: data=r[P3@P2]
37c20 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20 70  .**.** P4 is a p
37c30 6f 69 6e 74 65 72 20 74 6f 20 61 20 76 69 72 74  ointer to a virt
37c40 75 61 6c 20 74 61 62 6c 65 20 6f 62 6a 65 63 74  ual table object
37c50 2c 20 61 6e 20 73 71 6c 69 74 65 33 5f 76 74 61  , an sqlite3_vta
37c60 62 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2a 20  b structure..** 
37c70 54 68 69 73 20 6f 70 63 6f 64 65 20 69 6e 76 6f  This opcode invo
37c80 6b 65 73 20 74 68 65 20 63 6f 72 72 65 73 70 6f  kes the correspo
37c90 6e 64 69 6e 67 20 78 55 70 64 61 74 65 20 6d 65  nding xUpdate me
37ca0 74 68 6f 64 2e 20 50 32 20 76 61 6c 75 65 73 0a  thod. P2 values.
37cb0 2a 2a 20 61 72 65 20 63 6f 6e 74 69 67 75 6f 75  ** are contiguou
37cc0 73 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 73 20 73  s memory cells s
37cd0 74 61 72 74 69 6e 67 20 61 74 20 50 33 20 74 6f  tarting at P3 to
37ce0 20 70 61 73 73 20 74 6f 20 74 68 65 20 78 55 70   pass to the xUp
37cf0 64 61 74 65 20 0a 2a 2a 20 69 6e 76 6f 63 61 74  date .** invocat
37d00 69 6f 6e 2e 20 54 68 65 20 76 61 6c 75 65 20 69  ion. The value i
37d10 6e 20 72 65 67 69 73 74 65 72 20 28 50 33 2b 50  n register (P3+P
37d20 32 2d 31 29 20 63 6f 72 72 65 73 70 6f 6e 64 73  2-1) corresponds
37d30 20 74 6f 20 74 68 65 20 0a 2a 2a 20 70 32 74 68   to the .** p2th
37d40 20 65 6c 65 6d 65 6e 74 20 6f 66 20 74 68 65 20   element of the 
37d50 61 72 67 76 20 61 72 72 61 79 20 70 61 73 73 65  argv array passe
37d60 64 20 74 6f 20 78 55 70 64 61 74 65 2e 0a 2a 2a  d to xUpdate..**
37d70 0a 2a 2a 20 54 68 65 20 78 55 70 64 61 74 65 20  .** The xUpdate 
37d80 6d 65 74 68 6f 64 20 77 69 6c 6c 20 64 6f 20 61  method will do a
37d90 20 44 45 4c 45 54 45 20 6f 72 20 61 6e 20 49 4e   DELETE or an IN
37da0 53 45 52 54 20 6f 72 20 62 6f 74 68 2e 0a 2a 2a  SERT or both..**
37db0 20 54 68 65 20 61 72 67 76 5b 30 5d 20 65 6c 65   The argv[0] ele
37dc0 6d 65 6e 74 20 28 77 68 69 63 68 20 63 6f 72 72  ment (which corr
37dd0 65 73 70 6f 6e 64 73 20 74 6f 20 6d 65 6d 6f 72  esponds to memor
37de0 79 20 63 65 6c 6c 20 50 33 29 0a 2a 2a 20 69 73  y cell P3).** is
37df0 20 74 68 65 20 72 6f 77 69 64 20 6f 66 20 61 20   the rowid of a 
37e00 72 6f 77 20 74 6f 20 64 65 6c 65 74 65 2e 20 20  row to delete.  
37e10 49 66 20 61 72 67 76 5b 30 5d 20 69 73 20 4e 55  If argv[0] is NU
37e20 4c 4c 20 74 68 65 6e 20 6e 6f 20 0a 2a 2a 20 64  LL then no .** d
37e30 65 6c 65 74 69 6f 6e 20 6f 63 63 75 72 73 2e 20  eletion occurs. 
37e40 20 54 68 65 20 61 72 67 76 5b 31 5d 20 65 6c 65   The argv[1] ele
37e50 6d 65 6e 74 20 69 73 20 74 68 65 20 72 6f 77 69  ment is the rowi
37e60 64 20 6f 66 20 74 68 65 20 6e 65 77 20 0a 2a 2a  d of the new .**
37e70 20 72 6f 77 2e 20 20 54 68 69 73 20 63 61 6e 20   row.  This can 
37e80 62 65 20 4e 55 4c 4c 20 74 6f 20 68 61 76 65 20  be NULL to have 
37e90 74 68 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c  the virtual tabl
37ea0 65 20 73 65 6c 65 63 74 20 74 68 65 20 6e 65 77  e select the new
37eb0 20 0a 2a 2a 20 72 6f 77 69 64 20 66 6f 72 20 69   .** rowid for i
37ec0 74 73 65 6c 66 2e 20 20 54 68 65 20 73 75 62 73  tself.  The subs
37ed0 65 71 75 65 6e 74 20 65 6c 65 6d 65 6e 74 73 20  equent elements 
37ee0 69 6e 20 74 68 65 20 61 72 72 61 79 20 61 72 65  in the array are
37ef0 20 0a 2a 2a 20 74 68 65 20 76 61 6c 75 65 73 20   .** the values 
37f00 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68  of columns in th
37f10 65 20 6e 65 77 20 72 6f 77 2e 0a 2a 2a 0a 2a 2a  e new row..**.**
37f20 20 49 66 20 50 32 3d 3d 31 20 74 68 65 6e 20 6e   If P2==1 then n
37f30 6f 20 69 6e 73 65 72 74 20 69 73 20 70 65 72 66  o insert is perf
37f40 6f 72 6d 65 64 2e 20 20 61 72 67 76 5b 30 5d 20  ormed.  argv[0] 
37f50 69 73 20 74 68 65 20 72 6f 77 69 64 20 6f 66 0a  is the rowid of.
37f60 2a 2a 20 61 20 72 6f 77 20 74 6f 20 64 65 6c 65  ** a row to dele
37f70 74 65 2e 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20  te..**.** P1 is 
37f80 61 20 62 6f 6f 6c 65 61 6e 20 66 6c 61 67 2e 20  a boolean flag. 
37f90 49 66 20 69 74 20 69 73 20 73 65 74 20 74 6f 20  If it is set to 
37fa0 74 72 75 65 20 61 6e 64 20 74 68 65 20 78 55 70  true and the xUp
37fb0 64 61 74 65 20 63 61 6c 6c 0a 2a 2a 20 69 73 20  date call.** is 
37fc0 73 75 63 63 65 73 73 66 75 6c 2c 20 74 68 65 6e  successful, then
37fd0 20 74 68 65 20 76 61 6c 75 65 20 72 65 74 75 72   the value retur
37fe0 6e 65 64 20 62 79 20 73 71 6c 69 74 65 33 5f 6c  ned by sqlite3_l
37ff0 61 73 74 5f 69 6e 73 65 72 74 5f 72 6f 77 69 64  ast_insert_rowid
38000 28 29 20 0a 2a 2a 20 69 73 20 73 65 74 20 74 6f  () .** is set to
38010 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68   the value of th
38020 65 20 72 6f 77 69 64 20 66 6f 72 20 74 68 65 20  e rowid for the 
38030 72 6f 77 20 6a 75 73 74 20 69 6e 73 65 72 74 65  row just inserte
38040 64 2e 0a 2a 2a 0a 2a 2a 20 50 35 20 69 73 20 74  d..**.** P5 is t
38050 68 65 20 65 72 72 6f 72 20 61 63 74 69 6f 6e 73  he error actions
38060 20 28 4f 45 5f 52 65 70 6c 61 63 65 2c 20 4f 45   (OE_Replace, OE
38070 5f 46 61 69 6c 2c 20 4f 45 5f 49 67 6e 6f 72 65  _Fail, OE_Ignore
38080 2c 20 65 74 63 29 20 74 6f 0a 2a 2a 20 61 70 70  , etc) to.** app
38090 6c 79 20 69 6e 20 74 68 65 20 63 61 73 65 20 6f  ly in the case o
380a0 66 20 61 20 63 6f 6e 73 74 72 61 69 6e 74 20 66  f a constraint f
380b0 61 69 6c 75 72 65 20 6f 6e 20 61 6e 20 69 6e 73  ailure on an ins
380c0 65 72 74 20 6f 72 20 75 70 64 61 74 65 2e 0a 2a  ert or update..*
380d0 2f 0a 63 61 73 65 20 4f 50 5f 56 55 70 64 61 74  /.case OP_VUpdat
380e0 65 3a 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 76  e: {.  sqlite3_v
380f0 74 61 62 20 2a 70 56 74 61 62 3b 0a 20 20 63 6f  tab *pVtab;.  co
38100 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d 6f 64 75  nst sqlite3_modu
38110 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b 0a 20 20 69  le *pModule;.  i
38120 6e 74 20 6e 41 72 67 3b 0a 20 20 69 6e 74 20 69  nt nArg;.  int i
38130 3b 0a 20 20 73 71 6c 69 74 65 5f 69 6e 74 36 34  ;.  sqlite_int64
38140 20 72 6f 77 69 64 3b 0a 20 20 4d 65 6d 20 2a 2a   rowid;.  Mem **
38150 61 70 41 72 67 3b 0a 20 20 4d 65 6d 20 2a 70 58  apArg;.  Mem *pX
38160 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  ;..  assert( pOp
38170 2d 3e 70 32 3d 3d 31 20 20 20 20 20 20 20 20 7c  ->p2==1        |
38180 7c 20 70 4f 70 2d 3e 70 35 3d 3d 4f 45 5f 46 61  | pOp->p5==OE_Fa
38190 69 6c 20 20 20 7c 7c 20 70 4f 70 2d 3e 70 35 3d  il   || pOp->p5=
381a0 3d 4f 45 5f 52 6f 6c 6c 62 61 63 6b 20 0a 20 20  =OE_Rollback .  
381b0 20 20 20 20 20 7c 7c 20 70 4f 70 2d 3e 70 35 3d       || pOp->p5=
381c0 3d 4f 45 5f 41 62 6f 72 74 20 7c 7c 20 70 4f 70  =OE_Abort || pOp
381d0 2d 3e 70 35 3d 3d 4f 45 5f 49 67 6e 6f 72 65 20  ->p5==OE_Ignore 
381e0 7c 7c 20 70 4f 70 2d 3e 70 35 3d 3d 4f 45 5f 52  || pOp->p5==OE_R
381f0 65 70 6c 61 63 65 0a 20 20 29 3b 0a 20 20 61 73  eplace.  );.  as
38200 73 65 72 74 28 20 70 2d 3e 72 65 61 64 4f 6e 6c  sert( p->readOnl
38210 79 3d 3d 30 20 29 3b 0a 20 20 70 56 74 61 62 20  y==0 );.  pVtab 
38220 3d 20 70 4f 70 2d 3e 70 34 2e 70 56 74 61 62 2d  = pOp->p4.pVtab-
38230 3e 70 56 74 61 62 3b 0a 20 20 69 66 28 20 70 56  >pVtab;.  if( pV
38240 74 61 62 3d 3d 30 20 7c 7c 20 4e 45 56 45 52 28  tab==0 || NEVER(
38250 70 56 74 61 62 2d 3e 70 4d 6f 64 75 6c 65 3d 3d  pVtab->pModule==
38260 30 29 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 53  0) ){.    rc = S
38270 51 4c 49 54 45 5f 4c 4f 43 4b 45 44 3b 0a 20 20  QLITE_LOCKED;.  
38280 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65    goto abort_due
38290 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 7d 0a 20  _to_error;.  }. 
382a0 20 70 4d 6f 64 75 6c 65 20 3d 20 70 56 74 61 62   pModule = pVtab
382b0 2d 3e 70 4d 6f 64 75 6c 65 3b 0a 20 20 6e 41 72  ->pModule;.  nAr
382c0 67 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 61  g = pOp->p2;.  a
382d0 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79  ssert( pOp->p4ty
382e0 70 65 3d 3d 50 34 5f 56 54 41 42 20 29 3b 0a 20  pe==P4_VTAB );. 
382f0