/ Hex Artifact Content
Login

Artifact e0164a0f4d4efcc9335e6e1ec74656301f79642f8524183f2d08178314967702:


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 20 20 2f 2a 20 54 45 58 54 2d 3e 4e 55 4d  }.  /* TEXT->NUM
26d0: 45 52 49 43 20 69 73 20 6d 61 6e 79 2d 3e 6f 6e  ERIC is many->on
26e0: 65 2e 20 20 48 65 6e 63 65 2c 20 69 74 20 69 73  e.  Hence, it is
26f0: 20 69 6d 70 6f 72 74 61 6e 74 20 74 6f 20 69 6e   important to in
2700: 76 61 6c 69 64 61 74 65 20 74 68 65 0a 20 20 2a  validate the.  *
2710: 2a 20 73 74 72 69 6e 67 20 72 65 70 72 65 73 65  * string represe
2720: 6e 74 61 74 69 6f 6e 20 61 66 74 65 72 20 63 6f  ntation after co
2730: 6d 70 75 74 69 6e 67 20 61 20 6e 75 6d 65 72 69  mputing a numeri
2740: 63 20 65 71 75 69 76 61 6c 65 6e 74 2c 20 62 65  c equivalent, be
2750: 63 61 75 73 65 20 74 68 65 0a 20 20 2a 2a 20 73  cause the.  ** s
2760: 74 72 69 6e 67 20 72 65 70 72 65 73 65 6e 74 61  tring representa
2770: 74 69 6f 6e 20 6d 69 67 68 74 20 6e 6f 74 20 62  tion might not b
2780: 65 20 74 68 65 20 63 61 6e 6f 6e 69 63 61 6c 20  e the canonical 
2790: 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 66  representation f
27a0: 6f 72 20 74 68 65 0a 20 20 2a 2a 20 6e 75 6d 65  or the.  ** nume
27b0: 72 69 63 20 76 61 6c 75 65 2e 20 20 54 69 63 6b  ric value.  Tick
27c0: 65 74 20 5b 33 34 33 36 33 34 39 34 32 64 64 35  et [343634942dd5
27d0: 34 61 62 35 37 62 37 30 32 34 5d 20 32 30 31 38  4ab57b7024] 2018
27e0: 2d 30 31 2d 33 31 2e 20 2a 2f 0a 20 20 70 52 65  -01-31. */.  pRe
27f0: 63 2d 3e 66 6c 61 67 73 20 26 3d 20 7e 4d 45 4d  c->flags &= ~MEM
2800: 5f 53 74 72 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 50  _Str;.}../*.** P
2810: 72 6f 63 65 73 73 69 6e 67 20 69 73 20 64 65 74  rocessing is det
2820: 65 72 6d 69 6e 65 20 62 79 20 74 68 65 20 61 66  ermine by the af
2830: 66 69 6e 69 74 79 20 70 61 72 61 6d 65 74 65 72  finity parameter
2840: 3a 0a 2a 2a 0a 2a 2a 20 53 51 4c 49 54 45 5f 41  :.**.** SQLITE_A
2850: 46 46 5f 49 4e 54 45 47 45 52 3a 0a 2a 2a 20 53  FF_INTEGER:.** S
2860: 51 4c 49 54 45 5f 41 46 46 5f 52 45 41 4c 3a 0a  QLITE_AFF_REAL:.
2870: 2a 2a 20 53 51 4c 49 54 45 5f 41 46 46 5f 4e 55  ** SQLITE_AFF_NU
2880: 4d 45 52 49 43 3a 0a 2a 2a 20 20 20 20 54 72 79  MERIC:.**    Try
2890: 20 74 6f 20 63 6f 6e 76 65 72 74 20 70 52 65 63   to convert pRec
28a0: 20 74 6f 20 61 6e 20 69 6e 74 65 67 65 72 20 72   to an integer r
28b0: 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f 72  epresentation or
28c0: 20 61 20 0a 2a 2a 20 20 20 20 66 6c 6f 61 74 69   a .**    floati
28d0: 6e 67 2d 70 6f 69 6e 74 20 72 65 70 72 65 73 65  ng-point represe
28e0: 6e 74 61 74 69 6f 6e 20 69 66 20 61 6e 20 69 6e  ntation if an in
28f0: 74 65 67 65 72 20 72 65 70 72 65 73 65 6e 74 61  teger representa
2900: 74 69 6f 6e 0a 2a 2a 20 20 20 20 69 73 20 6e 6f  tion.**    is no
2910: 74 20 70 6f 73 73 69 62 6c 65 2e 20 20 4e 6f 74  t possible.  Not
2920: 65 20 74 68 61 74 20 74 68 65 20 69 6e 74 65 67  e that the integ
2930: 65 72 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f  er representatio
2940: 6e 20 69 73 0a 2a 2a 20 20 20 20 61 6c 77 61 79  n is.**    alway
2950: 73 20 70 72 65 66 65 72 72 65 64 2c 20 65 76 65  s preferred, eve
2960: 6e 20 69 66 20 74 68 65 20 61 66 66 69 6e 69 74  n if the affinit
2970: 79 20 69 73 20 52 45 41 4c 2c 20 62 65 63 61 75  y is REAL, becau
2980: 73 65 0a 2a 2a 20 20 20 20 61 6e 20 69 6e 74 65  se.**    an inte
2990: 67 65 72 20 72 65 70 72 65 73 65 6e 74 61 74 69  ger representati
29a0: 6f 6e 20 69 73 20 6d 6f 72 65 20 73 70 61 63 65  on is more space
29b0: 20 65 66 66 69 63 69 65 6e 74 20 6f 6e 20 64 69   efficient on di
29c0: 73 6b 2e 0a 2a 2a 0a 2a 2a 20 53 51 4c 49 54 45  sk..**.** SQLITE
29d0: 5f 41 46 46 5f 54 45 58 54 3a 0a 2a 2a 20 20 20  _AFF_TEXT:.**   
29e0: 20 43 6f 6e 76 65 72 74 20 70 52 65 63 20 74 6f   Convert pRec to
29f0: 20 61 20 74 65 78 74 20 72 65 70 72 65 73 65 6e   a text represen
2a00: 74 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 53 51  tation..**.** SQ
2a10: 4c 49 54 45 5f 41 46 46 5f 42 4c 4f 42 3a 0a 2a  LITE_AFF_BLOB:.*
2a20: 2a 20 20 20 20 4e 6f 2d 6f 70 2e 20 20 70 52 65  *    No-op.  pRe
2a30: 63 20 69 73 20 75 6e 63 68 61 6e 67 65 64 2e 0a  c is unchanged..
2a40: 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69 64 20 61  */.static void a
2a50: 70 70 6c 79 41 66 66 69 6e 69 74 79 28 0a 20 20  pplyAffinity(.  
2a60: 4d 65 6d 20 2a 70 52 65 63 2c 20 20 20 20 20 20  Mem *pRec,      
2a70: 20 20 20 20 2f 2a 20 54 68 65 20 76 61 6c 75 65      /* The value
2a80: 20 74 6f 20 61 70 70 6c 79 20 61 66 66 69 6e 69   to apply affini
2a90: 74 79 20 74 6f 20 2a 2f 0a 20 20 63 68 61 72 20  ty to */.  char 
2aa0: 61 66 66 69 6e 69 74 79 2c 20 20 20 20 20 20 2f  affinity,      /
2ab0: 2a 20 54 68 65 20 61 66 66 69 6e 69 74 79 20 74  * The affinity t
2ac0: 6f 20 62 65 20 61 70 70 6c 69 65 64 20 2a 2f 0a  o be applied */.
2ad0: 20 20 75 38 20 65 6e 63 20 20 20 20 20 20 20 20    u8 enc        
2ae0: 20 20 20 20 20 20 2f 2a 20 55 73 65 20 74 68 69        /* Use thi
2af0: 73 20 74 65 78 74 20 65 6e 63 6f 64 69 6e 67 20  s text encoding 
2b00: 2a 2f 0a 29 7b 0a 20 20 69 66 28 20 61 66 66 69  */.){.  if( affi
2b10: 6e 69 74 79 3e 3d 53 51 4c 49 54 45 5f 41 46 46  nity>=SQLITE_AFF
2b20: 5f 4e 55 4d 45 52 49 43 20 29 7b 0a 20 20 20 20  _NUMERIC ){.    
2b30: 61 73 73 65 72 74 28 20 61 66 66 69 6e 69 74 79  assert( affinity
2b40: 3d 3d 53 51 4c 49 54 45 5f 41 46 46 5f 49 4e 54  ==SQLITE_AFF_INT
2b50: 45 47 45 52 20 7c 7c 20 61 66 66 69 6e 69 74 79  EGER || affinity
2b60: 3d 3d 53 51 4c 49 54 45 5f 41 46 46 5f 52 45 41  ==SQLITE_AFF_REA
2b70: 4c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 7c  L.             |
2b80: 7c 20 61 66 66 69 6e 69 74 79 3d 3d 53 51 4c 49  | affinity==SQLI
2b90: 54 45 5f 41 46 46 5f 4e 55 4d 45 52 49 43 20 29  TE_AFF_NUMERIC )
2ba0: 3b 0a 20 20 20 20 69 66 28 20 28 70 52 65 63 2d  ;.    if( (pRec-
2bb0: 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74  >flags & MEM_Int
2bc0: 29 3d 3d 30 20 29 7b 20 2f 2a 4f 50 54 49 4d 49  )==0 ){ /*OPTIMI
2bd0: 5a 41 54 49 4f 4e 2d 49 46 2d 46 41 4c 53 45 2a  ZATION-IF-FALSE*
2be0: 2f 0a 20 20 20 20 20 20 69 66 28 20 28 70 52 65  /.      if( (pRe
2bf0: 63 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52  c->flags & MEM_R
2c00: 65 61 6c 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20  eal)==0 ){.     
2c10: 20 20 20 69 66 28 20 70 52 65 63 2d 3e 66 6c 61     if( pRec->fla
2c20: 67 73 20 26 20 4d 45 4d 5f 53 74 72 20 29 20 61  gs & MEM_Str ) a
2c30: 70 70 6c 79 4e 75 6d 65 72 69 63 41 66 66 69 6e  pplyNumericAffin
2c40: 69 74 79 28 70 52 65 63 2c 31 29 3b 0a 20 20 20  ity(pRec,1);.   
2c50: 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
2c60: 20 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74    sqlite3VdbeInt
2c70: 65 67 65 72 41 66 66 69 6e 69 74 79 28 70 52 65  egerAffinity(pRe
2c80: 63 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  c);.      }.    
2c90: 7d 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 61 66  }.  }else if( af
2ca0: 66 69 6e 69 74 79 3d 3d 53 51 4c 49 54 45 5f 41  finity==SQLITE_A
2cb0: 46 46 5f 54 45 58 54 20 29 7b 0a 20 20 20 20 2f  FF_TEXT ){.    /
2cc0: 2a 20 4f 6e 6c 79 20 61 74 74 65 6d 70 74 20 74  * Only attempt t
2cd0: 68 65 20 63 6f 6e 76 65 72 73 69 6f 6e 20 74 6f  he conversion to
2ce0: 20 54 45 58 54 20 69 66 20 74 68 65 72 65 20 69   TEXT if there i
2cf0: 73 20 61 6e 20 69 6e 74 65 67 65 72 20 6f 72 20  s an integer or 
2d00: 72 65 61 6c 0a 20 20 20 20 2a 2a 20 72 65 70 72  real.    ** repr
2d10: 65 73 65 6e 74 61 74 69 6f 6e 20 28 62 6c 6f 62  esentation (blob
2d20: 20 61 6e 64 20 4e 55 4c 4c 20 64 6f 20 6e 6f 74   and NULL do not
2d30: 20 67 65 74 20 63 6f 6e 76 65 72 74 65 64 29 20   get converted) 
2d40: 62 75 74 20 6e 6f 20 73 74 72 69 6e 67 0a 20 20  but no string.  
2d50: 20 20 2a 2a 20 72 65 70 72 65 73 65 6e 74 61 74    ** representat
2d60: 69 6f 6e 2e 20 20 49 74 20 77 6f 75 6c 64 20 62  ion.  It would b
2d70: 65 20 68 61 72 6d 6c 65 73 73 20 74 6f 20 72 65  e harmless to re
2d80: 70 65 61 74 20 74 68 65 20 63 6f 6e 76 65 72 73  peat the convers
2d90: 69 6f 6e 20 69 66 20 0a 20 20 20 20 2a 2a 20 74  ion if .    ** t
2da0: 68 65 72 65 20 69 73 20 61 6c 72 65 61 64 79 20  here is already 
2db0: 61 20 73 74 72 69 6e 67 20 72 65 70 2c 20 62 75  a string rep, bu
2dc0: 74 20 69 74 20 69 73 20 70 6f 69 6e 74 6c 65 73  t it is pointles
2dd0: 73 20 74 6f 20 77 61 73 74 65 20 74 68 6f 73 65  s to waste those
2de0: 0a 20 20 20 20 2a 2a 20 43 50 55 20 63 79 63 6c  .    ** CPU cycl
2df0: 65 73 2e 20 2a 2f 0a 20 20 20 20 69 66 28 20 30  es. */.    if( 0
2e00: 3d 3d 28 70 52 65 63 2d 3e 66 6c 61 67 73 26 4d  ==(pRec->flags&M
2e10: 45 4d 5f 53 74 72 29 20 29 7b 20 2f 2a 4f 50 54  EM_Str) ){ /*OPT
2e20: 49 4d 49 5a 41 54 49 4f 4e 2d 49 46 2d 46 41 4c  IMIZATION-IF-FAL
2e30: 53 45 2a 2f 0a 20 20 20 20 20 20 69 66 28 20 28  SE*/.      if( (
2e40: 70 52 65 63 2d 3e 66 6c 61 67 73 26 28 4d 45 4d  pRec->flags&(MEM
2e50: 5f 52 65 61 6c 7c 4d 45 4d 5f 49 6e 74 29 29 20  _Real|MEM_Int)) 
2e60: 29 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  ){.        sqlit
2e70: 65 33 56 64 62 65 4d 65 6d 53 74 72 69 6e 67 69  e3VdbeMemStringi
2e80: 66 79 28 70 52 65 63 2c 20 65 6e 63 2c 20 31 29  fy(pRec, enc, 1)
2e90: 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a  ;.      }.    }.
2ea0: 20 20 20 20 70 52 65 63 2d 3e 66 6c 61 67 73 20      pRec->flags 
2eb0: 26 3d 20 7e 28 4d 45 4d 5f 52 65 61 6c 7c 4d 45  &= ~(MEM_Real|ME
2ec0: 4d 5f 49 6e 74 29 3b 0a 20 20 7d 0a 7d 0a 0a 2f  M_Int);.  }.}../
2ed0: 2a 0a 2a 2a 20 54 72 79 20 74 6f 20 63 6f 6e 76  *.** Try to conv
2ee0: 65 72 74 20 74 68 65 20 74 79 70 65 20 6f 66 20  ert the type of 
2ef0: 61 20 66 75 6e 63 74 69 6f 6e 20 61 72 67 75 6d  a function argum
2f00: 65 6e 74 20 6f 72 20 61 20 72 65 73 75 6c 74 20  ent or a result 
2f10: 63 6f 6c 75 6d 6e 0a 2a 2a 20 69 6e 74 6f 20 61  column.** into a
2f20: 20 6e 75 6d 65 72 69 63 20 72 65 70 72 65 73 65   numeric represe
2f30: 6e 74 61 74 69 6f 6e 2e 20 20 55 73 65 20 65 69  ntation.  Use ei
2f40: 74 68 65 72 20 49 4e 54 45 47 45 52 20 6f 72 20  ther INTEGER or 
2f50: 52 45 41 4c 20 77 68 69 63 68 65 76 65 72 0a 2a  REAL whichever.*
2f60: 2a 20 69 73 20 61 70 70 72 6f 70 72 69 61 74 65  * is appropriate
2f70: 2e 20 20 42 75 74 20 6f 6e 6c 79 20 64 6f 20 74  .  But only do t
2f80: 68 65 20 63 6f 6e 76 65 72 73 69 6f 6e 20 69 66  he conversion if
2f90: 20 69 74 20 69 73 20 70 6f 73 73 69 62 6c 65 20   it is possible 
2fa0: 77 69 74 68 6f 75 74 0a 2a 2a 20 6c 6f 73 73 20  without.** loss 
2fb0: 6f 66 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61  of information a
2fc0: 6e 64 20 72 65 74 75 72 6e 20 74 68 65 20 72 65  nd return the re
2fd0: 76 69 73 65 64 20 74 79 70 65 20 6f 66 20 74 68  vised type of th
2fe0: 65 20 61 72 67 75 6d 65 6e 74 2e 0a 2a 2f 0a 69  e argument..*/.i
2ff0: 6e 74 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  nt sqlite3_value
3000: 5f 6e 75 6d 65 72 69 63 5f 74 79 70 65 28 73 71  _numeric_type(sq
3010: 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 70 56 61  lite3_value *pVa
3020: 6c 29 7b 0a 20 20 69 6e 74 20 65 54 79 70 65 20  l){.  int eType 
3030: 3d 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f  = sqlite3_value_
3040: 74 79 70 65 28 70 56 61 6c 29 3b 0a 20 20 69 66  type(pVal);.  if
3050: 28 20 65 54 79 70 65 3d 3d 53 51 4c 49 54 45 5f  ( eType==SQLITE_
3060: 54 45 58 54 20 29 7b 0a 20 20 20 20 4d 65 6d 20  TEXT ){.    Mem 
3070: 2a 70 4d 65 6d 20 3d 20 28 4d 65 6d 2a 29 70 56  *pMem = (Mem*)pV
3080: 61 6c 3b 0a 20 20 20 20 61 70 70 6c 79 4e 75 6d  al;.    applyNum
3090: 65 72 69 63 41 66 66 69 6e 69 74 79 28 70 4d 65  ericAffinity(pMe
30a0: 6d 2c 20 30 29 3b 0a 20 20 20 20 65 54 79 70 65  m, 0);.    eType
30b0: 20 3d 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65   = sqlite3_value
30c0: 5f 74 79 70 65 28 70 56 61 6c 29 3b 0a 20 20 7d  _type(pVal);.  }
30d0: 0a 20 20 72 65 74 75 72 6e 20 65 54 79 70 65 3b  .  return eType;
30e0: 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 45 78 70 6f 72 74  .}../*.** Export
30f0: 65 64 20 76 65 72 73 69 6f 6e 20 6f 66 20 61 70  ed version of ap
3100: 70 6c 79 41 66 66 69 6e 69 74 79 28 29 2e 20 54  plyAffinity(). T
3110: 68 69 73 20 6f 6e 65 20 77 6f 72 6b 73 20 6f 6e  his one works on
3120: 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2c   sqlite3_value*,
3130: 20 0a 2a 2a 20 6e 6f 74 20 74 68 65 20 69 6e 74   .** not the int
3140: 65 72 6e 61 6c 20 4d 65 6d 2a 20 74 79 70 65 2e  ernal Mem* type.
3150: 0a 2a 2f 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  .*/.void sqlite3
3160: 56 61 6c 75 65 41 70 70 6c 79 41 66 66 69 6e 69  ValueApplyAffini
3170: 74 79 28 0a 20 20 73 71 6c 69 74 65 33 5f 76 61  ty(.  sqlite3_va
3180: 6c 75 65 20 2a 70 56 61 6c 2c 20 0a 20 20 75 38  lue *pVal, .  u8
3190: 20 61 66 66 69 6e 69 74 79 2c 20 0a 20 20 75 38   affinity, .  u8
31a0: 20 65 6e 63 0a 29 7b 0a 20 20 61 70 70 6c 79 41   enc.){.  applyA
31b0: 66 66 69 6e 69 74 79 28 28 4d 65 6d 20 2a 29 70  ffinity((Mem *)p
31c0: 56 61 6c 2c 20 61 66 66 69 6e 69 74 79 2c 20 65  Val, affinity, e
31d0: 6e 63 29 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 70 4d  nc);.}../*.** pM
31e0: 65 6d 20 63 75 72 72 65 6e 74 6c 79 20 6f 6e 6c  em currently onl
31f0: 79 20 68 6f 6c 64 73 20 61 20 73 74 72 69 6e 67  y holds a string
3200: 20 74 79 70 65 20 28 6f 72 20 6d 61 79 62 65 20   type (or maybe 
3210: 61 20 42 4c 4f 42 20 74 68 61 74 20 77 65 20 63  a BLOB that we c
3220: 61 6e 0a 2a 2a 20 69 6e 74 65 72 70 72 65 74 20  an.** interpret 
3230: 61 73 20 61 20 73 74 72 69 6e 67 20 69 66 20 77  as a string if w
3240: 65 20 77 61 6e 74 20 74 6f 29 2e 20 20 43 6f 6d  e want to).  Com
3250: 70 75 74 65 20 69 74 73 20 63 6f 72 72 65 73 70  pute its corresp
3260: 6f 6e 64 69 6e 67 0a 2a 2a 20 6e 75 6d 65 72 69  onding.** numeri
3270: 63 20 74 79 70 65 2c 20 69 66 20 68 61 73 20 6f  c type, if has o
3280: 6e 65 2e 20 20 53 65 74 20 74 68 65 20 70 4d 65  ne.  Set the pMe
3290: 6d 2d 3e 75 2e 72 20 61 6e 64 20 70 4d 65 6d 2d  m->u.r and pMem-
32a0: 3e 75 2e 69 20 66 69 65 6c 64 73 0a 2a 2a 20 61  >u.i fields.** a
32b0: 63 63 6f 72 64 69 6e 67 6c 79 2e 0a 2a 2f 0a 73  ccordingly..*/.s
32c0: 74 61 74 69 63 20 75 31 36 20 53 51 4c 49 54 45  tatic u16 SQLITE
32d0: 5f 4e 4f 49 4e 4c 49 4e 45 20 63 6f 6d 70 75 74  _NOINLINE comput
32e0: 65 4e 75 6d 65 72 69 63 54 79 70 65 28 4d 65 6d  eNumericType(Mem
32f0: 20 2a 70 4d 65 6d 29 7b 0a 20 20 61 73 73 65 72   *pMem){.  asser
3300: 74 28 20 28 70 4d 65 6d 2d 3e 66 6c 61 67 73 20  t( (pMem->flags 
3310: 26 20 28 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 52  & (MEM_Int|MEM_R
3320: 65 61 6c 29 29 3d 3d 30 20 29 3b 0a 20 20 61 73  eal))==0 );.  as
3330: 73 65 72 74 28 20 28 70 4d 65 6d 2d 3e 66 6c 61  sert( (pMem->fla
3340: 67 73 20 26 20 28 4d 45 4d 5f 53 74 72 7c 4d 45  gs & (MEM_Str|ME
3350: 4d 5f 42 6c 6f 62 29 29 21 3d 30 20 29 3b 0a 20  M_Blob))!=0 );. 
3360: 20 69 66 28 20 73 71 6c 69 74 65 33 41 74 6f 46   if( sqlite3AtoF
3370: 28 70 4d 65 6d 2d 3e 7a 2c 20 26 70 4d 65 6d 2d  (pMem->z, &pMem-
3380: 3e 75 2e 72 2c 20 70 4d 65 6d 2d 3e 6e 2c 20 70  >u.r, pMem->n, p
3390: 4d 65 6d 2d 3e 65 6e 63 29 3d 3d 30 20 29 7b 0a  Mem->enc)==0 ){.
33a0: 20 20 20 20 72 65 74 75 72 6e 20 30 3b 0a 20 20      return 0;.  
33b0: 7d 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 41  }.  if( sqlite3A
33c0: 74 6f 69 36 34 28 70 4d 65 6d 2d 3e 7a 2c 20 26  toi64(pMem->z, &
33d0: 70 4d 65 6d 2d 3e 75 2e 69 2c 20 70 4d 65 6d 2d  pMem->u.i, pMem-
33e0: 3e 6e 2c 20 70 4d 65 6d 2d 3e 65 6e 63 29 3d 3d  >n, pMem->enc)==
33f0: 30 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20  0 ){.    return 
3400: 4d 45 4d 5f 49 6e 74 3b 0a 20 20 7d 0a 20 20 72  MEM_Int;.  }.  r
3410: 65 74 75 72 6e 20 4d 45 4d 5f 52 65 61 6c 3b 0a  eturn MEM_Real;.
3420: 7d 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20  }../*.** Return 
3430: 74 68 65 20 6e 75 6d 65 72 69 63 20 74 79 70 65  the numeric type
3440: 20 66 6f 72 20 70 4d 65 6d 2c 20 65 69 74 68 65   for pMem, eithe
3450: 72 20 4d 45 4d 5f 49 6e 74 20 6f 72 20 4d 45 4d  r MEM_Int or MEM
3460: 5f 52 65 61 6c 20 6f 72 20 62 6f 74 68 20 6f 72  _Real or both or
3470: 0a 2a 2a 20 6e 6f 6e 65 2e 20 20 0a 2a 2a 0a 2a  .** none.  .**.*
3480: 2a 20 55 6e 6c 69 6b 65 20 61 70 70 6c 79 4e 75  * Unlike applyNu
3490: 6d 65 72 69 63 41 66 66 69 6e 69 74 79 28 29 2c  mericAffinity(),
34a0: 20 74 68 69 73 20 72 6f 75 74 69 6e 65 20 64 6f   this routine do
34b0: 65 73 20 6e 6f 74 20 6d 6f 64 69 66 79 20 70 4d  es not modify pM
34c0: 65 6d 2d 3e 66 6c 61 67 73 2e 0a 2a 2a 20 42 75  em->flags..** Bu
34d0: 74 20 69 74 20 64 6f 65 73 20 73 65 74 20 70 4d  t it does set pM
34e0: 65 6d 2d 3e 75 2e 72 20 61 6e 64 20 70 4d 65 6d  em->u.r and pMem
34f0: 2d 3e 75 2e 69 20 61 70 70 72 6f 70 72 69 61 74  ->u.i appropriat
3500: 65 6c 79 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 75  ely..*/.static u
3510: 31 36 20 6e 75 6d 65 72 69 63 54 79 70 65 28 4d  16 numericType(M
3520: 65 6d 20 2a 70 4d 65 6d 29 7b 0a 20 20 69 66 28  em *pMem){.  if(
3530: 20 70 4d 65 6d 2d 3e 66 6c 61 67 73 20 26 20 28   pMem->flags & (
3540: 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 52 65 61 6c  MEM_Int|MEM_Real
3550: 29 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20  ) ){.    return 
3560: 70 4d 65 6d 2d 3e 66 6c 61 67 73 20 26 20 28 4d  pMem->flags & (M
3570: 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 52 65 61 6c 29  EM_Int|MEM_Real)
3580: 3b 0a 20 20 7d 0a 20 20 69 66 28 20 70 4d 65 6d  ;.  }.  if( pMem
3590: 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f 53  ->flags & (MEM_S
35a0: 74 72 7c 4d 45 4d 5f 42 6c 6f 62 29 20 29 7b 0a  tr|MEM_Blob) ){.
35b0: 20 20 20 20 72 65 74 75 72 6e 20 63 6f 6d 70 75      return compu
35c0: 74 65 4e 75 6d 65 72 69 63 54 79 70 65 28 70 4d  teNumericType(pM
35d0: 65 6d 29 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72  em);.  }.  retur
35e0: 6e 20 30 3b 0a 7d 0a 0a 23 69 66 64 65 66 20 53  n 0;.}..#ifdef S
35f0: 51 4c 49 54 45 5f 44 45 42 55 47 0a 2f 2a 0a 2a  QLITE_DEBUG./*.*
3600: 2a 20 57 72 69 74 65 20 61 20 6e 69 63 65 20 73  * Write a nice s
3610: 74 72 69 6e 67 20 72 65 70 72 65 73 65 6e 74 61  tring representa
3620: 74 69 6f 6e 20 6f 66 20 74 68 65 20 63 6f 6e 74  tion of the cont
3630: 65 6e 74 73 20 6f 66 20 63 65 6c 6c 20 70 4d 65  ents of cell pMe
3640: 6d 0a 2a 2a 20 69 6e 74 6f 20 62 75 66 66 65 72  m.** into buffer
3650: 20 7a 42 75 66 2c 20 6c 65 6e 67 74 68 20 6e 42   zBuf, length nB
3660: 75 66 2e 0a 2a 2f 0a 76 6f 69 64 20 73 71 6c 69  uf..*/.void sqli
3670: 74 65 33 56 64 62 65 4d 65 6d 50 72 65 74 74 79  te3VdbeMemPretty
3680: 50 72 69 6e 74 28 4d 65 6d 20 2a 70 4d 65 6d 2c  Print(Mem *pMem,
3690: 20 63 68 61 72 20 2a 7a 42 75 66 29 7b 0a 20 20   char *zBuf){.  
36a0: 63 68 61 72 20 2a 7a 43 73 72 20 3d 20 7a 42 75  char *zCsr = zBu
36b0: 66 3b 0a 20 20 69 6e 74 20 66 20 3d 20 70 4d 65  f;.  int f = pMe
36c0: 6d 2d 3e 66 6c 61 67 73 3b 0a 0a 20 20 73 74 61  m->flags;..  sta
36d0: 74 69 63 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  tic const char *
36e0: 63 6f 6e 73 74 20 65 6e 63 6e 61 6d 65 73 5b 5d  const encnames[]
36f0: 20 3d 20 7b 22 28 58 29 22 2c 20 22 28 38 29 22   = {"(X)", "(8)"
3700: 2c 20 22 28 31 36 4c 45 29 22 2c 20 22 28 31 36  , "(16LE)", "(16
3710: 42 45 29 22 7d 3b 0a 0a 20 20 69 66 28 20 66 26  BE)"};..  if( f&
3720: 4d 45 4d 5f 42 6c 6f 62 20 29 7b 0a 20 20 20 20  MEM_Blob ){.    
3730: 69 6e 74 20 69 3b 0a 20 20 20 20 63 68 61 72 20  int i;.    char 
3740: 63 3b 0a 20 20 20 20 69 66 28 20 66 20 26 20 4d  c;.    if( f & M
3750: 45 4d 5f 44 79 6e 20 29 7b 0a 20 20 20 20 20 20  EM_Dyn ){.      
3760: 63 20 3d 20 27 7a 27 3b 0a 20 20 20 20 20 20 61  c = 'z';.      a
3770: 73 73 65 72 74 28 20 28 66 20 26 20 28 4d 45 4d  ssert( (f & (MEM
3780: 5f 53 74 61 74 69 63 7c 4d 45 4d 5f 45 70 68 65  _Static|MEM_Ephe
3790: 6d 29 29 3d 3d 30 20 29 3b 0a 20 20 20 20 7d 65  m))==0 );.    }e
37a0: 6c 73 65 20 69 66 28 20 66 20 26 20 4d 45 4d 5f  lse if( f & MEM_
37b0: 53 74 61 74 69 63 20 29 7b 0a 20 20 20 20 20 20  Static ){.      
37c0: 63 20 3d 20 27 74 27 3b 0a 20 20 20 20 20 20 61  c = 't';.      a
37d0: 73 73 65 72 74 28 20 28 66 20 26 20 28 4d 45 4d  ssert( (f & (MEM
37e0: 5f 44 79 6e 7c 4d 45 4d 5f 45 70 68 65 6d 29 29  _Dyn|MEM_Ephem))
37f0: 3d 3d 30 20 29 3b 0a 20 20 20 20 7d 65 6c 73 65  ==0 );.    }else
3800: 20 69 66 28 20 66 20 26 20 4d 45 4d 5f 45 70 68   if( f & MEM_Eph
3810: 65 6d 20 29 7b 0a 20 20 20 20 20 20 63 20 3d 20  em ){.      c = 
3820: 27 65 27 3b 0a 20 20 20 20 20 20 61 73 73 65 72  'e';.      asser
3830: 74 28 20 28 66 20 26 20 28 4d 45 4d 5f 53 74 61  t( (f & (MEM_Sta
3840: 74 69 63 7c 4d 45 4d 5f 44 79 6e 29 29 3d 3d 30  tic|MEM_Dyn))==0
3850: 20 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20   );.    }else{. 
3860: 20 20 20 20 20 63 20 3d 20 27 73 27 3b 0a 20 20       c = 's';.  
3870: 20 20 7d 0a 20 20 20 20 2a 28 7a 43 73 72 2b 2b    }.    *(zCsr++
3880: 29 20 3d 20 63 3b 0a 20 20 20 20 73 71 6c 69 74  ) = c;.    sqlit
3890: 65 33 5f 73 6e 70 72 69 6e 74 66 28 31 30 30 2c  e3_snprintf(100,
38a0: 20 7a 43 73 72 2c 20 22 25 64 5b 22 2c 20 70 4d   zCsr, "%d[", pM
38b0: 65 6d 2d 3e 6e 29 3b 0a 20 20 20 20 7a 43 73 72  em->n);.    zCsr
38c0: 20 2b 3d 20 73 71 6c 69 74 65 33 53 74 72 6c 65   += sqlite3Strle
38d0: 6e 33 30 28 7a 43 73 72 29 3b 0a 20 20 20 20 66  n30(zCsr);.    f
38e0: 6f 72 28 69 3d 30 3b 20 69 3c 31 36 20 26 26 20  or(i=0; i<16 && 
38f0: 69 3c 70 4d 65 6d 2d 3e 6e 3b 20 69 2b 2b 29 7b  i<pMem->n; i++){
3900: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 73  .      sqlite3_s
3910: 6e 70 72 69 6e 74 66 28 31 30 30 2c 20 7a 43 73  nprintf(100, zCs
3920: 72 2c 20 22 25 30 32 58 22 2c 20 28 28 69 6e 74  r, "%02X", ((int
3930: 29 70 4d 65 6d 2d 3e 7a 5b 69 5d 20 26 20 30 78  )pMem->z[i] & 0x
3940: 46 46 29 29 3b 0a 20 20 20 20 20 20 7a 43 73 72  FF));.      zCsr
3950: 20 2b 3d 20 73 71 6c 69 74 65 33 53 74 72 6c 65   += sqlite3Strle
3960: 6e 33 30 28 7a 43 73 72 29 3b 0a 20 20 20 20 7d  n30(zCsr);.    }
3970: 0a 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c  .    for(i=0; i<
3980: 31 36 20 26 26 20 69 3c 70 4d 65 6d 2d 3e 6e 3b  16 && i<pMem->n;
3990: 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 63 68 61   i++){.      cha
39a0: 72 20 7a 20 3d 20 70 4d 65 6d 2d 3e 7a 5b 69 5d  r z = pMem->z[i]
39b0: 3b 0a 20 20 20 20 20 20 69 66 28 20 7a 3c 33 32  ;.      if( z<32
39c0: 20 7c 7c 20 7a 3e 31 32 36 20 29 20 2a 7a 43 73   || z>126 ) *zCs
39d0: 72 2b 2b 20 3d 20 27 2e 27 3b 0a 20 20 20 20 20  r++ = '.';.     
39e0: 20 65 6c 73 65 20 2a 7a 43 73 72 2b 2b 20 3d 20   else *zCsr++ = 
39f0: 7a 3b 0a 20 20 20 20 7d 0a 20 20 20 20 2a 28 7a  z;.    }.    *(z
3a00: 43 73 72 2b 2b 29 20 3d 20 27 5d 27 3b 0a 20 20  Csr++) = ']';.  
3a10: 20 20 69 66 28 20 66 20 26 20 4d 45 4d 5f 5a 65    if( f & MEM_Ze
3a20: 72 6f 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69  ro ){.      sqli
3a30: 74 65 33 5f 73 6e 70 72 69 6e 74 66 28 31 30 30  te3_snprintf(100
3a40: 2c 20 7a 43 73 72 2c 22 2b 25 64 7a 22 2c 70 4d  , zCsr,"+%dz",pM
3a50: 65 6d 2d 3e 75 2e 6e 5a 65 72 6f 29 3b 0a 20 20  em->u.nZero);.  
3a60: 20 20 20 20 7a 43 73 72 20 2b 3d 20 73 71 6c 69      zCsr += sqli
3a70: 74 65 33 53 74 72 6c 65 6e 33 30 28 7a 43 73 72  te3Strlen30(zCsr
3a80: 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 2a 7a 43  );.    }.    *zC
3a90: 73 72 20 3d 20 27 5c 30 27 3b 0a 20 20 7d 65 6c  sr = '\0';.  }el
3aa0: 73 65 20 69 66 28 20 66 20 26 20 4d 45 4d 5f 53  se if( f & MEM_S
3ab0: 74 72 20 29 7b 0a 20 20 20 20 69 6e 74 20 6a 2c  tr ){.    int j,
3ac0: 20 6b 3b 0a 20 20 20 20 7a 42 75 66 5b 30 5d 20   k;.    zBuf[0] 
3ad0: 3d 20 27 20 27 3b 0a 20 20 20 20 69 66 28 20 66  = ' ';.    if( f
3ae0: 20 26 20 4d 45 4d 5f 44 79 6e 20 29 7b 0a 20 20   & MEM_Dyn ){.  
3af0: 20 20 20 20 7a 42 75 66 5b 31 5d 20 3d 20 27 7a      zBuf[1] = 'z
3b00: 27 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  ';.      assert(
3b10: 20 28 66 20 26 20 28 4d 45 4d 5f 53 74 61 74 69   (f & (MEM_Stati
3b20: 63 7c 4d 45 4d 5f 45 70 68 65 6d 29 29 3d 3d 30  c|MEM_Ephem))==0
3b30: 20 29 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66   );.    }else if
3b40: 28 20 66 20 26 20 4d 45 4d 5f 53 74 61 74 69 63  ( f & MEM_Static
3b50: 20 29 7b 0a 20 20 20 20 20 20 7a 42 75 66 5b 31   ){.      zBuf[1
3b60: 5d 20 3d 20 27 74 27 3b 0a 20 20 20 20 20 20 61  ] = 't';.      a
3b70: 73 73 65 72 74 28 20 28 66 20 26 20 28 4d 45 4d  ssert( (f & (MEM
3b80: 5f 44 79 6e 7c 4d 45 4d 5f 45 70 68 65 6d 29 29  _Dyn|MEM_Ephem))
3b90: 3d 3d 30 20 29 3b 0a 20 20 20 20 7d 65 6c 73 65  ==0 );.    }else
3ba0: 20 69 66 28 20 66 20 26 20 4d 45 4d 5f 45 70 68   if( f & MEM_Eph
3bb0: 65 6d 20 29 7b 0a 20 20 20 20 20 20 7a 42 75 66  em ){.      zBuf
3bc0: 5b 31 5d 20 3d 20 27 65 27 3b 0a 20 20 20 20 20  [1] = 'e';.     
3bd0: 20 61 73 73 65 72 74 28 20 28 66 20 26 20 28 4d   assert( (f & (M
3be0: 45 4d 5f 53 74 61 74 69 63 7c 4d 45 4d 5f 44 79  EM_Static|MEM_Dy
3bf0: 6e 29 29 3d 3d 30 20 29 3b 0a 20 20 20 20 7d 65  n))==0 );.    }e
3c00: 6c 73 65 7b 0a 20 20 20 20 20 20 7a 42 75 66 5b  lse{.      zBuf[
3c10: 31 5d 20 3d 20 27 73 27 3b 0a 20 20 20 20 7d 0a  1] = 's';.    }.
3c20: 20 20 20 20 6b 20 3d 20 32 3b 0a 20 20 20 20 73      k = 2;.    s
3c30: 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74 66 28  qlite3_snprintf(
3c40: 31 30 30 2c 20 26 7a 42 75 66 5b 6b 5d 2c 20 22  100, &zBuf[k], "
3c50: 25 64 22 2c 20 70 4d 65 6d 2d 3e 6e 29 3b 0a 20  %d", pMem->n);. 
3c60: 20 20 20 6b 20 2b 3d 20 73 71 6c 69 74 65 33 53     k += sqlite3S
3c70: 74 72 6c 65 6e 33 30 28 26 7a 42 75 66 5b 6b 5d  trlen30(&zBuf[k]
3c80: 29 3b 0a 20 20 20 20 7a 42 75 66 5b 6b 2b 2b 5d  );.    zBuf[k++]
3c90: 20 3d 20 27 5b 27 3b 0a 20 20 20 20 66 6f 72 28   = '[';.    for(
3ca0: 6a 3d 30 3b 20 6a 3c 31 35 20 26 26 20 6a 3c 70  j=0; j<15 && j<p
3cb0: 4d 65 6d 2d 3e 6e 3b 20 6a 2b 2b 29 7b 0a 20 20  Mem->n; j++){.  
3cc0: 20 20 20 20 75 38 20 63 20 3d 20 70 4d 65 6d 2d      u8 c = pMem-
3cd0: 3e 7a 5b 6a 5d 3b 0a 20 20 20 20 20 20 69 66 28  >z[j];.      if(
3ce0: 20 63 3e 3d 30 78 32 30 20 26 26 20 63 3c 30 78   c>=0x20 && c<0x
3cf0: 37 66 20 29 7b 0a 20 20 20 20 20 20 20 20 7a 42  7f ){.        zB
3d00: 75 66 5b 6b 2b 2b 5d 20 3d 20 63 3b 0a 20 20 20  uf[k++] = c;.   
3d10: 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
3d20: 20 20 7a 42 75 66 5b 6b 2b 2b 5d 20 3d 20 27 2e    zBuf[k++] = '.
3d30: 27 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  ';.      }.    }
3d40: 0a 20 20 20 20 7a 42 75 66 5b 6b 2b 2b 5d 20 3d  .    zBuf[k++] =
3d50: 20 27 5d 27 3b 0a 20 20 20 20 73 71 6c 69 74 65   ']';.    sqlite
3d60: 33 5f 73 6e 70 72 69 6e 74 66 28 31 30 30 2c 26  3_snprintf(100,&
3d70: 7a 42 75 66 5b 6b 5d 2c 20 65 6e 63 6e 61 6d 65  zBuf[k], encname
3d80: 73 5b 70 4d 65 6d 2d 3e 65 6e 63 5d 29 3b 0a 20  s[pMem->enc]);. 
3d90: 20 20 20 6b 20 2b 3d 20 73 71 6c 69 74 65 33 53     k += sqlite3S
3da0: 74 72 6c 65 6e 33 30 28 26 7a 42 75 66 5b 6b 5d  trlen30(&zBuf[k]
3db0: 29 3b 0a 20 20 20 20 7a 42 75 66 5b 6b 2b 2b 5d  );.    zBuf[k++]
3dc0: 20 3d 20 30 3b 0a 20 20 7d 0a 7d 0a 23 65 6e 64   = 0;.  }.}.#end
3dd0: 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54  if..#ifdef SQLIT
3de0: 45 5f 44 45 42 55 47 0a 2f 2a 0a 2a 2a 20 50 72  E_DEBUG./*.** Pr
3df0: 69 6e 74 20 74 68 65 20 76 61 6c 75 65 20 6f 66  int the value of
3e00: 20 61 20 72 65 67 69 73 74 65 72 20 66 6f 72 20   a register for 
3e10: 74 72 61 63 69 6e 67 20 70 75 72 70 6f 73 65 73  tracing purposes
3e20: 3a 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69 64  :.*/.static void
3e30: 20 6d 65 6d 54 72 61 63 65 50 72 69 6e 74 28 4d   memTracePrint(M
3e40: 65 6d 20 2a 70 29 7b 0a 20 20 69 66 28 20 70 2d  em *p){.  if( p-
3e50: 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 55 6e 64  >flags & MEM_Und
3e60: 65 66 69 6e 65 64 20 29 7b 0a 20 20 20 20 70 72  efined ){.    pr
3e70: 69 6e 74 66 28 22 20 75 6e 64 65 66 69 6e 65 64  intf(" undefined
3e80: 22 29 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20  ");.  }else if( 
3e90: 70 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e  p->flags & MEM_N
3ea0: 75 6c 6c 20 29 7b 0a 20 20 20 20 70 72 69 6e 74  ull ){.    print
3eb0: 66 28 70 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  f(p->flags & MEM
3ec0: 5f 5a 65 72 6f 20 3f 20 22 20 4e 55 4c 4c 2d 6e  _Zero ? " NULL-n
3ed0: 6f 63 68 6e 67 22 20 3a 20 22 20 4e 55 4c 4c 22  ochng" : " NULL"
3ee0: 29 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 28  );.  }else if( (
3ef0: 70 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f  p->flags & (MEM_
3f00: 49 6e 74 7c 4d 45 4d 5f 53 74 72 29 29 3d 3d 28  Int|MEM_Str))==(
3f10: 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 53 74 72 29  MEM_Int|MEM_Str)
3f20: 20 29 7b 0a 20 20 20 20 70 72 69 6e 74 66 28 22   ){.    printf("
3f30: 20 73 69 3a 25 6c 6c 64 22 2c 20 70 2d 3e 75 2e   si:%lld", p->u.
3f40: 69 29 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20  i);.  }else if( 
3f50: 70 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49  p->flags & MEM_I
3f60: 6e 74 20 29 7b 0a 20 20 20 20 70 72 69 6e 74 66  nt ){.    printf
3f70: 28 22 20 69 3a 25 6c 6c 64 22 2c 20 70 2d 3e 75  (" i:%lld", p->u
3f80: 2e 69 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c  .i);.#ifndef SQL
3f90: 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e  ITE_OMIT_FLOATIN
3fa0: 47 5f 50 4f 49 4e 54 0a 20 20 7d 65 6c 73 65 20  G_POINT.  }else 
3fb0: 69 66 28 20 70 2d 3e 66 6c 61 67 73 20 26 20 4d  if( p->flags & M
3fc0: 45 4d 5f 52 65 61 6c 20 29 7b 0a 20 20 20 20 70  EM_Real ){.    p
3fd0: 72 69 6e 74 66 28 22 20 72 3a 25 67 22 2c 20 70  rintf(" r:%g", p
3fe0: 2d 3e 75 2e 72 29 3b 0a 23 65 6e 64 69 66 0a 20  ->u.r);.#endif. 
3ff0: 20 7d 65 6c 73 65 20 69 66 28 20 70 2d 3e 66 6c   }else if( p->fl
4000: 61 67 73 20 26 20 4d 45 4d 5f 52 6f 77 53 65 74  ags & MEM_RowSet
4010: 20 29 7b 0a 20 20 20 20 70 72 69 6e 74 66 28 22   ){.    printf("
4020: 20 28 72 6f 77 73 65 74 29 22 29 3b 0a 20 20 7d   (rowset)");.  }
4030: 65 6c 73 65 7b 0a 20 20 20 20 63 68 61 72 20 7a  else{.    char z
4040: 42 75 66 5b 32 30 30 5d 3b 0a 20 20 20 20 73 71  Buf[200];.    sq
4050: 6c 69 74 65 33 56 64 62 65 4d 65 6d 50 72 65 74  lite3VdbeMemPret
4060: 74 79 50 72 69 6e 74 28 70 2c 20 7a 42 75 66 29  tyPrint(p, zBuf)
4070: 3b 0a 20 20 20 20 70 72 69 6e 74 66 28 22 20 25  ;.    printf(" %
4080: 73 22 2c 20 7a 42 75 66 29 3b 0a 20 20 7d 0a 20  s", zBuf);.  }. 
4090: 20 69 66 28 20 70 2d 3e 66 6c 61 67 73 20 26 20   if( p->flags & 
40a0: 4d 45 4d 5f 53 75 62 74 79 70 65 20 29 20 70 72  MEM_Subtype ) pr
40b0: 69 6e 74 66 28 22 20 73 75 62 74 79 70 65 3d 30  intf(" subtype=0
40c0: 78 25 30 32 78 22 2c 20 70 2d 3e 65 53 75 62 74  x%02x", p->eSubt
40d0: 79 70 65 29 3b 0a 7d 0a 73 74 61 74 69 63 20 76  ype);.}.static v
40e0: 6f 69 64 20 72 65 67 69 73 74 65 72 54 72 61 63  oid registerTrac
40f0: 65 28 69 6e 74 20 69 52 65 67 2c 20 4d 65 6d 20  e(int iReg, Mem 
4100: 2a 70 29 7b 0a 20 20 70 72 69 6e 74 66 28 22 52  *p){.  printf("R
4110: 45 47 5b 25 64 5d 20 3d 20 22 2c 20 69 52 65 67  EG[%d] = ", iReg
4120: 29 3b 0a 20 20 6d 65 6d 54 72 61 63 65 50 72 69  );.  memTracePri
4130: 6e 74 28 70 29 3b 0a 20 20 70 72 69 6e 74 66 28  nt(p);.  printf(
4140: 22 5c 6e 22 29 3b 0a 20 20 73 71 6c 69 74 65 33  "\n");.  sqlite3
4150: 56 64 62 65 43 68 65 63 6b 4d 65 6d 49 6e 76 61  VdbeCheckMemInva
4160: 72 69 61 6e 74 73 28 70 29 3b 0a 7d 0a 23 65 6e  riants(p);.}.#en
4170: 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49  dif..#ifdef SQLI
4180: 54 45 5f 44 45 42 55 47 0a 23 20 20 64 65 66 69  TE_DEBUG.#  defi
4190: 6e 65 20 52 45 47 49 53 54 45 52 5f 54 52 41 43  ne REGISTER_TRAC
41a0: 45 28 52 2c 4d 29 20 69 66 28 64 62 2d 3e 66 6c  E(R,M) if(db->fl
41b0: 61 67 73 26 53 51 4c 49 54 45 5f 56 64 62 65 54  ags&SQLITE_VdbeT
41c0: 72 61 63 65 29 72 65 67 69 73 74 65 72 54 72 61  race)registerTra
41d0: 63 65 28 52 2c 4d 29 0a 23 65 6c 73 65 0a 23 20  ce(R,M).#else.# 
41e0: 20 64 65 66 69 6e 65 20 52 45 47 49 53 54 45 52   define REGISTER
41f0: 5f 54 52 41 43 45 28 52 2c 4d 29 0a 23 65 6e 64  _TRACE(R,M).#end
4200: 69 66 0a 0a 0a 23 69 66 64 65 66 20 56 44 42 45  if...#ifdef VDBE
4210: 5f 50 52 4f 46 49 4c 45 0a 0a 2f 2a 20 0a 2a 2a  _PROFILE../* .**
4220: 20 68 77 74 69 6d 65 2e 68 20 63 6f 6e 74 61 69   hwtime.h contai
4230: 6e 73 20 69 6e 6c 69 6e 65 20 61 73 73 65 6d 62  ns inline assemb
4240: 6c 65 72 20 63 6f 64 65 20 66 6f 72 20 69 6d 70  ler code for imp
4250: 6c 65 6d 65 6e 74 69 6e 67 20 0a 2a 2a 20 68 69  lementing .** hi
4260: 67 68 2d 70 65 72 66 6f 72 6d 61 6e 63 65 20 74  gh-performance t
4270: 69 6d 69 6e 67 20 72 6f 75 74 69 6e 65 73 2e 0a  iming routines..
4280: 2a 2f 0a 23 69 6e 63 6c 75 64 65 20 22 68 77 74  */.#include "hwt
4290: 69 6d 65 2e 68 22 0a 0a 23 65 6e 64 69 66 0a 0a  ime.h"..#endif..
42a0: 23 69 66 6e 64 65 66 20 4e 44 45 42 55 47 0a 2f  #ifndef NDEBUG./
42b0: 2a 0a 2a 2a 20 54 68 69 73 20 66 75 6e 63 74 69  *.** This functi
42c0: 6f 6e 20 69 73 20 6f 6e 6c 79 20 63 61 6c 6c 65  on is only calle
42d0: 64 20 66 72 6f 6d 20 77 69 74 68 69 6e 20 61 6e  d from within an
42e0: 20 61 73 73 65 72 74 28 29 20 65 78 70 72 65 73   assert() expres
42f0: 73 69 6f 6e 2e 20 49 74 0a 2a 2a 20 63 68 65 63  sion. It.** chec
4300: 6b 73 20 74 68 61 74 20 74 68 65 20 73 71 6c 69  ks that the sqli
4310: 74 65 33 2e 6e 54 72 61 6e 73 61 63 74 69 6f 6e  te3.nTransaction
4320: 20 76 61 72 69 61 62 6c 65 20 69 73 20 63 6f 72   variable is cor
4330: 72 65 63 74 6c 79 20 73 65 74 20 74 6f 0a 2a 2a  rectly set to.**
4340: 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 6e   the number of n
4350: 6f 6e 2d 74 72 61 6e 73 61 63 74 69 6f 6e 20 73  on-transaction s
4360: 61 76 65 70 6f 69 6e 74 73 20 63 75 72 72 65 6e  avepoints curren
4370: 74 6c 79 20 69 6e 20 74 68 65 20 0a 2a 2a 20 6c  tly in the .** l
4380: 69 6e 6b 65 64 20 6c 69 73 74 20 73 74 61 72 74  inked list start
4390: 69 6e 67 20 61 74 20 73 71 6c 69 74 65 33 2e 70  ing at sqlite3.p
43a0: 53 61 76 65 70 6f 69 6e 74 2e 0a 2a 2a 20 0a 2a  Savepoint..** .*
43b0: 2a 20 55 73 61 67 65 3a 0a 2a 2a 0a 2a 2a 20 20  * Usage:.**.**  
43c0: 20 20 20 61 73 73 65 72 74 28 20 63 68 65 63 6b     assert( check
43d0: 53 61 76 65 70 6f 69 6e 74 43 6f 75 6e 74 28 64  SavepointCount(d
43e0: 62 29 20 29 3b 0a 2a 2f 0a 73 74 61 74 69 63 20  b) );.*/.static 
43f0: 69 6e 74 20 63 68 65 63 6b 53 61 76 65 70 6f 69  int checkSavepoi
4400: 6e 74 43 6f 75 6e 74 28 73 71 6c 69 74 65 33 20  ntCount(sqlite3 
4410: 2a 64 62 29 7b 0a 20 20 69 6e 74 20 6e 20 3d 20  *db){.  int n = 
4420: 30 3b 0a 20 20 53 61 76 65 70 6f 69 6e 74 20 2a  0;.  Savepoint *
4430: 70 3b 0a 20 20 66 6f 72 28 70 3d 64 62 2d 3e 70  p;.  for(p=db->p
4440: 53 61 76 65 70 6f 69 6e 74 3b 20 70 3b 20 70 3d  Savepoint; p; p=
4450: 70 2d 3e 70 4e 65 78 74 29 20 6e 2b 2b 3b 0a 20  p->pNext) n++;. 
4460: 20 61 73 73 65 72 74 28 20 6e 3d 3d 28 64 62 2d   assert( n==(db-
4470: 3e 6e 53 61 76 65 70 6f 69 6e 74 20 2b 20 64 62  >nSavepoint + db
4480: 2d 3e 69 73 54 72 61 6e 73 61 63 74 69 6f 6e 53  ->isTransactionS
4490: 61 76 65 70 6f 69 6e 74 29 20 29 3b 0a 20 20 72  avepoint) );.  r
44a0: 65 74 75 72 6e 20 31 3b 0a 7d 0a 23 65 6e 64 69  eturn 1;.}.#endi
44b0: 66 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20  f../*.** Return 
44c0: 74 68 65 20 72 65 67 69 73 74 65 72 20 6f 66 20  the register of 
44d0: 70 4f 70 2d 3e 70 32 20 61 66 74 65 72 20 66 69  pOp->p2 after fi
44e0: 72 73 74 20 70 72 65 70 61 72 69 6e 67 20 69 74  rst preparing it
44f0: 20 74 6f 20 62 65 0a 2a 2a 20 6f 76 65 72 77 72   to be.** overwr
4500: 69 74 74 65 6e 20 77 69 74 68 20 61 6e 20 69 6e  itten with an in
4510: 74 65 67 65 72 20 76 61 6c 75 65 2e 0a 2a 2f 0a  teger value..*/.
4520: 73 74 61 74 69 63 20 53 51 4c 49 54 45 5f 4e 4f  static SQLITE_NO
4530: 49 4e 4c 49 4e 45 20 4d 65 6d 20 2a 6f 75 74 32  INLINE Mem *out2
4540: 50 72 65 72 65 6c 65 61 73 65 57 69 74 68 43 6c  PrereleaseWithCl
4550: 65 61 72 28 4d 65 6d 20 2a 70 4f 75 74 29 7b 0a  ear(Mem *pOut){.
4560: 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
4570: 53 65 74 4e 75 6c 6c 28 70 4f 75 74 29 3b 0a 20  SetNull(pOut);. 
4580: 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d   pOut->flags = M
4590: 45 4d 5f 49 6e 74 3b 0a 20 20 72 65 74 75 72 6e  EM_Int;.  return
45a0: 20 70 4f 75 74 3b 0a 7d 0a 73 74 61 74 69 63 20   pOut;.}.static 
45b0: 4d 65 6d 20 2a 6f 75 74 32 50 72 65 72 65 6c 65  Mem *out2Prerele
45c0: 61 73 65 28 56 64 62 65 20 2a 70 2c 20 56 64 62  ase(Vdbe *p, Vdb
45d0: 65 4f 70 20 2a 70 4f 70 29 7b 0a 20 20 4d 65 6d  eOp *pOp){.  Mem
45e0: 20 2a 70 4f 75 74 3b 0a 20 20 61 73 73 65 72 74   *pOut;.  assert
45f0: 28 20 70 4f 70 2d 3e 70 32 3e 30 20 29 3b 0a 20  ( pOp->p2>0 );. 
4600: 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32   assert( pOp->p2
4610: 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70  <=(p->nMem+1 - p
4620: 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20  ->nCursor) );.  
4630: 70 4f 75 74 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b  pOut = &p->aMem[
4640: 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 6d 65 6d 41  pOp->p2];.  memA
4650: 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20  boutToChange(p, 
4660: 70 4f 75 74 29 3b 0a 20 20 69 66 28 20 56 64 62  pOut);.  if( Vdb
4670: 65 4d 65 6d 44 79 6e 61 6d 69 63 28 70 4f 75 74  eMemDynamic(pOut
4680: 29 20 29 7b 20 2f 2a 4f 50 54 49 4d 49 5a 41 54  ) ){ /*OPTIMIZAT
4690: 49 4f 4e 2d 49 46 2d 46 41 4c 53 45 2a 2f 0a 20  ION-IF-FALSE*/. 
46a0: 20 20 20 72 65 74 75 72 6e 20 6f 75 74 32 50 72     return out2Pr
46b0: 65 72 65 6c 65 61 73 65 57 69 74 68 43 6c 65 61  ereleaseWithClea
46c0: 72 28 70 4f 75 74 29 3b 0a 20 20 7d 65 6c 73 65  r(pOut);.  }else
46d0: 7b 0a 20 20 20 20 70 4f 75 74 2d 3e 66 6c 61 67  {.    pOut->flag
46e0: 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20 20  s = MEM_Int;.   
46f0: 20 72 65 74 75 72 6e 20 70 4f 75 74 3b 0a 20 20   return pOut;.  
4700: 7d 0a 7d 0a 0a 0a 2f 2a 0a 2a 2a 20 45 78 65 63  }.}.../*.** Exec
4710: 75 74 65 20 61 73 20 6d 75 63 68 20 6f 66 20 61  ute as much of a
4720: 20 56 44 42 45 20 70 72 6f 67 72 61 6d 20 61 73   VDBE program as
4730: 20 77 65 20 63 61 6e 2e 0a 2a 2a 20 54 68 69 73   we can..** This
4740: 20 69 73 20 74 68 65 20 63 6f 72 65 20 6f 66 20   is the core of 
4750: 73 71 6c 69 74 65 33 5f 73 74 65 70 28 29 2e 20  sqlite3_step(). 
4760: 20 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33   .*/.int sqlite3
4770: 56 64 62 65 45 78 65 63 28 0a 20 20 56 64 62 65  VdbeExec(.  Vdbe
4780: 20 2a 70 20 20 20 20 20 20 20 20 20 20 20 20 20   *p             
4790: 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 56 44         /* The VD
47a0: 42 45 20 2a 2f 0a 29 7b 0a 20 20 4f 70 20 2a 61  BE */.){.  Op *a
47b0: 4f 70 20 3d 20 70 2d 3e 61 4f 70 3b 20 20 20 20  Op = p->aOp;    
47c0: 20 20 20 20 20 20 2f 2a 20 43 6f 70 79 20 6f 66        /* Copy of
47d0: 20 70 2d 3e 61 4f 70 20 2a 2f 0a 20 20 4f 70 20   p->aOp */.  Op 
47e0: 2a 70 4f 70 20 3d 20 61 4f 70 3b 20 20 20 20 20  *pOp = aOp;     
47f0: 20 20 20 20 20 20 20 20 2f 2a 20 43 75 72 72 65          /* Curre
4800: 6e 74 20 6f 70 65 72 61 74 69 6f 6e 20 2a 2f 0a  nt operation */.
4810: 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49  #if defined(SQLI
4820: 54 45 5f 44 45 42 55 47 29 20 7c 7c 20 64 65 66  TE_DEBUG) || def
4830: 69 6e 65 64 28 56 44 42 45 5f 50 52 4f 46 49 4c  ined(VDBE_PROFIL
4840: 45 29 0a 20 20 4f 70 20 2a 70 4f 72 69 67 4f 70  E).  Op *pOrigOp
4850: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
4860: 2f 2a 20 56 61 6c 75 65 20 6f 66 20 70 4f 70 20  /* Value of pOp 
4870: 61 74 20 74 68 65 20 74 6f 70 20 6f 66 20 74 68  at the top of th
4880: 65 20 6c 6f 6f 70 20 2a 2f 0a 23 65 6e 64 69 66  e loop */.#endif
4890: 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44  .#ifdef SQLITE_D
48a0: 45 42 55 47 0a 20 20 69 6e 74 20 6e 45 78 74 72  EBUG.  int nExtr
48b0: 61 44 65 6c 65 74 65 20 3d 20 30 3b 20 20 20 20  aDelete = 0;    
48c0: 20 20 2f 2a 20 56 65 72 69 66 69 65 73 20 46 4f    /* Verifies FO
48d0: 52 44 45 4c 45 54 45 20 61 6e 64 20 41 55 58 44  RDELETE and AUXD
48e0: 45 4c 45 54 45 20 66 6c 61 67 73 20 2a 2f 0a 23  ELETE flags */.#
48f0: 65 6e 64 69 66 0a 20 20 69 6e 74 20 72 63 20 3d  endif.  int rc =
4900: 20 53 51 4c 49 54 45 5f 4f 4b 3b 20 20 20 20 20   SQLITE_OK;     
4910: 20 20 20 2f 2a 20 56 61 6c 75 65 20 74 6f 20 72     /* Value to r
4920: 65 74 75 72 6e 20 2a 2f 0a 20 20 73 71 6c 69 74  eturn */.  sqlit
4930: 65 33 20 2a 64 62 20 3d 20 70 2d 3e 64 62 3b 20  e3 *db = p->db; 
4940: 20 20 20 20 20 20 2f 2a 20 54 68 65 20 64 61 74        /* The dat
4950: 61 62 61 73 65 20 2a 2f 0a 20 20 75 38 20 72 65  abase */.  u8 re
4960: 73 65 74 53 63 68 65 6d 61 4f 6e 46 61 75 6c 74  setSchemaOnFault
4970: 20 3d 20 30 3b 20 2f 2a 20 52 65 73 65 74 20 73   = 0; /* Reset s
4980: 63 68 65 6d 61 20 61 66 74 65 72 20 61 6e 20 65  chema after an e
4990: 72 72 6f 72 20 69 66 20 70 6f 73 69 74 69 76 65  rror if positive
49a0: 20 2a 2f 0a 20 20 75 38 20 65 6e 63 6f 64 69 6e   */.  u8 encodin
49b0: 67 20 3d 20 45 4e 43 28 64 62 29 3b 20 20 20 20  g = ENC(db);    
49c0: 20 2f 2a 20 54 68 65 20 64 61 74 61 62 61 73 65   /* The database
49d0: 20 65 6e 63 6f 64 69 6e 67 20 2a 2f 0a 20 20 69   encoding */.  i
49e0: 6e 74 20 69 43 6f 6d 70 61 72 65 20 3d 20 30 3b  nt iCompare = 0;
49f0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65 73            /* Res
4a00: 75 6c 74 20 6f 66 20 6c 61 73 74 20 63 6f 6d 70  ult of last comp
4a10: 61 72 69 73 6f 6e 20 2a 2f 0a 20 20 75 6e 73 69  arison */.  unsi
4a20: 67 6e 65 64 20 6e 56 6d 53 74 65 70 20 3d 20 30  gned nVmStep = 0
4a30: 3b 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72  ;      /* Number
4a40: 20 6f 66 20 76 69 72 74 75 61 6c 20 6d 61 63 68   of virtual mach
4a50: 69 6e 65 20 73 74 65 70 73 20 2a 2f 0a 23 69 66  ine steps */.#if
4a60: 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
4a70: 5f 50 52 4f 47 52 45 53 53 5f 43 41 4c 4c 42 41  _PROGRESS_CALLBA
4a80: 43 4b 0a 20 20 75 6e 73 69 67 6e 65 64 20 6e 50  CK.  unsigned nP
4a90: 72 6f 67 72 65 73 73 4c 69 6d 69 74 3b 20 20 20  rogressLimit;   
4aa0: 2f 2a 20 49 6e 76 6f 6b 65 20 78 50 72 6f 67 72  /* Invoke xProgr
4ab0: 65 73 73 28 29 20 77 68 65 6e 20 6e 56 6d 53 74  ess() when nVmSt
4ac0: 65 70 20 72 65 61 63 68 65 73 20 74 68 69 73 20  ep reaches this 
4ad0: 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 4d 65 6d 20  */.#endif.  Mem 
4ae0: 2a 61 4d 65 6d 20 3d 20 70 2d 3e 61 4d 65 6d 3b  *aMem = p->aMem;
4af0: 20 20 20 20 20 20 20 2f 2a 20 43 6f 70 79 20 6f         /* Copy o
4b00: 66 20 70 2d 3e 61 4d 65 6d 20 2a 2f 0a 20 20 4d  f p->aMem */.  M
4b10: 65 6d 20 2a 70 49 6e 31 20 3d 20 30 3b 20 20 20  em *pIn1 = 0;   
4b20: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 31 73 74            /* 1st
4b30: 20 69 6e 70 75 74 20 6f 70 65 72 61 6e 64 20 2a   input operand *
4b40: 2f 0a 20 20 4d 65 6d 20 2a 70 49 6e 32 20 3d 20  /.  Mem *pIn2 = 
4b50: 30 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  0;             /
4b60: 2a 20 32 6e 64 20 69 6e 70 75 74 20 6f 70 65 72  * 2nd input oper
4b70: 61 6e 64 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 49  and */.  Mem *pI
4b80: 6e 33 20 3d 20 30 3b 20 20 20 20 20 20 20 20 20  n3 = 0;         
4b90: 20 20 20 20 2f 2a 20 33 72 64 20 69 6e 70 75 74      /* 3rd input
4ba0: 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20 4d 65   operand */.  Me
4bb0: 6d 20 2a 70 4f 75 74 20 3d 20 30 3b 20 20 20 20  m *pOut = 0;    
4bc0: 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 75 74 70           /* Outp
4bd0: 75 74 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 23 69  ut operand */.#i
4be0: 66 64 65 66 20 56 44 42 45 5f 50 52 4f 46 49 4c  fdef VDBE_PROFIL
4bf0: 45 0a 20 20 75 36 34 20 73 74 61 72 74 3b 20 20  E.  u64 start;  
4c00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
4c10: 2a 20 43 50 55 20 63 6c 6f 63 6b 20 63 6f 75 6e  * CPU clock coun
4c20: 74 20 61 74 20 73 74 61 72 74 20 6f 66 20 6f 70  t at start of op
4c30: 63 6f 64 65 20 2a 2f 0a 23 65 6e 64 69 66 0a 20  code */.#endif. 
4c40: 20 2f 2a 2a 2a 20 49 4e 53 45 52 54 20 53 54 41   /*** INSERT STA
4c50: 43 4b 20 55 4e 49 4f 4e 20 48 45 52 45 20 2a 2a  CK UNION HERE **
4c60: 2a 2f 0a 0a 20 20 61 73 73 65 72 74 28 20 70 2d  */..  assert( p-
4c70: 3e 6d 61 67 69 63 3d 3d 56 44 42 45 5f 4d 41 47  >magic==VDBE_MAG
4c80: 49 43 5f 52 55 4e 20 29 3b 20 20 2f 2a 20 73 71  IC_RUN );  /* sq
4c90: 6c 69 74 65 33 5f 73 74 65 70 28 29 20 76 65 72  lite3_step() ver
4ca0: 69 66 69 65 73 20 74 68 69 73 20 2a 2f 0a 20 20  ifies this */.  
4cb0: 73 71 6c 69 74 65 33 56 64 62 65 45 6e 74 65 72  sqlite3VdbeEnter
4cc0: 28 70 29 3b 0a 20 20 69 66 28 20 70 2d 3e 72 63  (p);.  if( p->rc
4cd0: 3d 3d 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 20 29  ==SQLITE_NOMEM )
4ce0: 7b 0a 20 20 20 20 2f 2a 20 54 68 69 73 20 68 61  {.    /* This ha
4cf0: 70 70 65 6e 73 20 69 66 20 61 20 6d 61 6c 6c 6f  ppens if a mallo
4d00: 63 28 29 20 69 6e 73 69 64 65 20 61 20 63 61 6c  c() inside a cal
4d10: 6c 20 74 6f 20 73 71 6c 69 74 65 33 5f 63 6f 6c  l to sqlite3_col
4d20: 75 6d 6e 5f 74 65 78 74 28 29 20 6f 72 0a 20 20  umn_text() or.  
4d30: 20 20 2a 2a 20 73 71 6c 69 74 65 33 5f 63 6f 6c    ** sqlite3_col
4d40: 75 6d 6e 5f 74 65 78 74 31 36 28 29 20 66 61 69  umn_text16() fai
4d50: 6c 65 64 2e 20 20 2a 2f 0a 20 20 20 20 67 6f 74  led.  */.    got
4d60: 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 20 20  o no_mem;.  }.  
4d70: 61 73 73 65 72 74 28 20 70 2d 3e 72 63 3d 3d 53  assert( p->rc==S
4d80: 51 4c 49 54 45 5f 4f 4b 20 7c 7c 20 28 70 2d 3e  QLITE_OK || (p->
4d90: 72 63 26 30 78 66 66 29 3d 3d 53 51 4c 49 54 45  rc&0xff)==SQLITE
4da0: 5f 42 55 53 59 0a 20 20 20 20 20 20 20 20 20 20  _BUSY.          
4db0: 20 20 7c 7c 20 28 70 2d 3e 72 63 26 30 78 46 46    || (p->rc&0xFF
4dc0: 29 3d 3d 53 51 4c 49 54 45 5f 4c 4f 43 4b 45 44  )==SQLITE_LOCKED
4dd0: 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d   );.  assert( p-
4de0: 3e 62 49 73 52 65 61 64 65 72 20 7c 7c 20 70 2d  >bIsReader || p-
4df0: 3e 72 65 61 64 4f 6e 6c 79 21 3d 30 20 29 3b 0a  >readOnly!=0 );.
4e00: 20 20 70 2d 3e 69 43 75 72 72 65 6e 74 54 69 6d    p->iCurrentTim
4e10: 65 20 3d 20 30 3b 0a 20 20 61 73 73 65 72 74 28  e = 0;.  assert(
4e20: 20 70 2d 3e 65 78 70 6c 61 69 6e 3d 3d 30 20 29   p->explain==0 )
4e30: 3b 0a 20 20 70 2d 3e 70 52 65 73 75 6c 74 53 65  ;.  p->pResultSe
4e40: 74 20 3d 20 30 3b 0a 20 20 64 62 2d 3e 62 75 73  t = 0;.  db->bus
4e50: 79 48 61 6e 64 6c 65 72 2e 6e 42 75 73 79 20 3d  yHandler.nBusy =
4e60: 20 30 3b 0a 20 20 69 66 28 20 64 62 2d 3e 75 31   0;.  if( db->u1
4e70: 2e 69 73 49 6e 74 65 72 72 75 70 74 65 64 20 29  .isInterrupted )
4e80: 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
4e90: 74 6f 5f 69 6e 74 65 72 72 75 70 74 3b 0a 20 20  to_interrupt;.  
4ea0: 73 71 6c 69 74 65 33 56 64 62 65 49 4f 54 72 61  sqlite3VdbeIOTra
4eb0: 63 65 53 71 6c 28 70 29 3b 0a 23 69 66 6e 64 65  ceSql(p);.#ifnde
4ec0: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 52  f SQLITE_OMIT_PR
4ed0: 4f 47 52 45 53 53 5f 43 41 4c 4c 42 41 43 4b 0a  OGRESS_CALLBACK.
4ee0: 20 20 69 66 28 20 64 62 2d 3e 78 50 72 6f 67 72    if( db->xProgr
4ef0: 65 73 73 20 29 7b 0a 20 20 20 20 75 33 32 20 69  ess ){.    u32 i
4f00: 50 72 69 6f 72 20 3d 20 70 2d 3e 61 43 6f 75 6e  Prior = p->aCoun
4f10: 74 65 72 5b 53 51 4c 49 54 45 5f 53 54 4d 54 53  ter[SQLITE_STMTS
4f20: 54 41 54 55 53 5f 56 4d 5f 53 54 45 50 5d 3b 0a  TATUS_VM_STEP];.
4f30: 20 20 20 20 61 73 73 65 72 74 28 20 30 20 3c 20      assert( 0 < 
4f40: 64 62 2d 3e 6e 50 72 6f 67 72 65 73 73 4f 70 73  db->nProgressOps
4f50: 20 29 3b 0a 20 20 20 20 6e 50 72 6f 67 72 65 73   );.    nProgres
4f60: 73 4c 69 6d 69 74 20 3d 20 64 62 2d 3e 6e 50 72  sLimit = db->nPr
4f70: 6f 67 72 65 73 73 4f 70 73 20 2d 20 28 69 50 72  ogressOps - (iPr
4f80: 69 6f 72 20 25 20 64 62 2d 3e 6e 50 72 6f 67 72  ior % db->nProgr
4f90: 65 73 73 4f 70 73 29 3b 0a 20 20 7d 65 6c 73 65  essOps);.  }else
4fa0: 7b 0a 20 20 20 20 6e 50 72 6f 67 72 65 73 73 4c  {.    nProgressL
4fb0: 69 6d 69 74 20 3d 20 30 78 66 66 66 66 66 66 66  imit = 0xfffffff
4fc0: 66 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 23 69  f;.  }.#endif.#i
4fd0: 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55  fdef SQLITE_DEBU
4fe0: 47 0a 20 20 73 71 6c 69 74 65 33 42 65 67 69 6e  G.  sqlite3Begin
4ff0: 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28 29 3b 0a  BenignMalloc();.
5000: 20 20 69 66 28 20 70 2d 3e 70 63 3d 3d 30 0a 20    if( p->pc==0. 
5010: 20 20 26 26 20 28 70 2d 3e 64 62 2d 3e 66 6c 61    && (p->db->fla
5020: 67 73 20 26 20 28 53 51 4c 49 54 45 5f 56 64 62  gs & (SQLITE_Vdb
5030: 65 4c 69 73 74 69 6e 67 7c 53 51 4c 49 54 45 5f  eListing|SQLITE_
5040: 56 64 62 65 45 51 50 7c 53 51 4c 49 54 45 5f 56  VdbeEQP|SQLITE_V
5050: 64 62 65 54 72 61 63 65 29 29 21 3d 30 0a 20 20  dbeTrace))!=0.  
5060: 29 7b 0a 20 20 20 20 69 6e 74 20 69 3b 0a 20 20  ){.    int i;.  
5070: 20 20 69 6e 74 20 6f 6e 63 65 20 3d 20 31 3b 0a    int once = 1;.
5080: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 50      sqlite3VdbeP
5090: 72 69 6e 74 53 71 6c 28 70 29 3b 0a 20 20 20 20  rintSql(p);.    
50a0: 69 66 28 20 70 2d 3e 64 62 2d 3e 66 6c 61 67 73  if( p->db->flags
50b0: 20 26 20 53 51 4c 49 54 45 5f 56 64 62 65 4c 69   & SQLITE_VdbeLi
50c0: 73 74 69 6e 67 20 29 7b 0a 20 20 20 20 20 20 70  sting ){.      p
50d0: 72 69 6e 74 66 28 22 56 44 42 45 20 50 72 6f 67  rintf("VDBE Prog
50e0: 72 61 6d 20 4c 69 73 74 69 6e 67 3a 5c 6e 22 29  ram Listing:\n")
50f0: 3b 0a 20 20 20 20 20 20 66 6f 72 28 69 3d 30 3b  ;.      for(i=0;
5100: 20 69 3c 70 2d 3e 6e 4f 70 3b 20 69 2b 2b 29 7b   i<p->nOp; i++){
5110: 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
5120: 56 64 62 65 50 72 69 6e 74 4f 70 28 73 74 64 6f  VdbePrintOp(stdo
5130: 75 74 2c 20 69 2c 20 26 61 4f 70 5b 69 5d 29 3b  ut, i, &aOp[i]);
5140: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20  .      }.    }. 
5150: 20 20 20 69 66 28 20 70 2d 3e 64 62 2d 3e 66 6c     if( p->db->fl
5160: 61 67 73 20 26 20 53 51 4c 49 54 45 5f 56 64 62  ags & SQLITE_Vdb
5170: 65 45 51 50 20 29 7b 0a 20 20 20 20 20 20 66 6f  eEQP ){.      fo
5180: 72 28 69 3d 30 3b 20 69 3c 70 2d 3e 6e 4f 70 3b  r(i=0; i<p->nOp;
5190: 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 69   i++){.        i
51a0: 66 28 20 61 4f 70 5b 69 5d 2e 6f 70 63 6f 64 65  f( aOp[i].opcode
51b0: 3d 3d 4f 50 5f 45 78 70 6c 61 69 6e 20 29 7b 0a  ==OP_Explain ){.
51c0: 20 20 20 20 20 20 20 20 20 20 69 66 28 20 6f 6e            if( on
51d0: 63 65 20 29 20 70 72 69 6e 74 66 28 22 56 44 42  ce ) printf("VDB
51e0: 45 20 51 75 65 72 79 20 50 6c 61 6e 3a 5c 6e 22  E Query Plan:\n"
51f0: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 70 72 69  );.          pri
5200: 6e 74 66 28 22 25 73 5c 6e 22 2c 20 61 4f 70 5b  ntf("%s\n", aOp[
5210: 69 5d 2e 70 34 2e 7a 29 3b 0a 20 20 20 20 20 20  i].p4.z);.      
5220: 20 20 20 20 6f 6e 63 65 20 3d 20 30 3b 0a 20 20      once = 0;.  
5230: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a        }.      }.
5240: 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 70 2d      }.    if( p-
5250: 3e 64 62 2d 3e 66 6c 61 67 73 20 26 20 53 51 4c  >db->flags & SQL
5260: 49 54 45 5f 56 64 62 65 54 72 61 63 65 20 29 20  ITE_VdbeTrace ) 
5270: 20 70 72 69 6e 74 66 28 22 56 44 42 45 20 54 72   printf("VDBE Tr
5280: 61 63 65 3a 5c 6e 22 29 3b 0a 20 20 7d 0a 20 20  ace:\n");.  }.  
5290: 73 71 6c 69 74 65 33 45 6e 64 42 65 6e 69 67 6e  sqlite3EndBenign
52a0: 4d 61 6c 6c 6f 63 28 29 3b 0a 23 65 6e 64 69 66  Malloc();.#endif
52b0: 0a 20 20 66 6f 72 28 70 4f 70 3d 26 61 4f 70 5b  .  for(pOp=&aOp[
52c0: 70 2d 3e 70 63 5d 3b 20 31 3b 20 70 4f 70 2b 2b  p->pc]; 1; pOp++
52d0: 29 7b 0a 20 20 20 20 2f 2a 20 45 72 72 6f 72 73  ){.    /* Errors
52e0: 20 61 72 65 20 64 65 74 65 63 74 65 64 20 62 79   are detected by
52f0: 20 69 6e 64 69 76 69 64 75 61 6c 20 6f 70 63 6f   individual opco
5300: 64 65 73 2c 20 77 69 74 68 20 61 6e 20 69 6d 6d  des, with an imm
5310: 65 64 69 61 74 65 0a 20 20 20 20 2a 2a 20 6a 75  ediate.    ** ju
5320: 6d 70 73 20 74 6f 20 61 62 6f 72 74 5f 64 75 65  mps to abort_due
5330: 5f 74 6f 5f 65 72 72 6f 72 2e 20 2a 2f 0a 20 20  _to_error. */.  
5340: 20 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53 51    assert( rc==SQ
5350: 4c 49 54 45 5f 4f 4b 20 29 3b 0a 0a 20 20 20 20  LITE_OK );..    
5360: 61 73 73 65 72 74 28 20 70 4f 70 3e 3d 61 4f 70  assert( pOp>=aOp
5370: 20 26 26 20 70 4f 70 3c 26 61 4f 70 5b 70 2d 3e   && pOp<&aOp[p->
5380: 6e 4f 70 5d 29 3b 0a 23 69 66 64 65 66 20 56 44  nOp]);.#ifdef VD
5390: 42 45 5f 50 52 4f 46 49 4c 45 0a 20 20 20 20 73  BE_PROFILE.    s
53a0: 74 61 72 74 20 3d 20 73 71 6c 69 74 65 33 4e 50  tart = sqlite3NP
53b0: 72 6f 66 69 6c 65 43 6e 74 20 3f 20 73 71 6c 69  rofileCnt ? sqli
53c0: 74 65 33 4e 50 72 6f 66 69 6c 65 43 6e 74 20 3a  te3NProfileCnt :
53d0: 20 73 71 6c 69 74 65 33 48 77 74 69 6d 65 28 29   sqlite3Hwtime()
53e0: 3b 0a 23 65 6e 64 69 66 0a 20 20 20 20 6e 56 6d  ;.#endif.    nVm
53f0: 53 74 65 70 2b 2b 3b 0a 23 69 66 64 65 66 20 53  Step++;.#ifdef S
5400: 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 4d  QLITE_ENABLE_STM
5410: 54 5f 53 43 41 4e 53 54 41 54 55 53 0a 20 20 20  T_SCANSTATUS.   
5420: 20 69 66 28 20 70 2d 3e 61 6e 45 78 65 63 20 29   if( p->anExec )
5430: 20 70 2d 3e 61 6e 45 78 65 63 5b 28 69 6e 74 29   p->anExec[(int)
5440: 28 70 4f 70 2d 61 4f 70 29 5d 2b 2b 3b 0a 23 65  (pOp-aOp)]++;.#e
5450: 6e 64 69 66 0a 0a 20 20 20 20 2f 2a 20 4f 6e 6c  ndif..    /* Onl
5460: 79 20 61 6c 6c 6f 77 20 74 72 61 63 69 6e 67 20  y allow tracing 
5470: 69 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 20  if SQLITE_DEBUG 
5480: 69 73 20 64 65 66 69 6e 65 64 2e 0a 20 20 20 20  is defined..    
5490: 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  */.#ifdef SQLITE
54a0: 5f 44 45 42 55 47 0a 20 20 20 20 69 66 28 20 64  _DEBUG.    if( d
54b0: 62 2d 3e 66 6c 61 67 73 20 26 20 53 51 4c 49 54  b->flags & SQLIT
54c0: 45 5f 56 64 62 65 54 72 61 63 65 20 29 7b 0a 20  E_VdbeTrace ){. 
54d0: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
54e0: 50 72 69 6e 74 4f 70 28 73 74 64 6f 75 74 2c 20  PrintOp(stdout, 
54f0: 28 69 6e 74 29 28 70 4f 70 20 2d 20 61 4f 70 29  (int)(pOp - aOp)
5500: 2c 20 70 4f 70 29 3b 0a 20 20 20 20 7d 0a 23 65  , pOp);.    }.#e
5510: 6e 64 69 66 0a 20 20 20 20 20 20 0a 0a 20 20 20  ndif.      ..   
5520: 20 2f 2a 20 43 68 65 63 6b 20 74 6f 20 73 65 65   /* Check to see
5530: 20 69 66 20 77 65 20 6e 65 65 64 20 74 6f 20 73   if we need to s
5540: 69 6d 75 6c 61 74 65 20 61 6e 20 69 6e 74 65 72  imulate an inter
5550: 72 75 70 74 2e 20 20 54 68 69 73 20 6f 6e 6c 79  rupt.  This only
5560: 20 68 61 70 70 65 6e 73 0a 20 20 20 20 2a 2a 20   happens.    ** 
5570: 69 66 20 77 65 20 68 61 76 65 20 61 20 73 70 65  if we have a spe
5580: 63 69 61 6c 20 74 65 73 74 20 62 75 69 6c 64 2e  cial test build.
5590: 0a 20 20 20 20 2a 2f 0a 23 69 66 64 65 66 20 53  .    */.#ifdef S
55a0: 51 4c 49 54 45 5f 54 45 53 54 0a 20 20 20 20 69  QLITE_TEST.    i
55b0: 66 28 20 73 71 6c 69 74 65 33 5f 69 6e 74 65 72  f( sqlite3_inter
55c0: 72 75 70 74 5f 63 6f 75 6e 74 3e 30 20 29 7b 0a  rupt_count>0 ){.
55d0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 69 6e        sqlite3_in
55e0: 74 65 72 72 75 70 74 5f 63 6f 75 6e 74 2d 2d 3b  terrupt_count--;
55f0: 0a 20 20 20 20 20 20 69 66 28 20 73 71 6c 69 74  .      if( sqlit
5600: 65 33 5f 69 6e 74 65 72 72 75 70 74 5f 63 6f 75  e3_interrupt_cou
5610: 6e 74 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20  nt==0 ){.       
5620: 20 73 71 6c 69 74 65 33 5f 69 6e 74 65 72 72 75   sqlite3_interru
5630: 70 74 28 64 62 29 3b 0a 20 20 20 20 20 20 7d 0a  pt(db);.      }.
5640: 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 20 20      }.#endif..  
5650: 20 20 2f 2a 20 53 61 6e 69 74 79 20 63 68 65 63    /* Sanity chec
5660: 6b 69 6e 67 20 6f 6e 20 6f 74 68 65 72 20 6f 70  king on other op
5670: 65 72 61 6e 64 73 20 2a 2f 0a 23 69 66 64 65 66  erands */.#ifdef
5680: 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20   SQLITE_DEBUG.  
5690: 20 20 7b 0a 20 20 20 20 20 20 75 38 20 6f 70 50    {.      u8 opP
56a0: 72 6f 70 65 72 74 79 20 3d 20 73 71 6c 69 74 65  roperty = sqlite
56b0: 33 4f 70 63 6f 64 65 50 72 6f 70 65 72 74 79 5b  3OpcodeProperty[
56c0: 70 4f 70 2d 3e 6f 70 63 6f 64 65 5d 3b 0a 20 20  pOp->opcode];.  
56d0: 20 20 20 20 69 66 28 20 28 6f 70 50 72 6f 70 65      if( (opPrope
56e0: 72 74 79 20 26 20 4f 50 46 4c 47 5f 49 4e 31 29  rty & OPFLG_IN1)
56f0: 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 61  !=0 ){.        a
5700: 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 30  ssert( pOp->p1>0
5710: 20 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65   );.        asse
5720: 72 74 28 20 70 4f 70 2d 3e 70 31 3c 3d 28 70 2d  rt( pOp->p1<=(p-
5730: 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75  >nMem+1 - p->nCu
5740: 72 73 6f 72 29 20 29 3b 0a 20 20 20 20 20 20 20  rsor) );.       
5750: 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61   assert( memIsVa
5760: 6c 69 64 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  lid(&aMem[pOp->p
5770: 31 5d 29 20 29 3b 0a 20 20 20 20 20 20 20 20 61  1]) );.        a
5780: 73 73 65 72 74 28 20 73 71 6c 69 74 65 33 56 64  ssert( sqlite3Vd
5790: 62 65 43 68 65 63 6b 4d 65 6d 49 6e 76 61 72 69  beCheckMemInvari
57a0: 61 6e 74 73 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e  ants(&aMem[pOp->
57b0: 70 31 5d 29 20 29 3b 0a 20 20 20 20 20 20 20 20  p1]) );.        
57c0: 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70  REGISTER_TRACE(p
57d0: 4f 70 2d 3e 70 31 2c 20 26 61 4d 65 6d 5b 70 4f  Op->p1, &aMem[pO
57e0: 70 2d 3e 70 31 5d 29 3b 0a 20 20 20 20 20 20 7d  p->p1]);.      }
57f0: 0a 20 20 20 20 20 20 69 66 28 20 28 6f 70 50 72  .      if( (opPr
5800: 6f 70 65 72 74 79 20 26 20 4f 50 46 4c 47 5f 49  operty & OPFLG_I
5810: 4e 32 29 21 3d 30 20 29 7b 0a 20 20 20 20 20 20  N2)!=0 ){.      
5820: 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
5830: 32 3e 30 20 29 3b 0a 20 20 20 20 20 20 20 20 61  2>0 );.        a
5840: 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3c 3d  ssert( pOp->p2<=
5850: 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e  (p->nMem+1 - p->
5860: 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 20 20  nCursor) );.    
5870: 20 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49      assert( memI
5880: 73 56 61 6c 69 64 28 26 61 4d 65 6d 5b 70 4f 70  sValid(&aMem[pOp
5890: 2d 3e 70 32 5d 29 20 29 3b 0a 20 20 20 20 20 20  ->p2]) );.      
58a0: 20 20 61 73 73 65 72 74 28 20 73 71 6c 69 74 65    assert( sqlite
58b0: 33 56 64 62 65 43 68 65 63 6b 4d 65 6d 49 6e 76  3VdbeCheckMemInv
58c0: 61 72 69 61 6e 74 73 28 26 61 4d 65 6d 5b 70 4f  ariants(&aMem[pO
58d0: 70 2d 3e 70 32 5d 29 20 29 3b 0a 20 20 20 20 20  p->p2]) );.     
58e0: 20 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43     REGISTER_TRAC
58f0: 45 28 70 4f 70 2d 3e 70 32 2c 20 26 61 4d 65 6d  E(pOp->p2, &aMem
5900: 5b 70 4f 70 2d 3e 70 32 5d 29 3b 0a 20 20 20 20  [pOp->p2]);.    
5910: 20 20 7d 0a 20 20 20 20 20 20 69 66 28 20 28 6f    }.      if( (o
5920: 70 50 72 6f 70 65 72 74 79 20 26 20 4f 50 46 4c  pProperty & OPFL
5930: 47 5f 49 4e 33 29 21 3d 30 20 29 7b 0a 20 20 20  G_IN3)!=0 ){.   
5940: 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70       assert( pOp
5950: 2d 3e 70 33 3e 30 20 29 3b 0a 20 20 20 20 20 20  ->p3>0 );.      
5960: 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
5970: 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20  3<=(p->nMem+1 - 
5980: 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20  p->nCursor) );. 
5990: 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20 6d         assert( m
59a0: 65 6d 49 73 56 61 6c 69 64 28 26 61 4d 65 6d 5b  emIsValid(&aMem[
59b0: 70 4f 70 2d 3e 70 33 5d 29 20 29 3b 0a 20 20 20  pOp->p3]) );.   
59c0: 20 20 20 20 20 61 73 73 65 72 74 28 20 73 71 6c       assert( sql
59d0: 69 74 65 33 56 64 62 65 43 68 65 63 6b 4d 65 6d  ite3VdbeCheckMem
59e0: 49 6e 76 61 72 69 61 6e 74 73 28 26 61 4d 65 6d  Invariants(&aMem
59f0: 5b 70 4f 70 2d 3e 70 33 5d 29 20 29 3b 0a 20 20  [pOp->p3]) );.  
5a00: 20 20 20 20 20 20 52 45 47 49 53 54 45 52 5f 54        REGISTER_T
5a10: 52 41 43 45 28 70 4f 70 2d 3e 70 33 2c 20 26 61  RACE(pOp->p3, &a
5a20: 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 29 3b 0a 20  Mem[pOp->p3]);. 
5a30: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69 66 28       }.      if(
5a40: 20 28 6f 70 50 72 6f 70 65 72 74 79 20 26 20 4f   (opProperty & O
5a50: 50 46 4c 47 5f 4f 55 54 32 29 21 3d 30 20 29 7b  PFLG_OUT2)!=0 ){
5a60: 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28  .        assert(
5a70: 20 70 4f 70 2d 3e 70 32 3e 30 20 29 3b 0a 20 20   pOp->p2>0 );.  
5a80: 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f        assert( pO
5a90: 70 2d 3e 70 32 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b  p->p2<=(p->nMem+
5aa0: 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29 20  1 - p->nCursor) 
5ab0: 29 3b 0a 20 20 20 20 20 20 20 20 6d 65 6d 41 62  );.        memAb
5ac0: 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 26  outToChange(p, &
5ad0: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 29 3b 0a  aMem[pOp->p2]);.
5ae0: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69 66        }.      if
5af0: 28 20 28 6f 70 50 72 6f 70 65 72 74 79 20 26 20  ( (opProperty & 
5b00: 4f 50 46 4c 47 5f 4f 55 54 33 29 21 3d 30 20 29  OPFLG_OUT3)!=0 )
5b10: 7b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74  {.        assert
5b20: 28 20 70 4f 70 2d 3e 70 33 3e 30 20 29 3b 0a 20  ( pOp->p3>0 );. 
5b30: 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70         assert( p
5b40: 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d  Op->p3<=(p->nMem
5b50: 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29  +1 - p->nCursor)
5b60: 20 29 3b 0a 20 20 20 20 20 20 20 20 6d 65 6d 41   );.        memA
5b70: 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20  boutToChange(p, 
5b80: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 29 3b  &aMem[pOp->p3]);
5b90: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 23  .      }.    }.#
5ba0: 65 6e 64 69 66 0a 23 69 66 20 64 65 66 69 6e 65  endif.#if define
5bb0: 64 28 53 51 4c 49 54 45 5f 44 45 42 55 47 29 20  d(SQLITE_DEBUG) 
5bc0: 7c 7c 20 64 65 66 69 6e 65 64 28 56 44 42 45 5f  || defined(VDBE_
5bd0: 50 52 4f 46 49 4c 45 29 0a 20 20 20 20 70 4f 72  PROFILE).    pOr
5be0: 69 67 4f 70 20 3d 20 70 4f 70 3b 0a 23 65 6e 64  igOp = pOp;.#end
5bf0: 69 66 0a 20 20 0a 20 20 20 20 73 77 69 74 63 68  if.  .    switch
5c00: 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 20 29 7b  ( pOp->opcode ){
5c10: 0a 0a 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ../*************
5c20: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5c30: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5c40: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5c50: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5c60: 0a 2a 2a 20 57 68 61 74 20 66 6f 6c 6c 6f 77 73  .** What follows
5c70: 20 69 73 20 61 20 6d 61 73 73 69 76 65 20 73 77   is a massive sw
5c80: 69 74 63 68 20 73 74 61 74 65 6d 65 6e 74 20 77  itch statement w
5c90: 68 65 72 65 20 65 61 63 68 20 63 61 73 65 20 69  here each case i
5ca0: 6d 70 6c 65 6d 65 6e 74 73 20 61 0a 2a 2a 20 73  mplements a.** s
5cb0: 65 70 61 72 61 74 65 20 69 6e 73 74 72 75 63 74  eparate instruct
5cc0: 69 6f 6e 20 69 6e 20 74 68 65 20 76 69 72 74 75  ion in the virtu
5cd0: 61 6c 20 6d 61 63 68 69 6e 65 2e 20 20 49 66 20  al machine.  If 
5ce0: 77 65 20 66 6f 6c 6c 6f 77 20 74 68 65 20 75 73  we follow the us
5cf0: 75 61 6c 0a 2a 2a 20 69 6e 64 65 6e 74 61 74 69  ual.** indentati
5d00: 6f 6e 20 63 6f 6e 76 65 6e 74 69 6f 6e 73 2c 20  on conventions, 
5d10: 65 61 63 68 20 63 61 73 65 20 73 68 6f 75 6c 64  each case should
5d20: 20 62 65 20 69 6e 64 65 6e 74 65 64 20 62 79 20   be indented by 
5d30: 36 20 73 70 61 63 65 73 2e 20 20 42 75 74 0a 2a  6 spaces.  But.*
5d40: 2a 20 74 68 61 74 20 69 73 20 61 20 6c 6f 74 20  * that is a lot 
5d50: 6f 66 20 77 61 73 74 65 64 20 73 70 61 63 65 20  of wasted space 
5d60: 6f 6e 20 74 68 65 20 6c 65 66 74 20 6d 61 72 67  on the left marg
5d70: 69 6e 2e 20 20 53 6f 20 74 68 65 20 63 6f 64 65  in.  So the code
5d80: 20 77 69 74 68 69 6e 0a 2a 2a 20 74 68 65 20 73   within.** the s
5d90: 77 69 74 63 68 20 73 74 61 74 65 6d 65 6e 74 20  witch statement 
5da0: 77 69 6c 6c 20 62 72 65 61 6b 20 77 69 74 68 20  will break with 
5db0: 63 6f 6e 76 65 6e 74 69 6f 6e 20 61 6e 64 20 62  convention and b
5dc0: 65 20 66 6c 75 73 68 2d 6c 65 66 74 2e 20 41 6e  e flush-left. An
5dd0: 6f 74 68 65 72 0a 2a 2a 20 62 69 67 20 63 6f 6d  other.** big com
5de0: 6d 65 6e 74 20 28 73 69 6d 69 6c 61 72 20 74 6f  ment (similar to
5df0: 20 74 68 69 73 20 6f 6e 65 29 20 77 69 6c 6c 20   this one) will 
5e00: 6d 61 72 6b 20 74 68 65 20 70 6f 69 6e 74 20 69  mark the point i
5e10: 6e 20 74 68 65 20 63 6f 64 65 20 77 68 65 72 65  n the code where
5e20: 0a 2a 2a 20 77 65 20 74 72 61 6e 73 69 74 69 6f  .** we transitio
5e30: 6e 20 62 61 63 6b 20 74 6f 20 6e 6f 72 6d 61 6c  n back to normal
5e40: 20 69 6e 64 65 6e 74 61 74 69 6f 6e 2e 0a 2a 2a   indentation..**
5e50: 0a 2a 2a 20 54 68 65 20 66 6f 72 6d 61 74 74 69  .** The formatti
5e60: 6e 67 20 6f 66 20 65 61 63 68 20 63 61 73 65 20  ng of each case 
5e70: 69 73 20 69 6d 70 6f 72 74 61 6e 74 2e 20 20 54  is important.  T
5e80: 68 65 20 6d 61 6b 65 66 69 6c 65 20 66 6f 72 20  he makefile for 
5e90: 53 51 4c 69 74 65 0a 2a 2a 20 67 65 6e 65 72 61  SQLite.** genera
5ea0: 74 65 73 20 74 77 6f 20 43 20 66 69 6c 65 73 20  tes two C files 
5eb0: 22 6f 70 63 6f 64 65 73 2e 68 22 20 61 6e 64 20  "opcodes.h" and 
5ec0: 22 6f 70 63 6f 64 65 73 2e 63 22 20 62 79 20 73  "opcodes.c" by s
5ed0: 63 61 6e 6e 69 6e 67 20 74 68 69 73 0a 2a 2a 20  canning this.** 
5ee0: 66 69 6c 65 20 6c 6f 6f 6b 69 6e 67 20 66 6f 72  file looking for
5ef0: 20 6c 69 6e 65 73 20 74 68 61 74 20 62 65 67 69   lines that begi
5f00: 6e 20 77 69 74 68 20 22 63 61 73 65 20 4f 50 5f  n with "case OP_
5f10: 22 2e 20 20 54 68 65 20 6f 70 63 6f 64 65 73 2e  ".  The opcodes.
5f20: 68 20 66 69 6c 65 73 0a 2a 2a 20 77 69 6c 6c 20  h files.** will 
5f30: 62 65 20 66 69 6c 6c 65 64 20 77 69 74 68 20 23  be filled with #
5f40: 64 65 66 69 6e 65 73 20 74 68 61 74 20 67 69 76  defines that giv
5f50: 65 20 75 6e 69 71 75 65 20 69 6e 74 65 67 65 72  e unique integer
5f60: 20 76 61 6c 75 65 73 20 74 6f 20 65 61 63 68 0a   values to each.
5f70: 2a 2a 20 6f 70 63 6f 64 65 20 61 6e 64 20 74 68  ** opcode and th
5f80: 65 20 6f 70 63 6f 64 65 73 2e 63 20 66 69 6c 65  e opcodes.c file
5f90: 20 69 73 20 66 69 6c 6c 65 64 20 77 69 74 68 20   is filled with 
5fa0: 61 6e 20 61 72 72 61 79 20 6f 66 20 73 74 72 69  an array of stri
5fb0: 6e 67 73 20 77 68 65 72 65 0a 2a 2a 20 65 61 63  ngs where.** eac
5fc0: 68 20 73 74 72 69 6e 67 20 69 73 20 74 68 65 20  h string is the 
5fd0: 73 79 6d 62 6f 6c 69 63 20 6e 61 6d 65 20 66 6f  symbolic name fo
5fe0: 72 20 74 68 65 20 63 6f 72 72 65 73 70 6f 6e 64  r the correspond
5ff0: 69 6e 67 20 6f 70 63 6f 64 65 2e 20 20 49 66 20  ing opcode.  If 
6000: 74 68 65 0a 2a 2a 20 63 61 73 65 20 73 74 61 74  the.** case stat
6010: 65 6d 65 6e 74 20 69 73 20 66 6f 6c 6c 6f 77 65  ement is followe
6020: 64 20 62 79 20 61 20 63 6f 6d 6d 65 6e 74 20 6f  d by a comment o
6030: 66 20 74 68 65 20 66 6f 72 6d 20 22 2f 23 20 73  f the form "/# s
6040: 61 6d 65 20 61 73 20 2e 2e 2e 20 23 2f 22 0a 2a  ame as ... #/".*
6050: 2a 20 74 68 61 74 20 63 6f 6d 6d 65 6e 74 20 69  * that comment i
6060: 73 20 75 73 65 64 20 74 6f 20 64 65 74 65 72 6d  s used to determ
6070: 69 6e 65 20 74 68 65 20 70 61 72 74 69 63 75 6c  ine the particul
6080: 61 72 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20  ar value of the 
6090: 6f 70 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 4f 74  opcode..**.** Ot
60a0: 68 65 72 20 6b 65 79 77 6f 72 64 73 20 69 6e 20  her keywords in 
60b0: 74 68 65 20 63 6f 6d 6d 65 6e 74 20 74 68 61 74  the comment that
60c0: 20 66 6f 6c 6c 6f 77 73 20 65 61 63 68 20 63 61   follows each ca
60d0: 73 65 20 61 72 65 20 75 73 65 64 20 74 6f 0a 2a  se are used to.*
60e0: 2a 20 63 6f 6e 73 74 72 75 63 74 20 74 68 65 20  * construct the 
60f0: 4f 50 46 4c 47 5f 49 4e 49 54 49 41 4c 49 5a 45  OPFLG_INITIALIZE
6100: 52 20 76 61 6c 75 65 20 74 68 61 74 20 69 6e 69  R value that ini
6110: 74 69 61 6c 69 7a 65 73 20 6f 70 63 6f 64 65 50  tializes opcodeP
6120: 72 6f 70 65 72 74 79 5b 5d 2e 0a 2a 2a 20 4b 65  roperty[]..** Ke
6130: 79 77 6f 72 64 73 20 69 6e 63 6c 75 64 65 3a 20  ywords include: 
6140: 69 6e 31 2c 20 69 6e 32 2c 20 69 6e 33 2c 20 6f  in1, in2, in3, o
6150: 75 74 32 2c 20 6f 75 74 33 2e 20 20 53 65 65 0a  ut2, out3.  See.
6160: 2a 2a 20 74 68 65 20 6d 6b 6f 70 63 6f 64 65 68  ** the mkopcodeh
6170: 2e 61 77 6b 20 73 63 72 69 70 74 20 66 6f 72 20  .awk script for 
6180: 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72  additional infor
6190: 6d 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 44 6f  mation..**.** Do
61a0: 63 75 6d 65 6e 74 61 74 69 6f 6e 20 61 62 6f 75  cumentation abou
61b0: 74 20 56 44 42 45 20 6f 70 63 6f 64 65 73 20 69  t VDBE opcodes i
61c0: 73 20 67 65 6e 65 72 61 74 65 64 20 62 79 20 73  s generated by s
61d0: 63 61 6e 6e 69 6e 67 20 74 68 69 73 20 66 69 6c  canning this fil
61e0: 65 0a 2a 2a 20 66 6f 72 20 6c 69 6e 65 73 20 6f  e.** for lines o
61f0: 66 20 74 68 61 74 20 63 6f 6e 74 61 69 6e 20 22  f that contain "
6200: 4f 70 63 6f 64 65 3a 22 2e 20 20 54 68 61 74 20  Opcode:".  That 
6210: 6c 69 6e 65 20 61 6e 64 20 61 6c 6c 20 73 75 62  line and all sub
6220: 73 65 71 75 65 6e 74 0a 2a 2a 20 63 6f 6d 6d 65  sequent.** comme
6230: 6e 74 20 6c 69 6e 65 73 20 61 72 65 20 75 73 65  nt lines are use
6240: 64 20 69 6e 20 74 68 65 20 67 65 6e 65 72 61 74  d in the generat
6250: 69 6f 6e 20 6f 66 20 74 68 65 20 6f 70 63 6f 64  ion of the opcod
6260: 65 2e 68 74 6d 6c 20 64 6f 63 75 6d 65 6e 74 61  e.html documenta
6270: 74 69 6f 6e 0a 2a 2a 20 66 69 6c 65 2e 0a 2a 2a  tion.** file..**
6280: 0a 2a 2a 20 53 55 4d 4d 41 52 59 3a 0a 2a 2a 0a  .** SUMMARY:.**.
6290: 2a 2a 20 20 20 20 20 46 6f 72 6d 61 74 74 69 6e  **     Formattin
62a0: 67 20 69 73 20 69 6d 70 6f 72 74 61 6e 74 20 74  g is important t
62b0: 6f 20 73 63 72 69 70 74 73 20 74 68 61 74 20 73  o scripts that s
62c0: 63 61 6e 20 74 68 69 73 20 66 69 6c 65 2e 0a 2a  can this file..*
62d0: 2a 20 20 20 20 20 44 6f 20 6e 6f 74 20 64 65 76  *     Do not dev
62e0: 69 61 74 65 20 66 72 6f 6d 20 74 68 65 20 66 6f  iate from the fo
62f0: 72 6d 61 74 74 69 6e 67 20 73 74 79 6c 65 20 63  rmatting style c
6300: 75 72 72 65 6e 74 6c 79 20 69 6e 20 75 73 65 2e  urrently in use.
6310: 0a 2a 2a 0a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  .**.************
6320: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
6330: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
6340: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
6350: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
6360: 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 20  */../* Opcode:  
6370: 47 6f 74 6f 20 2a 20 50 32 20 2a 20 2a 20 2a 0a  Goto * P2 * * *.
6380: 2a 2a 0a 2a 2a 20 41 6e 20 75 6e 63 6f 6e 64 69  **.** An uncondi
6390: 74 69 6f 6e 61 6c 20 6a 75 6d 70 20 74 6f 20 61  tional jump to a
63a0: 64 64 72 65 73 73 20 50 32 2e 0a 2a 2a 20 54 68  ddress P2..** Th
63b0: 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69  e next instructi
63c0: 6f 6e 20 65 78 65 63 75 74 65 64 20 77 69 6c 6c  on executed will
63d0: 20 62 65 20 0a 2a 2a 20 74 68 65 20 6f 6e 65 20   be .** the one 
63e0: 61 74 20 69 6e 64 65 78 20 50 32 20 66 72 6f 6d  at index P2 from
63f0: 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 20 6f   the beginning o
6400: 66 0a 2a 2a 20 74 68 65 20 70 72 6f 67 72 61 6d  f.** the program
6410: 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 31 20 70  ..**.** The P1 p
6420: 61 72 61 6d 65 74 65 72 20 69 73 20 6e 6f 74 20  arameter is not 
6430: 61 63 74 75 61 6c 6c 79 20 75 73 65 64 20 62 79  actually used by
6440: 20 74 68 69 73 20 6f 70 63 6f 64 65 2e 20 20 48   this opcode.  H
6450: 6f 77 65 76 65 72 2c 20 69 74 0a 2a 2a 20 69 73  owever, it.** is
6460: 20 73 6f 6d 65 74 69 6d 65 73 20 73 65 74 20 74   sometimes set t
6470: 6f 20 31 20 69 6e 73 74 65 61 64 20 6f 66 20 30  o 1 instead of 0
6480: 20 61 73 20 61 20 68 69 6e 74 20 74 6f 20 74 68   as a hint to th
6490: 65 20 63 6f 6d 6d 61 6e 64 2d 6c 69 6e 65 20 73  e command-line s
64a0: 68 65 6c 6c 0a 2a 2a 20 74 68 61 74 20 74 68 69  hell.** that thi
64b0: 73 20 47 6f 74 6f 20 69 73 20 74 68 65 20 62 6f  s Goto is the bo
64c0: 74 74 6f 6d 20 6f 66 20 61 20 6c 6f 6f 70 20 61  ttom of a loop a
64d0: 6e 64 20 74 68 61 74 20 74 68 65 20 6c 69 6e 65  nd that the line
64e0: 73 20 66 72 6f 6d 20 50 32 20 64 6f 77 6e 0a 2a  s from P2 down.*
64f0: 2a 20 74 6f 20 74 68 65 20 63 75 72 72 65 6e 74  * to the current
6500: 20 6c 69 6e 65 20 73 68 6f 75 6c 64 20 62 65 20   line should be 
6510: 69 6e 64 65 6e 74 65 64 20 66 6f 72 20 45 58 50  indented for EXP
6520: 4c 41 49 4e 20 6f 75 74 70 75 74 2e 0a 2a 2f 0a  LAIN output..*/.
6530: 63 61 73 65 20 4f 50 5f 47 6f 74 6f 3a 20 7b 20  case OP_Goto: { 
6540: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a              /* j
6550: 75 6d 70 20 2a 2f 0a 6a 75 6d 70 5f 74 6f 5f 70  ump */.jump_to_p
6560: 32 5f 61 6e 64 5f 63 68 65 63 6b 5f 66 6f 72 5f  2_and_check_for_
6570: 69 6e 74 65 72 72 75 70 74 3a 0a 20 20 70 4f 70  interrupt:.  pOp
6580: 20 3d 20 26 61 4f 70 5b 70 4f 70 2d 3e 70 32 20   = &aOp[pOp->p2 
6590: 2d 20 31 5d 3b 0a 0a 20 20 2f 2a 20 4f 70 63 6f  - 1];..  /* Opco
65a0: 64 65 73 20 74 68 61 74 20 61 72 65 20 75 73 65  des that are use
65b0: 64 20 61 73 20 74 68 65 20 62 6f 74 74 6f 6d 20  d as the bottom 
65c0: 6f 66 20 61 20 6c 6f 6f 70 20 28 4f 50 5f 4e 65  of a loop (OP_Ne
65d0: 78 74 2c 20 4f 50 5f 50 72 65 76 2c 0a 20 20 2a  xt, OP_Prev,.  *
65e0: 2a 20 4f 50 5f 56 4e 65 78 74 2c 20 6f 72 20 4f  * OP_VNext, or O
65f0: 50 5f 53 6f 72 74 65 72 4e 65 78 74 29 20 61 6c  P_SorterNext) al
6600: 6c 20 6a 75 6d 70 20 68 65 72 65 20 75 70 6f 6e  l jump here upon
6610: 0a 20 20 2a 2a 20 63 6f 6d 70 6c 65 74 69 6f 6e  .  ** completion
6620: 2e 20 20 43 68 65 63 6b 20 74 6f 20 73 65 65 20  .  Check to see 
6630: 69 66 20 73 71 6c 69 74 65 33 5f 69 6e 74 65 72  if sqlite3_inter
6640: 72 75 70 74 28 29 20 68 61 73 20 62 65 65 6e 20  rupt() has been 
6650: 63 61 6c 6c 65 64 0a 20 20 2a 2a 20 6f 72 20 69  called.  ** or i
6660: 66 20 74 68 65 20 70 72 6f 67 72 65 73 73 20 63  f the progress c
6670: 61 6c 6c 62 61 63 6b 20 6e 65 65 64 73 20 74 6f  allback needs to
6680: 20 62 65 20 69 6e 76 6f 6b 65 64 2e 20 0a 20 20   be invoked. .  
6690: 2a 2a 0a 20 20 2a 2a 20 54 68 69 73 20 63 6f 64  **.  ** This cod
66a0: 65 20 75 73 65 73 20 75 6e 73 74 72 75 63 74 75  e uses unstructu
66b0: 72 65 64 20 22 67 6f 74 6f 22 20 73 74 61 74 65  red "goto" state
66c0: 6d 65 6e 74 73 20 61 6e 64 20 64 6f 65 73 20 6e  ments and does n
66d0: 6f 74 20 6c 6f 6f 6b 20 63 6c 65 61 6e 2e 0a 20  ot look clean.. 
66e0: 20 2a 2a 20 42 75 74 20 74 68 61 74 20 69 73 20   ** But that is 
66f0: 6e 6f 74 20 64 75 65 20 74 6f 20 73 6c 6f 70 70  not due to slopp
6700: 79 20 63 6f 64 69 6e 67 20 68 61 62 69 74 73 2e  y coding habits.
6710: 20 54 68 65 20 63 6f 64 65 20 69 73 20 77 72 69   The code is wri
6720: 74 74 65 6e 20 74 68 69 73 0a 20 20 2a 2a 20 77  tten this.  ** w
6730: 61 79 20 66 6f 72 20 70 65 72 66 6f 72 6d 61 6e  ay for performan
6740: 63 65 2c 20 74 6f 20 61 76 6f 69 64 20 68 61 76  ce, to avoid hav
6750: 69 6e 67 20 74 6f 20 72 75 6e 20 74 68 65 20 69  ing to run the i
6760: 6e 74 65 72 72 75 70 74 20 61 6e 64 20 70 72 6f  nterrupt and pro
6770: 67 72 65 73 73 0a 20 20 2a 2a 20 63 68 65 63 6b  gress.  ** check
6780: 73 20 6f 6e 20 65 76 65 72 79 20 6f 70 63 6f 64  s on every opcod
6790: 65 2e 20 20 54 68 69 73 20 68 65 6c 70 73 20 73  e.  This helps s
67a0: 71 6c 69 74 65 33 5f 73 74 65 70 28 29 20 74 6f  qlite3_step() to
67b0: 20 72 75 6e 20 61 62 6f 75 74 20 31 2e 35 25 0a   run about 1.5%.
67c0: 20 20 2a 2a 20 66 61 73 74 65 72 20 61 63 63 6f    ** faster acco
67d0: 72 64 69 6e 67 20 74 6f 20 22 76 61 6c 67 72 69  rding to "valgri
67e0: 6e 64 20 2d 2d 74 6f 6f 6c 3d 63 61 63 68 65 67  nd --tool=cacheg
67f0: 72 69 6e 64 22 20 2a 2f 0a 63 68 65 63 6b 5f 66  rind" */.check_f
6800: 6f 72 5f 69 6e 74 65 72 72 75 70 74 3a 0a 20 20  or_interrupt:.  
6810: 69 66 28 20 64 62 2d 3e 75 31 2e 69 73 49 6e 74  if( db->u1.isInt
6820: 65 72 72 75 70 74 65 64 20 29 20 67 6f 74 6f 20  errupted ) goto 
6830: 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 69 6e 74  abort_due_to_int
6840: 65 72 72 75 70 74 3b 0a 23 69 66 6e 64 65 66 20  errupt;.#ifndef 
6850: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 52 4f 47  SQLITE_OMIT_PROG
6860: 52 45 53 53 5f 43 41 4c 4c 42 41 43 4b 0a 20 20  RESS_CALLBACK.  
6870: 2f 2a 20 43 61 6c 6c 20 74 68 65 20 70 72 6f 67  /* Call the prog
6880: 72 65 73 73 20 63 61 6c 6c 62 61 63 6b 20 69 66  ress callback if
6890: 20 69 74 20 69 73 20 63 6f 6e 66 69 67 75 72 65   it is configure
68a0: 64 20 61 6e 64 20 74 68 65 20 72 65 71 75 69 72  d and the requir
68b0: 65 64 20 6e 75 6d 62 65 72 0a 20 20 2a 2a 20 6f  ed number.  ** o
68c0: 66 20 56 44 42 45 20 6f 70 73 20 68 61 76 65 20  f VDBE ops have 
68d0: 62 65 65 6e 20 65 78 65 63 75 74 65 64 20 28 65  been executed (e
68e0: 69 74 68 65 72 20 73 69 6e 63 65 20 74 68 69 73  ither since this
68f0: 20 69 6e 76 6f 63 61 74 69 6f 6e 20 6f 66 0a 20   invocation of. 
6900: 20 2a 2a 20 73 71 6c 69 74 65 33 56 64 62 65 45   ** sqlite3VdbeE
6910: 78 65 63 28 29 20 6f 72 20 73 69 6e 63 65 20 6c  xec() or since l
6920: 61 73 74 20 74 69 6d 65 20 74 68 65 20 70 72 6f  ast time the pro
6930: 67 72 65 73 73 20 63 61 6c 6c 62 61 63 6b 20 77  gress callback w
6940: 61 73 20 63 61 6c 6c 65 64 29 2e 0a 20 20 2a 2a  as called)..  **
6950: 20 49 66 20 74 68 65 20 70 72 6f 67 72 65 73 73   If the progress
6960: 20 63 61 6c 6c 62 61 63 6b 20 72 65 74 75 72 6e   callback return
6970: 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 65 78 69 74  s non-zero, exit
6980: 20 74 68 65 20 76 69 72 74 75 61 6c 20 6d 61 63   the virtual mac
6990: 68 69 6e 65 20 77 69 74 68 0a 20 20 2a 2a 20 61  hine with.  ** a
69a0: 20 72 65 74 75 72 6e 20 63 6f 64 65 20 53 51 4c   return code SQL
69b0: 49 54 45 5f 41 42 4f 52 54 2e 0a 20 20 2a 2f 0a  ITE_ABORT..  */.
69c0: 20 20 69 66 28 20 6e 56 6d 53 74 65 70 3e 3d 6e    if( nVmStep>=n
69d0: 50 72 6f 67 72 65 73 73 4c 69 6d 69 74 20 26 26  ProgressLimit &&
69e0: 20 64 62 2d 3e 78 50 72 6f 67 72 65 73 73 21 3d   db->xProgress!=
69f0: 30 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28  0 ){.    assert(
6a00: 20 64 62 2d 3e 6e 50 72 6f 67 72 65 73 73 4f 70   db->nProgressOp
6a10: 73 21 3d 30 20 29 3b 0a 20 20 20 20 6e 50 72 6f  s!=0 );.    nPro
6a20: 67 72 65 73 73 4c 69 6d 69 74 20 3d 20 6e 56 6d  gressLimit = nVm
6a30: 53 74 65 70 20 2b 20 64 62 2d 3e 6e 50 72 6f 67  Step + db->nProg
6a40: 72 65 73 73 4f 70 73 20 2d 20 28 6e 56 6d 53 74  ressOps - (nVmSt
6a50: 65 70 25 64 62 2d 3e 6e 50 72 6f 67 72 65 73 73  ep%db->nProgress
6a60: 4f 70 73 29 3b 0a 20 20 20 20 69 66 28 20 64 62  Ops);.    if( db
6a70: 2d 3e 78 50 72 6f 67 72 65 73 73 28 64 62 2d 3e  ->xProgress(db->
6a80: 70 50 72 6f 67 72 65 73 73 41 72 67 29 20 29 7b  pProgressArg) ){
6a90: 0a 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49  .      rc = SQLI
6aa0: 54 45 5f 49 4e 54 45 52 52 55 50 54 3b 0a 20 20  TE_INTERRUPT;.  
6ab0: 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64      goto abort_d
6ac0: 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20  ue_to_error;.   
6ad0: 20 7d 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20   }.  }.#endif.  
6ae0: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
6af0: 4f 70 63 6f 64 65 3a 20 20 47 6f 73 75 62 20 50  Opcode:  Gosub P
6b00: 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a  1 P2 * * *.**.**
6b10: 20 57 72 69 74 65 20 74 68 65 20 63 75 72 72 65   Write the curre
6b20: 6e 74 20 61 64 64 72 65 73 73 20 6f 6e 74 6f 20  nt address onto 
6b30: 72 65 67 69 73 74 65 72 20 50 31 0a 2a 2a 20 61  register P1.** a
6b40: 6e 64 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20  nd then jump to 
6b50: 61 64 64 72 65 73 73 20 50 32 2e 0a 2a 2f 0a 63  address P2..*/.c
6b60: 61 73 65 20 4f 50 5f 47 6f 73 75 62 3a 20 7b 20  ase OP_Gosub: { 
6b70: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75             /* ju
6b80: 6d 70 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20  mp */.  assert( 
6b90: 70 4f 70 2d 3e 70 31 3e 30 20 26 26 20 70 4f 70  pOp->p1>0 && pOp
6ba0: 2d 3e 70 31 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31  ->p1<=(p->nMem+1
6bb0: 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29   - p->nCursor) )
6bc0: 3b 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d  ;.  pIn1 = &aMem
6bd0: 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
6be0: 65 72 74 28 20 56 64 62 65 4d 65 6d 44 79 6e 61  ert( VdbeMemDyna
6bf0: 6d 69 63 28 70 49 6e 31 29 3d 3d 30 20 29 3b 0a  mic(pIn1)==0 );.
6c00: 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e    memAboutToChan
6c10: 67 65 28 70 2c 20 70 49 6e 31 29 3b 0a 20 20 70  ge(p, pIn1);.  p
6c20: 49 6e 31 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d  In1->flags = MEM
6c30: 5f 49 6e 74 3b 0a 20 20 70 49 6e 31 2d 3e 75 2e  _Int;.  pIn1->u.
6c40: 69 20 3d 20 28 69 6e 74 29 28 70 4f 70 2d 61 4f  i = (int)(pOp-aO
6c50: 70 29 3b 0a 20 20 52 45 47 49 53 54 45 52 5f 54  p);.  REGISTER_T
6c60: 52 41 43 45 28 70 4f 70 2d 3e 70 31 2c 20 70 49  RACE(pOp->p1, pI
6c70: 6e 31 29 3b 0a 0a 20 20 2f 2a 20 4d 6f 73 74 20  n1);..  /* Most 
6c80: 6a 75 6d 70 20 6f 70 65 72 61 74 69 6f 6e 73 20  jump operations 
6c90: 64 6f 20 61 20 67 6f 74 6f 20 74 6f 20 74 68 69  do a goto to thi
6ca0: 73 20 73 70 6f 74 20 69 6e 20 6f 72 64 65 72 20  s spot in order 
6cb0: 74 6f 20 75 70 64 61 74 65 0a 20 20 2a 2a 20 74  to update.  ** t
6cc0: 68 65 20 70 4f 70 20 70 6f 69 6e 74 65 72 2e 20  he pOp pointer. 
6cd0: 2a 2f 0a 6a 75 6d 70 5f 74 6f 5f 70 32 3a 0a 20  */.jump_to_p2:. 
6ce0: 20 70 4f 70 20 3d 20 26 61 4f 70 5b 70 4f 70 2d   pOp = &aOp[pOp-
6cf0: 3e 70 32 20 2d 20 31 5d 3b 0a 20 20 62 72 65 61  >p2 - 1];.  brea
6d00: 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
6d10: 20 20 52 65 74 75 72 6e 20 50 31 20 2a 20 2a 20    Return P1 * * 
6d20: 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70 20 74  * *.**.** Jump t
6d30: 6f 20 74 68 65 20 6e 65 78 74 20 69 6e 73 74 72  o the next instr
6d40: 75 63 74 69 6f 6e 20 61 66 74 65 72 20 74 68 65  uction after the
6d50: 20 61 64 64 72 65 73 73 20 69 6e 20 72 65 67 69   address in regi
6d60: 73 74 65 72 20 50 31 2e 20 20 41 66 74 65 72 0a  ster P1.  After.
6d70: 2a 2a 20 74 68 65 20 6a 75 6d 70 2c 20 72 65 67  ** the jump, reg
6d80: 69 73 74 65 72 20 50 31 20 62 65 63 6f 6d 65 73  ister P1 becomes
6d90: 20 75 6e 64 65 66 69 6e 65 64 2e 0a 2a 2f 0a 63   undefined..*/.c
6da0: 61 73 65 20 4f 50 5f 52 65 74 75 72 6e 3a 20 7b  ase OP_Return: {
6db0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e             /* in
6dc0: 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61  1 */.  pIn1 = &a
6dd0: 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
6de0: 61 73 73 65 72 74 28 20 70 49 6e 31 2d 3e 66 6c  assert( pIn1->fl
6df0: 61 67 73 3d 3d 4d 45 4d 5f 49 6e 74 20 29 3b 0a  ags==MEM_Int );.
6e00: 20 20 70 4f 70 20 3d 20 26 61 4f 70 5b 70 49 6e    pOp = &aOp[pIn
6e10: 31 2d 3e 75 2e 69 5d 3b 0a 20 20 70 49 6e 31 2d  1->u.i];.  pIn1-
6e20: 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 55 6e 64  >flags = MEM_Und
6e30: 65 66 69 6e 65 64 3b 0a 20 20 62 72 65 61 6b 3b  efined;.  break;
6e40: 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49  .}../* Opcode: I
6e50: 6e 69 74 43 6f 72 6f 75 74 69 6e 65 20 50 31 20  nitCoroutine P1 
6e60: 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20  P2 P3 * *.**.** 
6e70: 53 65 74 20 75 70 20 72 65 67 69 73 74 65 72 20  Set up register 
6e80: 50 31 20 73 6f 20 74 68 61 74 20 69 74 20 77 69  P1 so that it wi
6e90: 6c 6c 20 59 69 65 6c 64 20 74 6f 20 74 68 65 20  ll Yield to the 
6ea0: 63 6f 72 6f 75 74 69 6e 65 0a 2a 2a 20 6c 6f 63  coroutine.** loc
6eb0: 61 74 65 64 20 61 74 20 61 64 64 72 65 73 73 20  ated at address 
6ec0: 50 33 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 32 21  P3..**.** If P2!
6ed0: 3d 30 20 74 68 65 6e 20 74 68 65 20 63 6f 72 6f  =0 then the coro
6ee0: 75 74 69 6e 65 20 69 6d 70 6c 65 6d 65 6e 74 61  utine implementa
6ef0: 74 69 6f 6e 20 69 6d 6d 65 64 69 61 74 65 6c 79  tion immediately
6f00: 20 66 6f 6c 6c 6f 77 73 0a 2a 2a 20 74 68 69 73   follows.** this
6f10: 20 6f 70 63 6f 64 65 2e 20 20 53 6f 20 6a 75 6d   opcode.  So jum
6f20: 70 20 6f 76 65 72 20 74 68 65 20 63 6f 72 6f 75  p over the corou
6f30: 74 69 6e 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74  tine implementat
6f40: 69 6f 6e 20 74 6f 0a 2a 2a 20 61 64 64 72 65 73  ion to.** addres
6f50: 73 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20  s P2..**.** See 
6f60: 61 6c 73 6f 3a 20 45 6e 64 43 6f 72 6f 75 74 69  also: EndCorouti
6f70: 6e 65 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 6e  ne.*/.case OP_In
6f80: 69 74 43 6f 72 6f 75 74 69 6e 65 3a 20 7b 20 20  itCoroutine: {  
6f90: 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20     /* jump */.  
6fa0: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
6fb0: 30 20 26 26 20 20 70 4f 70 2d 3e 70 31 3c 3d 28  0 &&  pOp->p1<=(
6fc0: 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e  p->nMem+1 - p->n
6fd0: 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 61 73 73  Cursor) );.  ass
6fe0: 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e 3d 30 20  ert( pOp->p2>=0 
6ff0: 26 26 20 70 4f 70 2d 3e 70 32 3c 70 2d 3e 6e 4f  && pOp->p2<p->nO
7000: 70 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p );.  assert( p
7010: 4f 70 2d 3e 70 33 3e 3d 30 20 26 26 20 70 4f 70  Op->p3>=0 && pOp
7020: 2d 3e 70 33 3c 70 2d 3e 6e 4f 70 20 29 3b 0a 20  ->p3<p->nOp );. 
7030: 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f   pOut = &aMem[pO
7040: 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74  p->p1];.  assert
7050: 28 20 21 56 64 62 65 4d 65 6d 44 79 6e 61 6d 69  ( !VdbeMemDynami
7060: 63 28 70 4f 75 74 29 20 29 3b 0a 20 20 70 4f 75  c(pOut) );.  pOu
7070: 74 2d 3e 75 2e 69 20 3d 20 70 4f 70 2d 3e 70 33  t->u.i = pOp->p3
7080: 20 2d 20 31 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c   - 1;.  pOut->fl
7090: 61 67 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20  ags = MEM_Int;. 
70a0: 20 69 66 28 20 70 4f 70 2d 3e 70 32 20 29 20 67   if( pOp->p2 ) g
70b0: 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a  oto jump_to_p2;.
70c0: 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
70d0: 70 63 6f 64 65 3a 20 20 45 6e 64 43 6f 72 6f 75  pcode:  EndCorou
70e0: 74 69 6e 65 20 50 31 20 2a 20 2a 20 2a 20 2a 0a  tine P1 * * * *.
70f0: 2a 2a 0a 2a 2a 20 54 68 65 20 69 6e 73 74 72 75  **.** The instru
7100: 63 74 69 6f 6e 20 61 74 20 74 68 65 20 61 64 64  ction at the add
7110: 72 65 73 73 20 69 6e 20 72 65 67 69 73 74 65 72  ress in register
7120: 20 50 31 20 69 73 20 61 20 59 69 65 6c 64 2e 0a   P1 is a Yield..
7130: 2a 2a 20 4a 75 6d 70 20 74 6f 20 74 68 65 20 50  ** Jump to the P
7140: 32 20 70 61 72 61 6d 65 74 65 72 20 6f 66 20 74  2 parameter of t
7150: 68 61 74 20 59 69 65 6c 64 2e 0a 2a 2a 20 41 66  hat Yield..** Af
7160: 74 65 72 20 74 68 65 20 6a 75 6d 70 2c 20 72 65  ter the jump, re
7170: 67 69 73 74 65 72 20 50 31 20 62 65 63 6f 6d 65  gister P1 become
7180: 73 20 75 6e 64 65 66 69 6e 65 64 2e 0a 2a 2a 0a  s undefined..**.
7190: 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 49 6e 69  ** See also: Ini
71a0: 74 43 6f 72 6f 75 74 69 6e 65 0a 2a 2f 0a 63 61  tCoroutine.*/.ca
71b0: 73 65 20 4f 50 5f 45 6e 64 43 6f 72 6f 75 74 69  se OP_EndCorouti
71c0: 6e 65 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  ne: {           
71d0: 2f 2a 20 69 6e 31 20 2a 2f 0a 20 20 56 64 62 65  /* in1 */.  Vdbe
71e0: 4f 70 20 2a 70 43 61 6c 6c 65 72 3b 0a 20 20 70  Op *pCaller;.  p
71f0: 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In1 = &aMem[pOp-
7200: 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p1];.  assert( 
7210: 70 49 6e 31 2d 3e 66 6c 61 67 73 3d 3d 4d 45 4d  pIn1->flags==MEM
7220: 5f 49 6e 74 20 29 3b 0a 20 20 61 73 73 65 72 74  _Int );.  assert
7230: 28 20 70 49 6e 31 2d 3e 75 2e 69 3e 3d 30 20 26  ( pIn1->u.i>=0 &
7240: 26 20 70 49 6e 31 2d 3e 75 2e 69 3c 70 2d 3e 6e  & pIn1->u.i<p->n
7250: 4f 70 20 29 3b 0a 20 20 70 43 61 6c 6c 65 72 20  Op );.  pCaller 
7260: 3d 20 26 61 4f 70 5b 70 49 6e 31 2d 3e 75 2e 69  = &aOp[pIn1->u.i
7270: 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 61  ];.  assert( pCa
7280: 6c 6c 65 72 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50  ller->opcode==OP
7290: 5f 59 69 65 6c 64 20 29 3b 0a 20 20 61 73 73 65  _Yield );.  asse
72a0: 72 74 28 20 70 43 61 6c 6c 65 72 2d 3e 70 32 3e  rt( pCaller->p2>
72b0: 3d 30 20 26 26 20 70 43 61 6c 6c 65 72 2d 3e 70  =0 && pCaller->p
72c0: 32 3c 70 2d 3e 6e 4f 70 20 29 3b 0a 20 20 70 4f  2<p->nOp );.  pO
72d0: 70 20 3d 20 26 61 4f 70 5b 70 43 61 6c 6c 65 72  p = &aOp[pCaller
72e0: 2d 3e 70 32 20 2d 20 31 5d 3b 0a 20 20 70 49 6e  ->p2 - 1];.  pIn
72f0: 31 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 55  1->flags = MEM_U
7300: 6e 64 65 66 69 6e 65 64 3b 0a 20 20 62 72 65 61  ndefined;.  brea
7310: 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
7320: 20 20 59 69 65 6c 64 20 50 31 20 50 32 20 2a 20    Yield P1 P2 * 
7330: 2a 20 2a 0a 2a 2a 0a 2a 2a 20 53 77 61 70 20 74  * *.**.** Swap t
7340: 68 65 20 70 72 6f 67 72 61 6d 20 63 6f 75 6e 74  he program count
7350: 65 72 20 77 69 74 68 20 74 68 65 20 76 61 6c 75  er with the valu
7360: 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31  e in register P1
7370: 2e 20 20 54 68 69 73 0a 2a 2a 20 68 61 73 20 74  .  This.** has t
7380: 68 65 20 65 66 66 65 63 74 20 6f 66 20 79 69 65  he effect of yie
7390: 6c 64 69 6e 67 20 74 6f 20 61 20 63 6f 72 6f 75  lding to a corou
73a0: 74 69 6e 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74  tine..**.** If t
73b0: 68 65 20 63 6f 72 6f 75 74 69 6e 65 20 74 68 61  he coroutine tha
73c0: 74 20 69 73 20 6c 61 75 6e 63 68 65 64 20 62 79  t is launched by
73d0: 20 74 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f   this instructio
73e0: 6e 20 65 6e 64 73 20 77 69 74 68 0a 2a 2a 20 59  n ends with.** Y
73f0: 69 65 6c 64 20 6f 72 20 52 65 74 75 72 6e 20 74  ield or Return t
7400: 68 65 6e 20 63 6f 6e 74 69 6e 75 65 20 74 6f 20  hen continue to 
7410: 74 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63  the next instruc
7420: 74 69 6f 6e 2e 20 20 42 75 74 20 69 66 0a 2a 2a  tion.  But if.**
7430: 20 74 68 65 20 63 6f 72 6f 75 74 69 6e 65 20 6c   the coroutine l
7440: 61 75 6e 63 68 65 64 20 62 79 20 74 68 69 73 20  aunched by this 
7450: 69 6e 73 74 72 75 63 74 69 6f 6e 20 65 6e 64 73  instruction ends
7460: 20 77 69 74 68 0a 2a 2a 20 45 6e 64 43 6f 72 6f   with.** EndCoro
7470: 75 74 69 6e 65 2c 20 74 68 65 6e 20 6a 75 6d 70  utine, then jump
7480: 20 74 6f 20 50 32 20 72 61 74 68 65 72 20 74 68   to P2 rather th
7490: 61 6e 20 63 6f 6e 74 69 6e 75 69 6e 67 20 77 69  an continuing wi
74a0: 74 68 20 74 68 65 0a 2a 2a 20 6e 65 78 74 20 69  th the.** next i
74b0: 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a  nstruction..**.*
74c0: 2a 20 53 65 65 20 61 6c 73 6f 3a 20 49 6e 69 74  * See also: Init
74d0: 43 6f 72 6f 75 74 69 6e 65 0a 2a 2f 0a 63 61 73  Coroutine.*/.cas
74e0: 65 20 4f 50 5f 59 69 65 6c 64 3a 20 7b 20 20 20  e OP_Yield: {   
74f0: 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 31 2c           /* in1,
7500: 20 6a 75 6d 70 20 2a 2f 0a 20 20 69 6e 74 20 70   jump */.  int p
7510: 63 44 65 73 74 3b 0a 20 20 70 49 6e 31 20 3d 20  cDest;.  pIn1 = 
7520: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  &aMem[pOp->p1];.
7530: 20 20 61 73 73 65 72 74 28 20 56 64 62 65 4d 65    assert( VdbeMe
7540: 6d 44 79 6e 61 6d 69 63 28 70 49 6e 31 29 3d 3d  mDynamic(pIn1)==
7550: 30 20 29 3b 0a 20 20 70 49 6e 31 2d 3e 66 6c 61  0 );.  pIn1->fla
7560: 67 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20  gs = MEM_Int;.  
7570: 70 63 44 65 73 74 20 3d 20 28 69 6e 74 29 70 49  pcDest = (int)pI
7580: 6e 31 2d 3e 75 2e 69 3b 0a 20 20 70 49 6e 31 2d  n1->u.i;.  pIn1-
7590: 3e 75 2e 69 20 3d 20 28 69 6e 74 29 28 70 4f 70  >u.i = (int)(pOp
75a0: 20 2d 20 61 4f 70 29 3b 0a 20 20 52 45 47 49 53   - aOp);.  REGIS
75b0: 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70  TER_TRACE(pOp->p
75c0: 31 2c 20 70 49 6e 31 29 3b 0a 20 20 70 4f 70 20  1, pIn1);.  pOp 
75d0: 3d 20 26 61 4f 70 5b 70 63 44 65 73 74 5d 3b 0a  = &aOp[pcDest];.
75e0: 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
75f0: 70 63 6f 64 65 3a 20 20 48 61 6c 74 49 66 4e 75  pcode:  HaltIfNu
7600: 6c 6c 20 20 50 31 20 50 32 20 50 33 20 50 34 20  ll  P1 P2 P3 P4 
7610: 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20  P5.** Synopsis: 
7620: 69 66 20 72 5b 50 33 5d 3d 6e 75 6c 6c 20 68 61  if r[P3]=null ha
7630: 6c 74 0a 2a 2a 0a 2a 2a 20 43 68 65 63 6b 20 74  lt.**.** Check t
7640: 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69  he value in regi
7650: 73 74 65 72 20 50 33 2e 20 20 49 66 20 69 74 20  ster P3.  If it 
7660: 69 73 20 4e 55 4c 4c 20 74 68 65 6e 20 48 61 6c  is NULL then Hal
7670: 74 20 75 73 69 6e 67 0a 2a 2a 20 70 61 72 61 6d  t using.** param
7680: 65 74 65 72 20 50 31 2c 20 50 32 2c 20 61 6e 64  eter P1, P2, and
7690: 20 50 34 20 61 73 20 69 66 20 74 68 69 73 20 77   P4 as if this w
76a0: 65 72 65 20 61 20 48 61 6c 74 20 69 6e 73 74 72  ere a Halt instr
76b0: 75 63 74 69 6f 6e 2e 20 20 49 66 20 74 68 65 0a  uction.  If the.
76c0: 2a 2a 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69  ** value in regi
76d0: 73 74 65 72 20 50 33 20 69 73 20 6e 6f 74 20 4e  ster P3 is not N
76e0: 55 4c 4c 2c 20 74 68 65 6e 20 74 68 69 73 20 72  ULL, then this r
76f0: 6f 75 74 69 6e 65 20 69 73 20 61 20 6e 6f 2d 6f  outine is a no-o
7700: 70 2e 0a 2a 2a 20 54 68 65 20 50 35 20 70 61 72  p..** The P5 par
7710: 61 6d 65 74 65 72 20 73 68 6f 75 6c 64 20 62 65  ameter should be
7720: 20 31 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 48   1..*/.case OP_H
7730: 61 6c 74 49 66 4e 75 6c 6c 3a 20 7b 20 20 20 20  altIfNull: {    
7740: 20 20 2f 2a 20 69 6e 33 20 2a 2f 0a 20 20 70 49    /* in3 */.  pI
7750: 6e 33 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n3 = &aMem[pOp->
7760: 70 33 5d 3b 0a 23 69 66 64 65 66 20 53 51 4c 49  p3];.#ifdef SQLI
7770: 54 45 5f 44 45 42 55 47 0a 20 20 69 66 28 20 70  TE_DEBUG.  if( p
7780: 4f 70 2d 3e 70 32 3d 3d 4f 45 5f 41 62 6f 72 74  Op->p2==OE_Abort
7790: 20 29 7b 20 73 71 6c 69 74 65 33 56 64 62 65 41   ){ sqlite3VdbeA
77a0: 73 73 65 72 74 41 62 6f 72 74 61 62 6c 65 28 70  ssertAbortable(p
77b0: 29 3b 20 7d 0a 23 65 6e 64 69 66 0a 20 20 69 66  ); }.#endif.  if
77c0: 28 20 28 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26  ( (pIn3->flags &
77d0: 20 4d 45 4d 5f 4e 75 6c 6c 29 3d 3d 30 20 29 20   MEM_Null)==0 ) 
77e0: 62 72 65 61 6b 3b 0a 20 20 2f 2a 20 46 61 6c 6c  break;.  /* Fall
77f0: 20 74 68 72 6f 75 67 68 20 69 6e 74 6f 20 4f 50   through into OP
7800: 5f 48 61 6c 74 20 2a 2f 0a 7d 0a 0a 2f 2a 20 4f  _Halt */.}../* O
7810: 70 63 6f 64 65 3a 20 20 48 61 6c 74 20 50 31 20  pcode:  Halt P1 
7820: 50 32 20 2a 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a  P2 * P4 P5.**.**
7830: 20 45 78 69 74 20 69 6d 6d 65 64 69 61 74 65 6c   Exit immediatel
7840: 79 2e 20 20 41 6c 6c 20 6f 70 65 6e 20 63 75 72  y.  All open cur
7850: 73 6f 72 73 2c 20 65 74 63 20 61 72 65 20 63 6c  sors, etc are cl
7860: 6f 73 65 64 0a 2a 2a 20 61 75 74 6f 6d 61 74 69  osed.** automati
7870: 63 61 6c 6c 79 2e 0a 2a 2a 0a 2a 2a 20 50 31 20  cally..**.** P1 
7880: 69 73 20 74 68 65 20 72 65 73 75 6c 74 20 63 6f  is the result co
7890: 64 65 20 72 65 74 75 72 6e 65 64 20 62 79 20 73  de returned by s
78a0: 71 6c 69 74 65 33 5f 65 78 65 63 28 29 2c 20 73  qlite3_exec(), s
78b0: 71 6c 69 74 65 33 5f 72 65 73 65 74 28 29 2c 0a  qlite3_reset(),.
78c0: 2a 2a 20 6f 72 20 73 71 6c 69 74 65 33 5f 66 69  ** or sqlite3_fi
78d0: 6e 61 6c 69 7a 65 28 29 2e 20 20 46 6f 72 20 61  nalize().  For a
78e0: 20 6e 6f 72 6d 61 6c 20 68 61 6c 74 2c 20 74 68   normal halt, th
78f0: 69 73 20 73 68 6f 75 6c 64 20 62 65 20 53 51 4c  is should be SQL
7900: 49 54 45 5f 4f 4b 20 28 30 29 2e 0a 2a 2a 20 46  ITE_OK (0)..** F
7910: 6f 72 20 65 72 72 6f 72 73 2c 20 69 74 20 63 61  or errors, it ca
7920: 6e 20 62 65 20 73 6f 6d 65 20 6f 74 68 65 72 20  n be some other 
7930: 76 61 6c 75 65 2e 20 20 49 66 20 50 31 21 3d 30  value.  If P1!=0
7940: 20 74 68 65 6e 20 50 32 20 77 69 6c 6c 20 64 65   then P2 will de
7950: 74 65 72 6d 69 6e 65 0a 2a 2a 20 77 68 65 74 68  termine.** wheth
7960: 65 72 20 6f 72 20 6e 6f 74 20 74 6f 20 72 6f 6c  er or not to rol
7970: 6c 62 61 63 6b 20 74 68 65 20 63 75 72 72 65 6e  lback the curren
7980: 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20 20  t transaction.  
7990: 44 6f 20 6e 6f 74 20 72 6f 6c 6c 62 61 63 6b 0a  Do not rollback.
79a0: 2a 2a 20 69 66 20 50 32 3d 3d 4f 45 5f 46 61 69  ** if P2==OE_Fai
79b0: 6c 2e 20 44 6f 20 74 68 65 20 72 6f 6c 6c 62 61  l. Do the rollba
79c0: 63 6b 20 69 66 20 50 32 3d 3d 4f 45 5f 52 6f 6c  ck if P2==OE_Rol
79d0: 6c 62 61 63 6b 2e 20 20 49 66 20 50 32 3d 3d 4f  lback.  If P2==O
79e0: 45 5f 41 62 6f 72 74 2c 0a 2a 2a 20 74 68 65 6e  E_Abort,.** then
79f0: 20 62 61 63 6b 20 6f 75 74 20 61 6c 6c 20 63 68   back out all ch
7a00: 61 6e 67 65 73 20 74 68 61 74 20 68 61 76 65 20  anges that have 
7a10: 6f 63 63 75 72 72 65 64 20 64 75 72 69 6e 67 20  occurred during 
7a20: 74 68 69 73 20 65 78 65 63 75 74 69 6f 6e 20 6f  this execution o
7a30: 66 20 74 68 65 0a 2a 2a 20 56 44 42 45 2c 20 62  f the.** VDBE, b
7a40: 75 74 20 64 6f 20 6e 6f 74 20 72 6f 6c 6c 62 61  ut do not rollba
7a50: 63 6b 20 74 68 65 20 74 72 61 6e 73 61 63 74 69  ck the transacti
7a60: 6f 6e 2e 20 0a 2a 2a 0a 2a 2a 20 49 66 20 50 34  on. .**.** If P4
7a70: 20 69 73 20 6e 6f 74 20 6e 75 6c 6c 20 74 68 65   is not null the
7a80: 6e 20 69 74 20 69 73 20 61 6e 20 65 72 72 6f 72  n it is an error
7a90: 20 6d 65 73 73 61 67 65 20 73 74 72 69 6e 67 2e   message string.
7aa0: 0a 2a 2a 0a 2a 2a 20 50 35 20 69 73 20 61 20 76  .**.** P5 is a v
7ab0: 61 6c 75 65 20 62 65 74 77 65 65 6e 20 30 20 61  alue between 0 a
7ac0: 6e 64 20 34 2c 20 69 6e 63 6c 75 73 69 76 65 2c  nd 4, inclusive,
7ad0: 20 74 68 61 74 20 6d 6f 64 69 66 69 65 73 20 74   that modifies t
7ae0: 68 65 20 50 34 20 73 74 72 69 6e 67 2e 0a 2a 2a  he P4 string..**
7af0: 0a 2a 2a 20 20 20 20 30 3a 20 20 28 6e 6f 20 63  .**    0:  (no c
7b00: 68 61 6e 67 65 29 0a 2a 2a 20 20 20 20 31 3a 20  hange).**    1: 
7b10: 20 4e 4f 54 20 4e 55 4c 4c 20 63 6f 6e 74 72 61   NOT NULL contra
7b20: 69 6e 74 20 66 61 69 6c 65 64 3a 20 50 34 0a 2a  int failed: P4.*
7b30: 2a 20 20 20 20 32 3a 20 20 55 4e 49 51 55 45 20  *    2:  UNIQUE 
7b40: 63 6f 6e 73 74 72 61 69 6e 74 20 66 61 69 6c 65  constraint faile
7b50: 64 3a 20 50 34 0a 2a 2a 20 20 20 20 33 3a 20 20  d: P4.**    3:  
7b60: 43 48 45 43 4b 20 63 6f 6e 73 74 72 61 69 6e 74  CHECK constraint
7b70: 20 66 61 69 6c 65 64 3a 20 50 34 0a 2a 2a 20 20   failed: P4.**  
7b80: 20 20 34 3a 20 20 46 4f 52 45 49 47 4e 20 4b 45    4:  FOREIGN KE
7b90: 59 20 63 6f 6e 73 74 72 61 69 6e 74 20 66 61 69  Y constraint fai
7ba0: 6c 65 64 3a 20 50 34 0a 2a 2a 0a 2a 2a 20 49 66  led: P4.**.** If
7bb0: 20 50 35 20 69 73 20 6e 6f 74 20 7a 65 72 6f 20   P5 is not zero 
7bc0: 61 6e 64 20 50 34 20 69 73 20 4e 55 4c 4c 2c 20  and P4 is NULL, 
7bd0: 74 68 65 6e 20 65 76 65 72 79 74 68 69 6e 67 20  then everything 
7be0: 61 66 74 65 72 20 74 68 65 20 22 3a 22 20 69 73  after the ":" is
7bf0: 0a 2a 2a 20 6f 6d 69 74 74 65 64 2e 0a 2a 2a 0a  .** omitted..**.
7c00: 2a 2a 20 54 68 65 72 65 20 69 73 20 61 6e 20 69  ** There is an i
7c10: 6d 70 6c 69 65 64 20 22 48 61 6c 74 20 30 20 30  mplied "Halt 0 0
7c20: 20 30 22 20 69 6e 73 74 72 75 63 74 69 6f 6e 20   0" instruction 
7c30: 69 6e 73 65 72 74 65 64 20 61 74 20 74 68 65 20  inserted at the 
7c40: 76 65 72 79 20 65 6e 64 20 6f 66 0a 2a 2a 20 65  very end of.** e
7c50: 76 65 72 79 20 70 72 6f 67 72 61 6d 2e 20 20 53  very program.  S
7c60: 6f 20 61 20 6a 75 6d 70 20 70 61 73 74 20 74 68  o a jump past th
7c70: 65 20 6c 61 73 74 20 69 6e 73 74 72 75 63 74 69  e last instructi
7c80: 6f 6e 20 6f 66 20 74 68 65 20 70 72 6f 67 72 61  on of the progra
7c90: 6d 0a 2a 2a 20 69 73 20 74 68 65 20 73 61 6d 65  m.** is the same
7ca0: 20 61 73 20 65 78 65 63 75 74 69 6e 67 20 48 61   as executing Ha
7cb0: 6c 74 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 48  lt..*/.case OP_H
7cc0: 61 6c 74 3a 20 7b 0a 20 20 56 64 62 65 46 72 61  alt: {.  VdbeFra
7cd0: 6d 65 20 2a 70 46 72 61 6d 65 3b 0a 20 20 69 6e  me *pFrame;.  in
7ce0: 74 20 70 63 78 3b 0a 0a 20 20 70 63 78 20 3d 20  t pcx;..  pcx = 
7cf0: 28 69 6e 74 29 28 70 4f 70 20 2d 20 61 4f 70 29  (int)(pOp - aOp)
7d00: 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ;.#ifdef SQLITE_
7d10: 44 45 42 55 47 0a 20 20 69 66 28 20 70 4f 70 2d  DEBUG.  if( pOp-
7d20: 3e 70 32 3d 3d 4f 45 5f 41 62 6f 72 74 20 29 7b  >p2==OE_Abort ){
7d30: 20 73 71 6c 69 74 65 33 56 64 62 65 41 73 73 65   sqlite3VdbeAsse
7d40: 72 74 41 62 6f 72 74 61 62 6c 65 28 70 29 3b 20  rtAbortable(p); 
7d50: 7d 0a 23 65 6e 64 69 66 0a 20 20 69 66 28 20 70  }.#endif.  if( p
7d60: 4f 70 2d 3e 70 31 3d 3d 53 51 4c 49 54 45 5f 4f  Op->p1==SQLITE_O
7d70: 4b 20 26 26 20 70 2d 3e 70 46 72 61 6d 65 20 29  K && p->pFrame )
7d80: 7b 0a 20 20 20 20 2f 2a 20 48 61 6c 74 20 74 68  {.    /* Halt th
7d90: 65 20 73 75 62 2d 70 72 6f 67 72 61 6d 2e 20 52  e sub-program. R
7da0: 65 74 75 72 6e 20 63 6f 6e 74 72 6f 6c 20 74 6f  eturn control to
7db0: 20 74 68 65 20 70 61 72 65 6e 74 20 66 72 61 6d   the parent fram
7dc0: 65 2e 20 2a 2f 0a 20 20 20 20 70 46 72 61 6d 65  e. */.    pFrame
7dd0: 20 3d 20 70 2d 3e 70 46 72 61 6d 65 3b 0a 20 20   = p->pFrame;.  
7de0: 20 20 70 2d 3e 70 46 72 61 6d 65 20 3d 20 70 46    p->pFrame = pF
7df0: 72 61 6d 65 2d 3e 70 50 61 72 65 6e 74 3b 0a 20  rame->pParent;. 
7e00: 20 20 20 70 2d 3e 6e 46 72 61 6d 65 2d 2d 3b 0a     p->nFrame--;.
7e10: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53      sqlite3VdbeS
7e20: 65 74 43 68 61 6e 67 65 73 28 64 62 2c 20 70 2d  etChanges(db, p-
7e30: 3e 6e 43 68 61 6e 67 65 29 3b 0a 20 20 20 20 70  >nChange);.    p
7e40: 63 78 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  cx = sqlite3Vdbe
7e50: 46 72 61 6d 65 52 65 73 74 6f 72 65 28 70 46 72  FrameRestore(pFr
7e60: 61 6d 65 29 3b 0a 20 20 20 20 69 66 28 20 70 4f  ame);.    if( pO
7e70: 70 2d 3e 70 32 3d 3d 4f 45 5f 49 67 6e 6f 72 65  p->p2==OE_Ignore
7e80: 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 49 6e 73   ){.      /* Ins
7e90: 74 72 75 63 74 69 6f 6e 20 70 63 78 20 69 73 20  truction pcx is 
7ea0: 74 68 65 20 4f 50 5f 50 72 6f 67 72 61 6d 20 74  the OP_Program t
7eb0: 68 61 74 20 69 6e 76 6f 6b 65 64 20 74 68 65 20  hat invoked the 
7ec0: 73 75 62 2d 70 72 6f 67 72 61 6d 20 0a 20 20 20  sub-program .   
7ed0: 20 20 20 2a 2a 20 63 75 72 72 65 6e 74 6c 79 20     ** currently 
7ee0: 62 65 69 6e 67 20 68 61 6c 74 65 64 2e 20 49 66  being halted. If
7ef0: 20 74 68 65 20 70 32 20 69 6e 73 74 72 75 63 74   the p2 instruct
7f00: 69 6f 6e 20 6f 66 20 74 68 69 73 20 4f 50 5f 48  ion of this OP_H
7f10: 61 6c 74 0a 20 20 20 20 20 20 2a 2a 20 69 6e 73  alt.      ** ins
7f20: 74 72 75 63 74 69 6f 6e 20 69 73 20 73 65 74 20  truction is set 
7f30: 74 6f 20 4f 45 5f 49 67 6e 6f 72 65 2c 20 74 68  to OE_Ignore, th
7f40: 65 6e 20 74 68 65 20 73 75 62 2d 70 72 6f 67 72  en the sub-progr
7f50: 61 6d 20 69 73 20 74 68 72 6f 77 69 6e 67 0a 20  am is throwing. 
7f60: 20 20 20 20 20 2a 2a 20 61 6e 20 49 47 4e 4f 52       ** an IGNOR
7f70: 45 20 65 78 63 65 70 74 69 6f 6e 2e 20 49 6e 20  E exception. In 
7f80: 74 68 69 73 20 63 61 73 65 20 6a 75 6d 70 20 74  this case jump t
7f90: 6f 20 74 68 65 20 61 64 64 72 65 73 73 20 73 70  o the address sp
7fa0: 65 63 69 66 69 65 64 0a 20 20 20 20 20 20 2a 2a  ecified.      **
7fb0: 20 61 73 20 74 68 65 20 70 32 20 6f 66 20 74 68   as the p2 of th
7fc0: 65 20 63 61 6c 6c 69 6e 67 20 4f 50 5f 50 72 6f  e calling OP_Pro
7fd0: 67 72 61 6d 2e 20 20 2a 2f 0a 20 20 20 20 20 20  gram.  */.      
7fe0: 70 63 78 20 3d 20 70 2d 3e 61 4f 70 5b 70 63 78  pcx = p->aOp[pcx
7ff0: 5d 2e 70 32 2d 31 3b 0a 20 20 20 20 7d 0a 20 20  ].p2-1;.    }.  
8000: 20 20 61 4f 70 20 3d 20 70 2d 3e 61 4f 70 3b 0a    aOp = p->aOp;.
8010: 20 20 20 20 61 4d 65 6d 20 3d 20 70 2d 3e 61 4d      aMem = p->aM
8020: 65 6d 3b 0a 20 20 20 20 70 4f 70 20 3d 20 26 61  em;.    pOp = &a
8030: 4f 70 5b 70 63 78 5d 3b 0a 20 20 20 20 62 72 65  Op[pcx];.    bre
8040: 61 6b 3b 0a 20 20 7d 0a 20 20 70 2d 3e 72 63 20  ak;.  }.  p->rc 
8050: 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 70 2d 3e  = pOp->p1;.  p->
8060: 65 72 72 6f 72 41 63 74 69 6f 6e 20 3d 20 28 75  errorAction = (u
8070: 38 29 70 4f 70 2d 3e 70 32 3b 0a 20 20 70 2d 3e  8)pOp->p2;.  p->
8080: 70 63 20 3d 20 70 63 78 3b 0a 20 20 61 73 73 65  pc = pcx;.  asse
8090: 72 74 28 20 70 4f 70 2d 3e 70 35 3c 3d 34 20 29  rt( pOp->p5<=4 )
80a0: 3b 0a 20 20 69 66 28 20 70 2d 3e 72 63 20 29 7b  ;.  if( p->rc ){
80b0: 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 35  .    if( pOp->p5
80c0: 20 29 7b 0a 20 20 20 20 20 20 73 74 61 74 69 63   ){.      static
80d0: 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 20 63 6f   const char * co
80e0: 6e 73 74 20 61 7a 54 79 70 65 5b 5d 20 3d 20 7b  nst azType[] = {
80f0: 20 22 4e 4f 54 20 4e 55 4c 4c 22 2c 20 22 55 4e   "NOT NULL", "UN
8100: 49 51 55 45 22 2c 20 22 43 48 45 43 4b 22 2c 0a  IQUE", "CHECK",.
8110: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8120: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8130: 20 20 20 20 20 20 20 20 20 20 20 20 20 22 46 4f               "FO
8140: 52 45 49 47 4e 20 4b 45 59 22 20 7d 3b 0a 20 20  REIGN KEY" };.  
8150: 20 20 20 20 74 65 73 74 63 61 73 65 28 20 70 4f      testcase( pO
8160: 70 2d 3e 70 35 3d 3d 31 20 29 3b 0a 20 20 20 20  p->p5==1 );.    
8170: 20 20 74 65 73 74 63 61 73 65 28 20 70 4f 70 2d    testcase( pOp-
8180: 3e 70 35 3d 3d 32 20 29 3b 0a 20 20 20 20 20 20  >p5==2 );.      
8190: 74 65 73 74 63 61 73 65 28 20 70 4f 70 2d 3e 70  testcase( pOp->p
81a0: 35 3d 3d 33 20 29 3b 0a 20 20 20 20 20 20 74 65  5==3 );.      te
81b0: 73 74 63 61 73 65 28 20 70 4f 70 2d 3e 70 35 3d  stcase( pOp->p5=
81c0: 3d 34 20 29 3b 0a 20 20 20 20 20 20 73 71 6c 69  =4 );.      sqli
81d0: 74 65 33 56 64 62 65 45 72 72 6f 72 28 70 2c 20  te3VdbeError(p, 
81e0: 22 25 73 20 63 6f 6e 73 74 72 61 69 6e 74 20 66  "%s constraint f
81f0: 61 69 6c 65 64 22 2c 20 61 7a 54 79 70 65 5b 70  ailed", azType[p
8200: 4f 70 2d 3e 70 35 2d 31 5d 29 3b 0a 20 20 20 20  Op->p5-1]);.    
8210: 20 20 69 66 28 20 70 4f 70 2d 3e 70 34 2e 7a 20    if( pOp->p4.z 
8220: 29 7b 0a 20 20 20 20 20 20 20 20 70 2d 3e 7a 45  ){.        p->zE
8230: 72 72 4d 73 67 20 3d 20 73 71 6c 69 74 65 33 4d  rrMsg = sqlite3M
8240: 50 72 69 6e 74 66 28 64 62 2c 20 22 25 7a 3a 20  Printf(db, "%z: 
8250: 25 73 22 2c 20 70 2d 3e 7a 45 72 72 4d 73 67 2c  %s", p->zErrMsg,
8260: 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20 20   pOp->p4.z);.   
8270: 20 20 20 7d 0a 20 20 20 20 7d 65 6c 73 65 7b 0a     }.    }else{.
8280: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
8290: 65 45 72 72 6f 72 28 70 2c 20 22 25 73 22 2c 20  eError(p, "%s", 
82a0: 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20 20 20  pOp->p4.z);.    
82b0: 7d 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 6c 6f  }.    sqlite3_lo
82c0: 67 28 70 4f 70 2d 3e 70 31 2c 20 22 61 62 6f 72  g(pOp->p1, "abor
82d0: 74 20 61 74 20 25 64 20 69 6e 20 5b 25 73 5d 3a  t at %d in [%s]:
82e0: 20 25 73 22 2c 20 70 63 78 2c 20 70 2d 3e 7a 53   %s", pcx, p->zS
82f0: 71 6c 2c 20 70 2d 3e 7a 45 72 72 4d 73 67 29 3b  ql, p->zErrMsg);
8300: 0a 20 20 7d 0a 20 20 72 63 20 3d 20 73 71 6c 69  .  }.  rc = sqli
8310: 74 65 33 56 64 62 65 48 61 6c 74 28 70 29 3b 0a  te3VdbeHalt(p);.
8320: 20 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53 51    assert( rc==SQ
8330: 4c 49 54 45 5f 42 55 53 59 20 7c 7c 20 72 63 3d  LITE_BUSY || rc=
8340: 3d 53 51 4c 49 54 45 5f 4f 4b 20 7c 7c 20 72 63  =SQLITE_OK || rc
8350: 3d 3d 53 51 4c 49 54 45 5f 45 52 52 4f 52 20 29  ==SQLITE_ERROR )
8360: 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49  ;.  if( rc==SQLI
8370: 54 45 5f 42 55 53 59 20 29 7b 0a 20 20 20 20 70  TE_BUSY ){.    p
8380: 2d 3e 72 63 20 3d 20 53 51 4c 49 54 45 5f 42 55  ->rc = SQLITE_BU
8390: 53 59 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  SY;.  }else{.   
83a0: 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53 51 4c   assert( rc==SQL
83b0: 49 54 45 5f 4f 4b 20 7c 7c 20 28 70 2d 3e 72 63  ITE_OK || (p->rc
83c0: 26 30 78 66 66 29 3d 3d 53 51 4c 49 54 45 5f 43  &0xff)==SQLITE_C
83d0: 4f 4e 53 54 52 41 49 4e 54 20 29 3b 0a 20 20 20  ONSTRAINT );.   
83e0: 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53 51 4c   assert( rc==SQL
83f0: 49 54 45 5f 4f 4b 20 7c 7c 20 64 62 2d 3e 6e 44  ITE_OK || db->nD
8400: 65 66 65 72 72 65 64 43 6f 6e 73 3e 30 20 7c 7c  eferredCons>0 ||
8410: 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 49 6d   db->nDeferredIm
8420: 6d 43 6f 6e 73 3e 30 20 29 3b 0a 20 20 20 20 72  mCons>0 );.    r
8430: 63 20 3d 20 70 2d 3e 72 63 20 3f 20 53 51 4c 49  c = p->rc ? SQLI
8440: 54 45 5f 45 52 52 4f 52 20 3a 20 53 51 4c 49 54  TE_ERROR : SQLIT
8450: 45 5f 44 4f 4e 45 3b 0a 20 20 7d 0a 20 20 67 6f  E_DONE;.  }.  go
8460: 74 6f 20 76 64 62 65 5f 72 65 74 75 72 6e 3b 0a  to vdbe_return;.
8470: 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 6e  }../* Opcode: In
8480: 74 65 67 65 72 20 50 31 20 50 32 20 2a 20 2a 20  teger P1 P2 * * 
8490: 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72  *.** Synopsis: r
84a0: 5b 50 32 5d 3d 50 31 0a 2a 2a 0a 2a 2a 20 54 68  [P2]=P1.**.** Th
84b0: 65 20 33 32 2d 62 69 74 20 69 6e 74 65 67 65 72  e 32-bit integer
84c0: 20 76 61 6c 75 65 20 50 31 20 69 73 20 77 72 69   value P1 is wri
84d0: 74 74 65 6e 20 69 6e 74 6f 20 72 65 67 69 73 74  tten into regist
84e0: 65 72 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f  er P2..*/.case O
84f0: 50 5f 49 6e 74 65 67 65 72 3a 20 7b 20 20 20 20  P_Integer: {    
8500: 20 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a       /* out2 */.
8510: 20 20 70 4f 75 74 20 3d 20 6f 75 74 32 50 72 65    pOut = out2Pre
8520: 72 65 6c 65 61 73 65 28 70 2c 20 70 4f 70 29 3b  release(p, pOp);
8530: 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 70  .  pOut->u.i = p
8540: 4f 70 2d 3e 70 31 3b 0a 20 20 62 72 65 61 6b 3b  Op->p1;.  break;
8550: 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49  .}../* Opcode: I
8560: 6e 74 36 34 20 2a 20 50 32 20 2a 20 50 34 20 2a  nt64 * P2 * P4 *
8570: 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b  .** Synopsis: r[
8580: 50 32 5d 3d 50 34 0a 2a 2a 0a 2a 2a 20 50 34 20  P2]=P4.**.** P4 
8590: 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20  is a pointer to 
85a0: 61 20 36 34 2d 62 69 74 20 69 6e 74 65 67 65 72  a 64-bit integer
85b0: 20 76 61 6c 75 65 2e 0a 2a 2a 20 57 72 69 74 65   value..** Write
85c0: 20 74 68 61 74 20 76 61 6c 75 65 20 69 6e 74 6f   that value into
85d0: 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2f   register P2..*/
85e0: 0a 63 61 73 65 20 4f 50 5f 49 6e 74 36 34 3a 20  .case OP_Int64: 
85f0: 7b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f  {           /* o
8600: 75 74 32 20 2a 2f 0a 20 20 70 4f 75 74 20 3d 20  ut2 */.  pOut = 
8610: 6f 75 74 32 50 72 65 72 65 6c 65 61 73 65 28 70  out2Prerelease(p
8620: 2c 20 70 4f 70 29 3b 0a 20 20 61 73 73 65 72 74  , pOp);.  assert
8630: 28 20 70 4f 70 2d 3e 70 34 2e 70 49 36 34 21 3d  ( pOp->p4.pI64!=
8640: 30 20 29 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e 69  0 );.  pOut->u.i
8650: 20 3d 20 2a 70 4f 70 2d 3e 70 34 2e 70 49 36 34   = *pOp->p4.pI64
8660: 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 23 69  ;.  break;.}..#i
8670: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
8680: 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54  T_FLOATING_POINT
8690: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65 61 6c  ./* Opcode: Real
86a0: 20 2a 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 20   * P2 * P4 *.** 
86b0: 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d  Synopsis: r[P2]=
86c0: 50 34 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61  P4.**.** P4 is a
86d0: 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 36 34   pointer to a 64
86e0: 2d 62 69 74 20 66 6c 6f 61 74 69 6e 67 20 70 6f  -bit floating po
86f0: 69 6e 74 20 76 61 6c 75 65 2e 0a 2a 2a 20 57 72  int value..** Wr
8700: 69 74 65 20 74 68 61 74 20 76 61 6c 75 65 20 69  ite that value i
8710: 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 32 2e  nto register P2.
8720: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65 61 6c  .*/.case OP_Real
8730: 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f  : {            /
8740: 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 46 4c 4f  * same as TK_FLO
8750: 41 54 2c 20 6f 75 74 32 20 2a 2f 0a 20 20 70 4f  AT, out2 */.  pO
8760: 75 74 20 3d 20 6f 75 74 32 50 72 65 72 65 6c 65  ut = out2Prerele
8770: 61 73 65 28 70 2c 20 70 4f 70 29 3b 0a 20 20 70  ase(p, pOp);.  p
8780: 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d  Out->flags = MEM
8790: 5f 52 65 61 6c 3b 0a 20 20 61 73 73 65 72 74 28  _Real;.  assert(
87a0: 20 21 73 71 6c 69 74 65 33 49 73 4e 61 4e 28 2a   !sqlite3IsNaN(*
87b0: 70 4f 70 2d 3e 70 34 2e 70 52 65 61 6c 29 20 29  pOp->p4.pReal) )
87c0: 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e 72 20 3d 20  ;.  pOut->u.r = 
87d0: 2a 70 4f 70 2d 3e 70 34 2e 70 52 65 61 6c 3b 0a  *pOp->p4.pReal;.
87e0: 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69    break;.}.#endi
87f0: 66 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 74  f../* Opcode: St
8800: 72 69 6e 67 38 20 2a 20 50 32 20 2a 20 50 34 20  ring8 * P2 * P4 
8810: 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72  *.** Synopsis: r
8820: 5b 50 32 5d 3d 27 50 34 27 0a 2a 2a 0a 2a 2a 20  [P2]='P4'.**.** 
8830: 50 34 20 70 6f 69 6e 74 73 20 74 6f 20 61 20 6e  P4 points to a n
8840: 75 6c 20 74 65 72 6d 69 6e 61 74 65 64 20 55 54  ul terminated UT
8850: 46 2d 38 20 73 74 72 69 6e 67 2e 20 54 68 69 73  F-8 string. This
8860: 20 6f 70 63 6f 64 65 20 69 73 20 74 72 61 6e 73   opcode is trans
8870: 66 6f 72 6d 65 64 20 0a 2a 2a 20 69 6e 74 6f 20  formed .** into 
8880: 61 20 53 74 72 69 6e 67 20 6f 70 63 6f 64 65 20  a String opcode 
8890: 62 65 66 6f 72 65 20 69 74 20 69 73 20 65 78 65  before it is exe
88a0: 63 75 74 65 64 20 66 6f 72 20 74 68 65 20 66 69  cuted for the fi
88b0: 72 73 74 20 74 69 6d 65 2e 20 20 44 75 72 69 6e  rst time.  Durin
88c0: 67 0a 2a 2a 20 74 68 69 73 20 74 72 61 6e 73 66  g.** this transf
88d0: 6f 72 6d 61 74 69 6f 6e 2c 20 74 68 65 20 6c 65  ormation, the le
88e0: 6e 67 74 68 20 6f 66 20 73 74 72 69 6e 67 20 50  ngth of string P
88f0: 34 20 69 73 20 63 6f 6d 70 75 74 65 64 20 61 6e  4 is computed an
8900: 64 20 73 74 6f 72 65 64 0a 2a 2a 20 61 73 20 74  d stored.** as t
8910: 68 65 20 50 31 20 70 61 72 61 6d 65 74 65 72 2e  he P1 parameter.
8920: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 74 72 69  .*/.case OP_Stri
8930: 6e 67 38 3a 20 7b 20 20 20 20 20 20 20 20 20 2f  ng8: {         /
8940: 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 53 54 52  * same as TK_STR
8950: 49 4e 47 2c 20 6f 75 74 32 20 2a 2f 0a 20 20 61  ING, out2 */.  a
8960: 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 2e 7a  ssert( pOp->p4.z
8970: 21 3d 30 20 29 3b 0a 20 20 70 4f 75 74 20 3d 20  !=0 );.  pOut = 
8980: 6f 75 74 32 50 72 65 72 65 6c 65 61 73 65 28 70  out2Prerelease(p
8990: 2c 20 70 4f 70 29 3b 0a 20 20 70 4f 70 2d 3e 6f  , pOp);.  pOp->o
89a0: 70 63 6f 64 65 20 3d 20 4f 50 5f 53 74 72 69 6e  pcode = OP_Strin
89b0: 67 3b 0a 20 20 70 4f 70 2d 3e 70 31 20 3d 20 73  g;.  pOp->p1 = s
89c0: 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28 70  qlite3Strlen30(p
89d0: 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 0a 23 69 66 6e  Op->p4.z);..#ifn
89e0: 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
89f0: 55 54 46 31 36 0a 20 20 69 66 28 20 65 6e 63 6f  UTF16.  if( enco
8a00: 64 69 6e 67 21 3d 53 51 4c 49 54 45 5f 55 54 46  ding!=SQLITE_UTF
8a10: 38 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 73 71  8 ){.    rc = sq
8a20: 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 53  lite3VdbeMemSetS
8a30: 74 72 28 70 4f 75 74 2c 20 70 4f 70 2d 3e 70 34  tr(pOut, pOp->p4
8a40: 2e 7a 2c 20 2d 31 2c 20 53 51 4c 49 54 45 5f 55  .z, -1, SQLITE_U
8a50: 54 46 38 2c 20 53 51 4c 49 54 45 5f 53 54 41 54  TF8, SQLITE_STAT
8a60: 49 43 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  IC);.    assert(
8a70: 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 7c   rc==SQLITE_OK |
8a80: 7c 20 72 63 3d 3d 53 51 4c 49 54 45 5f 54 4f 4f  | rc==SQLITE_TOO
8a90: 42 49 47 20 29 3b 0a 20 20 20 20 69 66 28 20 53  BIG );.    if( S
8aa0: 51 4c 49 54 45 5f 4f 4b 21 3d 73 71 6c 69 74 65  QLITE_OK!=sqlite
8ab0: 33 56 64 62 65 43 68 61 6e 67 65 45 6e 63 6f 64  3VdbeChangeEncod
8ac0: 69 6e 67 28 70 4f 75 74 2c 20 65 6e 63 6f 64 69  ing(pOut, encodi
8ad0: 6e 67 29 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65  ng) ) goto no_me
8ae0: 6d 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  m;.    assert( p
8af0: 4f 75 74 2d 3e 73 7a 4d 61 6c 6c 6f 63 3e 30 20  Out->szMalloc>0 
8b00: 26 26 20 70 4f 75 74 2d 3e 7a 4d 61 6c 6c 6f 63  && pOut->zMalloc
8b10: 3d 3d 70 4f 75 74 2d 3e 7a 20 29 3b 0a 20 20 20  ==pOut->z );.   
8b20: 20 61 73 73 65 72 74 28 20 56 64 62 65 4d 65 6d   assert( VdbeMem
8b30: 44 79 6e 61 6d 69 63 28 70 4f 75 74 29 3d 3d 30  Dynamic(pOut)==0
8b40: 20 29 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 73 7a   );.    pOut->sz
8b50: 4d 61 6c 6c 6f 63 20 3d 20 30 3b 0a 20 20 20 20  Malloc = 0;.    
8b60: 70 4f 75 74 2d 3e 66 6c 61 67 73 20 7c 3d 20 4d  pOut->flags |= M
8b70: 45 4d 5f 53 74 61 74 69 63 3b 0a 20 20 20 20 69  EM_Static;.    i
8b80: 66 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d  f( pOp->p4type==
8b90: 50 34 5f 44 59 4e 41 4d 49 43 20 29 7b 0a 20 20  P4_DYNAMIC ){.  
8ba0: 20 20 20 20 73 71 6c 69 74 65 33 44 62 46 72 65      sqlite3DbFre
8bb0: 65 28 64 62 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29  e(db, pOp->p4.z)
8bc0: 3b 0a 20 20 20 20 7d 0a 20 20 20 20 70 4f 70 2d  ;.    }.    pOp-
8bd0: 3e 70 34 74 79 70 65 20 3d 20 50 34 5f 44 59 4e  >p4type = P4_DYN
8be0: 41 4d 49 43 3b 0a 20 20 20 20 70 4f 70 2d 3e 70  AMIC;.    pOp->p
8bf0: 34 2e 7a 20 3d 20 70 4f 75 74 2d 3e 7a 3b 0a 20  4.z = pOut->z;. 
8c00: 20 20 20 70 4f 70 2d 3e 70 31 20 3d 20 70 4f 75     pOp->p1 = pOu
8c10: 74 2d 3e 6e 3b 0a 20 20 7d 0a 20 20 74 65 73 74  t->n;.  }.  test
8c20: 63 61 73 65 28 20 72 63 3d 3d 53 51 4c 49 54 45  case( rc==SQLITE
8c30: 5f 54 4f 4f 42 49 47 20 29 3b 0a 23 65 6e 64 69  _TOOBIG );.#endi
8c40: 66 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 31 3e  f.  if( pOp->p1>
8c50: 64 62 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c 49 54  db->aLimit[SQLIT
8c60: 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54 48 5d 20  E_LIMIT_LENGTH] 
8c70: 29 7b 0a 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f  ){.    goto too_
8c80: 62 69 67 3b 0a 20 20 7d 0a 20 20 61 73 73 65 72  big;.  }.  asser
8c90: 74 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  t( rc==SQLITE_OK
8ca0: 20 29 3b 0a 20 20 2f 2a 20 46 61 6c 6c 20 74 68   );.  /* Fall th
8cb0: 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6e 65 78  rough to the nex
8cc0: 74 20 63 61 73 65 2c 20 4f 50 5f 53 74 72 69 6e  t case, OP_Strin
8cd0: 67 20 2a 2f 0a 7d 0a 20 20 0a 2f 2a 20 4f 70 63  g */.}.  ./* Opc
8ce0: 6f 64 65 3a 20 53 74 72 69 6e 67 20 50 31 20 50  ode: String P1 P
8cf0: 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79  2 P3 P4 P5.** Sy
8d00: 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 27 50  nopsis: r[P2]='P
8d10: 34 27 20 28 6c 65 6e 3d 50 31 29 0a 2a 2a 0a 2a  4' (len=P1).**.*
8d20: 2a 20 54 68 65 20 73 74 72 69 6e 67 20 76 61 6c  * The string val
8d30: 75 65 20 50 34 20 6f 66 20 6c 65 6e 67 74 68 20  ue P4 of length 
8d40: 50 31 20 28 62 79 74 65 73 29 20 69 73 20 73 74  P1 (bytes) is st
8d50: 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74 65 72  ored in register
8d60: 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 33   P2..**.** If P3
8d70: 20 69 73 20 6e 6f 74 20 7a 65 72 6f 20 61 6e 64   is not zero and
8d80: 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20   the content of 
8d90: 72 65 67 69 73 74 65 72 20 50 33 20 69 73 20 65  register P3 is e
8da0: 71 75 61 6c 20 74 6f 20 50 35 2c 20 74 68 65 6e  qual to P5, then
8db0: 0a 2a 2a 20 74 68 65 20 64 61 74 61 74 79 70 65  .** the datatype
8dc0: 20 6f 66 20 74 68 65 20 72 65 67 69 73 74 65 72   of the register
8dd0: 20 50 32 20 69 73 20 63 6f 6e 76 65 72 74 65 64   P2 is converted
8de0: 20 74 6f 20 42 4c 4f 42 2e 20 20 54 68 65 20 63   to BLOB.  The c
8df0: 6f 6e 74 65 6e 74 20 69 73 0a 2a 2a 20 74 68 65  ontent is.** the
8e00: 20 73 61 6d 65 20 73 65 71 75 65 6e 63 65 20 6f   same sequence o
8e10: 66 20 62 79 74 65 73 2c 20 69 74 20 69 73 20 6d  f bytes, it is m
8e20: 65 72 65 6c 79 20 69 6e 74 65 72 70 72 65 74 65  erely interprete
8e30: 64 20 61 73 20 61 20 42 4c 4f 42 20 69 6e 73 74  d as a BLOB inst
8e40: 65 61 64 0a 2a 2a 20 6f 66 20 61 20 73 74 72 69  ead.** of a stri
8e50: 6e 67 2c 20 61 73 20 69 66 20 69 74 20 68 61 64  ng, as if it had
8e60: 20 62 65 65 6e 20 43 41 53 54 2e 20 20 49 6e 20   been CAST.  In 
8e70: 6f 74 68 65 72 20 77 6f 72 64 73 3a 0a 2a 2a 0a  other words:.**.
8e80: 2a 2a 20 69 66 28 20 50 33 21 3d 30 20 61 6e 64  ** if( P3!=0 and
8e90: 20 72 65 67 5b 50 33 5d 3d 3d 50 35 20 29 20 72   reg[P3]==P5 ) r
8ea0: 65 67 5b 50 32 5d 20 3a 3d 20 43 41 53 54 28 72  eg[P2] := CAST(r
8eb0: 65 67 5b 50 32 5d 20 61 73 20 42 4c 4f 42 29 0a  eg[P2] as BLOB).
8ec0: 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 74 72 69 6e  */.case OP_Strin
8ed0: 67 3a 20 7b 20 20 20 20 20 20 20 20 20 20 2f 2a  g: {          /*
8ee0: 20 6f 75 74 32 20 2a 2f 0a 20 20 61 73 73 65 72   out2 */.  asser
8ef0: 74 28 20 70 4f 70 2d 3e 70 34 2e 7a 21 3d 30 20  t( pOp->p4.z!=0 
8f00: 29 3b 0a 20 20 70 4f 75 74 20 3d 20 6f 75 74 32  );.  pOut = out2
8f10: 50 72 65 72 65 6c 65 61 73 65 28 70 2c 20 70 4f  Prerelease(p, pO
8f20: 70 29 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67  p);.  pOut->flag
8f30: 73 20 3d 20 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f  s = MEM_Str|MEM_
8f40: 53 74 61 74 69 63 7c 4d 45 4d 5f 54 65 72 6d 3b  Static|MEM_Term;
8f50: 0a 20 20 70 4f 75 74 2d 3e 7a 20 3d 20 70 4f 70  .  pOut->z = pOp
8f60: 2d 3e 70 34 2e 7a 3b 0a 20 20 70 4f 75 74 2d 3e  ->p4.z;.  pOut->
8f70: 6e 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 70  n = pOp->p1;.  p
8f80: 4f 75 74 2d 3e 65 6e 63 20 3d 20 65 6e 63 6f 64  Out->enc = encod
8f90: 69 6e 67 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41  ing;.  UPDATE_MA
8fa0: 58 5f 42 4c 4f 42 53 49 5a 45 28 70 4f 75 74 29  X_BLOBSIZE(pOut)
8fb0: 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ;.#ifndef SQLITE
8fc0: 5f 4c 49 4b 45 5f 44 4f 45 53 4e 54 5f 4d 41 54  _LIKE_DOESNT_MAT
8fd0: 43 48 5f 42 4c 4f 42 53 0a 20 20 69 66 28 20 70  CH_BLOBS.  if( p
8fe0: 4f 70 2d 3e 70 33 3e 30 20 29 7b 0a 20 20 20 20  Op->p3>0 ){.    
8ff0: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c  assert( pOp->p3<
9000: 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d  =(p->nMem+1 - p-
9010: 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 20  >nCursor) );.   
9020: 20 70 49 6e 33 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn3 = &aMem[pO
9030: 70 2d 3e 70 33 5d 3b 0a 20 20 20 20 61 73 73 65  p->p3];.    asse
9040: 72 74 28 20 70 49 6e 33 2d 3e 66 6c 61 67 73 20  rt( pIn3->flags 
9050: 26 20 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 20  & MEM_Int );.   
9060: 20 69 66 28 20 70 49 6e 33 2d 3e 75 2e 69 3d 3d   if( pIn3->u.i==
9070: 70 4f 70 2d 3e 70 35 20 29 20 70 4f 75 74 2d 3e  pOp->p5 ) pOut->
9080: 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 42 6c 6f 62  flags = MEM_Blob
9090: 7c 4d 45 4d 5f 53 74 61 74 69 63 7c 4d 45 4d 5f  |MEM_Static|MEM_
90a0: 54 65 72 6d 3b 0a 20 20 7d 0a 23 65 6e 64 69 66  Term;.  }.#endif
90b0: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
90c0: 4f 70 63 6f 64 65 3a 20 4e 75 6c 6c 20 50 31 20  Opcode: Null P1 
90d0: 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e  P2 P3 * *.** Syn
90e0: 6f 70 73 69 73 3a 20 72 5b 50 32 2e 2e 50 33 5d  opsis: r[P2..P3]
90f0: 3d 4e 55 4c 4c 0a 2a 2a 0a 2a 2a 20 57 72 69 74  =NULL.**.** Writ
9100: 65 20 61 20 4e 55 4c 4c 20 69 6e 74 6f 20 72 65  e a NULL into re
9110: 67 69 73 74 65 72 73 20 50 32 2e 20 20 49 66 20  gisters P2.  If 
9120: 50 33 20 67 72 65 61 74 65 72 20 74 68 61 6e 20  P3 greater than 
9130: 50 32 2c 20 74 68 65 6e 20 61 6c 73 6f 20 77 72  P2, then also wr
9140: 69 74 65 0a 2a 2a 20 4e 55 4c 4c 20 69 6e 74 6f  ite.** NULL into
9150: 20 72 65 67 69 73 74 65 72 20 50 33 20 61 6e 64   register P3 and
9160: 20 65 76 65 72 79 20 72 65 67 69 73 74 65 72 20   every register 
9170: 69 6e 20 62 65 74 77 65 65 6e 20 50 32 20 61 6e  in between P2 an
9180: 64 20 50 33 2e 20 20 49 66 20 50 33 0a 2a 2a 20  d P3.  If P3.** 
9190: 69 73 20 6c 65 73 73 20 74 68 61 6e 20 50 32 20  is less than P2 
91a0: 28 74 79 70 69 63 61 6c 6c 79 20 50 33 20 69 73  (typically P3 is
91b0: 20 7a 65 72 6f 29 20 74 68 65 6e 20 6f 6e 6c 79   zero) then only
91c0: 20 72 65 67 69 73 74 65 72 20 50 32 20 69 73 0a   register P2 is.
91d0: 2a 2a 20 73 65 74 20 74 6f 20 4e 55 4c 4c 2e 0a  ** set to NULL..
91e0: 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 50 31 20  **.** If the P1 
91f0: 76 61 6c 75 65 20 69 73 20 6e 6f 6e 2d 7a 65 72  value is non-zer
9200: 6f 2c 20 74 68 65 6e 20 61 6c 73 6f 20 73 65 74  o, then also set
9210: 20 74 68 65 20 4d 45 4d 5f 43 6c 65 61 72 65 64   the MEM_Cleared
9220: 20 66 6c 61 67 20 73 6f 20 74 68 61 74 0a 2a 2a   flag so that.**
9230: 20 4e 55 4c 4c 20 76 61 6c 75 65 73 20 77 69 6c   NULL values wil
9240: 6c 20 6e 6f 74 20 63 6f 6d 70 61 72 65 20 65 71  l not compare eq
9250: 75 61 6c 20 65 76 65 6e 20 69 66 20 53 51 4c 49  ual even if SQLI
9260: 54 45 5f 4e 55 4c 4c 45 51 20 69 73 20 73 65 74  TE_NULLEQ is set
9270: 20 6f 6e 0a 2a 2a 20 4f 50 5f 4e 65 20 6f 72 20   on.** OP_Ne or 
9280: 4f 50 5f 45 71 2e 0a 2a 2f 0a 63 61 73 65 20 4f  OP_Eq..*/.case O
9290: 50 5f 4e 75 6c 6c 3a 20 7b 20 20 20 20 20 20 20  P_Null: {       
92a0: 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20      /* out2 */. 
92b0: 20 69 6e 74 20 63 6e 74 3b 0a 20 20 75 31 36 20   int cnt;.  u16 
92c0: 6e 75 6c 6c 46 6c 61 67 3b 0a 20 20 70 4f 75 74  nullFlag;.  pOut
92d0: 20 3d 20 6f 75 74 32 50 72 65 72 65 6c 65 61 73   = out2Prereleas
92e0: 65 28 70 2c 20 70 4f 70 29 3b 0a 20 20 63 6e 74  e(p, pOp);.  cnt
92f0: 20 3d 20 70 4f 70 2d 3e 70 33 2d 70 4f 70 2d 3e   = pOp->p3-pOp->
9300: 70 32 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f  p2;.  assert( pO
9310: 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b  p->p3<=(p->nMem+
9320: 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29 20  1 - p->nCursor) 
9330: 29 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73  );.  pOut->flags
9340: 20 3d 20 6e 75 6c 6c 46 6c 61 67 20 3d 20 70 4f   = nullFlag = pO
9350: 70 2d 3e 70 31 20 3f 20 28 4d 45 4d 5f 4e 75 6c  p->p1 ? (MEM_Nul
9360: 6c 7c 4d 45 4d 5f 43 6c 65 61 72 65 64 29 20 3a  l|MEM_Cleared) :
9370: 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20 20 70 4f 75   MEM_Null;.  pOu
9380: 74 2d 3e 6e 20 3d 20 30 3b 0a 20 20 77 68 69 6c  t->n = 0;.  whil
9390: 65 28 20 63 6e 74 3e 30 20 29 7b 0a 20 20 20 20  e( cnt>0 ){.    
93a0: 70 4f 75 74 2b 2b 3b 0a 20 20 20 20 6d 65 6d 41  pOut++;.    memA
93b0: 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20  boutToChange(p, 
93c0: 70 4f 75 74 29 3b 0a 20 20 20 20 73 71 6c 69 74  pOut);.    sqlit
93d0: 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c  e3VdbeMemSetNull
93e0: 28 70 4f 75 74 29 3b 0a 20 20 20 20 70 4f 75 74  (pOut);.    pOut
93f0: 2d 3e 66 6c 61 67 73 20 3d 20 6e 75 6c 6c 46 6c  ->flags = nullFl
9400: 61 67 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 6e 20  ag;.    pOut->n 
9410: 3d 20 30 3b 0a 20 20 20 20 63 6e 74 2d 2d 3b 0a  = 0;.    cnt--;.
9420: 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
9430: 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 6f 66 74 4e  /* Opcode: SoftN
9440: 75 6c 6c 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a  ull P1 * * * *.*
9450: 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 31  * Synopsis: r[P1
9460: 5d 3d 4e 55 4c 4c 0a 2a 2a 0a 2a 2a 20 53 65 74  ]=NULL.**.** Set
9470: 20 72 65 67 69 73 74 65 72 20 50 31 20 74 6f 20   register P1 to 
9480: 68 61 76 65 20 74 68 65 20 76 61 6c 75 65 20 4e  have the value N
9490: 55 4c 4c 20 61 73 20 73 65 65 6e 20 62 79 20 74  ULL as seen by t
94a0: 68 65 20 4f 50 5f 4d 61 6b 65 52 65 63 6f 72 64  he OP_MakeRecord
94b0: 0a 2a 2a 20 69 6e 73 74 72 75 63 74 69 6f 6e 2c  .** instruction,
94c0: 20 62 75 74 20 64 6f 20 6e 6f 74 20 66 72 65 65   but do not free
94d0: 20 61 6e 79 20 73 74 72 69 6e 67 20 6f 72 20 62   any string or b
94e0: 6c 6f 62 20 6d 65 6d 6f 72 79 20 61 73 73 6f 63  lob memory assoc
94f0: 69 61 74 65 64 20 77 69 74 68 0a 2a 2a 20 74 68  iated with.** th
9500: 65 20 72 65 67 69 73 74 65 72 2c 20 73 6f 20 74  e register, so t
9510: 68 61 74 20 69 66 20 74 68 65 20 76 61 6c 75 65  hat if the value
9520: 20 77 61 73 20 61 20 73 74 72 69 6e 67 20 6f 72   was a string or
9530: 20 62 6c 6f 62 20 74 68 61 74 20 77 61 73 0a 2a   blob that was.*
9540: 2a 20 70 72 65 76 69 6f 75 73 6c 79 20 63 6f 70  * previously cop
9550: 69 65 64 20 75 73 69 6e 67 20 4f 50 5f 53 43 6f  ied using OP_SCo
9560: 70 79 2c 20 74 68 65 20 63 6f 70 69 65 73 20 77  py, the copies w
9570: 69 6c 6c 20 63 6f 6e 74 69 6e 75 65 20 74 6f 20  ill continue to 
9580: 62 65 20 76 61 6c 69 64 2e 0a 2a 2f 0a 63 61 73  be valid..*/.cas
9590: 65 20 4f 50 5f 53 6f 66 74 4e 75 6c 6c 3a 20 7b  e OP_SoftNull: {
95a0: 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
95b0: 70 31 3e 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c  p1>0 && pOp->p1<
95c0: 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d  =(p->nMem+1 - p-
95d0: 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 70  >nCursor) );.  p
95e0: 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  Out = &aMem[pOp-
95f0: 3e 70 31 5d 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c  >p1];.  pOut->fl
9600: 61 67 73 20 3d 20 28 70 4f 75 74 2d 3e 66 6c 61  ags = (pOut->fla
9610: 67 73 26 7e 28 4d 45 4d 5f 55 6e 64 65 66 69 6e  gs&~(MEM_Undefin
9620: 65 64 7c 4d 45 4d 5f 41 66 66 4d 61 73 6b 29 29  ed|MEM_AffMask))
9630: 7c 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20 20 62 72 65  |MEM_Null;.  bre
9640: 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
9650: 3a 20 42 6c 6f 62 20 50 31 20 50 32 20 2a 20 50  : Blob P1 P2 * P
9660: 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  4 *.** Synopsis:
9670: 20 72 5b 50 32 5d 3d 50 34 20 28 6c 65 6e 3d 50   r[P2]=P4 (len=P
9680: 31 29 0a 2a 2a 0a 2a 2a 20 50 34 20 70 6f 69 6e  1).**.** P4 poin
9690: 74 73 20 74 6f 20 61 20 62 6c 6f 62 20 6f 66 20  ts to a blob of 
96a0: 64 61 74 61 20 50 31 20 62 79 74 65 73 20 6c 6f  data P1 bytes lo
96b0: 6e 67 2e 20 20 53 74 6f 72 65 20 74 68 69 73 0a  ng.  Store this.
96c0: 2a 2a 20 62 6c 6f 62 20 69 6e 20 72 65 67 69 73  ** blob in regis
96d0: 74 65 72 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20  ter P2..*/.case 
96e0: 4f 50 5f 42 6c 6f 62 3a 20 7b 20 20 20 20 20 20  OP_Blob: {      
96f0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74            /* out
9700: 32 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70  2 */.  assert( p
9710: 4f 70 2d 3e 70 31 20 3c 3d 20 53 51 4c 49 54 45  Op->p1 <= SQLITE
9720: 5f 4d 41 58 5f 4c 45 4e 47 54 48 20 29 3b 0a 20  _MAX_LENGTH );. 
9730: 20 70 4f 75 74 20 3d 20 6f 75 74 32 50 72 65 72   pOut = out2Prer
9740: 65 6c 65 61 73 65 28 70 2c 20 70 4f 70 29 3b 0a  elease(p, pOp);.
9750: 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
9760: 53 65 74 53 74 72 28 70 4f 75 74 2c 20 70 4f 70  SetStr(pOut, pOp
9770: 2d 3e 70 34 2e 7a 2c 20 70 4f 70 2d 3e 70 31 2c  ->p4.z, pOp->p1,
9780: 20 30 2c 20 30 29 3b 0a 20 20 70 4f 75 74 2d 3e   0, 0);.  pOut->
9790: 65 6e 63 20 3d 20 65 6e 63 6f 64 69 6e 67 3b 0a  enc = encoding;.
97a0: 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f    UPDATE_MAX_BLO
97b0: 42 53 49 5a 45 28 70 4f 75 74 29 3b 0a 20 20 62  BSIZE(pOut);.  b
97c0: 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
97d0: 64 65 3a 20 56 61 72 69 61 62 6c 65 20 50 31 20  de: Variable P1 
97e0: 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 20 53 79 6e  P2 * P4 *.** Syn
97f0: 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 70 61 72  opsis: r[P2]=par
9800: 61 6d 65 74 65 72 28 50 31 2c 50 34 29 0a 2a 2a  ameter(P1,P4).**
9810: 0a 2a 2a 20 54 72 61 6e 73 66 65 72 20 74 68 65  .** Transfer the
9820: 20 76 61 6c 75 65 73 20 6f 66 20 62 6f 75 6e 64   values of bound
9830: 20 70 61 72 61 6d 65 74 65 72 20 50 31 20 69 6e   parameter P1 in
9840: 74 6f 20 72 65 67 69 73 74 65 72 20 50 32 0a 2a  to register P2.*
9850: 2a 0a 2a 2a 20 49 66 20 74 68 65 20 70 61 72 61  *.** If the para
9860: 6d 65 74 65 72 20 69 73 20 6e 61 6d 65 64 2c 20  meter is named, 
9870: 74 68 65 6e 20 69 74 73 20 6e 61 6d 65 20 61 70  then its name ap
9880: 70 65 61 72 73 20 69 6e 20 50 34 2e 0a 2a 2a 20  pears in P4..** 
9890: 54 68 65 20 50 34 20 76 61 6c 75 65 20 69 73 20  The P4 value is 
98a0: 75 73 65 64 20 62 79 20 73 71 6c 69 74 65 33 5f  used by sqlite3_
98b0: 62 69 6e 64 5f 70 61 72 61 6d 65 74 65 72 5f 6e  bind_parameter_n
98c0: 61 6d 65 28 29 2e 0a 2a 2f 0a 63 61 73 65 20 4f  ame()..*/.case O
98d0: 50 5f 56 61 72 69 61 62 6c 65 3a 20 7b 20 20 20  P_Variable: {   
98e0: 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32           /* out2
98f0: 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 56 61 72 3b   */.  Mem *pVar;
9900: 20 20 20 20 20 20 20 2f 2a 20 56 61 6c 75 65 20         /* Value 
9910: 62 65 69 6e 67 20 74 72 61 6e 73 66 65 72 72 65  being transferre
9920: 64 20 2a 2f 0a 0a 20 20 61 73 73 65 72 74 28 20  d */..  assert( 
9930: 70 4f 70 2d 3e 70 31 3e 30 20 26 26 20 70 4f 70  pOp->p1>0 && pOp
9940: 2d 3e 70 31 3c 3d 70 2d 3e 6e 56 61 72 20 29 3b  ->p1<=p->nVar );
9950: 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
9960: 70 34 2e 7a 3d 3d 30 20 7c 7c 20 70 4f 70 2d 3e  p4.z==0 || pOp->
9970: 70 34 2e 7a 3d 3d 73 71 6c 69 74 65 33 56 4c 69  p4.z==sqlite3VLi
9980: 73 74 4e 75 6d 54 6f 4e 61 6d 65 28 70 2d 3e 70  stNumToName(p->p
9990: 56 4c 69 73 74 2c 70 4f 70 2d 3e 70 31 29 20 29  VList,pOp->p1) )
99a0: 3b 0a 20 20 70 56 61 72 20 3d 20 26 70 2d 3e 61  ;.  pVar = &p->a
99b0: 56 61 72 5b 70 4f 70 2d 3e 70 31 20 2d 20 31 5d  Var[pOp->p1 - 1]
99c0: 3b 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 56  ;.  if( sqlite3V
99d0: 64 62 65 4d 65 6d 54 6f 6f 42 69 67 28 70 56 61  dbeMemTooBig(pVa
99e0: 72 29 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 74  r) ){.    goto t
99f0: 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a 20 20 70 4f  oo_big;.  }.  pO
9a00: 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  ut = &aMem[pOp->
9a10: 70 32 5d 3b 0a 20 20 73 71 6c 69 74 65 33 56 64  p2];.  sqlite3Vd
9a20: 62 65 4d 65 6d 53 68 61 6c 6c 6f 77 43 6f 70 79  beMemShallowCopy
9a30: 28 70 4f 75 74 2c 20 70 56 61 72 2c 20 4d 45 4d  (pOut, pVar, MEM
9a40: 5f 53 74 61 74 69 63 29 3b 0a 20 20 55 50 44 41  _Static);.  UPDA
9a50: 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28  TE_MAX_BLOBSIZE(
9a60: 70 4f 75 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a  pOut);.  break;.
9a70: 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4d 6f  }../* Opcode: Mo
9a80: 76 65 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a  ve P1 P2 P3 * *.
9a90: 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50  ** Synopsis: r[P
9aa0: 32 40 50 33 5d 3d 72 5b 50 31 40 50 33 5d 0a 2a  2@P3]=r[P1@P3].*
9ab0: 2a 0a 2a 2a 20 4d 6f 76 65 20 74 68 65 20 50 33  *.** Move the P3
9ac0: 20 76 61 6c 75 65 73 20 69 6e 20 72 65 67 69 73   values in regis
9ad0: 74 65 72 20 50 31 2e 2e 50 31 2b 50 33 2d 31 20  ter P1..P1+P3-1 
9ae0: 6f 76 65 72 20 69 6e 74 6f 0a 2a 2a 20 72 65 67  over into.** reg
9af0: 69 73 74 65 72 73 20 50 32 2e 2e 50 32 2b 50 33  isters P2..P2+P3
9b00: 2d 31 2e 20 20 52 65 67 69 73 74 65 72 73 20 50  -1.  Registers P
9b10: 31 2e 2e 50 31 2b 50 33 2d 31 20 61 72 65 0a 2a  1..P1+P3-1 are.*
9b20: 2a 20 6c 65 66 74 20 68 6f 6c 64 69 6e 67 20 61  * left holding a
9b30: 20 4e 55 4c 4c 2e 20 20 49 74 20 69 73 20 61 6e   NULL.  It is an
9b40: 20 65 72 72 6f 72 20 66 6f 72 20 72 65 67 69 73   error for regis
9b50: 74 65 72 20 72 61 6e 67 65 73 0a 2a 2a 20 50 31  ter ranges.** P1
9b60: 2e 2e 50 31 2b 50 33 2d 31 20 61 6e 64 20 50 32  ..P1+P3-1 and P2
9b70: 2e 2e 50 32 2b 50 33 2d 31 20 74 6f 20 6f 76 65  ..P2+P3-1 to ove
9b80: 72 6c 61 70 2e 20 20 49 74 20 69 73 20 61 6e 20  rlap.  It is an 
9b90: 65 72 72 6f 72 0a 2a 2a 20 66 6f 72 20 50 33 20  error.** for P3 
9ba0: 74 6f 20 62 65 20 6c 65 73 73 20 74 68 61 6e 20  to be less than 
9bb0: 31 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4d 6f  1..*/.case OP_Mo
9bc0: 76 65 3a 20 7b 0a 20 20 69 6e 74 20 6e 3b 20 20  ve: {.  int n;  
9bd0: 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
9be0: 65 72 20 6f 66 20 72 65 67 69 73 74 65 72 73 20  er of registers 
9bf0: 6c 65 66 74 20 74 6f 20 63 6f 70 79 20 2a 2f 0a  left to copy */.
9c00: 20 20 69 6e 74 20 70 31 3b 20 20 20 20 20 20 20    int p1;       
9c10: 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72 20 74     /* Register t
9c20: 6f 20 63 6f 70 79 20 66 72 6f 6d 20 2a 2f 0a 20  o copy from */. 
9c30: 20 69 6e 74 20 70 32 3b 20 20 20 20 20 20 20 20   int p2;        
9c40: 20 20 2f 2a 20 52 65 67 69 73 74 65 72 20 74 6f    /* Register to
9c50: 20 63 6f 70 79 20 74 6f 20 2a 2f 0a 0a 20 20 6e   copy to */..  n
9c60: 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 70 31   = pOp->p3;.  p1
9c70: 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 70 32   = pOp->p1;.  p2
9c80: 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 61 73   = pOp->p2;.  as
9c90: 73 65 72 74 28 20 6e 3e 30 20 26 26 20 70 31 3e  sert( n>0 && p1>
9ca0: 30 20 26 26 20 70 32 3e 30 20 29 3b 0a 20 20 61  0 && p2>0 );.  a
9cb0: 73 73 65 72 74 28 20 70 31 2b 6e 3c 3d 70 32 20  ssert( p1+n<=p2 
9cc0: 7c 7c 20 70 32 2b 6e 3c 3d 70 31 20 29 3b 0a 0a  || p2+n<=p1 );..
9cd0: 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70    pIn1 = &aMem[p
9ce0: 31 5d 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d  1];.  pOut = &aM
9cf0: 65 6d 5b 70 32 5d 3b 0a 20 20 64 6f 7b 0a 20 20  em[p2];.  do{.  
9d00: 20 20 61 73 73 65 72 74 28 20 70 4f 75 74 3c 3d    assert( pOut<=
9d10: 26 61 4d 65 6d 5b 28 70 2d 3e 6e 4d 65 6d 2b 31  &aMem[(p->nMem+1
9d20: 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29 5d 20   - p->nCursor)] 
9d30: 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  );.    assert( p
9d40: 49 6e 31 3c 3d 26 61 4d 65 6d 5b 28 70 2d 3e 6e  In1<=&aMem[(p->n
9d50: 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73  Mem+1 - p->nCurs
9d60: 6f 72 29 5d 20 29 3b 0a 20 20 20 20 61 73 73 65  or)] );.    asse
9d70: 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 70  rt( memIsValid(p
9d80: 49 6e 31 29 20 29 3b 0a 20 20 20 20 6d 65 6d 41  In1) );.    memA
9d90: 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20  boutToChange(p, 
9da0: 70 4f 75 74 29 3b 0a 20 20 20 20 73 71 6c 69 74  pOut);.    sqlit
9db0: 65 33 56 64 62 65 4d 65 6d 4d 6f 76 65 28 70 4f  e3VdbeMemMove(pO
9dc0: 75 74 2c 20 70 49 6e 31 29 3b 0a 23 69 66 64 65  ut, pIn1);.#ifde
9dd0: 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20  f SQLITE_DEBUG. 
9de0: 20 20 20 69 66 28 20 70 4f 75 74 2d 3e 70 53 63     if( pOut->pSc
9df0: 6f 70 79 46 72 6f 6d 3e 3d 26 61 4d 65 6d 5b 70  opyFrom>=&aMem[p
9e00: 31 5d 20 26 26 20 70 4f 75 74 2d 3e 70 53 63 6f  1] && pOut->pSco
9e10: 70 79 46 72 6f 6d 3c 70 4f 75 74 20 29 7b 0a 20  pyFrom<pOut ){. 
9e20: 20 20 20 20 20 70 4f 75 74 2d 3e 70 53 63 6f 70       pOut->pScop
9e30: 79 46 72 6f 6d 20 2b 3d 20 70 4f 70 2d 3e 70 32  yFrom += pOp->p2
9e40: 20 2d 20 70 31 3b 0a 20 20 20 20 7d 0a 23 65 6e   - p1;.    }.#en
9e50: 64 69 66 0a 20 20 20 20 44 65 65 70 68 65 6d 65  dif.    Deepheme
9e60: 72 61 6c 69 7a 65 28 70 4f 75 74 29 3b 0a 20 20  ralize(pOut);.  
9e70: 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45    REGISTER_TRACE
9e80: 28 70 32 2b 2b 2c 20 70 4f 75 74 29 3b 0a 20 20  (p2++, pOut);.  
9e90: 20 20 70 49 6e 31 2b 2b 3b 0a 20 20 20 20 70 4f    pIn1++;.    pO
9ea0: 75 74 2b 2b 3b 0a 20 20 7d 77 68 69 6c 65 28 20  ut++;.  }while( 
9eb0: 2d 2d 6e 20 29 3b 0a 20 20 62 72 65 61 6b 3b 0a  --n );.  break;.
9ec0: 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6f  }../* Opcode: Co
9ed0: 70 79 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a  py P1 P2 P3 * *.
9ee0: 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50  ** Synopsis: r[P
9ef0: 32 40 50 33 2b 31 5d 3d 72 5b 50 31 40 50 33 2b  2@P3+1]=r[P1@P3+
9f00: 31 5d 0a 2a 2a 0a 2a 2a 20 4d 61 6b 65 20 61 20  1].**.** Make a 
9f10: 63 6f 70 79 20 6f 66 20 72 65 67 69 73 74 65 72  copy of register
9f20: 73 20 50 31 2e 2e 50 31 2b 50 33 20 69 6e 74 6f  s P1..P1+P3 into
9f30: 20 72 65 67 69 73 74 65 72 73 20 50 32 2e 2e 50   registers P2..P
9f40: 32 2b 50 33 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73  2+P3..**.** This
9f50: 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 6d 61 6b   instruction mak
9f60: 65 73 20 61 20 64 65 65 70 20 63 6f 70 79 20 6f  es a deep copy o
9f70: 66 20 74 68 65 20 76 61 6c 75 65 2e 20 20 41 20  f the value.  A 
9f80: 64 75 70 6c 69 63 61 74 65 0a 2a 2a 20 69 73 20  duplicate.** is 
9f90: 6d 61 64 65 20 6f 66 20 61 6e 79 20 73 74 72 69  made of any stri
9fa0: 6e 67 20 6f 72 20 62 6c 6f 62 20 63 6f 6e 73 74  ng or blob const
9fb0: 61 6e 74 2e 20 20 53 65 65 20 61 6c 73 6f 20 4f  ant.  See also O
9fc0: 50 5f 53 43 6f 70 79 2e 0a 2a 2f 0a 63 61 73 65  P_SCopy..*/.case
9fd0: 20 4f 50 5f 43 6f 70 79 3a 20 7b 0a 20 20 69 6e   OP_Copy: {.  in
9fe0: 74 20 6e 3b 0a 0a 20 20 6e 20 3d 20 70 4f 70 2d  t n;..  n = pOp-
9ff0: 3e 70 33 3b 0a 20 20 70 49 6e 31 20 3d 20 26 61  >p3;.  pIn1 = &a
a000: 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
a010: 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pOut = &aMem[pOp
a020: 2d 3e 70 32 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p2];.  assert(
a030: 20 70 4f 75 74 21 3d 70 49 6e 31 20 29 3b 0a 20   pOut!=pIn1 );. 
a040: 20 77 68 69 6c 65 28 20 31 20 29 7b 0a 20 20 20   while( 1 ){.   
a050: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53   sqlite3VdbeMemS
a060: 68 61 6c 6c 6f 77 43 6f 70 79 28 70 4f 75 74 2c  hallowCopy(pOut,
a070: 20 70 49 6e 31 2c 20 4d 45 4d 5f 45 70 68 65 6d   pIn1, MEM_Ephem
a080: 29 3b 0a 20 20 20 20 44 65 65 70 68 65 6d 65 72  );.    Deephemer
a090: 61 6c 69 7a 65 28 70 4f 75 74 29 3b 0a 23 69 66  alize(pOut);.#if
a0a0: 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47  def SQLITE_DEBUG
a0b0: 0a 20 20 20 20 70 4f 75 74 2d 3e 70 53 63 6f 70  .    pOut->pScop
a0c0: 79 46 72 6f 6d 20 3d 20 30 3b 0a 23 65 6e 64 69  yFrom = 0;.#endi
a0d0: 66 0a 20 20 20 20 52 45 47 49 53 54 45 52 5f 54  f.    REGISTER_T
a0e0: 52 41 43 45 28 70 4f 70 2d 3e 70 32 2b 70 4f 70  RACE(pOp->p2+pOp
a0f0: 2d 3e 70 33 2d 6e 2c 20 70 4f 75 74 29 3b 0a 20  ->p3-n, pOut);. 
a100: 20 20 20 69 66 28 20 28 6e 2d 2d 29 3d 3d 30 20     if( (n--)==0 
a110: 29 20 62 72 65 61 6b 3b 0a 20 20 20 20 70 4f 75  ) break;.    pOu
a120: 74 2b 2b 3b 0a 20 20 20 20 70 49 6e 31 2b 2b 3b  t++;.    pIn1++;
a130: 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
a140: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 43 6f 70  ./* Opcode: SCop
a150: 79 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  y P1 P2 * * *.**
a160: 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d   Synopsis: r[P2]
a170: 3d 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 4d 61 6b  =r[P1].**.** Mak
a180: 65 20 61 20 73 68 61 6c 6c 6f 77 20 63 6f 70 79  e a shallow copy
a190: 20 6f 66 20 72 65 67 69 73 74 65 72 20 50 31 20   of register P1 
a1a0: 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 32  into register P2
a1b0: 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 6e 73  ..**.** This ins
a1c0: 74 72 75 63 74 69 6f 6e 20 6d 61 6b 65 73 20 61  truction makes a
a1d0: 20 73 68 61 6c 6c 6f 77 20 63 6f 70 79 20 6f 66   shallow copy of
a1e0: 20 74 68 65 20 76 61 6c 75 65 2e 20 20 49 66 20   the value.  If 
a1f0: 74 68 65 20 76 61 6c 75 65 0a 2a 2a 20 69 73 20  the value.** is 
a200: 61 20 73 74 72 69 6e 67 20 6f 72 20 62 6c 6f 62  a string or blob
a210: 2c 20 74 68 65 6e 20 74 68 65 20 63 6f 70 79 20  , then the copy 
a220: 69 73 20 6f 6e 6c 79 20 61 20 70 6f 69 6e 74 65  is only a pointe
a230: 72 20 74 6f 20 74 68 65 0a 2a 2a 20 6f 72 69 67  r to the.** orig
a240: 69 6e 61 6c 20 61 6e 64 20 68 65 6e 63 65 20 69  inal and hence i
a250: 66 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 20 63  f the original c
a260: 68 61 6e 67 65 73 20 73 6f 20 77 69 6c 6c 20 74  hanges so will t
a270: 68 65 20 63 6f 70 79 2e 0a 2a 2a 20 57 6f 72 73  he copy..** Wors
a280: 65 2c 20 69 66 20 74 68 65 20 6f 72 69 67 69 6e  e, if the origin
a290: 61 6c 20 69 73 20 64 65 61 6c 6c 6f 63 61 74 65  al is deallocate
a2a0: 64 2c 20 74 68 65 20 63 6f 70 79 20 62 65 63 6f  d, the copy beco
a2b0: 6d 65 73 20 69 6e 76 61 6c 69 64 2e 0a 2a 2a 20  mes invalid..** 
a2c0: 54 68 75 73 20 74 68 65 20 70 72 6f 67 72 61 6d  Thus the program
a2d0: 20 6d 75 73 74 20 67 75 61 72 61 6e 74 65 65 20   must guarantee 
a2e0: 74 68 61 74 20 74 68 65 20 6f 72 69 67 69 6e 61  that the origina
a2f0: 6c 20 77 69 6c 6c 20 6e 6f 74 20 63 68 61 6e 67  l will not chang
a300: 65 0a 2a 2a 20 64 75 72 69 6e 67 20 74 68 65 20  e.** during the 
a310: 6c 69 66 65 74 69 6d 65 20 6f 66 20 74 68 65 20  lifetime of the 
a320: 63 6f 70 79 2e 20 20 55 73 65 20 4f 50 5f 43 6f  copy.  Use OP_Co
a330: 70 79 20 74 6f 20 6d 61 6b 65 20 61 20 63 6f 6d  py to make a com
a340: 70 6c 65 74 65 0a 2a 2a 20 63 6f 70 79 2e 0a 2a  plete.** copy..*
a350: 2f 0a 63 61 73 65 20 4f 50 5f 53 43 6f 70 79 3a  /.case OP_SCopy:
a360: 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a   {            /*
a370: 20 6f 75 74 32 20 2a 2f 0a 20 20 70 49 6e 31 20   out2 */.  pIn1 
a380: 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  = &aMem[pOp->p1]
a390: 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d  ;.  pOut = &aMem
a3a0: 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 61 73 73  [pOp->p2];.  ass
a3b0: 65 72 74 28 20 70 4f 75 74 21 3d 70 49 6e 31 20  ert( pOut!=pIn1 
a3c0: 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65  );.  sqlite3Vdbe
a3d0: 4d 65 6d 53 68 61 6c 6c 6f 77 43 6f 70 79 28 70  MemShallowCopy(p
a3e0: 4f 75 74 2c 20 70 49 6e 31 2c 20 4d 45 4d 5f 45  Out, pIn1, MEM_E
a3f0: 70 68 65 6d 29 3b 0a 23 69 66 64 65 66 20 53 51  phem);.#ifdef SQ
a400: 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 69 66 28  LITE_DEBUG.  if(
a410: 20 70 4f 75 74 2d 3e 70 53 63 6f 70 79 46 72 6f   pOut->pScopyFro
a420: 6d 3d 3d 30 20 29 20 70 4f 75 74 2d 3e 70 53 63  m==0 ) pOut->pSc
a430: 6f 70 79 46 72 6f 6d 20 3d 20 70 49 6e 31 3b 0a  opyFrom = pIn1;.
a440: 23 65 6e 64 69 66 0a 20 20 62 72 65 61 6b 3b 0a  #endif.  break;.
a450: 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 6e  }../* Opcode: In
a460: 74 43 6f 70 79 20 50 31 20 50 32 20 2a 20 2a 20  tCopy P1 P2 * * 
a470: 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72  *.** Synopsis: r
a480: 5b 50 32 5d 3d 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a  [P2]=r[P1].**.**
a490: 20 54 72 61 6e 73 66 65 72 20 74 68 65 20 69 6e   Transfer the in
a4a0: 74 65 67 65 72 20 76 61 6c 75 65 20 68 65 6c 64  teger value held
a4b0: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20   in register P1 
a4c0: 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 32  into register P2
a4d0: 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 73 20  ..**.** This is 
a4e0: 61 6e 20 6f 70 74 69 6d 69 7a 65 64 20 76 65 72  an optimized ver
a4f0: 73 69 6f 6e 20 6f 66 20 53 43 6f 70 79 20 74 68  sion of SCopy th
a500: 61 74 20 77 6f 72 6b 73 20 6f 6e 6c 79 20 66 6f  at works only fo
a510: 72 20 69 6e 74 65 67 65 72 0a 2a 2a 20 76 61 6c  r integer.** val
a520: 75 65 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ues..*/.case OP_
a530: 49 6e 74 43 6f 70 79 3a 20 7b 20 20 20 20 20 20  IntCopy: {      
a540: 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f        /* out2 */
a550: 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b  .  pIn1 = &aMem[
a560: 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65  pOp->p1];.  asse
a570: 72 74 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73  rt( (pIn1->flags
a580: 20 26 20 4d 45 4d 5f 49 6e 74 29 21 3d 30 20 29   & MEM_Int)!=0 )
a590: 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d  ;.  pOut = &aMem
a5a0: 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 73 71 6c  [pOp->p2];.  sql
a5b0: 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 49 6e  ite3VdbeMemSetIn
a5c0: 74 36 34 28 70 4f 75 74 2c 20 70 49 6e 31 2d 3e  t64(pOut, pIn1->
a5d0: 75 2e 69 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  u.i);.  break;.}
a5e0: 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65 73  ../* Opcode: Res
a5f0: 75 6c 74 52 6f 77 20 50 31 20 50 32 20 2a 20 2a  ultRow P1 P2 * *
a600: 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
a610: 6f 75 74 70 75 74 3d 72 5b 50 31 40 50 32 5d 0a  output=r[P1@P2].
a620: 2a 2a 0a 2a 2a 20 54 68 65 20 72 65 67 69 73 74  **.** The regist
a630: 65 72 73 20 50 31 20 74 68 72 6f 75 67 68 20 50  ers P1 through P
a640: 31 2b 50 32 2d 31 20 63 6f 6e 74 61 69 6e 20 61  1+P2-1 contain a
a650: 20 73 69 6e 67 6c 65 20 72 6f 77 20 6f 66 0a 2a   single row of.*
a660: 2a 20 72 65 73 75 6c 74 73 2e 20 54 68 69 73 20  * results. This 
a670: 6f 70 63 6f 64 65 20 63 61 75 73 65 73 20 74 68  opcode causes th
a680: 65 20 73 71 6c 69 74 65 33 5f 73 74 65 70 28 29  e sqlite3_step()
a690: 20 63 61 6c 6c 20 74 6f 20 74 65 72 6d 69 6e 61   call to termina
a6a0: 74 65 0a 2a 2a 20 77 69 74 68 20 61 6e 20 53 51  te.** with an SQ
a6b0: 4c 49 54 45 5f 52 4f 57 20 72 65 74 75 72 6e 20  LITE_ROW return 
a6c0: 63 6f 64 65 20 61 6e 64 20 69 74 20 73 65 74 73  code and it sets
a6d0: 20 75 70 20 74 68 65 20 73 71 6c 69 74 65 33 5f   up the sqlite3_
a6e0: 73 74 6d 74 0a 2a 2a 20 73 74 72 75 63 74 75 72  stmt.** structur
a6f0: 65 20 74 6f 20 70 72 6f 76 69 64 65 20 61 63 63  e to provide acc
a700: 65 73 73 20 74 6f 20 74 68 65 20 72 28 50 31 29  ess to the r(P1)
a710: 2e 2e 72 28 50 31 2b 50 32 2d 31 29 20 76 61 6c  ..r(P1+P2-1) val
a720: 75 65 73 20 61 73 0a 2a 2a 20 74 68 65 20 72 65  ues as.** the re
a730: 73 75 6c 74 20 72 6f 77 2e 0a 2a 2f 0a 63 61 73  sult row..*/.cas
a740: 65 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77 3a 20  e OP_ResultRow: 
a750: 7b 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d 3b 0a 20  {.  Mem *pMem;. 
a760: 20 69 6e 74 20 69 3b 0a 20 20 61 73 73 65 72 74   int i;.  assert
a770: 28 20 70 2d 3e 6e 52 65 73 43 6f 6c 75 6d 6e 3d  ( p->nResColumn=
a780: 3d 70 4f 70 2d 3e 70 32 20 29 3b 0a 20 20 61 73  =pOp->p2 );.  as
a790: 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 30 20  sert( pOp->p1>0 
a7a0: 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  );.  assert( pOp
a7b0: 2d 3e 70 31 2b 70 4f 70 2d 3e 70 32 3c 3d 28 70  ->p1+pOp->p2<=(p
a7c0: 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43  ->nMem+1 - p->nC
a7d0: 75 72 73 6f 72 29 2b 31 20 29 3b 0a 0a 23 69 66  ursor)+1 );..#if
a7e0: 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
a7f0: 5f 50 52 4f 47 52 45 53 53 5f 43 41 4c 4c 42 41  _PROGRESS_CALLBA
a800: 43 4b 0a 20 20 2f 2a 20 52 75 6e 20 74 68 65 20  CK.  /* Run the 
a810: 70 72 6f 67 72 65 73 73 20 63 6f 75 6e 74 65 72  progress counter
a820: 20 6a 75 73 74 20 62 65 66 6f 72 65 20 72 65 74   just before ret
a830: 75 72 6e 69 6e 67 2e 0a 20 20 2a 2f 0a 20 20 69  urning..  */.  i
a840: 66 28 20 64 62 2d 3e 78 50 72 6f 67 72 65 73 73  f( db->xProgress
a850: 21 3d 30 0a 20 20 20 26 26 20 6e 56 6d 53 74 65  !=0.   && nVmSte
a860: 70 3e 3d 6e 50 72 6f 67 72 65 73 73 4c 69 6d 69  p>=nProgressLimi
a870: 74 20 0a 20 20 20 26 26 20 64 62 2d 3e 78 50 72  t .   && db->xPr
a880: 6f 67 72 65 73 73 28 64 62 2d 3e 70 50 72 6f 67  ogress(db->pProg
a890: 72 65 73 73 41 72 67 29 21 3d 30 0a 20 20 29 7b  ressArg)!=0.  ){
a8a0: 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45  .    rc = SQLITE
a8b0: 5f 49 4e 54 45 52 52 55 50 54 3b 0a 20 20 20 20  _INTERRUPT;.    
a8c0: 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
a8d0: 6f 5f 65 72 72 6f 72 3b 0a 20 20 7d 0a 23 65 6e  o_error;.  }.#en
a8e0: 64 69 66 0a 0a 20 20 2f 2a 20 49 66 20 74 68 69  dif..  /* If thi
a8f0: 73 20 73 74 61 74 65 6d 65 6e 74 20 68 61 73 20  s statement has 
a900: 76 69 6f 6c 61 74 65 64 20 69 6d 6d 65 64 69 61  violated immedia
a910: 74 65 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 63  te foreign key c
a920: 6f 6e 73 74 72 61 69 6e 74 73 2c 20 64 6f 0a 20  onstraints, do. 
a930: 20 2a 2a 20 6e 6f 74 20 72 65 74 75 72 6e 20 74   ** not return t
a940: 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77  he number of row
a950: 73 20 6d 6f 64 69 66 69 65 64 2e 20 41 6e 64 20  s modified. And 
a960: 64 6f 20 6e 6f 74 20 52 45 4c 45 41 53 45 20 74  do not RELEASE t
a970: 68 65 20 73 74 61 74 65 6d 65 6e 74 0a 20 20 2a  he statement.  *
a980: 2a 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20 49  * transaction. I
a990: 74 20 6e 65 65 64 73 20 74 6f 20 62 65 20 72 6f  t needs to be ro
a9a0: 6c 6c 65 64 20 62 61 63 6b 2e 20 20 2a 2f 0a 20  lled back.  */. 
a9b0: 20 69 66 28 20 53 51 4c 49 54 45 5f 4f 4b 21 3d   if( SQLITE_OK!=
a9c0: 28 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62  (rc = sqlite3Vdb
a9d0: 65 43 68 65 63 6b 46 6b 28 70 2c 20 30 29 29 20  eCheckFk(p, 0)) 
a9e0: 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 64  ){.    assert( d
a9f0: 62 2d 3e 66 6c 61 67 73 26 53 51 4c 49 54 45 5f  b->flags&SQLITE_
aa00: 43 6f 75 6e 74 52 6f 77 73 20 29 3b 0a 20 20 20  CountRows );.   
aa10: 20 61 73 73 65 72 74 28 20 70 2d 3e 75 73 65 73   assert( p->uses
aa20: 53 74 6d 74 4a 6f 75 72 6e 61 6c 20 29 3b 0a 20  StmtJournal );. 
aa30: 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75     goto abort_du
aa40: 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 7d 0a  e_to_error;.  }.
aa50: 0a 20 20 2f 2a 20 49 66 20 74 68 65 20 53 51 4c  .  /* If the SQL
aa60: 49 54 45 5f 43 6f 75 6e 74 52 6f 77 73 20 66 6c  ITE_CountRows fl
aa70: 61 67 20 69 73 20 73 65 74 20 69 6e 20 73 71 6c  ag is set in sql
aa80: 69 74 65 33 2e 66 6c 61 67 73 20 6d 61 73 6b 2c  ite3.flags mask,
aa90: 20 74 68 65 6e 20 0a 20 20 2a 2a 20 44 4d 4c 20   then .  ** DML 
aaa0: 73 74 61 74 65 6d 65 6e 74 73 20 69 6e 76 6f 6b  statements invok
aab0: 65 20 74 68 69 73 20 6f 70 63 6f 64 65 20 74 6f  e this opcode to
aac0: 20 72 65 74 75 72 6e 20 74 68 65 20 6e 75 6d 62   return the numb
aad0: 65 72 20 6f 66 20 72 6f 77 73 20 0a 20 20 2a 2a  er of rows .  **
aae0: 20 6d 6f 64 69 66 69 65 64 20 74 6f 20 74 68 65   modified to the
aaf0: 20 75 73 65 72 2e 20 54 68 69 73 20 69 73 20 74   user. This is t
ab00: 68 65 20 6f 6e 6c 79 20 77 61 79 20 74 68 61 74  he only way that
ab10: 20 61 20 56 4d 20 74 68 61 74 0a 20 20 2a 2a 20   a VM that.  ** 
ab20: 6f 70 65 6e 73 20 61 20 73 74 61 74 65 6d 65 6e  opens a statemen
ab30: 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 6d 61  t transaction ma
ab40: 79 20 69 6e 76 6f 6b 65 20 74 68 69 73 20 6f 70  y invoke this op
ab50: 63 6f 64 65 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20  code..  **.  ** 
ab60: 49 6e 20 63 61 73 65 20 74 68 69 73 20 69 73 20  In case this is 
ab70: 73 75 63 68 20 61 20 73 74 61 74 65 6d 65 6e 74  such a statement
ab80: 2c 20 63 6c 6f 73 65 20 61 6e 79 20 73 74 61 74  , close any stat
ab90: 65 6d 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f  ement transactio
aba0: 6e 0a 20 20 2a 2a 20 6f 70 65 6e 65 64 20 62 79  n.  ** opened by
abb0: 20 74 68 69 73 20 56 4d 20 62 65 66 6f 72 65 20   this VM before 
abc0: 72 65 74 75 72 6e 69 6e 67 20 63 6f 6e 74 72 6f  returning contro
abd0: 6c 20 74 6f 20 74 68 65 20 75 73 65 72 2e 20 54  l to the user. T
abe0: 68 69 73 20 69 73 20 74 6f 0a 20 20 2a 2a 20 65  his is to.  ** e
abf0: 6e 73 75 72 65 20 74 68 61 74 20 73 74 61 74 65  nsure that state
ac00: 6d 65 6e 74 2d 74 72 61 6e 73 61 63 74 69 6f 6e  ment-transaction
ac10: 73 20 61 72 65 20 61 6c 77 61 79 73 20 6e 65 73  s are always nes
ac20: 74 65 64 2c 20 6e 6f 74 20 6f 76 65 72 6c 61 70  ted, not overlap
ac30: 70 69 6e 67 2e 0a 20 20 2a 2a 20 49 66 20 74 68  ping..  ** If th
ac40: 65 20 6f 70 65 6e 20 73 74 61 74 65 6d 65 6e 74  e open statement
ac50: 2d 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20  -transaction is 
ac60: 6e 6f 74 20 63 6c 6f 73 65 64 20 68 65 72 65 2c  not closed here,
ac70: 20 74 68 65 6e 20 74 68 65 20 75 73 65 72 0a 20   then the user. 
ac80: 20 2a 2a 20 6d 61 79 20 73 74 65 70 20 61 6e 6f   ** may step ano
ac90: 74 68 65 72 20 56 4d 20 74 68 61 74 20 6f 70 65  ther VM that ope
aca0: 6e 73 20 69 74 73 20 6f 77 6e 20 73 74 61 74 65  ns its own state
acb0: 6d 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e  ment transaction
acc0: 2e 20 54 68 69 73 0a 20 20 2a 2a 20 6d 61 79 20  . This.  ** may 
acd0: 6c 65 61 64 20 74 6f 20 6f 76 65 72 6c 61 70 70  lead to overlapp
ace0: 69 6e 67 20 73 74 61 74 65 6d 65 6e 74 20 74 72  ing statement tr
acf0: 61 6e 73 61 63 74 69 6f 6e 73 2e 0a 20 20 2a 2a  ansactions..  **
ad00: 0a 20 20 2a 2a 20 54 68 65 20 73 74 61 74 65 6d  .  ** The statem
ad10: 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  ent transaction 
ad20: 69 73 20 6e 65 76 65 72 20 61 20 74 6f 70 2d 6c  is never a top-l
ad30: 65 76 65 6c 20 74 72 61 6e 73 61 63 74 69 6f 6e  evel transaction
ad40: 2e 20 20 48 65 6e 63 65 0a 20 20 2a 2a 20 74 68  .  Hence.  ** th
ad50: 65 20 52 45 4c 45 41 53 45 20 63 61 6c 6c 20 62  e RELEASE call b
ad60: 65 6c 6f 77 20 63 61 6e 20 6e 65 76 65 72 20 66  elow can never f
ad70: 61 69 6c 2e 0a 20 20 2a 2f 0a 20 20 61 73 73 65  ail..  */.  asse
ad80: 72 74 28 20 70 2d 3e 69 53 74 61 74 65 6d 65 6e  rt( p->iStatemen
ad90: 74 3d 3d 30 20 7c 7c 20 64 62 2d 3e 66 6c 61 67  t==0 || db->flag
ada0: 73 26 53 51 4c 49 54 45 5f 43 6f 75 6e 74 52 6f  s&SQLITE_CountRo
adb0: 77 73 20 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c  ws );.  rc = sql
adc0: 69 74 65 33 56 64 62 65 43 6c 6f 73 65 53 74 61  ite3VdbeCloseSta
add0: 74 65 6d 65 6e 74 28 70 2c 20 53 41 56 45 50 4f  tement(p, SAVEPO
ade0: 49 4e 54 5f 52 45 4c 45 41 53 45 29 3b 0a 20 20  INT_RELEASE);.  
adf0: 61 73 73 65 72 74 28 20 72 63 3d 3d 53 51 4c 49  assert( rc==SQLI
ae00: 54 45 5f 4f 4b 20 29 3b 0a 0a 20 20 2f 2a 20 49  TE_OK );..  /* I
ae10: 6e 76 61 6c 69 64 61 74 65 20 61 6c 6c 20 65 70  nvalidate all ep
ae20: 68 65 6d 65 72 61 6c 20 63 75 72 73 6f 72 20 72  hemeral cursor r
ae30: 6f 77 20 63 61 63 68 65 73 20 2a 2f 0a 20 20 70  ow caches */.  p
ae40: 2d 3e 63 61 63 68 65 43 74 72 20 3d 20 28 70 2d  ->cacheCtr = (p-
ae50: 3e 63 61 63 68 65 43 74 72 20 2b 20 32 29 7c 31  >cacheCtr + 2)|1
ae60: 3b 0a 0a 20 20 2f 2a 20 4d 61 6b 65 20 73 75 72  ;..  /* Make sur
ae70: 65 20 74 68 65 20 72 65 73 75 6c 74 73 20 6f 66  e the results of
ae80: 20 74 68 65 20 63 75 72 72 65 6e 74 20 72 6f 77   the current row
ae90: 20 61 72 65 20 5c 30 30 30 20 74 65 72 6d 69 6e   are \000 termin
aea0: 61 74 65 64 0a 20 20 2a 2a 20 61 6e 64 20 68 61  ated.  ** and ha
aeb0: 76 65 20 61 6e 20 61 73 73 69 67 6e 65 64 20 74  ve an assigned t
aec0: 79 70 65 2e 20 20 54 68 65 20 72 65 73 75 6c 74  ype.  The result
aed0: 73 20 61 72 65 20 64 65 2d 65 70 68 65 6d 65 72  s are de-ephemer
aee0: 61 6c 69 7a 65 64 20 61 73 0a 20 20 2a 2a 20 61  alized as.  ** a
aef0: 20 73 69 64 65 20 65 66 66 65 63 74 2e 0a 20 20   side effect..  
af00: 2a 2f 0a 20 20 70 4d 65 6d 20 3d 20 70 2d 3e 70  */.  pMem = p->p
af10: 52 65 73 75 6c 74 53 65 74 20 3d 20 26 61 4d 65  ResultSet = &aMe
af20: 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 66 6f  m[pOp->p1];.  fo
af30: 72 28 69 3d 30 3b 20 69 3c 70 4f 70 2d 3e 70 32  r(i=0; i<pOp->p2
af40: 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 61 73 73 65  ; i++){.    asse
af50: 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 26  rt( memIsValid(&
af60: 70 4d 65 6d 5b 69 5d 29 20 29 3b 0a 20 20 20 20  pMem[i]) );.    
af70: 44 65 65 70 68 65 6d 65 72 61 6c 69 7a 65 28 26  Deephemeralize(&
af80: 70 4d 65 6d 5b 69 5d 29 3b 0a 20 20 20 20 61 73  pMem[i]);.    as
af90: 73 65 72 74 28 20 28 70 4d 65 6d 5b 69 5d 2e 66  sert( (pMem[i].f
afa0: 6c 61 67 73 20 26 20 4d 45 4d 5f 45 70 68 65 6d  lags & MEM_Ephem
afb0: 29 3d 3d 30 0a 20 20 20 20 20 20 20 20 20 20 20  )==0.           
afc0: 20 7c 7c 20 28 70 4d 65 6d 5b 69 5d 2e 66 6c 61   || (pMem[i].fla
afd0: 67 73 20 26 20 28 4d 45 4d 5f 53 74 72 7c 4d 45  gs & (MEM_Str|ME
afe0: 4d 5f 42 6c 6f 62 29 29 3d 3d 30 20 29 3b 0a 20  M_Blob))==0 );. 
aff0: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
b000: 6d 4e 75 6c 54 65 72 6d 69 6e 61 74 65 28 26 70  mNulTerminate(&p
b010: 4d 65 6d 5b 69 5d 29 3b 0a 20 20 20 20 52 45 47  Mem[i]);.    REG
b020: 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d  ISTER_TRACE(pOp-
b030: 3e 70 31 2b 69 2c 20 26 70 4d 65 6d 5b 69 5d 29  >p1+i, &pMem[i])
b040: 3b 0a 20 20 7d 0a 20 20 69 66 28 20 64 62 2d 3e  ;.  }.  if( db->
b050: 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 29 20 67  mallocFailed ) g
b060: 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 0a 20 20 69  oto no_mem;..  i
b070: 66 28 20 64 62 2d 3e 6d 54 72 61 63 65 20 26 20  f( db->mTrace & 
b080: 53 51 4c 49 54 45 5f 54 52 41 43 45 5f 52 4f 57  SQLITE_TRACE_ROW
b090: 20 29 7b 0a 20 20 20 20 64 62 2d 3e 78 54 72 61   ){.    db->xTra
b0a0: 63 65 28 53 51 4c 49 54 45 5f 54 52 41 43 45 5f  ce(SQLITE_TRACE_
b0b0: 52 4f 57 2c 20 64 62 2d 3e 70 54 72 61 63 65 41  ROW, db->pTraceA
b0c0: 72 67 2c 20 70 2c 20 30 29 3b 0a 20 20 7d 0a 0a  rg, p, 0);.  }..
b0d0: 20 20 2f 2a 20 52 65 74 75 72 6e 20 53 51 4c 49    /* Return SQLI
b0e0: 54 45 5f 52 4f 57 0a 20 20 2a 2f 0a 20 20 70 2d  TE_ROW.  */.  p-
b0f0: 3e 70 63 20 3d 20 28 69 6e 74 29 28 70 4f 70 20  >pc = (int)(pOp 
b100: 2d 20 61 4f 70 29 20 2b 20 31 3b 0a 20 20 72 63  - aOp) + 1;.  rc
b110: 20 3d 20 53 51 4c 49 54 45 5f 52 4f 57 3b 0a 20   = SQLITE_ROW;. 
b120: 20 67 6f 74 6f 20 76 64 62 65 5f 72 65 74 75 72   goto vdbe_retur
b130: 6e 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  n;.}../* Opcode:
b140: 20 43 6f 6e 63 61 74 20 50 31 20 50 32 20 50 33   Concat P1 P2 P3
b150: 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73   * *.** Synopsis
b160: 3a 20 72 5b 50 33 5d 3d 72 5b 50 32 5d 2b 72 5b  : r[P3]=r[P2]+r[
b170: 50 31 5d 0a 2a 2a 0a 2a 2a 20 41 64 64 20 74 68  P1].**.** Add th
b180: 65 20 74 65 78 74 20 69 6e 20 72 65 67 69 73 74  e text in regist
b190: 65 72 20 50 31 20 6f 6e 74 6f 20 74 68 65 20 65  er P1 onto the e
b1a0: 6e 64 20 6f 66 20 74 68 65 20 74 65 78 74 20 69  nd of the text i
b1b0: 6e 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 50 32  n.** register P2
b1c0: 20 61 6e 64 20 73 74 6f 72 65 20 74 68 65 20 72   and store the r
b1d0: 65 73 75 6c 74 20 69 6e 20 72 65 67 69 73 74 65  esult in registe
b1e0: 72 20 50 33 2e 0a 2a 2a 20 49 66 20 65 69 74 68  r P3..** If eith
b1f0: 65 72 20 74 68 65 20 50 31 20 6f 72 20 50 32 20  er the P1 or P2 
b200: 74 65 78 74 20 61 72 65 20 4e 55 4c 4c 20 74 68  text are NULL th
b210: 65 6e 20 73 74 6f 72 65 20 4e 55 4c 4c 20 69 6e  en store NULL in
b220: 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 20 20 50 33 20   P3..**.**   P3 
b230: 3d 20 50 32 20 7c 7c 20 50 31 0a 2a 2a 0a 2a 2a  = P2 || P1.**.**
b240: 20 49 74 20 69 73 20 69 6c 6c 65 67 61 6c 20 66   It is illegal f
b250: 6f 72 20 50 31 20 61 6e 64 20 50 33 20 74 6f 20  or P1 and P3 to 
b260: 62 65 20 74 68 65 20 73 61 6d 65 20 72 65 67 69  be the same regi
b270: 73 74 65 72 2e 20 53 6f 6d 65 74 69 6d 65 73 2c  ster. Sometimes,
b280: 0a 2a 2a 20 69 66 20 50 33 20 69 73 20 74 68 65  .** if P3 is the
b290: 20 73 61 6d 65 20 72 65 67 69 73 74 65 72 20 61   same register a
b2a0: 73 20 50 32 2c 20 74 68 65 20 69 6d 70 6c 65 6d  s P2, the implem
b2b0: 65 6e 74 61 74 69 6f 6e 20 69 73 20 61 62 6c 65  entation is able
b2c0: 0a 2a 2a 20 74 6f 20 61 76 6f 69 64 20 61 20 6d  .** to avoid a m
b2d0: 65 6d 63 70 79 28 29 2e 0a 2a 2f 0a 63 61 73 65  emcpy()..*/.case
b2e0: 20 4f 50 5f 43 6f 6e 63 61 74 3a 20 7b 20 20 20   OP_Concat: {   
b2f0: 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20          /* same 
b300: 61 73 20 54 4b 5f 43 4f 4e 43 41 54 2c 20 69 6e  as TK_CONCAT, in
b310: 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a  1, in2, out3 */.
b320: 20 20 69 36 34 20 6e 42 79 74 65 3b 0a 0a 20 20    i64 nByte;..  
b330: 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn1 = &aMem[pOp
b340: 2d 3e 70 31 5d 3b 0a 20 20 70 49 6e 32 20 3d 20  ->p1];.  pIn2 = 
b350: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a  &aMem[pOp->p2];.
b360: 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70    pOut = &aMem[p
b370: 4f 70 2d 3e 70 33 5d 3b 0a 20 20 61 73 73 65 72  Op->p3];.  asser
b380: 74 28 20 70 49 6e 31 21 3d 70 4f 75 74 20 29 3b  t( pIn1!=pOut );
b390: 0a 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c  .  if( (pIn1->fl
b3a0: 61 67 73 20 7c 20 70 49 6e 32 2d 3e 66 6c 61 67  ags | pIn2->flag
b3b0: 73 29 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b  s) & MEM_Null ){
b3c0: 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
b3d0: 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 4f 75 74 29  MemSetNull(pOut)
b3e0: 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d  ;.    break;.  }
b3f0: 0a 20 20 69 66 28 20 45 78 70 61 6e 64 42 6c 6f  .  if( ExpandBlo
b400: 62 28 70 49 6e 31 29 20 7c 7c 20 45 78 70 61 6e  b(pIn1) || Expan
b410: 64 42 6c 6f 62 28 70 49 6e 32 29 20 29 20 67 6f  dBlob(pIn2) ) go
b420: 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 53 74 72  to no_mem;.  Str
b430: 69 6e 67 69 66 79 28 70 49 6e 31 2c 20 65 6e 63  ingify(pIn1, enc
b440: 6f 64 69 6e 67 29 3b 0a 20 20 53 74 72 69 6e 67  oding);.  String
b450: 69 66 79 28 70 49 6e 32 2c 20 65 6e 63 6f 64 69  ify(pIn2, encodi
b460: 6e 67 29 3b 0a 20 20 6e 42 79 74 65 20 3d 20 70  ng);.  nByte = p
b470: 49 6e 31 2d 3e 6e 20 2b 20 70 49 6e 32 2d 3e 6e  In1->n + pIn2->n
b480: 3b 0a 20 20 69 66 28 20 6e 42 79 74 65 3e 64 62  ;.  if( nByte>db
b490: 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f  ->aLimit[SQLITE_
b4a0: 4c 49 4d 49 54 5f 4c 45 4e 47 54 48 5d 20 29 7b  LIMIT_LENGTH] ){
b4b0: 0a 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69  .    goto too_bi
b4c0: 67 3b 0a 20 20 7d 0a 20 20 69 66 28 20 73 71 6c  g;.  }.  if( sql
b4d0: 69 74 65 33 56 64 62 65 4d 65 6d 47 72 6f 77 28  ite3VdbeMemGrow(
b4e0: 70 4f 75 74 2c 20 28 69 6e 74 29 6e 42 79 74 65  pOut, (int)nByte
b4f0: 2b 32 2c 20 70 4f 75 74 3d 3d 70 49 6e 32 29 20  +2, pOut==pIn2) 
b500: 29 7b 0a 20 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d  ){.    goto no_m
b510: 65 6d 3b 0a 20 20 7d 0a 20 20 4d 65 6d 53 65 74  em;.  }.  MemSet
b520: 54 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d  TypeFlag(pOut, M
b530: 45 4d 5f 53 74 72 29 3b 0a 20 20 69 66 28 20 70  EM_Str);.  if( p
b540: 4f 75 74 21 3d 70 49 6e 32 20 29 7b 0a 20 20 20  Out!=pIn2 ){.   
b550: 20 6d 65 6d 63 70 79 28 70 4f 75 74 2d 3e 7a 2c   memcpy(pOut->z,
b560: 20 70 49 6e 32 2d 3e 7a 2c 20 70 49 6e 32 2d 3e   pIn2->z, pIn2->
b570: 6e 29 3b 0a 20 20 7d 0a 20 20 6d 65 6d 63 70 79  n);.  }.  memcpy
b580: 28 26 70 4f 75 74 2d 3e 7a 5b 70 49 6e 32 2d 3e  (&pOut->z[pIn2->
b590: 6e 5d 2c 20 70 49 6e 31 2d 3e 7a 2c 20 70 49 6e  n], pIn1->z, pIn
b5a0: 31 2d 3e 6e 29 3b 0a 20 20 70 4f 75 74 2d 3e 7a  1->n);.  pOut->z
b5b0: 5b 6e 42 79 74 65 5d 3d 30 3b 0a 20 20 70 4f 75  [nByte]=0;.  pOu
b5c0: 74 2d 3e 7a 5b 6e 42 79 74 65 2b 31 5d 20 3d 20  t->z[nByte+1] = 
b5d0: 30 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73  0;.  pOut->flags
b5e0: 20 7c 3d 20 4d 45 4d 5f 54 65 72 6d 3b 0a 20 20   |= MEM_Term;.  
b5f0: 70 4f 75 74 2d 3e 6e 20 3d 20 28 69 6e 74 29 6e  pOut->n = (int)n
b600: 42 79 74 65 3b 0a 20 20 70 4f 75 74 2d 3e 65 6e  Byte;.  pOut->en
b610: 63 20 3d 20 65 6e 63 6f 64 69 6e 67 3b 0a 20 20  c = encoding;.  
b620: 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53  UPDATE_MAX_BLOBS
b630: 49 5a 45 28 70 4f 75 74 29 3b 0a 20 20 62 72 65  IZE(pOut);.  bre
b640: 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
b650: 3a 20 41 64 64 20 50 31 20 50 32 20 50 33 20 2a  : Add P1 P2 P3 *
b660: 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
b670: 72 5b 50 33 5d 3d 72 5b 50 31 5d 2b 72 5b 50 32  r[P3]=r[P1]+r[P2
b680: 5d 0a 2a 2a 0a 2a 2a 20 41 64 64 20 74 68 65 20  ].**.** Add the 
b690: 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65  value in registe
b6a0: 72 20 50 31 20 74 6f 20 74 68 65 20 76 61 6c 75  r P1 to the valu
b6b0: 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32  e in register P2
b6c0: 0a 2a 2a 20 61 6e 64 20 73 74 6f 72 65 20 74 68  .** and store th
b6d0: 65 20 72 65 73 75 6c 74 20 69 6e 20 72 65 67 69  e result in regi
b6e0: 73 74 65 72 20 50 33 2e 0a 2a 2a 20 49 66 20 65  ster P3..** If e
b6f0: 69 74 68 65 72 20 69 6e 70 75 74 20 69 73 20 4e  ither input is N
b700: 55 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c 74 20  ULL, the result 
b710: 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f  is NULL..*/./* O
b720: 70 63 6f 64 65 3a 20 4d 75 6c 74 69 70 6c 79 20  pcode: Multiply 
b730: 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20  P1 P2 P3 * *.** 
b740: 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 33 5d 3d  Synopsis: r[P3]=
b750: 72 5b 50 31 5d 2a 72 5b 50 32 5d 0a 2a 2a 0a 2a  r[P1]*r[P2].**.*
b760: 2a 0a 2a 2a 20 4d 75 6c 74 69 70 6c 79 20 74 68  *.** Multiply th
b770: 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73  e value in regis
b780: 74 65 72 20 50 31 20 62 79 20 74 68 65 20 76 61  ter P1 by the va
b790: 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  lue in register 
b7a0: 50 32 0a 2a 2a 20 61 6e 64 20 73 74 6f 72 65 20  P2.** and store 
b7b0: 74 68 65 20 72 65 73 75 6c 74 20 69 6e 20 72 65  the result in re
b7c0: 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a 20 49 66  gister P3..** If
b7d0: 20 65 69 74 68 65 72 20 69 6e 70 75 74 20 69 73   either input is
b7e0: 20 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c   NULL, the resul
b7f0: 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a  t is NULL..*/./*
b800: 20 4f 70 63 6f 64 65 3a 20 53 75 62 74 72 61 63   Opcode: Subtrac
b810: 74 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a  t P1 P2 P3 * *.*
b820: 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 33  * Synopsis: r[P3
b830: 5d 3d 72 5b 50 32 5d 2d 72 5b 50 31 5d 0a 2a 2a  ]=r[P2]-r[P1].**
b840: 0a 2a 2a 20 53 75 62 74 72 61 63 74 20 74 68 65  .** Subtract the
b850: 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
b860: 65 72 20 50 31 20 66 72 6f 6d 20 74 68 65 20 76  er P1 from the v
b870: 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72  alue in register
b880: 20 50 32 0a 2a 2a 20 61 6e 64 20 73 74 6f 72 65   P2.** and store
b890: 20 74 68 65 20 72 65 73 75 6c 74 20 69 6e 20 72   the result in r
b8a0: 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a 20 49  egister P3..** I
b8b0: 66 20 65 69 74 68 65 72 20 69 6e 70 75 74 20 69  f either input i
b8c0: 73 20 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73 75  s NULL, the resu
b8d0: 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f  lt is NULL..*/./
b8e0: 2a 20 4f 70 63 6f 64 65 3a 20 44 69 76 69 64 65  * Opcode: Divide
b8f0: 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a   P1 P2 P3 * *.**
b900: 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 33 5d   Synopsis: r[P3]
b910: 3d 72 5b 50 32 5d 2f 72 5b 50 31 5d 0a 2a 2a 0a  =r[P2]/r[P1].**.
b920: 2a 2a 20 44 69 76 69 64 65 20 74 68 65 20 76 61  ** Divide the va
b930: 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  lue in register 
b940: 50 31 20 62 79 20 74 68 65 20 76 61 6c 75 65 20  P1 by the value 
b950: 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 0a 2a  in register P2.*
b960: 2a 20 61 6e 64 20 73 74 6f 72 65 20 74 68 65 20  * and store the 
b970: 72 65 73 75 6c 74 20 69 6e 20 72 65 67 69 73 74  result in regist
b980: 65 72 20 50 33 20 28 50 33 3d 50 32 2f 50 31 29  er P3 (P3=P2/P1)
b990: 2e 20 49 66 20 74 68 65 20 76 61 6c 75 65 20 69  . If the value i
b9a0: 6e 20 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 50  n .** register P
b9b0: 31 20 69 73 20 7a 65 72 6f 2c 20 74 68 65 6e 20  1 is zero, then 
b9c0: 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55  the result is NU
b9d0: 4c 4c 2e 20 49 66 20 65 69 74 68 65 72 20 69 6e  LL. If either in
b9e0: 70 75 74 20 69 73 20 0a 2a 2a 20 4e 55 4c 4c 2c  put is .** NULL,
b9f0: 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e   the result is N
ba00: 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64  ULL..*/./* Opcod
ba10: 65 3a 20 52 65 6d 61 69 6e 64 65 72 20 50 31 20  e: Remainder P1 
ba20: 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e  P2 P3 * *.** Syn
ba30: 6f 70 73 69 73 3a 20 72 5b 50 33 5d 3d 72 5b 50  opsis: r[P3]=r[P
ba40: 32 5d 25 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 43  2]%r[P1].**.** C
ba50: 6f 6d 70 75 74 65 20 74 68 65 20 72 65 6d 61 69  ompute the remai
ba60: 6e 64 65 72 20 61 66 74 65 72 20 69 6e 74 65 67  nder after integ
ba70: 65 72 20 72 65 67 69 73 74 65 72 20 50 32 20 69  er register P2 i
ba80: 73 20 64 69 76 69 64 65 64 20 62 79 20 0a 2a 2a  s divided by .**
ba90: 20 72 65 67 69 73 74 65 72 20 50 31 20 61 6e 64   register P1 and
baa0: 20 73 74 6f 72 65 20 74 68 65 20 72 65 73 75 6c   store the resul
bab0: 74 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33  t in register P3
bac0: 2e 20 0a 2a 2a 20 49 66 20 74 68 65 20 76 61 6c  . .** If the val
bad0: 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
bae0: 31 20 69 73 20 7a 65 72 6f 20 74 68 65 20 72 65  1 is zero the re
baf0: 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2a  sult is NULL..**
bb00: 20 49 66 20 65 69 74 68 65 72 20 6f 70 65 72 61   If either opera
bb10: 6e 64 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65 20  nd is NULL, the 
bb20: 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a  result is NULL..
bb30: 2a 2f 0a 63 61 73 65 20 4f 50 5f 41 64 64 3a 20  */.case OP_Add: 
bb40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bb50: 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f    /* same as TK_
bb60: 50 4c 55 53 2c 20 69 6e 31 2c 20 69 6e 32 2c 20  PLUS, in1, in2, 
bb70: 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f  out3 */.case OP_
bb80: 53 75 62 74 72 61 63 74 3a 20 20 20 20 20 20 20  Subtract:       
bb90: 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61         /* same a
bba0: 73 20 54 4b 5f 4d 49 4e 55 53 2c 20 69 6e 31 2c  s TK_MINUS, in1,
bbb0: 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 63 61   in2, out3 */.ca
bbc0: 73 65 20 4f 50 5f 4d 75 6c 74 69 70 6c 79 3a 20  se OP_Multiply: 
bbd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
bbe0: 73 61 6d 65 20 61 73 20 54 4b 5f 53 54 41 52 2c  same as TK_STAR,
bbf0: 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20   in1, in2, out3 
bc00: 2a 2f 0a 63 61 73 65 20 4f 50 5f 44 69 76 69 64  */.case OP_Divid
bc10: 65 3a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e:              
bc20: 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f    /* same as TK_
bc30: 53 4c 41 53 48 2c 20 69 6e 31 2c 20 69 6e 32 2c  SLASH, in1, in2,
bc40: 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20 4f 50   out3 */.case OP
bc50: 5f 52 65 6d 61 69 6e 64 65 72 3a 20 7b 20 20 20  _Remainder: {   
bc60: 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20          /* same 
bc70: 61 73 20 54 4b 5f 52 45 4d 2c 20 69 6e 31 2c 20  as TK_REM, in1, 
bc80: 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 20 20 63  in2, out3 */.  c
bc90: 68 61 72 20 62 49 6e 74 69 6e 74 3b 20 20 20 2f  har bIntint;   /
bca0: 2a 20 53 74 61 72 74 65 64 20 6f 75 74 20 61 73  * Started out as
bcb0: 20 74 77 6f 20 69 6e 74 65 67 65 72 20 6f 70 65   two integer ope
bcc0: 72 61 6e 64 73 20 2a 2f 0a 20 20 75 31 36 20 66  rands */.  u16 f
bcd0: 6c 61 67 73 3b 20 20 20 20 20 20 2f 2a 20 43 6f  lags;      /* Co
bce0: 6d 62 69 6e 65 64 20 4d 45 4d 5f 2a 20 66 6c 61  mbined MEM_* fla
bcf0: 67 73 20 66 72 6f 6d 20 62 6f 74 68 20 69 6e 70  gs from both inp
bd00: 75 74 73 20 2a 2f 0a 20 20 75 31 36 20 74 79 70  uts */.  u16 typ
bd10: 65 31 3b 20 20 20 20 20 20 2f 2a 20 4e 75 6d 65  e1;      /* Nume
bd20: 72 69 63 20 74 79 70 65 20 6f 66 20 6c 65 66 74  ric type of left
bd30: 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20 75 31   operand */.  u1
bd40: 36 20 74 79 70 65 32 3b 20 20 20 20 20 20 2f 2a  6 type2;      /*
bd50: 20 4e 75 6d 65 72 69 63 20 74 79 70 65 20 6f 66   Numeric type of
bd60: 20 72 69 67 68 74 20 6f 70 65 72 61 6e 64 20 2a   right operand *
bd70: 2f 0a 20 20 69 36 34 20 69 41 3b 20 20 20 20 20  /.  i64 iA;     
bd80: 20 20 20 20 2f 2a 20 49 6e 74 65 67 65 72 20 76      /* Integer v
bd90: 61 6c 75 65 20 6f 66 20 6c 65 66 74 20 6f 70 65  alue of left ope
bda0: 72 61 6e 64 20 2a 2f 0a 20 20 69 36 34 20 69 42  rand */.  i64 iB
bdb0: 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 74  ;         /* Int
bdc0: 65 67 65 72 20 76 61 6c 75 65 20 6f 66 20 72 69  eger value of ri
bdd0: 67 68 74 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20  ght operand */. 
bde0: 20 64 6f 75 62 6c 65 20 72 41 3b 20 20 20 20 20   double rA;     
bdf0: 20 2f 2a 20 52 65 61 6c 20 76 61 6c 75 65 20 6f   /* Real value o
be00: 66 20 6c 65 66 74 20 6f 70 65 72 61 6e 64 20 2a  f left operand *
be10: 2f 0a 20 20 64 6f 75 62 6c 65 20 72 42 3b 20 20  /.  double rB;  
be20: 20 20 20 20 2f 2a 20 52 65 61 6c 20 76 61 6c 75      /* Real valu
be30: 65 20 6f 66 20 72 69 67 68 74 20 6f 70 65 72 61  e of right opera
be40: 6e 64 20 2a 2f 0a 0a 20 20 70 49 6e 31 20 3d 20  nd */..  pIn1 = 
be50: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  &aMem[pOp->p1];.
be60: 20 20 74 79 70 65 31 20 3d 20 6e 75 6d 65 72 69    type1 = numeri
be70: 63 54 79 70 65 28 70 49 6e 31 29 3b 0a 20 20 70  cType(pIn1);.  p
be80: 49 6e 32 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In2 = &aMem[pOp-
be90: 3e 70 32 5d 3b 0a 20 20 74 79 70 65 32 20 3d 20  >p2];.  type2 = 
bea0: 6e 75 6d 65 72 69 63 54 79 70 65 28 70 49 6e 32  numericType(pIn2
beb0: 29 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65  );.  pOut = &aMe
bec0: 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 66 6c  m[pOp->p3];.  fl
bed0: 61 67 73 20 3d 20 70 49 6e 31 2d 3e 66 6c 61 67  ags = pIn1->flag
bee0: 73 20 7c 20 70 49 6e 32 2d 3e 66 6c 61 67 73 3b  s | pIn2->flags;
bef0: 0a 20 20 69 66 28 20 28 74 79 70 65 31 20 26 20  .  if( (type1 & 
bf00: 74 79 70 65 32 20 26 20 4d 45 4d 5f 49 6e 74 29  type2 & MEM_Int)
bf10: 21 3d 30 20 29 7b 0a 20 20 20 20 69 41 20 3d 20  !=0 ){.    iA = 
bf20: 70 49 6e 31 2d 3e 75 2e 69 3b 0a 20 20 20 20 69  pIn1->u.i;.    i
bf30: 42 20 3d 20 70 49 6e 32 2d 3e 75 2e 69 3b 0a 20  B = pIn2->u.i;. 
bf40: 20 20 20 62 49 6e 74 69 6e 74 20 3d 20 31 3b 0a     bIntint = 1;.
bf50: 20 20 20 20 73 77 69 74 63 68 28 20 70 4f 70 2d      switch( pOp-
bf60: 3e 6f 70 63 6f 64 65 20 29 7b 0a 20 20 20 20 20  >opcode ){.     
bf70: 20 63 61 73 65 20 4f 50 5f 41 64 64 3a 20 20 20   case OP_Add:   
bf80: 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 41      if( sqlite3A
bf90: 64 64 49 6e 74 36 34 28 26 69 42 2c 69 41 29 20  ddInt64(&iB,iA) 
bfa0: 29 20 67 6f 74 6f 20 66 70 5f 6d 61 74 68 3b 20  ) goto fp_math; 
bfb0: 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 63 61   break;.      ca
bfc0: 73 65 20 4f 50 5f 53 75 62 74 72 61 63 74 3a 20  se OP_Subtract: 
bfd0: 20 69 66 28 20 73 71 6c 69 74 65 33 53 75 62 49   if( sqlite3SubI
bfe0: 6e 74 36 34 28 26 69 42 2c 69 41 29 20 29 20 67  nt64(&iB,iA) ) g
bff0: 6f 74 6f 20 66 70 5f 6d 61 74 68 3b 20 20 62 72  oto fp_math;  br
c000: 65 61 6b 3b 0a 20 20 20 20 20 20 63 61 73 65 20  eak;.      case 
c010: 4f 50 5f 4d 75 6c 74 69 70 6c 79 3a 20 20 69 66  OP_Multiply:  if
c020: 28 20 73 71 6c 69 74 65 33 4d 75 6c 49 6e 74 36  ( sqlite3MulInt6
c030: 34 28 26 69 42 2c 69 41 29 20 29 20 67 6f 74 6f  4(&iB,iA) ) goto
c040: 20 66 70 5f 6d 61 74 68 3b 20 20 62 72 65 61 6b   fp_math;  break
c050: 3b 0a 20 20 20 20 20 20 63 61 73 65 20 4f 50 5f  ;.      case OP_
c060: 44 69 76 69 64 65 3a 20 7b 0a 20 20 20 20 20 20  Divide: {.      
c070: 20 20 69 66 28 20 69 41 3d 3d 30 20 29 20 67 6f    if( iA==0 ) go
c080: 74 6f 20 61 72 69 74 68 6d 65 74 69 63 5f 72 65  to arithmetic_re
c090: 73 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3b 0a 20 20  sult_is_null;.  
c0a0: 20 20 20 20 20 20 69 66 28 20 69 41 3d 3d 2d 31        if( iA==-1
c0b0: 20 26 26 20 69 42 3d 3d 53 4d 41 4c 4c 45 53 54   && iB==SMALLEST
c0c0: 5f 49 4e 54 36 34 20 29 20 67 6f 74 6f 20 66 70  _INT64 ) goto fp
c0d0: 5f 6d 61 74 68 3b 0a 20 20 20 20 20 20 20 20 69  _math;.        i
c0e0: 42 20 2f 3d 20 69 41 3b 0a 20 20 20 20 20 20 20  B /= iA;.       
c0f0: 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a   break;.      }.
c100: 20 20 20 20 20 20 64 65 66 61 75 6c 74 3a 20 7b        default: {
c110: 0a 20 20 20 20 20 20 20 20 69 66 28 20 69 41 3d  .        if( iA=
c120: 3d 30 20 29 20 67 6f 74 6f 20 61 72 69 74 68 6d  =0 ) goto arithm
c130: 65 74 69 63 5f 72 65 73 75 6c 74 5f 69 73 5f 6e  etic_result_is_n
c140: 75 6c 6c 3b 0a 20 20 20 20 20 20 20 20 69 66 28  ull;.        if(
c150: 20 69 41 3d 3d 2d 31 20 29 20 69 41 20 3d 20 31   iA==-1 ) iA = 1
c160: 3b 0a 20 20 20 20 20 20 20 20 69 42 20 25 3d 20  ;.        iB %= 
c170: 69 41 3b 0a 20 20 20 20 20 20 20 20 62 72 65 61  iA;.        brea
c180: 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  k;.      }.    }
c190: 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d  .    pOut->u.i =
c1a0: 20 69 42 3b 0a 20 20 20 20 4d 65 6d 53 65 74 54   iB;.    MemSetT
c1b0: 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45  ypeFlag(pOut, ME
c1c0: 4d 5f 49 6e 74 29 3b 0a 20 20 7d 65 6c 73 65 20  M_Int);.  }else 
c1d0: 69 66 28 20 28 66 6c 61 67 73 20 26 20 4d 45 4d  if( (flags & MEM
c1e0: 5f 4e 75 6c 6c 29 21 3d 30 20 29 7b 0a 20 20 20  _Null)!=0 ){.   
c1f0: 20 67 6f 74 6f 20 61 72 69 74 68 6d 65 74 69 63   goto arithmetic
c200: 5f 72 65 73 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3b  _result_is_null;
c210: 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 62 49  .  }else{.    bI
c220: 6e 74 69 6e 74 20 3d 20 30 3b 0a 66 70 5f 6d 61  ntint = 0;.fp_ma
c230: 74 68 3a 0a 20 20 20 20 72 41 20 3d 20 73 71 6c  th:.    rA = sql
c240: 69 74 65 33 56 64 62 65 52 65 61 6c 56 61 6c 75  ite3VdbeRealValu
c250: 65 28 70 49 6e 31 29 3b 0a 20 20 20 20 72 42 20  e(pIn1);.    rB 
c260: 3d 20 73 71 6c 69 74 65 33 56 64 62 65 52 65 61  = sqlite3VdbeRea
c270: 6c 56 61 6c 75 65 28 70 49 6e 32 29 3b 0a 20 20  lValue(pIn2);.  
c280: 20 20 73 77 69 74 63 68 28 20 70 4f 70 2d 3e 6f    switch( pOp->o
c290: 70 63 6f 64 65 20 29 7b 0a 20 20 20 20 20 20 63  pcode ){.      c
c2a0: 61 73 65 20 4f 50 5f 41 64 64 3a 20 20 20 20 20  ase OP_Add:     
c2b0: 20 20 20 20 72 42 20 2b 3d 20 72 41 3b 20 20 20      rB += rA;   
c2c0: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20      break;.     
c2d0: 20 63 61 73 65 20 4f 50 5f 53 75 62 74 72 61 63   case OP_Subtrac
c2e0: 74 3a 20 20 20 20 72 42 20 2d 3d 20 72 41 3b 20  t:    rB -= rA; 
c2f0: 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
c300: 20 20 20 63 61 73 65 20 4f 50 5f 4d 75 6c 74 69     case OP_Multi
c310: 70 6c 79 3a 20 20 20 20 72 42 20 2a 3d 20 72 41  ply:    rB *= rA
c320: 3b 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20  ;       break;. 
c330: 20 20 20 20 20 63 61 73 65 20 4f 50 5f 44 69 76       case OP_Div
c340: 69 64 65 3a 20 7b 0a 20 20 20 20 20 20 20 20 2f  ide: {.        /
c350: 2a 20 28 64 6f 75 62 6c 65 29 30 20 49 6e 20 63  * (double)0 In c
c360: 61 73 65 20 6f 66 20 53 51 4c 49 54 45 5f 4f 4d  ase of SQLITE_OM
c370: 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e  IT_FLOATING_POIN
c380: 54 2e 2e 2e 20 2a 2f 0a 20 20 20 20 20 20 20 20  T... */.        
c390: 69 66 28 20 72 41 3d 3d 28 64 6f 75 62 6c 65 29  if( rA==(double)
c3a0: 30 20 29 20 67 6f 74 6f 20 61 72 69 74 68 6d 65  0 ) goto arithme
c3b0: 74 69 63 5f 72 65 73 75 6c 74 5f 69 73 5f 6e 75  tic_result_is_nu
c3c0: 6c 6c 3b 0a 20 20 20 20 20 20 20 20 72 42 20 2f  ll;.        rB /
c3d0: 3d 20 72 41 3b 0a 20 20 20 20 20 20 20 20 62 72  = rA;.        br
c3e0: 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  eak;.      }.   
c3f0: 20 20 20 64 65 66 61 75 6c 74 3a 20 7b 0a 20 20     default: {.  
c400: 20 20 20 20 20 20 69 41 20 3d 20 28 69 36 34 29        iA = (i64)
c410: 72 41 3b 0a 20 20 20 20 20 20 20 20 69 42 20 3d  rA;.        iB =
c420: 20 28 69 36 34 29 72 42 3b 0a 20 20 20 20 20 20   (i64)rB;.      
c430: 20 20 69 66 28 20 69 41 3d 3d 30 20 29 20 67 6f    if( iA==0 ) go
c440: 74 6f 20 61 72 69 74 68 6d 65 74 69 63 5f 72 65  to arithmetic_re
c450: 73 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3b 0a 20 20  sult_is_null;.  
c460: 20 20 20 20 20 20 69 66 28 20 69 41 3d 3d 2d 31        if( iA==-1
c470: 20 29 20 69 41 20 3d 20 31 3b 0a 20 20 20 20 20   ) iA = 1;.     
c480: 20 20 20 72 42 20 3d 20 28 64 6f 75 62 6c 65 29     rB = (double)
c490: 28 69 42 20 25 20 69 41 29 3b 0a 20 20 20 20 20  (iB % iA);.     
c4a0: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20     break;.      
c4b0: 7d 0a 20 20 20 20 7d 0a 23 69 66 64 65 66 20 53  }.    }.#ifdef S
c4c0: 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54  QLITE_OMIT_FLOAT
c4d0: 49 4e 47 5f 50 4f 49 4e 54 0a 20 20 20 20 70 4f  ING_POINT.    pO
c4e0: 75 74 2d 3e 75 2e 69 20 3d 20 72 42 3b 0a 20 20  ut->u.i = rB;.  
c4f0: 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67    MemSetTypeFlag
c500: 28 70 4f 75 74 2c 20 4d 45 4d 5f 49 6e 74 29 3b  (pOut, MEM_Int);
c510: 0a 23 65 6c 73 65 0a 20 20 20 20 69 66 28 20 73  .#else.    if( s
c520: 71 6c 69 74 65 33 49 73 4e 61 4e 28 72 42 29 20  qlite3IsNaN(rB) 
c530: 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20 61 72  ){.      goto ar
c540: 69 74 68 6d 65 74 69 63 5f 72 65 73 75 6c 74 5f  ithmetic_result_
c550: 69 73 5f 6e 75 6c 6c 3b 0a 20 20 20 20 7d 0a 20  is_null;.    }. 
c560: 20 20 20 70 4f 75 74 2d 3e 75 2e 72 20 3d 20 72     pOut->u.r = r
c570: 42 3b 0a 20 20 20 20 4d 65 6d 53 65 74 54 79 70  B;.    MemSetTyp
c580: 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f  eFlag(pOut, MEM_
c590: 52 65 61 6c 29 3b 0a 20 20 20 20 69 66 28 20 28  Real);.    if( (
c5a0: 28 74 79 70 65 31 7c 74 79 70 65 32 29 26 4d 45  (type1|type2)&ME
c5b0: 4d 5f 52 65 61 6c 29 3d 3d 30 20 26 26 20 21 62  M_Real)==0 && !b
c5c0: 49 6e 74 69 6e 74 20 29 7b 0a 20 20 20 20 20 20  Intint ){.      
c5d0: 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74 65 67  sqlite3VdbeInteg
c5e0: 65 72 41 66 66 69 6e 69 74 79 28 70 4f 75 74 29  erAffinity(pOut)
c5f0: 3b 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a 20  ;.    }.#endif. 
c600: 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 0a 61 72 69   }.  break;..ari
c610: 74 68 6d 65 74 69 63 5f 72 65 73 75 6c 74 5f 69  thmetic_result_i
c620: 73 5f 6e 75 6c 6c 3a 0a 20 20 73 71 6c 69 74 65  s_null:.  sqlite
c630: 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28  3VdbeMemSetNull(
c640: 70 4f 75 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a  pOut);.  break;.
c650: 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6f  }../* Opcode: Co
c660: 6c 6c 53 65 71 20 50 31 20 2a 20 2a 20 50 34 0a  llSeq P1 * * P4.
c670: 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20 70 6f  **.** P4 is a po
c680: 69 6e 74 65 72 20 74 6f 20 61 20 43 6f 6c 6c 53  inter to a CollS
c690: 65 71 20 6f 62 6a 65 63 74 2e 20 49 66 20 74 68  eq object. If th
c6a0: 65 20 6e 65 78 74 20 63 61 6c 6c 20 74 6f 20 61  e next call to a
c6b0: 20 75 73 65 72 20 66 75 6e 63 74 69 6f 6e 0a 2a   user function.*
c6c0: 2a 20 6f 72 20 61 67 67 72 65 67 61 74 65 20 63  * or aggregate c
c6d0: 61 6c 6c 73 20 73 71 6c 69 74 65 33 47 65 74 46  alls sqlite3GetF
c6e0: 75 6e 63 43 6f 6c 6c 53 65 71 28 29 2c 20 74 68  uncCollSeq(), th
c6f0: 69 73 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71  is collation seq
c700: 75 65 6e 63 65 20 77 69 6c 6c 0a 2a 2a 20 62 65  uence will.** be
c710: 20 72 65 74 75 72 6e 65 64 2e 20 54 68 69 73 20   returned. This 
c720: 69 73 20 75 73 65 64 20 62 79 20 74 68 65 20 62  is used by the b
c730: 75 69 6c 74 2d 69 6e 20 6d 69 6e 28 29 2c 20 6d  uilt-in min(), m
c740: 61 78 28 29 20 61 6e 64 20 6e 75 6c 6c 69 66 28  ax() and nullif(
c750: 29 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e 73 2e 0a  ).** functions..
c760: 2a 2a 0a 2a 2a 20 49 66 20 50 31 20 69 73 20 6e  **.** If P1 is n
c770: 6f 74 20 7a 65 72 6f 2c 20 74 68 65 6e 20 69 74  ot zero, then it
c780: 20 69 73 20 61 20 72 65 67 69 73 74 65 72 20 74   is a register t
c790: 68 61 74 20 61 20 73 75 62 73 65 71 75 65 6e 74  hat a subsequent
c7a0: 20 6d 69 6e 28 29 20 6f 72 0a 2a 2a 20 6d 61 78   min() or.** max
c7b0: 28 29 20 61 67 67 72 65 67 61 74 65 20 77 69 6c  () aggregate wil
c7c0: 6c 20 73 65 74 20 74 6f 20 31 20 69 66 20 74 68  l set to 1 if th
c7d0: 65 20 63 75 72 72 65 6e 74 20 72 6f 77 20 69 73  e current row is
c7e0: 20 6e 6f 74 20 74 68 65 20 6d 69 6e 69 6d 75 6d   not the minimum
c7f0: 20 6f 72 0a 2a 2a 20 6d 61 78 69 6d 75 6d 2e 20   or.** maximum. 
c800: 20 54 68 65 20 50 31 20 72 65 67 69 73 74 65 72   The P1 register
c810: 20 69 73 20 69 6e 69 74 69 61 6c 69 7a 65 64 20   is initialized 
c820: 74 6f 20 30 20 62 79 20 74 68 69 73 20 69 6e 73  to 0 by this ins
c830: 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20  truction..**.** 
c840: 54 68 65 20 69 6e 74 65 72 66 61 63 65 20 75 73  The interface us
c850: 65 64 20 62 79 20 74 68 65 20 69 6d 70 6c 65 6d  ed by the implem
c860: 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 20  entation of the 
c870: 61 66 6f 72 65 6d 65 6e 74 69 6f 6e 65 64 20 66  aforementioned f
c880: 75 6e 63 74 69 6f 6e 73 0a 2a 2a 20 74 6f 20 72  unctions.** to r
c890: 65 74 72 69 65 76 65 20 74 68 65 20 63 6f 6c 6c  etrieve the coll
c8a0: 61 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 20 73  ation sequence s
c8b0: 65 74 20 62 79 20 74 68 69 73 20 6f 70 63 6f 64  et by this opcod
c8c0: 65 20 69 73 20 6e 6f 74 20 61 76 61 69 6c 61 62  e is not availab
c8d0: 6c 65 0a 2a 2a 20 70 75 62 6c 69 63 6c 79 2e 20  le.** publicly. 
c8e0: 20 4f 6e 6c 79 20 62 75 69 6c 74 2d 69 6e 20 66   Only built-in f
c8f0: 75 6e 63 74 69 6f 6e 73 20 68 61 76 65 20 61 63  unctions have ac
c900: 63 65 73 73 20 74 6f 20 74 68 69 73 20 66 65 61  cess to this fea
c910: 74 75 72 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  ture..*/.case OP
c920: 5f 43 6f 6c 6c 53 65 71 3a 20 7b 0a 20 20 61 73  _CollSeq: {.  as
c930: 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70  sert( pOp->p4typ
c940: 65 3d 3d 50 34 5f 43 4f 4c 4c 53 45 51 20 29 3b  e==P4_COLLSEQ );
c950: 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 31 20 29  .  if( pOp->p1 )
c960: 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  {.    sqlite3Vdb
c970: 65 4d 65 6d 53 65 74 49 6e 74 36 34 28 26 61 4d  eMemSetInt64(&aM
c980: 65 6d 5b 70 4f 70 2d 3e 70 31 5d 2c 20 30 29 3b  em[pOp->p1], 0);
c990: 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
c9a0: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 42 69 74 41  ./* Opcode: BitA
c9b0: 6e 64 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a  nd P1 P2 P3 * *.
c9c0: 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50  ** Synopsis: r[P
c9d0: 33 5d 3d 72 5b 50 31 5d 26 72 5b 50 32 5d 0a 2a  3]=r[P1]&r[P2].*
c9e0: 2a 0a 2a 2a 20 54 61 6b 65 20 74 68 65 20 62 69  *.** Take the bi
c9f0: 74 2d 77 69 73 65 20 41 4e 44 20 6f 66 20 74 68  t-wise AND of th
ca00: 65 20 76 61 6c 75 65 73 20 69 6e 20 72 65 67 69  e values in regi
ca10: 73 74 65 72 20 50 31 20 61 6e 64 20 50 32 20 61  ster P1 and P2 a
ca20: 6e 64 0a 2a 2a 20 73 74 6f 72 65 20 74 68 65 20  nd.** store the 
ca30: 72 65 73 75 6c 74 20 69 6e 20 72 65 67 69 73 74  result in regist
ca40: 65 72 20 50 33 2e 0a 2a 2a 20 49 66 20 65 69 74  er P3..** If eit
ca50: 68 65 72 20 69 6e 70 75 74 20 69 73 20 4e 55 4c  her input is NUL
ca60: 4c 2c 20 74 68 65 20 72 65 73 75 6c 74 20 69 73  L, the result is
ca70: 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63   NULL..*/./* Opc
ca80: 6f 64 65 3a 20 42 69 74 4f 72 20 50 31 20 50 32  ode: BitOr P1 P2
ca90: 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70   P3 * *.** Synop
caa0: 73 69 73 3a 20 72 5b 50 33 5d 3d 72 5b 50 31 5d  sis: r[P3]=r[P1]
cab0: 7c 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20 54 61 6b  |r[P2].**.** Tak
cac0: 65 20 74 68 65 20 62 69 74 2d 77 69 73 65 20 4f  e the bit-wise O
cad0: 52 20 6f 66 20 74 68 65 20 76 61 6c 75 65 73 20  R of the values 
cae0: 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 61  in register P1 a
caf0: 6e 64 20 50 32 20 61 6e 64 0a 2a 2a 20 73 74 6f  nd P2 and.** sto
cb00: 72 65 20 74 68 65 20 72 65 73 75 6c 74 20 69 6e  re the result in
cb10: 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a   register P3..**
cb20: 20 49 66 20 65 69 74 68 65 72 20 69 6e 70 75 74   If either input
cb30: 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65 20 72 65   is NULL, the re
cb40: 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f  sult is NULL..*/
cb50: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 68 69 66  ./* Opcode: Shif
cb60: 74 4c 65 66 74 20 50 31 20 50 32 20 50 33 20 2a  tLeft P1 P2 P3 *
cb70: 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
cb80: 72 5b 50 33 5d 3d 72 5b 50 32 5d 3c 3c 72 5b 50  r[P3]=r[P2]<<r[P
cb90: 31 5d 0a 2a 2a 0a 2a 2a 20 53 68 69 66 74 20 74  1].**.** Shift t
cba0: 68 65 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65  he integer value
cbb0: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 20   in register P2 
cbc0: 74 6f 20 74 68 65 20 6c 65 66 74 20 62 79 20 74  to the left by t
cbd0: 68 65 0a 2a 2a 20 6e 75 6d 62 65 72 20 6f 66 20  he.** number of 
cbe0: 62 69 74 73 20 73 70 65 63 69 66 69 65 64 20 62  bits specified b
cbf0: 79 20 74 68 65 20 69 6e 74 65 67 65 72 20 69 6e  y the integer in
cc00: 20 72 65 67 69 73 74 65 72 20 50 31 2e 0a 2a 2a   register P1..**
cc10: 20 53 74 6f 72 65 20 74 68 65 20 72 65 73 75 6c   Store the resul
cc20: 74 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33  t in register P3
cc30: 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20 69  ..** If either i
cc40: 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2c 20 74 68  nput is NULL, th
cc50: 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c  e result is NULL
cc60: 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ..*/./* Opcode: 
cc70: 53 68 69 66 74 52 69 67 68 74 20 50 31 20 50 32  ShiftRight P1 P2
cc80: 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70   P3 * *.** Synop
cc90: 73 69 73 3a 20 72 5b 50 33 5d 3d 72 5b 50 32 5d  sis: r[P3]=r[P2]
cca0: 3e 3e 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 53 68  >>r[P1].**.** Sh
ccb0: 69 66 74 20 74 68 65 20 69 6e 74 65 67 65 72 20  ift the integer 
ccc0: 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65  value in registe
ccd0: 72 20 50 32 20 74 6f 20 74 68 65 20 72 69 67 68  r P2 to the righ
cce0: 74 20 62 79 20 74 68 65 0a 2a 2a 20 6e 75 6d 62  t by the.** numb
ccf0: 65 72 20 6f 66 20 62 69 74 73 20 73 70 65 63 69  er of bits speci
cd00: 66 69 65 64 20 62 79 20 74 68 65 20 69 6e 74 65  fied by the inte
cd10: 67 65 72 20 69 6e 20 72 65 67 69 73 74 65 72 20  ger in register 
cd20: 50 31 2e 0a 2a 2a 20 53 74 6f 72 65 20 74 68 65  P1..** Store the
cd30: 20 72 65 73 75 6c 74 20 69 6e 20 72 65 67 69 73   result in regis
cd40: 74 65 72 20 50 33 2e 0a 2a 2a 20 49 66 20 65 69  ter P3..** If ei
cd50: 74 68 65 72 20 69 6e 70 75 74 20 69 73 20 4e 55  ther input is NU
cd60: 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c 74 20 69  LL, the result i
cd70: 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20  s NULL..*/.case 
cd80: 4f 50 5f 42 69 74 41 6e 64 3a 20 20 20 20 20 20  OP_BitAnd:      
cd90: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61             /* sa
cda0: 6d 65 20 61 73 20 54 4b 5f 42 49 54 41 4e 44 2c  me as TK_BITAND,
cdb0: 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20   in1, in2, out3 
cdc0: 2a 2f 0a 63 61 73 65 20 4f 50 5f 42 69 74 4f 72  */.case OP_BitOr
cdd0: 3a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  :               
cde0: 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b     /* same as TK
cdf0: 5f 42 49 54 4f 52 2c 20 69 6e 31 2c 20 69 6e 32  _BITOR, in1, in2
ce00: 2c 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20 4f  , out3 */.case O
ce10: 50 5f 53 68 69 66 74 4c 65 66 74 3a 20 20 20 20  P_ShiftLeft:    
ce20: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d            /* sam
ce30: 65 20 61 73 20 54 4b 5f 4c 53 48 49 46 54 2c 20  e as TK_LSHIFT, 
ce40: 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a  in1, in2, out3 *
ce50: 2f 0a 63 61 73 65 20 4f 50 5f 53 68 69 66 74 52  /.case OP_ShiftR
ce60: 69 67 68 74 3a 20 7b 20 20 20 20 20 20 20 20 20  ight: {         
ce70: 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f    /* same as TK_
ce80: 52 53 48 49 46 54 2c 20 69 6e 31 2c 20 69 6e 32  RSHIFT, in1, in2
ce90: 2c 20 6f 75 74 33 20 2a 2f 0a 20 20 69 36 34 20  , out3 */.  i64 
cea0: 69 41 3b 0a 20 20 75 36 34 20 75 41 3b 0a 20 20  iA;.  u64 uA;.  
ceb0: 69 36 34 20 69 42 3b 0a 20 20 75 38 20 6f 70 3b  i64 iB;.  u8 op;
cec0: 0a 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d  ..  pIn1 = &aMem
ced0: 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 49 6e  [pOp->p1];.  pIn
cee0: 32 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  2 = &aMem[pOp->p
cef0: 32 5d 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d  2];.  pOut = &aM
cf00: 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 69  em[pOp->p3];.  i
cf10: 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20  f( (pIn1->flags 
cf20: 7c 20 70 49 6e 32 2d 3e 66 6c 61 67 73 29 20 26  | pIn2->flags) &
cf30: 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20   MEM_Null ){.   
cf40: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53   sqlite3VdbeMemS
cf50: 65 74 4e 75 6c 6c 28 70 4f 75 74 29 3b 0a 20 20  etNull(pOut);.  
cf60: 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 20 20 69    break;.  }.  i
cf70: 41 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 49  A = sqlite3VdbeI
cf80: 6e 74 56 61 6c 75 65 28 70 49 6e 32 29 3b 0a 20  ntValue(pIn2);. 
cf90: 20 69 42 20 3d 20 73 71 6c 69 74 65 33 56 64 62   iB = sqlite3Vdb
cfa0: 65 49 6e 74 56 61 6c 75 65 28 70 49 6e 31 29 3b  eIntValue(pIn1);
cfb0: 0a 20 20 6f 70 20 3d 20 70 4f 70 2d 3e 6f 70 63  .  op = pOp->opc
cfc0: 6f 64 65 3b 0a 20 20 69 66 28 20 6f 70 3d 3d 4f  ode;.  if( op==O
cfd0: 50 5f 42 69 74 41 6e 64 20 29 7b 0a 20 20 20 20  P_BitAnd ){.    
cfe0: 69 41 20 26 3d 20 69 42 3b 0a 20 20 7d 65 6c 73  iA &= iB;.  }els
cff0: 65 20 69 66 28 20 6f 70 3d 3d 4f 50 5f 42 69 74  e if( op==OP_Bit
d000: 4f 72 20 29 7b 0a 20 20 20 20 69 41 20 7c 3d 20  Or ){.    iA |= 
d010: 69 42 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20  iB;.  }else if( 
d020: 69 42 21 3d 30 20 29 7b 0a 20 20 20 20 61 73 73  iB!=0 ){.    ass
d030: 65 72 74 28 20 6f 70 3d 3d 4f 50 5f 53 68 69 66  ert( op==OP_Shif
d040: 74 52 69 67 68 74 20 7c 7c 20 6f 70 3d 3d 4f 50  tRight || op==OP
d050: 5f 53 68 69 66 74 4c 65 66 74 20 29 3b 0a 0a 20  _ShiftLeft );.. 
d060: 20 20 20 2f 2a 20 49 66 20 73 68 69 66 74 69 6e     /* If shiftin
d070: 67 20 62 79 20 61 20 6e 65 67 61 74 69 76 65 20  g by a negative 
d080: 61 6d 6f 75 6e 74 2c 20 73 68 69 66 74 20 69 6e  amount, shift in
d090: 20 74 68 65 20 6f 74 68 65 72 20 64 69 72 65 63   the other direc
d0a0: 74 69 6f 6e 20 2a 2f 0a 20 20 20 20 69 66 28 20  tion */.    if( 
d0b0: 69 42 3c 30 20 29 7b 0a 20 20 20 20 20 20 61 73  iB<0 ){.      as
d0c0: 73 65 72 74 28 20 4f 50 5f 53 68 69 66 74 52 69  sert( OP_ShiftRi
d0d0: 67 68 74 3d 3d 4f 50 5f 53 68 69 66 74 4c 65 66  ght==OP_ShiftLef
d0e0: 74 2b 31 20 29 3b 0a 20 20 20 20 20 20 6f 70 20  t+1 );.      op 
d0f0: 3d 20 32 2a 4f 50 5f 53 68 69 66 74 4c 65 66 74  = 2*OP_ShiftLeft
d100: 20 2b 20 31 20 2d 20 6f 70 3b 0a 20 20 20 20 20   + 1 - op;.     
d110: 20 69 42 20 3d 20 69 42 3e 28 2d 36 34 29 20 3f   iB = iB>(-64) ?
d120: 20 2d 69 42 20 3a 20 36 34 3b 0a 20 20 20 20 7d   -iB : 64;.    }
d130: 0a 0a 20 20 20 20 69 66 28 20 69 42 3e 3d 36 34  ..    if( iB>=64
d140: 20 29 7b 0a 20 20 20 20 20 20 69 41 20 3d 20 28   ){.      iA = (
d150: 69 41 3e 3d 30 20 7c 7c 20 6f 70 3d 3d 4f 50 5f  iA>=0 || op==OP_
d160: 53 68 69 66 74 4c 65 66 74 29 20 3f 20 30 20 3a  ShiftLeft) ? 0 :
d170: 20 2d 31 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a   -1;.    }else{.
d180: 20 20 20 20 20 20 6d 65 6d 63 70 79 28 26 75 41        memcpy(&uA
d190: 2c 20 26 69 41 2c 20 73 69 7a 65 6f 66 28 75 41  , &iA, sizeof(uA
d1a0: 29 29 3b 0a 20 20 20 20 20 20 69 66 28 20 6f 70  ));.      if( op
d1b0: 3d 3d 4f 50 5f 53 68 69 66 74 4c 65 66 74 20 29  ==OP_ShiftLeft )
d1c0: 7b 0a 20 20 20 20 20 20 20 20 75 41 20 3c 3c 3d  {.        uA <<=
d1d0: 20 69 42 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65   iB;.      }else
d1e0: 7b 0a 20 20 20 20 20 20 20 20 75 41 20 3e 3e 3d  {.        uA >>=
d1f0: 20 69 42 3b 0a 20 20 20 20 20 20 20 20 2f 2a 20   iB;.        /* 
d200: 53 69 67 6e 2d 65 78 74 65 6e 64 20 6f 6e 20 61  Sign-extend on a
d210: 20 72 69 67 68 74 20 73 68 69 66 74 20 6f 66 20   right shift of 
d220: 61 20 6e 65 67 61 74 69 76 65 20 6e 75 6d 62 65  a negative numbe
d230: 72 20 2a 2f 0a 20 20 20 20 20 20 20 20 69 66 28  r */.        if(
d240: 20 69 41 3c 30 20 29 20 75 41 20 7c 3d 20 28 28   iA<0 ) uA |= ((
d250: 28 28 75 36 34 29 30 78 66 66 66 66 66 66 66 66  ((u64)0xffffffff
d260: 29 3c 3c 33 32 29 7c 30 78 66 66 66 66 66 66 66  )<<32)|0xfffffff
d270: 66 29 20 3c 3c 20 28 36 34 2d 69 42 29 3b 0a 20  f) << (64-iB);. 
d280: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 6d 65 6d       }.      mem
d290: 63 70 79 28 26 69 41 2c 20 26 75 41 2c 20 73 69  cpy(&iA, &uA, si
d2a0: 7a 65 6f 66 28 69 41 29 29 3b 0a 20 20 20 20 7d  zeof(iA));.    }
d2b0: 0a 20 20 7d 0a 20 20 70 4f 75 74 2d 3e 75 2e 69  .  }.  pOut->u.i
d2c0: 20 3d 20 69 41 3b 0a 20 20 4d 65 6d 53 65 74 54   = iA;.  MemSetT
d2d0: 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45  ypeFlag(pOut, ME
d2e0: 4d 5f 49 6e 74 29 3b 0a 20 20 62 72 65 61 6b 3b  M_Int);.  break;
d2f0: 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 41  .}../* Opcode: A
d300: 64 64 49 6d 6d 20 20 50 31 20 50 32 20 2a 20 2a  ddImm  P1 P2 * *
d310: 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
d320: 72 5b 50 31 5d 3d 72 5b 50 31 5d 2b 50 32 0a 2a  r[P1]=r[P1]+P2.*
d330: 2a 20 0a 2a 2a 20 41 64 64 20 74 68 65 20 63 6f  * .** Add the co
d340: 6e 73 74 61 6e 74 20 50 32 20 74 6f 20 74 68 65  nstant P2 to the
d350: 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
d360: 65 72 20 50 31 2e 0a 2a 2a 20 54 68 65 20 72 65  er P1..** The re
d370: 73 75 6c 74 20 69 73 20 61 6c 77 61 79 73 20 61  sult is always a
d380: 6e 20 69 6e 74 65 67 65 72 2e 0a 2a 2a 0a 2a 2a  n integer..**.**
d390: 20 54 6f 20 66 6f 72 63 65 20 61 6e 79 20 72 65   To force any re
d3a0: 67 69 73 74 65 72 20 74 6f 20 62 65 20 61 6e 20  gister to be an 
d3b0: 69 6e 74 65 67 65 72 2c 20 6a 75 73 74 20 61 64  integer, just ad
d3c0: 64 20 30 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  d 0..*/.case OP_
d3d0: 41 64 64 49 6d 6d 3a 20 7b 20 20 20 20 20 20 20  AddImm: {       
d3e0: 20 20 20 20 20 2f 2a 20 69 6e 31 20 2a 2f 0a 20       /* in1 */. 
d3f0: 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn1 = &aMem[pO
d400: 70 2d 3e 70 31 5d 3b 0a 20 20 6d 65 6d 41 62 6f  p->p1];.  memAbo
d410: 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 49  utToChange(p, pI
d420: 6e 31 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64  n1);.  sqlite3Vd
d430: 62 65 4d 65 6d 49 6e 74 65 67 65 72 69 66 79 28  beMemIntegerify(
d440: 70 49 6e 31 29 3b 0a 20 20 70 49 6e 31 2d 3e 75  pIn1);.  pIn1->u
d450: 2e 69 20 2b 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20  .i += pOp->p2;. 
d460: 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
d470: 63 6f 64 65 3a 20 4d 75 73 74 42 65 49 6e 74 20  code: MustBeInt 
d480: 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 0a  P1 P2 * * *.** .
d490: 2a 2a 20 46 6f 72 63 65 20 74 68 65 20 76 61 6c  ** Force the val
d4a0: 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
d4b0: 31 20 74 6f 20 62 65 20 61 6e 20 69 6e 74 65 67  1 to be an integ
d4c0: 65 72 2e 20 20 49 66 20 74 68 65 20 76 61 6c 75  er.  If the valu
d4d0: 65 0a 2a 2a 20 69 6e 20 50 31 20 69 73 20 6e 6f  e.** in P1 is no
d4e0: 74 20 61 6e 20 69 6e 74 65 67 65 72 20 61 6e 64  t an integer and
d4f0: 20 63 61 6e 6e 6f 74 20 62 65 20 63 6f 6e 76 65   cannot be conve
d500: 72 74 65 64 20 69 6e 74 6f 20 61 6e 20 69 6e 74  rted into an int
d510: 65 67 65 72 0a 2a 2a 20 77 69 74 68 6f 75 74 20  eger.** without 
d520: 64 61 74 61 20 6c 6f 73 73 2c 20 74 68 65 6e 20  data loss, then 
d530: 6a 75 6d 70 20 69 6d 6d 65 64 69 61 74 65 6c 79  jump immediately
d540: 20 74 6f 20 50 32 2c 20 6f 72 20 69 66 20 50 32   to P2, or if P2
d550: 3d 3d 30 0a 2a 2a 20 72 61 69 73 65 20 61 6e 20  ==0.** raise an 
d560: 53 51 4c 49 54 45 5f 4d 49 53 4d 41 54 43 48 20  SQLITE_MISMATCH 
d570: 65 78 63 65 70 74 69 6f 6e 2e 0a 2a 2f 0a 63 61  exception..*/.ca
d580: 73 65 20 4f 50 5f 4d 75 73 74 42 65 49 6e 74 3a  se OP_MustBeInt:
d590: 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a   {            /*
d5a0: 20 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20   jump, in1 */.  
d5b0: 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn1 = &aMem[pOp
d5c0: 2d 3e 70 31 5d 3b 0a 20 20 69 66 28 20 28 70 49  ->p1];.  if( (pI
d5d0: 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  n1->flags & MEM_
d5e0: 49 6e 74 29 3d 3d 30 20 29 7b 0a 20 20 20 20 61  Int)==0 ){.    a
d5f0: 70 70 6c 79 41 66 66 69 6e 69 74 79 28 70 49 6e  pplyAffinity(pIn
d600: 31 2c 20 53 51 4c 49 54 45 5f 41 46 46 5f 4e 55  1, SQLITE_AFF_NU
d610: 4d 45 52 49 43 2c 20 65 6e 63 6f 64 69 6e 67 29  MERIC, encoding)
d620: 3b 0a 20 20 20 20 56 64 62 65 42 72 61 6e 63 68  ;.    VdbeBranch
d630: 54 61 6b 65 6e 28 28 70 49 6e 31 2d 3e 66 6c 61  Taken((pIn1->fla
d640: 67 73 26 4d 45 4d 5f 49 6e 74 29 3d 3d 30 2c 20  gs&MEM_Int)==0, 
d650: 32 29 3b 0a 20 20 20 20 69 66 28 20 28 70 49 6e  2);.    if( (pIn
d660: 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49  1->flags & MEM_I
d670: 6e 74 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  nt)==0 ){.      
d680: 69 66 28 20 70 4f 70 2d 3e 70 32 3d 3d 30 20 29  if( pOp->p2==0 )
d690: 7b 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20 53  {.        rc = S
d6a0: 51 4c 49 54 45 5f 4d 49 53 4d 41 54 43 48 3b 0a  QLITE_MISMATCH;.
d6b0: 20 20 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f          goto abo
d6c0: 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
d6d0: 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  .      }else{.  
d6e0: 20 20 20 20 20 20 67 6f 74 6f 20 6a 75 6d 70 5f        goto jump_
d6f0: 74 6f 5f 70 32 3b 0a 20 20 20 20 20 20 7d 0a 20  to_p2;.      }. 
d700: 20 20 20 7d 0a 20 20 7d 0a 20 20 4d 65 6d 53 65     }.  }.  MemSe
d710: 74 54 79 70 65 46 6c 61 67 28 70 49 6e 31 2c 20  tTypeFlag(pIn1, 
d720: 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20 62 72 65 61  MEM_Int);.  brea
d730: 6b 3b 0a 7d 0a 0a 23 69 66 6e 64 65 66 20 53 51  k;.}..#ifndef SQ
d740: 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49  LITE_OMIT_FLOATI
d750: 4e 47 5f 50 4f 49 4e 54 0a 2f 2a 20 4f 70 63 6f  NG_POINT./* Opco
d760: 64 65 3a 20 52 65 61 6c 41 66 66 69 6e 69 74 79  de: RealAffinity
d770: 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a   P1 * * * *.**.*
d780: 2a 20 49 66 20 72 65 67 69 73 74 65 72 20 50 31  * If register P1
d790: 20 68 6f 6c 64 73 20 61 6e 20 69 6e 74 65 67 65   holds an intege
d7a0: 72 20 63 6f 6e 76 65 72 74 20 69 74 20 74 6f 20  r convert it to 
d7b0: 61 20 72 65 61 6c 20 76 61 6c 75 65 2e 0a 2a 2a  a real value..**
d7c0: 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20  .** This opcode 
d7d0: 69 73 20 75 73 65 64 20 77 68 65 6e 20 65 78 74  is used when ext
d7e0: 72 61 63 74 69 6e 67 20 69 6e 66 6f 72 6d 61 74  racting informat
d7f0: 69 6f 6e 20 66 72 6f 6d 20 61 20 63 6f 6c 75 6d  ion from a colum
d800: 6e 20 74 68 61 74 0a 2a 2a 20 68 61 73 20 52 45  n that.** has RE
d810: 41 4c 20 61 66 66 69 6e 69 74 79 2e 20 20 53 75  AL affinity.  Su
d820: 63 68 20 63 6f 6c 75 6d 6e 20 76 61 6c 75 65 73  ch column values
d830: 20 6d 61 79 20 73 74 69 6c 6c 20 62 65 20 73 74   may still be st
d840: 6f 72 65 64 20 61 73 0a 2a 2a 20 69 6e 74 65 67  ored as.** integ
d850: 65 72 73 2c 20 66 6f 72 20 73 70 61 63 65 20 65  ers, for space e
d860: 66 66 69 63 69 65 6e 63 79 2c 20 62 75 74 20 61  fficiency, but a
d870: 66 74 65 72 20 65 78 74 72 61 63 74 69 6f 6e 20  fter extraction 
d880: 77 65 20 77 61 6e 74 20 74 68 65 6d 0a 2a 2a 20  we want them.** 
d890: 74 6f 20 68 61 76 65 20 6f 6e 6c 79 20 61 20 72  to have only a r
d8a0: 65 61 6c 20 76 61 6c 75 65 2e 0a 2a 2f 0a 63 61  eal value..*/.ca
d8b0: 73 65 20 4f 50 5f 52 65 61 6c 41 66 66 69 6e 69  se OP_RealAffini
d8c0: 74 79 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  ty: {           
d8d0: 20 20 20 20 20 20 20 2f 2a 20 69 6e 31 20 2a 2f         /* in1 */
d8e0: 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b  .  pIn1 = &aMem[
d8f0: 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 69 66 28 20  pOp->p1];.  if( 
d900: 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn1->flags & ME
d910: 4d 5f 49 6e 74 20 29 7b 0a 20 20 20 20 73 71 6c  M_Int ){.    sql
d920: 69 74 65 33 56 64 62 65 4d 65 6d 52 65 61 6c 69  ite3VdbeMemReali
d930: 66 79 28 70 49 6e 31 29 3b 0a 20 20 7d 0a 20 20  fy(pIn1);.  }.  
d940: 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a  break;.}.#endif.
d950: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
d960: 4f 4d 49 54 5f 43 41 53 54 0a 2f 2a 20 4f 70 63  OMIT_CAST./* Opc
d970: 6f 64 65 3a 20 43 61 73 74 20 50 31 20 50 32 20  ode: Cast P1 P2 
d980: 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69  * * *.** Synopsi
d990: 73 3a 20 61 66 66 69 6e 69 74 79 28 72 5b 50 31  s: affinity(r[P1
d9a0: 5d 29 0a 2a 2a 0a 2a 2a 20 46 6f 72 63 65 20 74  ]).**.** Force t
d9b0: 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69  he value in regi
d9c0: 73 74 65 72 20 50 31 20 74 6f 20 62 65 20 74 68  ster P1 to be th
d9d0: 65 20 74 79 70 65 20 64 65 66 69 6e 65 64 20 62  e type defined b
d9e0: 79 20 50 32 2e 0a 2a 2a 20 0a 2a 2a 20 3c 75 6c  y P2..** .** <ul
d9f0: 3e 0a 2a 2a 20 3c 6c 69 3e 20 50 32 3d 3d 27 41  >.** <li> P2=='A
da00: 27 20 26 72 61 72 72 3b 20 42 4c 4f 42 0a 2a 2a  ' &rarr; BLOB.**
da10: 20 3c 6c 69 3e 20 50 32 3d 3d 27 42 27 20 26 72   <li> P2=='B' &r
da20: 61 72 72 3b 20 54 45 58 54 0a 2a 2a 20 3c 6c 69  arr; TEXT.** <li
da30: 3e 20 50 32 3d 3d 27 43 27 20 26 72 61 72 72 3b  > P2=='C' &rarr;
da40: 20 4e 55 4d 45 52 49 43 0a 2a 2a 20 3c 6c 69 3e   NUMERIC.** <li>
da50: 20 50 32 3d 3d 27 44 27 20 26 72 61 72 72 3b 20   P2=='D' &rarr; 
da60: 49 4e 54 45 47 45 52 0a 2a 2a 20 3c 6c 69 3e 20  INTEGER.** <li> 
da70: 50 32 3d 3d 27 45 27 20 26 72 61 72 72 3b 20 52  P2=='E' &rarr; R
da80: 45 41 4c 0a 2a 2a 20 3c 2f 75 6c 3e 0a 2a 2a 0a  EAL.** </ul>.**.
da90: 2a 2a 20 41 20 4e 55 4c 4c 20 76 61 6c 75 65 20  ** A NULL value 
daa0: 69 73 20 6e 6f 74 20 63 68 61 6e 67 65 64 20 62  is not changed b
dab0: 79 20 74 68 69 73 20 72 6f 75 74 69 6e 65 2e 20  y this routine. 
dac0: 20 49 74 20 72 65 6d 61 69 6e 73 20 4e 55 4c 4c   It remains NULL
dad0: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 61 73  ..*/.case OP_Cas
dae0: 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20  t: {            
daf0: 20 20 20 20 20 20 2f 2a 20 69 6e 31 20 2a 2f 0a        /* in1 */.
db00: 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
db10: 32 3e 3d 53 51 4c 49 54 45 5f 41 46 46 5f 42 4c  2>=SQLITE_AFF_BL
db20: 4f 42 20 26 26 20 70 4f 70 2d 3e 70 32 3c 3d 53  OB && pOp->p2<=S
db30: 51 4c 49 54 45 5f 41 46 46 5f 52 45 41 4c 20 29  QLITE_AFF_REAL )
db40: 3b 0a 20 20 74 65 73 74 63 61 73 65 28 20 70 4f  ;.  testcase( pO
db50: 70 2d 3e 70 32 3d 3d 53 51 4c 49 54 45 5f 41 46  p->p2==SQLITE_AF
db60: 46 5f 54 45 58 54 20 29 3b 0a 20 20 74 65 73 74  F_TEXT );.  test
db70: 63 61 73 65 28 20 70 4f 70 2d 3e 70 32 3d 3d 53  case( pOp->p2==S
db80: 51 4c 49 54 45 5f 41 46 46 5f 42 4c 4f 42 20 29  QLITE_AFF_BLOB )
db90: 3b 0a 20 20 74 65 73 74 63 61 73 65 28 20 70 4f  ;.  testcase( pO
dba0: 70 2d 3e 70 32 3d 3d 53 51 4c 49 54 45 5f 41 46  p->p2==SQLITE_AF
dbb0: 46 5f 4e 55 4d 45 52 49 43 20 29 3b 0a 20 20 74  F_NUMERIC );.  t
dbc0: 65 73 74 63 61 73 65 28 20 70 4f 70 2d 3e 70 32  estcase( pOp->p2
dbd0: 3d 3d 53 51 4c 49 54 45 5f 41 46 46 5f 49 4e 54  ==SQLITE_AFF_INT
dbe0: 45 47 45 52 20 29 3b 0a 20 20 74 65 73 74 63 61  EGER );.  testca
dbf0: 73 65 28 20 70 4f 70 2d 3e 70 32 3d 3d 53 51 4c  se( pOp->p2==SQL
dc00: 49 54 45 5f 41 46 46 5f 52 45 41 4c 20 29 3b 0a  ITE_AFF_REAL );.
dc10: 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70    pIn1 = &aMem[p
dc20: 4f 70 2d 3e 70 31 5d 3b 0a 20 20 6d 65 6d 41 62  Op->p1];.  memAb
dc30: 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70  outToChange(p, p
dc40: 49 6e 31 29 3b 0a 20 20 72 63 20 3d 20 45 78 70  In1);.  rc = Exp
dc50: 61 6e 64 42 6c 6f 62 28 70 49 6e 31 29 3b 0a 20  andBlob(pIn1);. 
dc60: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 43   sqlite3VdbeMemC
dc70: 61 73 74 28 70 49 6e 31 2c 20 70 4f 70 2d 3e 70  ast(pIn1, pOp->p
dc80: 32 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20  2, encoding);.  
dc90: 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53  UPDATE_MAX_BLOBS
dca0: 49 5a 45 28 70 49 6e 31 29 3b 0a 20 20 69 66 28  IZE(pIn1);.  if(
dcb0: 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74   rc ) goto abort
dcc0: 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20  _due_to_error;. 
dcd0: 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66   break;.}.#endif
dce0: 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f   /* SQLITE_OMIT_
dcf0: 43 41 53 54 20 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f  CAST */../* Opco
dd00: 64 65 3a 20 45 71 20 50 31 20 50 32 20 50 33 20  de: Eq P1 P2 P3 
dd10: 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69  P4 P5.** Synopsi
dd20: 73 3a 20 49 46 20 72 5b 50 33 5d 3d 3d 72 5b 50  s: IF r[P3]==r[P
dd30: 31 5d 0a 2a 2a 0a 2a 2a 20 43 6f 6d 70 61 72 65  1].**.** Compare
dd40: 20 74 68 65 20 76 61 6c 75 65 73 20 69 6e 20 72   the values in r
dd50: 65 67 69 73 74 65 72 20 50 31 20 61 6e 64 20 50  egister P1 and P
dd60: 33 2e 20 20 49 66 20 72 65 67 28 50 33 29 3d 3d  3.  If reg(P3)==
dd70: 72 65 67 28 50 31 29 20 74 68 65 6e 0a 2a 2a 20  reg(P1) then.** 
dd80: 6a 75 6d 70 20 74 6f 20 61 64 64 72 65 73 73 20  jump to address 
dd90: 50 32 2e 20 20 4f 72 20 69 66 20 74 68 65 20 53  P2.  Or if the S
dda0: 51 4c 49 54 45 5f 53 54 4f 52 45 50 32 20 66 6c  QLITE_STOREP2 fl
ddb0: 61 67 20 69 73 20 73 65 74 20 69 6e 20 50 35 2c  ag is set in P5,
ddc0: 20 74 68 65 6e 0a 2a 2a 20 73 74 6f 72 65 20 74   then.** store t
ddd0: 68 65 20 72 65 73 75 6c 74 20 6f 66 20 63 6f 6d  he result of com
dde0: 70 61 72 69 73 6f 6e 20 69 6e 20 72 65 67 69 73  parison in regis
ddf0: 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54 68  ter P2..**.** Th
de00: 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 4d 41 53  e SQLITE_AFF_MAS
de10: 4b 20 70 6f 72 74 69 6f 6e 20 6f 66 20 50 35 20  K portion of P5 
de20: 6d 75 73 74 20 62 65 20 61 6e 20 61 66 66 69 6e  must be an affin
de30: 69 74 79 20 63 68 61 72 61 63 74 65 72 20 2d 0a  ity character -.
de40: 2a 2a 20 53 51 4c 49 54 45 5f 41 46 46 5f 54 45  ** SQLITE_AFF_TE
de50: 58 54 2c 20 53 51 4c 49 54 45 5f 41 46 46 5f 49  XT, SQLITE_AFF_I
de60: 4e 54 45 47 45 52 2c 20 61 6e 64 20 73 6f 20 66  NTEGER, and so f
de70: 6f 72 74 68 2e 20 41 6e 20 61 74 74 65 6d 70 74  orth. An attempt
de80: 20 69 73 20 6d 61 64 65 20 0a 2a 2a 20 74 6f 20   is made .** to 
de90: 63 6f 65 72 63 65 20 62 6f 74 68 20 69 6e 70 75  coerce both inpu
dea0: 74 73 20 61 63 63 6f 72 64 69 6e 67 20 74 6f 20  ts according to 
deb0: 74 68 69 73 20 61 66 66 69 6e 69 74 79 20 62 65  this affinity be
dec0: 66 6f 72 65 20 74 68 65 0a 2a 2a 20 63 6f 6d 70  fore the.** comp
ded0: 61 72 69 73 6f 6e 20 69 73 20 6d 61 64 65 2e 20  arison is made. 
dee0: 49 66 20 74 68 65 20 53 51 4c 49 54 45 5f 41 46  If the SQLITE_AF
def0: 46 5f 4d 41 53 4b 20 69 73 20 30 78 30 30 2c 20  F_MASK is 0x00, 
df00: 74 68 65 6e 20 6e 75 6d 65 72 69 63 0a 2a 2a 20  then numeric.** 
df10: 61 66 66 69 6e 69 74 79 20 69 73 20 75 73 65 64  affinity is used
df20: 2e 20 4e 6f 74 65 20 74 68 61 74 20 74 68 65 20  . Note that the 
df30: 61 66 66 69 6e 69 74 79 20 63 6f 6e 76 65 72 73  affinity convers
df40: 69 6f 6e 73 20 61 72 65 20 73 74 6f 72 65 64 0a  ions are stored.
df50: 2a 2a 20 62 61 63 6b 20 69 6e 74 6f 20 74 68 65  ** back into the
df60: 20 69 6e 70 75 74 20 72 65 67 69 73 74 65 72 73   input registers
df70: 20 50 31 20 61 6e 64 20 50 33 2e 20 20 53 6f 20   P1 and P3.  So 
df80: 74 68 69 73 20 6f 70 63 6f 64 65 20 63 61 6e 20  this opcode can 
df90: 63 61 75 73 65 0a 2a 2a 20 70 65 72 73 69 73 74  cause.** persist
dfa0: 65 6e 74 20 63 68 61 6e 67 65 73 20 74 6f 20 72  ent changes to r
dfb0: 65 67 69 73 74 65 72 73 20 50 31 20 61 6e 64 20  egisters P1 and 
dfc0: 50 33 2e 0a 2a 2a 0a 2a 2a 20 4f 6e 63 65 20 61  P3..**.** Once a
dfd0: 6e 79 20 63 6f 6e 76 65 72 73 69 6f 6e 73 20 68  ny conversions h
dfe0: 61 76 65 20 74 61 6b 65 6e 20 70 6c 61 63 65 2c  ave taken place,
dff0: 20 61 6e 64 20 6e 65 69 74 68 65 72 20 76 61 6c   and neither val
e000: 75 65 20 69 73 20 4e 55 4c 4c 2c 20 0a 2a 2a 20  ue is NULL, .** 
e010: 74 68 65 20 76 61 6c 75 65 73 20 61 72 65 20 63  the values are c
e020: 6f 6d 70 61 72 65 64 2e 20 49 66 20 62 6f 74 68  ompared. If both
e030: 20 76 61 6c 75 65 73 20 61 72 65 20 62 6c 6f 62   values are blob
e040: 73 20 74 68 65 6e 20 6d 65 6d 63 6d 70 28 29 20  s then memcmp() 
e050: 69 73 0a 2a 2a 20 75 73 65 64 20 74 6f 20 64 65  is.** used to de
e060: 74 65 72 6d 69 6e 65 20 74 68 65 20 72 65 73 75  termine the resu
e070: 6c 74 73 20 6f 66 20 74 68 65 20 63 6f 6d 70 61  lts of the compa
e080: 72 69 73 6f 6e 2e 20 20 49 66 20 62 6f 74 68 20  rison.  If both 
e090: 76 61 6c 75 65 73 0a 2a 2a 20 61 72 65 20 74 65  values.** are te
e0a0: 78 74 2c 20 74 68 65 6e 20 74 68 65 20 61 70 70  xt, then the app
e0b0: 72 6f 70 72 69 61 74 65 20 63 6f 6c 6c 61 74 69  ropriate collati
e0c0: 6e 67 20 66 75 6e 63 74 69 6f 6e 20 73 70 65 63  ng function spec
e0d0: 69 66 69 65 64 20 69 6e 0a 2a 2a 20 50 34 20 69  ified in.** P4 i
e0e0: 73 20 75 73 65 64 20 74 6f 20 64 6f 20 74 68 65  s used to do the
e0f0: 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 20 20 49 66   comparison.  If
e100: 20 50 34 20 69 73 20 6e 6f 74 20 73 70 65 63 69   P4 is not speci
e110: 66 69 65 64 20 74 68 65 6e 0a 2a 2a 20 6d 65 6d  fied then.** mem
e120: 63 6d 70 28 29 20 69 73 20 75 73 65 64 20 74 6f  cmp() is used to
e130: 20 63 6f 6d 70 61 72 65 20 74 65 78 74 20 73 74   compare text st
e140: 72 69 6e 67 2e 20 20 49 66 20 62 6f 74 68 20 76  ring.  If both v
e150: 61 6c 75 65 73 20 61 72 65 0a 2a 2a 20 6e 75 6d  alues are.** num
e160: 65 72 69 63 2c 20 74 68 65 6e 20 61 20 6e 75 6d  eric, then a num
e170: 65 72 69 63 20 63 6f 6d 70 61 72 69 73 6f 6e 20  eric comparison 
e180: 69 73 20 75 73 65 64 2e 20 49 66 20 74 68 65 20  is used. If the 
e190: 74 77 6f 20 76 61 6c 75 65 73 0a 2a 2a 20 61 72  two values.** ar
e1a0: 65 20 6f 66 20 64 69 66 66 65 72 65 6e 74 20 74  e of different t
e1b0: 79 70 65 73 2c 20 74 68 65 6e 20 6e 75 6d 62 65  ypes, then numbe
e1c0: 72 73 20 61 72 65 20 63 6f 6e 73 69 64 65 72 65  rs are considere
e1d0: 64 20 6c 65 73 73 20 74 68 61 6e 0a 2a 2a 20 73  d less than.** s
e1e0: 74 72 69 6e 67 73 20 61 6e 64 20 73 74 72 69 6e  trings and strin
e1f0: 67 73 20 61 72 65 20 63 6f 6e 73 69 64 65 72 65  gs are considere
e200: 64 20 6c 65 73 73 20 74 68 61 6e 20 62 6c 6f 62  d less than blob
e210: 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 53 51 4c 49  s..**.** If SQLI
e220: 54 45 5f 4e 55 4c 4c 45 51 20 69 73 20 73 65 74  TE_NULLEQ is set
e230: 20 69 6e 20 50 35 20 74 68 65 6e 20 74 68 65 20   in P5 then the 
e240: 72 65 73 75 6c 74 20 6f 66 20 63 6f 6d 70 61 72  result of compar
e250: 69 73 6f 6e 20 69 73 20 61 6c 77 61 79 73 20 65  ison is always e
e260: 69 74 68 65 72 0a 2a 2a 20 74 72 75 65 20 6f 72  ither.** true or
e270: 20 66 61 6c 73 65 20 61 6e 64 20 69 73 20 6e 65   false and is ne
e280: 76 65 72 20 4e 55 4c 4c 2e 20 20 49 66 20 62 6f  ver NULL.  If bo
e290: 74 68 20 6f 70 65 72 61 6e 64 73 20 61 72 65 20  th operands are 
e2a0: 4e 55 4c 4c 20 74 68 65 6e 20 74 68 65 20 72 65  NULL then the re
e2b0: 73 75 6c 74 0a 2a 2a 20 6f 66 20 63 6f 6d 70 61  sult.** of compa
e2c0: 72 69 73 6f 6e 20 69 73 20 74 72 75 65 2e 20 20  rison is true.  
e2d0: 49 66 20 65 69 74 68 65 72 20 6f 70 65 72 61 6e  If either operan
e2e0: 64 20 69 73 20 4e 55 4c 4c 20 74 68 65 6e 20 74  d is NULL then t
e2f0: 68 65 20 72 65 73 75 6c 74 20 69 73 20 66 61 6c  he result is fal
e300: 73 65 2e 0a 2a 2a 20 49 66 20 6e 65 69 74 68 65  se..** If neithe
e310: 72 20 6f 70 65 72 61 6e 64 20 69 73 20 4e 55 4c  r operand is NUL
e320: 4c 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20  L the result is 
e330: 74 68 65 20 73 61 6d 65 20 61 73 20 69 74 20 77  the same as it w
e340: 6f 75 6c 64 20 62 65 20 69 66 0a 2a 2a 20 74 68  ould be if.** th
e350: 65 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 20  e SQLITE_NULLEQ 
e360: 66 6c 61 67 20 77 65 72 65 20 6f 6d 69 74 74 65  flag were omitte
e370: 64 20 66 72 6f 6d 20 50 35 2e 0a 2a 2a 0a 2a 2a  d from P5..**.**
e380: 20 49 66 20 62 6f 74 68 20 53 51 4c 49 54 45 5f   If both SQLITE_
e390: 53 54 4f 52 45 50 32 20 61 6e 64 20 53 51 4c 49  STOREP2 and SQLI
e3a0: 54 45 5f 4b 45 45 50 4e 55 4c 4c 20 66 6c 61 67  TE_KEEPNULL flag
e3b0: 73 20 61 72 65 20 73 65 74 20 74 68 65 6e 20 74  s are set then t
e3c0: 68 65 0a 2a 2a 20 63 6f 6e 74 65 6e 74 20 6f 66  he.** content of
e3d0: 20 72 5b 50 32 5d 20 69 73 20 6f 6e 6c 79 20 63   r[P2] is only c
e3e0: 68 61 6e 67 65 64 20 69 66 20 74 68 65 20 6e 65  hanged if the ne
e3f0: 77 20 76 61 6c 75 65 20 69 73 20 4e 55 4c 4c 20  w value is NULL 
e400: 6f 72 20 30 20 28 66 61 6c 73 65 29 2e 0a 2a 2a  or 0 (false)..**
e410: 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c   In other words,
e420: 20 61 20 70 72 69 6f 72 20 72 5b 50 32 5d 20 76   a prior r[P2] v
e430: 61 6c 75 65 20 77 69 6c 6c 20 6e 6f 74 20 62 65  alue will not be
e440: 20 6f 76 65 72 77 72 69 74 74 65 6e 20 62 79 20   overwritten by 
e450: 31 20 28 74 72 75 65 29 2e 0a 2a 2f 0a 2f 2a 20  1 (true)..*/./* 
e460: 4f 70 63 6f 64 65 3a 20 4e 65 20 50 31 20 50 32  Opcode: Ne P1 P2
e470: 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e   P3 P4 P5.** Syn
e480: 6f 70 73 69 73 3a 20 49 46 20 72 5b 50 33 5d 21  opsis: IF r[P3]!
e490: 3d 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 54 68 69  =r[P1].**.** Thi
e4a0: 73 20 77 6f 72 6b 73 20 6a 75 73 74 20 6c 69 6b  s works just lik
e4b0: 65 20 74 68 65 20 45 71 20 6f 70 63 6f 64 65 20  e the Eq opcode 
e4c0: 65 78 63 65 70 74 20 74 68 61 74 20 74 68 65 20  except that the 
e4d0: 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e 20 69 66  jump is taken if
e4e0: 0a 2a 2a 20 74 68 65 20 6f 70 65 72 61 6e 64 73  .** the operands
e4f0: 20 69 6e 20 72 65 67 69 73 74 65 72 73 20 50 31   in registers P1
e500: 20 61 6e 64 20 50 33 20 61 72 65 20 6e 6f 74 20   and P3 are not 
e510: 65 71 75 61 6c 2e 20 20 53 65 65 20 74 68 65 20  equal.  See the 
e520: 45 71 20 6f 70 63 6f 64 65 20 66 6f 72 0a 2a 2a  Eq opcode for.**
e530: 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f   additional info
e540: 72 6d 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 49  rmation..**.** I
e550: 66 20 62 6f 74 68 20 53 51 4c 49 54 45 5f 53 54  f both SQLITE_ST
e560: 4f 52 45 50 32 20 61 6e 64 20 53 51 4c 49 54 45  OREP2 and SQLITE
e570: 5f 4b 45 45 50 4e 55 4c 4c 20 66 6c 61 67 73 20  _KEEPNULL flags 
e580: 61 72 65 20 73 65 74 20 74 68 65 6e 20 74 68 65  are set then the
e590: 0a 2a 2a 20 63 6f 6e 74 65 6e 74 20 6f 66 20 72  .** content of r
e5a0: 5b 50 32 5d 20 69 73 20 6f 6e 6c 79 20 63 68 61  [P2] is only cha
e5b0: 6e 67 65 64 20 69 66 20 74 68 65 20 6e 65 77 20  nged if the new 
e5c0: 76 61 6c 75 65 20 69 73 20 4e 55 4c 4c 20 6f 72  value is NULL or
e5d0: 20 31 20 28 74 72 75 65 29 2e 0a 2a 2a 20 49 6e   1 (true)..** In
e5e0: 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 61 20   other words, a 
e5f0: 70 72 69 6f 72 20 72 5b 50 32 5d 20 76 61 6c 75  prior r[P2] valu
e600: 65 20 77 69 6c 6c 20 6e 6f 74 20 62 65 20 6f 76  e will not be ov
e610: 65 72 77 72 69 74 74 65 6e 20 62 79 20 30 20 28  erwritten by 0 (
e620: 66 61 6c 73 65 29 2e 0a 2a 2f 0a 2f 2a 20 4f 70  false)..*/./* Op
e630: 63 6f 64 65 3a 20 4c 74 20 50 31 20 50 32 20 50  code: Lt P1 P2 P
e640: 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70  3 P4 P5.** Synop
e650: 73 69 73 3a 20 49 46 20 72 5b 50 33 5d 3c 72 5b  sis: IF r[P3]<r[
e660: 50 31 5d 0a 2a 2a 0a 2a 2a 20 43 6f 6d 70 61 72  P1].**.** Compar
e670: 65 20 74 68 65 20 76 61 6c 75 65 73 20 69 6e 20  e the values in 
e680: 72 65 67 69 73 74 65 72 20 50 31 20 61 6e 64 20  register P1 and 
e690: 50 33 2e 20 20 49 66 20 72 65 67 28 50 33 29 3c  P3.  If reg(P3)<
e6a0: 72 65 67 28 50 31 29 20 74 68 65 6e 0a 2a 2a 20  reg(P1) then.** 
e6b0: 6a 75 6d 70 20 74 6f 20 61 64 64 72 65 73 73 20  jump to address 
e6c0: 50 32 2e 20 20 4f 72 20 69 66 20 74 68 65 20 53  P2.  Or if the S
e6d0: 51 4c 49 54 45 5f 53 54 4f 52 45 50 32 20 66 6c  QLITE_STOREP2 fl
e6e0: 61 67 20 69 73 20 73 65 74 20 69 6e 20 50 35 20  ag is set in P5 
e6f0: 73 74 6f 72 65 0a 2a 2a 20 74 68 65 20 72 65 73  store.** the res
e700: 75 6c 74 20 6f 66 20 63 6f 6d 70 61 72 69 73 6f  ult of compariso
e710: 6e 20 28 30 20 6f 72 20 31 20 6f 72 20 4e 55 4c  n (0 or 1 or NUL
e720: 4c 29 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72  L) into register
e730: 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68   P2..**.** If th
e740: 65 20 53 51 4c 49 54 45 5f 4a 55 4d 50 49 46 4e  e SQLITE_JUMPIFN
e750: 55 4c 4c 20 62 69 74 20 6f 66 20 50 35 20 69 73  ULL bit of P5 is
e760: 20 73 65 74 20 61 6e 64 20 65 69 74 68 65 72 20   set and either 
e770: 72 65 67 28 50 31 29 20 6f 72 0a 2a 2a 20 72 65  reg(P1) or.** re
e780: 67 28 50 33 29 20 69 73 20 4e 55 4c 4c 20 74 68  g(P3) is NULL th
e790: 65 6e 20 74 68 65 20 74 61 6b 65 20 74 68 65 20  en the take the 
e7a0: 6a 75 6d 70 2e 20 20 49 66 20 74 68 65 20 53 51  jump.  If the SQ
e7b0: 4c 49 54 45 5f 4a 55 4d 50 49 46 4e 55 4c 4c 20  LITE_JUMPIFNULL 
e7c0: 0a 2a 2a 20 62 69 74 20 69 73 20 63 6c 65 61 72  .** bit is clear
e7d0: 20 74 68 65 6e 20 66 61 6c 6c 20 74 68 72 6f 75   then fall throu
e7e0: 67 68 20 69 66 20 65 69 74 68 65 72 20 6f 70 65  gh if either ope
e7f0: 72 61 6e 64 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2a  rand is NULL..**
e800: 0a 2a 2a 20 54 68 65 20 53 51 4c 49 54 45 5f 41  .** The SQLITE_A
e810: 46 46 5f 4d 41 53 4b 20 70 6f 72 74 69 6f 6e 20  FF_MASK portion 
e820: 6f 66 20 50 35 20 6d 75 73 74 20 62 65 20 61 6e  of P5 must be an
e830: 20 61 66 66 69 6e 69 74 79 20 63 68 61 72 61 63   affinity charac
e840: 74 65 72 20 2d 0a 2a 2a 20 53 51 4c 49 54 45 5f  ter -.** SQLITE_
e850: 41 46 46 5f 54 45 58 54 2c 20 53 51 4c 49 54 45  AFF_TEXT, SQLITE
e860: 5f 41 46 46 5f 49 4e 54 45 47 45 52 2c 20 61 6e  _AFF_INTEGER, an
e870: 64 20 73 6f 20 66 6f 72 74 68 2e 20 41 6e 20 61  d so forth. An a
e880: 74 74 65 6d 70 74 20 69 73 20 6d 61 64 65 20 0a  ttempt is made .
e890: 2a 2a 20 74 6f 20 63 6f 65 72 63 65 20 62 6f 74  ** to coerce bot
e8a0: 68 20 69 6e 70 75 74 73 20 61 63 63 6f 72 64 69  h inputs accordi
e8b0: 6e 67 20 74 6f 20 74 68 69 73 20 61 66 66 69 6e  ng to this affin
e8c0: 69 74 79 20 62 65 66 6f 72 65 20 74 68 65 0a 2a  ity before the.*
e8d0: 2a 20 63 6f 6d 70 61 72 69 73 6f 6e 20 69 73 20  * comparison is 
e8e0: 6d 61 64 65 2e 20 49 66 20 74 68 65 20 53 51 4c  made. If the SQL
e8f0: 49 54 45 5f 41 46 46 5f 4d 41 53 4b 20 69 73 20  ITE_AFF_MASK is 
e900: 30 78 30 30 2c 20 74 68 65 6e 20 6e 75 6d 65 72  0x00, then numer
e910: 69 63 0a 2a 2a 20 61 66 66 69 6e 69 74 79 20 69  ic.** affinity i
e920: 73 20 75 73 65 64 2e 20 4e 6f 74 65 20 74 68 61  s used. Note tha
e930: 74 20 74 68 65 20 61 66 66 69 6e 69 74 79 20 63  t the affinity c
e940: 6f 6e 76 65 72 73 69 6f 6e 73 20 61 72 65 20 73  onversions are s
e950: 74 6f 72 65 64 0a 2a 2a 20 62 61 63 6b 20 69 6e  tored.** back in
e960: 74 6f 20 74 68 65 20 69 6e 70 75 74 20 72 65 67  to the input reg
e970: 69 73 74 65 72 73 20 50 31 20 61 6e 64 20 50 33  isters P1 and P3
e980: 2e 20 20 53 6f 20 74 68 69 73 20 6f 70 63 6f 64  .  So this opcod
e990: 65 20 63 61 6e 20 63 61 75 73 65 0a 2a 2a 20 70  e can cause.** p
e9a0: 65 72 73 69 73 74 65 6e 74 20 63 68 61 6e 67 65  ersistent change
e9b0: 73 20 74 6f 20 72 65 67 69 73 74 65 72 73 20 50  s to registers P
e9c0: 31 20 61 6e 64 20 50 33 2e 0a 2a 2a 0a 2a 2a 20  1 and P3..**.** 
e9d0: 4f 6e 63 65 20 61 6e 79 20 63 6f 6e 76 65 72 73  Once any convers
e9e0: 69 6f 6e 73 20 68 61 76 65 20 74 61 6b 65 6e 20  ions have taken 
e9f0: 70 6c 61 63 65 2c 20 61 6e 64 20 6e 65 69 74 68  place, and neith
ea00: 65 72 20 76 61 6c 75 65 20 69 73 20 4e 55 4c 4c  er value is NULL
ea10: 2c 20 0a 2a 2a 20 74 68 65 20 76 61 6c 75 65 73  , .** the values
ea20: 20 61 72 65 20 63 6f 6d 70 61 72 65 64 2e 20 49   are compared. I
ea30: 66 20 62 6f 74 68 20 76 61 6c 75 65 73 20 61 72  f both values ar
ea40: 65 20 62 6c 6f 62 73 20 74 68 65 6e 20 6d 65 6d  e blobs then mem
ea50: 63 6d 70 28 29 20 69 73 0a 2a 2a 20 75 73 65 64  cmp() is.** used
ea60: 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 20 74 68   to determine th
ea70: 65 20 72 65 73 75 6c 74 73 20 6f 66 20 74 68 65  e results of the
ea80: 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 20 20 49 66   comparison.  If
ea90: 20 62 6f 74 68 20 76 61 6c 75 65 73 0a 2a 2a 20   both values.** 
eaa0: 61 72 65 20 74 65 78 74 2c 20 74 68 65 6e 20 74  are text, then t
eab0: 68 65 20 61 70 70 72 6f 70 72 69 61 74 65 20 63  he appropriate c
eac0: 6f 6c 6c 61 74 69 6e 67 20 66 75 6e 63 74 69 6f  ollating functio
ead0: 6e 20 73 70 65 63 69 66 69 65 64 20 69 6e 0a 2a  n specified in.*
eae0: 2a 20 50 34 20 69 73 20 20 75 73 65 64 20 74 6f  * P4 is  used to
eaf0: 20 64 6f 20 74 68 65 20 63 6f 6d 70 61 72 69 73   do the comparis
eb00: 6f 6e 2e 20 20 49 66 20 50 34 20 69 73 20 6e 6f  on.  If P4 is no
eb10: 74 20 73 70 65 63 69 66 69 65 64 20 74 68 65 6e  t specified then
eb20: 0a 2a 2a 20 6d 65 6d 63 6d 70 28 29 20 69 73 20  .** memcmp() is 
eb30: 75 73 65 64 20 74 6f 20 63 6f 6d 70 61 72 65 20  used to compare 
eb40: 74 65 78 74 20 73 74 72 69 6e 67 2e 20 20 49 66  text string.  If
eb50: 20 62 6f 74 68 20 76 61 6c 75 65 73 20 61 72 65   both values are
eb60: 0a 2a 2a 20 6e 75 6d 65 72 69 63 2c 20 74 68 65  .** numeric, the
eb70: 6e 20 61 20 6e 75 6d 65 72 69 63 20 63 6f 6d 70  n a numeric comp
eb80: 61 72 69 73 6f 6e 20 69 73 20 75 73 65 64 2e 20  arison is used. 
eb90: 49 66 20 74 68 65 20 74 77 6f 20 76 61 6c 75 65  If the two value
eba0: 73 0a 2a 2a 20 61 72 65 20 6f 66 20 64 69 66 66  s.** are of diff
ebb0: 65 72 65 6e 74 20 74 79 70 65 73 2c 20 74 68 65  erent types, the
ebc0: 6e 20 6e 75 6d 62 65 72 73 20 61 72 65 20 63 6f  n numbers are co
ebd0: 6e 73 69 64 65 72 65 64 20 6c 65 73 73 20 74 68  nsidered less th
ebe0: 61 6e 0a 2a 2a 20 73 74 72 69 6e 67 73 20 61 6e  an.** strings an
ebf0: 64 20 73 74 72 69 6e 67 73 20 61 72 65 20 63 6f  d strings are co
ec00: 6e 73 69 64 65 72 65 64 20 6c 65 73 73 20 74 68  nsidered less th
ec10: 61 6e 20 62 6c 6f 62 73 2e 0a 2a 2f 0a 2f 2a 20  an blobs..*/./* 
ec20: 4f 70 63 6f 64 65 3a 20 4c 65 20 50 31 20 50 32  Opcode: Le P1 P2
ec30: 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e   P3 P4 P5.** Syn
ec40: 6f 70 73 69 73 3a 20 49 46 20 72 5b 50 33 5d 3c  opsis: IF r[P3]<
ec50: 3d 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 54 68 69  =r[P1].**.** Thi
ec60: 73 20 77 6f 72 6b 73 20 6a 75 73 74 20 6c 69 6b  s works just lik
ec70: 65 20 74 68 65 20 4c 74 20 6f 70 63 6f 64 65 20  e the Lt opcode 
ec80: 65 78 63 65 70 74 20 74 68 61 74 20 74 68 65 20  except that the 
ec90: 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e 20 69 66  jump is taken if
eca0: 0a 2a 2a 20 74 68 65 20 63 6f 6e 74 65 6e 74 20  .** the content 
ecb0: 6f 66 20 72 65 67 69 73 74 65 72 20 50 33 20 69  of register P3 i
ecc0: 73 20 6c 65 73 73 20 74 68 61 6e 20 6f 72 20 65  s less than or e
ecd0: 71 75 61 6c 20 74 6f 20 74 68 65 20 63 6f 6e 74  qual to the cont
ece0: 65 6e 74 20 6f 66 0a 2a 2a 20 72 65 67 69 73 74  ent of.** regist
ecf0: 65 72 20 50 31 2e 20 20 53 65 65 20 74 68 65 20  er P1.  See the 
ed00: 4c 74 20 6f 70 63 6f 64 65 20 66 6f 72 20 61 64  Lt opcode for ad
ed10: 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61  ditional informa
ed20: 74 69 6f 6e 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f  tion..*/./* Opco
ed30: 64 65 3a 20 47 74 20 50 31 20 50 32 20 50 33 20  de: Gt P1 P2 P3 
ed40: 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69  P4 P5.** Synopsi
ed50: 73 3a 20 49 46 20 72 5b 50 33 5d 3e 72 5b 50 31  s: IF r[P3]>r[P1
ed60: 5d 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 77 6f 72  ].**.** This wor
ed70: 6b 73 20 6a 75 73 74 20 6c 69 6b 65 20 74 68 65  ks just like the
ed80: 20 4c 74 20 6f 70 63 6f 64 65 20 65 78 63 65 70   Lt opcode excep
ed90: 74 20 74 68 61 74 20 74 68 65 20 6a 75 6d 70 20  t that the jump 
eda0: 69 73 20 74 61 6b 65 6e 20 69 66 0a 2a 2a 20 74  is taken if.** t
edb0: 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 72 65  he content of re
edc0: 67 69 73 74 65 72 20 50 33 20 69 73 20 67 72 65  gister P3 is gre
edd0: 61 74 65 72 20 74 68 61 6e 20 74 68 65 20 63 6f  ater than the co
ede0: 6e 74 65 6e 74 20 6f 66 0a 2a 2a 20 72 65 67 69  ntent of.** regi
edf0: 73 74 65 72 20 50 31 2e 20 20 53 65 65 20 74 68  ster P1.  See th
ee00: 65 20 4c 74 20 6f 70 63 6f 64 65 20 66 6f 72 20  e Lt opcode for 
ee10: 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72  additional infor
ee20: 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 2f 2a 20 4f 70  mation..*/./* Op
ee30: 63 6f 64 65 3a 20 47 65 20 50 31 20 50 32 20 50  code: Ge P1 P2 P
ee40: 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70  3 P4 P5.** Synop
ee50: 73 69 73 3a 20 49 46 20 72 5b 50 33 5d 3e 3d 72  sis: IF r[P3]>=r
ee60: 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20  [P1].**.** This 
ee70: 77 6f 72 6b 73 20 6a 75 73 74 20 6c 69 6b 65 20  works just like 
ee80: 74 68 65 20 4c 74 20 6f 70 63 6f 64 65 20 65 78  the Lt opcode ex
ee90: 63 65 70 74 20 74 68 61 74 20 74 68 65 20 6a 75  cept that the ju
eea0: 6d 70 20 69 73 20 74 61 6b 65 6e 20 69 66 0a 2a  mp is taken if.*
eeb0: 2a 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66  * the content of
eec0: 20 72 65 67 69 73 74 65 72 20 50 33 20 69 73 20   register P3 is 
eed0: 67 72 65 61 74 65 72 20 74 68 61 6e 20 6f 72 20  greater than or 
eee0: 65 71 75 61 6c 20 74 6f 20 74 68 65 20 63 6f 6e  equal to the con
eef0: 74 65 6e 74 20 6f 66 0a 2a 2a 20 72 65 67 69 73  tent of.** regis
ef00: 74 65 72 20 50 31 2e 20 20 53 65 65 20 74 68 65  ter P1.  See the
ef10: 20 4c 74 20 6f 70 63 6f 64 65 20 66 6f 72 20 61   Lt opcode for a
ef20: 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d  dditional inform
ef30: 61 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f  ation..*/.case O
ef40: 50 5f 45 71 3a 20 20 20 20 20 20 20 20 20 20 20  P_Eq:           
ef50: 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54      /* same as T
ef60: 4b 5f 45 51 2c 20 6a 75 6d 70 2c 20 69 6e 31 2c  K_EQ, jump, in1,
ef70: 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f   in3 */.case OP_
ef80: 4e 65 3a 20 20 20 20 20 20 20 20 20 20 20 20 20  Ne:             
ef90: 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f    /* same as TK_
efa0: 4e 45 2c 20 6a 75 6d 70 2c 20 69 6e 31 2c 20 69  NE, jump, in1, i
efb0: 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 4c 74  n3 */.case OP_Lt
efc0: 3a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  :               
efd0: 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 4c 54  /* same as TK_LT
efe0: 2c 20 6a 75 6d 70 2c 20 69 6e 31 2c 20 69 6e 33  , jump, in1, in3
eff0: 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 4c 65 3a 20   */.case OP_Le: 
f000: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
f010: 20 73 61 6d 65 20 61 73 20 54 4b 5f 4c 45 2c 20   same as TK_LE, 
f020: 6a 75 6d 70 2c 20 69 6e 31 2c 20 69 6e 33 20 2a  jump, in1, in3 *
f030: 2f 0a 63 61 73 65 20 4f 50 5f 47 74 3a 20 20 20  /.case OP_Gt:   
f040: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73              /* s
f050: 61 6d 65 20 61 73 20 54 4b 5f 47 54 2c 20 6a 75  ame as TK_GT, ju
f060: 6d 70 2c 20 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a  mp, in1, in3 */.
f070: 63 61 73 65 20 4f 50 5f 47 65 3a 20 7b 20 20 20  case OP_Ge: {   
f080: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d            /* sam
f090: 65 20 61 73 20 54 4b 5f 47 45 2c 20 6a 75 6d 70  e as TK_GE, jump
f0a0: 2c 20 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a 20 20  , in1, in3 */.  
f0b0: 69 6e 74 20 72 65 73 2c 20 72 65 73 32 3b 20 20  int res, res2;  
f0c0: 20 20 20 20 2f 2a 20 52 65 73 75 6c 74 20 6f 66      /* Result of
f0d0: 20 74 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e 20   the comparison 
f0e0: 6f 66 20 70 49 6e 31 20 61 67 61 69 6e 73 74 20  of pIn1 against 
f0f0: 70 49 6e 33 20 2a 2f 0a 20 20 63 68 61 72 20 61  pIn3 */.  char a
f100: 66 66 69 6e 69 74 79 3b 20 20 20 20 20 20 2f 2a  ffinity;      /*
f110: 20 41 66 66 69 6e 69 74 79 20 74 6f 20 75 73 65   Affinity to use
f120: 20 66 6f 72 20 63 6f 6d 70 61 72 69 73 6f 6e 20   for comparison 
f130: 2a 2f 0a 20 20 75 31 36 20 66 6c 61 67 73 31 3b  */.  u16 flags1;
f140: 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 70 79           /* Copy
f150: 20 6f 66 20 69 6e 69 74 69 61 6c 20 76 61 6c 75   of initial valu
f160: 65 20 6f 66 20 70 49 6e 31 2d 3e 66 6c 61 67 73  e of pIn1->flags
f170: 20 2a 2f 0a 20 20 75 31 36 20 66 6c 61 67 73 33   */.  u16 flags3
f180: 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 70  ;         /* Cop
f190: 79 20 6f 66 20 69 6e 69 74 69 61 6c 20 76 61 6c  y of initial val
f1a0: 75 65 20 6f 66 20 70 49 6e 33 2d 3e 66 6c 61 67  ue of pIn3->flag
f1b0: 73 20 2a 2f 0a 0a 20 20 70 49 6e 31 20 3d 20 26  s */..  pIn1 = &
f1c0: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  aMem[pOp->p1];. 
f1d0: 20 70 49 6e 33 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn3 = &aMem[pO
f1e0: 70 2d 3e 70 33 5d 3b 0a 20 20 66 6c 61 67 73 31  p->p3];.  flags1
f1f0: 20 3d 20 70 49 6e 31 2d 3e 66 6c 61 67 73 3b 0a   = pIn1->flags;.
f200: 20 20 66 6c 61 67 73 33 20 3d 20 70 49 6e 33 2d    flags3 = pIn3-
f210: 3e 66 6c 61 67 73 3b 0a 20 20 69 66 28 20 28 66  >flags;.  if( (f
f220: 6c 61 67 73 31 20 7c 20 66 6c 61 67 73 33 29 26  lags1 | flags3)&
f230: 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20  MEM_Null ){.    
f240: 2f 2a 20 4f 6e 65 20 6f 72 20 62 6f 74 68 20 6f  /* One or both o
f250: 70 65 72 61 6e 64 73 20 61 72 65 20 4e 55 4c 4c  perands are NULL
f260: 20 2a 2f 0a 20 20 20 20 69 66 28 20 70 4f 70 2d   */.    if( pOp-
f270: 3e 70 35 20 26 20 53 51 4c 49 54 45 5f 4e 55 4c  >p5 & SQLITE_NUL
f280: 4c 45 51 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20  LEQ ){.      /* 
f290: 49 66 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51  If SQLITE_NULLEQ
f2a0: 20 69 73 20 73 65 74 20 28 77 68 69 63 68 20 77   is set (which w
f2b0: 69 6c 6c 20 6f 6e 6c 79 20 68 61 70 70 65 6e 20  ill only happen 
f2c0: 69 66 20 74 68 65 20 6f 70 65 72 61 74 6f 72 20  if the operator 
f2d0: 69 73 0a 20 20 20 20 20 20 2a 2a 20 4f 50 5f 45  is.      ** OP_E
f2e0: 71 20 6f 72 20 4f 50 5f 4e 65 29 20 74 68 65 6e  q or OP_Ne) then
f2f0: 20 74 61 6b 65 20 74 68 65 20 6a 75 6d 70 20 6f   take the jump o
f300: 72 20 6e 6f 74 20 64 65 70 65 6e 64 69 6e 67 20  r not depending 
f310: 6f 6e 20 77 68 65 74 68 65 72 0a 20 20 20 20 20  on whether.     
f320: 20 2a 2a 20 6f 72 20 6e 6f 74 20 62 6f 74 68 20   ** or not both 
f330: 6f 70 65 72 61 6e 64 73 20 61 72 65 20 6e 75 6c  operands are nul
f340: 6c 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20  l..      */.    
f350: 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f    assert( pOp->o
f360: 70 63 6f 64 65 3d 3d 4f 50 5f 45 71 20 7c 7c 20  pcode==OP_Eq || 
f370: 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  pOp->opcode==OP_
f380: 4e 65 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65  Ne );.      asse
f390: 72 74 28 20 28 66 6c 61 67 73 31 20 26 20 4d 45  rt( (flags1 & ME
f3a0: 4d 5f 43 6c 65 61 72 65 64 29 3d 3d 30 20 29 3b  M_Cleared)==0 );
f3b0: 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 28  .      assert( (
f3c0: 70 4f 70 2d 3e 70 35 20 26 20 53 51 4c 49 54 45  pOp->p5 & SQLITE
f3d0: 5f 4a 55 4d 50 49 46 4e 55 4c 4c 29 3d 3d 30 20  _JUMPIFNULL)==0 
f3e0: 29 3b 0a 20 20 20 20 20 20 69 66 28 20 28 66 6c  );.      if( (fl
f3f0: 61 67 73 31 26 66 6c 61 67 73 33 26 4d 45 4d 5f  ags1&flags3&MEM_
f400: 4e 75 6c 6c 29 21 3d 30 0a 20 20 20 20 20 20 20  Null)!=0.       
f410: 26 26 20 28 66 6c 61 67 73 33 26 4d 45 4d 5f 43  && (flags3&MEM_C
f420: 6c 65 61 72 65 64 29 3d 3d 30 0a 20 20 20 20 20  leared)==0.     
f430: 20 29 7b 0a 20 20 20 20 20 20 20 20 72 65 73 20   ){.        res 
f440: 3d 20 30 3b 20 20 2f 2a 20 4f 70 65 72 61 6e 64  = 0;  /* Operand
f450: 73 20 61 72 65 20 65 71 75 61 6c 20 2a 2f 0a 20  s are equal */. 
f460: 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
f470: 20 20 20 20 72 65 73 20 3d 20 31 3b 20 20 2f 2a      res = 1;  /*
f480: 20 4f 70 65 72 61 6e 64 73 20 61 72 65 20 6e 6f   Operands are no
f490: 74 20 65 71 75 61 6c 20 2a 2f 0a 20 20 20 20 20  t equal */.     
f4a0: 20 7d 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20   }.    }else{.  
f4b0: 20 20 20 20 2f 2a 20 53 51 4c 49 54 45 5f 4e 55      /* SQLITE_NU
f4c0: 4c 4c 45 51 20 69 73 20 63 6c 65 61 72 20 61 6e  LLEQ is clear an
f4d0: 64 20 61 74 20 6c 65 61 73 74 20 6f 6e 65 20 6f  d at least one o
f4e0: 70 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c 2c 0a  perand is NULL,.
f4f0: 20 20 20 20 20 20 2a 2a 20 74 68 65 6e 20 74 68        ** then th
f500: 65 20 72 65 73 75 6c 74 20 69 73 20 61 6c 77 61  e result is alwa
f510: 79 73 20 4e 55 4c 4c 2e 0a 20 20 20 20 20 20 2a  ys NULL..      *
f520: 2a 20 54 68 65 20 6a 75 6d 70 20 69 73 20 74 61  * The jump is ta
f530: 6b 65 6e 20 69 66 20 74 68 65 20 53 51 4c 49 54  ken if the SQLIT
f540: 45 5f 4a 55 4d 50 49 46 4e 55 4c 4c 20 62 69 74  E_JUMPIFNULL bit
f550: 20 69 73 20 73 65 74 2e 0a 20 20 20 20 20 20 2a   is set..      *
f560: 2f 0a 20 20 20 20 20 20 69 66 28 20 70 4f 70 2d  /.      if( pOp-
f570: 3e 70 35 20 26 20 53 51 4c 49 54 45 5f 53 54 4f  >p5 & SQLITE_STO
f580: 52 45 50 32 20 29 7b 0a 20 20 20 20 20 20 20 20  REP2 ){.        
f590: 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pOut = &aMem[pOp
f5a0: 2d 3e 70 32 5d 3b 0a 20 20 20 20 20 20 20 20 69  ->p2];.        i
f5b0: 43 6f 6d 70 61 72 65 20 3d 20 31 3b 20 20 20 20  Compare = 1;    
f5c0: 2f 2a 20 4f 70 65 72 61 6e 64 73 20 61 72 65 20  /* Operands are 
f5d0: 6e 6f 74 20 65 71 75 61 6c 20 2a 2f 0a 20 20 20  not equal */.   
f5e0: 20 20 20 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43       memAboutToC
f5f0: 68 61 6e 67 65 28 70 2c 20 70 4f 75 74 29 3b 0a  hange(p, pOut);.
f600: 20 20 20 20 20 20 20 20 4d 65 6d 53 65 74 54 79          MemSetTy
f610: 70 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d  peFlag(pOut, MEM
f620: 5f 4e 75 6c 6c 29 3b 0a 20 20 20 20 20 20 20 20  _Null);.        
f630: 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70  REGISTER_TRACE(p
f640: 4f 70 2d 3e 70 32 2c 20 70 4f 75 74 29 3b 0a 20  Op->p2, pOut);. 
f650: 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
f660: 20 20 20 20 56 64 62 65 42 72 61 6e 63 68 54 61      VdbeBranchTa
f670: 6b 65 6e 28 32 2c 33 29 3b 0a 20 20 20 20 20 20  ken(2,3);.      
f680: 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 26 20    if( pOp->p5 & 
f690: 53 51 4c 49 54 45 5f 4a 55 4d 50 49 46 4e 55 4c  SQLITE_JUMPIFNUL
f6a0: 4c 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 67  L ){.          g
f6b0: 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a  oto jump_to_p2;.
f6c0: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
f6d0: 7d 0a 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20  }.      break;. 
f6e0: 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20 20     }.  }else{.  
f6f0: 20 20 2f 2a 20 4e 65 69 74 68 65 72 20 6f 70 65    /* Neither ope
f700: 72 61 6e 64 20 69 73 20 4e 55 4c 4c 2e 20 20 44  rand is NULL.  D
f710: 6f 20 61 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 20  o a comparison. 
f720: 2a 2f 0a 20 20 20 20 61 66 66 69 6e 69 74 79 20  */.    affinity 
f730: 3d 20 70 4f 70 2d 3e 70 35 20 26 20 53 51 4c 49  = pOp->p5 & SQLI
f740: 54 45 5f 41 46 46 5f 4d 41 53 4b 3b 0a 20 20 20  TE_AFF_MASK;.   
f750: 20 69 66 28 20 61 66 66 69 6e 69 74 79 3e 3d 53   if( affinity>=S
f760: 51 4c 49 54 45 5f 41 46 46 5f 4e 55 4d 45 52 49  QLITE_AFF_NUMERI
f770: 43 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20 28  C ){.      if( (
f780: 66 6c 61 67 73 31 20 7c 20 66 6c 61 67 73 33 29  flags1 | flags3)
f790: 26 4d 45 4d 5f 53 74 72 20 29 7b 0a 20 20 20 20  &MEM_Str ){.    
f7a0: 20 20 20 20 69 66 28 20 28 66 6c 61 67 73 31 20      if( (flags1 
f7b0: 26 20 28 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 52  & (MEM_Int|MEM_R
f7c0: 65 61 6c 7c 4d 45 4d 5f 53 74 72 29 29 3d 3d 4d  eal|MEM_Str))==M
f7d0: 45 4d 5f 53 74 72 20 29 7b 0a 20 20 20 20 20 20  EM_Str ){.      
f7e0: 20 20 20 20 61 70 70 6c 79 4e 75 6d 65 72 69 63      applyNumeric
f7f0: 41 66 66 69 6e 69 74 79 28 70 49 6e 31 2c 30 29  Affinity(pIn1,0)
f800: 3b 0a 20 20 20 20 20 20 20 20 20 20 74 65 73 74  ;.          test
f810: 63 61 73 65 28 20 66 6c 61 67 73 33 21 3d 70 49  case( flags3!=pI
f820: 6e 33 2d 3e 66 6c 61 67 73 20 29 3b 20 2f 2a 20  n3->flags ); /* 
f830: 50 6f 73 73 69 62 6c 65 20 69 66 20 70 49 6e 31  Possible if pIn1
f840: 3d 3d 70 49 6e 33 20 2a 2f 0a 20 20 20 20 20 20  ==pIn3 */.      
f850: 20 20 20 20 66 6c 61 67 73 33 20 3d 20 70 49 6e      flags3 = pIn
f860: 33 2d 3e 66 6c 61 67 73 3b 0a 20 20 20 20 20 20  3->flags;.      
f870: 20 20 7d 0a 20 20 20 20 20 20 20 20 69 66 28 20    }.        if( 
f880: 28 66 6c 61 67 73 33 20 26 20 28 4d 45 4d 5f 49  (flags3 & (MEM_I
f890: 6e 74 7c 4d 45 4d 5f 52 65 61 6c 7c 4d 45 4d 5f  nt|MEM_Real|MEM_
f8a0: 53 74 72 29 29 3d 3d 4d 45 4d 5f 53 74 72 20 29  Str))==MEM_Str )
f8b0: 7b 0a 20 20 20 20 20 20 20 20 20 20 61 70 70 6c  {.          appl
f8c0: 79 4e 75 6d 65 72 69 63 41 66 66 69 6e 69 74 79  yNumericAffinity
f8d0: 28 70 49 6e 33 2c 30 29 3b 0a 20 20 20 20 20 20  (pIn3,0);.      
f8e0: 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20 20    }.      }.    
f8f0: 20 20 2f 2a 20 48 61 6e 64 6c 65 20 74 68 65 20    /* Handle the 
f900: 63 6f 6d 6d 6f 6e 20 63 61 73 65 20 6f 66 20 69  common case of i
f910: 6e 74 65 67 65 72 20 63 6f 6d 70 61 72 69 73 6f  nteger compariso
f920: 6e 20 68 65 72 65 2c 20 61 73 20 61 6e 0a 20 20  n here, as an.  
f930: 20 20 20 20 2a 2a 20 6f 70 74 69 6d 69 7a 61 74      ** optimizat
f940: 69 6f 6e 2c 20 74 6f 20 61 76 6f 69 64 20 61 20  ion, to avoid a 
f950: 63 61 6c 6c 20 74 6f 20 73 71 6c 69 74 65 33 4d  call to sqlite3M
f960: 65 6d 43 6f 6d 70 61 72 65 28 29 20 2a 2f 0a 20  emCompare() */. 
f970: 20 20 20 20 20 69 66 28 20 28 70 49 6e 31 2d 3e       if( (pIn1->
f980: 66 6c 61 67 73 20 26 20 70 49 6e 33 2d 3e 66 6c  flags & pIn3->fl
f990: 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29 21 3d  ags & MEM_Int)!=
f9a0: 30 20 29 7b 0a 20 20 20 20 20 20 20 20 69 66 28  0 ){.        if(
f9b0: 20 70 49 6e 33 2d 3e 75 2e 69 20 3e 20 70 49 6e   pIn3->u.i > pIn
f9c0: 31 2d 3e 75 2e 69 20 29 7b 20 72 65 73 20 3d 20  1->u.i ){ res = 
f9d0: 2b 31 3b 20 67 6f 74 6f 20 63 6f 6d 70 61 72 65  +1; goto compare
f9e0: 5f 6f 70 3b 20 7d 0a 20 20 20 20 20 20 20 20 69  _op; }.        i
f9f0: 66 28 20 70 49 6e 33 2d 3e 75 2e 69 20 3c 20 70  f( pIn3->u.i < p
fa00: 49 6e 31 2d 3e 75 2e 69 20 29 7b 20 72 65 73 20  In1->u.i ){ res 
fa10: 3d 20 2d 31 3b 20 67 6f 74 6f 20 63 6f 6d 70 61  = -1; goto compa
fa20: 72 65 5f 6f 70 3b 20 7d 0a 20 20 20 20 20 20 20  re_op; }.       
fa30: 20 72 65 73 20 3d 20 30 3b 0a 20 20 20 20 20 20   res = 0;.      
fa40: 20 20 67 6f 74 6f 20 63 6f 6d 70 61 72 65 5f 6f    goto compare_o
fa50: 70 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  p;.      }.    }
fa60: 65 6c 73 65 20 69 66 28 20 61 66 66 69 6e 69 74  else if( affinit
fa70: 79 3d 3d 53 51 4c 49 54 45 5f 41 46 46 5f 54 45  y==SQLITE_AFF_TE
fa80: 58 54 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20  XT ){.      if( 
fa90: 28 66 6c 61 67 73 31 20 26 20 4d 45 4d 5f 53 74  (flags1 & MEM_St
faa0: 72 29 3d 3d 30 20 26 26 20 28 66 6c 61 67 73 31  r)==0 && (flags1
fab0: 20 26 20 28 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f   & (MEM_Int|MEM_
fac0: 52 65 61 6c 29 29 21 3d 30 20 29 7b 0a 20 20 20  Real))!=0 ){.   
fad0: 20 20 20 20 20 74 65 73 74 63 61 73 65 28 20 70       testcase( p
fae0: 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  In1->flags & MEM
faf0: 5f 49 6e 74 20 29 3b 0a 20 20 20 20 20 20 20 20  _Int );.        
fb00: 74 65 73 74 63 61 73 65 28 20 70 49 6e 31 2d 3e  testcase( pIn1->
fb10: 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52 65 61 6c  flags & MEM_Real
fb20: 20 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69   );.        sqli
fb30: 74 65 33 56 64 62 65 4d 65 6d 53 74 72 69 6e 67  te3VdbeMemString
fb40: 69 66 79 28 70 49 6e 31 2c 20 65 6e 63 6f 64 69  ify(pIn1, encodi
fb50: 6e 67 2c 20 31 29 3b 0a 20 20 20 20 20 20 20 20  ng, 1);.        
fb60: 74 65 73 74 63 61 73 65 28 20 28 66 6c 61 67 73  testcase( (flags
fb70: 31 26 4d 45 4d 5f 44 79 6e 29 20 21 3d 20 28 70  1&MEM_Dyn) != (p
fb80: 49 6e 31 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 44  In1->flags&MEM_D
fb90: 79 6e 29 20 29 3b 0a 20 20 20 20 20 20 20 20 66  yn) );.        f
fba0: 6c 61 67 73 31 20 3d 20 28 70 49 6e 31 2d 3e 66  lags1 = (pIn1->f
fbb0: 6c 61 67 73 20 26 20 7e 4d 45 4d 5f 54 79 70 65  lags & ~MEM_Type
fbc0: 4d 61 73 6b 29 20 7c 20 28 66 6c 61 67 73 31 20  Mask) | (flags1 
fbd0: 26 20 4d 45 4d 5f 54 79 70 65 4d 61 73 6b 29 3b  & MEM_TypeMask);
fbe0: 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28  .        assert(
fbf0: 20 70 49 6e 31 21 3d 70 49 6e 33 20 29 3b 0a 20   pIn1!=pIn3 );. 
fc00: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69 66 28       }.      if(
fc10: 20 28 66 6c 61 67 73 33 20 26 20 4d 45 4d 5f 53   (flags3 & MEM_S
fc20: 74 72 29 3d 3d 30 20 26 26 20 28 66 6c 61 67 73  tr)==0 && (flags
fc30: 33 20 26 20 28 4d 45 4d 5f 49 6e 74 7c 4d 45 4d  3 & (MEM_Int|MEM
fc40: 5f 52 65 61 6c 29 29 21 3d 30 20 29 7b 0a 20 20  _Real))!=0 ){.  
fc50: 20 20 20 20 20 20 74 65 73 74 63 61 73 65 28 20        testcase( 
fc60: 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn3->flags & ME
fc70: 4d 5f 49 6e 74 20 29 3b 0a 20 20 20 20 20 20 20  M_Int );.       
fc80: 20 74 65 73 74 63 61 73 65 28 20 70 49 6e 33 2d   testcase( pIn3-
fc90: 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52 65 61  >flags & MEM_Rea
fca0: 6c 20 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c  l );.        sql
fcb0: 69 74 65 33 56 64 62 65 4d 65 6d 53 74 72 69 6e  ite3VdbeMemStrin
fcc0: 67 69 66 79 28 70 49 6e 33 2c 20 65 6e 63 6f 64  gify(pIn3, encod
fcd0: 69 6e 67 2c 20 31 29 3b 0a 20 20 20 20 20 20 20  ing, 1);.       
fce0: 20 74 65 73 74 63 61 73 65 28 20 28 66 6c 61 67   testcase( (flag
fcf0: 73 33 26 4d 45 4d 5f 44 79 6e 29 20 21 3d 20 28  s3&MEM_Dyn) != (
fd00: 70 49 6e 33 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f  pIn3->flags&MEM_
fd10: 44 79 6e 29 20 29 3b 0a 20 20 20 20 20 20 20 20  Dyn) );.        
fd20: 66 6c 61 67 73 33 20 3d 20 28 70 49 6e 33 2d 3e  flags3 = (pIn3->
fd30: 66 6c 61 67 73 20 26 20 7e 4d 45 4d 5f 54 79 70  flags & ~MEM_Typ
fd40: 65 4d 61 73 6b 29 20 7c 20 28 66 6c 61 67 73 33  eMask) | (flags3
fd50: 20 26 20 4d 45 4d 5f 54 79 70 65 4d 61 73 6b 29   & MEM_TypeMask)
fd60: 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a  ;.      }.    }.
fd70: 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d      assert( pOp-
fd80: 3e 70 34 74 79 70 65 3d 3d 50 34 5f 43 4f 4c 4c  >p4type==P4_COLL
fd90: 53 45 51 20 7c 7c 20 70 4f 70 2d 3e 70 34 2e 70  SEQ || pOp->p4.p
fda0: 43 6f 6c 6c 3d 3d 30 20 29 3b 0a 20 20 20 20 72  Coll==0 );.    r
fdb0: 65 73 20 3d 20 73 71 6c 69 74 65 33 4d 65 6d 43  es = sqlite3MemC
fdc0: 6f 6d 70 61 72 65 28 70 49 6e 33 2c 20 70 49 6e  ompare(pIn3, pIn
fdd0: 31 2c 20 70 4f 70 2d 3e 70 34 2e 70 43 6f 6c 6c  1, pOp->p4.pColl
fde0: 29 3b 0a 20 20 7d 0a 63 6f 6d 70 61 72 65 5f 6f  );.  }.compare_o
fdf0: 70 3a 0a 20 20 2f 2a 20 41 74 20 74 68 69 73 20  p:.  /* At this 
fe00: 70 6f 69 6e 74 2c 20 72 65 73 20 69 73 20 6e 65  point, res is ne
fe10: 67 61 74 69 76 65 2c 20 7a 65 72 6f 2c 20 6f 72  gative, zero, or
fe20: 20 70 6f 73 69 74 69 76 65 20 69 66 20 72 65 67   positive if reg
fe30: 5b 50 31 5d 20 69 73 0a 20 20 2a 2a 20 6c 65 73  [P1] is.  ** les
fe40: 73 20 74 68 61 6e 2c 20 65 71 75 61 6c 20 74 6f  s than, equal to
fe50: 2c 20 6f 72 20 67 72 65 61 74 65 72 20 74 68 61  , or greater tha
fe60: 6e 20 72 65 67 5b 50 33 5d 2c 20 72 65 73 70 65  n reg[P3], respe
fe70: 63 74 69 76 65 6c 79 2e 20 20 43 6f 6d 70 75 74  ctively.  Comput
fe80: 65 0a 20 20 2a 2a 20 74 68 65 20 61 6e 73 77 65  e.  ** the answe
fe90: 72 20 74 6f 20 74 68 69 73 20 6f 70 65 72 61 74  r to this operat
fea0: 6f 72 20 69 6e 20 72 65 73 32 2c 20 64 65 70 65  or in res2, depe
feb0: 6e 64 69 6e 67 20 6f 6e 20 77 68 61 74 20 74 68  nding on what th
fec0: 65 20 63 6f 6d 70 61 72 69 73 6f 6e 0a 20 20 2a  e comparison.  *
fed0: 2a 20 6f 70 65 72 61 74 6f 72 20 61 63 74 75 61  * operator actua
fee0: 6c 6c 79 20 69 73 2e 20 20 54 68 65 20 6e 65 78  lly is.  The nex
fef0: 74 20 62 6c 6f 63 6b 20 6f 66 20 63 6f 64 65 20  t block of code 
ff00: 64 65 70 65 6e 64 73 20 6f 6e 20 74 68 65 20 66  depends on the f
ff10: 61 63 74 0a 20 20 2a 2a 20 74 68 61 74 20 74 68  act.  ** that th
ff20: 65 20 36 20 63 6f 6d 70 61 72 69 73 6f 6e 20 6f  e 6 comparison o
ff30: 70 65 72 61 74 6f 72 73 20 61 72 65 20 63 6f 6e  perators are con
ff40: 73 65 63 75 74 69 76 65 20 69 6e 74 65 67 65 72  secutive integer
ff50: 73 20 69 6e 20 74 68 69 73 0a 20 20 2a 2a 20 6f  s in this.  ** o
ff60: 72 64 65 72 3a 20 20 4e 45 2c 20 45 51 2c 20 47  rder:  NE, EQ, G
ff70: 54 2c 20 4c 45 2c 20 4c 54 2c 20 47 45 20 2a 2f  T, LE, LT, GE */
ff80: 0a 20 20 61 73 73 65 72 74 28 20 4f 50 5f 45 71  .  assert( OP_Eq
ff90: 3d 3d 4f 50 5f 4e 65 2b 31 20 29 3b 20 61 73 73  ==OP_Ne+1 ); ass
ffa0: 65 72 74 28 20 4f 50 5f 47 74 3d 3d 4f 50 5f 4e  ert( OP_Gt==OP_N
ffb0: 65 2b 32 20 29 3b 20 61 73 73 65 72 74 28 20 4f  e+2 ); assert( O
ffc0: 50 5f 4c 65 3d 3d 4f 50 5f 4e 65 2b 33 20 29 3b  P_Le==OP_Ne+3 );
ffd0: 0a 20 20 61 73 73 65 72 74 28 20 4f 50 5f 4c 74  .  assert( OP_Lt
ffe0: 3d 3d 4f 50 5f 4e 65 2b 34 20 29 3b 20 61 73 73  ==OP_Ne+4 ); ass
fff0: 65 72 74 28 20 4f 50 5f 47 65 3d 3d 4f 50 5f 4e  ert( OP_Ge==OP_N
10000 65 2b 35 20 29 3b 0a 20 20 69 66 28 20 72 65 73  e+5 );.  if( res
10010 3c 30 20 29 7b 20 20 20 20 20 20 20 20 20 20 20  <0 ){           
10020 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
10030 6e 65 2c 20 65 71 2c 20 67 74 2c 20 6c 65 2c 20  ne, eq, gt, le, 
10040 6c 74 2c 20 67 65 20 2a 2f 0a 20 20 20 20 73 74  lt, ge */.    st
10050 61 74 69 63 20 63 6f 6e 73 74 20 75 6e 73 69 67  atic const unsig
10060 6e 65 64 20 63 68 61 72 20 61 4c 54 62 5b 5d 20  ned char aLTb[] 
10070 3d 20 7b 20 31 2c 20 20 30 2c 20 20 30 2c 20 20  = { 1,  0,  0,  
10080 31 2c 20 20 31 2c 20 20 30 20 7d 3b 0a 20 20 20  1,  1,  0 };.   
10090 20 72 65 73 32 20 3d 20 61 4c 54 62 5b 70 4f 70   res2 = aLTb[pOp
100a0 2d 3e 6f 70 63 6f 64 65 20 2d 20 4f 50 5f 4e 65  ->opcode - OP_Ne
100b0 5d 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 72  ];.  }else if( r
100c0 65 73 3d 3d 30 20 29 7b 0a 20 20 20 20 73 74 61  es==0 ){.    sta
100d0 74 69 63 20 63 6f 6e 73 74 20 75 6e 73 69 67 6e  tic const unsign
100e0 65 64 20 63 68 61 72 20 61 45 51 62 5b 5d 20 3d  ed char aEQb[] =
100f0 20 7b 20 30 2c 20 20 31 2c 20 20 30 2c 20 20 31   { 0,  1,  0,  1
10100 2c 20 20 30 2c 20 20 31 20 7d 3b 0a 20 20 20 20  ,  0,  1 };.    
10110 72 65 73 32 20 3d 20 61 45 51 62 5b 70 4f 70 2d  res2 = aEQb[pOp-
10120 3e 6f 70 63 6f 64 65 20 2d 20 4f 50 5f 4e 65 5d  >opcode - OP_Ne]
10130 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 73  ;.  }else{.    s
10140 74 61 74 69 63 20 63 6f 6e 73 74 20 75 6e 73 69  tatic const unsi
10150 67 6e 65 64 20 63 68 61 72 20 61 47 54 62 5b 5d  gned char aGTb[]
10160 20 3d 20 7b 20 31 2c 20 20 30 2c 20 20 31 2c 20   = { 1,  0,  1, 
10170 20 30 2c 20 20 30 2c 20 20 31 20 7d 3b 0a 20 20   0,  0,  1 };.  
10180 20 20 72 65 73 32 20 3d 20 61 47 54 62 5b 70 4f    res2 = aGTb[pO
10190 70 2d 3e 6f 70 63 6f 64 65 20 2d 20 4f 50 5f 4e  p->opcode - OP_N
101a0 65 5d 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 55 6e  e];.  }..  /* Un
101b0 64 6f 20 61 6e 79 20 63 68 61 6e 67 65 73 20 6d  do any changes m
101c0 61 64 65 20 62 79 20 61 70 70 6c 79 41 66 66 69  ade by applyAffi
101d0 6e 69 74 79 28 29 20 74 6f 20 74 68 65 20 69 6e  nity() to the in
101e0 70 75 74 20 72 65 67 69 73 74 65 72 73 2e 20 2a  put registers. *
101f0 2f 0a 20 20 61 73 73 65 72 74 28 20 28 70 49 6e  /.  assert( (pIn
10200 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 44  1->flags & MEM_D
10210 79 6e 29 20 3d 3d 20 28 66 6c 61 67 73 31 20 26  yn) == (flags1 &
10220 20 4d 45 4d 5f 44 79 6e 29 20 29 3b 0a 20 20 70   MEM_Dyn) );.  p
10230 49 6e 31 2d 3e 66 6c 61 67 73 20 3d 20 66 6c 61  In1->flags = fla
10240 67 73 31 3b 0a 20 20 61 73 73 65 72 74 28 20 28  gs1;.  assert( (
10250 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn3->flags & ME
10260 4d 5f 44 79 6e 29 20 3d 3d 20 28 66 6c 61 67 73  M_Dyn) == (flags
10270 33 20 26 20 4d 45 4d 5f 44 79 6e 29 20 29 3b 0a  3 & MEM_Dyn) );.
10280 20 20 70 49 6e 33 2d 3e 66 6c 61 67 73 20 3d 20    pIn3->flags = 
10290 66 6c 61 67 73 33 3b 0a 0a 20 20 69 66 28 20 70  flags3;..  if( p
102a0 4f 70 2d 3e 70 35 20 26 20 53 51 4c 49 54 45 5f  Op->p5 & SQLITE_
102b0 53 54 4f 52 45 50 32 20 29 7b 0a 20 20 20 20 70  STOREP2 ){.    p
102c0 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  Out = &aMem[pOp-
102d0 3e 70 32 5d 3b 0a 20 20 20 20 69 43 6f 6d 70 61  >p2];.    iCompa
102e0 72 65 20 3d 20 72 65 73 3b 0a 20 20 20 20 69 66  re = res;.    if
102f0 28 20 28 70 4f 70 2d 3e 70 35 20 26 20 53 51 4c  ( (pOp->p5 & SQL
10300 49 54 45 5f 4b 45 45 50 4e 55 4c 4c 29 21 3d 30  ITE_KEEPNULL)!=0
10310 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 54 68 65   ){.      /* The
10320 20 4b 45 45 50 4e 55 4c 4c 20 66 6c 61 67 20 70   KEEPNULL flag p
10330 72 65 76 65 6e 74 73 20 4f 50 5f 45 71 20 66 72  revents OP_Eq fr
10340 6f 6d 20 6f 76 65 72 77 72 69 74 69 6e 67 20 61  om overwriting a
10350 20 4e 55 4c 4c 20 77 69 74 68 20 31 0a 20 20 20   NULL with 1.   
10360 20 20 20 2a 2a 20 61 6e 64 20 70 72 65 76 65 6e     ** and preven
10370 74 73 20 4f 50 5f 4e 65 20 66 72 6f 6d 20 6f 76  ts OP_Ne from ov
10380 65 72 77 72 69 74 69 6e 67 20 4e 55 4c 4c 20 77  erwriting NULL w
10390 69 74 68 20 30 2e 20 20 54 68 69 73 20 66 6c 61  ith 0.  This fla
103a0 67 0a 20 20 20 20 20 20 2a 2a 20 69 73 20 6f 6e  g.      ** is on
103b0 6c 79 20 75 73 65 64 20 69 6e 20 63 6f 6e 74 65  ly used in conte
103c0 78 74 73 20 77 68 65 72 65 20 65 69 74 68 65 72  xts where either
103d0 3a 0a 20 20 20 20 20 20 2a 2a 20 20 20 28 31 29  :.      **   (1)
103e0 20 6f 70 3d 3d 4f 50 5f 45 71 20 26 26 20 28 72   op==OP_Eq && (r
103f0 5b 50 32 5d 3d 3d 4e 55 4c 4c 20 7c 7c 20 72 5b  [P2]==NULL || r[
10400 50 32 5d 3d 3d 30 29 0a 20 20 20 20 20 20 2a 2a  P2]==0).      **
10410 20 20 20 28 32 29 20 6f 70 3d 3d 4f 50 5f 4e 65     (2) op==OP_Ne
10420 20 26 26 20 28 72 5b 50 32 5d 3d 3d 4e 55 4c 4c   && (r[P2]==NULL
10430 20 7c 7c 20 72 5b 50 32 5d 3d 3d 31 29 0a 20 20   || r[P2]==1).  
10440 20 20 20 20 2a 2a 20 54 68 65 72 65 66 6f 72 65      ** Therefore
10450 20 69 74 20 69 73 20 6e 6f 74 20 6e 65 63 65 73   it is not neces
10460 73 61 72 79 20 74 6f 20 63 68 65 63 6b 20 74 68  sary to check th
10470 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 72 5b 50  e content of r[P
10480 32 5d 20 66 6f 72 0a 20 20 20 20 20 20 2a 2a 20  2] for.      ** 
10490 4e 55 4c 4c 2e 20 2a 2f 0a 20 20 20 20 20 20 61  NULL. */.      a
104a0 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f  ssert( pOp->opco
104b0 64 65 3d 3d 4f 50 5f 4e 65 20 7c 7c 20 70 4f 70  de==OP_Ne || pOp
104c0 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 45 71 20  ->opcode==OP_Eq 
104d0 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  );.      assert(
104e0 20 72 65 73 32 3d 3d 30 20 7c 7c 20 72 65 73 32   res2==0 || res2
104f0 3d 3d 31 20 29 3b 0a 20 20 20 20 20 20 74 65 73  ==1 );.      tes
10500 74 63 61 73 65 28 20 72 65 73 32 3d 3d 30 20 26  tcase( res2==0 &
10510 26 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f  & pOp->opcode==O
10520 50 5f 45 71 20 29 3b 0a 20 20 20 20 20 20 74 65  P_Eq );.      te
10530 73 74 63 61 73 65 28 20 72 65 73 32 3d 3d 31 20  stcase( res2==1 
10540 26 26 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d  && pOp->opcode==
10550 4f 50 5f 45 71 20 29 3b 0a 20 20 20 20 20 20 74  OP_Eq );.      t
10560 65 73 74 63 61 73 65 28 20 72 65 73 32 3d 3d 30  estcase( res2==0
10570 20 26 26 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d   && pOp->opcode=
10580 3d 4f 50 5f 4e 65 20 29 3b 0a 20 20 20 20 20 20  =OP_Ne );.      
10590 74 65 73 74 63 61 73 65 28 20 72 65 73 32 3d 3d  testcase( res2==
105a0 31 20 26 26 20 70 4f 70 2d 3e 6f 70 63 6f 64 65  1 && pOp->opcode
105b0 3d 3d 4f 50 5f 4e 65 20 29 3b 0a 20 20 20 20 20  ==OP_Ne );.     
105c0 20 69 66 28 20 28 70 4f 70 2d 3e 6f 70 63 6f 64   if( (pOp->opcod
105d0 65 3d 3d 4f 50 5f 45 71 29 3d 3d 72 65 73 32 20  e==OP_Eq)==res2 
105e0 29 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 20  ) break;.    }. 
105f0 20 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61     memAboutToCha
10600 6e 67 65 28 70 2c 20 70 4f 75 74 29 3b 0a 20 20  nge(p, pOut);.  
10610 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67    MemSetTypeFlag
10620 28 70 4f 75 74 2c 20 4d 45 4d 5f 49 6e 74 29 3b  (pOut, MEM_Int);
10630 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d  .    pOut->u.i =
10640 20 72 65 73 32 3b 0a 20 20 20 20 52 45 47 49 53   res2;.    REGIS
10650 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70  TER_TRACE(pOp->p
10660 32 2c 20 70 4f 75 74 29 3b 0a 20 20 7d 65 6c 73  2, pOut);.  }els
10670 65 7b 0a 20 20 20 20 56 64 62 65 42 72 61 6e 63  e{.    VdbeBranc
10680 68 54 61 6b 65 6e 28 72 65 73 21 3d 30 2c 20 28  hTaken(res!=0, (
10690 70 4f 70 2d 3e 70 35 20 26 20 53 51 4c 49 54 45  pOp->p5 & SQLITE
106a0 5f 4e 55 4c 4c 45 51 29 3f 32 3a 33 29 3b 0a 20  _NULLEQ)?2:3);. 
106b0 20 20 20 69 66 28 20 72 65 73 32 20 29 7b 0a 20     if( res2 ){. 
106c0 20 20 20 20 20 67 6f 74 6f 20 6a 75 6d 70 5f 74       goto jump_t
106d0 6f 5f 70 32 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a  o_p2;.    }.  }.
106e0 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
106f0 70 63 6f 64 65 3a 20 45 6c 73 65 4e 6f 74 45 71  pcode: ElseNotEq
10700 20 2a 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a   * P2 * * *.**.*
10710 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 6d 75  * This opcode mu
10720 73 74 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 66  st immediately f
10730 6f 6c 6c 6f 77 20 61 6e 20 4f 50 5f 4c 74 20 6f  ollow an OP_Lt o
10740 72 20 4f 50 5f 47 74 20 63 6f 6d 70 61 72 69 73  r OP_Gt comparis
10750 6f 6e 20 6f 70 65 72 61 74 6f 72 2e 0a 2a 2a 20  on operator..** 
10760 49 66 20 72 65 73 75 6c 74 20 6f 66 20 61 6e 20  If result of an 
10770 4f 50 5f 45 71 20 63 6f 6d 70 61 72 69 73 6f 6e  OP_Eq comparison
10780 20 6f 6e 20 74 68 65 20 73 61 6d 65 20 74 77 6f   on the same two
10790 20 6f 70 65 72 61 6e 64 73 0a 2a 2a 20 77 6f 75   operands.** wou
107a0 6c 64 20 68 61 76 65 20 62 65 20 4e 55 4c 4c 20  ld have be NULL 
107b0 6f 72 20 66 61 6c 73 65 20 28 30 29 2c 20 74 68  or false (0), th
107c0 65 6e 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20  en then jump to 
107d0 50 32 2e 20 0a 2a 2a 20 49 66 20 74 68 65 20 72  P2. .** If the r
107e0 65 73 75 6c 74 20 6f 66 20 61 6e 20 4f 50 5f 45  esult of an OP_E
107f0 71 20 63 6f 6d 70 61 72 69 73 6f 6e 20 6f 6e 20  q comparison on 
10800 74 68 65 20 74 77 6f 20 70 72 65 76 69 6f 75 73  the two previous
10810 20 6f 70 65 72 61 6e 64 73 0a 2a 2a 20 77 6f 75   operands.** wou
10820 6c 64 20 68 61 76 65 20 62 65 65 6e 20 74 72 75  ld have been tru
10830 65 20 28 31 29 2c 20 74 68 65 6e 20 66 61 6c 6c  e (1), then fall
10840 20 74 68 72 6f 75 67 68 2e 0a 2a 2f 0a 63 61 73   through..*/.cas
10850 65 20 4f 50 5f 45 6c 73 65 4e 6f 74 45 71 3a 20  e OP_ElseNotEq: 
10860 7b 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20  {       /* same 
10870 61 73 20 54 4b 5f 45 53 43 41 50 45 2c 20 6a 75  as TK_ESCAPE, ju
10880 6d 70 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20  mp */.  assert( 
10890 70 4f 70 3e 61 4f 70 20 29 3b 0a 20 20 61 73 73  pOp>aOp );.  ass
108a0 65 72 74 28 20 70 4f 70 5b 2d 31 5d 2e 6f 70 63  ert( pOp[-1].opc
108b0 6f 64 65 3d 3d 4f 50 5f 4c 74 20 7c 7c 20 70 4f  ode==OP_Lt || pO
108c0 70 5b 2d 31 5d 2e 6f 70 63 6f 64 65 3d 3d 4f 50  p[-1].opcode==OP
108d0 5f 47 74 20 29 3b 0a 20 20 61 73 73 65 72 74 28  _Gt );.  assert(
108e0 20 70 4f 70 5b 2d 31 5d 2e 70 35 20 26 20 53 51   pOp[-1].p5 & SQ
108f0 4c 49 54 45 5f 53 54 4f 52 45 50 32 20 29 3b 0a  LITE_STOREP2 );.
10900 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65    VdbeBranchTake
10910 6e 28 69 43 6f 6d 70 61 72 65 21 3d 30 2c 20 32  n(iCompare!=0, 2
10920 29 3b 0a 20 20 69 66 28 20 69 43 6f 6d 70 61 72  );.  if( iCompar
10930 65 21 3d 30 20 29 20 67 6f 74 6f 20 6a 75 6d 70  e!=0 ) goto jump
10940 5f 74 6f 5f 70 32 3b 0a 20 20 62 72 65 61 6b 3b  _to_p2;.  break;
10950 0a 7d 0a 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  .}.../* Opcode: 
10960 50 65 72 6d 75 74 61 74 69 6f 6e 20 2a 20 2a 20  Permutation * * 
10970 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 53 65 74  * P4 *.**.** Set
10980 20 74 68 65 20 70 65 72 6d 75 74 61 74 69 6f 6e   the permutation
10990 20 75 73 65 64 20 62 79 20 74 68 65 20 4f 50 5f   used by the OP_
109a0 43 6f 6d 70 61 72 65 20 6f 70 65 72 61 74 6f 72  Compare operator
109b0 20 69 6e 20 74 68 65 20 6e 65 78 74 0a 2a 2a 20   in the next.** 
109c0 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20 20 54 68  instruction.  Th
109d0 65 20 70 65 72 6d 75 74 61 74 69 6f 6e 20 69 73  e permutation is
109e0 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20 50   stored in the P
109f0 34 20 6f 70 65 72 61 6e 64 2e 0a 2a 2a 0a 2a 2a  4 operand..**.**
10a00 20 54 68 65 20 70 65 72 6d 75 74 61 74 69 6f 6e   The permutation
10a10 20 69 73 20 6f 6e 6c 79 20 76 61 6c 69 64 20 75   is only valid u
10a20 6e 74 69 6c 20 74 68 65 20 6e 65 78 74 20 4f 50  ntil the next OP
10a30 5f 43 6f 6d 70 61 72 65 20 74 68 61 74 20 68 61  _Compare that ha
10a40 73 0a 2a 2a 20 74 68 65 20 4f 50 46 4c 41 47 5f  s.** the OPFLAG_
10a50 50 45 52 4d 55 54 45 20 62 69 74 20 73 65 74 20  PERMUTE bit set 
10a60 69 6e 20 50 35 2e 20 54 79 70 69 63 61 6c 6c 79  in P5. Typically
10a70 20 74 68 65 20 4f 50 5f 50 65 72 6d 75 74 61 74   the OP_Permutat
10a80 69 6f 6e 20 73 68 6f 75 6c 64 20 0a 2a 2a 20 6f  ion should .** o
10a90 63 63 75 72 20 69 6d 6d 65 64 69 61 74 65 6c 79  ccur immediately
10aa0 20 70 72 69 6f 72 20 74 6f 20 74 68 65 20 4f 50   prior to the OP
10ab0 5f 43 6f 6d 70 61 72 65 2e 0a 2a 2a 0a 2a 2a 20  _Compare..**.** 
10ac0 54 68 65 20 66 69 72 73 74 20 69 6e 74 65 67 65  The first intege
10ad0 72 20 69 6e 20 74 68 65 20 50 34 20 69 6e 74 65  r in the P4 inte
10ae0 67 65 72 20 61 72 72 61 79 20 69 73 20 74 68 65  ger array is the
10af0 20 6c 65 6e 67 74 68 20 6f 66 20 74 68 65 20 61   length of the a
10b00 72 72 61 79 0a 2a 2a 20 61 6e 64 20 64 6f 65 73  rray.** and does
10b10 20 6e 6f 74 20 62 65 63 6f 6d 65 20 70 61 72 74   not become part
10b20 20 6f 66 20 74 68 65 20 70 65 72 6d 75 74 61 74   of the permutat
10b30 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ion..*/.case OP_
10b40 50 65 72 6d 75 74 61 74 69 6f 6e 3a 20 7b 0a 20  Permutation: {. 
10b50 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34   assert( pOp->p4
10b60 74 79 70 65 3d 3d 50 34 5f 49 4e 54 41 52 52 41  type==P4_INTARRA
10b70 59 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  Y );.  assert( p
10b80 4f 70 2d 3e 70 34 2e 61 69 20 29 3b 0a 20 20 61  Op->p4.ai );.  a
10b90 73 73 65 72 74 28 20 70 4f 70 5b 31 5d 2e 6f 70  ssert( pOp[1].op
10ba0 63 6f 64 65 3d 3d 4f 50 5f 43 6f 6d 70 61 72 65  code==OP_Compare
10bb0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   );.  assert( pO
10bc0 70 5b 31 5d 2e 70 35 20 26 20 4f 50 46 4c 41 47  p[1].p5 & OPFLAG
10bd0 5f 50 45 52 4d 55 54 45 20 29 3b 0a 20 20 62 72  _PERMUTE );.  br
10be0 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
10bf0 65 3a 20 43 6f 6d 70 61 72 65 20 50 31 20 50 32  e: Compare P1 P2
10c00 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e   P3 P4 P5.** Syn
10c10 6f 70 73 69 73 3a 20 72 5b 50 31 40 50 33 5d 20  opsis: r[P1@P3] 
10c20 3c 2d 3e 20 72 5b 50 32 40 50 33 5d 0a 2a 2a 0a  <-> r[P2@P3].**.
10c30 2a 2a 20 43 6f 6d 70 61 72 65 20 74 77 6f 20 76  ** Compare two v
10c40 65 63 74 6f 72 73 20 6f 66 20 72 65 67 69 73 74  ectors of regist
10c50 65 72 73 20 69 6e 20 72 65 67 28 50 31 29 2e 2e  ers in reg(P1)..
10c60 72 65 67 28 50 31 2b 50 33 2d 31 29 20 28 63 61  reg(P1+P3-1) (ca
10c70 6c 6c 20 74 68 69 73 0a 2a 2a 20 76 65 63 74 6f  ll this.** vecto
10c80 72 20 22 41 22 29 20 61 6e 64 20 69 6e 20 72 65  r "A") and in re
10c90 67 28 50 32 29 2e 2e 72 65 67 28 50 32 2b 50 33  g(P2)..reg(P2+P3
10ca0 2d 31 29 20 28 22 42 22 29 2e 20 20 53 61 76 65  -1) ("B").  Save
10cb0 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66 0a 2a   the result of.*
10cc0 2a 20 74 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e  * the comparison
10cd0 20 66 6f 72 20 75 73 65 20 62 79 20 74 68 65 20   for use by the 
10ce0 6e 65 78 74 20 4f 50 5f 4a 75 6d 70 20 69 6e 73  next OP_Jump ins
10cf0 74 72 75 63 74 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  truct..**.** If 
10d00 50 35 20 68 61 73 20 74 68 65 20 4f 50 46 4c 41  P5 has the OPFLA
10d10 47 5f 50 45 52 4d 55 54 45 20 62 69 74 20 73 65  G_PERMUTE bit se
10d20 74 2c 20 74 68 65 6e 20 74 68 65 20 6f 72 64 65  t, then the orde
10d30 72 20 6f 66 20 63 6f 6d 70 61 72 69 73 6f 6e 20  r of comparison 
10d40 69 73 0a 2a 2a 20 64 65 74 65 72 6d 69 6e 65 64  is.** determined
10d50 20 62 79 20 74 68 65 20 6d 6f 73 74 20 72 65 63   by the most rec
10d60 65 6e 74 20 4f 50 5f 50 65 72 6d 75 74 61 74 69  ent OP_Permutati
10d70 6f 6e 20 6f 70 65 72 61 74 6f 72 2e 20 20 49 66  on operator.  If
10d80 20 74 68 65 0a 2a 2a 20 4f 50 46 4c 41 47 5f 50   the.** OPFLAG_P
10d90 45 52 4d 55 54 45 20 62 69 74 20 69 73 20 63 6c  ERMUTE bit is cl
10da0 65 61 72 2c 20 74 68 65 6e 20 72 65 67 69 73 74  ear, then regist
10db0 65 72 20 61 72 65 20 63 6f 6d 70 61 72 65 64 20  er are compared 
10dc0 69 6e 20 73 65 71 75 65 6e 74 69 61 6c 0a 2a 2a  in sequential.**
10dd0 20 6f 72 64 65 72 2e 0a 2a 2a 0a 2a 2a 20 50 34   order..**.** P4
10de0 20 69 73 20 61 20 4b 65 79 49 6e 66 6f 20 73 74   is a KeyInfo st
10df0 72 75 63 74 75 72 65 20 74 68 61 74 20 64 65 66  ructure that def
10e00 69 6e 65 73 20 63 6f 6c 6c 61 74 69 6e 67 20 73  ines collating s
10e10 65 71 75 65 6e 63 65 73 20 61 6e 64 20 73 6f 72  equences and sor
10e20 74 0a 2a 2a 20 6f 72 64 65 72 73 20 66 6f 72 20  t.** orders for 
10e30 74 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 20  the comparison. 
10e40 20 54 68 65 20 70 65 72 6d 75 74 61 74 69 6f 6e   The permutation
10e50 20 61 70 70 6c 69 65 73 20 74 6f 20 72 65 67 69   applies to regi
10e60 73 74 65 72 73 0a 2a 2a 20 6f 6e 6c 79 2e 20 20  sters.** only.  
10e70 54 68 65 20 4b 65 79 49 6e 66 6f 20 65 6c 65 6d  The KeyInfo elem
10e80 65 6e 74 73 20 61 72 65 20 75 73 65 64 20 73 65  ents are used se
10e90 71 75 65 6e 74 69 61 6c 6c 79 2e 0a 2a 2a 0a 2a  quentially..**.*
10ea0 2a 20 54 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e  * The comparison
10eb0 20 69 73 20 61 20 73 6f 72 74 20 63 6f 6d 70 61   is a sort compa
10ec0 72 69 73 6f 6e 2c 20 73 6f 20 4e 55 4c 4c 73 20  rison, so NULLs 
10ed0 63 6f 6d 70 61 72 65 20 65 71 75 61 6c 2c 0a 2a  compare equal,.*
10ee0 2a 20 4e 55 4c 4c 73 20 61 72 65 20 6c 65 73 73  * NULLs are less
10ef0 20 74 68 61 6e 20 6e 75 6d 62 65 72 73 2c 20 6e   than numbers, n
10f00 75 6d 62 65 72 73 20 61 72 65 20 6c 65 73 73 20  umbers are less 
10f10 74 68 61 6e 20 73 74 72 69 6e 67 73 2c 0a 2a 2a  than strings,.**
10f20 20 61 6e 64 20 73 74 72 69 6e 67 73 20 61 72 65   and strings are
10f30 20 6c 65 73 73 20 74 68 61 6e 20 62 6c 6f 62 73   less than blobs
10f40 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 6f 6d  ..*/.case OP_Com
10f50 70 61 72 65 3a 20 7b 0a 20 20 69 6e 74 20 6e 3b  pare: {.  int n;
10f60 0a 20 20 69 6e 74 20 69 3b 0a 20 20 69 6e 74 20  .  int i;.  int 
10f70 70 31 3b 0a 20 20 69 6e 74 20 70 32 3b 0a 20 20  p1;.  int p2;.  
10f80 63 6f 6e 73 74 20 4b 65 79 49 6e 66 6f 20 2a 70  const KeyInfo *p
10f90 4b 65 79 49 6e 66 6f 3b 0a 20 20 69 6e 74 20 69  KeyInfo;.  int i
10fa0 64 78 3b 0a 20 20 43 6f 6c 6c 53 65 71 20 2a 70  dx;.  CollSeq *p
10fb0 43 6f 6c 6c 3b 20 20 20 20 2f 2a 20 43 6f 6c 6c  Coll;    /* Coll
10fc0 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 20 74  ating sequence t
10fd0 6f 20 75 73 65 20 6f 6e 20 74 68 69 73 20 74 65  o use on this te
10fe0 72 6d 20 2a 2f 0a 20 20 69 6e 74 20 62 52 65 76  rm */.  int bRev
10ff0 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72  ;          /* Tr
11000 75 65 20 66 6f 72 20 44 45 53 43 45 4e 44 49 4e  ue for DESCENDIN
11010 47 20 73 6f 72 74 20 6f 72 64 65 72 20 2a 2f 0a  G sort order */.
11020 20 20 69 6e 74 20 2a 61 50 65 72 6d 75 74 65 3b    int *aPermute;
11030 20 20 20 20 20 2f 2a 20 54 68 65 20 70 65 72 6d       /* The perm
11040 75 74 61 74 69 6f 6e 20 2a 2f 0a 0a 20 20 69 66  utation */..  if
11050 28 20 28 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46  ( (pOp->p5 & OPF
11060 4c 41 47 5f 50 45 52 4d 55 54 45 29 3d 3d 30 20  LAG_PERMUTE)==0 
11070 29 7b 0a 20 20 20 20 61 50 65 72 6d 75 74 65 20  ){.    aPermute 
11080 3d 20 30 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  = 0;.  }else{.  
11090 20 20 61 73 73 65 72 74 28 20 70 4f 70 3e 61 4f    assert( pOp>aO
110a0 70 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  p );.    assert(
110b0 20 70 4f 70 5b 2d 31 5d 2e 6f 70 63 6f 64 65 3d   pOp[-1].opcode=
110c0 3d 4f 50 5f 50 65 72 6d 75 74 61 74 69 6f 6e 20  =OP_Permutation 
110d0 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  );.    assert( p
110e0 4f 70 5b 2d 31 5d 2e 70 34 74 79 70 65 3d 3d 50  Op[-1].p4type==P
110f0 34 5f 49 4e 54 41 52 52 41 59 20 29 3b 0a 20 20  4_INTARRAY );.  
11100 20 20 61 50 65 72 6d 75 74 65 20 3d 20 70 4f 70    aPermute = pOp
11110 5b 2d 31 5d 2e 70 34 2e 61 69 20 2b 20 31 3b 0a  [-1].p4.ai + 1;.
11120 20 20 20 20 61 73 73 65 72 74 28 20 61 50 65 72      assert( aPer
11130 6d 75 74 65 21 3d 30 20 29 3b 0a 20 20 7d 0a 20  mute!=0 );.  }. 
11140 20 6e 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20   n = pOp->p3;.  
11150 70 4b 65 79 49 6e 66 6f 20 3d 20 70 4f 70 2d 3e  pKeyInfo = pOp->
11160 70 34 2e 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 61  p4.pKeyInfo;.  a
11170 73 73 65 72 74 28 20 6e 3e 30 20 29 3b 0a 20 20  ssert( n>0 );.  
11180 61 73 73 65 72 74 28 20 70 4b 65 79 49 6e 66 6f  assert( pKeyInfo
11190 21 3d 30 20 29 3b 0a 20 20 70 31 20 3d 20 70 4f  !=0 );.  p1 = pO
111a0 70 2d 3e 70 31 3b 0a 20 20 70 32 20 3d 20 70 4f  p->p1;.  p2 = pO
111b0 70 2d 3e 70 32 3b 0a 23 69 66 64 65 66 20 53 51  p->p2;.#ifdef SQ
111c0 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 69 66 28  LITE_DEBUG.  if(
111d0 20 61 50 65 72 6d 75 74 65 20 29 7b 0a 20 20 20   aPermute ){.   
111e0 20 69 6e 74 20 6b 2c 20 6d 78 20 3d 20 30 3b 0a   int k, mx = 0;.
111f0 20 20 20 20 66 6f 72 28 6b 3d 30 3b 20 6b 3c 6e      for(k=0; k<n
11200 3b 20 6b 2b 2b 29 20 69 66 28 20 61 50 65 72 6d  ; k++) if( aPerm
11210 75 74 65 5b 6b 5d 3e 6d 78 20 29 20 6d 78 20 3d  ute[k]>mx ) mx =
11220 20 61 50 65 72 6d 75 74 65 5b 6b 5d 3b 0a 20 20   aPermute[k];.  
11230 20 20 61 73 73 65 72 74 28 20 70 31 3e 30 20 26    assert( p1>0 &
11240 26 20 70 31 2b 6d 78 3c 3d 28 70 2d 3e 6e 4d 65  & p1+mx<=(p->nMe
11250 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72  m+1 - p->nCursor
11260 29 2b 31 20 29 3b 0a 20 20 20 20 61 73 73 65 72  )+1 );.    asser
11270 74 28 20 70 32 3e 30 20 26 26 20 70 32 2b 6d 78  t( p2>0 && p2+mx
11280 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70  <=(p->nMem+1 - p
11290 2d 3e 6e 43 75 72 73 6f 72 29 2b 31 20 29 3b 0a  ->nCursor)+1 );.
112a0 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73 73    }else{.    ass
112b0 65 72 74 28 20 70 31 3e 30 20 26 26 20 70 31 2b  ert( p1>0 && p1+
112c0 6e 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20  n<=(p->nMem+1 - 
112d0 70 2d 3e 6e 43 75 72 73 6f 72 29 2b 31 20 29 3b  p->nCursor)+1 );
112e0 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 32 3e  .    assert( p2>
112f0 30 20 26 26 20 70 32 2b 6e 3c 3d 28 70 2d 3e 6e  0 && p2+n<=(p->n
11300 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73  Mem+1 - p->nCurs
11310 6f 72 29 2b 31 20 29 3b 0a 20 20 7d 0a 23 65 6e  or)+1 );.  }.#en
11320 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 44 45  dif /* SQLITE_DE
11330 42 55 47 20 2a 2f 0a 20 20 66 6f 72 28 69 3d 30  BUG */.  for(i=0
11340 3b 20 69 3c 6e 3b 20 69 2b 2b 29 7b 0a 20 20 20  ; i<n; i++){.   
11350 20 69 64 78 20 3d 20 61 50 65 72 6d 75 74 65 20   idx = aPermute 
11360 3f 20 61 50 65 72 6d 75 74 65 5b 69 5d 20 3a 20  ? aPermute[i] : 
11370 69 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 6d  i;.    assert( m
11380 65 6d 49 73 56 61 6c 69 64 28 26 61 4d 65 6d 5b  emIsValid(&aMem[
11390 70 31 2b 69 64 78 5d 29 20 29 3b 0a 20 20 20 20  p1+idx]) );.    
113a0 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c  assert( memIsVal
113b0 69 64 28 26 61 4d 65 6d 5b 70 32 2b 69 64 78 5d  id(&aMem[p2+idx]
113c0 29 20 29 3b 0a 20 20 20 20 52 45 47 49 53 54 45  ) );.    REGISTE
113d0 52 5f 54 52 41 43 45 28 70 31 2b 69 64 78 2c 20  R_TRACE(p1+idx, 
113e0 26 61 4d 65 6d 5b 70 31 2b 69 64 78 5d 29 3b 0a  &aMem[p1+idx]);.
113f0 20 20 20 20 52 45 47 49 53 54 45 52 5f 54 52 41      REGISTER_TRA
11400 43 45 28 70 32 2b 69 64 78 2c 20 26 61 4d 65 6d  CE(p2+idx, &aMem
11410 5b 70 32 2b 69 64 78 5d 29 3b 0a 20 20 20 20 61  [p2+idx]);.    a
11420 73 73 65 72 74 28 20 69 3c 70 4b 65 79 49 6e 66  ssert( i<pKeyInf
11430 6f 2d 3e 6e 4b 65 79 46 69 65 6c 64 20 29 3b 0a  o->nKeyField );.
11440 20 20 20 20 70 43 6f 6c 6c 20 3d 20 70 4b 65 79      pColl = pKey
11450 49 6e 66 6f 2d 3e 61 43 6f 6c 6c 5b 69 5d 3b 0a  Info->aColl[i];.
11460 20 20 20 20 62 52 65 76 20 3d 20 70 4b 65 79 49      bRev = pKeyI
11470 6e 66 6f 2d 3e 61 53 6f 72 74 4f 72 64 65 72 5b  nfo->aSortOrder[
11480 69 5d 3b 0a 20 20 20 20 69 43 6f 6d 70 61 72 65  i];.    iCompare
11490 20 3d 20 73 71 6c 69 74 65 33 4d 65 6d 43 6f 6d   = sqlite3MemCom
114a0 70 61 72 65 28 26 61 4d 65 6d 5b 70 31 2b 69 64  pare(&aMem[p1+id
114b0 78 5d 2c 20 26 61 4d 65 6d 5b 70 32 2b 69 64 78  x], &aMem[p2+idx
114c0 5d 2c 20 70 43 6f 6c 6c 29 3b 0a 20 20 20 20 69  ], pColl);.    i
114d0 66 28 20 69 43 6f 6d 70 61 72 65 20 29 7b 0a 20  f( iCompare ){. 
114e0 20 20 20 20 20 69 66 28 20 62 52 65 76 20 29 20       if( bRev ) 
114f0 69 43 6f 6d 70 61 72 65 20 3d 20 2d 69 43 6f 6d  iCompare = -iCom
11500 70 61 72 65 3b 0a 20 20 20 20 20 20 62 72 65 61  pare;.      brea
11510 6b 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62  k;.    }.  }.  b
11520 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
11530 64 65 3a 20 4a 75 6d 70 20 50 31 20 50 32 20 50  de: Jump P1 P2 P
11540 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70  3 * *.**.** Jump
11550 20 74 6f 20 74 68 65 20 69 6e 73 74 72 75 63 74   to the instruct
11560 69 6f 6e 20 61 74 20 61 64 64 72 65 73 73 20 50  ion at address P
11570 31 2c 20 50 32 2c 20 6f 72 20 50 33 20 64 65 70  1, P2, or P3 dep
11580 65 6e 64 69 6e 67 20 6f 6e 20 77 68 65 74 68 65  ending on whethe
11590 72 0a 2a 2a 20 69 6e 20 74 68 65 20 6d 6f 73 74  r.** in the most
115a0 20 72 65 63 65 6e 74 20 4f 50 5f 43 6f 6d 70 61   recent OP_Compa
115b0 72 65 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 74  re instruction t
115c0 68 65 20 50 31 20 76 65 63 74 6f 72 20 77 61 73  he P1 vector was
115d0 20 6c 65 73 73 20 74 68 61 6e 0a 2a 2a 20 65 71   less than.** eq
115e0 75 61 6c 20 74 6f 2c 20 6f 72 20 67 72 65 61 74  ual to, or great
115f0 65 72 20 74 68 61 6e 20 74 68 65 20 50 32 20 76  er than the P2 v
11600 65 63 74 6f 72 2c 20 72 65 73 70 65 63 74 69 76  ector, respectiv
11610 65 6c 79 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ely..*/.case OP_
11620 4a 75 6d 70 3a 20 7b 20 20 20 20 20 20 20 20 20  Jump: {         
11630 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20      /* jump */. 
11640 20 69 66 28 20 69 43 6f 6d 70 61 72 65 3c 30 20   if( iCompare<0 
11650 29 7b 0a 20 20 20 20 56 64 62 65 42 72 61 6e 63  ){.    VdbeBranc
11660 68 54 61 6b 65 6e 28 30 2c 33 29 3b 20 70 4f 70  hTaken(0,3); pOp
11670 20 3d 20 26 61 4f 70 5b 70 4f 70 2d 3e 70 31 20   = &aOp[pOp->p1 
11680 2d 20 31 5d 3b 0a 20 20 7d 65 6c 73 65 20 69 66  - 1];.  }else if
11690 28 20 69 43 6f 6d 70 61 72 65 3d 3d 30 20 29 7b  ( iCompare==0 ){
116a0 0a 20 20 20 20 56 64 62 65 42 72 61 6e 63 68 54  .    VdbeBranchT
116b0 61 6b 65 6e 28 31 2c 33 29 3b 20 70 4f 70 20 3d  aken(1,3); pOp =
116c0 20 26 61 4f 70 5b 70 4f 70 2d 3e 70 32 20 2d 20   &aOp[pOp->p2 - 
116d0 31 5d 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  1];.  }else{.   
116e0 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e   VdbeBranchTaken
116f0 28 32 2c 33 29 3b 20 70 4f 70 20 3d 20 26 61 4f  (2,3); pOp = &aO
11700 70 5b 70 4f 70 2d 3e 70 33 20 2d 20 31 5d 3b 0a  p[pOp->p3 - 1];.
11710 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
11720 2f 2a 20 4f 70 63 6f 64 65 3a 20 41 6e 64 20 50  /* Opcode: And P
11730 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53  1 P2 P3 * *.** S
11740 79 6e 6f 70 73 69 73 3a 20 72 5b 50 33 5d 3d 28  ynopsis: r[P3]=(
11750 72 5b 50 31 5d 20 26 26 20 72 5b 50 32 5d 29 0a  r[P1] && r[P2]).
11760 2a 2a 0a 2a 2a 20 54 61 6b 65 20 74 68 65 20 6c  **.** Take the l
11770 6f 67 69 63 61 6c 20 41 4e 44 20 6f 66 20 74 68  ogical AND of th
11780 65 20 76 61 6c 75 65 73 20 69 6e 20 72 65 67 69  e values in regi
11790 73 74 65 72 73 20 50 31 20 61 6e 64 20 50 32 20  sters P1 and P2 
117a0 61 6e 64 0a 2a 2a 20 77 72 69 74 65 20 74 68 65  and.** write the
117b0 20 72 65 73 75 6c 74 20 69 6e 74 6f 20 72 65 67   result into reg
117c0 69 73 74 65 72 20 50 33 2e 0a 2a 2a 0a 2a 2a 20  ister P3..**.** 
117d0 49 66 20 65 69 74 68 65 72 20 50 31 20 6f 72 20  If either P1 or 
117e0 50 32 20 69 73 20 30 20 28 66 61 6c 73 65 29 20  P2 is 0 (false) 
117f0 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c 74 20  then the result 
11800 69 73 20 30 20 65 76 65 6e 20 69 66 0a 2a 2a 20  is 0 even if.** 
11810 74 68 65 20 6f 74 68 65 72 20 69 6e 70 75 74 20  the other input 
11820 69 73 20 4e 55 4c 4c 2e 20 20 41 20 4e 55 4c 4c  is NULL.  A NULL
11830 20 61 6e 64 20 74 72 75 65 20 6f 72 20 74 77 6f   and true or two
11840 20 4e 55 4c 4c 73 20 67 69 76 65 0a 2a 2a 20 61   NULLs give.** a
11850 20 4e 55 4c 4c 20 6f 75 74 70 75 74 2e 0a 2a 2f   NULL output..*/
11860 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f 72 20 50  ./* Opcode: Or P
11870 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53  1 P2 P3 * *.** S
11880 79 6e 6f 70 73 69 73 3a 20 72 5b 50 33 5d 3d 28  ynopsis: r[P3]=(
11890 72 5b 50 31 5d 20 7c 7c 20 72 5b 50 32 5d 29 0a  r[P1] || r[P2]).
118a0 2a 2a 0a 2a 2a 20 54 61 6b 65 20 74 68 65 20 6c  **.** Take the l
118b0 6f 67 69 63 61 6c 20 4f 52 20 6f 66 20 74 68 65  ogical OR of the
118c0 20 76 61 6c 75 65 73 20 69 6e 20 72 65 67 69 73   values in regis
118d0 74 65 72 20 50 31 20 61 6e 64 20 50 32 20 61 6e  ter P1 and P2 an
118e0 64 0a 2a 2a 20 73 74 6f 72 65 20 74 68 65 20 61  d.** store the a
118f0 6e 73 77 65 72 20 69 6e 20 72 65 67 69 73 74 65  nswer in registe
11900 72 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 65  r P3..**.** If e
11910 69 74 68 65 72 20 50 31 20 6f 72 20 50 32 20 69  ither P1 or P2 i
11920 73 20 6e 6f 6e 7a 65 72 6f 20 28 74 72 75 65 29  s nonzero (true)
11930 20 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c 74   then the result
11940 20 69 73 20 31 20 28 74 72 75 65 29 0a 2a 2a 20   is 1 (true).** 
11950 65 76 65 6e 20 69 66 20 74 68 65 20 6f 74 68 65  even if the othe
11960 72 20 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2e  r input is NULL.
11970 20 20 41 20 4e 55 4c 4c 20 61 6e 64 20 66 61 6c    A NULL and fal
11980 73 65 20 6f 72 20 74 77 6f 20 4e 55 4c 4c 73 0a  se or two NULLs.
11990 2a 2a 20 67 69 76 65 20 61 20 4e 55 4c 4c 20 6f  ** give a NULL o
119a0 75 74 70 75 74 2e 0a 2a 2f 0a 63 61 73 65 20 4f  utput..*/.case O
119b0 50 5f 41 6e 64 3a 20 20 20 20 20 20 20 20 20 20  P_And:          
119c0 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54      /* same as T
119d0 4b 5f 41 4e 44 2c 20 69 6e 31 2c 20 69 6e 32 2c  K_AND, in1, in2,
119e0 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20 4f 50   out3 */.case OP
119f0 5f 4f 72 3a 20 7b 20 20 20 20 20 20 20 20 20 20  _Or: {          
11a00 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b     /* same as TK
11a10 5f 4f 52 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f  _OR, in1, in2, o
11a20 75 74 33 20 2a 2f 0a 20 20 69 6e 74 20 76 31 3b  ut3 */.  int v1;
11a30 20 20 20 20 2f 2a 20 4c 65 66 74 20 6f 70 65 72      /* Left oper
11a40 61 6e 64 3a 20 20 30 3d 3d 46 41 4c 53 45 2c 20  and:  0==FALSE, 
11a50 31 3d 3d 54 52 55 45 2c 20 32 3d 3d 55 4e 4b 4e  1==TRUE, 2==UNKN
11a60 4f 57 4e 20 6f 72 20 4e 55 4c 4c 20 2a 2f 0a 20  OWN or NULL */. 
11a70 20 69 6e 74 20 76 32 3b 20 20 20 20 2f 2a 20 52   int v2;    /* R
11a80 69 67 68 74 20 6f 70 65 72 61 6e 64 3a 20 30 3d  ight operand: 0=
11a90 3d 46 41 4c 53 45 2c 20 31 3d 3d 54 52 55 45 2c  =FALSE, 1==TRUE,
11aa0 20 32 3d 3d 55 4e 4b 4e 4f 57 4e 20 6f 72 20 4e   2==UNKNOWN or N
11ab0 55 4c 4c 20 2a 2f 0a 0a 20 20 76 31 20 3d 20 73  ULL */..  v1 = s
11ac0 71 6c 69 74 65 33 56 64 62 65 42 6f 6f 6c 65 61  qlite3VdbeBoolea
11ad0 6e 56 61 6c 75 65 28 26 61 4d 65 6d 5b 70 4f 70  nValue(&aMem[pOp
11ae0 2d 3e 70 31 5d 2c 20 32 29 3b 0a 20 20 76 32 20  ->p1], 2);.  v2 
11af0 3d 20 73 71 6c 69 74 65 33 56 64 62 65 42 6f 6f  = sqlite3VdbeBoo
11b00 6c 65 61 6e 56 61 6c 75 65 28 26 61 4d 65 6d 5b  leanValue(&aMem[
11b10 70 4f 70 2d 3e 70 32 5d 2c 20 32 29 3b 0a 20 20  pOp->p2], 2);.  
11b20 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d  if( pOp->opcode=
11b30 3d 4f 50 5f 41 6e 64 20 29 7b 0a 20 20 20 20 73  =OP_And ){.    s
11b40 74 61 74 69 63 20 63 6f 6e 73 74 20 75 6e 73 69  tatic const unsi
11b50 67 6e 65 64 20 63 68 61 72 20 61 6e 64 5f 6c 6f  gned char and_lo
11b60 67 69 63 5b 5d 20 3d 20 7b 20 30 2c 20 30 2c 20  gic[] = { 0, 0, 
11b70 30 2c 20 30 2c 20 31 2c 20 32 2c 20 30 2c 20 32  0, 0, 1, 2, 0, 2
11b80 2c 20 32 20 7d 3b 0a 20 20 20 20 76 31 20 3d 20  , 2 };.    v1 = 
11b90 61 6e 64 5f 6c 6f 67 69 63 5b 76 31 2a 33 2b 76  and_logic[v1*3+v
11ba0 32 5d 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  2];.  }else{.   
11bb0 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20 75 6e   static const un
11bc0 73 69 67 6e 65 64 20 63 68 61 72 20 6f 72 5f 6c  signed char or_l
11bd0 6f 67 69 63 5b 5d 20 3d 20 7b 20 30 2c 20 31 2c  ogic[] = { 0, 1,
11be0 20 32 2c 20 31 2c 20 31 2c 20 31 2c 20 32 2c 20   2, 1, 1, 1, 2, 
11bf0 31 2c 20 32 20 7d 3b 0a 20 20 20 20 76 31 20 3d  1, 2 };.    v1 =
11c00 20 6f 72 5f 6c 6f 67 69 63 5b 76 31 2a 33 2b 76   or_logic[v1*3+v
11c10 32 5d 3b 0a 20 20 7d 0a 20 20 70 4f 75 74 20 3d  2];.  }.  pOut =
11c20 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b   &aMem[pOp->p3];
11c30 0a 20 20 69 66 28 20 76 31 3d 3d 32 20 29 7b 0a  .  if( v1==2 ){.
11c40 20 20 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c      MemSetTypeFl
11c50 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 4e 75 6c  ag(pOut, MEM_Nul
11c60 6c 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  l);.  }else{.   
11c70 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 76 31 3b   pOut->u.i = v1;
11c80 0a 20 20 20 20 4d 65 6d 53 65 74 54 79 70 65 46  .    MemSetTypeF
11c90 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 49 6e  lag(pOut, MEM_In
11ca0 74 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  t);.  }.  break;
11cb0 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49  .}../* Opcode: I
11cc0 73 54 72 75 65 20 50 31 20 50 32 20 50 33 20 50  sTrue P1 P2 P3 P
11cd0 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  4 *.** Synopsis:
11ce0 20 72 5b 50 32 5d 20 3d 20 63 6f 61 6c 65 73 63   r[P2] = coalesc
11cf0 65 28 72 5b 50 31 5d 3d 3d 54 52 55 45 2c 50 33  e(r[P1]==TRUE,P3
11d00 29 20 5e 20 50 34 0a 2a 2a 0a 2a 2a 20 54 68 69  ) ^ P4.**.** Thi
11d10 73 20 6f 70 63 6f 64 65 20 69 6d 70 6c 65 6d 65  s opcode impleme
11d20 6e 74 73 20 74 68 65 20 49 53 20 54 52 55 45 2c  nts the IS TRUE,
11d30 20 49 53 20 46 41 4c 53 45 2c 20 49 53 20 4e 4f   IS FALSE, IS NO
11d40 54 20 54 52 55 45 2c 20 61 6e 64 0a 2a 2a 20 49  T TRUE, and.** I
11d50 53 20 4e 4f 54 20 46 41 4c 53 45 20 6f 70 65 72  S NOT FALSE oper
11d60 61 74 6f 72 73 2e 0a 2a 2a 0a 2a 2a 20 49 6e 74  ators..**.** Int
11d70 65 72 70 72 65 74 20 74 68 65 20 76 61 6c 75 65  erpret the value
11d80 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20   in register P1 
11d90 61 73 20 61 20 62 6f 6f 6c 65 61 6e 20 76 61 6c  as a boolean val
11da0 75 65 2e 20 20 53 74 6f 72 65 20 74 68 61 74 0a  ue.  Store that.
11db0 2a 2a 20 62 6f 6f 6c 65 61 6e 20 28 61 20 30 20  ** boolean (a 0 
11dc0 6f 72 20 31 29 20 69 6e 20 72 65 67 69 73 74 65  or 1) in registe
11dd0 72 20 50 32 2e 20 20 4f 72 20 69 66 20 74 68 65  r P2.  Or if the
11de0 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
11df0 65 72 20 50 31 20 69 73 20 0a 2a 2a 20 4e 55 4c  er P1 is .** NUL
11e00 4c 2c 20 74 68 65 6e 20 74 68 65 20 50 33 20 69  L, then the P3 i
11e10 73 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69  s stored in regi
11e20 73 74 65 72 20 50 32 2e 20 20 49 6e 76 65 72 74  ster P2.  Invert
11e30 20 74 68 65 20 61 6e 73 77 65 72 20 69 66 20 50   the answer if P
11e40 34 0a 2a 2a 20 69 73 20 31 2e 0a 2a 2a 0a 2a 2a  4.** is 1..**.**
11e50 20 54 68 65 20 6c 6f 67 69 63 20 69 73 20 73 75   The logic is su
11e60 6d 6d 61 72 69 7a 65 64 20 6c 69 6b 65 20 74 68  mmarized like th
11e70 69 73 3a 0a 2a 2a 0a 2a 2a 20 3c 75 6c 3e 20 0a  is:.**.** <ul> .
11e80 2a 2a 20 3c 6c 69 3e 20 49 66 20 50 33 3d 3d 30  ** <li> If P3==0
11e90 20 61 6e 64 20 50 34 3d 3d 30 20 20 74 68 65 6e   and P4==0  then
11ea0 20 20 72 5b 50 32 5d 20 3a 3d 20 72 5b 50 31 5d    r[P2] := r[P1]
11eb0 20 49 53 20 54 52 55 45 0a 2a 2a 20 3c 6c 69 3e   IS TRUE.** <li>
11ec0 20 49 66 20 50 33 3d 3d 31 20 61 6e 64 20 50 34   If P3==1 and P4
11ed0 3d 3d 31 20 20 74 68 65 6e 20 20 72 5b 50 32 5d  ==1  then  r[P2]
11ee0 20 3a 3d 20 72 5b 50 31 5d 20 49 53 20 46 41 4c   := r[P1] IS FAL
11ef0 53 45 0a 2a 2a 20 3c 6c 69 3e 20 49 66 20 50 33  SE.** <li> If P3
11f00 3d 3d 30 20 61 6e 64 20 50 34 3d 3d 31 20 20 74  ==0 and P4==1  t
11f10 68 65 6e 20 20 72 5b 50 32 5d 20 3a 3d 20 72 5b  hen  r[P2] := r[
11f20 50 31 5d 20 49 53 20 4e 4f 54 20 54 52 55 45 0a  P1] IS NOT TRUE.
11f30 2a 2a 20 3c 6c 69 3e 20 49 66 20 50 33 3d 3d 31  ** <li> If P3==1
11f40 20 61 6e 64 20 50 34 3d 3d 30 20 20 74 68 65 6e   and P4==0  then
11f50 20 20 72 5b 50 32 5d 20 3a 3d 20 72 5b 50 31 5d    r[P2] := r[P1]
11f60 20 49 53 20 4e 4f 54 20 46 41 4c 53 45 0a 2a 2a   IS NOT FALSE.**
11f70 20 3c 2f 75 6c 3e 0a 2a 2f 0a 63 61 73 65 20 4f   </ul>.*/.case O
11f80 50 5f 49 73 54 72 75 65 3a 20 7b 20 20 20 20 20  P_IsTrue: {     
11f90 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 31            /* in1
11fa0 2c 20 6f 75 74 32 20 2a 2f 0a 20 20 61 73 73 65  , out2 */.  asse
11fb0 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d  rt( pOp->p4type=
11fc0 3d 50 34 5f 49 4e 54 33 32 20 29 3b 0a 20 20 61  =P4_INT32 );.  a
11fd0 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 2e 69  ssert( pOp->p4.i
11fe0 3d 3d 30 20 7c 7c 20 70 4f 70 2d 3e 70 34 2e 69  ==0 || pOp->p4.i
11ff0 3d 3d 31 20 29 3b 0a 20 20 61 73 73 65 72 74 28  ==1 );.  assert(
12000 20 70 4f 70 2d 3e 70 33 3d 3d 30 20 7c 7c 20 70   pOp->p3==0 || p
12010 4f 70 2d 3e 70 33 3d 3d 31 20 29 3b 0a 20 20 73  Op->p3==1 );.  s
12020 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74  qlite3VdbeMemSet
12030 49 6e 74 36 34 28 26 61 4d 65 6d 5b 70 4f 70 2d  Int64(&aMem[pOp-
12040 3e 70 32 5d 2c 0a 20 20 20 20 20 20 73 71 6c 69  >p2],.      sqli
12050 74 65 33 56 64 62 65 42 6f 6f 6c 65 61 6e 56 61  te3VdbeBooleanVa
12060 6c 75 65 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  lue(&aMem[pOp->p
12070 31 5d 2c 20 70 4f 70 2d 3e 70 33 29 20 5e 20 70  1], pOp->p3) ^ p
12080 4f 70 2d 3e 70 34 2e 69 29 3b 0a 20 20 62 72 65  Op->p4.i);.  bre
12090 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
120a0 3a 20 4e 6f 74 20 50 31 20 50 32 20 2a 20 2a 20  : Not P1 P2 * * 
120b0 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72  *.** Synopsis: r
120c0 5b 50 32 5d 3d 20 21 72 5b 50 31 5d 0a 2a 2a 0a  [P2]= !r[P1].**.
120d0 2a 2a 20 49 6e 74 65 72 70 72 65 74 20 74 68 65  ** Interpret the
120e0 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
120f0 65 72 20 50 31 20 61 73 20 61 20 62 6f 6f 6c 65  er P1 as a boole
12100 61 6e 20 76 61 6c 75 65 2e 20 20 53 74 6f 72 65  an value.  Store
12110 20 74 68 65 0a 2a 2a 20 62 6f 6f 6c 65 61 6e 20   the.** boolean 
12120 63 6f 6d 70 6c 65 6d 65 6e 74 20 69 6e 20 72 65  complement in re
12130 67 69 73 74 65 72 20 50 32 2e 20 20 49 66 20 74  gister P2.  If t
12140 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69  he value in regi
12150 73 74 65 72 20 50 31 20 69 73 20 0a 2a 2a 20 4e  ster P1 is .** N
12160 55 4c 4c 2c 20 74 68 65 6e 20 61 20 4e 55 4c 4c  ULL, then a NULL
12170 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 50 32   is stored in P2
12180 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 6f 74  ..*/.case OP_Not
12190 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20  : {             
121a0 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b     /* same as TK
121b0 5f 4e 4f 54 2c 20 69 6e 31 2c 20 6f 75 74 32 20  _NOT, in1, out2 
121c0 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65  */.  pIn1 = &aMe
121d0 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 4f  m[pOp->p1];.  pO
121e0 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  ut = &aMem[pOp->
121f0 70 32 5d 3b 0a 20 20 69 66 28 20 28 70 49 6e 31  p2];.  if( (pIn1
12200 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75  ->flags & MEM_Nu
12210 6c 6c 29 3d 3d 30 20 29 7b 0a 20 20 20 20 73 71  ll)==0 ){.    sq
12220 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 49  lite3VdbeMemSetI
12230 6e 74 36 34 28 70 4f 75 74 2c 20 21 73 71 6c 69  nt64(pOut, !sqli
12240 74 65 33 56 64 62 65 42 6f 6f 6c 65 61 6e 56 61  te3VdbeBooleanVa
12250 6c 75 65 28 70 49 6e 31 2c 30 29 29 3b 0a 20 20  lue(pIn1,0));.  
12260 7d 65 6c 73 65 7b 0a 20 20 20 20 73 71 6c 69 74  }else{.    sqlit
12270 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c  e3VdbeMemSetNull
12280 28 70 4f 75 74 29 3b 0a 20 20 7d 0a 20 20 62 72  (pOut);.  }.  br
12290 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
122a0 65 3a 20 42 69 74 4e 6f 74 20 50 31 20 50 32 20  e: BitNot P1 P2 
122b0 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69  * * *.** Synopsi
122c0 73 3a 20 72 5b 50 31 5d 3d 20 7e 72 5b 50 31 5d  s: r[P1]= ~r[P1]
122d0 0a 2a 2a 0a 2a 2a 20 49 6e 74 65 72 70 72 65 74  .**.** Interpret
122e0 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20   the content of 
122f0 72 65 67 69 73 74 65 72 20 50 31 20 61 73 20 61  register P1 as a
12300 6e 20 69 6e 74 65 67 65 72 2e 20 20 53 74 6f 72  n integer.  Stor
12310 65 20 74 68 65 0a 2a 2a 20 6f 6e 65 73 2d 63 6f  e the.** ones-co
12320 6d 70 6c 65 6d 65 6e 74 20 6f 66 20 74 68 65 20  mplement of the 
12330 50 31 20 76 61 6c 75 65 20 69 6e 74 6f 20 72 65  P1 value into re
12340 67 69 73 74 65 72 20 50 32 2e 20 20 49 66 20 50  gister P2.  If P
12350 31 20 68 6f 6c 64 73 0a 2a 2a 20 61 20 4e 55 4c  1 holds.** a NUL
12360 4c 20 74 68 65 6e 20 73 74 6f 72 65 20 61 20 4e  L then store a N
12370 55 4c 4c 20 69 6e 20 50 32 2e 0a 2a 2f 0a 63 61  ULL in P2..*/.ca
12380 73 65 20 4f 50 5f 42 69 74 4e 6f 74 3a 20 7b 20  se OP_BitNot: { 
12390 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73              /* s
123a0 61 6d 65 20 61 73 20 54 4b 5f 42 49 54 4e 4f 54  ame as TK_BITNOT
123b0 2c 20 69 6e 31 2c 20 6f 75 74 32 20 2a 2f 0a 20  , in1, out2 */. 
123c0 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn1 = &aMem[pO
123d0 70 2d 3e 70 31 5d 3b 0a 20 20 70 4f 75 74 20 3d  p->p1];.  pOut =
123e0 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b   &aMem[pOp->p2];
123f0 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65  .  sqlite3VdbeMe
12400 6d 53 65 74 4e 75 6c 6c 28 70 4f 75 74 29 3b 0a  mSetNull(pOut);.
12410 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61    if( (pIn1->fla
12420 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29 3d 3d  gs & MEM_Null)==
12430 30 20 29 7b 0a 20 20 20 20 70 4f 75 74 2d 3e 66  0 ){.    pOut->f
12440 6c 61 67 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a  lags = MEM_Int;.
12450 20 20 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20      pOut->u.i = 
12460 7e 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74 56  ~sqlite3VdbeIntV
12470 61 6c 75 65 28 70 49 6e 31 29 3b 0a 20 20 7d 0a  alue(pIn1);.  }.
12480 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
12490 70 63 6f 64 65 3a 20 4f 6e 63 65 20 50 31 20 50  pcode: Once P1 P
124a0 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 46 61  2 * * *.**.** Fa
124b0 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68  ll through to th
124c0 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69  e next instructi
124d0 6f 6e 20 74 68 65 20 66 69 72 73 74 20 74 69 6d  on the first tim
124e0 65 20 74 68 69 73 20 6f 70 63 6f 64 65 20 69 73  e this opcode is
124f0 0a 2a 2a 20 65 6e 63 6f 75 6e 74 65 72 65 64 20  .** encountered 
12500 6f 6e 20 65 61 63 68 20 69 6e 76 6f 63 61 74 69  on each invocati
12510 6f 6e 20 6f 66 20 74 68 65 20 62 79 74 65 2d 63  on of the byte-c
12520 6f 64 65 20 70 72 6f 67 72 61 6d 2e 20 20 4a 75  ode program.  Ju
12530 6d 70 20 74 6f 20 50 32 0a 2a 2a 20 6f 6e 20 74  mp to P2.** on t
12540 68 65 20 73 65 63 6f 6e 64 20 61 6e 64 20 61 6c  he second and al
12550 6c 20 73 75 62 73 65 71 75 65 6e 74 20 65 6e 63  l subsequent enc
12560 6f 75 6e 74 65 72 73 20 64 75 72 69 6e 67 20 74  ounters during t
12570 68 65 20 73 61 6d 65 20 69 6e 76 6f 63 61 74 69  he same invocati
12580 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 6f 70 2d 6c 65  on..**.** Top-le
12590 76 65 6c 20 70 72 6f 67 72 61 6d 73 20 64 65 74  vel programs det
125a0 65 72 6d 69 6e 65 20 66 69 72 73 74 20 69 6e 76  ermine first inv
125b0 6f 63 61 74 69 6f 6e 20 62 79 20 63 6f 6d 70 61  ocation by compa
125c0 72 69 6e 67 20 74 68 65 20 50 31 0a 2a 2a 20 6f  ring the P1.** o
125d0 70 65 72 61 6e 64 20 61 67 61 69 6e 73 74 20 74  perand against t
125e0 68 65 20 50 31 20 6f 70 65 72 61 6e 64 20 6f 6e  he P1 operand on
125f0 20 74 68 65 20 4f 50 5f 49 6e 69 74 20 6f 70 63   the OP_Init opc
12600 6f 64 65 20 61 74 20 74 68 65 20 62 65 67 69 6e  ode at the begin
12610 6e 69 6e 67 0a 2a 2a 20 6f 66 20 74 68 65 20 70  ning.** of the p
12620 72 6f 67 72 61 6d 2e 20 20 49 66 20 74 68 65 20  rogram.  If the 
12630 50 31 20 76 61 6c 75 65 73 20 64 69 66 66 65 72  P1 values differ
12640 2c 20 74 68 65 6e 20 66 61 6c 6c 20 74 68 72 6f  , then fall thro
12650 75 67 68 20 61 6e 64 20 6d 61 6b 65 0a 2a 2a 20  ugh and make.** 
12660 74 68 65 20 50 31 20 6f 66 20 74 68 69 73 20 6f  the P1 of this o
12670 70 63 6f 64 65 20 65 71 75 61 6c 20 74 6f 20 74  pcode equal to t
12680 68 65 20 50 31 20 6f 66 20 4f 50 5f 49 6e 69 74  he P1 of OP_Init
12690 2e 20 20 49 66 20 50 31 20 76 61 6c 75 65 73 20  .  If P1 values 
126a0 61 72 65 0a 2a 2a 20 74 68 65 20 73 61 6d 65 20  are.** the same 
126b0 74 68 65 6e 20 74 61 6b 65 20 74 68 65 20 6a 75  then take the ju
126c0 6d 70 2e 0a 2a 2a 0a 2a 2a 20 46 6f 72 20 73 75  mp..**.** For su
126d0 62 70 72 6f 67 72 61 6d 73 2c 20 74 68 65 72 65  bprograms, there
126e0 20 69 73 20 61 20 62 69 74 6d 61 73 6b 20 69 6e   is a bitmask in
126f0 20 74 68 65 20 56 64 62 65 46 72 61 6d 65 20 74   the VdbeFrame t
12700 68 61 74 20 64 65 74 65 72 6d 69 6e 65 73 0a 2a  hat determines.*
12710 2a 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74  * whether or not
12720 20 74 68 65 20 6a 75 6d 70 20 73 68 6f 75 6c 64   the jump should
12730 20 62 65 20 74 61 6b 65 6e 2e 20 20 54 68 65 20   be taken.  The 
12740 62 69 74 6d 61 73 6b 20 69 73 20 6e 65 63 65 73  bitmask is neces
12750 73 61 72 79 0a 2a 2a 20 62 65 63 61 75 73 65 20  sary.** because 
12760 74 68 65 20 73 65 6c 66 2d 61 6c 74 65 72 69 6e  the self-alterin
12770 67 20 63 6f 64 65 20 74 72 69 63 6b 20 64 6f 65  g code trick doe
12780 73 20 6e 6f 74 20 77 6f 72 6b 20 66 6f 72 20 72  s not work for r
12790 65 63 75 72 73 69 76 65 0a 2a 2a 20 74 72 69 67  ecursive.** trig
127a0 67 65 72 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  gers..*/.case OP
127b0 5f 4f 6e 63 65 3a 20 7b 20 20 20 20 20 20 20 20  _Once: {        
127c0 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a       /* jump */.
127d0 20 20 75 33 32 20 69 41 64 64 72 3b 20 20 20 20    u32 iAddr;    
127e0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41              /* A
127f0 64 64 72 65 73 73 20 6f 66 20 74 68 69 73 20 69  ddress of this i
12800 6e 73 74 72 75 63 74 69 6f 6e 20 2a 2f 0a 20 20  nstruction */.  
12810 61 73 73 65 72 74 28 20 70 2d 3e 61 4f 70 5b 30  assert( p->aOp[0
12820 5d 2e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 6e 69  ].opcode==OP_Ini
12830 74 20 29 3b 0a 20 20 69 66 28 20 70 2d 3e 70 46  t );.  if( p->pF
12840 72 61 6d 65 20 29 7b 0a 20 20 20 20 69 41 64 64  rame ){.    iAdd
12850 72 20 3d 20 28 69 6e 74 29 28 70 4f 70 20 2d 20  r = (int)(pOp - 
12860 70 2d 3e 61 4f 70 29 3b 0a 20 20 20 20 69 66 28  p->aOp);.    if(
12870 20 28 70 2d 3e 70 46 72 61 6d 65 2d 3e 61 4f 6e   (p->pFrame->aOn
12880 63 65 5b 69 41 64 64 72 2f 38 5d 20 26 20 28 31  ce[iAddr/8] & (1
12890 3c 3c 28 69 41 64 64 72 20 26 20 37 29 29 29 21  <<(iAddr & 7)))!
128a0 3d 30 20 29 7b 0a 20 20 20 20 20 20 56 64 62 65  =0 ){.      Vdbe
128b0 42 72 61 6e 63 68 54 61 6b 65 6e 28 31 2c 20 32  BranchTaken(1, 2
128c0 29 3b 0a 20 20 20 20 20 20 67 6f 74 6f 20 6a 75  );.      goto ju
128d0 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 20 20 7d 0a  mp_to_p2;.    }.
128e0 20 20 20 20 70 2d 3e 70 46 72 61 6d 65 2d 3e 61      p->pFrame->a
128f0 4f 6e 63 65 5b 69 41 64 64 72 2f 38 5d 20 7c 3d  Once[iAddr/8] |=
12900 20 31 3c 3c 28 69 41 64 64 72 20 26 20 37 29 3b   1<<(iAddr & 7);
12910 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 69 66  .  }else{.    if
12920 28 20 70 2d 3e 61 4f 70 5b 30 5d 2e 70 31 3d 3d  ( p->aOp[0].p1==
12930 70 4f 70 2d 3e 70 31 20 29 7b 0a 20 20 20 20 20  pOp->p1 ){.     
12940 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e   VdbeBranchTaken
12950 28 31 2c 20 32 29 3b 0a 20 20 20 20 20 20 67 6f  (1, 2);.      go
12960 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20  to jump_to_p2;. 
12970 20 20 20 7d 0a 20 20 7d 0a 20 20 56 64 62 65 42     }.  }.  VdbeB
12980 72 61 6e 63 68 54 61 6b 65 6e 28 30 2c 20 32 29  ranchTaken(0, 2)
12990 3b 0a 20 20 70 4f 70 2d 3e 70 31 20 3d 20 70 2d  ;.  pOp->p1 = p-
129a0 3e 61 4f 70 5b 30 5d 2e 70 31 3b 0a 20 20 62 72  >aOp[0].p1;.  br
129b0 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
129c0 65 3a 20 49 66 20 50 31 20 50 32 20 50 33 20 2a  e: If P1 P2 P3 *
129d0 20 2a 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70 20 74 6f   *.**.** Jump to
129e0 20 50 32 20 69 66 20 74 68 65 20 76 61 6c 75 65   P2 if the value
129f0 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20   in register P1 
12a00 69 73 20 74 72 75 65 2e 20 20 54 68 65 20 76 61  is true.  The va
12a10 6c 75 65 0a 2a 2a 20 69 73 20 63 6f 6e 73 69 64  lue.** is consid
12a20 65 72 65 64 20 74 72 75 65 20 69 66 20 69 74 20  ered true if it 
12a30 69 73 20 6e 75 6d 65 72 69 63 20 61 6e 64 20 6e  is numeric and n
12a40 6f 6e 2d 7a 65 72 6f 2e 20 20 49 66 20 74 68 65  on-zero.  If the
12a50 20 76 61 6c 75 65 0a 2a 2a 20 69 6e 20 50 31 20   value.** in P1 
12a60 69 73 20 4e 55 4c 4c 20 74 68 65 6e 20 74 61 6b  is NULL then tak
12a70 65 20 74 68 65 20 6a 75 6d 70 20 69 66 20 61 6e  e the jump if an
12a80 64 20 6f 6e 6c 79 20 69 66 20 50 33 20 69 73 20  d only if P3 is 
12a90 6e 6f 6e 2d 7a 65 72 6f 2e 0a 2a 2f 0a 63 61 73  non-zero..*/.cas
12aa0 65 20 4f 50 5f 49 66 3a 20 20 7b 20 20 20 20 20  e OP_If:  {     
12ab0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d            /* jum
12ac0 70 2c 20 69 6e 31 20 2a 2f 0a 20 20 69 6e 74 20  p, in1 */.  int 
12ad0 63 3b 0a 20 20 63 20 3d 20 73 71 6c 69 74 65 33  c;.  c = sqlite3
12ae0 56 64 62 65 42 6f 6f 6c 65 61 6e 56 61 6c 75 65  VdbeBooleanValue
12af0 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 2c  (&aMem[pOp->p1],
12b00 20 70 4f 70 2d 3e 70 33 29 3b 0a 20 20 56 64 62   pOp->p3);.  Vdb
12b10 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 63 21 3d  eBranchTaken(c!=
12b20 30 2c 20 32 29 3b 0a 20 20 69 66 28 20 63 20 29  0, 2);.  if( c )
12b30 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32   goto jump_to_p2
12b40 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
12b50 20 4f 70 63 6f 64 65 3a 20 49 66 4e 6f 74 20 50   Opcode: IfNot P
12b60 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a  1 P2 P3 * *.**.*
12b70 2a 20 4a 75 6d 70 20 74 6f 20 50 32 20 69 66 20  * Jump to P2 if 
12b80 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67  the value in reg
12b90 69 73 74 65 72 20 50 31 20 69 73 20 46 61 6c 73  ister P1 is Fals
12ba0 65 2e 20 20 54 68 65 20 76 61 6c 75 65 0a 2a 2a  e.  The value.**
12bb0 20 69 73 20 63 6f 6e 73 69 64 65 72 65 64 20 66   is considered f
12bc0 61 6c 73 65 20 69 66 20 69 74 20 68 61 73 20 61  alse if it has a
12bd0 20 6e 75 6d 65 72 69 63 20 76 61 6c 75 65 20 6f   numeric value o
12be0 66 20 7a 65 72 6f 2e 20 20 49 66 20 74 68 65 20  f zero.  If the 
12bf0 76 61 6c 75 65 0a 2a 2a 20 69 6e 20 50 31 20 69  value.** in P1 i
12c00 73 20 4e 55 4c 4c 20 74 68 65 6e 20 74 61 6b 65  s NULL then take
12c10 20 74 68 65 20 6a 75 6d 70 20 69 66 20 61 6e 64   the jump if and
12c20 20 6f 6e 6c 79 20 69 66 20 50 33 20 69 73 20 6e   only if P3 is n
12c30 6f 6e 2d 7a 65 72 6f 2e 0a 2a 2f 0a 63 61 73 65  on-zero..*/.case
12c40 20 4f 50 5f 49 66 4e 6f 74 3a 20 7b 20 20 20 20   OP_IfNot: {    
12c50 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c          /* jump,
12c60 20 69 6e 31 20 2a 2f 0a 20 20 69 6e 74 20 63 3b   in1 */.  int c;
12c70 0a 20 20 63 20 3d 20 21 73 71 6c 69 74 65 33 56  .  c = !sqlite3V
12c80 64 62 65 42 6f 6f 6c 65 61 6e 56 61 6c 75 65 28  dbeBooleanValue(
12c90 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 2c 20  &aMem[pOp->p1], 
12ca0 21 70 4f 70 2d 3e 70 33 29 3b 0a 20 20 56 64 62  !pOp->p3);.  Vdb
12cb0 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 63 21 3d  eBranchTaken(c!=
12cc0 30 2c 20 32 29 3b 0a 20 20 69 66 28 20 63 20 29  0, 2);.  if( c )
12cd0 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32   goto jump_to_p2
12ce0 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
12cf0 20 4f 70 63 6f 64 65 3a 20 49 73 4e 75 6c 6c 20   Opcode: IsNull 
12d00 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53  P1 P2 * * *.** S
12d10 79 6e 6f 70 73 69 73 3a 20 69 66 20 72 5b 50 31  ynopsis: if r[P1
12d20 5d 3d 3d 4e 55 4c 4c 20 67 6f 74 6f 20 50 32 0a  ]==NULL goto P2.
12d30 2a 2a 0a 2a 2a 20 4a 75 6d 70 20 74 6f 20 50 32  **.** Jump to P2
12d40 20 69 66 20 74 68 65 20 76 61 6c 75 65 20 69 6e   if the value in
12d50 20 72 65 67 69 73 74 65 72 20 50 31 20 69 73 20   register P1 is 
12d60 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  NULL..*/.case OP
12d70 5f 49 73 4e 75 6c 6c 3a 20 7b 20 20 20 20 20 20  _IsNull: {      
12d80 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73        /* same as
12d90 20 54 4b 5f 49 53 4e 55 4c 4c 2c 20 6a 75 6d 70   TK_ISNULL, jump
12da0 2c 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20  , in1 */.  pIn1 
12db0 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  = &aMem[pOp->p1]
12dc0 3b 0a 20 20 56 64 62 65 42 72 61 6e 63 68 54 61  ;.  VdbeBranchTa
12dd0 6b 65 6e 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67  ken( (pIn1->flag
12de0 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29 21 3d 30  s & MEM_Null)!=0
12df0 2c 20 32 29 3b 0a 20 20 69 66 28 20 28 70 49 6e  , 2);.  if( (pIn
12e00 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e  1->flags & MEM_N
12e10 75 6c 6c 29 21 3d 30 20 29 7b 0a 20 20 20 20 67  ull)!=0 ){.    g
12e20 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a  oto jump_to_p2;.
12e30 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
12e40 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 6f 74 4e 75  /* Opcode: NotNu
12e50 6c 6c 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  ll P1 P2 * * *.*
12e60 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 66 20 72  * Synopsis: if r
12e70 5b 50 31 5d 21 3d 4e 55 4c 4c 20 67 6f 74 6f 20  [P1]!=NULL goto 
12e80 50 32 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70 20 74 6f  P2.**.** Jump to
12e90 20 50 32 20 69 66 20 74 68 65 20 76 61 6c 75 65   P2 if the value
12ea0 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20   in register P1 
12eb0 69 73 20 6e 6f 74 20 4e 55 4c 4c 2e 20 20 0a 2a  is not NULL.  .*
12ec0 2f 0a 63 61 73 65 20 4f 50 5f 4e 6f 74 4e 75 6c  /.case OP_NotNul
12ed0 6c 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20  l: {            
12ee0 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 4e 4f  /* same as TK_NO
12ef0 54 4e 55 4c 4c 2c 20 6a 75 6d 70 2c 20 69 6e 31  TNULL, jump, in1
12f00 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d   */.  pIn1 = &aM
12f10 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 56  em[pOp->p1];.  V
12f20 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 20  dbeBranchTaken( 
12f30 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d  (pIn1->flags & M
12f40 45 4d 5f 4e 75 6c 6c 29 3d 3d 30 2c 20 32 29 3b  EM_Null)==0, 2);
12f50 0a 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c  .  if( (pIn1->fl
12f60 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29 3d  ags & MEM_Null)=
12f70 3d 30 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 6a  =0 ){.    goto j
12f80 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 7d 0a 20  ump_to_p2;.  }. 
12f90 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
12fa0 63 6f 64 65 3a 20 49 66 4e 75 6c 6c 52 6f 77 20  code: IfNullRow 
12fb0 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20  P1 P2 P3 * *.** 
12fc0 53 79 6e 6f 70 73 69 73 3a 20 69 66 20 50 31 2e  Synopsis: if P1.
12fd0 6e 75 6c 6c 52 6f 77 20 74 68 65 6e 20 72 5b 50  nullRow then r[P
12fe0 33 5d 3d 4e 55 4c 4c 2c 20 67 6f 74 6f 20 50 32  3]=NULL, goto P2
12ff0 0a 2a 2a 0a 2a 2a 20 43 68 65 63 6b 20 74 68 65  .**.** Check the
13000 20 63 75 72 73 6f 72 20 50 31 20 74 6f 20 73 65   cursor P1 to se
13010 65 20 69 66 20 69 74 20 69 73 20 63 75 72 72 65  e if it is curre
13020 6e 74 6c 79 20 70 6f 69 6e 74 69 6e 67 20 61 74  ntly pointing at
13030 20 61 20 4e 55 4c 4c 20 72 6f 77 2e 0a 2a 2a 20   a NULL row..** 
13040 49 66 20 69 74 20 69 73 2c 20 74 68 65 6e 20 73  If it is, then s
13050 65 74 20 72 65 67 69 73 74 65 72 20 50 33 20 74  et register P3 t
13060 6f 20 4e 55 4c 4c 20 61 6e 64 20 6a 75 6d 70 20  o NULL and jump 
13070 69 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f 20 50  immediately to P
13080 32 2e 0a 2a 2a 20 49 66 20 50 31 20 69 73 20 6e  2..** If P1 is n
13090 6f 74 20 6f 6e 20 61 20 4e 55 4c 4c 20 72 6f 77  ot on a NULL row
130a0 2c 20 74 68 65 6e 20 66 61 6c 6c 20 74 68 72 6f  , then fall thro
130b0 75 67 68 20 77 69 74 68 6f 75 74 20 6d 61 6b 69  ugh without maki
130c0 6e 67 20 61 6e 79 0a 2a 2a 20 63 68 61 6e 67 65  ng any.** change
130d0 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 66  s..*/.case OP_If
130e0 4e 75 6c 6c 52 6f 77 3a 20 7b 20 20 20 20 20 20  NullRow: {      
130f0 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20     /* jump */.  
13100 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
13110 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d  =0 && pOp->p1<p-
13120 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 61 73  >nCursor );.  as
13130 73 65 72 74 28 20 70 2d 3e 61 70 43 73 72 5b 70  sert( p->apCsr[p
13140 4f 70 2d 3e 70 31 5d 21 3d 30 20 29 3b 0a 20 20  Op->p1]!=0 );.  
13150 69 66 28 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70  if( p->apCsr[pOp
13160 2d 3e 70 31 5d 2d 3e 6e 75 6c 6c 52 6f 77 20 29  ->p1]->nullRow )
13170 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  {.    sqlite3Vdb
13180 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 61 4d 65 6d  eMemSetNull(aMem
13190 20 2b 20 70 4f 70 2d 3e 70 33 29 3b 0a 20 20 20   + pOp->p3);.   
131a0 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32   goto jump_to_p2
131b0 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
131c0 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ..#ifdef SQLITE_
131d0 45 4e 41 42 4c 45 5f 4f 46 46 53 45 54 5f 53 51  ENABLE_OFFSET_SQ
131e0 4c 5f 46 55 4e 43 0a 2f 2a 20 4f 70 63 6f 64 65  L_FUNC./* Opcode
131f0 3a 20 4f 66 66 73 65 74 20 50 31 20 50 32 20 50  : Offset P1 P2 P
13200 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69  3 * *.** Synopsi
13210 73 3a 20 72 5b 50 33 5d 20 3d 20 73 71 6c 69 74  s: r[P3] = sqlit
13220 65 5f 6f 66 66 73 65 74 28 50 31 29 0a 2a 2a 0a  e_offset(P1).**.
13230 2a 2a 20 53 74 6f 72 65 20 69 6e 20 72 65 67 69  ** Store in regi
13240 73 74 65 72 20 72 5b 50 33 5d 20 74 68 65 20 62  ster r[P3] the b
13250 79 74 65 20 6f 66 66 73 65 74 20 69 6e 74 6f 20  yte offset into 
13260 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c  the database fil
13270 65 20 74 68 61 74 20 69 73 20 74 68 65 0a 2a 2a  e that is the.**
13280 20 73 74 61 72 74 20 6f 66 20 74 68 65 20 70 61   start of the pa
13290 79 6c 6f 61 64 20 66 6f 72 20 74 68 65 20 72 65  yload for the re
132a0 63 6f 72 64 20 61 74 20 77 68 69 63 68 20 74 68  cord at which th
132b0 61 74 20 63 75 72 73 6f 72 20 50 31 20 69 73 20  at cursor P1 is 
132c0 63 75 72 72 65 6e 74 6c 79 0a 2a 2a 20 70 6f 69  currently.** poi
132d0 6e 74 69 6e 67 2e 0a 2a 2a 0a 2a 2a 20 50 32 20  nting..**.** P2 
132e0 69 73 20 74 68 65 20 63 6f 6c 75 6d 6e 20 6e 75  is the column nu
132f0 6d 62 65 72 20 66 6f 72 20 74 68 65 20 61 72 67  mber for the arg
13300 75 6d 65 6e 74 20 74 6f 20 74 68 65 20 73 71 6c  ument to the sql
13310 69 74 65 5f 6f 66 66 73 65 74 28 29 20 66 75 6e  ite_offset() fun
13320 63 74 69 6f 6e 2e 0a 2a 2a 20 54 68 69 73 20 6f  ction..** This o
13330 70 63 6f 64 65 20 64 6f 65 73 20 6e 6f 74 20 75  pcode does not u
13340 73 65 20 50 32 20 69 74 73 65 6c 66 2c 20 62 75  se P2 itself, bu
13350 74 20 74 68 65 20 50 32 20 76 61 6c 75 65 20 69  t the P2 value i
13360 73 20 75 73 65 64 20 62 79 20 74 68 65 0a 2a 2a  s used by the.**
13370 20 63 6f 64 65 20 67 65 6e 65 72 61 74 6f 72 2e   code generator.
13380 20 20 54 68 65 20 50 31 2c 20 50 32 2c 20 61 6e    The P1, P2, an
13390 64 20 50 33 20 6f 70 65 72 61 6e 64 73 20 74 6f  d P3 operands to
133a0 20 74 68 69 73 20 6f 70 63 6f 64 65 20 61 72 65   this opcode are
133b0 20 74 68 65 0a 2a 2a 20 73 61 6d 65 20 61 73 20   the.** same as 
133c0 66 6f 72 20 4f 50 5f 43 6f 6c 75 6d 6e 2e 0a 2a  for OP_Column..*
133d0 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65  *.** This opcode
133e0 20 69 73 20 6f 6e 6c 79 20 61 76 61 69 6c 61 62   is only availab
133f0 6c 65 20 69 66 20 53 51 4c 69 74 65 20 69 73 20  le if SQLite is 
13400 63 6f 6d 70 69 6c 65 64 20 77 69 74 68 20 74 68  compiled with th
13410 65 0a 2a 2a 20 2d 44 53 51 4c 49 54 45 5f 45 4e  e.** -DSQLITE_EN
13420 41 42 4c 45 5f 4f 46 46 53 45 54 5f 53 51 4c 5f  ABLE_OFFSET_SQL_
13430 46 55 4e 43 20 6f 70 74 69 6f 6e 2e 0a 2a 2f 0a  FUNC option..*/.
13440 63 61 73 65 20 4f 50 5f 4f 66 66 73 65 74 3a 20  case OP_Offset: 
13450 7b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75  {          /* ou
13460 74 33 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73  t3 */.  VdbeCurs
13470 6f 72 20 2a 70 43 3b 20 20 20 20 2f 2a 20 54 68  or *pC;    /* Th
13480 65 20 56 44 42 45 20 63 75 72 73 6f 72 20 2a 2f  e VDBE cursor */
13490 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
134a0 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31  p1>=0 && pOp->p1
134b0 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20  <p->nCursor );. 
134c0 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70   pC = p->apCsr[p
134d0 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 4f 75 74 20  Op->p1];.  pOut 
134e0 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e  = &p->aMem[pOp->
134f0 70 33 5d 3b 0a 20 20 69 66 28 20 4e 45 56 45 52  p3];.  if( NEVER
13500 28 70 43 3d 3d 30 29 20 7c 7c 20 70 43 2d 3e 65  (pC==0) || pC->e
13510 43 75 72 54 79 70 65 21 3d 43 55 52 54 59 50 45  CurType!=CURTYPE
13520 5f 42 54 52 45 45 20 29 7b 0a 20 20 20 20 73 71  _BTREE ){.    sq
13530 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e  lite3VdbeMemSetN
13540 75 6c 6c 28 70 4f 75 74 29 3b 0a 20 20 7d 65 6c  ull(pOut);.  }el
13550 73 65 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56  se{.    sqlite3V
13560 64 62 65 4d 65 6d 53 65 74 49 6e 74 36 34 28 70  dbeMemSetInt64(p
13570 4f 75 74 2c 20 73 71 6c 69 74 65 33 42 74 72 65  Out, sqlite3Btre
13580 65 4f 66 66 73 65 74 28 70 43 2d 3e 75 63 2e 70  eOffset(pC->uc.p
13590 43 75 72 73 6f 72 29 29 3b 0a 20 20 7d 0a 20 20  Cursor));.  }.  
135a0 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20  break;.}.#endif 
135b0 2f 2a 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  /* SQLITE_ENABLE
135c0 5f 4f 46 46 53 45 54 5f 53 51 4c 5f 46 55 4e 43  _OFFSET_SQL_FUNC
135d0 20 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20   */../* Opcode: 
135e0 43 6f 6c 75 6d 6e 20 50 31 20 50 32 20 50 33 20  Column P1 P2 P3 
135f0 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69  P4 P5.** Synopsi
13600 73 3a 20 72 5b 50 33 5d 3d 50 58 0a 2a 2a 0a 2a  s: r[P3]=PX.**.*
13610 2a 20 49 6e 74 65 72 70 72 65 74 20 74 68 65 20  * Interpret the 
13620 64 61 74 61 20 74 68 61 74 20 63 75 72 73 6f 72  data that cursor
13630 20 50 31 20 70 6f 69 6e 74 73 20 74 6f 20 61 73   P1 points to as
13640 20 61 20 73 74 72 75 63 74 75 72 65 20 62 75 69   a structure bui
13650 6c 74 20 75 73 69 6e 67 0a 2a 2a 20 74 68 65 20  lt using.** the 
13660 4d 61 6b 65 52 65 63 6f 72 64 20 69 6e 73 74 72  MakeRecord instr
13670 75 63 74 69 6f 6e 2e 20 20 28 53 65 65 20 74 68  uction.  (See th
13680 65 20 4d 61 6b 65 52 65 63 6f 72 64 20 6f 70 63  e MakeRecord opc
13690 6f 64 65 20 66 6f 72 20 61 64 64 69 74 69 6f 6e  ode for addition
136a0 61 6c 0a 2a 2a 20 69 6e 66 6f 72 6d 61 74 69 6f  al.** informatio
136b0 6e 20 61 62 6f 75 74 20 74 68 65 20 66 6f 72 6d  n about the form
136c0 61 74 20 6f 66 20 74 68 65 20 64 61 74 61 2e 29  at of the data.)
136d0 20 20 45 78 74 72 61 63 74 20 74 68 65 20 50 32    Extract the P2
136e0 2d 74 68 20 63 6f 6c 75 6d 6e 0a 2a 2a 20 66 72  -th column.** fr
136f0 6f 6d 20 74 68 69 73 20 72 65 63 6f 72 64 2e 20  om this record. 
13700 20 49 66 20 74 68 65 72 65 20 61 72 65 20 6c 65   If there are le
13710 73 73 20 74 68 61 74 20 28 50 32 2b 31 29 20 0a  ss that (P2+1) .
13720 2a 2a 20 76 61 6c 75 65 73 20 69 6e 20 74 68 65  ** values in the
13730 20 72 65 63 6f 72 64 2c 20 65 78 74 72 61 63 74   record, extract
13740 20 61 20 4e 55 4c 4c 2e 0a 2a 2a 0a 2a 2a 20 54   a NULL..**.** T
13750 68 65 20 76 61 6c 75 65 20 65 78 74 72 61 63 74  he value extract
13760 65 64 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20  ed is stored in 
13770 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a 0a  register P3..**.
13780 2a 2a 20 49 66 20 74 68 65 20 72 65 63 6f 72 64  ** If the record
13790 20 63 6f 6e 74 61 69 6e 73 20 66 65 77 65 72 20   contains fewer 
137a0 74 68 61 6e 20 50 32 20 66 69 65 6c 64 73 2c 20  than P2 fields, 
137b0 74 68 65 6e 20 65 78 74 72 61 63 74 20 61 20 4e  then extract a N
137c0 55 4c 4c 2e 20 20 4f 72 2c 0a 2a 2a 20 69 66 20  ULL.  Or,.** if 
137d0 74 68 65 20 50 34 20 61 72 67 75 6d 65 6e 74 20  the P4 argument 
137e0 69 73 20 61 20 50 34 5f 4d 45 4d 20 75 73 65 20  is a P4_MEM use 
137f0 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65  the value of the
13800 20 50 34 20 61 72 67 75 6d 65 6e 74 20 61 73 0a   P4 argument as.
13810 2a 2a 20 74 68 65 20 72 65 73 75 6c 74 2e 0a 2a  ** the result..*
13820 2a 0a 2a 2a 20 49 66 20 74 68 65 20 4f 50 46 4c  *.** If the OPFL
13830 41 47 5f 43 4c 45 41 52 43 41 43 48 45 20 62 69  AG_CLEARCACHE bi
13840 74 20 69 73 20 73 65 74 20 6f 6e 20 50 35 20 61  t is set on P5 a
13850 6e 64 20 50 31 20 69 73 20 61 20 70 73 65 75 64  nd P1 is a pseud
13860 6f 2d 74 61 62 6c 65 20 63 75 72 73 6f 72 2c 0a  o-table cursor,.
13870 2a 2a 20 74 68 65 6e 20 74 68 65 20 63 61 63 68  ** then the cach
13880 65 20 6f 66 20 74 68 65 20 63 75 72 73 6f 72 20  e of the cursor 
13890 69 73 20 72 65 73 65 74 20 70 72 69 6f 72 20 74  is reset prior t
138a0 6f 20 65 78 74 72 61 63 74 69 6e 67 20 74 68 65  o extracting the
138b0 20 63 6f 6c 75 6d 6e 2e 0a 2a 2a 20 54 68 65 20   column..** The 
138c0 66 69 72 73 74 20 4f 50 5f 43 6f 6c 75 6d 6e 20  first OP_Column 
138d0 61 67 61 69 6e 73 74 20 61 20 70 73 65 75 64 6f  against a pseudo
138e0 2d 74 61 62 6c 65 20 61 66 74 65 72 20 74 68 65  -table after the
138f0 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 63 6f   value of the co
13900 6e 74 65 6e 74 0a 2a 2a 20 72 65 67 69 73 74 65  ntent.** registe
13910 72 20 68 61 73 20 63 68 61 6e 67 65 64 20 73 68  r has changed sh
13920 6f 75 6c 64 20 68 61 76 65 20 74 68 69 73 20 62  ould have this b
13930 69 74 20 73 65 74 2e 0a 2a 2a 0a 2a 2a 20 49 66  it set..**.** If
13940 20 74 68 65 20 4f 50 46 4c 41 47 5f 4c 45 4e 47   the OPFLAG_LENG
13950 54 48 41 52 47 20 61 6e 64 20 4f 50 46 4c 41 47  THARG and OPFLAG
13960 5f 54 59 50 45 4f 46 41 52 47 20 62 69 74 73 20  _TYPEOFARG bits 
13970 61 72 65 20 73 65 74 20 6f 6e 20 50 35 20 74 68  are set on P5 th
13980 65 6e 0a 2a 2a 20 74 68 65 20 72 65 73 75 6c 74  en.** the result
13990 20 69 73 20 67 75 61 72 61 6e 74 65 65 64 20 74   is guaranteed t
139a0 6f 20 6f 6e 6c 79 20 62 65 20 75 73 65 64 20 61  o only be used a
139b0 73 20 74 68 65 20 61 72 67 75 6d 65 6e 74 20 6f  s the argument o
139c0 66 20 61 20 6c 65 6e 67 74 68 28 29 0a 2a 2a 20  f a length().** 
139d0 6f 72 20 74 79 70 65 6f 66 28 29 20 66 75 6e 63  or typeof() func
139e0 74 69 6f 6e 2c 20 72 65 73 70 65 63 74 69 76 65  tion, respective
139f0 6c 79 2e 20 20 54 68 65 20 6c 6f 61 64 69 6e 67  ly.  The loading
13a00 20 6f 66 20 6c 61 72 67 65 20 62 6c 6f 62 73 20   of large blobs 
13a10 63 61 6e 20 62 65 0a 2a 2a 20 73 6b 69 70 70 65  can be.** skippe
13a20 64 20 66 6f 72 20 6c 65 6e 67 74 68 28 29 20 61  d for length() a
13a30 6e 64 20 61 6c 6c 20 63 6f 6e 74 65 6e 74 20 6c  nd all content l
13a40 6f 61 64 69 6e 67 20 63 61 6e 20 62 65 20 73 6b  oading can be sk
13a50 69 70 70 65 64 20 66 6f 72 20 74 79 70 65 6f 66  ipped for typeof
13a60 28 29 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43  ()..*/.case OP_C
13a70 6f 6c 75 6d 6e 3a 20 7b 0a 20 20 69 6e 74 20 70  olumn: {.  int p
13a80 32 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  2;            /*
13a90 20 63 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72 20 74   column number t
13aa0 6f 20 72 65 74 72 69 65 76 65 20 2a 2f 0a 20 20  o retrieve */.  
13ab0 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 20  VdbeCursor *pC; 
13ac0 20 20 20 2f 2a 20 54 68 65 20 56 44 42 45 20 63     /* The VDBE c
13ad0 75 72 73 6f 72 20 2a 2f 0a 20 20 42 74 43 75 72  ursor */.  BtCur
13ae0 73 6f 72 20 2a 70 43 72 73 72 3b 20 20 20 2f 2a  sor *pCrsr;   /*
13af0 20 54 68 65 20 42 54 72 65 65 20 63 75 72 73 6f   The BTree curso
13b00 72 20 2a 2f 0a 20 20 75 33 32 20 2a 61 4f 66 66  r */.  u32 *aOff
13b10 73 65 74 3b 20 20 20 20 20 20 2f 2a 20 61 4f 66  set;      /* aOf
13b20 66 73 65 74 5b 69 5d 20 69 73 20 6f 66 66 73 65  fset[i] is offse
13b30 74 20 74 6f 20 73 74 61 72 74 20 6f 66 20 64 61  t to start of da
13b40 74 61 20 66 6f 72 20 69 2d 74 68 20 63 6f 6c 75  ta for i-th colu
13b50 6d 6e 20 2a 2f 0a 20 20 69 6e 74 20 6c 65 6e 3b  mn */.  int len;
13b60 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68             /* Th
13b70 65 20 6c 65 6e 67 74 68 20 6f 66 20 74 68 65 20  e length of the 
13b80 73 65 72 69 61 6c 69 7a 65 64 20 64 61 74 61 20  serialized data 
13b90 66 6f 72 20 74 68 65 20 63 6f 6c 75 6d 6e 20 2a  for the column *
13ba0 2f 0a 20 20 69 6e 74 20 69 3b 20 20 20 20 20 20  /.  int i;      
13bb0 20 20 20 20 20 20 20 2f 2a 20 4c 6f 6f 70 20 63         /* Loop c
13bc0 6f 75 6e 74 65 72 20 2a 2f 0a 20 20 4d 65 6d 20  ounter */.  Mem 
13bd0 2a 70 44 65 73 74 3b 20 20 20 20 20 20 20 20 2f  *pDest;        /
13be0 2a 20 57 68 65 72 65 20 74 6f 20 77 72 69 74 65  * Where to write
13bf0 20 74 68 65 20 65 78 74 72 61 63 74 65 64 20 76   the extracted v
13c00 61 6c 75 65 20 2a 2f 0a 20 20 4d 65 6d 20 73 4d  alue */.  Mem sM
13c10 65 6d 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  em;          /* 
13c20 46 6f 72 20 73 74 6f 72 69 6e 67 20 74 68 65 20  For storing the 
13c30 72 65 63 6f 72 64 20 62 65 69 6e 67 20 64 65 63  record being dec
13c40 6f 64 65 64 20 2a 2f 0a 20 20 63 6f 6e 73 74 20  oded */.  const 
13c50 75 38 20 2a 7a 44 61 74 61 3b 20 20 20 2f 2a 20  u8 *zData;   /* 
13c60 50 61 72 74 20 6f 66 20 74 68 65 20 72 65 63 6f  Part of the reco
13c70 72 64 20 62 65 69 6e 67 20 64 65 63 6f 64 65 64  rd being decoded
13c80 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 75 38 20 2a   */.  const u8 *
13c90 7a 48 64 72 3b 20 20 20 20 2f 2a 20 4e 65 78 74  zHdr;    /* Next
13ca0 20 75 6e 70 61 72 73 65 64 20 62 79 74 65 20 6f   unparsed byte o
13cb0 66 20 74 68 65 20 68 65 61 64 65 72 20 2a 2f 0a  f the header */.
13cc0 20 20 63 6f 6e 73 74 20 75 38 20 2a 7a 45 6e 64    const u8 *zEnd
13cd0 48 64 72 3b 20 2f 2a 20 50 6f 69 6e 74 65 72 20  Hdr; /* Pointer 
13ce0 74 6f 20 66 69 72 73 74 20 62 79 74 65 20 61 66  to first byte af
13cf0 74 65 72 20 74 68 65 20 68 65 61 64 65 72 20 2a  ter the header *
13d00 2f 0a 20 20 75 36 34 20 6f 66 66 73 65 74 36 34  /.  u64 offset64
13d10 3b 20 20 20 20 20 20 2f 2a 20 36 34 2d 62 69 74  ;      /* 64-bit
13d20 20 6f 66 66 73 65 74 20 2a 2f 0a 20 20 75 33 32   offset */.  u32
13d30 20 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20   t;             
13d40 2f 2a 20 41 20 74 79 70 65 20 63 6f 64 65 20 66  /* A type code f
13d50 72 6f 6d 20 74 68 65 20 72 65 63 6f 72 64 20 68  rom the record h
13d60 65 61 64 65 72 20 2a 2f 0a 20 20 4d 65 6d 20 2a  eader */.  Mem *
13d70 70 52 65 67 3b 20 20 20 20 20 20 20 20 20 2f 2a  pReg;         /*
13d80 20 50 73 65 75 64 6f 54 61 62 6c 65 20 69 6e 70   PseudoTable inp
13d90 75 74 20 72 65 67 69 73 74 65 72 20 2a 2f 0a 0a  ut register */..
13da0 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b    pC = p->apCsr[
13db0 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 32 20 3d  pOp->p1];.  p2 =
13dc0 20 70 4f 70 2d 3e 70 32 3b 0a 0a 20 20 2f 2a 20   pOp->p2;..  /* 
13dd0 49 66 20 74 68 65 20 63 75 72 73 6f 72 20 63 61  If the cursor ca
13de0 63 68 65 20 69 73 20 73 74 61 6c 65 20 28 6d 65  che is stale (me
13df0 61 6e 69 6e 67 20 69 74 20 69 73 20 6e 6f 74 20  aning it is not 
13e00 63 75 72 72 65 6e 74 6c 79 20 70 6f 69 6e 74 20  currently point 
13e10 61 74 0a 20 20 2a 2a 20 74 68 65 20 63 6f 72 72  at.  ** the corr
13e20 65 63 74 20 72 6f 77 29 20 74 68 65 6e 20 62 72  ect row) then br
13e30 69 6e 67 20 69 74 20 75 70 2d 74 6f 2d 64 61 74  ing it up-to-dat
13e40 65 20 62 79 20 64 6f 69 6e 67 20 74 68 65 20 6e  e by doing the n
13e50 65 63 65 73 73 61 72 79 20 0a 20 20 2a 2a 20 42  ecessary .  ** B
13e60 2d 54 72 65 65 20 73 65 65 6b 2e 20 2a 2f 0a 20  -Tree seek. */. 
13e70 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62   rc = sqlite3Vdb
13e80 65 43 75 72 73 6f 72 4d 6f 76 65 74 6f 28 26 70  eCursorMoveto(&p
13e90 43 2c 20 26 70 32 29 3b 0a 20 20 69 66 28 20 72  C, &p2);.  if( r
13ea0 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64  c ) goto abort_d
13eb0 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 0a 20 20  ue_to_error;..  
13ec0 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e  assert( pOp->p3>
13ed0 30 20 26 26 20 70 4f 70 2d 3e 70 33 3c 3d 28 70  0 && pOp->p3<=(p
13ee0 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43  ->nMem+1 - p->nC
13ef0 75 72 73 6f 72 29 20 29 3b 0a 20 20 70 44 65 73  ursor) );.  pDes
13f00 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  t = &aMem[pOp->p
13f10 33 5d 3b 0a 20 20 6d 65 6d 41 62 6f 75 74 54 6f  3];.  memAboutTo
13f20 43 68 61 6e 67 65 28 70 2c 20 70 44 65 73 74 29  Change(p, pDest)
13f30 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
13f40 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70  >p1>=0 && pOp->p
13f50 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a  1<p->nCursor );.
13f60 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20    assert( pC!=0 
13f70 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 32 3c  );.  assert( p2<
13f80 70 43 2d 3e 6e 46 69 65 6c 64 20 29 3b 0a 20 20  pC->nField );.  
13f90 61 4f 66 66 73 65 74 20 3d 20 70 43 2d 3e 61 4f  aOffset = pC->aO
13fa0 66 66 73 65 74 3b 0a 20 20 61 73 73 65 72 74 28  ffset;.  assert(
13fb0 20 70 43 2d 3e 65 43 75 72 54 79 70 65 21 3d 43   pC->eCurType!=C
13fc0 55 52 54 59 50 45 5f 56 54 41 42 20 29 3b 0a 20  URTYPE_VTAB );. 
13fd0 20 61 73 73 65 72 74 28 20 70 43 2d 3e 65 43 75   assert( pC->eCu
13fe0 72 54 79 70 65 21 3d 43 55 52 54 59 50 45 5f 50  rType!=CURTYPE_P
13ff0 53 45 55 44 4f 20 7c 7c 20 70 43 2d 3e 6e 75 6c  SEUDO || pC->nul
14000 6c 52 6f 77 20 29 3b 0a 20 20 61 73 73 65 72 74  lRow );.  assert
14010 28 20 70 43 2d 3e 65 43 75 72 54 79 70 65 21 3d  ( pC->eCurType!=
14020 43 55 52 54 59 50 45 5f 53 4f 52 54 45 52 20 29  CURTYPE_SORTER )
14030 3b 0a 0a 20 20 69 66 28 20 70 43 2d 3e 63 61 63  ;..  if( pC->cac
14040 68 65 53 74 61 74 75 73 21 3d 70 2d 3e 63 61 63  heStatus!=p->cac
14050 68 65 43 74 72 20 29 7b 20 20 20 20 20 20 20 20  heCtr ){        
14060 20 20 20 20 20 20 20 20 2f 2a 4f 50 54 49 4d 49          /*OPTIMI
14070 5a 41 54 49 4f 4e 2d 49 46 2d 46 41 4c 53 45 2a  ZATION-IF-FALSE*
14080 2f 0a 20 20 20 20 69 66 28 20 70 43 2d 3e 6e 75  /.    if( pC->nu
14090 6c 6c 52 6f 77 20 29 7b 0a 20 20 20 20 20 20 69  llRow ){.      i
140a0 66 28 20 70 43 2d 3e 65 43 75 72 54 79 70 65 3d  f( pC->eCurType=
140b0 3d 43 55 52 54 59 50 45 5f 50 53 45 55 44 4f 20  =CURTYPE_PSEUDO 
140c0 29 7b 0a 20 20 20 20 20 20 20 20 2f 2a 20 46 6f  ){.        /* Fo
140d0 72 20 74 68 65 20 73 70 65 63 69 61 6c 20 63 61  r the special ca
140e0 73 65 20 6f 66 20 61 73 20 70 73 65 75 64 6f 2d  se of as pseudo-
140f0 63 75 72 73 6f 72 2c 20 74 68 65 20 73 65 65 6b  cursor, the seek
14100 52 65 73 75 6c 74 20 66 69 65 6c 64 0a 20 20 20  Result field.   
14110 20 20 20 20 20 2a 2a 20 69 64 65 6e 74 69 66 69       ** identifi
14120 65 73 20 74 68 65 20 72 65 67 69 73 74 65 72 20  es the register 
14130 74 68 61 74 20 68 6f 6c 64 73 20 74 68 65 20 72  that holds the r
14140 65 63 6f 72 64 20 2a 2f 0a 20 20 20 20 20 20 20  ecord */.       
14150 20 61 73 73 65 72 74 28 20 70 43 2d 3e 73 65 65   assert( pC->see
14160 6b 52 65 73 75 6c 74 3e 30 20 29 3b 0a 20 20 20  kResult>0 );.   
14170 20 20 20 20 20 70 52 65 67 20 3d 20 26 61 4d 65       pReg = &aMe
14180 6d 5b 70 43 2d 3e 73 65 65 6b 52 65 73 75 6c 74  m[pC->seekResult
14190 5d 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72  ];.        asser
141a0 74 28 20 70 52 65 67 2d 3e 66 6c 61 67 73 20 26  t( pReg->flags &
141b0 20 4d 45 4d 5f 42 6c 6f 62 20 29 3b 0a 20 20 20   MEM_Blob );.   
141c0 20 20 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d       assert( mem
141d0 49 73 56 61 6c 69 64 28 70 52 65 67 29 20 29 3b  IsValid(pReg) );
141e0 0a 20 20 20 20 20 20 20 20 70 43 2d 3e 70 61 79  .        pC->pay
141f0 6c 6f 61 64 53 69 7a 65 20 3d 20 70 43 2d 3e 73  loadSize = pC->s
14200 7a 52 6f 77 20 3d 20 70 52 65 67 2d 3e 6e 3b 0a  zRow = pReg->n;.
14210 20 20 20 20 20 20 20 20 70 43 2d 3e 61 52 6f 77          pC->aRow
14220 20 3d 20 28 75 38 2a 29 70 52 65 67 2d 3e 7a 3b   = (u8*)pReg->z;
14230 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  .      }else{.  
14240 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
14250 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 44 65 73  eMemSetNull(pDes
14260 74 29 3b 0a 20 20 20 20 20 20 20 20 67 6f 74 6f  t);.        goto
14270 20 6f 70 5f 63 6f 6c 75 6d 6e 5f 6f 75 74 3b 0a   op_column_out;.
14280 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 65 6c 73        }.    }els
14290 65 7b 0a 20 20 20 20 20 20 70 43 72 73 72 20 3d  e{.      pCrsr =
142a0 20 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 3b   pC->uc.pCursor;
142b0 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70  .      assert( p
142c0 43 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43 55 52  C->eCurType==CUR
142d0 54 59 50 45 5f 42 54 52 45 45 20 29 3b 0a 20 20  TYPE_BTREE );.  
142e0 20 20 20 20 61 73 73 65 72 74 28 20 70 43 72 73      assert( pCrs
142f0 72 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72  r );.      asser
14300 74 28 20 73 71 6c 69 74 65 33 42 74 72 65 65 43  t( sqlite3BtreeC
14310 75 72 73 6f 72 49 73 56 61 6c 69 64 28 70 43 72  ursorIsValid(pCr
14320 73 72 29 20 29 3b 0a 20 20 20 20 20 20 70 43 2d  sr) );.      pC-
14330 3e 70 61 79 6c 6f 61 64 53 69 7a 65 20 3d 20 73  >payloadSize = s
14340 71 6c 69 74 65 33 42 74 72 65 65 50 61 79 6c 6f  qlite3BtreePaylo
14350 61 64 53 69 7a 65 28 70 43 72 73 72 29 3b 0a 20  adSize(pCrsr);. 
14360 20 20 20 20 20 70 43 2d 3e 61 52 6f 77 20 3d 20       pC->aRow = 
14370 73 71 6c 69 74 65 33 42 74 72 65 65 50 61 79 6c  sqlite3BtreePayl
14380 6f 61 64 46 65 74 63 68 28 70 43 72 73 72 2c 20  oadFetch(pCrsr, 
14390 26 70 43 2d 3e 73 7a 52 6f 77 29 3b 0a 20 20 20  &pC->szRow);.   
143a0 20 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 73     assert( pC->s
143b0 7a 52 6f 77 3c 3d 70 43 2d 3e 70 61 79 6c 6f 61  zRow<=pC->payloa
143c0 64 53 69 7a 65 20 29 3b 0a 20 20 20 20 20 20 61  dSize );.      a
143d0 73 73 65 72 74 28 20 70 43 2d 3e 73 7a 52 6f 77  ssert( pC->szRow
143e0 3c 3d 36 35 35 33 36 20 29 3b 20 20 2f 2a 20 4d  <=65536 );  /* M
143f0 61 78 69 6d 75 6d 20 70 61 67 65 20 73 69 7a 65  aximum page size
14400 20 69 73 20 36 34 4b 69 42 20 2a 2f 0a 20 20 20   is 64KiB */.   
14410 20 20 20 69 66 28 20 70 43 2d 3e 70 61 79 6c 6f     if( pC->paylo
14420 61 64 53 69 7a 65 20 3e 20 28 75 33 32 29 64 62  adSize > (u32)db
14430 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f  ->aLimit[SQLITE_
14440 4c 49 4d 49 54 5f 4c 45 4e 47 54 48 5d 20 29 7b  LIMIT_LENGTH] ){
14450 0a 20 20 20 20 20 20 20 20 67 6f 74 6f 20 74 6f  .        goto to
14460 6f 5f 62 69 67 3b 0a 20 20 20 20 20 20 7d 0a 20  o_big;.      }. 
14470 20 20 20 7d 0a 20 20 20 20 70 43 2d 3e 63 61 63     }.    pC->cac
14480 68 65 53 74 61 74 75 73 20 3d 20 70 2d 3e 63 61  heStatus = p->ca
14490 63 68 65 43 74 72 3b 0a 20 20 20 20 70 43 2d 3e  cheCtr;.    pC->
144a0 69 48 64 72 4f 66 66 73 65 74 20 3d 20 67 65 74  iHdrOffset = get
144b0 56 61 72 69 6e 74 33 32 28 70 43 2d 3e 61 52 6f  Varint32(pC->aRo
144c0 77 2c 20 61 4f 66 66 73 65 74 5b 30 5d 29 3b 0a  w, aOffset[0]);.
144d0 20 20 20 20 70 43 2d 3e 6e 48 64 72 50 61 72 73      pC->nHdrPars
144e0 65 64 20 3d 20 30 3b 0a 0a 0a 20 20 20 20 69 66  ed = 0;...    if
144f0 28 20 70 43 2d 3e 73 7a 52 6f 77 3c 61 4f 66 66  ( pC->szRow<aOff
14500 73 65 74 5b 30 5d 20 29 7b 20 20 20 20 20 20 2f  set[0] ){      /
14510 2a 4f 50 54 49 4d 49 5a 41 54 49 4f 4e 2d 49 46  *OPTIMIZATION-IF
14520 2d 46 41 4c 53 45 2a 2f 0a 20 20 20 20 20 20 2f  -FALSE*/.      /
14530 2a 20 70 43 2d 3e 61 52 6f 77 20 64 6f 65 73 20  * pC->aRow does 
14540 6e 6f 74 20 68 61 76 65 20 74 6f 20 68 6f 6c 64  not have to hold
14550 20 74 68 65 20 65 6e 74 69 72 65 20 72 6f 77 2c   the entire row,
14560 20 62 75 74 20 69 74 20 64 6f 65 73 20 61 74 20   but it does at 
14570 6c 65 61 73 74 0a 20 20 20 20 20 20 2a 2a 20 6e  least.      ** n
14580 65 65 64 20 74 6f 20 63 6f 76 65 72 20 74 68 65  eed to cover the
14590 20 68 65 61 64 65 72 20 6f 66 20 74 68 65 20 72   header of the r
145a0 65 63 6f 72 64 2e 20 20 49 66 20 70 43 2d 3e 61  ecord.  If pC->a
145b0 52 6f 77 20 64 6f 65 73 20 6e 6f 74 20 63 6f 6e  Row does not con
145c0 74 61 69 6e 0a 20 20 20 20 20 20 2a 2a 20 74 68  tain.      ** th
145d0 65 20 63 6f 6d 70 6c 65 74 65 20 68 65 61 64 65  e complete heade
145e0 72 2c 20 74 68 65 6e 20 73 65 74 20 69 74 20 74  r, then set it t
145f0 6f 20 7a 65 72 6f 2c 20 66 6f 72 63 69 6e 67 20  o zero, forcing 
14600 74 68 65 20 68 65 61 64 65 72 20 74 6f 20 62 65  the header to be
14610 0a 20 20 20 20 20 20 2a 2a 20 64 79 6e 61 6d 69  .      ** dynami
14620 63 61 6c 6c 79 20 61 6c 6c 6f 63 61 74 65 64 2e  cally allocated.
14630 20 2a 2f 0a 20 20 20 20 20 20 70 43 2d 3e 61 52   */.      pC->aR
14640 6f 77 20 3d 20 30 3b 0a 20 20 20 20 20 20 70 43  ow = 0;.      pC
14650 2d 3e 73 7a 52 6f 77 20 3d 20 30 3b 0a 0a 20 20  ->szRow = 0;..  
14660 20 20 20 20 2f 2a 20 4d 61 6b 65 20 73 75 72 65      /* Make sure
14670 20 61 20 63 6f 72 72 75 70 74 20 64 61 74 61 62   a corrupt datab
14680 61 73 65 20 68 61 73 20 6e 6f 74 20 67 69 76 65  ase has not give
14690 6e 20 75 73 20 61 6e 20 6f 76 65 72 73 69 7a 65  n us an oversize
146a0 20 68 65 61 64 65 72 2e 0a 20 20 20 20 20 20 2a   header..      *
146b0 2a 20 44 6f 20 74 68 69 73 20 6e 6f 77 20 74 6f  * Do this now to
146c0 20 61 76 6f 69 64 20 61 6e 20 6f 76 65 72 73 69   avoid an oversi
146d0 7a 65 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61  ze memory alloca
146e0 74 69 6f 6e 2e 0a 20 20 20 20 20 20 2a 2a 0a 20  tion..      **. 
146f0 20 20 20 20 20 2a 2a 20 54 79 70 65 20 65 6e 74       ** Type ent
14700 72 69 65 73 20 63 61 6e 20 62 65 20 62 65 74 77  ries can be betw
14710 65 65 6e 20 31 20 61 6e 64 20 35 20 62 79 74 65  een 1 and 5 byte
14720 73 20 65 61 63 68 2e 20 20 42 75 74 20 34 20 61  s each.  But 4 a
14730 6e 64 20 35 20 62 79 74 65 0a 20 20 20 20 20 20  nd 5 byte.      
14740 2a 2a 20 74 79 70 65 73 20 75 73 65 20 73 6f 20  ** types use so 
14750 6d 75 63 68 20 64 61 74 61 20 73 70 61 63 65 20  much data space 
14760 74 68 61 74 20 74 68 65 72 65 20 63 61 6e 20 6f  that there can o
14770 6e 6c 79 20 62 65 20 34 30 39 36 20 61 6e 64 20  nly be 4096 and 
14780 33 32 20 6f 66 0a 20 20 20 20 20 20 2a 2a 20 74  32 of.      ** t
14790 68 65 6d 2c 20 72 65 73 70 65 63 74 69 76 65 6c  hem, respectivel
147a0 79 2e 20 20 53 6f 20 74 68 65 20 6d 61 78 69 6d  y.  So the maxim
147b0 75 6d 20 68 65 61 64 65 72 20 6c 65 6e 67 74 68  um header length
147c0 20 72 65 73 75 6c 74 73 20 66 72 6f 6d 20 61 0a   results from a.
147d0 20 20 20 20 20 20 2a 2a 20 33 2d 62 79 74 65 20        ** 3-byte 
147e0 74 79 70 65 20 66 6f 72 20 65 61 63 68 20 6f 66  type for each of
147f0 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 6f 66 20   the maximum of 
14800 33 32 37 36 38 20 63 6f 6c 75 6d 6e 73 20 70 6c  32768 columns pl
14810 75 73 20 74 68 72 65 65 0a 20 20 20 20 20 20 2a  us three.      *
14820 2a 20 65 78 74 72 61 20 62 79 74 65 73 20 66 6f  * extra bytes fo
14830 72 20 74 68 65 20 68 65 61 64 65 72 20 6c 65 6e  r the header len
14840 67 74 68 20 69 74 73 65 6c 66 2e 20 20 33 32 37  gth itself.  327
14850 36 38 2a 33 20 2b 20 33 20 3d 20 39 38 33 30 37  68*3 + 3 = 98307
14860 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20  ..      */.     
14870 20 69 66 28 20 61 4f 66 66 73 65 74 5b 30 5d 20   if( aOffset[0] 
14880 3e 20 39 38 33 30 37 20 7c 7c 20 61 4f 66 66 73  > 98307 || aOffs
14890 65 74 5b 30 5d 20 3e 20 70 43 2d 3e 70 61 79 6c  et[0] > pC->payl
148a0 6f 61 64 53 69 7a 65 20 29 7b 0a 20 20 20 20 20  oadSize ){.     
148b0 20 20 20 67 6f 74 6f 20 6f 70 5f 63 6f 6c 75 6d     goto op_colum
148c0 6e 5f 63 6f 72 72 75 70 74 3b 0a 20 20 20 20 20  n_corrupt;.     
148d0 20 7d 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20   }.    }else{.  
148e0 20 20 20 20 2f 2a 20 54 68 69 73 20 69 73 20 61      /* This is a
148f0 6e 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 2e 20  n optimization. 
14900 20 42 79 20 73 6b 69 70 70 69 6e 67 20 6f 76 65   By skipping ove
14910 72 20 74 68 65 20 66 69 72 73 74 20 66 65 77 20  r the first few 
14920 74 65 73 74 73 0a 20 20 20 20 20 20 2a 2a 20 28  tests.      ** (
14930 65 78 3a 20 70 43 2d 3e 6e 48 64 72 50 61 72 73  ex: pC->nHdrPars
14940 65 64 3c 3d 70 32 29 20 69 6e 20 74 68 65 20 6e  ed<=p2) in the n
14950 65 78 74 20 73 65 63 74 69 6f 6e 2c 20 77 65 20  ext section, we 
14960 61 63 68 69 65 76 65 20 61 0a 20 20 20 20 20 20  achieve a.      
14970 2a 2a 20 6d 65 61 73 75 72 61 62 6c 65 20 70 65  ** measurable pe
14980 72 66 6f 72 6d 61 6e 63 65 20 67 61 69 6e 2e 0a  rformance gain..
14990 20 20 20 20 20 20 2a 2a 0a 20 20 20 20 20 20 2a        **.      *
149a0 2a 20 54 68 69 73 20 62 72 61 6e 63 68 20 69 73  * This branch is
149b0 20 74 61 6b 65 6e 20 65 76 65 6e 20 69 66 20 61   taken even if a
149c0 4f 66 66 73 65 74 5b 30 5d 3d 3d 30 2e 20 20 53  Offset[0]==0.  S
149d0 75 63 68 20 61 20 72 65 63 6f 72 64 20 69 73 20  uch a record is 
149e0 6e 65 76 65 72 0a 20 20 20 20 20 20 2a 2a 20 67  never.      ** g
149f0 65 6e 65 72 61 74 65 64 20 62 79 20 53 51 4c 69  enerated by SQLi
14a00 74 65 2c 20 61 6e 64 20 63 6f 75 6c 64 20 62 65  te, and could be
14a10 20 63 6f 6e 73 69 64 65 72 65 64 20 63 6f 72 72   considered corr
14a20 75 70 74 69 6f 6e 2c 20 62 75 74 20 77 65 0a 20  uption, but we. 
14a30 20 20 20 20 20 2a 2a 20 61 63 63 65 70 74 20 69       ** accept i
14a40 74 20 66 6f 72 20 68 69 73 74 6f 72 69 63 61 6c  t for historical
14a50 20 72 65 61 73 6f 6e 73 2e 20 20 57 68 65 6e 20   reasons.  When 
14a60 61 4f 66 66 73 65 74 5b 30 5d 3d 3d 30 2c 20 74  aOffset[0]==0, t
14a70 68 65 20 63 6f 64 65 20 74 68 69 73 0a 20 20 20  he code this.   
14a80 20 20 20 2a 2a 20 62 72 61 6e 63 68 20 6a 75 6d     ** branch jum
14a90 70 73 20 74 6f 20 72 65 61 64 73 20 70 61 73 74  ps to reads past
14aa0 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20   the end of the 
14ab0 72 65 63 6f 72 64 2c 20 62 75 74 20 6e 65 76 65  record, but neve
14ac0 72 20 6d 6f 72 65 0a 20 20 20 20 20 20 2a 2a 20  r more.      ** 
14ad0 74 68 61 6e 20 61 20 66 65 77 20 62 79 74 65 73  than a few bytes
14ae0 2e 20 20 45 76 65 6e 20 69 66 20 74 68 65 20 72  .  Even if the r
14af0 65 63 6f 72 64 20 6f 63 63 75 72 73 20 61 74 20  ecord occurs at 
14b00 74 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20 70  the end of the p
14b10 61 67 65 0a 20 20 20 20 20 20 2a 2a 20 63 6f 6e  age.      ** con
14b20 74 65 6e 74 20 61 72 65 61 2c 20 74 68 65 20 22  tent area, the "
14b30 70 61 67 65 20 68 65 61 64 65 72 22 20 63 6f 6d  page header" com
14b40 65 73 20 61 66 74 65 72 20 74 68 65 20 70 61 67  es after the pag
14b50 65 20 63 6f 6e 74 65 6e 74 20 61 6e 64 20 73 6f  e content and so
14b60 0a 20 20 20 20 20 20 2a 2a 20 74 68 69 73 20 6f  .      ** this o
14b70 76 65 72 72 65 61 64 20 69 73 20 68 61 72 6d 6c  verread is harml
14b80 65 73 73 2e 20 20 53 69 6d 69 6c 61 72 20 6f 76  ess.  Similar ov
14b90 65 72 72 65 61 64 73 20 63 61 6e 20 6f 63 63 75  erreads can occu
14ba0 72 20 66 6f 72 20 61 20 63 6f 72 72 75 70 74 0a  r for a corrupt.
14bb0 20 20 20 20 20 20 2a 2a 20 64 61 74 61 62 61 73        ** databas
14bc0 65 20 66 69 6c 65 2e 0a 20 20 20 20 20 20 2a 2f  e file..      */
14bd0 0a 20 20 20 20 20 20 7a 44 61 74 61 20 3d 20 70  .      zData = p
14be0 43 2d 3e 61 52 6f 77 3b 0a 20 20 20 20 20 20 61  C->aRow;.      a
14bf0 73 73 65 72 74 28 20 70 43 2d 3e 6e 48 64 72 50  ssert( pC->nHdrP
14c00 61 72 73 65 64 3c 3d 70 32 20 29 3b 20 20 20 20  arsed<=p2 );    
14c10 20 20 20 20 20 2f 2a 20 43 6f 6e 64 69 74 69 6f       /* Conditio
14c20 6e 61 6c 20 73 6b 69 70 70 65 64 20 2a 2f 0a 20  nal skipped */. 
14c30 20 20 20 20 20 74 65 73 74 63 61 73 65 28 20 61       testcase( a
14c40 4f 66 66 73 65 74 5b 30 5d 3d 3d 30 20 29 3b 0a  Offset[0]==0 );.
14c50 20 20 20 20 20 20 67 6f 74 6f 20 6f 70 5f 63 6f        goto op_co
14c60 6c 75 6d 6e 5f 72 65 61 64 5f 68 65 61 64 65 72  lumn_read_header
14c70 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 0a 20 20 2f  ;.    }.  }..  /
14c80 2a 20 4d 61 6b 65 20 73 75 72 65 20 61 74 20 6c  * Make sure at l
14c90 65 61 73 74 20 74 68 65 20 66 69 72 73 74 20 70  east the first p
14ca0 32 2b 31 20 65 6e 74 72 69 65 73 20 6f 66 20 74  2+1 entries of t
14cb0 68 65 20 68 65 61 64 65 72 20 68 61 76 65 20 62  he header have b
14cc0 65 65 6e 0a 20 20 2a 2a 20 70 61 72 73 65 64 20  een.  ** parsed 
14cd0 61 6e 64 20 76 61 6c 69 64 20 69 6e 66 6f 72 6d  and valid inform
14ce0 61 74 69 6f 6e 20 69 73 20 69 6e 20 61 4f 66 66  ation is in aOff
14cf0 73 65 74 5b 5d 20 61 6e 64 20 70 43 2d 3e 61 54  set[] and pC->aT
14d00 79 70 65 5b 5d 2e 0a 20 20 2a 2f 0a 20 20 69 66  ype[]..  */.  if
14d10 28 20 70 43 2d 3e 6e 48 64 72 50 61 72 73 65 64  ( pC->nHdrParsed
14d20 3c 3d 70 32 20 29 7b 0a 20 20 20 20 2f 2a 20 49  <=p2 ){.    /* I
14d30 66 20 74 68 65 72 65 20 69 73 20 6d 6f 72 65 20  f there is more 
14d40 68 65 61 64 65 72 20 61 76 61 69 6c 61 62 6c 65  header available
14d50 20 66 6f 72 20 70 61 72 73 69 6e 67 20 69 6e 20   for parsing in 
14d60 74 68 65 20 72 65 63 6f 72 64 2c 20 74 72 79 0a  the record, try.
14d70 20 20 20 20 2a 2a 20 74 6f 20 65 78 74 72 61 63      ** to extrac
14d80 74 20 61 64 64 69 74 69 6f 6e 61 6c 20 66 69 65  t additional fie
14d90 6c 64 73 20 75 70 20 74 68 72 6f 75 67 68 20 74  lds up through t
14da0 68 65 20 70 32 2b 31 2d 74 68 20 66 69 65 6c 64  he p2+1-th field
14db0 20 0a 20 20 20 20 2a 2f 0a 20 20 20 20 69 66 28   .    */.    if(
14dc0 20 70 43 2d 3e 69 48 64 72 4f 66 66 73 65 74 3c   pC->iHdrOffset<
14dd0 61 4f 66 66 73 65 74 5b 30 5d 20 29 7b 0a 20 20  aOffset[0] ){.  
14de0 20 20 20 20 2f 2a 20 4d 61 6b 65 20 73 75 72 65      /* Make sure
14df0 20 7a 44 61 74 61 20 70 6f 69 6e 74 73 20 74 6f   zData points to
14e00 20 65 6e 6f 75 67 68 20 6f 66 20 74 68 65 20 72   enough of the r
14e10 65 63 6f 72 64 20 74 6f 20 63 6f 76 65 72 20 74  ecord to cover t
14e20 68 65 20 68 65 61 64 65 72 2e 20 2a 2f 0a 20 20  he header. */.  
14e30 20 20 20 20 69 66 28 20 70 43 2d 3e 61 52 6f 77      if( pC->aRow
14e40 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 6d  ==0 ){.        m
14e50 65 6d 73 65 74 28 26 73 4d 65 6d 2c 20 30 2c 20  emset(&sMem, 0, 
14e60 73 69 7a 65 6f 66 28 73 4d 65 6d 29 29 3b 0a 20  sizeof(sMem));. 
14e70 20 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69         rc = sqli
14e80 74 65 33 56 64 62 65 4d 65 6d 46 72 6f 6d 42 74  te3VdbeMemFromBt
14e90 72 65 65 28 70 43 2d 3e 75 63 2e 70 43 75 72 73  ree(pC->uc.pCurs
14ea0 6f 72 2c 20 30 2c 20 61 4f 66 66 73 65 74 5b 30  or, 0, aOffset[0
14eb0 5d 2c 20 26 73 4d 65 6d 29 3b 0a 20 20 20 20 20  ], &sMem);.     
14ec0 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54     if( rc!=SQLIT
14ed0 45 5f 4f 4b 20 29 20 67 6f 74 6f 20 61 62 6f 72  E_OK ) goto abor
14ee0 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
14ef0 20 20 20 20 20 20 20 20 7a 44 61 74 61 20 3d 20          zData = 
14f00 28 75 38 2a 29 73 4d 65 6d 2e 7a 3b 0a 20 20 20  (u8*)sMem.z;.   
14f10 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
14f20 20 20 7a 44 61 74 61 20 3d 20 70 43 2d 3e 61 52    zData = pC->aR
14f30 6f 77 3b 0a 20 20 20 20 20 20 7d 0a 20 20 0a 20  ow;.      }.  . 
14f40 20 20 20 20 20 2f 2a 20 46 69 6c 6c 20 69 6e 20       /* Fill in 
14f50 70 43 2d 3e 61 54 79 70 65 5b 69 5d 20 61 6e 64  pC->aType[i] and
14f60 20 61 4f 66 66 73 65 74 5b 69 5d 20 76 61 6c 75   aOffset[i] valu
14f70 65 73 20 74 68 72 6f 75 67 68 20 74 68 65 20 70  es through the p
14f80 32 2d 74 68 20 66 69 65 6c 64 2e 20 2a 2f 0a 20  2-th field. */. 
14f90 20 20 20 6f 70 5f 63 6f 6c 75 6d 6e 5f 72 65 61     op_column_rea
14fa0 64 5f 68 65 61 64 65 72 3a 0a 20 20 20 20 20 20  d_header:.      
14fb0 69 20 3d 20 70 43 2d 3e 6e 48 64 72 50 61 72 73  i = pC->nHdrPars
14fc0 65 64 3b 0a 20 20 20 20 20 20 6f 66 66 73 65 74  ed;.      offset
14fd0 36 34 20 3d 20 61 4f 66 66 73 65 74 5b 69 5d 3b  64 = aOffset[i];
14fe0 0a 20 20 20 20 20 20 7a 48 64 72 20 3d 20 7a 44  .      zHdr = zD
14ff0 61 74 61 20 2b 20 70 43 2d 3e 69 48 64 72 4f 66  ata + pC->iHdrOf
15000 66 73 65 74 3b 0a 20 20 20 20 20 20 7a 45 6e 64  fset;.      zEnd
15010 48 64 72 20 3d 20 7a 44 61 74 61 20 2b 20 61 4f  Hdr = zData + aO
15020 66 66 73 65 74 5b 30 5d 3b 0a 20 20 20 20 20 20  ffset[0];.      
15030 74 65 73 74 63 61 73 65 28 20 7a 48 64 72 3e 3d  testcase( zHdr>=
15040 7a 45 6e 64 48 64 72 20 29 3b 0a 20 20 20 20 20  zEndHdr );.     
15050 20 64 6f 7b 0a 20 20 20 20 20 20 20 20 69 66 28   do{.        if(
15060 20 28 74 20 3d 20 7a 48 64 72 5b 30 5d 29 3c 30   (t = zHdr[0])<0
15070 78 38 30 20 29 7b 0a 20 20 20 20 20 20 20 20 20  x80 ){.         
15080 20 7a 48 64 72 2b 2b 3b 0a 20 20 20 20 20 20 20   zHdr++;.       
15090 20 20 20 6f 66 66 73 65 74 36 34 20 2b 3d 20 73     offset64 += s
150a0 71 6c 69 74 65 33 56 64 62 65 4f 6e 65 42 79 74  qlite3VdbeOneByt
150b0 65 53 65 72 69 61 6c 54 79 70 65 4c 65 6e 28 74  eSerialTypeLen(t
150c0 29 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c 73 65  );.        }else
150d0 7b 0a 20 20 20 20 20 20 20 20 20 20 7a 48 64 72  {.          zHdr
150e0 20 2b 3d 20 73 71 6c 69 74 65 33 47 65 74 56 61   += sqlite3GetVa
150f0 72 69 6e 74 33 32 28 7a 48 64 72 2c 20 26 74 29  rint32(zHdr, &t)
15100 3b 0a 20 20 20 20 20 20 20 20 20 20 6f 66 66 73  ;.          offs
15110 65 74 36 34 20 2b 3d 20 73 71 6c 69 74 65 33 56  et64 += sqlite3V
15120 64 62 65 53 65 72 69 61 6c 54 79 70 65 4c 65 6e  dbeSerialTypeLen
15130 28 74 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20  (t);.        }. 
15140 20 20 20 20 20 20 20 70 43 2d 3e 61 54 79 70 65         pC->aType
15150 5b 69 2b 2b 5d 20 3d 20 74 3b 0a 20 20 20 20 20  [i++] = t;.     
15160 20 20 20 61 4f 66 66 73 65 74 5b 69 5d 20 3d 20     aOffset[i] = 
15170 28 75 33 32 29 28 6f 66 66 73 65 74 36 34 20 26  (u32)(offset64 &
15180 20 30 78 66 66 66 66 66 66 66 66 29 3b 0a 20 20   0xffffffff);.  
15190 20 20 20 20 7d 77 68 69 6c 65 28 20 69 3c 3d 70      }while( i<=p
151a0 32 20 26 26 20 7a 48 64 72 3c 7a 45 6e 64 48 64  2 && zHdr<zEndHd
151b0 72 20 29 3b 0a 0a 20 20 20 20 20 20 2f 2a 20 54  r );..      /* T
151c0 68 65 20 72 65 63 6f 72 64 20 69 73 20 63 6f 72  he record is cor
151d0 72 75 70 74 20 69 66 20 61 6e 79 20 6f 66 20 74  rupt if any of t
151e0 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 72 65  he following are
151f0 20 74 72 75 65 3a 0a 20 20 20 20 20 20 2a 2a 20   true:.      ** 
15200 28 31 29 20 74 68 65 20 62 79 74 65 73 20 6f 66  (1) the bytes of
15210 20 74 68 65 20 68 65 61 64 65 72 20 65 78 74 65   the header exte
15220 6e 64 20 70 61 73 74 20 74 68 65 20 64 65 63 6c  nd past the decl
15230 61 72 65 64 20 68 65 61 64 65 72 20 73 69 7a 65  ared header size
15240 0a 20 20 20 20 20 20 2a 2a 20 28 32 29 20 74 68  .      ** (2) th
15250 65 20 65 6e 74 69 72 65 20 68 65 61 64 65 72 20  e entire header 
15260 77 61 73 20 75 73 65 64 20 62 75 74 20 6e 6f 74  was used but not
15270 20 61 6c 6c 20 64 61 74 61 20 77 61 73 20 75 73   all data was us
15280 65 64 0a 20 20 20 20 20 20 2a 2a 20 28 33 29 20  ed.      ** (3) 
15290 74 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20 64  the end of the d
152a0 61 74 61 20 65 78 74 65 6e 64 73 20 62 65 79 6f  ata extends beyo
152b0 6e 64 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68  nd the end of th
152c0 65 20 72 65 63 6f 72 64 2e 0a 20 20 20 20 20 20  e record..      
152d0 2a 2f 0a 20 20 20 20 20 20 69 66 28 20 28 7a 48  */.      if( (zH
152e0 64 72 3e 3d 7a 45 6e 64 48 64 72 20 26 26 20 28  dr>=zEndHdr && (
152f0 7a 48 64 72 3e 7a 45 6e 64 48 64 72 20 7c 7c 20  zHdr>zEndHdr || 
15300 6f 66 66 73 65 74 36 34 21 3d 70 43 2d 3e 70 61  offset64!=pC->pa
15310 79 6c 6f 61 64 53 69 7a 65 29 29 0a 20 20 20 20  yloadSize)).    
15320 20 20 20 7c 7c 20 28 6f 66 66 73 65 74 36 34 20     || (offset64 
15330 3e 20 70 43 2d 3e 70 61 79 6c 6f 61 64 53 69 7a  > pC->payloadSiz
15340 65 29 0a 20 20 20 20 20 20 29 7b 0a 20 20 20 20  e).      ){.    
15350 20 20 20 20 69 66 28 20 61 4f 66 66 73 65 74 5b      if( aOffset[
15360 30 5d 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20  0]==0 ){.       
15370 20 20 20 69 20 3d 20 30 3b 0a 20 20 20 20 20 20     i = 0;.      
15380 20 20 20 20 7a 48 64 72 20 3d 20 7a 45 6e 64 48      zHdr = zEndH
15390 64 72 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c 73  dr;.        }els
153a0 65 7b 0a 20 20 20 20 20 20 20 20 20 20 69 66 28  e{.          if(
153b0 20 70 43 2d 3e 61 52 6f 77 3d 3d 30 20 29 20 73   pC->aRow==0 ) s
153c0 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 52 65 6c  qlite3VdbeMemRel
153d0 65 61 73 65 28 26 73 4d 65 6d 29 3b 0a 20 20 20  ease(&sMem);.   
153e0 20 20 20 20 20 20 20 67 6f 74 6f 20 6f 70 5f 63         goto op_c
153f0 6f 6c 75 6d 6e 5f 63 6f 72 72 75 70 74 3b 0a 20  olumn_corrupt;. 
15400 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d         }.      }
15410 0a 0a 20 20 20 20 20 20 70 43 2d 3e 6e 48 64 72  ..      pC->nHdr
15420 50 61 72 73 65 64 20 3d 20 69 3b 0a 20 20 20 20  Parsed = i;.    
15430 20 20 70 43 2d 3e 69 48 64 72 4f 66 66 73 65 74    pC->iHdrOffset
15440 20 3d 20 28 75 33 32 29 28 7a 48 64 72 20 2d 20   = (u32)(zHdr - 
15450 7a 44 61 74 61 29 3b 0a 20 20 20 20 20 20 69 66  zData);.      if
15460 28 20 70 43 2d 3e 61 52 6f 77 3d 3d 30 20 29 20  ( pC->aRow==0 ) 
15470 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 52 65  sqlite3VdbeMemRe
15480 6c 65 61 73 65 28 26 73 4d 65 6d 29 3b 0a 20 20  lease(&sMem);.  
15490 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 74    }else{.      t
154a0 20 3d 20 30 3b 0a 20 20 20 20 7d 0a 0a 20 20 20   = 0;.    }..   
154b0 20 2f 2a 20 49 66 20 61 66 74 65 72 20 74 72 79   /* If after try
154c0 69 6e 67 20 74 6f 20 65 78 74 72 61 63 74 20 6e  ing to extract n
154d0 65 77 20 65 6e 74 72 69 65 73 20 66 72 6f 6d 20  ew entries from 
154e0 74 68 65 20 68 65 61 64 65 72 2c 20 6e 48 64 72  the header, nHdr
154f0 50 61 72 73 65 64 20 69 73 0a 20 20 20 20 2a 2a  Parsed is.    **
15500 20 73 74 69 6c 6c 20 6e 6f 74 20 75 70 20 74 6f   still not up to
15510 20 70 32 2c 20 74 68 61 74 20 6d 65 61 6e 73 20   p2, that means 
15520 74 68 61 74 20 74 68 65 20 72 65 63 6f 72 64 20  that the record 
15530 68 61 73 20 66 65 77 65 72 20 74 68 61 6e 20 70  has fewer than p
15540 32 0a 20 20 20 20 2a 2a 20 63 6f 6c 75 6d 6e 73  2.    ** columns
15550 2e 20 20 53 6f 20 74 68 65 20 72 65 73 75 6c 74  .  So the result
15560 20 77 69 6c 6c 20 62 65 20 65 69 74 68 65 72 20   will be either 
15570 74 68 65 20 64 65 66 61 75 6c 74 20 76 61 6c 75  the default valu
15580 65 20 6f 72 20 61 20 4e 55 4c 4c 2e 0a 20 20 20  e or a NULL..   
15590 20 2a 2f 0a 20 20 20 20 69 66 28 20 70 43 2d 3e   */.    if( pC->
155a0 6e 48 64 72 50 61 72 73 65 64 3c 3d 70 32 20 29  nHdrParsed<=p2 )
155b0 7b 0a 20 20 20 20 20 20 69 66 28 20 70 4f 70 2d  {.      if( pOp-
155c0 3e 70 34 74 79 70 65 3d 3d 50 34 5f 4d 45 4d 20  >p4type==P4_MEM 
155d0 29 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  ){.        sqlit
155e0 65 33 56 64 62 65 4d 65 6d 53 68 61 6c 6c 6f 77  e3VdbeMemShallow
155f0 43 6f 70 79 28 70 44 65 73 74 2c 20 70 4f 70 2d  Copy(pDest, pOp-
15600 3e 70 34 2e 70 4d 65 6d 2c 20 4d 45 4d 5f 53 74  >p4.pMem, MEM_St
15610 61 74 69 63 29 3b 0a 20 20 20 20 20 20 7d 65 6c  atic);.      }el
15620 73 65 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69  se{.        sqli
15630 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c  te3VdbeMemSetNul
15640 6c 28 70 44 65 73 74 29 3b 0a 20 20 20 20 20 20  l(pDest);.      
15650 7d 0a 20 20 20 20 20 20 67 6f 74 6f 20 6f 70 5f  }.      goto op_
15660 63 6f 6c 75 6d 6e 5f 6f 75 74 3b 0a 20 20 20 20  column_out;.    
15670 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 74  }.  }else{.    t
15680 20 3d 20 70 43 2d 3e 61 54 79 70 65 5b 70 32 5d   = pC->aType[p2]
15690 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 45 78 74 72  ;.  }..  /* Extr
156a0 61 63 74 20 74 68 65 20 63 6f 6e 74 65 6e 74 20  act the content 
156b0 66 6f 72 20 74 68 65 20 70 32 2b 31 2d 74 68 20  for the p2+1-th 
156c0 63 6f 6c 75 6d 6e 2e 20 20 43 6f 6e 74 72 6f 6c  column.  Control
156d0 20 63 61 6e 20 6f 6e 6c 79 0a 20 20 2a 2a 20 72   can only.  ** r
156e0 65 61 63 68 20 74 68 69 73 20 70 6f 69 6e 74 20  each this point 
156f0 69 66 20 61 4f 66 66 73 65 74 5b 70 32 5d 2c 20  if aOffset[p2], 
15700 61 4f 66 66 73 65 74 5b 70 32 2b 31 5d 2c 20 61  aOffset[p2+1], a
15710 6e 64 20 70 43 2d 3e 61 54 79 70 65 5b 70 32 5d  nd pC->aType[p2]
15720 20 61 72 65 0a 20 20 2a 2a 20 61 6c 6c 20 76 61   are.  ** all va
15730 6c 69 64 2e 0a 20 20 2a 2f 0a 20 20 61 73 73 65  lid..  */.  asse
15740 72 74 28 20 70 32 3c 70 43 2d 3e 6e 48 64 72 50  rt( p2<pC->nHdrP
15750 61 72 73 65 64 20 29 3b 0a 20 20 61 73 73 65 72  arsed );.  asser
15760 74 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  t( rc==SQLITE_OK
15770 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 73 71   );.  assert( sq
15780 6c 69 74 65 33 56 64 62 65 43 68 65 63 6b 4d 65  lite3VdbeCheckMe
15790 6d 49 6e 76 61 72 69 61 6e 74 73 28 70 44 65 73  mInvariants(pDes
157a0 74 29 20 29 3b 0a 20 20 69 66 28 20 56 64 62 65  t) );.  if( Vdbe
157b0 4d 65 6d 44 79 6e 61 6d 69 63 28 70 44 65 73 74  MemDynamic(pDest
157c0 29 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  ) ){.    sqlite3
157d0 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70  VdbeMemSetNull(p
157e0 44 65 73 74 29 3b 0a 20 20 7d 0a 20 20 61 73 73  Dest);.  }.  ass
157f0 65 72 74 28 20 74 3d 3d 70 43 2d 3e 61 54 79 70  ert( t==pC->aTyp
15800 65 5b 70 32 5d 20 29 3b 0a 20 20 69 66 28 20 70  e[p2] );.  if( p
15810 43 2d 3e 73 7a 52 6f 77 3e 3d 61 4f 66 66 73 65  C->szRow>=aOffse
15820 74 5b 70 32 2b 31 5d 20 29 7b 0a 20 20 20 20 2f  t[p2+1] ){.    /
15830 2a 20 54 68 69 73 20 69 73 20 74 68 65 20 63 6f  * This is the co
15840 6d 6d 6f 6e 20 63 61 73 65 20 77 68 65 72 65 20  mmon case where 
15850 74 68 65 20 64 65 73 69 72 65 64 20 63 6f 6e 74  the desired cont
15860 65 6e 74 20 66 69 74 73 20 6f 6e 20 74 68 65 20  ent fits on the 
15870 6f 72 69 67 69 6e 61 6c 0a 20 20 20 20 2a 2a 20  original.    ** 
15880 70 61 67 65 20 2d 20 77 68 65 72 65 20 74 68 65  page - where the
15890 20 63 6f 6e 74 65 6e 74 20 69 73 20 6e 6f 74 20   content is not 
158a0 6f 6e 20 61 6e 20 6f 76 65 72 66 6c 6f 77 20 70  on an overflow p
158b0 61 67 65 20 2a 2f 0a 20 20 20 20 7a 44 61 74 61  age */.    zData
158c0 20 3d 20 70 43 2d 3e 61 52 6f 77 20 2b 20 61 4f   = pC->aRow + aO
158d0 66 66 73 65 74 5b 70 32 5d 3b 0a 20 20 20 20 69  ffset[p2];.    i
158e0 66 28 20 74 3c 31 32 20 29 7b 0a 20 20 20 20 20  f( t<12 ){.     
158f0 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 72 69   sqlite3VdbeSeri
15900 61 6c 47 65 74 28 7a 44 61 74 61 2c 20 74 2c 20  alGet(zData, t, 
15910 70 44 65 73 74 29 3b 0a 20 20 20 20 7d 65 6c 73  pDest);.    }els
15920 65 7b 0a 20 20 20 20 20 20 2f 2a 20 49 66 20 74  e{.      /* If t
15930 68 65 20 63 6f 6c 75 6d 6e 20 76 61 6c 75 65 20  he column value 
15940 69 73 20 61 20 73 74 72 69 6e 67 2c 20 77 65 20  is a string, we 
15950 6e 65 65 64 20 61 20 70 65 72 73 69 73 74 65 6e  need a persisten
15960 74 20 76 61 6c 75 65 2c 20 6e 6f 74 0a 20 20 20  t value, not.   
15970 20 20 20 2a 2a 20 61 20 4d 45 4d 5f 45 70 68 65     ** a MEM_Ephe
15980 6d 20 76 61 6c 75 65 2e 20 20 54 68 69 73 20 62  m value.  This b
15990 72 61 6e 63 68 20 69 73 20 61 20 66 61 73 74 20  ranch is a fast 
159a0 73 68 6f 72 74 2d 63 75 74 20 74 68 61 74 20 69  short-cut that i
159b0 73 20 65 71 75 69 76 61 6c 65 6e 74 0a 20 20 20  s equivalent.   
159c0 20 20 20 2a 2a 20 74 6f 20 63 61 6c 6c 69 6e 67     ** to calling
159d0 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 72 69   sqlite3VdbeSeri
159e0 61 6c 47 65 74 28 29 20 61 6e 64 20 73 71 6c 69  alGet() and sqli
159f0 74 65 33 56 64 62 65 44 65 65 70 68 65 6d 65 72  te3VdbeDeephemer
15a00 61 6c 69 7a 65 28 29 2e 0a 20 20 20 20 20 20 2a  alize()..      *
15a10 2f 0a 20 20 20 20 20 20 73 74 61 74 69 63 20 63  /.      static c
15a20 6f 6e 73 74 20 75 31 36 20 61 46 6c 61 67 5b 5d  onst u16 aFlag[]
15a30 20 3d 20 7b 20 4d 45 4d 5f 42 6c 6f 62 2c 20 4d   = { MEM_Blob, M
15a40 45 4d 5f 53 74 72 7c 4d 45 4d 5f 54 65 72 6d 20  EM_Str|MEM_Term 
15a50 7d 3b 0a 20 20 20 20 20 20 70 44 65 73 74 2d 3e  };.      pDest->
15a60 6e 20 3d 20 6c 65 6e 20 3d 20 28 74 2d 31 32 29  n = len = (t-12)
15a70 2f 32 3b 0a 20 20 20 20 20 20 70 44 65 73 74 2d  /2;.      pDest-
15a80 3e 65 6e 63 20 3d 20 65 6e 63 6f 64 69 6e 67 3b  >enc = encoding;
15a90 0a 20 20 20 20 20 20 69 66 28 20 70 44 65 73 74  .      if( pDest
15aa0 2d 3e 73 7a 4d 61 6c 6c 6f 63 20 3c 20 6c 65 6e  ->szMalloc < len
15ab0 2b 32 20 29 7b 0a 20 20 20 20 20 20 20 20 70 44  +2 ){.        pD
15ac0 65 73 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d  est->flags = MEM
15ad0 5f 4e 75 6c 6c 3b 0a 20 20 20 20 20 20 20 20 69  _Null;.        i
15ae0 66 28 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65  f( sqlite3VdbeMe
15af0 6d 47 72 6f 77 28 70 44 65 73 74 2c 20 6c 65 6e  mGrow(pDest, len
15b00 2b 32 2c 20 30 29 20 29 20 67 6f 74 6f 20 6e 6f  +2, 0) ) goto no
15b10 5f 6d 65 6d 3b 0a 20 20 20 20 20 20 7d 65 6c 73  _mem;.      }els
15b20 65 7b 0a 20 20 20 20 20 20 20 20 70 44 65 73 74  e{.        pDest
15b30 2d 3e 7a 20 3d 20 70 44 65 73 74 2d 3e 7a 4d 61  ->z = pDest->zMa
15b40 6c 6c 6f 63 3b 0a 20 20 20 20 20 20 7d 0a 20 20  lloc;.      }.  
15b50 20 20 20 20 6d 65 6d 63 70 79 28 70 44 65 73 74      memcpy(pDest
15b60 2d 3e 7a 2c 20 7a 44 61 74 61 2c 20 6c 65 6e 29  ->z, zData, len)
15b70 3b 0a 20 20 20 20 20 20 70 44 65 73 74 2d 3e 7a  ;.      pDest->z
15b80 5b 6c 65 6e 5d 20 3d 20 30 3b 0a 20 20 20 20 20  [len] = 0;.     
15b90 20 70 44 65 73 74 2d 3e 7a 5b 6c 65 6e 2b 31 5d   pDest->z[len+1]
15ba0 20 3d 20 30 3b 0a 20 20 20 20 20 20 70 44 65 73   = 0;.      pDes
15bb0 74 2d 3e 66 6c 61 67 73 20 3d 20 61 46 6c 61 67  t->flags = aFlag
15bc0 5b 74 26 31 5d 3b 0a 20 20 20 20 7d 0a 20 20 7d  [t&1];.    }.  }
15bd0 65 6c 73 65 7b 0a 20 20 20 20 70 44 65 73 74 2d  else{.    pDest-
15be0 3e 65 6e 63 20 3d 20 65 6e 63 6f 64 69 6e 67 3b  >enc = encoding;
15bf0 0a 20 20 20 20 2f 2a 20 54 68 69 73 20 62 72 61  .    /* This bra
15c00 6e 63 68 20 68 61 70 70 65 6e 73 20 6f 6e 6c 79  nch happens only
15c10 20 77 68 65 6e 20 63 6f 6e 74 65 6e 74 20 69 73   when content is
15c20 20 6f 6e 20 6f 76 65 72 66 6c 6f 77 20 70 61 67   on overflow pag
15c30 65 73 20 2a 2f 0a 20 20 20 20 69 66 28 20 28 28  es */.    if( ((
15c40 70 4f 70 2d 3e 70 35 20 26 20 28 4f 50 46 4c 41  pOp->p5 & (OPFLA
15c50 47 5f 4c 45 4e 47 54 48 41 52 47 7c 4f 50 46 4c  G_LENGTHARG|OPFL
15c60 41 47 5f 54 59 50 45 4f 46 41 52 47 29 29 21 3d  AG_TYPEOFARG))!=
15c70 30 0a 20 20 20 20 20 20 20 20 20 20 26 26 20 28  0.          && (
15c80 28 74 3e 3d 31 32 20 26 26 20 28 74 26 31 29 3d  (t>=12 && (t&1)=
15c90 3d 30 29 20 7c 7c 20 28 70 4f 70 2d 3e 70 35 20  =0) || (pOp->p5 
15ca0 26 20 4f 50 46 4c 41 47 5f 54 59 50 45 4f 46 41  & OPFLAG_TYPEOFA
15cb0 52 47 29 21 3d 30 29 29 0a 20 20 20 20 20 7c 7c  RG)!=0)).     ||
15cc0 20 28 6c 65 6e 20 3d 20 73 71 6c 69 74 65 33 56   (len = sqlite3V
15cd0 64 62 65 53 65 72 69 61 6c 54 79 70 65 4c 65 6e  dbeSerialTypeLen
15ce0 28 74 29 29 3d 3d 30 0a 20 20 20 20 29 7b 0a 20  (t))==0.    ){. 
15cf0 20 20 20 20 20 2f 2a 20 43 6f 6e 74 65 6e 74 20       /* Content 
15d00 69 73 20 69 72 72 65 6c 65 76 61 6e 74 20 66 6f  is irrelevant fo
15d10 72 0a 20 20 20 20 20 20 2a 2a 20 20 20 20 31 2e  r.      **    1.
15d20 20 74 68 65 20 74 79 70 65 6f 66 28 29 20 66 75   the typeof() fu
15d30 6e 63 74 69 6f 6e 2c 0a 20 20 20 20 20 20 2a 2a  nction,.      **
15d40 20 20 20 20 32 2e 20 74 68 65 20 6c 65 6e 67 74      2. the lengt
15d50 68 28 58 29 20 66 75 6e 63 74 69 6f 6e 20 69 66  h(X) function if
15d60 20 58 20 69 73 20 61 20 62 6c 6f 62 2c 20 61 6e   X is a blob, an
15d70 64 0a 20 20 20 20 20 20 2a 2a 20 20 20 20 33 2e  d.      **    3.
15d80 20 69 66 20 74 68 65 20 63 6f 6e 74 65 6e 74 20   if the content 
15d90 6c 65 6e 67 74 68 20 69 73 20 7a 65 72 6f 2e 0a  length is zero..
15da0 20 20 20 20 20 20 2a 2a 20 53 6f 20 77 65 20 6d        ** So we m
15db0 69 67 68 74 20 61 73 20 77 65 6c 6c 20 75 73 65  ight as well use
15dc0 20 62 6f 67 75 73 20 63 6f 6e 74 65 6e 74 20 72   bogus content r
15dd0 61 74 68 65 72 20 74 68 61 6e 20 72 65 61 64 69  ather than readi
15de0 6e 67 0a 20 20 20 20 20 20 2a 2a 20 63 6f 6e 74  ng.      ** cont
15df0 65 6e 74 20 66 72 6f 6d 20 64 69 73 6b 2e 20 0a  ent from disk. .
15e00 20 20 20 20 20 20 2a 2a 0a 20 20 20 20 20 20 2a        **.      *
15e10 2a 20 41 6c 74 68 6f 75 67 68 20 73 71 6c 69 74  * Although sqlit
15e20 65 33 56 64 62 65 53 65 72 69 61 6c 47 65 74 28  e3VdbeSerialGet(
15e30 29 20 6d 61 79 20 72 65 61 64 20 61 74 20 6d 6f  ) may read at mo
15e40 73 74 20 38 20 62 79 74 65 73 20 66 72 6f 6d 20  st 8 bytes from 
15e50 74 68 65 0a 20 20 20 20 20 20 2a 2a 20 62 75 66  the.      ** buf
15e60 66 65 72 20 70 61 73 73 65 64 20 74 6f 20 69 74  fer passed to it
15e70 2c 20 64 65 62 75 67 67 69 6e 67 20 66 75 6e 63  , debugging func
15e80 74 69 6f 6e 20 56 64 62 65 4d 65 6d 50 72 65 74  tion VdbeMemPret
15e90 74 79 50 72 69 6e 74 28 29 20 6d 61 79 0a 20 20  tyPrint() may.  
15ea0 20 20 20 20 2a 2a 20 72 65 61 64 20 75 70 20 74      ** read up t
15eb0 6f 20 31 36 2e 20 53 6f 20 31 36 20 62 79 74 65  o 16. So 16 byte
15ec0 73 20 6f 66 20 62 6f 67 75 73 20 63 6f 6e 74 65  s of bogus conte
15ed0 6e 74 20 69 73 20 73 75 70 70 6c 69 65 64 2e 0a  nt is supplied..
15ee0 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 73        */.      s
15ef0 74 61 74 69 63 20 75 38 20 61 5a 65 72 6f 5b 31  tatic u8 aZero[1
15f00 36 5d 3b 20 20 2f 2a 20 54 68 69 73 20 69 73 20  6];  /* This is 
15f10 74 68 65 20 62 6f 67 75 73 20 63 6f 6e 74 65 6e  the bogus conten
15f20 74 20 2a 2f 0a 20 20 20 20 20 20 73 71 6c 69 74  t */.      sqlit
15f30 65 33 56 64 62 65 53 65 72 69 61 6c 47 65 74 28  e3VdbeSerialGet(
15f40 61 5a 65 72 6f 2c 20 74 2c 20 70 44 65 73 74 29  aZero, t, pDest)
15f50 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20  ;.    }else{.   
15f60 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56     rc = sqlite3V
15f70 64 62 65 4d 65 6d 46 72 6f 6d 42 74 72 65 65 28  dbeMemFromBtree(
15f80 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 2c 20  pC->uc.pCursor, 
15f90 61 4f 66 66 73 65 74 5b 70 32 5d 2c 20 6c 65 6e  aOffset[p2], len
15fa0 2c 20 70 44 65 73 74 29 3b 0a 20 20 20 20 20 20  , pDest);.      
15fb0 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f  if( rc!=SQLITE_O
15fc0 4b 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64  K ) goto abort_d
15fd0 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20  ue_to_error;.   
15fe0 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65     sqlite3VdbeSe
15ff0 72 69 61 6c 47 65 74 28 28 63 6f 6e 73 74 20 75  rialGet((const u
16000 38 2a 29 70 44 65 73 74 2d 3e 7a 2c 20 74 2c 20  8*)pDest->z, t, 
16010 70 44 65 73 74 29 3b 0a 20 20 20 20 20 20 70 44  pDest);.      pD
16020 65 73 74 2d 3e 66 6c 61 67 73 20 26 3d 20 7e 4d  est->flags &= ~M
16030 45 4d 5f 45 70 68 65 6d 3b 0a 20 20 20 20 7d 0a  EM_Ephem;.    }.
16040 20 20 7d 0a 0a 6f 70 5f 63 6f 6c 75 6d 6e 5f 6f    }..op_column_o
16050 75 74 3a 0a 20 20 55 50 44 41 54 45 5f 4d 41 58  ut:.  UPDATE_MAX
16060 5f 42 4c 4f 42 53 49 5a 45 28 70 44 65 73 74 29  _BLOBSIZE(pDest)
16070 3b 0a 20 20 52 45 47 49 53 54 45 52 5f 54 52 41  ;.  REGISTER_TRA
16080 43 45 28 70 4f 70 2d 3e 70 33 2c 20 70 44 65 73  CE(pOp->p3, pDes
16090 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 0a 6f 70  t);.  break;..op
160a0 5f 63 6f 6c 75 6d 6e 5f 63 6f 72 72 75 70 74 3a  _column_corrupt:
160b0 0a 20 20 69 66 28 20 61 4f 70 5b 30 5d 2e 70 33  .  if( aOp[0].p3
160c0 3e 30 20 29 7b 0a 20 20 20 20 70 4f 70 20 3d 20  >0 ){.    pOp = 
160d0 26 61 4f 70 5b 61 4f 70 5b 30 5d 2e 70 33 2d 31  &aOp[aOp[0].p3-1
160e0 5d 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20  ];.    break;.  
160f0 7d 65 6c 73 65 7b 0a 20 20 20 20 72 63 20 3d 20  }else{.    rc = 
16100 53 51 4c 49 54 45 5f 43 4f 52 52 55 50 54 5f 42  SQLITE_CORRUPT_B
16110 4b 50 54 3b 0a 20 20 20 20 67 6f 74 6f 20 61 62  KPT;.    goto ab
16120 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
16130 3b 0a 20 20 7d 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  ;.  }.}../* Opco
16140 64 65 3a 20 41 66 66 69 6e 69 74 79 20 50 31 20  de: Affinity P1 
16150 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 20 53 79 6e  P2 * P4 *.** Syn
16160 6f 70 73 69 73 3a 20 61 66 66 69 6e 69 74 79 28  opsis: affinity(
16170 72 5b 50 31 40 50 32 5d 29 0a 2a 2a 0a 2a 2a 20  r[P1@P2]).**.** 
16180 41 70 70 6c 79 20 61 66 66 69 6e 69 74 69 65 73  Apply affinities
16190 20 74 6f 20 61 20 72 61 6e 67 65 20 6f 66 20 50   to a range of P
161a0 32 20 72 65 67 69 73 74 65 72 73 20 73 74 61 72  2 registers star
161b0 74 69 6e 67 20 77 69 74 68 20 50 31 2e 0a 2a 2a  ting with P1..**
161c0 0a 2a 2a 20 50 34 20 69 73 20 61 20 73 74 72 69  .** P4 is a stri
161d0 6e 67 20 74 68 61 74 20 69 73 20 50 32 20 63 68  ng that is P2 ch
161e0 61 72 61 63 74 65 72 73 20 6c 6f 6e 67 2e 20 54  aracters long. T
161f0 68 65 20 4e 2d 74 68 20 63 68 61 72 61 63 74 65  he N-th characte
16200 72 20 6f 66 20 74 68 65 0a 2a 2a 20 73 74 72 69  r of the.** stri
16210 6e 67 20 69 6e 64 69 63 61 74 65 73 20 74 68 65  ng indicates the
16220 20 63 6f 6c 75 6d 6e 20 61 66 66 69 6e 69 74 79   column affinity
16230 20 74 68 61 74 20 73 68 6f 75 6c 64 20 62 65 20   that should be 
16240 75 73 65 64 20 66 6f 72 20 74 68 65 20 4e 2d 74  used for the N-t
16250 68 0a 2a 2a 20 6d 65 6d 6f 72 79 20 63 65 6c 6c  h.** memory cell
16260 20 69 6e 20 74 68 65 20 72 61 6e 67 65 2e 0a 2a   in the range..*
16270 2f 0a 63 61 73 65 20 4f 50 5f 41 66 66 69 6e 69  /.case OP_Affini
16280 74 79 3a 20 7b 0a 20 20 63 6f 6e 73 74 20 63 68  ty: {.  const ch
16290 61 72 20 2a 7a 41 66 66 69 6e 69 74 79 3b 20 20  ar *zAffinity;  
162a0 20 2f 2a 20 54 68 65 20 61 66 66 69 6e 69 74 79   /* The affinity
162b0 20 74 6f 20 62 65 20 61 70 70 6c 69 65 64 20 2a   to be applied *
162c0 2f 0a 0a 20 20 7a 41 66 66 69 6e 69 74 79 20 3d  /..  zAffinity =
162d0 20 70 4f 70 2d 3e 70 34 2e 7a 3b 0a 20 20 61 73   pOp->p4.z;.  as
162e0 73 65 72 74 28 20 7a 41 66 66 69 6e 69 74 79 21  sert( zAffinity!
162f0 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
16300 70 4f 70 2d 3e 70 32 3e 30 20 29 3b 0a 20 20 61  pOp->p2>0 );.  a
16310 73 73 65 72 74 28 20 7a 41 66 66 69 6e 69 74 79  ssert( zAffinity
16320 5b 70 4f 70 2d 3e 70 32 5d 3d 3d 30 20 29 3b 0a  [pOp->p2]==0 );.
16330 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70    pIn1 = &aMem[p
16340 4f 70 2d 3e 70 31 5d 3b 0a 20 20 64 6f 7b 0a 20  Op->p1];.  do{. 
16350 20 20 20 61 73 73 65 72 74 28 20 70 49 6e 31 20     assert( pIn1 
16360 3c 3d 20 26 70 2d 3e 61 4d 65 6d 5b 28 70 2d 3e  <= &p->aMem[(p->
16370 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72  nMem+1 - p->nCur
16380 73 6f 72 29 5d 20 29 3b 0a 20 20 20 20 61 73 73  sor)] );.    ass
16390 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28  ert( memIsValid(
163a0 70 49 6e 31 29 20 29 3b 0a 20 20 20 20 61 70 70  pIn1) );.    app
163b0 6c 79 41 66 66 69 6e 69 74 79 28 70 49 6e 31 2c  lyAffinity(pIn1,
163c0 20 2a 28 7a 41 66 66 69 6e 69 74 79 2b 2b 29 2c   *(zAffinity++),
163d0 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 20 20   encoding);.    
163e0 70 49 6e 31 2b 2b 3b 0a 20 20 7d 77 68 69 6c 65  pIn1++;.  }while
163f0 28 20 7a 41 66 66 69 6e 69 74 79 5b 30 5d 20 29  ( zAffinity[0] )
16400 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
16410 20 4f 70 63 6f 64 65 3a 20 4d 61 6b 65 52 65 63   Opcode: MakeRec
16420 6f 72 64 20 50 31 20 50 32 20 50 33 20 50 34 20  ord P1 P2 P3 P4 
16430 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72  *.** Synopsis: r
16440 5b 50 33 5d 3d 6d 6b 72 65 63 28 72 5b 50 31 40  [P3]=mkrec(r[P1@
16450 50 32 5d 29 0a 2a 2a 0a 2a 2a 20 43 6f 6e 76 65  P2]).**.** Conve
16460 72 74 20 50 32 20 72 65 67 69 73 74 65 72 73 20  rt P2 registers 
16470 62 65 67 69 6e 6e 69 6e 67 20 77 69 74 68 20 50  beginning with P
16480 31 20 69 6e 74 6f 20 74 68 65 20 5b 72 65 63 6f  1 into the [reco
16490 72 64 20 66 6f 72 6d 61 74 5d 0a 2a 2a 20 75 73  rd format].** us
164a0 65 20 61 73 20 61 20 64 61 74 61 20 72 65 63 6f  e as a data reco
164b0 72 64 20 69 6e 20 61 20 64 61 74 61 62 61 73 65  rd in a database
164c0 20 74 61 62 6c 65 20 6f 72 20 61 73 20 61 20 6b   table or as a k
164d0 65 79 0a 2a 2a 20 69 6e 20 61 6e 20 69 6e 64 65  ey.** in an inde
164e0 78 2e 20 20 54 68 65 20 4f 50 5f 43 6f 6c 75 6d  x.  The OP_Colum
164f0 6e 20 6f 70 63 6f 64 65 20 63 61 6e 20 64 65 63  n opcode can dec
16500 6f 64 65 20 74 68 65 20 72 65 63 6f 72 64 20 6c  ode the record l
16510 61 74 65 72 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 6d  ater..**.** P4 m
16520 61 79 20 62 65 20 61 20 73 74 72 69 6e 67 20 74  ay be a string t
16530 68 61 74 20 69 73 20 50 32 20 63 68 61 72 61 63  hat is P2 charac
16540 74 65 72 73 20 6c 6f 6e 67 2e 20 20 54 68 65 20  ters long.  The 
16550 4e 2d 74 68 20 63 68 61 72 61 63 74 65 72 20 6f  N-th character o
16560 66 20 74 68 65 0a 2a 2a 20 73 74 72 69 6e 67 20  f the.** string 
16570 69 6e 64 69 63 61 74 65 73 20 74 68 65 20 63 6f  indicates the co
16580 6c 75 6d 6e 20 61 66 66 69 6e 69 74 79 20 74 68  lumn affinity th
16590 61 74 20 73 68 6f 75 6c 64 20 62 65 20 75 73 65  at should be use
165a0 64 20 66 6f 72 20 74 68 65 20 4e 2d 74 68 0a 2a  d for the N-th.*
165b0 2a 20 66 69 65 6c 64 20 6f 66 20 74 68 65 20 69  * field of the i
165c0 6e 64 65 78 20 6b 65 79 2e 0a 2a 2a 0a 2a 2a 20  ndex key..**.** 
165d0 54 68 65 20 6d 61 70 70 69 6e 67 20 66 72 6f 6d  The mapping from
165e0 20 63 68 61 72 61 63 74 65 72 20 74 6f 20 61 66   character to af
165f0 66 69 6e 69 74 79 20 69 73 20 67 69 76 65 6e 20  finity is given 
16600 62 79 20 74 68 65 20 53 51 4c 49 54 45 5f 41 46  by the SQLITE_AF
16610 46 5f 0a 2a 2a 20 6d 61 63 72 6f 73 20 64 65 66  F_.** macros def
16620 69 6e 65 64 20 69 6e 20 73 71 6c 69 74 65 49 6e  ined in sqliteIn
16630 74 2e 68 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 34  t.h..**.** If P4
16640 20 69 73 20 4e 55 4c 4c 20 74 68 65 6e 20 61 6c   is NULL then al
16650 6c 20 69 6e 64 65 78 20 66 69 65 6c 64 73 20 68  l index fields h
16660 61 76 65 20 74 68 65 20 61 66 66 69 6e 69 74 79  ave the affinity
16670 20 42 4c 4f 42 2e 0a 2a 2f 0a 63 61 73 65 20 4f   BLOB..*/.case O
16680 50 5f 4d 61 6b 65 52 65 63 6f 72 64 3a 20 7b 0a  P_MakeRecord: {.
16690 20 20 75 38 20 2a 7a 4e 65 77 52 65 63 6f 72 64    u8 *zNewRecord
166a0 3b 20 20 20 20 20 20 20 20 2f 2a 20 41 20 62 75  ;        /* A bu
166b0 66 66 65 72 20 74 6f 20 68 6f 6c 64 20 74 68 65  ffer to hold the
166c0 20 64 61 74 61 20 66 6f 72 20 74 68 65 20 6e 65   data for the ne
166d0 77 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 4d 65  w record */.  Me
166e0 6d 20 2a 70 52 65 63 3b 20 20 20 20 20 20 20 20  m *pRec;        
166f0 20 20 20 20 20 2f 2a 20 54 68 65 20 6e 65 77 20       /* The new 
16700 72 65 63 6f 72 64 20 2a 2f 0a 20 20 75 36 34 20  record */.  u64 
16710 6e 44 61 74 61 3b 20 20 20 20 20 20 20 20 20 20  nData;          
16720 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
16730 62 79 74 65 73 20 6f 66 20 64 61 74 61 20 73 70  bytes of data sp
16740 61 63 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 48 64  ace */.  int nHd
16750 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  r;              
16760 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62 79 74  /* Number of byt
16770 65 73 20 6f 66 20 68 65 61 64 65 72 20 73 70 61  es of header spa
16780 63 65 20 2a 2f 0a 20 20 69 36 34 20 6e 42 79 74  ce */.  i64 nByt
16790 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  e;             /
167a0 2a 20 44 61 74 61 20 73 70 61 63 65 20 72 65 71  * Data space req
167b0 75 69 72 65 64 20 66 6f 72 20 74 68 69 73 20 72  uired for this r
167c0 65 63 6f 72 64 20 2a 2f 0a 20 20 69 36 34 20 6e  ecord */.  i64 n
167d0 5a 65 72 6f 3b 20 20 20 20 20 20 20 20 20 20 20  Zero;           
167e0 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 7a    /* Number of z
167f0 65 72 6f 20 62 79 74 65 73 20 61 74 20 74 68 65  ero bytes at the
16800 20 65 6e 64 20 6f 66 20 74 68 65 20 72 65 63 6f   end of the reco
16810 72 64 20 2a 2f 0a 20 20 69 6e 74 20 6e 56 61 72  rd */.  int nVar
16820 69 6e 74 3b 20 20 20 20 20 20 20 20 20 20 20 2f  int;           /
16830 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62 79 74 65  * Number of byte
16840 73 20 69 6e 20 61 20 76 61 72 69 6e 74 20 2a 2f  s in a varint */
16850 0a 20 20 75 33 32 20 73 65 72 69 61 6c 5f 74 79  .  u32 serial_ty
16860 70 65 3b 20 20 20 20 20 20 20 2f 2a 20 54 79 70  pe;       /* Typ
16870 65 20 66 69 65 6c 64 20 2a 2f 0a 20 20 4d 65 6d  e field */.  Mem
16880 20 2a 70 44 61 74 61 30 3b 20 20 20 20 20 20 20   *pData0;       
16890 20 20 20 20 2f 2a 20 46 69 72 73 74 20 66 69 65      /* First fie
168a0 6c 64 20 74 6f 20 62 65 20 63 6f 6d 62 69 6e 65  ld to be combine
168b0 64 20 69 6e 74 6f 20 74 68 65 20 72 65 63 6f 72  d into the recor
168c0 64 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 4c 61 73  d */.  Mem *pLas
168d0 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  t;            /*
168e0 20 4c 61 73 74 20 66 69 65 6c 64 20 6f 66 20 74   Last field of t
168f0 68 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69  he record */.  i
16900 6e 74 20 6e 46 69 65 6c 64 3b 20 20 20 20 20 20  nt nField;      
16910 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
16920 6f 66 20 66 69 65 6c 64 73 20 69 6e 20 74 68 65  of fields in the
16930 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 63 68 61   record */.  cha
16940 72 20 2a 7a 41 66 66 69 6e 69 74 79 3b 20 20 20  r *zAffinity;   
16950 20 20 20 20 2f 2a 20 54 68 65 20 61 66 66 69 6e      /* The affin
16960 69 74 79 20 73 74 72 69 6e 67 20 66 6f 72 20 74  ity string for t
16970 68 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69  he record */.  i
16980 6e 74 20 66 69 6c 65 5f 66 6f 72 6d 61 74 3b 20  nt file_format; 
16990 20 20 20 20 20 20 2f 2a 20 46 69 6c 65 20 66 6f        /* File fo
169a0 72 6d 61 74 20 74 6f 20 75 73 65 20 66 6f 72 20  rmat to use for 
169b0 65 6e 63 6f 64 69 6e 67 20 2a 2f 0a 20 20 69 6e  encoding */.  in
169c0 74 20 69 3b 20 20 20 20 20 20 20 20 20 20 20 20  t i;            
169d0 20 20 20 20 20 2f 2a 20 53 70 61 63 65 20 75 73       /* Space us
169e0 65 64 20 69 6e 20 7a 4e 65 77 52 65 63 6f 72 64  ed in zNewRecord
169f0 5b 5d 20 68 65 61 64 65 72 20 2a 2f 0a 20 20 69  [] header */.  i
16a00 6e 74 20 6a 3b 20 20 20 20 20 20 20 20 20 20 20  nt j;           
16a10 20 20 20 20 20 20 2f 2a 20 53 70 61 63 65 20 75        /* Space u
16a20 73 65 64 20 69 6e 20 7a 4e 65 77 52 65 63 6f 72  sed in zNewRecor
16a30 64 5b 5d 20 63 6f 6e 74 65 6e 74 20 2a 2f 0a 20  d[] content */. 
16a40 20 75 33 32 20 6c 65 6e 3b 20 20 20 20 20 20 20   u32 len;       
16a50 20 20 20 20 20 20 20 20 2f 2a 20 4c 65 6e 67 74          /* Lengt
16a60 68 20 6f 66 20 61 20 66 69 65 6c 64 20 2a 2f 0a  h of a field */.
16a70 0a 20 20 2f 2a 20 41 73 73 75 6d 69 6e 67 20 74  .  /* Assuming t
16a80 68 65 20 72 65 63 6f 72 64 20 63 6f 6e 74 61 69  he record contai
16a90 6e 73 20 4e 20 66 69 65 6c 64 73 2c 20 74 68 65  ns N fields, the
16aa0 20 72 65 63 6f 72 64 20 66 6f 72 6d 61 74 20 6c   record format l
16ab0 6f 6f 6b 73 0a 20 20 2a 2a 20 6c 69 6b 65 20 74  ooks.  ** like t
16ac0 68 69 73 3a 0a 20 20 2a 2a 0a 20 20 2a 2a 20 2d  his:.  **.  ** -
16ad0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
16ae0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
16af0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
16b00 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
16b10 2d 2d 2d 2d 2d 2d 2d 0a 20 20 2a 2a 20 7c 20 68  -------.  ** | h
16b20 64 72 2d 73 69 7a 65 20 7c 20 74 79 70 65 20 30  dr-size | type 0
16b30 20 7c 20 74 79 70 65 20 31 20 7c 20 2e 2e 2e 20   | type 1 | ... 
16b40 7c 20 74 79 70 65 20 4e 2d 31 20 7c 20 64 61 74  | type N-1 | dat
16b50 61 30 20 7c 20 2e 2e 2e 20 7c 20 64 61 74 61 20  a0 | ... | data 
16b60 4e 2d 31 20 7c 20 0a 20 20 2a 2a 20 2d 2d 2d 2d  N-1 | .  ** ----
16b70 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
16b80 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
16b90 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
16ba0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
16bb0 2d 2d 2d 2d 0a 20 20 2a 2a 0a 20 20 2a 2a 20 44  ----.  **.  ** D
16bc0 61 74 61 28 30 29 20 69 73 20 74 61 6b 65 6e 20  ata(0) is taken 
16bd0 66 72 6f 6d 20 72 65 67 69 73 74 65 72 20 50 31  from register P1
16be0 2e 20 20 44 61 74 61 28 31 29 20 63 6f 6d 65 73  .  Data(1) comes
16bf0 20 66 72 6f 6d 20 72 65 67 69 73 74 65 72 20 50   from register P
16c00 31 2b 31 0a 20 20 2a 2a 20 61 6e 64 20 73 6f 20  1+1.  ** and so 
16c10 66 6f 72 74 68 2e 0a 20 20 2a 2a 0a 20 20 2a 2a  forth..  **.  **
16c20 20 45 61 63 68 20 74 79 70 65 20 66 69 65 6c 64   Each type field
16c30 20 69 73 20 61 20 76 61 72 69 6e 74 20 72 65 70   is a varint rep
16c40 72 65 73 65 6e 74 69 6e 67 20 74 68 65 20 73 65  resenting the se
16c50 72 69 61 6c 20 74 79 70 65 20 6f 66 20 74 68 65  rial type of the
16c60 20 0a 20 20 2a 2a 20 63 6f 72 72 65 73 70 6f 6e   .  ** correspon
16c70 64 69 6e 67 20 64 61 74 61 20 65 6c 65 6d 65 6e  ding data elemen
16c80 74 20 28 73 65 65 20 73 71 6c 69 74 65 33 56 64  t (see sqlite3Vd
16c90 62 65 53 65 72 69 61 6c 54 79 70 65 28 29 29 2e  beSerialType()).
16ca0 20 54 68 65 0a 20 20 2a 2a 20 68 64 72 2d 73 69   The.  ** hdr-si
16cb0 7a 65 20 66 69 65 6c 64 20 69 73 20 61 6c 73 6f  ze field is also
16cc0 20 61 20 76 61 72 69 6e 74 20 77 68 69 63 68 20   a varint which 
16cd0 69 73 20 74 68 65 20 6f 66 66 73 65 74 20 66 72  is the offset fr
16ce0 6f 6d 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67  om the beginning
16cf0 0a 20 20 2a 2a 20 6f 66 20 74 68 65 20 72 65 63  .  ** of the rec
16d00 6f 72 64 20 74 6f 20 64 61 74 61 30 2e 0a 20 20  ord to data0..  
16d10 2a 2f 0a 20 20 6e 44 61 74 61 20 3d 20 30 3b 20  */.  nData = 0; 
16d20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
16d30 72 20 6f 66 20 62 79 74 65 73 20 6f 66 20 64 61  r of bytes of da
16d40 74 61 20 73 70 61 63 65 20 2a 2f 0a 20 20 6e 48  ta space */.  nH
16d50 64 72 20 3d 20 30 3b 20 20 20 20 20 20 20 20 20  dr = 0;         
16d60 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62 79   /* Number of by
16d70 74 65 73 20 6f 66 20 68 65 61 64 65 72 20 73 70  tes of header sp
16d80 61 63 65 20 2a 2f 0a 20 20 6e 5a 65 72 6f 20 3d  ace */.  nZero =
16d90 20 30 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e   0;         /* N
16da0 75 6d 62 65 72 20 6f 66 20 7a 65 72 6f 20 62 79  umber of zero by
16db0 74 65 73 20 61 74 20 74 68 65 20 65 6e 64 20 6f  tes at the end o
16dc0 66 20 74 68 65 20 72 65 63 6f 72 64 20 2a 2f 0a  f the record */.
16dd0 20 20 6e 46 69 65 6c 64 20 3d 20 70 4f 70 2d 3e    nField = pOp->
16de0 70 31 3b 0a 20 20 7a 41 66 66 69 6e 69 74 79 20  p1;.  zAffinity 
16df0 3d 20 70 4f 70 2d 3e 70 34 2e 7a 3b 0a 20 20 61  = pOp->p4.z;.  a
16e00 73 73 65 72 74 28 20 6e 46 69 65 6c 64 3e 30 20  ssert( nField>0 
16e10 26 26 20 70 4f 70 2d 3e 70 32 3e 30 20 26 26 20  && pOp->p2>0 && 
16e20 70 4f 70 2d 3e 70 32 2b 6e 46 69 65 6c 64 3c 3d  pOp->p2+nField<=
16e30 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e  (p->nMem+1 - p->
16e40 6e 43 75 72 73 6f 72 29 2b 31 20 29 3b 0a 20 20  nCursor)+1 );.  
16e50 70 44 61 74 61 30 20 3d 20 26 61 4d 65 6d 5b 6e  pData0 = &aMem[n
16e60 46 69 65 6c 64 5d 3b 0a 20 20 6e 46 69 65 6c 64  Field];.  nField
16e70 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 70 4c   = pOp->p2;.  pL
16e80 61 73 74 20 3d 20 26 70 44 61 74 61 30 5b 6e 46  ast = &pData0[nF
16e90 69 65 6c 64 2d 31 5d 3b 0a 20 20 66 69 6c 65 5f  ield-1];.  file_
16ea0 66 6f 72 6d 61 74 20 3d 20 70 2d 3e 6d 69 6e 57  format = p->minW
16eb0 72 69 74 65 46 69 6c 65 46 6f 72 6d 61 74 3b 0a  riteFileFormat;.
16ec0 0a 20 20 2f 2a 20 49 64 65 6e 74 69 66 79 20 74  .  /* Identify t
16ed0 68 65 20 6f 75 74 70 75 74 20 72 65 67 69 73 74  he output regist
16ee0 65 72 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20  er */.  assert( 
16ef0 70 4f 70 2d 3e 70 33 3c 70 4f 70 2d 3e 70 31 20  pOp->p3<pOp->p1 
16f00 7c 7c 20 70 4f 70 2d 3e 70 33 3e 3d 70 4f 70 2d  || pOp->p3>=pOp-
16f10 3e 70 31 2b 70 4f 70 2d 3e 70 32 20 29 3b 0a 20  >p1+pOp->p2 );. 
16f20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f   pOut = &aMem[pO
16f30 70 2d 3e 70 33 5d 3b 0a 20 20 6d 65 6d 41 62 6f  p->p3];.  memAbo
16f40 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 4f  utToChange(p, pO
16f50 75 74 29 3b 0a 0a 20 20 2f 2a 20 41 70 70 6c 79  ut);..  /* Apply
16f60 20 74 68 65 20 72 65 71 75 65 73 74 65 64 20 61   the requested a
16f70 66 66 69 6e 69 74 79 20 74 6f 20 61 6c 6c 20 69  ffinity to all i
16f80 6e 70 75 74 73 0a 20 20 2a 2f 0a 20 20 61 73 73  nputs.  */.  ass
16f90 65 72 74 28 20 70 44 61 74 61 30 3c 3d 70 4c 61  ert( pData0<=pLa
16fa0 73 74 20 29 3b 0a 20 20 69 66 28 20 7a 41 66 66  st );.  if( zAff
16fb0 69 6e 69 74 79 20 29 7b 0a 20 20 20 20 70 52 65  inity ){.    pRe
16fc0 63 20 3d 20 70 44 61 74 61 30 3b 0a 20 20 20 20  c = pData0;.    
16fd0 64 6f 7b 0a 20 20 20 20 20 20 61 70 70 6c 79 41  do{.      applyA
16fe0 66 66 69 6e 69 74 79 28 70 52 65 63 2b 2b 2c 20  ffinity(pRec++, 
16ff0 2a 28 7a 41 66 66 69 6e 69 74 79 2b 2b 29 2c 20  *(zAffinity++), 
17000 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 20 20 20  encoding);.     
17010 20 61 73 73 65 72 74 28 20 7a 41 66 66 69 6e 69   assert( zAffini
17020 74 79 5b 30 5d 3d 3d 30 20 7c 7c 20 70 52 65 63  ty[0]==0 || pRec
17030 3c 3d 70 4c 61 73 74 20 29 3b 0a 20 20 20 20 7d  <=pLast );.    }
17040 77 68 69 6c 65 28 20 7a 41 66 66 69 6e 69 74 79  while( zAffinity
17050 5b 30 5d 20 29 3b 0a 20 20 7d 0a 0a 23 69 66 64  [0] );.  }..#ifd
17060 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ef SQLITE_ENABLE
17070 5f 4e 55 4c 4c 5f 54 52 49 4d 0a 20 20 2f 2a 20  _NULL_TRIM.  /* 
17080 4e 55 4c 4c 73 20 63 61 6e 20 62 65 20 73 61 66  NULLs can be saf
17090 65 6c 79 20 74 72 69 6d 6d 65 64 20 66 72 6f 6d  ely trimmed from
170a0 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20   the end of the 
170b0 72 65 63 6f 72 64 2c 20 61 73 20 6c 6f 6e 67 20  record, as long 
170c0 61 73 0a 20 20 2a 2a 20 61 73 20 74 68 65 20 73  as.  ** as the s
170d0 63 68 65 6d 61 20 66 6f 72 6d 61 74 20 69 73 20  chema format is 
170e0 32 20 6f 72 20 6d 6f 72 65 20 61 6e 64 20 6e 6f  2 or more and no
170f0 6e 65 20 6f 66 20 74 68 65 20 6f 6d 69 74 74 65  ne of the omitte
17100 64 20 63 6f 6c 75 6d 6e 73 0a 20 20 2a 2a 20 68  d columns.  ** h
17110 61 76 65 20 61 20 6e 6f 6e 2d 4e 55 4c 4c 20 64  ave a non-NULL d
17120 65 66 61 75 6c 74 20 76 61 6c 75 65 2e 20 20 41  efault value.  A
17130 6c 73 6f 2c 20 74 68 65 20 72 65 63 6f 72 64 20  lso, the record 
17140 6d 75 73 74 20 62 65 20 6c 65 66 74 20 77 69 74  must be left wit
17150 68 0a 20 20 2a 2a 20 61 74 20 6c 65 61 73 74 20  h.  ** at least 
17160 6f 6e 65 20 66 69 65 6c 64 2e 20 20 49 66 20 50  one field.  If P
17170 35 3e 30 20 74 68 65 6e 20 69 74 20 77 69 6c 6c  5>0 then it will
17180 20 62 65 20 6f 6e 65 20 6d 6f 72 65 20 74 68 61   be one more tha
17190 6e 20 74 68 65 0a 20 20 2a 2a 20 69 6e 64 65 78  n the.  ** index
171a0 20 6f 66 20 74 68 65 20 72 69 67 68 74 2d 6d 6f   of the right-mo
171b0 73 74 20 63 6f 6c 75 6d 6e 20 77 69 74 68 20 61  st column with a
171c0 20 6e 6f 6e 2d 4e 55 4c 4c 20 64 65 66 61 75 6c   non-NULL defaul
171d0 74 20 76 61 6c 75 65 20 2a 2f 0a 20 20 69 66 28  t value */.  if(
171e0 20 70 4f 70 2d 3e 70 35 20 29 7b 0a 20 20 20 20   pOp->p5 ){.    
171f0 77 68 69 6c 65 28 20 28 70 4c 61 73 74 2d 3e 66  while( (pLast->f
17200 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29  lags & MEM_Null)
17210 21 3d 30 20 26 26 20 6e 46 69 65 6c 64 3e 70 4f  !=0 && nField>pO
17220 70 2d 3e 70 35 20 29 7b 0a 20 20 20 20 20 20 70  p->p5 ){.      p
17230 4c 61 73 74 2d 2d 3b 0a 20 20 20 20 20 20 6e 46  Last--;.      nF
17240 69 65 6c 64 2d 2d 3b 0a 20 20 20 20 7d 0a 20 20  ield--;.    }.  
17250 7d 0a 23 65 6e 64 69 66 0a 0a 20 20 2f 2a 20 4c  }.#endif..  /* L
17260 6f 6f 70 20 74 68 72 6f 75 67 68 20 74 68 65 20  oop through the 
17270 65 6c 65 6d 65 6e 74 73 20 74 68 61 74 20 77 69  elements that wi
17280 6c 6c 20 6d 61 6b 65 20 75 70 20 74 68 65 20 72  ll make up the r
17290 65 63 6f 72 64 20 74 6f 20 66 69 67 75 72 65 0a  ecord to figure.
172a0 20 20 2a 2a 20 6f 75 74 20 68 6f 77 20 6d 75 63    ** out how muc
172b0 68 20 73 70 61 63 65 20 69 73 20 72 65 71 75 69  h space is requi
172c0 72 65 64 20 66 6f 72 20 74 68 65 20 6e 65 77 20  red for the new 
172d0 72 65 63 6f 72 64 2e 0a 20 20 2a 2f 0a 20 20 70  record..  */.  p
172e0 52 65 63 20 3d 20 70 4c 61 73 74 3b 0a 20 20 64  Rec = pLast;.  d
172f0 6f 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 6d  o{.    assert( m
17300 65 6d 49 73 56 61 6c 69 64 28 70 52 65 63 29 20  emIsValid(pRec) 
17310 29 3b 0a 20 20 20 20 73 65 72 69 61 6c 5f 74 79  );.    serial_ty
17320 70 65 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  pe = sqlite3Vdbe
17330 53 65 72 69 61 6c 54 79 70 65 28 70 52 65 63 2c  SerialType(pRec,
17340 20 66 69 6c 65 5f 66 6f 72 6d 61 74 2c 20 26 6c   file_format, &l
17350 65 6e 29 3b 0a 20 20 20 20 69 66 28 20 70 52 65  en);.    if( pRe
17360 63 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 5a  c->flags & MEM_Z
17370 65 72 6f 20 29 7b 0a 20 20 20 20 20 20 69 66 28  ero ){.      if(
17380 20 73 65 72 69 61 6c 5f 74 79 70 65 3d 3d 30 20   serial_type==0 
17390 29 7b 0a 20 20 20 20 20 20 20 20 2f 2a 20 56 61  ){.        /* Va
173a0 6c 75 65 73 20 77 69 74 68 20 4d 45 4d 5f 4e 75  lues with MEM_Nu
173b0 6c 6c 20 61 6e 64 20 4d 45 4d 5f 5a 65 72 6f 20  ll and MEM_Zero 
173c0 61 72 65 20 63 72 65 61 74 65 64 20 62 79 20 78  are created by x
173d0 43 6f 6c 75 6d 6e 20 76 69 72 74 75 61 6c 0a 20  Column virtual. 
173e0 20 20 20 20 20 20 20 2a 2a 20 74 61 62 6c 65 20         ** table 
173f0 6d 65 74 68 6f 64 73 20 74 68 61 74 20 6e 65 76  methods that nev
17400 65 72 20 69 6e 76 6f 6b 65 20 73 71 6c 69 74 65  er invoke sqlite
17410 33 5f 72 65 73 75 6c 74 5f 78 78 78 78 78 28 29  3_result_xxxxx()
17420 20 77 68 69 6c 65 0a 20 20 20 20 20 20 20 20 2a   while.        *
17430 2a 20 63 6f 6d 70 75 74 69 6e 67 20 61 6e 20 75  * computing an u
17440 6e 63 68 61 6e 67 69 6e 67 20 63 6f 6c 75 6d 6e  nchanging column
17450 20 76 61 6c 75 65 20 69 6e 20 61 6e 20 55 50 44   value in an UPD
17460 41 54 45 20 73 74 61 74 65 6d 65 6e 74 2e 0a 20  ATE statement.. 
17470 20 20 20 20 20 20 20 2a 2a 20 47 69 76 65 20 73         ** Give s
17480 75 63 68 20 76 61 6c 75 65 73 20 61 20 73 70 65  uch values a spe
17490 63 69 61 6c 20 69 6e 74 65 72 6e 61 6c 2d 75 73  cial internal-us
174a0 65 2d 6f 6e 6c 79 20 73 65 72 69 61 6c 2d 74 79  e-only serial-ty
174b0 70 65 20 6f 66 20 31 30 0a 20 20 20 20 20 20 20  pe of 10.       
174c0 20 2a 2a 20 73 6f 20 74 68 61 74 20 74 68 65 79   ** so that they
174d0 20 63 61 6e 20 62 65 20 70 61 73 73 65 64 20 74   can be passed t
174e0 68 72 6f 75 67 68 20 74 6f 20 78 55 70 64 61 74  hrough to xUpdat
174f0 65 20 61 6e 64 20 68 61 76 65 0a 20 20 20 20 20  e and have.     
17500 20 20 20 2a 2a 20 61 20 74 72 75 65 20 73 71 6c     ** a true sql
17510 69 74 65 33 5f 76 61 6c 75 65 5f 6e 6f 63 68 61  ite3_value_nocha
17520 6e 67 65 28 29 2e 20 2a 2f 0a 20 20 20 20 20 20  nge(). */.      
17530 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
17540 35 3d 3d 4f 50 46 4c 41 47 5f 4e 4f 43 48 4e 47  5==OPFLAG_NOCHNG
17550 5f 4d 41 47 49 43 20 7c 7c 20 43 4f 52 52 55 50  _MAGIC || CORRUP
17560 54 5f 44 42 20 29 3b 0a 20 20 20 20 20 20 20 20  T_DB );.        
17570 73 65 72 69 61 6c 5f 74 79 70 65 20 3d 20 31 30  serial_type = 10
17580 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 20 69 66  ;.      }else if
17590 28 20 6e 44 61 74 61 20 29 7b 0a 20 20 20 20 20  ( nData ){.     
175a0 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 56 64     if( sqlite3Vd
175b0 62 65 4d 65 6d 45 78 70 61 6e 64 42 6c 6f 62 28  beMemExpandBlob(
175c0 70 52 65 63 29 20 29 20 67 6f 74 6f 20 6e 6f 5f  pRec) ) goto no_
175d0 6d 65 6d 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65  mem;.      }else
175e0 7b 0a 20 20 20 20 20 20 20 20 6e 5a 65 72 6f 20  {.        nZero 
175f0 2b 3d 20 70 52 65 63 2d 3e 75 2e 6e 5a 65 72 6f  += pRec->u.nZero
17600 3b 0a 20 20 20 20 20 20 20 20 6c 65 6e 20 2d 3d  ;.        len -=
17610 20 70 52 65 63 2d 3e 75 2e 6e 5a 65 72 6f 3b 0a   pRec->u.nZero;.
17620 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20        }.    }.  
17630 20 20 6e 44 61 74 61 20 2b 3d 20 6c 65 6e 3b 0a    nData += len;.
17640 20 20 20 20 74 65 73 74 63 61 73 65 28 20 73 65      testcase( se
17650 72 69 61 6c 5f 74 79 70 65 3d 3d 31 32 37 20 29  rial_type==127 )
17660 3b 0a 20 20 20 20 74 65 73 74 63 61 73 65 28 20  ;.    testcase( 
17670 73 65 72 69 61 6c 5f 74 79 70 65 3d 3d 31 32 38  serial_type==128
17680 20 29 3b 0a 20 20 20 20 6e 48 64 72 20 2b 3d 20   );.    nHdr += 
17690 73 65 72 69 61 6c 5f 74 79 70 65 3c 3d 31 32 37  serial_type<=127
176a0 20 3f 20 31 20 3a 20 73 71 6c 69 74 65 33 56 61   ? 1 : sqlite3Va
176b0 72 69 6e 74 4c 65 6e 28 73 65 72 69 61 6c 5f 74  rintLen(serial_t
176c0 79 70 65 29 3b 0a 20 20 20 20 70 52 65 63 2d 3e  ype);.    pRec->
176d0 75 54 65 6d 70 20 3d 20 73 65 72 69 61 6c 5f 74  uTemp = serial_t
176e0 79 70 65 3b 0a 20 20 20 20 69 66 28 20 70 52 65  ype;.    if( pRe
176f0 63 3d 3d 70 44 61 74 61 30 20 29 20 62 72 65 61  c==pData0 ) brea
17700 6b 3b 0a 20 20 20 20 70 52 65 63 2d 2d 3b 0a 20  k;.    pRec--;. 
17710 20 7d 77 68 69 6c 65 28 31 29 3b 0a 0a 20 20 2f   }while(1);..  /
17720 2a 20 45 56 49 44 45 4e 43 45 2d 4f 46 3a 20 52  * EVIDENCE-OF: R
17730 2d 32 32 35 36 34 2d 31 31 36 34 37 20 54 68 65  -22564-11647 The
17740 20 68 65 61 64 65 72 20 62 65 67 69 6e 73 20 77   header begins w
17750 69 74 68 20 61 20 73 69 6e 67 6c 65 20 76 61 72  ith a single var
17760 69 6e 74 0a 20 20 2a 2a 20 77 68 69 63 68 20 64  int.  ** which d
17770 65 74 65 72 6d 69 6e 65 73 20 74 68 65 20 74 6f  etermines the to
17780 74 61 6c 20 6e 75 6d 62 65 72 20 6f 66 20 62 79  tal number of by
17790 74 65 73 20 69 6e 20 74 68 65 20 68 65 61 64 65  tes in the heade
177a0 72 2e 20 54 68 65 20 76 61 72 69 6e 74 0a 20 20  r. The varint.  
177b0 2a 2a 20 76 61 6c 75 65 20 69 73 20 74 68 65 20  ** value is the 
177c0 73 69 7a 65 20 6f 66 20 74 68 65 20 68 65 61 64  size of the head
177d0 65 72 20 69 6e 20 62 79 74 65 73 20 69 6e 63 6c  er in bytes incl
177e0 75 64 69 6e 67 20 74 68 65 20 73 69 7a 65 20 76  uding the size v
177f0 61 72 69 6e 74 0a 20 20 2a 2a 20 69 74 73 65 6c  arint.  ** itsel
17800 66 2e 20 2a 2f 0a 20 20 74 65 73 74 63 61 73 65  f. */.  testcase
17810 28 20 6e 48 64 72 3d 3d 31 32 36 20 29 3b 0a 20  ( nHdr==126 );. 
17820 20 74 65 73 74 63 61 73 65 28 20 6e 48 64 72 3d   testcase( nHdr=
17830 3d 31 32 37 20 29 3b 0a 20 20 69 66 28 20 6e 48  =127 );.  if( nH
17840 64 72 3c 3d 31 32 36 20 29 7b 0a 20 20 20 20 2f  dr<=126 ){.    /
17850 2a 20 54 68 65 20 63 6f 6d 6d 6f 6e 20 63 61 73  * The common cas
17860 65 20 2a 2f 0a 20 20 20 20 6e 48 64 72 20 2b 3d  e */.    nHdr +=
17870 20 31 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20   1;.  }else{.   
17880 20 2f 2a 20 52 61 72 65 20 63 61 73 65 20 6f 66   /* Rare case of
17890 20 61 20 72 65 61 6c 6c 79 20 6c 61 72 67 65 20   a really large 
178a0 68 65 61 64 65 72 20 2a 2f 0a 20 20 20 20 6e 56  header */.    nV
178b0 61 72 69 6e 74 20 3d 20 73 71 6c 69 74 65 33 56  arint = sqlite3V
178c0 61 72 69 6e 74 4c 65 6e 28 6e 48 64 72 29 3b 0a  arintLen(nHdr);.
178d0 20 20 20 20 6e 48 64 72 20 2b 3d 20 6e 56 61 72      nHdr += nVar
178e0 69 6e 74 3b 0a 20 20 20 20 69 66 28 20 6e 56 61  int;.    if( nVa
178f0 72 69 6e 74 3c 73 71 6c 69 74 65 33 56 61 72 69  rint<sqlite3Vari
17900 6e 74 4c 65 6e 28 6e 48 64 72 29 20 29 20 6e 48  ntLen(nHdr) ) nH
17910 64 72 2b 2b 3b 0a 20 20 7d 0a 20 20 6e 42 79 74  dr++;.  }.  nByt
17920 65 20 3d 20 6e 48 64 72 2b 6e 44 61 74 61 3b 0a  e = nHdr+nData;.
17930 20 20 69 66 28 20 6e 42 79 74 65 2b 6e 5a 65 72    if( nByte+nZer
17940 6f 3e 64 62 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c  o>db->aLimit[SQL
17950 49 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54 48  ITE_LIMIT_LENGTH
17960 5d 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 74 6f  ] ){.    goto to
17970 6f 5f 62 69 67 3b 0a 20 20 7d 0a 0a 20 20 2f 2a  o_big;.  }..  /*
17980 20 4d 61 6b 65 20 73 75 72 65 20 74 68 65 20 6f   Make sure the o
17990 75 74 70 75 74 20 72 65 67 69 73 74 65 72 20 68  utput register h
179a0 61 73 20 61 20 62 75 66 66 65 72 20 6c 61 72 67  as a buffer larg
179b0 65 20 65 6e 6f 75 67 68 20 74 6f 20 73 74 6f 72  e enough to stor
179c0 65 20 0a 20 20 2a 2a 20 74 68 65 20 6e 65 77 20  e .  ** the new 
179d0 72 65 63 6f 72 64 2e 20 54 68 65 20 6f 75 74 70  record. The outp
179e0 75 74 20 72 65 67 69 73 74 65 72 20 28 70 4f 70  ut register (pOp
179f0 2d 3e 70 33 29 20 69 73 20 6e 6f 74 20 61 6c 6c  ->p3) is not all
17a00 6f 77 65 64 20 74 6f 0a 20 20 2a 2a 20 62 65 20  owed to.  ** be 
17a10 6f 6e 65 20 6f 66 20 74 68 65 20 69 6e 70 75 74  one of the input
17a20 20 72 65 67 69 73 74 65 72 73 20 28 62 65 63 61   registers (beca
17a30 75 73 65 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e  use the followin
17a40 67 20 63 61 6c 6c 20 74 6f 0a 20 20 2a 2a 20 73  g call to.  ** s
17a50 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 43 6c 65  qlite3VdbeMemCle
17a60 61 72 41 6e 64 52 65 73 69 7a 65 28 29 20 63 6f  arAndResize() co
17a70 75 6c 64 20 63 6c 6f 62 62 65 72 20 74 68 65 20  uld clobber the 
17a80 76 61 6c 75 65 20 62 65 66 6f 72 65 20 69 74 20  value before it 
17a90 69 73 20 75 73 65 64 29 2e 0a 20 20 2a 2f 0a 20  is used)..  */. 
17aa0 20 69 66 28 20 73 71 6c 69 74 65 33 56 64 62 65   if( sqlite3Vdbe
17ab0 4d 65 6d 43 6c 65 61 72 41 6e 64 52 65 73 69 7a  MemClearAndResiz
17ac0 65 28 70 4f 75 74 2c 20 28 69 6e 74 29 6e 42 79  e(pOut, (int)nBy
17ad0 74 65 29 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20  te) ){.    goto 
17ae0 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 20 20 7a 4e  no_mem;.  }.  zN
17af0 65 77 52 65 63 6f 72 64 20 3d 20 28 75 38 20 2a  ewRecord = (u8 *
17b00 29 70 4f 75 74 2d 3e 7a 3b 0a 0a 20 20 2f 2a 20  )pOut->z;..  /* 
17b10 57 72 69 74 65 20 74 68 65 20 72 65 63 6f 72 64  Write the record
17b20 20 2a 2f 0a 20 20 69 20 3d 20 70 75 74 56 61 72   */.  i = putVar
17b30 69 6e 74 33 32 28 7a 4e 65 77 52 65 63 6f 72 64  int32(zNewRecord
17b40 2c 20 6e 48 64 72 29 3b 0a 20 20 6a 20 3d 20 6e  , nHdr);.  j = n
17b50 48 64 72 3b 0a 20 20 61 73 73 65 72 74 28 20 70  Hdr;.  assert( p
17b60 44 61 74 61 30 3c 3d 70 4c 61 73 74 20 29 3b 0a  Data0<=pLast );.
17b70 20 20 70 52 65 63 20 3d 20 70 44 61 74 61 30 3b    pRec = pData0;
17b80 0a 20 20 64 6f 7b 0a 20 20 20 20 73 65 72 69 61  .  do{.    seria
17b90 6c 5f 74 79 70 65 20 3d 20 70 52 65 63 2d 3e 75  l_type = pRec->u
17ba0 54 65 6d 70 3b 0a 20 20 20 20 2f 2a 20 45 56 49  Temp;.    /* EVI
17bb0 44 45 4e 43 45 2d 4f 46 3a 20 52 2d 30 36 35 32  DENCE-OF: R-0652
17bc0 39 2d 34 37 33 36 32 20 46 6f 6c 6c 6f 77 69 6e  9-47362 Followin
17bd0 67 20 74 68 65 20 73 69 7a 65 20 76 61 72 69 6e  g the size varin
17be0 74 20 61 72 65 20 6f 6e 65 20 6f 72 20 6d 6f 72  t are one or mor
17bf0 65 0a 20 20 20 20 2a 2a 20 61 64 64 69 74 69 6f  e.    ** additio
17c00 6e 61 6c 20 76 61 72 69 6e 74 73 2c 20 6f 6e 65  nal varints, one
17c10 20 70 65 72 20 63 6f 6c 75 6d 6e 2e 20 2a 2f 0a   per column. */.
17c20 20 20 20 20 69 20 2b 3d 20 70 75 74 56 61 72 69      i += putVari
17c30 6e 74 33 32 28 26 7a 4e 65 77 52 65 63 6f 72 64  nt32(&zNewRecord
17c40 5b 69 5d 2c 20 73 65 72 69 61 6c 5f 74 79 70 65  [i], serial_type
17c50 29 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  );            /*
17c60 20 73 65 72 69 61 6c 20 74 79 70 65 20 2a 2f 0a   serial type */.
17c70 20 20 20 20 2f 2a 20 45 56 49 44 45 4e 43 45 2d      /* EVIDENCE-
17c80 4f 46 3a 20 52 2d 36 34 35 33 36 2d 35 31 37 32  OF: R-64536-5172
17c90 38 20 54 68 65 20 76 61 6c 75 65 73 20 66 6f 72  8 The values for
17ca0 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 69 6e 20   each column in 
17cb0 74 68 65 20 72 65 63 6f 72 64 0a 20 20 20 20 2a  the record.    *
17cc0 2a 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 66 6f  * immediately fo
17cd0 6c 6c 6f 77 20 74 68 65 20 68 65 61 64 65 72 2e  llow the header.
17ce0 20 2a 2f 0a 20 20 20 20 6a 20 2b 3d 20 73 71 6c   */.    j += sql
17cf0 69 74 65 33 56 64 62 65 53 65 72 69 61 6c 50 75  ite3VdbeSerialPu
17d00 74 28 26 7a 4e 65 77 52 65 63 6f 72 64 5b 6a 5d  t(&zNewRecord[j]
17d10 2c 20 70 52 65 63 2c 20 73 65 72 69 61 6c 5f 74  , pRec, serial_t
17d20 79 70 65 29 3b 20 2f 2a 20 63 6f 6e 74 65 6e 74  ype); /* content
17d30 20 2a 2f 0a 20 20 7d 77 68 69 6c 65 28 20 28 2b   */.  }while( (+
17d40 2b 70 52 65 63 29 3c 3d 70 4c 61 73 74 20 29 3b  +pRec)<=pLast );
17d50 0a 20 20 61 73 73 65 72 74 28 20 69 3d 3d 6e 48  .  assert( i==nH
17d60 64 72 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  dr );.  assert( 
17d70 6a 3d 3d 6e 42 79 74 65 20 29 3b 0a 0a 20 20 61  j==nByte );..  a
17d80 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30  ssert( pOp->p3>0
17d90 20 26 26 20 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d   && pOp->p3<=(p-
17da0 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75  >nMem+1 - p->nCu
17db0 72 73 6f 72 29 20 29 3b 0a 20 20 70 4f 75 74 2d  rsor) );.  pOut-
17dc0 3e 6e 20 3d 20 28 69 6e 74 29 6e 42 79 74 65 3b  >n = (int)nByte;
17dd0 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d  .  pOut->flags =
17de0 20 4d 45 4d 5f 42 6c 6f 62 3b 0a 20 20 69 66 28   MEM_Blob;.  if(
17df0 20 6e 5a 65 72 6f 20 29 7b 0a 20 20 20 20 70 4f   nZero ){.    pO
17e00 75 74 2d 3e 75 2e 6e 5a 65 72 6f 20 3d 20 6e 5a  ut->u.nZero = nZ
17e10 65 72 6f 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 66  ero;.    pOut->f
17e20 6c 61 67 73 20 7c 3d 20 4d 45 4d 5f 5a 65 72 6f  lags |= MEM_Zero
17e30 3b 0a 20 20 7d 0a 20 20 52 45 47 49 53 54 45 52  ;.  }.  REGISTER
17e40 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 33 2c 20  _TRACE(pOp->p3, 
17e50 70 4f 75 74 29 3b 0a 20 20 55 50 44 41 54 45 5f  pOut);.  UPDATE_
17e60 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 4f 75  MAX_BLOBSIZE(pOu
17e70 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  t);.  break;.}..
17e80 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6f 75 6e 74  /* Opcode: Count
17e90 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20   P1 P2 * * *.** 
17ea0 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d  Synopsis: r[P2]=
17eb0 63 6f 75 6e 74 28 29 0a 2a 2a 0a 2a 2a 20 53 74  count().**.** St
17ec0 6f 72 65 20 74 68 65 20 6e 75 6d 62 65 72 20 6f  ore the number o
17ed0 66 20 65 6e 74 72 69 65 73 20 28 61 6e 20 69 6e  f entries (an in
17ee0 74 65 67 65 72 20 76 61 6c 75 65 29 20 69 6e 20  teger value) in 
17ef0 74 68 65 20 74 61 62 6c 65 20 6f 72 20 69 6e 64  the table or ind
17f00 65 78 20 0a 2a 2a 20 6f 70 65 6e 65 64 20 62 79  ex .** opened by
17f10 20 63 75 72 73 6f 72 20 50 31 20 69 6e 20 72 65   cursor P1 in re
17f20 67 69 73 74 65 72 20 50 32 0a 2a 2f 0a 23 69 66  gister P2.*/.#if
17f30 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
17f40 5f 42 54 52 45 45 43 4f 55 4e 54 0a 63 61 73 65  _BTREECOUNT.case
17f50 20 4f 50 5f 43 6f 75 6e 74 3a 20 7b 20 20 20 20   OP_Count: {    
17f60 20 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a       /* out2 */.
17f70 20 20 69 36 34 20 6e 45 6e 74 72 79 3b 0a 20 20    i64 nEntry;.  
17f80 42 74 43 75 72 73 6f 72 20 2a 70 43 72 73 72 3b  BtCursor *pCrsr;
17f90 0a 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 61  ..  assert( p->a
17fa0 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 2d 3e 65  pCsr[pOp->p1]->e
17fb0 43 75 72 54 79 70 65 3d 3d 43 55 52 54 59 50 45  CurType==CURTYPE
17fc0 5f 42 54 52 45 45 20 29 3b 0a 20 20 70 43 72 73  _BTREE );.  pCrs
17fd0 72 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70  r = p->apCsr[pOp
17fe0 2d 3e 70 31 5d 2d 3e 75 63 2e 70 43 75 72 73 6f  ->p1]->uc.pCurso
17ff0 72 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 72  r;.  assert( pCr
18000 73 72 20 29 3b 0a 20 20 6e 45 6e 74 72 79 20 3d  sr );.  nEntry =
18010 20 30 3b 20 20 2f 2a 20 4e 6f 74 20 6e 65 65 64   0;  /* Not need
18020 65 64 2e 20 20 4f 6e 6c 79 20 75 73 65 64 20 74  ed.  Only used t
18030 6f 20 73 69 6c 65 6e 63 65 20 61 20 77 61 72 6e  o silence a warn
18040 69 6e 67 2e 20 2a 2f 0a 20 20 72 63 20 3d 20 73  ing. */.  rc = s
18050 71 6c 69 74 65 33 42 74 72 65 65 43 6f 75 6e 74  qlite3BtreeCount
18060 28 70 43 72 73 72 2c 20 26 6e 45 6e 74 72 79 29  (pCrsr, &nEntry)
18070 3b 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f 74  ;.  if( rc ) got
18080 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
18090 72 72 6f 72 3b 0a 20 20 70 4f 75 74 20 3d 20 6f  rror;.  pOut = o
180a0 75 74 32 50 72 65 72 65 6c 65 61 73 65 28 70 2c  ut2Prerelease(p,
180b0 20 70 4f 70 29 3b 0a 20 20 70 4f 75 74 2d 3e 75   pOp);.  pOut->u
180c0 2e 69 20 3d 20 6e 45 6e 74 72 79 3b 0a 20 20 62  .i = nEntry;.  b
180d0 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a  reak;.}.#endif..
180e0 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 61 76 65 70  /* Opcode: Savep
180f0 6f 69 6e 74 20 50 31 20 2a 20 2a 20 50 34 20 2a  oint P1 * * P4 *
18100 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e 2c 20 72 65 6c  .**.** Open, rel
18110 65 61 73 65 20 6f 72 20 72 6f 6c 6c 62 61 63 6b  ease or rollback
18120 20 74 68 65 20 73 61 76 65 70 6f 69 6e 74 20 6e   the savepoint n
18130 61 6d 65 64 20 62 79 20 70 61 72 61 6d 65 74 65  amed by paramete
18140 72 20 50 34 2c 20 64 65 70 65 6e 64 69 6e 67 0a  r P4, depending.
18150 2a 2a 20 6f 6e 20 74 68 65 20 76 61 6c 75 65 20  ** on the value 
18160 6f 66 20 50 31 2e 20 54 6f 20 6f 70 65 6e 20 61  of P1. To open a
18170 20 6e 65 77 20 73 61 76 65 70 6f 69 6e 74 2c 20   new savepoint, 
18180 50 31 3d 3d 30 2e 20 54 6f 20 72 65 6c 65 61 73  P1==0. To releas
18190 65 20 28 63 6f 6d 6d 69 74 29 20 61 6e 0a 2a 2a  e (commit) an.**
181a0 20 65 78 69 73 74 69 6e 67 20 73 61 76 65 70 6f   existing savepo
181b0 69 6e 74 2c 20 50 31 3d 3d 31 2c 20 6f 72 20 74  int, P1==1, or t
181c0 6f 20 72 6f 6c 6c 62 61 63 6b 20 61 6e 20 65 78  o rollback an ex
181d0 69 73 74 69 6e 67 20 73 61 76 65 70 6f 69 6e 74  isting savepoint
181e0 20 50 31 3d 3d 32 2e 0a 2a 2f 0a 63 61 73 65 20   P1==2..*/.case 
181f0 4f 50 5f 53 61 76 65 70 6f 69 6e 74 3a 20 7b 0a  OP_Savepoint: {.
18200 20 20 69 6e 74 20 70 31 3b 20 20 20 20 20 20 20    int p1;       
18210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18220 20 20 2f 2a 20 56 61 6c 75 65 20 6f 66 20 50 31    /* Value of P1
18230 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20 63 68   operand */.  ch
18240 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20  ar *zName;      
18250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
18260 20 4e 61 6d 65 20 6f 66 20 73 61 76 65 70 6f 69   Name of savepoi
18270 6e 74 20 2a 2f 0a 20 20 69 6e 74 20 6e 4e 61 6d  nt */.  int nNam
18280 65 3b 0a 20 20 53 61 76 65 70 6f 69 6e 74 20 2a  e;.  Savepoint *
18290 70 4e 65 77 3b 0a 20 20 53 61 76 65 70 6f 69 6e  pNew;.  Savepoin
182a0 74 20 2a 70 53 61 76 65 70 6f 69 6e 74 3b 0a 20  t *pSavepoint;. 
182b0 20 53 61 76 65 70 6f 69 6e 74 20 2a 70 54 6d 70   Savepoint *pTmp
182c0 3b 0a 20 20 69 6e 74 20 69 53 61 76 65 70 6f 69  ;.  int iSavepoi
182d0 6e 74 3b 0a 20 20 69 6e 74 20 69 69 3b 0a 0a 20  nt;.  int ii;.. 
182e0 20 70 31 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20   p1 = pOp->p1;. 
182f0 20 7a 4e 61 6d 65 20 3d 20 70 4f 70 2d 3e 70 34   zName = pOp->p4
18300 2e 7a 3b 0a 0a 20 20 2f 2a 20 41 73 73 65 72 74  .z;..  /* Assert
18310 20 74 68 61 74 20 74 68 65 20 70 31 20 70 61 72   that the p1 par
18320 61 6d 65 74 65 72 20 69 73 20 76 61 6c 69 64 2e  ameter is valid.
18330 20 41 6c 73 6f 20 74 68 61 74 20 69 66 20 74 68   Also that if th
18340 65 72 65 20 69 73 20 6e 6f 20 6f 70 65 6e 0a 20  ere is no open. 
18350 20 2a 2a 20 74 72 61 6e 73 61 63 74 69 6f 6e 2c   ** transaction,
18360 20 74 68 65 6e 20 74 68 65 72 65 20 63 61 6e 6e   then there cann
18370 6f 74 20 62 65 20 61 6e 79 20 73 61 76 65 70 6f  ot be any savepo
18380 69 6e 74 73 2e 20 0a 20 20 2a 2f 0a 20 20 61 73  ints. .  */.  as
18390 73 65 72 74 28 20 64 62 2d 3e 70 53 61 76 65 70  sert( db->pSavep
183a0 6f 69 6e 74 3d 3d 30 20 7c 7c 20 64 62 2d 3e 61  oint==0 || db->a
183b0 75 74 6f 43 6f 6d 6d 69 74 3d 3d 30 20 29 3b 0a  utoCommit==0 );.
183c0 20 20 61 73 73 65 72 74 28 20 70 31 3d 3d 53 41    assert( p1==SA
183d0 56 45 50 4f 49 4e 54 5f 42 45 47 49 4e 7c 7c 70  VEPOINT_BEGIN||p
183e0 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 52 45 4c  1==SAVEPOINT_REL
183f0 45 41 53 45 7c 7c 70 31 3d 3d 53 41 56 45 50 4f  EASE||p1==SAVEPO
18400 49 4e 54 5f 52 4f 4c 4c 42 41 43 4b 20 29 3b 0a  INT_ROLLBACK );.
18410 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e 70 53    assert( db->pS
18420 61 76 65 70 6f 69 6e 74 20 7c 7c 20 64 62 2d 3e  avepoint || db->
18430 69 73 54 72 61 6e 73 61 63 74 69 6f 6e 53 61 76  isTransactionSav
18440 65 70 6f 69 6e 74 3d 3d 30 20 29 3b 0a 20 20 61  epoint==0 );.  a
18450 73 73 65 72 74 28 20 63 68 65 63 6b 53 61 76 65  ssert( checkSave
18460 70 6f 69 6e 74 43 6f 75 6e 74 28 64 62 29 20 29  pointCount(db) )
18470 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 62  ;.  assert( p->b
18480 49 73 52 65 61 64 65 72 20 29 3b 0a 0a 20 20 69  IsReader );..  i
18490 66 28 20 70 31 3d 3d 53 41 56 45 50 4f 49 4e 54  f( p1==SAVEPOINT
184a0 5f 42 45 47 49 4e 20 29 7b 0a 20 20 20 20 69 66  _BEGIN ){.    if
184b0 28 20 64 62 2d 3e 6e 56 64 62 65 57 72 69 74 65  ( db->nVdbeWrite
184c0 3e 30 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 41  >0 ){.      /* A
184d0 20 6e 65 77 20 73 61 76 65 70 6f 69 6e 74 20 63   new savepoint c
184e0 61 6e 6e 6f 74 20 62 65 20 63 72 65 61 74 65 64  annot be created
184f0 20 69 66 20 74 68 65 72 65 20 61 72 65 20 61 63   if there are ac
18500 74 69 76 65 20 77 72 69 74 65 20 0a 20 20 20 20  tive write .    
18510 20 20 2a 2a 20 73 74 61 74 65 6d 65 6e 74 73 20    ** statements 
18520 28 69 2e 65 2e 20 6f 70 65 6e 20 72 65 61 64 2f  (i.e. open read/
18530 77 72 69 74 65 20 69 6e 63 72 65 6d 65 6e 74 61  write incrementa
18540 6c 20 62 6c 6f 62 20 68 61 6e 64 6c 65 73 29 2e  l blob handles).
18550 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20  .      */.      
18560 73 71 6c 69 74 65 33 56 64 62 65 45 72 72 6f 72  sqlite3VdbeError
18570 28 70 2c 20 22 63 61 6e 6e 6f 74 20 6f 70 65 6e  (p, "cannot open
18580 20 73 61 76 65 70 6f 69 6e 74 20 2d 20 53 51 4c   savepoint - SQL
18590 20 73 74 61 74 65 6d 65 6e 74 73 20 69 6e 20 70   statements in p
185a0 72 6f 67 72 65 73 73 22 29 3b 0a 20 20 20 20 20  rogress");.     
185b0 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 42 55 53   rc = SQLITE_BUS
185c0 59 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  Y;.    }else{.  
185d0 20 20 20 20 6e 4e 61 6d 65 20 3d 20 73 71 6c 69      nName = sqli
185e0 74 65 33 53 74 72 6c 65 6e 33 30 28 7a 4e 61 6d  te3Strlen30(zNam
185f0 65 29 3b 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c  e);..#ifndef SQL
18600 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c  ITE_OMIT_VIRTUAL
18610 54 41 42 4c 45 0a 20 20 20 20 20 20 2f 2a 20 54  TABLE.      /* T
18620 68 69 73 20 63 61 6c 6c 20 69 73 20 4f 6b 20 65  his call is Ok e
18630 76 65 6e 20 69 66 20 74 68 69 73 20 73 61 76 65  ven if this save
18640 70 6f 69 6e 74 20 69 73 20 61 63 74 75 61 6c 6c  point is actuall
18650 79 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 0a  y a transaction.
18660 20 20 20 20 20 20 2a 2a 20 73 61 76 65 70 6f 69        ** savepoi
18670 6e 74 20 28 61 6e 64 20 74 68 65 72 65 66 6f 72  nt (and therefor
18680 65 20 73 68 6f 75 6c 64 20 6e 6f 74 20 70 72 6f  e should not pro
18690 6d 70 74 20 78 53 61 76 65 70 6f 69 6e 74 28 29  mpt xSavepoint()
186a0 29 20 63 61 6c 6c 62 61 63 6b 73 2e 0a 20 20 20  ) callbacks..   
186b0 20 20 20 2a 2a 20 49 66 20 74 68 69 73 20 69 73     ** If this is
186c0 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 73   a transaction s
186d0 61 76 65 70 6f 69 6e 74 20 62 65 69 6e 67 20 6f  avepoint being o
186e0 70 65 6e 65 64 2c 20 69 74 20 69 73 20 67 75 61  pened, it is gua
186f0 72 61 6e 74 65 65 64 0a 20 20 20 20 20 20 2a 2a  ranteed.      **
18700 20 74 68 61 74 20 74 68 65 20 64 62 2d 3e 61 56   that the db->aV
18710 54 72 61 6e 73 5b 5d 20 61 72 72 61 79 20 69 73  Trans[] array is
18720 20 65 6d 70 74 79 2e 20 20 2a 2f 0a 20 20 20 20   empty.  */.    
18730 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e 61 75    assert( db->au
18740 74 6f 43 6f 6d 6d 69 74 3d 3d 30 20 7c 7c 20 64  toCommit==0 || d
18750 62 2d 3e 6e 56 54 72 61 6e 73 3d 3d 30 20 29 3b  b->nVTrans==0 );
18760 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69  .      rc = sqli
18770 74 65 33 56 74 61 62 53 61 76 65 70 6f 69 6e 74  te3VtabSavepoint
18780 28 64 62 2c 20 53 41 56 45 50 4f 49 4e 54 5f 42  (db, SAVEPOINT_B
18790 45 47 49 4e 2c 0a 20 20 20 20 20 20 20 20 20 20  EGIN,.          
187a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
187b0 20 20 20 20 20 20 64 62 2d 3e 6e 53 74 61 74 65        db->nState
187c0 6d 65 6e 74 2b 64 62 2d 3e 6e 53 61 76 65 70 6f  ment+db->nSavepo
187d0 69 6e 74 29 3b 0a 20 20 20 20 20 20 69 66 28 20  int);.      if( 
187e0 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 20  rc!=SQLITE_OK ) 
187f0 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
18800 6f 5f 65 72 72 6f 72 3b 0a 23 65 6e 64 69 66 0a  o_error;.#endif.
18810 0a 20 20 20 20 20 20 2f 2a 20 43 72 65 61 74 65  .      /* Create
18820 20 61 20 6e 65 77 20 73 61 76 65 70 6f 69 6e 74   a new savepoint
18830 20 73 74 72 75 63 74 75 72 65 2e 20 2a 2f 0a 20   structure. */. 
18840 20 20 20 20 20 70 4e 65 77 20 3d 20 73 71 6c 69       pNew = sqli
18850 74 65 33 44 62 4d 61 6c 6c 6f 63 52 61 77 4e 4e  te3DbMallocRawNN
18860 28 64 62 2c 20 73 69 7a 65 6f 66 28 53 61 76 65  (db, sizeof(Save
18870 70 6f 69 6e 74 29 2b 6e 4e 61 6d 65 2b 31 29 3b  point)+nName+1);
18880 0a 20 20 20 20 20 20 69 66 28 20 70 4e 65 77 20  .      if( pNew 
18890 29 7b 0a 20 20 20 20 20 20 20 20 70 4e 65 77 2d  ){.        pNew-
188a0 3e 7a 4e 61 6d 65 20 3d 20 28 63 68 61 72 20 2a  >zName = (char *
188b0 29 26 70 4e 65 77 5b 31 5d 3b 0a 20 20 20 20 20  )&pNew[1];.     
188c0 20 20 20 6d 65 6d 63 70 79 28 70 4e 65 77 2d 3e     memcpy(pNew->
188d0 7a 4e 61 6d 65 2c 20 7a 4e 61 6d 65 2c 20 6e 4e  zName, zName, nN
188e0 61 6d 65 2b 31 29 3b 0a 20 20 20 20 0a 20 20 20  ame+1);.    .   
188f0 20 20 20 20 20 2f 2a 20 49 66 20 74 68 65 72 65       /* If there
18900 20 69 73 20 6e 6f 20 6f 70 65 6e 20 74 72 61 6e   is no open tran
18910 73 61 63 74 69 6f 6e 2c 20 74 68 65 6e 20 6d 61  saction, then ma
18920 72 6b 20 74 68 69 73 20 61 73 20 61 20 73 70 65  rk this as a spe
18930 63 69 61 6c 0a 20 20 20 20 20 20 20 20 2a 2a 20  cial.        ** 
18940 22 74 72 61 6e 73 61 63 74 69 6f 6e 20 73 61 76  "transaction sav
18950 65 70 6f 69 6e 74 22 2e 20 2a 2f 0a 20 20 20 20  epoint". */.    
18960 20 20 20 20 69 66 28 20 64 62 2d 3e 61 75 74 6f      if( db->auto
18970 43 6f 6d 6d 69 74 20 29 7b 0a 20 20 20 20 20 20  Commit ){.      
18980 20 20 20 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d      db->autoComm
18990 69 74 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20  it = 0;.        
189a0 20 20 64 62 2d 3e 69 73 54 72 61 6e 73 61 63 74    db->isTransact
189b0 69 6f 6e 53 61 76 65 70 6f 69 6e 74 20 3d 20 31  ionSavepoint = 1
189c0 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b  ;.        }else{
189d0 0a 20 20 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 2b 2b 3b 0a 20 20 20  Savepoint++;.   
189f0 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 20 20       }..        
18a00 2f 2a 20 4c 69 6e 6b 20 74 68 65 20 6e 65 77 20  /* Link the new 
18a10 73 61 76 65 70 6f 69 6e 74 20 69 6e 74 6f 20 74  savepoint into t
18a20 68 65 20 64 61 74 61 62 61 73 65 20 68 61 6e 64  he database hand
18a30 6c 65 27 73 20 6c 69 73 74 2e 20 2a 2f 0a 20 20  le's list. */.  
18a40 20 20 20 20 20 20 70 4e 65 77 2d 3e 70 4e 65 78        pNew->pNex
18a50 74 20 3d 20 64 62 2d 3e 70 53 61 76 65 70 6f 69  t = db->pSavepoi
18a60 6e 74 3b 0a 20 20 20 20 20 20 20 20 64 62 2d 3e  nt;.        db->
18a70 70 53 61 76 65 70 6f 69 6e 74 20 3d 20 70 4e 65  pSavepoint = pNe
18a80 77 3b 0a 20 20 20 20 20 20 20 20 70 4e 65 77 2d  w;.        pNew-
18a90 3e 6e 44 65 66 65 72 72 65 64 43 6f 6e 73 20 3d  >nDeferredCons =
18aa0 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 43 6f   db->nDeferredCo
18ab0 6e 73 3b 0a 20 20 20 20 20 20 20 20 70 4e 65 77  ns;.        pNew
18ac0 2d 3e 6e 44 65 66 65 72 72 65 64 49 6d 6d 43 6f  ->nDeferredImmCo
18ad0 6e 73 20 3d 20 64 62 2d 3e 6e 44 65 66 65 72 72  ns = db->nDeferr
18ae0 65 64 49 6d 6d 43 6f 6e 73 3b 0a 20 20 20 20 20  edImmCons;.     
18af0 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65   }.    }.  }else
18b00 7b 0a 20 20 20 20 69 53 61 76 65 70 6f 69 6e 74  {.    iSavepoint
18b10 20 3d 20 30 3b 0a 0a 20 20 20 20 2f 2a 20 46 69   = 0;..    /* Fi
18b20 6e 64 20 74 68 65 20 6e 61 6d 65 64 20 73 61 76  nd the named sav
18b30 65 70 6f 69 6e 74 2e 20 49 66 20 74 68 65 72 65  epoint. If there
18b40 20 69 73 20 6e 6f 20 73 75 63 68 20 73 61 76 65   is no such save
18b50 70 6f 69 6e 74 2c 20 74 68 65 6e 20 61 6e 0a 20  point, then an. 
18b60 20 20 20 2a 2a 20 61 6e 20 65 72 72 6f 72 20 69     ** an error i
18b70 73 20 72 65 74 75 72 6e 65 64 20 74 6f 20 74 68  s returned to th
18b80 65 20 75 73 65 72 2e 20 20 2a 2f 0a 20 20 20 20  e user.  */.    
18b90 66 6f 72 28 0a 20 20 20 20 20 20 70 53 61 76 65  for(.      pSave
18ba0 70 6f 69 6e 74 20 3d 20 64 62 2d 3e 70 53 61 76  point = db->pSav
18bb0 65 70 6f 69 6e 74 3b 20 0a 20 20 20 20 20 20 70  epoint; .      p
18bc0 53 61 76 65 70 6f 69 6e 74 20 26 26 20 73 71 6c  Savepoint && sql
18bd0 69 74 65 33 53 74 72 49 43 6d 70 28 70 53 61 76  ite3StrICmp(pSav
18be0 65 70 6f 69 6e 74 2d 3e 7a 4e 61 6d 65 2c 20 7a  epoint->zName, z
18bf0 4e 61 6d 65 29 3b 0a 20 20 20 20 20 20 70 53 61  Name);.      pSa
18c00 76 65 70 6f 69 6e 74 20 3d 20 70 53 61 76 65 70  vepoint = pSavep
18c10 6f 69 6e 74 2d 3e 70 4e 65 78 74 0a 20 20 20 20  oint->pNext.    
18c20 29 7b 0a 20 20 20 20 20 20 69 53 61 76 65 70 6f  ){.      iSavepo
18c30 69 6e 74 2b 2b 3b 0a 20 20 20 20 7d 0a 20 20 20  int++;.    }.   
18c40 20 69 66 28 20 21 70 53 61 76 65 70 6f 69 6e 74   if( !pSavepoint
18c50 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65   ){.      sqlite
18c60 33 56 64 62 65 45 72 72 6f 72 28 70 2c 20 22 6e  3VdbeError(p, "n
18c70 6f 20 73 75 63 68 20 73 61 76 65 70 6f 69 6e 74  o such savepoint
18c80 3a 20 25 73 22 2c 20 7a 4e 61 6d 65 29 3b 0a 20  : %s", zName);. 
18c90 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45       rc = SQLITE
18ca0 5f 45 52 52 4f 52 3b 0a 20 20 20 20 7d 65 6c 73  _ERROR;.    }els
18cb0 65 20 69 66 28 20 64 62 2d 3e 6e 56 64 62 65 57  e if( db->nVdbeW
18cc0 72 69 74 65 3e 30 20 26 26 20 70 31 3d 3d 53 41  rite>0 && p1==SA
18cd0 56 45 50 4f 49 4e 54 5f 52 45 4c 45 41 53 45 20  VEPOINT_RELEASE 
18ce0 29 7b 0a 20 20 20 20 20 20 2f 2a 20 49 74 20 69  ){.      /* It i
18cf0 73 20 6e 6f 74 20 70 6f 73 73 69 62 6c 65 20 74  s not possible t
18d00 6f 20 72 65 6c 65 61 73 65 20 28 63 6f 6d 6d 69  o release (commi
18d10 74 29 20 61 20 73 61 76 65 70 6f 69 6e 74 20 69  t) a savepoint i
18d20 66 20 74 68 65 72 65 20 61 72 65 20 0a 20 20 20  f there are .   
18d30 20 20 20 2a 2a 20 61 63 74 69 76 65 20 77 72 69     ** active wri
18d40 74 65 20 73 74 61 74 65 6d 65 6e 74 73 2e 0a 20  te statements.. 
18d50 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 73 71       */.      sq
18d60 6c 69 74 65 33 56 64 62 65 45 72 72 6f 72 28 70  lite3VdbeError(p
18d70 2c 20 22 63 61 6e 6e 6f 74 20 72 65 6c 65 61 73  , "cannot releas
18d80 65 20 73 61 76 65 70 6f 69 6e 74 20 2d 20 22 0a  e savepoint - ".
18d90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18da0 20 20 20 20 20 20 20 20 20 20 22 53 51 4c 20 73            "SQL s
18db0 74 61 74 65 6d 65 6e 74 73 20 69 6e 20 70 72 6f  tatements in pro
18dc0 67 72 65 73 73 22 29 3b 0a 20 20 20 20 20 20 72  gress");.      r
18dd0 63 20 3d 20 53 51 4c 49 54 45 5f 42 55 53 59 3b  c = SQLITE_BUSY;
18de0 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 0a 20 20 20  .    }else{..   
18df0 20 20 20 2f 2a 20 44 65 74 65 72 6d 69 6e 65 20     /* Determine 
18e00 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 74  whether or not t
18e10 68 69 73 20 69 73 20 61 20 74 72 61 6e 73 61 63  his is a transac
18e20 74 69 6f 6e 20 73 61 76 65 70 6f 69 6e 74 2e 20  tion savepoint. 
18e30 49 66 20 73 6f 2c 0a 20 20 20 20 20 20 2a 2a 20  If so,.      ** 
18e40 61 6e 64 20 74 68 69 73 20 69 73 20 61 20 52 45  and this is a RE
18e50 4c 45 41 53 45 20 63 6f 6d 6d 61 6e 64 2c 20 74  LEASE command, t
18e60 68 65 6e 20 74 68 65 20 63 75 72 72 65 6e 74 20  hen the current 
18e70 74 72 61 6e 73 61 63 74 69 6f 6e 20 0a 20 20 20  transaction .   
18e80 20 20 20 2a 2a 20 69 73 20 63 6f 6d 6d 69 74 74     ** is committ
18e90 65 64 2e 20 0a 20 20 20 20 20 20 2a 2f 0a 20 20  ed. .      */.  
18ea0 20 20 20 20 69 6e 74 20 69 73 54 72 61 6e 73 61      int isTransa
18eb0 63 74 69 6f 6e 20 3d 20 70 53 61 76 65 70 6f 69  ction = pSavepoi
18ec0 6e 74 2d 3e 70 4e 65 78 74 3d 3d 30 20 26 26 20  nt->pNext==0 && 
18ed0 64 62 2d 3e 69 73 54 72 61 6e 73 61 63 74 69 6f  db->isTransactio
18ee0 6e 53 61 76 65 70 6f 69 6e 74 3b 0a 20 20 20 20  nSavepoint;.    
18ef0 20 20 69 66 28 20 69 73 54 72 61 6e 73 61 63 74    if( isTransact
18f00 69 6f 6e 20 26 26 20 70 31 3d 3d 53 41 56 45 50  ion && p1==SAVEP
18f10 4f 49 4e 54 5f 52 45 4c 45 41 53 45 20 29 7b 0a  OINT_RELEASE ){.
18f20 20 20 20 20 20 20 20 20 69 66 28 20 28 72 63 20          if( (rc 
18f30 3d 20 73 71 6c 69 74 65 33 56 64 62 65 43 68 65  = sqlite3VdbeChe
18f40 63 6b 46 6b 28 70 2c 20 31 29 29 21 3d 53 51 4c  ckFk(p, 1))!=SQL
18f50 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20  ITE_OK ){.      
18f60 20 20 20 20 67 6f 74 6f 20 76 64 62 65 5f 72 65      goto vdbe_re
18f70 74 75 72 6e 3b 0a 20 20 20 20 20 20 20 20 7d 0a  turn;.        }.
18f80 20 20 20 20 20 20 20 20 64 62 2d 3e 61 75 74 6f          db->auto
18f90 43 6f 6d 6d 69 74 20 3d 20 31 3b 0a 20 20 20 20  Commit = 1;.    
18fa0 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 56      if( sqlite3V
18fb0 64 62 65 48 61 6c 74 28 70 29 3d 3d 53 51 4c 49  dbeHalt(p)==SQLI
18fc0 54 45 5f 42 55 53 59 20 29 7b 0a 20 20 20 20 20  TE_BUSY ){.     
18fd0 20 20 20 20 20 70 2d 3e 70 63 20 3d 20 28 69 6e       p->pc = (in
18fe0 74 29 28 70 4f 70 20 2d 20 61 4f 70 29 3b 0a 20  t)(pOp - aOp);. 
18ff0 20 20 20 20 20 20 20 20 20 64 62 2d 3e 61 75 74           db->aut
19000 6f 43 6f 6d 6d 69 74 20 3d 20 30 3b 0a 20 20 20  oCommit = 0;.   
19010 20 20 20 20 20 20 20 70 2d 3e 72 63 20 3d 20 72         p->rc = r
19020 63 20 3d 20 53 51 4c 49 54 45 5f 42 55 53 59 3b  c = SQLITE_BUSY;
19030 0a 20 20 20 20 20 20 20 20 20 20 67 6f 74 6f 20  .          goto 
19040 76 64 62 65 5f 72 65 74 75 72 6e 3b 0a 20 20 20  vdbe_return;.   
19050 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 64       }.        d
19060 62 2d 3e 69 73 54 72 61 6e 73 61 63 74 69 6f 6e  b->isTransaction
19070 53 61 76 65 70 6f 69 6e 74 20 3d 20 30 3b 0a 20  Savepoint = 0;. 
19080 20 20 20 20 20 20 20 72 63 20 3d 20 70 2d 3e 72         rc = p->r
19090 63 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a  c;.      }else{.
190a0 20 20 20 20 20 20 20 20 69 6e 74 20 69 73 53 63          int isSc
190b0 68 65 6d 61 43 68 61 6e 67 65 3b 0a 20 20 20 20  hemaChange;.    
190c0 20 20 20 20 69 53 61 76 65 70 6f 69 6e 74 20 3d      iSavepoint =
190d0 20 64 62 2d 3e 6e 53 61 76 65 70 6f 69 6e 74 20   db->nSavepoint 
190e0 2d 20 69 53 61 76 65 70 6f 69 6e 74 20 2d 20 31  - iSavepoint - 1
190f0 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 70 31  ;.        if( p1
19100 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 52 4f 4c 4c  ==SAVEPOINT_ROLL
19110 42 41 43 4b 20 29 7b 0a 20 20 20 20 20 20 20 20  BACK ){.        
19120 20 20 69 73 53 63 68 65 6d 61 43 68 61 6e 67 65    isSchemaChange
19130 20 3d 20 28 64 62 2d 3e 6d 44 62 46 6c 61 67 73   = (db->mDbFlags
19140 20 26 20 44 42 46 4c 41 47 5f 53 63 68 65 6d 61   & DBFLAG_Schema
19150 43 68 61 6e 67 65 29 21 3d 30 3b 0a 20 20 20 20  Change)!=0;.    
19160 20 20 20 20 20 20 66 6f 72 28 69 69 3d 30 3b 20        for(ii=0; 
19170 69 69 3c 64 62 2d 3e 6e 44 62 3b 20 69 69 2b 2b  ii<db->nDb; ii++
19180 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  ){.            r
19190 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
191a0 54 72 69 70 41 6c 6c 43 75 72 73 6f 72 73 28 64  TripAllCursors(d
191b0 62 2d 3e 61 44 62 5b 69 69 5d 2e 70 42 74 2c 0a  b->aDb[ii].pBt,.
191c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
191d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
191e0 20 20 20 20 20 20 20 53 51 4c 49 54 45 5f 41 42         SQLITE_AB
191f0 4f 52 54 5f 52 4f 4c 4c 42 41 43 4b 2c 0a 20 20  ORT_ROLLBACK,.  
19200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19220 20 20 20 20 20 69 73 53 63 68 65 6d 61 43 68 61       isSchemaCha
19230 6e 67 65 3d 3d 30 29 3b 0a 20 20 20 20 20 20 20  nge==0);.       
19240 20 20 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c       if( rc!=SQL
19250 49 54 45 5f 4f 4b 20 29 20 67 6f 74 6f 20 61 62  ITE_OK ) goto ab
19260 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
19270 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20  ;.          }.  
19280 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20        }else{.   
19290 20 20 20 20 20 20 20 69 73 53 63 68 65 6d 61 43         isSchemaC
192a0 68 61 6e 67 65 20 3d 20 30 3b 0a 20 20 20 20 20  hange = 0;.     
192b0 20 20 20 7d 0a 20 20 20 20 20 20 20 20 66 6f 72     }.        for
192c0 28 69 69 3d 30 3b 20 69 69 3c 64 62 2d 3e 6e 44  (ii=0; ii<db->nD
192d0 62 3b 20 69 69 2b 2b 29 7b 0a 20 20 20 20 20 20  b; ii++){.      
192e0 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
192f0 42 74 72 65 65 53 61 76 65 70 6f 69 6e 74 28 64  BtreeSavepoint(d
19300 62 2d 3e 61 44 62 5b 69 69 5d 2e 70 42 74 2c 20  b->aDb[ii].pBt, 
19310 70 31 2c 20 69 53 61 76 65 70 6f 69 6e 74 29 3b  p1, iSavepoint);
19320 0a 20 20 20 20 20 20 20 20 20 20 69 66 28 20 72  .          if( r
19330 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a  c!=SQLITE_OK ){.
19340 20 20 20 20 20 20 20 20 20 20 20 20 67 6f 74 6f              goto
19350 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
19360 72 6f 72 3b 0a 20 20 20 20 20 20 20 20 20 20 7d  ror;.          }
19370 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20  .        }.     
19380 20 20 20 69 66 28 20 69 73 53 63 68 65 6d 61 43     if( isSchemaC
19390 68 61 6e 67 65 20 29 7b 0a 20 20 20 20 20 20 20  hange ){.       
193a0 20 20 20 73 71 6c 69 74 65 33 45 78 70 69 72 65     sqlite3Expire
193b0 50 72 65 70 61 72 65 64 53 74 61 74 65 6d 65 6e  PreparedStatemen
193c0 74 73 28 64 62 29 3b 0a 20 20 20 20 20 20 20 20  ts(db);.        
193d0 20 20 73 71 6c 69 74 65 33 52 65 73 65 74 41 6c    sqlite3ResetAl
193e0 6c 53 63 68 65 6d 61 73 4f 66 43 6f 6e 6e 65 63  lSchemasOfConnec
193f0 74 69 6f 6e 28 64 62 29 3b 0a 20 20 20 20 20 20  tion(db);.      
19400 20 20 20 20 64 62 2d 3e 6d 44 62 46 6c 61 67 73      db->mDbFlags
19410 20 7c 3d 20 44 42 46 4c 41 47 5f 53 63 68 65 6d   |= DBFLAG_Schem
19420 61 43 68 61 6e 67 65 3b 0a 20 20 20 20 20 20 20  aChange;.       
19430 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20 0a 20 20   }.      }.  .  
19440 20 20 20 20 2f 2a 20 52 65 67 61 72 64 6c 65 73      /* Regardles
19450 73 20 6f 66 20 77 68 65 74 68 65 72 20 74 68 69  s of whether thi
19460 73 20 69 73 20 61 20 52 45 4c 45 41 53 45 20 6f  s is a RELEASE o
19470 72 20 52 4f 4c 4c 42 41 43 4b 2c 20 64 65 73 74  r ROLLBACK, dest
19480 72 6f 79 20 61 6c 6c 20 0a 20 20 20 20 20 20 2a  roy all .      *
19490 2a 20 73 61 76 65 70 6f 69 6e 74 73 20 6e 65 73  * savepoints nes
194a0 74 65 64 20 69 6e 73 69 64 65 20 6f 66 20 74 68  ted inside of th
194b0 65 20 73 61 76 65 70 6f 69 6e 74 20 62 65 69 6e  e savepoint bein
194c0 67 20 6f 70 65 72 61 74 65 64 20 6f 6e 2e 20 2a  g operated on. *
194d0 2f 0a 20 20 20 20 20 20 77 68 69 6c 65 28 20 64  /.      while( d
194e0 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74 21 3d 70  b->pSavepoint!=p
194f0 53 61 76 65 70 6f 69 6e 74 20 29 7b 0a 20 20 20  Savepoint ){.   
19500 20 20 20 20 20 70 54 6d 70 20 3d 20 64 62 2d 3e       pTmp = db->
19510 70 53 61 76 65 70 6f 69 6e 74 3b 0a 20 20 20 20  pSavepoint;.    
19520 20 20 20 20 64 62 2d 3e 70 53 61 76 65 70 6f 69      db->pSavepoi
19530 6e 74 20 3d 20 70 54 6d 70 2d 3e 70 4e 65 78 74  nt = pTmp->pNext
19540 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  ;.        sqlite
19550 33 44 62 46 72 65 65 28 64 62 2c 20 70 54 6d 70  3DbFree(db, pTmp
19560 29 3b 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 6e  );.        db->n
19570 53 61 76 65 70 6f 69 6e 74 2d 2d 3b 0a 20 20 20  Savepoint--;.   
19580 20 20 20 7d 0a 0a 20 20 20 20 20 20 2f 2a 20 49     }..      /* I
19590 66 20 69 74 20 69 73 20 61 20 52 45 4c 45 41 53  f it is a RELEAS
195a0 45 2c 20 74 68 65 6e 20 64 65 73 74 72 6f 79 20  E, then destroy 
195b0 74 68 65 20 73 61 76 65 70 6f 69 6e 74 20 62 65  the savepoint be
195c0 69 6e 67 20 6f 70 65 72 61 74 65 64 20 6f 6e 20  ing operated on 
195d0 0a 20 20 20 20 20 20 2a 2a 20 74 6f 6f 2e 20 49  .      ** too. I
195e0 66 20 69 74 20 69 73 20 61 20 52 4f 4c 4c 42 41  f it is a ROLLBA
195f0 43 4b 20 54 4f 2c 20 74 68 65 6e 20 73 65 74 20  CK TO, then set 
19600 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 64 65  the number of de
19610 66 65 72 72 65 64 20 0a 20 20 20 20 20 20 2a 2a  ferred .      **
19620 20 63 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c   constraint viol
19630 61 74 69 6f 6e 73 20 70 72 65 73 65 6e 74 20 69  ations present i
19640 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20 74  n the database t
19650 6f 20 74 68 65 20 76 61 6c 75 65 20 73 74 6f 72  o the value stor
19660 65 64 0a 20 20 20 20 20 20 2a 2a 20 77 68 65 6e  ed.      ** when
19670 20 74 68 65 20 73 61 76 65 70 6f 69 6e 74 20 77   the savepoint w
19680 61 73 20 63 72 65 61 74 65 64 2e 20 20 2a 2f 0a  as created.  */.
19690 20 20 20 20 20 20 69 66 28 20 70 31 3d 3d 53 41        if( p1==SA
196a0 56 45 50 4f 49 4e 54 5f 52 45 4c 45 41 53 45 20  VEPOINT_RELEASE 
196b0 29 7b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72  ){.        asser
196c0 74 28 20 70 53 61 76 65 70 6f 69 6e 74 3d 3d 64  t( pSavepoint==d
196d0 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74 20 29 3b  b->pSavepoint );
196e0 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 70 53 61  .        db->pSa
196f0 76 65 70 6f 69 6e 74 20 3d 20 70 53 61 76 65 70  vepoint = pSavep
19700 6f 69 6e 74 2d 3e 70 4e 65 78 74 3b 0a 20 20 20  oint->pNext;.   
19710 20 20 20 20 20 73 71 6c 69 74 65 33 44 62 46 72       sqlite3DbFr
19720 65 65 28 64 62 2c 20 70 53 61 76 65 70 6f 69 6e  ee(db, pSavepoin
19730 74 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20  t);.        if( 
19740 21 69 73 54 72 61 6e 73 61 63 74 69 6f 6e 20 29  !isTransaction )
19750 7b 0a 20 20 20 20 20 20 20 20 20 20 64 62 2d 3e  {.          db->
19760 6e 53 61 76 65 70 6f 69 6e 74 2d 2d 3b 0a 20 20  nSavepoint--;.  
19770 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 65        }.      }e
19780 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 64 62 2d  lse{.        db-
19790 3e 6e 44 65 66 65 72 72 65 64 43 6f 6e 73 20 3d  >nDeferredCons =
197a0 20 70 53 61 76 65 70 6f 69 6e 74 2d 3e 6e 44 65   pSavepoint->nDe
197b0 66 65 72 72 65 64 43 6f 6e 73 3b 0a 20 20 20 20  ferredCons;.    
197c0 20 20 20 20 64 62 2d 3e 6e 44 65 66 65 72 72 65      db->nDeferre
197d0 64 49 6d 6d 43 6f 6e 73 20 3d 20 70 53 61 76 65  dImmCons = pSave
197e0 70 6f 69 6e 74 2d 3e 6e 44 65 66 65 72 72 65 64  point->nDeferred
197f0 49 6d 6d 43 6f 6e 73 3b 0a 20 20 20 20 20 20 7d  ImmCons;.      }
19800 0a 0a 20 20 20 20 20 20 69 66 28 20 21 69 73 54  ..      if( !isT
19810 72 61 6e 73 61 63 74 69 6f 6e 20 7c 7c 20 70 31  ransaction || p1
19820 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 52 4f 4c 4c  ==SAVEPOINT_ROLL
19830 42 41 43 4b 20 29 7b 0a 20 20 20 20 20 20 20 20  BACK ){.        
19840 72 63 20 3d 20 73 71 6c 69 74 65 33 56 74 61 62  rc = sqlite3Vtab
19850 53 61 76 65 70 6f 69 6e 74 28 64 62 2c 20 70 31  Savepoint(db, p1
19860 2c 20 69 53 61 76 65 70 6f 69 6e 74 29 3b 0a 20  , iSavepoint);. 
19870 20 20 20 20 20 20 20 69 66 28 20 72 63 21 3d 53         if( rc!=S
19880 51 4c 49 54 45 5f 4f 4b 20 29 20 67 6f 74 6f 20  QLITE_OK ) goto 
19890 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
198a0 6f 72 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  or;.      }.    
198b0 7d 0a 20 20 7d 0a 20 20 69 66 28 20 72 63 20 29  }.  }.  if( rc )
198c0 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
198d0 74 6f 5f 65 72 72 6f 72 3b 0a 0a 20 20 62 72 65  to_error;..  bre
198e0 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
198f0 3a 20 41 75 74 6f 43 6f 6d 6d 69 74 20 50 31 20  : AutoCommit P1 
19900 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 53  P2 * * *.**.** S
19910 65 74 20 74 68 65 20 64 61 74 61 62 61 73 65 20  et the database 
19920 61 75 74 6f 2d 63 6f 6d 6d 69 74 20 66 6c 61 67  auto-commit flag
19930 20 74 6f 20 50 31 20 28 31 20 6f 72 20 30 29 2e   to P1 (1 or 0).
19940 20 49 66 20 50 32 20 69 73 20 74 72 75 65 2c 20   If P2 is true, 
19950 72 6f 6c 6c 0a 2a 2a 20 62 61 63 6b 20 61 6e 79  roll.** back any
19960 20 63 75 72 72 65 6e 74 6c 79 20 61 63 74 69 76   currently activ
19970 65 20 62 74 72 65 65 20 74 72 61 6e 73 61 63 74  e btree transact
19980 69 6f 6e 73 2e 20 49 66 20 74 68 65 72 65 20 61  ions. If there a
19990 72 65 20 61 6e 79 20 61 63 74 69 76 65 0a 2a 2a  re any active.**
199a0 20 56 4d 73 20 28 61 70 61 72 74 20 66 72 6f 6d   VMs (apart from
199b0 20 74 68 69 73 20 6f 6e 65 29 2c 20 74 68 65 6e   this one), then
199c0 20 61 20 52 4f 4c 4c 42 41 43 4b 20 66 61 69 6c   a ROLLBACK fail
199d0 73 2e 20 20 41 20 43 4f 4d 4d 49 54 20 66 61 69  s.  A COMMIT fai
199e0 6c 73 20 69 66 0a 2a 2a 20 74 68 65 72 65 20 61  ls if.** there a
199f0 72 65 20 61 63 74 69 76 65 20 77 72 69 74 69 6e  re active writin
19a00 67 20 56 4d 73 20 6f 72 20 61 63 74 69 76 65 20  g VMs or active 
19a10 56 4d 73 20 74 68 61 74 20 75 73 65 20 73 68 61  VMs that use sha
19a20 72 65 64 20 63 61 63 68 65 2e 0a 2a 2a 0a 2a 2a  red cache..**.**
19a30 20 54 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f   This instructio
19a40 6e 20 63 61 75 73 65 73 20 74 68 65 20 56 4d 20  n causes the VM 
19a50 74 6f 20 68 61 6c 74 2e 0a 2a 2f 0a 63 61 73 65  to halt..*/.case
19a60 20 4f 50 5f 41 75 74 6f 43 6f 6d 6d 69 74 3a 20   OP_AutoCommit: 
19a70 7b 0a 20 20 69 6e 74 20 64 65 73 69 72 65 64 41  {.  int desiredA
19a80 75 74 6f 43 6f 6d 6d 69 74 3b 0a 20 20 69 6e 74  utoCommit;.  int
19a90 20 69 52 6f 6c 6c 62 61 63 6b 3b 0a 0a 20 20 64   iRollback;..  d
19aa0 65 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74  esiredAutoCommit
19ab0 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 69 52   = pOp->p1;.  iR
19ac0 6f 6c 6c 62 61 63 6b 20 3d 20 70 4f 70 2d 3e 70  ollback = pOp->p
19ad0 32 3b 0a 20 20 61 73 73 65 72 74 28 20 64 65 73  2;.  assert( des
19ae0 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74 3d 3d  iredAutoCommit==
19af0 31 20 7c 7c 20 64 65 73 69 72 65 64 41 75 74 6f  1 || desiredAuto
19b00 43 6f 6d 6d 69 74 3d 3d 30 20 29 3b 0a 20 20 61  Commit==0 );.  a
19b10 73 73 65 72 74 28 20 64 65 73 69 72 65 64 41 75  ssert( desiredAu
19b20 74 6f 43 6f 6d 6d 69 74 3d 3d 31 20 7c 7c 20 69  toCommit==1 || i
19b30 52 6f 6c 6c 62 61 63 6b 3d 3d 30 20 29 3b 0a 20  Rollback==0 );. 
19b40 20 61 73 73 65 72 74 28 20 64 62 2d 3e 6e 56 64   assert( db->nVd
19b50 62 65 41 63 74 69 76 65 3e 30 20 29 3b 20 20 2f  beActive>0 );  /
19b60 2a 20 41 74 20 6c 65 61 73 74 20 74 68 69 73 20  * At least this 
19b70 6f 6e 65 20 56 4d 20 69 73 20 61 63 74 69 76 65  one VM is active
19b80 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70 2d   */.  assert( p-
19b90 3e 62 49 73 52 65 61 64 65 72 20 29 3b 0a 0a 20  >bIsReader );.. 
19ba0 20 69 66 28 20 64 65 73 69 72 65 64 41 75 74 6f   if( desiredAuto
19bb0 43 6f 6d 6d 69 74 21 3d 64 62 2d 3e 61 75 74 6f  Commit!=db->auto
19bc0 43 6f 6d 6d 69 74 20 29 7b 0a 20 20 20 20 69 66  Commit ){.    if
19bd0 28 20 69 52 6f 6c 6c 62 61 63 6b 20 29 7b 0a 20  ( iRollback ){. 
19be0 20 20 20 20 20 61 73 73 65 72 74 28 20 64 65 73       assert( des
19bf0 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74 3d 3d  iredAutoCommit==
19c00 31 20 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74  1 );.      sqlit
19c10 65 33 52 6f 6c 6c 62 61 63 6b 41 6c 6c 28 64 62  e3RollbackAll(db
19c20 2c 20 53 51 4c 49 54 45 5f 41 42 4f 52 54 5f 52  , SQLITE_ABORT_R
19c30 4f 4c 4c 42 41 43 4b 29 3b 0a 20 20 20 20 20 20  OLLBACK);.      
19c40 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 3d  db->autoCommit =
19c50 20 31 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66   1;.    }else if
19c60 28 20 64 65 73 69 72 65 64 41 75 74 6f 43 6f 6d  ( desiredAutoCom
19c70 6d 69 74 20 26 26 20 64 62 2d 3e 6e 56 64 62 65  mit && db->nVdbe
19c80 57 72 69 74 65 3e 30 20 29 7b 0a 20 20 20 20 20  Write>0 ){.     
19c90 20 2f 2a 20 49 66 20 74 68 69 73 20 69 6e 73 74   /* If this inst
19ca0 72 75 63 74 69 6f 6e 20 69 6d 70 6c 65 6d 65 6e  ruction implemen
19cb0 74 73 20 61 20 43 4f 4d 4d 49 54 20 61 6e 64 20  ts a COMMIT and 
19cc0 6f 74 68 65 72 20 56 4d 73 20 61 72 65 20 77 72  other VMs are wr
19cd0 69 74 69 6e 67 0a 20 20 20 20 20 20 2a 2a 20 72  iting.      ** r
19ce0 65 74 75 72 6e 20 61 6e 20 65 72 72 6f 72 20 69  eturn an error i
19cf0 6e 64 69 63 61 74 69 6e 67 20 74 68 61 74 20 74  ndicating that t
19d00 68 65 20 6f 74 68 65 72 20 56 4d 73 20 6d 75 73  he other VMs mus
19d10 74 20 63 6f 6d 70 6c 65 74 65 20 66 69 72 73 74  t complete first
19d20 2e 20 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20  . .      */.    
19d30 20 20 73 71 6c 69 74 65 33 56 64 62 65 45 72 72    sqlite3VdbeErr
19d40 6f 72 28 70 2c 20 22 63 61 6e 6e 6f 74 20 63 6f  or(p, "cannot co
19d50 6d 6d 69 74 20 74 72 61 6e 73 61 63 74 69 6f 6e  mmit transaction
19d60 20 2d 20 22 0a 20 20 20 20 20 20 20 20 20 20 20   - ".           
19d70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
19d80 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 73 20 69  SQL statements i
19d90 6e 20 70 72 6f 67 72 65 73 73 22 29 3b 0a 20 20  n progress");.  
19da0 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f      rc = SQLITE_
19db0 42 55 53 59 3b 0a 20 20 20 20 20 20 67 6f 74 6f  BUSY;.      goto
19dc0 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
19dd0 72 6f 72 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69  ror;.    }else i
19de0 66 28 20 28 72 63 20 3d 20 73 71 6c 69 74 65 33  f( (rc = sqlite3
19df0 56 64 62 65 43 68 65 63 6b 46 6b 28 70 2c 20 31  VdbeCheckFk(p, 1
19e00 29 29 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b  ))!=SQLITE_OK ){
19e10 0a 20 20 20 20 20 20 67 6f 74 6f 20 76 64 62 65  .      goto vdbe
19e20 5f 72 65 74 75 72 6e 3b 0a 20 20 20 20 7d 65 6c  _return;.    }el
19e30 73 65 7b 0a 20 20 20 20 20 20 64 62 2d 3e 61 75  se{.      db->au
19e40 74 6f 43 6f 6d 6d 69 74 20 3d 20 28 75 38 29 64  toCommit = (u8)d
19e50 65 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74  esiredAutoCommit
19e60 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20  ;.    }.    if( 
19e70 73 71 6c 69 74 65 33 56 64 62 65 48 61 6c 74 28  sqlite3VdbeHalt(
19e80 70 29 3d 3d 53 51 4c 49 54 45 5f 42 55 53 59 20  p)==SQLITE_BUSY 
19e90 29 7b 0a 20 20 20 20 20 20 70 2d 3e 70 63 20 3d  ){.      p->pc =
19ea0 20 28 69 6e 74 29 28 70 4f 70 20 2d 20 61 4f 70   (int)(pOp - aOp
19eb0 29 3b 0a 20 20 20 20 20 20 64 62 2d 3e 61 75 74  );.      db->aut
19ec0 6f 43 6f 6d 6d 69 74 20 3d 20 28 75 38 29 28 31  oCommit = (u8)(1
19ed0 2d 64 65 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d  -desiredAutoComm
19ee0 69 74 29 3b 0a 20 20 20 20 20 20 70 2d 3e 72 63  it);.      p->rc
19ef0 20 3d 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 42   = rc = SQLITE_B
19f00 55 53 59 3b 0a 20 20 20 20 20 20 67 6f 74 6f 20  USY;.      goto 
19f10 76 64 62 65 5f 72 65 74 75 72 6e 3b 0a 20 20 20  vdbe_return;.   
19f20 20 7d 0a 20 20 20 20 61 73 73 65 72 74 28 20 64   }.    assert( d
19f30 62 2d 3e 6e 53 74 61 74 65 6d 65 6e 74 3d 3d 30  b->nStatement==0
19f40 20 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 43   );.    sqlite3C
19f50 6c 6f 73 65 53 61 76 65 70 6f 69 6e 74 73 28 64  loseSavepoints(d
19f60 62 29 3b 0a 20 20 20 20 69 66 28 20 70 2d 3e 72  b);.    if( p->r
19f70 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a  c==SQLITE_OK ){.
19f80 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54        rc = SQLIT
19f90 45 5f 44 4f 4e 45 3b 0a 20 20 20 20 7d 65 6c 73  E_DONE;.    }els
19fa0 65 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 53 51  e{.      rc = SQ
19fb0 4c 49 54 45 5f 45 52 52 4f 52 3b 0a 20 20 20 20  LITE_ERROR;.    
19fc0 7d 0a 20 20 20 20 67 6f 74 6f 20 76 64 62 65 5f  }.    goto vdbe_
19fd0 72 65 74 75 72 6e 3b 0a 20 20 7d 65 6c 73 65 7b  return;.  }else{
19fe0 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
19ff0 45 72 72 6f 72 28 70 2c 0a 20 20 20 20 20 20 20  Error(p,.       
1a000 20 28 21 64 65 73 69 72 65 64 41 75 74 6f 43 6f   (!desiredAutoCo
1a010 6d 6d 69 74 29 3f 22 63 61 6e 6e 6f 74 20 73 74  mmit)?"cannot st
1a020 61 72 74 20 61 20 74 72 61 6e 73 61 63 74 69 6f  art a transactio
1a030 6e 20 77 69 74 68 69 6e 20 61 20 74 72 61 6e 73  n within a trans
1a040 61 63 74 69 6f 6e 22 3a 28 0a 20 20 20 20 20 20  action":(.      
1a050 20 20 28 69 52 6f 6c 6c 62 61 63 6b 29 3f 22 63    (iRollback)?"c
1a060 61 6e 6e 6f 74 20 72 6f 6c 6c 62 61 63 6b 20 2d  annot rollback -
1a070 20 6e 6f 20 74 72 61 6e 73 61 63 74 69 6f 6e 20   no transaction 
1a080 69 73 20 61 63 74 69 76 65 22 3a 0a 20 20 20 20  is active":.    
1a090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
1a0a0 63 61 6e 6e 6f 74 20 63 6f 6d 6d 69 74 20 2d 20  cannot commit - 
1a0b0 6e 6f 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69  no transaction i
1a0c0 73 20 61 63 74 69 76 65 22 29 29 3b 0a 20 20 20  s active"));.   
1a0d0 20 20 20 20 20 20 0a 20 20 20 20 72 63 20 3d 20        .    rc = 
1a0e0 53 51 4c 49 54 45 5f 45 52 52 4f 52 3b 0a 20 20  SQLITE_ERROR;.  
1a0f0 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65    goto abort_due
1a100 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 7d 0a 20  _to_error;.  }. 
1a110 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
1a120 63 6f 64 65 3a 20 54 72 61 6e 73 61 63 74 69 6f  code: Transactio
1a130 6e 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35  n P1 P2 P3 P4 P5
1a140 0a 2a 2a 0a 2a 2a 20 42 65 67 69 6e 20 61 20 74  .**.** Begin a t
1a150 72 61 6e 73 61 63 74 69 6f 6e 20 6f 6e 20 64 61  ransaction on da
1a160 74 61 62 61 73 65 20 50 31 20 69 66 20 61 20 74  tabase P1 if a t
1a170 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 6e 6f  ransaction is no
1a180 74 20 61 6c 72 65 61 64 79 0a 2a 2a 20 61 63 74  t already.** act
1a190 69 76 65 2e 0a 2a 2a 20 49 66 20 50 32 20 69 73  ive..** If P2 is
1a1a0 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65 6e 20   non-zero, then 
1a1b0 61 20 77 72 69 74 65 2d 74 72 61 6e 73 61 63 74  a write-transact
1a1c0 69 6f 6e 20 69 73 20 73 74 61 72 74 65 64 2c 20  ion is started, 
1a1d0 6f 72 20 69 66 20 61 20 0a 2a 2a 20 72 65 61 64  or if a .** read
1a1e0 2d 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20  -transaction is 
1a1f0 61 6c 72 65 61 64 79 20 61 63 74 69 76 65 2c 20  already active, 
1a200 69 74 20 69 73 20 75 70 67 72 61 64 65 64 20 74  it is upgraded t
1a210 6f 20 61 20 77 72 69 74 65 2d 74 72 61 6e 73 61  o a write-transa
1a220 63 74 69 6f 6e 2e 0a 2a 2a 20 49 66 20 50 32 20  ction..** If P2 
1a230 69 73 20 7a 65 72 6f 2c 20 74 68 65 6e 20 61 20  is zero, then a 
1a240 72 65 61 64 2d 74 72 61 6e 73 61 63 74 69 6f 6e  read-transaction
1a250 20 69 73 20 73 74 61 72 74 65 64 2e 0a 2a 2a 0a   is started..**.
1a260 2a 2a 20 50 31 20 69 73 20 74 68 65 20 69 6e 64  ** P1 is the ind
1a270 65 78 20 6f 66 20 74 68 65 20 64 61 74 61 62 61  ex of the databa
1a280 73 65 20 66 69 6c 65 20 6f 6e 20 77 68 69 63 68  se file on which
1a290 20 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e   the transaction
1a2a0 20 69 73 0a 2a 2a 20 73 74 61 72 74 65 64 2e 20   is.** started. 
1a2b0 20 49 6e 64 65 78 20 30 20 69 73 20 74 68 65 20   Index 0 is the 
1a2c0 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 66 69  main database fi
1a2d0 6c 65 20 61 6e 64 20 69 6e 64 65 78 20 31 20 69  le and index 1 i
1a2e0 73 20 74 68 65 0a 2a 2a 20 66 69 6c 65 20 75 73  s the.** file us
1a2f0 65 64 20 66 6f 72 20 74 65 6d 70 6f 72 61 72 79  ed for temporary
1a300 20 74 61 62 6c 65 73 2e 20 20 49 6e 64 69 63 65   tables.  Indice
1a310 73 20 6f 66 20 32 20 6f 72 20 6d 6f 72 65 20 61  s of 2 or more a
1a320 72 65 20 75 73 65 64 20 66 6f 72 0a 2a 2a 20 61  re used for.** a
1a330 74 74 61 63 68 65 64 20 64 61 74 61 62 61 73 65  ttached database
1a340 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 61 20 77 72  s..**.** If a wr
1a350 69 74 65 2d 74 72 61 6e 73 61 63 74 69 6f 6e 20  ite-transaction 
1a360 69 73 20 73 74 61 72 74 65 64 20 61 6e 64 20 74  is started and t
1a370 68 65 20 56 64 62 65 2e 75 73 65 73 53 74 6d 74  he Vdbe.usesStmt
1a380 4a 6f 75 72 6e 61 6c 20 66 6c 61 67 20 69 73 0a  Journal flag is.
1a390 2a 2a 20 74 72 75 65 20 28 74 68 69 73 20 66 6c  ** true (this fl
1a3a0 61 67 20 69 73 20 73 65 74 20 69 66 20 74 68 65  ag is set if the
1a3b0 20 56 64 62 65 20 6d 61 79 20 6d 6f 64 69 66 79   Vdbe may modify
1a3c0 20 6d 6f 72 65 20 74 68 61 6e 20 6f 6e 65 20 72   more than one r
1a3d0 6f 77 20 61 6e 64 20 6d 61 79 0a 2a 2a 20 74 68  ow and may.** th
1a3e0 72 6f 77 20 61 6e 20 41 42 4f 52 54 20 65 78 63  row an ABORT exc
1a3f0 65 70 74 69 6f 6e 29 2c 20 61 20 73 74 61 74 65  eption), a state
1a400 6d 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e  ment transaction
1a410 20 6d 61 79 20 61 6c 73 6f 20 62 65 20 6f 70 65   may also be ope
1a420 6e 65 64 2e 0a 2a 2a 20 4d 6f 72 65 20 73 70 65  ned..** More spe
1a430 63 69 66 69 63 61 6c 6c 79 2c 20 61 20 73 74 61  cifically, a sta
1a440 74 65 6d 65 6e 74 20 74 72 61 6e 73 61 63 74 69  tement transacti
1a450 6f 6e 20 69 73 20 6f 70 65 6e 65 64 20 69 66 66  on is opened iff
1a460 20 74 68 65 20 64 61 74 61 62 61 73 65 0a 2a 2a   the database.**
1a470 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 69 73 20 63   connection is c
1a480 75 72 72 65 6e 74 6c 79 20 6e 6f 74 20 69 6e 20  urrently not in 
1a490 61 75 74 6f 63 6f 6d 6d 69 74 20 6d 6f 64 65 2c  autocommit mode,
1a4a0 20 6f 72 20 69 66 20 74 68 65 72 65 20 61 72 65   or if there are
1a4b0 20 6f 74 68 65 72 0a 2a 2a 20 61 63 74 69 76 65   other.** active
1a4c0 20 73 74 61 74 65 6d 65 6e 74 73 2e 20 41 20 73   statements. A s
1a4d0 74 61 74 65 6d 65 6e 74 20 74 72 61 6e 73 61 63  tatement transac
1a4e0 74 69 6f 6e 20 61 6c 6c 6f 77 73 20 74 68 65 20  tion allows the 
1a4f0 63 68 61 6e 67 65 73 20 6d 61 64 65 20 62 79 20  changes made by 
1a500 74 68 69 73 0a 2a 2a 20 56 44 42 45 20 74 6f 20  this.** VDBE to 
1a510 62 65 20 72 6f 6c 6c 65 64 20 62 61 63 6b 20 61  be rolled back a
1a520 66 74 65 72 20 61 6e 20 65 72 72 6f 72 20 77 69  fter an error wi
1a530 74 68 6f 75 74 20 68 61 76 69 6e 67 20 74 6f 20  thout having to 
1a540 72 6f 6c 6c 20 62 61 63 6b 20 74 68 65 0a 2a 2a  roll back the.**
1a550 20 65 6e 74 69 72 65 20 74 72 61 6e 73 61 63 74   entire transact
1a560 69 6f 6e 2e 20 49 66 20 6e 6f 20 65 72 72 6f 72  ion. If no error
1a570 20 69 73 20 65 6e 63 6f 75 6e 74 65 72 65 64 2c   is encountered,
1a580 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74 20 74   the statement t
1a590 72 61 6e 73 61 63 74 69 6f 6e 0a 2a 2a 20 77 69  ransaction.** wi
1a5a0 6c 6c 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79  ll automatically
1a5b0 20 63 6f 6d 6d 69 74 20 77 68 65 6e 20 74 68 65   commit when the
1a5c0 20 56 44 42 45 20 68 61 6c 74 73 2e 0a 2a 2a 0a   VDBE halts..**.
1a5d0 2a 2a 20 49 66 20 50 35 21 3d 30 20 74 68 65 6e  ** If P5!=0 then
1a5e0 20 74 68 69 73 20 6f 70 63 6f 64 65 20 61 6c 73   this opcode als
1a5f0 6f 20 63 68 65 63 6b 73 20 74 68 65 20 73 63 68  o checks the sch
1a600 65 6d 61 20 63 6f 6f 6b 69 65 20 61 67 61 69 6e  ema cookie again
1a610 73 74 20 50 33 0a 2a 2a 20 61 6e 64 20 74 68 65  st P3.** and the
1a620 20 73 63 68 65 6d 61 20 67 65 6e 65 72 61 74 69   schema generati
1a630 6f 6e 20 63 6f 75 6e 74 65 72 20 61 67 61 69 6e  on counter again
1a640 73 74 20 50 34 2e 0a 2a 2a 20 54 68 65 20 63 6f  st P4..** The co
1a650 6f 6b 69 65 20 63 68 61 6e 67 65 73 20 69 74 73  okie changes its
1a660 20 76 61 6c 75 65 20 77 68 65 6e 65 76 65 72 20   value whenever 
1a670 74 68 65 20 64 61 74 61 62 61 73 65 20 73 63 68  the database sch
1a680 65 6d 61 20 63 68 61 6e 67 65 73 2e 0a 2a 2a 20  ema changes..** 
1a690 54 68 69 73 20 6f 70 65 72 61 74 69 6f 6e 20 69  This operation i
1a6a0 73 20 75 73 65 64 20 74 6f 20 64 65 74 65 63 74  s used to detect
1a6b0 20 77 68 65 6e 20 74 68 61 74 20 74 68 65 20 63   when that the c
1a6c0 6f 6f 6b 69 65 20 68 61 73 20 63 68 61 6e 67 65  ookie has change
1a6d0 64 0a 2a 2a 20 61 6e 64 20 74 68 61 74 20 74 68  d.** and that th
1a6e0 65 20 63 75 72 72 65 6e 74 20 70 72 6f 63 65 73  e current proces
1a6f0 73 20 6e 65 65 64 73 20 74 6f 20 72 65 72 65 61  s needs to rerea
1a700 64 20 74 68 65 20 73 63 68 65 6d 61 2e 20 20 49  d the schema.  I
1a710 66 20 74 68 65 20 73 63 68 65 6d 61 0a 2a 2a 20  f the schema.** 
1a720 63 6f 6f 6b 69 65 20 69 6e 20 50 33 20 64 69 66  cookie in P3 dif
1a730 66 65 72 73 20 66 72 6f 6d 20 74 68 65 20 73 63  fers from the sc
1a740 68 65 6d 61 20 63 6f 6f 6b 69 65 20 69 6e 20 74  hema cookie in t
1a750 68 65 20 64 61 74 61 62 61 73 65 20 68 65 61 64  he database head
1a760 65 72 20 6f 72 0a 2a 2a 20 69 66 20 74 68 65 20  er or.** if the 
1a770 73 63 68 65 6d 61 20 67 65 6e 65 72 61 74 69 6f  schema generatio
1a780 6e 20 63 6f 75 6e 74 65 72 20 69 6e 20 50 34 20  n counter in P4 
1a790 64 69 66 66 65 72 73 20 66 72 6f 6d 20 74 68 65  differs from the
1a7a0 20 63 75 72 72 65 6e 74 0a 2a 2a 20 67 65 6e 65   current.** gene
1a7b0 72 61 74 69 6f 6e 20 63 6f 75 6e 74 65 72 2c 20  ration counter, 
1a7c0 74 68 65 6e 20 61 6e 20 53 51 4c 49 54 45 5f 53  then an SQLITE_S
1a7d0 43 48 45 4d 41 20 65 72 72 6f 72 20 69 73 20 72  CHEMA error is r
1a7e0 61 69 73 65 64 20 61 6e 64 20 65 78 65 63 75 74  aised and execut
1a7f0 69 6f 6e 0a 2a 2a 20 68 61 6c 74 73 2e 20 20 54  ion.** halts.  T
1a800 68 65 20 73 71 6c 69 74 65 33 5f 73 74 65 70 28  he sqlite3_step(
1a810 29 20 77 72 61 70 70 65 72 20 66 75 6e 63 74 69  ) wrapper functi
1a820 6f 6e 20 6d 69 67 68 74 20 74 68 65 6e 20 72 65  on might then re
1a830 70 72 65 70 61 72 65 20 74 68 65 0a 2a 2a 20 73  prepare the.** s
1a840 74 61 74 65 6d 65 6e 74 20 61 6e 64 20 72 65 72  tatement and rer
1a850 75 6e 20 69 74 20 66 72 6f 6d 20 74 68 65 20 62  un it from the b
1a860 65 67 69 6e 6e 69 6e 67 2e 0a 2a 2f 0a 63 61 73  eginning..*/.cas
1a870 65 20 4f 50 5f 54 72 61 6e 73 61 63 74 69 6f 6e  e OP_Transaction
1a880 3a 20 7b 0a 20 20 42 74 72 65 65 20 2a 70 42 74  : {.  Btree *pBt
1a890 3b 0a 20 20 69 6e 74 20 69 4d 65 74 61 3b 0a 20  ;.  int iMeta;. 
1a8a0 20 69 6e 74 20 69 47 65 6e 3b 0a 0a 20 20 61 73   int iGen;..  as
1a8b0 73 65 72 74 28 20 70 2d 3e 62 49 73 52 65 61 64  sert( p->bIsRead
1a8c0 65 72 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  er );.  assert( 
1a8d0 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30 20 7c  p->readOnly==0 |
1a8e0 7c 20 70 4f 70 2d 3e 70 32 3d 3d 30 20 29 3b 0a  | pOp->p2==0 );.
1a8f0 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
1a900 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c  1>=0 && pOp->p1<
1a910 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73  db->nDb );.  ass
1a920 65 72 74 28 20 44 62 4d 61 73 6b 54 65 73 74 28  ert( DbMaskTest(
1a930 70 2d 3e 62 74 72 65 65 4d 61 73 6b 2c 20 70 4f  p->btreeMask, pO
1a940 70 2d 3e 70 31 29 20 29 3b 0a 20 20 69 66 28 20  p->p1) );.  if( 
1a950 70 4f 70 2d 3e 70 32 20 26 26 20 28 64 62 2d 3e  pOp->p2 && (db->
1a960 66 6c 61 67 73 20 26 20 53 51 4c 49 54 45 5f 51  flags & SQLITE_Q
1a970 75 65 72 79 4f 6e 6c 79 29 21 3d 30 20 29 7b 0a  ueryOnly)!=0 ){.
1a980 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f      rc = SQLITE_
1a990 52 45 41 44 4f 4e 4c 59 3b 0a 20 20 20 20 67 6f  READONLY;.    go
1a9a0 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
1a9b0 65 72 72 6f 72 3b 0a 20 20 7d 0a 20 20 70 42 74  error;.  }.  pBt
1a9c0 20 3d 20 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e   = db->aDb[pOp->
1a9d0 70 31 5d 2e 70 42 74 3b 0a 0a 20 20 69 66 28 20  p1].pBt;..  if( 
1a9e0 70 42 74 20 29 7b 0a 20 20 20 20 72 63 20 3d 20  pBt ){.    rc = 
1a9f0 73 71 6c 69 74 65 33 42 74 72 65 65 42 65 67 69  sqlite3BtreeBegi
1aa00 6e 54 72 61 6e 73 28 70 42 74 2c 20 70 4f 70 2d  nTrans(pBt, pOp-
1aa10 3e 70 32 29 3b 0a 20 20 20 20 74 65 73 74 63 61  >p2);.    testca
1aa20 73 65 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 42  se( rc==SQLITE_B
1aa30 55 53 59 5f 53 4e 41 50 53 48 4f 54 20 29 3b 0a  USY_SNAPSHOT );.
1aa40 20 20 20 20 74 65 73 74 63 61 73 65 28 20 72 63      testcase( rc
1aa50 3d 3d 53 51 4c 49 54 45 5f 42 55 53 59 5f 52 45  ==SQLITE_BUSY_RE
1aa60 43 4f 56 45 52 59 20 29 3b 0a 20 20 20 20 69 66  COVERY );.    if
1aa70 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc!=SQLITE_OK 
1aa80 29 7b 0a 20 20 20 20 20 20 69 66 28 20 28 72 63  ){.      if( (rc
1aa90 26 30 78 66 66 29 3d 3d 53 51 4c 49 54 45 5f 42  &0xff)==SQLITE_B
1aaa0 55 53 59 20 29 7b 0a 20 20 20 20 20 20 20 20 70  USY ){.        p
1aab0 2d 3e 70 63 20 3d 20 28 69 6e 74 29 28 70 4f 70  ->pc = (int)(pOp
1aac0 20 2d 20 61 4f 70 29 3b 0a 20 20 20 20 20 20 20   - aOp);.       
1aad0 20 70 2d 3e 72 63 20 3d 20 72 63 3b 0a 20 20 20   p->rc = rc;.   
1aae0 20 20 20 20 20 67 6f 74 6f 20 76 64 62 65 5f 72       goto vdbe_r
1aaf0 65 74 75 72 6e 3b 0a 20 20 20 20 20 20 7d 0a 20  eturn;.      }. 
1ab00 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f       goto abort_
1ab10 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
1ab20 20 20 7d 0a 0a 20 20 20 20 69 66 28 20 70 4f 70    }..    if( pOp
1ab30 2d 3e 70 32 20 26 26 20 70 2d 3e 75 73 65 73 53  ->p2 && p->usesS
1ab40 74 6d 74 4a 6f 75 72 6e 61 6c 20 0a 20 20 20 20  tmtJournal .    
1ab50 20 26 26 20 28 64 62 2d 3e 61 75 74 6f 43 6f 6d   && (db->autoCom
1ab60 6d 69 74 3d 3d 30 20 7c 7c 20 64 62 2d 3e 6e 56  mit==0 || db->nV
1ab70 64 62 65 52 65 61 64 3e 31 29 20 0a 20 20 20 20  dbeRead>1) .    
1ab80 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  ){.      assert(
1ab90 20 73 71 6c 69 74 65 33 42 74 72 65 65 49 73 49   sqlite3BtreeIsI
1aba0 6e 54 72 61 6e 73 28 70 42 74 29 20 29 3b 0a 20  nTrans(pBt) );. 
1abb0 20 20 20 20 20 69 66 28 20 70 2d 3e 69 53 74 61       if( p->iSta
1abc0 74 65 6d 65 6e 74 3d 3d 30 20 29 7b 0a 20 20 20  tement==0 ){.   
1abd0 20 20 20 20 20 61 73 73 65 72 74 28 20 64 62 2d       assert( db-
1abe0 3e 6e 53 74 61 74 65 6d 65 6e 74 3e 3d 30 20 26  >nStatement>=0 &
1abf0 26 20 64 62 2d 3e 6e 53 61 76 65 70 6f 69 6e 74  & db->nSavepoint
1ac00 3e 3d 30 20 29 3b 0a 20 20 20 20 20 20 20 20 64  >=0 );.        d
1ac10 62 2d 3e 6e 53 74 61 74 65 6d 65 6e 74 2b 2b 3b  b->nStatement++;
1ac20 20 0a 20 20 20 20 20 20 20 20 70 2d 3e 69 53 74   .        p->iSt
1ac30 61 74 65 6d 65 6e 74 20 3d 20 64 62 2d 3e 6e 53  atement = db->nS
1ac40 61 76 65 70 6f 69 6e 74 20 2b 20 64 62 2d 3e 6e  avepoint + db->n
1ac50 53 74 61 74 65 6d 65 6e 74 3b 0a 20 20 20 20 20  Statement;.     
1ac60 20 7d 0a 0a 20 20 20 20 20 20 72 63 20 3d 20 73   }..      rc = s
1ac70 71 6c 69 74 65 33 56 74 61 62 53 61 76 65 70 6f  qlite3VtabSavepo
1ac80 69 6e 74 28 64 62 2c 20 53 41 56 45 50 4f 49 4e  int(db, SAVEPOIN
1ac90 54 5f 42 45 47 49 4e 2c 20 70 2d 3e 69 53 74 61  T_BEGIN, p->iSta
1aca0 74 65 6d 65 6e 74 2d 31 29 3b 0a 20 20 20 20 20  tement-1);.     
1acb0 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f   if( rc==SQLITE_
1acc0 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 72 63  OK ){.        rc
1acd0 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 42   = sqlite3BtreeB
1ace0 65 67 69 6e 53 74 6d 74 28 70 42 74 2c 20 70 2d  eginStmt(pBt, p-
1acf0 3e 69 53 74 61 74 65 6d 65 6e 74 29 3b 0a 20 20  >iStatement);.  
1ad00 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 2f 2a 20      }..      /* 
1ad10 53 74 6f 72 65 20 74 68 65 20 63 75 72 72 65 6e  Store the curren
1ad20 74 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 64  t value of the d
1ad30 61 74 61 62 61 73 65 20 68 61 6e 64 6c 65 73 20  atabase handles 
1ad40 64 65 66 65 72 72 65 64 20 63 6f 6e 73 74 72 61  deferred constra
1ad50 69 6e 74 0a 20 20 20 20 20 20 2a 2a 20 63 6f 75  int.      ** cou
1ad60 6e 74 65 72 2e 20 49 66 20 74 68 65 20 73 74 61  nter. If the sta
1ad70 74 65 6d 65 6e 74 20 74 72 61 6e 73 61 63 74 69  tement transacti
1ad80 6f 6e 20 6e 65 65 64 73 20 74 6f 20 62 65 20 72  on needs to be r
1ad90 6f 6c 6c 65 64 20 62 61 63 6b 2c 0a 20 20 20 20  olled back,.    
1ada0 20 20 2a 2a 20 74 68 65 20 76 61 6c 75 65 20 6f    ** the value o
1adb0 66 20 74 68 69 73 20 63 6f 75 6e 74 65 72 20 6e  f this counter n
1adc0 65 65 64 73 20 74 6f 20 62 65 20 72 65 73 74 6f  eeds to be resto
1add0 72 65 64 20 74 6f 6f 2e 20 20 2a 2f 0a 20 20 20  red too.  */.   
1ade0 20 20 20 70 2d 3e 6e 53 74 6d 74 44 65 66 43 6f     p->nStmtDefCo
1adf0 6e 73 20 3d 20 64 62 2d 3e 6e 44 65 66 65 72 72  ns = db->nDeferr
1ae00 65 64 43 6f 6e 73 3b 0a 20 20 20 20 20 20 70 2d  edCons;.      p-
1ae10 3e 6e 53 74 6d 74 44 65 66 49 6d 6d 43 6f 6e 73  >nStmtDefImmCons
1ae20 20 3d 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64   = db->nDeferred
1ae30 49 6d 6d 43 6f 6e 73 3b 0a 20 20 20 20 7d 0a 0a  ImmCons;.    }..
1ae40 20 20 20 20 2f 2a 20 47 61 74 68 65 72 20 74 68      /* Gather th
1ae50 65 20 73 63 68 65 6d 61 20 76 65 72 73 69 6f 6e  e schema version
1ae60 20 6e 75 6d 62 65 72 20 66 6f 72 20 63 68 65 63   number for chec
1ae70 6b 69 6e 67 3a 0a 20 20 20 20 2a 2a 20 49 4d 50  king:.    ** IMP
1ae80 4c 45 4d 45 4e 54 41 54 49 4f 4e 2d 4f 46 3a 20  LEMENTATION-OF: 
1ae90 52 2d 30 33 31 38 39 2d 35 31 31 33 35 20 41 73  R-03189-51135 As
1aea0 20 65 61 63 68 20 53 51 4c 20 73 74 61 74 65 6d   each SQL statem
1aeb0 65 6e 74 20 72 75 6e 73 2c 20 74 68 65 20 73 63  ent runs, the sc
1aec0 68 65 6d 61 0a 20 20 20 20 2a 2a 20 76 65 72 73  hema.    ** vers
1aed0 69 6f 6e 20 69 73 20 63 68 65 63 6b 65 64 20 74  ion is checked t
1aee0 6f 20 65 6e 73 75 72 65 20 74 68 61 74 20 74 68  o ensure that th
1aef0 65 20 73 63 68 65 6d 61 20 68 61 73 20 6e 6f 74  e schema has not
1af00 20 63 68 61 6e 67 65 64 20 73 69 6e 63 65 20 74   changed since t
1af10 68 65 0a 20 20 20 20 2a 2a 20 53 51 4c 20 73 74  he.    ** SQL st
1af20 61 74 65 6d 65 6e 74 20 77 61 73 20 70 72 65 70  atement was prep
1af30 61 72 65 64 2e 0a 20 20 20 20 2a 2f 0a 20 20 20  ared..    */.   
1af40 20 73 71 6c 69 74 65 33 42 74 72 65 65 47 65 74   sqlite3BtreeGet
1af50 4d 65 74 61 28 70 42 74 2c 20 42 54 52 45 45 5f  Meta(pBt, BTREE_
1af60 53 43 48 45 4d 41 5f 56 45 52 53 49 4f 4e 2c 20  SCHEMA_VERSION, 
1af70 28 75 33 32 20 2a 29 26 69 4d 65 74 61 29 3b 0a  (u32 *)&iMeta);.
1af80 20 20 20 20 69 47 65 6e 20 3d 20 64 62 2d 3e 61      iGen = db->a
1af90 44 62 5b 70 4f 70 2d 3e 70 31 5d 2e 70 53 63 68  Db[pOp->p1].pSch
1afa0 65 6d 61 2d 3e 69 47 65 6e 65 72 61 74 69 6f 6e  ema->iGeneration
1afb0 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 69  ;.  }else{.    i
1afc0 47 65 6e 20 3d 20 69 4d 65 74 61 20 3d 20 30 3b  Gen = iMeta = 0;
1afd0 0a 20 20 7d 0a 20 20 61 73 73 65 72 74 28 20 70  .  }.  assert( p
1afe0 4f 70 2d 3e 70 35 3d 3d 30 20 7c 7c 20 70 4f 70  Op->p5==0 || pOp
1aff0 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54  ->p4type==P4_INT
1b000 33 32 20 29 3b 0a 20 20 69 66 28 20 70 4f 70 2d  32 );.  if( pOp-
1b010 3e 70 35 20 26 26 20 28 69 4d 65 74 61 21 3d 70  >p5 && (iMeta!=p
1b020 4f 70 2d 3e 70 33 20 7c 7c 20 69 47 65 6e 21 3d  Op->p3 || iGen!=
1b030 70 4f 70 2d 3e 70 34 2e 69 29 20 29 7b 0a 20 20  pOp->p4.i) ){.  
1b040 20 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 28    sqlite3DbFree(
1b050 64 62 2c 20 70 2d 3e 7a 45 72 72 4d 73 67 29 3b  db, p->zErrMsg);
1b060 0a 20 20 20 20 70 2d 3e 7a 45 72 72 4d 73 67 20  .    p->zErrMsg 
1b070 3d 20 73 71 6c 69 74 65 33 44 62 53 74 72 44 75  = sqlite3DbStrDu
1b080 70 28 64 62 2c 20 22 64 61 74 61 62 61 73 65 20  p(db, "database 
1b090 73 63 68 65 6d 61 20 68 61 73 20 63 68 61 6e 67  schema has chang
1b0a0 65 64 22 29 3b 0a 20 20 20 20 2f 2a 20 49 66 20  ed");.    /* If 
1b0b0 74 68 65 20 73 63 68 65 6d 61 2d 63 6f 6f 6b 69  the schema-cooki
1b0c0 65 20 66 72 6f 6d 20 74 68 65 20 64 61 74 61 62  e from the datab
1b0d0 61 73 65 20 66 69 6c 65 20 6d 61 74 63 68 65 73  ase file matches
1b0e0 20 74 68 65 20 63 6f 6f 6b 69 65 20 0a 20 20 20   the cookie .   
1b0f0 20 2a 2a 20 73 74 6f 72 65 64 20 77 69 74 68 20   ** stored with 
1b100 74 68 65 20 69 6e 2d 6d 65 6d 6f 72 79 20 72 65  the in-memory re
1b110 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66 20  presentation of 
1b120 74 68 65 20 73 63 68 65 6d 61 2c 20 64 6f 0a 20  the schema, do. 
1b130 20 20 20 2a 2a 20 6e 6f 74 20 72 65 6c 6f 61 64     ** not reload
1b140 20 74 68 65 20 73 63 68 65 6d 61 20 66 72 6f 6d   the schema from
1b150 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69   the database fi
1b160 6c 65 2e 0a 20 20 20 20 2a 2a 0a 20 20 20 20 2a  le..    **.    *
1b170 2a 20 49 66 20 76 69 72 74 75 61 6c 2d 74 61 62  * If virtual-tab
1b180 6c 65 73 20 61 72 65 20 69 6e 20 75 73 65 2c 20  les are in use, 
1b190 74 68 69 73 20 69 73 20 6e 6f 74 20 6a 75 73 74  this is not just
1b1a0 20 61 6e 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e   an optimization
1b1b0 2e 0a 20 20 20 20 2a 2a 20 4f 66 74 65 6e 2c 20  ..    ** Often, 
1b1c0 76 2d 74 61 62 6c 65 73 20 73 74 6f 72 65 20 74  v-tables store t
1b1d0 68 65 69 72 20 64 61 74 61 20 69 6e 20 6f 74 68  heir data in oth
1b1e0 65 72 20 53 51 4c 69 74 65 20 74 61 62 6c 65 73  er SQLite tables
1b1f0 2c 20 77 68 69 63 68 0a 20 20 20 20 2a 2a 20 61  , which.    ** a
1b200 72 65 20 71 75 65 72 69 65 64 20 66 72 6f 6d 20  re queried from 
1b210 77 69 74 68 69 6e 20 78 4e 65 78 74 28 29 20 61  within xNext() a
1b220 6e 64 20 6f 74 68 65 72 20 76 2d 74 61 62 6c 65  nd other v-table
1b230 20 6d 65 74 68 6f 64 73 20 75 73 69 6e 67 0a 20   methods using. 
1b240 20 20 20 2a 2a 20 70 72 65 70 61 72 65 64 20 71     ** prepared q
1b250 75 65 72 69 65 73 2e 20 49 66 20 73 75 63 68 20  ueries. If such 
1b260 61 20 71 75 65 72 79 20 69 73 20 6f 75 74 2d 6f  a query is out-o
1b270 66 2d 64 61 74 65 2c 20 77 65 20 64 6f 20 6e 6f  f-date, we do no
1b280 74 20 77 61 6e 74 20 74 6f 0a 20 20 20 20 2a 2a  t want to.    **
1b290 20 64 69 73 63 61 72 64 20 74 68 65 20 64 61 74   discard the dat
1b2a0 61 62 61 73 65 20 73 63 68 65 6d 61 2c 20 61 73  abase schema, as
1b2b0 20 74 68 65 20 75 73 65 72 20 63 6f 64 65 20 69   the user code i
1b2c0 6d 70 6c 65 6d 65 6e 74 69 6e 67 20 74 68 65 0a  mplementing the.
1b2d0 20 20 20 20 2a 2a 20 76 2d 74 61 62 6c 65 20 77      ** v-table w
1b2e0 6f 75 6c 64 20 68 61 76 65 20 74 6f 20 62 65 20  ould have to be 
1b2f0 72 65 61 64 79 20 66 6f 72 20 74 68 65 20 73 71  ready for the sq
1b300 6c 69 74 65 33 5f 76 74 61 62 20 73 74 72 75 63  lite3_vtab struc
1b310 74 75 72 65 20 69 74 73 65 6c 66 0a 20 20 20 20  ture itself.    
1b320 2a 2a 20 74 6f 20 62 65 20 69 6e 76 61 6c 69 64  ** to be invalid
1b330 61 74 65 64 20 77 68 65 6e 65 76 65 72 20 73 71  ated whenever sq
1b340 6c 69 74 65 33 5f 73 74 65 70 28 29 20 69 73 20  lite3_step() is 
1b350 63 61 6c 6c 65 64 20 66 72 6f 6d 20 77 69 74 68  called from with
1b360 69 6e 20 0a 20 20 20 20 2a 2a 20 61 20 76 2d 74  in .    ** a v-t
1b370 61 62 6c 65 20 6d 65 74 68 6f 64 2e 0a 20 20 20  able method..   
1b380 20 2a 2f 0a 20 20 20 20 69 66 28 20 64 62 2d 3e   */.    if( db->
1b390 61 44 62 5b 70 4f 70 2d 3e 70 31 5d 2e 70 53 63  aDb[pOp->p1].pSc
1b3a0 68 65 6d 61 2d 3e 73 63 68 65 6d 61 5f 63 6f 6f  hema->schema_coo
1b3b0 6b 69 65 21 3d 69 4d 65 74 61 20 29 7b 0a 20 20  kie!=iMeta ){.  
1b3c0 20 20 20 20 73 71 6c 69 74 65 33 52 65 73 65 74      sqlite3Reset
1b3d0 4f 6e 65 53 63 68 65 6d 61 28 64 62 2c 20 70 4f  OneSchema(db, pO
1b3e0 70 2d 3e 70 31 29 3b 0a 20 20 20 20 7d 0a 20 20  p->p1);.    }.  
1b3f0 20 20 70 2d 3e 65 78 70 69 72 65 64 20 3d 20 31    p->expired = 1
1b400 3b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54  ;.    rc = SQLIT
1b410 45 5f 53 43 48 45 4d 41 3b 0a 20 20 7d 0a 20 20  E_SCHEMA;.  }.  
1b420 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62  if( rc ) goto ab
1b430 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
1b440 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
1b450 20 4f 70 63 6f 64 65 3a 20 52 65 61 64 43 6f 6f   Opcode: ReadCoo
1b460 6b 69 65 20 50 31 20 50 32 20 50 33 20 2a 20 2a  kie P1 P2 P3 * *
1b470 0a 2a 2a 0a 2a 2a 20 52 65 61 64 20 63 6f 6f 6b  .**.** Read cook
1b480 69 65 20 6e 75 6d 62 65 72 20 50 33 20 66 72 6f  ie number P3 fro
1b490 6d 20 64 61 74 61 62 61 73 65 20 50 31 20 61 6e  m database P1 an
1b4a0 64 20 77 72 69 74 65 20 69 74 20 69 6e 74 6f 20  d write it into 
1b4b0 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 20  register P2..** 
1b4c0 50 33 3d 3d 31 20 69 73 20 74 68 65 20 73 63 68  P3==1 is the sch
1b4d0 65 6d 61 20 76 65 72 73 69 6f 6e 2e 20 20 50 33  ema version.  P3
1b4e0 3d 3d 32 20 69 73 20 74 68 65 20 64 61 74 61 62  ==2 is the datab
1b4f0 61 73 65 20 66 6f 72 6d 61 74 2e 0a 2a 2a 20 50  ase format..** P
1b500 33 3d 3d 33 20 69 73 20 74 68 65 20 72 65 63 6f  3==3 is the reco
1b510 6d 6d 65 6e 64 65 64 20 70 61 67 65 72 20 63 61  mmended pager ca
1b520 63 68 65 20 73 69 7a 65 2c 20 61 6e 64 20 73 6f  che size, and so
1b530 20 66 6f 72 74 68 2e 20 20 50 31 3d 3d 30 20 69   forth.  P1==0 i
1b540 73 0a 2a 2a 20 74 68 65 20 6d 61 69 6e 20 64 61  s.** the main da
1b550 74 61 62 61 73 65 20 66 69 6c 65 20 61 6e 64 20  tabase file and 
1b560 50 31 3d 3d 31 20 69 73 20 74 68 65 20 64 61 74  P1==1 is the dat
1b570 61 62 61 73 65 20 66 69 6c 65 20 75 73 65 64 20  abase file used 
1b580 74 6f 20 73 74 6f 72 65 0a 2a 2a 20 74 65 6d 70  to store.** temp
1b590 6f 72 61 72 79 20 74 61 62 6c 65 73 2e 0a 2a 2a  orary tables..**
1b5a0 0a 2a 2a 20 54 68 65 72 65 20 6d 75 73 74 20 62  .** There must b
1b5b0 65 20 61 20 72 65 61 64 2d 6c 6f 63 6b 20 6f 6e  e a read-lock on
1b5c0 20 74 68 65 20 64 61 74 61 62 61 73 65 20 28 65   the database (e
1b5d0 69 74 68 65 72 20 61 20 74 72 61 6e 73 61 63 74  ither a transact
1b5e0 69 6f 6e 0a 2a 2a 20 6d 75 73 74 20 62 65 20 73  ion.** must be s
1b5f0 74 61 72 74 65 64 20 6f 72 20 74 68 65 72 65 20  tarted or there 
1b600 6d 75 73 74 20 62 65 20 61 6e 20 6f 70 65 6e 20  must be an open 
1b610 63 75 72 73 6f 72 29 20 62 65 66 6f 72 65 0a 2a  cursor) before.*
1b620 2a 20 65 78 65 63 75 74 69 6e 67 20 74 68 69 73  * executing this
1b630 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f   instruction..*/
1b640 0a 63 61 73 65 20 4f 50 5f 52 65 61 64 43 6f 6f  .case OP_ReadCoo
1b650 6b 69 65 3a 20 7b 20 20 20 20 20 20 20 20 20 20  kie: {          
1b660 20 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a       /* out2 */.
1b670 20 20 69 6e 74 20 69 4d 65 74 61 3b 0a 20 20 69    int iMeta;.  i
1b680 6e 74 20 69 44 62 3b 0a 20 20 69 6e 74 20 69 43  nt iDb;.  int iC
1b690 6f 6f 6b 69 65 3b 0a 0a 20 20 61 73 73 65 72 74  ookie;..  assert
1b6a0 28 20 70 2d 3e 62 49 73 52 65 61 64 65 72 20 29  ( p->bIsReader )
1b6b0 3b 0a 20 20 69 44 62 20 3d 20 70 4f 70 2d 3e 70  ;.  iDb = pOp->p
1b6c0 31 3b 0a 20 20 69 43 6f 6f 6b 69 65 20 3d 20 70  1;.  iCookie = p
1b6d0 4f 70 2d 3e 70 33 3b 0a 20 20 61 73 73 65 72 74  Op->p3;.  assert
1b6e0 28 20 70 4f 70 2d 3e 70 33 3c 53 51 4c 49 54 45  ( pOp->p3<SQLITE
1b6f0 5f 4e 5f 42 54 52 45 45 5f 4d 45 54 41 20 29 3b  _N_BTREE_META );
1b700 0a 20 20 61 73 73 65 72 74 28 20 69 44 62 3e 3d  .  assert( iDb>=
1b710 30 20 26 26 20 69 44 62 3c 64 62 2d 3e 6e 44 62  0 && iDb<db->nDb
1b720 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 64 62   );.  assert( db
1b730 2d 3e 61 44 62 5b 69 44 62 5d 2e 70 42 74 21 3d  ->aDb[iDb].pBt!=
1b740 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 44  0 );.  assert( D
1b750 62 4d 61 73 6b 54 65 73 74 28 70 2d 3e 62 74 72  bMaskTest(p->btr
1b760 65 65 4d 61 73 6b 2c 20 69 44 62 29 20 29 3b 0a  eeMask, iDb) );.
1b770 0a 20 20 73 71 6c 69 74 65 33 42 74 72 65 65 47  .  sqlite3BtreeG
1b780 65 74 4d 65 74 61 28 64 62 2d 3e 61 44 62 5b 69  etMeta(db->aDb[i
1b790 44 62 5d 2e 70 42 74 2c 20 69 43 6f 6f 6b 69 65  Db].pBt, iCookie
1b7a0 2c 20 28 75 33 32 20 2a 29 26 69 4d 65 74 61 29  , (u32 *)&iMeta)
1b7b0 3b 0a 20 20 70 4f 75 74 20 3d 20 6f 75 74 32 50  ;.  pOut = out2P
1b7c0 72 65 72 65 6c 65 61 73 65 28 70 2c 20 70 4f 70  rerelease(p, pOp
1b7d0 29 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d  );.  pOut->u.i =
1b7e0 20 69 4d 65 74 61 3b 0a 20 20 62 72 65 61 6b 3b   iMeta;.  break;
1b7f0 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53  .}../* Opcode: S
1b800 65 74 43 6f 6f 6b 69 65 20 50 31 20 50 32 20 50  etCookie P1 P2 P
1b810 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 57 72 69 74  3 * *.**.** Writ
1b820 65 20 74 68 65 20 69 6e 74 65 67 65 72 20 76 61  e the integer va
1b830 6c 75 65 20 50 33 20 69 6e 74 6f 20 63 6f 6f 6b  lue P3 into cook
1b840 69 65 20 6e 75 6d 62 65 72 20 50 32 20 6f 66 20  ie number P2 of 
1b850 64 61 74 61 62 61 73 65 20 50 31 2e 0a 2a 2a 20  database P1..** 
1b860 50 32 3d 3d 31 20 69 73 20 74 68 65 20 73 63 68  P2==1 is the sch
1b870 65 6d 61 20 76 65 72 73 69 6f 6e 2e 20 20 50 32  ema version.  P2
1b880 3d 3d 32 20 69 73 20 74 68 65 20 64 61 74 61 62  ==2 is the datab
1b890 61 73 65 20 66 6f 72 6d 61 74 2e 0a 2a 2a 20 50  ase format..** P
1b8a0 32 3d 3d 33 20 69 73 20 74 68 65 20 72 65 63 6f  2==3 is the reco
1b8b0 6d 6d 65 6e 64 65 64 20 70 61 67 65 72 20 63 61  mmended pager ca
1b8c0 63 68 65 20 0a 2a 2a 20 73 69 7a 65 2c 20 61 6e  che .** size, an
1b8d0 64 20 73 6f 20 66 6f 72 74 68 2e 20 20 50 31 3d  d so forth.  P1=
1b8e0 3d 30 20 69 73 20 74 68 65 20 6d 61 69 6e 20 64  =0 is the main d
1b8f0 61 74 61 62 61 73 65 20 66 69 6c 65 20 61 6e 64  atabase file and
1b900 20 50 31 3d 3d 31 20 69 73 20 74 68 65 20 0a 2a   P1==1 is the .*
1b910 2a 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  * database file 
1b920 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20 74 65  used to store te
1b930 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 73 2e 0a  mporary tables..
1b940 2a 2a 0a 2a 2a 20 41 20 74 72 61 6e 73 61 63 74  **.** A transact
1b950 69 6f 6e 20 6d 75 73 74 20 62 65 20 73 74 61 72  ion must be star
1b960 74 65 64 20 62 65 66 6f 72 65 20 65 78 65 63 75  ted before execu
1b970 74 69 6e 67 20 74 68 69 73 20 6f 70 63 6f 64 65  ting this opcode
1b980 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 65 74  ..*/.case OP_Set
1b990 43 6f 6f 6b 69 65 3a 20 7b 0a 20 20 44 62 20 2a  Cookie: {.  Db *
1b9a0 70 44 62 3b 0a 0a 20 20 73 71 6c 69 74 65 33 56  pDb;..  sqlite3V
1b9b0 64 62 65 49 6e 63 72 57 72 69 74 65 43 6f 75 6e  dbeIncrWriteCoun
1b9c0 74 65 72 28 70 2c 20 30 29 3b 0a 20 20 61 73 73  ter(p, 0);.  ass
1b9d0 65 72 74 28 20 70 4f 70 2d 3e 70 32 3c 53 51 4c  ert( pOp->p2<SQL
1b9e0 49 54 45 5f 4e 5f 42 54 52 45 45 5f 4d 45 54 41  ITE_N_BTREE_META
1b9f0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   );.  assert( pO
1ba00 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d  p->p1>=0 && pOp-
1ba10 3e 70 31 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20  >p1<db->nDb );. 
1ba20 20 61 73 73 65 72 74 28 20 44 62 4d 61 73 6b 54   assert( DbMaskT
1ba30 65 73 74 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b  est(p->btreeMask
1ba40 2c 20 70 4f 70 2d 3e 70 31 29 20 29 3b 0a 20 20  , pOp->p1) );.  
1ba50 61 73 73 65 72 74 28 20 70 2d 3e 72 65 61 64 4f  assert( p->readO
1ba60 6e 6c 79 3d 3d 30 20 29 3b 0a 20 20 70 44 62 20  nly==0 );.  pDb 
1ba70 3d 20 26 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e  = &db->aDb[pOp->
1ba80 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p1];.  assert( p
1ba90 44 62 2d 3e 70 42 74 21 3d 30 20 29 3b 0a 20 20  Db->pBt!=0 );.  
1baa0 61 73 73 65 72 74 28 20 73 71 6c 69 74 65 33 53  assert( sqlite3S
1bab0 63 68 65 6d 61 4d 75 74 65 78 48 65 6c 64 28 64  chemaMutexHeld(d
1bac0 62 2c 20 70 4f 70 2d 3e 70 31 2c 20 30 29 20 29  b, pOp->p1, 0) )
1bad0 3b 0a 20 20 2f 2a 20 53 65 65 20 6e 6f 74 65 20  ;.  /* See note 
1bae0 61 62 6f 75 74 20 69 6e 64 65 78 20 73 68 69 66  about index shif
1baf0 74 69 6e 67 20 6f 6e 20 4f 50 5f 52 65 61 64 43  ting on OP_ReadC
1bb00 6f 6f 6b 69 65 20 2a 2f 0a 20 20 72 63 20 3d 20  ookie */.  rc = 
1bb10 73 71 6c 69 74 65 33 42 74 72 65 65 55 70 64 61  sqlite3BtreeUpda
1bb20 74 65 4d 65 74 61 28 70 44 62 2d 3e 70 42 74 2c  teMeta(pDb->pBt,
1bb30 20 70 4f 70 2d 3e 70 32 2c 20 70 4f 70 2d 3e 70   pOp->p2, pOp->p
1bb40 33 29 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70  3);.  if( pOp->p
1bb50 32 3d 3d 42 54 52 45 45 5f 53 43 48 45 4d 41 5f  2==BTREE_SCHEMA_
1bb60 56 45 52 53 49 4f 4e 20 29 7b 0a 20 20 20 20 2f  VERSION ){.    /
1bb70 2a 20 57 68 65 6e 20 74 68 65 20 73 63 68 65 6d  * When the schem
1bb80 61 20 63 6f 6f 6b 69 65 20 63 68 61 6e 67 65 73  a cookie changes
1bb90 2c 20 72 65 63 6f 72 64 20 74 68 65 20 6e 65 77  , record the new
1bba0 20 63 6f 6f 6b 69 65 20 69 6e 74 65 72 6e 61 6c   cookie internal
1bbb0 6c 79 20 2a 2f 0a 20 20 20 20 70 44 62 2d 3e 70  ly */.    pDb->p
1bbc0 53 63 68 65 6d 61 2d 3e 73 63 68 65 6d 61 5f 63  Schema->schema_c
1bbd0 6f 6f 6b 69 65 20 3d 20 70 4f 70 2d 3e 70 33 3b  ookie = pOp->p3;
1bbe0 0a 20 20 20 20 64 62 2d 3e 6d 44 62 46 6c 61 67  .    db->mDbFlag
1bbf0 73 20 7c 3d 20 44 42 46 4c 41 47 5f 53 63 68 65  s |= DBFLAG_Sche
1bc00 6d 61 43 68 61 6e 67 65 3b 0a 20 20 7d 65 6c 73  maChange;.  }els
1bc10 65 20 69 66 28 20 70 4f 70 2d 3e 70 32 3d 3d 42  e if( pOp->p2==B
1bc20 54 52 45 45 5f 46 49 4c 45 5f 46 4f 52 4d 41 54  TREE_FILE_FORMAT
1bc30 20 29 7b 0a 20 20 20 20 2f 2a 20 52 65 63 6f 72   ){.    /* Recor
1bc40 64 20 63 68 61 6e 67 65 73 20 69 6e 20 74 68 65  d changes in the
1bc50 20 66 69 6c 65 20 66 6f 72 6d 61 74 20 2a 2f 0a   file format */.
1bc60 20 20 20 20 70 44 62 2d 3e 70 53 63 68 65 6d 61      pDb->pSchema
1bc70 2d 3e 66 69 6c 65 5f 66 6f 72 6d 61 74 20 3d 20  ->file_format = 
1bc80 70 4f 70 2d 3e 70 33 3b 0a 20 20 7d 0a 20 20 69  pOp->p3;.  }.  i
1bc90 66 28 20 70 4f 70 2d 3e 70 31 3d 3d 31 20 29 7b  f( pOp->p1==1 ){
1bca0 0a 20 20 20 20 2f 2a 20 49 6e 76 61 6c 69 64 61  .    /* Invalida
1bcb0 74 65 20 61 6c 6c 20 70 72 65 70 61 72 65 64 20  te all prepared 
1bcc0 73 74 61 74 65 6d 65 6e 74 73 20 77 68 65 6e 65  statements whene
1bcd0 76 65 72 20 74 68 65 20 54 45 4d 50 20 64 61 74  ver the TEMP dat
1bce0 61 62 61 73 65 0a 20 20 20 20 2a 2a 20 73 63 68  abase.    ** sch
1bcf0 65 6d 61 20 69 73 20 63 68 61 6e 67 65 64 2e 20  ema is changed. 
1bd00 20 54 69 63 6b 65 74 20 23 31 36 34 34 20 2a 2f   Ticket #1644 */
1bd10 0a 20 20 20 20 73 71 6c 69 74 65 33 45 78 70 69  .    sqlite3Expi
1bd20 72 65 50 72 65 70 61 72 65 64 53 74 61 74 65 6d  rePreparedStatem
1bd30 65 6e 74 73 28 64 62 29 3b 0a 20 20 20 20 70 2d  ents(db);.    p-
1bd40 3e 65 78 70 69 72 65 64 20 3d 20 30 3b 0a 20 20  >expired = 0;.  
1bd50 7d 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f 74  }.  if( rc ) got
1bd60 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
1bd70 72 72 6f 72 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  rror;.  break;.}
1bd80 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f 70 65  ../* Opcode: Ope
1bd90 6e 52 65 61 64 20 50 31 20 50 32 20 50 33 20 50  nRead P1 P2 P3 P
1bda0 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73  4 P5.** Synopsis
1bdb0 3a 20 72 6f 6f 74 3d 50 32 20 69 44 62 3d 50 33  : root=P2 iDb=P3
1bdc0 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e 20 61 20 72 65  .**.** Open a re
1bdd0 61 64 2d 6f 6e 6c 79 20 63 75 72 73 6f 72 20 66  ad-only cursor f
1bde0 6f 72 20 74 68 65 20 64 61 74 61 62 61 73 65 20  or the database 
1bdf0 74 61 62 6c 65 20 77 68 6f 73 65 20 72 6f 6f 74  table whose root
1be00 20 70 61 67 65 20 69 73 0a 2a 2a 20 50 32 20 69   page is.** P2 i
1be10 6e 20 61 20 64 61 74 61 62 61 73 65 20 66 69 6c  n a database fil
1be20 65 2e 20 20 54 68 65 20 64 61 74 61 62 61 73 65  e.  The database
1be30 20 66 69 6c 65 20 69 73 20 64 65 74 65 72 6d 69   file is determi
1be40 6e 65 64 20 62 79 20 50 33 2e 20 0a 2a 2a 20 50  ned by P3. .** P
1be50 33 3d 3d 30 20 6d 65 61 6e 73 20 74 68 65 20 6d  3==0 means the m
1be60 61 69 6e 20 64 61 74 61 62 61 73 65 2c 20 50 33  ain database, P3
1be70 3d 3d 31 20 6d 65 61 6e 73 20 74 68 65 20 64 61  ==1 means the da
1be80 74 61 62 61 73 65 20 75 73 65 64 20 66 6f 72 20  tabase used for 
1be90 0a 2a 2a 20 74 65 6d 70 6f 72 61 72 79 20 74 61  .** temporary ta
1bea0 62 6c 65 73 2c 20 61 6e 64 20 50 33 3e 31 20 6d  bles, and P3>1 m
1beb0 65 61 6e 73 20 75 73 65 64 20 74 68 65 20 63 6f  eans used the co
1bec0 72 72 65 73 70 6f 6e 64 69 6e 67 20 61 74 74 61  rresponding atta
1bed0 63 68 65 64 0a 2a 2a 20 64 61 74 61 62 61 73 65  ched.** database
1bee0 2e 20 20 47 69 76 65 20 74 68 65 20 6e 65 77 20  .  Give the new 
1bef0 63 75 72 73 6f 72 20 61 6e 20 69 64 65 6e 74 69  cursor an identi
1bf00 66 69 65 72 20 6f 66 20 50 31 2e 20 20 54 68 65  fier of P1.  The
1bf10 20 50 31 0a 2a 2a 20 76 61 6c 75 65 73 20 6e 65   P1.** values ne
1bf20 65 64 20 6e 6f 74 20 62 65 20 63 6f 6e 74 69 67  ed not be contig
1bf30 75 6f 75 73 20 62 75 74 20 61 6c 6c 20 50 31 20  uous but all P1 
1bf40 76 61 6c 75 65 73 20 73 68 6f 75 6c 64 20 62 65  values should be
1bf50 20 73 6d 61 6c 6c 20 69 6e 74 65 67 65 72 73 2e   small integers.
1bf60 0a 2a 2a 20 49 74 20 69 73 20 61 6e 20 65 72 72  .** It is an err
1bf70 6f 72 20 66 6f 72 20 50 31 20 74 6f 20 62 65 20  or for P1 to be 
1bf80 6e 65 67 61 74 69 76 65 2e 0a 2a 2a 0a 2a 2a 20  negative..**.** 
1bf90 49 66 20 50 35 21 3d 30 20 74 68 65 6e 20 75 73  If P5!=0 then us
1bfa0 65 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66  e the content of
1bfb0 20 72 65 67 69 73 74 65 72 20 50 32 20 61 73 20   register P2 as 
1bfc0 74 68 65 20 72 6f 6f 74 20 70 61 67 65 2c 20 6e  the root page, n
1bfd0 6f 74 0a 2a 2a 20 74 68 65 20 76 61 6c 75 65 20  ot.** the value 
1bfe0 6f 66 20 50 32 20 69 74 73 65 6c 66 2e 0a 2a 2a  of P2 itself..**
1bff0 0a 2a 2a 20 54 68 65 72 65 20 77 69 6c 6c 20 62  .** There will b
1c000 65 20 61 20 72 65 61 64 20 6c 6f 63 6b 20 6f 6e  e a read lock on
1c010 20 74 68 65 20 64 61 74 61 62 61 73 65 20 77 68   the database wh
1c020 65 6e 65 76 65 72 20 74 68 65 72 65 20 69 73 20  enever there is 
1c030 61 6e 0a 2a 2a 20 6f 70 65 6e 20 63 75 72 73 6f  an.** open curso
1c040 72 2e 20 20 49 66 20 74 68 65 20 64 61 74 61 62  r.  If the datab
1c050 61 73 65 20 77 61 73 20 75 6e 6c 6f 63 6b 65 64  ase was unlocked
1c060 20 70 72 69 6f 72 20 74 6f 20 74 68 69 73 20 69   prior to this i
1c070 6e 73 74 72 75 63 74 69 6f 6e 0a 2a 2a 20 74 68  nstruction.** th
1c080 65 6e 20 61 20 72 65 61 64 20 6c 6f 63 6b 20 69  en a read lock i
1c090 73 20 61 63 71 75 69 72 65 64 20 61 73 20 70 61  s acquired as pa
1c0a0 72 74 20 6f 66 20 74 68 69 73 20 69 6e 73 74 72  rt of this instr
1c0b0 75 63 74 69 6f 6e 2e 20 20 41 20 72 65 61 64 0a  uction.  A read.
1c0c0 2a 2a 20 6c 6f 63 6b 20 61 6c 6c 6f 77 73 20 6f  ** lock allows o
1c0d0 74 68 65 72 20 70 72 6f 63 65 73 73 65 73 20 74  ther processes t
1c0e0 6f 20 72 65 61 64 20 74 68 65 20 64 61 74 61 62  o read the datab
1c0f0 61 73 65 20 62 75 74 20 70 72 6f 68 69 62 69 74  ase but prohibit
1c100 73 0a 2a 2a 20 61 6e 79 20 6f 74 68 65 72 20 70  s.** any other p
1c110 72 6f 63 65 73 73 20 66 72 6f 6d 20 6d 6f 64 69  rocess from modi
1c120 66 79 69 6e 67 20 74 68 65 20 64 61 74 61 62 61  fying the databa
1c130 73 65 2e 20 20 54 68 65 20 72 65 61 64 20 6c 6f  se.  The read lo
1c140 63 6b 20 69 73 0a 2a 2a 20 72 65 6c 65 61 73 65  ck is.** release
1c150 64 20 77 68 65 6e 20 61 6c 6c 20 63 75 72 73 6f  d when all curso
1c160 72 73 20 61 72 65 20 63 6c 6f 73 65 64 2e 20 20  rs are closed.  
1c170 49 66 20 74 68 69 73 20 69 6e 73 74 72 75 63 74  If this instruct
1c180 69 6f 6e 20 61 74 74 65 6d 70 74 73 0a 2a 2a 20  ion attempts.** 
1c190 74 6f 20 67 65 74 20 61 20 72 65 61 64 20 6c 6f  to get a read lo
1c1a0 63 6b 20 62 75 74 20 66 61 69 6c 73 2c 20 74 68  ck but fails, th
1c1b0 65 20 73 63 72 69 70 74 20 74 65 72 6d 69 6e 61  e script termina
1c1c0 74 65 73 20 77 69 74 68 20 61 6e 0a 2a 2a 20 53  tes with an.** S
1c1d0 51 4c 49 54 45 5f 42 55 53 59 20 65 72 72 6f 72  QLITE_BUSY error
1c1e0 20 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65   code..**.** The
1c1f0 20 50 34 20 76 61 6c 75 65 20 6d 61 79 20 62 65   P4 value may be
1c200 20 65 69 74 68 65 72 20 61 6e 20 69 6e 74 65 67   either an integ
1c210 65 72 20 28 50 34 5f 49 4e 54 33 32 29 20 6f 72  er (P4_INT32) or
1c220 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 0a 2a 2a   a pointer to.**
1c230 20 61 20 4b 65 79 49 6e 66 6f 20 73 74 72 75 63   a KeyInfo struc
1c240 74 75 72 65 20 28 50 34 5f 4b 45 59 49 4e 46 4f  ture (P4_KEYINFO
1c250 29 2e 20 49 66 20 69 74 20 69 73 20 61 20 70 6f  ). If it is a po
1c260 69 6e 74 65 72 20 74 6f 20 61 20 4b 65 79 49 6e  inter to a KeyIn
1c270 66 6f 20 0a 2a 2a 20 73 74 72 75 63 74 75 72 65  fo .** structure
1c280 2c 20 74 68 65 6e 20 73 61 69 64 20 73 74 72 75  , then said stru
1c290 63 74 75 72 65 20 64 65 66 69 6e 65 73 20 74 68  cture defines th
1c2a0 65 20 63 6f 6e 74 65 6e 74 20 61 6e 64 20 63 6f  e content and co
1c2b0 6c 6c 61 74 69 6e 67 20 0a 2a 2a 20 73 65 71 75  llating .** sequ
1c2c0 65 6e 63 65 20 6f 66 20 74 68 65 20 69 6e 64 65  ence of the inde
1c2d0 78 20 62 65 69 6e 67 20 6f 70 65 6e 65 64 2e 20  x being opened. 
1c2e0 4f 74 68 65 72 77 69 73 65 2c 20 69 66 20 50 34  Otherwise, if P4
1c2f0 20 69 73 20 61 6e 20 69 6e 74 65 67 65 72 20 0a   is an integer .
1c300 2a 2a 20 76 61 6c 75 65 2c 20 69 74 20 69 73 20  ** value, it is 
1c310 73 65 74 20 74 6f 20 74 68 65 20 6e 75 6d 62 65  set to the numbe
1c320 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20  r of columns in 
1c330 74 68 65 20 74 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a  the table..**.**
1c340 20 53 65 65 20 61 6c 73 6f 3a 20 4f 70 65 6e 57   See also: OpenW
1c350 72 69 74 65 2c 20 52 65 6f 70 65 6e 49 64 78 0a  rite, ReopenIdx.
1c360 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65  */./* Opcode: Re
1c370 6f 70 65 6e 49 64 78 20 50 31 20 50 32 20 50 33  openIdx P1 P2 P3
1c380 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73   P4 P5.** Synops
1c390 69 73 3a 20 72 6f 6f 74 3d 50 32 20 69 44 62 3d  is: root=P2 iDb=
1c3a0 50 33 0a 2a 2a 0a 2a 2a 20 54 68 65 20 52 65 6f  P3.**.** The Reo
1c3b0 70 65 6e 49 64 78 20 6f 70 63 6f 64 65 20 77 6f  penIdx opcode wo
1c3c0 72 6b 73 20 65 78 61 63 74 6c 79 20 6c 69 6b 65  rks exactly like
1c3d0 20 52 65 61 64 4f 70 65 6e 20 65 78 63 65 70 74   ReadOpen except
1c3e0 20 74 68 61 74 20 69 74 20 66 69 72 73 74 0a 2a   that it first.*
1c3f0 2a 20 63 68 65 63 6b 73 20 74 6f 20 73 65 65 20  * checks to see 
1c400 69 66 20 74 68 65 20 63 75 72 73 6f 72 20 6f 6e  if the cursor on
1c410 20 50 31 20 69 73 20 61 6c 72 65 61 64 79 20 6f   P1 is already o
1c420 70 65 6e 20 77 69 74 68 20 61 20 72 6f 6f 74 20  pen with a root 
1c430 70 61 67 65 0a 2a 2a 20 6e 75 6d 62 65 72 20 6f  page.** number o
1c440 66 20 50 32 20 61 6e 64 20 69 66 20 69 74 20 69  f P2 and if it i
1c450 73 20 74 68 69 73 20 6f 70 63 6f 64 65 20 62 65  s this opcode be
1c460 63 6f 6d 65 73 20 61 20 6e 6f 2d 6f 70 2e 20 20  comes a no-op.  
1c470 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 0a  In other words,.
1c480 2a 2a 20 69 66 20 74 68 65 20 63 75 72 73 6f 72  ** if the cursor
1c490 20 69 73 20 61 6c 72 65 61 64 79 20 6f 70 65 6e   is already open
1c4a0 2c 20 64 6f 20 6e 6f 74 20 72 65 6f 70 65 6e 20  , do not reopen 
1c4b0 69 74 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 52 65  it..**.** The Re
1c4c0 6f 70 65 6e 49 64 78 20 6f 70 63 6f 64 65 20 6d  openIdx opcode m
1c4d0 61 79 20 6f 6e 6c 79 20 62 65 20 75 73 65 64 20  ay only be used 
1c4e0 77 69 74 68 20 50 35 3d 3d 30 20 61 6e 64 20 77  with P5==0 and w
1c4f0 69 74 68 20 50 34 20 62 65 69 6e 67 0a 2a 2a 20  ith P4 being.** 
1c500 61 20 50 34 5f 4b 45 59 49 4e 46 4f 20 6f 62 6a  a P4_KEYINFO obj
1c510 65 63 74 2e 20 20 46 75 72 74 68 65 72 6d 6f 72  ect.  Furthermor
1c520 65 2c 20 74 68 65 20 50 33 20 76 61 6c 75 65 20  e, the P3 value 
1c530 6d 75 73 74 20 62 65 20 74 68 65 20 73 61 6d 65  must be the same
1c540 20 61 73 0a 2a 2a 20 65 76 65 72 79 20 6f 74 68   as.** every oth
1c550 65 72 20 52 65 6f 70 65 6e 49 64 78 20 6f 72 20  er ReopenIdx or 
1c560 4f 70 65 6e 52 65 61 64 20 66 6f 72 20 74 68 65  OpenRead for the
1c570 20 73 61 6d 65 20 63 75 72 73 6f 72 20 6e 75 6d   same cursor num
1c580 62 65 72 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 74  ber..**.** See t
1c590 68 65 20 4f 70 65 6e 52 65 61 64 20 6f 70 63 6f  he OpenRead opco
1c5a0 64 65 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f 6e  de documentation
1c5b0 20 66 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c 20   for additional 
1c5c0 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a  information..*/.
1c5d0 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f 70 65 6e 57  /* Opcode: OpenW
1c5e0 72 69 74 65 20 50 31 20 50 32 20 50 33 20 50 34  rite P1 P2 P3 P4
1c5f0 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a   P5.** Synopsis:
1c600 20 72 6f 6f 74 3d 50 32 20 69 44 62 3d 50 33 0a   root=P2 iDb=P3.
1c610 2a 2a 0a 2a 2a 20 4f 70 65 6e 20 61 20 72 65 61  **.** Open a rea
1c620 64 2f 77 72 69 74 65 20 63 75 72 73 6f 72 20 6e  d/write cursor n
1c630 61 6d 65 64 20 50 31 20 6f 6e 20 74 68 65 20 74  amed P1 on the t
1c640 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 77 68  able or index wh
1c650 6f 73 65 20 72 6f 6f 74 0a 2a 2a 20 70 61 67 65  ose root.** page
1c660 20 69 73 20 50 32 2e 20 20 4f 72 20 69 66 20 50   is P2.  Or if P
1c670 35 21 3d 30 20 75 73 65 20 74 68 65 20 63 6f 6e  5!=0 use the con
1c680 74 65 6e 74 20 6f 66 20 72 65 67 69 73 74 65 72  tent of register
1c690 20 50 32 20 74 6f 20 66 69 6e 64 20 74 68 65 0a   P2 to find the.
1c6a0 2a 2a 20 72 6f 6f 74 20 70 61 67 65 2e 0a 2a 2a  ** root page..**
1c6b0 0a 2a 2a 20 54 68 65 20 50 34 20 76 61 6c 75 65  .** The P4 value
1c6c0 20 6d 61 79 20 62 65 20 65 69 74 68 65 72 20 61   may be either a
1c6d0 6e 20 69 6e 74 65 67 65 72 20 28 50 34 5f 49 4e  n integer (P4_IN
1c6e0 54 33 32 29 20 6f 72 20 61 20 70 6f 69 6e 74 65  T32) or a pointe
1c6f0 72 20 74 6f 0a 2a 2a 20 61 20 4b 65 79 49 6e 66  r to.** a KeyInf
1c700 6f 20 73 74 72 75 63 74 75 72 65 20 28 50 34 5f  o structure (P4_
1c710 4b 45 59 49 4e 46 4f 29 2e 20 49 66 20 69 74 20  KEYINFO). If it 
1c720 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20  is a pointer to 
1c730 61 20 4b 65 79 49 6e 66 6f 20 0a 2a 2a 20 73 74  a KeyInfo .** st
1c740 72 75 63 74 75 72 65 2c 20 74 68 65 6e 20 73 61  ructure, then sa
1c750 69 64 20 73 74 72 75 63 74 75 72 65 20 64 65 66  id structure def
1c760 69 6e 65 73 20 74 68 65 20 63 6f 6e 74 65 6e 74  ines the content
1c770 20 61 6e 64 20 63 6f 6c 6c 61 74 69 6e 67 20 0a   and collating .
1c780 2a 2a 20 73 65 71 75 65 6e 63 65 20 6f 66 20 74  ** sequence of t
1c790 68 65 20 69 6e 64 65 78 20 62 65 69 6e 67 20 6f  he index being o
1c7a0 70 65 6e 65 64 2e 20 4f 74 68 65 72 77 69 73 65  pened. Otherwise
1c7b0 2c 20 69 66 20 50 34 20 69 73 20 61 6e 20 69 6e  , if P4 is an in
1c7c0 74 65 67 65 72 20 0a 2a 2a 20 76 61 6c 75 65 2c  teger .** value,
1c7d0 20 69 74 20 69 73 20 73 65 74 20 74 6f 20 74 68   it is set to th
1c7e0 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75  e number of colu
1c7f0 6d 6e 73 20 69 6e 20 74 68 65 20 74 61 62 6c 65  mns in the table
1c800 2c 20 6f 72 20 74 6f 20 74 68 65 0a 2a 2a 20 6c  , or to the.** l
1c810 61 72 67 65 73 74 20 69 6e 64 65 78 20 6f 66 20  argest index of 
1c820 61 6e 79 20 63 6f 6c 75 6d 6e 20 6f 66 20 74 68  any column of th
1c830 65 20 74 61 62 6c 65 20 74 68 61 74 20 69 73 20  e table that is 
1c840 61 63 74 75 61 6c 6c 79 20 75 73 65 64 2e 0a 2a  actually used..*
1c850 2a 0a 2a 2a 20 54 68 69 73 20 69 6e 73 74 72 75  *.** This instru
1c860 63 74 69 6f 6e 20 77 6f 72 6b 73 20 6a 75 73 74  ction works just
1c870 20 6c 69 6b 65 20 4f 70 65 6e 52 65 61 64 20 65   like OpenRead e
1c880 78 63 65 70 74 20 74 68 61 74 20 69 74 20 6f 70  xcept that it op
1c890 65 6e 73 20 74 68 65 20 63 75 72 73 6f 72 0a 2a  ens the cursor.*
1c8a0 2a 20 69 6e 20 72 65 61 64 2f 77 72 69 74 65 20  * in read/write 
1c8b0 6d 6f 64 65 2e 20 20 46 6f 72 20 61 20 67 69 76  mode.  For a giv
1c8c0 65 6e 20 74 61 62 6c 65 2c 20 74 68 65 72 65 20  en table, there 
1c8d0 63 61 6e 20 62 65 20 6f 6e 65 20 6f 72 20 6d 6f  can be one or mo
1c8e0 72 65 20 72 65 61 64 2d 6f 6e 6c 79 0a 2a 2a 20  re read-only.** 
1c8f0 63 75 72 73 6f 72 73 20 6f 72 20 61 20 73 69 6e  cursors or a sin
1c900 67 6c 65 20 72 65 61 64 2f 77 72 69 74 65 20 63  gle read/write c
1c910 75 72 73 6f 72 20 62 75 74 20 6e 6f 74 20 62 6f  ursor but not bo
1c920 74 68 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c  th..**.** See al
1c930 73 6f 20 4f 70 65 6e 52 65 61 64 2e 0a 2a 2f 0a  so OpenRead..*/.
1c940 63 61 73 65 20 4f 50 5f 52 65 6f 70 65 6e 49 64  case OP_ReopenId
1c950 78 3a 20 7b 0a 20 20 69 6e 74 20 6e 46 69 65 6c  x: {.  int nFiel
1c960 64 3b 0a 20 20 4b 65 79 49 6e 66 6f 20 2a 70 4b  d;.  KeyInfo *pK
1c970 65 79 49 6e 66 6f 3b 0a 20 20 69 6e 74 20 70 32  eyInfo;.  int p2
1c980 3b 0a 20 20 69 6e 74 20 69 44 62 3b 0a 20 20 69  ;.  int iDb;.  i
1c990 6e 74 20 77 72 46 6c 61 67 3b 0a 20 20 42 74 72  nt wrFlag;.  Btr
1c9a0 65 65 20 2a 70 58 3b 0a 20 20 56 64 62 65 43 75  ee *pX;.  VdbeCu
1c9b0 72 73 6f 72 20 2a 70 43 75 72 3b 0a 20 20 44 62  rsor *pCur;.  Db
1c9c0 20 2a 70 44 62 3b 0a 0a 20 20 61 73 73 65 72 74   *pDb;..  assert
1c9d0 28 20 70 4f 70 2d 3e 70 35 3d 3d 30 20 7c 7c 20  ( pOp->p5==0 || 
1c9e0 70 4f 70 2d 3e 70 35 3d 3d 4f 50 46 4c 41 47 5f  pOp->p5==OPFLAG_
1c9f0 53 45 45 4b 45 51 20 29 3b 0a 20 20 61 73 73 65  SEEKEQ );.  asse
1ca00 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d  rt( pOp->p4type=
1ca10 3d 50 34 5f 4b 45 59 49 4e 46 4f 20 29 3b 0a 20  =P4_KEYINFO );. 
1ca20 20 70 43 75 72 20 3d 20 70 2d 3e 61 70 43 73 72   pCur = p->apCsr
1ca30 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 69 66 28  [pOp->p1];.  if(
1ca40 20 70 43 75 72 20 26 26 20 70 43 75 72 2d 3e 70   pCur && pCur->p
1ca50 67 6e 6f 52 6f 6f 74 3d 3d 28 75 33 32 29 70 4f  gnoRoot==(u32)pO
1ca60 70 2d 3e 70 32 20 29 7b 0a 20 20 20 20 61 73 73  p->p2 ){.    ass
1ca70 65 72 74 28 20 70 43 75 72 2d 3e 69 44 62 3d 3d  ert( pCur->iDb==
1ca80 70 4f 70 2d 3e 70 33 20 29 3b 20 20 20 20 20 20  pOp->p3 );      
1ca90 2f 2a 20 47 75 61 72 61 6e 74 65 65 64 20 62 79  /* Guaranteed by
1caa0 20 74 68 65 20 63 6f 64 65 20 67 65 6e 65 72 61   the code genera
1cab0 74 6f 72 20 2a 2f 0a 20 20 20 20 67 6f 74 6f 20  tor */.    goto 
1cac0 6f 70 65 6e 5f 63 75 72 73 6f 72 5f 73 65 74 5f  open_cursor_set_
1cad0 68 69 6e 74 73 3b 0a 20 20 7d 0a 20 20 2f 2a 20  hints;.  }.  /* 
1cae0 49 66 20 74 68 65 20 63 75 72 73 6f 72 20 69 73  If the cursor is
1caf0 20 6e 6f 74 20 63 75 72 72 65 6e 74 6c 79 20 6f   not currently o
1cb00 70 65 6e 20 6f 72 20 69 73 20 6f 70 65 6e 20 6f  pen or is open o
1cb10 6e 20 61 20 64 69 66 66 65 72 65 6e 74 0a 20 20  n a different.  
1cb20 2a 2a 20 69 6e 64 65 78 2c 20 74 68 65 6e 20 66  ** index, then f
1cb30 61 6c 6c 20 74 68 72 6f 75 67 68 20 69 6e 74 6f  all through into
1cb40 20 4f 50 5f 4f 70 65 6e 52 65 61 64 20 74 6f 20   OP_OpenRead to 
1cb50 66 6f 72 63 65 20 61 20 72 65 6f 70 65 6e 20 2a  force a reopen *
1cb60 2f 0a 63 61 73 65 20 4f 50 5f 4f 70 65 6e 52 65  /.case OP_OpenRe
1cb70 61 64 3a 0a 63 61 73 65 20 4f 50 5f 4f 70 65 6e  ad:.case OP_Open
1cb80 57 72 69 74 65 3a 0a 0a 20 20 61 73 73 65 72 74  Write:..  assert
1cb90 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f  ( pOp->opcode==O
1cba0 50 5f 4f 70 65 6e 57 72 69 74 65 20 7c 7c 20 70  P_OpenWrite || p
1cbb0 4f 70 2d 3e 70 35 3d 3d 30 20 7c 7c 20 70 4f 70  Op->p5==0 || pOp
1cbc0 2d 3e 70 35 3d 3d 4f 50 46 4c 41 47 5f 53 45 45  ->p5==OPFLAG_SEE
1cbd0 4b 45 51 20 29 3b 0a 20 20 61 73 73 65 72 74 28  KEQ );.  assert(
1cbe0 20 70 2d 3e 62 49 73 52 65 61 64 65 72 20 29 3b   p->bIsReader );
1cbf0 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
1cc00 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4f 70 65 6e 52  opcode==OP_OpenR
1cc10 65 61 64 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f  ead || pOp->opco
1cc20 64 65 3d 3d 4f 50 5f 52 65 6f 70 65 6e 49 64 78  de==OP_ReopenIdx
1cc30 0a 20 20 20 20 20 20 20 20 20 20 7c 7c 20 70 2d  .          || p-
1cc40 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a  >readOnly==0 );.
1cc50 0a 20 20 69 66 28 20 70 2d 3e 65 78 70 69 72 65  .  if( p->expire
1cc60 64 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 53 51  d ){.    rc = SQ
1cc70 4c 49 54 45 5f 41 42 4f 52 54 5f 52 4f 4c 4c 42  LITE_ABORT_ROLLB
1cc80 41 43 4b 3b 0a 20 20 20 20 67 6f 74 6f 20 61 62  ACK;.    goto ab
1cc90 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
1cca0 3b 0a 20 20 7d 0a 0a 20 20 6e 46 69 65 6c 64 20  ;.  }..  nField 
1ccb0 3d 20 30 3b 0a 20 20 70 4b 65 79 49 6e 66 6f 20  = 0;.  pKeyInfo 
1ccc0 3d 20 30 3b 0a 20 20 70 32 20 3d 20 70 4f 70 2d  = 0;.  p2 = pOp-
1ccd0 3e 70 32 3b 0a 20 20 69 44 62 20 3d 20 70 4f 70  >p2;.  iDb = pOp
1cce0 2d 3e 70 33 3b 0a 20 20 61 73 73 65 72 74 28 20  ->p3;.  assert( 
1ccf0 69 44 62 3e 3d 30 20 26 26 20 69 44 62 3c 64 62  iDb>=0 && iDb<db
1cd00 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73 65 72  ->nDb );.  asser
1cd10 74 28 20 44 62 4d 61 73 6b 54 65 73 74 28 70 2d  t( DbMaskTest(p-
1cd20 3e 62 74 72 65 65 4d 61 73 6b 2c 20 69 44 62 29  >btreeMask, iDb)
1cd30 20 29 3b 0a 20 20 70 44 62 20 3d 20 26 64 62 2d   );.  pDb = &db-
1cd40 3e 61 44 62 5b 69 44 62 5d 3b 0a 20 20 70 58 20  >aDb[iDb];.  pX 
1cd50 3d 20 70 44 62 2d 3e 70 42 74 3b 0a 20 20 61 73  = pDb->pBt;.  as
1cd60 73 65 72 74 28 20 70 58 21 3d 30 20 29 3b 0a 20  sert( pX!=0 );. 
1cd70 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65   if( pOp->opcode
1cd80 3d 3d 4f 50 5f 4f 70 65 6e 57 72 69 74 65 20 29  ==OP_OpenWrite )
1cd90 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 4f 50  {.    assert( OP
1cda0 46 4c 41 47 5f 46 4f 52 44 45 4c 45 54 45 3d 3d  FLAG_FORDELETE==
1cdb0 42 54 52 45 45 5f 46 4f 52 44 45 4c 45 54 45 20  BTREE_FORDELETE 
1cdc0 29 3b 0a 20 20 20 20 77 72 46 6c 61 67 20 3d 20  );.    wrFlag = 
1cdd0 42 54 52 45 45 5f 57 52 43 53 52 20 7c 20 28 70  BTREE_WRCSR | (p
1cde0 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f  Op->p5 & OPFLAG_
1cdf0 46 4f 52 44 45 4c 45 54 45 29 3b 0a 20 20 20 20  FORDELETE);.    
1ce00 61 73 73 65 72 74 28 20 73 71 6c 69 74 65 33 53  assert( sqlite3S
1ce10 63 68 65 6d 61 4d 75 74 65 78 48 65 6c 64 28 64  chemaMutexHeld(d
1ce20 62 2c 20 69 44 62 2c 20 30 29 20 29 3b 0a 20 20  b, iDb, 0) );.  
1ce30 20 20 69 66 28 20 70 44 62 2d 3e 70 53 63 68 65    if( pDb->pSche
1ce40 6d 61 2d 3e 66 69 6c 65 5f 66 6f 72 6d 61 74 20  ma->file_format 
1ce50 3c 20 70 2d 3e 6d 69 6e 57 72 69 74 65 46 69 6c  < p->minWriteFil
1ce60 65 46 6f 72 6d 61 74 20 29 7b 0a 20 20 20 20 20  eFormat ){.     
1ce70 20 70 2d 3e 6d 69 6e 57 72 69 74 65 46 69 6c 65   p->minWriteFile
1ce80 46 6f 72 6d 61 74 20 3d 20 70 44 62 2d 3e 70 53  Format = pDb->pS
1ce90 63 68 65 6d 61 2d 3e 66 69 6c 65 5f 66 6f 72 6d  chema->file_form
1cea0 61 74 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73  at;.    }.  }els
1ceb0 65 7b 0a 20 20 20 20 77 72 46 6c 61 67 20 3d 20  e{.    wrFlag = 
1cec0 30 3b 0a 20 20 7d 0a 20 20 69 66 28 20 70 4f 70  0;.  }.  if( pOp
1ced0 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 50 32  ->p5 & OPFLAG_P2
1cee0 49 53 52 45 47 20 29 7b 0a 20 20 20 20 61 73 73  ISREG ){.    ass
1cef0 65 72 74 28 20 70 32 3e 30 20 29 3b 0a 20 20 20  ert( p2>0 );.   
1cf00 20 61 73 73 65 72 74 28 20 70 32 3c 3d 28 70 2d   assert( p2<=(p-
1cf10 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75  >nMem+1 - p->nCu
1cf20 72 73 6f 72 29 20 29 3b 0a 20 20 20 20 70 49 6e  rsor) );.    pIn
1cf30 32 20 3d 20 26 61 4d 65 6d 5b 70 32 5d 3b 0a 20  2 = &aMem[p2];. 
1cf40 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73     assert( memIs
1cf50 56 61 6c 69 64 28 70 49 6e 32 29 20 29 3b 0a 20  Valid(pIn2) );. 
1cf60 20 20 20 61 73 73 65 72 74 28 20 28 70 49 6e 32     assert( (pIn2
1cf70 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e  ->flags & MEM_In
1cf80 74 29 21 3d 30 20 29 3b 0a 20 20 20 20 73 71 6c  t)!=0 );.    sql
1cf90 69 74 65 33 56 64 62 65 4d 65 6d 49 6e 74 65 67  ite3VdbeMemInteg
1cfa0 65 72 69 66 79 28 70 49 6e 32 29 3b 0a 20 20 20  erify(pIn2);.   
1cfb0 20 70 32 20 3d 20 28 69 6e 74 29 70 49 6e 32 2d   p2 = (int)pIn2-
1cfc0 3e 75 2e 69 3b 0a 20 20 20 20 2f 2a 20 54 68 65  >u.i;.    /* The
1cfd0 20 70 32 20 76 61 6c 75 65 20 61 6c 77 61 79 73   p2 value always
1cfe0 20 63 6f 6d 65 73 20 66 72 6f 6d 20 61 20 70 72   comes from a pr
1cff0 69 6f 72 20 4f 50 5f 43 72 65 61 74 65 42 74 72  ior OP_CreateBtr
1d000 65 65 20 6f 70 63 6f 64 65 20 61 6e 64 0a 20 20  ee opcode and.  
1d010 20 20 2a 2a 20 74 68 61 74 20 6f 70 63 6f 64 65    ** that opcode
1d020 20 77 69 6c 6c 20 61 6c 77 61 79 73 20 73 65 74   will always set
1d030 20 74 68 65 20 70 32 20 76 61 6c 75 65 20 74 6f   the p2 value to
1d040 20 32 20 6f 72 20 6d 6f 72 65 20 6f 72 20 65 6c   2 or more or el
1d050 73 65 20 66 61 69 6c 2e 0a 20 20 20 20 2a 2a 20  se fail..    ** 
1d060 49 66 20 74 68 65 72 65 20 77 65 72 65 20 61 20  If there were a 
1d070 66 61 69 6c 75 72 65 2c 20 74 68 65 20 70 72 65  failure, the pre
1d080 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74 20  pared statement 
1d090 77 6f 75 6c 64 20 68 61 76 65 20 68 61 6c 74 65  would have halte
1d0a0 64 0a 20 20 20 20 2a 2a 20 62 65 66 6f 72 65 20  d.    ** before 
1d0b0 72 65 61 63 68 69 6e 67 20 74 68 69 73 20 69 6e  reaching this in
1d0c0 73 74 72 75 63 74 69 6f 6e 2e 20 2a 2f 0a 20 20  struction. */.  
1d0d0 20 20 61 73 73 65 72 74 28 20 70 32 3e 3d 32 20    assert( p2>=2 
1d0e0 29 3b 0a 20 20 7d 0a 20 20 69 66 28 20 70 4f 70  );.  }.  if( pOp
1d0f0 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 4b 45 59  ->p4type==P4_KEY
1d100 49 4e 46 4f 20 29 7b 0a 20 20 20 20 70 4b 65 79  INFO ){.    pKey
1d110 49 6e 66 6f 20 3d 20 70 4f 70 2d 3e 70 34 2e 70  Info = pOp->p4.p
1d120 4b 65 79 49 6e 66 6f 3b 0a 20 20 20 20 61 73 73  KeyInfo;.    ass
1d130 65 72 74 28 20 70 4b 65 79 49 6e 66 6f 2d 3e 65  ert( pKeyInfo->e
1d140 6e 63 3d 3d 45 4e 43 28 64 62 29 20 29 3b 0a 20  nc==ENC(db) );. 
1d150 20 20 20 61 73 73 65 72 74 28 20 70 4b 65 79 49     assert( pKeyI
1d160 6e 66 6f 2d 3e 64 62 3d 3d 64 62 20 29 3b 0a 20  nfo->db==db );. 
1d170 20 20 20 6e 46 69 65 6c 64 20 3d 20 70 4b 65 79     nField = pKey
1d180 49 6e 66 6f 2d 3e 6e 41 6c 6c 46 69 65 6c 64 3b  Info->nAllField;
1d190 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 70 4f 70  .  }else if( pOp
1d1a0 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54  ->p4type==P4_INT
1d1b0 33 32 20 29 7b 0a 20 20 20 20 6e 46 69 65 6c 64  32 ){.    nField
1d1c0 20 3d 20 70 4f 70 2d 3e 70 34 2e 69 3b 0a 20 20   = pOp->p4.i;.  
1d1d0 7d 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  }.  assert( pOp-
1d1e0 3e 70 31 3e 3d 30 20 29 3b 0a 20 20 61 73 73 65  >p1>=0 );.  asse
1d1f0 72 74 28 20 6e 46 69 65 6c 64 3e 3d 30 20 29 3b  rt( nField>=0 );
1d200 0a 20 20 74 65 73 74 63 61 73 65 28 20 6e 46 69  .  testcase( nFi
1d210 65 6c 64 3d 3d 30 20 29 3b 20 20 2f 2a 20 54 61  eld==0 );  /* Ta
1d220 62 6c 65 20 77 69 74 68 20 49 4e 54 45 47 45 52  ble with INTEGER
1d230 20 50 52 49 4d 41 52 59 20 4b 45 59 20 61 6e 64   PRIMARY KEY and
1d240 20 6e 6f 74 68 69 6e 67 20 65 6c 73 65 20 2a 2f   nothing else */
1d250 0a 20 20 70 43 75 72 20 3d 20 61 6c 6c 6f 63 61  .  pCur = alloca
1d260 74 65 43 75 72 73 6f 72 28 70 2c 20 70 4f 70 2d  teCursor(p, pOp-
1d270 3e 70 31 2c 20 6e 46 69 65 6c 64 2c 20 69 44 62  >p1, nField, iDb
1d280 2c 20 43 55 52 54 59 50 45 5f 42 54 52 45 45 29  , CURTYPE_BTREE)
1d290 3b 0a 20 20 69 66 28 20 70 43 75 72 3d 3d 30 20  ;.  if( pCur==0 
1d2a0 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20  ) goto no_mem;. 
1d2b0 20 70 43 75 72 2d 3e 6e 75 6c 6c 52 6f 77 20 3d   pCur->nullRow =
1d2c0 20 31 3b 0a 20 20 70 43 75 72 2d 3e 69 73 4f 72   1;.  pCur->isOr
1d2d0 64 65 72 65 64 20 3d 20 31 3b 0a 20 20 70 43 75  dered = 1;.  pCu
1d2e0 72 2d 3e 70 67 6e 6f 52 6f 6f 74 20 3d 20 70 32  r->pgnoRoot = p2
1d2f0 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ;.#ifdef SQLITE_
1d300 44 45 42 55 47 0a 20 20 70 43 75 72 2d 3e 77 72  DEBUG.  pCur->wr
1d310 46 6c 61 67 20 3d 20 77 72 46 6c 61 67 3b 0a 23  Flag = wrFlag;.#
1d320 65 6e 64 69 66 0a 20 20 72 63 20 3d 20 73 71 6c  endif.  rc = sql
1d330 69 74 65 33 42 74 72 65 65 43 75 72 73 6f 72 28  ite3BtreeCursor(
1d340 70 58 2c 20 70 32 2c 20 77 72 46 6c 61 67 2c 20  pX, p2, wrFlag, 
1d350 70 4b 65 79 49 6e 66 6f 2c 20 70 43 75 72 2d 3e  pKeyInfo, pCur->
1d360 75 63 2e 70 43 75 72 73 6f 72 29 3b 0a 20 20 70  uc.pCursor);.  p
1d370 43 75 72 2d 3e 70 4b 65 79 49 6e 66 6f 20 3d 20  Cur->pKeyInfo = 
1d380 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 2f 2a 20 53  pKeyInfo;.  /* S
1d390 65 74 20 74 68 65 20 56 64 62 65 43 75 72 73 6f  et the VdbeCurso
1d3a0 72 2e 69 73 54 61 62 6c 65 20 76 61 72 69 61 62  r.isTable variab
1d3b0 6c 65 2e 20 50 72 65 76 69 6f 75 73 20 76 65 72  le. Previous ver
1d3c0 73 69 6f 6e 73 20 6f 66 0a 20 20 2a 2a 20 53 51  sions of.  ** SQ
1d3d0 4c 69 74 65 20 75 73 65 64 20 74 6f 20 63 68 65  Lite used to che
1d3e0 63 6b 20 69 66 20 74 68 65 20 72 6f 6f 74 2d 70  ck if the root-p
1d3f0 61 67 65 20 66 6c 61 67 73 20 77 65 72 65 20 73  age flags were s
1d400 61 6e 65 20 61 74 20 74 68 69 73 20 70 6f 69 6e  ane at this poin
1d410 74 0a 20 20 2a 2a 20 61 6e 64 20 72 65 70 6f 72  t.  ** and repor
1d420 74 20 64 61 74 61 62 61 73 65 20 63 6f 72 72 75  t database corru
1d430 70 74 69 6f 6e 20 69 66 20 74 68 65 79 20 77 65  ption if they we
1d440 72 65 20 6e 6f 74 2c 20 62 75 74 20 74 68 69 73  re not, but this
1d450 20 63 68 65 63 6b 20 68 61 73 0a 20 20 2a 2a 20   check has.  ** 
1d460 73 69 6e 63 65 20 6d 6f 76 65 64 20 69 6e 74 6f  since moved into
1d470 20 74 68 65 20 62 74 72 65 65 20 6c 61 79 65 72   the btree layer
1d480 2e 20 20 2a 2f 20 20 0a 20 20 70 43 75 72 2d 3e  .  */  .  pCur->
1d490 69 73 54 61 62 6c 65 20 3d 20 70 4f 70 2d 3e 70  isTable = pOp->p
1d4a0 34 74 79 70 65 21 3d 50 34 5f 4b 45 59 49 4e 46  4type!=P4_KEYINF
1d4b0 4f 3b 0a 0a 6f 70 65 6e 5f 63 75 72 73 6f 72 5f  O;..open_cursor_
1d4c0 73 65 74 5f 68 69 6e 74 73 3a 0a 20 20 61 73 73  set_hints:.  ass
1d4d0 65 72 74 28 20 4f 50 46 4c 41 47 5f 42 55 4c 4b  ert( OPFLAG_BULK
1d4e0 43 53 52 3d 3d 42 54 52 45 45 5f 42 55 4c 4b 4c  CSR==BTREE_BULKL
1d4f0 4f 41 44 20 29 3b 0a 20 20 61 73 73 65 72 74 28  OAD );.  assert(
1d500 20 4f 50 46 4c 41 47 5f 53 45 45 4b 45 51 3d 3d   OPFLAG_SEEKEQ==
1d510 42 54 52 45 45 5f 53 45 45 4b 5f 45 51 20 29 3b  BTREE_SEEK_EQ );
1d520 0a 20 20 74 65 73 74 63 61 73 65 28 20 70 4f 70  .  testcase( pOp
1d530 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 42 55  ->p5 & OPFLAG_BU
1d540 4c 4b 43 53 52 20 29 3b 0a 23 69 66 64 65 66 20  LKCSR );.#ifdef 
1d550 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 43 55  SQLITE_ENABLE_CU
1d560 52 53 4f 52 5f 48 49 4e 54 53 0a 20 20 74 65 73  RSOR_HINTS.  tes
1d570 74 63 61 73 65 28 20 70 4f 70 2d 3e 70 32 20 26  tcase( pOp->p2 &
1d580 20 4f 50 46 4c 41 47 5f 53 45 45 4b 45 51 20 29   OPFLAG_SEEKEQ )
1d590 3b 0a 23 65 6e 64 69 66 0a 20 20 73 71 6c 69 74  ;.#endif.  sqlit
1d5a0 65 33 42 74 72 65 65 43 75 72 73 6f 72 48 69 6e  e3BtreeCursorHin
1d5b0 74 46 6c 61 67 73 28 70 43 75 72 2d 3e 75 63 2e  tFlags(pCur->uc.
1d5c0 70 43 75 72 73 6f 72 2c 0a 20 20 20 20 20 20 20  pCursor,.       
1d5d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d5e0 20 20 20 20 20 20 20 20 28 70 4f 70 2d 3e 70 35          (pOp->p5
1d5f0 20 26 20 28 4f 50 46 4c 41 47 5f 42 55 4c 4b 43   & (OPFLAG_BULKC
1d600 53 52 7c 4f 50 46 4c 41 47 5f 53 45 45 4b 45 51  SR|OPFLAG_SEEKEQ
1d610 29 29 29 3b 0a 20 20 69 66 28 20 72 63 20 29 20  )));.  if( rc ) 
1d620 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
1d630 6f 5f 65 72 72 6f 72 3b 0a 20 20 62 72 65 61 6b  o_error;.  break
1d640 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
1d650 4f 70 65 6e 44 75 70 20 50 31 20 50 32 20 2a 20  OpenDup P1 P2 * 
1d660 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e 20 61  * *.**.** Open a
1d670 20 6e 65 77 20 63 75 72 73 6f 72 20 50 31 20 74   new cursor P1 t
1d680 68 61 74 20 70 6f 69 6e 74 73 20 74 6f 20 74 68  hat points to th
1d690 65 20 73 61 6d 65 20 65 70 68 65 6d 65 72 61 6c  e same ephemeral
1d6a0 20 74 61 62 6c 65 20 61 73 0a 2a 2a 20 63 75 72   table as.** cur
1d6b0 73 6f 72 20 50 32 2e 20 20 54 68 65 20 50 32 20  sor P2.  The P2 
1d6c0 63 75 72 73 6f 72 20 6d 75 73 74 20 68 61 76 65  cursor must have
1d6d0 20 62 65 65 6e 20 6f 70 65 6e 65 64 20 62 79 20   been opened by 
1d6e0 61 20 70 72 69 6f 72 20 4f 50 5f 4f 70 65 6e 45  a prior OP_OpenE
1d6f0 70 68 65 6d 65 72 61 6c 0a 2a 2a 20 6f 70 63 6f  phemeral.** opco
1d700 64 65 2e 20 20 4f 6e 6c 79 20 65 70 68 65 6d 65  de.  Only epheme
1d710 72 61 6c 20 63 75 72 73 6f 72 73 20 6d 61 79 20  ral cursors may 
1d720 62 65 20 64 75 70 6c 69 63 61 74 65 64 2e 0a 2a  be duplicated..*
1d730 2a 0a 2a 2a 20 44 75 70 6c 69 63 61 74 65 20 65  *.** Duplicate e
1d740 70 68 65 6d 65 72 61 6c 20 63 75 72 73 6f 72 73  phemeral cursors
1d750 20 61 72 65 20 75 73 65 64 20 66 6f 72 20 73 65   are used for se
1d760 6c 66 2d 6a 6f 69 6e 73 20 6f 66 20 6d 61 74 65  lf-joins of mate
1d770 72 69 61 6c 69 7a 65 64 20 76 69 65 77 73 2e 0a  rialized views..
1d780 2a 2f 0a 63 61 73 65 20 4f 50 5f 4f 70 65 6e 44  */.case OP_OpenD
1d790 75 70 3a 20 7b 0a 20 20 56 64 62 65 43 75 72 73  up: {.  VdbeCurs
1d7a0 6f 72 20 2a 70 4f 72 69 67 3b 20 20 20 20 2f 2a  or *pOrig;    /*
1d7b0 20 54 68 65 20 6f 72 69 67 69 6e 61 6c 20 63 75   The original cu
1d7c0 72 73 6f 72 20 74 6f 20 62 65 20 64 75 70 6c 69  rsor to be dupli
1d7d0 63 61 74 65 64 20 2a 2f 0a 20 20 56 64 62 65 43  cated */.  VdbeC
1d7e0 75 72 73 6f 72 20 2a 70 43 78 3b 20 20 20 20 20  ursor *pCx;     
1d7f0 20 2f 2a 20 54 68 65 20 6e 65 77 20 63 75 72 73   /* The new curs
1d800 6f 72 20 2a 2f 0a 0a 20 20 70 4f 72 69 67 20 3d  or */..  pOrig =
1d810 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70   p->apCsr[pOp->p
1d820 32 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f  2];.  assert( pO
1d830 72 69 67 2d 3e 70 42 74 78 21 3d 30 20 29 3b 20  rig->pBtx!=0 ); 
1d840 20 2f 2a 20 4f 6e 6c 79 20 65 70 68 65 6d 65 72   /* Only ephemer
1d850 61 6c 20 63 75 72 73 6f 72 73 20 63 61 6e 20 62  al cursors can b
1d860 65 20 64 75 70 6c 69 63 61 74 65 64 20 2a 2f 0a  e duplicated */.
1d870 0a 20 20 70 43 78 20 3d 20 61 6c 6c 6f 63 61 74  .  pCx = allocat
1d880 65 43 75 72 73 6f 72 28 70 2c 20 70 4f 70 2d 3e  eCursor(p, pOp->
1d890 70 31 2c 20 70 4f 72 69 67 2d 3e 6e 46 69 65 6c  p1, pOrig->nFiel
1d8a0 64 2c 20 2d 31 2c 20 43 55 52 54 59 50 45 5f 42  d, -1, CURTYPE_B
1d8b0 54 52 45 45 29 3b 0a 20 20 69 66 28 20 70 43 78  TREE);.  if( pCx
1d8c0 3d 3d 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65  ==0 ) goto no_me
1d8d0 6d 3b 0a 20 20 70 43 78 2d 3e 6e 75 6c 6c 52 6f  m;.  pCx->nullRo
1d8e0 77 20 3d 20 31 3b 0a 20 20 70 43 78 2d 3e 69 73  w = 1;.  pCx->is
1d8f0 45 70 68 65 6d 65 72 61 6c 20 3d 20 31 3b 0a 20  Ephemeral = 1;. 
1d900 20 70 43 78 2d 3e 70 4b 65 79 49 6e 66 6f 20 3d   pCx->pKeyInfo =
1d910 20 70 4f 72 69 67 2d 3e 70 4b 65 79 49 6e 66 6f   pOrig->pKeyInfo
1d920 3b 0a 20 20 70 43 78 2d 3e 69 73 54 61 62 6c 65  ;.  pCx->isTable
1d930 20 3d 20 70 4f 72 69 67 2d 3e 69 73 54 61 62 6c   = pOrig->isTabl
1d940 65 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65  e;.  rc = sqlite
1d950 33 42 74 72 65 65 43 75 72 73 6f 72 28 70 4f 72  3BtreeCursor(pOr
1d960 69 67 2d 3e 70 42 74 78 2c 20 4d 41 53 54 45 52  ig->pBtx, MASTER
1d970 5f 52 4f 4f 54 2c 20 42 54 52 45 45 5f 57 52 43  _ROOT, BTREE_WRC
1d980 53 52 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  SR,.            
1d990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70 43                pC
1d9a0 78 2d 3e 70 4b 65 79 49 6e 66 6f 2c 20 70 43 78  x->pKeyInfo, pCx
1d9b0 2d 3e 75 63 2e 70 43 75 72 73 6f 72 29 3b 0a 20  ->uc.pCursor);. 
1d9c0 20 2f 2a 20 54 68 65 20 73 71 6c 69 74 65 33 42   /* The sqlite3B
1d9d0 74 72 65 65 43 75 72 73 6f 72 28 29 20 72 6f 75  treeCursor() rou
1d9e0 74 69 6e 65 20 63 61 6e 20 6f 6e 6c 79 20 66 61  tine can only fa
1d9f0 69 6c 20 66 6f 72 20 74 68 65 20 66 69 72 73 74  il for the first
1da00 20 63 75 72 73 6f 72 0a 20 20 2a 2a 20 6f 70 65   cursor.  ** ope
1da10 6e 65 64 20 66 6f 72 20 61 20 64 61 74 61 62 61  ned for a databa
1da20 73 65 2e 20 20 53 69 6e 63 65 20 74 68 65 72 65  se.  Since there
1da30 20 69 73 20 61 6c 72 65 61 64 79 20 61 6e 20 6f   is already an o
1da40 70 65 6e 20 63 75 72 73 6f 72 20 77 68 65 6e 20  pen cursor when 
1da50 74 68 69 73 0a 20 20 2a 2a 20 6f 70 63 6f 64 65  this.  ** opcode
1da60 20 69 73 20 72 75 6e 2c 20 74 68 65 20 73 71 6c   is run, the sql
1da70 69 74 65 33 42 74 72 65 65 43 75 72 73 6f 72 28  ite3BtreeCursor(
1da80 29 20 63 61 6e 6e 6f 74 20 66 61 69 6c 20 2a 2f  ) cannot fail */
1da90 0a 20 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53  .  assert( rc==S
1daa0 51 4c 49 54 45 5f 4f 4b 20 29 3b 0a 20 20 62 72  QLITE_OK );.  br
1dab0 65 61 6b 3b 0a 7d 0a 0a 0a 2f 2a 20 4f 70 63 6f  eak;.}.../* Opco
1dac0 64 65 3a 20 4f 70 65 6e 45 70 68 65 6d 65 72 61  de: OpenEphemera
1dad0 6c 20 50 31 20 50 32 20 2a 20 50 34 20 50 35 0a  l P1 P2 * P4 P5.
1dae0 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6e 43 6f  ** Synopsis: nCo
1daf0 6c 75 6d 6e 3d 50 32 0a 2a 2a 0a 2a 2a 20 4f 70  lumn=P2.**.** Op
1db00 65 6e 20 61 20 6e 65 77 20 63 75 72 73 6f 72 20  en a new cursor 
1db10 50 31 20 74 6f 20 61 20 74 72 61 6e 73 69 65 6e  P1 to a transien
1db20 74 20 74 61 62 6c 65 2e 0a 2a 2a 20 54 68 65 20  t table..** The 
1db30 63 75 72 73 6f 72 20 69 73 20 61 6c 77 61 79 73  cursor is always
1db40 20 6f 70 65 6e 65 64 20 72 65 61 64 2f 77 72 69   opened read/wri
1db50 74 65 20 65 76 65 6e 20 69 66 20 0a 2a 2a 20 74  te even if .** t
1db60 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65  he main database
1db70 20 69 73 20 72 65 61 64 2d 6f 6e 6c 79 2e 20 20   is read-only.  
1db80 54 68 65 20 65 70 68 65 6d 65 72 61 6c 0a 2a 2a  The ephemeral.**
1db90 20 74 61 62 6c 65 20 69 73 20 64 65 6c 65 74 65   table is delete
1dba0 64 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20  d automatically 
1dbb0 77 68 65 6e 20 74 68 65 20 63 75 72 73 6f 72 20  when the cursor 
1dbc0 69 73 20 63 6c 6f 73 65 64 2e 0a 2a 2a 0a 2a 2a  is closed..**.**
1dbd0 20 50 32 20 69 73 20 74 68 65 20 6e 75 6d 62 65   P2 is the numbe
1dbe0 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20  r of columns in 
1dbf0 74 68 65 20 65 70 68 65 6d 65 72 61 6c 20 74 61  the ephemeral ta
1dc00 62 6c 65 2e 0a 2a 2a 20 54 68 65 20 63 75 72 73  ble..** The curs
1dc10 6f 72 20 70 6f 69 6e 74 73 20 74 6f 20 61 20 42  or points to a B
1dc20 54 72 65 65 20 74 61 62 6c 65 20 69 66 20 50 34  Tree table if P4
1dc30 3d 3d 30 20 61 6e 64 20 74 6f 20 61 20 42 54 72  ==0 and to a BTr
1dc40 65 65 20 69 6e 64 65 78 0a 2a 2a 20 69 66 20 50  ee index.** if P
1dc50 34 20 69 73 20 6e 6f 74 20 30 2e 20 20 49 66 20  4 is not 0.  If 
1dc60 50 34 20 69 73 20 6e 6f 74 20 4e 55 4c 4c 2c 20  P4 is not NULL, 
1dc70 69 74 20 70 6f 69 6e 74 73 20 74 6f 20 61 20 4b  it points to a K
1dc80 65 79 49 6e 66 6f 20 73 74 72 75 63 74 75 72 65  eyInfo structure
1dc90 0a 2a 2a 20 74 68 61 74 20 64 65 66 69 6e 65 73  .** that defines
1dca0 20 74 68 65 20 66 6f 72 6d 61 74 20 6f 66 20 6b   the format of k
1dcb0 65 79 73 20 69 6e 20 74 68 65 20 69 6e 64 65 78  eys in the index
1dcc0 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 35 20 70  ..**.** The P5 p
1dcd0 61 72 61 6d 65 74 65 72 20 63 61 6e 20 62 65 20  arameter can be 
1dce0 61 20 6d 61 73 6b 20 6f 66 20 74 68 65 20 42 54  a mask of the BT
1dcf0 52 45 45 5f 2a 20 66 6c 61 67 73 20 64 65 66 69  REE_* flags defi
1dd00 6e 65 64 0a 2a 2a 20 69 6e 20 62 74 72 65 65 2e  ned.** in btree.
1dd10 68 2e 20 20 54 68 65 73 65 20 66 6c 61 67 73 20  h.  These flags 
1dd20 63 6f 6e 74 72 6f 6c 20 61 73 70 65 63 74 73 20  control aspects 
1dd30 6f 66 20 74 68 65 20 6f 70 65 72 61 74 69 6f 6e  of the operation
1dd40 20 6f 66 0a 2a 2a 20 74 68 65 20 62 74 72 65 65   of.** the btree
1dd50 2e 20 20 54 68 65 20 42 54 52 45 45 5f 4f 4d 49  .  The BTREE_OMI
1dd60 54 5f 4a 4f 55 52 4e 41 4c 20 61 6e 64 20 42 54  T_JOURNAL and BT
1dd70 52 45 45 5f 53 49 4e 47 4c 45 20 66 6c 61 67 73  REE_SINGLE flags
1dd80 20 61 72 65 0a 2a 2a 20 61 64 64 65 64 20 61 75   are.** added au
1dd90 74 6f 6d 61 74 69 63 61 6c 6c 79 2e 0a 2a 2f 0a  tomatically..*/.
1dda0 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f 70 65 6e 41  /* Opcode: OpenA
1ddb0 75 74 6f 69 6e 64 65 78 20 50 31 20 50 32 20 2a  utoindex P1 P2 *
1ddc0 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69   P4 *.** Synopsi
1ddd0 73 3a 20 6e 43 6f 6c 75 6d 6e 3d 50 32 0a 2a 2a  s: nColumn=P2.**
1dde0 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20  .** This opcode 
1ddf0 77 6f 72 6b 73 20 74 68 65 20 73 61 6d 65 20 61  works the same a
1de00 73 20 4f 50 5f 4f 70 65 6e 45 70 68 65 6d 65 72  s OP_OpenEphemer
1de10 61 6c 2e 20 20 49 74 20 68 61 73 20 61 0a 2a 2a  al.  It has a.**
1de20 20 64 69 66 66 65 72 65 6e 74 20 6e 61 6d 65 20   different name 
1de30 74 6f 20 64 69 73 74 69 6e 67 75 69 73 68 20 69  to distinguish i
1de40 74 73 20 75 73 65 2e 20 20 54 61 62 6c 65 73 20  ts use.  Tables 
1de50 63 72 65 61 74 65 64 20 75 73 69 6e 67 0a 2a 2a  created using.**
1de60 20 62 79 20 74 68 69 73 20 6f 70 63 6f 64 65 20   by this opcode 
1de70 77 69 6c 6c 20 62 65 20 75 73 65 64 20 66 6f 72  will be used for
1de80 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 63   automatically c
1de90 72 65 61 74 65 64 20 74 72 61 6e 73 69 65 6e 74  reated transient
1dea0 0a 2a 2a 20 69 6e 64 69 63 65 73 20 69 6e 20 6a  .** indices in j
1deb0 6f 69 6e 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  oins..*/.case OP
1dec0 5f 4f 70 65 6e 41 75 74 6f 69 6e 64 65 78 3a 20  _OpenAutoindex: 
1ded0 0a 63 61 73 65 20 4f 50 5f 4f 70 65 6e 45 70 68  .case OP_OpenEph
1dee0 65 6d 65 72 61 6c 3a 20 7b 0a 20 20 56 64 62 65  emeral: {.  Vdbe
1def0 43 75 72 73 6f 72 20 2a 70 43 78 3b 0a 20 20 4b  Cursor *pCx;.  K
1df00 65 79 49 6e 66 6f 20 2a 70 4b 65 79 49 6e 66 6f  eyInfo *pKeyInfo
1df10 3b 0a 0a 20 20 73 74 61 74 69 63 20 63 6f 6e 73  ;..  static cons
1df20 74 20 69 6e 74 20 76 66 73 46 6c 61 67 73 20 3d  t int vfsFlags =
1df30 20 0a 20 20 20 20 20 20 53 51 4c 49 54 45 5f 4f   .      SQLITE_O
1df40 50 45 4e 5f 52 45 41 44 57 52 49 54 45 20 7c 0a  PEN_READWRITE |.
1df50 20 20 20 20 20 20 53 51 4c 49 54 45 5f 4f 50 45        SQLITE_OPE
1df60 4e 5f 43 52 45 41 54 45 20 7c 0a 20 20 20 20 20  N_CREATE |.     
1df70 20 53 51 4c 49 54 45 5f 4f 50 45 4e 5f 45 58 43   SQLITE_OPEN_EXC
1df80 4c 55 53 49 56 45 20 7c 0a 20 20 20 20 20 20 53  LUSIVE |.      S
1df90 51 4c 49 54 45 5f 4f 50 45 4e 5f 44 45 4c 45 54  QLITE_OPEN_DELET
1dfa0 45 4f 4e 43 4c 4f 53 45 20 7c 0a 20 20 20 20 20  EONCLOSE |.     
1dfb0 20 53 51 4c 49 54 45 5f 4f 50 45 4e 5f 54 52 41   SQLITE_OPEN_TRA
1dfc0 4e 53 49 45 4e 54 5f 44 42 3b 0a 20 20 61 73 73  NSIENT_DB;.  ass
1dfd0 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20  ert( pOp->p1>=0 
1dfe0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  );.  assert( pOp
1dff0 2d 3e 70 32 3e 3d 30 20 29 3b 0a 20 20 70 43 78  ->p2>=0 );.  pCx
1e000 20 3d 20 61 6c 6c 6f 63 61 74 65 43 75 72 73 6f   = allocateCurso
1e010 72 28 70 2c 20 70 4f 70 2d 3e 70 31 2c 20 70 4f  r(p, pOp->p1, pO
1e020 70 2d 3e 70 32 2c 20 2d 31 2c 20 43 55 52 54 59  p->p2, -1, CURTY
1e030 50 45 5f 42 54 52 45 45 29 3b 0a 20 20 69 66 28  PE_BTREE);.  if(
1e040 20 70 43 78 3d 3d 30 20 29 20 67 6f 74 6f 20 6e   pCx==0 ) goto n
1e050 6f 5f 6d 65 6d 3b 0a 20 20 70 43 78 2d 3e 6e 75  o_mem;.  pCx->nu
1e060 6c 6c 52 6f 77 20 3d 20 31 3b 0a 20 20 70 43 78  llRow = 1;.  pCx
1e070 2d 3e 69 73 45 70 68 65 6d 65 72 61 6c 20 3d 20  ->isEphemeral = 
1e080 31 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65  1;.  rc = sqlite
1e090 33 42 74 72 65 65 4f 70 65 6e 28 64 62 2d 3e 70  3BtreeOpen(db->p
1e0a0 56 66 73 2c 20 30 2c 20 64 62 2c 20 26 70 43 78  Vfs, 0, db, &pCx
1e0b0 2d 3e 70 42 74 78 2c 20 0a 20 20 20 20 20 20 20  ->pBtx, .       
1e0c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e0d0 20 42 54 52 45 45 5f 4f 4d 49 54 5f 4a 4f 55 52   BTREE_OMIT_JOUR
1e0e0 4e 41 4c 20 7c 20 42 54 52 45 45 5f 53 49 4e 47  NAL | BTREE_SING
1e0f0 4c 45 20 7c 20 70 4f 70 2d 3e 70 35 2c 20 76 66  LE | pOp->p5, vf
1e100 73 46 6c 61 67 73 29 3b 0a 20 20 69 66 28 20 72  sFlags);.  if( r
1e110 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a  c==SQLITE_OK ){.
1e120 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
1e130 42 74 72 65 65 42 65 67 69 6e 54 72 61 6e 73 28  BtreeBeginTrans(
1e140 70 43 78 2d 3e 70 42 74 78 2c 20 31 29 3b 0a 20  pCx->pBtx, 1);. 
1e150 20 7d 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c   }.  if( rc==SQL
1e160 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 2f 2a  ITE_OK ){.    /*
1e170 20 49 66 20 61 20 74 72 61 6e 73 69 65 6e 74 20   If a transient 
1e180 69 6e 64 65 78 20 69 73 20 72 65 71 75 69 72 65  index is require
1e190 64 2c 20 63 72 65 61 74 65 20 69 74 20 62 79 20  d, create it by 
1e1a0 63 61 6c 6c 69 6e 67 0a 20 20 20 20 2a 2a 20 73  calling.    ** s
1e1b0 71 6c 69 74 65 33 42 74 72 65 65 43 72 65 61 74  qlite3BtreeCreat
1e1c0 65 54 61 62 6c 65 28 29 20 77 69 74 68 20 74 68  eTable() with th
1e1d0 65 20 42 54 52 45 45 5f 42 4c 4f 42 4b 45 59 20  e BTREE_BLOBKEY 
1e1e0 66 6c 61 67 20 62 65 66 6f 72 65 0a 20 20 20 20  flag before.    
1e1f0 2a 2a 20 6f 70 65 6e 69 6e 67 20 69 74 2e 20 49  ** opening it. I
1e200 66 20 61 20 74 72 61 6e 73 69 65 6e 74 20 74 61  f a transient ta
1e210 62 6c 65 20 69 73 20 72 65 71 75 69 72 65 64 2c  ble is required,
1e220 20 6a 75 73 74 20 75 73 65 20 74 68 65 0a 20 20   just use the.  
1e230 20 20 2a 2a 20 61 75 74 6f 6d 61 74 69 63 61 6c    ** automatical
1e240 6c 79 20 63 72 65 61 74 65 64 20 74 61 62 6c 65  ly created table
1e250 20 77 69 74 68 20 72 6f 6f 74 2d 70 61 67 65 20   with root-page 
1e260 31 20 28 61 6e 20 42 4c 4f 42 5f 49 4e 54 4b 45  1 (an BLOB_INTKE
1e270 59 20 74 61 62 6c 65 29 2e 0a 20 20 20 20 2a 2f  Y table)..    */
1e280 0a 20 20 20 20 69 66 28 20 28 70 43 78 2d 3e 70  .    if( (pCx->p
1e290 4b 65 79 49 6e 66 6f 20 3d 20 70 4b 65 79 49 6e  KeyInfo = pKeyIn
1e2a0 66 6f 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 4b 65  fo = pOp->p4.pKe
1e2b0 79 49 6e 66 6f 29 21 3d 30 20 29 7b 0a 20 20 20  yInfo)!=0 ){.   
1e2c0 20 20 20 69 6e 74 20 70 67 6e 6f 3b 0a 20 20 20     int pgno;.   
1e2d0 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e     assert( pOp->
1e2e0 70 34 74 79 70 65 3d 3d 50 34 5f 4b 45 59 49 4e  p4type==P4_KEYIN
1e2f0 46 4f 20 29 3b 0a 20 20 20 20 20 20 72 63 20 3d  FO );.      rc =
1e300 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 72 65   sqlite3BtreeCre
1e310 61 74 65 54 61 62 6c 65 28 70 43 78 2d 3e 70 42  ateTable(pCx->pB
1e320 74 78 2c 20 26 70 67 6e 6f 2c 20 42 54 52 45 45  tx, &pgno, BTREE
1e330 5f 42 4c 4f 42 4b 45 59 20 7c 20 70 4f 70 2d 3e  _BLOBKEY | pOp->
1e340 70 35 29 3b 20 0a 20 20 20 20 20 20 69 66 28 20  p5); .      if( 
1e350 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b  rc==SQLITE_OK ){
1e360 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28  .        assert(
1e370 20 70 67 6e 6f 3d 3d 4d 41 53 54 45 52 5f 52 4f   pgno==MASTER_RO
1e380 4f 54 2b 31 20 29 3b 0a 20 20 20 20 20 20 20 20  OT+1 );.        
1e390 61 73 73 65 72 74 28 20 70 4b 65 79 49 6e 66 6f  assert( pKeyInfo
1e3a0 2d 3e 64 62 3d 3d 64 62 20 29 3b 0a 20 20 20 20  ->db==db );.    
1e3b0 20 20 20 20 61 73 73 65 72 74 28 20 70 4b 65 79      assert( pKey
1e3c0 49 6e 66 6f 2d 3e 65 6e 63 3d 3d 45 4e 43 28 64  Info->enc==ENC(d
1e3d0 62 29 20 29 3b 0a 20 20 20 20 20 20 20 20 72 63  b) );.        rc
1e3e0 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 43   = sqlite3BtreeC
1e3f0 75 72 73 6f 72 28 70 43 78 2d 3e 70 42 74 78 2c  ursor(pCx->pBtx,
1e400 20 70 67 6e 6f 2c 20 42 54 52 45 45 5f 57 52 43   pgno, BTREE_WRC
1e410 53 52 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  SR,.            
1e420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e430 20 20 20 20 70 4b 65 79 49 6e 66 6f 2c 20 70 43      pKeyInfo, pC
1e440 78 2d 3e 75 63 2e 70 43 75 72 73 6f 72 29 3b 0a  x->uc.pCursor);.
1e450 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 70 43        }.      pC
1e460 78 2d 3e 69 73 54 61 62 6c 65 20 3d 20 30 3b 0a  x->isTable = 0;.
1e470 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
1e480 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
1e490 65 65 43 75 72 73 6f 72 28 70 43 78 2d 3e 70 42  eeCursor(pCx->pB
1e4a0 74 78 2c 20 4d 41 53 54 45 52 5f 52 4f 4f 54 2c  tx, MASTER_ROOT,
1e4b0 20 42 54 52 45 45 5f 57 52 43 53 52 2c 0a 20 20   BTREE_WRCSR,.  
1e4c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e4d0 20 20 20 20 20 20 20 20 20 20 20 20 30 2c 20 70              0, p
1e4e0 43 78 2d 3e 75 63 2e 70 43 75 72 73 6f 72 29 3b  Cx->uc.pCursor);
1e4f0 0a 20 20 20 20 20 20 70 43 78 2d 3e 69 73 54 61  .      pCx->isTa
1e500 62 6c 65 20 3d 20 31 3b 0a 20 20 20 20 7d 0a 20  ble = 1;.    }. 
1e510 20 7d 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f   }.  if( rc ) go
1e520 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
1e530 65 72 72 6f 72 3b 0a 20 20 70 43 78 2d 3e 69 73  error;.  pCx->is
1e540 4f 72 64 65 72 65 64 20 3d 20 28 70 4f 70 2d 3e  Ordered = (pOp->
1e550 70 35 21 3d 42 54 52 45 45 5f 55 4e 4f 52 44 45  p5!=BTREE_UNORDE
1e560 52 45 44 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  RED);.  break;.}
1e570 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 6f 72  ../* Opcode: Sor
1e580 74 65 72 4f 70 65 6e 20 50 31 20 50 32 20 50 33  terOpen P1 P2 P3
1e590 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 69 73   P4 *.**.** This
1e5a0 20 6f 70 63 6f 64 65 20 77 6f 72 6b 73 20 6c 69   opcode works li
1e5b0 6b 65 20 4f 50 5f 4f 70 65 6e 45 70 68 65 6d 65  ke OP_OpenEpheme
1e5c0 72 61 6c 20 65 78 63 65 70 74 20 74 68 61 74 20  ral except that 
1e5d0 69 74 20 6f 70 65 6e 73 0a 2a 2a 20 61 20 74 72  it opens.** a tr
1e5e0 61 6e 73 69 65 6e 74 20 69 6e 64 65 78 20 74 68  ansient index th
1e5f0 61 74 20 69 73 20 73 70 65 63 69 66 69 63 61 6c  at is specifical
1e600 6c 79 20 64 65 73 69 67 6e 65 64 20 74 6f 20 73  ly designed to s
1e610 6f 72 74 20 6c 61 72 67 65 0a 2a 2a 20 74 61 62  ort large.** tab
1e620 6c 65 73 20 75 73 69 6e 67 20 61 6e 20 65 78 74  les using an ext
1e630 65 72 6e 61 6c 20 6d 65 72 67 65 2d 73 6f 72 74  ernal merge-sort
1e640 20 61 6c 67 6f 72 69 74 68 6d 2e 0a 2a 2a 0a 2a   algorithm..**.*
1e650 2a 20 49 66 20 61 72 67 75 6d 65 6e 74 20 50 33  * If argument P3
1e660 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68   is non-zero, th
1e670 65 6e 20 69 74 20 69 6e 64 69 63 61 74 65 73 20  en it indicates 
1e680 74 68 61 74 20 74 68 65 20 73 6f 72 74 65 72 20  that the sorter 
1e690 6d 61 79 0a 2a 2a 20 61 73 73 75 6d 65 20 74 68  may.** assume th
1e6a0 61 74 20 61 20 73 74 61 62 6c 65 20 73 6f 72 74  at a stable sort
1e6b0 20 63 6f 6e 73 69 64 65 72 69 6e 67 20 74 68 65   considering the
1e6c0 20 66 69 72 73 74 20 50 33 20 66 69 65 6c 64 73   first P3 fields
1e6d0 20 6f 66 20 65 61 63 68 0a 2a 2a 20 6b 65 79 20   of each.** key 
1e6e0 69 73 20 73 75 66 66 69 63 69 65 6e 74 20 74 6f  is sufficient to
1e6f0 20 70 72 6f 64 75 63 65 20 74 68 65 20 72 65 71   produce the req
1e700 75 69 72 65 64 20 72 65 73 75 6c 74 73 2e 0a 2a  uired results..*
1e710 2f 0a 63 61 73 65 20 4f 50 5f 53 6f 72 74 65 72  /.case OP_Sorter
1e720 4f 70 65 6e 3a 20 7b 0a 20 20 56 64 62 65 43 75  Open: {.  VdbeCu
1e730 72 73 6f 72 20 2a 70 43 78 3b 0a 0a 20 20 61 73  rsor *pCx;..  as
1e740 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30  sert( pOp->p1>=0
1e750 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   );.  assert( pO
1e760 70 2d 3e 70 32 3e 3d 30 20 29 3b 0a 20 20 70 43  p->p2>=0 );.  pC
1e770 78 20 3d 20 61 6c 6c 6f 63 61 74 65 43 75 72 73  x = allocateCurs
1e780 6f 72 28 70 2c 20 70 4f 70 2d 3e 70 31 2c 20 70  or(p, pOp->p1, p
1e790 4f 70 2d 3e 70 32 2c 20 2d 31 2c 20 43 55 52 54  Op->p2, -1, CURT
1e7a0 59 50 45 5f 53 4f 52 54 45 52 29 3b 0a 20 20 69  YPE_SORTER);.  i
1e7b0 66 28 20 70 43 78 3d 3d 30 20 29 20 67 6f 74 6f  f( pCx==0 ) goto
1e7c0 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 70 43 78 2d 3e   no_mem;.  pCx->
1e7d0 70 4b 65 79 49 6e 66 6f 20 3d 20 70 4f 70 2d 3e  pKeyInfo = pOp->
1e7e0 70 34 2e 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 61  p4.pKeyInfo;.  a
1e7f0 73 73 65 72 74 28 20 70 43 78 2d 3e 70 4b 65 79  ssert( pCx->pKey
1e800 49 6e 66 6f 2d 3e 64 62 3d 3d 64 62 20 29 3b 0a  Info->db==db );.
1e810 20 20 61 73 73 65 72 74 28 20 70 43 78 2d 3e 70    assert( pCx->p
1e820 4b 65 79 49 6e 66 6f 2d 3e 65 6e 63 3d 3d 45 4e  KeyInfo->enc==EN
1e830 43 28 64 62 29 20 29 3b 0a 20 20 72 63 20 3d 20  C(db) );.  rc = 
1e840 73 71 6c 69 74 65 33 56 64 62 65 53 6f 72 74 65  sqlite3VdbeSorte
1e850 72 49 6e 69 74 28 64 62 2c 20 70 4f 70 2d 3e 70  rInit(db, pOp->p
1e860 33 2c 20 70 43 78 29 3b 0a 20 20 69 66 28 20 72  3, pCx);.  if( r
1e870 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64  c ) goto abort_d
1e880 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 62  ue_to_error;.  b
1e890 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
1e8a0 64 65 3a 20 53 65 71 75 65 6e 63 65 54 65 73 74  de: SequenceTest
1e8b0 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20   P1 P2 * * *.** 
1e8c0 53 79 6e 6f 70 73 69 73 3a 20 69 66 28 20 63 75  Synopsis: if( cu
1e8d0 72 73 6f 72 5b 50 31 5d 2e 63 74 72 2b 2b 20 29  rsor[P1].ctr++ )
1e8e0 20 70 63 20 3d 20 50 32 0a 2a 2a 0a 2a 2a 20 50   pc = P2.**.** P
1e8f0 31 20 69 73 20 61 20 73 6f 72 74 65 72 20 63 75  1 is a sorter cu
1e900 72 73 6f 72 2e 20 49 66 20 74 68 65 20 73 65 71  rsor. If the seq
1e910 75 65 6e 63 65 20 63 6f 75 6e 74 65 72 20 69 73  uence counter is
1e920 20 63 75 72 72 65 6e 74 6c 79 20 7a 65 72 6f 2c   currently zero,
1e930 20 6a 75 6d 70 0a 2a 2a 20 74 6f 20 50 32 2e 20   jump.** to P2. 
1e940 52 65 67 61 72 64 6c 65 73 73 20 6f 66 20 77 68  Regardless of wh
1e950 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 74 68 65  ether or not the
1e960 20 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e 2c 20   jump is taken, 
1e970 69 6e 63 72 65 6d 65 6e 74 20 74 68 65 0a 2a 2a  increment the.**
1e980 20 74 68 65 20 73 65 71 75 65 6e 63 65 20 76 61   the sequence va
1e990 6c 75 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  lue..*/.case OP_
1e9a0 53 65 71 75 65 6e 63 65 54 65 73 74 3a 20 7b 0a  SequenceTest: {.
1e9b0 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43    VdbeCursor *pC
1e9c0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
1e9d0 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70  >p1>=0 && pOp->p
1e9e0 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a  1<p->nCursor );.
1e9f0 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b    pC = p->apCsr[
1ea00 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65  pOp->p1];.  asse
1ea10 72 74 28 20 69 73 53 6f 72 74 65 72 28 70 43 29  rt( isSorter(pC)
1ea20 20 29 3b 0a 20 20 69 66 28 20 28 70 43 2d 3e 73   );.  if( (pC->s
1ea30 65 71 43 6f 75 6e 74 2b 2b 29 3d 3d 30 20 29 7b  eqCount++)==0 ){
1ea40 0a 20 20 20 20 67 6f 74 6f 20 6a 75 6d 70 5f 74  .    goto jump_t
1ea50 6f 5f 70 32 3b 0a 20 20 7d 0a 20 20 62 72 65 61  o_p2;.  }.  brea
1ea60 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
1ea70 20 4f 70 65 6e 50 73 65 75 64 6f 20 50 31 20 50   OpenPseudo P1 P
1ea80 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f  2 P3 * *.** Syno
1ea90 70 73 69 73 3a 20 50 33 20 63 6f 6c 75 6d 6e 73  psis: P3 columns
1eaa0 20 69 6e 20 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20   in r[P2].**.** 
1eab0 4f 70 65 6e 20 61 20 6e 65 77 20 63 75 72 73 6f  Open a new curso
1eac0 72 20 74 68 61 74 20 70 6f 69 6e 74 73 20 74 6f  r that points to
1ead0 20 61 20 66 61 6b 65 20 74 61 62 6c 65 20 74 68   a fake table th
1eae0 61 74 20 63 6f 6e 74 61 69 6e 73 20 61 20 73 69  at contains a si
1eaf0 6e 67 6c 65 0a 2a 2a 20 72 6f 77 20 6f 66 20 64  ngle.** row of d
1eb00 61 74 61 2e 20 20 54 68 65 20 63 6f 6e 74 65 6e  ata.  The conten
1eb10 74 20 6f 66 20 74 68 61 74 20 6f 6e 65 20 72 6f  t of that one ro
1eb20 77 20 69 73 20 74 68 65 20 63 6f 6e 74 65 6e 74  w is the content
1eb30 20 6f 66 20 6d 65 6d 6f 72 79 0a 2a 2a 20 72 65   of memory.** re
1eb40 67 69 73 74 65 72 20 50 32 2e 20 20 49 6e 20 6f  gister P2.  In o
1eb50 74 68 65 72 20 77 6f 72 64 73 2c 20 63 75 72 73  ther words, curs
1eb60 6f 72 20 50 31 20 62 65 63 6f 6d 65 73 20 61 6e  or P1 becomes an
1eb70 20 61 6c 69 61 73 20 66 6f 72 20 74 68 65 20 0a   alias for the .
1eb80 2a 2a 20 4d 45 4d 5f 42 6c 6f 62 20 63 6f 6e 74  ** MEM_Blob cont
1eb90 65 6e 74 20 63 6f 6e 74 61 69 6e 65 64 20 69 6e  ent contained in
1eba0 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a   register P2..**
1ebb0 0a 2a 2a 20 41 20 70 73 65 75 64 6f 2d 74 61 62  .** A pseudo-tab
1ebc0 6c 65 20 63 72 65 61 74 65 64 20 62 79 20 74 68  le created by th
1ebd0 69 73 20 6f 70 63 6f 64 65 20 69 73 20 75 73 65  is opcode is use
1ebe0 64 20 74 6f 20 68 6f 6c 64 20 61 20 73 69 6e 67  d to hold a sing
1ebf0 6c 65 0a 2a 2a 20 72 6f 77 20 6f 75 74 70 75 74  le.** row output
1ec00 20 66 72 6f 6d 20 74 68 65 20 73 6f 72 74 65 72   from the sorter
1ec10 20 73 6f 20 74 68 61 74 20 74 68 65 20 72 6f 77   so that the row
1ec20 20 63 61 6e 20 62 65 20 64 65 63 6f 6d 70 6f 73   can be decompos
1ec30 65 64 20 69 6e 74 6f 0a 2a 2a 20 69 6e 64 69 76  ed into.** indiv
1ec40 69 64 75 61 6c 20 63 6f 6c 75 6d 6e 73 20 75 73  idual columns us
1ec50 69 6e 67 20 74 68 65 20 4f 50 5f 43 6f 6c 75 6d  ing the OP_Colum
1ec60 6e 20 6f 70 63 6f 64 65 2e 20 20 54 68 65 20 4f  n opcode.  The O
1ec70 50 5f 43 6f 6c 75 6d 6e 20 6f 70 63 6f 64 65 0a  P_Column opcode.
1ec80 2a 2a 20 69 73 20 74 68 65 20 6f 6e 6c 79 20 63  ** is the only c
1ec90 75 72 73 6f 72 20 6f 70 63 6f 64 65 20 74 68 61  ursor opcode tha
1eca0 74 20 77 6f 72 6b 73 20 77 69 74 68 20 61 20 70  t works with a p
1ecb0 73 65 75 64 6f 2d 74 61 62 6c 65 2e 0a 2a 2a 0a  seudo-table..**.
1ecc0 2a 2a 20 50 33 20 69 73 20 74 68 65 20 6e 75 6d  ** P3 is the num
1ecd0 62 65 72 20 6f 66 20 66 69 65 6c 64 73 20 69 6e  ber of fields in
1ece0 20 74 68 65 20 72 65 63 6f 72 64 73 20 74 68 61   the records tha
1ecf0 74 20 77 69 6c 6c 20 62 65 20 73 74 6f 72 65 64  t will be stored
1ed00 20 62 79 0a 2a 2a 20 74 68 65 20 70 73 65 75 64   by.** the pseud
1ed10 6f 2d 74 61 62 6c 65 2e 0a 2a 2f 0a 63 61 73 65  o-table..*/.case
1ed20 20 4f 50 5f 4f 70 65 6e 50 73 65 75 64 6f 3a 20   OP_OpenPseudo: 
1ed30 7b 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a  {.  VdbeCursor *
1ed40 70 43 78 3b 0a 0a 20 20 61 73 73 65 72 74 28 20  pCx;..  assert( 
1ed50 70 4f 70 2d 3e 70 31 3e 3d 30 20 29 3b 0a 20 20  pOp->p1>=0 );.  
1ed60 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e  assert( pOp->p3>
1ed70 3d 30 20 29 3b 0a 20 20 70 43 78 20 3d 20 61 6c  =0 );.  pCx = al
1ed80 6c 6f 63 61 74 65 43 75 72 73 6f 72 28 70 2c 20  locateCursor(p, 
1ed90 70 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70 33  pOp->p1, pOp->p3
1eda0 2c 20 2d 31 2c 20 43 55 52 54 59 50 45 5f 50 53  , -1, CURTYPE_PS
1edb0 45 55 44 4f 29 3b 0a 20 20 69 66 28 20 70 43 78  EUDO);.  if( pCx
1edc0 3d 3d 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65  ==0 ) goto no_me
1edd0 6d 3b 0a 20 20 70 43 78 2d 3e 6e 75 6c 6c 52 6f  m;.  pCx->nullRo
1ede0 77 20 3d 20 31 3b 0a 20 20 70 43 78 2d 3e 73 65  w = 1;.  pCx->se
1edf0 65 6b 52 65 73 75 6c 74 20 3d 20 70 4f 70 2d 3e  ekResult = pOp->
1ee00 70 32 3b 0a 20 20 70 43 78 2d 3e 69 73 54 61 62  p2;.  pCx->isTab
1ee10 6c 65 20 3d 20 31 3b 0a 20 20 2f 2a 20 47 69 76  le = 1;.  /* Giv
1ee20 65 20 74 68 69 73 20 70 73 65 75 64 6f 2d 63 75  e this pseudo-cu
1ee30 72 73 6f 72 20 61 20 66 61 6b 65 20 42 74 43 75  rsor a fake BtCu
1ee40 72 73 6f 72 20 70 6f 69 6e 74 65 72 20 73 6f 20  rsor pointer so 
1ee50 74 68 61 74 20 70 43 78 0a 20 20 2a 2a 20 63 61  that pCx.  ** ca
1ee60 6e 20 62 65 20 73 61 66 65 6c 79 20 70 61 73 73  n be safely pass
1ee70 65 64 20 74 6f 20 73 71 6c 69 74 65 33 56 64 62  ed to sqlite3Vdb
1ee80 65 43 75 72 73 6f 72 4d 6f 76 65 74 6f 28 29 2e  eCursorMoveto().
1ee90 20 20 54 68 69 73 20 61 76 6f 69 64 73 20 61 20    This avoids a 
1eea0 74 65 73 74 0a 20 20 2a 2a 20 66 6f 72 20 70 43  test.  ** for pC
1eeb0 78 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43 55 52  x->eCurType==CUR
1eec0 54 59 50 45 5f 42 54 52 45 45 20 69 6e 73 69 64  TYPE_BTREE insid
1eed0 65 20 6f 66 20 73 71 6c 69 74 65 33 56 64 62 65  e of sqlite3Vdbe
1eee0 43 75 72 73 6f 72 4d 6f 76 65 74 6f 28 29 0a 20  CursorMoveto(). 
1eef0 20 2a 2a 20 77 68 69 63 68 20 69 73 20 61 20 70   ** which is a p
1ef00 65 72 66 6f 72 6d 61 6e 63 65 20 6f 70 74 69 6d  erformance optim
1ef10 69 7a 61 74 69 6f 6e 20 2a 2f 0a 20 20 70 43 78  ization */.  pCx
1ef20 2d 3e 75 63 2e 70 43 75 72 73 6f 72 20 3d 20 73  ->uc.pCursor = s
1ef30 71 6c 69 74 65 33 42 74 72 65 65 46 61 6b 65 56  qlite3BtreeFakeV
1ef40 61 6c 69 64 43 75 72 73 6f 72 28 29 3b 0a 20 20  alidCursor();.  
1ef50 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 35 3d  assert( pOp->p5=
1ef60 3d 30 20 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  =0 );.  break;.}
1ef70 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6c 6f  ../* Opcode: Clo
1ef80 73 65 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a  se P1 * * * *.**
1ef90 0a 2a 2a 20 43 6c 6f 73 65 20 61 20 63 75 72 73  .** Close a curs
1efa0 6f 72 20 70 72 65 76 69 6f 75 73 6c 79 20 6f 70  or previously op
1efb0 65 6e 65 64 20 61 73 20 50 31 2e 20 20 49 66 20  ened as P1.  If 
1efc0 50 31 20 69 73 20 6e 6f 74 0a 2a 2a 20 63 75 72  P1 is not.** cur
1efd0 72 65 6e 74 6c 79 20 6f 70 65 6e 2c 20 74 68 69  rently open, thi
1efe0 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 69 73  s instruction is
1eff0 20 61 20 6e 6f 2d 6f 70 2e 0a 2a 2f 0a 63 61 73   a no-op..*/.cas
1f000 65 20 4f 50 5f 43 6c 6f 73 65 3a 20 7b 0a 20 20  e OP_Close: {.  
1f010 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
1f020 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d  =0 && pOp->p1<p-
1f030 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 73 71  >nCursor );.  sq
1f040 6c 69 74 65 33 56 64 62 65 46 72 65 65 43 75 72  lite3VdbeFreeCur
1f050 73 6f 72 28 70 2c 20 70 2d 3e 61 70 43 73 72 5b  sor(p, p->apCsr[
1f060 70 4f 70 2d 3e 70 31 5d 29 3b 0a 20 20 70 2d 3e  pOp->p1]);.  p->
1f070 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 20 3d  apCsr[pOp->p1] =
1f080 20 30 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a   0;.  break;.}..
1f090 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e  #ifdef SQLITE_EN
1f0a0 41 42 4c 45 5f 43 4f 4c 55 4d 4e 5f 55 53 45 44  ABLE_COLUMN_USED
1f0b0 5f 4d 41 53 4b 0a 2f 2a 20 4f 70 63 6f 64 65 3a  _MASK./* Opcode:
1f0c0 20 43 6f 6c 75 6d 6e 73 55 73 65 64 20 50 31 20   ColumnsUsed P1 
1f0d0 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 54  * * P4 *.**.** T
1f0e0 68 69 73 20 6f 70 63 6f 64 65 20 28 77 68 69 63  his opcode (whic
1f0f0 68 20 6f 6e 6c 79 20 65 78 69 73 74 73 20 69 66  h only exists if
1f100 20 53 51 4c 69 74 65 20 77 61 73 20 63 6f 6d 70   SQLite was comp
1f110 69 6c 65 64 20 77 69 74 68 0a 2a 2a 20 53 51 4c  iled with.** SQL
1f120 49 54 45 5f 45 4e 41 42 4c 45 5f 43 4f 4c 55 4d  ITE_ENABLE_COLUM
1f130 4e 5f 55 53 45 44 5f 4d 41 53 4b 29 20 69 64 65  N_USED_MASK) ide
1f140 6e 74 69 66 69 65 73 20 77 68 69 63 68 20 63 6f  ntifies which co
1f150 6c 75 6d 6e 73 20 6f 66 20 74 68 65 0a 2a 2a 20  lumns of the.** 
1f160 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 66  table or index f
1f170 6f 72 20 63 75 72 73 6f 72 20 50 31 20 61 72 65  or cursor P1 are
1f180 20 75 73 65 64 2e 20 20 50 34 20 69 73 20 61 20   used.  P4 is a 
1f190 36 34 2d 62 69 74 20 69 6e 74 65 67 65 72 0a 2a  64-bit integer.*
1f1a0 2a 20 28 50 34 5f 49 4e 54 36 34 29 20 69 6e 20  * (P4_INT64) in 
1f1b0 77 68 69 63 68 20 74 68 65 20 66 69 72 73 74 20  which the first 
1f1c0 36 33 20 62 69 74 73 20 61 72 65 20 6f 6e 65 20  63 bits are one 
1f1d0 66 6f 72 20 65 61 63 68 20 6f 66 20 74 68 65 0a  for each of the.
1f1e0 2a 2a 20 66 69 72 73 74 20 36 33 20 63 6f 6c 75  ** first 63 colu
1f1f0 6d 6e 73 20 6f 66 20 74 68 65 20 74 61 62 6c 65  mns of the table
1f200 20 6f 72 20 69 6e 64 65 78 20 74 68 61 74 20 61   or index that a
1f210 72 65 20 61 63 74 75 61 6c 6c 79 20 75 73 65 64  re actually used
1f220 0a 2a 2a 20 62 79 20 74 68 65 20 63 75 72 73 6f  .** by the curso
1f230 72 2e 20 20 54 68 65 20 68 69 67 68 2d 6f 72 64  r.  The high-ord
1f240 65 72 20 62 69 74 20 69 73 20 73 65 74 20 69 66  er bit is set if
1f250 20 61 6e 79 20 63 6f 6c 75 6d 6e 20 61 66 74 65   any column afte
1f260 72 0a 2a 2a 20 74 68 65 20 36 34 74 68 20 69 73  r.** the 64th is
1f270 20 75 73 65 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f   used..*/.case O
1f280 50 5f 43 6f 6c 75 6d 6e 73 55 73 65 64 3a 20 7b  P_ColumnsUsed: {
1f290 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70  .  VdbeCursor *p
1f2a0 43 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43  C;.  pC = p->apC
1f2b0 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  sr[pOp->p1];.  a
1f2c0 73 73 65 72 74 28 20 70 43 2d 3e 65 43 75 72 54  ssert( pC->eCurT
1f2d0 79 70 65 3d 3d 43 55 52 54 59 50 45 5f 42 54 52  ype==CURTYPE_BTR
1f2e0 45 45 20 29 3b 0a 20 20 70 43 2d 3e 6d 61 73 6b  EE );.  pC->mask
1f2f0 55 73 65 64 20 3d 20 2a 28 75 36 34 2a 29 70 4f  Used = *(u64*)pO
1f300 70 2d 3e 70 34 2e 70 49 36 34 3b 0a 20 20 62 72  p->p4.pI64;.  br
1f310 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 2f  eak;.}.#endif../
1f320 2a 20 4f 70 63 6f 64 65 3a 20 53 65 65 6b 47 45  * Opcode: SeekGE
1f330 20 50 31 20 50 32 20 50 33 20 50 34 20 2a 0a 2a   P1 P2 P3 P4 *.*
1f340 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d  * Synopsis: key=
1f350 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 49  r[P3@P4].**.** I
1f360 66 20 63 75 72 73 6f 72 20 50 31 20 72 65 66 65  f cursor P1 refe
1f370 72 73 20 74 6f 20 61 6e 20 53 51 4c 20 74 61 62  rs to an SQL tab
1f380 6c 65 20 28 42 2d 54 72 65 65 20 74 68 61 74 20  le (B-Tree that 
1f390 75 73 65 73 20 69 6e 74 65 67 65 72 20 6b 65 79  uses integer key
1f3a0 73 29 2c 20 0a 2a 2a 20 75 73 65 20 74 68 65 20  s), .** use the 
1f3b0 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65  value in registe
1f3c0 72 20 50 33 20 61 73 20 74 68 65 20 6b 65 79 2e  r P3 as the key.
1f3d0 20 20 49 66 20 63 75 72 73 6f 72 20 50 31 20 72    If cursor P1 r
1f3e0 65 66 65 72 73 20 0a 2a 2a 20 74 6f 20 61 6e 20  efers .** to an 
1f3f0 53 51 4c 20 69 6e 64 65 78 2c 20 74 68 65 6e 20  SQL index, then 
1f400 50 33 20 69 73 20 74 68 65 20 66 69 72 73 74 20  P3 is the first 
1f410 69 6e 20 61 6e 20 61 72 72 61 79 20 6f 66 20 50  in an array of P
1f420 34 20 72 65 67 69 73 74 65 72 73 20 0a 2a 2a 20  4 registers .** 
1f430 74 68 61 74 20 61 72 65 20 75 73 65 64 20 61 73  that are used as
1f440 20 61 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e 64   an unpacked ind
1f450 65 78 20 6b 65 79 2e 20 0a 2a 2a 0a 2a 2a 20 52  ex key. .**.** R
1f460 65 70 6f 73 69 74 69 6f 6e 20 63 75 72 73 6f 72  eposition cursor
1f470 20 50 31 20 73 6f 20 74 68 61 74 20 20 69 74 20   P1 so that  it 
1f480 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 20 73 6d  points to the sm
1f490 61 6c 6c 65 73 74 20 65 6e 74 72 79 20 74 68 61  allest entry tha
1f4a0 74 20 0a 2a 2a 20 69 73 20 67 72 65 61 74 65 72  t .** is greater
1f4b0 20 74 68 61 6e 20 6f 72 20 65 71 75 61 6c 20 74   than or equal t
1f4c0 6f 20 74 68 65 20 6b 65 79 20 76 61 6c 75 65 2e  o the key value.
1f4d0 20 49 66 20 74 68 65 72 65 20 61 72 65 20 6e 6f   If there are no
1f4e0 20 72 65 63 6f 72 64 73 20 0a 2a 2a 20 67 72 65   records .** gre
1f4f0 61 74 65 72 20 74 68 61 6e 20 6f 72 20 65 71 75  ater than or equ
1f500 61 6c 20 74 6f 20 74 68 65 20 6b 65 79 20 61 6e  al to the key an
1f510 64 20 50 32 20 69 73 20 6e 6f 74 20 7a 65 72 6f  d P2 is not zero
1f520 2c 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20 50  , then jump to P
1f530 32 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20  2..**.** If the 
1f540 63 75 72 73 6f 72 20 50 31 20 77 61 73 20 6f 70  cursor P1 was op
1f550 65 6e 65 64 20 75 73 69 6e 67 20 74 68 65 20 4f  ened using the O
1f560 50 46 4c 41 47 5f 53 45 45 4b 45 51 20 66 6c 61  PFLAG_SEEKEQ fla
1f570 67 2c 20 74 68 65 6e 20 74 68 69 73 0a 2a 2a 20  g, then this.** 
1f580 6f 70 63 6f 64 65 20 77 69 6c 6c 20 61 6c 77 61  opcode will alwa
1f590 79 73 20 6c 61 6e 64 20 6f 6e 20 61 20 72 65 63  ys land on a rec
1f5a0 6f 72 64 20 74 68 61 74 20 65 71 75 61 6c 6c 79  ord that equally
1f5b0 20 65 71 75 61 6c 73 20 74 68 65 20 6b 65 79 2c   equals the key,
1f5c0 20 6f 72 0a 2a 2a 20 65 6c 73 65 20 6a 75 6d 70   or.** else jump
1f5d0 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f 20   immediately to 
1f5e0 50 32 2e 20 20 57 68 65 6e 20 74 68 65 20 63 75  P2.  When the cu
1f5f0 72 73 6f 72 20 69 73 20 4f 50 46 4c 41 47 5f 53  rsor is OPFLAG_S
1f600 45 45 4b 45 51 2c 20 74 68 69 73 0a 2a 2a 20 6f  EEKEQ, this.** o
1f610 70 63 6f 64 65 20 6d 75 73 74 20 62 65 20 66 6f  pcode must be fo
1f620 6c 6c 6f 77 65 64 20 62 79 20 61 6e 20 49 64 78  llowed by an Idx
1f630 4c 45 20 6f 70 63 6f 64 65 20 77 69 74 68 20 74  LE opcode with t
1f640 68 65 20 73 61 6d 65 20 61 72 67 75 6d 65 6e 74  he same argument
1f650 73 2e 0a 2a 2a 20 54 68 65 20 49 64 78 4c 45 20  s..** The IdxLE 
1f660 6f 70 63 6f 64 65 20 77 69 6c 6c 20 62 65 20 73  opcode will be s
1f670 6b 69 70 70 65 64 20 69 66 20 74 68 69 73 20 6f  kipped if this o
1f680 70 63 6f 64 65 20 73 75 63 63 65 65 64 73 2c 20  pcode succeeds, 
1f690 62 75 74 20 74 68 65 0a 2a 2a 20 49 64 78 4c 45  but the.** IdxLE
1f6a0 20 6f 70 63 6f 64 65 20 77 69 6c 6c 20 62 65 20   opcode will be 
1f6b0 75 73 65 64 20 6f 6e 20 73 75 62 73 65 71 75 65  used on subseque
1f6c0 6e 74 20 6c 6f 6f 70 20 69 74 65 72 61 74 69 6f  nt loop iteratio
1f6d0 6e 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f  ns..**.** This o
1f6e0 70 63 6f 64 65 20 6c 65 61 76 65 73 20 74 68 65  pcode leaves the
1f6f0 20 63 75 72 73 6f 72 20 63 6f 6e 66 69 67 75 72   cursor configur
1f700 65 64 20 74 6f 20 6d 6f 76 65 20 69 6e 20 66 6f  ed to move in fo
1f710 72 77 61 72 64 20 6f 72 64 65 72 2c 0a 2a 2a 20  rward order,.** 
1f720 66 72 6f 6d 20 74 68 65 20 62 65 67 69 6e 6e 69  from the beginni
1f730 6e 67 20 74 6f 77 61 72 64 20 74 68 65 20 65 6e  ng toward the en
1f740 64 2e 20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72  d.  In other wor
1f750 64 73 2c 20 74 68 65 20 63 75 72 73 6f 72 20 69  ds, the cursor i
1f760 73 0a 2a 2a 20 63 6f 6e 66 69 67 75 72 65 64 20  s.** configured 
1f770 74 6f 20 75 73 65 20 4e 65 78 74 2c 20 6e 6f 74  to use Next, not
1f780 20 50 72 65 76 2e 0a 2a 2a 0a 2a 2a 20 53 65 65   Prev..**.** See
1f790 20 61 6c 73 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f   also: Found, No
1f7a0 74 46 6f 75 6e 64 2c 20 53 65 65 6b 4c 74 2c 20  tFound, SeekLt, 
1f7b0 53 65 65 6b 47 74 2c 20 53 65 65 6b 4c 65 0a 2a  SeekGt, SeekLe.*
1f7c0 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 65 65  /./* Opcode: See
1f7d0 6b 47 54 20 50 31 20 50 32 20 50 33 20 50 34 20  kGT P1 P2 P3 P4 
1f7e0 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b  *.** Synopsis: k
1f7f0 65 79 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a  ey=r[P3@P4].**.*
1f800 2a 20 49 66 20 63 75 72 73 6f 72 20 50 31 20 72  * If cursor P1 r
1f810 65 66 65 72 73 20 74 6f 20 61 6e 20 53 51 4c 20  efers to an SQL 
1f820 74 61 62 6c 65 20 28 42 2d 54 72 65 65 20 74 68  table (B-Tree th
1f830 61 74 20 75 73 65 73 20 69 6e 74 65 67 65 72 20  at uses integer 
1f840 6b 65 79 73 29 2c 20 0a 2a 2a 20 75 73 65 20 74  keys), .** use t
1f850 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69  he value in regi
1f860 73 74 65 72 20 50 33 20 61 73 20 61 20 6b 65 79  ster P3 as a key
1f870 2e 20 49 66 20 63 75 72 73 6f 72 20 50 31 20 72  . If cursor P1 r
1f880 65 66 65 72 73 20 0a 2a 2a 20 74 6f 20 61 6e 20  efers .** to an 
1f890 53 51 4c 20 69 6e 64 65 78 2c 20 74 68 65 6e 20  SQL index, then 
1f8a0 50 33 20 69 73 20 74 68 65 20 66 69 72 73 74 20  P3 is the first 
1f8b0 69 6e 20 61 6e 20 61 72 72 61 79 20 6f 66 20 50  in an array of P
1f8c0 34 20 72 65 67 69 73 74 65 72 73 20 0a 2a 2a 20  4 registers .** 
1f8d0 74 68 61 74 20 61 72 65 20 75 73 65 64 20 61 73  that are used as
1f8e0 20 61 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e 64   an unpacked ind
1f8f0 65 78 20 6b 65 79 2e 20 0a 2a 2a 0a 2a 2a 20 52  ex key. .**.** R
1f900 65 70 6f 73 69 74 69 6f 6e 20 63 75 72 73 6f 72  eposition cursor
1f910 20 50 31 20 73 6f 20 74 68 61 74 20 20 69 74 20   P1 so that  it 
1f920 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 20 73 6d  points to the sm
1f930 61 6c 6c 65 73 74 20 65 6e 74 72 79 20 74 68 61  allest entry tha
1f940 74 20 0a 2a 2a 20 69 73 20 67 72 65 61 74 65 72  t .** is greater
1f950 20 74 68 61 6e 20 74 68 65 20 6b 65 79 20 76 61   than the key va
1f960 6c 75 65 2e 20 49 66 20 74 68 65 72 65 20 61 72  lue. If there ar
1f970 65 20 6e 6f 20 72 65 63 6f 72 64 73 20 67 72 65  e no records gre
1f980 61 74 65 72 20 74 68 61 6e 20 0a 2a 2a 20 74 68  ater than .** th
1f990 65 20 6b 65 79 20 61 6e 64 20 50 32 20 69 73 20  e key and P2 is 
1f9a0 6e 6f 74 20 7a 65 72 6f 2c 20 74 68 65 6e 20 6a  not zero, then j
1f9b0 75 6d 70 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a  ump to P2..**.**
1f9c0 20 54 68 69 73 20 6f 70 63 6f 64 65 20 6c 65 61   This opcode lea
1f9d0 76 65 73 20 74 68 65 20 63 75 72 73 6f 72 20 63  ves the cursor c
1f9e0 6f 6e 66 69 67 75 72 65 64 20 74 6f 20 6d 6f 76  onfigured to mov
1f9f0 65 20 69 6e 20 66 6f 72 77 61 72 64 20 6f 72 64  e in forward ord
1fa00 65 72 2c 0a 2a 2a 20 66 72 6f 6d 20 74 68 65 20  er,.** from the 
1fa10 62 65 67 69 6e 6e 69 6e 67 20 74 6f 77 61 72 64  beginning toward
1fa20 20 74 68 65 20 65 6e 64 2e 20 20 49 6e 20 6f 74   the end.  In ot
1fa30 68 65 72 20 77 6f 72 64 73 2c 20 74 68 65 20 63  her words, the c
1fa40 75 72 73 6f 72 20 69 73 0a 2a 2a 20 63 6f 6e 66  ursor is.** conf
1fa50 69 67 75 72 65 64 20 74 6f 20 75 73 65 20 4e 65  igured to use Ne
1fa60 78 74 2c 20 6e 6f 74 20 50 72 65 76 2e 0a 2a 2a  xt, not Prev..**
1fa70 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 46 6f  .** See also: Fo
1fa80 75 6e 64 2c 20 4e 6f 74 46 6f 75 6e 64 2c 20 53  und, NotFound, S
1fa90 65 65 6b 4c 74 2c 20 53 65 65 6b 47 65 2c 20 53  eekLt, SeekGe, S
1faa0 65 65 6b 4c 65 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f  eekLe.*/./* Opco
1fab0 64 65 3a 20 53 65 65 6b 4c 54 20 50 31 20 50 32  de: SeekLT P1 P2
1fac0 20 50 33 20 50 34 20 2a 20 0a 2a 2a 20 53 79 6e   P3 P4 * .** Syn
1fad0 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50 33 40  opsis: key=r[P3@
1fae0 50 34 5d 0a 2a 2a 0a 2a 2a 20 49 66 20 63 75 72  P4].**.** If cur
1faf0 73 6f 72 20 50 31 20 72 65 66 65 72 73 20 74 6f  sor P1 refers to
1fb00 20 61 6e 20 53 51 4c 20 74 61 62 6c 65 20 28 42   an SQL table (B
1fb10 2d 54 72 65 65 20 74 68 61 74 20 75 73 65 73 20  -Tree that uses 
1fb20 69 6e 74 65 67 65 72 20 6b 65 79 73 29 2c 20 0a  integer keys), .
1fb30 2a 2a 20 75 73 65 20 74 68 65 20 76 61 6c 75 65  ** use the value
1fb40 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 20   in register P3 
1fb50 61 73 20 61 20 6b 65 79 2e 20 49 66 20 63 75 72  as a key. If cur
1fb60 73 6f 72 20 50 31 20 72 65 66 65 72 73 20 0a 2a  sor P1 refers .*
1fb70 2a 20 74 6f 20 61 6e 20 53 51 4c 20 69 6e 64 65  * to an SQL inde
1fb80 78 2c 20 74 68 65 6e 20 50 33 20 69 73 20 74 68  x, then P3 is th
1fb90 65 20 66 69 72 73 74 20 69 6e 20 61 6e 20 61 72  e first in an ar
1fba0 72 61 79 20 6f 66 20 50 34 20 72 65 67 69 73 74  ray of P4 regist
1fbb0 65 72 73 20 0a 2a 2a 20 74 68 61 74 20 61 72 65  ers .** that are
1fbc0 20 75 73 65 64 20 61 73 20 61 6e 20 75 6e 70 61   used as an unpa
1fbd0 63 6b 65 64 20 69 6e 64 65 78 20 6b 65 79 2e 20  cked index key. 
1fbe0 0a 2a 2a 0a 2a 2a 20 52 65 70 6f 73 69 74 69 6f  .**.** Repositio
1fbf0 6e 20 63 75 72 73 6f 72 20 50 31 20 73 6f 20 74  n cursor P1 so t
1fc00 68 61 74 20 20 69 74 20 70 6f 69 6e 74 73 20 74  hat  it points t
1fc10 6f 20 74 68 65 20 6c 61 72 67 65 73 74 20 65 6e  o the largest en
1fc20 74 72 79 20 74 68 61 74 20 0a 2a 2a 20 69 73 20  try that .** is 
1fc30 6c 65 73 73 20 74 68 61 6e 20 74 68 65 20 6b 65  less than the ke
1fc40 79 20 76 61 6c 75 65 2e 20 49 66 20 74 68 65 72  y value. If ther
1fc50 65 20 61 72 65 20 6e 6f 20 72 65 63 6f 72 64 73  e are no records
1fc60 20 6c 65 73 73 20 74 68 61 6e 20 0a 2a 2a 20 74   less than .** t
1fc70 68 65 20 6b 65 79 20 61 6e 64 20 50 32 20 69 73  he key and P2 is
1fc80 20 6e 6f 74 20 7a 65 72 6f 2c 20 74 68 65 6e 20   not zero, then 
1fc90 6a 75 6d 70 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a  jump to P2..**.*
1fca0 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 6c 65  * This opcode le
1fcb0 61 76 65 73 20 74 68 65 20 63 75 72 73 6f 72 20  aves the cursor 
1fcc0 63 6f 6e 66 69 67 75 72 65 64 20 74 6f 20 6d 6f  configured to mo
1fcd0 76 65 20 69 6e 20 72 65 76 65 72 73 65 20 6f 72  ve in reverse or
1fce0 64 65 72 2c 0a 2a 2a 20 66 72 6f 6d 20 74 68 65  der,.** from the
1fcf0 20 65 6e 64 20 74 6f 77 61 72 64 20 74 68 65 20   end toward the 
1fd00 62 65 67 69 6e 6e 69 6e 67 2e 20 20 49 6e 20 6f  beginning.  In o
1fd10 74 68 65 72 20 77 6f 72 64 73 2c 20 74 68 65 20  ther words, the 
1fd20 63 75 72 73 6f 72 20 69 73 0a 2a 2a 20 63 6f 6e  cursor is.** con
1fd30 66 69 67 75 72 65 64 20 74 6f 20 75 73 65 20 50  figured to use P
1fd40 72 65 76 2c 20 6e 6f 74 20 4e 65 78 74 2e 0a 2a  rev, not Next..*
1fd50 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 46  *.** See also: F
1fd60 6f 75 6e 64 2c 20 4e 6f 74 46 6f 75 6e 64 2c 20  ound, NotFound, 
1fd70 53 65 65 6b 47 74 2c 20 53 65 65 6b 47 65 2c 20  SeekGt, SeekGe, 
1fd80 53 65 65 6b 4c 65 0a 2a 2f 0a 2f 2a 20 4f 70 63  SeekLe.*/./* Opc
1fd90 6f 64 65 3a 20 53 65 65 6b 4c 45 20 50 31 20 50  ode: SeekLE P1 P
1fda0 32 20 50 33 20 50 34 20 2a 0a 2a 2a 20 53 79 6e  2 P3 P4 *.** Syn
1fdb0 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50 33 40  opsis: key=r[P3@
1fdc0 50 34 5d 0a 2a 2a 0a 2a 2a 20 49 66 20 63 75 72  P4].**.** If cur
1fdd0 73 6f 72 20 50 31 20 72 65 66 65 72 73 20 74 6f  sor P1 refers to
1fde0 20 61 6e 20 53 51 4c 20 74 61 62 6c 65 20 28 42   an SQL table (B
1fdf0 2d 54 72 65 65 20 74 68 61 74 20 75 73 65 73 20  -Tree that uses 
1fe00 69 6e 74 65 67 65 72 20 6b 65 79 73 29 2c 20 0a  integer keys), .
1fe10 2a 2a 20 75 73 65 20 74 68 65 20 76 61 6c 75 65  ** use the value
1fe20 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 20   in register P3 
1fe30 61 73 20 61 20 6b 65 79 2e 20 49 66 20 63 75 72  as a key. If cur
1fe40 73 6f 72 20 50 31 20 72 65 66 65 72 73 20 0a 2a  sor P1 refers .*
1fe50 2a 20 74 6f 20 61 6e 20 53 51 4c 20 69 6e 64 65  * to an SQL inde
1fe60 78 2c 20 74 68 65 6e 20 50 33 20 69 73 20 74 68  x, then P3 is th
1fe70 65 20 66 69 72 73 74 20 69 6e 20 61 6e 20 61 72  e first in an ar
1fe80 72 61 79 20 6f 66 20 50 34 20 72 65 67 69 73 74  ray of P4 regist
1fe90 65 72 73 20 0a 2a 2a 20 74 68 61 74 20 61 72 65  ers .** that are
1fea0 20 75 73 65 64 20 61 73 20 61 6e 20 75 6e 70 61   used as an unpa
1feb0 63 6b 65 64 20 69 6e 64 65 78 20 6b 65 79 2e 20  cked index key. 
1fec0 0a 2a 2a 0a 2a 2a 20 52 65 70 6f 73 69 74 69 6f  .**.** Repositio
1fed0 6e 20 63 75 72 73 6f 72 20 50 31 20 73 6f 20 74  n cursor P1 so t
1fee0 68 61 74 20 69 74 20 70 6f 69 6e 74 73 20 74 6f  hat it points to
1fef0 20 74 68 65 20 6c 61 72 67 65 73 74 20 65 6e 74   the largest ent
1ff00 72 79 20 74 68 61 74 20 0a 2a 2a 20 69 73 20 6c  ry that .** is l
1ff10 65 73 73 20 74 68 61 6e 20 6f 72 20 65 71 75 61  ess than or equa
1ff20 6c 20 74 6f 20 74 68 65 20 6b 65 79 20 76 61 6c  l to the key val
1ff30 75 65 2e 20 49 66 20 74 68 65 72 65 20 61 72 65  ue. If there are
1ff40 20 6e 6f 20 72 65 63 6f 72 64 73 20 0a 2a 2a 20   no records .** 
1ff50 6c 65 73 73 20 74 68 61 6e 20 6f 72 20 65 71 75  less than or equ
1ff60 61 6c 20 74 6f 20 74 68 65 20 6b 65 79 20 61 6e  al to the key an
1ff70 64 20 50 32 20 69 73 20 6e 6f 74 20 7a 65 72 6f  d P2 is not zero
1ff80 2c 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20 50  , then jump to P
1ff90 32 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70  2..**.** This op
1ffa0 63 6f 64 65 20 6c 65 61 76 65 73 20 74 68 65 20  code leaves the 
1ffb0 63 75 72 73 6f 72 20 63 6f 6e 66 69 67 75 72 65  cursor configure
1ffc0 64 20 74 6f 20 6d 6f 76 65 20 69 6e 20 72 65 76  d to move in rev
1ffd0 65 72 73 65 20 6f 72 64 65 72 2c 0a 2a 2a 20 66  erse order,.** f
1ffe0 72 6f 6d 20 74 68 65 20 65 6e 64 20 74 6f 77 61  rom the end towa
1fff0 72 64 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67  rd the beginning
20000 2e 20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64  .  In other word
20010 73 2c 20 74 68 65 20 63 75 72 73 6f 72 20 69 73  s, the cursor is
20020 0a 2a 2a 20 63 6f 6e 66 69 67 75 72 65 64 20 74  .** configured t
20030 6f 20 75 73 65 20 50 72 65 76 2c 20 6e 6f 74 20  o use Prev, not 
20040 4e 65 78 74 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74  Next..**.** If t
20050 68 65 20 63 75 72 73 6f 72 20 50 31 20 77 61 73  he cursor P1 was
20060 20 6f 70 65 6e 65 64 20 75 73 69 6e 67 20 74 68   opened using th
20070 65 20 4f 50 46 4c 41 47 5f 53 45 45 4b 45 51 20  e OPFLAG_SEEKEQ 
20080 66 6c 61 67 2c 20 74 68 65 6e 20 74 68 69 73 0a  flag, then this.
20090 2a 2a 20 6f 70 63 6f 64 65 20 77 69 6c 6c 20 61  ** opcode will a
200a0 6c 77 61 79 73 20 6c 61 6e 64 20 6f 6e 20 61 20  lways land on a 
200b0 72 65 63 6f 72 64 20 74 68 61 74 20 65 71 75 61  record that equa
200c0 6c 6c 79 20 65 71 75 61 6c 73 20 74 68 65 20 6b  lly equals the k
200d0 65 79 2c 20 6f 72 0a 2a 2a 20 65 6c 73 65 20 6a  ey, or.** else j
200e0 75 6d 70 20 69 6d 6d 65 64 69 61 74 65 6c 79 20  ump immediately 
200f0 74 6f 20 50 32 2e 20 20 57 68 65 6e 20 74 68 65  to P2.  When the
20100 20 63 75 72 73 6f 72 20 69 73 20 4f 50 46 4c 41   cursor is OPFLA
20110 47 5f 53 45 45 4b 45 51 2c 20 74 68 69 73 0a 2a  G_SEEKEQ, this.*
20120 2a 20 6f 70 63 6f 64 65 20 6d 75 73 74 20 62 65  * opcode must be
20130 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20 61 6e 20   followed by an 
20140 49 64 78 47 45 20 6f 70 63 6f 64 65 20 77 69 74  IdxGE opcode wit
20150 68 20 74 68 65 20 73 61 6d 65 20 61 72 67 75 6d  h the same argum
20160 65 6e 74 73 2e 0a 2a 2a 20 54 68 65 20 49 64 78  ents..** The Idx
20170 47 45 20 6f 70 63 6f 64 65 20 77 69 6c 6c 20 62  GE opcode will b
20180 65 20 73 6b 69 70 70 65 64 20 69 66 20 74 68 69  e skipped if thi
20190 73 20 6f 70 63 6f 64 65 20 73 75 63 63 65 65 64  s opcode succeed
201a0 73 2c 20 62 75 74 20 74 68 65 0a 2a 2a 20 49 64  s, but the.** Id
201b0 78 47 45 20 6f 70 63 6f 64 65 20 77 69 6c 6c 20  xGE opcode will 
201c0 62 65 20 75 73 65 64 20 6f 6e 20 73 75 62 73 65  be used on subse
201d0 71 75 65 6e 74 20 6c 6f 6f 70 20 69 74 65 72 61  quent loop itera
201e0 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20 53 65 65  tions..**.** See
201f0 20 61 6c 73 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f   also: Found, No
20200 74 46 6f 75 6e 64 2c 20 53 65 65 6b 47 74 2c 20  tFound, SeekGt, 
20210 53 65 65 6b 47 65 2c 20 53 65 65 6b 4c 74 0a 2a  SeekGe, SeekLt.*
20220 2f 0a 63 61 73 65 20 4f 50 5f 53 65 65 6b 4c 54  /.case OP_SeekLT
20230 3a 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d  :         /* jum
20240 70 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f  p, in3 */.case O
20250 50 5f 53 65 65 6b 4c 45 3a 20 20 20 20 20 20 20  P_SeekLE:       
20260 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a    /* jump, in3 *
20270 2f 0a 63 61 73 65 20 4f 50 5f 53 65 65 6b 47 45  /.case OP_SeekGE
20280 3a 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d  :         /* jum
20290 70 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f  p, in3 */.case O
202a0 50 5f 53 65 65 6b 47 54 3a 20 7b 20 20 20 20 20  P_SeekGT: {     
202b0 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a    /* jump, in3 *
202c0 2f 0a 20 20 69 6e 74 20 72 65 73 3b 20 20 20 20  /.  int res;    
202d0 20 20 20 20 20 20 20 2f 2a 20 43 6f 6d 70 61 72         /* Compar
202e0 69 73 6f 6e 20 72 65 73 75 6c 74 20 2a 2f 0a 20  ison result */. 
202f0 20 69 6e 74 20 6f 63 3b 20 20 20 20 20 20 20 20   int oc;        
20300 20 20 20 20 2f 2a 20 4f 70 63 6f 64 65 20 2a 2f      /* Opcode */
20310 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70  .  VdbeCursor *p
20320 43 3b 20 20 20 20 2f 2a 20 54 68 65 20 63 75 72  C;    /* The cur
20330 73 6f 72 20 74 6f 20 73 65 65 6b 20 2a 2f 0a 20  sor to seek */. 
20340 20 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 20   UnpackedRecord 
20350 72 3b 20 20 2f 2a 20 54 68 65 20 6b 65 79 20 74  r;  /* The key t
20360 6f 20 73 65 65 6b 20 66 6f 72 20 2a 2f 0a 20 20  o seek for */.  
20370 69 6e 74 20 6e 46 69 65 6c 64 3b 20 20 20 20 20  int nField;     
20380 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
20390 63 6f 6c 75 6d 6e 73 20 6f 72 20 66 69 65 6c 64  columns or field
203a0 73 20 69 6e 20 74 68 65 20 6b 65 79 20 2a 2f 0a  s in the key */.
203b0 20 20 69 36 34 20 69 4b 65 79 3b 20 20 20 20 20    i64 iKey;     
203c0 20 20 20 20 20 2f 2a 20 54 68 65 20 72 6f 77 69       /* The rowi
203d0 64 20 77 65 20 61 72 65 20 74 6f 20 73 65 65 6b  d we are to seek
203e0 20 74 6f 20 2a 2f 0a 20 20 69 6e 74 20 65 71 4f   to */.  int eqO
203f0 6e 6c 79 3b 20 20 20 20 20 20 20 20 2f 2a 20 4f  nly;        /* O
20400 6e 6c 79 20 69 6e 74 65 72 65 73 74 65 64 20 69  nly interested i
20410 6e 20 3d 3d 20 72 65 73 75 6c 74 73 20 2a 2f 0a  n == results */.
20420 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
20430 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31  p1>=0 && pOp->p1
20440 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20  <p->nCursor );. 
20450 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32   assert( pOp->p2
20460 21 3d 30 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d  !=0 );.  pC = p-
20470 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b  >apCsr[pOp->p1];
20480 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30  .  assert( pC!=0
20490 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43   );.  assert( pC
204a0 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43 55 52 54  ->eCurType==CURT
204b0 59 50 45 5f 42 54 52 45 45 20 29 3b 0a 20 20 61  YPE_BTREE );.  a
204c0 73 73 65 72 74 28 20 4f 50 5f 53 65 65 6b 4c 45  ssert( OP_SeekLE
204d0 20 3d 3d 20 4f 50 5f 53 65 65 6b 4c 54 2b 31 20   == OP_SeekLT+1 
204e0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 4f 50 5f  );.  assert( OP_
204f0 53 65 65 6b 47 45 20 3d 3d 20 4f 50 5f 53 65 65  SeekGE == OP_See
20500 6b 4c 54 2b 32 20 29 3b 0a 20 20 61 73 73 65 72  kLT+2 );.  asser
20510 74 28 20 4f 50 5f 53 65 65 6b 47 54 20 3d 3d 20  t( OP_SeekGT == 
20520 4f 50 5f 53 65 65 6b 4c 54 2b 33 20 29 3b 0a 20  OP_SeekLT+3 );. 
20530 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73 4f   assert( pC->isO
20540 72 64 65 72 65 64 20 29 3b 0a 20 20 61 73 73 65  rdered );.  asse
20550 72 74 28 20 70 43 2d 3e 75 63 2e 70 43 75 72 73  rt( pC->uc.pCurs
20560 6f 72 21 3d 30 20 29 3b 0a 20 20 6f 63 20 3d 20  or!=0 );.  oc = 
20570 70 4f 70 2d 3e 6f 70 63 6f 64 65 3b 0a 20 20 65  pOp->opcode;.  e
20580 71 4f 6e 6c 79 20 3d 20 30 3b 0a 20 20 70 43 2d  qOnly = 0;.  pC-
20590 3e 6e 75 6c 6c 52 6f 77 20 3d 20 30 3b 0a 23 69  >nullRow = 0;.#i
205a0 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55  fdef SQLITE_DEBU
205b0 47 0a 20 20 70 43 2d 3e 73 65 65 6b 4f 70 20 3d  G.  pC->seekOp =
205c0 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3b 0a 23 65   pOp->opcode;.#e
205d0 6e 64 69 66 0a 0a 20 20 69 66 28 20 70 43 2d 3e  ndif..  if( pC->
205e0 69 73 54 61 62 6c 65 20 29 7b 0a 20 20 20 20 2f  isTable ){.    /
205f0 2a 20 54 68 65 20 42 54 52 45 45 5f 53 45 45 4b  * The BTREE_SEEK
20600 5f 45 51 20 66 6c 61 67 20 69 73 20 6f 6e 6c 79  _EQ flag is only
20610 20 73 65 74 20 6f 6e 20 69 6e 64 65 78 20 63 75   set on index cu
20620 72 73 6f 72 73 20 2a 2f 0a 20 20 20 20 61 73 73  rsors */.    ass
20630 65 72 74 28 20 73 71 6c 69 74 65 33 42 74 72 65  ert( sqlite3Btre
20640 65 43 75 72 73 6f 72 48 61 73 48 69 6e 74 28 70  eCursorHasHint(p
20650 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 2c 20 42  C->uc.pCursor, B
20660 54 52 45 45 5f 53 45 45 4b 5f 45 51 29 3d 3d 30  TREE_SEEK_EQ)==0
20670 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7c  .              |
20680 7c 20 43 4f 52 52 55 50 54 5f 44 42 20 29 3b 0a  | CORRUPT_DB );.
20690 0a 20 20 20 20 2f 2a 20 54 68 65 20 69 6e 70 75  .    /* The inpu
206a0 74 20 76 61 6c 75 65 20 69 6e 20 50 33 20 6d 69  t value in P3 mi
206b0 67 68 74 20 62 65 20 6f 66 20 61 6e 79 20 74 79  ght be of any ty
206c0 70 65 3a 20 69 6e 74 65 67 65 72 2c 20 72 65 61  pe: integer, rea
206d0 6c 2c 20 73 74 72 69 6e 67 2c 0a 20 20 20 20 2a  l, string,.    *
206e0 2a 20 62 6c 6f 62 2c 20 6f 72 20 4e 55 4c 4c 2e  * blob, or NULL.
206f0 20 20 42 75 74 20 69 74 20 6e 65 65 64 73 20 74    But it needs t
20700 6f 20 62 65 20 61 6e 20 69 6e 74 65 67 65 72 20  o be an integer 
20710 62 65 66 6f 72 65 20 77 65 20 63 61 6e 20 64 6f  before we can do
20720 0a 20 20 20 20 2a 2a 20 74 68 65 20 73 65 65 6b  .    ** the seek
20730 2c 20 73 6f 20 63 6f 6e 76 65 72 74 20 69 74 2e  , so convert it.
20740 20 2a 2f 0a 20 20 20 20 70 49 6e 33 20 3d 20 26   */.    pIn3 = &
20750 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20  aMem[pOp->p3];. 
20760 20 20 20 69 66 28 20 28 70 49 6e 33 2d 3e 66 6c     if( (pIn3->fl
20770 61 67 73 20 26 20 28 4d 45 4d 5f 49 6e 74 7c 4d  ags & (MEM_Int|M
20780 45 4d 5f 52 65 61 6c 7c 4d 45 4d 5f 53 74 72 29  EM_Real|MEM_Str)
20790 29 3d 3d 4d 45 4d 5f 53 74 72 20 29 7b 0a 20 20  )==MEM_Str ){.  
207a0 20 20 20 20 61 70 70 6c 79 4e 75 6d 65 72 69 63      applyNumeric
207b0 41 66 66 69 6e 69 74 79 28 70 49 6e 33 2c 20 30  Affinity(pIn3, 0
207c0 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 4b 65  );.    }.    iKe
207d0 79 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 49  y = sqlite3VdbeI
207e0 6e 74 56 61 6c 75 65 28 70 49 6e 33 29 3b 0a 0a  ntValue(pIn3);..
207f0 20 20 20 20 2f 2a 20 49 66 20 74 68 65 20 50 33      /* If the P3
20800 20 76 61 6c 75 65 20 63 6f 75 6c 64 20 6e 6f 74   value could not
20810 20 62 65 20 63 6f 6e 76 65 72 74 65 64 20 69 6e   be converted in
20820 74 6f 20 61 6e 20 69 6e 74 65 67 65 72 20 77 69  to an integer wi
20830 74 68 6f 75 74 0a 20 20 20 20 2a 2a 20 6c 6f 73  thout.    ** los
20840 73 20 6f 66 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  s of information
20850 2c 20 74 68 65 6e 20 73 70 65 63 69 61 6c 20 70  , then special p
20860 72 6f 63 65 73 73 69 6e 67 20 69 73 20 72 65 71  rocessing is req
20870 75 69 72 65 64 2e 2e 2e 20 2a 2f 0a 20 20 20 20  uired... */.    
20880 69 66 28 20 28 70 49 6e 33 2d 3e 66 6c 61 67 73  if( (pIn3->flags
20890 20 26 20 4d 45 4d 5f 49 6e 74 29 3d 3d 30 20 29   & MEM_Int)==0 )
208a0 7b 0a 20 20 20 20 20 20 69 66 28 20 28 70 49 6e  {.      if( (pIn
208b0 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52  3->flags & MEM_R
208c0 65 61 6c 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20  eal)==0 ){.     
208d0 20 20 20 2f 2a 20 49 66 20 74 68 65 20 50 33 20     /* If the P3 
208e0 76 61 6c 75 65 20 63 61 6e 6e 6f 74 20 62 65 20  value cannot be 
208f0 63 6f 6e 76 65 72 74 65 64 20 69 6e 74 6f 20 61  converted into a
20900 6e 79 20 6b 69 6e 64 20 6f 66 20 61 20 6e 75 6d  ny kind of a num
20910 62 65 72 2c 0a 20 20 20 20 20 20 20 20 2a 2a 20  ber,.        ** 
20920 74 68 65 6e 20 74 68 65 20 73 65 65 6b 20 69 73  then the seek is
20930 20 6e 6f 74 20 70 6f 73 73 69 62 6c 65 2c 20 73   not possible, s
20940 6f 20 6a 75 6d 70 20 74 6f 20 50 32 20 2a 2f 0a  o jump to P2 */.
20950 20 20 20 20 20 20 20 20 56 64 62 65 42 72 61 6e          VdbeBran
20960 63 68 54 61 6b 65 6e 28 31 2c 32 29 3b 20 67 6f  chTaken(1,2); go
20970 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20  to jump_to_p2;. 
20980 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20         break;.  
20990 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 2f 2a 20      }..      /* 
209a0 49 66 20 74 68 65 20 61 70 70 72 6f 78 69 6d 61  If the approxima
209b0 74 69 6f 6e 20 69 4b 65 79 20 69 73 20 6c 61 72  tion iKey is lar
209c0 67 65 72 20 74 68 61 6e 20 74 68 65 20 61 63 74  ger than the act
209d0 75 61 6c 20 72 65 61 6c 20 73 65 61 72 63 68 0a  ual real search.
209e0 20 20 20 20 20 20 2a 2a 20 74 65 72 6d 2c 20 73        ** term, s
209f0 75 62 73 74 69 74 75 74 65 20 3e 3d 20 66 6f 72  ubstitute >= for
20a00 20 3e 20 61 6e 64 20 3c 20 66 6f 72 20 3c 3d 2e   > and < for <=.
20a10 20 65 2e 67 2e 20 69 66 20 74 68 65 20 73 65 61   e.g. if the sea
20a20 72 63 68 20 74 65 72 6d 0a 20 20 20 20 20 20 2a  rch term.      *
20a30 2a 20 69 73 20 34 2e 39 20 61 6e 64 20 74 68 65  * is 4.9 and the
20a40 20 69 6e 74 65 67 65 72 20 61 70 70 72 6f 78 69   integer approxi
20a50 6d 61 74 69 6f 6e 20 35 3a 0a 20 20 20 20 20 20  mation 5:.      
20a60 2a 2a 0a 20 20 20 20 20 20 2a 2a 20 20 20 20 20  **.      **     
20a70 20 20 20 28 78 20 3e 20 20 34 2e 39 29 20 20 20     (x >  4.9)   
20a80 20 2d 3e 20 20 20 20 20 28 78 20 3e 3d 20 35 29   ->     (x >= 5)
20a90 0a 20 20 20 20 20 20 2a 2a 20 20 20 20 20 20 20  .      **       
20aa0 20 28 78 20 3c 3d 20 34 2e 39 29 20 20 20 20 2d   (x <= 4.9)    -
20ab0 3e 20 20 20 20 20 28 78 20 3c 20 20 35 29 0a 20  >     (x <  5). 
20ac0 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 69 66       */.      if
20ad0 28 20 70 49 6e 33 2d 3e 75 2e 72 3c 28 64 6f 75  ( pIn3->u.r<(dou
20ae0 62 6c 65 29 69 4b 65 79 20 29 7b 0a 20 20 20 20  ble)iKey ){.    
20af0 20 20 20 20 61 73 73 65 72 74 28 20 4f 50 5f 53      assert( OP_S
20b00 65 65 6b 47 45 3d 3d 28 4f 50 5f 53 65 65 6b 47  eekGE==(OP_SeekG
20b10 54 2d 31 29 20 29 3b 0a 20 20 20 20 20 20 20 20  T-1) );.        
20b20 61 73 73 65 72 74 28 20 4f 50 5f 53 65 65 6b 4c  assert( OP_SeekL
20b30 54 3d 3d 28 4f 50 5f 53 65 65 6b 4c 45 2d 31 29  T==(OP_SeekLE-1)
20b40 20 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65   );.        asse
20b50 72 74 28 20 28 4f 50 5f 53 65 65 6b 4c 45 20 26  rt( (OP_SeekLE &
20b60 20 30 78 30 30 30 31 29 3d 3d 28 4f 50 5f 53 65   0x0001)==(OP_Se
20b70 65 6b 47 54 20 26 20 30 78 30 30 30 31 29 20 29  ekGT & 0x0001) )
20b80 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 28 6f  ;.        if( (o
20b90 63 20 26 20 30 78 30 30 30 31 29 3d 3d 28 4f 50  c & 0x0001)==(OP
20ba0 5f 53 65 65 6b 47 54 20 26 20 30 78 30 30 30 31  _SeekGT & 0x0001
20bb0 29 20 29 20 6f 63 2d 2d 3b 0a 20 20 20 20 20 20  ) ) oc--;.      
20bc0 7d 0a 0a 20 20 20 20 20 20 2f 2a 20 49 66 20 74  }..      /* If t
20bd0 68 65 20 61 70 70 72 6f 78 69 6d 61 74 69 6f 6e  he approximation
20be0 20 69 4b 65 79 20 69 73 20 73 6d 61 6c 6c 65 72   iKey is smaller
20bf0 20 74 68 61 6e 20 74 68 65 20 61 63 74 75 61 6c   than the actual
20c00 20 72 65 61 6c 20 73 65 61 72 63 68 0a 20 20 20   real search.   
20c10 20 20 20 2a 2a 20 74 65 72 6d 2c 20 73 75 62 73     ** term, subs
20c20 74 69 74 75 74 65 20 3c 3d 20 66 6f 72 20 3c 20  titute <= for < 
20c30 61 6e 64 20 3e 20 66 6f 72 20 3e 3d 2e 20 20 2a  and > for >=.  *
20c40 2f 0a 20 20 20 20 20 20 65 6c 73 65 20 69 66 28  /.      else if(
20c50 20 70 49 6e 33 2d 3e 75 2e 72 3e 28 64 6f 75 62   pIn3->u.r>(doub
20c60 6c 65 29 69 4b 65 79 20 29 7b 0a 20 20 20 20 20  le)iKey ){.     
20c70 20 20 20 61 73 73 65 72 74 28 20 4f 50 5f 53 65     assert( OP_Se
20c80 65 6b 4c 45 3d 3d 28 4f 50 5f 53 65 65 6b 4c 54  ekLE==(OP_SeekLT
20c90 2b 31 29 20 29 3b 0a 20 20 20 20 20 20 20 20 61  +1) );.        a
20ca0 73 73 65 72 74 28 20 4f 50 5f 53 65 65 6b 47 54  ssert( OP_SeekGT
20cb0 3d 3d 28 4f 50 5f 53 65 65 6b 47 45 2b 31 29 20  ==(OP_SeekGE+1) 
20cc0 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72  );.        asser
20cd0 74 28 20 28 4f 50 5f 53 65 65 6b 4c 54 20 26 20  t( (OP_SeekLT & 
20ce0 30 78 30 30 30 31 29 3d 3d 28 4f 50 5f 53 65 65  0x0001)==(OP_See
20cf0 6b 47 45 20 26 20 30 78 30 30 30 31 29 20 29 3b  kGE & 0x0001) );
20d00 0a 20 20 20 20 20 20 20 20 69 66 28 20 28 6f 63  .        if( (oc
20d10 20 26 20 30 78 30 30 30 31 29 3d 3d 28 4f 50 5f   & 0x0001)==(OP_
20d20 53 65 65 6b 4c 54 20 26 20 30 78 30 30 30 31 29  SeekLT & 0x0001)
20d30 20 29 20 6f 63 2b 2b 3b 0a 20 20 20 20 20 20 7d   ) oc++;.      }
20d40 0a 20 20 20 20 7d 20 0a 20 20 20 20 72 63 20 3d  .    } .    rc =
20d50 20 73 71 6c 69 74 65 33 42 74 72 65 65 4d 6f 76   sqlite3BtreeMov
20d60 65 74 6f 55 6e 70 61 63 6b 65 64 28 70 43 2d 3e  etoUnpacked(pC->
20d70 75 63 2e 70 43 75 72 73 6f 72 2c 20 30 2c 20 28  uc.pCursor, 0, (
20d80 75 36 34 29 69 4b 65 79 2c 20 30 2c 20 26 72 65  u64)iKey, 0, &re
20d90 73 29 3b 0a 20 20 20 20 70 43 2d 3e 6d 6f 76 65  s);.    pC->move
20da0 74 6f 54 61 72 67 65 74 20 3d 20 69 4b 65 79 3b  toTarget = iKey;
20db0 20 20 2f 2a 20 55 73 65 64 20 62 79 20 4f 50 5f    /* Used by OP_
20dc0 44 65 6c 65 74 65 20 2a 2f 0a 20 20 20 20 69 66  Delete */.    if
20dd0 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc!=SQLITE_OK 
20de0 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20 61 62  ){.      goto ab
20df0 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
20e00 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b  ;.    }.  }else{
20e10 0a 20 20 20 20 2f 2a 20 46 6f 72 20 61 20 63 75  .    /* For a cu
20e20 72 73 6f 72 20 77 69 74 68 20 74 68 65 20 42 54  rsor with the BT
20e30 52 45 45 5f 53 45 45 4b 5f 45 51 20 68 69 6e 74  REE_SEEK_EQ hint
20e40 2c 20 6f 6e 6c 79 20 74 68 65 20 4f 50 5f 53 65  , only the OP_Se
20e50 65 6b 47 45 20 61 6e 64 0a 20 20 20 20 2a 2a 20  ekGE and.    ** 
20e60 4f 50 5f 53 65 65 6b 4c 45 20 6f 70 63 6f 64 65  OP_SeekLE opcode
20e70 73 20 61 72 65 20 61 6c 6c 6f 77 65 64 2c 20 61  s are allowed, a
20e80 6e 64 20 74 68 65 73 65 20 6d 75 73 74 20 62 65  nd these must be
20e90 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 66 6f 6c   immediately fol
20ea0 6c 6f 77 65 64 0a 20 20 20 20 2a 2a 20 62 79 20  lowed.    ** by 
20eb0 61 6e 20 4f 50 5f 49 64 78 47 54 20 6f 72 20 4f  an OP_IdxGT or O
20ec0 50 5f 49 64 78 4c 54 20 6f 70 63 6f 64 65 2c 20  P_IdxLT opcode, 
20ed0 72 65 73 70 65 63 74 69 76 65 6c 79 2c 20 77 69  respectively, wi
20ee0 74 68 20 74 68 65 20 73 61 6d 65 20 6b 65 79 2e  th the same key.
20ef0 0a 20 20 20 20 2a 2f 0a 20 20 20 20 69 66 28 20  .    */.    if( 
20f00 73 71 6c 69 74 65 33 42 74 72 65 65 43 75 72 73  sqlite3BtreeCurs
20f10 6f 72 48 61 73 48 69 6e 74 28 70 43 2d 3e 75 63  orHasHint(pC->uc
20f20 2e 70 43 75 72 73 6f 72 2c 20 42 54 52 45 45 5f  .pCursor, BTREE_
20f30 53 45 45 4b 5f 45 51 29 20 29 7b 0a 20 20 20 20  SEEK_EQ) ){.    
20f40 20 20 65 71 4f 6e 6c 79 20 3d 20 31 3b 0a 20 20    eqOnly = 1;.  
20f50 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d      assert( pOp-
20f60 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 53 65 65 6b  >opcode==OP_Seek
20f70 47 45 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64  GE || pOp->opcod
20f80 65 3d 3d 4f 50 5f 53 65 65 6b 4c 45 20 29 3b 0a  e==OP_SeekLE );.
20f90 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f        assert( pO
20fa0 70 5b 31 5d 2e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  p[1].opcode==OP_
20fb0 49 64 78 4c 54 20 7c 7c 20 70 4f 70 5b 31 5d 2e  IdxLT || pOp[1].
20fc0 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 64 78 47 54  opcode==OP_IdxGT
20fd0 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74   );.      assert
20fe0 28 20 70 4f 70 5b 31 5d 2e 70 31 3d 3d 70 4f 70  ( pOp[1].p1==pOp
20ff0 5b 30 5d 2e 70 31 20 29 3b 0a 20 20 20 20 20 20  [0].p1 );.      
21000 61 73 73 65 72 74 28 20 70 4f 70 5b 31 5d 2e 70  assert( pOp[1].p
21010 32 3d 3d 70 4f 70 5b 30 5d 2e 70 32 20 29 3b 0a  2==pOp[0].p2 );.
21020 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f        assert( pO
21030 70 5b 31 5d 2e 70 33 3d 3d 70 4f 70 5b 30 5d 2e  p[1].p3==pOp[0].
21040 70 33 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65  p3 );.      asse
21050 72 74 28 20 70 4f 70 5b 31 5d 2e 70 34 2e 69 3d  rt( pOp[1].p4.i=
21060 3d 70 4f 70 5b 30 5d 2e 70 34 2e 69 20 29 3b 0a  =pOp[0].p4.i );.
21070 20 20 20 20 7d 0a 0a 20 20 20 20 6e 46 69 65 6c      }..    nFiel
21080 64 20 3d 20 70 4f 70 2d 3e 70 34 2e 69 3b 0a 20  d = pOp->p4.i;. 
21090 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e     assert( pOp->
210a0 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54 33 32  p4type==P4_INT32
210b0 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20   );.    assert( 
210c0 6e 46 69 65 6c 64 3e 30 20 29 3b 0a 20 20 20 20  nField>0 );.    
210d0 72 2e 70 4b 65 79 49 6e 66 6f 20 3d 20 70 43 2d  r.pKeyInfo = pC-
210e0 3e 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 20 20 72  >pKeyInfo;.    r
210f0 2e 6e 46 69 65 6c 64 20 3d 20 28 75 31 36 29 6e  .nField = (u16)n
21100 46 69 65 6c 64 3b 0a 0a 20 20 20 20 2f 2a 20 54  Field;..    /* T
21110 68 65 20 6e 65 78 74 20 6c 69 6e 65 20 6f 66 20  he next line of 
21120 63 6f 64 65 20 63 6f 6d 70 75 74 65 73 20 61 73  code computes as
21130 20 66 6f 6c 6c 6f 77 73 2c 20 6f 6e 6c 79 20 66   follows, only f
21140 61 73 74 65 72 3a 0a 20 20 20 20 2a 2a 20 20 20  aster:.    **   
21150 69 66 28 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 47  if( oc==OP_SeekG
21160 54 20 7c 7c 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b  T || oc==OP_Seek
21170 4c 45 20 29 7b 0a 20 20 20 20 2a 2a 20 20 20 20  LE ){.    **    
21180 20 72 2e 64 65 66 61 75 6c 74 5f 72 63 20 3d 20   r.default_rc = 
21190 2d 31 3b 0a 20 20 20 20 2a 2a 20 20 20 7d 65 6c  -1;.    **   }el
211a0 73 65 7b 0a 20 20 20 20 2a 2a 20 20 20 20 20 72  se{.    **     r
211b0 2e 64 65 66 61 75 6c 74 5f 72 63 20 3d 20 2b 31  .default_rc = +1
211c0 3b 0a 20 20 20 20 2a 2a 20 20 20 7d 0a 20 20 20  ;.    **   }.   
211d0 20 2a 2f 0a 20 20 20 20 72 2e 64 65 66 61 75 6c   */.    r.defaul
211e0 74 5f 72 63 20 3d 20 28 28 31 20 26 20 28 6f 63  t_rc = ((1 & (oc
211f0 20 2d 20 4f 50 5f 53 65 65 6b 4c 54 29 29 20 3f   - OP_SeekLT)) ?
21200 20 2d 31 20 3a 20 2b 31 29 3b 0a 20 20 20 20 61   -1 : +1);.    a
21210 73 73 65 72 74 28 20 6f 63 21 3d 4f 50 5f 53 65  ssert( oc!=OP_Se
21220 65 6b 47 54 20 7c 7c 20 72 2e 64 65 66 61 75 6c  ekGT || r.defaul
21230 74 5f 72 63 3d 3d 2d 31 20 29 3b 0a 20 20 20 20  t_rc==-1 );.    
21240 61 73 73 65 72 74 28 20 6f 63 21 3d 4f 50 5f 53  assert( oc!=OP_S
21250 65 65 6b 4c 45 20 7c 7c 20 72 2e 64 65 66 61 75  eekLE || r.defau
21260 6c 74 5f 72 63 3d 3d 2d 31 20 29 3b 0a 20 20 20  lt_rc==-1 );.   
21270 20 61 73 73 65 72 74 28 20 6f 63 21 3d 4f 50 5f   assert( oc!=OP_
21280 53 65 65 6b 47 45 20 7c 7c 20 72 2e 64 65 66 61  SeekGE || r.defa
21290 75 6c 74 5f 72 63 3d 3d 2b 31 20 29 3b 0a 20 20  ult_rc==+1 );.  
212a0 20 20 61 73 73 65 72 74 28 20 6f 63 21 3d 4f 50    assert( oc!=OP
212b0 5f 53 65 65 6b 4c 54 20 7c 7c 20 72 2e 64 65 66  _SeekLT || r.def
212c0 61 75 6c 74 5f 72 63 3d 3d 2b 31 20 29 3b 0a 0a  ault_rc==+1 );..
212d0 20 20 20 20 72 2e 61 4d 65 6d 20 3d 20 26 61 4d      r.aMem = &aM
212e0 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 23 69 66  em[pOp->p3];.#if
212f0 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47  def SQLITE_DEBUG
21300 0a 20 20 20 20 7b 20 69 6e 74 20 69 3b 20 66 6f  .    { int i; fo
21310 72 28 69 3d 30 3b 20 69 3c 72 2e 6e 46 69 65 6c  r(i=0; i<r.nFiel
21320 64 3b 20 69 2b 2b 29 20 61 73 73 65 72 74 28 20  d; i++) assert( 
21330 6d 65 6d 49 73 56 61 6c 69 64 28 26 72 2e 61 4d  memIsValid(&r.aM
21340 65 6d 5b 69 5d 29 20 29 3b 20 7d 0a 23 65 6e 64  em[i]) ); }.#end
21350 69 66 0a 20 20 20 20 72 2e 65 71 53 65 65 6e 20  if.    r.eqSeen 
21360 3d 20 30 3b 0a 20 20 20 20 72 63 20 3d 20 73 71  = 0;.    rc = sq
21370 6c 69 74 65 33 42 74 72 65 65 4d 6f 76 65 74 6f  lite3BtreeMoveto
21380 55 6e 70 61 63 6b 65 64 28 70 43 2d 3e 75 63 2e  Unpacked(pC->uc.
21390 70 43 75 72 73 6f 72 2c 20 26 72 2c 20 30 2c 20  pCursor, &r, 0, 
213a0 30 2c 20 26 72 65 73 29 3b 0a 20 20 20 20 69 66  0, &res);.    if
213b0 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc!=SQLITE_OK 
213c0 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20 61 62  ){.      goto ab
213d0 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
213e0 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20  ;.    }.    if( 
213f0 65 71 4f 6e 6c 79 20 26 26 20 72 2e 65 71 53 65  eqOnly && r.eqSe
21400 65 6e 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 61  en==0 ){.      a
21410 73 73 65 72 74 28 20 72 65 73 21 3d 30 20 29 3b  ssert( res!=0 );
21420 0a 20 20 20 20 20 20 67 6f 74 6f 20 73 65 65 6b  .      goto seek
21430 5f 6e 6f 74 5f 66 6f 75 6e 64 3b 0a 20 20 20 20  _not_found;.    
21440 7d 0a 20 20 7d 0a 20 20 70 43 2d 3e 64 65 66 65  }.  }.  pC->defe
21450 72 72 65 64 4d 6f 76 65 74 6f 20 3d 20 30 3b 0a  rredMoveto = 0;.
21460 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75    pC->cacheStatu
21470 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b  s = CACHE_STALE;
21480 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 54  .#ifdef SQLITE_T
21490 45 53 54 0a 20 20 73 71 6c 69 74 65 33 5f 73 65  EST.  sqlite3_se
214a0 61 72 63 68 5f 63 6f 75 6e 74 2b 2b 3b 0a 23 65  arch_count++;.#e
214b0 6e 64 69 66 0a 20 20 69 66 28 20 6f 63 3e 3d 4f  ndif.  if( oc>=O
214c0 50 5f 53 65 65 6b 47 45 20 29 7b 20 20 61 73 73  P_SeekGE ){  ass
214d0 65 72 74 28 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b  ert( oc==OP_Seek
214e0 47 45 20 7c 7c 20 6f 63 3d 3d 4f 50 5f 53 65 65  GE || oc==OP_See
214f0 6b 47 54 20 29 3b 0a 20 20 20 20 69 66 28 20 72  kGT );.    if( r
21500 65 73 3c 30 20 7c 7c 20 28 72 65 73 3d 3d 30 20  es<0 || (res==0 
21510 26 26 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 47 54  && oc==OP_SeekGT
21520 29 20 29 7b 0a 20 20 20 20 20 20 72 65 73 20 3d  ) ){.      res =
21530 20 30 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 73   0;.      rc = s
21540 71 6c 69 74 65 33 42 74 72 65 65 4e 65 78 74 28  qlite3BtreeNext(
21550 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 2c 20  pC->uc.pCursor, 
21560 30 29 3b 0a 20 20 20 20 20 20 69 66 28 20 72 63  0);.      if( rc
21570 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20  !=SQLITE_OK ){. 
21580 20 20 20 20 20 20 20 69 66 28 20 72 63 3d 3d 53         if( rc==S
21590 51 4c 49 54 45 5f 44 4f 4e 45 20 29 7b 0a 20 20  QLITE_DONE ){.  
215a0 20 20 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c          rc = SQL
215b0 49 54 45 5f 4f 4b 3b 0a 20 20 20 20 20 20 20 20  ITE_OK;.        
215c0 20 20 72 65 73 20 3d 20 31 3b 0a 20 20 20 20 20    res = 1;.     
215d0 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
215e0 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64      goto abort_d
215f0 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20  ue_to_error;.   
21600 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20       }.      }. 
21610 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
21620 72 65 73 20 3d 20 30 3b 0a 20 20 20 20 7d 0a 20  res = 0;.    }. 
21630 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73 73 65   }else{.    asse
21640 72 74 28 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 4c  rt( oc==OP_SeekL
21650 54 20 7c 7c 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b  T || oc==OP_Seek
21660 4c 45 20 29 3b 0a 20 20 20 20 69 66 28 20 72 65  LE );.    if( re
21670 73 3e 30 20 7c 7c 20 28 72 65 73 3d 3d 30 20 26  s>0 || (res==0 &
21680 26 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 4c 54 29  & oc==OP_SeekLT)
21690 20 29 7b 0a 20 20 20 20 20 20 72 65 73 20 3d 20   ){.      res = 
216a0 30 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71  0;.      rc = sq
216b0 6c 69 74 65 33 42 74 72 65 65 50 72 65 76 69 6f  lite3BtreePrevio
216c0 75 73 28 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f  us(pC->uc.pCurso
216d0 72 2c 20 30 29 3b 0a 20 20 20 20 20 20 69 66 28  r, 0);.      if(
216e0 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc!=SQLITE_OK )
216f0 7b 0a 20 20 20 20 20 20 20 20 69 66 28 20 72 63  {.        if( rc
21700 3d 3d 53 51 4c 49 54 45 5f 44 4f 4e 45 20 29 7b  ==SQLITE_DONE ){
21710 0a 20 20 20 20 20 20 20 20 20 20 72 63 20 3d 20  .          rc = 
21720 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20 20 20 20  SQLITE_OK;.     
21730 20 20 20 20 20 72 65 73 20 3d 20 31 3b 0a 20 20       res = 1;.  
21740 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20        }else{.   
21750 20 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72         goto abor
21760 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
21770 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
21780 7d 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20  }.    }else{.   
21790 20 20 20 2f 2a 20 72 65 73 20 6d 69 67 68 74 20     /* res might 
217a0 62 65 20 6e 65 67 61 74 69 76 65 20 62 65 63 61  be negative beca
217b0 75 73 65 20 74 68 65 20 74 61 62 6c 65 20 69 73  use the table is
217c0 20 65 6d 70 74 79 2e 20 20 43 68 65 63 6b 20 74   empty.  Check t
217d0 6f 0a 20 20 20 20 20 20 2a 2a 20 73 65 65 20 69  o.      ** see i
217e0 66 20 74 68 69 73 20 69 73 20 74 68 65 20 63 61  f this is the ca
217f0 73 65 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20  se..      */.   
21800 20 20 20 72 65 73 20 3d 20 73 71 6c 69 74 65 33     res = sqlite3
21810 42 74 72 65 65 45 6f 66 28 70 43 2d 3e 75 63 2e  BtreeEof(pC->uc.
21820 70 43 75 72 73 6f 72 29 3b 0a 20 20 20 20 7d 0a  pCursor);.    }.
21830 20 20 7d 0a 73 65 65 6b 5f 6e 6f 74 5f 66 6f 75    }.seek_not_fou
21840 6e 64 3a 0a 20 20 61 73 73 65 72 74 28 20 70 4f  nd:.  assert( pO
21850 70 2d 3e 70 32 3e 30 20 29 3b 0a 20 20 56 64 62  p->p2>0 );.  Vdb
21860 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 72 65 73  eBranchTaken(res
21870 21 3d 30 2c 32 29 3b 0a 20 20 69 66 28 20 72 65  !=0,2);.  if( re
21880 73 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 6a 75  s ){.    goto ju
21890 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 7d 65 6c 73  mp_to_p2;.  }els
218a0 65 20 69 66 28 20 65 71 4f 6e 6c 79 20 29 7b 0a  e if( eqOnly ){.
218b0 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 5b      assert( pOp[
218c0 31 5d 2e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 64  1].opcode==OP_Id
218d0 78 4c 54 20 7c 7c 20 70 4f 70 5b 31 5d 2e 6f 70  xLT || pOp[1].op
218e0 63 6f 64 65 3d 3d 4f 50 5f 49 64 78 47 54 20 29  code==OP_IdxGT )
218f0 3b 0a 20 20 20 20 70 4f 70 2b 2b 3b 20 2f 2a 20  ;.    pOp++; /* 
21900 53 6b 69 70 20 74 68 65 20 4f 50 5f 49 64 78 4c  Skip the OP_IdxL
21910 74 20 6f 72 20 4f 50 5f 49 64 78 47 54 20 74 68  t or OP_IdxGT th
21920 61 74 20 66 6f 6c 6c 6f 77 73 20 2a 2f 0a 20 20  at follows */.  
21930 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  }.  break;.}../*
21940 20 4f 70 63 6f 64 65 3a 20 46 6f 75 6e 64 20 50   Opcode: Found P
21950 31 20 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a 20  1 P2 P3 P4 *.** 
21960 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b  Synopsis: key=r[
21970 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 49 66 20  P3@P4].**.** If 
21980 50 34 3d 3d 30 20 74 68 65 6e 20 72 65 67 69 73  P4==0 then regis
21990 74 65 72 20 50 33 20 68 6f 6c 64 73 20 61 20 62  ter P3 holds a b
219a0 6c 6f 62 20 63 6f 6e 73 74 72 75 63 74 65 64 20  lob constructed 
219b0 62 79 20 4d 61 6b 65 52 65 63 6f 72 64 2e 20 20  by MakeRecord.  
219c0 49 66 0a 2a 2a 20 50 34 3e 30 20 74 68 65 6e 20  If.** P4>0 then 
219d0 72 65 67 69 73 74 65 72 20 50 33 20 69 73 20 74  register P3 is t
219e0 68 65 20 66 69 72 73 74 20 6f 66 20 50 34 20 72  he first of P4 r
219f0 65 67 69 73 74 65 72 73 20 74 68 61 74 20 66 6f  egisters that fo
21a00 72 6d 20 61 6e 20 75 6e 70 61 63 6b 65 64 0a 2a  rm an unpacked.*
21a10 2a 20 72 65 63 6f 72 64 2e 0a 2a 2a 0a 2a 2a 20  * record..**.** 
21a20 43 75 72 73 6f 72 20 50 31 20 69 73 20 6f 6e 20  Cursor P1 is on 
21a30 61 6e 20 69 6e 64 65 78 20 62 74 72 65 65 2e 20  an index btree. 
21a40 20 49 66 20 74 68 65 20 72 65 63 6f 72 64 20 69   If the record i
21a50 64 65 6e 74 69 66 69 65 64 20 62 79 20 50 33 20  dentified by P3 
21a60 61 6e 64 20 50 34 0a 2a 2a 20 69 73 20 61 20 70  and P4.** is a p
21a70 72 65 66 69 78 20 6f 66 20 61 6e 79 20 65 6e 74  refix of any ent
21a80 72 79 20 69 6e 20 50 31 20 74 68 65 6e 20 61 20  ry in P1 then a 
21a90 6a 75 6d 70 20 69 73 20 6d 61 64 65 20 74 6f 20  jump is made to 
21aa0 50 32 20 61 6e 64 0a 2a 2a 20 50 31 20 69 73 20  P2 and.** P1 is 
21ab0 6c 65 66 74 20 70 6f 69 6e 74 69 6e 67 20 61 74  left pointing at
21ac0 20 74 68 65 20 6d 61 74 63 68 69 6e 67 20 65 6e   the matching en
21ad0 74 72 79 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20  try..**.** This 
21ae0 6f 70 65 72 61 74 69 6f 6e 20 6c 65 61 76 65 73  operation leaves
21af0 20 74 68 65 20 63 75 72 73 6f 72 20 69 6e 20 61   the cursor in a
21b00 20 73 74 61 74 65 20 77 68 65 72 65 20 69 74 20   state where it 
21b10 63 61 6e 20 62 65 0a 2a 2a 20 61 64 76 61 6e 63  can be.** advanc
21b20 65 64 20 69 6e 20 74 68 65 20 66 6f 72 77 61 72  ed in the forwar
21b30 64 20 64 69 72 65 63 74 69 6f 6e 2e 20 20 54 68  d direction.  Th
21b40 65 20 4e 65 78 74 20 69 6e 73 74 72 75 63 74 69  e Next instructi
21b50 6f 6e 20 77 69 6c 6c 20 77 6f 72 6b 2c 0a 2a 2a  on will work,.**
21b60 20 62 75 74 20 6e 6f 74 20 74 68 65 20 50 72 65   but not the Pre
21b70 76 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a  v instruction..*
21b80 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 4e  *.** See also: N
21b90 6f 74 46 6f 75 6e 64 2c 20 4e 6f 43 6f 6e 66 6c  otFound, NoConfl
21ba0 69 63 74 2c 20 4e 6f 74 45 78 69 73 74 73 2e 20  ict, NotExists. 
21bb0 53 65 65 6b 47 65 0a 2a 2f 0a 2f 2a 20 4f 70 63  SeekGe.*/./* Opc
21bc0 6f 64 65 3a 20 4e 6f 74 46 6f 75 6e 64 20 50 31  ode: NotFound P1
21bd0 20 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a 20 53   P2 P3 P4 *.** S
21be0 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50  ynopsis: key=r[P
21bf0 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 49 66 20 50  3@P4].**.** If P
21c00 34 3d 3d 30 20 74 68 65 6e 20 72 65 67 69 73 74  4==0 then regist
21c10 65 72 20 50 33 20 68 6f 6c 64 73 20 61 20 62 6c  er P3 holds a bl
21c20 6f 62 20 63 6f 6e 73 74 72 75 63 74 65 64 20 62  ob constructed b
21c30 79 20 4d 61 6b 65 52 65 63 6f 72 64 2e 20 20 49  y MakeRecord.  I
21c40 66 0a 2a 2a 20 50 34 3e 30 20 74 68 65 6e 20 72  f.** P4>0 then r
21c50 65 67 69 73 74 65 72 20 50 33 20 69 73 20 74 68  egister P3 is th
21c60 65 20 66 69 72 73 74 20 6f 66 20 50 34 20 72 65  e first of P4 re
21c70 67 69 73 74 65 72 73 20 74 68 61 74 20 66 6f 72  gisters that for
21c80 6d 20 61 6e 20 75 6e 70 61 63 6b 65 64 0a 2a 2a  m an unpacked.**
21c90 20 72 65 63 6f 72 64 2e 0a 2a 2a 20 0a 2a 2a 20   record..** .** 
21ca0 43 75 72 73 6f 72 20 50 31 20 69 73 20 6f 6e 20  Cursor P1 is on 
21cb0 61 6e 20 69 6e 64 65 78 20 62 74 72 65 65 2e 20  an index btree. 
21cc0 20 49 66 20 74 68 65 20 72 65 63 6f 72 64 20 69   If the record i
21cd0 64 65 6e 74 69 66 69 65 64 20 62 79 20 50 33 20  dentified by P3 
21ce0 61 6e 64 20 50 34 0a 2a 2a 20 69 73 20 6e 6f 74  and P4.** is not
21cf0 20 74 68 65 20 70 72 65 66 69 78 20 6f 66 20 61   the prefix of a
21d00 6e 79 20 65 6e 74 72 79 20 69 6e 20 50 31 20 74  ny entry in P1 t
21d10 68 65 6e 20 61 20 6a 75 6d 70 20 69 73 20 6d 61  hen a jump is ma
21d20 64 65 20 74 6f 20 50 32 2e 20 20 49 66 20 50 31  de to P2.  If P1
21d30 20 0a 2a 2a 20 64 6f 65 73 20 63 6f 6e 74 61 69   .** does contai
21d40 6e 20 61 6e 20 65 6e 74 72 79 20 77 68 6f 73 65  n an entry whose
21d50 20 70 72 65 66 69 78 20 6d 61 74 63 68 65 73 20   prefix matches 
21d60 74 68 65 20 50 33 2f 50 34 20 72 65 63 6f 72 64  the P3/P4 record
21d70 20 74 68 65 6e 20 63 6f 6e 74 72 6f 6c 0a 2a 2a   then control.**
21d80 20 66 61 6c 6c 73 20 74 68 72 6f 75 67 68 20 74   falls through t
21d90 6f 20 74 68 65 20 6e 65 78 74 20 69 6e 73 74 72  o the next instr
21da0 75 63 74 69 6f 6e 20 61 6e 64 20 50 31 20 69 73  uction and P1 is
21db0 20 6c 65 66 74 20 70 6f 69 6e 74 69 6e 67 20 61   left pointing a
21dc0 74 20 74 68 65 0a 2a 2a 20 6d 61 74 63 68 69 6e  t the.** matchin
21dd0 67 20 65 6e 74 72 79 2e 0a 2a 2a 0a 2a 2a 20 54  g entry..**.** T
21de0 68 69 73 20 6f 70 65 72 61 74 69 6f 6e 20 6c 65  his operation le
21df0 61 76 65 73 20 74 68 65 20 63 75 72 73 6f 72 20  aves the cursor 
21e00 69 6e 20 61 20 73 74 61 74 65 20 77 68 65 72 65  in a state where
21e10 20 69 74 20 63 61 6e 6e 6f 74 20 62 65 0a 2a 2a   it cannot be.**
21e20 20 61 64 76 61 6e 63 65 64 20 69 6e 20 65 69 74   advanced in eit
21e30 68 65 72 20 64 69 72 65 63 74 69 6f 6e 2e 20 20  her direction.  
21e40 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20  In other words, 
21e50 74 68 65 20 4e 65 78 74 20 61 6e 64 20 50 72 65  the Next and Pre
21e60 76 0a 2a 2a 20 6f 70 63 6f 64 65 73 20 64 6f 20  v.** opcodes do 
21e70 6e 6f 74 20 77 6f 72 6b 20 61 66 74 65 72 20 74  not work after t
21e80 68 69 73 20 6f 70 65 72 61 74 69 6f 6e 2e 0a 2a  his operation..*
21e90 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 46  *.** See also: F
21ea0 6f 75 6e 64 2c 20 4e 6f 74 45 78 69 73 74 73 2c  ound, NotExists,
21eb0 20 4e 6f 43 6f 6e 66 6c 69 63 74 0a 2a 2f 0a 2f   NoConflict.*/./
21ec0 2a 20 4f 70 63 6f 64 65 3a 20 4e 6f 43 6f 6e 66  * Opcode: NoConf
21ed0 6c 69 63 74 20 50 31 20 50 32 20 50 33 20 50 34  lict P1 P2 P3 P4
21ee0 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
21ef0 6b 65 79 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a  key=r[P3@P4].**.
21f00 2a 2a 20 49 66 20 50 34 3d 3d 30 20 74 68 65 6e  ** If P4==0 then
21f10 20 72 65 67 69 73 74 65 72 20 50 33 20 68 6f 6c   register P3 hol
21f20 64 73 20 61 20 62 6c 6f 62 20 63 6f 6e 73 74 72  ds a blob constr
21f30 75 63 74 65 64 20 62 79 20 4d 61 6b 65 52 65 63  ucted by MakeRec
21f40 6f 72 64 2e 20 20 49 66 0a 2a 2a 20 50 34 3e 30  ord.  If.** P4>0
21f50 20 74 68 65 6e 20 72 65 67 69 73 74 65 72 20 50   then register P
21f60 33 20 69 73 20 74 68 65 20 66 69 72 73 74 20 6f  3 is the first o
21f70 66 20 50 34 20 72 65 67 69 73 74 65 72 73 20 74  f P4 registers t
21f80 68 61 74 20 66 6f 72 6d 20 61 6e 20 75 6e 70 61  hat form an unpa
21f90 63 6b 65 64 0a 2a 2a 20 72 65 63 6f 72 64 2e 0a  cked.** record..
21fa0 2a 2a 20 0a 2a 2a 20 43 75 72 73 6f 72 20 50 31  ** .** Cursor P1
21fb0 20 69 73 20 6f 6e 20 61 6e 20 69 6e 64 65 78 20   is on an index 
21fc0 62 74 72 65 65 2e 20 20 49 66 20 74 68 65 20 72  btree.  If the r
21fd0 65 63 6f 72 64 20 69 64 65 6e 74 69 66 69 65 64  ecord identified
21fe0 20 62 79 20 50 33 20 61 6e 64 20 50 34 0a 2a 2a   by P3 and P4.**
21ff0 20 63 6f 6e 74 61 69 6e 73 20 61 6e 79 20 4e 55   contains any NU
22000 4c 4c 20 76 61 6c 75 65 2c 20 6a 75 6d 70 20 69  LL value, jump i
22010 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f 20 50 32  mmediately to P2
22020 2e 20 20 49 66 20 61 6c 6c 20 74 65 72 6d 73 20  .  If all terms 
22030 6f 66 20 74 68 65 0a 2a 2a 20 72 65 63 6f 72 64  of the.** record
22040 20 61 72 65 20 6e 6f 74 2d 4e 55 4c 4c 20 74 68   are not-NULL th
22050 65 6e 20 61 20 63 68 65 63 6b 20 69 73 20 64 6f  en a check is do
22060 6e 65 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 20  ne to determine 
22070 69 66 20 61 6e 79 20 72 6f 77 20 69 6e 20 74 68  if any row in th
22080 65 0a 2a 2a 20 50 31 20 69 6e 64 65 78 20 62 74  e.** P1 index bt
22090 72 65 65 20 68 61 73 20 61 20 6d 61 74 63 68 69  ree has a matchi
220a0 6e 67 20 6b 65 79 20 70 72 65 66 69 78 2e 20 20  ng key prefix.  
220b0 49 66 20 74 68 65 72 65 20 61 72 65 20 6e 6f 20  If there are no 
220c0 6d 61 74 63 68 65 73 2c 20 6a 75 6d 70 0a 2a 2a  matches, jump.**
220d0 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f 20   immediately to 
220e0 50 32 2e 20 20 49 66 20 74 68 65 72 65 20 69 73  P2.  If there is
220f0 20 61 20 6d 61 74 63 68 2c 20 66 61 6c 6c 20 74   a match, fall t
22100 68 72 6f 75 67 68 20 61 6e 64 20 6c 65 61 76 65  hrough and leave
22110 20 74 68 65 20 50 31 0a 2a 2a 20 63 75 72 73 6f   the P1.** curso
22120 72 20 70 6f 69 6e 74 69 6e 67 20 74 6f 20 74 68  r pointing to th
22130 65 20 6d 61 74 63 68 69 6e 67 20 72 6f 77 2e 0a  e matching row..
22140 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64  **.** This opcod
22150 65 20 69 73 20 73 69 6d 69 6c 61 72 20 74 6f 20  e is similar to 
22160 4f 50 5f 4e 6f 74 46 6f 75 6e 64 20 77 69 74 68  OP_NotFound with
22170 20 74 68 65 20 65 78 63 65 70 74 69 6f 6e 73 20   the exceptions 
22180 74 68 61 74 20 74 68 65 0a 2a 2a 20 62 72 61 6e  that the.** bran
22190 63 68 20 69 73 20 61 6c 77 61 79 73 20 74 61 6b  ch is always tak
221a0 65 6e 20 69 66 20 61 6e 79 20 70 61 72 74 20 6f  en if any part o
221b0 66 20 74 68 65 20 73 65 61 72 63 68 20 6b 65 79  f the search key
221c0 20 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2e 0a   input is NULL..
221d0 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 65 72 61  **.** This opera
221e0 74 69 6f 6e 20 6c 65 61 76 65 73 20 74 68 65 20  tion leaves the 
221f0 63 75 72 73 6f 72 20 69 6e 20 61 20 73 74 61 74  cursor in a stat
22200 65 20 77 68 65 72 65 20 69 74 20 63 61 6e 6e 6f  e where it canno
22210 74 20 62 65 0a 2a 2a 20 61 64 76 61 6e 63 65 64  t be.** advanced
22220 20 69 6e 20 65 69 74 68 65 72 20 64 69 72 65 63   in either direc
22230 74 69 6f 6e 2e 20 20 49 6e 20 6f 74 68 65 72 20  tion.  In other 
22240 77 6f 72 64 73 2c 20 74 68 65 20 4e 65 78 74 20  words, the Next 
22250 61 6e 64 20 50 72 65 76 0a 2a 2a 20 6f 70 63 6f  and Prev.** opco
22260 64 65 73 20 64 6f 20 6e 6f 74 20 77 6f 72 6b 20  des do not work 
22270 61 66 74 65 72 20 74 68 69 73 20 6f 70 65 72 61  after this opera
22280 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20  tion..**.** See 
22290 61 6c 73 6f 3a 20 4e 6f 74 46 6f 75 6e 64 2c 20  also: NotFound, 
222a0 46 6f 75 6e 64 2c 20 4e 6f 74 45 78 69 73 74 73  Found, NotExists
222b0 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 6f 43 6f  .*/.case OP_NoCo
222c0 6e 66 6c 69 63 74 3a 20 20 20 20 20 2f 2a 20 6a  nflict:     /* j
222d0 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65  ump, in3 */.case
222e0 20 4f 50 5f 4e 6f 74 46 6f 75 6e 64 3a 20 20 20   OP_NotFound:   
222f0 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33      /* jump, in3
22300 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 46 6f 75 6e   */.case OP_Foun
22310 64 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a  d: {        /* j
22320 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 20 20 69 6e  ump, in3 */.  in
22330 74 20 61 6c 72 65 61 64 79 45 78 69 73 74 73 3b  t alreadyExists;
22340 0a 20 20 69 6e 74 20 74 61 6b 65 4a 75 6d 70 3b  .  int takeJump;
22350 0a 20 20 69 6e 74 20 69 69 3b 0a 20 20 56 64 62  .  int ii;.  Vdb
22360 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 69  eCursor *pC;.  i
22370 6e 74 20 72 65 73 3b 0a 20 20 55 6e 70 61 63 6b  nt res;.  Unpack
22380 65 64 52 65 63 6f 72 64 20 2a 70 46 72 65 65 3b  edRecord *pFree;
22390 0a 20 20 55 6e 70 61 63 6b 65 64 52 65 63 6f 72  .  UnpackedRecor
223a0 64 20 2a 70 49 64 78 4b 65 79 3b 0a 20 20 55 6e  d *pIdxKey;.  Un
223b0 70 61 63 6b 65 64 52 65 63 6f 72 64 20 72 3b 0a  packedRecord r;.
223c0 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 54  .#ifdef SQLITE_T
223d0 45 53 54 0a 20 20 69 66 28 20 70 4f 70 2d 3e 6f  EST.  if( pOp->o
223e0 70 63 6f 64 65 21 3d 4f 50 5f 4e 6f 43 6f 6e 66  pcode!=OP_NoConf
223f0 6c 69 63 74 20 29 20 73 71 6c 69 74 65 33 5f 66  lict ) sqlite3_f
22400 6f 75 6e 64 5f 63 6f 75 6e 74 2b 2b 3b 0a 23 65  ound_count++;.#e
22410 6e 64 69 66 0a 0a 20 20 61 73 73 65 72 74 28 20  ndif..  assert( 
22420 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f  pOp->p1>=0 && pO
22430 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72  p->p1<p->nCursor
22440 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   );.  assert( pO
22450 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e  p->p4type==P4_IN
22460 54 33 32 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d  T32 );.  pC = p-
22470 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b  >apCsr[pOp->p1];
22480 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30  .  assert( pC!=0
22490 20 29 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54   );.#ifdef SQLIT
224a0 45 5f 44 45 42 55 47 0a 20 20 70 43 2d 3e 73 65  E_DEBUG.  pC->se
224b0 65 6b 4f 70 20 3d 20 70 4f 70 2d 3e 6f 70 63 6f  ekOp = pOp->opco
224c0 64 65 3b 0a 23 65 6e 64 69 66 0a 20 20 70 49 6e  de;.#endif.  pIn
224d0 33 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  3 = &aMem[pOp->p
224e0 33 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43  3];.  assert( pC
224f0 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43 55 52 54  ->eCurType==CURT
22500 59 50 45 5f 42 54 52 45 45 20 29 3b 0a 20 20 61  YPE_BTREE );.  a
22510 73 73 65 72 74 28 20 70 43 2d 3e 75 63 2e 70 43  ssert( pC->uc.pC
22520 75 72 73 6f 72 21 3d 30 20 29 3b 0a 20 20 61 73  ursor!=0 );.  as
22530 73 65 72 74 28 20 70 43 2d 3e 69 73 54 61 62 6c  sert( pC->isTabl
22540 65 3d 3d 30 20 29 3b 0a 20 20 69 66 28 20 70 4f  e==0 );.  if( pO
22550 70 2d 3e 70 34 2e 69 3e 30 20 29 7b 0a 20 20 20  p->p4.i>0 ){.   
22560 20 72 2e 70 4b 65 79 49 6e 66 6f 20 3d 20 70 43   r.pKeyInfo = pC
22570 2d 3e 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 20 20  ->pKeyInfo;.    
22580 72 2e 6e 46 69 65 6c 64 20 3d 20 28 75 31 36 29  r.nField = (u16)
22590 70 4f 70 2d 3e 70 34 2e 69 3b 0a 20 20 20 20 72  pOp->p4.i;.    r
225a0 2e 61 4d 65 6d 20 3d 20 70 49 6e 33 3b 0a 23 69  .aMem = pIn3;.#i
225b0 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55  fdef SQLITE_DEBU
225c0 47 0a 20 20 20 20 66 6f 72 28 69 69 3d 30 3b 20  G.    for(ii=0; 
225d0 69 69 3c 72 2e 6e 46 69 65 6c 64 3b 20 69 69 2b  ii<r.nField; ii+
225e0 2b 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74  +){.      assert
225f0 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 26 72 2e  ( memIsValid(&r.
22600 61 4d 65 6d 5b 69 69 5d 29 20 29 3b 0a 20 20 20  aMem[ii]) );.   
22610 20 20 20 61 73 73 65 72 74 28 20 28 72 2e 61 4d     assert( (r.aM
22620 65 6d 5b 69 69 5d 2e 66 6c 61 67 73 20 26 20 4d  em[ii].flags & M
22630 45 4d 5f 5a 65 72 6f 29 3d 3d 30 20 7c 7c 20 72  EM_Zero)==0 || r
22640 2e 61 4d 65 6d 5b 69 69 5d 2e 6e 3d 3d 30 20 29  .aMem[ii].n==0 )
22650 3b 0a 20 20 20 20 20 20 69 66 28 20 69 69 20 29  ;.      if( ii )
22660 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28   REGISTER_TRACE(
22670 70 4f 70 2d 3e 70 33 2b 69 69 2c 20 26 72 2e 61  pOp->p3+ii, &r.a
22680 4d 65 6d 5b 69 69 5d 29 3b 0a 20 20 20 20 7d 0a  Mem[ii]);.    }.
22690 23 65 6e 64 69 66 0a 20 20 20 20 70 49 64 78 4b  #endif.    pIdxK
226a0 65 79 20 3d 20 26 72 3b 0a 20 20 20 20 70 46 72  ey = &r;.    pFr
226b0 65 65 20 3d 20 30 3b 0a 20 20 7d 65 6c 73 65 7b  ee = 0;.  }else{
226c0 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 49 6e  .    assert( pIn
226d0 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 42  3->flags & MEM_B
226e0 6c 6f 62 20 29 3b 0a 20 20 20 20 72 63 20 3d 20  lob );.    rc = 
226f0 45 78 70 61 6e 64 42 6c 6f 62 28 70 49 6e 33 29  ExpandBlob(pIn3)
22700 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 72 63  ;.    assert( rc
22710 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 7c 7c 20 72  ==SQLITE_OK || r
22720 63 3d 3d 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 20  c==SQLITE_NOMEM 
22730 29 3b 0a 20 20 20 20 69 66 28 20 72 63 20 29 20  );.    if( rc ) 
22740 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 20  goto no_mem;.   
22750 20 70 46 72 65 65 20 3d 20 70 49 64 78 4b 65 79   pFree = pIdxKey
22760 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 41 6c   = sqlite3VdbeAl
22770 6c 6f 63 55 6e 70 61 63 6b 65 64 52 65 63 6f 72  locUnpackedRecor
22780 64 28 70 43 2d 3e 70 4b 65 79 49 6e 66 6f 29 3b  d(pC->pKeyInfo);
22790 0a 20 20 20 20 69 66 28 20 70 49 64 78 4b 65 79  .    if( pIdxKey
227a0 3d 3d 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65  ==0 ) goto no_me
227b0 6d 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  m;.    sqlite3Vd
227c0 62 65 52 65 63 6f 72 64 55 6e 70 61 63 6b 28 70  beRecordUnpack(p
227d0 43 2d 3e 70 4b 65 79 49 6e 66 6f 2c 20 70 49 6e  C->pKeyInfo, pIn
227e0 33 2d 3e 6e 2c 20 70 49 6e 33 2d 3e 7a 2c 20 70  3->n, pIn3->z, p
227f0 49 64 78 4b 65 79 29 3b 0a 20 20 7d 0a 20 20 70  IdxKey);.  }.  p
22800 49 64 78 4b 65 79 2d 3e 64 65 66 61 75 6c 74 5f  IdxKey->default_
22810 72 63 20 3d 20 30 3b 0a 20 20 74 61 6b 65 4a 75  rc = 0;.  takeJu
22820 6d 70 20 3d 20 30 3b 0a 20 20 69 66 28 20 70 4f  mp = 0;.  if( pO
22830 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4e 6f  p->opcode==OP_No
22840 43 6f 6e 66 6c 69 63 74 20 29 7b 0a 20 20 20 20  Conflict ){.    
22850 2f 2a 20 46 6f 72 20 74 68 65 20 4f 50 5f 4e 6f  /* For the OP_No
22860 43 6f 6e 66 6c 69 63 74 20 6f 70 63 6f 64 65 2c  Conflict opcode,
22870 20 74 61 6b 65 20 74 68 65 20 6a 75 6d 70 20 69   take the jump i
22880 66 20 61 6e 79 20 6f 66 20 74 68 65 0a 20 20 20  f any of the.   
22890 20 2a 2a 20 69 6e 70 75 74 20 66 69 65 6c 64 73   ** input fields
228a0 20 61 72 65 20 4e 55 4c 4c 2c 20 73 69 6e 63 65   are NULL, since
228b0 20 61 6e 79 20 6b 65 79 20 77 69 74 68 20 61 20   any key with a 
228c0 4e 55 4c 4c 20 77 69 6c 6c 20 6e 6f 74 0a 20 20  NULL will not.  
228d0 20 20 2a 2a 20 63 6f 6e 66 6c 69 63 74 20 2a 2f    ** conflict */
228e0 0a 20 20 20 20 66 6f 72 28 69 69 3d 30 3b 20 69  .    for(ii=0; i
228f0 69 3c 70 49 64 78 4b 65 79 2d 3e 6e 46 69 65 6c  i<pIdxKey->nFiel
22900 64 3b 20 69 69 2b 2b 29 7b 0a 20 20 20 20 20 20  d; ii++){.      
22910 69 66 28 20 70 49 64 78 4b 65 79 2d 3e 61 4d 65  if( pIdxKey->aMe
22920 6d 5b 69 69 5d 2e 66 6c 61 67 73 20 26 20 4d 45  m[ii].flags & ME
22930 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 20 20  M_Null ){.      
22940 20 20 74 61 6b 65 4a 75 6d 70 20 3d 20 31 3b 0a    takeJump = 1;.
22950 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20          break;. 
22960 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d       }.    }.  }
22970 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42  .  rc = sqlite3B
22980 74 72 65 65 4d 6f 76 65 74 6f 55 6e 70 61 63 6b  treeMovetoUnpack
22990 65 64 28 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f  ed(pC->uc.pCurso
229a0 72 2c 20 70 49 64 78 4b 65 79 2c 20 30 2c 20 30  r, pIdxKey, 0, 0
229b0 2c 20 26 72 65 73 29 3b 0a 20 20 69 66 28 20 70  , &res);.  if( p
229c0 46 72 65 65 20 29 20 73 71 6c 69 74 65 33 44 62  Free ) sqlite3Db
229d0 46 72 65 65 4e 4e 28 64 62 2c 20 70 46 72 65 65  FreeNN(db, pFree
229e0 29 3b 0a 20 20 69 66 28 20 72 63 21 3d 53 51 4c  );.  if( rc!=SQL
229f0 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 67 6f  ITE_OK ){.    go
22a00 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
22a10 65 72 72 6f 72 3b 0a 20 20 7d 0a 20 20 70 43 2d  error;.  }.  pC-
22a20 3e 73 65 65 6b 52 65 73 75 6c 74 20 3d 20 72 65  >seekResult = re
22a30 73 3b 0a 20 20 61 6c 72 65 61 64 79 45 78 69 73  s;.  alreadyExis
22a40 74 73 20 3d 20 28 72 65 73 3d 3d 30 29 3b 0a 20  ts = (res==0);. 
22a50 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 31   pC->nullRow = 1
22a60 2d 61 6c 72 65 61 64 79 45 78 69 73 74 73 3b 0a  -alreadyExists;.
22a70 20 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f    pC->deferredMo
22a80 76 65 74 6f 20 3d 20 30 3b 0a 20 20 70 43 2d 3e  veto = 0;.  pC->
22a90 63 61 63 68 65 53 74 61 74 75 73 20 3d 20 43 41  cacheStatus = CA
22aa0 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20 69 66 28  CHE_STALE;.  if(
22ab0 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50   pOp->opcode==OP
22ac0 5f 46 6f 75 6e 64 20 29 7b 0a 20 20 20 20 56 64  _Found ){.    Vd
22ad0 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 61 6c  beBranchTaken(al
22ae0 72 65 61 64 79 45 78 69 73 74 73 21 3d 30 2c 32  readyExists!=0,2
22af0 29 3b 0a 20 20 20 20 69 66 28 20 61 6c 72 65 61  );.    if( alrea
22b00 64 79 45 78 69 73 74 73 20 29 20 67 6f 74 6f 20  dyExists ) goto 
22b10 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 7d 65  jump_to_p2;.  }e
22b20 6c 73 65 7b 0a 20 20 20 20 56 64 62 65 42 72 61  lse{.    VdbeBra
22b30 6e 63 68 54 61 6b 65 6e 28 74 61 6b 65 4a 75 6d  nchTaken(takeJum
22b40 70 7c 7c 61 6c 72 65 61 64 79 45 78 69 73 74 73  p||alreadyExists
22b50 3d 3d 30 2c 32 29 3b 0a 20 20 20 20 69 66 28 20  ==0,2);.    if( 
22b60 74 61 6b 65 4a 75 6d 70 20 7c 7c 20 21 61 6c 72  takeJump || !alr
22b70 65 61 64 79 45 78 69 73 74 73 20 29 20 67 6f 74  eadyExists ) got
22b80 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20  o jump_to_p2;.  
22b90 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  }.  break;.}../*
22ba0 20 4f 70 63 6f 64 65 3a 20 53 65 65 6b 52 6f 77   Opcode: SeekRow
22bb0 69 64 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a  id P1 P2 P3 * *.
22bc0 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 6e 74  ** Synopsis: int
22bd0 6b 65 79 3d 72 5b 50 33 5d 0a 2a 2a 0a 2a 2a 20  key=r[P3].**.** 
22be0 50 31 20 69 73 20 74 68 65 20 69 6e 64 65 78 20  P1 is the index 
22bf0 6f 66 20 61 20 63 75 72 73 6f 72 20 6f 70 65 6e  of a cursor open
22c00 20 6f 6e 20 61 6e 20 53 51 4c 20 74 61 62 6c 65   on an SQL table
22c10 20 62 74 72 65 65 20 28 77 69 74 68 20 69 6e 74   btree (with int
22c20 65 67 65 72 0a 2a 2a 20 6b 65 79 73 29 2e 20 20  eger.** keys).  
22c30 49 66 20 72 65 67 69 73 74 65 72 20 50 33 20 64  If register P3 d
22c40 6f 65 73 20 6e 6f 74 20 63 6f 6e 74 61 69 6e 20  oes not contain 
22c50 61 6e 20 69 6e 74 65 67 65 72 20 6f 72 20 69 66  an integer or if
22c60 20 50 31 20 64 6f 65 73 20 6e 6f 74 0a 2a 2a 20   P1 does not.** 
22c70 63 6f 6e 74 61 69 6e 20 61 20 72 65 63 6f 72 64  contain a record
22c80 20 77 69 74 68 20 72 6f 77 69 64 20 50 33 20 74   with rowid P3 t
22c90 68 65 6e 20 6a 75 6d 70 20 69 6d 6d 65 64 69 61  hen jump immedia
22ca0 74 65 6c 79 20 74 6f 20 50 32 2e 20 20 0a 2a 2a  tely to P2.  .**
22cb0 20 4f 72 2c 20 69 66 20 50 32 20 69 73 20 30 2c   Or, if P2 is 0,
22cc0 20 72 61 69 73 65 20 61 6e 20 53 51 4c 49 54 45   raise an SQLITE
22cd0 5f 43 4f 52 52 55 50 54 20 65 72 72 6f 72 2e 20  _CORRUPT error. 
22ce0 49 66 20 50 31 20 64 6f 65 73 20 63 6f 6e 74 61  If P1 does conta
22cf0 69 6e 0a 2a 2a 20 61 20 72 65 63 6f 72 64 20 77  in.** a record w
22d00 69 74 68 20 72 6f 77 69 64 20 50 33 20 74 68 65  ith rowid P3 the
22d10 6e 20 0a 2a 2a 20 6c 65 61 76 65 20 74 68 65 20  n .** leave the 
22d20 63 75 72 73 6f 72 20 70 6f 69 6e 74 69 6e 67 20  cursor pointing 
22d30 61 74 20 74 68 61 74 20 72 65 63 6f 72 64 20 61  at that record a
22d40 6e 64 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 20  nd fall through 
22d50 74 6f 20 74 68 65 20 6e 65 78 74 0a 2a 2a 20 69  to the next.** i
22d60 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a  nstruction..**.*
22d70 2a 20 54 68 65 20 4f 50 5f 4e 6f 74 45 78 69 73  * The OP_NotExis
22d80 74 73 20 6f 70 63 6f 64 65 20 70 65 72 66 6f 72  ts opcode perfor
22d90 6d 73 20 74 68 65 20 73 61 6d 65 20 6f 70 65 72  ms the same oper
22da0 61 74 69 6f 6e 2c 20 62 75 74 20 77 69 74 68 20  ation, but with 
22db0 4f 50 5f 4e 6f 74 45 78 69 73 74 73 0a 2a 2a 20  OP_NotExists.** 
22dc0 74 68 65 20 50 33 20 72 65 67 69 73 74 65 72 20  the P3 register 
22dd0 6d 75 73 74 20 62 65 20 67 75 61 72 61 6e 74 65  must be guarante
22de0 65 64 20 74 6f 20 63 6f 6e 74 61 69 6e 20 61 6e  ed to contain an
22df0 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65 2e 20   integer value. 
22e00 20 57 69 74 68 20 74 68 69 73 0a 2a 2a 20 6f 70   With this.** op
22e10 63 6f 64 65 2c 20 72 65 67 69 73 74 65 72 20 50  code, register P
22e20 33 20 6d 69 67 68 74 20 6e 6f 74 20 63 6f 6e 74  3 might not cont
22e30 61 69 6e 20 61 6e 20 69 6e 74 65 67 65 72 2e 0a  ain an integer..
22e40 2a 2a 0a 2a 2a 20 54 68 65 20 4f 50 5f 4e 6f 74  **.** The OP_Not
22e50 46 6f 75 6e 64 20 6f 70 63 6f 64 65 20 70 65 72  Found opcode per
22e60 66 6f 72 6d 73 20 74 68 65 20 73 61 6d 65 20 6f  forms the same o
22e70 70 65 72 61 74 69 6f 6e 20 6f 6e 20 69 6e 64 65  peration on inde
22e80 78 20 62 74 72 65 65 73 0a 2a 2a 20 28 77 69 74  x btrees.** (wit
22e90 68 20 61 72 62 69 74 72 61 72 79 20 6d 75 6c 74  h arbitrary mult
22ea0 69 2d 76 61 6c 75 65 20 6b 65 79 73 29 2e 0a 2a  i-value keys)..*
22eb0 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65  *.** This opcode
22ec0 20 6c 65 61 76 65 73 20 74 68 65 20 63 75 72 73   leaves the curs
22ed0 6f 72 20 69 6e 20 61 20 73 74 61 74 65 20 77 68  or in a state wh
22ee0 65 72 65 20 69 74 20 63 61 6e 6e 6f 74 20 62 65  ere it cannot be
22ef0 20 61 64 76 61 6e 63 65 64 0a 2a 2a 20 69 6e 20   advanced.** in 
22f00 65 69 74 68 65 72 20 64 69 72 65 63 74 69 6f 6e  either direction
22f10 2e 20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64  .  In other word
22f20 73 2c 20 74 68 65 20 4e 65 78 74 20 61 6e 64 20  s, the Next and 
22f30 50 72 65 76 20 6f 70 63 6f 64 65 73 20 77 69 6c  Prev opcodes wil
22f40 6c 0a 2a 2a 20 6e 6f 74 20 77 6f 72 6b 20 66 6f  l.** not work fo
22f50 6c 6c 6f 77 69 6e 67 20 74 68 69 73 20 6f 70 63  llowing this opc
22f60 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61  ode..**.** See a
22f70 6c 73 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f 74 46  lso: Found, NotF
22f80 6f 75 6e 64 2c 20 4e 6f 43 6f 6e 66 6c 69 63 74  ound, NoConflict
22f90 2c 20 53 65 65 6b 52 6f 77 69 64 0a 2a 2f 0a 2f  , SeekRowid.*/./
22fa0 2a 20 4f 70 63 6f 64 65 3a 20 4e 6f 74 45 78 69  * Opcode: NotExi
22fb0 73 74 73 20 50 31 20 50 32 20 50 33 20 2a 20 2a  sts P1 P2 P3 * *
22fc0 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 6e  .** Synopsis: in
22fd0 74 6b 65 79 3d 72 5b 50 33 5d 0a 2a 2a 0a 2a 2a  tkey=r[P3].**.**
22fe0 20 50 31 20 69 73 20 74 68 65 20 69 6e 64 65 78   P1 is the index
22ff0 20 6f 66 20 61 20 63 75 72 73 6f 72 20 6f 70 65   of a cursor ope
23000 6e 20 6f 6e 20 61 6e 20 53 51 4c 20 74 61 62 6c  n on an SQL tabl
23010 65 20 62 74 72 65 65 20 28 77 69 74 68 20 69 6e  e btree (with in
23020 74 65 67 65 72 0a 2a 2a 20 6b 65 79 73 29 2e 20  teger.** keys). 
23030 20 50 33 20 69 73 20 61 6e 20 69 6e 74 65 67 65   P3 is an intege
23040 72 20 72 6f 77 69 64 2e 20 20 49 66 20 50 31 20  r rowid.  If P1 
23050 64 6f 65 73 20 6e 6f 74 20 63 6f 6e 74 61 69 6e  does not contain
23060 20 61 20 72 65 63 6f 72 64 20 77 69 74 68 0a 2a   a record with.*
23070 2a 20 72 6f 77 69 64 20 50 33 20 74 68 65 6e 20  * rowid P3 then 
23080 6a 75 6d 70 20 69 6d 6d 65 64 69 61 74 65 6c 79  jump immediately
23090 20 74 6f 20 50 32 2e 20 20 4f 72 2c 20 69 66 20   to P2.  Or, if 
230a0 50 32 20 69 73 20 30 2c 20 72 61 69 73 65 20 61  P2 is 0, raise a
230b0 6e 0a 2a 2a 20 53 51 4c 49 54 45 5f 43 4f 52 52  n.** SQLITE_CORR
230c0 55 50 54 20 65 72 72 6f 72 2e 20 49 66 20 50 31  UPT error. If P1
230d0 20 64 6f 65 73 20 63 6f 6e 74 61 69 6e 20 61 20   does contain a 
230e0 72 65 63 6f 72 64 20 77 69 74 68 20 72 6f 77 69  record with rowi
230f0 64 20 50 33 20 74 68 65 6e 20 0a 2a 2a 20 6c 65  d P3 then .** le
23100 61 76 65 20 74 68 65 20 63 75 72 73 6f 72 20 70  ave the cursor p
23110 6f 69 6e 74 69 6e 67 20 61 74 20 74 68 61 74 20  ointing at that 
23120 72 65 63 6f 72 64 20 61 6e 64 20 66 61 6c 6c 20  record and fall 
23130 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6e  through to the n
23140 65 78 74 0a 2a 2a 20 69 6e 73 74 72 75 63 74 69  ext.** instructi
23150 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 4f 50  on..**.** The OP
23160 5f 53 65 65 6b 52 6f 77 69 64 20 6f 70 63 6f 64  _SeekRowid opcod
23170 65 20 70 65 72 66 6f 72 6d 73 20 74 68 65 20 73  e performs the s
23180 61 6d 65 20 6f 70 65 72 61 74 69 6f 6e 20 62 75  ame operation bu
23190 74 20 61 6c 73 6f 20 61 6c 6c 6f 77 73 20 74 68  t also allows th
231a0 65 0a 2a 2a 20 50 33 20 72 65 67 69 73 74 65 72  e.** P3 register
231b0 20 74 6f 20 63 6f 6e 74 61 69 6e 20 61 20 6e 6f   to contain a no
231c0 6e 2d 69 6e 74 65 67 65 72 20 76 61 6c 75 65 2c  n-integer value,
231d0 20 69 6e 20 77 68 69 63 68 20 63 61 73 65 20 74   in which case t
231e0 68 65 20 6a 75 6d 70 20 69 73 0a 2a 2a 20 61 6c  he jump is.** al
231f0 77 61 79 73 20 74 61 6b 65 6e 2e 20 20 54 68 69  ways taken.  Thi
23200 73 20 6f 70 63 6f 64 65 20 72 65 71 75 69 72 65  s opcode require
23210 73 20 74 68 61 74 20 50 33 20 61 6c 77 61 79 73  s that P3 always
23220 20 63 6f 6e 74 61 69 6e 20 61 6e 20 69 6e 74 65   contain an inte
23230 67 65 72 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 4f  ger..**.** The O
23240 50 5f 4e 6f 74 46 6f 75 6e 64 20 6f 70 63 6f 64  P_NotFound opcod
23250 65 20 70 65 72 66 6f 72 6d 73 20 74 68 65 20 73  e performs the s
23260 61 6d 65 20 6f 70 65 72 61 74 69 6f 6e 20 6f 6e  ame operation on
23270 20 69 6e 64 65 78 20 62 74 72 65 65 73 0a 2a 2a   index btrees.**
23280 20 28 77 69 74 68 20 61 72 62 69 74 72 61 72 79   (with arbitrary
23290 20 6d 75 6c 74 69 2d 76 61 6c 75 65 20 6b 65 79   multi-value key
232a0 73 29 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f  s)..**.** This o
232b0 70 63 6f 64 65 20 6c 65 61 76 65 73 20 74 68 65  pcode leaves the
232c0 20 63 75 72 73 6f 72 20 69 6e 20 61 20 73 74 61   cursor in a sta
232d0 74 65 20 77 68 65 72 65 20 69 74 20 63 61 6e 6e  te where it cann
232e0 6f 74 20 62 65 20 61 64 76 61 6e 63 65 64 0a 2a  ot be advanced.*
232f0 2a 20 69 6e 20 65 69 74 68 65 72 20 64 69 72 65  * in either dire
23300 63 74 69 6f 6e 2e 20 20 49 6e 20 6f 74 68 65 72  ction.  In other
23310 20 77 6f 72 64 73 2c 20 74 68 65 20 4e 65 78 74   words, the Next
23320 20 61 6e 64 20 50 72 65 76 20 6f 70 63 6f 64 65   and Prev opcode
23330 73 20 77 69 6c 6c 0a 2a 2a 20 6e 6f 74 20 77 6f  s will.** not wo
23340 72 6b 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 68 69  rk following thi
23350 73 20 6f 70 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20  s opcode..**.** 
23360 53 65 65 20 61 6c 73 6f 3a 20 46 6f 75 6e 64 2c  See also: Found,
23370 20 4e 6f 74 46 6f 75 6e 64 2c 20 4e 6f 43 6f 6e   NotFound, NoCon
23380 66 6c 69 63 74 2c 20 53 65 65 6b 52 6f 77 69 64  flict, SeekRowid
23390 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 65 65 6b  .*/.case OP_Seek
233a0 52 6f 77 69 64 3a 20 7b 20 20 20 20 20 20 20 20  Rowid: {        
233b0 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a  /* jump, in3 */.
233c0 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43    VdbeCursor *pC
233d0 3b 0a 20 20 42 74 43 75 72 73 6f 72 20 2a 70 43  ;.  BtCursor *pC
233e0 72 73 72 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a  rsr;.  int res;.
233f0 20 20 75 36 34 20 69 4b 65 79 3b 0a 0a 20 20 70    u64 iKey;..  p
23400 49 6e 33 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In3 = &aMem[pOp-
23410 3e 70 33 5d 3b 0a 20 20 69 66 28 20 28 70 49 6e  >p3];.  if( (pIn
23420 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49  3->flags & MEM_I
23430 6e 74 29 3d 3d 30 20 29 7b 0a 20 20 20 20 61 70  nt)==0 ){.    ap
23440 70 6c 79 41 66 66 69 6e 69 74 79 28 70 49 6e 33  plyAffinity(pIn3
23450 2c 20 53 51 4c 49 54 45 5f 41 46 46 5f 4e 55 4d  , SQLITE_AFF_NUM
23460 45 52 49 43 2c 20 65 6e 63 6f 64 69 6e 67 29 3b  ERIC, encoding);
23470 0a 20 20 20 20 69 66 28 20 28 70 49 6e 33 2d 3e  .    if( (pIn3->
23480 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29  flags & MEM_Int)
23490 3d 3d 30 20 29 20 67 6f 74 6f 20 6a 75 6d 70 5f  ==0 ) goto jump_
234a0 74 6f 5f 70 32 3b 0a 20 20 7d 0a 20 20 2f 2a 20  to_p2;.  }.  /* 
234b0 46 61 6c 6c 20 74 68 72 6f 75 67 68 20 69 6e 74  Fall through int
234c0 6f 20 4f 50 5f 4e 6f 74 45 78 69 73 74 73 20 2a  o OP_NotExists *
234d0 2f 0a 63 61 73 65 20 4f 50 5f 4e 6f 74 45 78 69  /.case OP_NotExi
234e0 73 74 73 3a 20 20 20 20 20 20 20 20 20 20 2f 2a  sts:          /*
234f0 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 20 20   jump, in3 */.  
23500 70 49 6e 33 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn3 = &aMem[pOp
23510 2d 3e 70 33 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p3];.  assert(
23520 20 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d   pIn3->flags & M
23530 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 61 73 73 65  EM_Int );.  asse
23540 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26  rt( pOp->p1>=0 &
23550 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75  & pOp->p1<p->nCu
23560 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70  rsor );.  pC = p
23570 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d  ->apCsr[pOp->p1]
23580 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d  ;.  assert( pC!=
23590 30 20 29 3b 0a 23 69 66 64 65 66 20 53 51 4c 49  0 );.#ifdef SQLI
235a0 54 45 5f 44 45 42 55 47 0a 20 20 70 43 2d 3e 73  TE_DEBUG.  pC->s
235b0 65 65 6b 4f 70 20 3d 20 30 3b 0a 23 65 6e 64 69  eekOp = 0;.#endi
235c0 66 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  f.  assert( pC->
235d0 69 73 54 61 62 6c 65 20 29 3b 0a 20 20 61 73 73  isTable );.  ass
235e0 65 72 74 28 20 70 43 2d 3e 65 43 75 72 54 79 70  ert( pC->eCurTyp
235f0 65 3d 3d 43 55 52 54 59 50 45 5f 42 54 52 45 45  e==CURTYPE_BTREE
23600 20 29 3b 0a 20 20 70 43 72 73 72 20 3d 20 70 43   );.  pCrsr = pC
23610 2d 3e 75 63 2e 70 43 75 72 73 6f 72 3b 0a 20 20  ->uc.pCursor;.  
23620 61 73 73 65 72 74 28 20 70 43 72 73 72 21 3d 30  assert( pCrsr!=0
23630 20 29 3b 0a 20 20 72 65 73 20 3d 20 30 3b 0a 20   );.  res = 0;. 
23640 20 69 4b 65 79 20 3d 20 70 49 6e 33 2d 3e 75 2e   iKey = pIn3->u.
23650 69 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65  i;.  rc = sqlite
23660 33 42 74 72 65 65 4d 6f 76 65 74 6f 55 6e 70 61  3BtreeMovetoUnpa
23670 63 6b 65 64 28 70 43 72 73 72 2c 20 30 2c 20 69  cked(pCrsr, 0, i
23680 4b 65 79 2c 20 30 2c 20 26 72 65 73 29 3b 0a 20  Key, 0, &res);. 
23690 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53 51 4c   assert( rc==SQL
236a0 49 54 45 5f 4f 4b 20 7c 7c 20 72 65 73 3d 3d 30  ITE_OK || res==0
236b0 20 29 3b 0a 20 20 70 43 2d 3e 6d 6f 76 65 74 6f   );.  pC->moveto
236c0 54 61 72 67 65 74 20 3d 20 69 4b 65 79 3b 20 20  Target = iKey;  
236d0 2f 2a 20 55 73 65 64 20 62 79 20 4f 50 5f 44 65  /* Used by OP_De
236e0 6c 65 74 65 20 2a 2f 0a 20 20 70 43 2d 3e 6e 75  lete */.  pC->nu
236f0 6c 6c 52 6f 77 20 3d 20 30 3b 0a 20 20 70 43 2d  llRow = 0;.  pC-
23700 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d 20 43  >cacheStatus = C
23710 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20 70 43  ACHE_STALE;.  pC
23720 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f  ->deferredMoveto
23730 20 3d 20 30 3b 0a 20 20 56 64 62 65 42 72 61 6e   = 0;.  VdbeBran
23740 63 68 54 61 6b 65 6e 28 72 65 73 21 3d 30 2c 32  chTaken(res!=0,2
23750 29 3b 0a 20 20 70 43 2d 3e 73 65 65 6b 52 65 73  );.  pC->seekRes
23760 75 6c 74 20 3d 20 72 65 73 3b 0a 20 20 69 66 28  ult = res;.  if(
23770 20 72 65 73 21 3d 30 20 29 7b 0a 20 20 20 20 61   res!=0 ){.    a
23780 73 73 65 72 74 28 20 72 63 3d 3d 53 51 4c 49 54  ssert( rc==SQLIT
23790 45 5f 4f 4b 20 29 3b 0a 20 20 20 20 69 66 28 20  E_OK );.    if( 
237a0 70 4f 70 2d 3e 70 32 3d 3d 30 20 29 7b 0a 20 20  pOp->p2==0 ){.  
237b0 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f      rc = SQLITE_
237c0 43 4f 52 52 55 50 54 5f 42 4b 50 54 3b 0a 20 20  CORRUPT_BKPT;.  
237d0 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 67    }else{.      g
237e0 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a  oto jump_to_p2;.
237f0 20 20 20 20 7d 0a 20 20 7d 0a 20 20 69 66 28 20      }.  }.  if( 
23800 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f  rc ) goto abort_
23810 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
23820 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
23830 6f 64 65 3a 20 53 65 71 75 65 6e 63 65 20 50 31  ode: Sequence P1
23840 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e   P2 * * *.** Syn
23850 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 63 75 72  opsis: r[P2]=cur
23860 73 6f 72 5b 50 31 5d 2e 63 74 72 2b 2b 0a 2a 2a  sor[P1].ctr++.**
23870 0a 2a 2a 20 46 69 6e 64 20 74 68 65 20 6e 65 78  .** Find the nex
23880 74 20 61 76 61 69 6c 61 62 6c 65 20 73 65 71 75  t available sequ
23890 65 6e 63 65 20 6e 75 6d 62 65 72 20 66 6f 72 20  ence number for 
238a0 63 75 72 73 6f 72 20 50 31 2e 0a 2a 2a 20 57 72  cursor P1..** Wr
238b0 69 74 65 20 74 68 65 20 73 65 71 75 65 6e 63 65  ite the sequence
238c0 20 6e 75 6d 62 65 72 20 69 6e 74 6f 20 72 65 67   number into reg
238d0 69 73 74 65 72 20 50 32 2e 0a 2a 2a 20 54 68 65  ister P2..** The
238e0 20 73 65 71 75 65 6e 63 65 20 6e 75 6d 62 65 72   sequence number
238f0 20 6f 6e 20 74 68 65 20 63 75 72 73 6f 72 20 69   on the cursor i
23900 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 61 66  s incremented af
23910 74 65 72 20 74 68 69 73 0a 2a 2a 20 69 6e 73 74  ter this.** inst
23920 72 75 63 74 69 6f 6e 2e 20 20 0a 2a 2f 0a 63 61  ruction.  .*/.ca
23930 73 65 20 4f 50 5f 53 65 71 75 65 6e 63 65 3a 20  se OP_Sequence: 
23940 7b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f  {           /* o
23950 75 74 32 20 2a 2f 0a 20 20 61 73 73 65 72 74 28  ut2 */.  assert(
23960 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70   pOp->p1>=0 && p
23970 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f  Op->p1<p->nCurso
23980 72 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  r );.  assert( p
23990 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d  ->apCsr[pOp->p1]
239a0 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  !=0 );.  assert(
239b0 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70   p->apCsr[pOp->p
239c0 31 5d 2d 3e 65 43 75 72 54 79 70 65 21 3d 43 55  1]->eCurType!=CU
239d0 52 54 59 50 45 5f 56 54 41 42 20 29 3b 0a 20 20  RTYPE_VTAB );.  
239e0 70 4f 75 74 20 3d 20 6f 75 74 32 50 72 65 72 65  pOut = out2Prere
239f0 6c 65 61 73 65 28 70 2c 20 70 4f 70 29 3b 0a 20  lease(p, pOp);. 
23a00 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 70 2d 3e   pOut->u.i = p->
23a10 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 2d 3e  apCsr[pOp->p1]->
23a20 73 65 71 43 6f 75 6e 74 2b 2b 3b 0a 20 20 62 72  seqCount++;.  br
23a30 65 61 6b 3b 0a 7d 0a 0a 0a 2f 2a 20 4f 70 63 6f  eak;.}.../* Opco
23a40 64 65 3a 20 4e 65 77 52 6f 77 69 64 20 50 31 20  de: NewRowid P1 
23a50 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e  P2 P3 * *.** Syn
23a60 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 72 6f 77  opsis: r[P2]=row
23a70 69 64 0a 2a 2a 0a 2a 2a 20 47 65 74 20 61 20 6e  id.**.** Get a n
23a80 65 77 20 69 6e 74 65 67 65 72 20 72 65 63 6f 72  ew integer recor
23a90 64 20 6e 75 6d 62 65 72 20 28 61 2e 6b 2e 61 20  d number (a.k.a 
23aa0 22 72 6f 77 69 64 22 29 20 75 73 65 64 20 61 73  "rowid") used as
23ab0 20 74 68 65 20 6b 65 79 20 74 6f 20 61 20 74 61   the key to a ta
23ac0 62 6c 65 2e 0a 2a 2a 20 54 68 65 20 72 65 63 6f  ble..** The reco
23ad0 72 64 20 6e 75 6d 62 65 72 20 69 73 20 6e 6f 74  rd number is not
23ae0 20 70 72 65 76 69 6f 75 73 6c 79 20 75 73 65 64   previously used
23af0 20 61 73 20 61 20 6b 65 79 20 69 6e 20 74 68 65   as a key in the
23b00 20 64 61 74 61 62 61 73 65 0a 2a 2a 20 74 61 62   database.** tab
23b10 6c 65 20 74 68 61 74 20 63 75 72 73 6f 72 20 50  le that cursor P
23b20 31 20 70 6f 69 6e 74 73 20 74 6f 2e 20 20 54 68  1 points to.  Th
23b30 65 20 6e 65 77 20 72 65 63 6f 72 64 20 6e 75 6d  e new record num
23b40 62 65 72 20 69 73 20 77 72 69 74 74 65 6e 0a 2a  ber is written.*
23b50 2a 20 77 72 69 74 74 65 6e 20 74 6f 20 72 65 67  * written to reg
23b60 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20  ister P2..**.** 
23b70 49 66 20 50 33 3e 30 20 74 68 65 6e 20 50 33 20  If P3>0 then P3 
23b80 69 73 20 61 20 72 65 67 69 73 74 65 72 20 69 6e  is a register in
23b90 20 74 68 65 20 72 6f 6f 74 20 66 72 61 6d 65 20   the root frame 
23ba0 6f 66 20 74 68 69 73 20 56 44 42 45 20 74 68 61  of this VDBE tha
23bb0 74 20 68 6f 6c 64 73 20 0a 2a 2a 20 74 68 65 20  t holds .** the 
23bc0 6c 61 72 67 65 73 74 20 70 72 65 76 69 6f 75 73  largest previous
23bd0 6c 79 20 67 65 6e 65 72 61 74 65 64 20 72 65 63  ly generated rec
23be0 6f 72 64 20 6e 75 6d 62 65 72 2e 20 4e 6f 20 6e  ord number. No n
23bf0 65 77 20 72 65 63 6f 72 64 20 6e 75 6d 62 65 72  ew record number
23c00 73 20 61 72 65 0a 2a 2a 20 61 6c 6c 6f 77 65 64  s are.** allowed
23c10 20 74 6f 20 62 65 20 6c 65 73 73 20 74 68 61 6e   to be less than
23c20 20 74 68 69 73 20 76 61 6c 75 65 2e 20 57 68 65   this value. Whe
23c30 6e 20 74 68 69 73 20 76 61 6c 75 65 20 72 65 61  n this value rea
23c40 63 68 65 73 20 69 74 73 20 6d 61 78 69 6d 75 6d  ches its maximum
23c50 2c 20 0a 2a 2a 20 61 6e 20 53 51 4c 49 54 45 5f  , .** an SQLITE_
23c60 46 55 4c 4c 20 65 72 72 6f 72 20 69 73 20 67 65  FULL error is ge
23c70 6e 65 72 61 74 65 64 2e 20 54 68 65 20 50 33 20  nerated. The P3 
23c80 72 65 67 69 73 74 65 72 20 69 73 20 75 70 64 61  register is upda
23c90 74 65 64 20 77 69 74 68 20 74 68 65 20 27 0a 2a  ted with the '.*
23ca0 2a 20 67 65 6e 65 72 61 74 65 64 20 72 65 63 6f  * generated reco
23cb0 72 64 20 6e 75 6d 62 65 72 2e 20 54 68 69 73 20  rd number. This 
23cc0 50 33 20 6d 65 63 68 61 6e 69 73 6d 20 69 73 20  P3 mechanism is 
23cd0 75 73 65 64 20 74 6f 20 68 65 6c 70 20 69 6d 70  used to help imp
23ce0 6c 65 6d 65 6e 74 20 74 68 65 0a 2a 2a 20 41 55  lement the.** AU
23cf0 54 4f 49 4e 43 52 45 4d 45 4e 54 20 66 65 61 74  TOINCREMENT feat
23d00 75 72 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ure..*/.case OP_
23d10 4e 65 77 52 6f 77 69 64 3a 20 7b 20 20 20 20 20  NewRowid: {     
23d20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f        /* out2 */
23d30 0a 20 20 69 36 34 20 76 3b 20 20 20 20 20 20 20  .  i64 v;       
23d40 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65            /* The
23d50 20 6e 65 77 20 72 6f 77 69 64 20 2a 2f 0a 20 20   new rowid */.  
23d60 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 20  VdbeCursor *pC; 
23d70 20 20 20 20 20 20 20 2f 2a 20 43 75 72 73 6f 72         /* Cursor
23d80 20 6f 66 20 74 61 62 6c 65 20 74 6f 20 67 65 74   of table to get
23d90 20 74 68 65 20 6e 65 77 20 72 6f 77 69 64 20 2a   the new rowid *
23da0 2f 0a 20 20 69 6e 74 20 72 65 73 3b 20 20 20 20  /.  int res;    
23db0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65             /* Re
23dc0 73 75 6c 74 20 6f 66 20 61 6e 20 73 71 6c 69 74  sult of an sqlit
23dd0 65 33 42 74 72 65 65 4c 61 73 74 28 29 20 2a 2f  e3BtreeLast() */
23de0 0a 20 20 69 6e 74 20 63 6e 74 3b 20 20 20 20 20  .  int cnt;     
23df0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 75            /* Cou
23e00 6e 74 65 72 20 74 6f 20 6c 69 6d 69 74 20 74 68  nter to limit th
23e10 65 20 6e 75 6d 62 65 72 20 6f 66 20 73 65 61 72  e number of sear
23e20 63 68 65 73 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70  ches */.  Mem *p
23e30 4d 65 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20  Mem;            
23e40 20 2f 2a 20 52 65 67 69 73 74 65 72 20 68 6f 6c   /* Register hol
23e50 64 69 6e 67 20 6c 61 72 67 65 73 74 20 72 6f 77  ding largest row
23e60 69 64 20 66 6f 72 20 41 55 54 4f 49 4e 43 52 45  id for AUTOINCRE
23e70 4d 45 4e 54 20 2a 2f 0a 20 20 56 64 62 65 46 72  MENT */.  VdbeFr
23e80 61 6d 65 20 2a 70 46 72 61 6d 65 3b 20 20 20 20  ame *pFrame;    
23e90 20 2f 2a 20 52 6f 6f 74 20 66 72 61 6d 65 20 6f   /* Root frame o
23ea0 66 20 56 44 42 45 20 2a 2f 0a 0a 20 20 76 20 3d  f VDBE */..  v =
23eb0 20 30 3b 0a 20 20 72 65 73 20 3d 20 30 3b 0a 20   0;.  res = 0;. 
23ec0 20 70 4f 75 74 20 3d 20 6f 75 74 32 50 72 65 72   pOut = out2Prer
23ed0 65 6c 65 61 73 65 28 70 2c 20 70 4f 70 29 3b 0a  elease(p, pOp);.
23ee0 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
23ef0 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c  1>=0 && pOp->p1<
23f00 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20  p->nCursor );.  
23f10 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f  pC = p->apCsr[pO
23f20 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74  p->p1];.  assert
23f30 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 61 73 73  ( pC!=0 );.  ass
23f40 65 72 74 28 20 70 43 2d 3e 69 73 54 61 62 6c 65  ert( pC->isTable
23f50 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43   );.  assert( pC
23f60 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43 55 52 54  ->eCurType==CURT
23f70 59 50 45 5f 42 54 52 45 45 20 29 3b 0a 20 20 61  YPE_BTREE );.  a
23f80 73 73 65 72 74 28 20 70 43 2d 3e 75 63 2e 70 43  ssert( pC->uc.pC
23f90 75 72 73 6f 72 21 3d 30 20 29 3b 0a 20 20 7b 0a  ursor!=0 );.  {.
23fa0 20 20 20 20 2f 2a 20 54 68 65 20 6e 65 78 74 20      /* The next 
23fb0 72 6f 77 69 64 20 6f 72 20 72 65 63 6f 72 64 20  rowid or record 
23fc0 6e 75 6d 62 65 72 20 28 64 69 66 66 65 72 65 6e  number (differen
23fd0 74 20 74 65 72 6d 73 20 66 6f 72 20 74 68 65 20  t terms for the 
23fe0 73 61 6d 65 0a 20 20 20 20 2a 2a 20 74 68 69 6e  same.    ** thin
23ff0 67 29 20 69 73 20 6f 62 74 61 69 6e 65 64 20 69  g) is obtained i
24000 6e 20 61 20 74 77 6f 2d 73 74 65 70 20 61 6c 67  n a two-step alg
24010 6f 72 69 74 68 6d 2e 0a 20 20 20 20 2a 2a 0a 20  orithm..    **. 
24020 20 20 20 2a 2a 20 46 69 72 73 74 20 77 65 20 61     ** First we a
24030 74 74 65 6d 70 74 20 74 6f 20 66 69 6e 64 20 74  ttempt to find t
24040 68 65 20 6c 61 72 67 65 73 74 20 65 78 69 73 74  he largest exist
24050 69 6e 67 20 72 6f 77 69 64 20 61 6e 64 20 61 64  ing rowid and ad
24060 64 20 6f 6e 65 0a 20 20 20 20 2a 2a 20 74 6f 20  d one.    ** to 
24070 74 68 61 74 2e 20 20 42 75 74 20 69 66 20 74 68  that.  But if th
24080 65 20 6c 61 72 67 65 73 74 20 65 78 69 73 74 69  e largest existi
24090 6e 67 20 72 6f 77 69 64 20 69 73 20 61 6c 72 65  ng rowid is alre
240a0 61 64 79 20 74 68 65 20 6d 61 78 69 6d 75 6d 0a  ady the maximum.
240b0 20 20 20 20 2a 2a 20 70 6f 73 69 74 69 76 65 20      ** positive 
240c0 69 6e 74 65 67 65 72 2c 20 77 65 20 68 61 76 65  integer, we have
240d0 20 74 6f 20 66 61 6c 6c 20 74 68 72 6f 75 67 68   to fall through
240e0 20 74 6f 20 74 68 65 20 73 65 63 6f 6e 64 0a 20   to the second. 
240f0 20 20 20 2a 2a 20 70 72 6f 62 61 62 69 6c 69 73     ** probabilis
24100 74 69 63 20 61 6c 67 6f 72 69 74 68 6d 0a 20 20  tic algorithm.  
24110 20 20 2a 2a 0a 20 20 20 20 2a 2a 20 54 68 65 20    **.    ** The 
24120 73 65 63 6f 6e 64 20 61 6c 67 6f 72 69 74 68 6d  second algorithm
24130 20 69 73 20 74 6f 20 73 65 6c 65 63 74 20 61 20   is to select a 
24140 72 6f 77 69 64 20 61 74 20 72 61 6e 64 6f 6d 20  rowid at random 
24150 61 6e 64 20 73 65 65 20 69 66 0a 20 20 20 20 2a  and see if.    *
24160 2a 20 69 74 20 61 6c 72 65 61 64 79 20 65 78 69  * it already exi
24170 73 74 73 20 69 6e 20 74 68 65 20 74 61 62 6c 65  sts in the table
24180 2e 20 20 49 66 20 69 74 20 64 6f 65 73 20 6e 6f  .  If it does no
24190 74 20 65 78 69 73 74 2c 20 77 65 20 68 61 76 65  t exist, we have
241a0 0a 20 20 20 20 2a 2a 20 73 75 63 63 65 65 64 65  .    ** succeede
241b0 64 2e 20 20 49 66 20 74 68 65 20 72 61 6e 64 6f  d.  If the rando
241c0 6d 20 72 6f 77 69 64 20 64 6f 65 73 20 65 78 69  m rowid does exi
241d0 73 74 2c 20 77 65 20 73 65 6c 65 63 74 20 61 20  st, we select a 
241e0 6e 65 77 20 6f 6e 65 0a 20 20 20 20 2a 2a 20 61  new one.    ** a
241f0 6e 64 20 74 72 79 20 61 67 61 69 6e 2c 20 75 70  nd try again, up
24200 20 74 6f 20 31 30 30 20 74 69 6d 65 73 2e 0a 20   to 100 times.. 
24210 20 20 20 2a 2f 0a 20 20 20 20 61 73 73 65 72 74     */.    assert
24220 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 20 29 3b  ( pC->isTable );
24230 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ..#ifdef SQLITE_
24240 33 32 42 49 54 5f 52 4f 57 49 44 0a 23 20 20 20  32BIT_ROWID.#   
24250 64 65 66 69 6e 65 20 4d 41 58 5f 52 4f 57 49 44  define MAX_ROWID
24260 20 30 78 37 66 66 66 66 66 66 66 0a 23 65 6c 73   0x7fffffff.#els
24270 65 0a 20 20 20 20 2f 2a 20 53 6f 6d 65 20 63 6f  e.    /* Some co
24280 6d 70 69 6c 65 72 73 20 63 6f 6d 70 6c 61 69 6e  mpilers complain
24290 20 61 62 6f 75 74 20 63 6f 6e 73 74 61 6e 74 73   about constants
242a0 20 6f 66 20 74 68 65 20 66 6f 72 6d 20 30 78 37   of the form 0x7
242b0 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 2e  fffffffffffffff.
242c0 0a 20 20 20 20 2a 2a 20 4f 74 68 65 72 73 20 63  .    ** Others c
242d0 6f 6d 70 6c 61 69 6e 20 61 62 6f 75 74 20 30 78  omplain about 0x
242e0 37 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66  7fffffffffffffff
242f0 66 4c 4c 2e 20 20 54 68 65 20 66 6f 6c 6c 6f 77  fLL.  The follow
24300 69 6e 67 20 6d 61 63 72 6f 20 73 65 65 6d 73 0a  ing macro seems.
24310 20 20 20 20 2a 2a 20 74 6f 20 70 72 6f 76 69 64      ** to provid
24320 65 20 74 68 65 20 63 6f 6e 73 74 61 6e 74 20 77  e the constant w
24330 68 69 6c 65 20 6d 61 6b 69 6e 67 20 61 6c 6c 20  hile making all 
24340 63 6f 6d 70 69 6c 65 72 73 20 68 61 70 70 79 2e  compilers happy.
24350 0a 20 20 20 20 2a 2f 0a 23 20 20 20 64 65 66 69  .    */.#   defi
24360 6e 65 20 4d 41 58 5f 52 4f 57 49 44 20 20 28 69  ne MAX_ROWID  (i
24370 36 34 29 28 20 28 28 28 75 36 34 29 30 78 37 66  64)( (((u64)0x7f
24380 66 66 66 66 66 66 29 3c 3c 33 32 29 20 7c 20 28  ffffff)<<32) | (
24390 75 36 34 29 30 78 66 66 66 66 66 66 66 66 20 29  u64)0xffffffff )
243a0 0a 23 65 6e 64 69 66 0a 0a 20 20 20 20 69 66 28  .#endif..    if(
243b0 20 21 70 43 2d 3e 75 73 65 52 61 6e 64 6f 6d 52   !pC->useRandomR
243c0 6f 77 69 64 20 29 7b 0a 20 20 20 20 20 20 72 63  owid ){.      rc
243d0 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 4c   = sqlite3BtreeL
243e0 61 73 74 28 70 43 2d 3e 75 63 2e 70 43 75 72 73  ast(pC->uc.pCurs
243f0 6f 72 2c 20 26 72 65 73 29 3b 0a 20 20 20 20 20  or, &res);.     
24400 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f   if( rc!=SQLITE_
24410 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 67 6f  OK ){.        go
24420 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
24430 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 7d 0a 20  error;.      }. 
24440 20 20 20 20 20 69 66 28 20 72 65 73 20 29 7b 0a       if( res ){.
24450 20 20 20 20 20 20 20 20 76 20 3d 20 31 3b 20 20          v = 1;  
24460 20 2f 2a 20 49 4d 50 3a 20 52 2d 36 31 39 31 34   /* IMP: R-61914
24470 2d 34 38 30 37 34 20 2a 2f 0a 20 20 20 20 20 20  -48074 */.      
24480 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 61  }else{.        a
24490 73 73 65 72 74 28 20 73 71 6c 69 74 65 33 42 74  ssert( sqlite3Bt
244a0 72 65 65 43 75 72 73 6f 72 49 73 56 61 6c 69 64  reeCursorIsValid
244b0 28 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 29  (pC->uc.pCursor)
244c0 20 29 3b 0a 20 20 20 20 20 20 20 20 76 20 3d 20   );.        v = 
244d0 73 71 6c 69 74 65 33 42 74 72 65 65 49 6e 74 65  sqlite3BtreeInte
244e0 67 65 72 4b 65 79 28 70 43 2d 3e 75 63 2e 70 43  gerKey(pC->uc.pC
244f0 75 72 73 6f 72 29 3b 0a 20 20 20 20 20 20 20 20  ursor);.        
24500 69 66 28 20 76 3e 3d 4d 41 58 5f 52 4f 57 49 44  if( v>=MAX_ROWID
24510 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 70 43   ){.          pC
24520 2d 3e 75 73 65 52 61 6e 64 6f 6d 52 6f 77 69 64  ->useRandomRowid
24530 20 3d 20 31 3b 0a 20 20 20 20 20 20 20 20 7d 65   = 1;.        }e
24540 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20 76  lse{.          v
24550 2b 2b 3b 20 20 20 2f 2a 20 49 4d 50 3a 20 52 2d  ++;   /* IMP: R-
24560 32 39 35 33 38 2d 33 34 39 38 37 20 2a 2f 0a 20  29538-34987 */. 
24570 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d         }.      }
24580 0a 20 20 20 20 7d 0a 0a 23 69 66 6e 64 65 66 20  .    }..#ifndef 
24590 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 4f  SQLITE_OMIT_AUTO
245a0 49 4e 43 52 45 4d 45 4e 54 0a 20 20 20 20 69 66  INCREMENT.    if
245b0 28 20 70 4f 70 2d 3e 70 33 20 29 7b 0a 20 20 20  ( pOp->p3 ){.   
245c0 20 20 20 2f 2a 20 41 73 73 65 72 74 20 74 68 61     /* Assert tha
245d0 74 20 50 33 20 69 73 20 61 20 76 61 6c 69 64 20  t P3 is a valid 
245e0 6d 65 6d 6f 72 79 20 63 65 6c 6c 2e 20 2a 2f 0a  memory cell. */.
245f0 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f        assert( pO
24600 70 2d 3e 70 33 3e 30 20 29 3b 0a 20 20 20 20 20  p->p3>0 );.     
24610 20 69 66 28 20 70 2d 3e 70 46 72 61 6d 65 20 29   if( p->pFrame )
24620 7b 0a 20 20 20 20 20 20 20 20 66 6f 72 28 70 46  {.        for(pF
24630 72 61 6d 65 3d 70 2d 3e 70 46 72 61 6d 65 3b 20  rame=p->pFrame; 
24640 70 46 72 61 6d 65 2d 3e 70 50 61 72 65 6e 74 3b  pFrame->pParent;
24650 20 70 46 72 61 6d 65 3d 70 46 72 61 6d 65 2d 3e   pFrame=pFrame->
24660 70 50 61 72 65 6e 74 29 3b 0a 20 20 20 20 20 20  pParent);.      
24670 20 20 2f 2a 20 41 73 73 65 72 74 20 74 68 61 74    /* Assert that
24680 20 50 33 20 69 73 20 61 20 76 61 6c 69 64 20 6d   P3 is a valid m
24690 65 6d 6f 72 79 20 63 65 6c 6c 2e 20 2a 2f 0a 20  emory cell. */. 
246a0 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70         assert( p
246b0 4f 70 2d 3e 70 33 3c 3d 70 46 72 61 6d 65 2d 3e  Op->p3<=pFrame->
246c0 6e 4d 65 6d 20 29 3b 0a 20 20 20 20 20 20 20 20  nMem );.        
246d0 70 4d 65 6d 20 3d 20 26 70 46 72 61 6d 65 2d 3e  pMem = &pFrame->
246e0 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20  aMem[pOp->p3];. 
246f0 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
24700 20 20 20 20 2f 2a 20 41 73 73 65 72 74 20 74 68      /* Assert th
24710 61 74 20 50 33 20 69 73 20 61 20 76 61 6c 69 64  at P3 is a valid
24720 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 2e 20 2a 2f   memory cell. */
24730 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28  .        assert(
24740 20 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d   pOp->p3<=(p->nM
24750 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f  em+1 - p->nCurso
24760 72 29 20 29 3b 0a 20 20 20 20 20 20 20 20 70 4d  r) );.        pM
24770 65 6d 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  em = &aMem[pOp->
24780 70 33 5d 3b 0a 20 20 20 20 20 20 20 20 6d 65 6d  p3];.        mem
24790 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c  AboutToChange(p,
247a0 20 70 4d 65 6d 29 3b 0a 20 20 20 20 20 20 7d 0a   pMem);.      }.
247b0 20 20 20 20 20 20 61 73 73 65 72 74 28 20 6d 65        assert( me
247c0 6d 49 73 56 61 6c 69 64 28 70 4d 65 6d 29 20 29  mIsValid(pMem) )
247d0 3b 0a 0a 20 20 20 20 20 20 52 45 47 49 53 54 45  ;..      REGISTE
247e0 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 33 2c  R_TRACE(pOp->p3,
247f0 20 70 4d 65 6d 29 3b 0a 20 20 20 20 20 20 73 71   pMem);.      sq
24800 6c 69 74 65 33 56 64 62 65 4d 65 6d 49 6e 74 65  lite3VdbeMemInte
24810 67 65 72 69 66 79 28 70 4d 65 6d 29 3b 0a 20 20  gerify(pMem);.  
24820 20 20 20 20 61 73 73 65 72 74 28 20 28 70 4d 65      assert( (pMe
24830 6d 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49  m->flags & MEM_I
24840 6e 74 29 21 3d 30 20 29 3b 20 20 2f 2a 20 6d 65  nt)!=0 );  /* me
24850 6d 28 50 33 29 20 68 6f 6c 64 73 20 61 6e 20 69  m(P3) holds an i
24860 6e 74 65 67 65 72 20 2a 2f 0a 20 20 20 20 20 20  nteger */.      
24870 69 66 28 20 70 4d 65 6d 2d 3e 75 2e 69 3d 3d 4d  if( pMem->u.i==M
24880 41 58 5f 52 4f 57 49 44 20 7c 7c 20 70 43 2d 3e  AX_ROWID || pC->
24890 75 73 65 52 61 6e 64 6f 6d 52 6f 77 69 64 20 29  useRandomRowid )
248a0 7b 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20 53  {.        rc = S
248b0 51 4c 49 54 45 5f 46 55 4c 4c 3b 20 20 20 2f 2a  QLITE_FULL;   /*
248c0 20 49 4d 50 3a 20 52 2d 31 37 38 31 37 2d 30 30   IMP: R-17817-00
248d0 36 33 30 20 2a 2f 0a 20 20 20 20 20 20 20 20 67  630 */.        g
248e0 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
248f0 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 7d 0a  _error;.      }.
24900 20 20 20 20 20 20 69 66 28 20 76 3c 70 4d 65 6d        if( v<pMem
24910 2d 3e 75 2e 69 2b 31 20 29 7b 0a 20 20 20 20 20  ->u.i+1 ){.     
24920 20 20 20 76 20 3d 20 70 4d 65 6d 2d 3e 75 2e 69     v = pMem->u.i
24930 20 2b 20 31 3b 0a 20 20 20 20 20 20 7d 0a 20 20   + 1;.      }.  
24940 20 20 20 20 70 4d 65 6d 2d 3e 75 2e 69 20 3d 20      pMem->u.i = 
24950 76 3b 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a  v;.    }.#endif.
24960 20 20 20 20 69 66 28 20 70 43 2d 3e 75 73 65 52      if( pC->useR
24970 61 6e 64 6f 6d 52 6f 77 69 64 20 29 7b 0a 20 20  andomRowid ){.  
24980 20 20 20 20 2f 2a 20 49 4d 50 4c 45 4d 45 4e 54      /* IMPLEMENT
24990 41 54 49 4f 4e 2d 4f 46 3a 20 52 2d 30 37 36 37  ATION-OF: R-0767
249a0 37 2d 34 31 38 38 31 20 49 66 20 74 68 65 20 6c  7-41881 If the l
249b0 61 72 67 65 73 74 20 52 4f 57 49 44 20 69 73 20  argest ROWID is 
249c0 65 71 75 61 6c 20 74 6f 20 74 68 65 0a 20 20 20  equal to the.   
249d0 20 20 20 2a 2a 20 6c 61 72 67 65 73 74 20 70 6f     ** largest po
249e0 73 73 69 62 6c 65 20 69 6e 74 65 67 65 72 20 28  ssible integer (
249f0 39 32 32 33 33 37 32 30 33 36 38 35 34 37 37 35  9223372036854775
24a00 38 30 37 29 20 74 68 65 6e 20 74 68 65 20 64 61  807) then the da
24a10 74 61 62 61 73 65 0a 20 20 20 20 20 20 2a 2a 20  tabase.      ** 
24a20 65 6e 67 69 6e 65 20 73 74 61 72 74 73 20 70 69  engine starts pi
24a30 63 6b 69 6e 67 20 70 6f 73 69 74 69 76 65 20 63  cking positive c
24a40 61 6e 64 69 64 61 74 65 20 52 4f 57 49 44 73 20  andidate ROWIDs 
24a50 61 74 20 72 61 6e 64 6f 6d 20 75 6e 74 69 6c 0a  at random until.
24a60 20 20 20 20 20 20 2a 2a 20 69 74 20 66 69 6e 64        ** it find
24a70 73 20 6f 6e 65 20 74 68 61 74 20 69 73 20 6e 6f  s one that is no
24a80 74 20 70 72 65 76 69 6f 75 73 6c 79 20 75 73 65  t previously use
24a90 64 2e 20 2a 2f 0a 20 20 20 20 20 20 61 73 73 65  d. */.      asse
24aa0 72 74 28 20 70 4f 70 2d 3e 70 33 3d 3d 30 20 29  rt( pOp->p3==0 )
24ab0 3b 20 20 2f 2a 20 57 65 20 63 61 6e 6e 6f 74 20  ;  /* We cannot 
24ac0 62 65 20 69 6e 20 72 61 6e 64 6f 6d 20 72 6f 77  be in random row
24ad0 69 64 20 6d 6f 64 65 20 69 66 20 74 68 69 73 20  id mode if this 
24ae0 69 73 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  is.             
24af0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24b00 2a 2a 20 61 6e 20 41 55 54 4f 49 4e 43 52 45 4d  ** an AUTOINCREM
24b10 45 4e 54 20 74 61 62 6c 65 2e 20 2a 2f 0a 20 20  ENT table. */.  
24b20 20 20 20 20 63 6e 74 20 3d 20 30 3b 0a 20 20 20      cnt = 0;.   
24b30 20 20 20 64 6f 7b 0a 20 20 20 20 20 20 20 20 73     do{.        s
24b40 71 6c 69 74 65 33 5f 72 61 6e 64 6f 6d 6e 65 73  qlite3_randomnes
24b50 73 28 73 69 7a 65 6f 66 28 76 29 2c 20 26 76 29  s(sizeof(v), &v)
24b60 3b 0a 20 20 20 20 20 20 20 20 76 20 26 3d 20 28  ;.        v &= (
24b70 4d 41 58 5f 52 4f 57 49 44 3e 3e 31 29 3b 20 76  MAX_ROWID>>1); v
24b80 2b 2b 3b 20 20 2f 2a 20 45 6e 73 75 72 65 20 74  ++;  /* Ensure t
24b90 68 61 74 20 76 20 69 73 20 67 72 65 61 74 65 72  hat v is greater
24ba0 20 74 68 61 6e 20 7a 65 72 6f 20 2a 2f 0a 20 20   than zero */.  
24bb0 20 20 20 20 7d 77 68 69 6c 65 28 20 20 28 28 72      }while(  ((r
24bc0 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
24bd0 4d 6f 76 65 74 6f 55 6e 70 61 63 6b 65 64 28 70  MovetoUnpacked(p
24be0 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 2c 20 30  C->uc.pCursor, 0
24bf0 2c 20 28 75 36 34 29 76 2c 0a 20 20 20 20 20 20  , (u64)v,.      
24c00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24c10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24c20 20 20 20 20 20 20 20 20 20 20 20 30 2c 20 26 72             0, &r
24c30 65 73 29 29 3d 3d 53 51 4c 49 54 45 5f 4f 4b 29  es))==SQLITE_OK)
24c40 0a 20 20 20 20 20 20 20 20 20 20 20 20 26 26 20  .            && 
24c50 28 72 65 73 3d 3d 30 29 0a 20 20 20 20 20 20 20  (res==0).       
24c60 20 20 20 20 20 26 26 20 28 2b 2b 63 6e 74 3c 31       && (++cnt<1
24c70 30 30 29 29 3b 0a 20 20 20 20 20 20 69 66 28 20  00));.      if( 
24c80 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f  rc ) goto abort_
24c90 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
24ca0 20 20 20 20 69 66 28 20 72 65 73 3d 3d 30 20 29      if( res==0 )
24cb0 7b 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20 53  {.        rc = S
24cc0 51 4c 49 54 45 5f 46 55 4c 4c 3b 20 20 20 2f 2a  QLITE_FULL;   /*
24cd0 20 49 4d 50 3a 20 52 2d 33 38 32 31 39 2d 35 33   IMP: R-38219-53
24ce0 30 30 32 20 2a 2f 0a 20 20 20 20 20 20 20 20 67  002 */.        g
24cf0 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
24d00 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 7d 0a  _error;.      }.
24d10 20 20 20 20 20 20 61 73 73 65 72 74 28 20 76 3e        assert( v>
24d20 30 20 29 3b 20 20 2f 2a 20 45 56 3a 20 52 2d 34  0 );  /* EV: R-4
24d30 30 38 31 32 2d 30 33 35 37 30 20 2a 2f 0a 20 20  0812-03570 */.  
24d40 20 20 7d 0a 20 20 20 20 70 43 2d 3e 64 65 66 65    }.    pC->defe
24d50 72 72 65 64 4d 6f 76 65 74 6f 20 3d 20 30 3b 0a  rredMoveto = 0;.
24d60 20 20 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61      pC->cacheSta
24d70 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c  tus = CACHE_STAL
24d80 45 3b 0a 20 20 7d 0a 20 20 70 4f 75 74 2d 3e 75  E;.  }.  pOut->u
24d90 2e 69 20 3d 20 76 3b 0a 20 20 62 72 65 61 6b 3b  .i = v;.  break;
24da0 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49  .}../* Opcode: I
24db0 6e 73 65 72 74 20 50 31 20 50 32 20 50 33 20 50  nsert P1 P2 P3 P
24dc0 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73  4 P5.** Synopsis
24dd0 3a 20 69 6e 74 6b 65 79 3d 72 5b 50 33 5d 20 64  : intkey=r[P3] d
24de0 61 74 61 3d 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20  ata=r[P2].**.** 
24df0 57 72 69 74 65 20 61 6e 20 65 6e 74 72 79 20 69  Write an entry i
24e00 6e 74 6f 20 74 68 65 20 74 61 62 6c 65 20 6f 66  nto the table of
24e10 20 63 75 72 73 6f 72 20 50 31 2e 20 20 41 20 6e   cursor P1.  A n
24e20 65 77 20 65 6e 74 72 79 20 69 73 0a 2a 2a 20 63  ew entry is.** c
24e30 72 65 61 74 65 64 20 69 66 20 69 74 20 64 6f 65  reated if it doe
24e40 73 6e 27 74 20 61 6c 72 65 61 64 79 20 65 78 69  sn't already exi
24e50 73 74 20 6f 72 20 74 68 65 20 64 61 74 61 20 66  st or the data f
24e60 6f 72 20 61 6e 20 65 78 69 73 74 69 6e 67 0a 2a  or an existing.*
24e70 2a 20 65 6e 74 72 79 20 69 73 20 6f 76 65 72 77  * entry is overw
24e80 72 69 74 74 65 6e 2e 20 20 54 68 65 20 64 61 74  ritten.  The dat
24e90 61 20 69 73 20 74 68 65 20 76 61 6c 75 65 20 4d  a is the value M
24ea0 45 4d 5f 42 6c 6f 62 20 73 74 6f 72 65 64 20 69  EM_Blob stored i
24eb0 6e 20 72 65 67 69 73 74 65 72 0a 2a 2a 20 6e 75  n register.** nu
24ec0 6d 62 65 72 20 50 32 2e 20 54 68 65 20 6b 65 79  mber P2. The key
24ed0 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 72 65   is stored in re
24ee0 67 69 73 74 65 72 20 50 33 2e 20 54 68 65 20 6b  gister P3. The k
24ef0 65 79 20 6d 75 73 74 0a 2a 2a 20 62 65 20 61 20  ey must.** be a 
24f00 4d 45 4d 5f 49 6e 74 2e 0a 2a 2a 0a 2a 2a 20 49  MEM_Int..**.** I
24f10 66 20 74 68 65 20 4f 50 46 4c 41 47 5f 4e 43 48  f the OPFLAG_NCH
24f20 41 4e 47 45 20 66 6c 61 67 20 6f 66 20 50 35 20  ANGE flag of P5 
24f30 69 73 20 73 65 74 2c 20 74 68 65 6e 20 74 68 65  is set, then the
24f40 20 72 6f 77 20 63 68 61 6e 67 65 20 63 6f 75 6e   row change coun
24f50 74 20 69 73 0a 2a 2a 20 69 6e 63 72 65 6d 65 6e  t is.** incremen
24f60 74 65 64 20 28 6f 74 68 65 72 77 69 73 65 20 6e  ted (otherwise n
24f70 6f 74 29 2e 20 20 49 66 20 74 68 65 20 4f 50 46  ot).  If the OPF
24f80 4c 41 47 5f 4c 41 53 54 52 4f 57 49 44 20 66 6c  LAG_LASTROWID fl
24f90 61 67 20 6f 66 20 50 35 20 69 73 20 73 65 74 2c  ag of P5 is set,
24fa0 0a 2a 2a 20 74 68 65 6e 20 72 6f 77 69 64 20 69  .** then rowid i
24fb0 73 20 73 74 6f 72 65 64 20 66 6f 72 20 73 75 62  s stored for sub
24fc0 73 65 71 75 65 6e 74 20 72 65 74 75 72 6e 20 62  sequent return b
24fd0 79 20 74 68 65 0a 2a 2a 20 73 71 6c 69 74 65 33  y the.** sqlite3
24fe0 5f 6c 61 73 74 5f 69 6e 73 65 72 74 5f 72 6f 77  _last_insert_row
24ff0 69 64 28 29 20 66 75 6e 63 74 69 6f 6e 20 28 6f  id() function (o
25000 74 68 65 72 77 69 73 65 20 69 74 20 69 73 20 75  therwise it is u
25010 6e 6d 6f 64 69 66 69 65 64 29 2e 0a 2a 2a 0a 2a  nmodified)..**.*
25020 2a 20 49 66 20 74 68 65 20 4f 50 46 4c 41 47 5f  * If the OPFLAG_
25030 55 53 45 53 45 45 4b 52 45 53 55 4c 54 20 66 6c  USESEEKRESULT fl
25040 61 67 20 6f 66 20 50 35 20 69 73 20 73 65 74 2c  ag of P5 is set,
25050 20 74 68 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74   the implementat
25060 69 6f 6e 20 6d 69 67 68 74 0a 2a 2a 20 72 75 6e  ion might.** run
25070 20 66 61 73 74 65 72 20 62 79 20 61 76 6f 69 64   faster by avoid
25080 69 6e 67 20 61 6e 20 75 6e 6e 65 63 65 73 73 61  ing an unnecessa
25090 72 79 20 73 65 65 6b 20 6f 6e 20 63 75 72 73 6f  ry seek on curso
250a0 72 20 50 31 2e 20 20 48 6f 77 65 76 65 72 2c 0a  r P1.  However,.
250b0 2a 2a 20 74 68 65 20 4f 50 46 4c 41 47 5f 55 53  ** the OPFLAG_US
250c0 45 53 45 45 4b 52 45 53 55 4c 54 20 66 6c 61 67  ESEEKRESULT flag
250d0 20 6d 75 73 74 20 6f 6e 6c 79 20 62 65 20 73 65   must only be se
250e0 74 20 69 66 20 74 68 65 72 65 20 68 61 76 65 20  t if there have 
250f0 62 65 65 6e 20 6e 6f 20 70 72 69 6f 72 0a 2a 2a  been no prior.**
25100 20 73 65 65 6b 73 20 6f 6e 20 74 68 65 20 63 75   seeks on the cu
25110 72 73 6f 72 20 6f 72 20 69 66 20 74 68 65 20 6d  rsor or if the m
25120 6f 73 74 20 72 65 63 65 6e 74 20 73 65 65 6b 20  ost recent seek 
25130 75 73 65 64 20 61 20 6b 65 79 20 65 71 75 61 6c  used a key equal
25140 20 74 6f 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 49 66   to P3..**.** If
25150 20 74 68 65 20 4f 50 46 4c 41 47 5f 49 53 55 50   the OPFLAG_ISUP
25160 44 41 54 45 20 66 6c 61 67 20 69 73 20 73 65 74  DATE flag is set
25170 2c 20 74 68 65 6e 20 74 68 69 73 20 6f 70 63 6f  , then this opco
25180 64 65 20 69 73 20 70 61 72 74 20 6f 66 20 61 6e  de is part of an
25190 0a 2a 2a 20 55 50 44 41 54 45 20 6f 70 65 72 61  .** UPDATE opera
251a0 74 69 6f 6e 2e 20 20 4f 74 68 65 72 77 69 73 65  tion.  Otherwise
251b0 20 28 69 66 20 74 68 65 20 66 6c 61 67 20 69 73   (if the flag is
251c0 20 63 6c 65 61 72 29 20 74 68 65 6e 20 74 68 69   clear) then thi
251d0 73 20 6f 70 63 6f 64 65 0a 2a 2a 20 69 73 20 70  s opcode.** is p
251e0 61 72 74 20 6f 66 20 61 6e 20 49 4e 53 45 52 54  art of an INSERT
251f0 20 6f 70 65 72 61 74 69 6f 6e 2e 20 20 54 68 65   operation.  The
25200 20 64 69 66 66 65 72 65 6e 63 65 20 69 73 20 6f   difference is o
25210 6e 6c 79 20 69 6d 70 6f 72 74 61 6e 74 20 74 6f  nly important to
25220 0a 2a 2a 20 74 68 65 20 75 70 64 61 74 65 20 68  .** the update h
25230 6f 6f 6b 2e 0a 2a 2a 0a 2a 2a 20 50 61 72 61 6d  ook..**.** Param
25240 65 74 65 72 20 50 34 20 6d 61 79 20 70 6f 69 6e  eter P4 may poin
25250 74 20 74 6f 20 61 20 54 61 62 6c 65 20 73 74 72  t to a Table str
25260 75 63 74 75 72 65 2c 20 6f 72 20 6d 61 79 20 62  ucture, or may b
25270 65 20 4e 55 4c 4c 2e 20 49 66 20 69 74 20 69 73  e NULL. If it is
25280 20 0a 2a 2a 20 6e 6f 74 20 4e 55 4c 4c 2c 20 74   .** not NULL, t
25290 68 65 6e 20 74 68 65 20 75 70 64 61 74 65 2d 68  hen the update-h
252a0 6f 6f 6b 20 28 73 71 6c 69 74 65 33 2e 78 55 70  ook (sqlite3.xUp
252b0 64 61 74 65 43 61 6c 6c 62 61 63 6b 29 20 69 73  dateCallback) is
252c0 20 69 6e 76 6f 6b 65 64 20 0a 2a 2a 20 66 6f 6c   invoked .** fol
252d0 6c 6f 77 69 6e 67 20 61 20 73 75 63 63 65 73 73  lowing a success
252e0 66 75 6c 20 69 6e 73 65 72 74 2e 0a 2a 2a 0a 2a  ful insert..**.*
252f0 2a 20 28 57 41 52 4e 49 4e 47 2f 54 4f 44 4f 3a  * (WARNING/TODO:
25300 20 49 66 20 50 31 20 69 73 20 61 20 70 73 65 75   If P1 is a pseu
25310 64 6f 2d 63 75 72 73 6f 72 20 61 6e 64 20 50 32  do-cursor and P2
25320 20 69 73 20 64 79 6e 61 6d 69 63 61 6c 6c 79 0a   is dynamically.
25330 2a 2a 20 61 6c 6c 6f 63 61 74 65 64 2c 20 74 68  ** allocated, th
25340 65 6e 20 6f 77 6e 65 72 73 68 69 70 20 6f 66 20  en ownership of 
25350 50 32 20 69 73 20 74 72 61 6e 73 66 65 72 72 65  P2 is transferre
25360 64 20 74 6f 20 74 68 65 20 70 73 65 75 64 6f 2d  d to the pseudo-
25370 63 75 72 73 6f 72 0a 2a 2a 20 61 6e 64 20 72 65  cursor.** and re
25380 67 69 73 74 65 72 20 50 32 20 62 65 63 6f 6d 65  gister P2 become
25390 73 20 65 70 68 65 6d 65 72 61 6c 2e 20 20 49 66  s ephemeral.  If
253a0 20 74 68 65 20 63 75 72 73 6f 72 20 69 73 20 63   the cursor is c
253b0 68 61 6e 67 65 64 2c 20 74 68 65 0a 2a 2a 20 76  hanged, the.** v
253c0 61 6c 75 65 20 6f 66 20 72 65 67 69 73 74 65 72  alue of register
253d0 20 50 32 20 77 69 6c 6c 20 74 68 65 6e 20 63 68   P2 will then ch
253e0 61 6e 67 65 2e 20 20 4d 61 6b 65 20 73 75 72 65  ange.  Make sure
253f0 20 74 68 69 73 20 64 6f 65 73 20 6e 6f 74 0a 2a   this does not.*
25400 2a 20 63 61 75 73 65 20 61 6e 79 20 70 72 6f 62  * cause any prob
25410 6c 65 6d 73 2e 29 0a 2a 2a 0a 2a 2a 20 54 68 69  lems.).**.** Thi
25420 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 6f 6e  s instruction on
25430 6c 79 20 77 6f 72 6b 73 20 6f 6e 20 74 61 62 6c  ly works on tabl
25440 65 73 2e 20 20 54 68 65 20 65 71 75 69 76 61 6c  es.  The equival
25450 65 6e 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 0a  ent instruction.
25460 2a 2a 20 66 6f 72 20 69 6e 64 69 63 65 73 20 69  ** for indices i
25470 73 20 4f 50 5f 49 64 78 49 6e 73 65 72 74 2e 0a  s OP_IdxInsert..
25480 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 6e  */./* Opcode: In
25490 73 65 72 74 49 6e 74 20 50 31 20 50 32 20 50 33  sertInt P1 P2 P3
254a0 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73   P4 P5.** Synops
254b0 69 73 3a 20 69 6e 74 6b 65 79 3d 50 33 20 64 61  is: intkey=P3 da
254c0 74 61 3d 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20 54  ta=r[P2].**.** T
254d0 68 69 73 20 77 6f 72 6b 73 20 65 78 61 63 74 6c  his works exactl
254e0 79 20 6c 69 6b 65 20 4f 50 5f 49 6e 73 65 72 74  y like OP_Insert
254f0 20 65 78 63 65 70 74 20 74 68 61 74 20 74 68 65   except that the
25500 20 6b 65 79 20 69 73 20 74 68 65 0a 2a 2a 20 69   key is the.** i
25510 6e 74 65 67 65 72 20 76 61 6c 75 65 20 50 33 2c  nteger value P3,
25520 20 6e 6f 74 20 74 68 65 20 76 61 6c 75 65 20 6f   not the value o
25530 66 20 74 68 65 20 69 6e 74 65 67 65 72 20 73 74  f the integer st
25540 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74 65 72  ored in register
25550 20 50 33 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f   P3..*/.case OP_
25560 49 6e 73 65 72 74 3a 20 0a 63 61 73 65 20 4f 50  Insert: .case OP
25570 5f 49 6e 73 65 72 74 49 6e 74 3a 20 7b 0a 20 20  _InsertInt: {.  
25580 4d 65 6d 20 2a 70 44 61 74 61 3b 20 20 20 20 20  Mem *pData;     
25590 20 20 2f 2a 20 4d 45 4d 20 63 65 6c 6c 20 68 6f    /* MEM cell ho
255a0 6c 64 69 6e 67 20 64 61 74 61 20 66 6f 72 20 74  lding data for t
255b0 68 65 20 72 65 63 6f 72 64 20 74 6f 20 62 65 20  he record to be 
255c0 69 6e 73 65 72 74 65 64 20 2a 2f 0a 20 20 4d 65  inserted */.  Me
255d0 6d 20 2a 70 4b 65 79 3b 20 20 20 20 20 20 20 20  m *pKey;        
255e0 2f 2a 20 4d 45 4d 20 63 65 6c 6c 20 68 6f 6c 64  /* MEM cell hold
255f0 69 6e 67 20 6b 65 79 20 20 66 6f 72 20 74 68 65  ing key  for the
25600 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 56 64 62   record */.  Vdb
25610 65 43 75 72 73 6f 72 20 2a 70 43 3b 20 20 20 2f  eCursor *pC;   /
25620 2a 20 43 75 72 73 6f 72 20 74 6f 20 74 61 62 6c  * Cursor to tabl
25630 65 20 69 6e 74 6f 20 77 68 69 63 68 20 69 6e 73  e into which ins
25640 65 72 74 20 69 73 20 77 72 69 74 74 65 6e 20 2a  ert is written *
25650 2f 0a 20 20 69 6e 74 20 73 65 65 6b 52 65 73 75  /.  int seekResu
25660 6c 74 3b 20 20 20 2f 2a 20 52 65 73 75 6c 74 20  lt;   /* Result 
25670 6f 66 20 70 72 69 6f 72 20 73 65 65 6b 20 6f 72  of prior seek or
25680 20 30 20 69 66 20 6e 6f 20 55 53 45 53 45 45 4b   0 if no USESEEK
25690 52 45 53 55 4c 54 20 66 6c 61 67 20 2a 2f 0a 20  RESULT flag */. 
256a0 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 44 62   const char *zDb
256b0 3b 20 20 2f 2a 20 64 61 74 61 62 61 73 65 20 6e  ;  /* database n
256c0 61 6d 65 20 2d 20 75 73 65 64 20 62 79 20 74 68  ame - used by th
256d0 65 20 75 70 64 61 74 65 20 68 6f 6f 6b 20 2a 2f  e update hook */
256e0 0a 20 20 54 61 62 6c 65 20 2a 70 54 61 62 3b 20  .  Table *pTab; 
256f0 20 20 20 20 20 2f 2a 20 54 61 62 6c 65 20 73 74       /* Table st
25700 72 75 63 74 75 72 65 20 2d 20 75 73 65 64 20 62  ructure - used b
25710 79 20 75 70 64 61 74 65 20 61 6e 64 20 70 72 65  y update and pre
25720 2d 75 70 64 61 74 65 20 68 6f 6f 6b 73 20 2a 2f  -update hooks */
25730 0a 20 20 42 74 72 65 65 50 61 79 6c 6f 61 64 20  .  BtreePayload 
25740 78 3b 20 20 20 2f 2a 20 50 61 79 6c 6f 61 64 20  x;   /* Payload 
25750 74 6f 20 62 65 20 69 6e 73 65 72 74 65 64 20 2a  to be inserted *
25760 2f 0a 0a 20 20 70 44 61 74 61 20 3d 20 26 61 4d  /..  pData = &aM
25770 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 61  em[pOp->p2];.  a
25780 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d  ssert( pOp->p1>=
25790 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e  0 && pOp->p1<p->
257a0 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 61 73 73  nCursor );.  ass
257b0 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28  ert( memIsValid(
257c0 70 44 61 74 61 29 20 29 3b 0a 20 20 70 43 20 3d  pData) );.  pC =
257d0 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70   p->apCsr[pOp->p
257e0 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43  1];.  assert( pC
257f0 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  !=0 );.  assert(
25800 20 70 43 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43   pC->eCurType==C
25810 55 52 54 59 50 45 5f 42 54 52 45 45 20 29 3b 0a  URTYPE_BTREE );.
25820 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 75 63    assert( pC->uc
25830 2e 70 43 75 72 73 6f 72 21 3d 30 20 29 3b 0a 20  .pCursor!=0 );. 
25840 20 61 73 73 65 72 74 28 20 28 70 4f 70 2d 3e 70   assert( (pOp->p
25850 35 20 26 20 4f 50 46 4c 41 47 5f 49 53 4e 4f 4f  5 & OPFLAG_ISNOO
25860 50 29 20 7c 7c 20 70 43 2d 3e 69 73 54 61 62 6c  P) || pC->isTabl
25870 65 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  e );.  assert( p
25880 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 54  Op->p4type==P4_T
25890 41 42 4c 45 20 7c 7c 20 70 4f 70 2d 3e 70 34 74  ABLE || pOp->p4t
258a0 79 70 65 3e 3d 50 34 5f 53 54 41 54 49 43 20 29  ype>=P4_STATIC )
258b0 3b 0a 20 20 52 45 47 49 53 54 45 52 5f 54 52 41  ;.  REGISTER_TRA
258c0 43 45 28 70 4f 70 2d 3e 70 32 2c 20 70 44 61 74  CE(pOp->p2, pDat
258d0 61 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62  a);.  sqlite3Vdb
258e0 65 49 6e 63 72 57 72 69 74 65 43 6f 75 6e 74 65  eIncrWriteCounte
258f0 72 28 70 2c 20 70 43 29 3b 0a 0a 20 20 69 66 28  r(p, pC);..  if(
25900 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50   pOp->opcode==OP
25910 5f 49 6e 73 65 72 74 20 29 7b 0a 20 20 20 20 70  _Insert ){.    p
25920 4b 65 79 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  Key = &aMem[pOp-
25930 3e 70 33 5d 3b 0a 20 20 20 20 61 73 73 65 72 74  >p3];.    assert
25940 28 20 70 4b 65 79 2d 3e 66 6c 61 67 73 20 26 20  ( pKey->flags & 
25950 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 20 20 61  MEM_Int );.    a
25960 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69  ssert( memIsVali
25970 64 28 70 4b 65 79 29 20 29 3b 0a 20 20 20 20 52  d(pKey) );.    R
25980 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f  EGISTER_TRACE(pO
25990 70 2d 3e 70 33 2c 20 70 4b 65 79 29 3b 0a 20 20  p->p3, pKey);.  
259a0 20 20 78 2e 6e 4b 65 79 20 3d 20 70 4b 65 79 2d    x.nKey = pKey-
259b0 3e 75 2e 69 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  >u.i;.  }else{. 
259c0 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e     assert( pOp->
259d0 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 6e 73 65 72  opcode==OP_Inser
259e0 74 49 6e 74 20 29 3b 0a 20 20 20 20 78 2e 6e 4b  tInt );.    x.nK
259f0 65 79 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20  ey = pOp->p3;.  
25a00 7d 0a 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 34  }..  if( pOp->p4
25a10 74 79 70 65 3d 3d 50 34 5f 54 41 42 4c 45 20 26  type==P4_TABLE &
25a20 26 20 48 41 53 5f 55 50 44 41 54 45 5f 48 4f 4f  & HAS_UPDATE_HOO
25a30 4b 28 64 62 29 20 29 7b 0a 20 20 20 20 61 73 73  K(db) ){.    ass
25a40 65 72 74 28 20 70 43 2d 3e 69 44 62 3e 3d 30 20  ert( pC->iDb>=0 
25a50 29 3b 0a 20 20 20 20 7a 44 62 20 3d 20 64 62 2d  );.    zDb = db-
25a60 3e 61 44 62 5b 70 43 2d 3e 69 44 62 5d 2e 7a 44  >aDb[pC->iDb].zD
25a70 62 53 4e 61 6d 65 3b 0a 20 20 20 20 70 54 61 62  bSName;.    pTab
25a80 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 54 61 62 3b   = pOp->p4.pTab;
25a90 0a 20 20 20 20 61 73 73 65 72 74 28 20 28 70 4f  .    assert( (pO
25aa0 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 49  p->p5 & OPFLAG_I
25ab0 53 4e 4f 4f 50 29 20 7c 7c 20 48 61 73 52 6f 77  SNOOP) || HasRow
25ac0 69 64 28 70 54 61 62 29 20 29 3b 0a 20 20 7d 65  id(pTab) );.  }e
25ad0 6c 73 65 7b 0a 20 20 20 20 70 54 61 62 20 3d 20  lse{.    pTab = 
25ae0 30 3b 0a 20 20 20 20 7a 44 62 20 3d 20 30 3b 20  0;.    zDb = 0; 
25af0 20 2f 2a 20 4e 6f 74 20 6e 65 65 64 65 64 2e 20   /* Not needed. 
25b00 20 53 69 6c 65 6e 63 65 20 61 20 63 6f 6d 70 69   Silence a compi
25b10 6c 65 72 20 77 61 72 6e 69 6e 67 2e 20 2a 2f 0a  ler warning. */.
25b20 20 20 7d 0a 0a 23 69 66 64 65 66 20 53 51 4c 49    }..#ifdef SQLI
25b30 54 45 5f 45 4e 41 42 4c 45 5f 50 52 45 55 50 44  TE_ENABLE_PREUPD
25b40 41 54 45 5f 48 4f 4f 4b 0a 20 20 2f 2a 20 49 6e  ATE_HOOK.  /* In
25b50 76 6f 6b 65 20 74 68 65 20 70 72 65 2d 75 70 64  voke the pre-upd
25b60 61 74 65 20 68 6f 6f 6b 2c 20 69 66 20 61 6e 79  ate hook, if any
25b70 20 2a 2f 0a 20 20 69 66 28 20 70 54 61 62 20 29   */.  if( pTab )
25b80 7b 0a 20 20 20 20 69 66 28 20 64 62 2d 3e 78 50  {.    if( db->xP
25b90 72 65 55 70 64 61 74 65 43 61 6c 6c 62 61 63 6b  reUpdateCallback
25ba0 20 26 26 20 21 28 70 4f 70 2d 3e 70 35 20 26 20   && !(pOp->p5 & 
25bb0 4f 50 46 4c 41 47 5f 49 53 55 50 44 41 54 45 29  OPFLAG_ISUPDATE)
25bc0 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65   ){.      sqlite
25bd0 33 56 64 62 65 50 72 65 55 70 64 61 74 65 48 6f  3VdbePreUpdateHo
25be0 6f 6b 28 70 2c 20 70 43 2c 20 53 51 4c 49 54 45  ok(p, pC, SQLITE
25bf0 5f 49 4e 53 45 52 54 2c 20 7a 44 62 2c 20 70 54  _INSERT, zDb, pT
25c00 61 62 2c 20 78 2e 6e 4b 65 79 2c 70 4f 70 2d 3e  ab, x.nKey,pOp->
25c10 70 32 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69  p2);.    }.    i
25c20 66 28 20 64 62 2d 3e 78 55 70 64 61 74 65 43 61  f( db->xUpdateCa
25c30 6c 6c 62 61 63 6b 3d 3d 30 20 7c 7c 20 70 54 61  llback==0 || pTa
25c40 62 2d 3e 61 43 6f 6c 3d 3d 30 20 29 7b 0a 20 20  b->aCol==0 ){.  
25c50 20 20 20 20 2f 2a 20 50 72 65 76 65 6e 74 20 70      /* Prevent p
25c60 6f 73 74 2d 75 70 64 61 74 65 20 68 6f 6f 6b 20  ost-update hook 
25c70 66 72 6f 6d 20 72 75 6e 6e 69 6e 67 20 69 6e 20  from running in 
25c80 63 61 73 65 73 20 77 68 65 6e 20 69 74 20 73 68  cases when it sh
25c90 6f 75 6c 64 20 6e 6f 74 20 2a 2f 0a 20 20 20 20  ould not */.    
25ca0 20 20 70 54 61 62 20 3d 20 30 3b 0a 20 20 20 20    pTab = 0;.    
25cb0 7d 0a 20 20 7d 0a 20 20 69 66 28 20 70 4f 70 2d  }.  }.  if( pOp-
25cc0 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 49 53 4e  >p5 & OPFLAG_ISN
25cd0 4f 4f 50 20 29 20 62 72 65 61 6b 3b 0a 23 65 6e  OOP ) break;.#en
25ce0 64 69 66 0a 0a 20 20 69 66 28 20 70 4f 70 2d 3e  dif..  if( pOp->
25cf0 70 35 20 26 20 4f 50 46 4c 41 47 5f 4e 43 48 41  p5 & OPFLAG_NCHA
25d00 4e 47 45 20 29 20 70 2d 3e 6e 43 68 61 6e 67 65  NGE ) p->nChange
25d10 2b 2b 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70  ++;.  if( pOp->p
25d20 35 20 26 20 4f 50 46 4c 41 47 5f 4c 41 53 54 52  5 & OPFLAG_LASTR
25d30 4f 57 49 44 20 29 20 64 62 2d 3e 6c 61 73 74 52  OWID ) db->lastR
25d40 6f 77 69 64 20 3d 20 78 2e 6e 4b 65 79 3b 0a 20  owid = x.nKey;. 
25d50 20 61 73 73 65 72 74 28 20 70 44 61 74 61 2d 3e   assert( pData->
25d60 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f 42 6c 6f  flags & (MEM_Blo
25d70 62 7c 4d 45 4d 5f 53 74 72 29 20 29 3b 0a 20 20  b|MEM_Str) );.  
25d80 78 2e 70 44 61 74 61 20 3d 20 70 44 61 74 61 2d  x.pData = pData-
25d90 3e 7a 3b 0a 20 20 78 2e 6e 44 61 74 61 20 3d 20  >z;.  x.nData = 
25da0 70 44 61 74 61 2d 3e 6e 3b 0a 20 20 73 65 65 6b  pData->n;.  seek
25db0 52 65 73 75 6c 74 20 3d 20 28 28 70 4f 70 2d 3e  Result = ((pOp->
25dc0 70 35 20 26 20 4f 50 46 4c 41 47 5f 55 53 45 53  p5 & OPFLAG_USES
25dd0 45 45 4b 52 45 53 55 4c 54 29 20 3f 20 70 43 2d  EEKRESULT) ? pC-
25de0 3e 73 65 65 6b 52 65 73 75 6c 74 20 3a 20 30 29  >seekResult : 0)
25df0 3b 0a 20 20 69 66 28 20 70 44 61 74 61 2d 3e 66  ;.  if( pData->f
25e00 6c 61 67 73 20 26 20 4d 45 4d 5f 5a 65 72 6f 20  lags & MEM_Zero 
25e10 29 7b 0a 20 20 20 20 78 2e 6e 5a 65 72 6f 20 3d  ){.    x.nZero =
25e20 20 70 44 61 74 61 2d 3e 75 2e 6e 5a 65 72 6f 3b   pData->u.nZero;
25e30 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 78 2e  .  }else{.    x.
25e40 6e 5a 65 72 6f 20 3d 20 30 3b 0a 20 20 7d 0a 20  nZero = 0;.  }. 
25e50 20 78 2e 70 4b 65 79 20 3d 20 30 3b 0a 20 20 72   x.pKey = 0;.  r
25e60 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
25e70 49 6e 73 65 72 74 28 70 43 2d 3e 75 63 2e 70 43  Insert(pC->uc.pC
25e80 75 72 73 6f 72 2c 20 26 78 2c 0a 20 20 20 20 20  ursor, &x,.     
25e90 20 28 70 4f 70 2d 3e 70 35 20 26 20 28 4f 50 46   (pOp->p5 & (OPF
25ea0 4c 41 47 5f 41 50 50 45 4e 44 7c 4f 50 46 4c 41  LAG_APPEND|OPFLA
25eb0 47 5f 53 41 56 45 50 4f 53 49 54 49 4f 4e 29 29  G_SAVEPOSITION))
25ec0 2c 20 73 65 65 6b 52 65 73 75 6c 74 0a 20 20 29  , seekResult.  )
25ed0 3b 0a 20 20 70 43 2d 3e 64 65 66 65 72 72 65 64  ;.  pC->deferred
25ee0 4d 6f 76 65 74 6f 20 3d 20 30 3b 0a 20 20 70 43  Moveto = 0;.  pC
25ef0 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d 20  ->cacheStatus = 
25f00 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 0a 20 20  CACHE_STALE;..  
25f10 2f 2a 20 49 6e 76 6f 6b 65 20 74 68 65 20 75 70  /* Invoke the up
25f20 64 61 74 65 2d 68 6f 6f 6b 20 69 66 20 72 65 71  date-hook if req
25f30 75 69 72 65 64 2e 20 2a 2f 0a 20 20 69 66 28 20  uired. */.  if( 
25f40 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f  rc ) goto abort_
25f50 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
25f60 69 66 28 20 70 54 61 62 20 29 7b 0a 20 20 20 20  if( pTab ){.    
25f70 61 73 73 65 72 74 28 20 64 62 2d 3e 78 55 70 64  assert( db->xUpd
25f80 61 74 65 43 61 6c 6c 62 61 63 6b 21 3d 30 20 29  ateCallback!=0 )
25f90 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 54  ;.    assert( pT
25fa0 61 62 2d 3e 61 43 6f 6c 21 3d 30 20 29 3b 0a 20  ab->aCol!=0 );. 
25fb0 20 20 20 64 62 2d 3e 78 55 70 64 61 74 65 43 61     db->xUpdateCa
25fc0 6c 6c 62 61 63 6b 28 64 62 2d 3e 70 55 70 64 61  llback(db->pUpda
25fd0 74 65 41 72 67 2c 0a 20 20 20 20 20 20 20 20 20  teArg,.         
25fe0 20 20 28 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46    (pOp->p5 & OPF
25ff0 4c 41 47 5f 49 53 55 50 44 41 54 45 29 20 3f 20  LAG_ISUPDATE) ? 
26000 53 51 4c 49 54 45 5f 55 50 44 41 54 45 20 3a 20  SQLITE_UPDATE : 
26010 53 51 4c 49 54 45 5f 49 4e 53 45 52 54 2c 0a 20  SQLITE_INSERT,. 
26020 20 20 20 20 20 20 20 20 20 20 7a 44 62 2c 20 70            zDb, p
26030 54 61 62 2d 3e 7a 4e 61 6d 65 2c 20 78 2e 6e 4b  Tab->zName, x.nK
26040 65 79 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  ey);.  }.  break
26050 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
26060 44 65 6c 65 74 65 20 50 31 20 50 32 20 50 33 20  Delete P1 P2 P3 
26070 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 44 65 6c 65  P4 P5.**.** Dele
26080 74 65 20 74 68 65 20 72 65 63 6f 72 64 20 61 74  te the record at
26090 20 77 68 69 63 68 20 74 68 65 20 50 31 20 63 75   which the P1 cu
260a0 72 73 6f 72 20 69 73 20 63 75 72 72 65 6e 74 6c  rsor is currentl
260b0 79 20 70 6f 69 6e 74 69 6e 67 2e 0a 2a 2a 0a 2a  y pointing..**.*
260c0 2a 20 49 66 20 74 68 65 20 4f 50 46 4c 41 47 5f  * If the OPFLAG_
260d0 53 41 56 45 50 4f 53 49 54 49 4f 4e 20 62 69 74  SAVEPOSITION bit
260e0 20 6f 66 20 74 68 65 20 50 35 20 70 61 72 61 6d   of the P5 param
260f0 65 74 65 72 20 69 73 20 73 65 74 2c 20 74 68 65  eter is set, the
26100 6e 0a 2a 2a 20 74 68 65 20 63 75 72 73 6f 72 20  n.** the cursor 
26110 77 69 6c 6c 20 62 65 20 6c 65 66 74 20 70 6f 69  will be left poi
26120 6e 74 69 6e 67 20 61 74 20 20 65 69 74 68 65 72  nting at  either
26130 20 74 68 65 20 6e 65 78 74 20 6f 72 20 74 68 65   the next or the
26140 20 70 72 65 76 69 6f 75 73 0a 2a 2a 20 72 65 63   previous.** rec
26150 6f 72 64 20 69 6e 20 74 68 65 20 74 61 62 6c 65  ord in the table
26160 2e 20 49 66 20 69 74 20 69 73 20 6c 65 66 74 20  . If it is left 
26170 70 6f 69 6e 74 69 6e 67 20 61 74 20 74 68 65 20  pointing at the 
26180 6e 65 78 74 20 72 65 63 6f 72 64 2c 20 74 68 65  next record, the
26190 6e 0a 2a 2a 20 74 68 65 20 6e 65 78 74 20 4e 65  n.** the next Ne
261a0 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 77  xt instruction w
261b0 69 6c 6c 20 62 65 20 61 20 6e 6f 2d 6f 70 2e 20  ill be a no-op. 
261c0 41 73 20 61 20 72 65 73 75 6c 74 2c 20 69 6e 20  As a result, in 
261d0 74 68 69 73 20 63 61 73 65 0a 2a 2a 20 69 74 20  this case.** it 
261e0 69 73 20 6f 6b 20 74 6f 20 64 65 6c 65 74 65 20  is ok to delete 
261f0 61 20 72 65 63 6f 72 64 20 66 72 6f 6d 20 77 69  a record from wi
26200 74 68 69 6e 20 61 20 4e 65 78 74 20 6c 6f 6f 70  thin a Next loop
26210 2e 20 49 66 20 0a 2a 2a 20 4f 50 46 4c 41 47 5f  . If .** OPFLAG_
26220 53 41 56 45 50 4f 53 49 54 49 4f 4e 20 62 69 74  SAVEPOSITION bit
26230 20 6f 66 20 50 35 20 69 73 20 63 6c 65 61 72 2c   of P5 is clear,
26240 20 74 68 65 6e 20 74 68 65 20 63 75 72 73 6f 72   then the cursor
26250 20 77 69 6c 6c 20 62 65 0a 2a 2a 20 6c 65 66 74   will be.** left
26260 20 69 6e 20 61 6e 20 75 6e 64 65 66 69 6e 65 64   in an undefined
26270 20 73 74 61 74 65 2e 0a 2a 2a 0a 2a 2a 20 49 66   state..**.** If
26280 20 74 68 65 20 4f 50 46 4c 41 47 5f 41 55 58 44   the OPFLAG_AUXD
26290 45 4c 45 54 45 20 62 69 74 20 69 73 20 73 65 74  ELETE bit is set
262a0 20 6f 6e 20 50 35 2c 20 74 68 61 74 20 69 6e 64   on P5, that ind
262b0 69 63 61 74 65 73 20 74 68 61 74 20 74 68 69 73  icates that this
262c0 0a 2a 2a 20 64 65 6c 65 74 65 20 6f 6e 65 20 6f  .** delete one o
262d0 66 20 73 65 76 65 72 61 6c 20 61 73 73 6f 63 69  f several associ
262e0 61 74 65 64 20 77 69 74 68 20 64 65 6c 65 74 69  ated with deleti
262f0 6e 67 20 61 20 74 61 62 6c 65 20 72 6f 77 20 61  ng a table row a
26300 6e 64 20 61 6c 6c 20 69 74 73 0a 2a 2a 20 61 73  nd all its.** as
26310 73 6f 63 69 61 74 65 64 20 69 6e 64 65 78 20 65  sociated index e
26320 6e 74 72 69 65 73 2e 20 20 45 78 61 63 74 6c 79  ntries.  Exactly
26330 20 6f 6e 65 20 6f 66 20 74 68 6f 73 65 20 64 65   one of those de
26340 6c 65 74 65 73 20 69 73 20 74 68 65 20 22 70 72  letes is the "pr
26350 69 6d 61 72 79 22 0a 2a 2a 20 64 65 6c 65 74 65  imary".** delete
26360 2e 20 20 54 68 65 20 6f 74 68 65 72 73 20 61 72  .  The others ar
26370 65 20 61 6c 6c 20 6f 6e 20 4f 50 46 4c 41 47 5f  e all on OPFLAG_
26380 46 4f 52 44 45 4c 45 54 45 20 63 75 72 73 6f 72  FORDELETE cursor
26390 73 20 6f 72 20 65 6c 73 65 20 61 72 65 0a 2a 2a  s or else are.**
263a0 20 6d 61 72 6b 65 64 20 77 69 74 68 20 74 68 65   marked with the
263b0 20 41 55 58 44 45 4c 45 54 45 20 66 6c 61 67 2e   AUXDELETE flag.
263c0 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 4f 50  .**.** If the OP
263d0 46 4c 41 47 5f 4e 43 48 41 4e 47 45 20 66 6c 61  FLAG_NCHANGE fla
263e0 67 20 6f 66 20 50 32 20 28 4e 42 3a 20 50 32 20  g of P2 (NB: P2 
263f0 6e 6f 74 20 50 35 29 20 69 73 20 73 65 74 2c 20  not P5) is set, 
26400 74 68 65 6e 20 74 68 65 20 72 6f 77 0a 2a 2a 20  then the row.** 
26410 63 68 61 6e 67 65 20 63 6f 75 6e 74 20 69 73 20  change count is 
26420 69 6e 63 72 65 6d 65 6e 74 65 64 20 28 6f 74 68  incremented (oth
26430 65 72 77 69 73 65 20 6e 6f 74 29 2e 0a 2a 2a 0a  erwise not)..**.
26440 2a 2a 20 50 31 20 6d 75 73 74 20 6e 6f 74 20 62  ** P1 must not b
26450 65 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 2e 20  e pseudo-table. 
26460 20 49 74 20 68 61 73 20 74 6f 20 62 65 20 61 20   It has to be a 
26470 72 65 61 6c 20 74 61 62 6c 65 20 77 69 74 68 0a  real table with.
26480 2a 2a 20 6d 75 6c 74 69 70 6c 65 20 72 6f 77 73  ** multiple rows
26490 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 34 20 69 73  ..**.** If P4 is
264a0 20 6e 6f 74 20 4e 55 4c 4c 20 74 68 65 6e 20 69   not NULL then i
264b0 74 20 70 6f 69 6e 74 73 20 74 6f 20 61 20 54 61  t points to a Ta
264c0 62 6c 65 20 6f 62 6a 65 63 74 2e 20 49 6e 20 74  ble object. In t
264d0 68 69 73 20 63 61 73 65 20 65 69 74 68 65 72 20  his case either 
264e0 0a 2a 2a 20 74 68 65 20 75 70 64 61 74 65 20 6f  .** the update o
264f0 72 20 70 72 65 2d 75 70 64 61 74 65 20 68 6f 6f  r pre-update hoo
26500 6b 2c 20 6f 72 20 62 6f 74 68 2c 20 6d 61 79 20  k, or both, may 
26510 62 65 20 69 6e 76 6f 6b 65 64 2e 20 54 68 65 20  be invoked. The 
26520 50 31 20 63 75 72 73 6f 72 20 6d 75 73 74 0a 2a  P1 cursor must.*
26530 2a 20 68 61 76 65 20 62 65 65 6e 20 70 6f 73 69  * have been posi
26540 74 69 6f 6e 65 64 20 75 73 69 6e 67 20 4f 50 5f  tioned using OP_
26550 4e 6f 74 46 6f 75 6e 64 20 70 72 69 6f 72 20 74  NotFound prior t
26560 6f 20 69 6e 76 6f 6b 69 6e 67 20 74 68 69 73 20  o invoking this 
26570 6f 70 63 6f 64 65 20 69 6e 20 0a 2a 2a 20 74 68  opcode in .** th
26580 69 73 20 63 61 73 65 2e 20 53 70 65 63 69 66 69  is case. Specifi
26590 63 61 6c 6c 79 2c 20 69 66 20 6f 6e 65 20 69 73  cally, if one is
265a0 20 63 6f 6e 66 69 67 75 72 65 64 2c 20 74 68 65   configured, the
265b0 20 70 72 65 2d 75 70 64 61 74 65 20 68 6f 6f 6b   pre-update hook
265c0 20 69 73 20 0a 2a 2a 20 69 6e 76 6f 6b 65 64 20   is .** invoked 
265d0 69 66 20 50 34 20 69 73 20 6e 6f 74 20 4e 55 4c  if P4 is not NUL
265e0 4c 2e 20 54 68 65 20 75 70 64 61 74 65 2d 68 6f  L. The update-ho
265f0 6f 6b 20 69 73 20 69 6e 76 6f 6b 65 64 20 69 66  ok is invoked if
26600 20 6f 6e 65 20 69 73 20 63 6f 6e 66 69 67 75 72   one is configur
26610 65 64 2c 20 0a 2a 2a 20 50 34 20 69 73 20 6e 6f  ed, .** P4 is no
26620 74 20 4e 55 4c 4c 2c 20 61 6e 64 20 74 68 65 20  t NULL, and the 
26630 4f 50 46 4c 41 47 5f 4e 43 48 41 4e 47 45 20 66  OPFLAG_NCHANGE f
26640 6c 61 67 20 69 73 20 73 65 74 20 69 6e 20 50 32  lag is set in P2
26650 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 4f  ..**.** If the O
26660 50 46 4c 41 47 5f 49 53 55 50 44 41 54 45 20 66  PFLAG_ISUPDATE f
26670 6c 61 67 20 69 73 20 73 65 74 20 69 6e 20 50 32  lag is set in P2
26680 2c 20 74 68 65 6e 20 50 33 20 63 6f 6e 74 61 69  , then P3 contai
26690 6e 73 20 74 68 65 20 61 64 64 72 65 73 73 0a 2a  ns the address.*
266a0 2a 20 6f 66 20 74 68 65 20 6d 65 6d 6f 72 79 20  * of the memory 
266b0 63 65 6c 6c 20 74 68 61 74 20 63 6f 6e 74 61 69  cell that contai
266c0 6e 73 20 74 68 65 20 76 61 6c 75 65 20 74 68 61  ns the value tha
266d0 74 20 74 68 65 20 72 6f 77 69 64 20 6f 66 20 74  t the rowid of t
266e0 68 65 20 72 6f 77 20 77 69 6c 6c 0a 2a 2a 20 62  he row will.** b
266f0 65 20 73 65 74 20 74 6f 20 62 79 20 74 68 65 20  e set to by the 
26700 75 70 64 61 74 65 2e 0a 2a 2f 0a 63 61 73 65 20  update..*/.case 
26710 4f 50 5f 44 65 6c 65 74 65 3a 20 7b 0a 20 20 56  OP_Delete: {.  V
26720 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20  dbeCursor *pC;. 
26730 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 44 62   const char *zDb
26740 3b 0a 20 20 54 61 62 6c 65 20 2a 70 54 61 62 3b  ;.  Table *pTab;
26750 0a 20 20 69 6e 74 20 6f 70 66 6c 61 67 73 3b 0a  .  int opflags;.
26760 0a 20 20 6f 70 66 6c 61 67 73 20 3d 20 70 4f 70  .  opflags = pOp
26770 2d 3e 70 32 3b 0a 20 20 61 73 73 65 72 74 28 20  ->p2;.  assert( 
26780 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f  pOp->p1>=0 && pO
26790 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72  p->p1<p->nCursor
267a0 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70   );.  pC = p->ap
267b0 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Csr[pOp->p1];.  
267c0 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b  assert( pC!=0 );
267d0 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 65  .  assert( pC->e
267e0 43 75 72 54 79 70 65 3d 3d 43 55 52 54 59 50 45  CurType==CURTYPE
267f0 5f 42 54 52 45 45 20 29 3b 0a 20 20 61 73 73 65  _BTREE );.  asse
26800 72 74 28 20 70 43 2d 3e 75 63 2e 70 43 75 72 73  rt( pC->uc.pCurs
26810 6f 72 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  or!=0 );.  asser
26820 74 28 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d  t( pC->deferredM
26830 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a 20 20 73 71  oveto==0 );.  sq
26840 6c 69 74 65 33 56 64 62 65 49 6e 63 72 57 72 69  lite3VdbeIncrWri
26850 74 65 43 6f 75 6e 74 65 72 28 70 2c 20 70 43 29  teCounter(p, pC)
26860 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  ;..#ifdef SQLITE
26870 5f 44 45 42 55 47 0a 20 20 69 66 28 20 70 4f 70  _DEBUG.  if( pOp
26880 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 54 41 42  ->p4type==P4_TAB
26890 4c 45 20 26 26 20 48 61 73 52 6f 77 69 64 28 70  LE && HasRowid(p
268a0 4f 70 2d 3e 70 34 2e 70 54 61 62 29 20 26 26 20  Op->p4.pTab) && 
268b0 70 4f 70 2d 3e 70 35 3d 3d 30 20 29 7b 0a 20 20  pOp->p5==0 ){.  
268c0 20 20 2f 2a 20 49 66 20 70 35 20 69 73 20 7a 65    /* If p5 is ze
268d0 72 6f 2c 20 74 68 65 20 73 65 65 6b 20 6f 70 65  ro, the seek ope
268e0 72 61 74 69 6f 6e 20 74 68 61 74 20 70 6f 73 69  ration that posi
268f0 74 69 6f 6e 65 64 20 74 68 65 20 63 75 72 73 6f  tioned the curso
26900 72 20 70 72 69 6f 72 20 74 6f 0a 20 20 20 20 2a  r prior to.    *
26910 2a 20 4f 50 5f 44 65 6c 65 74 65 20 77 69 6c 6c  * OP_Delete will
26920 20 68 61 76 65 20 61 6c 73 6f 20 73 65 74 20 74   have also set t
26930 68 65 20 70 43 2d 3e 6d 6f 76 65 74 6f 54 61 72  he pC->movetoTar
26940 67 65 74 20 66 69 65 6c 64 20 74 6f 20 74 68 65  get field to the
26950 20 72 6f 77 69 64 20 6f 66 0a 20 20 20 20 2a 2a   rowid of.    **
26960 20 74 68 65 20 72 6f 77 20 74 68 61 74 20 69 73   the row that is
26970 20 62 65 69 6e 67 20 64 65 6c 65 74 65 64 20 2a   being deleted *
26980 2f 0a 20 20 20 20 69 36 34 20 69 4b 65 79 20 3d  /.    i64 iKey =
26990 20 73 71 6c 69 74 65 33 42 74 72 65 65 49 6e 74   sqlite3BtreeInt
269a0 65 67 65 72 4b 65 79 28 70 43 2d 3e 75 63 2e 70  egerKey(pC->uc.p
269b0 43 75 72 73 6f 72 29 3b 0a 20 20 20 20 61 73 73  Cursor);.    ass
269c0 65 72 74 28 20 70 43 2d 3e 6d 6f 76 65 74 6f 54  ert( pC->movetoT
269d0 61 72 67 65 74 3d 3d 69 4b 65 79 20 29 3b 0a 20  arget==iKey );. 
269e0 20 7d 0a 23 65 6e 64 69 66 0a 0a 20 20 2f 2a 20   }.#endif..  /* 
269f0 49 66 20 74 68 65 20 75 70 64 61 74 65 2d 68 6f  If the update-ho
26a00 6f 6b 20 6f 72 20 70 72 65 2d 75 70 64 61 74 65  ok or pre-update
26a10 2d 68 6f 6f 6b 20 77 69 6c 6c 20 62 65 20 69 6e  -hook will be in
26a20 76 6f 6b 65 64 2c 20 73 65 74 20 7a 44 62 20 74  voked, set zDb t
26a30 6f 0a 20 20 2a 2a 20 74 68 65 20 6e 61 6d 65 20  o.  ** the name 
26a40 6f 66 20 74 68 65 20 64 62 20 74 6f 20 70 61 73  of the db to pas
26a50 73 20 61 73 20 74 6f 20 69 74 2e 20 41 6c 73 6f  s as to it. Also
26a60 20 73 65 74 20 6c 6f 63 61 6c 20 70 54 61 62 20   set local pTab 
26a70 74 6f 20 61 20 63 6f 70 79 0a 20 20 2a 2a 20 6f  to a copy.  ** o
26a80 66 20 70 34 2e 70 54 61 62 2e 20 46 69 6e 61 6c  f p4.pTab. Final
26a90 6c 79 2c 20 69 66 20 70 35 20 69 73 20 74 72 75  ly, if p5 is tru
26aa0 65 2c 20 69 6e 64 69 63 61 74 69 6e 67 20 74 68  e, indicating th
26ab0 61 74 20 74 68 69 73 20 63 75 72 73 6f 72 20 77  at this cursor w
26ac0 61 73 0a 20 20 2a 2a 20 6c 61 73 74 20 6d 6f 76  as.  ** last mov
26ad0 65 64 20 77 69 74 68 20 4f 50 5f 4e 65 78 74 20  ed with OP_Next 
26ae0 6f 72 20 4f 50 5f 50 72 65 76 2c 20 6e 6f 74 20  or OP_Prev, not 
26af0 53 65 65 6b 20 6f 72 20 4e 6f 74 46 6f 75 6e 64  Seek or NotFound
26b00 2c 20 73 65 74 20 0a 20 20 2a 2a 20 56 64 62 65  , set .  ** Vdbe
26b10 43 75 72 73 6f 72 2e 6d 6f 76 65 74 6f 54 61 72  Cursor.movetoTar
26b20 67 65 74 20 74 6f 20 74 68 65 20 63 75 72 72 65  get to the curre
26b30 6e 74 20 72 6f 77 69 64 2e 20 20 2a 2f 0a 20 20  nt rowid.  */.  
26b40 69 66 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d  if( pOp->p4type=
26b50 3d 50 34 5f 54 41 42 4c 45 20 26 26 20 48 41 53  =P4_TABLE && HAS
26b60 5f 55 50 44 41 54 45 5f 48 4f 4f 4b 28 64 62 29  _UPDATE_HOOK(db)
26b70 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20   ){.    assert( 
26b80 70 43 2d 3e 69 44 62 3e 3d 30 20 29 3b 0a 20 20  pC->iDb>=0 );.  
26b90 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
26ba0 34 2e 70 54 61 62 21 3d 30 20 29 3b 0a 20 20 20  4.pTab!=0 );.   
26bb0 20 7a 44 62 20 3d 20 64 62 2d 3e 61 44 62 5b 70   zDb = db->aDb[p
26bc0 43 2d 3e 69 44 62 5d 2e 7a 44 62 53 4e 61 6d 65  C->iDb].zDbSName
26bd0 3b 0a 20 20 20 20 70 54 61 62 20 3d 20 70 4f 70  ;.    pTab = pOp
26be0 2d 3e 70 34 2e 70 54 61 62 3b 0a 20 20 20 20 69  ->p4.pTab;.    i
26bf0 66 28 20 28 70 4f 70 2d 3e 70 35 20 26 20 4f 50  f( (pOp->p5 & OP
26c00 46 4c 41 47 5f 53 41 56 45 50 4f 53 49 54 49 4f  FLAG_SAVEPOSITIO
26c10 4e 29 21 3d 30 20 26 26 20 70 43 2d 3e 69 73 54  N)!=0 && pC->isT
26c20 61 62 6c 65 20 29 7b 0a 20 20 20 20 20 20 70 43  able ){.      pC
26c30 2d 3e 6d 6f 76 65 74 6f 54 61 72 67 65 74 20 3d  ->movetoTarget =
26c40 20 73 71 6c 69 74 65 33 42 74 72 65 65 49 6e 74   sqlite3BtreeInt
26c50 65 67 65 72 4b 65 79 28 70 43 2d 3e 75 63 2e 70  egerKey(pC->uc.p
26c60 43 75 72 73 6f 72 29 3b 0a 20 20 20 20 7d 0a 20  Cursor);.    }. 
26c70 20 7d 65 6c 73 65 7b 0a 20 20 20 20 7a 44 62 20   }else{.    zDb 
26c80 3d 20 30 3b 20 20 20 2f 2a 20 4e 6f 74 20 6e 65  = 0;   /* Not ne
26c90 65 64 65 64 2e 20 20 53 69 6c 65 6e 63 65 20 61  eded.  Silence a
26ca0 20 63 6f 6d 70 69 6c 65 72 20 77 61 72 6e 69 6e   compiler warnin
26cb0 67 2e 20 2a 2f 0a 20 20 20 20 70 54 61 62 20 3d  g. */.    pTab =
26cc0 20 30 3b 20 20 2f 2a 20 4e 6f 74 20 6e 65 65 64   0;  /* Not need
26cd0 65 64 2e 20 20 53 69 6c 65 6e 63 65 20 61 20 63  ed.  Silence a c
26ce0 6f 6d 70 69 6c 65 72 20 77 61 72 6e 69 6e 67 2e  ompiler warning.
26cf0 20 2a 2f 0a 20 20 7d 0a 0a 23 69 66 64 65 66 20   */.  }..#ifdef 
26d00 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 50 52  SQLITE_ENABLE_PR
26d10 45 55 50 44 41 54 45 5f 48 4f 4f 4b 0a 20 20 2f  EUPDATE_HOOK.  /
26d20 2a 20 49 6e 76 6f 6b 65 20 74 68 65 20 70 72 65  * Invoke the pre
26d30 2d 75 70 64 61 74 65 2d 68 6f 6f 6b 20 69 66 20  -update-hook if 
26d40 72 65 71 75 69 72 65 64 2e 20 2a 2f 0a 20 20 69  required. */.  i
26d50 66 28 20 64 62 2d 3e 78 50 72 65 55 70 64 61 74  f( db->xPreUpdat
26d60 65 43 61 6c 6c 62 61 63 6b 20 26 26 20 70 4f 70  eCallback && pOp
26d70 2d 3e 70 34 2e 70 54 61 62 20 29 7b 0a 20 20 20  ->p4.pTab ){.   
26d80 20 61 73 73 65 72 74 28 20 21 28 6f 70 66 6c 61   assert( !(opfla
26d90 67 73 20 26 20 4f 50 46 4c 41 47 5f 49 53 55 50  gs & OPFLAG_ISUP
26da0 44 41 54 45 29 20 0a 20 20 20 20 20 20 20 20 20  DATE) .         
26db0 7c 7c 20 48 61 73 52 6f 77 69 64 28 70 54 61 62  || HasRowid(pTab
26dc0 29 3d 3d 30 20 0a 20 20 20 20 20 20 20 20 20 7c  )==0 .         |
26dd0 7c 20 28 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  | (aMem[pOp->p3]
26de0 2e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74  .flags & MEM_Int
26df0 29 20 0a 20 20 20 20 29 3b 0a 20 20 20 20 73 71  ) .    );.    sq
26e00 6c 69 74 65 33 56 64 62 65 50 72 65 55 70 64 61  lite3VdbePreUpda
26e10 74 65 48 6f 6f 6b 28 70 2c 20 70 43 2c 0a 20 20  teHook(p, pC,.  
26e20 20 20 20 20 20 20 28 6f 70 66 6c 61 67 73 20 26        (opflags &
26e30 20 4f 50 46 4c 41 47 5f 49 53 55 50 44 41 54 45   OPFLAG_ISUPDATE
26e40 29 20 3f 20 53 51 4c 49 54 45 5f 55 50 44 41 54  ) ? SQLITE_UPDAT
26e50 45 20 3a 20 53 51 4c 49 54 45 5f 44 45 4c 45 54  E : SQLITE_DELET
26e60 45 2c 20 0a 20 20 20 20 20 20 20 20 7a 44 62 2c  E, .        zDb,
26e70 20 70 54 61 62 2c 20 70 43 2d 3e 6d 6f 76 65 74   pTab, pC->movet
26e80 6f 54 61 72 67 65 74 2c 0a 20 20 20 20 20 20 20  oTarget,.       
26e90 20 70 4f 70 2d 3e 70 33 0a 20 20 20 20 29 3b 0a   pOp->p3.    );.
26ea0 20 20 7d 0a 20 20 69 66 28 20 6f 70 66 6c 61 67    }.  if( opflag
26eb0 73 20 26 20 4f 50 46 4c 41 47 5f 49 53 4e 4f 4f  s & OPFLAG_ISNOO
26ec0 50 20 29 20 62 72 65 61 6b 3b 0a 23 65 6e 64 69  P ) break;.#endi
26ed0 66 0a 20 0a 20 20 2f 2a 20 4f 6e 6c 79 20 66 6c  f. .  /* Only fl
26ee0 61 67 73 20 74 68 61 74 20 63 61 6e 20 62 65 20  ags that can be 
26ef0 73 65 74 20 61 72 65 20 53 41 56 45 50 4f 49 53  set are SAVEPOIS
26f00 54 49 4f 4e 20 61 6e 64 20 41 55 58 44 45 4c 45  TION and AUXDELE
26f10 54 45 20 2a 2f 20 0a 20 20 61 73 73 65 72 74 28  TE */ .  assert(
26f20 20 28 70 4f 70 2d 3e 70 35 20 26 20 7e 28 4f 50   (pOp->p5 & ~(OP
26f30 46 4c 41 47 5f 53 41 56 45 50 4f 53 49 54 49 4f  FLAG_SAVEPOSITIO
26f40 4e 7c 4f 50 46 4c 41 47 5f 41 55 58 44 45 4c 45  N|OPFLAG_AUXDELE
26f50 54 45 29 29 3d 3d 30 20 29 3b 0a 20 20 61 73 73  TE))==0 );.  ass
26f60 65 72 74 28 20 4f 50 46 4c 41 47 5f 53 41 56 45  ert( OPFLAG_SAVE
26f70 50 4f 53 49 54 49 4f 4e 3d 3d 42 54 52 45 45 5f  POSITION==BTREE_
26f80 53 41 56 45 50 4f 53 49 54 49 4f 4e 20 29 3b 0a  SAVEPOSITION );.
26f90 20 20 61 73 73 65 72 74 28 20 4f 50 46 4c 41 47    assert( OPFLAG
26fa0 5f 41 55 58 44 45 4c 45 54 45 3d 3d 42 54 52 45  _AUXDELETE==BTRE
26fb0 45 5f 41 55 58 44 45 4c 45 54 45 20 29 3b 0a 0a  E_AUXDELETE );..
26fc0 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45  #ifdef SQLITE_DE
26fd0 42 55 47 0a 20 20 69 66 28 20 70 2d 3e 70 46 72  BUG.  if( p->pFr
26fe0 61 6d 65 3d 3d 30 20 29 7b 0a 20 20 20 20 69 66  ame==0 ){.    if
26ff0 28 20 70 43 2d 3e 69 73 45 70 68 65 6d 65 72 61  ( pC->isEphemera
27000 6c 3d 3d 30 0a 20 20 20 20 20 20 20 20 26 26 20  l==0.        && 
27010 28 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41  (pOp->p5 & OPFLA
27020 47 5f 41 55 58 44 45 4c 45 54 45 29 3d 3d 30 0a  G_AUXDELETE)==0.
27030 20 20 20 20 20 20 20 20 26 26 20 28 70 43 2d 3e          && (pC->
27040 77 72 46 6c 61 67 20 26 20 4f 50 46 4c 41 47 5f  wrFlag & OPFLAG_
27050 46 4f 52 44 45 4c 45 54 45 29 3d 3d 30 0a 20 20  FORDELETE)==0.  
27060 20 20 20 20 29 7b 0a 20 20 20 20 20 20 6e 45 78      ){.      nEx
27070 74 72 61 44 65 6c 65 74 65 2b 2b 3b 0a 20 20 20  traDelete++;.   
27080 20 7d 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e   }.    if( pOp->
27090 70 32 20 26 20 4f 50 46 4c 41 47 5f 4e 43 48 41  p2 & OPFLAG_NCHA
270a0 4e 47 45 20 29 7b 0a 20 20 20 20 20 20 6e 45 78  NGE ){.      nEx
270b0 74 72 61 44 65 6c 65 74 65 2d 2d 3b 0a 20 20 20  traDelete--;.   
270c0 20 7d 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 20   }.  }.#endif.. 
270d0 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
270e0 65 65 44 65 6c 65 74 65 28 70 43 2d 3e 75 63 2e  eeDelete(pC->uc.
270f0 70 43 75 72 73 6f 72 2c 20 70 4f 70 2d 3e 70 35  pCursor, pOp->p5
27100 29 3b 0a 20 20 70 43 2d 3e 63 61 63 68 65 53 74  );.  pC->cacheSt
27110 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41  atus = CACHE_STA
27120 4c 45 3b 0a 20 20 70 43 2d 3e 73 65 65 6b 52 65  LE;.  pC->seekRe
27130 73 75 6c 74 20 3d 20 30 3b 0a 20 20 69 66 28 20  sult = 0;.  if( 
27140 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f  rc ) goto abort_
27150 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 0a 20  due_to_error;.. 
27160 20 2f 2a 20 49 6e 76 6f 6b 65 20 74 68 65 20 75   /* Invoke the u
27170 70 64 61 74 65 2d 68 6f 6f 6b 20 69 66 20 72 65  pdate-hook if re
27180 71 75 69 72 65 64 2e 20 2a 2f 0a 20 20 69 66 28  quired. */.  if(
27190 20 6f 70 66 6c 61 67 73 20 26 20 4f 50 46 4c 41   opflags & OPFLA
271a0 47 5f 4e 43 48 41 4e 47 45 20 29 7b 0a 20 20 20  G_NCHANGE ){.   
271b0 20 70 2d 3e 6e 43 68 61 6e 67 65 2b 2b 3b 0a 20   p->nChange++;. 
271c0 20 20 20 69 66 28 20 64 62 2d 3e 78 55 70 64 61     if( db->xUpda
271d0 74 65 43 61 6c 6c 62 61 63 6b 20 26 26 20 48 61  teCallback && Ha
271e0 73 52 6f 77 69 64 28 70 54 61 62 29 20 29 7b 0a  sRowid(pTab) ){.
271f0 20 20 20 20 20 20 64 62 2d 3e 78 55 70 64 61 74        db->xUpdat
27200 65 43 61 6c 6c 62 61 63 6b 28 64 62 2d 3e 70 55  eCallback(db->pU
27210 70 64 61 74 65 41 72 67 2c 20 53 51 4c 49 54 45  pdateArg, SQLITE
27220 5f 44 45 4c 45 54 45 2c 20 7a 44 62 2c 20 70 54  _DELETE, zDb, pT
27230 61 62 2d 3e 7a 4e 61 6d 65 2c 0a 20 20 20 20 20  ab->zName,.     
27240 20 20 20 20 20 70 43 2d 3e 6d 6f 76 65 74 6f 54       pC->movetoT
27250 61 72 67 65 74 29 3b 0a 20 20 20 20 20 20 61 73  arget);.      as
27260 73 65 72 74 28 20 70 43 2d 3e 69 44 62 3e 3d 30  sert( pC->iDb>=0
27270 20 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 0a 20   );.    }.  }.. 
27280 20 62 72 65 61 6b 3b 0a 7d 0a 2f 2a 20 4f 70 63   break;.}./* Opc
27290 6f 64 65 3a 20 52 65 73 65 74 43 6f 75 6e 74 20  ode: ResetCount 
272a0 2a 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20  * * * * *.**.** 
272b0 54 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65  The value of the
272c0 20 63 68 61 6e 67 65 20 63 6f 75 6e 74 65 72 20   change counter 
272d0 69 73 20 63 6f 70 69 65 64 20 74 6f 20 74 68 65  is copied to the
272e0 20 64 61 74 61 62 61 73 65 20 68 61 6e 64 6c 65   database handle
272f0 0a 2a 2a 20 63 68 61 6e 67 65 20 63 6f 75 6e 74  .** change count
27300 65 72 20 28 72 65 74 75 72 6e 65 64 20 62 79 20  er (returned by 
27310 73 75 62 73 65 71 75 65 6e 74 20 63 61 6c 6c 73  subsequent calls
27320 20 74 6f 20 73 71 6c 69 74 65 33 5f 63 68 61 6e   to sqlite3_chan
27330 67 65 73 28 29 29 2e 0a 2a 2a 20 54 68 65 6e 20  ges())..** Then 
27340 74 68 65 20 56 4d 73 20 69 6e 74 65 72 6e 61 6c  the VMs internal
27350 20 63 68 61 6e 67 65 20 63 6f 75 6e 74 65 72 20   change counter 
27360 72 65 73 65 74 73 20 74 6f 20 30 2e 0a 2a 2a 20  resets to 0..** 
27370 54 68 69 73 20 69 73 20 75 73 65 64 20 62 79 20  This is used by 
27380 74 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d 73  trigger programs
27390 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65 73  ..*/.case OP_Res
273a0 65 74 43 6f 75 6e 74 3a 20 7b 0a 20 20 73 71 6c  etCount: {.  sql
273b0 69 74 65 33 56 64 62 65 53 65 74 43 68 61 6e 67  ite3VdbeSetChang
273c0 65 73 28 64 62 2c 20 70 2d 3e 6e 43 68 61 6e 67  es(db, p->nChang
273d0 65 29 3b 0a 20 20 70 2d 3e 6e 43 68 61 6e 67 65  e);.  p->nChange
273e0 20 3d 20 30 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d   = 0;.  break;.}
273f0 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 6f 72  ../* Opcode: Sor
27400 74 65 72 43 6f 6d 70 61 72 65 20 50 31 20 50 32  terCompare P1 P2
27410 20 50 33 20 50 34 0a 2a 2a 20 53 79 6e 6f 70 73   P3 P4.** Synops
27420 69 73 3a 20 69 66 20 6b 65 79 28 50 31 29 21 3d  is: if key(P1)!=
27430 74 72 69 6d 28 72 5b 50 33 5d 2c 50 34 29 20 67  trim(r[P3],P4) g
27440 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 50 31 20  oto P2.**.** P1 
27450 69 73 20 61 20 73 6f 72 74 65 72 20 63 75 72 73  is a sorter curs
27460 6f 72 2e 20 54 68 69 73 20 69 6e 73 74 72 75 63  or. This instruc
27470 74 69 6f 6e 20 63 6f 6d 70 61 72 65 73 20 61 20  tion compares a 
27480 70 72 65 66 69 78 20 6f 66 20 74 68 65 0a 2a 2a  prefix of the.**
27490 20 72 65 63 6f 72 64 20 62 6c 6f 62 20 69 6e 20   record blob in 
274a0 72 65 67 69 73 74 65 72 20 50 33 20 61 67 61 69  register P3 agai
274b0 6e 73 74 20 61 20 70 72 65 66 69 78 20 6f 66 20  nst a prefix of 
274c0 74 68 65 20 65 6e 74 72 79 20 74 68 61 74 20 0a  the entry that .
274d0 2a 2a 20 74 68 65 20 73 6f 72 74 65 72 20 63 75  ** the sorter cu
274e0 72 73 6f 72 20 63 75 72 72 65 6e 74 6c 79 20 70  rsor currently p
274f0 6f 69 6e 74 73 20 74 6f 2e 20 20 4f 6e 6c 79 20  oints to.  Only 
27500 74 68 65 20 66 69 72 73 74 20 50 34 20 66 69 65  the first P4 fie
27510 6c 64 73 0a 2a 2a 20 6f 66 20 72 5b 50 33 5d 20  lds.** of r[P3] 
27520 61 6e 64 20 74 68 65 20 73 6f 72 74 65 72 20 72  and the sorter r
27530 65 63 6f 72 64 20 61 72 65 20 63 6f 6d 70 61 72  ecord are compar
27540 65 64 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 65 69 74  ed..**.** If eit
27550 68 65 72 20 50 33 20 6f 72 20 74 68 65 20 73 6f  her P3 or the so
27560 72 74 65 72 20 63 6f 6e 74 61 69 6e 73 20 61 20  rter contains a 
27570 4e 55 4c 4c 20 69 6e 20 6f 6e 65 20 6f 66 20 74  NULL in one of t
27580 68 65 69 72 20 73 69 67 6e 69 66 69 63 61 6e 74  heir significant
27590 0a 2a 2a 20 66 69 65 6c 64 73 20 28 6e 6f 74 20  .** fields (not 
275a0 63 6f 75 6e 74 69 6e 67 20 74 68 65 20 50 34 20  counting the P4 
275b0 66 69 65 6c 64 73 20 61 74 20 74 68 65 20 65 6e  fields at the en
275c0 64 20 77 68 69 63 68 20 61 72 65 20 69 67 6e 6f  d which are igno
275d0 72 65 64 29 20 74 68 65 6e 0a 2a 2a 20 74 68 65  red) then.** the
275e0 20 63 6f 6d 70 61 72 69 73 6f 6e 20 69 73 20 61   comparison is a
275f0 73 73 75 6d 65 64 20 74 6f 20 62 65 20 65 71 75  ssumed to be equ
27600 61 6c 2e 0a 2a 2a 0a 2a 2a 20 46 61 6c 6c 20 74  al..**.** Fall t
27610 68 72 6f 75 67 68 20 74 6f 20 6e 65 78 74 20 69  hrough to next i
27620 6e 73 74 72 75 63 74 69 6f 6e 20 69 66 20 74 68  nstruction if th
27630 65 20 74 77 6f 20 72 65 63 6f 72 64 73 20 63 6f  e two records co
27640 6d 70 61 72 65 20 65 71 75 61 6c 20 74 6f 0a 2a  mpare equal to.*
27650 2a 20 65 61 63 68 20 6f 74 68 65 72 2e 20 20 4a  * each other.  J
27660 75 6d 70 20 74 6f 20 50 32 20 69 66 20 74 68 65  ump to P2 if the
27670 79 20 61 72 65 20 64 69 66 66 65 72 65 6e 74 2e  y are different.
27680 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 6f 72 74  .*/.case OP_Sort
27690 65 72 43 6f 6d 70 61 72 65 3a 20 7b 0a 20 20 56  erCompare: {.  V
276a0 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20  dbeCursor *pC;. 
276b0 20 69 6e 74 20 72 65 73 3b 0a 20 20 69 6e 74 20   int res;.  int 
276c0 6e 4b 65 79 43 6f 6c 3b 0a 0a 20 20 70 43 20 3d  nKeyCol;..  pC =
276d0 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70   p->apCsr[pOp->p
276e0 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 69 73  1];.  assert( is
276f0 53 6f 72 74 65 72 28 70 43 29 20 29 3b 0a 20 20  Sorter(pC) );.  
27700 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74  assert( pOp->p4t
27710 79 70 65 3d 3d 50 34 5f 49 4e 54 33 32 20 29 3b  ype==P4_INT32 );
27720 0a 20 20 70 49 6e 33 20 3d 20 26 61 4d 65 6d 5b  .  pIn3 = &aMem[
27730 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 6e 4b 65 79  pOp->p3];.  nKey
27740 43 6f 6c 20 3d 20 70 4f 70 2d 3e 70 34 2e 69 3b  Col = pOp->p4.i;
27750 0a 20 20 72 65 73 20 3d 20 30 3b 0a 20 20 72 63  .  res = 0;.  rc
27760 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 53 6f   = sqlite3VdbeSo
27770 72 74 65 72 43 6f 6d 70 61 72 65 28 70 43 2c 20  rterCompare(pC, 
27780 70 49 6e 33 2c 20 6e 4b 65 79 43 6f 6c 2c 20 26  pIn3, nKeyCol, &
27790 72 65 73 29 3b 0a 20 20 56 64 62 65 42 72 61 6e  res);.  VdbeBran
277a0 63 68 54 61 6b 65 6e 28 72 65 73 21 3d 30 2c 32  chTaken(res!=0,2
277b0 29 3b 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f  );.  if( rc ) go
277c0 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
277d0 65 72 72 6f 72 3b 0a 20 20 69 66 28 20 72 65 73  error;.  if( res
277e0 20 29 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f   ) goto jump_to_
277f0 70 32 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 3b 0a  p2;.  break;.};.
27800 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 6f 72 74  ./* Opcode: Sort
27810 65 72 44 61 74 61 20 50 31 20 50 32 20 50 33 20  erData P1 P2 P3 
27820 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  * *.** Synopsis:
27830 20 72 5b 50 32 5d 3d 64 61 74 61 0a 2a 2a 0a 2a   r[P2]=data.**.*
27840 2a 20 57 72 69 74 65 20 69 6e 74 6f 20 72 65 67  * Write into reg
27850 69 73 74 65 72 20 50 32 20 74 68 65 20 63 75 72  ister P2 the cur
27860 72 65 6e 74 20 73 6f 72 74 65 72 20 64 61 74 61  rent sorter data
27870 20 66 6f 72 20 73 6f 72 74 65 72 20 63 75 72 73   for sorter curs
27880 6f 72 20 50 31 2e 0a 2a 2a 20 54 68 65 6e 20 63  or P1..** Then c
27890 6c 65 61 72 20 74 68 65 20 63 6f 6c 75 6d 6e 20  lear the column 
278a0 68 65 61 64 65 72 20 63 61 63 68 65 20 6f 6e 20  header cache on 
278b0 63 75 72 73 6f 72 20 50 33 2e 0a 2a 2a 0a 2a 2a  cursor P3..**.**
278c0 20 54 68 69 73 20 6f 70 63 6f 64 65 20 69 73 20   This opcode is 
278d0 6e 6f 72 6d 61 6c 6c 79 20 75 73 65 20 74 6f 20  normally use to 
278e0 6d 6f 76 65 20 61 20 72 65 63 6f 72 64 20 6f 75  move a record ou
278f0 74 20 6f 66 20 74 68 65 20 73 6f 72 74 65 72 20  t of the sorter 
27900 61 6e 64 20 69 6e 74 6f 0a 2a 2a 20 61 20 72 65  and into.** a re
27910 67 69 73 74 65 72 20 74 68 61 74 20 69 73 20 74  gister that is t
27920 68 65 20 73 6f 75 72 63 65 20 66 6f 72 20 61 20  he source for a 
27930 70 73 65 75 64 6f 2d 74 61 62 6c 65 20 63 75 72  pseudo-table cur
27940 73 6f 72 20 63 72 65 61 74 65 64 20 75 73 69 6e  sor created usin
27950 67 0a 2a 2a 20 4f 70 65 6e 50 73 65 75 64 6f 2e  g.** OpenPseudo.
27960 20 20 54 68 61 74 20 70 73 65 75 64 6f 2d 74 61    That pseudo-ta
27970 62 6c 65 20 63 75 72 73 6f 72 20 69 73 20 74 68  ble cursor is th
27980 65 20 6f 6e 65 20 74 68 61 74 20 69 73 20 69 64  e one that is id
27990 65 6e 74 69 66 69 65 64 20 62 79 0a 2a 2a 20 70  entified by.** p
279a0 61 72 61 6d 65 74 65 72 20 50 33 2e 20 20 43 6c  arameter P3.  Cl
279b0 65 61 72 69 6e 67 20 74 68 65 20 50 33 20 63 6f  earing the P3 co
279c0 6c 75 6d 6e 20 63 61 63 68 65 20 61 73 20 70 61  lumn cache as pa
279d0 72 74 20 6f 66 20 74 68 69 73 20 6f 70 63 6f 64  rt of this opcod
279e0 65 20 73 61 76 65 73 0a 2a 2a 20 75 73 20 66 72  e saves.** us fr
279f0 6f 6d 20 68 61 76 69 6e 67 20 74 6f 20 69 73 73  om having to iss
27a00 75 65 20 61 20 73 65 70 61 72 61 74 65 20 4e 75  ue a separate Nu
27a10 6c 6c 52 6f 77 20 69 6e 73 74 72 75 63 74 69 6f  llRow instructio
27a20 6e 20 74 6f 20 63 6c 65 61 72 20 74 68 61 74 20  n to clear that 
27a30 63 61 63 68 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f  cache..*/.case O
27a40 50 5f 53 6f 72 74 65 72 44 61 74 61 3a 20 7b 0a  P_SorterData: {.
27a50 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43    VdbeCursor *pC
27a60 3b 0a 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65  ;..  pOut = &aMe
27a70 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 70 43  m[pOp->p2];.  pC
27a80 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d   = p->apCsr[pOp-
27a90 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p1];.  assert( 
27aa0 69 73 53 6f 72 74 65 72 28 70 43 29 20 29 3b 0a  isSorter(pC) );.
27ab0 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64    rc = sqlite3Vd
27ac0 62 65 53 6f 72 74 65 72 52 6f 77 6b 65 79 28 70  beSorterRowkey(p
27ad0 43 2c 20 70 4f 75 74 29 3b 0a 20 20 61 73 73 65  C, pOut);.  asse
27ae0 72 74 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f  rt( rc!=SQLITE_O
27af0 4b 20 7c 7c 20 28 70 4f 75 74 2d 3e 66 6c 61 67  K || (pOut->flag
27b00 73 20 26 20 4d 45 4d 5f 42 6c 6f 62 29 20 29 3b  s & MEM_Blob) );
27b10 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
27b20 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31  p1>=0 && pOp->p1
27b30 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20  <p->nCursor );. 
27b40 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61   if( rc ) goto a
27b50 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
27b60 72 3b 0a 20 20 70 2d 3e 61 70 43 73 72 5b 70 4f  r;.  p->apCsr[pO
27b70 70 2d 3e 70 33 5d 2d 3e 63 61 63 68 65 53 74 61  p->p3]->cacheSta
27b80 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c  tus = CACHE_STAL
27b90 45 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  E;.  break;.}../
27ba0 2a 20 4f 70 63 6f 64 65 3a 20 52 6f 77 44 61 74  * Opcode: RowDat
27bb0 61 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a  a P1 P2 P3 * *.*
27bc0 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32  * Synopsis: r[P2
27bd0 5d 3d 64 61 74 61 0a 2a 2a 0a 2a 2a 20 57 72 69  ]=data.**.** Wri
27be0 74 65 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72  te into register
27bf0 20 50 32 20 74 68 65 20 63 6f 6d 70 6c 65 74 65   P2 the complete
27c00 20 72 6f 77 20 63 6f 6e 74 65 6e 74 20 66 6f 72   row content for
27c10 20 74 68 65 20 72 6f 77 20 61 74 20 0a 2a 2a 20   the row at .** 
27c20 77 68 69 63 68 20 63 75 72 73 6f 72 20 50 31 20  which cursor P1 
27c30 69 73 20 63 75 72 72 65 6e 74 6c 79 20 70 6f 69  is currently poi
27c40 6e 74 69 6e 67 2e 0a 2a 2a 20 54 68 65 72 65 20  nting..** There 
27c50 69 73 20 6e 6f 20 69 6e 74 65 72 70 72 65 74 61  is no interpreta
27c60 74 69 6f 6e 20 6f 66 20 74 68 65 20 64 61 74 61  tion of the data
27c70 2e 20 20 0a 2a 2a 20 49 74 20 69 73 20 6a 75 73  .  .** It is jus
27c80 74 20 63 6f 70 69 65 64 20 6f 6e 74 6f 20 74 68  t copied onto th
27c90 65 20 50 32 20 72 65 67 69 73 74 65 72 20 65 78  e P2 register ex
27ca0 61 63 74 6c 79 20 61 73 20 0a 2a 2a 20 69 74 20  actly as .** it 
27cb0 69 73 20 66 6f 75 6e 64 20 69 6e 20 74 68 65 20  is found in the 
27cc0 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e 0a 2a  database file..*
27cd0 2a 0a 2a 2a 20 49 66 20 63 75 72 73 6f 72 20 50  *.** If cursor P
27ce0 31 20 69 73 20 61 6e 20 69 6e 64 65 78 2c 20 74  1 is an index, t
27cf0 68 65 6e 20 74 68 65 20 63 6f 6e 74 65 6e 74 20  hen the content 
27d00 69 73 20 74 68 65 20 6b 65 79 20 6f 66 20 74 68  is the key of th
27d10 65 20 72 6f 77 2e 0a 2a 2a 20 49 66 20 63 75 72  e row..** If cur
27d20 73 6f 72 20 50 32 20 69 73 20 61 20 74 61 62 6c  sor P2 is a tabl
27d30 65 2c 20 74 68 65 6e 20 74 68 65 20 63 6f 6e 74  e, then the cont
27d40 65 6e 74 20 65 78 74 72 61 63 74 65 64 20 69 73  ent extracted is
27d50 20 74 68 65 20 64 61 74 61 2e 0a 2a 2a 0a 2a 2a   the data..**.**
27d60 20 49 66 20 74 68 65 20 50 31 20 63 75 72 73 6f   If the P1 curso
27d70 72 20 6d 75 73 74 20 62 65 20 70 6f 69 6e 74 69  r must be pointi
27d80 6e 67 20 74 6f 20 61 20 76 61 6c 69 64 20 72 6f  ng to a valid ro
27d90 77 20 28 6e 6f 74 20 61 20 4e 55 4c 4c 20 72 6f  w (not a NULL ro
27da0 77 29 0a 2a 2a 20 6f 66 20 61 20 72 65 61 6c 20  w).** of a real 
27db0 74 61 62 6c 65 2c 20 6e 6f 74 20 61 20 70 73 65  table, not a pse
27dc0 75 64 6f 2d 74 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a  udo-table..**.**
27dd0 20 49 66 20 50 33 21 3d 30 20 74 68 65 6e 20 74   If P3!=0 then t
27de0 68 69 73 20 6f 70 63 6f 64 65 20 69 73 20 61 6c  his opcode is al
27df0 6c 6f 77 65 64 20 74 6f 20 6d 61 6b 65 20 61 6e  lowed to make an
27e00 20 65 70 68 65 6d 65 72 61 6c 20 70 6f 69 6e 74   ephemeral point
27e10 65 72 0a 2a 2a 20 69 6e 74 6f 20 74 68 65 20 64  er.** into the d
27e20 61 74 61 62 61 73 65 20 70 61 67 65 2e 20 20 54  atabase page.  T
27e30 68 61 74 20 6d 65 61 6e 73 20 74 68 61 74 20 74  hat means that t
27e40 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 74 68  he content of th
27e50 65 20 6f 75 74 70 75 74 0a 2a 2a 20 72 65 67 69  e output.** regi
27e60 73 74 65 72 20 77 69 6c 6c 20 62 65 20 69 6e 76  ster will be inv
27e70 61 6c 69 64 61 74 65 64 20 61 73 20 73 6f 6f 6e  alidated as soon
27e80 20 61 73 20 74 68 65 20 63 75 72 73 6f 72 20 6d   as the cursor m
27e90 6f 76 65 73 20 2d 20 69 6e 63 6c 75 64 69 6e 67  oves - including
27ea0 0a 2a 2a 20 6d 6f 76 65 73 20 63 61 75 73 65 64  .** moves caused
27eb0 20 62 79 20 6f 74 68 65 72 20 63 75 72 73 6f 72   by other cursor
27ec0 73 20 74 68 61 74 20 22 73 61 76 65 22 20 74 68  s that "save" th
27ed0 65 20 63 75 72 72 65 6e 74 20 63 75 72 73 6f 72  e current cursor
27ee0 73 0a 2a 2a 20 70 6f 73 69 74 69 6f 6e 20 69 6e  s.** position in
27ef0 20 6f 72 64 65 72 20 74 68 61 74 20 74 68 65 79   order that they
27f00 20 63 61 6e 20 77 72 69 74 65 20 74 6f 20 74 68   can write to th
27f10 65 20 73 61 6d 65 20 74 61 62 6c 65 2e 20 20 49  e same table.  I
27f20 66 20 50 33 3d 3d 30 0a 2a 2a 20 74 68 65 6e 20  f P3==0.** then 
27f30 61 20 63 6f 70 79 20 6f 66 20 74 68 65 20 64 61  a copy of the da
27f40 74 61 20 69 73 20 6d 61 64 65 20 69 6e 74 6f 20  ta is made into 
27f50 6d 65 6d 6f 72 79 2e 20 20 50 33 21 3d 30 20 69  memory.  P3!=0 i
27f60 73 20 66 61 73 74 65 72 2c 20 62 75 74 0a 2a 2a  s faster, but.**
27f70 20 50 33 3d 3d 30 20 69 73 20 73 61 66 65 72 2e   P3==0 is safer.
27f80 0a 2a 2a 0a 2a 2a 20 49 66 20 50 33 21 3d 30 20  .**.** If P3!=0 
27f90 74 68 65 6e 20 74 68 65 20 63 6f 6e 74 65 6e 74  then the content
27fa0 20 6f 66 20 74 68 65 20 50 32 20 72 65 67 69 73   of the P2 regis
27fb0 74 65 72 20 69 73 20 75 6e 73 75 69 74 61 62 6c  ter is unsuitabl
27fc0 65 20 66 6f 72 20 75 73 65 0a 2a 2a 20 69 6e 20  e for use.** in 
27fd0 4f 50 5f 52 65 73 75 6c 74 20 61 6e 64 20 61 6e  OP_Result and an
27fe0 79 20 4f 50 5f 52 65 73 75 6c 74 20 77 69 6c 6c  y OP_Result will
27ff0 20 69 6e 76 61 6c 69 64 61 74 65 20 74 68 65 20   invalidate the 
28000 50 32 20 72 65 67 69 73 74 65 72 20 63 6f 6e 74  P2 register cont
28010 65 6e 74 2e 0a 2a 2a 20 54 68 65 20 50 32 20 72  ent..** The P2 r
28020 65 67 69 73 74 65 72 20 63 6f 6e 74 65 6e 74 20  egister content 
28030 69 73 20 69 6e 76 61 6c 69 64 61 74 65 64 20 62  is invalidated b
28040 79 20 6f 70 63 6f 64 65 73 20 6c 69 6b 65 20 4f  y opcodes like O
28050 50 5f 46 75 6e 63 74 69 6f 6e 20 6f 72 0a 2a 2a  P_Function or.**
28060 20 62 79 20 61 6e 79 20 75 73 65 20 6f 66 20 61   by any use of a
28070 6e 6f 74 68 65 72 20 63 75 72 73 6f 72 20 70 6f  nother cursor po
28080 69 6e 74 69 6e 67 20 74 6f 20 74 68 65 20 73 61  inting to the sa
28090 6d 65 20 74 61 62 6c 65 2e 0a 2a 2f 0a 63 61 73  me table..*/.cas
280a0 65 20 4f 50 5f 52 6f 77 44 61 74 61 3a 20 7b 0a  e OP_RowData: {.
280b0 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43    VdbeCursor *pC
280c0 3b 0a 20 20 42 74 43 75 72 73 6f 72 20 2a 70 43  ;.  BtCursor *pC
280d0 72 73 72 3b 0a 20 20 75 33 32 20 6e 3b 0a 0a 20  rsr;.  u32 n;.. 
280e0 20 70 4f 75 74 20 3d 20 6f 75 74 32 50 72 65 72   pOut = out2Prer
280f0 65 6c 65 61 73 65 28 70 2c 20 70 4f 70 29 3b 0a  elease(p, pOp);.
28100 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
28110 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31  p1>=0 && pOp->p1
28120 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20  <p->nCursor );. 
28130 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70   pC = p->apCsr[p
28140 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72  Op->p1];.  asser
28150 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 61 73  t( pC!=0 );.  as
28160 73 65 72 74 28 20 70 43 2d 3e 65 43 75 72 54 79  sert( pC->eCurTy
28170 70 65 3d 3d 43 55 52 54 59 50 45 5f 42 54 52 45  pe==CURTYPE_BTRE
28180 45 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 69  E );.  assert( i
28190 73 53 6f 72 74 65 72 28 70 43 29 3d 3d 30 20 29  sSorter(pC)==0 )
281a0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  ;.  assert( pC->
281b0 6e 75 6c 6c 52 6f 77 3d 3d 30 20 29 3b 0a 20 20  nullRow==0 );.  
281c0 61 73 73 65 72 74 28 20 70 43 2d 3e 75 63 2e 70  assert( pC->uc.p
281d0 43 75 72 73 6f 72 21 3d 30 20 29 3b 0a 20 20 70  Cursor!=0 );.  p
281e0 43 72 73 72 20 3d 20 70 43 2d 3e 75 63 2e 70 43  Crsr = pC->uc.pC
281f0 75 72 73 6f 72 3b 0a 0a 20 20 2f 2a 20 54 68 65  ursor;..  /* The
28200 20 4f 50 5f 52 6f 77 44 61 74 61 20 6f 70 63 6f   OP_RowData opco
28210 64 65 73 20 61 6c 77 61 79 73 20 66 6f 6c 6c 6f  des always follo
28220 77 20 4f 50 5f 4e 6f 74 45 78 69 73 74 73 20 6f  w OP_NotExists o
28230 72 0a 20 20 2a 2a 20 4f 50 5f 53 65 65 6b 52 6f  r.  ** OP_SeekRo
28240 77 69 64 20 6f 72 20 4f 50 5f 52 65 77 69 6e 64  wid or OP_Rewind
28250 2f 4f 70 5f 4e 65 78 74 20 77 69 74 68 20 6e 6f  /Op_Next with no
28260 20 69 6e 74 65 72 76 65 6e 69 6e 67 20 69 6e 73   intervening ins
28270 74 72 75 63 74 69 6f 6e 73 0a 20 20 2a 2a 20 74  tructions.  ** t
28280 68 61 74 20 6d 69 67 68 74 20 69 6e 76 61 6c 69  hat might invali
28290 64 61 74 65 20 74 68 65 20 63 75 72 73 6f 72 2e  date the cursor.
282a0 0a 20 20 2a 2a 20 49 66 20 74 68 69 73 20 77 68  .  ** If this wh
282b0 65 72 65 20 6e 6f 74 20 74 68 65 20 63 61 73 65  ere not the case
282c0 2c 20 6f 6e 20 6f 66 20 74 68 65 20 66 6f 6c 6c  , on of the foll
282d0 6f 77 69 6e 67 20 61 73 73 65 72 74 28 29 73 0a  owing assert()s.
282e0 20 20 2a 2a 20 77 6f 75 6c 64 20 66 61 69 6c 2e    ** would fail.
282f0 20 20 53 68 6f 75 6c 64 20 74 68 69 73 20 65 76    Should this ev
28300 65 72 20 63 68 61 6e 67 65 20 28 62 65 63 61 75  er change (becau
28310 73 65 20 6f 66 20 63 68 61 6e 67 65 73 20 69 6e  se of changes in
28320 20 74 68 65 20 63 6f 64 65 0a 20 20 2a 2a 20 67   the code.  ** g
28330 65 6e 65 72 61 74 6f 72 29 20 74 68 65 6e 20 74  enerator) then t
28340 68 65 20 66 69 78 20 77 6f 75 6c 64 20 62 65 20  he fix would be 
28350 74 6f 20 69 6e 73 65 72 74 20 61 20 63 61 6c 6c  to insert a call
28360 20 74 6f 0a 20 20 2a 2a 20 73 71 6c 69 74 65 33   to.  ** sqlite3
28370 56 64 62 65 43 75 72 73 6f 72 4d 6f 76 65 74 6f  VdbeCursorMoveto
28380 28 29 2e 0a 20 20 2a 2f 0a 20 20 61 73 73 65 72  ()..  */.  asser
28390 74 28 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d  t( pC->deferredM
283a0 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a 20 20 61 73  oveto==0 );.  as
283b0 73 65 72 74 28 20 73 71 6c 69 74 65 33 42 74 72  sert( sqlite3Btr
283c0 65 65 43 75 72 73 6f 72 49 73 56 61 6c 69 64 28  eeCursorIsValid(
283d0 70 43 72 73 72 29 20 29 3b 0a 23 69 66 20 30 20  pCrsr) );.#if 0 
283e0 20 2f 2a 20 4e 6f 74 20 72 65 71 75 69 72 65 64   /* Not required
283f0 20 64 75 65 20 74 6f 20 74 68 65 20 70 72 65 76   due to the prev
28400 69 6f 75 73 20 74 6f 20 61 73 73 65 72 74 28 29  ious to assert()
28410 20 73 74 61 74 65 6d 65 6e 74 73 20 2a 2f 0a 20   statements */. 
28420 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62   rc = sqlite3Vdb
28430 65 43 75 72 73 6f 72 4d 6f 76 65 74 6f 28 70 43  eCursorMoveto(pC
28440 29 3b 0a 20 20 69 66 28 20 72 63 21 3d 53 51 4c  );.  if( rc!=SQL
28450 49 54 45 5f 4f 4b 20 29 20 67 6f 74 6f 20 61 62  ITE_OK ) goto ab
28460 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
28470 3b 0a 23 65 6e 64 69 66 0a 0a 20 20 6e 20 3d 20  ;.#endif..  n = 
28480 73 71 6c 69 74 65 33 42 74 72 65 65 50 61 79 6c  sqlite3BtreePayl
28490 6f 61 64 53 69 7a 65 28 70 43 72 73 72 29 3b 0a  oadSize(pCrsr);.
284a0 20 20 69 66 28 20 6e 3e 28 75 33 32 29 64 62 2d    if( n>(u32)db-
284b0 3e 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4c  >aLimit[SQLITE_L
284c0 49 4d 49 54 5f 4c 45 4e 47 54 48 5d 20 29 7b 0a  IMIT_LENGTH] ){.
284d0 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67      goto too_big
284e0 3b 0a 20 20 7d 0a 20 20 74 65 73 74 63 61 73 65  ;.  }.  testcase
284f0 28 20 6e 3d 3d 30 20 29 3b 0a 20 20 72 63 20 3d  ( n==0 );.  rc =
28500 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 46   sqlite3VdbeMemF
28510 72 6f 6d 42 74 72 65 65 28 70 43 72 73 72 2c 20  romBtree(pCrsr, 
28520 30 2c 20 6e 2c 20 70 4f 75 74 29 3b 0a 20 20 69  0, n, pOut);.  i
28530 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f  f( rc ) goto abo
28540 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
28550 0a 20 20 69 66 28 20 21 70 4f 70 2d 3e 70 33 20  .  if( !pOp->p3 
28560 29 20 44 65 65 70 68 65 6d 65 72 61 6c 69 7a 65  ) Deephemeralize
28570 28 70 4f 75 74 29 3b 0a 20 20 55 50 44 41 54 45  (pOut);.  UPDATE
28580 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 4f  _MAX_BLOBSIZE(pO
28590 75 74 29 3b 0a 20 20 52 45 47 49 53 54 45 52 5f  ut);.  REGISTER_
285a0 54 52 41 43 45 28 70 4f 70 2d 3e 70 32 2c 20 70  TRACE(pOp->p2, p
285b0 4f 75 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  Out);.  break;.}
285c0 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 6f 77  ../* Opcode: Row
285d0 69 64 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  id P1 P2 * * *.*
285e0 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32  * Synopsis: r[P2
285f0 5d 3d 72 6f 77 69 64 0a 2a 2a 0a 2a 2a 20 53 74  ]=rowid.**.** St
28600 6f 72 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  ore in register 
28610 50 32 20 61 6e 20 69 6e 74 65 67 65 72 20 77 68  P2 an integer wh
28620 69 63 68 20 69 73 20 74 68 65 20 6b 65 79 20 6f  ich is the key o
28630 66 20 74 68 65 20 74 61 62 6c 65 20 65 6e 74 72  f the table entr
28640 79 20 74 68 61 74 0a 2a 2a 20 50 31 20 69 73 20  y that.** P1 is 
28650 63 75 72 72 65 6e 74 6c 79 20 70 6f 69 6e 74 20  currently point 
28660 74 6f 2e 0a 2a 2a 0a 2a 2a 20 50 31 20 63 61 6e  to..**.** P1 can
28670 20 62 65 20 65 69 74 68 65 72 20 61 6e 20 6f 72   be either an or
28680 64 69 6e 61 72 79 20 74 61 62 6c 65 20 6f 72 20  dinary table or 
28690 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 2e  a virtual table.
286a0 20 20 54 68 65 72 65 20 75 73 65 64 20 74 6f 0a    There used to.
286b0 2a 2a 20 62 65 20 61 20 73 65 70 61 72 61 74 65  ** be a separate
286c0 20 4f 50 5f 56 52 6f 77 69 64 20 6f 70 63 6f 64   OP_VRowid opcod
286d0 65 20 66 6f 72 20 75 73 65 20 77 69 74 68 20 76  e for use with v
286e0 69 72 74 75 61 6c 20 74 61 62 6c 65 73 2c 20 62  irtual tables, b
286f0 75 74 20 74 68 69 73 0a 2a 2a 20 6f 6e 65 20 6f  ut this.** one o
28700 70 63 6f 64 65 20 6e 6f 77 20 77 6f 72 6b 73 20  pcode now works 
28710 66 6f 72 20 62 6f 74 68 20 74 61 62 6c 65 20 74  for both table t
28720 79 70 65 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  ypes..*/.case OP
28730 5f 52 6f 77 69 64 3a 20 7b 20 20 20 20 20 20 20  _Rowid: {       
28740 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74            /* out
28750 32 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73 6f  2 */.  VdbeCurso
28760 72 20 2a 70 43 3b 0a 20 20 69 36 34 20 76 3b 0a  r *pC;.  i64 v;.
28770 20 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20 2a    sqlite3_vtab *
28780 70 56 74 61 62 3b 0a 20 20 63 6f 6e 73 74 20 73  pVtab;.  const s
28790 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20 2a 70  qlite3_module *p
287a0 4d 6f 64 75 6c 65 3b 0a 0a 20 20 70 4f 75 74 20  Module;..  pOut 
287b0 3d 20 6f 75 74 32 50 72 65 72 65 6c 65 61 73 65  = out2Prerelease
287c0 28 70 2c 20 70 4f 70 29 3b 0a 20 20 61 73 73 65  (p, pOp);.  asse
287d0 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26  rt( pOp->p1>=0 &
287e0 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75  & pOp->p1<p->nCu
287f0 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70  rsor );.  pC = p
28800 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d  ->apCsr[pOp->p1]
28810 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d  ;.  assert( pC!=
28820 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  0 );.  assert( p
28830 43 2d 3e 65 43 75 72 54 79 70 65 21 3d 43 55 52  C->eCurType!=CUR
28840 54 59 50 45 5f 50 53 45 55 44 4f 20 7c 7c 20 70  TYPE_PSEUDO || p
28850 43 2d 3e 6e 75 6c 6c 52 6f 77 20 29 3b 0a 20 20  C->nullRow );.  
28860 69 66 28 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20  if( pC->nullRow 
28870 29 7b 0a 20 20 20 20 70 4f 75 74 2d 3e 66 6c 61  ){.    pOut->fla
28880 67 73 20 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20  gs = MEM_Null;. 
28890 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 65 6c 73     break;.  }els
288a0 65 20 69 66 28 20 70 43 2d 3e 64 65 66 65 72 72  e if( pC->deferr
288b0 65 64 4d 6f 76 65 74 6f 20 29 7b 0a 20 20 20 20  edMoveto ){.    
288c0 76 20 3d 20 70 43 2d 3e 6d 6f 76 65 74 6f 54 61  v = pC->movetoTa
288d0 72 67 65 74 3b 0a 23 69 66 6e 64 65 66 20 53 51  rget;.#ifndef SQ
288e0 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41  LITE_OMIT_VIRTUA
288f0 4c 54 41 42 4c 45 0a 20 20 7d 65 6c 73 65 20 69  LTABLE.  }else i
28900 66 28 20 70 43 2d 3e 65 43 75 72 54 79 70 65 3d  f( pC->eCurType=
28910 3d 43 55 52 54 59 50 45 5f 56 54 41 42 20 29 7b  =CURTYPE_VTAB ){
28920 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 43 2d  .    assert( pC-
28930 3e 75 63 2e 70 56 43 75 72 21 3d 30 20 29 3b 0a  >uc.pVCur!=0 );.
28940 20 20 20 20 70 56 74 61 62 20 3d 20 70 43 2d 3e      pVtab = pC->
28950 75 63 2e 70 56 43 75 72 2d 3e 70 56 74 61 62 3b  uc.pVCur->pVtab;
28960 0a 20 20 20 20 70 4d 6f 64 75 6c 65 20 3d 20 70  .    pModule = p
28970 56 74 61 62 2d 3e 70 4d 6f 64 75 6c 65 3b 0a 20  Vtab->pModule;. 
28980 20 20 20 61 73 73 65 72 74 28 20 70 4d 6f 64 75     assert( pModu
28990 6c 65 2d 3e 78 52 6f 77 69 64 20 29 3b 0a 20 20  le->xRowid );.  
289a0 20 20 72 63 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e    rc = pModule->
289b0 78 52 6f 77 69 64 28 70 43 2d 3e 75 63 2e 70 56  xRowid(pC->uc.pV
289c0 43 75 72 2c 20 26 76 29 3b 0a 20 20 20 20 73 71  Cur, &v);.    sq
289d0 6c 69 74 65 33 56 74 61 62 49 6d 70 6f 72 74 45  lite3VtabImportE
289e0 72 72 6d 73 67 28 70 2c 20 70 56 74 61 62 29 3b  rrmsg(p, pVtab);
289f0 0a 20 20 20 20 69 66 28 20 72 63 20 29 20 67 6f  .    if( rc ) go
28a00 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
28a10 65 72 72 6f 72 3b 0a 23 65 6e 64 69 66 20 2f 2a  error;.#endif /*
28a20 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52   SQLITE_OMIT_VIR
28a30 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 20 20 7d  TUALTABLE */.  }
28a40 65 6c 73 65 7b 0a 20 20 20 20 61 73 73 65 72 74  else{.    assert
28a50 28 20 70 43 2d 3e 65 43 75 72 54 79 70 65 3d 3d  ( pC->eCurType==
28a60 43 55 52 54 59 50 45 5f 42 54 52 45 45 20 29 3b  CURTYPE_BTREE );
28a70 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 43 2d  .    assert( pC-
28a80 3e 75 63 2e 70 43 75 72 73 6f 72 21 3d 30 20 29  >uc.pCursor!=0 )
28a90 3b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74  ;.    rc = sqlit
28aa0 65 33 56 64 62 65 43 75 72 73 6f 72 52 65 73 74  e3VdbeCursorRest
28ab0 6f 72 65 28 70 43 29 3b 0a 20 20 20 20 69 66 28  ore(pC);.    if(
28ac0 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74   rc ) goto abort
28ad0 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20  _due_to_error;. 
28ae0 20 20 20 69 66 28 20 70 43 2d 3e 6e 75 6c 6c 52     if( pC->nullR
28af0 6f 77 20 29 7b 0a 20 20 20 20 20 20 70 4f 75 74  ow ){.      pOut
28b00 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 4e 75  ->flags = MEM_Nu
28b10 6c 6c 3b 0a 20 20 20 20 20 20 62 72 65 61 6b 3b  ll;.      break;
28b20 0a 20 20 20 20 7d 0a 20 20 20 20 76 20 3d 20 73  .    }.    v = s
28b30 71 6c 69 74 65 33 42 74 72 65 65 49 6e 74 65 67  qlite3BtreeInteg
28b40 65 72 4b 65 79 28 70 43 2d 3e 75 63 2e 70 43 75  erKey(pC->uc.pCu
28b50 72 73 6f 72 29 3b 0a 20 20 7d 0a 20 20 70 4f 75  rsor);.  }.  pOu
28b60 74 2d 3e 75 2e 69 20 3d 20 76 3b 0a 20 20 62 72  t->u.i = v;.  br
28b70 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
28b80 65 3a 20 4e 75 6c 6c 52 6f 77 20 50 31 20 2a 20  e: NullRow P1 * 
28b90 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4d 6f 76 65  * * *.**.** Move
28ba0 20 74 68 65 20 63 75 72 73 6f 72 20 50 31 20 74   the cursor P1 t
28bb0 6f 20 61 20 6e 75 6c 6c 20 72 6f 77 2e 20 20 41  o a null row.  A
28bc0 6e 79 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 70 65  ny OP_Column ope
28bd0 72 61 74 69 6f 6e 73 0a 2a 2a 20 74 68 61 74 20  rations.** that 
28be0 6f 63 63 75 72 20 77 68 69 6c 65 20 74 68 65 20  occur while the 
28bf0 63 75 72 73 6f 72 20 69 73 20 6f 6e 20 74 68 65  cursor is on the
28c00 20 6e 75 6c 6c 20 72 6f 77 20 77 69 6c 6c 20 61   null row will a
28c10 6c 77 61 79 73 0a 2a 2a 20 77 72 69 74 65 20 61  lways.** write a
28c20 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20 4f   NULL..*/.case O
28c30 50 5f 4e 75 6c 6c 52 6f 77 3a 20 7b 0a 20 20 56  P_NullRow: {.  V
28c40 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 0a  dbeCursor *pC;..
28c50 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
28c60 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c  1>=0 && pOp->p1<
28c70 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20  p->nCursor );.  
28c80 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f  pC = p->apCsr[pO
28c90 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74  p->p1];.  assert
28ca0 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 70 43 2d  ( pC!=0 );.  pC-
28cb0 3e 6e 75 6c 6c 52 6f 77 20 3d 20 31 3b 0a 20 20  >nullRow = 1;.  
28cc0 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20  pC->cacheStatus 
28cd0 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20  = CACHE_STALE;. 
28ce0 20 69 66 28 20 70 43 2d 3e 65 43 75 72 54 79 70   if( pC->eCurTyp
28cf0 65 3d 3d 43 55 52 54 59 50 45 5f 42 54 52 45 45  e==CURTYPE_BTREE
28d00 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20   ){.    assert( 
28d10 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 21 3d  pC->uc.pCursor!=
28d20 30 20 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33  0 );.    sqlite3
28d30 42 74 72 65 65 43 6c 65 61 72 43 75 72 73 6f 72  BtreeClearCursor
28d40 28 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 29  (pC->uc.pCursor)
28d50 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
28d60 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 65 65  ../* Opcode: See
28d70 6b 45 6e 64 20 50 31 20 2a 20 2a 20 2a 20 2a 0a  kEnd P1 * * * *.
28d80 2a 2a 0a 2a 2a 20 50 6f 73 69 74 69 6f 6e 20 63  **.** Position c
28d90 75 72 73 6f 72 20 50 31 20 61 74 20 74 68 65 20  ursor P1 at the 
28da0 65 6e 64 20 6f 66 20 74 68 65 20 62 74 72 65 65  end of the btree
28db0 20 66 6f 72 20 74 68 65 20 70 75 72 70 6f 73 65   for the purpose
28dc0 20 6f 66 0a 2a 2a 20 61 70 70 65 6e 64 69 6e 67   of.** appending
28dd0 20 61 20 6e 65 77 20 65 6e 74 72 79 20 6f 6e 74   a new entry ont
28de0 6f 20 74 68 65 20 62 74 72 65 65 2e 0a 2a 2a 0a  o the btree..**.
28df0 2a 2a 20 49 74 20 69 73 20 61 73 73 75 6d 65 64  ** It is assumed
28e00 20 74 68 61 74 20 74 68 65 20 63 75 72 73 6f 72   that the cursor
28e10 20 69 73 20 75 73 65 64 20 6f 6e 6c 79 20 66 6f   is used only fo
28e20 72 20 61 70 70 65 6e 64 69 6e 67 20 61 6e 64 20  r appending and 
28e30 73 6f 0a 2a 2a 20 69 66 20 74 68 65 20 63 75 72  so.** if the cur
28e40 73 6f 72 20 69 73 20 76 61 6c 69 64 2c 20 74 68  sor is valid, th
28e50 65 6e 20 74 68 65 20 63 75 72 73 6f 72 20 6d 75  en the cursor mu
28e60 73 74 20 61 6c 72 65 61 64 79 20 62 65 20 70 6f  st already be po
28e70 69 6e 74 69 6e 67 0a 2a 2a 20 61 74 20 74 68 65  inting.** at the
28e80 20 65 6e 64 20 6f 66 20 74 68 65 20 62 74 72 65   end of the btre
28e90 65 20 61 6e 64 20 73 6f 20 6e 6f 20 63 68 61 6e  e and so no chan
28ea0 67 65 73 20 61 72 65 20 6d 61 64 65 20 74 6f 0a  ges are made to.
28eb0 2a 2a 20 74 68 65 20 63 75 72 73 6f 72 2e 0a 2a  ** the cursor..*
28ec0 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4c 61 73  /./* Opcode: Las
28ed0 74 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  t P1 P2 * * *.**
28ee0 0a 2a 2a 20 54 68 65 20 6e 65 78 74 20 75 73 65  .** The next use
28ef0 20 6f 66 20 74 68 65 20 52 6f 77 69 64 20 6f 72   of the Rowid or
28f00 20 43 6f 6c 75 6d 6e 20 6f 72 20 50 72 65 76 20   Column or Prev 
28f10 69 6e 73 74 72 75 63 74 69 6f 6e 20 66 6f 72 20  instruction for 
28f20 50 31 20 0a 2a 2a 20 77 69 6c 6c 20 72 65 66 65  P1 .** will refe
28f30 72 20 74 6f 20 74 68 65 20 6c 61 73 74 20 65 6e  r to the last en
28f40 74 72 79 20 69 6e 20 74 68 65 20 64 61 74 61 62  try in the datab
28f50 61 73 65 20 74 61 62 6c 65 20 6f 72 20 69 6e 64  ase table or ind
28f60 65 78 2e 0a 2a 2a 20 49 66 20 74 68 65 20 74 61  ex..** If the ta
28f70 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 69 73 20  ble or index is 
28f80 65 6d 70 74 79 20 61 6e 64 20 50 32 3e 30 2c 20  empty and P2>0, 
28f90 74 68 65 6e 20 6a 75 6d 70 20 69 6d 6d 65 64 69  then jump immedi
28fa0 61 74 65 6c 79 20 74 6f 20 50 32 2e 0a 2a 2a 20  ately to P2..** 
28fb0 49 66 20 50 32 20 69 73 20 30 20 6f 72 20 69 66  If P2 is 0 or if
28fc0 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20 69 6e   the table or in
28fd0 64 65 78 20 69 73 20 6e 6f 74 20 65 6d 70 74 79  dex is not empty
28fe0 2c 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 0a 2a  , fall through.*
28ff0 2a 20 74 6f 20 74 68 65 20 66 6f 6c 6c 6f 77 69  * to the followi
29000 6e 67 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a  ng instruction..
29010 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64  **.** This opcod
29020 65 20 6c 65 61 76 65 73 20 74 68 65 20 63 75 72  e leaves the cur
29030 73 6f 72 20 63 6f 6e 66 69 67 75 72 65 64 20 74  sor configured t
29040 6f 20 6d 6f 76 65 20 69 6e 20 72 65 76 65 72 73  o move in revers
29050 65 20 6f 72 64 65 72 2c 0a 2a 2a 20 66 72 6f 6d  e order,.** from
29060 20 74 68 65 20 65 6e 64 20 74 6f 77 61 72 64 20   the end toward 
29070 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 2e 20 20  the beginning.  
29080 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20  In other words, 
29090 74 68 65 20 63 75 72 73 6f 72 20 69 73 0a 2a 2a  the cursor is.**
290a0 20 63 6f 6e 66 69 67 75 72 65 64 20 74 6f 20 75   configured to u
290b0 73 65 20 50 72 65 76 2c 20 6e 6f 74 20 4e 65 78  se Prev, not Nex
290c0 74 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 65  t..*/.case OP_Se
290d0 65 6b 45 6e 64 3a 0a 63 61 73 65 20 4f 50 5f 4c  ekEnd:.case OP_L
290e0 61 73 74 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a  ast: {        /*
290f0 20 6a 75 6d 70 20 2a 2f 0a 20 20 56 64 62 65 43   jump */.  VdbeC
29100 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 42 74 43  ursor *pC;.  BtC
29110 75 72 73 6f 72 20 2a 70 43 72 73 72 3b 0a 20 20  ursor *pCrsr;.  
29120 69 6e 74 20 72 65 73 3b 0a 0a 20 20 61 73 73 65  int res;..  asse
29130 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26  rt( pOp->p1>=0 &
29140 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75  & pOp->p1<p->nCu
29150 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70  rsor );.  pC = p
29160 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d  ->apCsr[pOp->p1]
29170 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d  ;.  assert( pC!=
29180 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  0 );.  assert( p
29190 43 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43 55 52  C->eCurType==CUR
291a0 54 59 50 45 5f 42 54 52 45 45 20 29 3b 0a 20 20  TYPE_BTREE );.  
291b0 70 43 72 73 72 20 3d 20 70 43 2d 3e 75 63 2e 70  pCrsr = pC->uc.p
291c0 43 75 72 73 6f 72 3b 0a 20 20 72 65 73 20 3d 20  Cursor;.  res = 
291d0 30 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 72  0;.  assert( pCr
291e0 73 72 21 3d 30 20 29 3b 0a 23 69 66 64 65 66 20  sr!=0 );.#ifdef 
291f0 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 70  SQLITE_DEBUG.  p
29200 43 2d 3e 73 65 65 6b 4f 70 20 3d 20 70 4f 70 2d  C->seekOp = pOp-
29210 3e 6f 70 63 6f 64 65 3b 0a 23 65 6e 64 69 66 0a  >opcode;.#endif.
29220 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64    if( pOp->opcod
29230 65 3d 3d 4f 50 5f 53 65 65 6b 45 6e 64 20 29 7b  e==OP_SeekEnd ){
29240 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70  .    assert( pOp
29250 2d 3e 70 32 3d 3d 30 20 29 3b 0a 20 20 20 20 70  ->p2==0 );.    p
29260 43 2d 3e 73 65 65 6b 52 65 73 75 6c 74 20 3d 20  C->seekResult = 
29270 2d 31 3b 0a 20 20 20 20 69 66 28 20 73 71 6c 69  -1;.    if( sqli
29280 74 65 33 42 74 72 65 65 43 75 72 73 6f 72 49 73  te3BtreeCursorIs
29290 56 61 6c 69 64 4e 4e 28 70 43 72 73 72 29 20 29  ValidNN(pCrsr) )
292a0 7b 0a 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20  {.      break;. 
292b0 20 20 20 7d 0a 20 20 7d 0a 20 20 72 63 20 3d 20     }.  }.  rc = 
292c0 73 71 6c 69 74 65 33 42 74 72 65 65 4c 61 73 74  sqlite3BtreeLast
292d0 28 70 43 72 73 72 2c 20 26 72 65 73 29 3b 0a 20  (pCrsr, &res);. 
292e0 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 28   pC->nullRow = (
292f0 75 38 29 72 65 73 3b 0a 20 20 70 43 2d 3e 64 65  u8)res;.  pC->de
29300 66 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d 20 30  ferredMoveto = 0
29310 3b 0a 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61  ;.  pC->cacheSta
29320 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c  tus = CACHE_STAL
29330 45 3b 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f  E;.  if( rc ) go
29340 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
29350 65 72 72 6f 72 3b 0a 20 20 69 66 28 20 70 4f 70  error;.  if( pOp
29360 2d 3e 70 32 3e 30 20 29 7b 0a 20 20 20 20 56 64  ->p2>0 ){.    Vd
29370 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 72 65  beBranchTaken(re
29380 73 21 3d 30 2c 32 29 3b 0a 20 20 20 20 69 66 28  s!=0,2);.    if(
29390 20 72 65 73 20 29 20 67 6f 74 6f 20 6a 75 6d 70   res ) goto jump
293a0 5f 74 6f 5f 70 32 3b 0a 20 20 7d 0a 20 20 62 72  _to_p2;.  }.  br
293b0 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
293c0 65 3a 20 49 66 53 6d 61 6c 6c 65 72 20 50 31 20  e: IfSmaller P1 
293d0 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20  P2 P3 * *.**.** 
293e0 45 73 74 69 6d 61 74 65 20 74 68 65 20 6e 75 6d  Estimate the num
293f0 62 65 72 20 6f 66 20 72 6f 77 73 20 69 6e 20 74  ber of rows in t
29400 68 65 20 74 61 62 6c 65 20 50 31 2e 20 20 4a 75  he table P1.  Ju
29410 6d 70 20 74 6f 20 50 32 20 69 66 20 74 68 61 74  mp to P2 if that
29420 0a 2a 2a 20 65 73 74 69 6d 61 74 65 20 69 73 20  .** estimate is 
29430 6c 65 73 73 20 74 68 61 6e 20 61 70 70 72 6f 78  less than approx
29440 69 6d 61 74 65 6c 79 20 32 2a 2a 28 30 2e 31 2a  imately 2**(0.1*
29450 50 33 29 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  P3)..*/.case OP_
29460 49 66 53 6d 61 6c 6c 65 72 3a 20 7b 20 20 20 20  IfSmaller: {    
29470 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20      /* jump */. 
29480 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b   VdbeCursor *pC;
29490 0a 20 20 42 74 43 75 72 73 6f 72 20 2a 70 43 72  .  BtCursor *pCr
294a0 73 72 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a 20  sr;.  int res;. 
294b0 20 69 36 34 20 73 7a 3b 0a 0a 20 20 61 73 73 65   i64 sz;..  asse
294c0 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26  rt( pOp->p1>=0 &
294d0 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75  & pOp->p1<p->nCu
294e0 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70  rsor );.  pC = p
294f0 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d  ->apCsr[pOp->p1]
29500 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d  ;.  assert( pC!=
29510 30 20 29 3b 0a 20 20 70 43 72 73 72 20 3d 20 70  0 );.  pCrsr = p
29520 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 3b 0a 20  C->uc.pCursor;. 
29530 20 61 73 73 65 72 74 28 20 70 43 72 73 72 20 29   assert( pCrsr )
29540 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  ;.  rc = sqlite3
29550 42 74 72 65 65 46 69 72 73 74 28 70 43 72 73 72  BtreeFirst(pCrsr
29560 2c 20 26 72 65 73 29 3b 0a 20 20 69 66 28 20 72  , &res);.  if( r
29570 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64  c ) goto abort_d
29580 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 69  ue_to_error;.  i
29590 66 28 20 72 65 73 3d 3d 30 20 29 7b 0a 20 20 20  f( res==0 ){.   
295a0 20 73 7a 20 3d 20 73 71 6c 69 74 65 33 42 74 72   sz = sqlite3Btr
295b0 65 65 52 6f 77 43 6f 75 6e 74 45 73 74 28 70 43  eeRowCountEst(pC
295c0 72 73 72 29 3b 0a 20 20 20 20 69 66 28 20 41 4c  rsr);.    if( AL
295d0 57 41 59 53 28 73 7a 3e 3d 30 29 20 26 26 20 73  WAYS(sz>=0) && s
295e0 71 6c 69 74 65 33 4c 6f 67 45 73 74 28 28 75 36  qlite3LogEst((u6
295f0 34 29 73 7a 29 3c 70 4f 70 2d 3e 70 33 20 29 20  4)sz)<pOp->p3 ) 
29600 72 65 73 20 3d 20 31 3b 0a 20 20 7d 0a 20 20 56  res = 1;.  }.  V
29610 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 72  dbeBranchTaken(r
29620 65 73 21 3d 30 2c 32 29 3b 0a 20 20 69 66 28 20  es!=0,2);.  if( 
29630 72 65 73 20 29 20 67 6f 74 6f 20 6a 75 6d 70 5f  res ) goto jump_
29640 74 6f 5f 70 32 3b 0a 20 20 62 72 65 61 6b 3b 0a  to_p2;.  break;.
29650 7d 0a 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53  }.../* Opcode: S
29660 6f 72 74 65 72 53 6f 72 74 20 50 31 20 50 32 20  orterSort P1 P2 
29670 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 41 66 74 65  * * *.**.** Afte
29680 72 20 61 6c 6c 20 72 65 63 6f 72 64 73 20 68 61  r all records ha
29690 76 65 20 62 65 65 6e 20 69 6e 73 65 72 74 65 64  ve been inserted
296a0 20 69 6e 74 6f 20 74 68 65 20 53 6f 72 74 65 72   into the Sorter
296b0 20 6f 62 6a 65 63 74 0a 2a 2a 20 69 64 65 6e 74   object.** ident
296c0 69 66 69 65 64 20 62 79 20 50 31 2c 20 69 6e 76  ified by P1, inv
296d0 6f 6b 65 20 74 68 69 73 20 6f 70 63 6f 64 65 20  oke this opcode 
296e0 74 6f 20 61 63 74 75 61 6c 6c 79 20 64 6f 20 74  to actually do t
296f0 68 65 20 73 6f 72 74 69 6e 67 2e 0a 2a 2a 20 4a  he sorting..** J
29700 75 6d 70 20 74 6f 20 50 32 20 69 66 20 74 68 65  ump to P2 if the
29710 72 65 20 61 72 65 20 6e 6f 20 72 65 63 6f 72 64  re are no record
29720 73 20 74 6f 20 62 65 20 73 6f 72 74 65 64 2e 0a  s to be sorted..
29730 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64  **.** This opcod
29740 65 20 69 73 20 61 6e 20 61 6c 69 61 73 20 66 6f  e is an alias fo
29750 72 20 4f 50 5f 53 6f 72 74 20 61 6e 64 20 4f 50  r OP_Sort and OP
29760 5f 52 65 77 69 6e 64 20 74 68 61 74 20 69 73 20  _Rewind that is 
29770 75 73 65 64 0a 2a 2a 20 66 6f 72 20 53 6f 72 74  used.** for Sort
29780 65 72 20 6f 62 6a 65 63 74 73 2e 0a 2a 2f 0a 2f  er objects..*/./
29790 2a 20 4f 70 63 6f 64 65 3a 20 53 6f 72 74 20 50  * Opcode: Sort P
297a0 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a  1 P2 * * *.**.**
297b0 20 54 68 69 73 20 6f 70 63 6f 64 65 20 64 6f 65   This opcode doe
297c0 73 20 65 78 61 63 74 6c 79 20 74 68 65 20 73 61  s exactly the sa
297d0 6d 65 20 74 68 69 6e 67 20 61 73 20 4f 50 5f 52  me thing as OP_R
297e0 65 77 69 6e 64 20 65 78 63 65 70 74 20 74 68 61  ewind except tha
297f0 74 0a 2a 2a 20 69 74 20 69 6e 63 72 65 6d 65 6e  t.** it incremen
29800 74 73 20 61 6e 20 75 6e 64 6f 63 75 6d 65 6e 74  ts an undocument
29810 65 64 20 67 6c 6f 62 61 6c 20 76 61 72 69 61 62  ed global variab
29820 6c 65 20 75 73 65 64 20 66 6f 72 20 74 65 73 74  le used for test
29830 69 6e 67 2e 0a 2a 2a 0a 2a 2a 20 53 6f 72 74 69  ing..**.** Sorti
29840 6e 67 20 69 73 20 61 63 63 6f 6d 70 6c 69 73 68  ng is accomplish
29850 65 64 20 62 79 20 77 72 69 74 69 6e 67 20 72 65  ed by writing re
29860 63 6f 72 64 73 20 69 6e 74 6f 20 61 20 73 6f 72  cords into a sor
29870 74 69 6e 67 20 69 6e 64 65 78 2c 0a 2a 2a 20 74  ting index,.** t
29880 68 65 6e 20 72 65 77 69 6e 64 69 6e 67 20 74 68  hen rewinding th
29890 61 74 20 69 6e 64 65 78 20 61 6e 64 20 70 6c 61  at index and pla
298a0 79 69 6e 67 20 69 74 20 62 61 63 6b 20 66 72 6f  ying it back fro
298b0 6d 20 62 65 67 69 6e 6e 69 6e 67 20 74 6f 0a 2a  m beginning to.*
298c0 2a 20 65 6e 64 2e 20 20 57 65 20 75 73 65 20 74  * end.  We use t
298d0 68 65 20 4f 50 5f 53 6f 72 74 20 6f 70 63 6f 64  he OP_Sort opcod
298e0 65 20 69 6e 73 74 65 61 64 20 6f 66 20 4f 50 5f  e instead of OP_
298f0 52 65 77 69 6e 64 20 74 6f 20 64 6f 20 74 68 65  Rewind to do the
29900 0a 2a 2a 20 72 65 77 69 6e 64 69 6e 67 20 73 6f  .** rewinding so
29910 20 74 68 61 74 20 74 68 65 20 67 6c 6f 62 61 6c   that the global
29920 20 76 61 72 69 61 62 6c 65 20 77 69 6c 6c 20 62   variable will b
29930 65 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 61 6e  e incremented an
29940 64 0a 2a 2a 20 72 65 67 72 65 73 73 69 6f 6e 20  d.** regression 
29950 74 65 73 74 73 20 63 61 6e 20 64 65 74 65 72 6d  tests can determ
29960 69 6e 65 20 77 68 65 74 68 65 72 20 6f 72 20 6e  ine whether or n
29970 6f 74 20 74 68 65 20 6f 70 74 69 6d 69 7a 65 72  ot the optimizer
29980 20 69 73 0a 2a 2a 20 63 6f 72 72 65 63 74 6c 79   is.** correctly
29990 20 6f 70 74 69 6d 69 7a 69 6e 67 20 6f 75 74 20   optimizing out 
299a0 73 6f 72 74 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f  sorts..*/.case O
299b0 50 5f 53 6f 72 74 65 72 53 6f 72 74 3a 20 20 20  P_SorterSort:   
299c0 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 63 61 73 65   /* jump */.case
299d0 20 4f 50 5f 53 6f 72 74 3a 20 7b 20 20 20 20 20   OP_Sort: {     
299e0 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 23 69     /* jump */.#i
299f0 66 64 65 66 20 53 51 4c 49 54 45 5f 54 45 53 54  fdef SQLITE_TEST
29a00 0a 20 20 73 71 6c 69 74 65 33 5f 73 6f 72 74 5f  .  sqlite3_sort_
29a10 63 6f 75 6e 74 2b 2b 3b 0a 20 20 73 71 6c 69 74  count++;.  sqlit
29a20 65 33 5f 73 65 61 72 63 68 5f 63 6f 75 6e 74 2d  e3_search_count-
29a30 2d 3b 0a 23 65 6e 64 69 66 0a 20 20 70 2d 3e 61  -;.#endif.  p->a
29a40 43 6f 75 6e 74 65 72 5b 53 51 4c 49 54 45 5f 53  Counter[SQLITE_S
29a50 54 4d 54 53 54 41 54 55 53 5f 53 4f 52 54 5d 2b  TMTSTATUS_SORT]+
29a60 2b 3b 0a 20 20 2f 2a 20 46 61 6c 6c 20 74 68 72  +;.  /* Fall thr
29a70 6f 75 67 68 20 69 6e 74 6f 20 4f 50 5f 52 65 77  ough into OP_Rew
29a80 69 6e 64 20 2a 2f 0a 7d 0a 2f 2a 20 4f 70 63 6f  ind */.}./* Opco
29a90 64 65 3a 20 52 65 77 69 6e 64 20 50 31 20 50 32  de: Rewind P1 P2
29aa0 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 65   * * *.**.** The
29ab0 20 6e 65 78 74 20 75 73 65 20 6f 66 20 74 68 65   next use of the
29ac0 20 52 6f 77 69 64 20 6f 72 20 43 6f 6c 75 6d 6e   Rowid or Column
29ad0 20 6f 72 20 4e 65 78 74 20 69 6e 73 74 72 75 63   or Next instruc
29ae0 74 69 6f 6e 20 66 6f 72 20 50 31 20 0a 2a 2a 20  tion for P1 .** 
29af0 77 69 6c 6c 20 72 65 66 65 72 20 74 6f 20 74 68  will refer to th
29b00 65 20 66 69 72 73 74 20 65 6e 74 72 79 20 69 6e  e first entry in
29b10 20 74 68 65 20 64 61 74 61 62 61 73 65 20 74 61   the database ta
29b20 62 6c 65 20 6f 72 20 69 6e 64 65 78 2e 0a 2a 2a  ble or index..**
29b30 20 49 66 20 74 68 65 20 74 61 62 6c 65 20 6f 72   If the table or
29b40 20 69 6e 64 65 78 20 69 73 20 65 6d 70 74 79 2c   index is empty,
29b50 20 6a 75 6d 70 20 69 6d 6d 65 64 69 61 74 65 6c   jump immediatel
29b60 79 20 74 6f 20 50 32 2e 0a 2a 2a 20 49 66 20 74  y to P2..** If t
29b70 68 65 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65  he table or inde
29b80 78 20 69 73 20 6e 6f 74 20 65 6d 70 74 79 2c 20  x is not empty, 
29b90 66 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20  fall through to 
29ba0 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 0a 2a  the following .*
29bb0 2a 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a  * instruction..*
29bc0 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65  *.** This opcode
29bd0 20 6c 65 61 76 65 73 20 74 68 65 20 63 75 72 73   leaves the curs
29be0 6f 72 20 63 6f 6e 66 69 67 75 72 65 64 20 74 6f  or configured to
29bf0 20 6d 6f 76 65 20 69 6e 20 66 6f 72 77 61 72 64   move in forward
29c00 20 6f 72 64 65 72 2c 0a 2a 2a 20 66 72 6f 6d 20   order,.** from 
29c10 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 20 74 6f  the beginning to
29c20 77 61 72 64 20 74 68 65 20 65 6e 64 2e 20 20 49  ward the end.  I
29c30 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 74  n other words, t
29c40 68 65 20 63 75 72 73 6f 72 20 69 73 0a 2a 2a 20  he cursor is.** 
29c50 63 6f 6e 66 69 67 75 72 65 64 20 74 6f 20 75 73  configured to us
29c60 65 20 4e 65 78 74 2c 20 6e 6f 74 20 50 72 65 76  e Next, not Prev
29c70 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65 77  ..*/.case OP_Rew
29c80 69 6e 64 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a  ind: {        /*
29c90 20 6a 75 6d 70 20 2a 2f 0a 20 20 56 64 62 65 43   jump */.  VdbeC
29ca0 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 42 74 43  ursor *pC;.  BtC
29cb0 75 72 73 6f 72 20 2a 70 43 72 73 72 3b 0a 20 20  ursor *pCrsr;.  
29cc0 69 6e 74 20 72 65 73 3b 0a 0a 20 20 61 73 73 65  int res;..  asse
29cd0 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26  rt( pOp->p1>=0 &
29ce0 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75  & pOp->p1<p->nCu
29cf0 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70  rsor );.  pC = p
29d00 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d  ->apCsr[pOp->p1]
29d10 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d  ;.  assert( pC!=
29d20 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 69  0 );.  assert( i
29d30 73 53 6f 72 74 65 72 28 70 43 29 3d 3d 28 70 4f  sSorter(pC)==(pO
29d40 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 53 6f  p->opcode==OP_So
29d50 72 74 65 72 53 6f 72 74 29 20 29 3b 0a 20 20 72  rterSort) );.  r
29d60 65 73 20 3d 20 31 3b 0a 23 69 66 64 65 66 20 53  es = 1;.#ifdef S
29d70 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 70 43  QLITE_DEBUG.  pC
29d80 2d 3e 73 65 65 6b 4f 70 20 3d 20 4f 50 5f 52 65  ->seekOp = OP_Re
29d90 77 69 6e 64 3b 0a 23 65 6e 64 69 66 0a 20 20 69  wind;.#endif.  i
29da0 66 28 20 69 73 53 6f 72 74 65 72 28 70 43 29 20  f( isSorter(pC) 
29db0 29 7b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69  ){.    rc = sqli
29dc0 74 65 33 56 64 62 65 53 6f 72 74 65 72 52 65 77  te3VdbeSorterRew
29dd0 69 6e 64 28 70 43 2c 20 26 72 65 73 29 3b 0a 20  ind(pC, &res);. 
29de0 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73 73 65   }else{.    asse
29df0 72 74 28 20 70 43 2d 3e 65 43 75 72 54 79 70 65  rt( pC->eCurType
29e00 3d 3d 43 55 52 54 59 50 45 5f 42 54 52 45 45 20  ==CURTYPE_BTREE 
29e10 29 3b 0a 20 20 20 20 70 43 72 73 72 20 3d 20 70  );.    pCrsr = p
29e20 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 3b 0a 20  C->uc.pCursor;. 
29e30 20 20 20 61 73 73 65 72 74 28 20 70 43 72 73 72     assert( pCrsr
29e40 20 29 3b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c   );.    rc = sql
29e50 69 74 65 33 42 74 72 65 65 46 69 72 73 74 28 70  ite3BtreeFirst(p
29e60 43 72 73 72 2c 20 26 72 65 73 29 3b 0a 20 20 20  Crsr, &res);.   
29e70 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76   pC->deferredMov
29e80 65 74 6f 20 3d 20 30 3b 0a 20 20 20 20 70 43 2d  eto = 0;.    pC-
29e90 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d 20 43  >cacheStatus = C
29ea0 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20 7d 0a  ACHE_STALE;.  }.
29eb0 20 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20    if( rc ) goto 
29ec0 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
29ed0 6f 72 3b 0a 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f  or;.  pC->nullRo
29ee0 77 20 3d 20 28 75 38 29 72 65 73 3b 0a 20 20 61  w = (u8)res;.  a
29ef0 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e 30  ssert( pOp->p2>0
29f00 20 26 26 20 70 4f 70 2d 3e 70 32 3c 70 2d 3e 6e   && pOp->p2<p->n
29f10 4f 70 20 29 3b 0a 20 20 56 64 62 65 42 72 61 6e  Op );.  VdbeBran
29f20 63 68 54 61 6b 65 6e 28 72 65 73 21 3d 30 2c 32  chTaken(res!=0,2
29f30 29 3b 0a 20 20 69 66 28 20 72 65 73 20 29 20 67  );.  if( res ) g
29f40 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a  oto jump_to_p2;.
29f50 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
29f60 70 63 6f 64 65 3a 20 4e 65 78 74 20 50 31 20 50  pcode: Next P1 P
29f70 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a  2 P3 P4 P5.**.**
29f80 20 41 64 76 61 6e 63 65 20 63 75 72 73 6f 72 20   Advance cursor 
29f90 50 31 20 73 6f 20 74 68 61 74 20 69 74 20 70 6f  P1 so that it po
29fa0 69 6e 74 73 20 74 6f 20 74 68 65 20 6e 65 78 74  ints to the next
29fb0 20 6b 65 79 2f 64 61 74 61 20 70 61 69 72 20 69   key/data pair i
29fc0 6e 20 69 74 73 0a 2a 2a 20 74 61 62 6c 65 20 6f  n its.** table o
29fd0 72 20 69 6e 64 65 78 2e 20 20 49 66 20 74 68 65  r index.  If the
29fe0 72 65 20 61 72 65 20 6e 6f 20 6d 6f 72 65 20 6b  re are no more k
29ff0 65 79 2f 76 61 6c 75 65 20 70 61 69 72 73 20 74  ey/value pairs t
2a000 68 65 6e 20 66 61 6c 6c 20 74 68 72 6f 75 67 68  hen fall through
2a010 0a 2a 2a 20 74 6f 20 74 68 65 20 66 6f 6c 6c 6f  .** to the follo
2a020 77 69 6e 67 20 69 6e 73 74 72 75 63 74 69 6f 6e  wing instruction
2a030 2e 20 20 42 75 74 20 69 66 20 74 68 65 20 63 75  .  But if the cu
2a040 72 73 6f 72 20 61 64 76 61 6e 63 65 20 77 61 73  rsor advance was
2a050 20 73 75 63 63 65 73 73 66 75 6c 2c 0a 2a 2a 20   successful,.** 
2a060 6a 75 6d 70 20 69 6d 6d 65 64 69 61 74 65 6c 79  jump immediately
2a070 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54 68   to P2..**.** Th
2a080 65 20 4e 65 78 74 20 6f 70 63 6f 64 65 20 69 73  e Next opcode is
2a090 20 6f 6e 6c 79 20 76 61 6c 69 64 20 66 6f 6c 6c   only valid foll
2a0a0 6f 77 69 6e 67 20 61 6e 20 53 65 65 6b 47 54 2c  owing an SeekGT,
2a0b0 20 53 65 65 6b 47 45 2c 20 6f 72 0a 2a 2a 20 4f   SeekGE, or.** O
2a0c0 50 5f 52 65 77 69 6e 64 20 6f 70 63 6f 64 65 20  P_Rewind opcode 
2a0d0 75 73 65 64 20 74 6f 20 70 6f 73 69 74 69 6f 6e  used to position
2a0e0 20 74 68 65 20 63 75 72 73 6f 72 2e 20 20 4e 65   the cursor.  Ne
2a0f0 78 74 20 69 73 20 6e 6f 74 20 61 6c 6c 6f 77 65  xt is not allowe
2a100 64 0a 2a 2a 20 74 6f 20 66 6f 6c 6c 6f 77 20 53  d.** to follow S
2a110 65 65 6b 4c 54 2c 20 53 65 65 6b 4c 45 2c 20 6f  eekLT, SeekLE, o
2a120 72 20 4f 50 5f 4c 61 73 74 2e 0a 2a 2a 0a 2a 2a  r OP_Last..**.**
2a130 20 54 68 65 20 50 31 20 63 75 72 73 6f 72 20 6d   The P1 cursor m
2a140 75 73 74 20 62 65 20 66 6f 72 20 61 20 72 65 61  ust be for a rea
2a150 6c 20 74 61 62 6c 65 2c 20 6e 6f 74 20 61 20 70  l table, not a p
2a160 73 65 75 64 6f 2d 74 61 62 6c 65 2e 20 20 50 31  seudo-table.  P1
2a170 20 6d 75 73 74 20 68 61 76 65 0a 2a 2a 20 62 65   must have.** be
2a180 65 6e 20 6f 70 65 6e 65 64 20 70 72 69 6f 72 20  en opened prior 
2a190 74 6f 20 74 68 69 73 20 6f 70 63 6f 64 65 20 6f  to this opcode o
2a1a0 72 20 74 68 65 20 70 72 6f 67 72 61 6d 20 77 69  r the program wi
2a1b0 6c 6c 20 73 65 67 66 61 75 6c 74 2e 0a 2a 2a 0a  ll segfault..**.
2a1c0 2a 2a 20 54 68 65 20 50 33 20 76 61 6c 75 65 20  ** The P3 value 
2a1d0 69 73 20 61 20 68 69 6e 74 20 74 6f 20 74 68 65  is a hint to the
2a1e0 20 62 74 72 65 65 20 69 6d 70 6c 65 6d 65 6e 74   btree implement
2a1f0 61 74 69 6f 6e 2e 20 49 66 20 50 33 3d 3d 31 2c  ation. If P3==1,
2a200 20 74 68 61 74 0a 2a 2a 20 6d 65 61 6e 73 20 50   that.** means P
2a210 31 20 69 73 20 61 6e 20 53 51 4c 20 69 6e 64 65  1 is an SQL inde
2a220 78 20 61 6e 64 20 74 68 61 74 20 74 68 69 73 20  x and that this 
2a230 69 6e 73 74 72 75 63 74 69 6f 6e 20 63 6f 75 6c  instruction coul
2a240 64 20 68 61 76 65 20 62 65 65 6e 0a 2a 2a 20 6f  d have been.** o
2a250 6d 69 74 74 65 64 20 69 66 20 74 68 61 74 20 69  mitted if that i
2a260 6e 64 65 78 20 68 61 64 20 62 65 65 6e 20 75 6e  ndex had been un
2a270 69 71 75 65 2e 20 20 50 33 20 69 73 20 75 73 75  ique.  P3 is usu
2a280 61 6c 6c 79 20 30 2e 20 20 50 33 20 69 73 0a 2a  ally 0.  P3 is.*
2a290 2a 20 61 6c 77 61 79 73 20 65 69 74 68 65 72 20  * always either 
2a2a0 30 20 6f 72 20 31 2e 0a 2a 2a 0a 2a 2a 20 50 34  0 or 1..**.** P4
2a2b0 20 69 73 20 61 6c 77 61 79 73 20 6f 66 20 74 79   is always of ty
2a2c0 70 65 20 50 34 5f 41 44 56 41 4e 43 45 2e 20 54  pe P4_ADVANCE. T
2a2d0 68 65 20 66 75 6e 63 74 69 6f 6e 20 70 6f 69 6e  he function poin
2a2e0 74 65 72 20 70 6f 69 6e 74 73 20 74 6f 0a 2a 2a  ter points to.**
2a2f0 20 73 71 6c 69 74 65 33 42 74 72 65 65 4e 65 78   sqlite3BtreeNex
2a300 74 28 29 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35  t()..**.** If P5
2a310 20 69 73 20 70 6f 73 69 74 69 76 65 20 61 6e 64   is positive and
2a320 20 74 68 65 20 6a 75 6d 70 20 69 73 20 74 61 6b   the jump is tak
2a330 65 6e 2c 20 74 68 65 6e 20 65 76 65 6e 74 20 63  en, then event c
2a340 6f 75 6e 74 65 72 0a 2a 2a 20 6e 75 6d 62 65 72  ounter.** number
2a350 20 50 35 2d 31 20 69 6e 20 74 68 65 20 70 72 65   P5-1 in the pre
2a360 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74 20  pared statement 
2a370 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 2e 0a  is incremented..
2a380 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20  **.** See also: 
2a390 50 72 65 76 2c 20 4e 65 78 74 49 66 4f 70 65 6e  Prev, NextIfOpen
2a3a0 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e  .*/./* Opcode: N
2a3b0 65 78 74 49 66 4f 70 65 6e 20 50 31 20 50 32 20  extIfOpen P1 P2 
2a3c0 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 54  P3 P4 P5.**.** T
2a3d0 68 69 73 20 6f 70 63 6f 64 65 20 77 6f 72 6b 73  his opcode works
2a3e0 20 6a 75 73 74 20 6c 69 6b 65 20 4e 65 78 74 20   just like Next 
2a3f0 65 78 63 65 70 74 20 74 68 61 74 20 69 66 20 63  except that if c
2a400 75 72 73 6f 72 20 50 31 20 69 73 20 6e 6f 74 0a  ursor P1 is not.
2a410 2a 2a 20 6f 70 65 6e 20 69 74 20 62 65 68 61 76  ** open it behav
2a420 65 73 20 61 20 6e 6f 2d 6f 70 2e 0a 2a 2f 0a 2f  es a no-op..*/./
2a430 2a 20 4f 70 63 6f 64 65 3a 20 50 72 65 76 20 50  * Opcode: Prev P
2a440 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a  1 P2 P3 P4 P5.**
2a450 0a 2a 2a 20 42 61 63 6b 20 75 70 20 63 75 72 73  .** Back up curs
2a460 6f 72 20 50 31 20 73 6f 20 74 68 61 74 20 69 74  or P1 so that it
2a470 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 20 70   points to the p
2a480 72 65 76 69 6f 75 73 20 6b 65 79 2f 64 61 74 61  revious key/data
2a490 20 70 61 69 72 20 69 6e 20 69 74 73 0a 2a 2a 20   pair in its.** 
2a4a0 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 2e 20  table or index. 
2a4b0 20 49 66 20 74 68 65 72 65 20 69 73 20 6e 6f 20   If there is no 
2a4c0 70 72 65 76 69 6f 75 73 20 6b 65 79 2f 76 61 6c  previous key/val
2a4d0 75 65 20 70 61 69 72 73 20 74 68 65 6e 20 66 61  ue pairs then fa
2a4e0 6c 6c 20 74 68 72 6f 75 67 68 0a 2a 2a 20 74 6f  ll through.** to
2a4f0 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 69   the following i
2a500 6e 73 74 72 75 63 74 69 6f 6e 2e 20 20 42 75 74  nstruction.  But
2a510 20 69 66 20 74 68 65 20 63 75 72 73 6f 72 20 62   if the cursor b
2a520 61 63 6b 75 70 20 77 61 73 20 73 75 63 63 65 73  ackup was succes
2a530 73 66 75 6c 2c 0a 2a 2a 20 6a 75 6d 70 20 69 6d  sful,.** jump im
2a540 6d 65 64 69 61 74 65 6c 79 20 74 6f 20 50 32 2e  mediately to P2.
2a550 0a 2a 2a 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 72  .**.**.** The Pr
2a560 65 76 20 6f 70 63 6f 64 65 20 69 73 20 6f 6e 6c  ev opcode is onl
2a570 79 20 76 61 6c 69 64 20 66 6f 6c 6c 6f 77 69 6e  y valid followin
2a580 67 20 61 6e 20 53 65 65 6b 4c 54 2c 20 53 65 65  g an SeekLT, See
2a590 6b 4c 45 2c 20 6f 72 0a 2a 2a 20 4f 50 5f 4c 61  kLE, or.** OP_La
2a5a0 73 74 20 6f 70 63 6f 64 65 20 75 73 65 64 20 74  st opcode used t
2a5b0 6f 20 70 6f 73 69 74 69 6f 6e 20 74 68 65 20 63  o position the c
2a5c0 75 72 73 6f 72 2e 20 20 50 72 65 76 20 69 73 20  ursor.  Prev is 
2a5d0 6e 6f 74 20 61 6c 6c 6f 77 65 64 0a 2a 2a 20 74  not allowed.** t
2a5e0 6f 20 66 6f 6c 6c 6f 77 20 53 65 65 6b 47 54 2c  o follow SeekGT,
2a5f0 20 53 65 65 6b 47 45 2c 20 6f 72 20 4f 50 5f 52   SeekGE, or OP_R
2a600 65 77 69 6e 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  ewind..**.** The
2a610 20 50 31 20 63 75 72 73 6f 72 20 6d 75 73 74 20   P1 cursor must 
2a620 62 65 20 66 6f 72 20 61 20 72 65 61 6c 20 74 61  be for a real ta
2a630 62 6c 65 2c 20 6e 6f 74 20 61 20 70 73 65 75 64  ble, not a pseud
2a640 6f 2d 74 61 62 6c 65 2e 20 20 49 66 20 50 31 20  o-table.  If P1 
2a650 69 73 0a 2a 2a 20 6e 6f 74 20 6f 70 65 6e 20 74  is.** not open t
2a660 68 65 6e 20 74 68 65 20 62 65 68 61 76 69 6f 72  hen the behavior
2a670 20 69 73 20 75 6e 64 65 66 69 6e 65 64 2e 0a 2a   is undefined..*
2a680 2a 0a 2a 2a 20 54 68 65 20 50 33 20 76 61 6c 75  *.** The P3 valu
2a690 65 20 69 73 20 61 20 68 69 6e 74 20 74 6f 20 74  e is a hint to t
2a6a0 68 65 20 62 74 72 65 65 20 69 6d 70 6c 65 6d 65  he btree impleme
2a6b0 6e 74 61 74 69 6f 6e 2e 20 49 66 20 50 33 3d 3d  ntation. If P3==
2a6c0 31 2c 20 74 68 61 74 0a 2a 2a 20 6d 65 61 6e 73  1, that.** means
2a6d0 20 50 31 20 69 73 20 61 6e 20 53 51 4c 20 69 6e   P1 is an SQL in
2a6e0 64 65 78 20 61 6e 64 20 74 68 61 74 20 74 68 69  dex and that thi
2a6f0 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 63 6f  s instruction co
2a700 75 6c 64 20 68 61 76 65 20 62 65 65 6e 0a 2a 2a  uld have been.**
2a710 20 6f 6d 69 74 74 65 64 20 69 66 20 74 68 61 74   omitted if that
2a720 20 69 6e 64 65 78 20 68 61 64 20 62 65 65 6e 20   index had been 
2a730 75 6e 69 71 75 65 2e 20 20 50 33 20 69 73 20 75  unique.  P3 is u
2a740 73 75 61 6c 6c 79 20 30 2e 20 20 50 33 20 69 73  sually 0.  P3 is
2a750 0a 2a 2a 20 61 6c 77 61 79 73 20 65 69 74 68 65  .** always eithe
2a760 72 20 30 20 6f 72 20 31 2e 0a 2a 2a 0a 2a 2a 20  r 0 or 1..**.** 
2a770 50 34 20 69 73 20 61 6c 77 61 79 73 20 6f 66 20  P4 is always of 
2a780 74 79 70 65 20 50 34 5f 41 44 56 41 4e 43 45 2e  type P4_ADVANCE.
2a790 20 54 68 65 20 66 75 6e 63 74 69 6f 6e 20 70 6f   The function po
2a7a0 69 6e 74 65 72 20 70 6f 69 6e 74 73 20 74 6f 0a  inter points to.
2a7b0 2a 2a 20 73 71 6c 69 74 65 33 42 74 72 65 65 50  ** sqlite3BtreeP
2a7c0 72 65 76 69 6f 75 73 28 29 2e 0a 2a 2a 0a 2a 2a  revious()..**.**
2a7d0 20 49 66 20 50 35 20 69 73 20 70 6f 73 69 74 69   If P5 is positi
2a7e0 76 65 20 61 6e 64 20 74 68 65 20 6a 75 6d 70 20  ve and the jump 
2a7f0 69 73 20 74 61 6b 65 6e 2c 20 74 68 65 6e 20 65  is taken, then e
2a800 76 65 6e 74 20 63 6f 75 6e 74 65 72 0a 2a 2a 20  vent counter.** 
2a810 6e 75 6d 62 65 72 20 50 35 2d 31 20 69 6e 20 74  number P5-1 in t
2a820 68 65 20 70 72 65 70 61 72 65 64 20 73 74 61 74  he prepared stat
2a830 65 6d 65 6e 74 20 69 73 20 69 6e 63 72 65 6d 65  ement is increme
2a840 6e 74 65 64 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f  nted..*/./* Opco
2a850 64 65 3a 20 50 72 65 76 49 66 4f 70 65 6e 20 50  de: PrevIfOpen P
2a860 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a  1 P2 P3 P4 P5.**
2a870 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20  .** This opcode 
2a880 77 6f 72 6b 73 20 6a 75 73 74 20 6c 69 6b 65 20  works just like 
2a890 50 72 65 76 20 65 78 63 65 70 74 20 74 68 61 74  Prev except that
2a8a0 20 69 66 20 63 75 72 73 6f 72 20 50 31 20 69 73   if cursor P1 is
2a8b0 20 6e 6f 74 0a 2a 2a 20 6f 70 65 6e 20 69 74 20   not.** open it 
2a8c0 62 65 68 61 76 65 73 20 61 20 6e 6f 2d 6f 70 2e  behaves a no-op.
2a8d0 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53  .*/./* Opcode: S
2a8e0 6f 72 74 65 72 4e 65 78 74 20 50 31 20 50 32 20  orterNext P1 P2 
2a8f0 2a 20 2a 20 50 35 0a 2a 2a 0a 2a 2a 20 54 68 69  * * P5.**.** Thi
2a900 73 20 6f 70 63 6f 64 65 20 77 6f 72 6b 73 20 6a  s opcode works j
2a910 75 73 74 20 6c 69 6b 65 20 4f 50 5f 4e 65 78 74  ust like OP_Next
2a920 20 65 78 63 65 70 74 20 74 68 61 74 20 50 31 20   except that P1 
2a930 6d 75 73 74 20 62 65 20 61 0a 2a 2a 20 73 6f 72  must be a.** sor
2a940 74 65 72 20 6f 62 6a 65 63 74 20 66 6f 72 20 77  ter object for w
2a950 68 69 63 68 20 74 68 65 20 4f 50 5f 53 6f 72 74  hich the OP_Sort
2a960 65 72 53 6f 72 74 20 6f 70 63 6f 64 65 20 68 61  erSort opcode ha
2a970 73 20 62 65 65 6e 0a 2a 2a 20 69 6e 76 6f 6b 65  s been.** invoke
2a980 64 2e 20 20 54 68 69 73 20 6f 70 63 6f 64 65 20  d.  This opcode 
2a990 61 64 76 61 6e 63 65 73 20 74 68 65 20 63 75 72  advances the cur
2a9a0 73 6f 72 20 74 6f 20 74 68 65 20 6e 65 78 74 20  sor to the next 
2a9b0 73 6f 72 74 65 64 0a 2a 2a 20 72 65 63 6f 72 64  sorted.** record
2a9c0 2c 20 6f 72 20 6a 75 6d 70 73 20 74 6f 20 50 32  , or jumps to P2
2a9d0 20 69 66 20 74 68 65 72 65 20 61 72 65 20 6e 6f   if there are no
2a9e0 20 6d 6f 72 65 20 73 6f 72 74 65 64 20 72 65 63   more sorted rec
2a9f0 6f 72 64 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  ords..*/.case OP
2aa00 5f 53 6f 72 74 65 72 4e 65 78 74 3a 20 7b 20 20  _SorterNext: {  
2aa10 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 56 64 62  /* jump */.  Vdb
2aa20 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 0a 20 20  eCursor *pC;..  
2aa30 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f  pC = p->apCsr[pO
2aa40 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74  p->p1];.  assert
2aa50 28 20 69 73 53 6f 72 74 65 72 28 70 43 29 20 29  ( isSorter(pC) )
2aa60 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  ;.  rc = sqlite3
2aa70 56 64 62 65 53 6f 72 74 65 72 4e 65 78 74 28 64  VdbeSorterNext(d
2aa80 62 2c 20 70 43 29 3b 0a 20 20 67 6f 74 6f 20 6e  b, pC);.  goto n
2aa90 65 78 74 5f 74 61 69 6c 3b 0a 63 61 73 65 20 4f  ext_tail;.case O
2aaa0 50 5f 50 72 65 76 49 66 4f 70 65 6e 3a 20 20 20  P_PrevIfOpen:   
2aab0 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 63 61 73 65   /* jump */.case
2aac0 20 4f 50 5f 4e 65 78 74 49 66 4f 70 65 6e 3a 20   OP_NextIfOpen: 
2aad0 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20     /* jump */.  
2aae0 69 66 28 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70  if( p->apCsr[pOp
2aaf0 2d 3e 70 31 5d 3d 3d 30 20 29 20 62 72 65 61 6b  ->p1]==0 ) break
2ab00 3b 0a 20 20 2f 2a 20 46 61 6c 6c 20 74 68 72 6f  ;.  /* Fall thro
2ab10 75 67 68 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 50  ugh */.case OP_P
2ab20 72 65 76 3a 20 20 20 20 20 20 20 20 20 20 2f 2a  rev:          /*
2ab30 20 6a 75 6d 70 20 2a 2f 0a 63 61 73 65 20 4f 50   jump */.case OP
2ab40 5f 4e 65 78 74 3a 20 20 20 20 20 20 20 20 20 20  _Next:          
2ab50 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 61 73 73  /* jump */.  ass
2ab60 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20  ert( pOp->p1>=0 
2ab70 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43  && pOp->p1<p->nC
2ab80 75 72 73 6f 72 20 29 3b 0a 20 20 61 73 73 65 72  ursor );.  asser
2ab90 74 28 20 70 4f 70 2d 3e 70 35 3c 41 72 72 61 79  t( pOp->p5<Array
2aba0 53 69 7a 65 28 70 2d 3e 61 43 6f 75 6e 74 65 72  Size(p->aCounter
2abb0 29 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61  ) );.  pC = p->a
2abc0 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  pCsr[pOp->p1];. 
2abd0 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29   assert( pC!=0 )
2abe0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  ;.  assert( pC->
2abf0 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 3d 3d  deferredMoveto==
2ac00 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  0 );.  assert( p
2ac10 43 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43 55 52  C->eCurType==CUR
2ac20 54 59 50 45 5f 42 54 52 45 45 20 29 3b 0a 20 20  TYPE_BTREE );.  
2ac30 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63  assert( pOp->opc
2ac40 6f 64 65 21 3d 4f 50 5f 4e 65 78 74 20 7c 7c 20  ode!=OP_Next || 
2ac50 70 4f 70 2d 3e 70 34 2e 78 41 64 76 61 6e 63 65  pOp->p4.xAdvance
2ac60 3d 3d 73 71 6c 69 74 65 33 42 74 72 65 65 4e 65  ==sqlite3BtreeNe
2ac70 78 74 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  xt );.  assert( 
2ac80 70 4f 70 2d 3e 6f 70 63 6f 64 65 21 3d 4f 50 5f  pOp->opcode!=OP_
2ac90 50 72 65 76 20 7c 7c 20 70 4f 70 2d 3e 70 34 2e  Prev || pOp->p4.
2aca0 78 41 64 76 61 6e 63 65 3d 3d 73 71 6c 69 74 65  xAdvance==sqlite
2acb0 33 42 74 72 65 65 50 72 65 76 69 6f 75 73 20 29  3BtreePrevious )
2acc0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
2acd0 3e 6f 70 63 6f 64 65 21 3d 4f 50 5f 4e 65 78 74  >opcode!=OP_Next
2ace0 49 66 4f 70 65 6e 20 7c 7c 20 70 4f 70 2d 3e 70  IfOpen || pOp->p
2acf0 34 2e 78 41 64 76 61 6e 63 65 3d 3d 73 71 6c 69  4.xAdvance==sqli
2ad00 74 65 33 42 74 72 65 65 4e 65 78 74 20 29 3b 0a  te3BtreeNext );.
2ad10 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f    assert( pOp->o
2ad20 70 63 6f 64 65 21 3d 4f 50 5f 50 72 65 76 49 66  pcode!=OP_PrevIf
2ad30 4f 70 65 6e 20 7c 7c 20 70 4f 70 2d 3e 70 34 2e  Open || pOp->p4.
2ad40 78 41 64 76 61 6e 63 65 3d 3d 73 71 6c 69 74 65  xAdvance==sqlite
2ad50 33 42 74 72 65 65 50 72 65 76 69 6f 75 73 29 3b  3BtreePrevious);
2ad60 0a 0a 20 20 2f 2a 20 54 68 65 20 4e 65 78 74 20  ..  /* The Next 
2ad70 6f 70 63 6f 64 65 20 69 73 20 6f 6e 6c 79 20 75  opcode is only u
2ad80 73 65 64 20 61 66 74 65 72 20 53 65 65 6b 47 54  sed after SeekGT
2ad90 2c 20 53 65 65 6b 47 45 2c 20 61 6e 64 20 52 65  , SeekGE, and Re
2ada0 77 69 6e 64 2e 0a 20 20 2a 2a 20 54 68 65 20 50  wind..  ** The P
2adb0 72 65 76 20 6f 70 63 6f 64 65 20 69 73 20 6f 6e  rev opcode is on
2adc0 6c 79 20 75 73 65 64 20 61 66 74 65 72 20 53 65  ly used after Se
2add0 65 6b 4c 54 2c 20 53 65 65 6b 4c 45 2c 20 61 6e  ekLT, SeekLE, an
2ade0 64 20 4c 61 73 74 2e 20 2a 2f 0a 20 20 61 73 73  d Last. */.  ass
2adf0 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65  ert( pOp->opcode
2ae00 21 3d 4f 50 5f 4e 65 78 74 20 7c 7c 20 70 4f 70  !=OP_Next || pOp
2ae10 2d 3e 6f 70 63 6f 64 65 21 3d 4f 50 5f 4e 65 78  ->opcode!=OP_Nex
2ae20 74 49 66 4f 70 65 6e 0a 20 20 20 20 20 20 20 7c  tIfOpen.       |
2ae30 7c 20 70 43 2d 3e 73 65 65 6b 4f 70 3d 3d 4f 50  | pC->seekOp==OP
2ae40 5f 53 65 65 6b 47 54 20 7c 7c 20 70 43 2d 3e 73  _SeekGT || pC->s
2ae50 65 65 6b 4f 70 3d 3d 4f 50 5f 53 65 65 6b 47 45  eekOp==OP_SeekGE
2ae60 0a 20 20 20 20 20 20 20 7c 7c 20 70 43 2d 3e 73  .       || pC->s
2ae70 65 65 6b 4f 70 3d 3d 4f 50 5f 52 65 77 69 6e 64  eekOp==OP_Rewind
2ae80 20 7c 7c 20 70 43 2d 3e 73 65 65 6b 4f 70 3d 3d   || pC->seekOp==
2ae90 4f 50 5f 46 6f 75 6e 64 29 3b 0a 20 20 61 73 73  OP_Found);.  ass
2aea0 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65  ert( pOp->opcode
2aeb0 21 3d 4f 50 5f 50 72 65 76 20 7c 7c 20 70 4f 70  !=OP_Prev || pOp
2aec0 2d 3e 6f 70 63 6f 64 65 21 3d 4f 50 5f 50 72 65  ->opcode!=OP_Pre
2aed0 76 49 66 4f 70 65 6e 0a 20 20 20 20 20 20 20 7c  vIfOpen.       |
2aee0 7c 20 70 43 2d 3e 73 65 65 6b 4f 70 3d 3d 4f 50  | pC->seekOp==OP
2aef0 5f 53 65 65 6b 4c 54 20 7c 7c 20 70 43 2d 3e 73  _SeekLT || pC->s
2af00 65 65 6b 4f 70 3d 3d 4f 50 5f 53 65 65 6b 4c 45  eekOp==OP_SeekLE
2af10 0a 20 20 20 20 20 20 20 7c 7c 20 70 43 2d 3e 73  .       || pC->s
2af20 65 65 6b 4f 70 3d 3d 4f 50 5f 4c 61 73 74 20 29  eekOp==OP_Last )
2af30 3b 0a 0a 20 20 72 63 20 3d 20 70 4f 70 2d 3e 70  ;..  rc = pOp->p
2af40 34 2e 78 41 64 76 61 6e 63 65 28 70 43 2d 3e 75  4.xAdvance(pC->u
2af50 63 2e 70 43 75 72 73 6f 72 2c 20 70 4f 70 2d 3e  c.pCursor, pOp->
2af60 70 33 29 3b 0a 6e 65 78 74 5f 74 61 69 6c 3a 0a  p3);.next_tail:.
2af70 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75    pC->cacheStatu
2af80 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b  s = CACHE_STALE;
2af90 0a 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b  .  VdbeBranchTak
2afa0 65 6e 28 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  en(rc==SQLITE_OK
2afb0 2c 32 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53  ,2);.  if( rc==S
2afc0 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20  QLITE_OK ){.    
2afd0 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 30 3b  pC->nullRow = 0;
2afe0 0a 20 20 20 20 70 2d 3e 61 43 6f 75 6e 74 65 72  .    p->aCounter
2aff0 5b 70 4f 70 2d 3e 70 35 5d 2b 2b 3b 0a 23 69 66  [pOp->p5]++;.#if
2b000 64 65 66 20 53 51 4c 49 54 45 5f 54 45 53 54 0a  def SQLITE_TEST.
2b010 20 20 20 20 73 71 6c 69 74 65 33 5f 73 65 61 72      sqlite3_sear
2b020 63 68 5f 63 6f 75 6e 74 2b 2b 3b 0a 23 65 6e 64  ch_count++;.#end
2b030 69 66 0a 20 20 20 20 67 6f 74 6f 20 6a 75 6d 70  if.    goto jump
2b040 5f 74 6f 5f 70 32 5f 61 6e 64 5f 63 68 65 63 6b  _to_p2_and_check
2b050 5f 66 6f 72 5f 69 6e 74 65 72 72 75 70 74 3b 0a  _for_interrupt;.
2b060 20 20 7d 0a 20 20 69 66 28 20 72 63 21 3d 53 51    }.  if( rc!=SQ
2b070 4c 49 54 45 5f 44 4f 4e 45 20 29 20 67 6f 74 6f  LITE_DONE ) goto
2b080 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
2b090 72 6f 72 3b 0a 20 20 72 63 20 3d 20 53 51 4c 49  ror;.  rc = SQLI
2b0a0 54 45 5f 4f 4b 3b 0a 20 20 70 43 2d 3e 6e 75 6c  TE_OK;.  pC->nul
2b0b0 6c 52 6f 77 20 3d 20 31 3b 0a 20 20 67 6f 74 6f  lRow = 1;.  goto
2b0c0 20 63 68 65 63 6b 5f 66 6f 72 5f 69 6e 74 65 72   check_for_inter
2b0d0 72 75 70 74 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  rupt;.}../* Opco
2b0e0 64 65 3a 20 49 64 78 49 6e 73 65 72 74 20 50 31  de: IdxInsert P1
2b0f0 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20   P2 P3 P4 P5.** 
2b100 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b  Synopsis: key=r[
2b110 50 32 5d 0a 2a 2a 0a 2a 2a 20 52 65 67 69 73 74  P2].**.** Regist
2b120 65 72 20 50 32 20 68 6f 6c 64 73 20 61 6e 20 53  er P2 holds an S
2b130 51 4c 20 69 6e 64 65 78 20 6b 65 79 20 6d 61 64  QL index key mad
2b140 65 20 75 73 69 6e 67 20 74 68 65 0a 2a 2a 20 4d  e using the.** M
2b150 61 6b 65 52 65 63 6f 72 64 20 69 6e 73 74 72 75  akeRecord instru
2b160 63 74 69 6f 6e 73 2e 20 20 54 68 69 73 20 6f 70  ctions.  This op
2b170 63 6f 64 65 20 77 72 69 74 65 73 20 74 68 61 74  code writes that
2b180 20 6b 65 79 0a 2a 2a 20 69 6e 74 6f 20 74 68 65   key.** into the
2b190 20 69 6e 64 65 78 20 50 31 2e 20 20 44 61 74 61   index P1.  Data
2b1a0 20 66 6f 72 20 74 68 65 20 65 6e 74 72 79 20 69   for the entry i
2b1b0 73 20 6e 69 6c 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  s nil..**.** If 
2b1c0 50 34 20 69 73 20 6e 6f 74 20 7a 65 72 6f 2c 20  P4 is not zero, 
2b1d0 74 68 65 6e 20 69 74 20 69 73 20 74 68 65 20 6e  then it is the n
2b1e0 75 6d 62 65 72 20 6f 66 20 76 61 6c 75 65 73 20  umber of values 
2b1f0 69 6e 20 74 68 65 20 75 6e 70 61 63 6b 65 64 0a  in the unpacked.
2b200 2a 2a 20 6b 65 79 20 6f 66 20 72 65 67 28 50 32  ** key of reg(P2
2b210 29 2e 20 20 49 6e 20 74 68 61 74 20 63 61 73 65  ).  In that case
2b220 2c 20 50 33 20 69 73 20 74 68 65 20 69 6e 64 65  , P3 is the inde
2b230 78 20 6f 66 20 74 68 65 20 66 69 72 73 74 20 72  x of the first r
2b240 65 67 69 73 74 65 72 0a 2a 2a 20 66 6f 72 20 74  egister.** for t
2b250 68 65 20 75 6e 70 61 63 6b 65 64 20 6b 65 79 2e  he unpacked key.
2b260 20 20 54 68 65 20 61 76 61 69 6c 61 62 69 6c 69    The availabili
2b270 74 79 20 6f 66 20 74 68 65 20 75 6e 70 61 63 6b  ty of the unpack
2b280 65 64 20 6b 65 79 20 63 61 6e 20 73 6f 6d 65 74  ed key can somet
2b290 69 6d 65 73 0a 2a 2a 20 62 65 20 61 6e 20 6f 70  imes.** be an op
2b2a0 74 69 6d 69 7a 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a  timization..**.*
2b2b0 2a 20 49 66 20 50 35 20 68 61 73 20 74 68 65 20  * If P5 has the 
2b2c0 4f 50 46 4c 41 47 5f 41 50 50 45 4e 44 20 62 69  OPFLAG_APPEND bi
2b2d0 74 20 73 65 74 2c 20 74 68 61 74 20 69 73 20 61  t set, that is a
2b2e0 20 68 69 6e 74 20 74 6f 20 74 68 65 20 62 2d 74   hint to the b-t
2b2f0 72 65 65 20 6c 61 79 65 72 0a 2a 2a 20 74 68 61  ree layer.** tha
2b300 74 20 74 68 69 73 20 69 6e 73 65 72 74 20 69 73  t this insert is
2b310 20 6c 69 6b 65 6c 79 20 74 6f 20 62 65 20 61 6e   likely to be an
2b320 20 61 70 70 65 6e 64 2e 0a 2a 2a 0a 2a 2a 20 49   append..**.** I
2b330 66 20 50 35 20 68 61 73 20 74 68 65 20 4f 50 46  f P5 has the OPF
2b340 4c 41 47 5f 4e 43 48 41 4e 47 45 20 62 69 74 20  LAG_NCHANGE bit 
2b350 73 65 74 2c 20 74 68 65 6e 20 74 68 65 20 63 68  set, then the ch
2b360 61 6e 67 65 20 63 6f 75 6e 74 65 72 20 69 73 0a  ange counter is.
2b370 2a 2a 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 62  ** incremented b
2b380 79 20 74 68 69 73 20 69 6e 73 74 72 75 63 74 69  y this instructi
2b390 6f 6e 2e 20 20 49 66 20 74 68 65 20 4f 50 46 4c  on.  If the OPFL
2b3a0 41 47 5f 4e 43 48 41 4e 47 45 20 62 69 74 20 69  AG_NCHANGE bit i
2b3b0 73 20 63 6c 65 61 72 2c 0a 2a 2a 20 74 68 65 6e  s clear,.** then
2b3c0 20 74 68 65 20 63 68 61 6e 67 65 20 63 6f 75 6e   the change coun
2b3d0 74 65 72 20 69 73 20 75 6e 63 68 61 6e 67 65 64  ter is unchanged
2b3e0 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 4f  ..**.** If the O
2b3f0 50 46 4c 41 47 5f 55 53 45 53 45 45 4b 52 45 53  PFLAG_USESEEKRES
2b400 55 4c 54 20 66 6c 61 67 20 6f 66 20 50 35 20 69  ULT flag of P5 i
2b410 73 20 73 65 74 2c 20 74 68 65 20 69 6d 70 6c 65  s set, the imple
2b420 6d 65 6e 74 61 74 69 6f 6e 20 6d 69 67 68 74 0a  mentation might.
2b430 2a 2a 20 72 75 6e 20 66 61 73 74 65 72 20 62 79  ** run faster by
2b440 20 61 76 6f 69 64 69 6e 67 20 61 6e 20 75 6e 6e   avoiding an unn
2b450 65 63 65 73 73 61 72 79 20 73 65 65 6b 20 6f 6e  ecessary seek on
2b460 20 63 75 72 73 6f 72 20 50 31 2e 20 20 48 6f 77   cursor P1.  How
2b470 65 76 65 72 2c 0a 2a 2a 20 74 68 65 20 4f 50 46  ever,.** the OPF
2b480 4c 41 47 5f 55 53 45 53 45 45 4b 52 45 53 55 4c  LAG_USESEEKRESUL
2b490 54 20 66 6c 61 67 20 6d 75 73 74 20 6f 6e 6c 79  T flag must only
2b4a0 20 62 65 20 73 65 74 20 69 66 20 74 68 65 72 65   be set if there
2b4b0 20 68 61 76 65 20 62 65 65 6e 20 6e 6f 20 70 72   have been no pr
2b4c0 69 6f 72 0a 2a 2a 20 73 65 65 6b 73 20 6f 6e 20  ior.** seeks on 
2b4d0 74 68 65 20 63 75 72 73 6f 72 20 6f 72 20 69 66  the cursor or if
2b4e0 20 74 68 65 20 6d 6f 73 74 20 72 65 63 65 6e 74   the most recent
2b4f0 20 73 65 65 6b 20 75 73 65 64 20 61 20 6b 65 79   seek used a key
2b500 20 65 71 75 69 76 61 6c 65 6e 74 0a 2a 2a 20 74   equivalent.** t
2b510 6f 20 50 32 2e 20 0a 2a 2a 0a 2a 2a 20 54 68 69  o P2. .**.** Thi
2b520 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 6f 6e  s instruction on
2b530 6c 79 20 77 6f 72 6b 73 20 66 6f 72 20 69 6e 64  ly works for ind
2b540 69 63 65 73 2e 20 20 54 68 65 20 65 71 75 69 76  ices.  The equiv
2b550 61 6c 65 6e 74 20 69 6e 73 74 72 75 63 74 69 6f  alent instructio
2b560 6e 0a 2a 2a 20 66 6f 72 20 74 61 62 6c 65 73 20  n.** for tables 
2b570 69 73 20 4f 50 5f 49 6e 73 65 72 74 2e 0a 2a 2f  is OP_Insert..*/
2b580 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 6f 72 74  ./* Opcode: Sort
2b590 65 72 49 6e 73 65 72 74 20 50 31 20 50 32 20 2a  erInsert P1 P2 *
2b5a0 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73   * *.** Synopsis
2b5b0 3a 20 6b 65 79 3d 72 5b 50 32 5d 0a 2a 2a 0a 2a  : key=r[P2].**.*
2b5c0 2a 20 52 65 67 69 73 74 65 72 20 50 32 20 68 6f  * Register P2 ho
2b5d0 6c 64 73 20 61 6e 20 53 51 4c 20 69 6e 64 65 78  lds an SQL index
2b5e0 20 6b 65 79 20 6d 61 64 65 20 75 73 69 6e 67 20   key made using 
2b5f0 74 68 65 0a 2a 2a 20 4d 61 6b 65 52 65 63 6f 72  the.** MakeRecor
2b600 64 20 69 6e 73 74 72 75 63 74 69 6f 6e 73 2e 20  d instructions. 
2b610 20 54 68 69 73 20 6f 70 63 6f 64 65 20 77 72 69   This opcode wri
2b620 74 65 73 20 74 68 61 74 20 6b 65 79 0a 2a 2a 20  tes that key.** 
2b630 69 6e 74 6f 20 74 68 65 20 73 6f 72 74 65 72 20  into the sorter 
2b640 50 31 2e 20 20 44 61 74 61 20 66 6f 72 20 74 68  P1.  Data for th
2b650 65 20 65 6e 74 72 79 20 69 73 20 6e 69 6c 2e 0a  e entry is nil..
2b660 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 6f 72 74 65  */.case OP_Sorte
2b670 72 49 6e 73 65 72 74 3a 20 20 20 20 20 20 20 2f  rInsert:       /
2b680 2a 20 69 6e 32 20 2a 2f 0a 63 61 73 65 20 4f 50  * in2 */.case OP
2b690 5f 49 64 78 49 6e 73 65 72 74 3a 20 7b 20 20 20  _IdxInsert: {   
2b6a0 20 20 20 20 20 2f 2a 20 69 6e 32 20 2a 2f 0a 20       /* in2 */. 
2b6b0 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b   VdbeCursor *pC;
2b6c0 0a 20 20 42 74 72 65 65 50 61 79 6c 6f 61 64 20  .  BtreePayload 
2b6d0 78 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f  x;..  assert( pO
2b6e0 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d  p->p1>=0 && pOp-
2b6f0 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29  >p1<p->nCursor )
2b700 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73  ;.  pC = p->apCs
2b710 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 73 71  r[pOp->p1];.  sq
2b720 6c 69 74 65 33 56 64 62 65 49 6e 63 72 57 72 69  lite3VdbeIncrWri
2b730 74 65 43 6f 75 6e 74 65 72 28 70 2c 20 70 43 29  teCounter(p, pC)
2b740 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d  ;.  assert( pC!=
2b750 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 69  0 );.  assert( i
2b760 73 53 6f 72 74 65 72 28 70 43 29 3d 3d 28 70 4f  sSorter(pC)==(pO
2b770 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 53 6f  p->opcode==OP_So
2b780 72 74 65 72 49 6e 73 65 72 74 29 20 29 3b 0a 20  rterInsert) );. 
2b790 20 70 49 6e 32 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn2 = &aMem[pO
2b7a0 70 2d 3e 70 32 5d 3b 0a 20 20 61 73 73 65 72 74  p->p2];.  assert
2b7b0 28 20 70 49 6e 32 2d 3e 66 6c 61 67 73 20 26 20  ( pIn2->flags & 
2b7c0 4d 45 4d 5f 42 6c 6f 62 20 29 3b 0a 20 20 69 66  MEM_Blob );.  if
2b7d0 28 20 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c  ( pOp->p5 & OPFL
2b7e0 41 47 5f 4e 43 48 41 4e 47 45 20 29 20 70 2d 3e  AG_NCHANGE ) p->
2b7f0 6e 43 68 61 6e 67 65 2b 2b 3b 0a 20 20 61 73 73  nChange++;.  ass
2b800 65 72 74 28 20 70 43 2d 3e 65 43 75 72 54 79 70  ert( pC->eCurTyp
2b810 65 3d 3d 43 55 52 54 59 50 45 5f 42 54 52 45 45  e==CURTYPE_BTREE
2b820 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d   || pOp->opcode=
2b830 3d 4f 50 5f 53 6f 72 74 65 72 49 6e 73 65 72 74  =OP_SorterInsert
2b840 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43   );.  assert( pC
2b850 2d 3e 69 73 54 61 62 6c 65 3d 3d 30 20 29 3b 0a  ->isTable==0 );.
2b860 20 20 72 63 20 3d 20 45 78 70 61 6e 64 42 6c 6f    rc = ExpandBlo
2b870 62 28 70 49 6e 32 29 3b 0a 20 20 69 66 28 20 72  b(pIn2);.  if( r
2b880 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64  c ) goto abort_d
2b890 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 69  ue_to_error;.  i
2b8a0 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d  f( pOp->opcode==
2b8b0 4f 50 5f 53 6f 72 74 65 72 49 6e 73 65 72 74 20  OP_SorterInsert 
2b8c0 29 7b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69  ){.    rc = sqli
2b8d0 74 65 33 56 64 62 65 53 6f 72 74 65 72 57 72 69  te3VdbeSorterWri
2b8e0 74 65 28 70 43 2c 20 70 49 6e 32 29 3b 0a 20 20  te(pC, pIn2);.  
2b8f0 7d 65 6c 73 65 7b 0a 20 20 20 20 78 2e 6e 4b 65  }else{.    x.nKe
2b900 79 20 3d 20 70 49 6e 32 2d 3e 6e 3b 0a 20 20 20  y = pIn2->n;.   
2b910 20 78 2e 70 4b 65 79 20 3d 20 70 49 6e 32 2d 3e   x.pKey = pIn2->
2b920 7a 3b 0a 20 20 20 20 78 2e 61 4d 65 6d 20 3d 20  z;.    x.aMem = 
2b930 61 4d 65 6d 20 2b 20 70 4f 70 2d 3e 70 33 3b 0a  aMem + pOp->p3;.
2b940 20 20 20 20 78 2e 6e 4d 65 6d 20 3d 20 28 75 31      x.nMem = (u1
2b950 36 29 70 4f 70 2d 3e 70 34 2e 69 3b 0a 20 20 20  6)pOp->p4.i;.   
2b960 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
2b970 65 65 49 6e 73 65 72 74 28 70 43 2d 3e 75 63 2e  eeInsert(pC->uc.
2b980 70 43 75 72 73 6f 72 2c 20 26 78 2c 0a 20 20 20  pCursor, &x,.   
2b990 20 20 20 20 20 20 28 70 4f 70 2d 3e 70 35 20 26        (pOp->p5 &
2b9a0 20 28 4f 50 46 4c 41 47 5f 41 50 50 45 4e 44 7c   (OPFLAG_APPEND|
2b9b0 4f 50 46 4c 41 47 5f 53 41 56 45 50 4f 53 49 54  OPFLAG_SAVEPOSIT
2b9c0 49 4f 4e 29 29 2c 20 0a 20 20 20 20 20 20 20 20  ION)), .        
2b9d0 28 28 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c  ((pOp->p5 & OPFL
2b9e0 41 47 5f 55 53 45 53 45 45 4b 52 45 53 55 4c 54  AG_USESEEKRESULT
2b9f0 29 20 3f 20 70 43 2d 3e 73 65 65 6b 52 65 73 75  ) ? pC->seekResu
2ba00 6c 74 20 3a 20 30 29 0a 20 20 20 20 20 20 20 20  lt : 0).        
2ba10 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  );.    assert( p
2ba20 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74  C->deferredMovet
2ba30 6f 3d 3d 30 20 29 3b 0a 20 20 20 20 70 43 2d 3e  o==0 );.    pC->
2ba40 63 61 63 68 65 53 74 61 74 75 73 20 3d 20 43 41  cacheStatus = CA
2ba50 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20 7d 0a 20  CHE_STALE;.  }. 
2ba60 20 69 66 28 20 72 63 29 20 67 6f 74 6f 20 61 62   if( rc) goto ab
2ba70 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
2ba80 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
2ba90 20 4f 70 63 6f 64 65 3a 20 49 64 78 44 65 6c 65   Opcode: IdxDele
2baa0 74 65 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a  te P1 P2 P3 * *.
2bab0 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79  ** Synopsis: key
2bac0 3d 72 5b 50 32 40 50 33 5d 0a 2a 2a 0a 2a 2a 20  =r[P2@P3].**.** 
2bad0 54 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 50  The content of P
2bae0 33 20 72 65 67 69 73 74 65 72 73 20 73 74 61 72  3 registers star
2baf0 74 69 6e 67 20 61 74 20 72 65 67 69 73 74 65 72  ting at register
2bb00 20 50 32 20 66 6f 72 6d 0a 2a 2a 20 61 6e 20 75   P2 form.** an u
2bb10 6e 70 61 63 6b 65 64 20 69 6e 64 65 78 20 6b 65  npacked index ke
2bb20 79 2e 20 54 68 69 73 20 6f 70 63 6f 64 65 20 72  y. This opcode r
2bb30 65 6d 6f 76 65 73 20 74 68 61 74 20 65 6e 74 72  emoves that entr
2bb40 79 20 66 72 6f 6d 20 74 68 65 20 0a 2a 2a 20 69  y from the .** i
2bb50 6e 64 65 78 20 6f 70 65 6e 65 64 20 62 79 20 63  ndex opened by c
2bb60 75 72 73 6f 72 20 50 31 2e 0a 2a 2f 0a 63 61 73  ursor P1..*/.cas
2bb70 65 20 4f 50 5f 49 64 78 44 65 6c 65 74 65 3a 20  e OP_IdxDelete: 
2bb80 7b 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a  {.  VdbeCursor *
2bb90 70 43 3b 0a 20 20 42 74 43 75 72 73 6f 72 20 2a  pC;.  BtCursor *
2bba0 70 43 72 73 72 3b 0a 20 20 69 6e 74 20 72 65 73  pCrsr;.  int res
2bbb0 3b 0a 20 20 55 6e 70 61 63 6b 65 64 52 65 63 6f  ;.  UnpackedReco
2bbc0 72 64 20 72 3b 0a 0a 20 20 61 73 73 65 72 74 28  rd r;..  assert(
2bbd0 20 70 4f 70 2d 3e 70 33 3e 30 20 29 3b 0a 20 20   pOp->p3>0 );.  
2bbe0 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e  assert( pOp->p2>
2bbf0 30 20 26 26 20 70 4f 70 2d 3e 70 32 2b 70 4f 70  0 && pOp->p2+pOp
2bc00 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31  ->p3<=(p->nMem+1
2bc10 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29 2b 31   - p->nCursor)+1
2bc20 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   );.  assert( pO
2bc30 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d  p->p1>=0 && pOp-
2bc40 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29  >p1<p->nCursor )
2bc50 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73  ;.  pC = p->apCs
2bc60 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  r[pOp->p1];.  as
2bc70 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20  sert( pC!=0 );. 
2bc80 20 61 73 73 65 72 74 28 20 70 43 2d 3e 65 43 75   assert( pC->eCu
2bc90 72 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f 42  rType==CURTYPE_B
2bca0 54 52 45 45 20 29 3b 0a 20 20 73 71 6c 69 74 65  TREE );.  sqlite
2bcb0 33 56 64 62 65 49 6e 63 72 57 72 69 74 65 43 6f  3VdbeIncrWriteCo
2bcc0 75 6e 74 65 72 28 70 2c 20 70 43 29 3b 0a 20 20  unter(p, pC);.  
2bcd0 70 43 72 73 72 20 3d 20 70 43 2d 3e 75 63 2e 70  pCrsr = pC->uc.p
2bce0 43 75 72 73 6f 72 3b 0a 20 20 61 73 73 65 72 74  Cursor;.  assert
2bcf0 28 20 70 43 72 73 72 21 3d 30 20 29 3b 0a 20 20  ( pCrsr!=0 );.  
2bd00 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 35 3d  assert( pOp->p5=
2bd10 3d 30 20 29 3b 0a 20 20 72 2e 70 4b 65 79 49 6e  =0 );.  r.pKeyIn
2bd20 66 6f 20 3d 20 70 43 2d 3e 70 4b 65 79 49 6e 66  fo = pC->pKeyInf
2bd30 6f 3b 0a 20 20 72 2e 6e 46 69 65 6c 64 20 3d 20  o;.  r.nField = 
2bd40 28 75 31 36 29 70 4f 70 2d 3e 70 33 3b 0a 20 20  (u16)pOp->p3;.  
2bd50 72 2e 64 65 66 61 75 6c 74 5f 72 63 20 3d 20 30  r.default_rc = 0
2bd60 3b 0a 20 20 72 2e 61 4d 65 6d 20 3d 20 26 61 4d  ;.  r.aMem = &aM
2bd70 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 72  em[pOp->p2];.  r
2bd80 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
2bd90 4d 6f 76 65 74 6f 55 6e 70 61 63 6b 65 64 28 70  MovetoUnpacked(p
2bda0 43 72 73 72 2c 20 26 72 2c 20 30 2c 20 30 2c 20  Crsr, &r, 0, 0, 
2bdb0 26 72 65 73 29 3b 0a 20 20 69 66 28 20 72 63 20  &res);.  if( rc 
2bdc0 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65  ) goto abort_due
2bdd0 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 69 66 28  _to_error;.  if(
2bde0 20 72 65 73 3d 3d 30 20 29 7b 0a 20 20 20 20 72   res==0 ){.    r
2bdf0 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
2be00 44 65 6c 65 74 65 28 70 43 72 73 72 2c 20 42 54  Delete(pCrsr, BT
2be10 52 45 45 5f 41 55 58 44 45 4c 45 54 45 29 3b 0a  REE_AUXDELETE);.
2be20 20 20 20 20 69 66 28 20 72 63 20 29 20 67 6f 74      if( rc ) got
2be30 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
2be40 72 72 6f 72 3b 0a 20 20 7d 0a 20 20 61 73 73 65  rror;.  }.  asse
2be50 72 74 28 20 70 43 2d 3e 64 65 66 65 72 72 65 64  rt( pC->deferred
2be60 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a 20 20 70  Moveto==0 );.  p
2be70 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d  C->cacheStatus =
2be80 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20   CACHE_STALE;.  
2be90 70 43 2d 3e 73 65 65 6b 52 65 73 75 6c 74 20 3d  pC->seekResult =
2bea0 20 30 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a   0;.  break;.}..
2beb0 2f 2a 20 4f 70 63 6f 64 65 3a 20 44 65 66 65 72  /* Opcode: Defer
2bec0 72 65 64 53 65 65 6b 20 50 31 20 2a 20 50 33 20  redSeek P1 * P3 
2bed0 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73  P4 *.** Synopsis
2bee0 3a 20 4d 6f 76 65 20 50 33 20 74 6f 20 50 31 2e  : Move P3 to P1.
2bef0 72 6f 77 69 64 20 69 66 20 6e 65 65 64 65 64 0a  rowid if needed.
2bf00 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 61 6e 20 6f  **.** P1 is an o
2bf10 70 65 6e 20 69 6e 64 65 78 20 63 75 72 73 6f 72  pen index cursor
2bf20 20 61 6e 64 20 50 33 20 69 73 20 61 20 63 75 72   and P3 is a cur
2bf30 73 6f 72 20 6f 6e 20 74 68 65 20 63 6f 72 72 65  sor on the corre
2bf40 73 70 6f 6e 64 69 6e 67 0a 2a 2a 20 74 61 62 6c  sponding.** tabl
2bf50 65 2e 20 20 54 68 69 73 20 6f 70 63 6f 64 65 20  e.  This opcode 
2bf60 64 6f 65 73 20 61 20 64 65 66 65 72 72 65 64 20  does a deferred 
2bf70 73 65 65 6b 20 6f 66 20 74 68 65 20 50 33 20 74  seek of the P3 t
2bf80 61 62 6c 65 20 63 75 72 73 6f 72 0a 2a 2a 20 74  able cursor.** t
2bf90 6f 20 74 68 65 20 72 6f 77 20 74 68 61 74 20 63  o the row that c
2bfa0 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f 20 74 68  orresponds to th
2bfb0 65 20 63 75 72 72 65 6e 74 20 72 6f 77 20 6f 66  e current row of
2bfc0 20 50 31 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20   P1..**.** This 
2bfd0 69 73 20 61 20 64 65 66 65 72 72 65 64 20 73 65  is a deferred se
2bfe0 65 6b 2e 20 20 4e 6f 74 68 69 6e 67 20 61 63 74  ek.  Nothing act
2bff0 75 61 6c 6c 79 20 68 61 70 70 65 6e 73 20 75 6e  ually happens un
2c000 74 69 6c 0a 2a 2a 20 74 68 65 20 63 75 72 73 6f  til.** the curso
2c010 72 20 69 73 20 75 73 65 64 20 74 6f 20 72 65 61  r is used to rea
2c020 64 20 61 20 72 65 63 6f 72 64 2e 20 20 54 68 61  d a record.  Tha
2c030 74 20 77 61 79 2c 20 69 66 20 6e 6f 20 72 65 61  t way, if no rea
2c040 64 73 0a 2a 2a 20 6f 63 63 75 72 2c 20 6e 6f 20  ds.** occur, no 
2c050 75 6e 6e 65 63 65 73 73 61 72 79 20 49 2f 4f 20  unnecessary I/O 
2c060 68 61 70 70 65 6e 73 2e 0a 2a 2a 0a 2a 2a 20 50  happens..**.** P
2c070 34 20 6d 61 79 20 62 65 20 61 6e 20 61 72 72 61  4 may be an arra
2c080 79 20 6f 66 20 69 6e 74 65 67 65 72 73 20 28 74  y of integers (t
2c090 79 70 65 20 50 34 5f 49 4e 54 41 52 52 41 59 29  ype P4_INTARRAY)
2c0a0 20 63 6f 6e 74 61 69 6e 69 6e 67 0a 2a 2a 20 6f   containing.** o
2c0b0 6e 65 20 65 6e 74 72 79 20 66 6f 72 20 65 61 63  ne entry for eac
2c0c0 68 20 63 6f 6c 75 6d 6e 20 69 6e 20 74 68 65 20  h column in the 
2c0d0 50 33 20 74 61 62 6c 65 2e 20 20 49 66 20 61 72  P3 table.  If ar
2c0e0 72 61 79 20 65 6e 74 72 79 20 61 28 69 29 0a 2a  ray entry a(i).*
2c0f0 2a 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74  * is non-zero, t
2c100 68 65 6e 20 72 65 61 64 69 6e 67 20 63 6f 6c 75  hen reading colu
2c110 6d 6e 20 61 28 69 29 2d 31 20 66 72 6f 6d 20 63  mn a(i)-1 from c
2c120 75 72 73 6f 72 20 50 33 20 69 73 20 0a 2a 2a 20  ursor P3 is .** 
2c130 65 71 75 69 76 61 6c 65 6e 74 20 74 6f 20 70 65  equivalent to pe
2c140 72 66 6f 72 6d 69 6e 67 20 74 68 65 20 64 65 66  rforming the def
2c150 65 72 72 65 64 20 73 65 65 6b 20 61 6e 64 20 74  erred seek and t
2c160 68 65 6e 20 72 65 61 64 69 6e 67 20 63 6f 6c 75  hen reading colu
2c170 6d 6e 20 69 20 0a 2a 2a 20 66 72 6f 6d 20 50 31  mn i .** from P1
2c180 2e 20 20 54 68 69 73 20 69 6e 66 6f 72 6d 61 74  .  This informat
2c190 69 6f 6e 20 69 73 20 73 74 6f 72 65 64 20 69 6e  ion is stored in
2c1a0 20 50 33 20 61 6e 64 20 75 73 65 64 20 74 6f 20   P3 and used to 
2c1b0 72 65 64 69 72 65 63 74 0a 2a 2a 20 72 65 61 64  redirect.** read
2c1c0 73 20 61 67 61 69 6e 73 74 20 50 33 20 6f 76 65  s against P3 ove
2c1d0 72 20 74 6f 20 50 31 2c 20 74 68 75 73 20 70 6f  r to P1, thus po
2c1e0 73 73 69 62 6c 79 20 61 76 6f 69 64 69 6e 67 20  ssibly avoiding 
2c1f0 74 68 65 20 6e 65 65 64 20 74 6f 0a 2a 2a 20 73  the need to.** s
2c200 65 65 6b 20 61 6e 64 20 72 65 61 64 20 63 75 72  eek and read cur
2c210 73 6f 72 20 50 33 2e 0a 2a 2f 0a 2f 2a 20 4f 70  sor P3..*/./* Op
2c220 63 6f 64 65 3a 20 49 64 78 52 6f 77 69 64 20 50  code: IdxRowid P
2c230 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79  1 P2 * * *.** Sy
2c240 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 72 6f  nopsis: r[P2]=ro
2c250 77 69 64 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20  wid.**.** Write 
2c260 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 32  into register P2
2c270 20 61 6e 20 69 6e 74 65 67 65 72 20 77 68 69 63   an integer whic
2c280 68 20 69 73 20 74 68 65 20 6c 61 73 74 20 65 6e  h is the last en
2c290 74 72 79 20 69 6e 20 74 68 65 20 72 65 63 6f 72  try in the recor
2c2a0 64 20 61 74 0a 2a 2a 20 74 68 65 20 65 6e 64 20  d at.** the end 
2c2b0 6f 66 20 74 68 65 20 69 6e 64 65 78 20 6b 65 79  of the index key
2c2c0 20 70 6f 69 6e 74 65 64 20 74 6f 20 62 79 20 63   pointed to by c
2c2d0 75 72 73 6f 72 20 50 31 2e 20 20 54 68 69 73 20  ursor P1.  This 
2c2e0 69 6e 74 65 67 65 72 20 73 68 6f 75 6c 64 20 62  integer should b
2c2f0 65 0a 2a 2a 20 74 68 65 20 72 6f 77 69 64 20 6f  e.** the rowid o
2c300 66 20 74 68 65 20 74 61 62 6c 65 20 65 6e 74 72  f the table entr
2c310 79 20 74 6f 20 77 68 69 63 68 20 74 68 69 73 20  y to which this 
2c320 69 6e 64 65 78 20 65 6e 74 72 79 20 70 6f 69 6e  index entry poin
2c330 74 73 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c  ts..**.** See al
2c340 73 6f 3a 20 52 6f 77 69 64 2c 20 4d 61 6b 65 52  so: Rowid, MakeR
2c350 65 63 6f 72 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f  ecord..*/.case O
2c360 50 5f 44 65 66 65 72 72 65 64 53 65 65 6b 3a 0a  P_DeferredSeek:.
2c370 63 61 73 65 20 4f 50 5f 49 64 78 52 6f 77 69 64  case OP_IdxRowid
2c380 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  : {           /*
2c390 20 6f 75 74 32 20 2a 2f 0a 20 20 56 64 62 65 43   out2 */.  VdbeC
2c3a0 75 72 73 6f 72 20 2a 70 43 3b 20 20 20 20 20 20  ursor *pC;      
2c3b0 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 50 31         /* The P1
2c3c0 20 69 6e 64 65 78 20 63 75 72 73 6f 72 20 2a 2f   index cursor */
2c3d0 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70  .  VdbeCursor *p
2c3e0 54 61 62 43 75 72 3b 20 20 20 20 20 20 20 20 2f  TabCur;        /
2c3f0 2a 20 54 68 65 20 50 32 20 74 61 62 6c 65 20 63  * The P2 table c
2c400 75 72 73 6f 72 20 28 4f 50 5f 44 65 66 65 72 72  ursor (OP_Deferr
2c410 65 64 53 65 65 6b 20 6f 6e 6c 79 29 20 2a 2f 0a  edSeek only) */.
2c420 20 20 69 36 34 20 72 6f 77 69 64 3b 20 20 20 20    i64 rowid;    
2c430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
2c440 20 52 6f 77 69 64 20 74 68 61 74 20 50 31 20 63   Rowid that P1 c
2c450 75 72 72 65 6e 74 20 70 6f 69 6e 74 73 20 74 6f  urrent points to
2c460 20 2a 2f 0a 0a 20 20 61 73 73 65 72 74 28 20 70   */..  assert( p
2c470 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70  Op->p1>=0 && pOp
2c480 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20  ->p1<p->nCursor 
2c490 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43  );.  pC = p->apC
2c4a0 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  sr[pOp->p1];.  a
2c4b0 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a  ssert( pC!=0 );.
2c4c0 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 65 43    assert( pC->eC
2c4d0 75 72 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f  urType==CURTYPE_
2c4e0 42 54 52 45 45 20 29 3b 0a 20 20 61 73 73 65 72  BTREE );.  asser
2c4f0 74 28 20 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f  t( pC->uc.pCurso
2c500 72 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  r!=0 );.  assert
2c510 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 3d 3d 30  ( pC->isTable==0
2c520 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43   );.  assert( pC
2c530 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f  ->deferredMoveto
2c540 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  ==0 );.  assert(
2c550 20 21 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 7c 7c   !pC->nullRow ||
2c560 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50   pOp->opcode==OP
2c570 5f 49 64 78 52 6f 77 69 64 20 29 3b 0a 0a 20 20  _IdxRowid );..  
2c580 2f 2a 20 54 68 65 20 49 64 78 52 6f 77 69 64 20  /* The IdxRowid 
2c590 61 6e 64 20 53 65 65 6b 20 6f 70 63 6f 64 65 73  and Seek opcodes
2c5a0 20 61 72 65 20 63 6f 6d 62 69 6e 65 64 20 62 65   are combined be
2c5b0 63 61 75 73 65 20 6f 66 20 74 68 65 20 63 6f 6d  cause of the com
2c5c0 6d 6f 6e 61 6c 69 74 79 0a 20 20 2a 2a 20 6f 66  monality.  ** of
2c5d0 20 73 71 6c 69 74 65 33 56 64 62 65 43 75 72 73   sqlite3VdbeCurs
2c5e0 6f 72 52 65 73 74 6f 72 65 28 29 20 61 6e 64 20  orRestore() and 
2c5f0 73 71 6c 69 74 65 33 56 64 62 65 49 64 78 52 6f  sqlite3VdbeIdxRo
2c600 77 69 64 28 29 2e 20 2a 2f 0a 20 20 72 63 20 3d  wid(). */.  rc =
2c610 20 73 71 6c 69 74 65 33 56 64 62 65 43 75 72 73   sqlite3VdbeCurs
2c620 6f 72 52 65 73 74 6f 72 65 28 70 43 29 3b 0a 0a  orRestore(pC);..
2c630 20 20 2f 2a 20 73 71 6c 69 74 65 33 56 62 65 43    /* sqlite3VbeC
2c640 75 72 73 6f 72 52 65 73 74 6f 72 65 28 29 20 63  ursorRestore() c
2c650 61 6e 20 6f 6e 6c 79 20 66 61 69 6c 20 69 66 20  an only fail if 
2c660 74 68 65 20 72 65 63 6f 72 64 20 68 61 73 20 62  the record has b
2c670 65 65 6e 20 64 65 6c 65 74 65 64 0a 20 20 2a 2a  een deleted.  **
2c680 20 6f 75 74 20 66 72 6f 6d 20 75 6e 64 65 72 20   out from under 
2c690 74 68 65 20 63 75 72 73 6f 72 2e 20 20 54 68 61  the cursor.  Tha
2c6a0 74 20 77 69 6c 6c 20 6e 65 76 65 72 20 68 61 70  t will never hap
2c6b0 70 65 6e 73 20 66 6f 72 20 61 6e 20 49 64 78 52  pens for an IdxR
2c6c0 6f 77 69 64 0a 20 20 2a 2a 20 6f 72 20 53 65 65  owid.  ** or See
2c6d0 6b 20 6f 70 63 6f 64 65 20 2a 2f 0a 20 20 69 66  k opcode */.  if
2c6e0 28 20 4e 45 56 45 52 28 72 63 21 3d 53 51 4c 49  ( NEVER(rc!=SQLI
2c6f0 54 45 5f 4f 4b 29 20 29 20 67 6f 74 6f 20 61 62  TE_OK) ) goto ab
2c700 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
2c710 3b 0a 0a 20 20 69 66 28 20 21 70 43 2d 3e 6e 75  ;..  if( !pC->nu
2c720 6c 6c 52 6f 77 20 29 7b 0a 20 20 20 20 72 6f 77  llRow ){.    row
2c730 69 64 20 3d 20 30 3b 20 20 2f 2a 20 4e 6f 74 20  id = 0;  /* Not 
2c740 6e 65 65 64 65 64 2e 20 20 4f 6e 6c 79 20 75 73  needed.  Only us
2c750 65 64 20 74 6f 20 73 69 6c 65 6e 63 65 20 61 20  ed to silence a 
2c760 77 61 72 6e 69 6e 67 2e 20 2a 2f 0a 20 20 20 20  warning. */.    
2c770 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  rc = sqlite3Vdbe
2c780 49 64 78 52 6f 77 69 64 28 64 62 2c 20 70 43 2d  IdxRowid(db, pC-
2c790 3e 75 63 2e 70 43 75 72 73 6f 72 2c 20 26 72 6f  >uc.pCursor, &ro
2c7a0 77 69 64 29 3b 0a 20 20 20 20 69 66 28 20 72 63  wid);.    if( rc
2c7b0 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20  !=SQLITE_OK ){. 
2c7c0 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f       goto abort_
2c7d0 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
2c7e0 20 20 7d 0a 20 20 20 20 69 66 28 20 70 4f 70 2d    }.    if( pOp-
2c7f0 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 44 65 66 65  >opcode==OP_Defe
2c800 72 72 65 64 53 65 65 6b 20 29 7b 0a 20 20 20 20  rredSeek ){.    
2c810 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
2c820 33 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 33 3c  3>=0 && pOp->p3<
2c830 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20  p->nCursor );.  
2c840 20 20 20 20 70 54 61 62 43 75 72 20 3d 20 70 2d      pTabCur = p-
2c850 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 33 5d 3b  >apCsr[pOp->p3];
2c860 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70  .      assert( p
2c870 54 61 62 43 75 72 21 3d 30 20 29 3b 0a 20 20 20  TabCur!=0 );.   
2c880 20 20 20 61 73 73 65 72 74 28 20 70 54 61 62 43     assert( pTabC
2c890 75 72 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43 55  ur->eCurType==CU
2c8a0 52 54 59 50 45 5f 42 54 52 45 45 20 29 3b 0a 20  RTYPE_BTREE );. 
2c8b0 20 20 20 20 20 61 73 73 65 72 74 28 20 70 54 61       assert( pTa
2c8c0 62 43 75 72 2d 3e 75 63 2e 70 43 75 72 73 6f 72  bCur->uc.pCursor
2c8d0 21 3d 30 20 29 3b 0a 20 20 20 20 20 20 61 73 73  !=0 );.      ass
2c8e0 65 72 74 28 20 70 54 61 62 43 75 72 2d 3e 69 73  ert( pTabCur->is
2c8f0 54 61 62 6c 65 20 29 3b 0a 20 20 20 20 20 20 70  Table );.      p
2c900 54 61 62 43 75 72 2d 3e 6e 75 6c 6c 52 6f 77 20  TabCur->nullRow 
2c910 3d 20 30 3b 0a 20 20 20 20 20 20 70 54 61 62 43  = 0;.      pTabC
2c920 75 72 2d 3e 6d 6f 76 65 74 6f 54 61 72 67 65 74  ur->movetoTarget
2c930 20 3d 20 72 6f 77 69 64 3b 0a 20 20 20 20 20 20   = rowid;.      
2c940 70 54 61 62 43 75 72 2d 3e 64 65 66 65 72 72 65  pTabCur->deferre
2c950 64 4d 6f 76 65 74 6f 20 3d 20 31 3b 0a 20 20 20  dMoveto = 1;.   
2c960 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e     assert( pOp->
2c970 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54 41 52  p4type==P4_INTAR
2c980 52 41 59 20 7c 7c 20 70 4f 70 2d 3e 70 34 2e 61  RAY || pOp->p4.a
2c990 69 3d 3d 30 20 29 3b 0a 20 20 20 20 20 20 70 54  i==0 );.      pT
2c9a0 61 62 43 75 72 2d 3e 61 41 6c 74 4d 61 70 20 3d  abCur->aAltMap =
2c9b0 20 70 4f 70 2d 3e 70 34 2e 61 69 3b 0a 20 20 20   pOp->p4.ai;.   
2c9c0 20 20 20 70 54 61 62 43 75 72 2d 3e 70 41 6c 74     pTabCur->pAlt
2c9d0 43 75 72 73 6f 72 20 3d 20 70 43 3b 0a 20 20 20  Cursor = pC;.   
2c9e0 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 70 4f   }else{.      pO
2c9f0 75 74 20 3d 20 6f 75 74 32 50 72 65 72 65 6c 65  ut = out2Prerele
2ca00 61 73 65 28 70 2c 20 70 4f 70 29 3b 0a 20 20 20  ase(p, pOp);.   
2ca10 20 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 72     pOut->u.i = r
2ca20 6f 77 69 64 3b 0a 20 20 20 20 7d 0a 20 20 7d 65  owid;.    }.  }e
2ca30 6c 73 65 7b 0a 20 20 20 20 61 73 73 65 72 74 28  lse{.    assert(
2ca40 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50   pOp->opcode==OP
2ca50 5f 49 64 78 52 6f 77 69 64 20 29 3b 0a 20 20 20  _IdxRowid );.   
2ca60 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53   sqlite3VdbeMemS
2ca70 65 74 4e 75 6c 6c 28 26 61 4d 65 6d 5b 70 4f 70  etNull(&aMem[pOp
2ca80 2d 3e 70 32 5d 29 3b 0a 20 20 7d 0a 20 20 62 72  ->p2]);.  }.  br
2ca90 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
2caa0 65 3a 20 49 64 78 47 45 20 50 31 20 50 32 20 50  e: IdxGE P1 P2 P
2cab0 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70  3 P4 P5.** Synop
2cac0 73 69 73 3a 20 6b 65 79 3d 72 5b 50 33 40 50 34  sis: key=r[P3@P4
2cad0 5d 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 34 20 72  ].**.** The P4 r
2cae0 65 67 69 73 74 65 72 20 76 61 6c 75 65 73 20 62  egister values b
2caf0 65 67 69 6e 6e 69 6e 67 20 77 69 74 68 20 50 33  eginning with P3
2cb00 20 66 6f 72 6d 20 61 6e 20 75 6e 70 61 63 6b 65   form an unpacke
2cb10 64 20 69 6e 64 65 78 20 0a 2a 2a 20 6b 65 79 20  d index .** key 
2cb20 74 68 61 74 20 6f 6d 69 74 73 20 74 68 65 20 50  that omits the P
2cb30 52 49 4d 41 52 59 20 4b 45 59 2e 20 20 43 6f 6d  RIMARY KEY.  Com
2cb40 70 61 72 65 20 74 68 69 73 20 6b 65 79 20 76 61  pare this key va
2cb50 6c 75 65 20 61 67 61 69 6e 73 74 20 74 68 65 20  lue against the 
2cb60 69 6e 64 65 78 20 0a 2a 2a 20 74 68 61 74 20 50  index .** that P
2cb70 31 20 69 73 20 63 75 72 72 65 6e 74 6c 79 20 70  1 is currently p
2cb80 6f 69 6e 74 69 6e 67 20 74 6f 2c 20 69 67 6e 6f  ointing to, igno
2cb90 72 69 6e 67 20 74 68 65 20 50 52 49 4d 41 52 59  ring the PRIMARY
2cba0 20 4b 45 59 20 6f 72 20 52 4f 57 49 44 20 0a 2a   KEY or ROWID .*
2cbb0 2a 20 66 69 65 6c 64 73 20 61 74 20 74 68 65 20  * fields at the 
2cbc0 65 6e 64 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68  end..**.** If th
2cbd0 65 20 50 31 20 69 6e 64 65 78 20 65 6e 74 72 79  e P1 index entry
2cbe0 20 69 73 20 67 72 65 61 74 65 72 20 74 68 61 6e   is greater than
2cbf0 20 6f 72 20 65 71 75 61 6c 20 74 6f 20 74 68 65   or equal to the
2cc00 20 6b 65 79 20 76 61 6c 75 65 0a 2a 2a 20 74 68   key value.** th
2cc10 65 6e 20 6a 75 6d 70 20 74 6f 20 50 32 2e 20 20  en jump to P2.  
2cc20 4f 74 68 65 72 77 69 73 65 20 66 61 6c 6c 20 74  Otherwise fall t
2cc30 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6e 65  hrough to the ne
2cc40 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a  xt instruction..
2cc50 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 64  */./* Opcode: Id
2cc60 78 47 54 20 50 31 20 50 32 20 50 33 20 50 34 20  xGT P1 P2 P3 P4 
2cc70 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20  P5.** Synopsis: 
2cc80 6b 65 79 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a  key=r[P3@P4].**.
2cc90 2a 2a 20 54 68 65 20 50 34 20 72 65 67 69 73 74  ** The P4 regist
2cca0 65 72 20 76 61 6c 75 65 73 20 62 65 67 69 6e 6e  er values beginn
2ccb0 69 6e 67 20 77 69 74 68 20 50 33 20 66 6f 72 6d  ing with P3 form
2ccc0 20 61 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e 64   an unpacked ind
2ccd0 65 78 20 0a 2a 2a 20 6b 65 79 20 74 68 61 74 20  ex .** key that 
2cce0 6f 6d 69 74 73 20 74 68 65 20 50 52 49 4d 41 52  omits the PRIMAR
2ccf0 59 20 4b 45 59 2e 20 20 43 6f 6d 70 61 72 65 20  Y KEY.  Compare 
2cd00 74 68 69 73 20 6b 65 79 20 76 61 6c 75 65 20 61  this key value a
2cd10 67 61 69 6e 73 74 20 74 68 65 20 69 6e 64 65 78  gainst the index
2cd20 20 0a 2a 2a 20 74 68 61 74 20 50 31 20 69 73 20   .** that P1 is 
2cd30 63 75 72 72 65 6e 74 6c 79 20 70 6f 69 6e 74 69  currently pointi
2cd40 6e 67 20 74 6f 2c 20 69 67 6e 6f 72 69 6e 67 20  ng to, ignoring 
2cd50 74 68 65 20 50 52 49 4d 41 52 59 20 4b 45 59 20  the PRIMARY KEY 
2cd60 6f 72 20 52 4f 57 49 44 20 0a 2a 2a 20 66 69 65  or ROWID .** fie
2cd70 6c 64 73 20 61 74 20 74 68 65 20 65 6e 64 2e 0a  lds at the end..
2cd80 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 50 31 20  **.** If the P1 
2cd90 69 6e 64 65 78 20 65 6e 74 72 79 20 69 73 20 67  index entry is g
2cda0 72 65 61 74 65 72 20 74 68 61 6e 20 74 68 65 20  reater than the 
2cdb0 6b 65 79 20 76 61 6c 75 65 0a 2a 2a 20 74 68 65  key value.** the
2cdc0 6e 20 6a 75 6d 70 20 74 6f 20 50 32 2e 20 20 4f  n jump to P2.  O
2cdd0 74 68 65 72 77 69 73 65 20 66 61 6c 6c 20 74 68  therwise fall th
2cde0 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6e 65 78  rough to the nex
2cdf0 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a  t instruction..*
2ce00 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 64 78  /./* Opcode: Idx
2ce10 4c 54 20 50 31 20 50 32 20 50 33 20 50 34 20 50  LT P1 P2 P3 P4 P
2ce20 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b  5.** Synopsis: k
2ce30 65 79 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a  ey=r[P3@P4].**.*
2ce40 2a 20 54 68 65 20 50 34 20 72 65 67 69 73 74 65  * The P4 registe
2ce50 72 20 76 61 6c 75 65 73 20 62 65 67 69 6e 6e 69  r values beginni
2ce60 6e 67 20 77 69 74 68 20 50 33 20 66 6f 72 6d 20  ng with P3 form 
2ce70 61 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e 64 65  an unpacked inde
2ce80 78 20 0a 2a 2a 20 6b 65 79 20 74 68 61 74 20 6f  x .** key that o
2ce90 6d 69 74 73 20 74 68 65 20 50 52 49 4d 41 52 59  mits the PRIMARY
2cea0 20 4b 45 59 20 6f 72 20 52 4f 57 49 44 2e 20 20   KEY or ROWID.  
2ceb0 43 6f 6d 70 61 72 65 20 74 68 69 73 20 6b 65 79  Compare this key
2cec0 20 76 61 6c 75 65 20 61 67 61 69 6e 73 74 0a 2a   value against.*
2ced0 2a 20 74 68 65 20 69 6e 64 65 78 20 74 68 61 74  * the index that
2cee0 20 50 31 20 69 73 20 63 75 72 72 65 6e 74 6c 79   P1 is currently
2cef0 20 70 6f 69 6e 74 69 6e 67 20 74 6f 2c 20 69 67   pointing to, ig
2cf00 6e 6f 72 69 6e 67 20 74 68 65 20 50 52 49 4d 41  noring the PRIMA
2cf10 52 59 20 4b 45 59 20 6f 72 0a 2a 2a 20 52 4f 57  RY KEY or.** ROW
2cf20 49 44 20 6f 6e 20 74 68 65 20 50 31 20 69 6e 64  ID on the P1 ind
2cf30 65 78 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65  ex..**.** If the
2cf40 20 50 31 20 69 6e 64 65 78 20 65 6e 74 72 79 20   P1 index entry 
2cf50 69 73 20 6c 65 73 73 20 74 68 61 6e 20 74 68 65  is less than the
2cf60 20 6b 65 79 20 76 61 6c 75 65 20 74 68 65 6e 20   key value then 
2cf70 6a 75 6d 70 20 74 6f 20 50 32 2e 0a 2a 2a 20 4f  jump to P2..** O
2cf80 74 68 65 72 77 69 73 65 20 66 61 6c 6c 20 74 68  therwise fall th
2cf90 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6e 65 78  rough to the nex
2cfa0 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a  t instruction..*
2cfb0 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 64 78  /./* Opcode: Idx
2cfc0 4c 45 20 50 31 20 50 32 20 50 33 20 50 34 20 50  LE P1 P2 P3 P4 P
2cfd0 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b  5.** Synopsis: k
2cfe0 65 79 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a  ey=r[P3@P4].**.*
2cff0 2a 20 54 68 65 20 50 34 20 72 65 67 69 73 74 65  * The P4 registe
2d000 72 20 76 61 6c 75 65 73 20 62 65 67 69 6e 6e 69  r values beginni
2d010 6e 67 20 77 69 74 68 20 50 33 20 66 6f 72 6d 20  ng with P3 form 
2d020 61 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e 64 65  an unpacked inde
2d030 78 20 0a 2a 2a 20 6b 65 79 20 74 68 61 74 20 6f  x .** key that o
2d040 6d 69 74 73 20 74 68 65 20 50 52 49 4d 41 52 59  mits the PRIMARY
2d050 20 4b 45 59 20 6f 72 20 52 4f 57 49 44 2e 20 20   KEY or ROWID.  
2d060 43 6f 6d 70 61 72 65 20 74 68 69 73 20 6b 65 79  Compare this key
2d070 20 76 61 6c 75 65 20 61 67 61 69 6e 73 74 0a 2a   value against.*
2d080 2a 20 74 68 65 20 69 6e 64 65 78 20 74 68 61 74  * the index that
2d090 20 50 31 20 69 73 20 63 75 72 72 65 6e 74 6c 79   P1 is currently
2d0a0 20 70 6f 69 6e 74 69 6e 67 20 74 6f 2c 20 69 67   pointing to, ig
2d0b0 6e 6f 72 69 6e 67 20 74 68 65 20 50 52 49 4d 41  noring the PRIMA
2d0c0 52 59 20 4b 45 59 20 6f 72 0a 2a 2a 20 52 4f 57  RY KEY or.** ROW
2d0d0 49 44 20 6f 6e 20 74 68 65 20 50 31 20 69 6e 64  ID on the P1 ind
2d0e0 65 78 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65  ex..**.** If the
2d0f0 20 50 31 20 69 6e 64 65 78 20 65 6e 74 72 79 20   P1 index entry 
2d100 69 73 20 6c 65 73 73 20 74 68 61 6e 20 6f 72 20  is less than or 
2d110 65 71 75 61 6c 20 74 6f 20 74 68 65 20 6b 65 79  equal to the key
2d120 20 76 61 6c 75 65 20 74 68 65 6e 20 6a 75 6d 70   value then jump
2d130 0a 2a 2a 20 74 6f 20 50 32 2e 20 4f 74 68 65 72  .** to P2. Other
2d140 77 69 73 65 20 66 61 6c 6c 20 74 68 72 6f 75 67  wise fall throug
2d150 68 20 74 6f 20 74 68 65 20 6e 65 78 74 20 69 6e  h to the next in
2d160 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61  struction..*/.ca
2d170 73 65 20 4f 50 5f 49 64 78 4c 45 3a 20 20 20 20  se OP_IdxLE:    
2d180 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f        /* jump */
2d190 0a 63 61 73 65 20 4f 50 5f 49 64 78 47 54 3a 20  .case OP_IdxGT: 
2d1a0 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70           /* jump
2d1b0 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 64 78 4c   */.case OP_IdxL
2d1c0 54 3a 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a  T:          /* j
2d1d0 75 6d 70 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 49  ump */.case OP_I
2d1e0 64 78 47 45 3a 20 20 7b 20 20 20 20 20 20 20 2f  dxGE:  {       /
2d1f0 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 56 64 62 65  * jump */.  Vdbe
2d200 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 69 6e  Cursor *pC;.  in
2d210 74 20 72 65 73 3b 0a 20 20 55 6e 70 61 63 6b 65  t res;.  Unpacke
2d220 64 52 65 63 6f 72 64 20 72 3b 0a 0a 20 20 61 73  dRecord r;..  as
2d230 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30  sert( pOp->p1>=0
2d240 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e   && pOp->p1<p->n
2d250 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d  Cursor );.  pC =
2d260 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70   p->apCsr[pOp->p
2d270 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43  1];.  assert( pC
2d280 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  !=0 );.  assert(
2d290 20 70 43 2d 3e 69 73 4f 72 64 65 72 65 64 20 29   pC->isOrdered )
2d2a0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  ;.  assert( pC->
2d2b0 65 43 75 72 54 79 70 65 3d 3d 43 55 52 54 59 50  eCurType==CURTYP
2d2c0 45 5f 42 54 52 45 45 20 29 3b 0a 20 20 61 73 73  E_BTREE );.  ass
2d2d0 65 72 74 28 20 70 43 2d 3e 75 63 2e 70 43 75 72  ert( pC->uc.pCur
2d2e0 73 6f 72 21 3d 30 29 3b 0a 20 20 61 73 73 65 72  sor!=0);.  asser
2d2f0 74 28 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d  t( pC->deferredM
2d300 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a 20 20 61 73  oveto==0 );.  as
2d310 73 65 72 74 28 20 70 4f 70 2d 3e 70 35 3d 3d 30  sert( pOp->p5==0
2d320 20 7c 7c 20 70 4f 70 2d 3e 70 35 3d 3d 31 20 29   || pOp->p5==1 )
2d330 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
2d340 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54 33  >p4type==P4_INT3
2d350 32 20 29 3b 0a 20 20 72 2e 70 4b 65 79 49 6e 66  2 );.  r.pKeyInf
2d360 6f 20 3d 20 70 43 2d 3e 70 4b 65 79 49 6e 66 6f  o = pC->pKeyInfo
2d370 3b 0a 20 20 72 2e 6e 46 69 65 6c 64 20 3d 20 28  ;.  r.nField = (
2d380 75 31 36 29 70 4f 70 2d 3e 70 34 2e 69 3b 0a 20  u16)pOp->p4.i;. 
2d390 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65   if( pOp->opcode
2d3a0 3c 4f 50 5f 49 64 78 4c 54 20 29 7b 0a 20 20 20  <OP_IdxLT ){.   
2d3b0 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70   assert( pOp->op
2d3c0 63 6f 64 65 3d 3d 4f 50 5f 49 64 78 4c 45 20 7c  code==OP_IdxLE |
2d3d0 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f  | pOp->opcode==O
2d3e0 50 5f 49 64 78 47 54 20 29 3b 0a 20 20 20 20 72  P_IdxGT );.    r
2d3f0 2e 64 65 66 61 75 6c 74 5f 72 63 20 3d 20 2d 31  .default_rc = -1
2d400 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61  ;.  }else{.    a
2d410 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f  ssert( pOp->opco
2d420 64 65 3d 3d 4f 50 5f 49 64 78 47 45 20 7c 7c 20  de==OP_IdxGE || 
2d430 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  pOp->opcode==OP_
2d440 49 64 78 4c 54 20 29 3b 0a 20 20 20 20 72 2e 64  IdxLT );.    r.d
2d450 65 66 61 75 6c 74 5f 72 63 20 3d 20 30 3b 0a 20  efault_rc = 0;. 
2d460 20 7d 0a 20 20 72 2e 61 4d 65 6d 20 3d 20 26 61   }.  r.aMem = &a
2d470 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 23 69  Mem[pOp->p3];.#i
2d480 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55  fdef SQLITE_DEBU
2d490 47 0a 20 20 7b 20 69 6e 74 20 69 3b 20 66 6f 72  G.  { int i; for
2d4a0 28 69 3d 30 3b 20 69 3c 72 2e 6e 46 69 65 6c 64  (i=0; i<r.nField
2d4b0 3b 20 69 2b 2b 29 20 61 73 73 65 72 74 28 20 6d  ; i++) assert( m
2d4c0 65 6d 49 73 56 61 6c 69 64 28 26 72 2e 61 4d 65  emIsValid(&r.aMe
2d4d0 6d 5b 69 5d 29 20 29 3b 20 7d 0a 23 65 6e 64 69  m[i]) ); }.#endi
2d4e0 66 0a 20 20 72 65 73 20 3d 20 30 3b 20 20 2f 2a  f.  res = 0;  /*
2d4f0 20 4e 6f 74 20 6e 65 65 64 65 64 2e 20 20 4f 6e   Not needed.  On
2d500 6c 79 20 75 73 65 64 20 74 6f 20 73 69 6c 65 6e  ly used to silen
2d510 63 65 20 61 20 77 61 72 6e 69 6e 67 2e 20 2a 2f  ce a warning. */
2d520 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56  .  rc = sqlite3V
2d530 64 62 65 49 64 78 4b 65 79 43 6f 6d 70 61 72 65  dbeIdxKeyCompare
2d540 28 64 62 2c 20 70 43 2c 20 26 72 2c 20 26 72 65  (db, pC, &r, &re
2d550 73 29 3b 0a 20 20 61 73 73 65 72 74 28 20 28 4f  s);.  assert( (O
2d560 50 5f 49 64 78 4c 45 26 31 29 3d 3d 28 4f 50 5f  P_IdxLE&1)==(OP_
2d570 49 64 78 4c 54 26 31 29 20 26 26 20 28 4f 50 5f  IdxLT&1) && (OP_
2d580 49 64 78 47 45 26 31 29 3d 3d 28 4f 50 5f 49 64  IdxGE&1)==(OP_Id
2d590 78 47 54 26 31 29 20 29 3b 0a 20 20 69 66 28 20  xGT&1) );.  if( 
2d5a0 28 70 4f 70 2d 3e 6f 70 63 6f 64 65 26 31 29 3d  (pOp->opcode&1)=
2d5b0 3d 28 4f 50 5f 49 64 78 4c 54 26 31 29 20 29 7b  =(OP_IdxLT&1) ){
2d5c0 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70  .    assert( pOp
2d5d0 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 64 78  ->opcode==OP_Idx
2d5e0 4c 45 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64  LE || pOp->opcod
2d5f0 65 3d 3d 4f 50 5f 49 64 78 4c 54 20 29 3b 0a 20  e==OP_IdxLT );. 
2d600 20 20 20 72 65 73 20 3d 20 2d 72 65 73 3b 0a 20     res = -res;. 
2d610 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73 73 65   }else{.    asse
2d620 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d  rt( pOp->opcode=
2d630 3d 4f 50 5f 49 64 78 47 45 20 7c 7c 20 70 4f 70  =OP_IdxGE || pOp
2d640 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 64 78  ->opcode==OP_Idx
2d650 47 54 20 29 3b 0a 20 20 20 20 72 65 73 2b 2b 3b  GT );.    res++;
2d660 0a 20 20 7d 0a 20 20 56 64 62 65 42 72 61 6e 63  .  }.  VdbeBranc
2d670 68 54 61 6b 65 6e 28 72 65 73 3e 30 2c 32 29 3b  hTaken(res>0,2);
2d680 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f  .  if( rc ) goto
2d690 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
2d6a0 72 6f 72 3b 0a 20 20 69 66 28 20 72 65 73 3e 30  ror;.  if( res>0
2d6b0 20 29 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f   ) goto jump_to_
2d6c0 70 32 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  p2;.  break;.}..
2d6d0 2f 2a 20 4f 70 63 6f 64 65 3a 20 44 65 73 74 72  /* Opcode: Destr
2d6e0 6f 79 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a  oy P1 P2 P3 * *.
2d6f0 2a 2a 0a 2a 2a 20 44 65 6c 65 74 65 20 61 6e 20  **.** Delete an 
2d700 65 6e 74 69 72 65 20 64 61 74 61 62 61 73 65 20  entire database 
2d710 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 77  table or index w
2d720 68 6f 73 65 20 72 6f 6f 74 20 70 61 67 65 20 69  hose root page i
2d730 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 0a 2a  n the database.*
2d740 2a 20 66 69 6c 65 20 69 73 20 67 69 76 65 6e 20  * file is given 
2d750 62 79 20 50 31 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  by P1..**.** The
2d760 20 74 61 62 6c 65 20 62 65 69 6e 67 20 64 65 73   table being des
2d770 74 72 6f 79 65 64 20 69 73 20 69 6e 20 74 68 65  troyed is in the
2d780 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 66   main database f
2d790 69 6c 65 20 69 66 20 50 33 3d 3d 30 2e 20 20 49  ile if P3==0.  I
2d7a0 66 0a 2a 2a 20 50 33 3d 3d 31 20 74 68 65 6e 20  f.** P3==1 then 
2d7b0 74 68 65 20 74 61 62 6c 65 20 74 6f 20 62 65 20  the table to be 
2d7c0 63 6c 65 61 72 20 69 73 20 69 6e 20 74 68 65 20  clear is in the 
2d7d0 61 75 78 69 6c 69 61 72 79 20 64 61 74 61 62 61  auxiliary databa
2d7e0 73 65 20 66 69 6c 65 0a 2a 2a 20 74 68 61 74 20  se file.** that 
2d7f0 69 73 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65  is used to store
2d800 20 74 61 62 6c 65 73 20 63 72 65 61 74 65 20 75   tables create u
2d810 73 69 6e 67 20 43 52 45 41 54 45 20 54 45 4d 50  sing CREATE TEMP
2d820 4f 52 41 52 59 20 54 41 42 4c 45 2e 0a 2a 2a 0a  ORARY TABLE..**.
2d830 2a 2a 20 49 66 20 41 55 54 4f 56 41 43 55 55 4d  ** If AUTOVACUUM
2d840 20 69 73 20 65 6e 61 62 6c 65 64 20 74 68 65 6e   is enabled then
2d850 20 69 74 20 69 73 20 70 6f 73 73 69 62 6c 65 20   it is possible 
2d860 74 68 61 74 20 61 6e 6f 74 68 65 72 20 72 6f 6f  that another roo
2d870 74 20 70 61 67 65 0a 2a 2a 20 6d 69 67 68 74 20  t page.** might 
2d880 62 65 20 6d 6f 76 65 64 20 69 6e 74 6f 20 74 68  be moved into th
2d890 65 20 6e 65 77 6c 79 20 64 65 6c 65 74 65 64 20  e newly deleted 
2d8a0 72 6f 6f 74 20 70 61 67 65 20 69 6e 20 6f 72 64  root page in ord
2d8b0 65 72 20 74 6f 20 6b 65 65 70 20 61 6c 6c 0a 2a  er to keep all.*
2d8c0 2a 20 72 6f 6f 74 20 70 61 67 65 73 20 63 6f 6e  * root pages con
2d8d0 74 69 67 75 6f 75 73 20 61 74 20 74 68 65 20 62  tiguous at the b
2d8e0 65 67 69 6e 6e 69 6e 67 20 6f 66 20 74 68 65 20  eginning of the 
2d8f0 64 61 74 61 62 61 73 65 2e 20 20 54 68 65 20 66  database.  The f
2d900 6f 72 6d 65 72 0a 2a 2a 20 76 61 6c 75 65 20 6f  ormer.** value o
2d910 66 20 74 68 65 20 72 6f 6f 74 20 70 61 67 65 20  f the root page 
2d920 74 68 61 74 20 6d 6f 76 65 64 20 2d 20 69 74 73  that moved - its
2d930 20 76 61 6c 75 65 20 62 65 66 6f 72 65 20 74 68   value before th
2d940 65 20 6d 6f 76 65 20 6f 63 63 75 72 72 65 64 20  e move occurred 
2d950 2d 0a 2a 2a 20 69 73 20 73 74 6f 72 65 64 20 69  -.** is stored i
2d960 6e 20 72 65 67 69 73 74 65 72 20 50 32 2e 20 49  n register P2. I
2d970 66 20 6e 6f 20 70 61 67 65 20 6d 6f 76 65 6d 65  f no page moveme
2d980 6e 74 20 77 61 73 20 72 65 71 75 69 72 65 64 20  nt was required 
2d990 28 62 65 63 61 75 73 65 20 74 68 65 0a 2a 2a 20  (because the.** 
2d9a0 74 61 62 6c 65 20 62 65 69 6e 67 20 64 72 6f 70  table being drop
2d9b0 70 65 64 20 77 61 73 20 61 6c 72 65 61 64 79 20  ped was already 
2d9c0 74 68 65 20 6c 61 73 74 20 6f 6e 65 20 69 6e 20  the last one in 
2d9d0 74 68 65 20 64 61 74 61 62 61 73 65 29 20 74 68  the database) th
2d9e0 65 6e 20 61 20 0a 2a 2a 20 7a 65 72 6f 20 69 73  en a .** zero is
2d9f0 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73   stored in regis
2da00 74 65 72 20 50 32 2e 20 20 49 66 20 41 55 54 4f  ter P2.  If AUTO
2da10 56 41 43 55 55 4d 20 69 73 20 64 69 73 61 62 6c  VACUUM is disabl
2da20 65 64 20 74 68 65 6e 20 61 20 7a 65 72 6f 20 0a  ed then a zero .
2da30 2a 2a 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20  ** is stored in 
2da40 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a  register P2..**.
2da50 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 74  ** This opcode t
2da60 68 72 6f 77 73 20 61 6e 20 65 72 72 6f 72 20 69  hrows an error i
2da70 66 20 74 68 65 72 65 20 61 72 65 20 61 6e 79 20  f there are any 
2da80 61 63 74 69 76 65 20 72 65 61 64 65 72 20 56 4d  active reader VM
2da90 73 20 77 68 65 6e 0a 2a 2a 20 69 74 20 69 73 20  s when.** it is 
2daa0 69 6e 76 6f 6b 65 64 2e 20 54 68 69 73 20 69 73  invoked. This is
2dab0 20 64 6f 6e 65 20 74 6f 20 61 76 6f 69 64 20 74   done to avoid t
2dac0 68 65 20 64 69 66 66 69 63 75 6c 74 79 20 61 73  he difficulty as
2dad0 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 0a 2a  sociated with .*
2dae0 2a 20 75 70 64 61 74 69 6e 67 20 65 78 69 73 74  * updating exist
2daf0 69 6e 67 20 63 75 72 73 6f 72 73 20 77 68 65 6e  ing cursors when
2db00 20 61 20 72 6f 6f 74 20 70 61 67 65 20 69 73 20   a root page is 
2db10 6d 6f 76 65 64 20 69 6e 20 61 6e 20 41 55 54 4f  moved in an AUTO
2db20 56 41 43 55 55 4d 20 0a 2a 2a 20 64 61 74 61 62  VACUUM .** datab
2db30 61 73 65 2e 20 54 68 69 73 20 65 72 72 6f 72 20  ase. This error 
2db40 69 73 20 74 68 72 6f 77 6e 20 65 76 65 6e 20 69  is thrown even i
2db50 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20 69  f the database i
2db60 73 20 6e 6f 74 20 61 6e 20 41 55 54 4f 56 41 43  s not an AUTOVAC
2db70 55 55 4d 20 0a 2a 2a 20 64 62 20 69 6e 20 6f 72  UUM .** db in or
2db80 64 65 72 20 74 6f 20 61 76 6f 69 64 20 69 6e 74  der to avoid int
2db90 72 6f 64 75 63 69 6e 67 20 61 6e 20 69 6e 63 6f  roducing an inco
2dba0 6d 70 61 74 69 62 69 6c 69 74 79 20 62 65 74 77  mpatibility betw
2dbb0 65 65 6e 20 61 75 74 6f 76 61 63 75 75 6d 20 0a  een autovacuum .
2dbc0 2a 2a 20 61 6e 64 20 6e 6f 6e 2d 61 75 74 6f 76  ** and non-autov
2dbd0 61 63 75 75 6d 20 6d 6f 64 65 73 2e 0a 2a 2a 0a  acuum modes..**.
2dbe0 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 43 6c 65  ** See also: Cle
2dbf0 61 72 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 44 65  ar.*/.case OP_De
2dc00 73 74 72 6f 79 3a 20 7b 20 20 20 20 20 2f 2a 20  stroy: {     /* 
2dc10 6f 75 74 32 20 2a 2f 0a 20 20 69 6e 74 20 69 4d  out2 */.  int iM
2dc20 6f 76 65 64 3b 0a 20 20 69 6e 74 20 69 44 62 3b  oved;.  int iDb;
2dc30 0a 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 49  ..  sqlite3VdbeI
2dc40 6e 63 72 57 72 69 74 65 43 6f 75 6e 74 65 72 28  ncrWriteCounter(
2dc50 70 2c 20 30 29 3b 0a 20 20 61 73 73 65 72 74 28  p, 0);.  assert(
2dc60 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30 20   p->readOnly==0 
2dc70 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  );.  assert( pOp
2dc80 2d 3e 70 31 3e 31 20 29 3b 0a 20 20 70 4f 75 74  ->p1>1 );.  pOut
2dc90 20 3d 20 6f 75 74 32 50 72 65 72 65 6c 65 61 73   = out2Prereleas
2dca0 65 28 70 2c 20 70 4f 70 29 3b 0a 20 20 70 4f 75  e(p, pOp);.  pOu
2dcb0 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 4e  t->flags = MEM_N
2dcc0 75 6c 6c 3b 0a 20 20 69 66 28 20 64 62 2d 3e 6e  ull;.  if( db->n
2dcd0 56 64 62 65 52 65 61 64 20 3e 20 64 62 2d 3e 6e  VdbeRead > db->n
2dce0 56 44 65 73 74 72 6f 79 2b 31 20 29 7b 0a 20 20  VDestroy+1 ){.  
2dcf0 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4c 4f    rc = SQLITE_LO
2dd00 43 4b 45 44 3b 0a 20 20 20 20 70 2d 3e 65 72 72  CKED;.    p->err
2dd10 6f 72 41 63 74 69 6f 6e 20 3d 20 4f 45 5f 41 62  orAction = OE_Ab
2dd20 6f 72 74 3b 0a 20 20 20 20 67 6f 74 6f 20 61 62  ort;.    goto ab
2dd30 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
2dd40 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 69  ;.  }else{.    i
2dd50 44 62 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20  Db = pOp->p3;.  
2dd60 20 20 61 73 73 65 72 74 28 20 44 62 4d 61 73 6b    assert( DbMask
2dd70 54 65 73 74 28 70 2d 3e 62 74 72 65 65 4d 61 73  Test(p->btreeMas
2dd80 6b 2c 20 69 44 62 29 20 29 3b 0a 20 20 20 20 69  k, iDb) );.    i
2dd90 4d 6f 76 65 64 20 3d 20 30 3b 20 20 2f 2a 20 4e  Moved = 0;  /* N
2dda0 6f 74 20 6e 65 65 64 65 64 2e 20 20 4f 6e 6c 79  ot needed.  Only
2ddb0 20 74 6f 20 73 69 6c 65 6e 63 65 20 61 20 77 61   to silence a wa
2ddc0 72 6e 69 6e 67 2e 20 2a 2f 0a 20 20 20 20 72 63  rning. */.    rc
2ddd0 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 44   = sqlite3BtreeD
2dde0 72 6f 70 54 61 62 6c 65 28 64 62 2d 3e 61 44 62  ropTable(db->aDb
2ddf0 5b 69 44 62 5d 2e 70 42 74 2c 20 70 4f 70 2d 3e  [iDb].pBt, pOp->
2de00 70 31 2c 20 26 69 4d 6f 76 65 64 29 3b 0a 20 20  p1, &iMoved);.  
2de10 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20    pOut->flags = 
2de20 4d 45 4d 5f 49 6e 74 3b 0a 20 20 20 20 70 4f 75  MEM_Int;.    pOu
2de30 74 2d 3e 75 2e 69 20 3d 20 69 4d 6f 76 65 64 3b  t->u.i = iMoved;
2de40 0a 20 20 20 20 69 66 28 20 72 63 20 29 20 67 6f  .    if( rc ) go
2de50 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
2de60 65 72 72 6f 72 3b 0a 23 69 66 6e 64 65 66 20 53  error;.#ifndef S
2de70 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 56  QLITE_OMIT_AUTOV
2de80 41 43 55 55 4d 0a 20 20 20 20 69 66 28 20 69 4d  ACUUM.    if( iM
2de90 6f 76 65 64 21 3d 30 20 29 7b 0a 20 20 20 20 20  oved!=0 ){.     
2dea0 20 73 71 6c 69 74 65 33 52 6f 6f 74 50 61 67 65   sqlite3RootPage
2deb0 4d 6f 76 65 64 28 64 62 2c 20 69 44 62 2c 20 69  Moved(db, iDb, i
2dec0 4d 6f 76 65 64 2c 20 70 4f 70 2d 3e 70 31 29 3b  Moved, pOp->p1);
2ded0 0a 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20 4f 50  .      /* All OP
2dee0 5f 44 65 73 74 72 6f 79 20 6f 70 65 72 61 74 69  _Destroy operati
2def0 6f 6e 73 20 6f 63 63 75 72 20 6f 6e 20 74 68 65  ons occur on the
2df00 20 73 61 6d 65 20 62 74 72 65 65 20 2a 2f 0a 20   same btree */. 
2df10 20 20 20 20 20 61 73 73 65 72 74 28 20 72 65 73       assert( res
2df20 65 74 53 63 68 65 6d 61 4f 6e 46 61 75 6c 74 3d  etSchemaOnFault=
2df30 3d 30 20 7c 7c 20 72 65 73 65 74 53 63 68 65 6d  =0 || resetSchem
2df40 61 4f 6e 46 61 75 6c 74 3d 3d 69 44 62 2b 31 20  aOnFault==iDb+1 
2df50 29 3b 0a 20 20 20 20 20 20 72 65 73 65 74 53 63  );.      resetSc
2df60 68 65 6d 61 4f 6e 46 61 75 6c 74 20 3d 20 69 44  hemaOnFault = iD
2df70 62 2b 31 3b 0a 20 20 20 20 7d 0a 23 65 6e 64 69  b+1;.    }.#endi
2df80 66 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  f.  }.  break;.}
2df90 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6c 65  ../* Opcode: Cle
2dfa0 61 72 20 50 31 20 50 32 20 50 33 0a 2a 2a 0a 2a  ar P1 P2 P3.**.*
2dfb0 2a 20 44 65 6c 65 74 65 20 61 6c 6c 20 63 6f 6e  * Delete all con
2dfc0 74 65 6e 74 73 20 6f 66 20 74 68 65 20 64 61 74  tents of the dat
2dfd0 61 62 61 73 65 20 74 61 62 6c 65 20 6f 72 20 69  abase table or i
2dfe0 6e 64 65 78 20 77 68 6f 73 65 20 72 6f 6f 74 20  ndex whose root 
2dff0 70 61 67 65 0a 2a 2a 20 69 6e 20 74 68 65 20 64  page.** in the d
2e000 61 74 61 62 61 73 65 20 66 69 6c 65 20 69 73 20  atabase file is 
2e010 67 69 76 65 6e 20 62 79 20 50 31 2e 20 20 42 75  given by P1.  Bu
2e020 74 2c 20 75 6e 6c 69 6b 65 20 44 65 73 74 72 6f  t, unlike Destro
2e030 79 2c 20 64 6f 20 6e 6f 74 0a 2a 2a 20 72 65 6d  y, do not.** rem
2e040 6f 76 65 20 74 68 65 20 74 61 62 6c 65 20 6f 72  ove the table or
2e050 20 69 6e 64 65 78 20 66 72 6f 6d 20 74 68 65 20   index from the 
2e060 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e 0a 2a  database file..*
2e070 2a 0a 2a 2a 20 54 68 65 20 74 61 62 6c 65 20 62  *.** The table b
2e080 65 69 6e 67 20 63 6c 65 61 72 20 69 73 20 69 6e  eing clear is in
2e090 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61   the main databa
2e0a0 73 65 20 66 69 6c 65 20 69 66 20 50 32 3d 3d 30  se file if P2==0
2e0b0 2e 20 20 49 66 0a 2a 2a 20 50 32 3d 3d 31 20 74  .  If.** P2==1 t
2e0c0 68 65 6e 20 74 68 65 20 74 61 62 6c 65 20 74 6f  hen the table to
2e0d0 20 62 65 20 63 6c 65 61 72 20 69 73 20 69 6e 20   be clear is in 
2e0e0 74 68 65 20 61 75 78 69 6c 69 61 72 79 20 64 61  the auxiliary da
2e0f0 74 61 62 61 73 65 20 66 69 6c 65 0a 2a 2a 20 74  tabase file.** t
2e100 68 61 74 20 69 73 20 75 73 65 64 20 74 6f 20 73  hat is used to s
2e110 74 6f 72 65 20 74 61 62 6c 65 73 20 63 72 65 61  tore tables crea
2e120 74 65 20 75 73 69 6e 67 20 43 52 45 41 54 45 20  te using CREATE 
2e130 54 45 4d 50 4f 52 41 52 59 20 54 41 42 4c 45 2e  TEMPORARY TABLE.
2e140 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 50 33  .**.** If the P3
2e150 20 76 61 6c 75 65 20 69 73 20 6e 6f 6e 2d 7a 65   value is non-ze
2e160 72 6f 2c 20 74 68 65 6e 20 74 68 65 20 74 61 62  ro, then the tab
2e170 6c 65 20 72 65 66 65 72 72 65 64 20 74 6f 20 6d  le referred to m
2e180 75 73 74 20 62 65 20 61 6e 0a 2a 2a 20 69 6e 74  ust be an.** int
2e190 6b 65 79 20 74 61 62 6c 65 20 28 61 6e 20 53 51  key table (an SQ
2e1a0 4c 20 74 61 62 6c 65 2c 20 6e 6f 74 20 61 6e 20  L table, not an 
2e1b0 69 6e 64 65 78 29 2e 20 49 6e 20 74 68 69 73 20  index). In this 
2e1c0 63 61 73 65 20 74 68 65 20 72 6f 77 20 63 68 61  case the row cha
2e1d0 6e 67 65 20 0a 2a 2a 20 63 6f 75 6e 74 20 69 73  nge .** count is
2e1e0 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 62 79 20   incremented by 
2e1f0 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f  the number of ro
2e200 77 73 20 69 6e 20 74 68 65 20 74 61 62 6c 65 20  ws in the table 
2e210 62 65 69 6e 67 20 63 6c 65 61 72 65 64 2e 20 0a  being cleared. .
2e220 2a 2a 20 49 66 20 50 33 20 69 73 20 67 72 65 61  ** If P3 is grea
2e230 74 65 72 20 74 68 61 6e 20 7a 65 72 6f 2c 20 74  ter than zero, t
2e240 68 65 6e 20 74 68 65 20 76 61 6c 75 65 20 73 74  hen the value st
2e250 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74 65 72  ored in register
2e260 20 50 33 20 69 73 0a 2a 2a 20 61 6c 73 6f 20 69   P3 is.** also i
2e270 6e 63 72 65 6d 65 6e 74 65 64 20 62 79 20 74 68  ncremented by th
2e280 65 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73  e number of rows
2e290 20 69 6e 20 74 68 65 20 74 61 62 6c 65 20 62 65   in the table be
2e2a0 69 6e 67 20 63 6c 65 61 72 65 64 2e 0a 2a 2a 0a  ing cleared..**.
2e2b0 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 44 65 73  ** See also: Des
2e2c0 74 72 6f 79 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  troy.*/.case OP_
2e2d0 43 6c 65 61 72 3a 20 7b 0a 20 20 69 6e 74 20 6e  Clear: {.  int n
2e2e0 43 68 61 6e 67 65 3b 0a 20 0a 20 20 73 71 6c 69  Change;. .  sqli
2e2f0 74 65 33 56 64 62 65 49 6e 63 72 57 72 69 74 65  te3VdbeIncrWrite
2e300 43 6f 75 6e 74 65 72 28 70 2c 20 30 29 3b 0a 20  Counter(p, 0);. 
2e310 20 6e 43 68 61 6e 67 65 20 3d 20 30 3b 0a 20 20   nChange = 0;.  
2e320 61 73 73 65 72 74 28 20 70 2d 3e 72 65 61 64 4f  assert( p->readO
2e330 6e 6c 79 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65  nly==0 );.  asse
2e340 72 74 28 20 44 62 4d 61 73 6b 54 65 73 74 28 70  rt( DbMaskTest(p
2e350 2d 3e 62 74 72 65 65 4d 61 73 6b 2c 20 70 4f 70  ->btreeMask, pOp
2e360 2d 3e 70 32 29 20 29 3b 0a 20 20 72 63 20 3d 20  ->p2) );.  rc = 
2e370 73 71 6c 69 74 65 33 42 74 72 65 65 43 6c 65 61  sqlite3BtreeClea
2e380 72 54 61 62 6c 65 28 0a 20 20 20 20 20 20 64 62  rTable(.      db
2e390 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 32 5d 2e 70  ->aDb[pOp->p2].p
2e3a0 42 74 2c 20 70 4f 70 2d 3e 70 31 2c 20 28 70 4f  Bt, pOp->p1, (pO
2e3b0 70 2d 3e 70 33 20 3f 20 26 6e 43 68 61 6e 67 65  p->p3 ? &nChange
2e3c0 20 3a 20 30 29 0a 20 20 29 3b 0a 20 20 69 66 28   : 0).  );.  if(
2e3d0 20 70 4f 70 2d 3e 70 33 20 29 7b 0a 20 20 20 20   pOp->p3 ){.    
2e3e0 70 2d 3e 6e 43 68 61 6e 67 65 20 2b 3d 20 6e 43  p->nChange += nC
2e3f0 68 61 6e 67 65 3b 0a 20 20 20 20 69 66 28 20 70  hange;.    if( p
2e400 4f 70 2d 3e 70 33 3e 30 20 29 7b 0a 20 20 20 20  Op->p3>0 ){.    
2e410 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56    assert( memIsV
2e420 61 6c 69 64 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e  alid(&aMem[pOp->
2e430 70 33 5d 29 20 29 3b 0a 20 20 20 20 20 20 6d 65  p3]) );.      me
2e440 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70  mAboutToChange(p
2e450 2c 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  , &aMem[pOp->p3]
2e460 29 3b 0a 20 20 20 20 20 20 61 4d 65 6d 5b 70 4f  );.      aMem[pO
2e470 70 2d 3e 70 33 5d 2e 75 2e 69 20 2b 3d 20 6e 43  p->p3].u.i += nC
2e480 68 61 6e 67 65 3b 0a 20 20 20 20 7d 0a 20 20 7d  hange;.    }.  }
2e490 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f  .  if( rc ) goto
2e4a0 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
2e4b0 72 6f 72 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  ror;.  break;.}.
2e4c0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65 73 65  ./* Opcode: Rese
2e4d0 74 53 6f 72 74 65 72 20 50 31 20 2a 20 2a 20 2a  tSorter P1 * * *
2e4e0 20 2a 0a 2a 2a 0a 2a 2a 20 44 65 6c 65 74 65 20   *.**.** Delete 
2e4f0 61 6c 6c 20 63 6f 6e 74 65 6e 74 73 20 66 72 6f  all contents fro
2e500 6d 20 74 68 65 20 65 70 68 65 6d 65 72 61 6c 20  m the ephemeral 
2e510 74 61 62 6c 65 20 6f 72 20 73 6f 72 74 65 72 0a  table or sorter.
2e520 2a 2a 20 74 68 61 74 20 69 73 20 6f 70 65 6e 20  ** that is open 
2e530 6f 6e 20 63 75 72 73 6f 72 20 50 31 2e 0a 2a 2a  on cursor P1..**
2e540 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20  .** This opcode 
2e550 6f 6e 6c 79 20 77 6f 72 6b 73 20 66 6f 72 20 63  only works for c
2e560 75 72 73 6f 72 73 20 75 73 65 64 20 66 6f 72 20  ursors used for 
2e570 73 6f 72 74 69 6e 67 20 61 6e 64 0a 2a 2a 20 6f  sorting and.** o
2e580 70 65 6e 65 64 20 77 69 74 68 20 4f 50 5f 4f 70  pened with OP_Op
2e590 65 6e 45 70 68 65 6d 65 72 61 6c 20 6f 72 20 4f  enEphemeral or O
2e5a0 50 5f 53 6f 72 74 65 72 4f 70 65 6e 2e 0a 2a 2f  P_SorterOpen..*/
2e5b0 0a 63 61 73 65 20 4f 50 5f 52 65 73 65 74 53 6f  .case OP_ResetSo
2e5c0 72 74 65 72 3a 20 7b 0a 20 20 56 64 62 65 43 75  rter: {.  VdbeCu
2e5d0 72 73 6f 72 20 2a 70 43 3b 0a 20 0a 20 20 61 73  rsor *pC;. .  as
2e5e0 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30  sert( pOp->p1>=0
2e5f0 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e   && pOp->p1<p->n
2e600 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d  Cursor );.  pC =
2e610 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70   p->apCsr[pOp->p
2e620 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43  1];.  assert( pC
2e630 21 3d 30 20 29 3b 0a 20 20 69 66 28 20 69 73 53  !=0 );.  if( isS
2e640 6f 72 74 65 72 28 70 43 29 20 29 7b 0a 20 20 20  orter(pC) ){.   
2e650 20 73 71 6c 69 74 65 33 56 64 62 65 53 6f 72 74   sqlite3VdbeSort
2e660 65 72 52 65 73 65 74 28 64 62 2c 20 70 43 2d 3e  erReset(db, pC->
2e670 75 63 2e 70 53 6f 72 74 65 72 29 3b 0a 20 20 7d  uc.pSorter);.  }
2e680 65 6c 73 65 7b 0a 20 20 20 20 61 73 73 65 72 74  else{.    assert
2e690 28 20 70 43 2d 3e 65 43 75 72 54 79 70 65 3d 3d  ( pC->eCurType==
2e6a0 43 55 52 54 59 50 45 5f 42 54 52 45 45 20 29 3b  CURTYPE_BTREE );
2e6b0 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 43 2d  .    assert( pC-
2e6c0 3e 69 73 45 70 68 65 6d 65 72 61 6c 20 29 3b 0a  >isEphemeral );.
2e6d0 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
2e6e0 42 74 72 65 65 43 6c 65 61 72 54 61 62 6c 65 4f  BtreeClearTableO
2e6f0 66 43 75 72 73 6f 72 28 70 43 2d 3e 75 63 2e 70  fCursor(pC->uc.p
2e700 43 75 72 73 6f 72 29 3b 0a 20 20 20 20 69 66 28  Cursor);.    if(
2e710 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74   rc ) goto abort
2e720 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20  _due_to_error;. 
2e730 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f   }.  break;.}../
2e740 2a 20 4f 70 63 6f 64 65 3a 20 43 72 65 61 74 65  * Opcode: Create
2e750 42 74 72 65 65 20 50 31 20 50 32 20 50 33 20 2a  Btree P1 P2 P3 *
2e760 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
2e770 72 5b 50 32 5d 3d 72 6f 6f 74 20 69 44 62 3d 50  r[P2]=root iDb=P
2e780 31 20 66 6c 61 67 73 3d 50 33 0a 2a 2a 0a 2a 2a  1 flags=P3.**.**
2e790 20 41 6c 6c 6f 63 61 74 65 20 61 20 6e 65 77 20   Allocate a new 
2e7a0 62 2d 74 72 65 65 20 69 6e 20 74 68 65 20 6d 61  b-tree in the ma
2e7b0 69 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  in database file
2e7c0 20 69 66 20 50 31 3d 3d 30 20 6f 72 20 69 6e 20   if P1==0 or in 
2e7d0 74 68 65 0a 2a 2a 20 54 45 4d 50 20 64 61 74 61  the.** TEMP data
2e7e0 62 61 73 65 20 66 69 6c 65 20 69 66 20 50 31 3d  base file if P1=
2e7f0 3d 31 20 6f 72 20 69 6e 20 61 6e 20 61 74 74 61  =1 or in an atta
2e800 63 68 65 64 20 64 61 74 61 62 61 73 65 20 69 66  ched database if
2e810 0a 2a 2a 20 50 31 3e 31 2e 20 20 54 68 65 20 50  .** P1>1.  The P
2e820 33 20 61 72 67 75 6d 65 6e 74 20 6d 75 73 74 20  3 argument must 
2e830 62 65 20 31 20 28 42 54 52 45 45 5f 49 4e 54 4b  be 1 (BTREE_INTK
2e840 45 59 29 20 66 6f 72 20 61 20 72 6f 77 69 64 20  EY) for a rowid 
2e850 74 61 62 6c 65 0a 2a 2a 20 69 74 20 6d 75 73 74  table.** it must
2e860 20 62 65 20 32 20 28 42 54 52 45 45 5f 42 4c 4f   be 2 (BTREE_BLO
2e870 42 4b 45 59 29 20 66 6f 72 20 61 6e 20 69 6e 64  BKEY) for an ind
2e880 65 78 20 6f 72 20 57 49 54 48 4f 55 54 20 52 4f  ex or WITHOUT RO
2e890 57 49 44 20 74 61 62 6c 65 2e 0a 2a 2a 20 54 68  WID table..** Th
2e8a0 65 20 72 6f 6f 74 20 70 61 67 65 20 6e 75 6d 62  e root page numb
2e8b0 65 72 20 6f 66 20 74 68 65 20 6e 65 77 20 62 2d  er of the new b-
2e8c0 74 72 65 65 20 69 73 20 73 74 6f 72 65 64 20 69  tree is stored i
2e8d0 6e 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a  n register P2..*
2e8e0 2f 0a 63 61 73 65 20 4f 50 5f 43 72 65 61 74 65  /.case OP_Create
2e8f0 42 74 72 65 65 3a 20 7b 20 20 20 20 20 20 20 20  Btree: {        
2e900 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20 20 69    /* out2 */.  i
2e910 6e 74 20 70 67 6e 6f 3b 0a 20 20 44 62 20 2a 70  nt pgno;.  Db *p
2e920 44 62 3b 0a 0a 20 20 73 71 6c 69 74 65 33 56 64  Db;..  sqlite3Vd
2e930 62 65 49 6e 63 72 57 72 69 74 65 43 6f 75 6e 74  beIncrWriteCount
2e940 65 72 28 70 2c 20 30 29 3b 0a 20 20 70 4f 75 74  er(p, 0);.  pOut
2e950 20 3d 20 6f 75 74 32 50 72 65 72 65 6c 65 61 73   = out2Prereleas
2e960 65 28 70 2c 20 70 4f 70 29 3b 0a 20 20 70 67 6e  e(p, pOp);.  pgn
2e970 6f 20 3d 20 30 3b 0a 20 20 61 73 73 65 72 74 28  o = 0;.  assert(
2e980 20 70 4f 70 2d 3e 70 33 3d 3d 42 54 52 45 45 5f   pOp->p3==BTREE_
2e990 49 4e 54 4b 45 59 20 7c 7c 20 70 4f 70 2d 3e 70  INTKEY || pOp->p
2e9a0 33 3d 3d 42 54 52 45 45 5f 42 4c 4f 42 4b 45 59  3==BTREE_BLOBKEY
2e9b0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   );.  assert( pO
2e9c0 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d  p->p1>=0 && pOp-
2e9d0 3e 70 31 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20  >p1<db->nDb );. 
2e9e0 20 61 73 73 65 72 74 28 20 44 62 4d 61 73 6b 54   assert( DbMaskT
2e9f0 65 73 74 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b  est(p->btreeMask
2ea00 2c 20 70 4f 70 2d 3e 70 31 29 20 29 3b 0a 20 20  , pOp->p1) );.  
2ea10 61 73 73 65 72 74 28 20 70 2d 3e 72 65 61 64 4f  assert( p->readO
2ea20 6e 6c 79 3d 3d 30 20 29 3b 0a 20 20 70 44 62 20  nly==0 );.  pDb 
2ea30 3d 20 26 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e  = &db->aDb[pOp->
2ea40 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p1];.  assert( p
2ea50 44 62 2d 3e 70 42 74 21 3d 30 20 29 3b 0a 20 20  Db->pBt!=0 );.  
2ea60 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
2ea70 65 43 72 65 61 74 65 54 61 62 6c 65 28 70 44 62  eCreateTable(pDb
2ea80 2d 3e 70 42 74 2c 20 26 70 67 6e 6f 2c 20 70 4f  ->pBt, &pgno, pO
2ea90 70 2d 3e 70 33 29 3b 0a 20 20 69 66 28 20 72 63  p->p3);.  if( rc
2eaa0 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75   ) goto abort_du
2eab0 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 70 4f  e_to_error;.  pO
2eac0 75 74 2d 3e 75 2e 69 20 3d 20 70 67 6e 6f 3b 0a  ut->u.i = pgno;.
2ead0 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
2eae0 70 63 6f 64 65 3a 20 53 71 6c 45 78 65 63 20 2a  pcode: SqlExec *
2eaf0 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20   * * P4 *.**.** 
2eb00 52 75 6e 20 74 68 65 20 53 51 4c 20 73 74 61 74  Run the SQL stat
2eb10 65 6d 65 6e 74 20 6f 72 20 73 74 61 74 65 6d 65  ement or stateme
2eb20 6e 74 73 20 73 70 65 63 69 66 69 65 64 20 69 6e  nts specified in
2eb30 20 74 68 65 20 50 34 20 73 74 72 69 6e 67 2e 0a   the P4 string..
2eb40 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 71 6c 45 78  */.case OP_SqlEx
2eb50 65 63 3a 20 7b 0a 20 20 73 71 6c 69 74 65 33 56  ec: {.  sqlite3V
2eb60 64 62 65 49 6e 63 72 57 72 69 74 65 43 6f 75 6e  dbeIncrWriteCoun
2eb70 74 65 72 28 70 2c 20 30 29 3b 0a 20 20 64 62 2d  ter(p, 0);.  db-
2eb80 3e 6e 53 71 6c 45 78 65 63 2b 2b 3b 0a 20 20 72  >nSqlExec++;.  r
2eb90 63 20 3d 20 73 71 6c 69 74 65 33 5f 65 78 65 63  c = sqlite3_exec
2eba0 28 64 62 2c 20 70 4f 70 2d 3e 70 34 2e 7a 2c 20  (db, pOp->p4.z, 
2ebb0 30 2c 20 30 2c 20 30 29 3b 0a 20 20 64 62 2d 3e  0, 0, 0);.  db->
2ebc0 6e 53 71 6c 45 78 65 63 2d 2d 3b 0a 20 20 69 66  nSqlExec--;.  if
2ebd0 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72  ( rc ) goto abor
2ebe0 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
2ebf0 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
2ec00 70 63 6f 64 65 3a 20 50 61 72 73 65 53 63 68 65  pcode: ParseSche
2ec10 6d 61 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a  ma P1 * * P4 *.*
2ec20 2a 0a 2a 2a 20 52 65 61 64 20 61 6e 64 20 70 61  *.** Read and pa
2ec30 72 73 65 20 61 6c 6c 20 65 6e 74 72 69 65 73 20  rse all entries 
2ec40 66 72 6f 6d 20 74 68 65 20 53 51 4c 49 54 45 5f  from the SQLITE_
2ec50 4d 41 53 54 45 52 20 74 61 62 6c 65 20 6f 66 20  MASTER table of 
2ec60 64 61 74 61 62 61 73 65 20 50 31 0a 2a 2a 20 74  database P1.** t
2ec70 68 61 74 20 6d 61 74 63 68 20 74 68 65 20 57 48  hat match the WH
2ec80 45 52 45 20 63 6c 61 75 73 65 20 50 34 2e 20 0a  ERE clause P4. .
2ec90 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64  **.** This opcod
2eca0 65 20 69 6e 76 6f 6b 65 73 20 74 68 65 20 70 61  e invokes the pa
2ecb0 72 73 65 72 20 74 6f 20 63 72 65 61 74 65 20 61  rser to create a
2ecc0 20 6e 65 77 20 76 69 72 74 75 61 6c 20 6d 61 63   new virtual mac
2ecd0 68 69 6e 65 2c 0a 2a 2a 20 74 68 65 6e 20 72 75  hine,.** then ru
2ece0 6e 73 20 74 68 65 20 6e 65 77 20 76 69 72 74 75  ns the new virtu
2ecf0 61 6c 20 6d 61 63 68 69 6e 65 2e 20 20 49 74 20  al machine.  It 
2ed00 69 73 20 74 68 75 73 20 61 20 72 65 2d 65 6e 74  is thus a re-ent
2ed10 72 61 6e 74 20 6f 70 63 6f 64 65 2e 0a 2a 2f 0a  rant opcode..*/.
2ed20 63 61 73 65 20 4f 50 5f 50 61 72 73 65 53 63 68  case OP_ParseSch
2ed30 65 6d 61 3a 20 7b 0a 20 20 69 6e 74 20 69 44 62  ema: {.  int iDb
2ed40 3b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  ;.  const char *
2ed50 7a 4d 61 73 74 65 72 3b 0a 20 20 63 68 61 72 20  zMaster;.  char 
2ed60 2a 7a 53 71 6c 3b 0a 20 20 49 6e 69 74 44 61 74  *zSql;.  InitDat
2ed70 61 20 69 6e 69 74 44 61 74 61 3b 0a 0a 20 20 2f  a initData;..  /
2ed80 2a 20 41 6e 79 20 70 72 65 70 61 72 65 64 20 73  * Any prepared s
2ed90 74 61 74 65 6d 65 6e 74 20 74 68 61 74 20 69 6e  tatement that in
2eda0 76 6f 6b 65 73 20 74 68 69 73 20 6f 70 63 6f 64  vokes this opcod
2edb0 65 20 77 69 6c 6c 20 68 6f 6c 64 20 6d 75 74 65  e will hold mute
2edc0 78 65 73 0a 20 20 2a 2a 20 6f 6e 20 65 76 65 72  xes.  ** on ever
2edd0 79 20 62 74 72 65 65 2e 20 20 54 68 69 73 20 69  y btree.  This i
2ede0 73 20 61 20 70 72 65 72 65 71 75 69 73 69 74 65  s a prerequisite
2edf0 20 66 6f 72 20 69 6e 76 6f 6b 69 6e 67 20 0a 20   for invoking . 
2ee00 20 2a 2a 20 73 71 6c 69 74 65 33 49 6e 69 74 43   ** sqlite3InitC
2ee10 61 6c 6c 62 61 63 6b 28 29 2e 0a 20 20 2a 2f 0a  allback()..  */.
2ee20 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45  #ifdef SQLITE_DE
2ee30 42 55 47 0a 20 20 66 6f 72 28 69 44 62 3d 30 3b  BUG.  for(iDb=0;
2ee40 20 69 44 62 3c 64 62 2d 3e 6e 44 62 3b 20 69 44   iDb<db->nDb; iD
2ee50 62 2b 2b 29 7b 0a 20 20 20 20 61 73 73 65 72 74  b++){.    assert
2ee60 28 20 69 44 62 3d 3d 31 20 7c 7c 20 73 71 6c 69  ( iDb==1 || sqli
2ee70 74 65 33 42 74 72 65 65 48 6f 6c 64 73 4d 75 74  te3BtreeHoldsMut
2ee80 65 78 28 64 62 2d 3e 61 44 62 5b 69 44 62 5d 2e  ex(db->aDb[iDb].
2ee90 70 42 74 29 20 29 3b 0a 20 20 7d 0a 23 65 6e 64  pBt) );.  }.#end
2eea0 69 66 0a 0a 20 20 69 44 62 20 3d 20 70 4f 70 2d  if..  iDb = pOp-
2eeb0 3e 70 31 3b 0a 20 20 61 73 73 65 72 74 28 20 69  >p1;.  assert( i
2eec0 44 62 3e 3d 30 20 26 26 20 69 44 62 3c 64 62 2d  Db>=0 && iDb<db-
2eed0 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73 65 72 74  >nDb );.  assert
2eee0 28 20 44 62 48 61 73 50 72 6f 70 65 72 74 79 28  ( DbHasProperty(
2eef0 64 62 2c 20 69 44 62 2c 20 44 42 5f 53 63 68 65  db, iDb, DB_Sche
2ef00 6d 61 4c 6f 61 64 65 64 29 20 29 3b 0a 20 20 2f  maLoaded) );.  /
2ef10 2a 20 55 73 65 64 20 74 6f 20 62 65 20 61 20 63  * Used to be a c
2ef20 6f 6e 64 69 74 69 6f 6e 61 6c 20 2a 2f 20 7b 0a  onditional */ {.
2ef30 20 20 20 20 7a 4d 61 73 74 65 72 20 3d 20 4d 41      zMaster = MA
2ef40 53 54 45 52 5f 4e 41 4d 45 3b 0a 20 20 20 20 69  STER_NAME;.    i
2ef50 6e 69 74 44 61 74 61 2e 64 62 20 3d 20 64 62 3b  nitData.db = db;
2ef60 0a 20 20 20 20 69 6e 69 74 44 61 74 61 2e 69 44  .    initData.iD
2ef70 62 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 20  b = pOp->p1;.   
2ef80 20 69 6e 69 74 44 61 74 61 2e 70 7a 45 72 72 4d   initData.pzErrM
2ef90 73 67 20 3d 20 26 70 2d 3e 7a 45 72 72 4d 73 67  sg = &p->zErrMsg
2efa0 3b 0a 20 20 20 20 7a 53 71 6c 20 3d 20 73 71 6c  ;.    zSql = sql
2efb0 69 74 65 33 4d 50 72 69 6e 74 66 28 64 62 2c 0a  ite3MPrintf(db,.
2efc0 20 20 20 20 20 20 20 22 53 45 4c 45 43 54 20 6e         "SELECT n
2efd0 61 6d 65 2c 20 72 6f 6f 74 70 61 67 65 2c 20 73  ame, rootpage, s
2efe0 71 6c 20 46 52 4f 4d 20 27 25 71 27 2e 25 73 20  ql FROM '%q'.%s 
2eff0 57 48 45 52 45 20 25 73 20 4f 52 44 45 52 20 42  WHERE %s ORDER B
2f000 59 20 72 6f 77 69 64 22 2c 0a 20 20 20 20 20 20  Y rowid",.      
2f010 20 64 62 2d 3e 61 44 62 5b 69 44 62 5d 2e 7a 44   db->aDb[iDb].zD
2f020 62 53 4e 61 6d 65 2c 20 7a 4d 61 73 74 65 72 2c  bSName, zMaster,
2f030 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20 20   pOp->p4.z);.   
2f040 20 69 66 28 20 7a 53 71 6c 3d 3d 30 20 29 7b 0a   if( zSql==0 ){.
2f050 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54        rc = SQLIT
2f060 45 5f 4e 4f 4d 45 4d 5f 42 4b 50 54 3b 0a 20 20  E_NOMEM_BKPT;.  
2f070 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 61    }else{.      a
2f080 73 73 65 72 74 28 20 64 62 2d 3e 69 6e 69 74 2e  ssert( db->init.
2f090 62 75 73 79 3d 3d 30 20 29 3b 0a 20 20 20 20 20  busy==0 );.     
2f0a0 20 64 62 2d 3e 69 6e 69 74 2e 62 75 73 79 20 3d   db->init.busy =
2f0b0 20 31 3b 0a 20 20 20 20 20 20 69 6e 69 74 44 61   1;.      initDa
2f0c0 74 61 2e 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f  ta.rc = SQLITE_O
2f0d0 4b 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  K;.      assert(
2f0e0 20 21 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c   !db->mallocFail
2f0f0 65 64 20 29 3b 0a 20 20 20 20 20 20 72 63 20 3d  ed );.      rc =
2f100 20 73 71 6c 69 74 65 33 5f 65 78 65 63 28 64 62   sqlite3_exec(db
2f110 2c 20 7a 53 71 6c 2c 20 73 71 6c 69 74 65 33 49  , zSql, sqlite3I
2f120 6e 69 74 43 61 6c 6c 62 61 63 6b 2c 20 26 69 6e  nitCallback, &in
2f130 69 74 44 61 74 61 2c 20 30 29 3b 0a 20 20 20 20  itData, 0);.    
2f140 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45    if( rc==SQLITE
2f150 5f 4f 4b 20 29 20 72 63 20 3d 20 69 6e 69 74 44  _OK ) rc = initD
2f160 61 74 61 2e 72 63 3b 0a 20 20 20 20 20 20 73 71  ata.rc;.      sq
2f170 6c 69 74 65 33 44 62 46 72 65 65 4e 4e 28 64 62  lite3DbFreeNN(db
2f180 2c 20 7a 53 71 6c 29 3b 0a 20 20 20 20 20 20 64  , zSql);.      d
2f190 62 2d 3e 69 6e 69 74 2e 62 75 73 79 20 3d 20 30  b->init.busy = 0
2f1a0 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 69 66  ;.    }.  }.  if
2f1b0 28 20 72 63 20 29 7b 0a 20 20 20 20 73 71 6c 69  ( rc ){.    sqli
2f1c0 74 65 33 52 65 73 65 74 41 6c 6c 53 63 68 65 6d  te3ResetAllSchem
2f1d0 61 73 4f 66 43 6f 6e 6e 65 63 74 69 6f 6e 28 64  asOfConnection(d
2f1e0 62 29 3b 0a 20 20 20 20 69 66 28 20 72 63 3d 3d  b);.    if( rc==
2f1f0 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 20 29 7b 0a  SQLITE_NOMEM ){.
2f200 20 20 20 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65        goto no_me
2f210 6d 3b 0a 20 20 20 20 7d 0a 20 20 20 20 67 6f 74  m;.    }.    got
2f220 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
2f230 72 72 6f 72 3b 0a 20 20 7d 0a 20 20 62 72 65 61  rror;.  }.  brea
2f240 6b 3b 20 20 0a 7d 0a 0a 23 69 66 20 21 64 65 66  k;  .}..#if !def
2f250 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54  ined(SQLITE_OMIT
2f260 5f 41 4e 41 4c 59 5a 45 29 0a 2f 2a 20 4f 70 63  _ANALYZE)./* Opc
2f270 6f 64 65 3a 20 4c 6f 61 64 41 6e 61 6c 79 73 69  ode: LoadAnalysi
2f280 73 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a  s P1 * * * *.**.
2f290 2a 2a 20 52 65 61 64 20 74 68 65 20 73 71 6c 69  ** Read the sqli
2f2a0 74 65 5f 73 74 61 74 31 20 74 61 62 6c 65 20 66  te_stat1 table f
2f2b0 6f 72 20 64 61 74 61 62 61 73 65 20 50 31 20 61  or database P1 a
2f2c0 6e 64 20 6c 6f 61 64 20 74 68 65 20 63 6f 6e 74  nd load the cont
2f2d0 65 6e 74 0a 2a 2a 20 6f 66 20 74 68 61 74 20 74  ent.** of that t
2f2e0 61 62 6c 65 20 69 6e 74 6f 20 74 68 65 20 69 6e  able into the in
2f2f0 74 65 72 6e 61 6c 20 69 6e 64 65 78 20 68 61 73  ternal index has
2f300 68 20 74 61 62 6c 65 2e 20 20 54 68 69 73 20 77  h table.  This w
2f310 69 6c 6c 20 63 61 75 73 65 0a 2a 2a 20 74 68 65  ill cause.** the
2f320 20 61 6e 61 6c 79 73 69 73 20 74 6f 20 62 65 20   analysis to be 
2f330 75 73 65 64 20 77 68 65 6e 20 70 72 65 70 61 72  used when prepar
2f340 69 6e 67 20 61 6c 6c 20 73 75 62 73 65 71 75 65  ing all subseque
2f350 6e 74 20 71 75 65 72 69 65 73 2e 0a 2a 2f 0a 63  nt queries..*/.c
2f360 61 73 65 20 4f 50 5f 4c 6f 61 64 41 6e 61 6c 79  ase OP_LoadAnaly
2f370 73 69 73 3a 20 7b 0a 20 20 61 73 73 65 72 74 28  sis: {.  assert(
2f380 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70   pOp->p1>=0 && p
2f390 4f 70 2d 3e 70 31 3c 64 62 2d 3e 6e 44 62 20 29  Op->p1<db->nDb )
2f3a0 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  ;.  rc = sqlite3
2f3b0 41 6e 61 6c 79 73 69 73 4c 6f 61 64 28 64 62 2c  AnalysisLoad(db,
2f3c0 20 70 4f 70 2d 3e 70 31 29 3b 0a 20 20 69 66 28   pOp->p1);.  if(
2f3d0 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74   rc ) goto abort
2f3e0 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20  _due_to_error;. 
2f3f0 20 62 72 65 61 6b 3b 20 20 0a 7d 0a 23 65 6e 64   break;  .}.#end
2f400 69 66 20 2f 2a 20 21 64 65 66 69 6e 65 64 28 53  if /* !defined(S
2f410 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 4e 41 4c 59  QLITE_OMIT_ANALY
2f420 5a 45 29 20 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f 64  ZE) */../* Opcod
2f430 65 3a 20 44 72 6f 70 54 61 62 6c 65 20 50 31 20  e: DropTable P1 
2f440 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 52  * * P4 *.**.** R
2f450 65 6d 6f 76 65 20 74 68 65 20 69 6e 74 65 72 6e  emove the intern
2f460 61 6c 20 28 69 6e 2d 6d 65 6d 6f 72 79 29 20 64  al (in-memory) d
2f470 61 74 61 20 73 74 72 75 63 74 75 72 65 73 20 74  ata structures t
2f480 68 61 74 20 64 65 73 63 72 69 62 65 0a 2a 2a 20  hat describe.** 
2f490 74 68 65 20 74 61 62 6c 65 20 6e 61 6d 65 64 20  the table named 
2f4a0 50 34 20 69 6e 20 64 61 74 61 62 61 73 65 20 50  P4 in database P
2f4b0 31 2e 20 20 54 68 69 73 20 69 73 20 63 61 6c 6c  1.  This is call
2f4c0 65 64 20 61 66 74 65 72 20 61 20 74 61 62 6c 65  ed after a table
2f4d0 0a 2a 2a 20 69 73 20 64 72 6f 70 70 65 64 20 66  .** is dropped f
2f4e0 72 6f 6d 20 64 69 73 6b 20 28 75 73 69 6e 67 20  rom disk (using 
2f4f0 74 68 65 20 44 65 73 74 72 6f 79 20 6f 70 63 6f  the Destroy opco
2f500 64 65 29 20 69 6e 20 6f 72 64 65 72 20 74 6f 20  de) in order to 
2f510 6b 65 65 70 20 0a 2a 2a 20 74 68 65 20 69 6e 74  keep .** the int
2f520 65 72 6e 61 6c 20 72 65 70 72 65 73 65 6e 74 61  ernal representa
2f530 74 69 6f 6e 20 6f 66 20 74 68 65 0a 2a 2a 20 73  tion of the.** s
2f540 63 68 65 6d 61 20 63 6f 6e 73 69 73 74 65 6e 74  chema consistent
2f550 20 77 69 74 68 20 77 68 61 74 20 69 73 20 6f 6e   with what is on
2f560 20 64 69 73 6b 2e 0a 2a 2f 0a 63 61 73 65 20 4f   disk..*/.case O
2f570 50 5f 44 72 6f 70 54 61 62 6c 65 3a 20 7b 0a 20  P_DropTable: {. 
2f580 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e 63 72   sqlite3VdbeIncr
2f590 57 72 69 74 65 43 6f 75 6e 74 65 72 28 70 2c 20  WriteCounter(p, 
2f5a0 30 29 3b 0a 20 20 73 71 6c 69 74 65 33 55 6e 6c  0);.  sqlite3Unl
2f5b0 69 6e 6b 41 6e 64 44 65 6c 65 74 65 54 61 62 6c  inkAndDeleteTabl
2f5c0 65 28 64 62 2c 20 70 4f 70 2d 3e 70 31 2c 20 70  e(db, pOp->p1, p
2f5d0 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20 62 72 65  Op->p4.z);.  bre
2f5e0 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
2f5f0 3a 20 44 72 6f 70 49 6e 64 65 78 20 50 31 20 2a  : DropIndex P1 *
2f600 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 52 65   * P4 *.**.** Re
2f610 6d 6f 76 65 20 74 68 65 20 69 6e 74 65 72 6e 61  move the interna
2f620 6c 20 28 69 6e 2d 6d 65 6d 6f 72 79 29 20 64 61  l (in-memory) da
2f630 74 61 20 73 74 72 75 63 74 75 72 65 73 20 74 68  ta structures th
2f640 61 74 20 64 65 73 63 72 69 62 65 0a 2a 2a 20 74  at describe.** t
2f650 68 65 20 69 6e 64 65 78 20 6e 61 6d 65 64 20 50  he index named P
2f660 34 20 69 6e 20 64 61 74 61 62 61 73 65 20 50 31  4 in database P1
2f670 2e 20 20 54 68 69 73 20 69 73 20 63 61 6c 6c 65  .  This is calle
2f680 64 20 61 66 74 65 72 20 61 6e 20 69 6e 64 65 78  d after an index
2f690 0a 2a 2a 20 69 73 20 64 72 6f 70 70 65 64 20 66  .** is dropped f
2f6a0 72 6f 6d 20 64 69 73 6b 20 28 75 73 69 6e 67 20  rom disk (using 
2f6b0 74 68 65 20 44 65 73 74 72 6f 79 20 6f 70 63 6f  the Destroy opco
2f6c0 64 65 29 0a 2a 2a 20 69 6e 20 6f 72 64 65 72 20  de).** in order 
2f6d0 74 6f 20 6b 65 65 70 20 74 68 65 20 69 6e 74 65  to keep the inte
2f6e0 72 6e 61 6c 20 72 65 70 72 65 73 65 6e 74 61 74  rnal representat
2f6f0 69 6f 6e 20 6f 66 20 74 68 65 0a 2a 2a 20 73 63  ion of the.** sc
2f700 68 65 6d 61 20 63 6f 6e 73 69 73 74 65 6e 74 20  hema consistent 
2f710 77 69 74 68 20 77 68 61 74 20 69 73 20 6f 6e 20  with what is on 
2f720 64 69 73 6b 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  disk..*/.case OP
2f730 5f 44 72 6f 70 49 6e 64 65 78 3a 20 7b 0a 20 20  _DropIndex: {.  
2f740 73 71 6c 69 74 65 33 56 64 62 65 49 6e 63 72 57  sqlite3VdbeIncrW
2f750 72 69 74 65 43 6f 75 6e 74 65 72 28 70 2c 20 30  riteCounter(p, 0
2f760 29 3b 0a 20 20 73 71 6c 69 74 65 33 55 6e 6c 69  );.  sqlite3Unli
2f770 6e 6b 41 6e 64 44 65 6c 65 74 65 49 6e 64 65 78  nkAndDeleteIndex
2f780 28 64 62 2c 20 70 4f 70 2d 3e 70 31 2c 20 70 4f  (db, pOp->p1, pO
2f790 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20 62 72 65 61  p->p4.z);.  brea
2f7a0 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
2f7b0 20 44 72 6f 70 54 72 69 67 67 65 72 20 50 31 20   DropTrigger P1 
2f7c0 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 52  * * P4 *.**.** R
2f7d0 65 6d 6f 76 65 20 74 68 65 20 69 6e 74 65 72 6e  emove the intern
2f7e0 61 6c 20 28 69 6e 2d 6d 65 6d 6f 72 79 29 20 64  al (in-memory) d
2f7f0 61 74 61 20 73 74 72 75 63 74 75 72 65 73 20 74  ata structures t
2f800 68 61 74 20 64 65 73 63 72 69 62 65 0a 2a 2a 20  hat describe.** 
2f810 74 68 65 20 74 72 69 67 67 65 72 20 6e 61 6d 65  the trigger name
2f820 64 20 50 34 20 69 6e 20 64 61 74 61 62 61 73 65  d P4 in database
2f830 20 50 31 2e 20 20 54 68 69 73 20 69 73 20 63 61   P1.  This is ca
2f840 6c 6c 65 64 20 61 66 74 65 72 20 61 20 74 72 69  lled after a tri
2f850 67 67 65 72 0a 2a 2a 20 69 73 20 64 72 6f 70 70  gger.** is dropp
2f860 65 64 20 66 72 6f 6d 20 64 69 73 6b 20 28 75 73  ed from disk (us
2f870 69 6e 67 20 74 68 65 20 44 65 73 74 72 6f 79 20  ing the Destroy 
2f880 6f 70 63 6f 64 65 29 20 69 6e 20 6f 72 64 65 72  opcode) in order
2f890 20 74 6f 20 6b 65 65 70 20 0a 2a 2a 20 74 68 65   to keep .** the
2f8a0 20 69 6e 74 65 72 6e 61 6c 20 72 65 70 72 65 73   internal repres
2f8b0 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 0a  entation of the.
2f8c0 2a 2a 20 73 63 68 65 6d 61 20 63 6f 6e 73 69 73  ** schema consis
2f8d0 74 65 6e 74 20 77 69 74 68 20 77 68 61 74 20 69  tent with what i
2f8e0 73 20 6f 6e 20 64 69 73 6b 2e 0a 2a 2f 0a 63 61  s on disk..*/.ca
2f8f0 73 65 20 4f 50 5f 44 72 6f 70 54 72 69 67 67 65  se OP_DropTrigge
2f900 72 3a 20 7b 0a 20 20 73 71 6c 69 74 65 33 56 64  r: {.  sqlite3Vd
2f910 62 65 49 6e 63 72 57 72 69 74 65 43 6f 75 6e 74  beIncrWriteCount
2f920 65 72 28 70 2c 20 30 29 3b 0a 20 20 73 71 6c 69  er(p, 0);.  sqli
2f930 74 65 33 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65  te3UnlinkAndDele
2f940 74 65 54 72 69 67 67 65 72 28 64 62 2c 20 70 4f  teTrigger(db, pO
2f950 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70 34 2e 7a  p->p1, pOp->p4.z
2f960 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 0a  );.  break;.}...
2f970 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
2f980 4d 49 54 5f 49 4e 54 45 47 52 49 54 59 5f 43 48  MIT_INTEGRITY_CH
2f990 45 43 4b 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49  ECK./* Opcode: I
2f9a0 6e 74 65 67 72 69 74 79 43 6b 20 50 31 20 50 32  ntegrityCk P1 P2
2f9b0 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20   P3 P4 P5.**.** 
2f9c0 44 6f 20 61 6e 20 61 6e 61 6c 79 73 69 73 20 6f  Do an analysis o
2f9d0 66 20 74 68 65 20 63 75 72 72 65 6e 74 6c 79 20  f the currently 
2f9e0 6f 70 65 6e 20 64 61 74 61 62 61 73 65 2e 20 20  open database.  
2f9f0 53 74 6f 72 65 20 69 6e 0a 2a 2a 20 72 65 67 69  Store in.** regi
2fa00 73 74 65 72 20 50 31 20 74 68 65 20 74 65 78 74  ster P1 the text
2fa10 20 6f 66 20 61 6e 20 65 72 72 6f 72 20 6d 65 73   of an error mes
2fa20 73 61 67 65 20 64 65 73 63 72 69 62 69 6e 67 20  sage describing 
2fa30 61 6e 79 20 70 72 6f 62 6c 65 6d 73 2e 0a 2a 2a  any problems..**
2fa40 20 49 66 20 6e 6f 20 70 72 6f 62 6c 65 6d 73 20   If no problems 
2fa50 61 72 65 20 66 6f 75 6e 64 2c 20 73 74 6f 72 65  are found, store
2fa60 20 61 20 4e 55 4c 4c 20 69 6e 20 72 65 67 69 73   a NULL in regis
2fa70 74 65 72 20 50 31 2e 0a 2a 2a 0a 2a 2a 20 54 68  ter P1..**.** Th
2fa80 65 20 72 65 67 69 73 74 65 72 20 50 33 20 63 6f  e register P3 co
2fa90 6e 74 61 69 6e 73 20 6f 6e 65 20 6c 65 73 73 20  ntains one less 
2faa0 74 68 61 6e 20 74 68 65 20 6d 61 78 69 6d 75 6d  than the maximum
2fab0 20 6e 75 6d 62 65 72 20 6f 66 20 61 6c 6c 6f 77   number of allow
2fac0 65 64 20 65 72 72 6f 72 73 2e 0a 2a 2a 20 41 74  ed errors..** At
2fad0 20 6d 6f 73 74 20 72 65 67 28 50 33 29 20 65 72   most reg(P3) er
2fae0 72 6f 72 73 20 77 69 6c 6c 20 62 65 20 72 65 70  rors will be rep
2faf0 6f 72 74 65 64 2e 0a 2a 2a 20 49 6e 20 6f 74 68  orted..** In oth
2fb00 65 72 20 77 6f 72 64 73 2c 20 74 68 65 20 61 6e  er words, the an
2fb10 61 6c 79 73 69 73 20 73 74 6f 70 73 20 61 73 20  alysis stops as 
2fb20 73 6f 6f 6e 20 61 73 20 72 65 67 28 50 31 29 20  soon as reg(P1) 
2fb30 65 72 72 6f 72 73 20 61 72 65 20 0a 2a 2a 20 73  errors are .** s
2fb40 65 65 6e 2e 20 20 52 65 67 28 50 31 29 20 69 73  een.  Reg(P1) is
2fb50 20 75 70 64 61 74 65 64 20 77 69 74 68 20 74 68   updated with th
2fb60 65 20 6e 75 6d 62 65 72 20 6f 66 20 65 72 72 6f  e number of erro
2fb70 72 73 20 72 65 6d 61 69 6e 69 6e 67 2e 0a 2a 2a  rs remaining..**
2fb80 0a 2a 2a 20 54 68 65 20 72 6f 6f 74 20 70 61 67  .** The root pag
2fb90 65 20 6e 75 6d 62 65 72 73 20 6f 66 20 61 6c 6c  e numbers of all
2fba0 20 74 61 62 6c 65 73 20 69 6e 20 74 68 65 20 64   tables in the d
2fbb0 61 74 61 62 61 73 65 20 61 72 65 20 69 6e 74 65  atabase are inte
2fbc0 67 65 72 73 0a 2a 2a 20 73 74 6f 72 65 64 20 69  gers.** stored i
2fbd0 6e 20 50 34 5f 49 4e 54 41 52 52 41 59 20 61 72  n P4_INTARRAY ar
2fbe0 67 75 6d 65 6e 74 2e 0a 2a 2a 0a 2a 2a 20 49 66  gument..**.** If
2fbf0 20 50 35 20 69 73 20 6e 6f 74 20 7a 65 72 6f 2c   P5 is not zero,
2fc00 20 74 68 65 20 63 68 65 63 6b 20 69 73 20 64 6f   the check is do
2fc10 6e 65 20 6f 6e 20 74 68 65 20 61 75 78 69 6c 69  ne on the auxili
2fc20 61 72 79 20 64 61 74 61 62 61 73 65 0a 2a 2a 20  ary database.** 
2fc30 66 69 6c 65 2c 20 6e 6f 74 20 74 68 65 20 6d 61  file, not the ma
2fc40 69 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  in database file
2fc50 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63  ..**.** This opc
2fc60 6f 64 65 20 69 73 20 75 73 65 64 20 74 6f 20 69  ode is used to i
2fc70 6d 70 6c 65 6d 65 6e 74 20 74 68 65 20 69 6e 74  mplement the int
2fc80 65 67 72 69 74 79 5f 63 68 65 63 6b 20 70 72 61  egrity_check pra
2fc90 67 6d 61 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  gma..*/.case OP_
2fca0 49 6e 74 65 67 72 69 74 79 43 6b 3a 20 7b 0a 20  IntegrityCk: {. 
2fcb0 20 69 6e 74 20 6e 52 6f 6f 74 3b 20 20 20 20 20   int nRoot;     
2fcc0 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 74 61   /* Number of ta
2fcd0 62 6c 65 73 20 74 6f 20 63 68 65 63 6b 2e 20 20  bles to check.  
2fce0 28 4e 75 6d 62 65 72 20 6f 66 20 72 6f 6f 74 20  (Number of root 
2fcf0 70 61 67 65 73 2e 29 20 2a 2f 0a 20 20 69 6e 74  pages.) */.  int
2fd00 20 2a 61 52 6f 6f 74 3b 20 20 20 20 20 2f 2a 20   *aRoot;     /* 
2fd10 41 72 72 61 79 20 6f 66 20 72 6f 6f 74 70 61 67  Array of rootpag
2fd20 65 20 6e 75 6d 62 65 72 73 20 66 6f 72 20 74 61  e numbers for ta
2fd30 62 6c 65 73 20 74 6f 20 62 65 20 63 68 65 63 6b  bles to be check
2fd40 65 64 20 2a 2f 0a 20 20 69 6e 74 20 6e 45 72 72  ed */.  int nErr
2fd50 3b 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65  ;       /* Numbe
2fd60 72 20 6f 66 20 65 72 72 6f 72 73 20 72 65 70 6f  r of errors repo
2fd70 72 74 65 64 20 2a 2f 0a 20 20 63 68 61 72 20 2a  rted */.  char *
2fd80 7a 3b 20 20 20 20 20 20 20 20 2f 2a 20 54 65 78  z;        /* Tex
2fd90 74 20 6f 66 20 74 68 65 20 65 72 72 6f 72 20 72  t of the error r
2fda0 65 70 6f 72 74 20 2a 2f 0a 20 20 4d 65 6d 20 2a  eport */.  Mem *
2fdb0 70 6e 45 72 72 3b 20 20 20 20 20 2f 2a 20 52 65  pnErr;     /* Re
2fdc0 67 69 73 74 65 72 20 6b 65 65 70 69 6e 67 20 74  gister keeping t
2fdd0 72 61 63 6b 20 6f 66 20 65 72 72 6f 72 73 20 72  rack of errors r
2fde0 65 6d 61 69 6e 69 6e 67 20 2a 2f 0a 0a 20 20 61  emaining */..  a
2fdf0 73 73 65 72 74 28 20 70 2d 3e 62 49 73 52 65 61  ssert( p->bIsRea
2fe00 64 65 72 20 29 3b 0a 20 20 6e 52 6f 6f 74 20 3d  der );.  nRoot =
2fe10 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 61 52 6f 6f   pOp->p2;.  aRoo
2fe20 74 20 3d 20 70 4f 70 2d 3e 70 34 2e 61 69 3b 0a  t = pOp->p4.ai;.
2fe30 20 20 61 73 73 65 72 74 28 20 6e 52 6f 6f 74 3e    assert( nRoot>
2fe40 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 61  0 );.  assert( a
2fe50 52 6f 6f 74 5b 30 5d 3d 3d 6e 52 6f 6f 74 20 29  Root[0]==nRoot )
2fe60 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
2fe70 3e 70 33 3e 30 20 26 26 20 70 4f 70 2d 3e 70 33  >p3>0 && pOp->p3
2fe80 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70  <=(p->nMem+1 - p
2fe90 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20  ->nCursor) );.  
2fea0 70 6e 45 72 72 20 3d 20 26 61 4d 65 6d 5b 70 4f  pnErr = &aMem[pO
2feb0 70 2d 3e 70 33 5d 3b 0a 20 20 61 73 73 65 72 74  p->p3];.  assert
2fec0 28 20 28 70 6e 45 72 72 2d 3e 66 6c 61 67 73 20  ( (pnErr->flags 
2fed0 26 20 4d 45 4d 5f 49 6e 74 29 21 3d 30 20 29 3b  & MEM_Int)!=0 );
2fee0 0a 20 20 61 73 73 65 72 74 28 20 28 70 6e 45 72  .  assert( (pnEr
2fef0 72 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f  r->flags & (MEM_
2ff00 53 74 72 7c 4d 45 4d 5f 42 6c 6f 62 29 29 3d 3d  Str|MEM_Blob))==
2ff10 30 20 29 3b 0a 20 20 70 49 6e 31 20 3d 20 26 61  0 );.  pIn1 = &a
2ff20 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
2ff30 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 35 3c  assert( pOp->p5<
2ff40 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73  db->nDb );.  ass
2ff50 65 72 74 28 20 44 62 4d 61 73 6b 54 65 73 74 28  ert( DbMaskTest(
2ff60 70 2d 3e 62 74 72 65 65 4d 61 73 6b 2c 20 70 4f  p->btreeMask, pO
2ff70 70 2d 3e 70 35 29 20 29 3b 0a 20 20 7a 20 3d 20  p->p5) );.  z = 
2ff80 73 71 6c 69 74 65 33 42 74 72 65 65 49 6e 74 65  sqlite3BtreeInte
2ff90 67 72 69 74 79 43 68 65 63 6b 28 64 62 2d 3e 61  grityCheck(db->a
2ffa0 44 62 5b 70 4f 70 2d 3e 70 35 5d 2e 70 42 74 2c  Db[pOp->p5].pBt,
2ffb0 20 26 61 52 6f 6f 74 5b 31 5d 2c 20 6e 52 6f 6f   &aRoot[1], nRoo
2ffc0 74 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  t,.             
2ffd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ffe0 20 20 20 20 28 69 6e 74 29 70 6e 45 72 72 2d 3e      (int)pnErr->
2fff0 75 2e 69 2b 31 2c 20 26 6e 45 72 72 29 3b 0a 20  u.i+1, &nErr);. 
30000 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53   sqlite3VdbeMemS
30010 65 74 4e 75 6c 6c 28 70 49 6e 31 29 3b 0a 20 20  etNull(pIn1);.  
30020 69 66 28 20 6e 45 72 72 3d 3d 30 20 29 7b 0a 20  if( nErr==0 ){. 
30030 20 20 20 61 73 73 65 72 74 28 20 7a 3d 3d 30 20     assert( z==0 
30040 29 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 7a  );.  }else if( z
30050 3d 3d 30 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20  ==0 ){.    goto 
30060 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 65 6c 73 65 7b  no_mem;.  }else{
30070 0a 20 20 20 20 70 6e 45 72 72 2d 3e 75 2e 69 20  .    pnErr->u.i 
30080 2d 3d 20 6e 45 72 72 2d 31 3b 0a 20 20 20 20 73  -= nErr-1;.    s
30090 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74  qlite3VdbeMemSet
300a0 53 74 72 28 70 49 6e 31 2c 20 7a 2c 20 2d 31 2c  Str(pIn1, z, -1,
300b0 20 53 51 4c 49 54 45 5f 55 54 46 38 2c 20 73 71   SQLITE_UTF8, sq
300c0 6c 69 74 65 33 5f 66 72 65 65 29 3b 0a 20 20 7d  lite3_free);.  }
300d0 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c  .  UPDATE_MAX_BL
300e0 4f 42 53 49 5a 45 28 70 49 6e 31 29 3b 0a 20 20  OBSIZE(pIn1);.  
300f0 73 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67  sqlite3VdbeChang
30100 65 45 6e 63 6f 64 69 6e 67 28 70 49 6e 31 2c 20  eEncoding(pIn1, 
30110 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 62 72 65  encoding);.  bre
30120 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20  ak;.}.#endif /* 
30130 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 49 4e 54 45  SQLITE_OMIT_INTE
30140 47 52 49 54 59 5f 43 48 45 43 4b 20 2a 2f 0a 0a  GRITY_CHECK */..
30150 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 6f 77 53 65  /* Opcode: RowSe
30160 74 41 64 64 20 50 31 20 50 32 20 2a 20 2a 20 2a  tAdd P1 P2 * * *
30170 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 6f  .** Synopsis: ro
30180 77 73 65 74 28 50 31 29 3d 72 5b 50 32 5d 0a 2a  wset(P1)=r[P2].*
30190 2a 0a 2a 2a 20 49 6e 73 65 72 74 20 74 68 65 20  *.** Insert the 
301a0 69 6e 74 65 67 65 72 20 76 61 6c 75 65 20 68 65  integer value he
301b0 6c 64 20 62 79 20 72 65 67 69 73 74 65 72 20 50  ld by register P
301c0 32 20 69 6e 74 6f 20 61 20 52 6f 77 53 65 74 20  2 into a RowSet 
301d0 6f 62 6a 65 63 74 0a 2a 2a 20 68 65 6c 64 20 69  object.** held i
301e0 6e 20 72 65 67 69 73 74 65 72 20 50 31 2e 0a 2a  n register P1..*
301f0 2a 0a 2a 2a 20 41 6e 20 61 73 73 65 72 74 69 6f  *.** An assertio
30200 6e 20 66 61 69 6c 73 20 69 66 20 50 32 20 69 73  n fails if P2 is
30210 20 6e 6f 74 20 61 6e 20 69 6e 74 65 67 65 72 2e   not an integer.
30220 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 6f 77 53  .*/.case OP_RowS
30230 65 74 41 64 64 3a 20 7b 20 20 20 20 20 20 20 2f  etAdd: {       /
30240 2a 20 69 6e 31 2c 20 69 6e 32 20 2a 2f 0a 20 20  * in1, in2 */.  
30250 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn1 = &aMem[pOp
30260 2d 3e 70 31 5d 3b 0a 20 20 70 49 6e 32 20 3d 20  ->p1];.  pIn2 = 
30270 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a  &aMem[pOp->p2];.
30280 20 20 61 73 73 65 72 74 28 20 28 70 49 6e 32 2d    assert( (pIn2-
30290 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74  >flags & MEM_Int
302a0 29 21 3d 30 20 29 3b 0a 20 20 69 66 28 20 28 70  )!=0 );.  if( (p
302b0 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  In1->flags & MEM
302c0 5f 52 6f 77 53 65 74 29 3d 3d 30 20 29 7b 0a 20  _RowSet)==0 ){. 
302d0 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
302e0 6d 53 65 74 52 6f 77 53 65 74 28 70 49 6e 31 29  mSetRowSet(pIn1)
302f0 3b 0a 20 20 20 20 69 66 28 20 28 70 49 6e 31 2d  ;.    if( (pIn1-
30300 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52 6f 77  >flags & MEM_Row
30310 53 65 74 29 3d 3d 30 20 29 20 67 6f 74 6f 20 6e  Set)==0 ) goto n
30320 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 20 20 73 71 6c  o_mem;.  }.  sql
30330 69 74 65 33 52 6f 77 53 65 74 49 6e 73 65 72 74  ite3RowSetInsert
30340 28 70 49 6e 31 2d 3e 75 2e 70 52 6f 77 53 65 74  (pIn1->u.pRowSet
30350 2c 20 70 49 6e 32 2d 3e 75 2e 69 29 3b 0a 20 20  , pIn2->u.i);.  
30360 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
30370 6f 64 65 3a 20 52 6f 77 53 65 74 52 65 61 64 20  ode: RowSetRead 
30380 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20  P1 P2 P3 * *.** 
30390 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 33 5d 3d  Synopsis: r[P3]=
303a0 72 6f 77 73 65 74 28 50 31 29 0a 2a 2a 0a 2a 2a  rowset(P1).**.**
303b0 20 45 78 74 72 61 63 74 20 74 68 65 20 73 6d 61   Extract the sma
303c0 6c 6c 65 73 74 20 76 61 6c 75 65 20 66 72 6f 6d  llest value from
303d0 20 74 68 65 20 52 6f 77 53 65 74 20 6f 62 6a 65   the RowSet obje
303e0 63 74 20 69 6e 20 50 31 0a 2a 2a 20 61 6e 64 20  ct in P1.** and 
303f0 70 75 74 20 74 68 61 74 20 76 61 6c 75 65 20 69  put that value i
30400 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 33 2e  nto register P3.
30410 0a 2a 2a 20 4f 72 2c 20 69 66 20 52 6f 77 53 65  .** Or, if RowSe
30420 74 20 6f 62 6a 65 63 74 20 50 31 20 69 73 20 69  t object P1 is i
30430 6e 69 74 69 61 6c 6c 79 20 65 6d 70 74 79 2c 20  nitially empty, 
30440 6c 65 61 76 65 20 50 33 0a 2a 2a 20 75 6e 63 68  leave P3.** unch
30450 61 6e 67 65 64 20 61 6e 64 20 6a 75 6d 70 20 74  anged and jump t
30460 6f 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 50 32  o instruction P2
30470 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 6f 77  ..*/.case OP_Row
30480 53 65 74 52 65 61 64 3a 20 7b 20 20 20 20 20 20  SetRead: {      
30490 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 2c 20 6f   /* jump, in1, o
304a0 75 74 33 20 2a 2f 0a 20 20 69 36 34 20 76 61 6c  ut3 */.  i64 val
304b0 3b 0a 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65  ;..  pIn1 = &aMe
304c0 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 69 66  m[pOp->p1];.  if
304d0 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26  ( (pIn1->flags &
304e0 20 4d 45 4d 5f 52 6f 77 53 65 74 29 3d 3d 30 20   MEM_RowSet)==0 
304f0 0a 20 20 20 7c 7c 20 73 71 6c 69 74 65 33 52 6f  .   || sqlite3Ro
30500 77 53 65 74 4e 65 78 74 28 70 49 6e 31 2d 3e 75  wSetNext(pIn1->u
30510 2e 70 52 6f 77 53 65 74 2c 20 26 76 61 6c 29 3d  .pRowSet, &val)=
30520 3d 30 0a 20 20 29 7b 0a 20 20 20 20 2f 2a 20 54  =0.  ){.    /* T
30530 68 65 20 62 6f 6f 6c 65 61 6e 20 69 6e 64 65 78  he boolean index
30540 20 69 73 20 65 6d 70 74 79 20 2a 2f 0a 20 20 20   is empty */.   
30550 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53   sqlite3VdbeMemS
30560 65 74 4e 75 6c 6c 28 70 49 6e 31 29 3b 0a 20 20  etNull(pIn1);.  
30570 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65    VdbeBranchTake
30580 6e 28 31 2c 32 29 3b 0a 20 20 20 20 67 6f 74 6f  n(1,2);.    goto
30590 20 6a 75 6d 70 5f 74 6f 5f 70 32 5f 61 6e 64 5f   jump_to_p2_and_
305a0 63 68 65 63 6b 5f 66 6f 72 5f 69 6e 74 65 72 72  check_for_interr
305b0 75 70 74 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  upt;.  }else{.  
305c0 20 20 2f 2a 20 41 20 76 61 6c 75 65 20 77 61 73    /* A value was
305d0 20 70 75 6c 6c 65 64 20 66 72 6f 6d 20 74 68 65   pulled from the
305e0 20 69 6e 64 65 78 20 2a 2f 0a 20 20 20 20 56 64   index */.    Vd
305f0 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 30 2c  beBranchTaken(0,
30600 32 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56  2);.    sqlite3V
30610 64 62 65 4d 65 6d 53 65 74 49 6e 74 36 34 28 26  dbeMemSetInt64(&
30620 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 2c 20 76  aMem[pOp->p3], v
30630 61 6c 29 3b 0a 20 20 7d 0a 20 20 67 6f 74 6f 20  al);.  }.  goto 
30640 63 68 65 63 6b 5f 66 6f 72 5f 69 6e 74 65 72 72  check_for_interr
30650 75 70 74 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  upt;.}../* Opcod
30660 65 3a 20 52 6f 77 53 65 74 54 65 73 74 20 50 31  e: RowSetTest P1
30670 20 50 32 20 50 33 20 50 34 0a 2a 2a 20 53 79 6e   P2 P3 P4.** Syn
30680 6f 70 73 69 73 3a 20 69 66 20 72 5b 50 33 5d 20  opsis: if r[P3] 
30690 69 6e 20 72 6f 77 73 65 74 28 50 31 29 20 67 6f  in rowset(P1) go
306a0 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 52 65 67 69  to P2.**.** Regi
306b0 73 74 65 72 20 50 33 20 69 73 20 61 73 73 75 6d  ster P3 is assum
306c0 65 64 20 74 6f 20 68 6f 6c 64 20 61 20 36 34 2d  ed to hold a 64-
306d0 62 69 74 20 69 6e 74 65 67 65 72 20 76 61 6c 75  bit integer valu
306e0 65 2e 20 49 66 20 72 65 67 69 73 74 65 72 20 50  e. If register P
306f0 31 0a 2a 2a 20 63 6f 6e 74 61 69 6e 73 20 61 20  1.** contains a 
30700 52 6f 77 53 65 74 20 6f 62 6a 65 63 74 20 61 6e  RowSet object an
30710 64 20 74 68 61 74 20 52 6f 77 53 65 74 20 6f 62  d that RowSet ob
30720 6a 65 63 74 20 63 6f 6e 74 61 69 6e 73 0a 2a 2a  ject contains.**
30730 20 74 68 65 20 76 61 6c 75 65 20 68 65 6c 64 20   the value held 
30740 69 6e 20 50 33 2c 20 6a 75 6d 70 20 74 6f 20 72  in P3, jump to r
30750 65 67 69 73 74 65 72 20 50 32 2e 20 4f 74 68 65  egister P2. Othe
30760 72 77 69 73 65 2c 20 69 6e 73 65 72 74 20 74 68  rwise, insert th
30770 65 0a 2a 2a 20 69 6e 74 65 67 65 72 20 69 6e 20  e.** integer in 
30780 50 33 20 69 6e 74 6f 20 74 68 65 20 52 6f 77 53  P3 into the RowS
30790 65 74 20 61 6e 64 20 63 6f 6e 74 69 6e 75 65 20  et and continue 
307a0 6f 6e 20 74 6f 20 74 68 65 0a 2a 2a 20 6e 65 78  on to the.** nex
307b0 74 20 6f 70 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20  t opcode..**.** 
307c0 54 68 65 20 52 6f 77 53 65 74 20 6f 62 6a 65 63  The RowSet objec
307d0 74 20 69 73 20 6f 70 74 69 6d 69 7a 65 64 20 66  t is optimized f
307e0 6f 72 20 74 68 65 20 63 61 73 65 20 77 68 65 72  or the case wher
307f0 65 20 73 65 74 73 20 6f 66 20 69 6e 74 65 67 65  e sets of intege
30800 72 73 0a 2a 2a 20 61 72 65 20 69 6e 73 65 72 74  rs.** are insert
30810 65 64 20 69 6e 20 64 69 73 74 69 6e 63 74 20 70  ed in distinct p
30820 68 61 73 65 73 2c 20 77 68 69 63 68 20 65 61 63  hases, which eac
30830 68 20 73 65 74 20 63 6f 6e 74 61 69 6e 73 20 6e  h set contains n
30840 6f 20 64 75 70 6c 69 63 61 74 65 73 2e 0a 2a 2a  o duplicates..**
30850 20 45 61 63 68 20 73 65 74 20 69 73 20 69 64 65   Each set is ide
30860 6e 74 69 66 69 65 64 20 62 79 20 61 20 75 6e 69  ntified by a uni
30870 71 75 65 20 50 34 20 76 61 6c 75 65 2e 20 54 68  que P4 value. Th
30880 65 20 66 69 72 73 74 20 73 65 74 0a 2a 2a 20 6d  e first set.** m
30890 75 73 74 20 68 61 76 65 20 50 34 3d 3d 30 2c 20  ust have P4==0, 
308a0 74 68 65 20 66 69 6e 61 6c 20 73 65 74 20 6d 75  the final set mu
308b0 73 74 20 68 61 76 65 20 50 34 3d 3d 2d 31 2c 20  st have P4==-1, 
308c0 61 6e 64 20 66 6f 72 20 61 6c 6c 20 6f 74 68 65  and for all othe
308d0 72 20 73 65 74 73 0a 2a 2a 20 6d 75 73 74 20 68  r sets.** must h
308e0 61 76 65 20 50 34 3e 30 2e 0a 2a 2a 0a 2a 2a 20  ave P4>0..**.** 
308f0 54 68 69 73 20 61 6c 6c 6f 77 73 20 6f 70 74 69  This allows opti
30900 6d 69 7a 61 74 69 6f 6e 73 3a 20 28 61 29 20 77  mizations: (a) w
30910 68 65 6e 20 50 34 3d 3d 30 20 74 68 65 72 65 20  hen P4==0 there 
30920 69 73 20 6e 6f 20 6e 65 65 64 20 74 6f 20 74 65  is no need to te
30930 73 74 0a 2a 2a 20 74 68 65 20 52 6f 77 53 65 74  st.** the RowSet
30940 20 6f 62 6a 65 63 74 20 66 6f 72 20 50 33 2c 20   object for P3, 
30950 61 73 20 69 74 20 69 73 20 67 75 61 72 61 6e 74  as it is guarant
30960 65 65 64 20 6e 6f 74 20 74 6f 20 63 6f 6e 74 61  eed not to conta
30970 69 6e 20 69 74 2c 0a 2a 2a 20 28 62 29 20 77 68  in it,.** (b) wh
30980 65 6e 20 50 34 3d 3d 2d 31 20 74 68 65 72 65 20  en P4==-1 there 
30990 69 73 20 6e 6f 20 6e 65 65 64 20 74 6f 20 69 6e  is no need to in
309a0 73 65 72 74 20 74 68 65 20 76 61 6c 75 65 2c 20  sert the value, 
309b0 61 73 20 69 74 20 77 69 6c 6c 0a 2a 2a 20 6e 65  as it will.** ne
309c0 76 65 72 20 62 65 20 74 65 73 74 65 64 20 66 6f  ver be tested fo
309d0 72 2c 20 61 6e 64 20 28 63 29 20 77 68 65 6e 20  r, and (c) when 
309e0 61 20 76 61 6c 75 65 20 74 68 61 74 20 69 73 20  a value that is 
309f0 70 61 72 74 20 6f 66 20 73 65 74 20 58 20 69 73  part of set X is
30a00 0a 2a 2a 20 69 6e 73 65 72 74 65 64 2c 20 74 68  .** inserted, th
30a10 65 72 65 20 69 73 20 6e 6f 20 6e 65 65 64 20 74  ere is no need t
30a20 6f 20 73 65 61 72 63 68 20 74 6f 20 73 65 65 20  o search to see 
30a30 69 66 20 74 68 65 20 73 61 6d 65 20 76 61 6c 75  if the same valu
30a40 65 20 77 61 73 0a 2a 2a 20 70 72 65 76 69 6f 75  e was.** previou
30a50 73 6c 79 20 69 6e 73 65 72 74 65 64 20 61 73 20  sly inserted as 
30a60 70 61 72 74 20 6f 66 20 73 65 74 20 58 20 28 6f  part of set X (o
30a70 6e 6c 79 20 69 66 20 69 74 20 77 61 73 20 70 72  nly if it was pr
30a80 65 76 69 6f 75 73 6c 79 0a 2a 2a 20 69 6e 73 65  eviously.** inse
30a90 72 74 65 64 20 61 73 20 70 61 72 74 20 6f 66 20  rted as part of 
30aa0 73 6f 6d 65 20 6f 74 68 65 72 20 73 65 74 29 2e  some other set).
30ab0 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 6f 77 53  .*/.case OP_RowS
30ac0 65 74 54 65 73 74 3a 20 7b 20 20 20 20 20 20 20  etTest: {       
30ad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
30ae0 20 6a 75 6d 70 2c 20 69 6e 31 2c 20 69 6e 33 20   jump, in1, in3 
30af0 2a 2f 0a 20 20 69 6e 74 20 69 53 65 74 3b 0a 20  */.  int iSet;. 
30b00 20 69 6e 74 20 65 78 69 73 74 73 3b 0a 0a 20 20   int exists;..  
30b10 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn1 = &aMem[pOp
30b20 2d 3e 70 31 5d 3b 0a 20 20 70 49 6e 33 20 3d 20  ->p1];.  pIn3 = 
30b30 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a  &aMem[pOp->p3];.
30b40 20 20 69 53 65 74 20 3d 20 70 4f 70 2d 3e 70 34    iSet = pOp->p4
30b50 2e 69 3b 0a 20 20 61 73 73 65 72 74 28 20 70 49  .i;.  assert( pI
30b60 6e 33 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 49 6e  n3->flags&MEM_In
30b70 74 20 29 3b 0a 0a 20 20 2f 2a 20 49 66 20 74 68  t );..  /* If th
30b80 65 72 65 20 69 73 20 61 6e 79 74 68 69 6e 67 20  ere is anything 
30b90 6f 74 68 65 72 20 74 68 61 6e 20 61 20 72 6f 77  other than a row
30ba0 73 65 74 20 6f 62 6a 65 63 74 20 69 6e 20 6d 65  set object in me
30bb0 6d 6f 72 79 20 63 65 6c 6c 20 50 31 2c 0a 20 20  mory cell P1,.  
30bc0 2a 2a 20 64 65 6c 65 74 65 20 69 74 20 6e 6f 77  ** delete it now
30bd0 20 61 6e 64 20 69 6e 69 74 69 61 6c 69 7a 65 20   and initialize 
30be0 50 31 20 77 69 74 68 20 61 6e 20 65 6d 70 74 79  P1 with an empty
30bf0 20 72 6f 77 73 65 74 0a 20 20 2a 2f 0a 20 20 69   rowset.  */.  i
30c00 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20  f( (pIn1->flags 
30c10 26 20 4d 45 4d 5f 52 6f 77 53 65 74 29 3d 3d 30  & MEM_RowSet)==0
30c20 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56   ){.    sqlite3V
30c30 64 62 65 4d 65 6d 53 65 74 52 6f 77 53 65 74 28  dbeMemSetRowSet(
30c40 70 49 6e 31 29 3b 0a 20 20 20 20 69 66 28 20 28  pIn1);.    if( (
30c50 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn1->flags & ME
30c60 4d 5f 52 6f 77 53 65 74 29 3d 3d 30 20 29 20 67  M_RowSet)==0 ) g
30c70 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a  oto no_mem;.  }.
30c80 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
30c90 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54 33 32  p4type==P4_INT32
30ca0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 69 53   );.  assert( iS
30cb0 65 74 3d 3d 2d 31 20 7c 7c 20 69 53 65 74 3e 3d  et==-1 || iSet>=
30cc0 30 20 29 3b 0a 20 20 69 66 28 20 69 53 65 74 20  0 );.  if( iSet 
30cd0 29 7b 0a 20 20 20 20 65 78 69 73 74 73 20 3d 20  ){.    exists = 
30ce0 73 71 6c 69 74 65 33 52 6f 77 53 65 74 54 65 73  sqlite3RowSetTes
30cf0 74 28 70 49 6e 31 2d 3e 75 2e 70 52 6f 77 53 65  t(pIn1->u.pRowSe
30d00 74 2c 20 69 53 65 74 2c 20 70 49 6e 33 2d 3e 75  t, iSet, pIn3->u
30d10 2e 69 29 3b 0a 20 20 20 20 56 64 62 65 42 72 61  .i);.    VdbeBra
30d20 6e 63 68 54 61 6b 65 6e 28 65 78 69 73 74 73 21  nchTaken(exists!
30d30 3d 30 2c 32 29 3b 0a 20 20 20 20 69 66 28 20 65  =0,2);.    if( e
30d40 78 69 73 74 73 20 29 20 67 6f 74 6f 20 6a 75 6d  xists ) goto jum
30d50 70 5f 74 6f 5f 70 32 3b 0a 20 20 7d 0a 20 20 69  p_to_p2;.  }.  i
30d60 66 28 20 69 53 65 74 3e 3d 30 20 29 7b 0a 20 20  f( iSet>=0 ){.  
30d70 20 20 73 71 6c 69 74 65 33 52 6f 77 53 65 74 49    sqlite3RowSetI
30d80 6e 73 65 72 74 28 70 49 6e 31 2d 3e 75 2e 70 52  nsert(pIn1->u.pR
30d90 6f 77 53 65 74 2c 20 70 49 6e 33 2d 3e 75 2e 69  owSet, pIn3->u.i
30da0 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  );.  }.  break;.
30db0 7d 0a 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  }...#ifndef SQLI
30dc0 54 45 5f 4f 4d 49 54 5f 54 52 49 47 47 45 52 0a  TE_OMIT_TRIGGER.
30dd0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 50 72 6f 67  ./* Opcode: Prog
30de0 72 61 6d 20 50 31 20 50 32 20 50 33 20 50 34 20  ram P1 P2 P3 P4 
30df0 50 35 0a 2a 2a 0a 2a 2a 20 45 78 65 63 75 74 65  P5.**.** Execute
30e00 20 74 68 65 20 74 72 69 67 67 65 72 20 70 72 6f   the trigger pro
30e10 67 72 61 6d 20 70 61 73 73 65 64 20 61 73 20 50  gram passed as P
30e20 34 20 28 74 79 70 65 20 50 34 5f 53 55 42 50 52  4 (type P4_SUBPR
30e30 4f 47 52 41 4d 29 2e 20 0a 2a 2a 0a 2a 2a 20 50  OGRAM). .**.** P
30e40 31 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 61  1 contains the a
30e50 64 64 72 65 73 73 20 6f 66 20 74 68 65 20 6d 65  ddress of the me
30e60 6d 6f 72 79 20 63 65 6c 6c 20 74 68 61 74 20 63  mory cell that c
30e70 6f 6e 74 61 69 6e 73 20 74 68 65 20 66 69 72 73  ontains the firs
30e80 74 20 6d 65 6d 6f 72 79 20 0a 2a 2a 20 63 65 6c  t memory .** cel
30e90 6c 20 69 6e 20 61 6e 20 61 72 72 61 79 20 6f 66  l in an array of
30ea0 20 76 61 6c 75 65 73 20 75 73 65 64 20 61 73 20   values used as 
30eb0 61 72 67 75 6d 65 6e 74 73 20 74 6f 20 74 68 65  arguments to the
30ec0 20 73 75 62 2d 70 72 6f 67 72 61 6d 2e 20 50 32   sub-program. P2
30ed0 20 0a 2a 2a 20 63 6f 6e 74 61 69 6e 73 20 74 68   .** contains th
30ee0 65 20 61 64 64 72 65 73 73 20 74 6f 20 6a 75 6d  e address to jum
30ef0 70 20 74 6f 20 69 66 20 74 68 65 20 73 75 62 2d  p to if the sub-
30f00 70 72 6f 67 72 61 6d 20 74 68 72 6f 77 73 20 61  program throws a
30f10 6e 20 49 47 4e 4f 52 45 20 0a 2a 2a 20 65 78 63  n IGNORE .** exc
30f20 65 70 74 69 6f 6e 20 75 73 69 6e 67 20 74 68 65  eption using the
30f30 20 52 41 49 53 45 28 29 20 66 75 6e 63 74 69 6f   RAISE() functio
30f40 6e 2e 20 52 65 67 69 73 74 65 72 20 50 33 20 63  n. Register P3 c
30f50 6f 6e 74 61 69 6e 73 20 74 68 65 20 61 64 64 72  ontains the addr
30f60 65 73 73 20 0a 2a 2a 20 6f 66 20 61 20 6d 65 6d  ess .** of a mem
30f70 6f 72 79 20 63 65 6c 6c 20 69 6e 20 74 68 69 73  ory cell in this
30f80 20 28 74 68 65 20 70 61 72 65 6e 74 29 20 56 4d   (the parent) VM
30f90 20 74 68 61 74 20 69 73 20 75 73 65 64 20 74 6f   that is used to
30fa0 20 61 6c 6c 6f 63 61 74 65 20 74 68 65 20 0a 2a   allocate the .*
30fb0 2a 20 6d 65 6d 6f 72 79 20 72 65 71 75 69 72 65  * memory require
30fc0 64 20 62 79 20 74 68 65 20 73 75 62 2d 76 64 62  d by the sub-vdb
30fd0 65 20 61 74 20 72 75 6e 74 69 6d 65 2e 0a 2a 2a  e at runtime..**
30fe0 0a 2a 2a 20 50 34 20 69 73 20 61 20 70 6f 69 6e  .** P4 is a poin
30ff0 74 65 72 20 74 6f 20 74 68 65 20 56 4d 20 63 6f  ter to the VM co
31000 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 74 72 69  ntaining the tri
31010 67 67 65 72 20 70 72 6f 67 72 61 6d 2e 0a 2a 2a  gger program..**
31020 0a 2a 2a 20 49 66 20 50 35 20 69 73 20 6e 6f 6e  .** If P5 is non
31030 2d 7a 65 72 6f 2c 20 74 68 65 6e 20 72 65 63 75  -zero, then recu
31040 72 73 69 76 65 20 70 72 6f 67 72 61 6d 20 69 6e  rsive program in
31050 76 6f 63 61 74 69 6f 6e 20 69 73 20 65 6e 61 62  vocation is enab
31060 6c 65 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  led..*/.case OP_
31070 50 72 6f 67 72 61 6d 3a 20 7b 20 20 20 20 20 20  Program: {      
31080 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 69    /* jump */.  i
31090 6e 74 20 6e 4d 65 6d 3b 20 20 20 20 20 20 20 20  nt nMem;        
310a0 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
310b0 20 6f 66 20 6d 65 6d 6f 72 79 20 72 65 67 69 73   of memory regis
310c0 74 65 72 73 20 66 6f 72 20 73 75 62 2d 70 72 6f  ters for sub-pro
310d0 67 72 61 6d 20 2a 2f 0a 20 20 69 6e 74 20 6e 42  gram */.  int nB
310e0 79 74 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  yte;            
310f0 20 20 2f 2a 20 42 79 74 65 73 20 6f 66 20 72 75    /* Bytes of ru
31100 6e 74 69 6d 65 20 73 70 61 63 65 20 72 65 71 75  ntime space requ
31110 69 72 65 64 20 66 6f 72 20 73 75 62 2d 70 72 6f  ired for sub-pro
31120 67 72 61 6d 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70  gram */.  Mem *p
31130 52 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  Rt;             
31140 20 20 2f 2a 20 52 65 67 69 73 74 65 72 20 74 6f    /* Register to
31150 20 61 6c 6c 6f 63 61 74 65 20 72 75 6e 74 69 6d   allocate runtim
31160 65 20 73 70 61 63 65 20 2a 2f 0a 20 20 4d 65 6d  e space */.  Mem
31170 20 2a 70 4d 65 6d 3b 20 20 20 20 20 20 20 20 20   *pMem;         
31180 20 20 20 20 20 2f 2a 20 55 73 65 64 20 74 6f 20       /* Used to 
31190 69 74 65 72 61 74 65 20 74 68 72 6f 75 67 68 20  iterate through 
311a0 6d 65 6d 6f 72 79 20 63 65 6c 6c 73 20 2a 2f 0a  memory cells */.
311b0 20 20 4d 65 6d 20 2a 70 45 6e 64 3b 20 20 20 20    Mem *pEnd;    
311c0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 61 73            /* Las
311d0 74 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 69 6e  t memory cell in
311e0 20 6e 65 77 20 61 72 72 61 79 20 2a 2f 0a 20 20   new array */.  
311f0 56 64 62 65 46 72 61 6d 65 20 2a 70 46 72 61 6d  VdbeFrame *pFram
31200 65 3b 20 20 20 20 20 20 2f 2a 20 4e 65 77 20 76  e;      /* New v
31210 64 62 65 20 66 72 61 6d 65 20 74 6f 20 65 78 65  dbe frame to exe
31220 63 75 74 65 20 69 6e 20 2a 2f 0a 20 20 53 75 62  cute in */.  Sub
31230 50 72 6f 67 72 61 6d 20 2a 70 50 72 6f 67 72 61  Program *pProgra
31240 6d 3b 20 20 20 2f 2a 20 53 75 62 2d 70 72 6f 67  m;   /* Sub-prog
31250 72 61 6d 20 74 6f 20 65 78 65 63 75 74 65 20 2a  ram to execute *
31260 2f 0a 20 20 76 6f 69 64 20 2a 74 3b 20 20 20 20  /.  void *t;    
31270 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
31280 6f 6b 65 6e 20 69 64 65 6e 74 69 66 79 69 6e 67  oken identifying
31290 20 74 72 69 67 67 65 72 20 2a 2f 0a 0a 20 20 70   trigger */..  p
312a0 50 72 6f 67 72 61 6d 20 3d 20 70 4f 70 2d 3e 70  Program = pOp->p
312b0 34 2e 70 50 72 6f 67 72 61 6d 3b 0a 20 20 70 52  4.pProgram;.  pR
312c0 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  t = &aMem[pOp->p
312d0 33 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 50  3];.  assert( pP
312e0 72 6f 67 72 61 6d 2d 3e 6e 4f 70 3e 30 20 29 3b  rogram->nOp>0 );
312f0 0a 20 20 0a 20 20 2f 2a 20 49 66 20 74 68 65 20  .  .  /* If the 
31300 70 35 20 66 6c 61 67 20 69 73 20 63 6c 65 61 72  p5 flag is clear
31310 2c 20 74 68 65 6e 20 72 65 63 75 72 73 69 76 65  , then recursive
31320 20 69 6e 76 6f 63 61 74 69 6f 6e 20 6f 66 20 74   invocation of t
31330 72 69 67 67 65 72 73 20 69 73 20 0a 20 20 2a 2a  riggers is .  **
31340 20 64 69 73 61 62 6c 65 64 20 66 6f 72 20 62 61   disabled for ba
31350 63 6b 77 61 72 64 73 20 63 6f 6d 70 61 74 69 62  ckwards compatib
31360 69 6c 69 74 79 20 28 70 35 20 69 73 20 73 65 74  ility (p5 is set
31370 20 69 66 20 74 68 69 73 20 73 75 62 2d 70 72 6f   if this sub-pro
31380 67 72 61 6d 0a 20 20 2a 2a 20 69 73 20 72 65 61  gram.  ** is rea
31390 6c 6c 79 20 61 20 74 72 69 67 67 65 72 2c 20 6e  lly a trigger, n
313a0 6f 74 20 61 20 66 6f 72 65 69 67 6e 20 6b 65 79  ot a foreign key
313b0 20 61 63 74 69 6f 6e 2c 20 61 6e 64 20 74 68 65   action, and the
313c0 20 66 6c 61 67 20 73 65 74 0a 20 20 2a 2a 20 61   flag set.  ** a
313d0 6e 64 20 63 6c 65 61 72 65 64 20 62 79 20 74 68  nd cleared by th
313e0 65 20 22 50 52 41 47 4d 41 20 72 65 63 75 72 73  e "PRAGMA recurs
313f0 69 76 65 5f 74 72 69 67 67 65 72 73 22 20 63 6f  ive_triggers" co
31400 6d 6d 61 6e 64 20 69 73 20 63 6c 65 61 72 29 2e  mmand is clear).
31410 0a 20 20 2a 2a 20 0a 20 20 2a 2a 20 49 74 20 69  .  ** .  ** It i
31420 73 20 72 65 63 75 72 73 69 76 65 20 69 6e 76 6f  s recursive invo
31430 63 61 74 69 6f 6e 20 6f 66 20 74 72 69 67 67 65  cation of trigge
31440 72 73 2c 20 61 74 20 74 68 65 20 53 51 4c 20 6c  rs, at the SQL l
31450 65 76 65 6c 2c 20 74 68 61 74 20 69 73 20 0a 20  evel, that is . 
31460 20 2a 2a 20 64 69 73 61 62 6c 65 64 2e 20 49 6e   ** disabled. In
31470 20 73 6f 6d 65 20 63 61 73 65 73 20 61 20 73 69   some cases a si
31480 6e 67 6c 65 20 74 72 69 67 67 65 72 20 6d 61 79  ngle trigger may
31490 20 67 65 6e 65 72 61 74 65 20 6d 6f 72 65 20 74   generate more t
314a0 68 61 6e 20 6f 6e 65 20 0a 20 20 2a 2a 20 53 75  han one .  ** Su
314b0 62 50 72 6f 67 72 61 6d 20 28 69 66 20 74 68 65  bProgram (if the
314c0 20 74 72 69 67 67 65 72 20 6d 61 79 20 62 65 20   trigger may be 
314d0 65 78 65 63 75 74 65 64 20 77 69 74 68 20 6d 6f  executed with mo
314e0 72 65 20 74 68 61 6e 20 6f 6e 65 20 64 69 66 66  re than one diff
314f0 65 72 65 6e 74 20 0a 20 20 2a 2a 20 4f 4e 20 43  erent .  ** ON C
31500 4f 4e 46 4c 49 43 54 20 61 6c 67 6f 72 69 74 68  ONFLICT algorith
31510 6d 29 2e 20 53 75 62 50 72 6f 67 72 61 6d 20 73  m). SubProgram s
31520 74 72 75 63 74 75 72 65 73 20 61 73 73 6f 63 69  tructures associ
31530 61 74 65 64 20 77 69 74 68 20 61 0a 20 20 2a 2a  ated with a.  **
31540 20 73 69 6e 67 6c 65 20 74 72 69 67 67 65 72 20   single trigger 
31550 61 6c 6c 20 68 61 76 65 20 74 68 65 20 73 61 6d  all have the sam
31560 65 20 76 61 6c 75 65 20 66 6f 72 20 74 68 65 20  e value for the 
31570 53 75 62 50 72 6f 67 72 61 6d 2e 74 6f 6b 65 6e  SubProgram.token
31580 20 0a 20 20 2a 2a 20 76 61 72 69 61 62 6c 65 2e   .  ** variable.
31590 20 20 2a 2f 0a 20 20 69 66 28 20 70 4f 70 2d 3e    */.  if( pOp->
315a0 70 35 20 29 7b 0a 20 20 20 20 74 20 3d 20 70 50  p5 ){.    t = pP
315b0 72 6f 67 72 61 6d 2d 3e 74 6f 6b 65 6e 3b 0a 20  rogram->token;. 
315c0 20 20 20 66 6f 72 28 70 46 72 61 6d 65 3d 70 2d     for(pFrame=p-
315d0 3e 70 46 72 61 6d 65 3b 20 70 46 72 61 6d 65 20  >pFrame; pFrame 
315e0 26 26 20 70 46 72 61 6d 65 2d 3e 74 6f 6b 65 6e  && pFrame->token
315f0 21 3d 74 3b 20 70 46 72 61 6d 65 3d 70 46 72 61  !=t; pFrame=pFra
31600 6d 65 2d 3e 70 50 61 72 65 6e 74 29 3b 0a 20 20  me->pParent);.  
31610 20 20 69 66 28 20 70 46 72 61 6d 65 20 29 20 62    if( pFrame ) b
31620 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20 69 66 28  reak;.  }..  if(
31630 20 70 2d 3e 6e 46 72 61 6d 65 3e 3d 64 62 2d 3e   p->nFrame>=db->
31640 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4c 49  aLimit[SQLITE_LI
31650 4d 49 54 5f 54 52 49 47 47 45 52 5f 44 45 50 54  MIT_TRIGGER_DEPT
31660 48 5d 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 53  H] ){.    rc = S
31670 51 4c 49 54 45 5f 45 52 52 4f 52 3b 0a 20 20 20  QLITE_ERROR;.   
31680 20 73 71 6c 69 74 65 33 56 64 62 65 45 72 72 6f   sqlite3VdbeErro
31690 72 28 70 2c 20 22 74 6f 6f 20 6d 61 6e 79 20 6c  r(p, "too many l
316a0 65 76 65 6c 73 20 6f 66 20 74 72 69 67 67 65 72  evels of trigger
316b0 20 72 65 63 75 72 73 69 6f 6e 22 29 3b 0a 20 20   recursion");.  
316c0 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65    goto abort_due
316d0 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 7d 0a 0a  _to_error;.  }..
316e0 20 20 2f 2a 20 52 65 67 69 73 74 65 72 20 70 52    /* Register pR
316f0 74 20 69 73 20 75 73 65 64 20 74 6f 20 73 74 6f  t is used to sto
31700 72 65 20 74 68 65 20 6d 65 6d 6f 72 79 20 72 65  re the memory re
31710 71 75 69 72 65 64 20 74 6f 20 73 61 76 65 20 74  quired to save t
31720 68 65 20 73 74 61 74 65 0a 20 20 2a 2a 20 6f 66  he state.  ** of
31730 20 74 68 65 20 63 75 72 72 65 6e 74 20 70 72 6f   the current pro
31740 67 72 61 6d 2c 20 61 6e 64 20 74 68 65 20 6d 65  gram, and the me
31750 6d 6f 72 79 20 72 65 71 75 69 72 65 64 20 61 74  mory required at
31760 20 72 75 6e 74 69 6d 65 20 74 6f 20 65 78 65 63   runtime to exec
31770 75 74 65 0a 20 20 2a 2a 20 74 68 65 20 74 72 69  ute.  ** the tri
31780 67 67 65 72 20 70 72 6f 67 72 61 6d 2e 20 49 66  gger program. If
31790 20 74 68 69 73 20 74 72 69 67 67 65 72 20 68 61   this trigger ha
317a0 73 20 62 65 65 6e 20 66 69 72 65 64 20 62 65 66  s been fired bef
317b0 6f 72 65 2c 20 74 68 65 6e 20 70 52 74 20 0a 20  ore, then pRt . 
317c0 20 2a 2a 20 69 73 20 61 6c 72 65 61 64 79 20 61   ** is already a
317d0 6c 6c 6f 63 61 74 65 64 2e 20 4f 74 68 65 72 77  llocated. Otherw
317e0 69 73 65 2c 20 69 74 20 6d 75 73 74 20 62 65 20  ise, it must be 
317f0 69 6e 69 74 69 61 6c 69 7a 65 64 2e 20 20 2a 2f  initialized.  */
31800 0a 20 20 69 66 28 20 28 70 52 74 2d 3e 66 6c 61  .  if( (pRt->fla
31810 67 73 26 4d 45 4d 5f 46 72 61 6d 65 29 3d 3d 30  gs&MEM_Frame)==0
31820 20 29 7b 0a 20 20 20 20 2f 2a 20 53 75 62 50 72   ){.    /* SubPr
31830 6f 67 72 61 6d 2e 6e 4d 65 6d 20 69 73 20 73 65  ogram.nMem is se
31840 74 20 74 6f 20 74 68 65 20 6e 75 6d 62 65 72 20  t to the number 
31850 6f 66 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 73 20  of memory cells 
31860 75 73 65 64 20 62 79 20 74 68 65 20 0a 20 20 20  used by the .   
31870 20 2a 2a 20 70 72 6f 67 72 61 6d 20 73 74 6f 72   ** program stor
31880 65 64 20 69 6e 20 53 75 62 50 72 6f 67 72 61 6d  ed in SubProgram
31890 2e 61 4f 70 2e 20 41 73 20 77 65 6c 6c 20 61 73  .aOp. As well as
318a0 20 74 68 65 73 65 2c 20 6f 6e 65 20 6d 65 6d 6f   these, one memo
318b0 72 79 0a 20 20 20 20 2a 2a 20 63 65 6c 6c 20 69  ry.    ** cell i
318c0 73 20 72 65 71 75 69 72 65 64 20 66 6f 72 20 65  s required for e
318d0 61 63 68 20 63 75 72 73 6f 72 20 75 73 65 64 20  ach cursor used 
318e0 62 79 20 74 68 65 20 70 72 6f 67 72 61 6d 2e 20  by the program. 
318f0 53 65 74 20 6c 6f 63 61 6c 0a 20 20 20 20 2a 2a  Set local.    **
31900 20 76 61 72 69 61 62 6c 65 20 6e 4d 65 6d 20 28   variable nMem (
31910 61 6e 64 20 6c 61 74 65 72 2c 20 56 64 62 65 46  and later, VdbeF
31920 72 61 6d 65 2e 6e 43 68 69 6c 64 4d 65 6d 29 20  rame.nChildMem) 
31930 74 6f 20 74 68 69 73 20 76 61 6c 75 65 2e 0a 20  to this value.. 
31940 20 20 20 2a 2f 0a 20 20 20 20 6e 4d 65 6d 20 3d     */.    nMem =
31950 20 70 50 72 6f 67 72 61 6d 2d 3e 6e 4d 65 6d 20   pProgram->nMem 
31960 2b 20 70 50 72 6f 67 72 61 6d 2d 3e 6e 43 73 72  + pProgram->nCsr
31970 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 6e 4d  ;.    assert( nM
31980 65 6d 3e 30 20 29 3b 0a 20 20 20 20 69 66 28 20  em>0 );.    if( 
31990 70 50 72 6f 67 72 61 6d 2d 3e 6e 43 73 72 3d 3d  pProgram->nCsr==
319a0 30 20 29 20 6e 4d 65 6d 2b 2b 3b 0a 20 20 20 20  0 ) nMem++;.    
319b0 6e 42 79 74 65 20 3d 20 52 4f 55 4e 44 38 28 73  nByte = ROUND8(s
319c0 69 7a 65 6f 66 28 56 64 62 65 46 72 61 6d 65 29  izeof(VdbeFrame)
319d0 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ).              
319e0 2b 20 6e 4d 65 6d 20 2a 20 73 69 7a 65 6f 66 28  + nMem * sizeof(
319f0 4d 65 6d 29 0a 20 20 20 20 20 20 20 20 20 20 20  Mem).           
31a00 20 20 20 2b 20 70 50 72 6f 67 72 61 6d 2d 3e 6e     + pProgram->n
31a10 43 73 72 20 2a 20 73 69 7a 65 6f 66 28 56 64 62  Csr * sizeof(Vdb
31a20 65 43 75 72 73 6f 72 2a 29 0a 20 20 20 20 20 20  eCursor*).      
31a30 20 20 20 20 20 20 20 20 2b 20 28 70 50 72 6f 67          + (pProg
31a40 72 61 6d 2d 3e 6e 4f 70 20 2b 20 37 29 2f 38 3b  ram->nOp + 7)/8;
31a50 0a 20 20 20 20 70 46 72 61 6d 65 20 3d 20 73 71  .    pFrame = sq
31a60 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 5a 65 72  lite3DbMallocZer
31a70 6f 28 64 62 2c 20 6e 42 79 74 65 29 3b 0a 20 20  o(db, nByte);.  
31a80 20 20 69 66 28 20 21 70 46 72 61 6d 65 20 29 7b    if( !pFrame ){
31a90 0a 20 20 20 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d  .      goto no_m
31aa0 65 6d 3b 0a 20 20 20 20 7d 0a 20 20 20 20 73 71  em;.    }.    sq
31ab0 6c 69 74 65 33 56 64 62 65 4d 65 6d 52 65 6c 65  lite3VdbeMemRele
31ac0 61 73 65 28 70 52 74 29 3b 0a 20 20 20 20 70 52  ase(pRt);.    pR
31ad0 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 46  t->flags = MEM_F
31ae0 72 61 6d 65 3b 0a 20 20 20 20 70 52 74 2d 3e 75  rame;.    pRt->u
31af0 2e 70 46 72 61 6d 65 20 3d 20 70 46 72 61 6d 65  .pFrame = pFrame
31b00 3b 0a 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 76  ;..    pFrame->v
31b10 20 3d 20 70 3b 0a 20 20 20 20 70 46 72 61 6d 65   = p;.    pFrame
31b20 2d 3e 6e 43 68 69 6c 64 4d 65 6d 20 3d 20 6e 4d  ->nChildMem = nM
31b30 65 6d 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e  em;.    pFrame->
31b40 6e 43 68 69 6c 64 43 73 72 20 3d 20 70 50 72 6f  nChildCsr = pPro
31b50 67 72 61 6d 2d 3e 6e 43 73 72 3b 0a 20 20 20 20  gram->nCsr;.    
31b60 70 46 72 61 6d 65 2d 3e 70 63 20 3d 20 28 69 6e  pFrame->pc = (in
31b70 74 29 28 70 4f 70 20 2d 20 61 4f 70 29 3b 0a 20  t)(pOp - aOp);. 
31b80 20 20 20 70 46 72 61 6d 65 2d 3e 61 4d 65 6d 20     pFrame->aMem 
31b90 3d 20 70 2d 3e 61 4d 65 6d 3b 0a 20 20 20 20 70  = p->aMem;.    p
31ba0 46 72 61 6d 65 2d 3e 6e 4d 65 6d 20 3d 20 70 2d  Frame->nMem = p-
31bb0 3e 6e 4d 65 6d 3b 0a 20 20 20 20 70 46 72 61 6d  >nMem;.    pFram
31bc0 65 2d 3e 61 70 43 73 72 20 3d 20 70 2d 3e 61 70  e->apCsr = p->ap
31bd0 43 73 72 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d  Csr;.    pFrame-
31be0 3e 6e 43 75 72 73 6f 72 20 3d 20 70 2d 3e 6e 43  >nCursor = p->nC
31bf0 75 72 73 6f 72 3b 0a 20 20 20 20 70 46 72 61 6d  ursor;.    pFram
31c00 65 2d 3e 61 4f 70 20 3d 20 70 2d 3e 61 4f 70 3b  e->aOp = p->aOp;
31c10 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 6e 4f 70  .    pFrame->nOp
31c20 20 3d 20 70 2d 3e 6e 4f 70 3b 0a 20 20 20 20 70   = p->nOp;.    p
31c30 46 72 61 6d 65 2d 3e 74 6f 6b 65 6e 20 3d 20 70  Frame->token = p
31c40 50 72 6f 67 72 61 6d 2d 3e 74 6f 6b 65 6e 3b 0a  Program->token;.
31c50 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e  #ifdef SQLITE_EN
31c60 41 42 4c 45 5f 53 54 4d 54 5f 53 43 41 4e 53 54  ABLE_STMT_SCANST
31c70 41 54 55 53 0a 20 20 20 20 70 46 72 61 6d 65 2d  ATUS.    pFrame-
31c80 3e 61 6e 45 78 65 63 20 3d 20 70 2d 3e 61 6e 45  >anExec = p->anE
31c90 78 65 63 3b 0a 23 65 6e 64 69 66 0a 0a 20 20 20  xec;.#endif..   
31ca0 20 70 45 6e 64 20 3d 20 26 56 64 62 65 46 72 61   pEnd = &VdbeFra
31cb0 6d 65 4d 65 6d 28 70 46 72 61 6d 65 29 5b 70 46  meMem(pFrame)[pF
31cc0 72 61 6d 65 2d 3e 6e 43 68 69 6c 64 4d 65 6d 5d  rame->nChildMem]
31cd0 3b 0a 20 20 20 20 66 6f 72 28 70 4d 65 6d 3d 56  ;.    for(pMem=V
31ce0 64 62 65 46 72 61 6d 65 4d 65 6d 28 70 46 72 61  dbeFrameMem(pFra
31cf0 6d 65 29 3b 20 70 4d 65 6d 21 3d 70 45 6e 64 3b  me); pMem!=pEnd;
31d00 20 70 4d 65 6d 2b 2b 29 7b 0a 20 20 20 20 20 20   pMem++){.      
31d10 70 4d 65 6d 2d 3e 66 6c 61 67 73 20 3d 20 4d 45  pMem->flags = ME
31d20 4d 5f 55 6e 64 65 66 69 6e 65 64 3b 0a 20 20 20  M_Undefined;.   
31d30 20 20 20 70 4d 65 6d 2d 3e 64 62 20 3d 20 64 62     pMem->db = db
31d40 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b  ;.    }.  }else{
31d50 0a 20 20 20 20 70 46 72 61 6d 65 20 3d 20 70 52  .    pFrame = pR
31d60 74 2d 3e 75 2e 70 46 72 61 6d 65 3b 0a 20 20 20  t->u.pFrame;.   
31d70 20 61 73 73 65 72 74 28 20 70 50 72 6f 67 72 61   assert( pProgra
31d80 6d 2d 3e 6e 4d 65 6d 2b 70 50 72 6f 67 72 61 6d  m->nMem+pProgram
31d90 2d 3e 6e 43 73 72 3d 3d 70 46 72 61 6d 65 2d 3e  ->nCsr==pFrame->
31da0 6e 43 68 69 6c 64 4d 65 6d 20 0a 20 20 20 20 20  nChildMem .     
31db0 20 20 20 7c 7c 20 28 70 50 72 6f 67 72 61 6d 2d     || (pProgram-
31dc0 3e 6e 43 73 72 3d 3d 30 20 26 26 20 70 50 72 6f  >nCsr==0 && pPro
31dd0 67 72 61 6d 2d 3e 6e 4d 65 6d 2b 31 3d 3d 70 46  gram->nMem+1==pF
31de0 72 61 6d 65 2d 3e 6e 43 68 69 6c 64 4d 65 6d 29  rame->nChildMem)
31df0 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20   );.    assert( 
31e00 70 50 72 6f 67 72 61 6d 2d 3e 6e 43 73 72 3d 3d  pProgram->nCsr==
31e10 70 46 72 61 6d 65 2d 3e 6e 43 68 69 6c 64 43 73  pFrame->nChildCs
31e20 72 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  r );.    assert(
31e30 20 28 69 6e 74 29 28 70 4f 70 20 2d 20 61 4f 70   (int)(pOp - aOp
31e40 29 3d 3d 70 46 72 61 6d 65 2d 3e 70 63 20 29 3b  )==pFrame->pc );
31e50 0a 20 20 7d 0a 0a 20 20 70 2d 3e 6e 46 72 61 6d  .  }..  p->nFram
31e60 65 2b 2b 3b 0a 20 20 70 46 72 61 6d 65 2d 3e 70  e++;.  pFrame->p
31e70 50 61 72 65 6e 74 20 3d 20 70 2d 3e 70 46 72 61  Parent = p->pFra
31e80 6d 65 3b 0a 20 20 70 46 72 61 6d 65 2d 3e 6c 61  me;.  pFrame->la
31e90 73 74 52 6f 77 69 64 20 3d 20 64 62 2d 3e 6c 61  stRowid = db->la
31ea0 73 74 52 6f 77 69 64 3b 0a 20 20 70 46 72 61 6d  stRowid;.  pFram
31eb0 65 2d 3e 6e 43 68 61 6e 67 65 20 3d 20 70 2d 3e  e->nChange = p->
31ec0 6e 43 68 61 6e 67 65 3b 0a 20 20 70 46 72 61 6d  nChange;.  pFram
31ed0 65 2d 3e 6e 44 62 43 68 61 6e 67 65 20 3d 20 70  e->nDbChange = p
31ee0 2d 3e 64 62 2d 3e 6e 43 68 61 6e 67 65 3b 0a 20  ->db->nChange;. 
31ef0 20 61 73 73 65 72 74 28 20 70 46 72 61 6d 65 2d   assert( pFrame-
31f00 3e 70 41 75 78 44 61 74 61 3d 3d 30 20 29 3b 0a  >pAuxData==0 );.
31f10 20 20 70 46 72 61 6d 65 2d 3e 70 41 75 78 44 61    pFrame->pAuxDa
31f20 74 61 20 3d 20 70 2d 3e 70 41 75 78 44 61 74 61  ta = p->pAuxData
31f30 3b 0a 20 20 70 2d 3e 70 41 75 78 44 61 74 61 20  ;.  p->pAuxData 
31f40 3d 20 30 3b 0a 20 20 70 2d 3e 6e 43 68 61 6e 67  = 0;.  p->nChang
31f50 65 20 3d 20 30 3b 0a 20 20 70 2d 3e 70 46 72 61  e = 0;.  p->pFra
31f60 6d 65 20 3d 20 70 46 72 61 6d 65 3b 0a 20 20 70  me = pFrame;.  p
31f70 2d 3e 61 4d 65 6d 20 3d 20 61 4d 65 6d 20 3d 20  ->aMem = aMem = 
31f80 56 64 62 65 46 72 61 6d 65 4d 65 6d 28 70 46 72  VdbeFrameMem(pFr
31f90 61 6d 65 29 3b 0a 20 20 70 2d 3e 6e 4d 65 6d 20  ame);.  p->nMem 
31fa0 3d 20 70 46 72 61 6d 65 2d 3e 6e 43 68 69 6c 64  = pFrame->nChild
31fb0 4d 65 6d 3b 0a 20 20 70 2d 3e 6e 43 75 72 73 6f  Mem;.  p->nCurso
31fc0 72 20 3d 20 28 75 31 36 29 70 46 72 61 6d 65 2d  r = (u16)pFrame-
31fd0 3e 6e 43 68 69 6c 64 43 73 72 3b 0a 20 20 70 2d  >nChildCsr;.  p-
31fe0 3e 61 70 43 73 72 20 3d 20 28 56 64 62 65 43 75  >apCsr = (VdbeCu
31ff0 72 73 6f 72 20 2a 2a 29 26 61 4d 65 6d 5b 70 2d  rsor **)&aMem[p-
32000 3e 6e 4d 65 6d 5d 3b 0a 20 20 70 46 72 61 6d 65  >nMem];.  pFrame
32010 2d 3e 61 4f 6e 63 65 20 3d 20 28 75 38 2a 29 26  ->aOnce = (u8*)&
32020 70 2d 3e 61 70 43 73 72 5b 70 50 72 6f 67 72 61  p->apCsr[pProgra
32030 6d 2d 3e 6e 43 73 72 5d 3b 0a 20 20 6d 65 6d 73  m->nCsr];.  mems
32040 65 74 28 70 46 72 61 6d 65 2d 3e 61 4f 6e 63 65  et(pFrame->aOnce
32050 2c 20 30 2c 20 28 70 50 72 6f 67 72 61 6d 2d 3e  , 0, (pProgram->
32060 6e 4f 70 20 2b 20 37 29 2f 38 29 3b 0a 20 20 70  nOp + 7)/8);.  p
32070 2d 3e 61 4f 70 20 3d 20 61 4f 70 20 3d 20 70 50  ->aOp = aOp = pP
32080 72 6f 67 72 61 6d 2d 3e 61 4f 70 3b 0a 20 20 70  rogram->aOp;.  p
32090 2d 3e 6e 4f 70 20 3d 20 70 50 72 6f 67 72 61 6d  ->nOp = pProgram
320a0 2d 3e 6e 4f 70 3b 0a 23 69 66 64 65 66 20 53 51  ->nOp;.#ifdef SQ
320b0 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 4d 54  LITE_ENABLE_STMT
320c0 5f 53 43 41 4e 53 54 41 54 55 53 0a 20 20 70 2d  _SCANSTATUS.  p-
320d0 3e 61 6e 45 78 65 63 20 3d 20 30 3b 0a 23 65 6e  >anExec = 0;.#en
320e0 64 69 66 0a 20 20 70 4f 70 20 3d 20 26 61 4f 70  dif.  pOp = &aOp
320f0 5b 2d 31 5d 3b 0a 0a 20 20 62 72 65 61 6b 3b 0a  [-1];..  break;.
32100 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 50 61  }../* Opcode: Pa
32110 72 61 6d 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  ram P1 P2 * * *.
32120 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64  **.** This opcod
32130 65 20 69 73 20 6f 6e 6c 79 20 65 76 65 72 20 70  e is only ever p
32140 72 65 73 65 6e 74 20 69 6e 20 73 75 62 2d 70 72  resent in sub-pr
32150 6f 67 72 61 6d 73 20 63 61 6c 6c 65 64 20 76 69  ograms called vi
32160 61 20 74 68 65 20 0a 2a 2a 20 4f 50 5f 50 72 6f  a the .** OP_Pro
32170 67 72 61 6d 20 69 6e 73 74 72 75 63 74 69 6f 6e  gram instruction
32180 2e 20 43 6f 70 79 20 61 20 76 61 6c 75 65 20 63  . Copy a value c
32190 75 72 72 65 6e 74 6c 79 20 73 74 6f 72 65 64 20  urrently stored 
321a0 69 6e 20 61 20 6d 65 6d 6f 72 79 20 0a 2a 2a 20  in a memory .** 
321b0 63 65 6c 6c 20 6f 66 20 74 68 65 20 63 61 6c 6c  cell of the call
321c0 69 6e 67 20 28 70 61 72 65 6e 74 29 20 66 72 61  ing (parent) fra
321d0 6d 65 20 74 6f 20 63 65 6c 6c 20 50 32 20 69 6e  me to cell P2 in
321e0 20 74 68 65 20 63 75 72 72 65 6e 74 20 66 72 61   the current fra
321f0 6d 65 73 20 0a 2a 2a 20 61 64 64 72 65 73 73 20  mes .** address 
32200 73 70 61 63 65 2e 20 54 68 69 73 20 69 73 20 75  space. This is u
32210 73 65 64 20 62 79 20 74 72 69 67 67 65 72 20 70  sed by trigger p
32220 72 6f 67 72 61 6d 73 20 74 6f 20 61 63 63 65 73  rograms to acces
32230 73 20 74 68 65 20 6e 65 77 2e 2a 20 0a 2a 2a 20  s the new.* .** 
32240 61 6e 64 20 6f 6c 64 2e 2a 20 76 61 6c 75 65 73  and old.* values
32250 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 61 64 64 72  ..**.** The addr
32260 65 73 73 20 6f 66 20 74 68 65 20 63 65 6c 6c 20  ess of the cell 
32270 69 6e 20 74 68 65 20 70 61 72 65 6e 74 20 66 72  in the parent fr
32280 61 6d 65 20 69 73 20 64 65 74 65 72 6d 69 6e 65  ame is determine
32290 64 20 62 79 20 61 64 64 69 6e 67 0a 2a 2a 20 74  d by adding.** t
322a0 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20  he value of the 
322b0 50 31 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 74  P1 argument to t
322c0 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20  he value of the 
322d0 50 31 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 74  P1 argument to t
322e0 68 65 0a 2a 2a 20 63 61 6c 6c 69 6e 67 20 4f 50  he.** calling OP
322f0 5f 50 72 6f 67 72 61 6d 20 69 6e 73 74 72 75 63  _Program instruc
32300 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  tion..*/.case OP
32310 5f 50 61 72 61 6d 3a 20 7b 20 20 20 20 20 20 20  _Param: {       
32320 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20      /* out2 */. 
32330 20 56 64 62 65 46 72 61 6d 65 20 2a 70 46 72 61   VdbeFrame *pFra
32340 6d 65 3b 0a 20 20 4d 65 6d 20 2a 70 49 6e 3b 0a  me;.  Mem *pIn;.
32350 20 20 70 4f 75 74 20 3d 20 6f 75 74 32 50 72 65    pOut = out2Pre
32360 72 65 6c 65 61 73 65 28 70 2c 20 70 4f 70 29 3b  release(p, pOp);
32370 0a 20 20 70 46 72 61 6d 65 20 3d 20 70 2d 3e 70  .  pFrame = p->p
32380 46 72 61 6d 65 3b 0a 20 20 70 49 6e 20 3d 20 26  Frame;.  pIn = &
32390 70 46 72 61 6d 65 2d 3e 61 4d 65 6d 5b 70 4f 70  pFrame->aMem[pOp
323a0 2d 3e 70 31 20 2b 20 70 46 72 61 6d 65 2d 3e 61  ->p1 + pFrame->a
323b0 4f 70 5b 70 46 72 61 6d 65 2d 3e 70 63 5d 2e 70  Op[pFrame->pc].p
323c0 31 5d 3b 20 20 20 0a 20 20 73 71 6c 69 74 65 33  1];   .  sqlite3
323d0 56 64 62 65 4d 65 6d 53 68 61 6c 6c 6f 77 43 6f  VdbeMemShallowCo
323e0 70 79 28 70 4f 75 74 2c 20 70 49 6e 2c 20 4d 45  py(pOut, pIn, ME
323f0 4d 5f 45 70 68 65 6d 29 3b 0a 20 20 62 72 65 61  M_Ephem);.  brea
32400 6b 3b 0a 7d 0a 0a 23 65 6e 64 69 66 20 2f 2a 20  k;.}..#endif /* 
32410 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
32420 4d 49 54 5f 54 52 49 47 47 45 52 20 2a 2f 0a 0a  MIT_TRIGGER */..
32430 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
32440 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 0a  MIT_FOREIGN_KEY.
32450 2f 2a 20 4f 70 63 6f 64 65 3a 20 46 6b 43 6f 75  /* Opcode: FkCou
32460 6e 74 65 72 20 50 31 20 50 32 20 2a 20 2a 20 2a  nter P1 P2 * * *
32470 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 66 6b  .** Synopsis: fk
32480 63 74 72 5b 50 31 5d 2b 3d 50 32 0a 2a 2a 0a 2a  ctr[P1]+=P2.**.*
32490 2a 20 49 6e 63 72 65 6d 65 6e 74 20 61 20 22 63  * Increment a "c
324a0 6f 6e 73 74 72 61 69 6e 74 20 63 6f 75 6e 74 65  onstraint counte
324b0 72 22 20 62 79 20 50 32 20 28 50 32 20 6d 61 79  r" by P2 (P2 may
324c0 20 62 65 20 6e 65 67 61 74 69 76 65 20 6f 72 20   be negative or 
324d0 70 6f 73 69 74 69 76 65 29 2e 0a 2a 2a 20 49 66  positive)..** If
324e0 20 50 31 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c   P1 is non-zero,
324f0 20 74 68 65 20 64 61 74 61 62 61 73 65 20 63 6f   the database co
32500 6e 73 74 72 61 69 6e 74 20 63 6f 75 6e 74 65 72  nstraint counter
32510 20 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 20   is incremented 
32520 0a 2a 2a 20 28 64 65 66 65 72 72 65 64 20 66 6f  .** (deferred fo
32530 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72  reign key constr
32540 61 69 6e 74 73 29 2e 20 4f 74 68 65 72 77 69 73  aints). Otherwis
32550 65 2c 20 69 66 20 50 31 20 69 73 20 7a 65 72 6f  e, if P1 is zero
32560 2c 20 74 68 65 20 0a 2a 2a 20 73 74 61 74 65 6d  , the .** statem
32570 65 6e 74 20 63 6f 75 6e 74 65 72 20 69 73 20 69  ent counter is i
32580 6e 63 72 65 6d 65 6e 74 65 64 20 28 69 6d 6d 65  ncremented (imme
32590 64 69 61 74 65 20 66 6f 72 65 69 67 6e 20 6b 65  diate foreign ke
325a0 79 20 63 6f 6e 73 74 72 61 69 6e 74 73 29 2e 0a  y constraints)..
325b0 2a 2f 0a 63 61 73 65 20 4f 50 5f 46 6b 43 6f 75  */.case OP_FkCou
325c0 6e 74 65 72 3a 20 7b 0a 20 20 69 66 28 20 64 62  nter: {.  if( db
325d0 2d 3e 66 6c 61 67 73 20 26 20 53 51 4c 49 54 45  ->flags & SQLITE
325e0 5f 44 65 66 65 72 46 4b 73 20 29 7b 0a 20 20 20  _DeferFKs ){.   
325f0 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 49 6d   db->nDeferredIm
32600 6d 43 6f 6e 73 20 2b 3d 20 70 4f 70 2d 3e 70 32  mCons += pOp->p2
32610 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 70 4f  ;.  }else if( pO
32620 70 2d 3e 70 31 20 29 7b 0a 20 20 20 20 64 62 2d  p->p1 ){.    db-
32630 3e 6e 44 65 66 65 72 72 65 64 43 6f 6e 73 20 2b  >nDeferredCons +
32640 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 7d 65 6c  = pOp->p2;.  }el
32650 73 65 7b 0a 20 20 20 20 70 2d 3e 6e 46 6b 43 6f  se{.    p->nFkCo
32660 6e 73 74 72 61 69 6e 74 20 2b 3d 20 70 4f 70 2d  nstraint += pOp-
32670 3e 70 32 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  >p2;.  }.  break
32680 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
32690 46 6b 49 66 5a 65 72 6f 20 50 31 20 50 32 20 2a  FkIfZero P1 P2 *
326a0 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73   * *.** Synopsis
326b0 3a 20 69 66 20 66 6b 63 74 72 5b 50 31 5d 3d 3d  : if fkctr[P1]==
326c0 30 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20  0 goto P2.**.** 
326d0 54 68 69 73 20 6f 70 63 6f 64 65 20 74 65 73 74  This opcode test
326e0 73 20 69 66 20 61 20 66 6f 72 65 69 67 6e 20 6b  s if a foreign k
326f0 65 79 20 63 6f 6e 73 74 72 61 69 6e 74 2d 63 6f  ey constraint-co
32700 75 6e 74 65 72 20 69 73 20 63 75 72 72 65 6e 74  unter is current
32710 6c 79 20 7a 65 72 6f 2e 0a 2a 2a 20 49 66 20 73  ly zero..** If s
32720 6f 2c 20 6a 75 6d 70 20 74 6f 20 69 6e 73 74 72  o, jump to instr
32730 75 63 74 69 6f 6e 20 50 32 2e 20 4f 74 68 65 72  uction P2. Other
32740 77 69 73 65 2c 20 66 61 6c 6c 20 74 68 72 6f 75  wise, fall throu
32750 67 68 20 74 6f 20 74 68 65 20 6e 65 78 74 20 0a  gh to the next .
32760 2a 2a 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a  ** instruction..
32770 2a 2a 0a 2a 2a 20 49 66 20 50 31 20 69 73 20 6e  **.** If P1 is n
32780 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65 6e 20 74 68  on-zero, then th
32790 65 20 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e 20  e jump is taken 
327a0 69 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20  if the database 
327b0 63 6f 6e 73 74 72 61 69 6e 74 2d 63 6f 75 6e 74  constraint-count
327c0 65 72 0a 2a 2a 20 69 73 20 7a 65 72 6f 20 28 74  er.** is zero (t
327d0 68 65 20 6f 6e 65 20 74 68 61 74 20 63 6f 75 6e  he one that coun
327e0 74 73 20 64 65 66 65 72 72 65 64 20 63 6f 6e 73  ts deferred cons
327f0 74 72 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e  traint violation
32800 73 29 2e 20 49 66 20 50 31 20 69 73 0a 2a 2a 20  s). If P1 is.** 
32810 7a 65 72 6f 2c 20 74 68 65 20 6a 75 6d 70 20 69  zero, the jump i
32820 73 20 74 61 6b 65 6e 20 69 66 20 74 68 65 20 73  s taken if the s
32830 74 61 74 65 6d 65 6e 74 20 63 6f 6e 73 74 72 61  tatement constra
32840 69 6e 74 2d 63 6f 75 6e 74 65 72 20 69 73 20 7a  int-counter is z
32850 65 72 6f 0a 2a 2a 20 28 69 6d 6d 65 64 69 61 74  ero.** (immediat
32860 65 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 63 6f  e foreign key co
32870 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61 74 69  nstraint violati
32880 6f 6e 73 29 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  ons)..*/.case OP
32890 5f 46 6b 49 66 5a 65 72 6f 3a 20 7b 20 20 20 20  _FkIfZero: {    
328a0 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a       /* jump */.
328b0 20 20 69 66 28 20 70 4f 70 2d 3e 70 31 20 29 7b    if( pOp->p1 ){
328c0 0a 20 20 20 20 56 64 62 65 42 72 61 6e 63 68 54  .    VdbeBranchT
328d0 61 6b 65 6e 28 64 62 2d 3e 6e 44 65 66 65 72 72  aken(db->nDeferr
328e0 65 64 43 6f 6e 73 3d 3d 30 20 26 26 20 64 62 2d  edCons==0 && db-
328f0 3e 6e 44 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e  >nDeferredImmCon
32900 73 3d 3d 30 2c 20 32 29 3b 0a 20 20 20 20 69 66  s==0, 2);.    if
32910 28 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 43  ( db->nDeferredC
32920 6f 6e 73 3d 3d 30 20 26 26 20 64 62 2d 3e 6e 44  ons==0 && db->nD
32930 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73 3d 3d  eferredImmCons==
32940 30 20 29 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f  0 ) goto jump_to
32950 5f 70 32 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  _p2;.  }else{.  
32960 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65    VdbeBranchTake
32970 6e 28 70 2d 3e 6e 46 6b 43 6f 6e 73 74 72 61 69  n(p->nFkConstrai
32980 6e 74 3d 3d 30 20 26 26 20 64 62 2d 3e 6e 44 65  nt==0 && db->nDe
32990 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73 3d 3d 30  ferredImmCons==0
329a0 2c 20 32 29 3b 0a 20 20 20 20 69 66 28 20 70 2d  , 2);.    if( p-
329b0 3e 6e 46 6b 43 6f 6e 73 74 72 61 69 6e 74 3d 3d  >nFkConstraint==
329c0 30 20 26 26 20 64 62 2d 3e 6e 44 65 66 65 72 72  0 && db->nDeferr
329d0 65 64 49 6d 6d 43 6f 6e 73 3d 3d 30 20 29 20 67  edImmCons==0 ) g
329e0 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a  oto jump_to_p2;.
329f0 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23    }.  break;.}.#
32a00 65 6e 64 69 66 20 2f 2a 20 23 69 66 6e 64 65 66  endif /* #ifndef
32a10 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4f 52   SQLITE_OMIT_FOR
32a20 45 49 47 4e 5f 4b 45 59 20 2a 2f 0a 0a 23 69 66  EIGN_KEY */..#if
32a30 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
32a40 5f 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 0a 2f  _AUTOINCREMENT./
32a50 2a 20 4f 70 63 6f 64 65 3a 20 4d 65 6d 4d 61 78  * Opcode: MemMax
32a60 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20   P1 P2 * * *.** 
32a70 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 31 5d 3d  Synopsis: r[P1]=
32a80 6d 61 78 28 72 5b 50 31 5d 2c 72 5b 50 32 5d 29  max(r[P1],r[P2])
32a90 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 61 20 72  .**.** P1 is a r
32aa0 65 67 69 73 74 65 72 20 69 6e 20 74 68 65 20 72  egister in the r
32ab0 6f 6f 74 20 66 72 61 6d 65 20 6f 66 20 74 68 69  oot frame of thi
32ac0 73 20 56 4d 20 28 74 68 65 20 72 6f 6f 74 20 66  s VM (the root f
32ad0 72 61 6d 65 20 69 73 0a 2a 2a 20 64 69 66 66 65  rame is.** diffe
32ae0 72 65 6e 74 20 66 72 6f 6d 20 74 68 65 20 63 75  rent from the cu
32af0 72 72 65 6e 74 20 66 72 61 6d 65 20 69 66 20 74  rrent frame if t
32b00 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20  his instruction 
32b10 69 73 20 62 65 69 6e 67 20 65 78 65 63 75 74 65  is being execute
32b20 64 0a 2a 2a 20 77 69 74 68 69 6e 20 61 20 73 75  d.** within a su
32b30 62 2d 70 72 6f 67 72 61 6d 29 2e 20 53 65 74 20  b-program). Set 
32b40 74 68 65 20 76 61 6c 75 65 20 6f 66 20 72 65 67  the value of reg
32b50 69 73 74 65 72 20 50 31 20 74 6f 20 74 68 65 20  ister P1 to the 
32b60 6d 61 78 69 6d 75 6d 20 6f 66 20 0a 2a 2a 20 69  maximum of .** i
32b70 74 73 20 63 75 72 72 65 6e 74 20 76 61 6c 75 65  ts current value
32b80 20 61 6e 64 20 74 68 65 20 76 61 6c 75 65 20 69   and the value i
32b90 6e 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a  n register P2..*
32ba0 2a 0a 2a 2a 20 54 68 69 73 20 69 6e 73 74 72 75  *.** This instru
32bb0 63 74 69 6f 6e 20 74 68 72 6f 77 73 20 61 6e 20  ction throws an 
32bc0 65 72 72 6f 72 20 69 66 20 74 68 65 20 6d 65 6d  error if the mem
32bd0 6f 72 79 20 63 65 6c 6c 20 69 73 20 6e 6f 74 20  ory cell is not 
32be0 69 6e 69 74 69 61 6c 6c 79 0a 2a 2a 20 61 6e 20  initially.** an 
32bf0 69 6e 74 65 67 65 72 2e 0a 2a 2f 0a 63 61 73 65  integer..*/.case
32c00 20 4f 50 5f 4d 65 6d 4d 61 78 3a 20 7b 20 20 20   OP_MemMax: {   
32c10 20 20 20 20 20 2f 2a 20 69 6e 32 20 2a 2f 0a 20       /* in2 */. 
32c20 20 56 64 62 65 46 72 61 6d 65 20 2a 70 46 72 61   VdbeFrame *pFra
32c30 6d 65 3b 0a 20 20 69 66 28 20 70 2d 3e 70 46 72  me;.  if( p->pFr
32c40 61 6d 65 20 29 7b 0a 20 20 20 20 66 6f 72 28 70  ame ){.    for(p
32c50 46 72 61 6d 65 3d 70 2d 3e 70 46 72 61 6d 65 3b  Frame=p->pFrame;
32c60 20 70 46 72 61 6d 65 2d 3e 70 50 61 72 65 6e 74   pFrame->pParent
32c70 3b 20 70 46 72 61 6d 65 3d 70 46 72 61 6d 65 2d  ; pFrame=pFrame-
32c80 3e 70 50 61 72 65 6e 74 29 3b 0a 20 20 20 20 70  >pParent);.    p
32c90 49 6e 31 20 3d 20 26 70 46 72 61 6d 65 2d 3e 61  In1 = &pFrame->a
32ca0 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
32cb0 7d 65 6c 73 65 7b 0a 20 20 20 20 70 49 6e 31 20  }else{.    pIn1 
32cc0 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  = &aMem[pOp->p1]
32cd0 3b 0a 20 20 7d 0a 20 20 61 73 73 65 72 74 28 20  ;.  }.  assert( 
32ce0 6d 65 6d 49 73 56 61 6c 69 64 28 70 49 6e 31 29  memIsValid(pIn1)
32cf0 20 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62   );.  sqlite3Vdb
32d00 65 4d 65 6d 49 6e 74 65 67 65 72 69 66 79 28 70  eMemIntegerify(p
32d10 49 6e 31 29 3b 0a 20 20 70 49 6e 32 20 3d 20 26  In1);.  pIn2 = &
32d20 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20  aMem[pOp->p2];. 
32d30 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 49   sqlite3VdbeMemI
32d40 6e 74 65 67 65 72 69 66 79 28 70 49 6e 32 29 3b  ntegerify(pIn2);
32d50 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e 75 2e 69  .  if( pIn1->u.i
32d60 3c 70 49 6e 32 2d 3e 75 2e 69 29 7b 0a 20 20 20  <pIn2->u.i){.   
32d70 20 70 49 6e 31 2d 3e 75 2e 69 20 3d 20 70 49 6e   pIn1->u.i = pIn
32d80 32 2d 3e 75 2e 69 3b 0a 20 20 7d 0a 20 20 62 72  2->u.i;.  }.  br
32d90 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a  eak;.}.#endif /*
32da0 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54   SQLITE_OMIT_AUT
32db0 4f 49 4e 43 52 45 4d 45 4e 54 20 2a 2f 0a 0a 2f  OINCREMENT */../
32dc0 2a 20 4f 70 63 6f 64 65 3a 20 49 66 50 6f 73 20  * Opcode: IfPos 
32dd0 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20  P1 P2 P3 * *.** 
32de0 53 79 6e 6f 70 73 69 73 3a 20 69 66 20 72 5b 50  Synopsis: if r[P
32df0 31 5d 3e 30 20 74 68 65 6e 20 72 5b 50 31 5d 2d  1]>0 then r[P1]-
32e00 3d 50 33 2c 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a  =P3, goto P2.**.
32e10 2a 2a 20 52 65 67 69 73 74 65 72 20 50 31 20 6d  ** Register P1 m
32e20 75 73 74 20 63 6f 6e 74 61 69 6e 20 61 6e 20 69  ust contain an i
32e30 6e 74 65 67 65 72 2e 0a 2a 2a 20 49 66 20 74 68  nteger..** If th
32e40 65 20 76 61 6c 75 65 20 6f 66 20 72 65 67 69 73  e value of regis
32e50 74 65 72 20 50 31 20 69 73 20 31 20 6f 72 20 67  ter P1 is 1 or g
32e60 72 65 61 74 65 72 2c 20 73 75 62 74 72 61 63 74  reater, subtract
32e70 20 50 33 20 66 72 6f 6d 20 74 68 65 0a 2a 2a 20   P3 from the.** 
32e80 76 61 6c 75 65 20 69 6e 20 50 31 20 61 6e 64 20  value in P1 and 
32e90 6a 75 6d 70 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a  jump to P2..**.*
32ea0 2a 20 49 66 20 74 68 65 20 69 6e 69 74 69 61 6c  * If the initial
32eb0 20 76 61 6c 75 65 20 6f 66 20 72 65 67 69 73 74   value of regist
32ec0 65 72 20 50 31 20 69 73 20 6c 65 73 73 20 74 68  er P1 is less th
32ed0 61 6e 20 31 2c 20 74 68 65 6e 20 74 68 65 0a 2a  an 1, then the.*
32ee0 2a 20 76 61 6c 75 65 20 69 73 20 75 6e 63 68 61  * value is uncha
32ef0 6e 67 65 64 20 61 6e 64 20 63 6f 6e 74 72 6f 6c  nged and control
32f00 20 70 61 73 73 65 73 20 74 68 72 6f 75 67 68 20   passes through 
32f10 74 6f 20 74 68 65 20 6e 65 78 74 20 69 6e 73 74  to the next inst
32f20 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65  ruction..*/.case
32f30 20 4f 50 5f 49 66 50 6f 73 3a 20 7b 20 20 20 20   OP_IfPos: {    
32f40 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31      /* jump, in1
32f50 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d   */.  pIn1 = &aM
32f60 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  em[pOp->p1];.  a
32f70 73 73 65 72 74 28 20 70 49 6e 31 2d 3e 66 6c 61  ssert( pIn1->fla
32f80 67 73 26 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20  gs&MEM_Int );.  
32f90 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28  VdbeBranchTaken(
32fa0 20 70 49 6e 31 2d 3e 75 2e 69 3e 30 2c 20 32 29   pIn1->u.i>0, 2)
32fb0 3b 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e 75 2e  ;.  if( pIn1->u.
32fc0 69 3e 30 20 29 7b 0a 20 20 20 20 70 49 6e 31 2d  i>0 ){.    pIn1-
32fd0 3e 75 2e 69 20 2d 3d 20 70 4f 70 2d 3e 70 33 3b  >u.i -= pOp->p3;
32fe0 0a 20 20 20 20 67 6f 74 6f 20 6a 75 6d 70 5f 74  .    goto jump_t
32ff0 6f 5f 70 32 3b 0a 20 20 7d 0a 20 20 62 72 65 61  o_p2;.  }.  brea
33000 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
33010 20 4f 66 66 73 65 74 4c 69 6d 69 74 20 50 31 20   OffsetLimit P1 
33020 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e  P2 P3 * *.** Syn
33030 6f 70 73 69 73 3a 20 69 66 20 72 5b 50 31 5d 3e  opsis: if r[P1]>
33040 30 20 74 68 65 6e 20 72 5b 50 32 5d 3d 72 5b 50  0 then r[P2]=r[P
33050 31 5d 2b 6d 61 78 28 30 2c 72 5b 50 33 5d 29 20  1]+max(0,r[P3]) 
33060 65 6c 73 65 20 72 5b 50 32 5d 3d 28 2d 31 29 0a  else r[P2]=(-1).
33070 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64  **.** This opcod
33080 65 20 70 65 72 66 6f 72 6d 73 20 61 20 63 6f 6d  e performs a com
33090 6d 6f 6e 6c 79 20 75 73 65 64 20 63 6f 6d 70 75  monly used compu
330a0 74 61 74 69 6f 6e 20 61 73 73 6f 63 69 61 74 65  tation associate
330b0 64 20 77 69 74 68 0a 2a 2a 20 4c 49 4d 49 54 20  d with.** LIMIT 
330c0 61 6e 64 20 4f 46 46 53 45 54 20 70 72 6f 63 65  and OFFSET proce
330d0 73 73 2e 20 20 72 5b 50 31 5d 20 68 6f 6c 64 73  ss.  r[P1] holds
330e0 20 74 68 65 20 6c 69 6d 69 74 20 63 6f 75 6e 74   the limit count
330f0 65 72 2e 20 20 72 5b 50 33 5d 0a 2a 2a 20 68 6f  er.  r[P3].** ho
33100 6c 64 73 20 74 68 65 20 6f 66 66 73 65 74 20 63  lds the offset c
33110 6f 75 6e 74 65 72 2e 20 20 54 68 65 20 6f 70 63  ounter.  The opc
33120 6f 64 65 20 63 6f 6d 70 75 74 65 73 20 74 68 65  ode computes the
33130 20 63 6f 6d 62 69 6e 65 64 20 76 61 6c 75 65 0a   combined value.
33140 2a 2a 20 6f 66 20 74 68 65 20 4c 49 4d 49 54 20  ** of the LIMIT 
33150 61 6e 64 20 4f 46 46 53 45 54 20 61 6e 64 20 73  and OFFSET and s
33160 74 6f 72 65 73 20 74 68 61 74 20 76 61 6c 75 65  tores that value
33170 20 69 6e 20 72 5b 50 32 5d 2e 20 20 54 68 65 20   in r[P2].  The 
33180 72 5b 50 32 5d 0a 2a 2a 20 76 61 6c 75 65 20 63  r[P2].** value c
33190 6f 6d 70 75 74 65 64 20 69 73 20 74 68 65 20 74  omputed is the t
331a0 6f 74 61 6c 20 6e 75 6d 62 65 72 20 6f 66 20 72  otal number of r
331b0 6f 77 73 20 74 68 61 74 20 77 69 6c 6c 20 6e 65  ows that will ne
331c0 65 64 20 74 6f 20 62 65 0a 2a 2a 20 76 69 73 69  ed to be.** visi
331d0 74 65 64 20 69 6e 20 6f 72 64 65 72 20 74 6f 20  ted in order to 
331e0 63 6f 6d 70 6c 65 74 65 20 74 68 65 20 71 75 65  complete the que
331f0 72 79 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 72 5b 50  ry..**.** If r[P
33200 33 5d 20 69 73 20 7a 65 72 6f 20 6f 72 20 6e 65  3] is zero or ne
33210 67 61 74 69 76 65 2c 20 74 68 61 74 20 6d 65 61  gative, that mea
33220 6e 73 20 74 68 65 72 65 20 69 73 20 6e 6f 20 4f  ns there is no O
33230 46 46 53 45 54 0a 2a 2a 20 61 6e 64 20 72 5b 50  FFSET.** and r[P
33240 32 5d 20 69 73 20 73 65 74 20 74 6f 20 62 65 20  2] is set to be 
33250 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65  the value of the
33260 20 4c 49 4d 49 54 2c 20 72 5b 50 31 5d 2e 0a 2a   LIMIT, r[P1]..*
33270 2a 0a 2a 2a 20 69 66 20 72 5b 50 31 5d 20 69 73  *.** if r[P1] is
33280 20 7a 65 72 6f 20 6f 72 20 6e 65 67 61 74 69 76   zero or negativ
33290 65 2c 20 74 68 61 74 20 6d 65 61 6e 73 20 74 68  e, that means th
332a0 65 72 65 20 69 73 20 6e 6f 20 4c 49 4d 49 54 0a  ere is no LIMIT.
332b0 2a 2a 20 61 6e 64 20 72 5b 50 32 5d 20 69 73 20  ** and r[P2] is 
332c0 73 65 74 20 74 6f 20 2d 31 2e 20 0a 2a 2a 0a 2a  set to -1. .**.*
332d0 2a 20 4f 74 68 65 72 77 69 73 65 2c 20 72 5b 50  * Otherwise, r[P
332e0 32 5d 20 69 73 20 73 65 74 20 74 6f 20 74 68 65  2] is set to the
332f0 20 73 75 6d 20 6f 66 20 72 5b 50 31 5d 20 61 6e   sum of r[P1] an
33300 64 20 72 5b 50 33 5d 2e 0a 2a 2f 0a 63 61 73 65  d r[P3]..*/.case
33310 20 4f 50 5f 4f 66 66 73 65 74 4c 69 6d 69 74 3a   OP_OffsetLimit:
33320 20 7b 20 20 20 20 2f 2a 20 69 6e 31 2c 20 6f 75   {    /* in1, ou
33330 74 32 2c 20 69 6e 33 20 2a 2f 0a 20 20 69 36 34  t2, in3 */.  i64
33340 20 78 3b 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d   x;.  pIn1 = &aM
33350 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70  em[pOp->p1];.  p
33360 49 6e 33 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In3 = &aMem[pOp-
33370 3e 70 33 5d 3b 0a 20 20 70 4f 75 74 20 3d 20 6f  >p3];.  pOut = o
33380 75 74 32 50 72 65 72 65 6c 65 61 73 65 28 70 2c  ut2Prerelease(p,
33390 20 70 4f 70 29 3b 0a 20 20 61 73 73 65 72 74 28   pOp);.  assert(
333a0 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d   pIn1->flags & M
333b0 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 61 73 73 65  EM_Int );.  asse
333c0 72 74 28 20 70 49 6e 33 2d 3e 66 6c 61 67 73 20  rt( pIn3->flags 
333d0 26 20 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 78  & MEM_Int );.  x
333e0 20 3d 20 70 49 6e 31 2d 3e 75 2e 69 3b 0a 20 20   = pIn1->u.i;.  
333f0 69 66 28 20 78 3c 3d 30 20 7c 7c 20 73 71 6c 69  if( x<=0 || sqli
33400 74 65 33 41 64 64 49 6e 74 36 34 28 26 78 2c 20  te3AddInt64(&x, 
33410 70 49 6e 33 2d 3e 75 2e 69 3e 30 3f 70 49 6e 33  pIn3->u.i>0?pIn3
33420 2d 3e 75 2e 69 3a 30 29 20 29 7b 0a 20 20 20 20  ->u.i:0) ){.    
33430 2f 2a 20 49 66 20 74 68 65 20 4c 49 4d 49 54 20  /* If the LIMIT 
33440 69 73 20 6c 65 73 73 20 74 68 61 6e 20 6f 72 20  is less than or 
33450 65 71 75 61 6c 20 74 6f 20 7a 65 72 6f 2c 20 6c  equal to zero, l
33460 6f 6f 70 20 66 6f 72 65 76 65 72 2e 20 20 54 68  oop forever.  Th
33470 69 73 0a 20 20 20 20 2a 2a 20 69 73 20 64 6f 63  is.    ** is doc
33480 75 6d 65 6e 74 65 64 2e 20 20 42 75 74 20 61 6c  umented.  But al
33490 73 6f 2c 20 69 66 20 74 68 65 20 4c 49 4d 49 54  so, if the LIMIT
334a0 2b 4f 46 46 53 45 54 20 65 78 63 65 65 64 73 20  +OFFSET exceeds 
334b0 32 5e 36 33 20 74 68 65 6e 0a 20 20 20 20 2a 2a  2^63 then.    **
334c0 20 61 6c 73 6f 20 6c 6f 6f 70 20 66 6f 72 65 76   also loop forev
334d0 65 72 2e 20 20 54 68 69 73 20 69 73 20 75 6e 64  er.  This is und
334e0 6f 63 75 6d 65 6e 74 65 64 2e 20 20 49 6e 20 66  ocumented.  In f
334f0 61 63 74 2c 20 6f 6e 65 20 63 6f 75 6c 64 20 61  act, one could a
33500 72 67 75 65 0a 20 20 20 20 2a 2a 20 74 68 61 74  rgue.    ** that
33510 20 74 68 65 20 6c 6f 6f 70 20 73 68 6f 75 6c 64   the loop should
33520 20 74 65 72 6d 69 6e 61 74 65 2e 20 20 42 75 74   terminate.  But
33530 20 61 73 73 75 6d 69 6e 67 20 31 20 62 69 6c 6c   assuming 1 bill
33540 69 6f 6e 20 69 74 65 72 61 74 69 6f 6e 73 0a 20  ion iterations. 
33550 20 20 20 2a 2a 20 70 65 72 20 73 65 63 6f 6e 64     ** per second
33560 20 28 66 61 72 20 65 78 63 65 65 64 69 6e 67 20   (far exceeding 
33570 74 68 65 20 63 61 70 61 62 69 6c 69 74 69 65 73  the capabilities
33580 20 6f 66 20 61 6e 79 20 63 75 72 72 65 6e 74 20   of any current 
33590 68 61 72 64 77 61 72 65 29 0a 20 20 20 20 2a 2a  hardware).    **
335a0 20 69 74 20 77 6f 75 6c 64 20 74 61 6b 65 20 6e   it would take n
335b0 65 61 72 6c 79 20 33 30 30 20 79 65 61 72 73 20  early 300 years 
335c0 74 6f 20 61 63 74 75 61 6c 6c 79 20 72 65 61 63  to actually reac
335d0 68 20 74 68 65 20 6c 69 6d 69 74 2e 20 20 53 6f  h the limit.  So
335e0 0a 20 20 20 20 2a 2a 20 6c 6f 6f 70 69 6e 67 20  .    ** looping 
335f0 66 6f 72 65 76 65 72 20 69 73 20 61 20 72 65 61  forever is a rea
33600 73 6f 6e 61 62 6c 65 20 61 70 70 72 6f 78 69 6d  sonable approxim
33610 61 74 69 6f 6e 2e 20 2a 2f 0a 20 20 20 20 70 4f  ation. */.    pO
33620 75 74 2d 3e 75 2e 69 20 3d 20 2d 31 3b 0a 20 20  ut->u.i = -1;.  
33630 7d 65 6c 73 65 7b 0a 20 20 20 20 70 4f 75 74 2d  }else{.    pOut-
33640 3e 75 2e 69 20 3d 20 78 3b 0a 20 20 7d 0a 20 20  >u.i = x;.  }.  
33650 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
33660 6f 64 65 3a 20 49 66 4e 6f 74 5a 65 72 6f 20 50  ode: IfNotZero P
33670 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79  1 P2 * * *.** Sy
33680 6e 6f 70 73 69 73 3a 20 69 66 20 72 5b 50 31 5d  nopsis: if r[P1]
33690 21 3d 30 20 74 68 65 6e 20 72 5b 50 31 5d 2d 2d  !=0 then r[P1]--
336a0 2c 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20  , goto P2.**.** 
336b0 52 65 67 69 73 74 65 72 20 50 31 20 6d 75 73 74  Register P1 must
336c0 20 63 6f 6e 74 61 69 6e 20 61 6e 20 69 6e 74 65   contain an inte
336d0 67 65 72 2e 20 20 49 66 20 74 68 65 20 63 6f 6e  ger.  If the con
336e0 74 65 6e 74 20 6f 66 20 72 65 67 69 73 74 65 72  tent of register
336f0 20 50 31 20 69 73 0a 2a 2a 20 69 6e 69 74 69 61   P1 is.** initia
33700 6c 6c 79 20 67 72 65 61 74 65 72 20 74 68 61 6e  lly greater than
33710 20 7a 65 72 6f 2c 20 74 68 65 6e 20 64 65 63 72   zero, then decr
33720 65 6d 65 6e 74 20 74 68 65 20 76 61 6c 75 65 20  ement the value 
33730 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 2e 0a  in register P1..
33740 2a 2a 20 49 66 20 69 74 20 69 73 20 6e 6f 6e 2d  ** If it is non-
33750 7a 65 72 6f 20 28 6e 65 67 61 74 69 76 65 20 6f  zero (negative o
33760 72 20 70 6f 73 69 74 69 76 65 29 20 61 6e 64 20  r positive) and 
33770 74 68 65 6e 20 61 6c 73 6f 20 6a 75 6d 70 20 74  then also jump t
33780 6f 20 50 32 2e 20 20 0a 2a 2a 20 49 66 20 72 65  o P2.  .** If re
33790 67 69 73 74 65 72 20 50 31 20 69 73 20 69 6e 69  gister P1 is ini
337a0 74 69 61 6c 6c 79 20 7a 65 72 6f 2c 20 6c 65 61  tially zero, lea
337b0 76 65 20 69 74 20 75 6e 63 68 61 6e 67 65 64 20  ve it unchanged 
337c0 61 6e 64 20 66 61 6c 6c 20 74 68 72 6f 75 67 68  and fall through
337d0 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 66 4e  ..*/.case OP_IfN
337e0 6f 74 5a 65 72 6f 3a 20 7b 20 20 20 20 20 20 20  otZero: {       
337f0 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f   /* jump, in1 */
33800 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b  .  pIn1 = &aMem[
33810 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65  pOp->p1];.  asse
33820 72 74 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 26  rt( pIn1->flags&
33830 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 56 64 62  MEM_Int );.  Vdb
33840 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 70 49 6e  eBranchTaken(pIn
33850 31 2d 3e 75 2e 69 3c 30 2c 20 32 29 3b 0a 20 20  1->u.i<0, 2);.  
33860 69 66 28 20 70 49 6e 31 2d 3e 75 2e 69 20 29 7b  if( pIn1->u.i ){
33870 0a 20 20 20 20 20 69 66 28 20 70 49 6e 31 2d 3e  .     if( pIn1->
33880 75 2e 69 3e 30 20 29 20 70 49 6e 31 2d 3e 75 2e  u.i>0 ) pIn1->u.
33890 69 2d 2d 3b 0a 20 20 20 20 20 67 6f 74 6f 20 6a  i--;.     goto j
338a0 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 7d 0a 20  ump_to_p2;.  }. 
338b0 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
338c0 63 6f 64 65 3a 20 44 65 63 72 4a 75 6d 70 5a 65  code: DecrJumpZe
338d0 72 6f 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  ro P1 P2 * * *.*
338e0 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 66 20 28  * Synopsis: if (
338f0 2d 2d 72 5b 50 31 5d 29 3d 3d 30 20 67 6f 74 6f  --r[P1])==0 goto
33900 20 50 32 0a 2a 2a 0a 2a 2a 20 52 65 67 69 73 74   P2.**.** Regist
33910 65 72 20 50 31 20 6d 75 73 74 20 68 6f 6c 64 20  er P1 must hold 
33920 61 6e 20 69 6e 74 65 67 65 72 2e 20 20 44 65 63  an integer.  Dec
33930 72 65 6d 65 6e 74 20 74 68 65 20 76 61 6c 75 65  rement the value
33940 20 69 6e 20 50 31 0a 2a 2a 20 61 6e 64 20 6a 75   in P1.** and ju
33950 6d 70 20 74 6f 20 50 32 20 69 66 20 74 68 65 20  mp to P2 if the 
33960 6e 65 77 20 76 61 6c 75 65 20 69 73 20 65 78 61  new value is exa
33970 63 74 6c 79 20 7a 65 72 6f 2e 0a 2a 2f 0a 63 61  ctly zero..*/.ca
33980 73 65 20 4f 50 5f 44 65 63 72 4a 75 6d 70 5a 65  se OP_DecrJumpZe
33990 72 6f 3a 20 7b 20 20 20 20 20 20 2f 2a 20 6a 75  ro: {      /* ju
339a0 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e  mp, in1 */.  pIn
339b0 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  1 = &aMem[pOp->p
339c0 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 49  1];.  assert( pI
339d0 6e 31 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 49 6e  n1->flags&MEM_In
339e0 74 20 29 3b 0a 20 20 69 66 28 20 70 49 6e 31 2d  t );.  if( pIn1-
339f0 3e 75 2e 69 3e 53 4d 41 4c 4c 45 53 54 5f 49 4e  >u.i>SMALLEST_IN
33a00 54 36 34 20 29 20 70 49 6e 31 2d 3e 75 2e 69 2d  T64 ) pIn1->u.i-
33a10 2d 3b 0a 20 20 56 64 62 65 42 72 61 6e 63 68 54  -;.  VdbeBranchT
33a20 61 6b 65 6e 28 70 49 6e 31 2d 3e 75 2e 69 3d 3d  aken(pIn1->u.i==
33a30 30 2c 20 32 29 3b 0a 20 20 69 66 28 20 70 49 6e  0, 2);.  if( pIn
33a40 31 2d 3e 75 2e 69 3d 3d 30 20 29 20 67 6f 74 6f  1->u.i==0 ) goto
33a50 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 62   jump_to_p2;.  b
33a60 72 65 61 6b 3b 0a 7d 0a 0a 0a 2f 2a 20 4f 70 63  reak;.}.../* Opc
33a70 6f 64 65 3a 20 41 67 67 53 74 65 70 30 20 2a 20  ode: AggStep0 * 
33a80 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53  P2 P3 P4 P5.** S
33a90 79 6e 6f 70 73 69 73 3a 20 61 63 63 75 6d 3d 72  ynopsis: accum=r
33aa0 5b 50 33 5d 20 73 74 65 70 28 72 5b 50 32 40 50  [P3] step(r[P2@P
33ab0 35 5d 29 0a 2a 2a 0a 2a 2a 20 45 78 65 63 75 74  5]).**.** Execut
33ac0 65 20 74 68 65 20 73 74 65 70 20 66 75 6e 63 74  e the step funct
33ad0 69 6f 6e 20 66 6f 72 20 61 6e 20 61 67 67 72 65  ion for an aggre
33ae0 67 61 74 65 2e 20 20 54 68 65 0a 2a 2a 20 66 75  gate.  The.** fu
33af0 6e 63 74 69 6f 6e 20 68 61 73 20 50 35 20 61 72  nction has P5 ar
33b00 67 75 6d 65 6e 74 73 2e 20 20 20 50 34 20 69 73  guments.   P4 is
33b10 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68   a pointer to th
33b20 65 20 46 75 6e 63 44 65 66 0a 2a 2a 20 73 74 72  e FuncDef.** str
33b30 75 63 74 75 72 65 20 74 68 61 74 20 73 70 65 63  ucture that spec
33b40 69 66 69 65 73 20 74 68 65 20 66 75 6e 63 74 69  ifies the functi
33b50 6f 6e 2e 20 20 52 65 67 69 73 74 65 72 20 50 33  on.  Register P3
33b60 20 69 73 20 74 68 65 0a 2a 2a 20 61 63 63 75 6d   is the.** accum
33b70 75 6c 61 74 6f 72 2e 0a 2a 2a 0a 2a 2a 20 54 68  ulator..**.** Th
33b80 65 20 50 35 20 61 72 67 75 6d 65 6e 74 73 20 61  e P5 arguments a
33b90 72 65 20 74 61 6b 65 6e 20 66 72 6f 6d 20 72 65  re taken from re
33ba0 67 69 73 74 65 72 20 50 32 20 61 6e 64 20 69 74  gister P2 and it
33bb0 73 0a 2a 2a 20 73 75 63 63 65 73 73 6f 72 73 2e  s.** successors.
33bc0 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 41  .*/./* Opcode: A
33bd0 67 67 53 74 65 70 20 2a 20 50 32 20 50 33 20 50  ggStep * P2 P3 P
33be0 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73  4 P5.** Synopsis
33bf0 3a 20 61 63 63 75 6d 3d 72 5b 50 33 5d 20 73 74  : accum=r[P3] st
33c00 65 70 28 72 5b 50 32 40 50 35 5d 29 0a 2a 2a 0a  ep(r[P2@P5]).**.
33c10 2a 2a 20 45 78 65 63 75 74 65 20 74 68 65 20 73  ** Execute the s
33c20 74 65 70 20 66 75 6e 63 74 69 6f 6e 20 66 6f 72  tep function for
33c30 20 61 6e 20 61 67 67 72 65 67 61 74 65 2e 20 20   an aggregate.  
33c40 54 68 65 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e 20  The.** function 
33c50 68 61 73 20 50 35 20 61 72 67 75 6d 65 6e 74 73  has P5 arguments
33c60 2e 20 20 20 50 34 20 69 73 20 61 20 70 6f 69 6e  .   P4 is a poin
33c70 74 65 72 20 74 6f 20 61 6e 20 73 71 6c 69 74 65  ter to an sqlite
33c80 33 5f 63 6f 6e 74 65 78 74 0a 2a 2a 20 6f 62 6a  3_context.** obj
33c90 65 63 74 20 74 68 61 74 20 69 73 20 75 73 65 64  ect that is used
33ca0 20 74 6f 20 72 75 6e 20 74 68 65 20 66 75 6e 63   to run the func
33cb0 74 69 6f 6e 2e 20 20 52 65 67 69 73 74 65 72 20  tion.  Register 
33cc0 50 33 20 69 73 0a 2a 2a 20 61 73 20 74 68 65 20  P3 is.** as the 
33cd0 61 63 63 75 6d 75 6c 61 74 6f 72 2e 0a 2a 2a 0a  accumulator..**.
33ce0 2a 2a 20 54 68 65 20 50 35 20 61 72 67 75 6d 65  ** The P5 argume
33cf0 6e 74 73 20 61 72 65 20 74 61 6b 65 6e 20 66 72  nts are taken fr
33d00 6f 6d 20 72 65 67 69 73 74 65 72 20 50 32 20 61  om register P2 a
33d10 6e 64 20 69 74 73 0a 2a 2a 20 73 75 63 63 65 73  nd its.** succes
33d20 73 6f 72 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73  sors..**.** This
33d30 20 6f 70 63 6f 64 65 20 69 73 20 69 6e 69 74 69   opcode is initi
33d40 61 6c 6c 79 20 63 6f 64 65 64 20 61 73 20 4f 50  ally coded as OP
33d50 5f 41 67 67 53 74 65 70 30 2e 20 20 4f 6e 20 66  _AggStep0.  On f
33d60 69 72 73 74 20 65 76 61 6c 75 61 74 69 6f 6e 2c  irst evaluation,
33d70 0a 2a 2a 20 74 68 65 20 46 75 6e 63 44 65 66 20  .** the FuncDef 
33d80 73 74 6f 72 65 64 20 69 6e 20 50 34 20 69 73 20  stored in P4 is 
33d90 63 6f 6e 76 65 72 74 65 64 20 69 6e 74 6f 20 61  converted into a
33da0 6e 20 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78  n sqlite3_contex
33db0 74 20 61 6e 64 0a 2a 2a 20 74 68 65 20 6f 70 63  t and.** the opc
33dc0 6f 64 65 20 69 73 20 63 68 61 6e 67 65 64 2e 20  ode is changed. 
33dd0 20 49 6e 20 74 68 69 73 20 77 61 79 2c 20 74 68   In this way, th
33de0 65 20 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e  e initialization
33df0 20 6f 66 20 74 68 65 0a 2a 2a 20 73 71 6c 69 74   of the.** sqlit
33e00 65 33 5f 63 6f 6e 74 65 78 74 20 6f 6e 6c 79 20  e3_context only 
33e10 68 61 70 70 65 6e 73 20 6f 6e 63 65 2c 20 69 6e  happens once, in
33e20 73 74 65 61 64 20 6f 66 20 6f 6e 20 65 61 63 68  stead of on each
33e30 20 63 61 6c 6c 20 74 6f 20 74 68 65 0a 2a 2a 20   call to the.** 
33e40 73 74 65 70 20 66 75 6e 63 74 69 6f 6e 2e 0a 2a  step function..*
33e50 2f 0a 63 61 73 65 20 4f 50 5f 41 67 67 53 74 65  /.case OP_AggSte
33e60 70 30 3a 20 7b 0a 20 20 69 6e 74 20 6e 3b 0a 20  p0: {.  int n;. 
33e70 20 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74   sqlite3_context
33e80 20 2a 70 43 74 78 3b 0a 0a 20 20 61 73 73 65 72   *pCtx;..  asser
33e90 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d  t( pOp->p4type==
33ea0 50 34 5f 46 55 4e 43 44 45 46 20 29 3b 0a 20 20  P4_FUNCDEF );.  
33eb0 6e 20 3d 20 70 4f 70 2d 3e 70 35 3b 0a 20 20 61  n = pOp->p5;.  a
33ec0 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30  ssert( pOp->p3>0
33ed0 20 26 26 20 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d   && pOp->p3<=(p-
33ee0 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75  >nMem+1 - p->nCu
33ef0 72 73 6f 72 29 20 29 3b 0a 20 20 61 73 73 65 72  rsor) );.  asser
33f00 74 28 20 6e 3d 3d 30 20 7c 7c 20 28 70 4f 70 2d  t( n==0 || (pOp-
33f10 3e 70 32 3e 30 20 26 26 20 70 4f 70 2d 3e 70 32  >p2>0 && pOp->p2
33f20 2b 6e 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d  +n<=(p->nMem+1 -
33f30 20 70 2d 3e 6e 43 75 72 73 6f 72 29 2b 31 29 20   p->nCursor)+1) 
33f40 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  );.  assert( pOp
33f50 2d 3e 70 33 3c 70 4f 70 2d 3e 70 32 20 7c 7c 20  ->p3<pOp->p2 || 
33f60 70 4f 70 2d 3e 70 33 3e 3d 70 4f 70 2d 3e 70 32  pOp->p3>=pOp->p2
33f70 2b 6e 20 29 3b 0a 20 20 70 43 74 78 20 3d 20 73  +n );.  pCtx = s
33f80 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 52 61  qlite3DbMallocRa
33f90 77 4e 4e 28 64 62 2c 20 6e 2a 73 69 7a 65 6f 66  wNN(db, n*sizeof
33fa0 28 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 29  (sqlite3_value*)
33fb0 20 2b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20   +.             
33fc0 20 20 28 73 69 7a 65 6f 66 28 70 43 74 78 5b 30    (sizeof(pCtx[0
33fd0 5d 29 20 2b 20 73 69 7a 65 6f 66 28 4d 65 6d 29  ]) + sizeof(Mem)
33fe0 20 2d 20 73 69 7a 65 6f 66 28 73 71 6c 69 74 65   - sizeof(sqlite
33ff0 33 5f 76 61 6c 75 65 2a 29 29 29 3b 0a 20 20 69  3_value*)));.  i
34000 66 28 20 70 43 74 78 3d 3d 30 20 29 20 67 6f 74  f( pCtx==0 ) got
34010 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 70 43 74 78  o no_mem;.  pCtx
34020 2d 3e 70 4d 65 6d 20 3d 20 30 3b 0a 20 20 70 43  ->pMem = 0;.  pC
34030 74 78 2d 3e 70 4f 75 74 20 3d 20 28 4d 65 6d 2a  tx->pOut = (Mem*
34040 29 26 28 70 43 74 78 2d 3e 61 72 67 76 5b 6e 5d  )&(pCtx->argv[n]
34050 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65  );.  sqlite3Vdbe
34060 4d 65 6d 49 6e 69 74 28 70 43 74 78 2d 3e 70 4f  MemInit(pCtx->pO
34070 75 74 2c 20 64 62 2c 20 4d 45 4d 5f 4e 75 6c 6c  ut, db, MEM_Null
34080 29 3b 0a 20 20 70 43 74 78 2d 3e 70 46 75 6e 63  );.  pCtx->pFunc
34090 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 46 75 6e 63   = pOp->p4.pFunc
340a0 3b 0a 20 20 70 43 74 78 2d 3e 69 4f 70 20 3d 20  ;.  pCtx->iOp = 
340b0 28 69 6e 74 29 28 70 4f 70 20 2d 20 61 4f 70 29  (int)(pOp - aOp)
340c0 3b 0a 20 20 70 43 74 78 2d 3e 70 56 64 62 65 20  ;.  pCtx->pVdbe 
340d0 3d 20 70 3b 0a 20 20 70 43 74 78 2d 3e 73 6b 69  = p;.  pCtx->ski
340e0 70 46 6c 61 67 20 3d 20 30 3b 0a 20 20 70 43 74  pFlag = 0;.  pCt
340f0 78 2d 3e 69 73 45 72 72 6f 72 20 3d 20 30 3b 0a  x->isError = 0;.
34100 20 20 70 43 74 78 2d 3e 61 72 67 63 20 3d 20 6e    pCtx->argc = n
34110 3b 0a 20 20 70 4f 70 2d 3e 70 34 74 79 70 65 20  ;.  pOp->p4type 
34120 3d 20 50 34 5f 46 55 4e 43 43 54 58 3b 0a 20 20  = P4_FUNCCTX;.  
34130 70 4f 70 2d 3e 70 34 2e 70 43 74 78 20 3d 20 70  pOp->p4.pCtx = p
34140 43 74 78 3b 0a 20 20 70 4f 70 2d 3e 6f 70 63 6f  Ctx;.  pOp->opco
34150 64 65 20 3d 20 4f 50 5f 41 67 67 53 74 65 70 3b  de = OP_AggStep;
34160 0a 20 20 2f 2a 20 46 61 6c 6c 20 74 68 72 6f 75  .  /* Fall throu
34170 67 68 20 69 6e 74 6f 20 4f 50 5f 41 67 67 53 74  gh into OP_AggSt
34180 65 70 20 2a 2f 0a 7d 0a 63 61 73 65 20 4f 50 5f  ep */.}.case OP_
34190 41 67 67 53 74 65 70 3a 20 7b 0a 20 20 69 6e 74  AggStep: {.  int
341a0 20 69 3b 0a 20 20 73 71 6c 69 74 65 33 5f 63 6f   i;.  sqlite3_co
341b0 6e 74 65 78 74 20 2a 70 43 74 78 3b 0a 20 20 4d  ntext *pCtx;.  M
341c0 65 6d 20 2a 70 4d 65 6d 3b 0a 0a 20 20 61 73 73  em *pMem;..  ass
341d0 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65  ert( pOp->p4type
341e0 3d 3d 50 34 5f 46 55 4e 43 43 54 58 20 29 3b 0a  ==P4_FUNCCTX );.
341f0 20 20 70 43 74 78 20 3d 20 70 4f 70 2d 3e 70 34    pCtx = pOp->p4
34200 2e 70 43 74 78 3b 0a 20 20 70 4d 65 6d 20 3d 20  .pCtx;.  pMem = 
34210 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a  &aMem[pOp->p3];.
34220 0a 20 20 2f 2a 20 49 66 20 74 68 69 73 20 66 75  .  /* If this fu
34230 6e 63 74 69 6f 6e 20 69 73 20 69 6e 73 69 64 65  nction is inside
34240 20 6f 66 20 61 20 74 72 69 67 67 65 72 2c 20 74   of a trigger, t
34250 68 65 20 72 65 67 69 73 74 65 72 20 61 72 72 61  he register arra
34260 79 20 69 6e 20 61 4d 65 6d 5b 5d 0a 20 20 2a 2a  y in aMem[].  **
34270 20 6d 69 67 68 74 20 63 68 61 6e 67 65 20 66 72   might change fr
34280 6f 6d 20 6f 6e 65 20 65 76 61 6c 75 61 74 69 6f  om one evaluatio
34290 6e 20 74 6f 20 74 68 65 20 6e 65 78 74 2e 20 20  n to the next.  
342a0 54 68 65 20 6e 65 78 74 20 62 6c 6f 63 6b 20 6f  The next block o
342b0 66 20 63 6f 64 65 0a 20 20 2a 2a 20 63 68 65 63  f code.  ** chec
342c0 6b 73 20 74 6f 20 73 65 65 20 69 66 20 74 68 65  ks to see if the
342d0 20 72 65 67 69 73 74 65 72 20 61 72 72 61 79 20   register array 
342e0 68 61 73 20 63 68 61 6e 67 65 64 2c 20 61 6e 64  has changed, and
342f0 20 69 66 20 73 6f 20 69 74 0a 20 20 2a 2a 20 72   if so it.  ** r
34300 65 69 6e 69 74 69 61 6c 69 7a 65 73 20 74 68 65  einitializes the
34310 20 72 65 6c 61 76 61 6e 74 20 70 61 72 74 73 20   relavant parts 
34320 6f 66 20 74 68 65 20 73 71 6c 69 74 65 33 5f 63  of the sqlite3_c
34330 6f 6e 74 65 78 74 20 6f 62 6a 65 63 74 20 2a 2f  ontext object */
34340 0a 20 20 69 66 28 20 70 43 74 78 2d 3e 70 4d 65  .  if( pCtx->pMe
34350 6d 20 21 3d 20 70 4d 65 6d 20 29 7b 0a 20 20 20  m != pMem ){.   
34360 20 70 43 74 78 2d 3e 70 4d 65 6d 20 3d 20 70 4d   pCtx->pMem = pM
34370 65 6d 3b 0a 20 20 20 20 66 6f 72 28 69 3d 70 43  em;.    for(i=pC
34380 74 78 2d 3e 61 72 67 63 2d 31 3b 20 69 3e 3d 30  tx->argc-1; i>=0
34390 3b 20 69 2d 2d 29 20 70 43 74 78 2d 3e 61 72 67  ; i--) pCtx->arg
343a0 76 5b 69 5d 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  v[i] = &aMem[pOp
343b0 2d 3e 70 32 2b 69 5d 3b 0a 20 20 7d 0a 0a 23 69  ->p2+i];.  }..#i
343c0 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55  fdef SQLITE_DEBU
343d0 47 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 70  G.  for(i=0; i<p
343e0 43 74 78 2d 3e 61 72 67 63 3b 20 69 2b 2b 29 7b  Ctx->argc; i++){
343f0 0a 20 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d  .    assert( mem
34400 49 73 56 61 6c 69 64 28 70 43 74 78 2d 3e 61 72  IsValid(pCtx->ar
34410 67 76 5b 69 5d 29 20 29 3b 0a 20 20 20 20 52 45  gv[i]) );.    RE
34420 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70  GISTER_TRACE(pOp
34430 2d 3e 70 32 2b 69 2c 20 70 43 74 78 2d 3e 61 72  ->p2+i, pCtx->ar
34440 67 76 5b 69 5d 29 3b 0a 20 20 7d 0a 23 65 6e 64  gv[i]);.  }.#end
34450 69 66 0a 0a 20 20 70 4d 65 6d 2d 3e 6e 2b 2b 3b  if..  pMem->n++;
34460 0a 20 20 61 73 73 65 72 74 28 20 70 43 74 78 2d  .  assert( pCtx-
34470 3e 70 4f 75 74 2d 3e 66 6c 61 67 73 3d 3d 4d 45  >pOut->flags==ME
34480 4d 5f 4e 75 6c 6c 20 29 3b 0a 20 20 61 73 73 65  M_Null );.  asse
34490 72 74 28 20 70 43 74 78 2d 3e 69 73 45 72 72 6f  rt( pCtx->isErro
344a0 72 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  r==0 );.  assert
344b0 28 20 70 43 74 78 2d 3e 73 6b 69 70 46 6c 61 67  ( pCtx->skipFlag
344c0 3d 3d 30 20 29 3b 0a 20 20 28 70 43 74 78 2d 3e  ==0 );.  (pCtx->
344d0 70 46 75 6e 63 2d 3e 78 53 46 75 6e 63 29 28 70  pFunc->xSFunc)(p
344e0 43 74 78 2c 70 43 74 78 2d 3e 61 72 67 63 2c 70  Ctx,pCtx->argc,p
344f0 43 74 78 2d 3e 61 72 67 76 29 3b 20 2f 2a 20 49  Ctx->argv); /* I
34500 4d 50 3a 20 52 2d 32 34 35 30 35 2d 32 33 32 33  MP: R-24505-2323
34510 30 20 2a 2f 0a 20 20 69 66 28 20 70 43 74 78 2d  0 */.  if( pCtx-
34520 3e 69 73 45 72 72 6f 72 20 29 7b 0a 20 20 20 20  >isError ){.    
34530 69 66 28 20 70 43 74 78 2d 3e 69 73 45 72 72 6f  if( pCtx->isErro
34540 72 3e 30 20 29 7b 0a 20 20 20 20 20 20 73 71 6c  r>0 ){.      sql
34550 69 74 65 33 56 64 62 65 45 72 72 6f 72 28 70 2c  ite3VdbeError(p,
34560 20 22 25 73 22 2c 20 73 71 6c 69 74 65 33 5f 76   "%s", sqlite3_v
34570 61 6c 75 65 5f 74 65 78 74 28 70 43 74 78 2d 3e  alue_text(pCtx->
34580 70 4f 75 74 29 29 3b 0a 20 20 20 20 20 20 72 63  pOut));.      rc
34590 20 3d 20 70 43 74 78 2d 3e 69 73 45 72 72 6f 72   = pCtx->isError
345a0 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20  ;.    }.    if( 
345b0 70 43 74 78 2d 3e 73 6b 69 70 46 6c 61 67 20 29  pCtx->skipFlag )
345c0 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  {.      assert( 
345d0 70 4f 70 5b 2d 31 5d 2e 6f 70 63 6f 64 65 3d 3d  pOp[-1].opcode==
345e0 4f 50 5f 43 6f 6c 6c 53 65 71 20 29 3b 0a 20 20  OP_CollSeq );.  
345f0 20 20 20 20 69 20 3d 20 70 4f 70 5b 2d 31 5d 2e      i = pOp[-1].
34600 70 31 3b 0a 20 20 20 20 20 20 69 66 28 20 69 20  p1;.      if( i 
34610 29 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d  ) sqlite3VdbeMem
34620 53 65 74 49 6e 74 36 34 28 26 61 4d 65 6d 5b 69  SetInt64(&aMem[i
34630 5d 2c 20 31 29 3b 0a 20 20 20 20 20 20 70 43 74  ], 1);.      pCt
34640 78 2d 3e 73 6b 69 70 46 6c 61 67 20 3d 20 30 3b  x->skipFlag = 0;
34650 0a 20 20 20 20 7d 0a 20 20 20 20 73 71 6c 69 74  .    }.    sqlit
34660 65 33 56 64 62 65 4d 65 6d 52 65 6c 65 61 73 65  e3VdbeMemRelease
34670 28 70 43 74 78 2d 3e 70 4f 75 74 29 3b 0a 20 20  (pCtx->pOut);.  
34680 20 20 70 43 74 78 2d 3e 70 4f 75 74 2d 3e 66 6c    pCtx->pOut->fl
34690 61 67 73 20 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a  ags = MEM_Null;.
346a0 20 20 20 20 70 43 74 78 2d 3e 69 73 45 72 72 6f      pCtx->isErro
346b0 72 20 3d 20 30 3b 0a 20 20 20 20 69 66 28 20 72  r = 0;.    if( r
346c0 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64  c ) goto abort_d
346d0 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 7d  ue_to_error;.  }
346e0 0a 20 20 61 73 73 65 72 74 28 20 70 43 74 78 2d  .  assert( pCtx-
346f0 3e 70 4f 75 74 2d 3e 66 6c 61 67 73 3d 3d 4d 45  >pOut->flags==ME
34700 4d 5f 4e 75 6c 6c 20 29 3b 0a 20 20 61 73 73 65  M_Null );.  asse
34710 72 74 28 20 70 43 74 78 2d 3e 73 6b 69 70 46 6c  rt( pCtx->skipFl
34720 61 67 3d 3d 30 20 29 3b 0a 20 20 62 72 65 61 6b  ag==0 );.  break
34730 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
34740 41 67 67 46 69 6e 61 6c 20 50 31 20 50 32 20 2a  AggFinal P1 P2 *
34750 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69   P4 *.** Synopsi
34760 73 3a 20 61 63 63 75 6d 3d 72 5b 50 31 5d 20 4e  s: accum=r[P1] N
34770 3d 50 32 0a 2a 2a 0a 2a 2a 20 45 78 65 63 75 74  =P2.**.** Execut
34780 65 20 74 68 65 20 66 69 6e 61 6c 69 7a 65 72 20  e the finalizer 
34790 66 75 6e 63 74 69 6f 6e 20 66 6f 72 20 61 6e 20  function for an 
347a0 61 67 67 72 65 67 61 74 65 2e 20 20 50 31 20 69  aggregate.  P1 i
347b0 73 0a 2a 2a 20 74 68 65 20 6d 65 6d 6f 72 79 20  s.** the memory 
347c0 6c 6f 63 61 74 69 6f 6e 20 74 68 61 74 20 69 73  location that is
347d0 20 74 68 65 20 61 63 63 75 6d 75 6c 61 74 6f 72   the accumulator
347e0 20 66 6f 72 20 74 68 65 20 61 67 67 72 65 67 61   for the aggrega
347f0 74 65 2e 0a 2a 2a 0a 2a 2a 20 50 32 20 69 73 20  te..**.** P2 is 
34800 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 61 72  the number of ar
34810 67 75 6d 65 6e 74 73 20 74 68 61 74 20 74 68 65  guments that the
34820 20 73 74 65 70 20 66 75 6e 63 74 69 6f 6e 20 74   step function t
34830 61 6b 65 73 20 61 6e 64 0a 2a 2a 20 50 34 20 69  akes and.** P4 i
34840 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 74  s a pointer to t
34850 68 65 20 46 75 6e 63 44 65 66 20 66 6f 72 20 74  he FuncDef for t
34860 68 69 73 20 66 75 6e 63 74 69 6f 6e 2e 20 20 54  his function.  T
34870 68 65 20 50 32 0a 2a 2a 20 61 72 67 75 6d 65 6e  he P2.** argumen
34880 74 20 69 73 20 6e 6f 74 20 75 73 65 64 20 62 79  t is not used by
34890 20 74 68 69 73 20 6f 70 63 6f 64 65 2e 20 20 49   this opcode.  I
348a0 74 20 69 73 20 6f 6e 6c 79 20 74 68 65 72 65 20  t is only there 
348b0 74 6f 20 64 69 73 61 6d 62 69 67 75 61 74 65 0a  to disambiguate.
348c0 2a 2a 20 66 75 6e 63 74 69 6f 6e 73 20 74 68 61  ** functions tha
348d0 74 20 63 61 6e 20 74 61 6b 65 20 76 61 72 79 69  t can take varyi
348e0 6e 67 20 6e 75 6d 62 65 72 73 20 6f 66 20 61 72  ng numbers of ar
348f0 67 75 6d 65 6e 74 73 2e 20 20 54 68 65 0a 2a 2a  guments.  The.**
34900 20 50 34 20 61 72 67 75 6d 65 6e 74 20 69 73 20   P4 argument is 
34910 6f 6e 6c 79 20 6e 65 65 64 65 64 20 66 6f 72 20  only needed for 
34920 74 68 65 20 64 65 67 65 6e 65 72 61 74 65 20 63  the degenerate c
34930 61 73 65 20 77 68 65 72 65 0a 2a 2a 20 74 68 65  ase where.** the
34940 20 73 74 65 70 20 66 75 6e 63 74 69 6f 6e 20 77   step function w
34950 61 73 20 6e 6f 74 20 70 72 65 76 69 6f 75 73 6c  as not previousl
34960 79 20 63 61 6c 6c 65 64 2e 0a 2a 2f 0a 63 61 73  y called..*/.cas
34970 65 20 4f 50 5f 41 67 67 46 69 6e 61 6c 3a 20 7b  e OP_AggFinal: {
34980 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d 3b 0a 20 20  .  Mem *pMem;.  
34990 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
349a0 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 3d 28 70  0 && pOp->p1<=(p
349b0 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43  ->nMem+1 - p->nC
349c0 75 72 73 6f 72 29 20 29 3b 0a 20 20 70 4d 65 6d  ursor) );.  pMem
349d0 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31   = &aMem[pOp->p1
349e0 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70 4d  ];.  assert( (pM
349f0 65 6d 2d 3e 66 6c 61 67 73 20 26 20 7e 28 4d 45  em->flags & ~(ME
34a00 4d 5f 4e 75 6c 6c 7c 4d 45 4d 5f 41 67 67 29 29  M_Null|MEM_Agg))
34a10 3d 3d 30 20 29 3b 0a 20 20 72 63 20 3d 20 73 71  ==0 );.  rc = sq
34a20 6c 69 74 65 33 56 64 62 65 4d 65 6d 46 69 6e 61  lite3VdbeMemFina
34a30 6c 69 7a 65 28 70 4d 65 6d 2c 20 70 4f 70 2d 3e  lize(pMem, pOp->
34a40 70 34 2e 70 46 75 6e 63 29 3b 0a 20 20 69 66 28  p4.pFunc);.  if(
34a50 20 72 63 20 29 7b 0a 20 20 20 20 73 71 6c 69 74   rc ){.    sqlit
34a60 65 33 56 64 62 65 45 72 72 6f 72 28 70 2c 20 22  e3VdbeError(p, "
34a70 25 73 22 2c 20 73 71 6c 69 74 65 33 5f 76 61 6c  %s", sqlite3_val
34a80 75 65 5f 74 65 78 74 28 70 4d 65 6d 29 29 3b 0a  ue_text(pMem));.
34a90 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64      goto abort_d
34aa0 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 7d  ue_to_error;.  }
34ab0 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 43 68  .  sqlite3VdbeCh
34ac0 61 6e 67 65 45 6e 63 6f 64 69 6e 67 28 70 4d 65  angeEncoding(pMe
34ad0 6d 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20  m, encoding);.  
34ae0 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53  UPDATE_MAX_BLOBS
34af0 49 5a 45 28 70 4d 65 6d 29 3b 0a 20 20 69 66 28  IZE(pMem);.  if(
34b00 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 54   sqlite3VdbeMemT
34b10 6f 6f 42 69 67 28 70 4d 65 6d 29 20 29 7b 0a 20  ooBig(pMem) ){. 
34b20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b     goto too_big;
34b30 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
34b40 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
34b50 4f 4d 49 54 5f 57 41 4c 0a 2f 2a 20 4f 70 63 6f  OMIT_WAL./* Opco
34b60 64 65 3a 20 43 68 65 63 6b 70 6f 69 6e 74 20 50  de: Checkpoint P
34b70 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a  1 P2 P3 * *.**.*
34b80 2a 20 43 68 65 63 6b 70 6f 69 6e 74 20 64 61 74  * Checkpoint dat
34b90 61 62 61 73 65 20 50 31 2e 20 54 68 69 73 20 69  abase P1. This i
34ba0 73 20 61 20 6e 6f 2d 6f 70 20 69 66 20 50 31 20  s a no-op if P1 
34bb0 69 73 20 6e 6f 74 20 63 75 72 72 65 6e 74 6c 79  is not currently
34bc0 20 69 6e 0a 2a 2a 20 57 41 4c 20 6d 6f 64 65 2e   in.** WAL mode.
34bd0 20 50 61 72 61 6d 65 74 65 72 20 50 32 20 69 73   Parameter P2 is
34be0 20 6f 6e 65 20 6f 66 20 53 51 4c 49 54 45 5f 43   one of SQLITE_C
34bf0 48 45 43 4b 50 4f 49 4e 54 5f 50 41 53 53 49 56  HECKPOINT_PASSIV
34c00 45 2c 20 46 55 4c 4c 2c 0a 2a 2a 20 52 45 53 54  E, FULL,.** REST
34c10 41 52 54 2c 20 6f 72 20 54 52 55 4e 43 41 54 45  ART, or TRUNCATE
34c20 2e 20 20 57 72 69 74 65 20 31 20 6f 72 20 30 20  .  Write 1 or 0 
34c30 69 6e 74 6f 20 6d 65 6d 5b 50 33 5d 20 69 66 20  into mem[P3] if 
34c40 74 68 65 20 63 68 65 63 6b 70 6f 69 6e 74 20 72  the checkpoint r
34c50 65 74 75 72 6e 73 0a 2a 2a 20 53 51 4c 49 54 45  eturns.** SQLITE
34c60 5f 42 55 53 59 20 6f 72 20 6e 6f 74 2c 20 72 65  _BUSY or not, re
34c70 73 70 65 63 74 69 76 65 6c 79 2e 20 20 57 72 69  spectively.  Wri
34c80 74 65 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  te the number of
34c90 20 70 61 67 65 73 20 69 6e 20 74 68 65 0a 2a 2a   pages in the.**
34ca0 20 57 41 4c 20 61 66 74 65 72 20 74 68 65 20 63   WAL after the c
34cb0 68 65 63 6b 70 6f 69 6e 74 20 69 6e 74 6f 20 6d  heckpoint into m
34cc0 65 6d 5b 50 33 2b 31 5d 20 61 6e 64 20 74 68 65  em[P3+1] and the
34cd0 20 6e 75 6d 62 65 72 20 6f 66 20 70 61 67 65 73   number of pages
34ce0 0a 2a 2a 20 69 6e 20 74 68 65 20 57 41 4c 20 74  .** in the WAL t
34cf0 68 61 74 20 68 61 76 65 20 62 65 65 6e 20 63 68  hat have been ch
34d00 65 63 6b 70 6f 69 6e 74 65 64 20 61 66 74 65 72  eckpointed after
34d10 20 74 68 65 20 63 68 65 63 6b 70 6f 69 6e 74 0a   the checkpoint.
34d20 2a 2a 20 63 6f 6d 70 6c 65 74 65 73 20 69 6e 74  ** completes int
34d30 6f 20 6d 65 6d 5b 50 33 2b 32 5d 2e 20 20 48 6f  o mem[P3+2].  Ho
34d40 77 65 76 65 72 20 6f 6e 20 61 6e 20 65 72 72 6f  wever on an erro
34d50 72 2c 20 6d 65 6d 5b 50 33 2b 31 5d 20 61 6e 64  r, mem[P3+1] and
34d60 0a 2a 2a 20 6d 65 6d 5b 50 33 2b 32 5d 20 61 72  .** mem[P3+2] ar
34d70 65 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 74 6f  e initialized to
34d80 20 2d 31 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f   -1..*/.case OP_
34d90 43 68 65 63 6b 70 6f 69 6e 74 3a 20 7b 0a 20 20  Checkpoint: {.  
34da0 69 6e 74 20 69 3b 20 20 20 20 20 20 20 20 20 20  int i;          
34db0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34dc0 2f 2a 20 4c 6f 6f 70 20 63 6f 75 6e 74 65 72 20  /* Loop counter 
34dd0 2a 2f 0a 20 20 69 6e 74 20 61 52 65 73 5b 33 5d  */.  int aRes[3]
34de0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
34df0 20 20 20 20 20 2f 2a 20 52 65 73 75 6c 74 73 20       /* Results 
34e00 2a 2f 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d 3b 20  */.  Mem *pMem; 
34e10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34e20 20 20 20 20 20 2f 2a 20 57 72 69 74 65 20 72 65       /* Write re
34e30 73 75 6c 74 73 20 68 65 72 65 20 2a 2f 0a 0a 20  sults here */.. 
34e40 20 61 73 73 65 72 74 28 20 70 2d 3e 72 65 61 64   assert( p->read
34e50 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 20 20 61 52 65  Only==0 );.  aRe
34e60 73 5b 30 5d 20 3d 20 30 3b 0a 20 20 61 52 65 73  s[0] = 0;.  aRes
34e70 5b 31 5d 20 3d 20 61 52 65 73 5b 32 5d 20 3d 20  [1] = aRes[2] = 
34e80 2d 31 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f  -1;.  assert( pO
34e90 70 2d 3e 70 32 3d 3d 53 51 4c 49 54 45 5f 43 48  p->p2==SQLITE_CH
34ea0 45 43 4b 50 4f 49 4e 54 5f 50 41 53 53 49 56 45  ECKPOINT_PASSIVE
34eb0 0a 20 20 20 20 20 20 20 7c 7c 20 70 4f 70 2d 3e  .       || pOp->
34ec0 70 32 3d 3d 53 51 4c 49 54 45 5f 43 48 45 43 4b  p2==SQLITE_CHECK
34ed0 50 4f 49 4e 54 5f 46 55 4c 4c 0a 20 20 20 20 20  POINT_FULL.     
34ee0 20 20 7c 7c 20 70 4f 70 2d 3e 70 32 3d 3d 53 51    || pOp->p2==SQ
34ef0 4c 49 54 45 5f 43 48 45 43 4b 50 4f 49 4e 54 5f  LITE_CHECKPOINT_
34f00 52 45 53 54 41 52 54 0a 20 20 20 20 20 20 20 7c  RESTART.       |
34f10 7c 20 70 4f 70 2d 3e 70 32 3d 3d 53 51 4c 49 54  | pOp->p2==SQLIT
34f20 45 5f 43 48 45 43 4b 50 4f 49 4e 54 5f 54 52 55  E_CHECKPOINT_TRU
34f30 4e 43 41 54 45 0a 20 20 29 3b 0a 20 20 72 63 20  NCATE.  );.  rc 
34f40 3d 20 73 71 6c 69 74 65 33 43 68 65 63 6b 70 6f  = sqlite3Checkpo
34f50 69 6e 74 28 64 62 2c 20 70 4f 70 2d 3e 70 31 2c  int(db, pOp->p1,
34f60 20 70 4f 70 2d 3e 70 32 2c 20 26 61 52 65 73 5b   pOp->p2, &aRes[
34f70 31 5d 2c 20 26 61 52 65 73 5b 32 5d 29 3b 0a 20  1], &aRes[2]);. 
34f80 20 69 66 28 20 72 63 20 29 7b 0a 20 20 20 20 69   if( rc ){.    i
34f90 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 42 55  f( rc!=SQLITE_BU
34fa0 53 59 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f  SY ) goto abort_
34fb0 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
34fc0 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b    rc = SQLITE_OK
34fd0 3b 0a 20 20 20 20 61 52 65 73 5b 30 5d 20 3d 20  ;.    aRes[0] = 
34fe0 31 3b 0a 20 20 7d 0a 20 20 66 6f 72 28 69 3d 30  1;.  }.  for(i=0
34ff0 2c 20 70 4d 65 6d 20 3d 20 26 61 4d 65 6d 5b 70  , pMem = &aMem[p
35000 4f 70 2d 3e 70 33 5d 3b 20 69 3c 33 3b 20 69 2b  Op->p3]; i<3; i+
35010 2b 2c 20 70 4d 65 6d 2b 2b 29 7b 0a 20 20 20 20  +, pMem++){.    
35020 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65  sqlite3VdbeMemSe
35030 74 49 6e 74 36 34 28 70 4d 65 6d 2c 20 28 69 36  tInt64(pMem, (i6
35040 34 29 61 52 65 73 5b 69 5d 29 3b 0a 20 20 7d 20  4)aRes[i]);.  } 
35050 20 20 20 0a 20 20 62 72 65 61 6b 3b 0a 7d 3b 20     .  break;.}; 
35060 20 0a 23 65 6e 64 69 66 0a 0a 23 69 66 6e 64 65   .#endif..#ifnde
35070 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 52  f SQLITE_OMIT_PR
35080 41 47 4d 41 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  AGMA./* Opcode: 
35090 4a 6f 75 72 6e 61 6c 4d 6f 64 65 20 50 31 20 50  JournalMode P1 P
350a0 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 43  2 P3 * *.**.** C
350b0 68 61 6e 67 65 20 74 68 65 20 6a 6f 75 72 6e 61  hange the journa
350c0 6c 20 6d 6f 64 65 20 6f 66 20 64 61 74 61 62 61  l mode of databa
350d0 73 65 20 50 31 20 74 6f 20 50 33 2e 20 50 33 20  se P1 to P3. P3 
350e0 6d 75 73 74 20 62 65 20 6f 6e 65 20 6f 66 20 74  must be one of t
350f0 68 65 0a 2a 2a 20 50 41 47 45 52 5f 4a 4f 55 52  he.** PAGER_JOUR
35100 4e 41 4c 4d 4f 44 45 5f 58 58 58 20 76 61 6c 75  NALMODE_XXX valu
35110 65 73 2e 20 49 66 20 63 68 61 6e 67 69 6e 67 20  es. If changing 
35120 62 65 74 77 65 65 6e 20 74 68 65 20 76 61 72 69  between the vari
35130 6f 75 73 20 72 6f 6c 6c 62 61 63 6b 0a 2a 2a 20  ous rollback.** 
35140 6d 6f 64 65 73 20 28 64 65 6c 65 74 65 2c 20 74  modes (delete, t
35150 72 75 6e 63 61 74 65 2c 20 70 65 72 73 69 73 74  runcate, persist
35160 2c 20 6f 66 66 20 61 6e 64 20 6d 65 6d 6f 72 79  , off and memory
35170 29 2c 20 74 68 69 73 20 69 73 20 61 20 73 69 6d  ), this is a sim
35180 70 6c 65 0a 2a 2a 20 6f 70 65 72 61 74 69 6f 6e  ple.** operation
35190 2e 20 4e 6f 20 49 4f 20 69 73 20 72 65 71 75 69  . No IO is requi
351a0 72 65 64 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 63 68  red..**.** If ch
351b0 61 6e 67 69 6e 67 20 69 6e 74 6f 20 6f 72 20 6f  anging into or o
351c0 75 74 20 6f 66 20 57 41 4c 20 6d 6f 64 65 20 74  ut of WAL mode t
351d0 68 65 20 70 72 6f 63 65 64 75 72 65 20 69 73 20  he procedure is 
351e0 6d 6f 72 65 20 63 6f 6d 70 6c 69 63 61 74 65 64  more complicated
351f0 2e 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 61 20  ..**.** Write a 
35200 73 74 72 69 6e 67 20 63 6f 6e 74 61 69 6e 69 6e  string containin
35210 67 20 74 68 65 20 66 69 6e 61 6c 20 6a 6f 75 72  g the final jour
35220 6e 61 6c 2d 6d 6f 64 65 20 74 6f 20 72 65 67 69  nal-mode to regi
35230 73 74 65 72 20 50 32 2e 0a 2a 2f 0a 63 61 73 65  ster P2..*/.case
35240 20 4f 50 5f 4a 6f 75 72 6e 61 6c 4d 6f 64 65 3a   OP_JournalMode:
35250 20 7b 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f   {    /* out2 */
35260 0a 20 20 42 74 72 65 65 20 2a 70 42 74 3b 20 20  .  Btree *pBt;  
35270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35280 20 20 20 2f 2a 20 42 74 72 65 65 20 74 6f 20 63     /* Btree to c
35290 68 61 6e 67 65 20 6a 6f 75 72 6e 61 6c 20 6d 6f  hange journal mo
352a0 64 65 20 6f 66 20 2a 2f 0a 20 20 50 61 67 65 72  de of */.  Pager
352b0 20 2a 70 50 61 67 65 72 3b 20 20 20 20 20 20 20   *pPager;       
352c0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50 61             /* Pa
352d0 67 65 72 20 61 73 73 6f 63 69 61 74 65 64 20 77  ger associated w
352e0 69 74 68 20 70 42 74 20 2a 2f 0a 20 20 69 6e 74  ith pBt */.  int
352f0 20 65 4e 65 77 3b 20 20 20 20 20 20 20 20 20 20   eNew;          
35300 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
35310 4e 65 77 20 6a 6f 75 72 6e 61 6c 20 6d 6f 64 65  New journal mode
35320 20 2a 2f 0a 20 20 69 6e 74 20 65 4f 6c 64 3b 20   */.  int eOld; 
35330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35340 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6f 6c 64        /* The old
35350 20 6a 6f 75 72 6e 61 6c 20 6d 6f 64 65 20 2a 2f   journal mode */
35360 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
35370 4f 4d 49 54 5f 57 41 4c 0a 20 20 63 6f 6e 73 74  OMIT_WAL.  const
35380 20 63 68 61 72 20 2a 7a 46 69 6c 65 6e 61 6d 65   char *zFilename
35390 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 61  ;          /* Na
353a0 6d 65 20 6f 66 20 64 61 74 61 62 61 73 65 20 66  me of database f
353b0 69 6c 65 20 66 6f 72 20 70 50 61 67 65 72 20 2a  ile for pPager *
353c0 2f 0a 23 65 6e 64 69 66 0a 0a 20 20 70 4f 75 74  /.#endif..  pOut
353d0 20 3d 20 6f 75 74 32 50 72 65 72 65 6c 65 61 73   = out2Prereleas
353e0 65 28 70 2c 20 70 4f 70 29 3b 0a 20 20 65 4e 65  e(p, pOp);.  eNe
353f0 77 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 61  w = pOp->p3;.  a
35400 73 73 65 72 74 28 20 65 4e 65 77 3d 3d 50 41 47  ssert( eNew==PAG
35410 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 44  ER_JOURNALMODE_D
35420 45 4c 45 54 45 20 0a 20 20 20 20 20 20 20 7c 7c  ELETE .       ||
35430 20 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55   eNew==PAGER_JOU
35440 52 4e 41 4c 4d 4f 44 45 5f 54 52 55 4e 43 41 54  RNALMODE_TRUNCAT
35450 45 20 0a 20 20 20 20 20 20 20 7c 7c 20 65 4e 65  E .       || eNe
35460 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c  w==PAGER_JOURNAL
35470 4d 4f 44 45 5f 50 45 52 53 49 53 54 20 0a 20 20  MODE_PERSIST .  
35480 20 20 20 20 20 7c 7c 20 65 4e 65 77 3d 3d 50 41       || eNew==PA
35490 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f  GER_JOURNALMODE_
354a0 4f 46 46 0a 20 20 20 20 20 20 20 7c 7c 20 65 4e  OFF.       || eN
354b0 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41  ew==PAGER_JOURNA
354c0 4c 4d 4f 44 45 5f 4d 45 4d 4f 52 59 0a 20 20 20  LMODE_MEMORY.   
354d0 20 20 20 20 7c 7c 20 65 4e 65 77 3d 3d 50 41 47      || eNew==PAG
354e0 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 57  ER_JOURNALMODE_W
354f0 41 4c 0a 20 20 20 20 20 20 20 7c 7c 20 65 4e 65  AL.       || eNe
35500 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c  w==PAGER_JOURNAL
35510 4d 4f 44 45 5f 51 55 45 52 59 0a 20 20 29 3b 0a  MODE_QUERY.  );.
35520 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
35530 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c  1>=0 && pOp->p1<
35540 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73  db->nDb );.  ass
35550 65 72 74 28 20 70 2d 3e 72 65 61 64 4f 6e 6c 79  ert( p->readOnly
35560 3d 3d 30 20 29 3b 0a 0a 20 20 70 42 74 20 3d 20  ==0 );..  pBt = 
35570 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 31 5d  db->aDb[pOp->p1]
35580 2e 70 42 74 3b 0a 20 20 70 50 61 67 65 72 20 3d  .pBt;.  pPager =
35590 20 73 71 6c 69 74 65 33 42 74 72 65 65 50 61 67   sqlite3BtreePag
355a0 65 72 28 70 42 74 29 3b 0a 20 20 65 4f 6c 64 20  er(pBt);.  eOld 
355b0 3d 20 73 71 6c 69 74 65 33 50 61 67 65 72 47 65  = sqlite3PagerGe
355c0 74 4a 6f 75 72 6e 61 6c 4d 6f 64 65 28 70 50 61  tJournalMode(pPa
355d0 67 65 72 29 3b 0a 20 20 69 66 28 20 65 4e 65 77  ger);.  if( eNew
355e0 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d  ==PAGER_JOURNALM
355f0 4f 44 45 5f 51 55 45 52 59 20 29 20 65 4e 65 77  ODE_QUERY ) eNew
35600 20 3d 20 65 4f 6c 64 3b 0a 20 20 69 66 28 20 21   = eOld;.  if( !
35610 73 71 6c 69 74 65 33 50 61 67 65 72 4f 6b 54 6f  sqlite3PagerOkTo
35620 43 68 61 6e 67 65 4a 6f 75 72 6e 61 6c 4d 6f 64  ChangeJournalMod
35630 65 28 70 50 61 67 65 72 29 20 29 20 65 4e 65 77  e(pPager) ) eNew
35640 20 3d 20 65 4f 6c 64 3b 0a 0a 23 69 66 6e 64 65   = eOld;..#ifnde
35650 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 41  f SQLITE_OMIT_WA
35660 4c 0a 20 20 7a 46 69 6c 65 6e 61 6d 65 20 3d 20  L.  zFilename = 
35670 73 71 6c 69 74 65 33 50 61 67 65 72 46 69 6c 65  sqlite3PagerFile
35680 6e 61 6d 65 28 70 50 61 67 65 72 2c 20 31 29 3b  name(pPager, 1);
35690 0a 0a 20 20 2f 2a 20 44 6f 20 6e 6f 74 20 61 6c  ..  /* Do not al
356a0 6c 6f 77 20 61 20 74 72 61 6e 73 69 74 69 6f 6e  low a transition
356b0 20 74 6f 20 6a 6f 75 72 6e 61 6c 5f 6d 6f 64 65   to journal_mode
356c0 3d 57 41 4c 20 66 6f 72 20 61 20 64 61 74 61 62  =WAL for a datab
356d0 61 73 65 0a 20 20 2a 2a 20 69 6e 20 74 65 6d 70  ase.  ** in temp
356e0 6f 72 61 72 79 20 73 74 6f 72 61 67 65 20 6f 72  orary storage or
356f0 20 69 66 20 74 68 65 20 56 46 53 20 64 6f 65 73   if the VFS does
35700 20 6e 6f 74 20 73 75 70 70 6f 72 74 20 73 68 61   not support sha
35710 72 65 64 20 6d 65 6d 6f 72 79 20 0a 20 20 2a 2f  red memory .  */
35720 0a 20 20 69 66 28 20 65 4e 65 77 3d 3d 50 41 47  .  if( eNew==PAG
35730 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 57  ER_JOURNALMODE_W
35740 41 4c 0a 20 20 20 26 26 20 28 73 71 6c 69 74 65  AL.   && (sqlite
35750 33 53 74 72 6c 65 6e 33 30 28 7a 46 69 6c 65 6e  3Strlen30(zFilen
35760 61 6d 65 29 3d 3d 30 20 20 20 20 20 20 20 20 20  ame)==0         
35770 20 20 2f 2a 20 54 65 6d 70 20 66 69 6c 65 20 2a    /* Temp file *
35780 2f 0a 20 20 20 20 20 20 20 7c 7c 20 21 73 71 6c  /.       || !sql
35790 69 74 65 33 50 61 67 65 72 57 61 6c 53 75 70 70  ite3PagerWalSupp
357a0 6f 72 74 65 64 28 70 50 61 67 65 72 29 29 20 20  orted(pPager))  
357b0 20 2f 2a 20 4e 6f 20 73 68 61 72 65 64 2d 6d 65   /* No shared-me
357c0 6d 6f 72 79 20 73 75 70 70 6f 72 74 20 2a 2f 0a  mory support */.
357d0 20 20 29 7b 0a 20 20 20 20 65 4e 65 77 20 3d 20    ){.    eNew = 
357e0 65 4f 6c 64 3b 0a 20 20 7d 0a 0a 20 20 69 66 28  eOld;.  }..  if(
357f0 20 28 65 4e 65 77 21 3d 65 4f 6c 64 29 0a 20 20   (eNew!=eOld).  
35800 20 26 26 20 28 65 4f 6c 64 3d 3d 50 41 47 45 52   && (eOld==PAGER
35810 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 57 41 4c  _JOURNALMODE_WAL
35820 20 7c 7c 20 65 4e 65 77 3d 3d 50 41 47 45 52 5f   || eNew==PAGER_
35830 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 57 41 4c 29  JOURNALMODE_WAL)
35840 0a 20 20 29 7b 0a 20 20 20 20 69 66 28 20 21 64  .  ){.    if( !d
35850 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 7c 7c  b->autoCommit ||
35860 20 64 62 2d 3e 6e 56 64 62 65 52 65 61 64 3e 31   db->nVdbeRead>1
35870 20 29 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 53   ){.      rc = S
35880 51 4c 49 54 45 5f 45 52 52 4f 52 3b 0a 20 20 20  QLITE_ERROR;.   
35890 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 45 72     sqlite3VdbeEr
358a0 72 6f 72 28 70 2c 0a 20 20 20 20 20 20 20 20 20  ror(p,.         
358b0 20 22 63 61 6e 6e 6f 74 20 63 68 61 6e 67 65 20   "cannot change 
358c0 25 73 20 77 61 6c 20 6d 6f 64 65 20 66 72 6f 6d  %s wal mode from
358d0 20 77 69 74 68 69 6e 20 61 20 74 72 61 6e 73 61   within a transa
358e0 63 74 69 6f 6e 22 2c 0a 20 20 20 20 20 20 20 20  ction",.        
358f0 20 20 28 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a    (eNew==PAGER_J
35900 4f 55 52 4e 41 4c 4d 4f 44 45 5f 57 41 4c 20 3f  OURNALMODE_WAL ?
35910 20 22 69 6e 74 6f 22 20 3a 20 22 6f 75 74 20 6f   "into" : "out o
35920 66 22 29 0a 20 20 20 20 20 20 29 3b 0a 20 20 20  f").      );.   
35930 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75     goto abort_du
35940 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20  e_to_error;.    
35950 7d 65 6c 73 65 7b 0a 20 0a 20 20 20 20 20 20 69  }else{. .      i
35960 66 28 20 65 4f 6c 64 3d 3d 50 41 47 45 52 5f 4a  f( eOld==PAGER_J
35970 4f 55 52 4e 41 4c 4d 4f 44 45 5f 57 41 4c 20 29  OURNALMODE_WAL )
35980 7b 0a 20 20 20 20 20 20 20 20 2f 2a 20 49 66 20  {.        /* If 
35990 6c 65 61 76 69 6e 67 20 57 41 4c 20 6d 6f 64 65  leaving WAL mode
359a0 2c 20 63 6c 6f 73 65 20 74 68 65 20 6c 6f 67 20  , close the log 
359b0 66 69 6c 65 2e 20 49 66 20 73 75 63 63 65 73 73  file. If success
359c0 66 75 6c 2c 20 74 68 65 20 63 61 6c 6c 0a 20 20  ful, the call.  
359d0 20 20 20 20 20 20 2a 2a 20 74 6f 20 50 61 67 65        ** to Page
359e0 72 43 6c 6f 73 65 57 61 6c 28 29 20 63 68 65 63  rCloseWal() chec
359f0 6b 70 6f 69 6e 74 73 20 61 6e 64 20 64 65 6c 65  kpoints and dele
35a00 74 65 73 20 74 68 65 20 77 72 69 74 65 2d 61 68  tes the write-ah
35a10 65 61 64 2d 6c 6f 67 20 0a 20 20 20 20 20 20 20  ead-log .       
35a20 20 2a 2a 20 66 69 6c 65 2e 20 41 6e 20 45 58 43   ** file. An EXC
35a30 4c 55 53 49 56 45 20 6c 6f 63 6b 20 6d 61 79 20  LUSIVE lock may 
35a40 73 74 69 6c 6c 20 62 65 20 68 65 6c 64 20 6f 6e  still be held on
35a50 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69   the database fi
35a60 6c 65 20 0a 20 20 20 20 20 20 20 20 2a 2a 20 61  le .        ** a
35a70 66 74 65 72 20 61 20 73 75 63 63 65 73 73 66 75  fter a successfu
35a80 6c 20 72 65 74 75 72 6e 2e 20 0a 20 20 20 20 20  l return. .     
35a90 20 20 20 2a 2f 0a 20 20 20 20 20 20 20 20 72 63     */.        rc
35aa0 20 3d 20 73 71 6c 69 74 65 33 50 61 67 65 72 43   = sqlite3PagerC
35ab0 6c 6f 73 65 57 61 6c 28 70 50 61 67 65 72 2c 20  loseWal(pPager, 
35ac0 64 62 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28  db);.        if(
35ad0 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc==SQLITE_OK )
35ae0 7b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69  {.          sqli
35af0 74 65 33 50 61 67 65 72 53 65 74 4a 6f 75 72 6e  te3PagerSetJourn
35b00 61 6c 4d 6f 64 65 28 70 50 61 67 65 72 2c 20 65  alMode(pPager, e
35b10 4e 65 77 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a  New);.        }.
35b20 20 20 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20        }else if( 
35b30 65 4f 6c 64 3d 3d 50 41 47 45 52 5f 4a 4f 55 52  eOld==PAGER_JOUR
35b40 4e 41 4c 4d 4f 44 45 5f 4d 45 4d 4f 52 59 20 29  NALMODE_MEMORY )
35b50 7b 0a 20 20 20 20 20 20 20 20 2f 2a 20 43 61 6e  {.        /* Can
35b60 6e 6f 74 20 74 72 61 6e 73 69 74 69 6f 6e 20 64  not transition d
35b70 69 72 65 63 74 6c 79 20 66 72 6f 6d 20 4d 45 4d  irectly from MEM
35b80 4f 52 59 20 74 6f 20 57 41 4c 2e 20 20 55 73 65  ORY to WAL.  Use
35b90 20 6d 6f 64 65 20 4f 46 46 0a 20 20 20 20 20 20   mode OFF.      
35ba0 20 20 2a 2a 20 61 73 20 61 6e 20 69 6e 74 65 72    ** as an inter
35bb0 6d 65 64 69 61 74 65 20 2a 2f 0a 20 20 20 20 20  mediate */.     
35bc0 20 20 20 73 71 6c 69 74 65 33 50 61 67 65 72 53     sqlite3PagerS
35bd0 65 74 4a 6f 75 72 6e 61 6c 4d 6f 64 65 28 70 50  etJournalMode(pP
35be0 61 67 65 72 2c 20 50 41 47 45 52 5f 4a 4f 55 52  ager, PAGER_JOUR
35bf0 4e 41 4c 4d 4f 44 45 5f 4f 46 46 29 3b 0a 20 20  NALMODE_OFF);.  
35c00 20 20 20 20 7d 0a 20 20 0a 20 20 20 20 20 20 2f      }.  .      /
35c10 2a 20 4f 70 65 6e 20 61 20 74 72 61 6e 73 61 63  * Open a transac
35c20 74 69 6f 6e 20 6f 6e 20 74 68 65 20 64 61 74 61  tion on the data
35c30 62 61 73 65 20 66 69 6c 65 2e 20 52 65 67 61 72  base file. Regar
35c40 64 6c 65 73 73 20 6f 66 20 74 68 65 20 6a 6f 75  dless of the jou
35c50 72 6e 61 6c 0a 20 20 20 20 20 20 2a 2a 20 6d 6f  rnal.      ** mo
35c60 64 65 2c 20 74 68 69 73 20 74 72 61 6e 73 61 63  de, this transac
35c70 74 69 6f 6e 20 61 6c 77 61 79 73 20 75 73 65 73  tion always uses
35c80 20 61 20 72 6f 6c 6c 62 61 63 6b 20 6a 6f 75 72   a rollback jour
35c90 6e 61 6c 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20  nal..      */.  
35ca0 20 20 20 20 61 73 73 65 72 74 28 20 73 71 6c 69      assert( sqli
35cb0 74 65 33 42 74 72 65 65 49 73 49 6e 54 72 61 6e  te3BtreeIsInTran
35cc0 73 28 70 42 74 29 3d 3d 30 20 29 3b 0a 20 20 20  s(pBt)==0 );.   
35cd0 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54     if( rc==SQLIT
35ce0 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20 20  E_OK ){.        
35cf0 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
35d00 65 53 65 74 56 65 72 73 69 6f 6e 28 70 42 74 2c  eSetVersion(pBt,
35d10 20 28 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f   (eNew==PAGER_JO
35d20 55 52 4e 41 4c 4d 4f 44 45 5f 57 41 4c 20 3f 20  URNALMODE_WAL ? 
35d30 32 20 3a 20 31 29 29 3b 0a 20 20 20 20 20 20 7d  2 : 1));.      }
35d40 0a 20 20 20 20 7d 0a 20 20 7d 0a 23 65 6e 64 69  .    }.  }.#endi
35d50 66 20 2f 2a 20 69 66 6e 64 65 66 20 53 51 4c 49  f /* ifndef SQLI
35d60 54 45 5f 4f 4d 49 54 5f 57 41 4c 20 2a 2f 0a 0a  TE_OMIT_WAL */..
35d70 20 20 69 66 28 20 72 63 20 29 20 65 4e 65 77 20    if( rc ) eNew 
35d80 3d 20 65 4f 6c 64 3b 0a 20 20 65 4e 65 77 20 3d  = eOld;.  eNew =
35d90 20 73 71 6c 69 74 65 33 50 61 67 65 72 53 65 74   sqlite3PagerSet
35da0 4a 6f 75 72 6e 61 6c 4d 6f 64 65 28 70 50 61 67  JournalMode(pPag
35db0 65 72 2c 20 65 4e 65 77 29 3b 0a 0a 20 20 70 4f  er, eNew);..  pO
35dc0 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f  ut->flags = MEM_
35dd0 53 74 72 7c 4d 45 4d 5f 53 74 61 74 69 63 7c 4d  Str|MEM_Static|M
35de0 45 4d 5f 54 65 72 6d 3b 0a 20 20 70 4f 75 74 2d  EM_Term;.  pOut-
35df0 3e 7a 20 3d 20 28 63 68 61 72 20 2a 29 73 71 6c  >z = (char *)sql
35e00 69 74 65 33 4a 6f 75 72 6e 61 6c 4d 6f 64 65 6e  ite3JournalModen
35e10 61 6d 65 28 65 4e 65 77 29 3b 0a 20 20 70 4f 75  ame(eNew);.  pOu
35e20 74 2d 3e 6e 20 3d 20 73 71 6c 69 74 65 33 53 74  t->n = sqlite3St
35e30 72 6c 65 6e 33 30 28 70 4f 75 74 2d 3e 7a 29 3b  rlen30(pOut->z);
35e40 0a 20 20 70 4f 75 74 2d 3e 65 6e 63 20 3d 20 53  .  pOut->enc = S
35e50 51 4c 49 54 45 5f 55 54 46 38 3b 0a 20 20 73 71  QLITE_UTF8;.  sq
35e60 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67 65 45  lite3VdbeChangeE
35e70 6e 63 6f 64 69 6e 67 28 70 4f 75 74 2c 20 65 6e  ncoding(pOut, en
35e80 63 6f 64 69 6e 67 29 3b 0a 20 20 69 66 28 20 72  coding);.  if( r
35e90 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64  c ) goto abort_d
35ea0 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 62  ue_to_error;.  b
35eb0 72 65 61 6b 3b 0a 7d 3b 0a 23 65 6e 64 69 66 20  reak;.};.#endif 
35ec0 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50  /* SQLITE_OMIT_P
35ed0 52 41 47 4d 41 20 2a 2f 0a 0a 23 69 66 20 21 64  RAGMA */..#if !d
35ee0 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d  efined(SQLITE_OM
35ef0 49 54 5f 56 41 43 55 55 4d 29 20 26 26 20 21 64  IT_VACUUM) && !d
35f00 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d  efined(SQLITE_OM
35f10 49 54 5f 41 54 54 41 43 48 29 0a 2f 2a 20 4f 70  IT_ATTACH)./* Op
35f20 63 6f 64 65 3a 20 56 61 63 75 75 6d 20 50 31 20  code: Vacuum P1 
35f30 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 56 61  * * * *.**.** Va
35f40 63 75 75 6d 20 74 68 65 20 65 6e 74 69 72 65 20  cuum the entire 
35f50 64 61 74 61 62 61 73 65 20 50 31 2e 20 20 50 31  database P1.  P1
35f60 20 69 73 20 30 20 66 6f 72 20 22 6d 61 69 6e 22   is 0 for "main"
35f70 2c 20 61 6e 64 20 32 20 6f 72 20 6d 6f 72 65 0a  , and 2 or more.
35f80 2a 2a 20 66 6f 72 20 61 6e 20 61 74 74 61 63 68  ** for an attach
35f90 65 64 20 64 61 74 61 62 61 73 65 2e 20 20 54 68  ed database.  Th
35fa0 65 20 22 74 65 6d 70 22 20 64 61 74 61 62 61 73  e "temp" databas
35fb0 65 20 6d 61 79 20 6e 6f 74 20 62 65 20 76 61 63  e may not be vac
35fc0 75 75 6d 65 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f  uumed..*/.case O
35fd0 50 5f 56 61 63 75 75 6d 3a 20 7b 0a 20 20 61 73  P_Vacuum: {.  as
35fe0 73 65 72 74 28 20 70 2d 3e 72 65 61 64 4f 6e 6c  sert( p->readOnl
35ff0 79 3d 3d 30 20 29 3b 0a 20 20 72 63 20 3d 20 73  y==0 );.  rc = s
36000 71 6c 69 74 65 33 52 75 6e 56 61 63 75 75 6d 28  qlite3RunVacuum(
36010 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c  &p->zErrMsg, db,
36020 20 70 4f 70 2d 3e 70 31 29 3b 0a 20 20 69 66 28   pOp->p1);.  if(
36030 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74   rc ) goto abort
36040 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20  _due_to_error;. 
36050 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66   break;.}.#endif
36060 0a 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53  ..#if !defined(S
36070 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 56  QLITE_OMIT_AUTOV
36080 41 43 55 55 4d 29 0a 2f 2a 20 4f 70 63 6f 64 65  ACUUM)./* Opcode
36090 3a 20 49 6e 63 72 56 61 63 75 75 6d 20 50 31 20  : IncrVacuum P1 
360a0 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 50  P2 * * *.**.** P
360b0 65 72 66 6f 72 6d 20 61 20 73 69 6e 67 6c 65 20  erform a single 
360c0 73 74 65 70 20 6f 66 20 74 68 65 20 69 6e 63 72  step of the incr
360d0 65 6d 65 6e 74 61 6c 20 76 61 63 75 75 6d 20 70  emental vacuum p
360e0 72 6f 63 65 64 75 72 65 20 6f 6e 0a 2a 2a 20 74  rocedure on.** t
360f0 68 65 20 50 31 20 64 61 74 61 62 61 73 65 2e 20  he P1 database. 
36100 49 66 20 74 68 65 20 76 61 63 75 75 6d 20 68 61  If the vacuum ha
36110 73 20 66 69 6e 69 73 68 65 64 2c 20 6a 75 6d 70  s finished, jump
36120 20 74 6f 20 69 6e 73 74 72 75 63 74 69 6f 6e 0a   to instruction.
36130 2a 2a 20 50 32 2e 20 4f 74 68 65 72 77 69 73 65  ** P2. Otherwise
36140 2c 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 20 74  , fall through t
36150 6f 20 74 68 65 20 6e 65 78 74 20 69 6e 73 74 72  o the next instr
36160 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20  uction..*/.case 
36170 4f 50 5f 49 6e 63 72 56 61 63 75 75 6d 3a 20 7b  OP_IncrVacuum: {
36180 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20          /* jump 
36190 2a 2f 0a 20 20 42 74 72 65 65 20 2a 70 42 74 3b  */.  Btree *pBt;
361a0 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ..  assert( pOp-
361b0 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70  >p1>=0 && pOp->p
361c0 31 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61  1<db->nDb );.  a
361d0 73 73 65 72 74 28 20 44 62 4d 61 73 6b 54 65 73  ssert( DbMaskTes
361e0 74 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b 2c 20  t(p->btreeMask, 
361f0 70 4f 70 2d 3e 70 31 29 20 29 3b 0a 20 20 61 73  pOp->p1) );.  as
36200 73 65 72 74 28 20 70 2d 3e 72 65 61 64 4f 6e 6c  sert( p->readOnl
36210 79 3d 3d 30 20 29 3b 0a 20 20 70 42 74 20 3d 20  y==0 );.  pBt = 
36220 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 31 5d  db->aDb[pOp->p1]
36230 2e 70 42 74 3b 0a 20 20 72 63 20 3d 20 73 71 6c  .pBt;.  rc = sql
36240 69 74 65 33 42 74 72 65 65 49 6e 63 72 56 61 63  ite3BtreeIncrVac
36250 75 75 6d 28 70 42 74 29 3b 0a 20 20 56 64 62 65  uum(pBt);.  Vdbe
36260 42 72 61 6e 63 68 54 61 6b 65 6e 28 72 63 3d 3d  BranchTaken(rc==
36270 53 51 4c 49 54 45 5f 44 4f 4e 45 2c 32 29 3b 0a  SQLITE_DONE,2);.
36280 20 20 69 66 28 20 72 63 20 29 7b 0a 20 20 20 20    if( rc ){.    
36290 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 44  if( rc!=SQLITE_D
362a0 4f 4e 45 20 29 20 67 6f 74 6f 20 61 62 6f 72 74  ONE ) goto abort
362b0 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20  _due_to_error;. 
362c0 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f     rc = SQLITE_O
362d0 4b 3b 0a 20 20 20 20 67 6f 74 6f 20 6a 75 6d 70  K;.    goto jump
362e0 5f 74 6f 5f 70 32 3b 0a 20 20 7d 0a 20 20 62 72  _to_p2;.  }.  br
362f0 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 2f  eak;.}.#endif../
36300 2a 20 4f 70 63 6f 64 65 3a 20 45 78 70 69 72 65  * Opcode: Expire
36310 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a   P1 * * * *.**.*
36320 2a 20 43 61 75 73 65 20 70 72 65 63 6f 6d 70 69  * Cause precompi
36330 6c 65 64 20 73 74 61 74 65 6d 65 6e 74 73 20 74  led statements t
36340 6f 20 65 78 70 69 72 65 2e 20 20 57 68 65 6e 20  o expire.  When 
36350 61 6e 20 65 78 70 69 72 65 64 20 73 74 61 74 65  an expired state
36360 6d 65 6e 74 0a 2a 2a 20 69 73 20 65 78 65 63 75  ment.** is execu
36370 74 65 64 20 75 73 69 6e 67 20 73 71 6c 69 74 65  ted using sqlite
36380 33 5f 73 74 65 70 28 29 20 69 74 20 77 69 6c 6c  3_step() it will
36390 20 65 69 74 68 65 72 20 61 75 74 6f 6d 61 74 69   either automati
363a0 63 61 6c 6c 79 0a 2a 2a 20 72 65 70 72 65 70 61  cally.** reprepa
363b0 72 65 20 69 74 73 65 6c 66 20 28 69 66 20 69 74  re itself (if it
363c0 20 77 61 73 20 6f 72 69 67 69 6e 61 6c 6c 79 20   was originally 
363d0 63 72 65 61 74 65 64 20 75 73 69 6e 67 20 73 71  created using sq
363e0 6c 69 74 65 33 5f 70 72 65 70 61 72 65 5f 76 32  lite3_prepare_v2
363f0 28 29 29 0a 2a 2a 20 6f 72 20 69 74 20 77 69 6c  ()).** or it wil
36400 6c 20 66 61 69 6c 20 77 69 74 68 20 53 51 4c 49  l fail with SQLI
36410 54 45 5f 53 43 48 45 4d 41 2e 0a 2a 2a 20 0a 2a  TE_SCHEMA..** .*
36420 2a 20 49 66 20 50 31 20 69 73 20 30 2c 20 74 68  * If P1 is 0, th
36430 65 6e 20 61 6c 6c 20 53 51 4c 20 73 74 61 74 65  en all SQL state
36440 6d 65 6e 74 73 20 62 65 63 6f 6d 65 20 65 78 70  ments become exp
36450 69 72 65 64 2e 20 49 66 20 50 31 20 69 73 20 6e  ired. If P1 is n
36460 6f 6e 2d 7a 65 72 6f 2c 0a 2a 2a 20 74 68 65 6e  on-zero,.** then
36470 20 6f 6e 6c 79 20 74 68 65 20 63 75 72 72 65 6e   only the curren
36480 74 6c 79 20 65 78 65 63 75 74 69 6e 67 20 73 74  tly executing st
36490 61 74 65 6d 65 6e 74 20 69 73 20 65 78 70 69 72  atement is expir
364a0 65 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 45  ed..*/.case OP_E
364b0 78 70 69 72 65 3a 20 7b 0a 20 20 69 66 28 20 21  xpire: {.  if( !
364c0 70 4f 70 2d 3e 70 31 20 29 7b 0a 20 20 20 20 73  pOp->p1 ){.    s
364d0 71 6c 69 74 65 33 45 78 70 69 72 65 50 72 65 70  qlite3ExpirePrep
364e0 61 72 65 64 53 74 61 74 65 6d 65 6e 74 73 28 64  aredStatements(d
364f0 62 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  b);.  }else{.   
36500 20 70 2d 3e 65 78 70 69 72 65 64 20 3d 20 31 3b   p->expired = 1;
36510 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
36520 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
36530 4f 4d 49 54 5f 53 48 41 52 45 44 5f 43 41 43 48  OMIT_SHARED_CACH
36540 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 54 61 62  E./* Opcode: Tab
36550 6c 65 4c 6f 63 6b 20 50 31 20 50 32 20 50 33 20  leLock P1 P2 P3 
36560 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73  P4 *.** Synopsis
36570 3a 20 69 44 62 3d 50 31 20 72 6f 6f 74 3d 50 32  : iDb=P1 root=P2
36580 20 77 72 69 74 65 3d 50 33 0a 2a 2a 0a 2a 2a 20   write=P3.**.** 
36590 4f 62 74 61 69 6e 20 61 20 6c 6f 63 6b 20 6f 6e  Obtain a lock on
365a0 20 61 20 70 61 72 74 69 63 75 6c 61 72 20 74 61   a particular ta
365b0 62 6c 65 2e 20 54 68 69 73 20 69 6e 73 74 72 75  ble. This instru
365c0 63 74 69 6f 6e 20 69 73 20 6f 6e 6c 79 20 75 73  ction is only us
365d0 65 64 20 77 68 65 6e 0a 2a 2a 20 74 68 65 20 73  ed when.** the s
365e0 68 61 72 65 64 2d 63 61 63 68 65 20 66 65 61 74  hared-cache feat
365f0 75 72 65 20 69 73 20 65 6e 61 62 6c 65 64 2e 20  ure is enabled. 
36600 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 74 68 65  .**.** P1 is the
36610 20 69 6e 64 65 78 20 6f 66 20 74 68 65 20 64 61   index of the da
36620 74 61 62 61 73 65 20 69 6e 20 73 71 6c 69 74 65  tabase in sqlite
36630 33 2e 61 44 62 5b 5d 20 6f 66 20 74 68 65 20 64  3.aDb[] of the d
36640 61 74 61 62 61 73 65 0a 2a 2a 20 6f 6e 20 77 68  atabase.** on wh
36650 69 63 68 20 74 68 65 20 6c 6f 63 6b 20 69 73 20  ich the lock is 
36660 61 63 71 75 69 72 65 64 2e 20 20 41 20 72 65 61  acquired.  A rea
36670 64 6c 6f 63 6b 20 69 73 20 6f 62 74 61 69 6e 65  dlock is obtaine
36680 64 20 69 66 20 50 33 3d 3d 30 20 6f 72 0a 2a 2a  d if P3==0 or.**
36690 20 61 20 77 72 69 74 65 20 6c 6f 63 6b 20 69 66   a write lock if
366a0 20 50 33 3d 3d 31 2e 0a 2a 2a 0a 2a 2a 20 50 32   P3==1..**.** P2
366b0 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 72 6f   contains the ro
366c0 6f 74 2d 70 61 67 65 20 6f 66 20 74 68 65 20 74  ot-page of the t
366d0 61 62 6c 65 20 74 6f 20 6c 6f 63 6b 2e 0a 2a 2a  able to lock..**
366e0 0a 2a 2a 20 50 34 20 63 6f 6e 74 61 69 6e 73 20  .** P4 contains 
366f0 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65  a pointer to the
36700 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 74 61 62   name of the tab
36710 6c 65 20 62 65 69 6e 67 20 6c 6f 63 6b 65 64 2e  le being locked.
36720 20 54 68 69 73 20 69 73 20 6f 6e 6c 79 0a 2a 2a   This is only.**
36730 20 75 73 65 64 20 74 6f 20 67 65 6e 65 72 61 74   used to generat
36740 65 20 61 6e 20 65 72 72 6f 72 20 6d 65 73 73 61  e an error messa
36750 67 65 20 69 66 20 74 68 65 20 6c 6f 63 6b 20 63  ge if the lock c
36760 61 6e 6e 6f 74 20 62 65 20 6f 62 74 61 69 6e 65  annot be obtaine
36770 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 54 61  d..*/.case OP_Ta
36780 62 6c 65 4c 6f 63 6b 3a 20 7b 0a 20 20 75 38 20  bleLock: {.  u8 
36790 69 73 57 72 69 74 65 4c 6f 63 6b 20 3d 20 28 75  isWriteLock = (u
367a0 38 29 70 4f 70 2d 3e 70 33 3b 0a 20 20 69 66 28  8)pOp->p3;.  if(
367b0 20 69 73 57 72 69 74 65 4c 6f 63 6b 20 7c 7c 20   isWriteLock || 
367c0 30 3d 3d 28 64 62 2d 3e 66 6c 61 67 73 26 53 51  0==(db->flags&SQ
367d0 4c 49 54 45 5f 52 65 61 64 55 6e 63 6f 6d 6d 69  LITE_ReadUncommi
367e0 74 29 20 29 7b 0a 20 20 20 20 69 6e 74 20 70 31  t) ){.    int p1
367f0 20 3d 20 70 4f 70 2d 3e 70 31 3b 20 0a 20 20 20   = pOp->p1; .   
36800 20 61 73 73 65 72 74 28 20 70 31 3e 3d 30 20 26   assert( p1>=0 &
36810 26 20 70 31 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a  & p1<db->nDb );.
36820 20 20 20 20 61 73 73 65 72 74 28 20 44 62 4d 61      assert( DbMa
36830 73 6b 54 65 73 74 28 70 2d 3e 62 74 72 65 65 4d  skTest(p->btreeM
36840 61 73 6b 2c 20 70 31 29 20 29 3b 0a 20 20 20 20  ask, p1) );.    
36850 61 73 73 65 72 74 28 20 69 73 57 72 69 74 65 4c  assert( isWriteL
36860 6f 63 6b 3d 3d 30 20 7c 7c 20 69 73 57 72 69 74  ock==0 || isWrit
36870 65 4c 6f 63 6b 3d 3d 31 20 29 3b 0a 20 20 20 20  eLock==1 );.    
36880 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
36890 65 4c 6f 63 6b 54 61 62 6c 65 28 64 62 2d 3e 61  eLockTable(db->a
368a0 44 62 5b 70 31 5d 2e 70 42 74 2c 20 70 4f 70 2d  Db[p1].pBt, pOp-
368b0 3e 70 32 2c 20 69 73 57 72 69 74 65 4c 6f 63 6b  >p2, isWriteLock
368c0 29 3b 0a 20 20 20 20 69 66 28 20 72 63 20 29 7b  );.    if( rc ){
368d0 0a 20 20 20 20 20 20 69 66 28 20 28 72 63 26 30  .      if( (rc&0
368e0 78 46 46 29 3d 3d 53 51 4c 49 54 45 5f 4c 4f 43  xFF)==SQLITE_LOC
368f0 4b 45 44 20 29 7b 0a 20 20 20 20 20 20 20 20 63  KED ){.        c
36900 6f 6e 73 74 20 63 68 61 72 20 2a 7a 20 3d 20 70  onst char *z = p
36910 4f 70 2d 3e 70 34 2e 7a 3b 0a 20 20 20 20 20 20  Op->p4.z;.      
36920 20 20 73 71 6c 69 74 65 33 56 64 62 65 45 72 72    sqlite3VdbeErr
36930 6f 72 28 70 2c 20 22 64 61 74 61 62 61 73 65 20  or(p, "database 
36940 74 61 62 6c 65 20 69 73 20 6c 6f 63 6b 65 64 3a  table is locked:
36950 20 25 73 22 2c 20 7a 29 3b 0a 20 20 20 20 20 20   %s", z);.      
36960 7d 0a 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f  }.      goto abo
36970 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
36980 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65  .    }.  }.  bre
36990 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20  ak;.}.#endif /* 
369a0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 48 41 52  SQLITE_OMIT_SHAR
369b0 45 44 5f 43 41 43 48 45 20 2a 2f 0a 0a 23 69 66  ED_CACHE */..#if
369c0 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
369d0 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f 2a  _VIRTUALTABLE./*
369e0 20 4f 70 63 6f 64 65 3a 20 56 42 65 67 69 6e 20   Opcode: VBegin 
369f0 2a 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a  * * * P4 *.**.**
36a00 20 50 34 20 6d 61 79 20 62 65 20 61 20 70 6f 69   P4 may be a poi
36a10 6e 74 65 72 20 74 6f 20 61 6e 20 73 71 6c 69 74  nter to an sqlit
36a20 65 33 5f 76 74 61 62 20 73 74 72 75 63 74 75 72  e3_vtab structur
36a30 65 2e 20 49 66 20 73 6f 2c 20 63 61 6c 6c 20 74  e. If so, call t
36a40 68 65 20 0a 2a 2a 20 78 42 65 67 69 6e 20 6d 65  he .** xBegin me
36a50 74 68 6f 64 20 66 6f 72 20 74 68 61 74 20 74 61  thod for that ta
36a60 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 41 6c 73 6f 2c  ble..**.** Also,
36a70 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20   whether or not 
36a80 50 34 20 69 73 20 73 65 74 2c 20 63 68 65 63 6b  P4 is set, check
36a90 20 74 68 61 74 20 74 68 69 73 20 69 73 20 6e 6f   that this is no
36aa0 74 20 62 65 69 6e 67 20 63 61 6c 6c 65 64 20 66  t being called f
36ab0 72 6f 6d 0a 2a 2a 20 77 69 74 68 69 6e 20 61 20  rom.** within a 
36ac0 63 61 6c 6c 62 61 63 6b 20 74 6f 20 61 20 76 69  callback to a vi
36ad0 72 74 75 61 6c 20 74 61 62 6c 65 20 78 53 79 6e  rtual table xSyn
36ae0 63 28 29 20 6d 65 74 68 6f 64 2e 20 49 66 20 69  c() method. If i
36af0 74 20 69 73 2c 20 74 68 65 20 65 72 72 6f 72 0a  t is, the error.
36b00 2a 2a 20 63 6f 64 65 20 77 69 6c 6c 20 62 65 20  ** code will be 
36b10 73 65 74 20 74 6f 20 53 51 4c 49 54 45 5f 4c 4f  set to SQLITE_LO
36b20 43 4b 45 44 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  CKED..*/.case OP
36b30 5f 56 42 65 67 69 6e 3a 20 7b 0a 20 20 56 54 61  _VBegin: {.  VTa
36b40 62 6c 65 20 2a 70 56 54 61 62 3b 0a 20 20 70 56  ble *pVTab;.  pV
36b50 54 61 62 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 56  Tab = pOp->p4.pV
36b60 74 61 62 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69  tab;.  rc = sqli
36b70 74 65 33 56 74 61 62 42 65 67 69 6e 28 64 62 2c  te3VtabBegin(db,
36b80 20 70 56 54 61 62 29 3b 0a 20 20 69 66 28 20 70   pVTab);.  if( p
36b90 56 54 61 62 20 29 20 73 71 6c 69 74 65 33 56 74  VTab ) sqlite3Vt
36ba0 61 62 49 6d 70 6f 72 74 45 72 72 6d 73 67 28 70  abImportErrmsg(p
36bb0 2c 20 70 56 54 61 62 2d 3e 70 56 74 61 62 29 3b  , pVTab->pVtab);
36bc0 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f  .  if( rc ) goto
36bd0 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
36be0 72 6f 72 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  ror;.  break;.}.
36bf0 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45  #endif /* SQLITE
36c00 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
36c10 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53  LE */..#ifndef S
36c20 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
36c30 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64  ALTABLE./* Opcod
36c40 65 3a 20 56 43 72 65 61 74 65 20 50 31 20 50 32  e: VCreate P1 P2
36c50 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 50 32 20   * * *.**.** P2 
36c60 69 73 20 61 20 72 65 67 69 73 74 65 72 20 74 68  is a register th
36c70 61 74 20 68 6f 6c 64 73 20 74 68 65 20 6e 61 6d  at holds the nam
36c80 65 20 6f 66 20 61 20 76 69 72 74 75 61 6c 20 74  e of a virtual t
36c90 61 62 6c 65 20 69 6e 20 64 61 74 61 62 61 73 65  able in database
36ca0 20 0a 2a 2a 20 50 31 2e 20 43 61 6c 6c 20 74 68   .** P1. Call th
36cb0 65 20 78 43 72 65 61 74 65 20 6d 65 74 68 6f 64  e xCreate method
36cc0 20 66 6f 72 20 74 68 61 74 20 74 61 62 6c 65 2e   for that table.
36cd0 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 43 72 65  .*/.case OP_VCre
36ce0 61 74 65 3a 20 7b 0a 20 20 4d 65 6d 20 73 4d 65  ate: {.  Mem sMe
36cf0 6d 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46  m;          /* F
36d00 6f 72 20 73 74 6f 72 69 6e 67 20 74 68 65 20 72  or storing the r
36d10 65 63 6f 72 64 20 62 65 69 6e 67 20 64 65 63 6f  ecord being deco
36d20 64 65 64 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63  ded */.  const c
36d30 68 61 72 20 2a 7a 54 61 62 3b 20 20 2f 2a 20 4e  har *zTab;  /* N
36d40 61 6d 65 20 6f 66 20 74 68 65 20 76 69 72 74 75  ame of the virtu
36d50 61 6c 20 74 61 62 6c 65 20 2a 2f 0a 0a 20 20 6d  al table */..  m
36d60 65 6d 73 65 74 28 26 73 4d 65 6d 2c 20 30 2c 20  emset(&sMem, 0, 
36d70 73 69 7a 65 6f 66 28 73 4d 65 6d 29 29 3b 0a 20  sizeof(sMem));. 
36d80 20 73 4d 65 6d 2e 64 62 20 3d 20 64 62 3b 0a 20   sMem.db = db;. 
36d90 20 2f 2a 20 42 65 63 61 75 73 65 20 50 32 20 69   /* Because P2 i
36da0 73 20 61 6c 77 61 79 73 20 61 20 73 74 61 74 69  s always a stati
36db0 63 20 73 74 72 69 6e 67 2c 20 69 74 20 69 73 20  c string, it is 
36dc0 69 6d 70 6f 73 73 69 62 6c 65 20 66 6f 72 20 74  impossible for t
36dd0 68 65 0a 20 20 2a 2a 20 73 71 6c 69 74 65 33 56  he.  ** sqlite3V
36de0 64 62 65 4d 65 6d 43 6f 70 79 28 29 20 74 6f 20  dbeMemCopy() to 
36df0 66 61 69 6c 20 2a 2f 0a 20 20 61 73 73 65 72 74  fail */.  assert
36e00 28 20 28 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d  ( (aMem[pOp->p2]
36e10 2e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 53 74 72  .flags & MEM_Str
36e20 29 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  )!=0 );.  assert
36e30 28 20 28 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d  ( (aMem[pOp->p2]
36e40 2e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 53 74 61  .flags & MEM_Sta
36e50 74 69 63 29 21 3d 30 20 29 3b 0a 20 20 72 63 20  tic)!=0 );.  rc 
36e60 3d 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d  = sqlite3VdbeMem
36e70 43 6f 70 79 28 26 73 4d 65 6d 2c 20 26 61 4d 65  Copy(&sMem, &aMe
36e80 6d 5b 70 4f 70 2d 3e 70 32 5d 29 3b 0a 20 20 61  m[pOp->p2]);.  a
36e90 73 73 65 72 74 28 20 72 63 3d 3d 53 51 4c 49 54  ssert( rc==SQLIT
36ea0 45 5f 4f 4b 20 29 3b 0a 20 20 7a 54 61 62 20 3d  E_OK );.  zTab =
36eb0 20 28 63 6f 6e 73 74 20 63 68 61 72 2a 29 73 71   (const char*)sq
36ec0 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 65 78 74  lite3_value_text
36ed0 28 26 73 4d 65 6d 29 3b 0a 20 20 61 73 73 65 72  (&sMem);.  asser
36ee0 74 28 20 7a 54 61 62 20 7c 7c 20 64 62 2d 3e 6d  t( zTab || db->m
36ef0 61 6c 6c 6f 63 46 61 69 6c 65 64 20 29 3b 0a 20  allocFailed );. 
36f00 20 69 66 28 20 7a 54 61 62 20 29 7b 0a 20 20 20   if( zTab ){.   
36f10 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 74 61   rc = sqlite3Vta
36f20 62 43 61 6c 6c 43 72 65 61 74 65 28 64 62 2c 20  bCallCreate(db, 
36f30 70 4f 70 2d 3e 70 31 2c 20 7a 54 61 62 2c 20 26  pOp->p1, zTab, &
36f40 70 2d 3e 7a 45 72 72 4d 73 67 29 3b 0a 20 20 7d  p->zErrMsg);.  }
36f50 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65  .  sqlite3VdbeMe
36f60 6d 52 65 6c 65 61 73 65 28 26 73 4d 65 6d 29 3b  mRelease(&sMem);
36f70 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f  .  if( rc ) goto
36f80 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
36f90 72 6f 72 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  ror;.  break;.}.
36fa0 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45  #endif /* SQLITE
36fb0 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
36fc0 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53  LE */..#ifndef S
36fd0 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
36fe0 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64  ALTABLE./* Opcod
36ff0 65 3a 20 56 44 65 73 74 72 6f 79 20 50 31 20 2a  e: VDestroy P1 *
37000 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 50 34   * P4 *.**.** P4
37010 20 69 73 20 74 68 65 20 6e 61 6d 65 20 6f 66 20   is the name of 
37020 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20  a virtual table 
37030 69 6e 20 64 61 74 61 62 61 73 65 20 50 31 2e 20  in database P1. 
37040 20 43 61 6c 6c 20 74 68 65 20 78 44 65 73 74 72   Call the xDestr
37050 6f 79 20 6d 65 74 68 6f 64 0a 2a 2a 20 6f 66 20  oy method.** of 
37060 74 68 61 74 20 74 61 62 6c 65 2e 0a 2a 2f 0a 63  that table..*/.c
37070 61 73 65 20 4f 50 5f 56 44 65 73 74 72 6f 79 3a  ase OP_VDestroy:
37080 20 7b 0a 20 20 64 62 2d 3e 6e 56 44 65 73 74 72   {.  db->nVDestr
37090 6f 79 2b 2b 3b 0a 20 20 72 63 20 3d 20 73 71 6c  oy++;.  rc = sql
370a0 69 74 65 33 56 74 61 62 43 61 6c 6c 44 65 73 74  ite3VtabCallDest
370b0 72 6f 79 28 64 62 2c 20 70 4f 70 2d 3e 70 31 2c  roy(db, pOp->p1,
370c0 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20 64   pOp->p4.z);.  d
370d0 62 2d 3e 6e 56 44 65 73 74 72 6f 79 2d 2d 3b 0a  b->nVDestroy--;.
370e0 20 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20    if( rc ) goto 
370f0 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
37100 6f 72 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23  or;.  break;.}.#
37110 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f  endif /* SQLITE_
37120 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c  OMIT_VIRTUALTABL
37130 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51  E */..#ifndef SQ
37140 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41  LITE_OMIT_VIRTUA
37150 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65  LTABLE./* Opcode
37160 3a 20 56 4f 70 65 6e 20 50 31 20 2a 20 2a 20 50  : VOpen P1 * * P
37170 34 20 2a 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20  4 *.**.** P4 is 
37180 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 76  a pointer to a v
37190 69 72 74 75 61 6c 20 74 61 62 6c 65 20 6f 62 6a  irtual table obj
371a0 65 63 74 2c 20 61 6e 20 73 71 6c 69 74 65 33 5f  ect, an sqlite3_
371b0 76 74 61 62 20 73 74 72 75 63 74 75 72 65 2e 0a  vtab structure..
371c0 2a 2a 20 50 31 20 69 73 20 61 20 63 75 72 73 6f  ** P1 is a curso
371d0 72 20 6e 75 6d 62 65 72 2e 20 20 54 68 69 73 20  r number.  This 
371e0 6f 70 63 6f 64 65 20 6f 70 65 6e 73 20 61 20 63  opcode opens a c
371f0 75 72 73 6f 72 20 74 6f 20 74 68 65 20 76 69 72  ursor to the vir
37200 74 75 61 6c 0a 2a 2a 20 74 61 62 6c 65 20 61 6e  tual.** table an
37210 64 20 73 74 6f 72 65 73 20 74 68 61 74 20 63 75  d stores that cu
37220 72 73 6f 72 20 69 6e 20 50 31 2e 0a 2a 2f 0a 63  rsor in P1..*/.c
37230 61 73 65 20 4f 50 5f 56 4f 70 65 6e 3a 20 7b 0a  ase OP_VOpen: {.
37240 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43    VdbeCursor *pC
37250 75 72 3b 0a 20 20 73 71 6c 69 74 65 33 5f 76 74  ur;.  sqlite3_vt
37260 61 62 5f 63 75 72 73 6f 72 20 2a 70 56 43 75 72  ab_cursor *pVCur
37270 3b 0a 20 20 73 71 6c 69 74 65 33 5f 76 74 61 62  ;.  sqlite3_vtab
37280 20 2a 70 56 74 61 62 3b 0a 20 20 63 6f 6e 73 74   *pVtab;.  const
37290 20 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20   sqlite3_module 
372a0 2a 70 4d 6f 64 75 6c 65 3b 0a 0a 20 20 61 73 73  *pModule;..  ass
372b0 65 72 74 28 20 70 2d 3e 62 49 73 52 65 61 64 65  ert( p->bIsReade
372c0 72 20 29 3b 0a 20 20 70 43 75 72 20 3d 20 30 3b  r );.  pCur = 0;
372d0 0a 20 20 70 56 43 75 72 20 3d 20 30 3b 0a 20 20  .  pVCur = 0;.  
372e0 70 56 74 61 62 20 3d 20 70 4f 70 2d 3e 70 34 2e  pVtab = pOp->p4.
372f0 70 56 74 61 62 2d 3e 70 56 74 61 62 3b 0a 20 20  pVtab->pVtab;.  
37300 69 66 28 20 70 56 74 61 62 3d 3d 30 20 7c 7c 20  if( pVtab==0 || 
37310 4e 45 56 45 52 28 70 56 74 61 62 2d 3e 70 4d 6f  NEVER(pVtab->pMo
37320 64 75 6c 65 3d 3d 30 29 20 29 7b 0a 20 20 20 20  dule==0) ){.    
37330 72 63 20 3d 20 53 51 4c 49 54 45 5f 4c 4f 43 4b  rc = SQLITE_LOCK
37340 45 44 3b 0a 20 20 20 20 67 6f 74 6f 20 61 62 6f  ED;.    goto abo
37350 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
37360 0a 20 20 7d 0a 20 20 70 4d 6f 64 75 6c 65 20 3d  .  }.  pModule =
37370 20 70 56 74 61 62 2d 3e 70 4d 6f 64 75 6c 65 3b   pVtab->pModule;
37380 0a 20 20 72 63 20 3d 20 70 4d 6f 64 75 6c 65 2d  .  rc = pModule-
37390 3e 78 4f 70 65 6e 28 70 56 74 61 62 2c 20 26 70  >xOpen(pVtab, &p
373a0 56 43 75 72 29 3b 0a 20 20 73 71 6c 69 74 65 33  VCur);.  sqlite3
373b0 56 74 61 62 49 6d 70 6f 72 74 45 72 72 6d 73 67  VtabImportErrmsg
373c0 28 70 2c 20 70 56 74 61 62 29 3b 0a 20 20 69 66  (p, pVtab);.  if
373d0 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72  ( rc ) goto abor
373e0 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
373f0 0a 20 20 2f 2a 20 49 6e 69 74 69 61 6c 69 7a 65  .  /* Initialize
37400 20 73 71 6c 69 74 65 33 5f 76 74 61 62 5f 63 75   sqlite3_vtab_cu
37410 72 73 6f 72 20 62 61 73 65 20 63 6c 61 73 73 20  rsor base class 
37420 2a 2f 0a 20 20 70 56 43 75 72 2d 3e 70 56 74 61  */.  pVCur->pVta
37430 62 20 3d 20 70 56 74 61 62 3b 0a 0a 20 20 2f 2a  b = pVtab;..  /*
37440 20 49 6e 69 74 69 61 6c 69 7a 65 20 76 64 62 65   Initialize vdbe
37450 20 63 75 72 73 6f 72 20 6f 62 6a 65 63 74 20 2a   cursor object *
37460 2f 0a 20 20 70 43 75 72 20 3d 20 61 6c 6c 6f 63  /.  pCur = alloc
37470 61 74 65 43 75 72 73 6f 72 28 70 2c 20 70 4f 70  ateCursor(p, pOp
37480 2d 3e 70 31 2c 20 30 2c 20 2d 31 2c 20 43 55 52  ->p1, 0, -1, CUR
37490 54 59 50 45 5f 56 54 41 42 29 3b 0a 20 20 69 66  TYPE_VTAB);.  if
374a0 28 20 70 43 75 72 20 29 7b 0a 20 20 20 20 70 43  ( pCur ){.    pC
374b0 75 72 2d 3e 75 63 2e 70 56 43 75 72 20 3d 20 70  ur->uc.pVCur = p
374c0 56 43 75 72 3b 0a 20 20 20 20 70 56 74 61 62 2d  VCur;.    pVtab-
374d0 3e 6e 52 65 66 2b 2b 3b 0a 20 20 7d 65 6c 73 65  >nRef++;.  }else
374e0 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 64 62  {.    assert( db
374f0 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 29  ->mallocFailed )
37500 3b 0a 20 20 20 20 70 4d 6f 64 75 6c 65 2d 3e 78  ;.    pModule->x
37510 43 6c 6f 73 65 28 70 56 43 75 72 29 3b 0a 20 20  Close(pVCur);.  
37520 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20    goto no_mem;. 
37530 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65   }.  break;.}.#e
37540 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f  ndif /* SQLITE_O
37550 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45  MIT_VIRTUALTABLE
37560 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c   */..#ifndef SQL
37570 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c  ITE_OMIT_VIRTUAL
37580 54 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a  TABLE./* Opcode:
37590 20 56 46 69 6c 74 65 72 20 50 31 20 50 32 20 50   VFilter P1 P2 P
375a0 33 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73  3 P4 *.** Synops
375b0 69 73 3a 20 69 70 6c 61 6e 3d 72 5b 50 33 5d 20  is: iplan=r[P3] 
375c0 7a 70 6c 61 6e 3d 27 50 34 27 0a 2a 2a 0a 2a 2a  zplan='P4'.**.**
375d0 20 50 31 20 69 73 20 61 20 63 75 72 73 6f 72 20   P1 is a cursor 
375e0 6f 70 65 6e 65 64 20 75 73 69 6e 67 20 56 4f 70  opened using VOp
375f0 65 6e 2e 20 20 50 32 20 69 73 20 61 6e 20 61 64  en.  P2 is an ad
37600 64 72 65 73 73 20 74 6f 20 6a 75 6d 70 20 74 6f  dress to jump to
37610 20 69 66 0a 2a 2a 20 74 68 65 20 66 69 6c 74 65   if.** the filte
37620 72 65 64 20 72 65 73 75 6c 74 20 73 65 74 20 69  red result set i
37630 73 20 65 6d 70 74 79 2e 0a 2a 2a 0a 2a 2a 20 50  s empty..**.** P
37640 34 20 69 73 20 65 69 74 68 65 72 20 4e 55 4c 4c  4 is either NULL
37650 20 6f 72 20 61 20 73 74 72 69 6e 67 20 74 68 61   or a string tha
37660 74 20 77 61 73 20 67 65 6e 65 72 61 74 65 64 20  t was generated 
37670 62 79 20 74 68 65 20 78 42 65 73 74 49 6e 64 65  by the xBestInde
37680 78 0a 2a 2a 20 6d 65 74 68 6f 64 20 6f 66 20 74  x.** method of t
37690 68 65 20 6d 6f 64 75 6c 65 2e 20 20 54 68 65 20  he module.  The 
376a0 69 6e 74 65 72 70 72 65 74 61 74 69 6f 6e 20 6f  interpretation o
376b0 66 20 74 68 65 20 50 34 20 73 74 72 69 6e 67 20  f the P4 string 
376c0 69 73 20 6c 65 66 74 0a 2a 2a 20 74 6f 20 74 68  is left.** to th
376d0 65 20 6d 6f 64 75 6c 65 20 69 6d 70 6c 65 6d 65  e module impleme
376e0 6e 74 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54  ntation..**.** T
376f0 68 69 73 20 6f 70 63 6f 64 65 20 69 6e 76 6f 6b  his opcode invok
37700 65 73 20 74 68 65 20 78 46 69 6c 74 65 72 20 6d  es the xFilter m
37710 65 74 68 6f 64 20 6f 6e 20 74 68 65 20 76 69 72  ethod on the vir
37720 74 75 61 6c 20 74 61 62 6c 65 20 73 70 65 63 69  tual table speci
37730 66 69 65 64 0a 2a 2a 20 62 79 20 50 31 2e 20 20  fied.** by P1.  
37740 54 68 65 20 69 6e 74 65 67 65 72 20 71 75 65 72  The integer quer
37750 79 20 70 6c 61 6e 20 70 61 72 61 6d 65 74 65 72  y plan parameter
37760 20 74 6f 20 78 46 69 6c 74 65 72 20 69 73 20 73   to xFilter is s
37770 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74 65  tored in registe
37780 72 0a 2a 2a 20 50 33 2e 20 52 65 67 69 73 74 65  r.** P3. Registe
37790 72 20 50 33 2b 31 20 73 74 6f 72 65 73 20 74 68  r P3+1 stores th
377a0 65 20 61 72 67 63 20 70 61 72 61 6d 65 74 65 72  e argc parameter
377b0 20 74 6f 20 62 65 20 70 61 73 73 65 64 20 74 6f   to be passed to
377c0 20 74 68 65 0a 2a 2a 20 78 46 69 6c 74 65 72 20   the.** xFilter 
377d0 6d 65 74 68 6f 64 2e 20 52 65 67 69 73 74 65 72  method. Register
377e0 73 20 50 33 2b 32 2e 2e 50 33 2b 31 2b 61 72 67  s P3+2..P3+1+arg
377f0 63 20 61 72 65 20 74 68 65 20 61 72 67 63 0a 2a  c are the argc.*
37800 2a 20 61 64 64 69 74 69 6f 6e 61 6c 20 70 61 72  * additional par
37810 61 6d 65 74 65 72 73 20 77 68 69 63 68 20 61 72  ameters which ar
37820 65 20 70 61 73 73 65 64 20 74 6f 0a 2a 2a 20 78  e passed to.** x
37830 46 69 6c 74 65 72 20 61 73 20 61 72 67 76 2e 20  Filter as argv. 
37840 52 65 67 69 73 74 65 72 20 50 33 2b 32 20 62 65  Register P3+2 be
37850 63 6f 6d 65 73 20 61 72 67 76 5b 30 5d 20 77 68  comes argv[0] wh
37860 65 6e 20 70 61 73 73 65 64 20 74 6f 20 78 46 69  en passed to xFi
37870 6c 74 65 72 2e 0a 2a 2a 0a 2a 2a 20 41 20 6a 75  lter..**.** A ju
37880 6d 70 20 69 73 20 6d 61 64 65 20 74 6f 20 50 32  mp is made to P2
37890 20 69 66 20 74 68 65 20 72 65 73 75 6c 74 20 73   if the result s
378a0 65 74 20 61 66 74 65 72 20 66 69 6c 74 65 72 69  et after filteri
378b0 6e 67 20 77 6f 75 6c 64 20 62 65 20 65 6d 70 74  ng would be empt
378c0 79 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 46  y..*/.case OP_VF
378d0 69 6c 74 65 72 3a 20 7b 20 20 20 2f 2a 20 6a 75  ilter: {   /* ju
378e0 6d 70 20 2a 2f 0a 20 20 69 6e 74 20 6e 41 72 67  mp */.  int nArg
378f0 3b 0a 20 20 69 6e 74 20 69 51 75 65 72 79 3b 0a  ;.  int iQuery;.
37900 20 20 63 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f    const sqlite3_
37910 6d 6f 64 75 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b  module *pModule;
37920 0a 20 20 4d 65 6d 20 2a 70 51 75 65 72 79 3b 0a  .  Mem *pQuery;.
37930 20 20 4d 65 6d 20 2a 70 41 72 67 63 3b 0a 20 20    Mem *pArgc;.  
37940 73 71 6c 69 74 65 33 5f 76 74 61 62 5f 63 75 72  sqlite3_vtab_cur
37950 73 6f 72 20 2a 70 56 43 75 72 3b 0a 20 20 73 71  sor *pVCur;.  sq
37960 6c 69 74 65 33 5f 76 74 61 62 20 2a 70 56 74 61  lite3_vtab *pVta
37970 62 3b 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20  b;.  VdbeCursor 
37980 2a 70 43 75 72 3b 0a 20 20 69 6e 74 20 72 65 73  *pCur;.  int res
37990 3b 0a 20 20 69 6e 74 20 69 3b 0a 20 20 4d 65 6d  ;.  int i;.  Mem
379a0 20 2a 2a 61 70 41 72 67 3b 0a 0a 20 20 70 51 75   **apArg;..  pQu
379b0 65 72 79 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  ery = &aMem[pOp-
379c0 3e 70 33 5d 3b 0a 20 20 70 41 72 67 63 20 3d 20  >p3];.  pArgc = 
379d0 26 70 51 75 65 72 79 5b 31 5d 3b 0a 20 20 70 43  &pQuery[1];.  pC
379e0 75 72 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f  ur = p->apCsr[pO
379f0 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74  p->p1];.  assert
37a00 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 70 51 75  ( memIsValid(pQu
37a10 65 72 79 29 20 29 3b 0a 20 20 52 45 47 49 53 54  ery) );.  REGIST
37a20 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 33  ER_TRACE(pOp->p3
37a30 2c 20 70 51 75 65 72 79 29 3b 0a 20 20 61 73 73  , pQuery);.  ass
37a40 65 72 74 28 20 70 43 75 72 2d 3e 65 43 75 72 54  ert( pCur->eCurT
37a50 79 70 65 3d 3d 43 55 52 54 59 50 45 5f 56 54 41  ype==CURTYPE_VTA
37a60 42 20 29 3b 0a 20 20 70 56 43 75 72 20 3d 20 70  B );.  pVCur = p
37a70 43 75 72 2d 3e 75 63 2e 70 56 43 75 72 3b 0a 20  Cur->uc.pVCur;. 
37a80 20 70 56 74 61 62 20 3d 20 70 56 43 75 72 2d 3e   pVtab = pVCur->
37a90 70 56 74 61 62 3b 0a 20 20 70 4d 6f 64 75 6c 65  pVtab;.  pModule
37aa0 20 3d 20 70 56 74 61 62 2d 3e 70 4d 6f 64 75 6c   = pVtab->pModul
37ab0 65 3b 0a 0a 20 20 2f 2a 20 47 72 61 62 20 74 68  e;..  /* Grab th
37ac0 65 20 69 6e 64 65 78 20 6e 75 6d 62 65 72 20 61  e index number a
37ad0 6e 64 20 61 72 67 63 20 70 61 72 61 6d 65 74 65  nd argc paramete
37ae0 72 73 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20  rs */.  assert( 
37af0 28 70 51 75 65 72 79 2d 3e 66 6c 61 67 73 26 4d  (pQuery->flags&M
37b00 45 4d 5f 49 6e 74 29 21 3d 30 20 26 26 20 70 41  EM_Int)!=0 && pA
37b10 72 67 63 2d 3e 66 6c 61 67 73 3d 3d 4d 45 4d 5f  rgc->flags==MEM_
37b20 49 6e 74 20 29 3b 0a 20 20 6e 41 72 67 20 3d 20  Int );.  nArg = 
37b30 28 69 6e 74 29 70 41 72 67 63 2d 3e 75 2e 69 3b  (int)pArgc->u.i;
37b40 0a 20 20 69 51 75 65 72 79 20 3d 20 28 69 6e 74  .  iQuery = (int
37b50 29 70 51 75 65 72 79 2d 3e 75 2e 69 3b 0a 0a 20  )pQuery->u.i;.. 
37b60 20 2f 2a 20 49 6e 76 6f 6b 65 20 74 68 65 20 78   /* Invoke the x
37b70 46 69 6c 74 65 72 20 6d 65 74 68 6f 64 20 2a 2f  Filter method */
37b80 0a 20 20 72 65 73 20 3d 20 30 3b 0a 20 20 61 70  .  res = 0;.  ap
37b90 41 72 67 20 3d 20 70 2d 3e 61 70 41 72 67 3b 0a  Arg = p->apArg;.
37ba0 20 20 66 6f 72 28 69 20 3d 20 30 3b 20 69 3c 6e    for(i = 0; i<n
37bb0 41 72 67 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 61  Arg; i++){.    a
37bc0 70 41 72 67 5b 69 5d 20 3d 20 26 70 41 72 67 63  pArg[i] = &pArgc
37bd0 5b 69 2b 31 5d 3b 0a 20 20 7d 0a 20 20 72 63 20  [i+1];.  }.  rc 
37be0 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78 46 69 6c 74  = pModule->xFilt
37bf0 65 72 28 70 56 43 75 72 2c 20 69 51 75 65 72 79  er(pVCur, iQuery
37c00 2c 20 70 4f 70 2d 3e 70 34 2e 7a 2c 20 6e 41 72  , pOp->p4.z, nAr
37c10 67 2c 20 61 70 41 72 67 29 3b 0a 20 20 73 71 6c  g, apArg);.  sql
37c20 69 74 65 33 56 74 61 62 49 6d 70 6f 72 74 45 72  ite3VtabImportEr
37c30 72 6d 73 67 28 70 2c 20 70 56 74 61 62 29 3b 0a  rmsg(p, pVtab);.
37c40 20 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20    if( rc ) goto 
37c50 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
37c60 6f 72 3b 0a 20 20 72 65 73 20 3d 20 70 4d 6f 64  or;.  res = pMod
37c70 75 6c 65 2d 3e 78 45 6f 66 28 70 56 43 75 72 29  ule->xEof(pVCur)
37c80 3b 0a 20 20 70 43 75 72 2d 3e 6e 75 6c 6c 52 6f  ;.  pCur->nullRo
37c90 77 20 3d 20 30 3b 0a 20 20 56 64 62 65 42 72 61  w = 0;.  VdbeBra
37ca0 6e 63 68 54 61 6b 65 6e 28 72 65 73 21 3d 30 2c  nchTaken(res!=0,
37cb0 32 29 3b 0a 20 20 69 66 28 20 72 65 73 20 29 20  2);.  if( res ) 
37cc0 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b  goto jump_to_p2;
37cd0 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64  .  break;.}.#end
37ce0 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49  if /* SQLITE_OMI
37cf0 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 20 2a  T_VIRTUALTABLE *
37d00 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  /..#ifndef SQLIT
37d10 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41  E_OMIT_VIRTUALTA
37d20 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56  BLE./* Opcode: V
37d30 43 6f 6c 75 6d 6e 20 50 31 20 50 32 20 50 33 20  Column P1 P2 P3 
37d40 2a 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73  * P5.** Synopsis
37d50 3a 20 72 5b 50 33 5d 3d 76 63 6f 6c 75 6d 6e 28  : r[P3]=vcolumn(
37d60 50 32 29 0a 2a 2a 0a 2a 2a 20 53 74 6f 72 65 20  P2).**.** Store 
37d70 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 20 74  in register P3 t
37d80 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20  he value of the 
37d90 50 32 2d 74 68 20 63 6f 6c 75 6d 6e 20 6f 66 0a  P2-th column of.
37da0 2a 2a 20 74 68 65 20 63 75 72 72 65 6e 74 20 72  ** the current r
37db0 6f 77 20 6f 66 20 74 68 65 20 76 69 72 74 75 61  ow of the virtua
37dc0 6c 2d 74 61 62 6c 65 20 6f 66 20 63 75 72 73 6f  l-table of curso
37dd0 72 20 50 31 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74  r P1..**.** If t
37de0 68 65 20 56 43 6f 6c 75 6d 6e 20 6f 70 63 6f 64  he VColumn opcod
37df0 65 20 69 73 20 62 65 69 6e 67 20 75 73 65 64 20  e is being used 
37e00 74 6f 20 66 65 74 63 68 20 74 68 65 20 76 61 6c  to fetch the val
37e10 75 65 20 6f 66 0a 2a 2a 20 61 6e 20 75 6e 63 68  ue of.** an unch
37e20 61 6e 67 69 6e 67 20 63 6f 6c 75 6d 6e 20 64 75  anging column du
37e30 72 69 6e 67 20 61 6e 20 55 50 44 41 54 45 20 6f  ring an UPDATE o
37e40 70 65 72 61 74 69 6f 6e 2c 20 74 68 65 6e 20 74  peration, then t
37e50 68 65 20 50 35 0a 2a 2a 20 76 61 6c 75 65 20 69  he P5.** value i
37e60 73 20 31 2e 20 20 4f 74 68 65 72 77 69 73 65 2c  s 1.  Otherwise,
37e70 20 50 35 20 69 73 20 30 2e 20 20 54 68 65 20 50   P5 is 0.  The P
37e80 35 20 76 61 6c 75 65 20 69 73 20 72 65 74 75 72  5 value is retur
37e90 6e 65 64 0a 2a 2a 20 62 79 20 73 71 6c 69 74 65  ned.** by sqlite
37ea0 33 5f 76 74 61 62 5f 6e 6f 63 68 61 6e 67 65 28  3_vtab_nochange(
37eb0 29 20 72 6f 75 74 69 6e 65 20 61 6e 64 20 63 61  ) routine and ca
37ec0 6e 20 62 65 20 75 73 65 64 0a 2a 2a 20 62 79 20  n be used.** by 
37ed0 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 69 6d  virtual table im
37ee0 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 73 20 74 6f  plementations to
37ef0 20 72 65 74 75 72 6e 20 73 70 65 63 69 61 6c 20   return special 
37f00 22 6e 6f 2d 63 68 61 6e 67 65 22 0a 2a 2a 20 6d  "no-change".** m
37f10 61 72 6b 73 20 77 68 69 63 68 20 63 61 6e 20 62  arks which can b
37f20 65 20 6d 6f 72 65 20 65 66 66 69 63 69 65 6e 74  e more efficient
37f30 2c 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20 74  , depending on t
37f40 68 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65  he virtual table
37f50 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 43 6f  ..*/.case OP_VCo
37f60 6c 75 6d 6e 3a 20 7b 0a 20 20 73 71 6c 69 74 65  lumn: {.  sqlite
37f70 33 5f 76 74 61 62 20 2a 70 56 74 61 62 3b 0a 20  3_vtab *pVtab;. 
37f80 20 63 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d   const sqlite3_m
37f90 6f 64 75 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b 0a  odule *pModule;.
37fa0 20 20 4d 65 6d 20 2a 70 44 65 73 74 3b 0a 20 20    Mem *pDest;.  
37fb0 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 20  sqlite3_context 
37fc0 73 43 6f 6e 74 65 78 74 3b 0a 0a 20 20 56 64 62  sContext;..  Vdb
37fd0 65 43 75 72 73 6f 72 20 2a 70 43 75 72 20 3d 20  eCursor *pCur = 
37fe0 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31  p->apCsr[pOp->p1
37ff0 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 75  ];.  assert( pCu
38000 72 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43 55 52  r->eCurType==CUR
38010 54 59 50 45 5f 56 54 41 42 20 29 3b 0a 20 20 61  TYPE_VTAB );.  a
38020 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30  ssert( pOp->p3>0
38030 20 26 26 20 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d   && pOp->p3<=(p-
38040 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75  >nMem+1 - p->nCu
38050 72 73 6f 72 29 20 29 3b 0a 20 20 70 44 65 73 74  rsor) );.  pDest
38060 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33   = &aMem[pOp->p3
38070 5d 3b 0a 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43  ];.  memAboutToC
38080 68 61 6e 67 65 28 70 2c 20 70 44 65 73 74 29 3b  hange(p, pDest);
38090 0a 20 20 69 66 28 20 70 43 75 72 2d 3e 6e 75 6c  .  if( pCur->nul
380a0 6c 52 6f 77 20 29 7b 0a 20 20 20 20 73 71 6c 69  lRow ){.    sqli
380b0 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c  te3VdbeMemSetNul
380c0 6c 28 70 44 65 73 74 29 3b 0a 20 20 20 20 62 72  l(pDest);.    br
380d0 65 61 6b 3b 0a 20 20 7d 0a 20 20 70 56 74 61 62  eak;.  }.  pVtab
380e0 20 3d 20 70 43 75 72 2d 3e 75 63 2e 70 56 43 75   = pCur->uc.pVCu
380f0 72 2d 3e 70 56 74 61 62 3b 0a 20 20 70 4d 6f 64  r->pVtab;.  pMod
38100 75 6c 65 20 3d 20 70 56 74 61 62 2d 3e 70 4d 6f  ule = pVtab->pMo
38110 64 75 6c 65 3b 0a 20 20 61 73 73 65 72 74 28 20  dule;.  assert( 
38120 70 4d 6f 64 75 6c 65 2d 3e 78 43 6f 6c 75 6d 6e  pModule->xColumn
38130 20 29 3b 0a 20 20 6d 65 6d 73 65 74 28 26 73 43   );.  memset(&sC
38140 6f 6e 74 65 78 74 2c 20 30 2c 20 73 69 7a 65 6f  ontext, 0, sizeo
38150 66 28 73 43 6f 6e 74 65 78 74 29 29 3b 0a 20 20  f(sContext));.  
38160 73 43 6f 6e 74 65 78 74 2e 70 4f 75 74 20 3d 20  sContext.pOut = 
38170 70 44 65 73 74 3b 0a 20 20 69 66 28 20 70 4f 70  pDest;.  if( pOp
38180 2d 3e 70 35 20 29 7b 0a 20 20 20 20 73 71 6c 69  ->p5 ){.    sqli
38190 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c  te3VdbeMemSetNul
381a0 6c 28 70 44 65 73 74 29 3b 0a 20 20 20 20 70 44  l(pDest);.    pD
381b0 65 73 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d  est->flags = MEM
381c0 5f 4e 75 6c 6c 7c 4d 45 4d 5f 5a 65 72 6f 3b 0a  _Null|MEM_Zero;.
381d0 20 20 20 20 70 44 65 73 74 2d 3e 75 2e 6e 5a 65      pDest->u.nZe
381e0 72 6f 20 3d 20 30 3b 0a 20 20 7d 65 6c 73 65 7b  ro = 0;.  }else{
381f0 0a 20 20 20 20 4d 65 6d 53 65 74 54 79 70 65 46  .    MemSetTypeF
38200 6c 61 67 28 70 44 65 73 74 2c 20 4d 45 4d 5f 4e  lag(pDest, MEM_N
38210 75 6c 6c 29 3b 0a 20 20 7d 0a 20 20 72 63 20 3d  ull);.  }.  rc =
38220 20 70 4d 6f 64 75 6c 65 2d 3e 78 43 6f 6c 75 6d   pModule->xColum
38230 6e 28 70 43 75 72 2d 3e 75 63 2e 70 56 43 75 72  n(pCur->uc.pVCur
38240 2c 20 26 73 43 6f 6e 74 65 78 74 2c 20 70 4f 70  , &sContext, pOp
38250 2d 3e 70 32 29 3b 0a 20 20 73 71 6c 69 74 65 33  ->p2);.  sqlite3
38260 56 74 61 62 49 6d 70 6f 72 74 45 72 72 6d 73 67  VtabImportErrmsg
38270 28 70 2c 20 70 56 74 61 62 29 3b 0a 20 20 69 66  (p, pVtab);.  if
38280 28 20 73 43 6f 6e 74 65 78 74 2e 69 73 45 72 72  ( sContext.isErr
38290 6f 72 3e 30 20 29 7b 0a 20 20 20 20 73 71 6c 69  or>0 ){.    sqli
382a0 74 65 33 56 64 62 65 45 72 72 6f 72 28 70 2c 20  te3VdbeError(p, 
382b0 22 25 73 22 2c 20 73 71 6c 69 74 65 33 5f 76 61  "%s", sqlite3_va
382c0 6c 75 65 5f 74 65 78 74 28 70 44 65 73 74 29 29  lue_text(pDest))
382d0 3b 0a 20 20 20 20 72 63 20 3d 20 73 43 6f 6e 74  ;.    rc = sCont
382e0 65 78 74 2e 69 73 45 72 72 6f 72 3b 0a