/ Hex Artifact Content
Login

Artifact 27fe1628d39aa7d71645d6a26f70066bd0e17cd74d010bad3bf73879efbe216a:


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 74 68 65 20 74 79 70 65 20 6f 66 20 62  is the type of b
10d0: 72 61 6e 63 68 2e 20 20 49 20 69 73 20 74 68 65  ranch.  I is the
10e0: 20 64 69 72 65 63 74 69 6f 6e 20 74 61 6b 65 6e   direction taken
10f0: 20 66 6f 72 20 74 68 69 73 20 69 6e 73 74 61 6e   for this instan
1100: 63 65 20 6f 66 0a 2a 2a 20 74 68 65 20 62 72 61  ce of.** the bra
1110: 6e 63 68 2e 0a 2a 2a 0a 2a 2a 20 20 20 4d 3a 20  nch..**.**   M: 
1120: 32 20 2d 20 74 77 6f 2d 77 61 79 20 62 72 61 6e  2 - two-way bran
1130: 63 68 20 28 49 3d 30 3a 20 66 61 6c 6c 2d 74 68  ch (I=0: fall-th
1140: 72 75 20 20 20 31 3a 20 6a 75 6d 70 20 20 20 20  ru   1: jump    
1150: 20 20 20 20 20 20 20 20 20 20 20 20 29 0a 2a 2a              ).**
1160: 20 20 20 20 20 20 33 20 2d 20 74 77 6f 2d 77 61        3 - two-wa
1170: 79 20 2b 20 4e 55 4c 4c 20 28 49 3d 30 3a 20 66  y + NULL (I=0: f
1180: 61 6c 6c 2d 74 68 72 75 20 20 20 31 3a 20 6a 75  all-thru   1: ju
1190: 6d 70 20 20 20 20 20 20 32 3a 20 4e 55 4c 4c 20  mp      2: NULL 
11a0: 20 20 29 0a 2a 2a 20 20 20 20 20 20 34 20 2d 20    ).**      4 - 
11b0: 4f 50 5f 4a 75 6d 70 20 20 20 20 20 20 20 20 28  OP_Jump        (
11c0: 49 3d 30 3a 20 6a 75 6d 70 20 70 31 20 20 20 20  I=0: jump p1    
11d0: 20 31 3a 20 6a 75 6d 70 20 70 32 20 20 20 32 3a   1: jump p2   2:
11e0: 20 6a 75 6d 70 20 70 33 29 0a 2a 2a 0a 2a 2a 20   jump p3).**.** 
11f0: 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20  In other words, 
1200: 69 66 20 4d 20 69 73 20 32 2c 20 74 68 65 6e 20  if M is 2, then 
1210: 49 20 69 73 20 65 69 74 68 65 72 20 30 20 28 66  I is either 0 (f
1220: 6f 72 20 66 61 6c 6c 2d 74 68 72 6f 75 67 68 29  or fall-through)
1230: 20 6f 72 0a 2a 2a 20 31 20 28 66 6f 72 20 77 68   or.** 1 (for wh
1240: 65 6e 20 74 68 65 20 62 72 61 6e 63 68 20 69 73  en the branch is
1250: 20 74 61 6b 65 6e 29 2e 20 20 49 66 20 4d 20 69   taken).  If M i
1260: 73 20 33 2c 20 74 68 65 20 49 20 69 73 20 30 20  s 3, the I is 0 
1270: 66 6f 72 20 61 6e 0a 2a 2a 20 6f 72 64 69 6e 61  for an.** ordina
1280: 72 79 20 66 61 6c 6c 2d 74 68 72 6f 75 67 68 2c  ry fall-through,
1290: 20 49 20 69 73 20 31 20 69 66 20 74 68 65 20 62   I is 1 if the b
12a0: 72 61 6e 63 68 20 77 61 73 20 74 61 6b 65 6e 2c  ranch was taken,
12b0: 20 61 6e 64 20 49 20 69 73 20 32 20 0a 2a 2a 20   and I is 2 .** 
12c0: 69 66 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66  if the result of
12d0: 20 63 6f 6d 70 61 72 69 73 6f 6e 20 69 73 20 4e   comparison is N
12e0: 55 4c 4c 2e 20 20 46 6f 72 20 4d 3d 33 2c 20 49  ULL.  For M=3, I
12f0: 3d 32 20 74 68 65 20 6a 75 6d 70 20 6d 61 79 20  =2 the jump may 
1300: 6f 72 0a 2a 2a 20 6d 61 79 20 6e 6f 74 20 62 65  or.** may not be
1310: 20 74 61 6b 65 6e 2c 20 64 65 70 65 6e 64 69 6e   taken, dependin
1320: 67 20 6f 6e 20 74 68 65 20 53 51 4c 49 54 45 5f  g on the SQLITE_
1330: 4a 55 4d 50 49 46 4e 55 4c 4c 20 66 6c 61 67 73  JUMPIFNULL flags
1340: 20 69 6e 20 70 35 2e 0a 2a 2a 20 57 68 65 6e 20   in p5..** When 
1350: 4d 20 69 73 20 34 2c 20 74 68 61 74 20 6d 65 61  M is 4, that mea
1360: 6e 73 20 74 68 61 74 20 61 6e 20 4f 50 5f 4a 75  ns that an OP_Ju
1370: 6d 70 20 69 73 20 62 65 69 6e 67 20 72 75 6e 2e  mp is being run.
1380: 20 20 49 20 69 73 20 30 2c 20 31 2c 20 6f 72 20    I is 0, 1, or 
1390: 32 0a 2a 2a 20 64 65 70 65 6e 64 69 6e 67 20 6f  2.** depending o
13a0: 6e 20 69 66 20 74 68 65 20 6f 70 65 72 61 6e 64  n if the operand
13b0: 73 20 61 72 65 20 6c 65 73 73 20 74 68 61 6e 2c  s are less than,
13c0: 20 65 71 75 61 6c 2c 20 6f 72 20 67 72 65 61 74   equal, or great
13d0: 65 72 20 74 68 61 6e 2e 0a 2a 2a 0a 2a 2a 20 69  er than..**.** i
13e0: 53 72 63 4c 69 6e 65 20 69 73 20 74 68 65 20 73  SrcLine is the s
13f0: 6f 75 72 63 65 20 63 6f 64 65 20 6c 69 6e 65 20  ource code line 
1400: 28 66 72 6f 6d 20 74 68 65 20 5f 5f 4c 49 4e 45  (from the __LINE
1410: 5f 5f 20 6d 61 63 72 6f 29 20 74 68 61 74 0a 2a  __ macro) that.*
1420: 2a 20 67 65 6e 65 72 61 74 65 64 20 74 68 65 20  * generated the 
1430: 56 44 42 45 20 69 6e 73 74 72 75 63 74 69 6f 6e  VDBE instruction
1440: 20 63 6f 6d 62 69 6e 65 64 20 77 69 74 68 20 66   combined with f
1450: 6c 61 67 20 62 69 74 73 2e 20 20 54 68 65 20 73  lag bits.  The s
1460: 6f 75 72 63 65 0a 2a 2a 20 63 6f 64 65 20 6c 69  ource.** code li
1470: 6e 65 20 6e 75 6d 62 65 72 20 69 73 20 69 6e 20  ne number is in 
1480: 74 68 65 20 6c 6f 77 65 72 20 32 34 20 62 69 74  the lower 24 bit
1490: 73 20 6f 66 20 69 53 72 63 4c 69 6e 65 20 61 6e  s of iSrcLine an
14a0: 64 20 74 68 65 20 75 70 70 65 72 0a 2a 2a 20 38  d the upper.** 8
14b0: 20 62 79 74 65 73 20 61 72 65 20 66 6c 61 67 73   bytes are flags
14c0: 2e 20 20 54 68 65 20 6c 6f 77 65 72 20 74 68 72  .  The lower thr
14d0: 65 65 20 62 69 74 73 20 6f 66 20 74 68 65 20 66  ee bits of the f
14e0: 6c 61 67 73 20 69 6e 64 69 63 61 74 65 0a 2a 2a  lags indicate.**
14f0: 20 76 61 6c 75 65 73 20 66 6f 72 20 49 20 74 68   values for I th
1500: 61 74 20 73 68 6f 75 6c 64 20 6e 65 76 65 72 20  at should never 
1510: 6f 63 63 75 72 2e 20 20 46 6f 72 20 65 78 61 6d  occur.  For exam
1520: 70 6c 65 2c 20 69 66 20 74 68 65 20 62 72 61 6e  ple, if the bran
1530: 63 68 20 69 73 0a 2a 2a 20 61 6c 77 61 79 73 20  ch is.** always 
1540: 74 61 6b 65 6e 2c 20 74 68 65 20 66 6c 61 67 73  taken, the flags
1550: 20 73 68 6f 75 6c 64 20 62 65 20 30 78 30 35 20   should be 0x05 
1560: 73 69 6e 63 65 20 74 68 65 20 66 61 6c 6c 2d 74  since the fall-t
1570: 68 72 6f 75 67 68 20 61 6e 64 0a 2a 2a 20 61 6c  hrough and.** al
1580: 74 65 72 6e 61 74 65 20 62 72 61 6e 63 68 20 61  ternate branch a
1590: 72 65 20 6e 65 76 65 72 20 74 61 6b 65 6e 2e 20  re never taken. 
15a0: 20 49 66 20 61 20 62 72 61 6e 63 68 20 69 73 20   If a branch is 
15b0: 6e 65 76 65 72 20 74 61 6b 65 6e 20 74 68 65 6e  never taken then
15c0: 0a 2a 2a 20 66 6c 61 67 73 20 73 68 6f 75 6c 64  .** flags should
15d0: 20 62 65 20 30 78 30 36 20 73 69 6e 63 65 20 6f   be 0x06 since o
15e0: 6e 6c 79 20 74 68 65 20 66 61 6c 6c 2d 74 68 72  nly the fall-thr
15f0: 6f 75 67 68 20 61 70 70 72 6f 61 63 68 20 69 73  ough approach is
1600: 20 61 6c 6c 6f 77 65 64 2e 0a 2a 2a 0a 2a 2a 20   allowed..**.** 
1610: 42 69 74 20 30 78 30 38 20 6f 66 20 74 68 65 20  Bit 0x08 of the 
1620: 66 6c 61 67 73 20 69 6e 64 69 63 61 74 65 73 20  flags indicates 
1630: 61 6e 20 4f 50 5f 4a 75 6d 70 20 6f 70 63 6f 64  an OP_Jump opcod
1640: 65 20 74 68 61 74 20 69 73 20 6f 6e 6c 79 0a 2a  e that is only.*
1650: 2a 20 69 6e 74 65 72 65 73 74 65 64 20 69 6e 20  * interested in 
1660: 65 71 75 61 6c 20 6f 72 20 6e 6f 74 2d 65 71 75  equal or not-equ
1670: 61 6c 2e 20 20 49 6e 20 6f 74 68 65 72 20 77 6f  al.  In other wo
1680: 72 64 73 2c 20 49 3d 3d 30 20 61 6e 64 20 49 3d  rds, I==0 and I=
1690: 3d 32 0a 2a 2a 20 73 68 6f 75 6c 64 20 62 65 20  =2.** should be 
16a0: 74 72 65 61 74 65 64 20 61 73 20 65 71 75 69 76  treated as equiv
16b0: 61 6c 65 6e 74 0a 2a 2a 0a 2a 2a 20 53 69 6e 63  alent.**.** Sinc
16c0: 65 20 6f 6e 6c 79 20 61 20 6c 69 6e 65 20 6e 75  e only a line nu
16d0: 6d 62 65 72 20 69 73 20 72 65 74 61 69 6e 65 64  mber is retained
16e0: 2c 20 6e 6f 74 20 74 68 65 20 66 69 6c 65 6e 61  , not the filena
16f0: 6d 65 2c 20 74 68 69 73 20 6d 61 63 72 6f 0a 2a  me, this macro.*
1700: 2a 20 6f 6e 6c 79 20 77 6f 72 6b 73 20 66 6f 72  * only works for
1710: 20 61 6d 61 6c 67 61 6d 61 74 69 6f 6e 20 62 75   amalgamation bu
1720: 69 6c 64 73 2e 20 20 42 75 74 20 74 68 61 74 20  ilds.  But that 
1730: 69 73 20 6f 6b 2c 20 73 69 6e 63 65 20 74 68 65  is ok, since the
1740: 73 65 20 6d 61 63 72 6f 73 0a 2a 2a 20 73 68 6f  se macros.** sho
1750: 75 6c 64 20 62 65 20 6e 6f 2d 6f 70 73 20 65 78  uld be no-ops ex
1760: 63 65 70 74 20 66 6f 72 20 73 70 65 63 69 61 6c  cept for special
1770: 20 62 75 69 6c 64 73 20 75 73 65 64 20 74 6f 20   builds used to 
1780: 6d 65 61 73 75 72 65 20 74 65 73 74 20 63 6f 76  measure test cov
1790: 65 72 61 67 65 2e 0a 2a 2f 0a 23 69 66 20 21 64  erage..*/.#if !d
17a0: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 56 44  efined(SQLITE_VD
17b0: 42 45 5f 43 4f 56 45 52 41 47 45 29 0a 23 20 64  BE_COVERAGE).# d
17c0: 65 66 69 6e 65 20 56 64 62 65 42 72 61 6e 63 68  efine VdbeBranch
17d0: 54 61 6b 65 6e 28 49 2c 4d 29 0a 23 65 6c 73 65  Taken(I,M).#else
17e0: 0a 23 20 64 65 66 69 6e 65 20 56 64 62 65 42 72  .# define VdbeBr
17f0: 61 6e 63 68 54 61 6b 65 6e 28 49 2c 4d 29 20 76  anchTaken(I,M) v
1800: 64 62 65 54 61 6b 65 42 72 61 6e 63 68 28 70 4f  dbeTakeBranch(pO
1810: 70 2d 3e 69 53 72 63 4c 69 6e 65 2c 49 2c 4d 29  p->iSrcLine,I,M)
1820: 0a 20 20 73 74 61 74 69 63 20 76 6f 69 64 20 76  .  static void v
1830: 64 62 65 54 61 6b 65 42 72 61 6e 63 68 28 75 33  dbeTakeBranch(u3
1840: 32 20 69 53 72 63 4c 69 6e 65 2c 20 75 38 20 49  2 iSrcLine, u8 I
1850: 2c 20 75 38 20 4d 29 7b 0a 20 20 20 20 75 38 20  , u8 M){.    u8 
1860: 6d 4e 65 76 65 72 3b 0a 20 20 20 20 61 73 73 65  mNever;.    asse
1870: 72 74 28 20 49 3c 3d 32 20 29 3b 20 20 2f 2a 20  rt( I<=2 );  /* 
1880: 30 3a 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 2c  0: fall through,
1890: 20 20 31 3a 20 74 61 6b 65 6e 2c 20 20 32 3a 20    1: taken,  2: 
18a0: 61 6c 74 65 72 6e 61 74 65 20 74 61 6b 65 6e 20  alternate taken 
18b0: 2a 2f 0a 20 20 20 20 61 73 73 65 72 74 28 20 4d  */.    assert( M
18c0: 3c 3d 34 20 29 3b 20 20 2f 2a 20 32 3a 20 74 77  <=4 );  /* 2: tw
18d0: 6f 2d 77 61 79 20 62 72 61 6e 63 68 2c 20 33 3a  o-way branch, 3:
18e0: 20 74 68 72 65 65 2d 77 61 79 20 62 72 61 6e 63   three-way branc
18f0: 68 2c 20 34 3a 20 4f 50 5f 4a 75 6d 70 20 2a 2f  h, 4: OP_Jump */
1900: 0a 20 20 20 20 61 73 73 65 72 74 28 20 49 3c 4d  .    assert( I<M
1910: 20 29 3b 20 20 20 2f 2a 20 49 20 63 61 6e 20 6f   );   /* I can o
1920: 6e 6c 79 20 62 65 20 32 20 69 66 20 4d 20 69 73  nly be 2 if M is
1930: 20 33 20 6f 72 20 34 20 2a 2f 0a 20 20 20 20 2f   3 or 4 */.    /
1940: 2a 20 54 72 61 6e 73 66 6f 72 6d 20 49 20 66 72  * Transform I fr
1950: 6f 6d 20 61 20 69 6e 74 65 67 65 72 20 5b 30 2c  om a integer [0,
1960: 31 2c 32 5d 20 69 6e 74 6f 20 61 20 62 69 74 6d  1,2] into a bitm
1970: 61 73 6b 20 6f 66 20 5b 31 2c 32 2c 34 5d 20 2a  ask of [1,2,4] *
1980: 2f 0a 20 20 20 20 49 20 3d 20 31 3c 3c 49 3b 0a  /.    I = 1<<I;.
1990: 20 20 20 20 2f 2a 20 54 68 65 20 75 70 70 65 72      /* The upper
19a0: 20 38 20 62 69 74 73 20 6f 66 20 69 53 72 63 4c   8 bits of iSrcL
19b0: 69 6e 65 20 61 72 65 20 66 6c 61 67 73 2e 20 20  ine are flags.  
19c0: 54 68 65 20 6c 6f 77 65 72 20 74 68 72 65 65 20  The lower three 
19d0: 62 69 74 73 20 6f 66 0a 20 20 20 20 2a 2a 20 74  bits of.    ** t
19e0: 68 65 20 66 6c 61 67 73 20 69 6e 64 69 63 61 74  he flags indicat
19f0: 65 20 64 69 72 65 63 74 69 6f 6e 73 20 74 68 61  e directions tha
1a00: 74 20 74 68 65 20 62 72 61 6e 63 68 20 63 61 6e  t the branch can
1a10: 20 6e 65 76 65 72 20 67 6f 2e 20 20 49 66 0a 20   never go.  If. 
1a20: 20 20 20 2a 2a 20 61 20 62 72 61 6e 63 68 20 72     ** a branch r
1a30: 65 61 6c 6c 79 20 64 6f 65 73 20 67 6f 20 69 6e  eally does go in
1a40: 20 6f 6e 65 20 6f 66 20 74 68 6f 73 65 20 64 69   one of those di
1a50: 72 65 63 74 69 6f 6e 73 2c 20 61 73 73 65 72 74  rections, assert
1a60: 20 72 69 67 68 74 0a 20 20 20 20 2a 2a 20 61 77   right.    ** aw
1a70: 61 79 2e 20 2a 2f 0a 20 20 20 20 6d 4e 65 76 65  ay. */.    mNeve
1a80: 72 20 3d 20 69 53 72 63 4c 69 6e 65 20 3e 3e 20  r = iSrcLine >> 
1a90: 32 34 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20  24;.    assert( 
1aa0: 28 49 20 26 20 6d 4e 65 76 65 72 29 3d 3d 30 20  (I & mNever)==0 
1ab0: 29 3b 0a 20 20 20 20 69 66 28 20 73 71 6c 69 74  );.    if( sqlit
1ac0: 65 33 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 2e 78  e3GlobalConfig.x
1ad0: 56 64 62 65 42 72 61 6e 63 68 3d 3d 30 20 29 20  VdbeBranch==0 ) 
1ae0: 72 65 74 75 72 6e 3b 20 20 2f 2a 4e 4f 5f 54 45  return;  /*NO_TE
1af0: 53 54 2a 2f 0a 20 20 20 20 2f 2a 20 49 6e 76 6f  ST*/.    /* Invo
1b00: 6b 65 20 74 68 65 20 62 72 61 6e 63 68 20 63 6f  ke the branch co
1b10: 76 65 72 61 67 65 20 63 61 6c 6c 62 61 63 6b 20  verage callback 
1b20: 77 69 74 68 20 74 68 72 65 65 20 61 72 67 75 6d  with three argum
1b30: 65 6e 74 73 3a 0a 20 20 20 20 2a 2a 20 20 20 20  ents:.    **    
1b40: 69 53 72 63 4c 69 6e 65 20 2d 20 74 68 65 20 6c  iSrcLine - the l
1b50: 69 6e 65 20 6e 75 6d 62 65 72 20 6f 66 20 74 68  ine number of th
1b60: 65 20 56 64 62 65 43 6f 76 65 72 61 67 65 28 29  e VdbeCoverage()
1b70: 20 6d 61 63 72 6f 2c 20 77 69 74 68 0a 20 20 20   macro, with.   
1b80: 20 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20   **             
1b90: 20 20 66 6c 61 67 73 20 72 65 6d 6f 76 65 64 2e    flags removed.
1ba0: 0a 20 20 20 20 2a 2a 20 20 20 20 49 20 20 20 20  .    **    I    
1bb0: 20 20 20 20 2d 20 4d 61 73 6b 20 6f 66 20 62 69      - Mask of bi
1bc0: 74 73 20 30 78 30 37 20 69 6e 64 69 63 61 74 69  ts 0x07 indicati
1bd0: 6e 67 20 77 68 69 63 68 20 63 61 73 65 73 20 61  ng which cases a
1be0: 72 65 20 61 72 65 0a 20 20 20 20 2a 2a 20 20 20  re are.    **   
1bf0: 20 20 20 20 20 20 20 20 20 20 20 20 66 75 6c 66              fulf
1c00: 69 6c 6c 65 64 20 62 79 20 74 68 69 73 20 69 6e  illed by this in
1c10: 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 6a 75  stance of the ju
1c20: 6d 70 2e 20 20 30 78 30 31 20 6d 65 61 6e 73 0a  mp.  0x01 means.
1c30: 20 20 20 20 2a 2a 20 20 20 20 20 20 20 20 20 20      **          
1c40: 20 20 20 20 20 66 61 6c 6c 2d 74 68 72 75 2c 20       fall-thru, 
1c50: 30 78 30 32 20 6d 65 61 6e 73 20 74 61 6b 65 6e  0x02 means taken
1c60: 2c 20 30 78 30 34 20 6d 65 61 6e 73 20 4e 55 4c  , 0x04 means NUL
1c70: 4c 2e 20 20 41 6e 79 0a 20 20 20 20 2a 2a 20 20  L.  Any.    **  
1c80: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 6d 70               imp
1c90: 6f 73 73 69 62 6c 65 20 63 61 73 65 73 20 28 65  ossible cases (e
1ca0: 78 3a 20 69 66 20 74 68 65 20 63 6f 6d 70 61 72  x: if the compar
1cb0: 69 73 6f 6e 20 69 73 20 6e 65 76 65 72 20 4e 55  ison is never NU
1cc0: 4c 4c 29 0a 20 20 20 20 2a 2a 20 20 20 20 20 20  LL).    **      
1cd0: 20 20 20 20 20 20 20 20 20 61 72 65 20 66 69 6c           are fil
1ce0: 6c 65 64 20 69 6e 20 61 75 74 6f 6d 61 74 69 63  led in automatic
1cf0: 61 6c 6c 79 20 73 6f 20 74 68 61 74 20 74 68 65  ally so that the
1d00: 20 63 6f 76 65 72 61 67 65 0a 20 20 20 20 2a 2a   coverage.    **
1d10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6d                 m
1d20: 65 61 73 75 72 65 6d 65 6e 74 20 6c 6f 67 69 63  easurement logic
1d30: 20 64 6f 65 73 20 6e 6f 74 20 66 6c 61 67 20 74   does not flag t
1d40: 68 6f 73 65 20 69 6d 70 6f 73 73 69 62 6c 65 20  hose impossible 
1d50: 63 61 73 65 73 0a 20 20 20 20 2a 2a 20 20 20 20  cases.    **    
1d60: 20 20 20 20 20 20 20 20 20 20 20 61 73 20 6d 69             as mi
1d70: 73 73 65 64 20 63 6f 76 65 72 61 67 65 2e 0a 20  ssed coverage.. 
1d80: 20 20 20 2a 2a 20 20 20 20 4d 20 20 20 20 20 20     **    M      
1d90: 20 20 2d 20 54 79 70 65 20 6f 66 20 6a 75 6d 70    - Type of jump
1da0: 2e 20 20 53 61 6d 65 20 61 73 20 4d 20 61 72 67  .  Same as M arg
1db0: 75 6d 65 6e 74 20 61 62 6f 76 65 0a 20 20 20 20  ument above.    
1dc0: 2a 2f 0a 20 20 20 20 49 20 7c 3d 20 6d 4e 65 76  */.    I |= mNev
1dd0: 65 72 3b 0a 20 20 20 20 69 66 28 20 4d 3d 3d 32  er;.    if( M==2
1de0: 20 29 20 49 20 7c 3d 20 30 78 30 34 3b 0a 20 20   ) I |= 0x04;.  
1df0: 20 20 69 66 28 20 4d 3d 3d 34 20 29 7b 0a 20 20    if( M==4 ){.  
1e00: 20 20 20 20 49 20 7c 3d 20 30 78 30 38 3b 0a 20      I |= 0x08;. 
1e10: 20 20 20 20 20 69 66 28 20 28 6d 4e 65 76 65 72       if( (mNever
1e20: 26 30 78 30 38 29 21 3d 30 20 26 26 20 28 49 26  &0x08)!=0 && (I&
1e30: 30 78 30 35 29 21 3d 30 29 20 49 20 7c 3d 20 30  0x05)!=0) I |= 0
1e40: 78 30 35 3b 20 2f 2a 4e 4f 5f 54 45 53 54 2a 2f  x05; /*NO_TEST*/
1e50: 0a 20 20 20 20 7d 0a 20 20 20 20 73 71 6c 69 74  .    }.    sqlit
1e60: 65 33 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 2e 78  e3GlobalConfig.x
1e70: 56 64 62 65 42 72 61 6e 63 68 28 73 71 6c 69 74  VdbeBranch(sqlit
1e80: 65 33 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 2e 70  e3GlobalConfig.p
1e90: 56 64 62 65 42 72 61 6e 63 68 41 72 67 2c 0a 20  VdbeBranchArg,. 
1ea0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1eb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ec0: 20 20 20 69 53 72 63 4c 69 6e 65 26 30 78 66 66     iSrcLine&0xff
1ed0: 66 66 66 66 2c 20 49 2c 20 4d 29 3b 0a 20 20 7d  ffff, I, M);.  }
1ee0: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41  .#endif../*.** A
1ef0: 6e 20 65 70 68 65 6d 65 72 61 6c 20 73 74 72 69  n ephemeral stri
1f00: 6e 67 20 76 61 6c 75 65 20 28 73 69 67 6e 69 66  ng value (signif
1f10: 69 65 64 20 62 79 20 74 68 65 20 4d 45 4d 5f 45  ied by the MEM_E
1f20: 70 68 65 6d 20 66 6c 61 67 29 20 63 6f 6e 74 61  phem flag) conta
1f30: 69 6e 73 0a 2a 2a 20 61 20 70 6f 69 6e 74 65 72  ins.** a pointer
1f40: 20 74 6f 20 61 20 64 79 6e 61 6d 69 63 61 6c 6c   to a dynamicall
1f50: 79 20 61 6c 6c 6f 63 61 74 65 64 20 73 74 72 69  y allocated stri
1f60: 6e 67 20 77 68 65 72 65 20 73 6f 6d 65 20 6f 74  ng where some ot
1f70: 68 65 72 20 65 6e 74 69 74 79 0a 2a 2a 20 69 73  her entity.** is
1f80: 20 72 65 73 70 6f 6e 73 69 62 6c 65 20 66 6f 72   responsible for
1f90: 20 64 65 61 6c 6c 6f 63 61 74 69 6e 67 20 74 68   deallocating th
1fa0: 61 74 20 73 74 72 69 6e 67 2e 20 20 42 65 63 61  at string.  Beca
1fb0: 75 73 65 20 74 68 65 20 72 65 67 69 73 74 65 72  use the register
1fc0: 0a 2a 2a 20 64 6f 65 73 20 6e 6f 74 20 63 6f 6e  .** does not con
1fd0: 74 72 6f 6c 20 74 68 65 20 73 74 72 69 6e 67 2c  trol the string,
1fe0: 20 69 74 20 6d 69 67 68 74 20 62 65 20 64 65 6c   it might be del
1ff0: 65 74 65 64 20 77 69 74 68 6f 75 74 20 74 68 65  eted without the
2000: 20 72 65 67 69 73 74 65 72 0a 2a 2a 20 6b 6e 6f   register.** kno
2010: 77 69 6e 67 20 69 74 2e 0a 2a 2a 0a 2a 2a 20 54  wing it..**.** T
2020: 68 69 73 20 72 6f 75 74 69 6e 65 20 63 6f 6e 76  his routine conv
2030: 65 72 74 73 20 61 6e 20 65 70 68 65 6d 65 72 61  erts an ephemera
2040: 6c 20 73 74 72 69 6e 67 20 69 6e 74 6f 20 61 20  l string into a 
2050: 64 79 6e 61 6d 69 63 61 6c 6c 79 20 61 6c 6c 6f  dynamically allo
2060: 63 61 74 65 64 0a 2a 2a 20 73 74 72 69 6e 67 20  cated.** string 
2070: 74 68 61 74 20 74 68 65 20 72 65 67 69 73 74 65  that the registe
2080: 72 20 69 74 73 65 6c 66 20 63 6f 6e 74 72 6f 6c  r itself control
2090: 73 2e 20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72  s.  In other wor
20a0: 64 73 2c 20 69 74 0a 2a 2a 20 63 6f 6e 76 65 72  ds, it.** conver
20b0: 74 73 20 61 6e 20 4d 45 4d 5f 45 70 68 65 6d 20  ts an MEM_Ephem 
20c0: 73 74 72 69 6e 67 20 69 6e 74 6f 20 61 20 73 74  string into a st
20d0: 72 69 6e 67 20 77 69 74 68 20 50 2e 7a 3d 3d 50  ring with P.z==P
20e0: 2e 7a 4d 61 6c 6c 6f 63 2e 0a 2a 2f 0a 23 64 65  .zMalloc..*/.#de
20f0: 66 69 6e 65 20 44 65 65 70 68 65 6d 65 72 61 6c  fine Deephemeral
2100: 69 7a 65 28 50 29 20 5c 0a 20 20 20 69 66 28 20  ize(P) \.   if( 
2110: 28 28 50 29 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f  ((P)->flags&MEM_
2120: 45 70 68 65 6d 29 21 3d 30 20 5c 0a 20 20 20 20  Ephem)!=0 \.    
2130: 20 20 20 26 26 20 73 71 6c 69 74 65 33 56 64 62     && sqlite3Vdb
2140: 65 4d 65 6d 4d 61 6b 65 57 72 69 74 65 61 62 6c  eMemMakeWriteabl
2150: 65 28 50 29 20 29 7b 20 67 6f 74 6f 20 6e 6f 5f  e(P) ){ goto no_
2160: 6d 65 6d 3b 7d 0a 0a 2f 2a 20 52 65 74 75 72 6e  mem;}../* Return
2170: 20 74 72 75 65 20 69 66 20 74 68 65 20 63 75 72   true if the cur
2180: 73 6f 72 20 77 61 73 20 6f 70 65 6e 65 64 20 75  sor was opened u
2190: 73 69 6e 67 20 74 68 65 20 4f 50 5f 4f 70 65 6e  sing the OP_Open
21a0: 53 6f 72 74 65 72 20 6f 70 63 6f 64 65 2e 20 2a  Sorter opcode. *
21b0: 2f 0a 23 64 65 66 69 6e 65 20 69 73 53 6f 72 74  /.#define isSort
21c0: 65 72 28 78 29 20 28 28 78 29 2d 3e 65 43 75 72  er(x) ((x)->eCur
21d0: 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f 53 4f  Type==CURTYPE_SO
21e0: 52 54 45 52 29 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c  RTER)../*.** All
21f0: 6f 63 61 74 65 20 56 64 62 65 43 75 72 73 6f 72  ocate VdbeCursor
2200: 20 6e 75 6d 62 65 72 20 69 43 75 72 2e 20 20 52   number iCur.  R
2210: 65 74 75 72 6e 20 61 20 70 6f 69 6e 74 65 72 20  eturn a pointer 
2220: 74 6f 20 69 74 2e 20 20 52 65 74 75 72 6e 20 4e  to it.  Return N
2230: 55 4c 4c 0a 2a 2a 20 69 66 20 77 65 20 72 75 6e  ULL.** if we run
2240: 20 6f 75 74 20 6f 66 20 6d 65 6d 6f 72 79 2e 0a   out of memory..
2250: 2a 2f 0a 73 74 61 74 69 63 20 56 64 62 65 43 75  */.static VdbeCu
2260: 72 73 6f 72 20 2a 61 6c 6c 6f 63 61 74 65 43 75  rsor *allocateCu
2270: 72 73 6f 72 28 0a 20 20 56 64 62 65 20 2a 70 2c  rsor(.  Vdbe *p,
2280: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
2290: 20 54 68 65 20 76 69 72 74 75 61 6c 20 6d 61 63   The virtual mac
22a0: 68 69 6e 65 20 2a 2f 0a 20 20 69 6e 74 20 69 43  hine */.  int iC
22b0: 75 72 2c 20 20 20 20 20 20 20 20 20 20 20 20 20  ur,             
22c0: 2f 2a 20 49 6e 64 65 78 20 6f 66 20 74 68 65 20  /* Index of the 
22d0: 6e 65 77 20 56 64 62 65 43 75 72 73 6f 72 20 2a  new VdbeCursor *
22e0: 2f 0a 20 20 69 6e 74 20 6e 46 69 65 6c 64 2c 20  /.  int nField, 
22f0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
2300: 62 65 72 20 6f 66 20 66 69 65 6c 64 73 20 69 6e  ber of fields in
2310: 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20 69 6e   the table or in
2320: 64 65 78 20 2a 2f 0a 20 20 69 6e 74 20 69 44 62  dex */.  int iDb
2330: 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ,              /
2340: 2a 20 44 61 74 61 62 61 73 65 20 74 68 65 20 63  * Database the c
2350: 75 72 73 6f 72 20 62 65 6c 6f 6e 67 73 20 74 6f  ursor belongs to
2360: 2c 20 6f 72 20 2d 31 20 2a 2f 0a 20 20 75 38 20  , or -1 */.  u8 
2370: 65 43 75 72 54 79 70 65 20 20 20 20 20 20 20 20  eCurType        
2380: 20 20 20 2f 2a 20 54 79 70 65 20 6f 66 20 74 68     /* Type of th
2390: 65 20 6e 65 77 20 63 75 72 73 6f 72 20 2a 2f 0a  e new cursor */.
23a0: 29 7b 0a 20 20 2f 2a 20 46 69 6e 64 20 74 68 65  ){.  /* Find the
23b0: 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 74 68 61   memory cell tha
23c0: 74 20 77 69 6c 6c 20 62 65 20 75 73 65 64 20 74  t will be used t
23d0: 6f 20 73 74 6f 72 65 20 74 68 65 20 62 6c 6f 62  o store the blob
23e0: 20 6f 66 20 6d 65 6d 6f 72 79 0a 20 20 2a 2a 20   of memory.  ** 
23f0: 72 65 71 75 69 72 65 64 20 66 6f 72 20 74 68 69  required for thi
2400: 73 20 56 64 62 65 43 75 72 73 6f 72 20 73 74 72  s VdbeCursor str
2410: 75 63 74 75 72 65 2e 20 49 74 20 69 73 20 63 6f  ucture. It is co
2420: 6e 76 65 6e 69 65 6e 74 20 74 6f 20 75 73 65 20  nvenient to use 
2430: 61 20 0a 20 20 2a 2a 20 76 64 62 65 20 6d 65 6d  a .  ** vdbe mem
2440: 6f 72 79 20 63 65 6c 6c 20 74 6f 20 6d 61 6e 61  ory cell to mana
2450: 67 65 20 74 68 65 20 6d 65 6d 6f 72 79 20 61 6c  ge the memory al
2460: 6c 6f 63 61 74 69 6f 6e 20 72 65 71 75 69 72 65  location require
2470: 64 20 66 6f 72 20 61 0a 20 20 2a 2a 20 56 64 62  d for a.  ** Vdb
2480: 65 43 75 72 73 6f 72 20 73 74 72 75 63 74 75 72  eCursor structur
2490: 65 20 66 6f 72 20 74 68 65 20 66 6f 6c 6c 6f 77  e for the follow
24a0: 69 6e 67 20 72 65 61 73 6f 6e 73 3a 0a 20 20 2a  ing reasons:.  *
24b0: 2a 0a 20 20 2a 2a 20 20 20 2a 20 53 6f 6d 65 74  *.  **   * Somet
24c0: 69 6d 65 73 20 63 75 72 73 6f 72 20 6e 75 6d 62  imes cursor numb
24d0: 65 72 73 20 61 72 65 20 75 73 65 64 20 66 6f 72  ers are used for
24e0: 20 61 20 63 6f 75 70 6c 65 20 6f 66 20 64 69 66   a couple of dif
24f0: 66 65 72 65 6e 74 0a 20 20 2a 2a 20 20 20 20 20  ferent.  **     
2500: 70 75 72 70 6f 73 65 73 20 69 6e 20 61 20 76 64  purposes in a vd
2510: 62 65 20 70 72 6f 67 72 61 6d 2e 20 54 68 65 20  be program. The 
2520: 64 69 66 66 65 72 65 6e 74 20 75 73 65 73 20 6d  different uses m
2530: 69 67 68 74 20 72 65 71 75 69 72 65 0a 20 20 2a  ight require.  *
2540: 2a 20 20 20 20 20 64 69 66 66 65 72 65 6e 74 20  *     different 
2550: 73 69 7a 65 64 20 61 6c 6c 6f 63 61 74 69 6f 6e  sized allocation
2560: 73 2e 20 4d 65 6d 6f 72 79 20 63 65 6c 6c 73 20  s. Memory cells 
2570: 70 72 6f 76 69 64 65 20 67 72 6f 77 61 62 6c 65  provide growable
2580: 0a 20 20 2a 2a 20 20 20 20 20 61 6c 6c 6f 63 61  .  **     alloca
2590: 74 69 6f 6e 73 2e 0a 20 20 2a 2a 0a 20 20 2a 2a  tions..  **.  **
25a0: 20 20 20 2a 20 57 68 65 6e 20 75 73 69 6e 67 20     * When using 
25b0: 45 4e 41 42 4c 45 5f 4d 45 4d 4f 52 59 5f 4d 41  ENABLE_MEMORY_MA
25c0: 4e 41 47 45 4d 45 4e 54 2c 20 6d 65 6d 6f 72 79  NAGEMENT, memory
25d0: 20 63 65 6c 6c 20 62 75 66 66 65 72 73 20 63 61   cell buffers ca
25e0: 6e 0a 20 20 2a 2a 20 20 20 20 20 62 65 20 66 72  n.  **     be fr
25f0: 65 65 64 20 6c 61 7a 69 6c 79 20 76 69 61 20 74  eed lazily via t
2600: 68 65 20 73 71 6c 69 74 65 33 5f 72 65 6c 65 61  he sqlite3_relea
2610: 73 65 5f 6d 65 6d 6f 72 79 28 29 20 41 50 49 2e  se_memory() API.
2620: 20 54 68 69 73 0a 20 20 2a 2a 20 20 20 20 20 6d   This.  **     m
2630: 69 6e 69 6d 69 7a 65 73 20 74 68 65 20 6e 75 6d  inimizes the num
2640: 62 65 72 20 6f 66 20 6d 61 6c 6c 6f 63 20 63 61  ber of malloc ca
2650: 6c 6c 73 20 6d 61 64 65 20 62 79 20 74 68 65 20  lls made by the 
2660: 73 79 73 74 65 6d 2e 0a 20 20 2a 2a 0a 20 20 2a  system..  **.  *
2670: 2a 20 54 68 65 20 6d 65 6d 6f 72 79 20 63 65 6c  * The memory cel
2680: 6c 20 66 6f 72 20 63 75 72 73 6f 72 20 30 20 69  l for cursor 0 i
2690: 73 20 61 4d 65 6d 5b 30 5d 2e 20 54 68 65 20 72  s aMem[0]. The r
26a0: 65 73 74 20 61 72 65 20 61 6c 6c 6f 63 61 74 65  est are allocate
26b0: 64 20 66 72 6f 6d 0a 20 20 2a 2a 20 74 68 65 20  d from.  ** the 
26c0: 74 6f 70 20 6f 66 20 74 68 65 20 72 65 67 69 73  top of the regis
26d0: 74 65 72 20 73 70 61 63 65 2e 20 20 43 75 72 73  ter space.  Curs
26e0: 6f 72 20 31 20 69 73 20 61 74 20 4d 65 6d 5b 70  or 1 is at Mem[p
26f0: 2d 3e 6e 4d 65 6d 2d 31 5d 2e 0a 20 20 2a 2a 20  ->nMem-1]..  ** 
2700: 43 75 72 73 6f 72 20 32 20 69 73 20 61 74 20 4d  Cursor 2 is at M
2710: 65 6d 5b 70 2d 3e 6e 4d 65 6d 2d 32 5d 2e 20 41  em[p->nMem-2]. A
2720: 6e 64 20 73 6f 20 66 6f 72 74 68 2e 0a 20 20 2a  nd so forth..  *
2730: 2f 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d 20 3d 20  /.  Mem *pMem = 
2740: 69 43 75 72 3e 30 20 3f 20 26 70 2d 3e 61 4d 65  iCur>0 ? &p->aMe
2750: 6d 5b 70 2d 3e 6e 4d 65 6d 2d 69 43 75 72 5d 20  m[p->nMem-iCur] 
2760: 3a 20 70 2d 3e 61 4d 65 6d 3b 0a 0a 20 20 69 6e  : p->aMem;..  in
2770: 74 20 6e 42 79 74 65 3b 0a 20 20 56 64 62 65 43  t nByte;.  VdbeC
2780: 75 72 73 6f 72 20 2a 70 43 78 20 3d 20 30 3b 0a  ursor *pCx = 0;.
2790: 20 20 6e 42 79 74 65 20 3d 20 0a 20 20 20 20 20    nByte = .     
27a0: 20 52 4f 55 4e 44 38 28 73 69 7a 65 6f 66 28 56   ROUND8(sizeof(V
27b0: 64 62 65 43 75 72 73 6f 72 29 29 20 2b 20 32 2a  dbeCursor)) + 2*
27c0: 73 69 7a 65 6f 66 28 75 33 32 29 2a 6e 46 69 65  sizeof(u32)*nFie
27d0: 6c 64 20 2b 20 0a 20 20 20 20 20 20 28 65 43 75  ld + .      (eCu
27e0: 72 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f 42  rType==CURTYPE_B
27f0: 54 52 45 45 3f 73 71 6c 69 74 65 33 42 74 72 65  TREE?sqlite3Btre
2800: 65 43 75 72 73 6f 72 53 69 7a 65 28 29 3a 30 29  eCursorSize():0)
2810: 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 69 43 75  ;..  assert( iCu
2820: 72 3e 3d 30 20 26 26 20 69 43 75 72 3c 70 2d 3e  r>=0 && iCur<p->
2830: 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 69 66 28  nCursor );.  if(
2840: 20 70 2d 3e 61 70 43 73 72 5b 69 43 75 72 5d 20   p->apCsr[iCur] 
2850: 29 7b 20 2f 2a 4f 50 54 49 4d 49 5a 41 54 49 4f  ){ /*OPTIMIZATIO
2860: 4e 2d 49 46 2d 46 41 4c 53 45 2a 2f 0a 20 20 20  N-IF-FALSE*/.   
2870: 20 2f 2a 20 42 65 66 6f 72 65 20 63 61 6c 6c 69   /* Before calli
2880: 6e 67 20 73 71 6c 69 74 65 33 56 64 62 65 46 72  ng sqlite3VdbeFr
2890: 65 65 43 75 72 73 6f 72 28 29 2c 20 65 6e 73 75  eeCursor(), ensu
28a0: 72 65 20 74 68 65 20 69 73 45 70 68 65 6d 65 72  re the isEphemer
28b0: 61 6c 20 66 6c 61 67 0a 20 20 20 20 2a 2a 20 69  al flag.    ** i
28c0: 73 20 63 6c 65 61 72 2e 20 4f 74 68 65 72 77 69  s clear. Otherwi
28d0: 73 65 2c 20 69 66 20 74 68 69 73 20 69 73 20 61  se, if this is a
28e0: 6e 20 65 70 68 65 6d 65 72 61 6c 20 63 75 72 73  n ephemeral curs
28f0: 6f 72 20 63 72 65 61 74 65 64 20 62 79 20 0a 20  or created by . 
2900: 20 20 20 2a 2a 20 4f 50 5f 4f 70 65 6e 44 75 70     ** OP_OpenDup
2910: 2c 20 74 68 65 20 63 75 72 73 6f 72 20 77 69 6c  , the cursor wil
2920: 6c 20 6e 6f 74 20 62 65 20 63 6c 6f 73 65 64 20  l not be closed 
2930: 61 6e 64 20 77 69 6c 6c 20 73 74 69 6c 6c 20 62  and will still b
2940: 65 20 70 61 72 74 0a 20 20 20 20 2a 2a 20 6f 66  e part.    ** of
2950: 20 61 20 42 74 53 68 61 72 65 64 2e 70 43 75 72   a BtShared.pCur
2960: 73 6f 72 20 6c 69 73 74 2e 20 20 2a 2f 0a 20 20  sor list.  */.  
2970: 20 20 69 66 28 20 70 2d 3e 61 70 43 73 72 5b 69    if( p->apCsr[i
2980: 43 75 72 5d 2d 3e 70 42 74 78 3d 3d 30 20 29 20  Cur]->pBtx==0 ) 
2990: 70 2d 3e 61 70 43 73 72 5b 69 43 75 72 5d 2d 3e  p->apCsr[iCur]->
29a0: 69 73 45 70 68 65 6d 65 72 61 6c 20 3d 20 30 3b  isEphemeral = 0;
29b0: 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
29c0: 46 72 65 65 43 75 72 73 6f 72 28 70 2c 20 70 2d  FreeCursor(p, p-
29d0: 3e 61 70 43 73 72 5b 69 43 75 72 5d 29 3b 0a 20  >apCsr[iCur]);. 
29e0: 20 20 20 70 2d 3e 61 70 43 73 72 5b 69 43 75 72     p->apCsr[iCur
29f0: 5d 20 3d 20 30 3b 0a 20 20 7d 0a 20 20 69 66 28  ] = 0;.  }.  if(
2a00: 20 53 51 4c 49 54 45 5f 4f 4b 3d 3d 73 71 6c 69   SQLITE_OK==sqli
2a10: 74 65 33 56 64 62 65 4d 65 6d 43 6c 65 61 72 41  te3VdbeMemClearA
2a20: 6e 64 52 65 73 69 7a 65 28 70 4d 65 6d 2c 20 6e  ndResize(pMem, n
2a30: 42 79 74 65 29 20 29 7b 0a 20 20 20 20 70 2d 3e  Byte) ){.    p->
2a40: 61 70 43 73 72 5b 69 43 75 72 5d 20 3d 20 70 43  apCsr[iCur] = pC
2a50: 78 20 3d 20 28 56 64 62 65 43 75 72 73 6f 72 2a  x = (VdbeCursor*
2a60: 29 70 4d 65 6d 2d 3e 7a 3b 0a 20 20 20 20 6d 65  )pMem->z;.    me
2a70: 6d 73 65 74 28 70 43 78 2c 20 30 2c 20 6f 66 66  mset(pCx, 0, off
2a80: 73 65 74 6f 66 28 56 64 62 65 43 75 72 73 6f 72  setof(VdbeCursor
2a90: 2c 70 41 6c 74 43 75 72 73 6f 72 29 29 3b 0a 20  ,pAltCursor));. 
2aa0: 20 20 20 70 43 78 2d 3e 65 43 75 72 54 79 70 65     pCx->eCurType
2ab0: 20 3d 20 65 43 75 72 54 79 70 65 3b 0a 20 20 20   = eCurType;.   
2ac0: 20 70 43 78 2d 3e 69 44 62 20 3d 20 69 44 62 3b   pCx->iDb = iDb;
2ad0: 0a 20 20 20 20 70 43 78 2d 3e 6e 46 69 65 6c 64  .    pCx->nField
2ae0: 20 3d 20 6e 46 69 65 6c 64 3b 0a 20 20 20 20 70   = nField;.    p
2af0: 43 78 2d 3e 61 4f 66 66 73 65 74 20 3d 20 26 70  Cx->aOffset = &p
2b00: 43 78 2d 3e 61 54 79 70 65 5b 6e 46 69 65 6c 64  Cx->aType[nField
2b10: 5d 3b 0a 20 20 20 20 69 66 28 20 65 43 75 72 54  ];.    if( eCurT
2b20: 79 70 65 3d 3d 43 55 52 54 59 50 45 5f 42 54 52  ype==CURTYPE_BTR
2b30: 45 45 20 29 7b 0a 20 20 20 20 20 20 70 43 78 2d  EE ){.      pCx-
2b40: 3e 75 63 2e 70 43 75 72 73 6f 72 20 3d 20 28 42  >uc.pCursor = (B
2b50: 74 43 75 72 73 6f 72 2a 29 0a 20 20 20 20 20 20  tCursor*).      
2b60: 20 20 20 20 26 70 4d 65 6d 2d 3e 7a 5b 52 4f 55      &pMem->z[ROU
2b70: 4e 44 38 28 73 69 7a 65 6f 66 28 56 64 62 65 43  ND8(sizeof(VdbeC
2b80: 75 72 73 6f 72 29 29 2b 32 2a 73 69 7a 65 6f 66  ursor))+2*sizeof
2b90: 28 75 33 32 29 2a 6e 46 69 65 6c 64 5d 3b 0a 20  (u32)*nField];. 
2ba0: 20 20 20 20 20 73 71 6c 69 74 65 33 42 74 72 65       sqlite3Btre
2bb0: 65 43 75 72 73 6f 72 5a 65 72 6f 28 70 43 78 2d  eCursorZero(pCx-
2bc0: 3e 75 63 2e 70 43 75 72 73 6f 72 29 3b 0a 20 20  >uc.pCursor);.  
2bd0: 20 20 7d 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e    }.  }.  return
2be0: 20 70 43 78 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54   pCx;.}../*.** T
2bf0: 72 79 20 74 6f 20 63 6f 6e 76 65 72 74 20 61 20  ry to convert a 
2c00: 76 61 6c 75 65 20 69 6e 74 6f 20 61 20 6e 75 6d  value into a num
2c10: 65 72 69 63 20 72 65 70 72 65 73 65 6e 74 61 74  eric representat
2c20: 69 6f 6e 20 69 66 20 77 65 20 63 61 6e 0a 2a 2a  ion if we can.**
2c30: 20 64 6f 20 73 6f 20 77 69 74 68 6f 75 74 20 6c   do so without l
2c40: 6f 73 73 20 6f 66 20 69 6e 66 6f 72 6d 61 74 69  oss of informati
2c50: 6f 6e 2e 20 20 49 6e 20 6f 74 68 65 72 20 77 6f  on.  In other wo
2c60: 72 64 73 2c 20 69 66 20 74 68 65 20 73 74 72 69  rds, if the stri
2c70: 6e 67 0a 2a 2a 20 6c 6f 6f 6b 73 20 6c 69 6b 65  ng.** looks like
2c80: 20 61 20 6e 75 6d 62 65 72 2c 20 63 6f 6e 76 65   a number, conve
2c90: 72 74 20 69 74 20 69 6e 74 6f 20 61 20 6e 75 6d  rt it into a num
2ca0: 62 65 72 2e 20 20 49 66 20 69 74 20 64 6f 65 73  ber.  If it does
2cb0: 20 6e 6f 74 0a 2a 2a 20 6c 6f 6f 6b 20 6c 69 6b   not.** look lik
2cc0: 65 20 61 20 6e 75 6d 62 65 72 2c 20 6c 65 61 76  e a number, leav
2cd0: 65 20 69 74 20 61 6c 6f 6e 65 2e 0a 2a 2a 0a 2a  e it alone..**.*
2ce0: 2a 20 49 66 20 74 68 65 20 62 54 72 79 46 6f 72  * If the bTryFor
2cf0: 49 6e 74 20 66 6c 61 67 20 69 73 20 74 72 75 65  Int flag is true
2d00: 2c 20 74 68 65 6e 20 65 78 74 72 61 20 65 66 66  , then extra eff
2d10: 6f 72 74 20 69 73 20 6d 61 64 65 20 74 6f 20 67  ort is made to g
2d20: 69 76 65 0a 2a 2a 20 61 6e 20 69 6e 74 65 67 65  ive.** an intege
2d30: 72 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e  r representation
2d40: 2e 20 20 53 74 72 69 6e 67 73 20 74 68 61 74 20  .  Strings that 
2d50: 6c 6f 6f 6b 20 6c 69 6b 65 20 66 6c 6f 61 74 69  look like floati
2d60: 6e 67 20 70 6f 69 6e 74 0a 2a 2a 20 76 61 6c 75  ng point.** valu
2d70: 65 73 20 62 75 74 20 77 68 69 63 68 20 68 61 76  es but which hav
2d80: 65 20 6e 6f 20 66 72 61 63 74 69 6f 6e 61 6c 20  e no fractional 
2d90: 63 6f 6d 70 6f 6e 65 6e 74 20 28 65 78 61 6d 70  component (examp
2da0: 6c 65 3a 20 27 34 38 2e 30 30 27 29 0a 2a 2a 20  le: '48.00').** 
2db0: 77 69 6c 6c 20 68 61 76 65 20 61 20 4d 45 4d 5f  will have a MEM_
2dc0: 49 6e 74 20 72 65 70 72 65 73 65 6e 74 61 74 69  Int representati
2dd0: 6f 6e 20 77 68 65 6e 20 62 54 72 79 46 6f 72 49  on when bTryForI
2de0: 6e 74 20 69 73 20 74 72 75 65 2e 0a 2a 2a 0a 2a  nt is true..**.*
2df0: 2a 20 49 66 20 62 54 72 79 46 6f 72 49 6e 74 20  * If bTryForInt 
2e00: 69 73 20 66 61 6c 73 65 2c 20 74 68 65 6e 20 69  is false, then i
2e10: 66 20 74 68 65 20 69 6e 70 75 74 20 73 74 72 69  f the input stri
2e20: 6e 67 20 63 6f 6e 74 61 69 6e 73 20 61 20 64 65  ng contains a de
2e30: 63 69 6d 61 6c 0a 2a 2a 20 70 6f 69 6e 74 20 6f  cimal.** point o
2e40: 72 20 65 78 70 6f 6e 65 6e 74 69 61 6c 20 6e 6f  r exponential no
2e50: 74 61 74 69 6f 6e 2c 20 74 68 65 20 72 65 73 75  tation, the resu
2e60: 6c 74 20 69 73 20 6f 6e 6c 79 20 4d 45 4d 5f 52  lt is only MEM_R
2e70: 65 61 6c 2c 20 65 76 65 6e 0a 2a 2a 20 69 66 20  eal, even.** if 
2e80: 74 68 65 72 65 20 69 73 20 61 6e 20 65 78 61 63  there is an exac
2e90: 74 20 69 6e 74 65 67 65 72 20 72 65 70 72 65 73  t integer repres
2ea0: 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 20  entation of the 
2eb0: 71 75 61 6e 74 69 74 79 2e 0a 2a 2f 0a 73 74 61  quantity..*/.sta
2ec0: 74 69 63 20 76 6f 69 64 20 61 70 70 6c 79 4e 75  tic void applyNu
2ed0: 6d 65 72 69 63 41 66 66 69 6e 69 74 79 28 4d 65  mericAffinity(Me
2ee0: 6d 20 2a 70 52 65 63 2c 20 69 6e 74 20 62 54 72  m *pRec, int bTr
2ef0: 79 46 6f 72 49 6e 74 29 7b 0a 20 20 64 6f 75 62  yForInt){.  doub
2f00: 6c 65 20 72 56 61 6c 75 65 3b 0a 20 20 69 36 34  le rValue;.  i64
2f10: 20 69 56 61 6c 75 65 3b 0a 20 20 75 38 20 65 6e   iValue;.  u8 en
2f20: 63 20 3d 20 70 52 65 63 2d 3e 65 6e 63 3b 0a 20  c = pRec->enc;. 
2f30: 20 61 73 73 65 72 74 28 20 28 70 52 65 63 2d 3e   assert( (pRec->
2f40: 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f 53 74 72  flags & (MEM_Str
2f50: 7c 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 52 65 61  |MEM_Int|MEM_Rea
2f60: 6c 7c 4d 45 4d 5f 49 6e 74 52 65 61 6c 29 29 3d  l|MEM_IntReal))=
2f70: 3d 4d 45 4d 5f 53 74 72 20 29 3b 0a 20 20 69 66  =MEM_Str );.  if
2f80: 28 20 73 71 6c 69 74 65 33 41 74 6f 46 28 70 52  ( sqlite3AtoF(pR
2f90: 65 63 2d 3e 7a 2c 20 26 72 56 61 6c 75 65 2c 20  ec->z, &rValue, 
2fa0: 70 52 65 63 2d 3e 6e 2c 20 65 6e 63 29 3d 3d 30  pRec->n, enc)==0
2fb0: 20 29 20 72 65 74 75 72 6e 3b 0a 20 20 69 66 28   ) return;.  if(
2fc0: 20 30 3d 3d 73 71 6c 69 74 65 33 41 74 6f 69 36   0==sqlite3Atoi6
2fd0: 34 28 70 52 65 63 2d 3e 7a 2c 20 26 69 56 61 6c  4(pRec->z, &iVal
2fe0: 75 65 2c 20 70 52 65 63 2d 3e 6e 2c 20 65 6e 63  ue, pRec->n, enc
2ff0: 29 20 29 7b 0a 20 20 20 20 70 52 65 63 2d 3e 75  ) ){.    pRec->u
3000: 2e 69 20 3d 20 69 56 61 6c 75 65 3b 0a 20 20 20  .i = iValue;.   
3010: 20 70 52 65 63 2d 3e 66 6c 61 67 73 20 7c 3d 20   pRec->flags |= 
3020: 4d 45 4d 5f 49 6e 74 3b 0a 20 20 7d 65 6c 73 65  MEM_Int;.  }else
3030: 7b 0a 20 20 20 20 70 52 65 63 2d 3e 75 2e 72 20  {.    pRec->u.r 
3040: 3d 20 72 56 61 6c 75 65 3b 0a 20 20 20 20 70 52  = rValue;.    pR
3050: 65 63 2d 3e 66 6c 61 67 73 20 7c 3d 20 4d 45 4d  ec->flags |= MEM
3060: 5f 52 65 61 6c 3b 0a 20 20 20 20 69 66 28 20 62  _Real;.    if( b
3070: 54 72 79 46 6f 72 49 6e 74 20 29 20 73 71 6c 69  TryForInt ) sqli
3080: 74 65 33 56 64 62 65 49 6e 74 65 67 65 72 41 66  te3VdbeIntegerAf
3090: 66 69 6e 69 74 79 28 70 52 65 63 29 3b 0a 20 20  finity(pRec);.  
30a0: 7d 0a 20 20 2f 2a 20 54 45 58 54 2d 3e 4e 55 4d  }.  /* TEXT->NUM
30b0: 45 52 49 43 20 69 73 20 6d 61 6e 79 2d 3e 6f 6e  ERIC is many->on
30c0: 65 2e 20 20 48 65 6e 63 65 2c 20 69 74 20 69 73  e.  Hence, it is
30d0: 20 69 6d 70 6f 72 74 61 6e 74 20 74 6f 20 69 6e   important to in
30e0: 76 61 6c 69 64 61 74 65 20 74 68 65 0a 20 20 2a  validate the.  *
30f0: 2a 20 73 74 72 69 6e 67 20 72 65 70 72 65 73 65  * string represe
3100: 6e 74 61 74 69 6f 6e 20 61 66 74 65 72 20 63 6f  ntation after co
3110: 6d 70 75 74 69 6e 67 20 61 20 6e 75 6d 65 72 69  mputing a numeri
3120: 63 20 65 71 75 69 76 61 6c 65 6e 74 2c 20 62 65  c equivalent, be
3130: 63 61 75 73 65 20 74 68 65 0a 20 20 2a 2a 20 73  cause the.  ** s
3140: 74 72 69 6e 67 20 72 65 70 72 65 73 65 6e 74 61  tring representa
3150: 74 69 6f 6e 20 6d 69 67 68 74 20 6e 6f 74 20 62  tion might not b
3160: 65 20 74 68 65 20 63 61 6e 6f 6e 69 63 61 6c 20  e the canonical 
3170: 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 66  representation f
3180: 6f 72 20 74 68 65 0a 20 20 2a 2a 20 6e 75 6d 65  or the.  ** nume
3190: 72 69 63 20 76 61 6c 75 65 2e 20 20 54 69 63 6b  ric value.  Tick
31a0: 65 74 20 5b 33 34 33 36 33 34 39 34 32 64 64 35  et [343634942dd5
31b0: 34 61 62 35 37 62 37 30 32 34 5d 20 32 30 31 38  4ab57b7024] 2018
31c0: 2d 30 31 2d 33 31 2e 20 2a 2f 0a 20 20 70 52 65  -01-31. */.  pRe
31d0: 63 2d 3e 66 6c 61 67 73 20 26 3d 20 7e 4d 45 4d  c->flags &= ~MEM
31e0: 5f 53 74 72 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 50  _Str;.}../*.** P
31f0: 72 6f 63 65 73 73 69 6e 67 20 69 73 20 64 65 74  rocessing is det
3200: 65 72 6d 69 6e 65 20 62 79 20 74 68 65 20 61 66  ermine by the af
3210: 66 69 6e 69 74 79 20 70 61 72 61 6d 65 74 65 72  finity parameter
3220: 3a 0a 2a 2a 0a 2a 2a 20 53 51 4c 49 54 45 5f 41  :.**.** SQLITE_A
3230: 46 46 5f 49 4e 54 45 47 45 52 3a 0a 2a 2a 20 53  FF_INTEGER:.** S
3240: 51 4c 49 54 45 5f 41 46 46 5f 52 45 41 4c 3a 0a  QLITE_AFF_REAL:.
3250: 2a 2a 20 53 51 4c 49 54 45 5f 41 46 46 5f 4e 55  ** SQLITE_AFF_NU
3260: 4d 45 52 49 43 3a 0a 2a 2a 20 20 20 20 54 72 79  MERIC:.**    Try
3270: 20 74 6f 20 63 6f 6e 76 65 72 74 20 70 52 65 63   to convert pRec
3280: 20 74 6f 20 61 6e 20 69 6e 74 65 67 65 72 20 72   to an integer r
3290: 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f 72  epresentation or
32a0: 20 61 20 0a 2a 2a 20 20 20 20 66 6c 6f 61 74 69   a .**    floati
32b0: 6e 67 2d 70 6f 69 6e 74 20 72 65 70 72 65 73 65  ng-point represe
32c0: 6e 74 61 74 69 6f 6e 20 69 66 20 61 6e 20 69 6e  ntation if an in
32d0: 74 65 67 65 72 20 72 65 70 72 65 73 65 6e 74 61  teger representa
32e0: 74 69 6f 6e 0a 2a 2a 20 20 20 20 69 73 20 6e 6f  tion.**    is no
32f0: 74 20 70 6f 73 73 69 62 6c 65 2e 20 20 4e 6f 74  t possible.  Not
3300: 65 20 74 68 61 74 20 74 68 65 20 69 6e 74 65 67  e that the integ
3310: 65 72 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f  er representatio
3320: 6e 20 69 73 0a 2a 2a 20 20 20 20 61 6c 77 61 79  n is.**    alway
3330: 73 20 70 72 65 66 65 72 72 65 64 2c 20 65 76 65  s preferred, eve
3340: 6e 20 69 66 20 74 68 65 20 61 66 66 69 6e 69 74  n if the affinit
3350: 79 20 69 73 20 52 45 41 4c 2c 20 62 65 63 61 75  y is REAL, becau
3360: 73 65 0a 2a 2a 20 20 20 20 61 6e 20 69 6e 74 65  se.**    an inte
3370: 67 65 72 20 72 65 70 72 65 73 65 6e 74 61 74 69  ger representati
3380: 6f 6e 20 69 73 20 6d 6f 72 65 20 73 70 61 63 65  on is more space
3390: 20 65 66 66 69 63 69 65 6e 74 20 6f 6e 20 64 69   efficient on di
33a0: 73 6b 2e 0a 2a 2a 0a 2a 2a 20 53 51 4c 49 54 45  sk..**.** SQLITE
33b0: 5f 41 46 46 5f 54 45 58 54 3a 0a 2a 2a 20 20 20  _AFF_TEXT:.**   
33c0: 20 43 6f 6e 76 65 72 74 20 70 52 65 63 20 74 6f   Convert pRec to
33d0: 20 61 20 74 65 78 74 20 72 65 70 72 65 73 65 6e   a text represen
33e0: 74 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 53 51  tation..**.** SQ
33f0: 4c 49 54 45 5f 41 46 46 5f 42 4c 4f 42 3a 0a 2a  LITE_AFF_BLOB:.*
3400: 2a 20 20 20 20 4e 6f 2d 6f 70 2e 20 20 70 52 65  *    No-op.  pRe
3410: 63 20 69 73 20 75 6e 63 68 61 6e 67 65 64 2e 0a  c is unchanged..
3420: 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69 64 20 61  */.static void a
3430: 70 70 6c 79 41 66 66 69 6e 69 74 79 28 0a 20 20  pplyAffinity(.  
3440: 4d 65 6d 20 2a 70 52 65 63 2c 20 20 20 20 20 20  Mem *pRec,      
3450: 20 20 20 20 2f 2a 20 54 68 65 20 76 61 6c 75 65      /* The value
3460: 20 74 6f 20 61 70 70 6c 79 20 61 66 66 69 6e 69   to apply affini
3470: 74 79 20 74 6f 20 2a 2f 0a 20 20 63 68 61 72 20  ty to */.  char 
3480: 61 66 66 69 6e 69 74 79 2c 20 20 20 20 20 20 2f  affinity,      /
3490: 2a 20 54 68 65 20 61 66 66 69 6e 69 74 79 20 74  * The affinity t
34a0: 6f 20 62 65 20 61 70 70 6c 69 65 64 20 2a 2f 0a  o be applied */.
34b0: 20 20 75 38 20 65 6e 63 20 20 20 20 20 20 20 20    u8 enc        
34c0: 20 20 20 20 20 20 2f 2a 20 55 73 65 20 74 68 69        /* Use thi
34d0: 73 20 74 65 78 74 20 65 6e 63 6f 64 69 6e 67 20  s text encoding 
34e0: 2a 2f 0a 29 7b 0a 20 20 69 66 28 20 61 66 66 69  */.){.  if( affi
34f0: 6e 69 74 79 3e 3d 53 51 4c 49 54 45 5f 41 46 46  nity>=SQLITE_AFF
3500: 5f 4e 55 4d 45 52 49 43 20 29 7b 0a 20 20 20 20  _NUMERIC ){.    
3510: 61 73 73 65 72 74 28 20 61 66 66 69 6e 69 74 79  assert( affinity
3520: 3d 3d 53 51 4c 49 54 45 5f 41 46 46 5f 49 4e 54  ==SQLITE_AFF_INT
3530: 45 47 45 52 20 7c 7c 20 61 66 66 69 6e 69 74 79  EGER || affinity
3540: 3d 3d 53 51 4c 49 54 45 5f 41 46 46 5f 52 45 41  ==SQLITE_AFF_REA
3550: 4c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 7c  L.             |
3560: 7c 20 61 66 66 69 6e 69 74 79 3d 3d 53 51 4c 49  | affinity==SQLI
3570: 54 45 5f 41 46 46 5f 4e 55 4d 45 52 49 43 20 29  TE_AFF_NUMERIC )
3580: 3b 0a 20 20 20 20 69 66 28 20 28 70 52 65 63 2d  ;.    if( (pRec-
3590: 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74  >flags & MEM_Int
35a0: 29 3d 3d 30 20 29 7b 20 2f 2a 4f 50 54 49 4d 49  )==0 ){ /*OPTIMI
35b0: 5a 41 54 49 4f 4e 2d 49 46 2d 46 41 4c 53 45 2a  ZATION-IF-FALSE*
35c0: 2f 0a 20 20 20 20 20 20 69 66 28 20 28 70 52 65  /.      if( (pRe
35d0: 63 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52  c->flags & MEM_R
35e0: 65 61 6c 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20  eal)==0 ){.     
35f0: 20 20 20 69 66 28 20 70 52 65 63 2d 3e 66 6c 61     if( pRec->fla
3600: 67 73 20 26 20 4d 45 4d 5f 53 74 72 20 29 20 61  gs & MEM_Str ) a
3610: 70 70 6c 79 4e 75 6d 65 72 69 63 41 66 66 69 6e  pplyNumericAffin
3620: 69 74 79 28 70 52 65 63 2c 31 29 3b 0a 20 20 20  ity(pRec,1);.   
3630: 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
3640: 20 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74    sqlite3VdbeInt
3650: 65 67 65 72 41 66 66 69 6e 69 74 79 28 70 52 65  egerAffinity(pRe
3660: 63 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  c);.      }.    
3670: 7d 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 61 66  }.  }else if( af
3680: 66 69 6e 69 74 79 3d 3d 53 51 4c 49 54 45 5f 41  finity==SQLITE_A
3690: 46 46 5f 54 45 58 54 20 29 7b 0a 20 20 20 20 2f  FF_TEXT ){.    /
36a0: 2a 20 4f 6e 6c 79 20 61 74 74 65 6d 70 74 20 74  * Only attempt t
36b0: 68 65 20 63 6f 6e 76 65 72 73 69 6f 6e 20 74 6f  he conversion to
36c0: 20 54 45 58 54 20 69 66 20 74 68 65 72 65 20 69   TEXT if there i
36d0: 73 20 61 6e 20 69 6e 74 65 67 65 72 20 6f 72 20  s an integer or 
36e0: 72 65 61 6c 0a 20 20 20 20 2a 2a 20 72 65 70 72  real.    ** repr
36f0: 65 73 65 6e 74 61 74 69 6f 6e 20 28 62 6c 6f 62  esentation (blob
3700: 20 61 6e 64 20 4e 55 4c 4c 20 64 6f 20 6e 6f 74   and NULL do not
3710: 20 67 65 74 20 63 6f 6e 76 65 72 74 65 64 29 20   get converted) 
3720: 62 75 74 20 6e 6f 20 73 74 72 69 6e 67 0a 20 20  but no string.  
3730: 20 20 2a 2a 20 72 65 70 72 65 73 65 6e 74 61 74    ** representat
3740: 69 6f 6e 2e 20 20 49 74 20 77 6f 75 6c 64 20 62  ion.  It would b
3750: 65 20 68 61 72 6d 6c 65 73 73 20 74 6f 20 72 65  e harmless to re
3760: 70 65 61 74 20 74 68 65 20 63 6f 6e 76 65 72 73  peat the convers
3770: 69 6f 6e 20 69 66 20 0a 20 20 20 20 2a 2a 20 74  ion if .    ** t
3780: 68 65 72 65 20 69 73 20 61 6c 72 65 61 64 79 20  here is already 
3790: 61 20 73 74 72 69 6e 67 20 72 65 70 2c 20 62 75  a string rep, bu
37a0: 74 20 69 74 20 69 73 20 70 6f 69 6e 74 6c 65 73  t it is pointles
37b0: 73 20 74 6f 20 77 61 73 74 65 20 74 68 6f 73 65  s to waste those
37c0: 0a 20 20 20 20 2a 2a 20 43 50 55 20 63 79 63 6c  .    ** CPU cycl
37d0: 65 73 2e 20 2a 2f 0a 20 20 20 20 69 66 28 20 30  es. */.    if( 0
37e0: 3d 3d 28 70 52 65 63 2d 3e 66 6c 61 67 73 26 4d  ==(pRec->flags&M
37f0: 45 4d 5f 53 74 72 29 20 29 7b 20 2f 2a 4f 50 54  EM_Str) ){ /*OPT
3800: 49 4d 49 5a 41 54 49 4f 4e 2d 49 46 2d 46 41 4c  IMIZATION-IF-FAL
3810: 53 45 2a 2f 0a 20 20 20 20 20 20 69 66 28 20 28  SE*/.      if( (
3820: 70 52 65 63 2d 3e 66 6c 61 67 73 26 28 4d 45 4d  pRec->flags&(MEM
3830: 5f 52 65 61 6c 7c 4d 45 4d 5f 49 6e 74 7c 4d 45  _Real|MEM_Int|ME
3840: 4d 5f 49 6e 74 52 65 61 6c 29 29 20 29 7b 0a 20  M_IntReal)) ){. 
3850: 20 20 20 20 20 20 20 74 65 73 74 63 61 73 65 28         testcase(
3860: 20 70 52 65 63 2d 3e 66 6c 61 67 73 20 26 20 4d   pRec->flags & M
3870: 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 20 20 20 20  EM_Int );.      
3880: 20 20 74 65 73 74 63 61 73 65 28 20 70 52 65 63    testcase( pRec
3890: 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52 65  ->flags & MEM_Re
38a0: 61 6c 20 29 3b 0a 20 20 20 20 20 20 20 20 74 65  al );.        te
38b0: 73 74 63 61 73 65 28 20 70 52 65 63 2d 3e 66 6c  stcase( pRec->fl
38c0: 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 52 65 61  ags & MEM_IntRea
38d0: 6c 20 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c  l );.        sql
38e0: 69 74 65 33 56 64 62 65 4d 65 6d 53 74 72 69 6e  ite3VdbeMemStrin
38f0: 67 69 66 79 28 70 52 65 63 2c 20 65 6e 63 2c 20  gify(pRec, enc, 
3900: 31 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  1);.      }.    
3910: 7d 0a 20 20 20 20 70 52 65 63 2d 3e 66 6c 61 67  }.    pRec->flag
3920: 73 20 26 3d 20 7e 28 4d 45 4d 5f 52 65 61 6c 7c  s &= ~(MEM_Real|
3930: 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 49 6e 74 52  MEM_Int|MEM_IntR
3940: 65 61 6c 29 3b 0a 20 20 7d 0a 7d 0a 0a 2f 2a 0a  eal);.  }.}../*.
3950: 2a 2a 20 54 72 79 20 74 6f 20 63 6f 6e 76 65 72  ** Try to conver
3960: 74 20 74 68 65 20 74 79 70 65 20 6f 66 20 61 20  t the type of a 
3970: 66 75 6e 63 74 69 6f 6e 20 61 72 67 75 6d 65 6e  function argumen
3980: 74 20 6f 72 20 61 20 72 65 73 75 6c 74 20 63 6f  t or a result co
3990: 6c 75 6d 6e 0a 2a 2a 20 69 6e 74 6f 20 61 20 6e  lumn.** into a n
39a0: 75 6d 65 72 69 63 20 72 65 70 72 65 73 65 6e 74  umeric represent
39b0: 61 74 69 6f 6e 2e 20 20 55 73 65 20 65 69 74 68  ation.  Use eith
39c0: 65 72 20 49 4e 54 45 47 45 52 20 6f 72 20 52 45  er INTEGER or RE
39d0: 41 4c 20 77 68 69 63 68 65 76 65 72 0a 2a 2a 20  AL whichever.** 
39e0: 69 73 20 61 70 70 72 6f 70 72 69 61 74 65 2e 20  is appropriate. 
39f0: 20 42 75 74 20 6f 6e 6c 79 20 64 6f 20 74 68 65   But only do the
3a00: 20 63 6f 6e 76 65 72 73 69 6f 6e 20 69 66 20 69   conversion if i
3a10: 74 20 69 73 20 70 6f 73 73 69 62 6c 65 20 77 69  t is possible wi
3a20: 74 68 6f 75 74 0a 2a 2a 20 6c 6f 73 73 20 6f 66  thout.** loss of
3a30: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 6e 64   information and
3a40: 20 72 65 74 75 72 6e 20 74 68 65 20 72 65 76 69   return the revi
3a50: 73 65 64 20 74 79 70 65 20 6f 66 20 74 68 65 20  sed type of the 
3a60: 61 72 67 75 6d 65 6e 74 2e 0a 2a 2f 0a 69 6e 74  argument..*/.int
3a70: 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 6e   sqlite3_value_n
3a80: 75 6d 65 72 69 63 5f 74 79 70 65 28 73 71 6c 69  umeric_type(sqli
3a90: 74 65 33 5f 76 61 6c 75 65 20 2a 70 56 61 6c 29  te3_value *pVal)
3aa0: 7b 0a 20 20 69 6e 74 20 65 54 79 70 65 20 3d 20  {.  int eType = 
3ab0: 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 79  sqlite3_value_ty
3ac0: 70 65 28 70 56 61 6c 29 3b 0a 20 20 69 66 28 20  pe(pVal);.  if( 
3ad0: 65 54 79 70 65 3d 3d 53 51 4c 49 54 45 5f 54 45  eType==SQLITE_TE
3ae0: 58 54 20 29 7b 0a 20 20 20 20 4d 65 6d 20 2a 70  XT ){.    Mem *p
3af0: 4d 65 6d 20 3d 20 28 4d 65 6d 2a 29 70 56 61 6c  Mem = (Mem*)pVal
3b00: 3b 0a 20 20 20 20 61 70 70 6c 79 4e 75 6d 65 72  ;.    applyNumer
3b10: 69 63 41 66 66 69 6e 69 74 79 28 70 4d 65 6d 2c  icAffinity(pMem,
3b20: 20 30 29 3b 0a 20 20 20 20 65 54 79 70 65 20 3d   0);.    eType =
3b30: 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74   sqlite3_value_t
3b40: 79 70 65 28 70 56 61 6c 29 3b 0a 20 20 7d 0a 20  ype(pVal);.  }. 
3b50: 20 72 65 74 75 72 6e 20 65 54 79 70 65 3b 0a 7d   return eType;.}
3b60: 0a 0a 2f 2a 0a 2a 2a 20 45 78 70 6f 72 74 65 64  ../*.** Exported
3b70: 20 76 65 72 73 69 6f 6e 20 6f 66 20 61 70 70 6c   version of appl
3b80: 79 41 66 66 69 6e 69 74 79 28 29 2e 20 54 68 69  yAffinity(). Thi
3b90: 73 20 6f 6e 65 20 77 6f 72 6b 73 20 6f 6e 20 73  s one works on s
3ba0: 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2c 20 0a  qlite3_value*, .
3bb0: 2a 2a 20 6e 6f 74 20 74 68 65 20 69 6e 74 65 72  ** not the inter
3bc0: 6e 61 6c 20 4d 65 6d 2a 20 74 79 70 65 2e 0a 2a  nal Mem* type..*
3bd0: 2f 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 61  /.void sqlite3Va
3be0: 6c 75 65 41 70 70 6c 79 41 66 66 69 6e 69 74 79  lueApplyAffinity
3bf0: 28 0a 20 20 73 71 6c 69 74 65 33 5f 76 61 6c 75  (.  sqlite3_valu
3c00: 65 20 2a 70 56 61 6c 2c 20 0a 20 20 75 38 20 61  e *pVal, .  u8 a
3c10: 66 66 69 6e 69 74 79 2c 20 0a 20 20 75 38 20 65  ffinity, .  u8 e
3c20: 6e 63 0a 29 7b 0a 20 20 61 70 70 6c 79 41 66 66  nc.){.  applyAff
3c30: 69 6e 69 74 79 28 28 4d 65 6d 20 2a 29 70 56 61  inity((Mem *)pVa
3c40: 6c 2c 20 61 66 66 69 6e 69 74 79 2c 20 65 6e 63  l, affinity, enc
3c50: 29 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 70 4d 65 6d  );.}../*.** pMem
3c60: 20 63 75 72 72 65 6e 74 6c 79 20 6f 6e 6c 79 20   currently only 
3c70: 68 6f 6c 64 73 20 61 20 73 74 72 69 6e 67 20 74  holds a string t
3c80: 79 70 65 20 28 6f 72 20 6d 61 79 62 65 20 61 20  ype (or maybe a 
3c90: 42 4c 4f 42 20 74 68 61 74 20 77 65 20 63 61 6e  BLOB that we can
3ca0: 0a 2a 2a 20 69 6e 74 65 72 70 72 65 74 20 61 73  .** interpret as
3cb0: 20 61 20 73 74 72 69 6e 67 20 69 66 20 77 65 20   a string if we 
3cc0: 77 61 6e 74 20 74 6f 29 2e 20 20 43 6f 6d 70 75  want to).  Compu
3cd0: 74 65 20 69 74 73 20 63 6f 72 72 65 73 70 6f 6e  te its correspon
3ce0: 64 69 6e 67 0a 2a 2a 20 6e 75 6d 65 72 69 63 20  ding.** numeric 
3cf0: 74 79 70 65 2c 20 69 66 20 68 61 73 20 6f 6e 65  type, if has one
3d00: 2e 20 20 53 65 74 20 74 68 65 20 70 4d 65 6d 2d  .  Set the pMem-
3d10: 3e 75 2e 72 20 61 6e 64 20 70 4d 65 6d 2d 3e 75  >u.r and pMem->u
3d20: 2e 69 20 66 69 65 6c 64 73 0a 2a 2a 20 61 63 63  .i fields.** acc
3d30: 6f 72 64 69 6e 67 6c 79 2e 0a 2a 2f 0a 73 74 61  ordingly..*/.sta
3d40: 74 69 63 20 75 31 36 20 53 51 4c 49 54 45 5f 4e  tic u16 SQLITE_N
3d50: 4f 49 4e 4c 49 4e 45 20 63 6f 6d 70 75 74 65 4e  OINLINE computeN
3d60: 75 6d 65 72 69 63 54 79 70 65 28 4d 65 6d 20 2a  umericType(Mem *
3d70: 70 4d 65 6d 29 7b 0a 20 20 61 73 73 65 72 74 28  pMem){.  assert(
3d80: 20 28 70 4d 65 6d 2d 3e 66 6c 61 67 73 20 26 20   (pMem->flags & 
3d90: 28 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 52 65 61  (MEM_Int|MEM_Rea
3da0: 6c 7c 4d 45 4d 5f 49 6e 74 52 65 61 6c 29 29 3d  l|MEM_IntReal))=
3db0: 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
3dc0: 28 70 4d 65 6d 2d 3e 66 6c 61 67 73 20 26 20 28  (pMem->flags & (
3dd0: 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f 42 6c 6f 62  MEM_Str|MEM_Blob
3de0: 29 29 21 3d 30 20 29 3b 0a 20 20 45 78 70 61 6e  ))!=0 );.  Expan
3df0: 64 42 6c 6f 62 28 70 4d 65 6d 29 3b 0a 20 20 69  dBlob(pMem);.  i
3e00: 66 28 20 73 71 6c 69 74 65 33 41 74 6f 46 28 70  f( sqlite3AtoF(p
3e10: 4d 65 6d 2d 3e 7a 2c 20 26 70 4d 65 6d 2d 3e 75  Mem->z, &pMem->u
3e20: 2e 72 2c 20 70 4d 65 6d 2d 3e 6e 2c 20 70 4d 65  .r, pMem->n, pMe
3e30: 6d 2d 3e 65 6e 63 29 3d 3d 30 20 29 7b 0a 20 20  m->enc)==0 ){.  
3e40: 20 20 72 65 74 75 72 6e 20 30 3b 0a 20 20 7d 0a    return 0;.  }.
3e50: 20 20 69 66 28 20 73 71 6c 69 74 65 33 41 74 6f    if( sqlite3Ato
3e60: 69 36 34 28 70 4d 65 6d 2d 3e 7a 2c 20 26 70 4d  i64(pMem->z, &pM
3e70: 65 6d 2d 3e 75 2e 69 2c 20 70 4d 65 6d 2d 3e 6e  em->u.i, pMem->n
3e80: 2c 20 70 4d 65 6d 2d 3e 65 6e 63 29 3d 3d 30 20  , pMem->enc)==0 
3e90: 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 4d 45  ){.    return ME
3ea0: 4d 5f 49 6e 74 3b 0a 20 20 7d 0a 20 20 72 65 74  M_Int;.  }.  ret
3eb0: 75 72 6e 20 4d 45 4d 5f 52 65 61 6c 3b 0a 7d 0a  urn MEM_Real;.}.
3ec0: 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74 68  ./*.** Return th
3ed0: 65 20 6e 75 6d 65 72 69 63 20 74 79 70 65 20 66  e numeric type f
3ee0: 6f 72 20 70 4d 65 6d 2c 20 65 69 74 68 65 72 20  or pMem, either 
3ef0: 4d 45 4d 5f 49 6e 74 20 6f 72 20 4d 45 4d 5f 52  MEM_Int or MEM_R
3f00: 65 61 6c 20 6f 72 20 62 6f 74 68 20 6f 72 0a 2a  eal or both or.*
3f10: 2a 20 6e 6f 6e 65 2e 20 20 0a 2a 2a 0a 2a 2a 20  * none.  .**.** 
3f20: 55 6e 6c 69 6b 65 20 61 70 70 6c 79 4e 75 6d 65  Unlike applyNume
3f30: 72 69 63 41 66 66 69 6e 69 74 79 28 29 2c 20 74  ricAffinity(), t
3f40: 68 69 73 20 72 6f 75 74 69 6e 65 20 64 6f 65 73  his routine does
3f50: 20 6e 6f 74 20 6d 6f 64 69 66 79 20 70 4d 65 6d   not modify pMem
3f60: 2d 3e 66 6c 61 67 73 2e 0a 2a 2a 20 42 75 74 20  ->flags..** But 
3f70: 69 74 20 64 6f 65 73 20 73 65 74 20 70 4d 65 6d  it does set pMem
3f80: 2d 3e 75 2e 72 20 61 6e 64 20 70 4d 65 6d 2d 3e  ->u.r and pMem->
3f90: 75 2e 69 20 61 70 70 72 6f 70 72 69 61 74 65 6c  u.i appropriatel
3fa0: 79 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 75 31 36  y..*/.static u16
3fb0: 20 6e 75 6d 65 72 69 63 54 79 70 65 28 4d 65 6d   numericType(Mem
3fc0: 20 2a 70 4d 65 6d 29 7b 0a 20 20 69 66 28 20 70   *pMem){.  if( p
3fd0: 4d 65 6d 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45  Mem->flags & (ME
3fe0: 4d 5f 49 6e 74 7c 4d 45 4d 5f 52 65 61 6c 7c 4d  M_Int|MEM_Real|M
3ff0: 45 4d 5f 49 6e 74 52 65 61 6c 29 20 29 7b 0a 20  EM_IntReal) ){. 
4000: 20 20 20 74 65 73 74 63 61 73 65 28 20 70 4d 65     testcase( pMe
4010: 6d 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49  m->flags & MEM_I
4020: 6e 74 20 29 3b 0a 20 20 20 20 74 65 73 74 63 61  nt );.    testca
4030: 73 65 28 20 70 4d 65 6d 2d 3e 66 6c 61 67 73 20  se( pMem->flags 
4040: 26 20 4d 45 4d 5f 52 65 61 6c 20 29 3b 0a 20 20  & MEM_Real );.  
4050: 20 20 74 65 73 74 63 61 73 65 28 20 70 4d 65 6d    testcase( pMem
4060: 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e  ->flags & MEM_In
4070: 74 52 65 61 6c 20 29 3b 0a 20 20 20 20 72 65 74  tReal );.    ret
4080: 75 72 6e 20 70 4d 65 6d 2d 3e 66 6c 61 67 73 20  urn pMem->flags 
4090: 26 20 28 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 52  & (MEM_Int|MEM_R
40a0: 65 61 6c 7c 4d 45 4d 5f 49 6e 74 52 65 61 6c 29  eal|MEM_IntReal)
40b0: 3b 0a 20 20 7d 0a 20 20 69 66 28 20 70 4d 65 6d  ;.  }.  if( pMem
40c0: 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f 53  ->flags & (MEM_S
40d0: 74 72 7c 4d 45 4d 5f 42 6c 6f 62 29 20 29 7b 0a  tr|MEM_Blob) ){.
40e0: 20 20 20 20 74 65 73 74 63 61 73 65 28 20 70 4d      testcase( pM
40f0: 65 6d 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  em->flags & MEM_
4100: 53 74 72 20 29 3b 0a 20 20 20 20 74 65 73 74 63  Str );.    testc
4110: 61 73 65 28 20 70 4d 65 6d 2d 3e 66 6c 61 67 73  ase( pMem->flags
4120: 20 26 20 4d 45 4d 5f 42 6c 6f 62 20 29 3b 0a 20   & MEM_Blob );. 
4130: 20 20 20 72 65 74 75 72 6e 20 63 6f 6d 70 75 74     return comput
4140: 65 4e 75 6d 65 72 69 63 54 79 70 65 28 70 4d 65  eNumericType(pMe
4150: 6d 29 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e  m);.  }.  return
4160: 20 30 3b 0a 7d 0a 0a 23 69 66 64 65 66 20 53 51   0;.}..#ifdef SQ
4170: 4c 49 54 45 5f 44 45 42 55 47 0a 2f 2a 0a 2a 2a  LITE_DEBUG./*.**
4180: 20 57 72 69 74 65 20 61 20 6e 69 63 65 20 73 74   Write a nice st
4190: 72 69 6e 67 20 72 65 70 72 65 73 65 6e 74 61 74  ring representat
41a0: 69 6f 6e 20 6f 66 20 74 68 65 20 63 6f 6e 74 65  ion of the conte
41b0: 6e 74 73 20 6f 66 20 63 65 6c 6c 20 70 4d 65 6d  nts of cell pMem
41c0: 0a 2a 2a 20 69 6e 74 6f 20 62 75 66 66 65 72 20  .** into buffer 
41d0: 7a 42 75 66 2c 20 6c 65 6e 67 74 68 20 6e 42 75  zBuf, length nBu
41e0: 66 2e 0a 2a 2f 0a 76 6f 69 64 20 73 71 6c 69 74  f..*/.void sqlit
41f0: 65 33 56 64 62 65 4d 65 6d 50 72 65 74 74 79 50  e3VdbeMemPrettyP
4200: 72 69 6e 74 28 4d 65 6d 20 2a 70 4d 65 6d 2c 20  rint(Mem *pMem, 
4210: 63 68 61 72 20 2a 7a 42 75 66 29 7b 0a 20 20 63  char *zBuf){.  c
4220: 68 61 72 20 2a 7a 43 73 72 20 3d 20 7a 42 75 66  har *zCsr = zBuf
4230: 3b 0a 20 20 69 6e 74 20 66 20 3d 20 70 4d 65 6d  ;.  int f = pMem
4240: 2d 3e 66 6c 61 67 73 3b 0a 0a 20 20 73 74 61 74  ->flags;..  stat
4250: 69 63 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 63  ic const char *c
4260: 6f 6e 73 74 20 65 6e 63 6e 61 6d 65 73 5b 5d 20  onst encnames[] 
4270: 3d 20 7b 22 28 58 29 22 2c 20 22 28 38 29 22 2c  = {"(X)", "(8)",
4280: 20 22 28 31 36 4c 45 29 22 2c 20 22 28 31 36 42   "(16LE)", "(16B
4290: 45 29 22 7d 3b 0a 0a 20 20 69 66 28 20 66 26 4d  E)"};..  if( f&M
42a0: 45 4d 5f 42 6c 6f 62 20 29 7b 0a 20 20 20 20 69  EM_Blob ){.    i
42b0: 6e 74 20 69 3b 0a 20 20 20 20 63 68 61 72 20 63  nt i;.    char c
42c0: 3b 0a 20 20 20 20 69 66 28 20 66 20 26 20 4d 45  ;.    if( f & ME
42d0: 4d 5f 44 79 6e 20 29 7b 0a 20 20 20 20 20 20 63  M_Dyn ){.      c
42e0: 20 3d 20 27 7a 27 3b 0a 20 20 20 20 20 20 61 73   = 'z';.      as
42f0: 73 65 72 74 28 20 28 66 20 26 20 28 4d 45 4d 5f  sert( (f & (MEM_
4300: 53 74 61 74 69 63 7c 4d 45 4d 5f 45 70 68 65 6d  Static|MEM_Ephem
4310: 29 29 3d 3d 30 20 29 3b 0a 20 20 20 20 7d 65 6c  ))==0 );.    }el
4320: 73 65 20 69 66 28 20 66 20 26 20 4d 45 4d 5f 53  se if( f & MEM_S
4330: 74 61 74 69 63 20 29 7b 0a 20 20 20 20 20 20 63  tatic ){.      c
4340: 20 3d 20 27 74 27 3b 0a 20 20 20 20 20 20 61 73   = 't';.      as
4350: 73 65 72 74 28 20 28 66 20 26 20 28 4d 45 4d 5f  sert( (f & (MEM_
4360: 44 79 6e 7c 4d 45 4d 5f 45 70 68 65 6d 29 29 3d  Dyn|MEM_Ephem))=
4370: 3d 30 20 29 3b 0a 20 20 20 20 7d 65 6c 73 65 20  =0 );.    }else 
4380: 69 66 28 20 66 20 26 20 4d 45 4d 5f 45 70 68 65  if( f & MEM_Ephe
4390: 6d 20 29 7b 0a 20 20 20 20 20 20 63 20 3d 20 27  m ){.      c = '
43a0: 65 27 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74  e';.      assert
43b0: 28 20 28 66 20 26 20 28 4d 45 4d 5f 53 74 61 74  ( (f & (MEM_Stat
43c0: 69 63 7c 4d 45 4d 5f 44 79 6e 29 29 3d 3d 30 20  ic|MEM_Dyn))==0 
43d0: 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  );.    }else{.  
43e0: 20 20 20 20 63 20 3d 20 27 73 27 3b 0a 20 20 20      c = 's';.   
43f0: 20 7d 0a 20 20 20 20 2a 28 7a 43 73 72 2b 2b 29   }.    *(zCsr++)
4400: 20 3d 20 63 3b 0a 20 20 20 20 73 71 6c 69 74 65   = c;.    sqlite
4410: 33 5f 73 6e 70 72 69 6e 74 66 28 31 30 30 2c 20  3_snprintf(100, 
4420: 7a 43 73 72 2c 20 22 25 64 5b 22 2c 20 70 4d 65  zCsr, "%d[", pMe
4430: 6d 2d 3e 6e 29 3b 0a 20 20 20 20 7a 43 73 72 20  m->n);.    zCsr 
4440: 2b 3d 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e  += sqlite3Strlen
4450: 33 30 28 7a 43 73 72 29 3b 0a 20 20 20 20 66 6f  30(zCsr);.    fo
4460: 72 28 69 3d 30 3b 20 69 3c 31 36 20 26 26 20 69  r(i=0; i<16 && i
4470: 3c 70 4d 65 6d 2d 3e 6e 3b 20 69 2b 2b 29 7b 0a  <pMem->n; i++){.
4480: 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 73 6e        sqlite3_sn
4490: 70 72 69 6e 74 66 28 31 30 30 2c 20 7a 43 73 72  printf(100, zCsr
44a0: 2c 20 22 25 30 32 58 22 2c 20 28 28 69 6e 74 29  , "%02X", ((int)
44b0: 70 4d 65 6d 2d 3e 7a 5b 69 5d 20 26 20 30 78 46  pMem->z[i] & 0xF
44c0: 46 29 29 3b 0a 20 20 20 20 20 20 7a 43 73 72 20  F));.      zCsr 
44d0: 2b 3d 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e  += sqlite3Strlen
44e0: 33 30 28 7a 43 73 72 29 3b 0a 20 20 20 20 7d 0a  30(zCsr);.    }.
44f0: 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 31      for(i=0; i<1
4500: 36 20 26 26 20 69 3c 70 4d 65 6d 2d 3e 6e 3b 20  6 && i<pMem->n; 
4510: 69 2b 2b 29 7b 0a 20 20 20 20 20 20 63 68 61 72  i++){.      char
4520: 20 7a 20 3d 20 70 4d 65 6d 2d 3e 7a 5b 69 5d 3b   z = pMem->z[i];
4530: 0a 20 20 20 20 20 20 69 66 28 20 7a 3c 33 32 20  .      if( z<32 
4540: 7c 7c 20 7a 3e 31 32 36 20 29 20 2a 7a 43 73 72  || z>126 ) *zCsr
4550: 2b 2b 20 3d 20 27 2e 27 3b 0a 20 20 20 20 20 20  ++ = '.';.      
4560: 65 6c 73 65 20 2a 7a 43 73 72 2b 2b 20 3d 20 7a  else *zCsr++ = z
4570: 3b 0a 20 20 20 20 7d 0a 20 20 20 20 2a 28 7a 43  ;.    }.    *(zC
4580: 73 72 2b 2b 29 20 3d 20 27 5d 27 3b 0a 20 20 20  sr++) = ']';.   
4590: 20 69 66 28 20 66 20 26 20 4d 45 4d 5f 5a 65 72   if( f & MEM_Zer
45a0: 6f 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74  o ){.      sqlit
45b0: 65 33 5f 73 6e 70 72 69 6e 74 66 28 31 30 30 2c  e3_snprintf(100,
45c0: 20 7a 43 73 72 2c 22 2b 25 64 7a 22 2c 70 4d 65   zCsr,"+%dz",pMe
45d0: 6d 2d 3e 75 2e 6e 5a 65 72 6f 29 3b 0a 20 20 20  m->u.nZero);.   
45e0: 20 20 20 7a 43 73 72 20 2b 3d 20 73 71 6c 69 74     zCsr += sqlit
45f0: 65 33 53 74 72 6c 65 6e 33 30 28 7a 43 73 72 29  e3Strlen30(zCsr)
4600: 3b 0a 20 20 20 20 7d 0a 20 20 20 20 2a 7a 43 73  ;.    }.    *zCs
4610: 72 20 3d 20 27 5c 30 27 3b 0a 20 20 7d 65 6c 73  r = '\0';.  }els
4620: 65 20 69 66 28 20 66 20 26 20 4d 45 4d 5f 53 74  e if( f & MEM_St
4630: 72 20 29 7b 0a 20 20 20 20 69 6e 74 20 6a 2c 20  r ){.    int j, 
4640: 6b 3b 0a 20 20 20 20 7a 42 75 66 5b 30 5d 20 3d  k;.    zBuf[0] =
4650: 20 27 20 27 3b 0a 20 20 20 20 69 66 28 20 66 20   ' ';.    if( f 
4660: 26 20 4d 45 4d 5f 44 79 6e 20 29 7b 0a 20 20 20  & MEM_Dyn ){.   
4670: 20 20 20 7a 42 75 66 5b 31 5d 20 3d 20 27 7a 27     zBuf[1] = 'z'
4680: 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  ;.      assert( 
4690: 28 66 20 26 20 28 4d 45 4d 5f 53 74 61 74 69 63  (f & (MEM_Static
46a0: 7c 4d 45 4d 5f 45 70 68 65 6d 29 29 3d 3d 30 20  |MEM_Ephem))==0 
46b0: 29 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28  );.    }else if(
46c0: 20 66 20 26 20 4d 45 4d 5f 53 74 61 74 69 63 20   f & MEM_Static 
46d0: 29 7b 0a 20 20 20 20 20 20 7a 42 75 66 5b 31 5d  ){.      zBuf[1]
46e0: 20 3d 20 27 74 27 3b 0a 20 20 20 20 20 20 61 73   = 't';.      as
46f0: 73 65 72 74 28 20 28 66 20 26 20 28 4d 45 4d 5f  sert( (f & (MEM_
4700: 44 79 6e 7c 4d 45 4d 5f 45 70 68 65 6d 29 29 3d  Dyn|MEM_Ephem))=
4710: 3d 30 20 29 3b 0a 20 20 20 20 7d 65 6c 73 65 20  =0 );.    }else 
4720: 69 66 28 20 66 20 26 20 4d 45 4d 5f 45 70 68 65  if( f & MEM_Ephe
4730: 6d 20 29 7b 0a 20 20 20 20 20 20 7a 42 75 66 5b  m ){.      zBuf[
4740: 31 5d 20 3d 20 27 65 27 3b 0a 20 20 20 20 20 20  1] = 'e';.      
4750: 61 73 73 65 72 74 28 20 28 66 20 26 20 28 4d 45  assert( (f & (ME
4760: 4d 5f 53 74 61 74 69 63 7c 4d 45 4d 5f 44 79 6e  M_Static|MEM_Dyn
4770: 29 29 3d 3d 30 20 29 3b 0a 20 20 20 20 7d 65 6c  ))==0 );.    }el
4780: 73 65 7b 0a 20 20 20 20 20 20 7a 42 75 66 5b 31  se{.      zBuf[1
4790: 5d 20 3d 20 27 73 27 3b 0a 20 20 20 20 7d 0a 20  ] = 's';.    }. 
47a0: 20 20 20 6b 20 3d 20 32 3b 0a 20 20 20 20 73 71     k = 2;.    sq
47b0: 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74 66 28 31  lite3_snprintf(1
47c0: 30 30 2c 20 26 7a 42 75 66 5b 6b 5d 2c 20 22 25  00, &zBuf[k], "%
47d0: 64 22 2c 20 70 4d 65 6d 2d 3e 6e 29 3b 0a 20 20  d", pMem->n);.  
47e0: 20 20 6b 20 2b 3d 20 73 71 6c 69 74 65 33 53 74    k += sqlite3St
47f0: 72 6c 65 6e 33 30 28 26 7a 42 75 66 5b 6b 5d 29  rlen30(&zBuf[k])
4800: 3b 0a 20 20 20 20 7a 42 75 66 5b 6b 2b 2b 5d 20  ;.    zBuf[k++] 
4810: 3d 20 27 5b 27 3b 0a 20 20 20 20 66 6f 72 28 6a  = '[';.    for(j
4820: 3d 30 3b 20 6a 3c 31 35 20 26 26 20 6a 3c 70 4d  =0; j<15 && j<pM
4830: 65 6d 2d 3e 6e 3b 20 6a 2b 2b 29 7b 0a 20 20 20  em->n; j++){.   
4840: 20 20 20 75 38 20 63 20 3d 20 70 4d 65 6d 2d 3e     u8 c = pMem->
4850: 7a 5b 6a 5d 3b 0a 20 20 20 20 20 20 69 66 28 20  z[j];.      if( 
4860: 63 3e 3d 30 78 32 30 20 26 26 20 63 3c 30 78 37  c>=0x20 && c<0x7
4870: 66 20 29 7b 0a 20 20 20 20 20 20 20 20 7a 42 75  f ){.        zBu
4880: 66 5b 6b 2b 2b 5d 20 3d 20 63 3b 0a 20 20 20 20  f[k++] = c;.    
4890: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20    }else{.       
48a0: 20 7a 42 75 66 5b 6b 2b 2b 5d 20 3d 20 27 2e 27   zBuf[k++] = '.'
48b0: 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a  ;.      }.    }.
48c0: 20 20 20 20 7a 42 75 66 5b 6b 2b 2b 5d 20 3d 20      zBuf[k++] = 
48d0: 27 5d 27 3b 0a 20 20 20 20 73 71 6c 69 74 65 33  ']';.    sqlite3
48e0: 5f 73 6e 70 72 69 6e 74 66 28 31 30 30 2c 26 7a  _snprintf(100,&z
48f0: 42 75 66 5b 6b 5d 2c 20 65 6e 63 6e 61 6d 65 73  Buf[k], encnames
4900: 5b 70 4d 65 6d 2d 3e 65 6e 63 5d 29 3b 0a 20 20  [pMem->enc]);.  
4910: 20 20 6b 20 2b 3d 20 73 71 6c 69 74 65 33 53 74    k += sqlite3St
4920: 72 6c 65 6e 33 30 28 26 7a 42 75 66 5b 6b 5d 29  rlen30(&zBuf[k])
4930: 3b 0a 20 20 20 20 7a 42 75 66 5b 6b 2b 2b 5d 20  ;.    zBuf[k++] 
4940: 3d 20 30 3b 0a 20 20 7d 0a 7d 0a 23 65 6e 64 69  = 0;.  }.}.#endi
4950: 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  f..#ifdef SQLITE
4960: 5f 44 45 42 55 47 0a 2f 2a 0a 2a 2a 20 50 72 69  _DEBUG./*.** Pri
4970: 6e 74 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20  nt the value of 
4980: 61 20 72 65 67 69 73 74 65 72 20 66 6f 72 20 74  a register for t
4990: 72 61 63 69 6e 67 20 70 75 72 70 6f 73 65 73 3a  racing purposes:
49a0: 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69 64 20  .*/.static void 
49b0: 6d 65 6d 54 72 61 63 65 50 72 69 6e 74 28 4d 65  memTracePrint(Me
49c0: 6d 20 2a 70 29 7b 0a 20 20 69 66 28 20 70 2d 3e  m *p){.  if( p->
49d0: 66 6c 61 67 73 20 26 20 4d 45 4d 5f 55 6e 64 65  flags & MEM_Unde
49e0: 66 69 6e 65 64 20 29 7b 0a 20 20 20 20 70 72 69  fined ){.    pri
49f0: 6e 74 66 28 22 20 75 6e 64 65 66 69 6e 65 64 22  ntf(" undefined"
4a00: 29 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 70  );.  }else if( p
4a10: 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75  ->flags & MEM_Nu
4a20: 6c 6c 20 29 7b 0a 20 20 20 20 70 72 69 6e 74 66  ll ){.    printf
4a30: 28 70 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  (p->flags & MEM_
4a40: 5a 65 72 6f 20 3f 20 22 20 4e 55 4c 4c 2d 6e 6f  Zero ? " NULL-no
4a50: 63 68 6e 67 22 20 3a 20 22 20 4e 55 4c 4c 22 29  chng" : " NULL")
4a60: 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 28 70  ;.  }else if( (p
4a70: 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f 49  ->flags & (MEM_I
4a80: 6e 74 7c 4d 45 4d 5f 53 74 72 29 29 3d 3d 28 4d  nt|MEM_Str))==(M
4a90: 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 53 74 72 29 20  EM_Int|MEM_Str) 
4aa0: 29 7b 0a 20 20 20 20 70 72 69 6e 74 66 28 22 20  ){.    printf(" 
4ab0: 73 69 3a 25 6c 6c 64 22 2c 20 70 2d 3e 75 2e 69  si:%lld", p->u.i
4ac0: 29 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 28  );.  }else if( (
4ad0: 70 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f  p->flags & (MEM_
4ae0: 49 6e 74 52 65 61 6c 29 29 21 3d 30 20 29 7b 0a  IntReal))!=0 ){.
4af0: 20 20 20 20 70 72 69 6e 74 66 28 22 20 69 72 3a      printf(" ir:
4b00: 25 6c 6c 64 22 2c 20 70 2d 3e 75 2e 69 29 3b 0a  %lld", p->u.i);.
4b10: 20 20 7d 65 6c 73 65 20 69 66 28 20 70 2d 3e 66    }else if( p->f
4b20: 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 20 29  lags & MEM_Int )
4b30: 7b 0a 20 20 20 20 70 72 69 6e 74 66 28 22 20 69  {.    printf(" i
4b40: 3a 25 6c 6c 64 22 2c 20 70 2d 3e 75 2e 69 29 3b  :%lld", p->u.i);
4b50: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
4b60: 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f  OMIT_FLOATING_PO
4b70: 49 4e 54 0a 20 20 7d 65 6c 73 65 20 69 66 28 20  INT.  }else if( 
4b80: 70 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52  p->flags & MEM_R
4b90: 65 61 6c 20 29 7b 0a 20 20 20 20 70 72 69 6e 74  eal ){.    print
4ba0: 66 28 22 20 72 3a 25 67 22 2c 20 70 2d 3e 75 2e  f(" r:%g", p->u.
4bb0: 72 29 3b 0a 23 65 6e 64 69 66 0a 20 20 7d 65 6c  r);.#endif.  }el
4bc0: 73 65 20 69 66 28 20 73 71 6c 69 74 65 33 56 64  se if( sqlite3Vd
4bd0: 62 65 4d 65 6d 49 73 52 6f 77 53 65 74 28 70 29  beMemIsRowSet(p)
4be0: 20 29 7b 0a 20 20 20 20 70 72 69 6e 74 66 28 22   ){.    printf("
4bf0: 20 28 72 6f 77 73 65 74 29 22 29 3b 0a 20 20 7d   (rowset)");.  }
4c00: 65 6c 73 65 7b 0a 20 20 20 20 63 68 61 72 20 7a  else{.    char z
4c10: 42 75 66 5b 32 30 30 5d 3b 0a 20 20 20 20 73 71  Buf[200];.    sq
4c20: 6c 69 74 65 33 56 64 62 65 4d 65 6d 50 72 65 74  lite3VdbeMemPret
4c30: 74 79 50 72 69 6e 74 28 70 2c 20 7a 42 75 66 29  tyPrint(p, zBuf)
4c40: 3b 0a 20 20 20 20 70 72 69 6e 74 66 28 22 20 25  ;.    printf(" %
4c50: 73 22 2c 20 7a 42 75 66 29 3b 0a 20 20 7d 0a 20  s", zBuf);.  }. 
4c60: 20 69 66 28 20 70 2d 3e 66 6c 61 67 73 20 26 20   if( p->flags & 
4c70: 4d 45 4d 5f 53 75 62 74 79 70 65 20 29 20 70 72  MEM_Subtype ) pr
4c80: 69 6e 74 66 28 22 20 73 75 62 74 79 70 65 3d 30  intf(" subtype=0
4c90: 78 25 30 32 78 22 2c 20 70 2d 3e 65 53 75 62 74  x%02x", p->eSubt
4ca0: 79 70 65 29 3b 0a 7d 0a 73 74 61 74 69 63 20 76  ype);.}.static v
4cb0: 6f 69 64 20 72 65 67 69 73 74 65 72 54 72 61 63  oid registerTrac
4cc0: 65 28 69 6e 74 20 69 52 65 67 2c 20 4d 65 6d 20  e(int iReg, Mem 
4cd0: 2a 70 29 7b 0a 20 20 70 72 69 6e 74 66 28 22 52  *p){.  printf("R
4ce0: 45 47 5b 25 64 5d 20 3d 20 22 2c 20 69 52 65 67  EG[%d] = ", iReg
4cf0: 29 3b 0a 20 20 6d 65 6d 54 72 61 63 65 50 72 69  );.  memTracePri
4d00: 6e 74 28 70 29 3b 0a 20 20 70 72 69 6e 74 66 28  nt(p);.  printf(
4d10: 22 5c 6e 22 29 3b 0a 20 20 73 71 6c 69 74 65 33  "\n");.  sqlite3
4d20: 56 64 62 65 43 68 65 63 6b 4d 65 6d 49 6e 76 61  VdbeCheckMemInva
4d30: 72 69 61 6e 74 73 28 70 29 3b 0a 7d 0a 23 65 6e  riants(p);.}.#en
4d40: 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49  dif..#ifdef SQLI
4d50: 54 45 5f 44 45 42 55 47 0a 23 20 20 64 65 66 69  TE_DEBUG.#  defi
4d60: 6e 65 20 52 45 47 49 53 54 45 52 5f 54 52 41 43  ne REGISTER_TRAC
4d70: 45 28 52 2c 4d 29 20 69 66 28 64 62 2d 3e 66 6c  E(R,M) if(db->fl
4d80: 61 67 73 26 53 51 4c 49 54 45 5f 56 64 62 65 54  ags&SQLITE_VdbeT
4d90: 72 61 63 65 29 72 65 67 69 73 74 65 72 54 72 61  race)registerTra
4da0: 63 65 28 52 2c 4d 29 0a 23 65 6c 73 65 0a 23 20  ce(R,M).#else.# 
4db0: 20 64 65 66 69 6e 65 20 52 45 47 49 53 54 45 52   define REGISTER
4dc0: 5f 54 52 41 43 45 28 52 2c 4d 29 0a 23 65 6e 64  _TRACE(R,M).#end
4dd0: 69 66 0a 0a 0a 23 69 66 64 65 66 20 56 44 42 45  if...#ifdef VDBE
4de0: 5f 50 52 4f 46 49 4c 45 0a 0a 2f 2a 20 0a 2a 2a  _PROFILE../* .**
4df0: 20 68 77 74 69 6d 65 2e 68 20 63 6f 6e 74 61 69   hwtime.h contai
4e00: 6e 73 20 69 6e 6c 69 6e 65 20 61 73 73 65 6d 62  ns inline assemb
4e10: 6c 65 72 20 63 6f 64 65 20 66 6f 72 20 69 6d 70  ler code for imp
4e20: 6c 65 6d 65 6e 74 69 6e 67 20 0a 2a 2a 20 68 69  lementing .** hi
4e30: 67 68 2d 70 65 72 66 6f 72 6d 61 6e 63 65 20 74  gh-performance t
4e40: 69 6d 69 6e 67 20 72 6f 75 74 69 6e 65 73 2e 0a  iming routines..
4e50: 2a 2f 0a 23 69 6e 63 6c 75 64 65 20 22 68 77 74  */.#include "hwt
4e60: 69 6d 65 2e 68 22 0a 0a 23 65 6e 64 69 66 0a 0a  ime.h"..#endif..
4e70: 23 69 66 6e 64 65 66 20 4e 44 45 42 55 47 0a 2f  #ifndef NDEBUG./
4e80: 2a 0a 2a 2a 20 54 68 69 73 20 66 75 6e 63 74 69  *.** This functi
4e90: 6f 6e 20 69 73 20 6f 6e 6c 79 20 63 61 6c 6c 65  on is only calle
4ea0: 64 20 66 72 6f 6d 20 77 69 74 68 69 6e 20 61 6e  d from within an
4eb0: 20 61 73 73 65 72 74 28 29 20 65 78 70 72 65 73   assert() expres
4ec0: 73 69 6f 6e 2e 20 49 74 0a 2a 2a 20 63 68 65 63  sion. It.** chec
4ed0: 6b 73 20 74 68 61 74 20 74 68 65 20 73 71 6c 69  ks that the sqli
4ee0: 74 65 33 2e 6e 54 72 61 6e 73 61 63 74 69 6f 6e  te3.nTransaction
4ef0: 20 76 61 72 69 61 62 6c 65 20 69 73 20 63 6f 72   variable is cor
4f00: 72 65 63 74 6c 79 20 73 65 74 20 74 6f 0a 2a 2a  rectly set to.**
4f10: 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 6e   the number of n
4f20: 6f 6e 2d 74 72 61 6e 73 61 63 74 69 6f 6e 20 73  on-transaction s
4f30: 61 76 65 70 6f 69 6e 74 73 20 63 75 72 72 65 6e  avepoints curren
4f40: 74 6c 79 20 69 6e 20 74 68 65 20 0a 2a 2a 20 6c  tly in the .** l
4f50: 69 6e 6b 65 64 20 6c 69 73 74 20 73 74 61 72 74  inked list start
4f60: 69 6e 67 20 61 74 20 73 71 6c 69 74 65 33 2e 70  ing at sqlite3.p
4f70: 53 61 76 65 70 6f 69 6e 74 2e 0a 2a 2a 20 0a 2a  Savepoint..** .*
4f80: 2a 20 55 73 61 67 65 3a 0a 2a 2a 0a 2a 2a 20 20  * Usage:.**.**  
4f90: 20 20 20 61 73 73 65 72 74 28 20 63 68 65 63 6b     assert( check
4fa0: 53 61 76 65 70 6f 69 6e 74 43 6f 75 6e 74 28 64  SavepointCount(d
4fb0: 62 29 20 29 3b 0a 2a 2f 0a 73 74 61 74 69 63 20  b) );.*/.static 
4fc0: 69 6e 74 20 63 68 65 63 6b 53 61 76 65 70 6f 69  int checkSavepoi
4fd0: 6e 74 43 6f 75 6e 74 28 73 71 6c 69 74 65 33 20  ntCount(sqlite3 
4fe0: 2a 64 62 29 7b 0a 20 20 69 6e 74 20 6e 20 3d 20  *db){.  int n = 
4ff0: 30 3b 0a 20 20 53 61 76 65 70 6f 69 6e 74 20 2a  0;.  Savepoint *
5000: 70 3b 0a 20 20 66 6f 72 28 70 3d 64 62 2d 3e 70  p;.  for(p=db->p
5010: 53 61 76 65 70 6f 69 6e 74 3b 20 70 3b 20 70 3d  Savepoint; p; p=
5020: 70 2d 3e 70 4e 65 78 74 29 20 6e 2b 2b 3b 0a 20  p->pNext) n++;. 
5030: 20 61 73 73 65 72 74 28 20 6e 3d 3d 28 64 62 2d   assert( n==(db-
5040: 3e 6e 53 61 76 65 70 6f 69 6e 74 20 2b 20 64 62  >nSavepoint + db
5050: 2d 3e 69 73 54 72 61 6e 73 61 63 74 69 6f 6e 53  ->isTransactionS
5060: 61 76 65 70 6f 69 6e 74 29 20 29 3b 0a 20 20 72  avepoint) );.  r
5070: 65 74 75 72 6e 20 31 3b 0a 7d 0a 23 65 6e 64 69  eturn 1;.}.#endi
5080: 66 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20  f../*.** Return 
5090: 74 68 65 20 72 65 67 69 73 74 65 72 20 6f 66 20  the register of 
50a0: 70 4f 70 2d 3e 70 32 20 61 66 74 65 72 20 66 69  pOp->p2 after fi
50b0: 72 73 74 20 70 72 65 70 61 72 69 6e 67 20 69 74  rst preparing it
50c0: 20 74 6f 20 62 65 0a 2a 2a 20 6f 76 65 72 77 72   to be.** overwr
50d0: 69 74 74 65 6e 20 77 69 74 68 20 61 6e 20 69 6e  itten with an in
50e0: 74 65 67 65 72 20 76 61 6c 75 65 2e 0a 2a 2f 0a  teger value..*/.
50f0: 73 74 61 74 69 63 20 53 51 4c 49 54 45 5f 4e 4f  static SQLITE_NO
5100: 49 4e 4c 49 4e 45 20 4d 65 6d 20 2a 6f 75 74 32  INLINE Mem *out2
5110: 50 72 65 72 65 6c 65 61 73 65 57 69 74 68 43 6c  PrereleaseWithCl
5120: 65 61 72 28 4d 65 6d 20 2a 70 4f 75 74 29 7b 0a  ear(Mem *pOut){.
5130: 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
5140: 53 65 74 4e 75 6c 6c 28 70 4f 75 74 29 3b 0a 20  SetNull(pOut);. 
5150: 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d   pOut->flags = M
5160: 45 4d 5f 49 6e 74 3b 0a 20 20 72 65 74 75 72 6e  EM_Int;.  return
5170: 20 70 4f 75 74 3b 0a 7d 0a 73 74 61 74 69 63 20   pOut;.}.static 
5180: 4d 65 6d 20 2a 6f 75 74 32 50 72 65 72 65 6c 65  Mem *out2Prerele
5190: 61 73 65 28 56 64 62 65 20 2a 70 2c 20 56 64 62  ase(Vdbe *p, Vdb
51a0: 65 4f 70 20 2a 70 4f 70 29 7b 0a 20 20 4d 65 6d  eOp *pOp){.  Mem
51b0: 20 2a 70 4f 75 74 3b 0a 20 20 61 73 73 65 72 74   *pOut;.  assert
51c0: 28 20 70 4f 70 2d 3e 70 32 3e 30 20 29 3b 0a 20  ( pOp->p2>0 );. 
51d0: 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32   assert( pOp->p2
51e0: 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70  <=(p->nMem+1 - p
51f0: 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20  ->nCursor) );.  
5200: 70 4f 75 74 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b  pOut = &p->aMem[
5210: 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 6d 65 6d 41  pOp->p2];.  memA
5220: 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20  boutToChange(p, 
5230: 70 4f 75 74 29 3b 0a 20 20 69 66 28 20 56 64 62  pOut);.  if( Vdb
5240: 65 4d 65 6d 44 79 6e 61 6d 69 63 28 70 4f 75 74  eMemDynamic(pOut
5250: 29 20 29 7b 20 2f 2a 4f 50 54 49 4d 49 5a 41 54  ) ){ /*OPTIMIZAT
5260: 49 4f 4e 2d 49 46 2d 46 41 4c 53 45 2a 2f 0a 20  ION-IF-FALSE*/. 
5270: 20 20 20 72 65 74 75 72 6e 20 6f 75 74 32 50 72     return out2Pr
5280: 65 72 65 6c 65 61 73 65 57 69 74 68 43 6c 65 61  ereleaseWithClea
5290: 72 28 70 4f 75 74 29 3b 0a 20 20 7d 65 6c 73 65  r(pOut);.  }else
52a0: 7b 0a 20 20 20 20 70 4f 75 74 2d 3e 66 6c 61 67  {.    pOut->flag
52b0: 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20 20  s = MEM_Int;.   
52c0: 20 72 65 74 75 72 6e 20 70 4f 75 74 3b 0a 20 20   return pOut;.  
52d0: 7d 0a 7d 0a 0a 0a 2f 2a 0a 2a 2a 20 45 78 65 63  }.}.../*.** Exec
52e0: 75 74 65 20 61 73 20 6d 75 63 68 20 6f 66 20 61  ute as much of a
52f0: 20 56 44 42 45 20 70 72 6f 67 72 61 6d 20 61 73   VDBE program as
5300: 20 77 65 20 63 61 6e 2e 0a 2a 2a 20 54 68 69 73   we can..** This
5310: 20 69 73 20 74 68 65 20 63 6f 72 65 20 6f 66 20   is the core of 
5320: 73 71 6c 69 74 65 33 5f 73 74 65 70 28 29 2e 20  sqlite3_step(). 
5330: 20 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33   .*/.int sqlite3
5340: 56 64 62 65 45 78 65 63 28 0a 20 20 56 64 62 65  VdbeExec(.  Vdbe
5350: 20 2a 70 20 20 20 20 20 20 20 20 20 20 20 20 20   *p             
5360: 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 56 44         /* The VD
5370: 42 45 20 2a 2f 0a 29 7b 0a 20 20 4f 70 20 2a 61  BE */.){.  Op *a
5380: 4f 70 20 3d 20 70 2d 3e 61 4f 70 3b 20 20 20 20  Op = p->aOp;    
5390: 20 20 20 20 20 20 2f 2a 20 43 6f 70 79 20 6f 66        /* Copy of
53a0: 20 70 2d 3e 61 4f 70 20 2a 2f 0a 20 20 4f 70 20   p->aOp */.  Op 
53b0: 2a 70 4f 70 20 3d 20 61 4f 70 3b 20 20 20 20 20  *pOp = aOp;     
53c0: 20 20 20 20 20 20 20 20 2f 2a 20 43 75 72 72 65          /* Curre
53d0: 6e 74 20 6f 70 65 72 61 74 69 6f 6e 20 2a 2f 0a  nt operation */.
53e0: 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49  #if defined(SQLI
53f0: 54 45 5f 44 45 42 55 47 29 20 7c 7c 20 64 65 66  TE_DEBUG) || def
5400: 69 6e 65 64 28 56 44 42 45 5f 50 52 4f 46 49 4c  ined(VDBE_PROFIL
5410: 45 29 0a 20 20 4f 70 20 2a 70 4f 72 69 67 4f 70  E).  Op *pOrigOp
5420: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
5430: 2f 2a 20 56 61 6c 75 65 20 6f 66 20 70 4f 70 20  /* Value of pOp 
5440: 61 74 20 74 68 65 20 74 6f 70 20 6f 66 20 74 68  at the top of th
5450: 65 20 6c 6f 6f 70 20 2a 2f 0a 23 65 6e 64 69 66  e loop */.#endif
5460: 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44  .#ifdef SQLITE_D
5470: 45 42 55 47 0a 20 20 69 6e 74 20 6e 45 78 74 72  EBUG.  int nExtr
5480: 61 44 65 6c 65 74 65 20 3d 20 30 3b 20 20 20 20  aDelete = 0;    
5490: 20 20 2f 2a 20 56 65 72 69 66 69 65 73 20 46 4f    /* Verifies FO
54a0: 52 44 45 4c 45 54 45 20 61 6e 64 20 41 55 58 44  RDELETE and AUXD
54b0: 45 4c 45 54 45 20 66 6c 61 67 73 20 2a 2f 0a 23  ELETE flags */.#
54c0: 65 6e 64 69 66 0a 20 20 69 6e 74 20 72 63 20 3d  endif.  int rc =
54d0: 20 53 51 4c 49 54 45 5f 4f 4b 3b 20 20 20 20 20   SQLITE_OK;     
54e0: 20 20 20 2f 2a 20 56 61 6c 75 65 20 74 6f 20 72     /* Value to r
54f0: 65 74 75 72 6e 20 2a 2f 0a 20 20 73 71 6c 69 74  eturn */.  sqlit
5500: 65 33 20 2a 64 62 20 3d 20 70 2d 3e 64 62 3b 20  e3 *db = p->db; 
5510: 20 20 20 20 20 20 2f 2a 20 54 68 65 20 64 61 74        /* The dat
5520: 61 62 61 73 65 20 2a 2f 0a 20 20 75 38 20 72 65  abase */.  u8 re
5530: 73 65 74 53 63 68 65 6d 61 4f 6e 46 61 75 6c 74  setSchemaOnFault
5540: 20 3d 20 30 3b 20 2f 2a 20 52 65 73 65 74 20 73   = 0; /* Reset s
5550: 63 68 65 6d 61 20 61 66 74 65 72 20 61 6e 20 65  chema after an e
5560: 72 72 6f 72 20 69 66 20 70 6f 73 69 74 69 76 65  rror if positive
5570: 20 2a 2f 0a 20 20 75 38 20 65 6e 63 6f 64 69 6e   */.  u8 encodin
5580: 67 20 3d 20 45 4e 43 28 64 62 29 3b 20 20 20 20  g = ENC(db);    
5590: 20 2f 2a 20 54 68 65 20 64 61 74 61 62 61 73 65   /* The database
55a0: 20 65 6e 63 6f 64 69 6e 67 20 2a 2f 0a 20 20 69   encoding */.  i
55b0: 6e 74 20 69 43 6f 6d 70 61 72 65 20 3d 20 30 3b  nt iCompare = 0;
55c0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65 73            /* Res
55d0: 75 6c 74 20 6f 66 20 6c 61 73 74 20 63 6f 6d 70  ult of last comp
55e0: 61 72 69 73 6f 6e 20 2a 2f 0a 20 20 75 6e 73 69  arison */.  unsi
55f0: 67 6e 65 64 20 6e 56 6d 53 74 65 70 20 3d 20 30  gned nVmStep = 0
5600: 3b 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72  ;      /* Number
5610: 20 6f 66 20 76 69 72 74 75 61 6c 20 6d 61 63 68   of virtual mach
5620: 69 6e 65 20 73 74 65 70 73 20 2a 2f 0a 23 69 66  ine steps */.#if
5630: 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
5640: 5f 50 52 4f 47 52 45 53 53 5f 43 41 4c 4c 42 41  _PROGRESS_CALLBA
5650: 43 4b 0a 20 20 75 6e 73 69 67 6e 65 64 20 6e 50  CK.  unsigned nP
5660: 72 6f 67 72 65 73 73 4c 69 6d 69 74 3b 20 20 20  rogressLimit;   
5670: 2f 2a 20 49 6e 76 6f 6b 65 20 78 50 72 6f 67 72  /* Invoke xProgr
5680: 65 73 73 28 29 20 77 68 65 6e 20 6e 56 6d 53 74  ess() when nVmSt
5690: 65 70 20 72 65 61 63 68 65 73 20 74 68 69 73 20  ep reaches this 
56a0: 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 4d 65 6d 20  */.#endif.  Mem 
56b0: 2a 61 4d 65 6d 20 3d 20 70 2d 3e 61 4d 65 6d 3b  *aMem = p->aMem;
56c0: 20 20 20 20 20 20 20 2f 2a 20 43 6f 70 79 20 6f         /* Copy o
56d0: 66 20 70 2d 3e 61 4d 65 6d 20 2a 2f 0a 20 20 4d  f p->aMem */.  M
56e0: 65 6d 20 2a 70 49 6e 31 20 3d 20 30 3b 20 20 20  em *pIn1 = 0;   
56f0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 31 73 74            /* 1st
5700: 20 69 6e 70 75 74 20 6f 70 65 72 61 6e 64 20 2a   input operand *
5710: 2f 0a 20 20 4d 65 6d 20 2a 70 49 6e 32 20 3d 20  /.  Mem *pIn2 = 
5720: 30 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  0;             /
5730: 2a 20 32 6e 64 20 69 6e 70 75 74 20 6f 70 65 72  * 2nd input oper
5740: 61 6e 64 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 49  and */.  Mem *pI
5750: 6e 33 20 3d 20 30 3b 20 20 20 20 20 20 20 20 20  n3 = 0;         
5760: 20 20 20 20 2f 2a 20 33 72 64 20 69 6e 70 75 74      /* 3rd input
5770: 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20 4d 65   operand */.  Me
5780: 6d 20 2a 70 4f 75 74 20 3d 20 30 3b 20 20 20 20  m *pOut = 0;    
5790: 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 75 74 70           /* Outp
57a0: 75 74 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 23 69  ut operand */.#i
57b0: 66 64 65 66 20 56 44 42 45 5f 50 52 4f 46 49 4c  fdef VDBE_PROFIL
57c0: 45 0a 20 20 75 36 34 20 73 74 61 72 74 3b 20 20  E.  u64 start;  
57d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
57e0: 2a 20 43 50 55 20 63 6c 6f 63 6b 20 63 6f 75 6e  * CPU clock coun
57f0: 74 20 61 74 20 73 74 61 72 74 20 6f 66 20 6f 70  t at start of op
5800: 63 6f 64 65 20 2a 2f 0a 23 65 6e 64 69 66 0a 20  code */.#endif. 
5810: 20 2f 2a 2a 2a 20 49 4e 53 45 52 54 20 53 54 41   /*** INSERT STA
5820: 43 4b 20 55 4e 49 4f 4e 20 48 45 52 45 20 2a 2a  CK UNION HERE **
5830: 2a 2f 0a 0a 20 20 61 73 73 65 72 74 28 20 70 2d  */..  assert( p-
5840: 3e 6d 61 67 69 63 3d 3d 56 44 42 45 5f 4d 41 47  >magic==VDBE_MAG
5850: 49 43 5f 52 55 4e 20 29 3b 20 20 2f 2a 20 73 71  IC_RUN );  /* sq
5860: 6c 69 74 65 33 5f 73 74 65 70 28 29 20 76 65 72  lite3_step() ver
5870: 69 66 69 65 73 20 74 68 69 73 20 2a 2f 0a 20 20  ifies this */.  
5880: 73 71 6c 69 74 65 33 56 64 62 65 45 6e 74 65 72  sqlite3VdbeEnter
5890: 28 70 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c  (p);.#ifndef SQL
58a0: 49 54 45 5f 4f 4d 49 54 5f 50 52 4f 47 52 45 53  ITE_OMIT_PROGRES
58b0: 53 5f 43 41 4c 4c 42 41 43 4b 0a 20 20 69 66 28  S_CALLBACK.  if(
58c0: 20 64 62 2d 3e 78 50 72 6f 67 72 65 73 73 20 29   db->xProgress )
58d0: 7b 0a 20 20 20 20 75 33 32 20 69 50 72 69 6f 72  {.    u32 iPrior
58e0: 20 3d 20 70 2d 3e 61 43 6f 75 6e 74 65 72 5b 53   = p->aCounter[S
58f0: 51 4c 49 54 45 5f 53 54 4d 54 53 54 41 54 55 53  QLITE_STMTSTATUS
5900: 5f 56 4d 5f 53 54 45 50 5d 3b 0a 20 20 20 20 61  _VM_STEP];.    a
5910: 73 73 65 72 74 28 20 30 20 3c 20 64 62 2d 3e 6e  ssert( 0 < db->n
5920: 50 72 6f 67 72 65 73 73 4f 70 73 20 29 3b 0a 20  ProgressOps );. 
5930: 20 20 20 6e 50 72 6f 67 72 65 73 73 4c 69 6d 69     nProgressLimi
5940: 74 20 3d 20 64 62 2d 3e 6e 50 72 6f 67 72 65 73  t = db->nProgres
5950: 73 4f 70 73 20 2d 20 28 69 50 72 69 6f 72 20 25  sOps - (iPrior %
5960: 20 64 62 2d 3e 6e 50 72 6f 67 72 65 73 73 4f 70   db->nProgressOp
5970: 73 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  s);.  }else{.   
5980: 20 6e 50 72 6f 67 72 65 73 73 4c 69 6d 69 74 20   nProgressLimit 
5990: 3d 20 30 78 66 66 66 66 66 66 66 66 3b 0a 20 20  = 0xffffffff;.  
59a0: 7d 0a 23 65 6e 64 69 66 0a 20 20 69 66 28 20 70  }.#endif.  if( p
59b0: 2d 3e 72 63 3d 3d 53 51 4c 49 54 45 5f 4e 4f 4d  ->rc==SQLITE_NOM
59c0: 45 4d 20 29 7b 0a 20 20 20 20 2f 2a 20 54 68 69  EM ){.    /* Thi
59d0: 73 20 68 61 70 70 65 6e 73 20 69 66 20 61 20 6d  s happens if a m
59e0: 61 6c 6c 6f 63 28 29 20 69 6e 73 69 64 65 20 61  alloc() inside a
59f0: 20 63 61 6c 6c 20 74 6f 20 73 71 6c 69 74 65 33   call to sqlite3
5a00: 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 28 29 20 6f  _column_text() o
5a10: 72 0a 20 20 20 20 2a 2a 20 73 71 6c 69 74 65 33  r.    ** sqlite3
5a20: 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 31 36 28 29  _column_text16()
5a30: 20 66 61 69 6c 65 64 2e 20 20 2a 2f 0a 20 20 20   failed.  */.   
5a40: 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20   goto no_mem;.  
5a50: 7d 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 72  }.  assert( p->r
5a60: 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 7c 7c 20  c==SQLITE_OK || 
5a70: 28 70 2d 3e 72 63 26 30 78 66 66 29 3d 3d 53 51  (p->rc&0xff)==SQ
5a80: 4c 49 54 45 5f 42 55 53 59 20 29 3b 0a 20 20 61  LITE_BUSY );.  a
5a90: 73 73 65 72 74 28 20 70 2d 3e 62 49 73 52 65 61  ssert( p->bIsRea
5aa0: 64 65 72 20 7c 7c 20 70 2d 3e 72 65 61 64 4f 6e  der || p->readOn
5ab0: 6c 79 21 3d 30 20 29 3b 0a 20 20 70 2d 3e 69 43  ly!=0 );.  p->iC
5ac0: 75 72 72 65 6e 74 54 69 6d 65 20 3d 20 30 3b 0a  urrentTime = 0;.
5ad0: 20 20 61 73 73 65 72 74 28 20 70 2d 3e 65 78 70    assert( p->exp
5ae0: 6c 61 69 6e 3d 3d 30 20 29 3b 0a 20 20 70 2d 3e  lain==0 );.  p->
5af0: 70 52 65 73 75 6c 74 53 65 74 20 3d 20 30 3b 0a  pResultSet = 0;.
5b00: 20 20 64 62 2d 3e 62 75 73 79 48 61 6e 64 6c 65    db->busyHandle
5b10: 72 2e 6e 42 75 73 79 20 3d 20 30 3b 0a 20 20 69  r.nBusy = 0;.  i
5b20: 66 28 20 64 62 2d 3e 75 31 2e 69 73 49 6e 74 65  f( db->u1.isInte
5b30: 72 72 75 70 74 65 64 20 29 20 67 6f 74 6f 20 61  rrupted ) goto a
5b40: 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 69 6e 74 65  bort_due_to_inte
5b50: 72 72 75 70 74 3b 0a 20 20 73 71 6c 69 74 65 33  rrupt;.  sqlite3
5b60: 56 64 62 65 49 4f 54 72 61 63 65 53 71 6c 28 70  VdbeIOTraceSql(p
5b70: 29 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  );.#ifdef SQLITE
5b80: 5f 44 45 42 55 47 0a 20 20 73 71 6c 69 74 65 33  _DEBUG.  sqlite3
5b90: 42 65 67 69 6e 42 65 6e 69 67 6e 4d 61 6c 6c 6f  BeginBenignMallo
5ba0: 63 28 29 3b 0a 20 20 69 66 28 20 70 2d 3e 70 63  c();.  if( p->pc
5bb0: 3d 3d 30 0a 20 20 20 26 26 20 28 70 2d 3e 64 62  ==0.   && (p->db
5bc0: 2d 3e 66 6c 61 67 73 20 26 20 28 53 51 4c 49 54  ->flags & (SQLIT
5bd0: 45 5f 56 64 62 65 4c 69 73 74 69 6e 67 7c 53 51  E_VdbeListing|SQ
5be0: 4c 49 54 45 5f 56 64 62 65 45 51 50 7c 53 51 4c  LITE_VdbeEQP|SQL
5bf0: 49 54 45 5f 56 64 62 65 54 72 61 63 65 29 29 21  ITE_VdbeTrace))!
5c00: 3d 30 0a 20 20 29 7b 0a 20 20 20 20 69 6e 74 20  =0.  ){.    int 
5c10: 69 3b 0a 20 20 20 20 69 6e 74 20 6f 6e 63 65 20  i;.    int once 
5c20: 3d 20 31 3b 0a 20 20 20 20 73 71 6c 69 74 65 33  = 1;.    sqlite3
5c30: 56 64 62 65 50 72 69 6e 74 53 71 6c 28 70 29 3b  VdbePrintSql(p);
5c40: 0a 20 20 20 20 69 66 28 20 70 2d 3e 64 62 2d 3e  .    if( p->db->
5c50: 66 6c 61 67 73 20 26 20 53 51 4c 49 54 45 5f 56  flags & SQLITE_V
5c60: 64 62 65 4c 69 73 74 69 6e 67 20 29 7b 0a 20 20  dbeListing ){.  
5c70: 20 20 20 20 70 72 69 6e 74 66 28 22 56 44 42 45      printf("VDBE
5c80: 20 50 72 6f 67 72 61 6d 20 4c 69 73 74 69 6e 67   Program Listing
5c90: 3a 5c 6e 22 29 3b 0a 20 20 20 20 20 20 66 6f 72  :\n");.      for
5ca0: 28 69 3d 30 3b 20 69 3c 70 2d 3e 6e 4f 70 3b 20  (i=0; i<p->nOp; 
5cb0: 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 73 71  i++){.        sq
5cc0: 6c 69 74 65 33 56 64 62 65 50 72 69 6e 74 4f 70  lite3VdbePrintOp
5cd0: 28 73 74 64 6f 75 74 2c 20 69 2c 20 26 61 4f 70  (stdout, i, &aOp
5ce0: 5b 69 5d 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20  [i]);.      }.  
5cf0: 20 20 7d 0a 20 20 20 20 69 66 28 20 70 2d 3e 64    }.    if( p->d
5d00: 62 2d 3e 66 6c 61 67 73 20 26 20 53 51 4c 49 54  b->flags & SQLIT
5d10: 45 5f 56 64 62 65 45 51 50 20 29 7b 0a 20 20 20  E_VdbeEQP ){.   
5d20: 20 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 70 2d     for(i=0; i<p-
5d30: 3e 6e 4f 70 3b 20 69 2b 2b 29 7b 0a 20 20 20 20  >nOp; i++){.    
5d40: 20 20 20 20 69 66 28 20 61 4f 70 5b 69 5d 2e 6f      if( aOp[i].o
5d50: 70 63 6f 64 65 3d 3d 4f 50 5f 45 78 70 6c 61 69  pcode==OP_Explai
5d60: 6e 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 69  n ){.          i
5d70: 66 28 20 6f 6e 63 65 20 29 20 70 72 69 6e 74 66  f( once ) printf
5d80: 28 22 56 44 42 45 20 51 75 65 72 79 20 50 6c 61  ("VDBE Query Pla
5d90: 6e 3a 5c 6e 22 29 3b 0a 20 20 20 20 20 20 20 20  n:\n");.        
5da0: 20 20 70 72 69 6e 74 66 28 22 25 73 5c 6e 22 2c    printf("%s\n",
5db0: 20 61 4f 70 5b 69 5d 2e 70 34 2e 7a 29 3b 0a 20   aOp[i].p4.z);. 
5dc0: 20 20 20 20 20 20 20 20 20 6f 6e 63 65 20 3d 20           once = 
5dd0: 30 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20  0;.        }.   
5de0: 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 69     }.    }.    i
5df0: 66 28 20 70 2d 3e 64 62 2d 3e 66 6c 61 67 73 20  f( p->db->flags 
5e00: 26 20 53 51 4c 49 54 45 5f 56 64 62 65 54 72 61  & SQLITE_VdbeTra
5e10: 63 65 20 29 20 20 70 72 69 6e 74 66 28 22 56 44  ce )  printf("VD
5e20: 42 45 20 54 72 61 63 65 3a 5c 6e 22 29 3b 0a 20  BE Trace:\n");. 
5e30: 20 7d 0a 20 20 73 71 6c 69 74 65 33 45 6e 64 42   }.  sqlite3EndB
5e40: 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28 29 3b 0a 23  enignMalloc();.#
5e50: 65 6e 64 69 66 0a 20 20 66 6f 72 28 70 4f 70 3d  endif.  for(pOp=
5e60: 26 61 4f 70 5b 70 2d 3e 70 63 5d 3b 20 31 3b 20  &aOp[p->pc]; 1; 
5e70: 70 4f 70 2b 2b 29 7b 0a 20 20 20 20 2f 2a 20 45  pOp++){.    /* E
5e80: 72 72 6f 72 73 20 61 72 65 20 64 65 74 65 63 74  rrors are detect
5e90: 65 64 20 62 79 20 69 6e 64 69 76 69 64 75 61 6c  ed by individual
5ea0: 20 6f 70 63 6f 64 65 73 2c 20 77 69 74 68 20 61   opcodes, with a
5eb0: 6e 20 69 6d 6d 65 64 69 61 74 65 0a 20 20 20 20  n immediate.    
5ec0: 2a 2a 20 6a 75 6d 70 73 20 74 6f 20 61 62 6f 72  ** jumps to abor
5ed0: 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 2e 20  t_due_to_error. 
5ee0: 2a 2f 0a 20 20 20 20 61 73 73 65 72 74 28 20 72  */.    assert( r
5ef0: 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 3b 0a  c==SQLITE_OK );.
5f00: 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70  .    assert( pOp
5f10: 3e 3d 61 4f 70 20 26 26 20 70 4f 70 3c 26 61 4f  >=aOp && pOp<&aO
5f20: 70 5b 70 2d 3e 6e 4f 70 5d 29 3b 0a 23 69 66 64  p[p->nOp]);.#ifd
5f30: 65 66 20 56 44 42 45 5f 50 52 4f 46 49 4c 45 0a  ef VDBE_PROFILE.
5f40: 20 20 20 20 73 74 61 72 74 20 3d 20 73 71 6c 69      start = sqli
5f50: 74 65 33 4e 50 72 6f 66 69 6c 65 43 6e 74 20 3f  te3NProfileCnt ?
5f60: 20 73 71 6c 69 74 65 33 4e 50 72 6f 66 69 6c 65   sqlite3NProfile
5f70: 43 6e 74 20 3a 20 73 71 6c 69 74 65 33 48 77 74  Cnt : sqlite3Hwt
5f80: 69 6d 65 28 29 3b 0a 23 65 6e 64 69 66 0a 20 20  ime();.#endif.  
5f90: 20 20 6e 56 6d 53 74 65 70 2b 2b 3b 0a 23 69 66    nVmStep++;.#if
5fa0: 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  def SQLITE_ENABL
5fb0: 45 5f 53 54 4d 54 5f 53 43 41 4e 53 54 41 54 55  E_STMT_SCANSTATU
5fc0: 53 0a 20 20 20 20 69 66 28 20 70 2d 3e 61 6e 45  S.    if( p->anE
5fd0: 78 65 63 20 29 20 70 2d 3e 61 6e 45 78 65 63 5b  xec ) p->anExec[
5fe0: 28 69 6e 74 29 28 70 4f 70 2d 61 4f 70 29 5d 2b  (int)(pOp-aOp)]+
5ff0: 2b 3b 0a 23 65 6e 64 69 66 0a 0a 20 20 20 20 2f  +;.#endif..    /
6000: 2a 20 4f 6e 6c 79 20 61 6c 6c 6f 77 20 74 72 61  * Only allow tra
6010: 63 69 6e 67 20 69 66 20 53 51 4c 49 54 45 5f 44  cing if SQLITE_D
6020: 45 42 55 47 20 69 73 20 64 65 66 69 6e 65 64 2e  EBUG is defined.
6030: 0a 20 20 20 20 2a 2f 0a 23 69 66 64 65 66 20 53  .    */.#ifdef S
6040: 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 20 20  QLITE_DEBUG.    
6050: 69 66 28 20 64 62 2d 3e 66 6c 61 67 73 20 26 20  if( db->flags & 
6060: 53 51 4c 49 54 45 5f 56 64 62 65 54 72 61 63 65  SQLITE_VdbeTrace
6070: 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65   ){.      sqlite
6080: 33 56 64 62 65 50 72 69 6e 74 4f 70 28 73 74 64  3VdbePrintOp(std
6090: 6f 75 74 2c 20 28 69 6e 74 29 28 70 4f 70 20 2d  out, (int)(pOp -
60a0: 20 61 4f 70 29 2c 20 70 4f 70 29 3b 0a 20 20 20   aOp), pOp);.   
60b0: 20 7d 0a 23 65 6e 64 69 66 0a 20 20 20 20 20 20   }.#endif.      
60c0: 0a 0a 20 20 20 20 2f 2a 20 43 68 65 63 6b 20 74  ..    /* Check t
60d0: 6f 20 73 65 65 20 69 66 20 77 65 20 6e 65 65 64  o see if we need
60e0: 20 74 6f 20 73 69 6d 75 6c 61 74 65 20 61 6e 20   to simulate an 
60f0: 69 6e 74 65 72 72 75 70 74 2e 20 20 54 68 69 73  interrupt.  This
6100: 20 6f 6e 6c 79 20 68 61 70 70 65 6e 73 0a 20 20   only happens.  
6110: 20 20 2a 2a 20 69 66 20 77 65 20 68 61 76 65 20    ** if we have 
6120: 61 20 73 70 65 63 69 61 6c 20 74 65 73 74 20 62  a special test b
6130: 75 69 6c 64 2e 0a 20 20 20 20 2a 2f 0a 23 69 66  uild..    */.#if
6140: 64 65 66 20 53 51 4c 49 54 45 5f 54 45 53 54 0a  def SQLITE_TEST.
6150: 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 5f      if( sqlite3_
6160: 69 6e 74 65 72 72 75 70 74 5f 63 6f 75 6e 74 3e  interrupt_count>
6170: 30 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74  0 ){.      sqlit
6180: 65 33 5f 69 6e 74 65 72 72 75 70 74 5f 63 6f 75  e3_interrupt_cou
6190: 6e 74 2d 2d 3b 0a 20 20 20 20 20 20 69 66 28 20  nt--;.      if( 
61a0: 73 71 6c 69 74 65 33 5f 69 6e 74 65 72 72 75 70  sqlite3_interrup
61b0: 74 5f 63 6f 75 6e 74 3d 3d 30 20 29 7b 0a 20 20  t_count==0 ){.  
61c0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 69 6e        sqlite3_in
61d0: 74 65 72 72 75 70 74 28 64 62 29 3b 0a 20 20 20  terrupt(db);.   
61e0: 20 20 20 7d 0a 20 20 20 20 7d 0a 23 65 6e 64 69     }.    }.#endi
61f0: 66 0a 0a 20 20 20 20 2f 2a 20 53 61 6e 69 74 79  f..    /* Sanity
6200: 20 63 68 65 63 6b 69 6e 67 20 6f 6e 20 6f 74 68   checking on oth
6210: 65 72 20 6f 70 65 72 61 6e 64 73 20 2a 2f 0a 23  er operands */.#
6220: 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42  ifdef SQLITE_DEB
6230: 55 47 0a 20 20 20 20 7b 0a 20 20 20 20 20 20 75  UG.    {.      u
6240: 38 20 6f 70 50 72 6f 70 65 72 74 79 20 3d 20 73  8 opProperty = s
6250: 71 6c 69 74 65 33 4f 70 63 6f 64 65 50 72 6f 70  qlite3OpcodeProp
6260: 65 72 74 79 5b 70 4f 70 2d 3e 6f 70 63 6f 64 65  erty[pOp->opcode
6270: 5d 3b 0a 20 20 20 20 20 20 69 66 28 20 28 6f 70  ];.      if( (op
6280: 50 72 6f 70 65 72 74 79 20 26 20 4f 50 46 4c 47  Property & OPFLG
6290: 5f 49 4e 31 29 21 3d 30 20 29 7b 0a 20 20 20 20  _IN1)!=0 ){.    
62a0: 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d      assert( pOp-
62b0: 3e 70 31 3e 30 20 29 3b 0a 20 20 20 20 20 20 20  >p1>0 );.       
62c0: 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
62d0: 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70  <=(p->nMem+1 - p
62e0: 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20  ->nCursor) );.  
62f0: 20 20 20 20 20 20 61 73 73 65 72 74 28 20 6d 65        assert( me
6300: 6d 49 73 56 61 6c 69 64 28 26 61 4d 65 6d 5b 70  mIsValid(&aMem[p
6310: 4f 70 2d 3e 70 31 5d 29 20 29 3b 0a 20 20 20 20  Op->p1]) );.    
6320: 20 20 20 20 61 73 73 65 72 74 28 20 73 71 6c 69      assert( sqli
6330: 74 65 33 56 64 62 65 43 68 65 63 6b 4d 65 6d 49  te3VdbeCheckMemI
6340: 6e 76 61 72 69 61 6e 74 73 28 26 61 4d 65 6d 5b  nvariants(&aMem[
6350: 70 4f 70 2d 3e 70 31 5d 29 20 29 3b 0a 20 20 20  pOp->p1]) );.   
6360: 20 20 20 20 20 52 45 47 49 53 54 45 52 5f 54 52       REGISTER_TR
6370: 41 43 45 28 70 4f 70 2d 3e 70 31 2c 20 26 61 4d  ACE(pOp->p1, &aM
6380: 65 6d 5b 70 4f 70 2d 3e 70 31 5d 29 3b 0a 20 20  em[pOp->p1]);.  
6390: 20 20 20 20 7d 0a 20 20 20 20 20 20 69 66 28 20      }.      if( 
63a0: 28 6f 70 50 72 6f 70 65 72 74 79 20 26 20 4f 50  (opProperty & OP
63b0: 46 4c 47 5f 49 4e 32 29 21 3d 30 20 29 7b 0a 20  FLG_IN2)!=0 ){. 
63c0: 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70         assert( p
63d0: 4f 70 2d 3e 70 32 3e 30 20 29 3b 0a 20 20 20 20  Op->p2>0 );.    
63e0: 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d      assert( pOp-
63f0: 3e 70 32 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20  >p2<=(p->nMem+1 
6400: 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b  - p->nCursor) );
6410: 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28  .        assert(
6420: 20 6d 65 6d 49 73 56 61 6c 69 64 28 26 61 4d 65   memIsValid(&aMe
6430: 6d 5b 70 4f 70 2d 3e 70 32 5d 29 20 29 3b 0a 20  m[pOp->p2]) );. 
6440: 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20 73         assert( s
6450: 71 6c 69 74 65 33 56 64 62 65 43 68 65 63 6b 4d  qlite3VdbeCheckM
6460: 65 6d 49 6e 76 61 72 69 61 6e 74 73 28 26 61 4d  emInvariants(&aM
6470: 65 6d 5b 70 4f 70 2d 3e 70 32 5d 29 20 29 3b 0a  em[pOp->p2]) );.
6480: 20 20 20 20 20 20 20 20 52 45 47 49 53 54 45 52          REGISTER
6490: 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 32 2c 20  _TRACE(pOp->p2, 
64a0: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 29 3b  &aMem[pOp->p2]);
64b0: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69  .      }.      i
64c0: 66 28 20 28 6f 70 50 72 6f 70 65 72 74 79 20 26  f( (opProperty &
64d0: 20 4f 50 46 4c 47 5f 49 4e 33 29 21 3d 30 20 29   OPFLG_IN3)!=0 )
64e0: 7b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74  {.        assert
64f0: 28 20 70 4f 70 2d 3e 70 33 3e 30 20 29 3b 0a 20  ( pOp->p3>0 );. 
6500: 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70         assert( p
6510: 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d  Op->p3<=(p->nMem
6520: 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29  +1 - p->nCursor)
6530: 20 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65   );.        asse
6540: 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 26  rt( memIsValid(&
6550: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 29 20 29  aMem[pOp->p3]) )
6560: 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74  ;.        assert
6570: 28 20 73 71 6c 69 74 65 33 56 64 62 65 43 68 65  ( sqlite3VdbeChe
6580: 63 6b 4d 65 6d 49 6e 76 61 72 69 61 6e 74 73 28  ckMemInvariants(
6590: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 29 20  &aMem[pOp->p3]) 
65a0: 29 3b 0a 20 20 20 20 20 20 20 20 52 45 47 49 53  );.        REGIS
65b0: 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70  TER_TRACE(pOp->p
65c0: 33 2c 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33  3, &aMem[pOp->p3
65d0: 5d 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  ]);.      }.    
65e0: 20 20 69 66 28 20 28 6f 70 50 72 6f 70 65 72 74    if( (opPropert
65f0: 79 20 26 20 4f 50 46 4c 47 5f 4f 55 54 32 29 21  y & OPFLG_OUT2)!
6600: 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 61 73  =0 ){.        as
6610: 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e 30 20  sert( pOp->p2>0 
6620: 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72  );.        asser
6630: 74 28 20 70 4f 70 2d 3e 70 32 3c 3d 28 70 2d 3e  t( pOp->p2<=(p->
6640: 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72  nMem+1 - p->nCur
6650: 73 6f 72 29 20 29 3b 0a 20 20 20 20 20 20 20 20  sor) );.        
6660: 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65  memAboutToChange
6670: 28 70 2c 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  (p, &aMem[pOp->p
6680: 32 5d 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  2]);.      }.   
6690: 20 20 20 69 66 28 20 28 6f 70 50 72 6f 70 65 72     if( (opProper
66a0: 74 79 20 26 20 4f 50 46 4c 47 5f 4f 55 54 33 29  ty & OPFLG_OUT3)
66b0: 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 61  !=0 ){.        a
66c0: 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30  ssert( pOp->p3>0
66d0: 20 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65   );.        asse
66e0: 72 74 28 20 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d  rt( pOp->p3<=(p-
66f0: 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75  >nMem+1 - p->nCu
6700: 72 73 6f 72 29 20 29 3b 0a 20 20 20 20 20 20 20  rsor) );.       
6710: 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67   memAboutToChang
6720: 65 28 70 2c 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  e(p, &aMem[pOp->
6730: 70 33 5d 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20  p3]);.      }.  
6740: 20 20 7d 0a 23 65 6e 64 69 66 0a 23 69 66 20 64    }.#endif.#if d
6750: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 44 45  efined(SQLITE_DE
6760: 42 55 47 29 20 7c 7c 20 64 65 66 69 6e 65 64 28  BUG) || defined(
6770: 56 44 42 45 5f 50 52 4f 46 49 4c 45 29 0a 20 20  VDBE_PROFILE).  
6780: 20 20 70 4f 72 69 67 4f 70 20 3d 20 70 4f 70 3b    pOrigOp = pOp;
6790: 0a 23 65 6e 64 69 66 0a 20 20 0a 20 20 20 20 73  .#endif.  .    s
67a0: 77 69 74 63 68 28 20 70 4f 70 2d 3e 6f 70 63 6f  witch( pOp->opco
67b0: 64 65 20 29 7b 0a 0a 2f 2a 2a 2a 2a 2a 2a 2a 2a  de ){../********
67c0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
67d0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
67e0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
67f0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
6800: 2a 2a 2a 2a 2a 0a 2a 2a 20 57 68 61 74 20 66 6f  *****.** What fo
6810: 6c 6c 6f 77 73 20 69 73 20 61 20 6d 61 73 73 69  llows is a massi
6820: 76 65 20 73 77 69 74 63 68 20 73 74 61 74 65 6d  ve switch statem
6830: 65 6e 74 20 77 68 65 72 65 20 65 61 63 68 20 63  ent where each c
6840: 61 73 65 20 69 6d 70 6c 65 6d 65 6e 74 73 20 61  ase implements a
6850: 0a 2a 2a 20 73 65 70 61 72 61 74 65 20 69 6e 73  .** separate ins
6860: 74 72 75 63 74 69 6f 6e 20 69 6e 20 74 68 65 20  truction in the 
6870: 76 69 72 74 75 61 6c 20 6d 61 63 68 69 6e 65 2e  virtual machine.
6880: 20 20 49 66 20 77 65 20 66 6f 6c 6c 6f 77 20 74    If we follow t
6890: 68 65 20 75 73 75 61 6c 0a 2a 2a 20 69 6e 64 65  he usual.** inde
68a0: 6e 74 61 74 69 6f 6e 20 63 6f 6e 76 65 6e 74 69  ntation conventi
68b0: 6f 6e 73 2c 20 65 61 63 68 20 63 61 73 65 20 73  ons, each case s
68c0: 68 6f 75 6c 64 20 62 65 20 69 6e 64 65 6e 74 65  hould be indente
68d0: 64 20 62 79 20 36 20 73 70 61 63 65 73 2e 20 20  d by 6 spaces.  
68e0: 42 75 74 0a 2a 2a 20 74 68 61 74 20 69 73 20 61  But.** that is a
68f0: 20 6c 6f 74 20 6f 66 20 77 61 73 74 65 64 20 73   lot of wasted s
6900: 70 61 63 65 20 6f 6e 20 74 68 65 20 6c 65 66 74  pace on the left
6910: 20 6d 61 72 67 69 6e 2e 20 20 53 6f 20 74 68 65   margin.  So the
6920: 20 63 6f 64 65 20 77 69 74 68 69 6e 0a 2a 2a 20   code within.** 
6930: 74 68 65 20 73 77 69 74 63 68 20 73 74 61 74 65  the switch state
6940: 6d 65 6e 74 20 77 69 6c 6c 20 62 72 65 61 6b 20  ment will break 
6950: 77 69 74 68 20 63 6f 6e 76 65 6e 74 69 6f 6e 20  with convention 
6960: 61 6e 64 20 62 65 20 66 6c 75 73 68 2d 6c 65 66  and be flush-lef
6970: 74 2e 20 41 6e 6f 74 68 65 72 0a 2a 2a 20 62 69  t. Another.** bi
6980: 67 20 63 6f 6d 6d 65 6e 74 20 28 73 69 6d 69 6c  g comment (simil
6990: 61 72 20 74 6f 20 74 68 69 73 20 6f 6e 65 29 20  ar to this one) 
69a0: 77 69 6c 6c 20 6d 61 72 6b 20 74 68 65 20 70 6f  will mark the po
69b0: 69 6e 74 20 69 6e 20 74 68 65 20 63 6f 64 65 20  int in the code 
69c0: 77 68 65 72 65 0a 2a 2a 20 77 65 20 74 72 61 6e  where.** we tran
69d0: 73 69 74 69 6f 6e 20 62 61 63 6b 20 74 6f 20 6e  sition back to n
69e0: 6f 72 6d 61 6c 20 69 6e 64 65 6e 74 61 74 69 6f  ormal indentatio
69f0: 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 66 6f 72  n..**.** The for
6a00: 6d 61 74 74 69 6e 67 20 6f 66 20 65 61 63 68 20  matting of each 
6a10: 63 61 73 65 20 69 73 20 69 6d 70 6f 72 74 61 6e  case is importan
6a20: 74 2e 20 20 54 68 65 20 6d 61 6b 65 66 69 6c 65  t.  The makefile
6a30: 20 66 6f 72 20 53 51 4c 69 74 65 0a 2a 2a 20 67   for SQLite.** g
6a40: 65 6e 65 72 61 74 65 73 20 74 77 6f 20 43 20 66  enerates two C f
6a50: 69 6c 65 73 20 22 6f 70 63 6f 64 65 73 2e 68 22  iles "opcodes.h"
6a60: 20 61 6e 64 20 22 6f 70 63 6f 64 65 73 2e 63 22   and "opcodes.c"
6a70: 20 62 79 20 73 63 61 6e 6e 69 6e 67 20 74 68 69   by scanning thi
6a80: 73 0a 2a 2a 20 66 69 6c 65 20 6c 6f 6f 6b 69 6e  s.** file lookin
6a90: 67 20 66 6f 72 20 6c 69 6e 65 73 20 74 68 61 74  g for lines that
6aa0: 20 62 65 67 69 6e 20 77 69 74 68 20 22 63 61 73   begin with "cas
6ab0: 65 20 4f 50 5f 22 2e 20 20 54 68 65 20 6f 70 63  e OP_".  The opc
6ac0: 6f 64 65 73 2e 68 20 66 69 6c 65 73 0a 2a 2a 20  odes.h files.** 
6ad0: 77 69 6c 6c 20 62 65 20 66 69 6c 6c 65 64 20 77  will be filled w
6ae0: 69 74 68 20 23 64 65 66 69 6e 65 73 20 74 68 61  ith #defines tha
6af0: 74 20 67 69 76 65 20 75 6e 69 71 75 65 20 69 6e  t give unique in
6b00: 74 65 67 65 72 20 76 61 6c 75 65 73 20 74 6f 20  teger values to 
6b10: 65 61 63 68 0a 2a 2a 20 6f 70 63 6f 64 65 20 61  each.** opcode a
6b20: 6e 64 20 74 68 65 20 6f 70 63 6f 64 65 73 2e 63  nd the opcodes.c
6b30: 20 66 69 6c 65 20 69 73 20 66 69 6c 6c 65 64 20   file is filled 
6b40: 77 69 74 68 20 61 6e 20 61 72 72 61 79 20 6f 66  with an array of
6b50: 20 73 74 72 69 6e 67 73 20 77 68 65 72 65 0a 2a   strings where.*
6b60: 2a 20 65 61 63 68 20 73 74 72 69 6e 67 20 69 73  * each string is
6b70: 20 74 68 65 20 73 79 6d 62 6f 6c 69 63 20 6e 61   the symbolic na
6b80: 6d 65 20 66 6f 72 20 74 68 65 20 63 6f 72 72 65  me for the corre
6b90: 73 70 6f 6e 64 69 6e 67 20 6f 70 63 6f 64 65 2e  sponding opcode.
6ba0: 20 20 49 66 20 74 68 65 0a 2a 2a 20 63 61 73 65    If the.** case
6bb0: 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20 66 6f   statement is fo
6bc0: 6c 6c 6f 77 65 64 20 62 79 20 61 20 63 6f 6d 6d  llowed by a comm
6bd0: 65 6e 74 20 6f 66 20 74 68 65 20 66 6f 72 6d 20  ent of the form 
6be0: 22 2f 23 20 73 61 6d 65 20 61 73 20 2e 2e 2e 20  "/# same as ... 
6bf0: 23 2f 22 0a 2a 2a 20 74 68 61 74 20 63 6f 6d 6d  #/".** that comm
6c00: 65 6e 74 20 69 73 20 75 73 65 64 20 74 6f 20 64  ent is used to d
6c10: 65 74 65 72 6d 69 6e 65 20 74 68 65 20 70 61 72  etermine the par
6c20: 74 69 63 75 6c 61 72 20 76 61 6c 75 65 20 6f 66  ticular value of
6c30: 20 74 68 65 20 6f 70 63 6f 64 65 2e 0a 2a 2a 0a   the opcode..**.
6c40: 2a 2a 20 4f 74 68 65 72 20 6b 65 79 77 6f 72 64  ** Other keyword
6c50: 73 20 69 6e 20 74 68 65 20 63 6f 6d 6d 65 6e 74  s in the comment
6c60: 20 74 68 61 74 20 66 6f 6c 6c 6f 77 73 20 65 61   that follows ea
6c70: 63 68 20 63 61 73 65 20 61 72 65 20 75 73 65 64  ch case are used
6c80: 20 74 6f 0a 2a 2a 20 63 6f 6e 73 74 72 75 63 74   to.** construct
6c90: 20 74 68 65 20 4f 50 46 4c 47 5f 49 4e 49 54 49   the OPFLG_INITI
6ca0: 41 4c 49 5a 45 52 20 76 61 6c 75 65 20 74 68 61  ALIZER value tha
6cb0: 74 20 69 6e 69 74 69 61 6c 69 7a 65 73 20 6f 70  t initializes op
6cc0: 63 6f 64 65 50 72 6f 70 65 72 74 79 5b 5d 2e 0a  codeProperty[]..
6cd0: 2a 2a 20 4b 65 79 77 6f 72 64 73 20 69 6e 63 6c  ** Keywords incl
6ce0: 75 64 65 3a 20 69 6e 31 2c 20 69 6e 32 2c 20 69  ude: in1, in2, i
6cf0: 6e 33 2c 20 6f 75 74 32 2c 20 6f 75 74 33 2e 20  n3, out2, out3. 
6d00: 20 53 65 65 0a 2a 2a 20 74 68 65 20 6d 6b 6f 70   See.** the mkop
6d10: 63 6f 64 65 68 2e 61 77 6b 20 73 63 72 69 70 74  codeh.awk script
6d20: 20 66 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c 20   for additional 
6d30: 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2a 0a  information..**.
6d40: 2a 2a 20 44 6f 63 75 6d 65 6e 74 61 74 69 6f 6e  ** Documentation
6d50: 20 61 62 6f 75 74 20 56 44 42 45 20 6f 70 63 6f   about VDBE opco
6d60: 64 65 73 20 69 73 20 67 65 6e 65 72 61 74 65 64  des is generated
6d70: 20 62 79 20 73 63 61 6e 6e 69 6e 67 20 74 68 69   by scanning thi
6d80: 73 20 66 69 6c 65 0a 2a 2a 20 66 6f 72 20 6c 69  s file.** for li
6d90: 6e 65 73 20 6f 66 20 74 68 61 74 20 63 6f 6e 74  nes of that cont
6da0: 61 69 6e 20 22 4f 70 63 6f 64 65 3a 22 2e 20 20  ain "Opcode:".  
6db0: 54 68 61 74 20 6c 69 6e 65 20 61 6e 64 20 61 6c  That line and al
6dc0: 6c 20 73 75 62 73 65 71 75 65 6e 74 0a 2a 2a 20  l subsequent.** 
6dd0: 63 6f 6d 6d 65 6e 74 20 6c 69 6e 65 73 20 61 72  comment lines ar
6de0: 65 20 75 73 65 64 20 69 6e 20 74 68 65 20 67 65  e used in the ge
6df0: 6e 65 72 61 74 69 6f 6e 20 6f 66 20 74 68 65 20  neration of the 
6e00: 6f 70 63 6f 64 65 2e 68 74 6d 6c 20 64 6f 63 75  opcode.html docu
6e10: 6d 65 6e 74 61 74 69 6f 6e 0a 2a 2a 20 66 69 6c  mentation.** fil
6e20: 65 2e 0a 2a 2a 0a 2a 2a 20 53 55 4d 4d 41 52 59  e..**.** SUMMARY
6e30: 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 46 6f 72 6d  :.**.**     Form
6e40: 61 74 74 69 6e 67 20 69 73 20 69 6d 70 6f 72 74  atting is import
6e50: 61 6e 74 20 74 6f 20 73 63 72 69 70 74 73 20 74  ant to scripts t
6e60: 68 61 74 20 73 63 61 6e 20 74 68 69 73 20 66 69  hat scan this fi
6e70: 6c 65 2e 0a 2a 2a 20 20 20 20 20 44 6f 20 6e 6f  le..**     Do no
6e80: 74 20 64 65 76 69 61 74 65 20 66 72 6f 6d 20 74  t deviate from t
6e90: 68 65 20 66 6f 72 6d 61 74 74 69 6e 67 20 73 74  he formatting st
6ea0: 79 6c 65 20 63 75 72 72 65 6e 74 6c 79 20 69 6e  yle currently in
6eb0: 20 75 73 65 2e 0a 2a 2a 0a 2a 2a 2a 2a 2a 2a 2a   use..**.*******
6ec0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
6ed0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
6ee0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
6ef0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
6f00: 2a 2a 2a 2a 2a 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f  ******/../* Opco
6f10: 64 65 3a 20 20 47 6f 74 6f 20 2a 20 50 32 20 2a  de:  Goto * P2 *
6f20: 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 41 6e 20 75 6e   * *.**.** An un
6f30: 63 6f 6e 64 69 74 69 6f 6e 61 6c 20 6a 75 6d 70  conditional jump
6f40: 20 74 6f 20 61 64 64 72 65 73 73 20 50 32 2e 0a   to address P2..
6f50: 2a 2a 20 54 68 65 20 6e 65 78 74 20 69 6e 73 74  ** The next inst
6f60: 72 75 63 74 69 6f 6e 20 65 78 65 63 75 74 65 64  ruction executed
6f70: 20 77 69 6c 6c 20 62 65 20 0a 2a 2a 20 74 68 65   will be .** the
6f80: 20 6f 6e 65 20 61 74 20 69 6e 64 65 78 20 50 32   one at index P2
6f90: 20 66 72 6f 6d 20 74 68 65 20 62 65 67 69 6e 6e   from the beginn
6fa0: 69 6e 67 20 6f 66 0a 2a 2a 20 74 68 65 20 70 72  ing of.** the pr
6fb0: 6f 67 72 61 6d 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  ogram..**.** The
6fc0: 20 50 31 20 70 61 72 61 6d 65 74 65 72 20 69 73   P1 parameter is
6fd0: 20 6e 6f 74 20 61 63 74 75 61 6c 6c 79 20 75 73   not actually us
6fe0: 65 64 20 62 79 20 74 68 69 73 20 6f 70 63 6f 64  ed by this opcod
6ff0: 65 2e 20 20 48 6f 77 65 76 65 72 2c 20 69 74 0a  e.  However, it.
7000: 2a 2a 20 69 73 20 73 6f 6d 65 74 69 6d 65 73 20  ** is sometimes 
7010: 73 65 74 20 74 6f 20 31 20 69 6e 73 74 65 61 64  set to 1 instead
7020: 20 6f 66 20 30 20 61 73 20 61 20 68 69 6e 74 20   of 0 as a hint 
7030: 74 6f 20 74 68 65 20 63 6f 6d 6d 61 6e 64 2d 6c  to the command-l
7040: 69 6e 65 20 73 68 65 6c 6c 0a 2a 2a 20 74 68 61  ine shell.** tha
7050: 74 20 74 68 69 73 20 47 6f 74 6f 20 69 73 20 74  t this Goto is t
7060: 68 65 20 62 6f 74 74 6f 6d 20 6f 66 20 61 20 6c  he bottom of a l
7070: 6f 6f 70 20 61 6e 64 20 74 68 61 74 20 74 68 65  oop and that the
7080: 20 6c 69 6e 65 73 20 66 72 6f 6d 20 50 32 20 64   lines from P2 d
7090: 6f 77 6e 0a 2a 2a 20 74 6f 20 74 68 65 20 63 75  own.** to the cu
70a0: 72 72 65 6e 74 20 6c 69 6e 65 20 73 68 6f 75 6c  rrent line shoul
70b0: 64 20 62 65 20 69 6e 64 65 6e 74 65 64 20 66 6f  d be indented fo
70c0: 72 20 45 58 50 4c 41 49 4e 20 6f 75 74 70 75 74  r EXPLAIN output
70d0: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 47 6f 74  ..*/.case OP_Got
70e0: 6f 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20  o: {            
70f0: 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 6a 75 6d 70   /* jump */.jump
7100: 5f 74 6f 5f 70 32 5f 61 6e 64 5f 63 68 65 63 6b  _to_p2_and_check
7110: 5f 66 6f 72 5f 69 6e 74 65 72 72 75 70 74 3a 0a  _for_interrupt:.
7120: 20 20 70 4f 70 20 3d 20 26 61 4f 70 5b 70 4f 70    pOp = &aOp[pOp
7130: 2d 3e 70 32 20 2d 20 31 5d 3b 0a 0a 20 20 2f 2a  ->p2 - 1];..  /*
7140: 20 4f 70 63 6f 64 65 73 20 74 68 61 74 20 61 72   Opcodes that ar
7150: 65 20 75 73 65 64 20 61 73 20 74 68 65 20 62 6f  e used as the bo
7160: 74 74 6f 6d 20 6f 66 20 61 20 6c 6f 6f 70 20 28  ttom of a loop (
7170: 4f 50 5f 4e 65 78 74 2c 20 4f 50 5f 50 72 65 76  OP_Next, OP_Prev
7180: 2c 0a 20 20 2a 2a 20 4f 50 5f 56 4e 65 78 74 2c  ,.  ** OP_VNext,
7190: 20 6f 72 20 4f 50 5f 53 6f 72 74 65 72 4e 65 78   or OP_SorterNex
71a0: 74 29 20 61 6c 6c 20 6a 75 6d 70 20 68 65 72 65  t) all jump here
71b0: 20 75 70 6f 6e 0a 20 20 2a 2a 20 63 6f 6d 70 6c   upon.  ** compl
71c0: 65 74 69 6f 6e 2e 20 20 43 68 65 63 6b 20 74 6f  etion.  Check to
71d0: 20 73 65 65 20 69 66 20 73 71 6c 69 74 65 33 5f   see if sqlite3_
71e0: 69 6e 74 65 72 72 75 70 74 28 29 20 68 61 73 20  interrupt() has 
71f0: 62 65 65 6e 20 63 61 6c 6c 65 64 0a 20 20 2a 2a  been called.  **
7200: 20 6f 72 20 69 66 20 74 68 65 20 70 72 6f 67 72   or if the progr
7210: 65 73 73 20 63 61 6c 6c 62 61 63 6b 20 6e 65 65  ess callback nee
7220: 64 73 20 74 6f 20 62 65 20 69 6e 76 6f 6b 65 64  ds to be invoked
7230: 2e 20 0a 20 20 2a 2a 0a 20 20 2a 2a 20 54 68 69  . .  **.  ** Thi
7240: 73 20 63 6f 64 65 20 75 73 65 73 20 75 6e 73 74  s code uses unst
7250: 72 75 63 74 75 72 65 64 20 22 67 6f 74 6f 22 20  ructured "goto" 
7260: 73 74 61 74 65 6d 65 6e 74 73 20 61 6e 64 20 64  statements and d
7270: 6f 65 73 20 6e 6f 74 20 6c 6f 6f 6b 20 63 6c 65  oes not look cle
7280: 61 6e 2e 0a 20 20 2a 2a 20 42 75 74 20 74 68 61  an..  ** But tha
7290: 74 20 69 73 20 6e 6f 74 20 64 75 65 20 74 6f 20  t is not due to 
72a0: 73 6c 6f 70 70 79 20 63 6f 64 69 6e 67 20 68 61  sloppy coding ha
72b0: 62 69 74 73 2e 20 54 68 65 20 63 6f 64 65 20 69  bits. The code i
72c0: 73 20 77 72 69 74 74 65 6e 20 74 68 69 73 0a 20  s written this. 
72d0: 20 2a 2a 20 77 61 79 20 66 6f 72 20 70 65 72 66   ** way for perf
72e0: 6f 72 6d 61 6e 63 65 2c 20 74 6f 20 61 76 6f 69  ormance, to avoi
72f0: 64 20 68 61 76 69 6e 67 20 74 6f 20 72 75 6e 20  d having to run 
7300: 74 68 65 20 69 6e 74 65 72 72 75 70 74 20 61 6e  the interrupt an
7310: 64 20 70 72 6f 67 72 65 73 73 0a 20 20 2a 2a 20  d progress.  ** 
7320: 63 68 65 63 6b 73 20 6f 6e 20 65 76 65 72 79 20  checks on every 
7330: 6f 70 63 6f 64 65 2e 20 20 54 68 69 73 20 68 65  opcode.  This he
7340: 6c 70 73 20 73 71 6c 69 74 65 33 5f 73 74 65 70  lps sqlite3_step
7350: 28 29 20 74 6f 20 72 75 6e 20 61 62 6f 75 74 20  () to run about 
7360: 31 2e 35 25 0a 20 20 2a 2a 20 66 61 73 74 65 72  1.5%.  ** faster
7370: 20 61 63 63 6f 72 64 69 6e 67 20 74 6f 20 22 76   according to "v
7380: 61 6c 67 72 69 6e 64 20 2d 2d 74 6f 6f 6c 3d 63  algrind --tool=c
7390: 61 63 68 65 67 72 69 6e 64 22 20 2a 2f 0a 63 68  achegrind" */.ch
73a0: 65 63 6b 5f 66 6f 72 5f 69 6e 74 65 72 72 75 70  eck_for_interrup
73b0: 74 3a 0a 20 20 69 66 28 20 64 62 2d 3e 75 31 2e  t:.  if( db->u1.
73c0: 69 73 49 6e 74 65 72 72 75 70 74 65 64 20 29 20  isInterrupted ) 
73d0: 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
73e0: 6f 5f 69 6e 74 65 72 72 75 70 74 3b 0a 23 69 66  o_interrupt;.#if
73f0: 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
7400: 5f 50 52 4f 47 52 45 53 53 5f 43 41 4c 4c 42 41  _PROGRESS_CALLBA
7410: 43 4b 0a 20 20 2f 2a 20 43 61 6c 6c 20 74 68 65  CK.  /* Call the
7420: 20 70 72 6f 67 72 65 73 73 20 63 61 6c 6c 62 61   progress callba
7430: 63 6b 20 69 66 20 69 74 20 69 73 20 63 6f 6e 66  ck if it is conf
7440: 69 67 75 72 65 64 20 61 6e 64 20 74 68 65 20 72  igured and the r
7450: 65 71 75 69 72 65 64 20 6e 75 6d 62 65 72 0a 20  equired number. 
7460: 20 2a 2a 20 6f 66 20 56 44 42 45 20 6f 70 73 20   ** of VDBE ops 
7470: 68 61 76 65 20 62 65 65 6e 20 65 78 65 63 75 74  have been execut
7480: 65 64 20 28 65 69 74 68 65 72 20 73 69 6e 63 65  ed (either since
7490: 20 74 68 69 73 20 69 6e 76 6f 63 61 74 69 6f 6e   this invocation
74a0: 20 6f 66 0a 20 20 2a 2a 20 73 71 6c 69 74 65 33   of.  ** sqlite3
74b0: 56 64 62 65 45 78 65 63 28 29 20 6f 72 20 73 69  VdbeExec() or si
74c0: 6e 63 65 20 6c 61 73 74 20 74 69 6d 65 20 74 68  nce last time th
74d0: 65 20 70 72 6f 67 72 65 73 73 20 63 61 6c 6c 62  e progress callb
74e0: 61 63 6b 20 77 61 73 20 63 61 6c 6c 65 64 29 2e  ack was called).
74f0: 0a 20 20 2a 2a 20 49 66 20 74 68 65 20 70 72 6f  .  ** If the pro
7500: 67 72 65 73 73 20 63 61 6c 6c 62 61 63 6b 20 72  gress callback r
7510: 65 74 75 72 6e 73 20 6e 6f 6e 2d 7a 65 72 6f 2c  eturns non-zero,
7520: 20 65 78 69 74 20 74 68 65 20 76 69 72 74 75 61   exit the virtua
7530: 6c 20 6d 61 63 68 69 6e 65 20 77 69 74 68 0a 20  l machine with. 
7540: 20 2a 2a 20 61 20 72 65 74 75 72 6e 20 63 6f 64   ** a return cod
7550: 65 20 53 51 4c 49 54 45 5f 41 42 4f 52 54 2e 0a  e SQLITE_ABORT..
7560: 20 20 2a 2f 0a 20 20 77 68 69 6c 65 28 20 6e 56    */.  while( nV
7570: 6d 53 74 65 70 3e 3d 6e 50 72 6f 67 72 65 73 73  mStep>=nProgress
7580: 4c 69 6d 69 74 20 26 26 20 64 62 2d 3e 78 50 72  Limit && db->xPr
7590: 6f 67 72 65 73 73 21 3d 30 20 29 7b 0a 20 20 20  ogress!=0 ){.   
75a0: 20 61 73 73 65 72 74 28 20 64 62 2d 3e 6e 50 72   assert( db->nPr
75b0: 6f 67 72 65 73 73 4f 70 73 21 3d 30 20 29 3b 0a  ogressOps!=0 );.
75c0: 20 20 20 20 6e 50 72 6f 67 72 65 73 73 4c 69 6d      nProgressLim
75d0: 69 74 20 2b 3d 20 64 62 2d 3e 6e 50 72 6f 67 72  it += db->nProgr
75e0: 65 73 73 4f 70 73 3b 0a 20 20 20 20 69 66 28 20  essOps;.    if( 
75f0: 64 62 2d 3e 78 50 72 6f 67 72 65 73 73 28 64 62  db->xProgress(db
7600: 2d 3e 70 50 72 6f 67 72 65 73 73 41 72 67 29 20  ->pProgressArg) 
7610: 29 7b 0a 20 20 20 20 20 20 6e 50 72 6f 67 72 65  ){.      nProgre
7620: 73 73 4c 69 6d 69 74 20 3d 20 30 78 66 66 66 66  ssLimit = 0xffff
7630: 66 66 66 66 3b 0a 20 20 20 20 20 20 72 63 20 3d  ffff;.      rc =
7640: 20 53 51 4c 49 54 45 5f 49 4e 54 45 52 52 55 50   SQLITE_INTERRUP
7650: 54 3b 0a 20 20 20 20 20 20 67 6f 74 6f 20 61 62  T;.      goto ab
7660: 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
7670: 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 23 65 6e 64  ;.    }.  }.#end
7680: 69 66 0a 20 20 0a 20 20 62 72 65 61 6b 3b 0a 7d  if.  .  break;.}
7690: 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 20 47 6f  ../* Opcode:  Go
76a0: 73 75 62 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  sub P1 P2 * * *.
76b0: 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 74 68 65 20  **.** Write the 
76c0: 63 75 72 72 65 6e 74 20 61 64 64 72 65 73 73 20  current address 
76d0: 6f 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 31  onto register P1
76e0: 0a 2a 2a 20 61 6e 64 20 74 68 65 6e 20 6a 75 6d  .** and then jum
76f0: 70 20 74 6f 20 61 64 64 72 65 73 73 20 50 32 2e  p to address P2.
7700: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 47 6f 73 75  .*/.case OP_Gosu
7710: 62 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20  b: {            
7720: 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 61 73 73  /* jump */.  ass
7730: 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 30 20 26  ert( pOp->p1>0 &
7740: 26 20 70 4f 70 2d 3e 70 31 3c 3d 28 70 2d 3e 6e  & pOp->p1<=(p->n
7750: 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73  Mem+1 - p->nCurs
7760: 6f 72 29 20 29 3b 0a 20 20 70 49 6e 31 20 3d 20  or) );.  pIn1 = 
7770: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  &aMem[pOp->p1];.
7780: 20 20 61 73 73 65 72 74 28 20 56 64 62 65 4d 65    assert( VdbeMe
7790: 6d 44 79 6e 61 6d 69 63 28 70 49 6e 31 29 3d 3d  mDynamic(pIn1)==
77a0: 30 20 29 3b 0a 20 20 6d 65 6d 41 62 6f 75 74 54  0 );.  memAboutT
77b0: 6f 43 68 61 6e 67 65 28 70 2c 20 70 49 6e 31 29  oChange(p, pIn1)
77c0: 3b 0a 20 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20  ;.  pIn1->flags 
77d0: 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20 70 49 6e  = MEM_Int;.  pIn
77e0: 31 2d 3e 75 2e 69 20 3d 20 28 69 6e 74 29 28 70  1->u.i = (int)(p
77f0: 4f 70 2d 61 4f 70 29 3b 0a 20 20 52 45 47 49 53  Op-aOp);.  REGIS
7800: 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70  TER_TRACE(pOp->p
7810: 31 2c 20 70 49 6e 31 29 3b 0a 0a 20 20 2f 2a 20  1, pIn1);..  /* 
7820: 4d 6f 73 74 20 6a 75 6d 70 20 6f 70 65 72 61 74  Most jump operat
7830: 69 6f 6e 73 20 64 6f 20 61 20 67 6f 74 6f 20 74  ions do a goto t
7840: 6f 20 74 68 69 73 20 73 70 6f 74 20 69 6e 20 6f  o this spot in o
7850: 72 64 65 72 20 74 6f 20 75 70 64 61 74 65 0a 20  rder to update. 
7860: 20 2a 2a 20 74 68 65 20 70 4f 70 20 70 6f 69 6e   ** the pOp poin
7870: 74 65 72 2e 20 2a 2f 0a 6a 75 6d 70 5f 74 6f 5f  ter. */.jump_to_
7880: 70 32 3a 0a 20 20 70 4f 70 20 3d 20 26 61 4f 70  p2:.  pOp = &aOp
7890: 5b 70 4f 70 2d 3e 70 32 20 2d 20 31 5d 3b 0a 20  [pOp->p2 - 1];. 
78a0: 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
78b0: 63 6f 64 65 3a 20 20 52 65 74 75 72 6e 20 50 31  code:  Return P1
78c0: 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4a   * * * *.**.** J
78d0: 75 6d 70 20 74 6f 20 74 68 65 20 6e 65 78 74 20  ump to the next 
78e0: 69 6e 73 74 72 75 63 74 69 6f 6e 20 61 66 74 65  instruction afte
78f0: 72 20 74 68 65 20 61 64 64 72 65 73 73 20 69 6e  r the address in
7900: 20 72 65 67 69 73 74 65 72 20 50 31 2e 20 20 41   register P1.  A
7910: 66 74 65 72 0a 2a 2a 20 74 68 65 20 6a 75 6d 70  fter.** the jump
7920: 2c 20 72 65 67 69 73 74 65 72 20 50 31 20 62 65  , register P1 be
7930: 63 6f 6d 65 73 20 75 6e 64 65 66 69 6e 65 64 2e  comes undefined.
7940: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65 74 75  .*/.case OP_Retu
7950: 72 6e 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  rn: {           
7960: 2f 2a 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31  /* in1 */.  pIn1
7970: 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31   = &aMem[pOp->p1
7980: 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 49 6e  ];.  assert( pIn
7990: 31 2d 3e 66 6c 61 67 73 3d 3d 4d 45 4d 5f 49 6e  1->flags==MEM_In
79a0: 74 20 29 3b 0a 20 20 70 4f 70 20 3d 20 26 61 4f  t );.  pOp = &aO
79b0: 70 5b 70 49 6e 31 2d 3e 75 2e 69 5d 3b 0a 20 20  p[pIn1->u.i];.  
79c0: 70 49 6e 31 2d 3e 66 6c 61 67 73 20 3d 20 4d 45  pIn1->flags = ME
79d0: 4d 5f 55 6e 64 65 66 69 6e 65 64 3b 0a 20 20 62  M_Undefined;.  b
79e0: 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
79f0: 64 65 3a 20 49 6e 69 74 43 6f 72 6f 75 74 69 6e  de: InitCoroutin
7a00: 65 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a  e P1 P2 P3 * *.*
7a10: 2a 0a 2a 2a 20 53 65 74 20 75 70 20 72 65 67 69  *.** Set up regi
7a20: 73 74 65 72 20 50 31 20 73 6f 20 74 68 61 74 20  ster P1 so that 
7a30: 69 74 20 77 69 6c 6c 20 59 69 65 6c 64 20 74 6f  it will Yield to
7a40: 20 74 68 65 20 63 6f 72 6f 75 74 69 6e 65 0a 2a   the coroutine.*
7a50: 2a 20 6c 6f 63 61 74 65 64 20 61 74 20 61 64 64  * located at add
7a60: 72 65 73 73 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 49  ress P3..**.** I
7a70: 66 20 50 32 21 3d 30 20 74 68 65 6e 20 74 68 65  f P2!=0 then the
7a80: 20 63 6f 72 6f 75 74 69 6e 65 20 69 6d 70 6c 65   coroutine imple
7a90: 6d 65 6e 74 61 74 69 6f 6e 20 69 6d 6d 65 64 69  mentation immedi
7aa0: 61 74 65 6c 79 20 66 6f 6c 6c 6f 77 73 0a 2a 2a  ately follows.**
7ab0: 20 74 68 69 73 20 6f 70 63 6f 64 65 2e 20 20 53   this opcode.  S
7ac0: 6f 20 6a 75 6d 70 20 6f 76 65 72 20 74 68 65 20  o jump over the 
7ad0: 63 6f 72 6f 75 74 69 6e 65 20 69 6d 70 6c 65 6d  coroutine implem
7ae0: 65 6e 74 61 74 69 6f 6e 20 74 6f 0a 2a 2a 20 61  entation to.** a
7af0: 64 64 72 65 73 73 20 50 32 2e 0a 2a 2a 0a 2a 2a  ddress P2..**.**
7b00: 20 53 65 65 20 61 6c 73 6f 3a 20 45 6e 64 43 6f   See also: EndCo
7b10: 72 6f 75 74 69 6e 65 0a 2a 2f 0a 63 61 73 65 20  routine.*/.case 
7b20: 4f 50 5f 49 6e 69 74 43 6f 72 6f 75 74 69 6e 65  OP_InitCoroutine
7b30: 3a 20 7b 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20  : {     /* jump 
7b40: 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  */.  assert( pOp
7b50: 2d 3e 70 31 3e 30 20 26 26 20 20 70 4f 70 2d 3e  ->p1>0 &&  pOp->
7b60: 70 31 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d  p1<=(p->nMem+1 -
7b70: 20 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a   p->nCursor) );.
7b80: 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
7b90: 32 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 32 3c  2>=0 && pOp->p2<
7ba0: 70 2d 3e 6e 4f 70 20 29 3b 0a 20 20 61 73 73 65  p->nOp );.  asse
7bb0: 72 74 28 20 70 4f 70 2d 3e 70 33 3e 3d 30 20 26  rt( pOp->p3>=0 &
7bc0: 26 20 70 4f 70 2d 3e 70 33 3c 70 2d 3e 6e 4f 70  & pOp->p3<p->nOp
7bd0: 20 29 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d   );.  pOut = &aM
7be0: 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  em[pOp->p1];.  a
7bf0: 73 73 65 72 74 28 20 21 56 64 62 65 4d 65 6d 44  ssert( !VdbeMemD
7c00: 79 6e 61 6d 69 63 28 70 4f 75 74 29 20 29 3b 0a  ynamic(pOut) );.
7c10: 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 70 4f    pOut->u.i = pO
7c20: 70 2d 3e 70 33 20 2d 20 31 3b 0a 20 20 70 4f 75  p->p3 - 1;.  pOu
7c30: 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 49  t->flags = MEM_I
7c40: 6e 74 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70  nt;.  if( pOp->p
7c50: 32 20 29 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f  2 ) goto jump_to
7c60: 5f 70 32 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  _p2;.  break;.}.
7c70: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 20 45 6e 64  ./* Opcode:  End
7c80: 43 6f 72 6f 75 74 69 6e 65 20 50 31 20 2a 20 2a  Coroutine P1 * *
7c90: 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 65 20 69   * *.**.** The i
7ca0: 6e 73 74 72 75 63 74 69 6f 6e 20 61 74 20 74 68  nstruction at th
7cb0: 65 20 61 64 64 72 65 73 73 20 69 6e 20 72 65 67  e address in reg
7cc0: 69 73 74 65 72 20 50 31 20 69 73 20 61 20 59 69  ister P1 is a Yi
7cd0: 65 6c 64 2e 0a 2a 2a 20 4a 75 6d 70 20 74 6f 20  eld..** Jump to 
7ce0: 74 68 65 20 50 32 20 70 61 72 61 6d 65 74 65 72  the P2 parameter
7cf0: 20 6f 66 20 74 68 61 74 20 59 69 65 6c 64 2e 0a   of that Yield..
7d00: 2a 2a 20 41 66 74 65 72 20 74 68 65 20 6a 75 6d  ** After the jum
7d10: 70 2c 20 72 65 67 69 73 74 65 72 20 50 31 20 62  p, register P1 b
7d20: 65 63 6f 6d 65 73 20 75 6e 64 65 66 69 6e 65 64  ecomes undefined
7d30: 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f  ..**.** See also
7d40: 3a 20 49 6e 69 74 43 6f 72 6f 75 74 69 6e 65 0a  : InitCoroutine.
7d50: 2a 2f 0a 63 61 73 65 20 4f 50 5f 45 6e 64 43 6f  */.case OP_EndCo
7d60: 72 6f 75 74 69 6e 65 3a 20 7b 20 20 20 20 20 20  routine: {      
7d70: 20 20 20 20 20 2f 2a 20 69 6e 31 20 2a 2f 0a 20       /* in1 */. 
7d80: 20 56 64 62 65 4f 70 20 2a 70 43 61 6c 6c 65 72   VdbeOp *pCaller
7d90: 3b 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d  ;.  pIn1 = &aMem
7da0: 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
7db0: 65 72 74 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73  ert( pIn1->flags
7dc0: 3d 3d 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 61  ==MEM_Int );.  a
7dd0: 73 73 65 72 74 28 20 70 49 6e 31 2d 3e 75 2e 69  ssert( pIn1->u.i
7de0: 3e 3d 30 20 26 26 20 70 49 6e 31 2d 3e 75 2e 69  >=0 && pIn1->u.i
7df0: 3c 70 2d 3e 6e 4f 70 20 29 3b 0a 20 20 70 43 61  <p->nOp );.  pCa
7e00: 6c 6c 65 72 20 3d 20 26 61 4f 70 5b 70 49 6e 31  ller = &aOp[pIn1
7e10: 2d 3e 75 2e 69 5d 3b 0a 20 20 61 73 73 65 72 74  ->u.i];.  assert
7e20: 28 20 70 43 61 6c 6c 65 72 2d 3e 6f 70 63 6f 64  ( pCaller->opcod
7e30: 65 3d 3d 4f 50 5f 59 69 65 6c 64 20 29 3b 0a 20  e==OP_Yield );. 
7e40: 20 61 73 73 65 72 74 28 20 70 43 61 6c 6c 65 72   assert( pCaller
7e50: 2d 3e 70 32 3e 3d 30 20 26 26 20 70 43 61 6c 6c  ->p2>=0 && pCall
7e60: 65 72 2d 3e 70 32 3c 70 2d 3e 6e 4f 70 20 29 3b  er->p2<p->nOp );
7e70: 0a 20 20 70 4f 70 20 3d 20 26 61 4f 70 5b 70 43  .  pOp = &aOp[pC
7e80: 61 6c 6c 65 72 2d 3e 70 32 20 2d 20 31 5d 3b 0a  aller->p2 - 1];.
7e90: 20 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 3d 20    pIn1->flags = 
7ea0: 4d 45 4d 5f 55 6e 64 65 66 69 6e 65 64 3b 0a 20  MEM_Undefined;. 
7eb0: 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
7ec0: 63 6f 64 65 3a 20 20 59 69 65 6c 64 20 50 31 20  code:  Yield P1 
7ed0: 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 53  P2 * * *.**.** S
7ee0: 77 61 70 20 74 68 65 20 70 72 6f 67 72 61 6d 20  wap the program 
7ef0: 63 6f 75 6e 74 65 72 20 77 69 74 68 20 74 68 65  counter with the
7f00: 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
7f10: 65 72 20 50 31 2e 20 20 54 68 69 73 0a 2a 2a 20  er P1.  This.** 
7f20: 68 61 73 20 74 68 65 20 65 66 66 65 63 74 20 6f  has the effect o
7f30: 66 20 79 69 65 6c 64 69 6e 67 20 74 6f 20 61 20  f yielding to a 
7f40: 63 6f 72 6f 75 74 69 6e 65 2e 0a 2a 2a 0a 2a 2a  coroutine..**.**
7f50: 20 49 66 20 74 68 65 20 63 6f 72 6f 75 74 69 6e   If the coroutin
7f60: 65 20 74 68 61 74 20 69 73 20 6c 61 75 6e 63 68  e that is launch
7f70: 65 64 20 62 79 20 74 68 69 73 20 69 6e 73 74 72  ed by this instr
7f80: 75 63 74 69 6f 6e 20 65 6e 64 73 20 77 69 74 68  uction ends with
7f90: 0a 2a 2a 20 59 69 65 6c 64 20 6f 72 20 52 65 74  .** Yield or Ret
7fa0: 75 72 6e 20 74 68 65 6e 20 63 6f 6e 74 69 6e 75  urn then continu
7fb0: 65 20 74 6f 20 74 68 65 20 6e 65 78 74 20 69 6e  e to the next in
7fc0: 73 74 72 75 63 74 69 6f 6e 2e 20 20 42 75 74 20  struction.  But 
7fd0: 69 66 0a 2a 2a 20 74 68 65 20 63 6f 72 6f 75 74  if.** the corout
7fe0: 69 6e 65 20 6c 61 75 6e 63 68 65 64 20 62 79 20  ine launched by 
7ff0: 74 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e  this instruction
8000: 20 65 6e 64 73 20 77 69 74 68 0a 2a 2a 20 45 6e   ends with.** En
8010: 64 43 6f 72 6f 75 74 69 6e 65 2c 20 74 68 65 6e  dCoroutine, then
8020: 20 6a 75 6d 70 20 74 6f 20 50 32 20 72 61 74 68   jump to P2 rath
8030: 65 72 20 74 68 61 6e 20 63 6f 6e 74 69 6e 75 69  er than continui
8040: 6e 67 20 77 69 74 68 20 74 68 65 0a 2a 2a 20 6e  ng with the.** n
8050: 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e  ext instruction.
8060: 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a  .**.** See also:
8070: 20 49 6e 69 74 43 6f 72 6f 75 74 69 6e 65 0a 2a   InitCoroutine.*
8080: 2f 0a 63 61 73 65 20 4f 50 5f 59 69 65 6c 64 3a  /.case OP_Yield:
8090: 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a   {            /*
80a0: 20 69 6e 31 2c 20 6a 75 6d 70 20 2a 2f 0a 20 20   in1, jump */.  
80b0: 69 6e 74 20 70 63 44 65 73 74 3b 0a 20 20 70 49  int pcDest;.  pI
80c0: 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n1 = &aMem[pOp->
80d0: 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 56  p1];.  assert( V
80e0: 64 62 65 4d 65 6d 44 79 6e 61 6d 69 63 28 70 49  dbeMemDynamic(pI
80f0: 6e 31 29 3d 3d 30 20 29 3b 0a 20 20 70 49 6e 31  n1)==0 );.  pIn1
8100: 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 49 6e  ->flags = MEM_In
8110: 74 3b 0a 20 20 70 63 44 65 73 74 20 3d 20 28 69  t;.  pcDest = (i
8120: 6e 74 29 70 49 6e 31 2d 3e 75 2e 69 3b 0a 20 20  nt)pIn1->u.i;.  
8130: 70 49 6e 31 2d 3e 75 2e 69 20 3d 20 28 69 6e 74  pIn1->u.i = (int
8140: 29 28 70 4f 70 20 2d 20 61 4f 70 29 3b 0a 20 20  )(pOp - aOp);.  
8150: 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70  REGISTER_TRACE(p
8160: 4f 70 2d 3e 70 31 2c 20 70 49 6e 31 29 3b 0a 20  Op->p1, pIn1);. 
8170: 20 70 4f 70 20 3d 20 26 61 4f 70 5b 70 63 44 65   pOp = &aOp[pcDe
8180: 73 74 5d 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  st];.  break;.}.
8190: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 20 48 61 6c  ./* Opcode:  Hal
81a0: 74 49 66 4e 75 6c 6c 20 20 50 31 20 50 32 20 50  tIfNull  P1 P2 P
81b0: 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70  3 P4 P5.** Synop
81c0: 73 69 73 3a 20 69 66 20 72 5b 50 33 5d 3d 6e 75  sis: if r[P3]=nu
81d0: 6c 6c 20 68 61 6c 74 0a 2a 2a 0a 2a 2a 20 43 68  ll halt.**.** Ch
81e0: 65 63 6b 20 74 68 65 20 76 61 6c 75 65 20 69 6e  eck the value in
81f0: 20 72 65 67 69 73 74 65 72 20 50 33 2e 20 20 49   register P3.  I
8200: 66 20 69 74 20 69 73 20 4e 55 4c 4c 20 74 68 65  f it is NULL the
8210: 6e 20 48 61 6c 74 20 75 73 69 6e 67 0a 2a 2a 20  n Halt using.** 
8220: 70 61 72 61 6d 65 74 65 72 20 50 31 2c 20 50 32  parameter P1, P2
8230: 2c 20 61 6e 64 20 50 34 20 61 73 20 69 66 20 74  , and P4 as if t
8240: 68 69 73 20 77 65 72 65 20 61 20 48 61 6c 74 20  his were a Halt 
8250: 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20 20 49 66  instruction.  If
8260: 20 74 68 65 0a 2a 2a 20 76 61 6c 75 65 20 69 6e   the.** value in
8270: 20 72 65 67 69 73 74 65 72 20 50 33 20 69 73 20   register P3 is 
8280: 6e 6f 74 20 4e 55 4c 4c 2c 20 74 68 65 6e 20 74  not NULL, then t
8290: 68 69 73 20 72 6f 75 74 69 6e 65 20 69 73 20 61  his routine is a
82a0: 20 6e 6f 2d 6f 70 2e 0a 2a 2a 20 54 68 65 20 50   no-op..** The P
82b0: 35 20 70 61 72 61 6d 65 74 65 72 20 73 68 6f 75  5 parameter shou
82c0: 6c 64 20 62 65 20 31 2e 0a 2a 2f 0a 63 61 73 65  ld be 1..*/.case
82d0: 20 4f 50 5f 48 61 6c 74 49 66 4e 75 6c 6c 3a 20   OP_HaltIfNull: 
82e0: 7b 20 20 20 20 20 20 2f 2a 20 69 6e 33 20 2a 2f  {      /* in3 */
82f0: 0a 20 20 70 49 6e 33 20 3d 20 26 61 4d 65 6d 5b  .  pIn3 = &aMem[
8300: 70 4f 70 2d 3e 70 33 5d 3b 0a 23 69 66 64 65 66  pOp->p3];.#ifdef
8310: 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20   SQLITE_DEBUG.  
8320: 69 66 28 20 70 4f 70 2d 3e 70 32 3d 3d 4f 45 5f  if( pOp->p2==OE_
8330: 41 62 6f 72 74 20 29 7b 20 73 71 6c 69 74 65 33  Abort ){ sqlite3
8340: 56 64 62 65 41 73 73 65 72 74 41 62 6f 72 74 61  VdbeAssertAborta
8350: 62 6c 65 28 70 29 3b 20 7d 0a 23 65 6e 64 69 66  ble(p); }.#endif
8360: 0a 20 20 69 66 28 20 28 70 49 6e 33 2d 3e 66 6c  .  if( (pIn3->fl
8370: 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29 3d  ags & MEM_Null)=
8380: 3d 30 20 29 20 62 72 65 61 6b 3b 0a 20 20 2f 2a  =0 ) break;.  /*
8390: 20 46 61 6c 6c 20 74 68 72 6f 75 67 68 20 69 6e   Fall through in
83a0: 74 6f 20 4f 50 5f 48 61 6c 74 20 2a 2f 0a 7d 0a  to OP_Halt */.}.
83b0: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 20 48 61 6c  ./* Opcode:  Hal
83c0: 74 20 50 31 20 50 32 20 2a 20 50 34 20 50 35 0a  t P1 P2 * P4 P5.
83d0: 2a 2a 0a 2a 2a 20 45 78 69 74 20 69 6d 6d 65 64  **.** Exit immed
83e0: 69 61 74 65 6c 79 2e 20 20 41 6c 6c 20 6f 70 65  iately.  All ope
83f0: 6e 20 63 75 72 73 6f 72 73 2c 20 65 74 63 20 61  n cursors, etc a
8400: 72 65 20 63 6c 6f 73 65 64 0a 2a 2a 20 61 75 74  re closed.** aut
8410: 6f 6d 61 74 69 63 61 6c 6c 79 2e 0a 2a 2a 0a 2a  omatically..**.*
8420: 2a 20 50 31 20 69 73 20 74 68 65 20 72 65 73 75  * P1 is the resu
8430: 6c 74 20 63 6f 64 65 20 72 65 74 75 72 6e 65 64  lt code returned
8440: 20 62 79 20 73 71 6c 69 74 65 33 5f 65 78 65 63   by sqlite3_exec
8450: 28 29 2c 20 73 71 6c 69 74 65 33 5f 72 65 73 65  (), sqlite3_rese
8460: 74 28 29 2c 0a 2a 2a 20 6f 72 20 73 71 6c 69 74  t(),.** or sqlit
8470: 65 33 5f 66 69 6e 61 6c 69 7a 65 28 29 2e 20 20  e3_finalize().  
8480: 46 6f 72 20 61 20 6e 6f 72 6d 61 6c 20 68 61 6c  For a normal hal
8490: 74 2c 20 74 68 69 73 20 73 68 6f 75 6c 64 20 62  t, this should b
84a0: 65 20 53 51 4c 49 54 45 5f 4f 4b 20 28 30 29 2e  e SQLITE_OK (0).
84b0: 0a 2a 2a 20 46 6f 72 20 65 72 72 6f 72 73 2c 20  .** For errors, 
84c0: 69 74 20 63 61 6e 20 62 65 20 73 6f 6d 65 20 6f  it can be some o
84d0: 74 68 65 72 20 76 61 6c 75 65 2e 20 20 49 66 20  ther value.  If 
84e0: 50 31 21 3d 30 20 74 68 65 6e 20 50 32 20 77 69  P1!=0 then P2 wi
84f0: 6c 6c 20 64 65 74 65 72 6d 69 6e 65 0a 2a 2a 20  ll determine.** 
8500: 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 74  whether or not t
8510: 6f 20 72 6f 6c 6c 62 61 63 6b 20 74 68 65 20 63  o rollback the c
8520: 75 72 72 65 6e 74 20 74 72 61 6e 73 61 63 74 69  urrent transacti
8530: 6f 6e 2e 20 20 44 6f 20 6e 6f 74 20 72 6f 6c 6c  on.  Do not roll
8540: 62 61 63 6b 0a 2a 2a 20 69 66 20 50 32 3d 3d 4f  back.** if P2==O
8550: 45 5f 46 61 69 6c 2e 20 44 6f 20 74 68 65 20 72  E_Fail. Do the r
8560: 6f 6c 6c 62 61 63 6b 20 69 66 20 50 32 3d 3d 4f  ollback if P2==O
8570: 45 5f 52 6f 6c 6c 62 61 63 6b 2e 20 20 49 66 20  E_Rollback.  If 
8580: 50 32 3d 3d 4f 45 5f 41 62 6f 72 74 2c 0a 2a 2a  P2==OE_Abort,.**
8590: 20 74 68 65 6e 20 62 61 63 6b 20 6f 75 74 20 61   then back out a
85a0: 6c 6c 20 63 68 61 6e 67 65 73 20 74 68 61 74 20  ll changes that 
85b0: 68 61 76 65 20 6f 63 63 75 72 72 65 64 20 64 75  have occurred du
85c0: 72 69 6e 67 20 74 68 69 73 20 65 78 65 63 75 74  ring this execut
85d0: 69 6f 6e 20 6f 66 20 74 68 65 0a 2a 2a 20 56 44  ion of the.** VD
85e0: 42 45 2c 20 62 75 74 20 64 6f 20 6e 6f 74 20 72  BE, but do not r
85f0: 6f 6c 6c 62 61 63 6b 20 74 68 65 20 74 72 61 6e  ollback the tran
8600: 73 61 63 74 69 6f 6e 2e 20 0a 2a 2a 0a 2a 2a 20  saction. .**.** 
8610: 49 66 20 50 34 20 69 73 20 6e 6f 74 20 6e 75 6c  If P4 is not nul
8620: 6c 20 74 68 65 6e 20 69 74 20 69 73 20 61 6e 20  l then it is an 
8630: 65 72 72 6f 72 20 6d 65 73 73 61 67 65 20 73 74  error message st
8640: 72 69 6e 67 2e 0a 2a 2a 0a 2a 2a 20 50 35 20 69  ring..**.** P5 i
8650: 73 20 61 20 76 61 6c 75 65 20 62 65 74 77 65 65  s a value betwee
8660: 6e 20 30 20 61 6e 64 20 34 2c 20 69 6e 63 6c 75  n 0 and 4, inclu
8670: 73 69 76 65 2c 20 74 68 61 74 20 6d 6f 64 69 66  sive, that modif
8680: 69 65 73 20 74 68 65 20 50 34 20 73 74 72 69 6e  ies the P4 strin
8690: 67 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 30 3a 20 20  g..**.**    0:  
86a0: 28 6e 6f 20 63 68 61 6e 67 65 29 0a 2a 2a 20 20  (no change).**  
86b0: 20 20 31 3a 20 20 4e 4f 54 20 4e 55 4c 4c 20 63    1:  NOT NULL c
86c0: 6f 6e 74 72 61 69 6e 74 20 66 61 69 6c 65 64 3a  ontraint failed:
86d0: 20 50 34 0a 2a 2a 20 20 20 20 32 3a 20 20 55 4e   P4.**    2:  UN
86e0: 49 51 55 45 20 63 6f 6e 73 74 72 61 69 6e 74 20  IQUE constraint 
86f0: 66 61 69 6c 65 64 3a 20 50 34 0a 2a 2a 20 20 20  failed: P4.**   
8700: 20 33 3a 20 20 43 48 45 43 4b 20 63 6f 6e 73 74   3:  CHECK const
8710: 72 61 69 6e 74 20 66 61 69 6c 65 64 3a 20 50 34  raint failed: P4
8720: 0a 2a 2a 20 20 20 20 34 3a 20 20 46 4f 52 45 49  .**    4:  FOREI
8730: 47 4e 20 4b 45 59 20 63 6f 6e 73 74 72 61 69 6e  GN KEY constrain
8740: 74 20 66 61 69 6c 65 64 3a 20 50 34 0a 2a 2a 0a  t failed: P4.**.
8750: 2a 2a 20 49 66 20 50 35 20 69 73 20 6e 6f 74 20  ** If P5 is not 
8760: 7a 65 72 6f 20 61 6e 64 20 50 34 20 69 73 20 4e  zero and P4 is N
8770: 55 4c 4c 2c 20 74 68 65 6e 20 65 76 65 72 79 74  ULL, then everyt
8780: 68 69 6e 67 20 61 66 74 65 72 20 74 68 65 20 22  hing after the "
8790: 3a 22 20 69 73 0a 2a 2a 20 6f 6d 69 74 74 65 64  :" is.** omitted
87a0: 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 72 65 20 69 73  ..**.** There is
87b0: 20 61 6e 20 69 6d 70 6c 69 65 64 20 22 48 61 6c   an implied "Hal
87c0: 74 20 30 20 30 20 30 22 20 69 6e 73 74 72 75 63  t 0 0 0" instruc
87d0: 74 69 6f 6e 20 69 6e 73 65 72 74 65 64 20 61 74  tion inserted at
87e0: 20 74 68 65 20 76 65 72 79 20 65 6e 64 20 6f 66   the very end of
87f0: 0a 2a 2a 20 65 76 65 72 79 20 70 72 6f 67 72 61  .** every progra
8800: 6d 2e 20 20 53 6f 20 61 20 6a 75 6d 70 20 70 61  m.  So a jump pa
8810: 73 74 20 74 68 65 20 6c 61 73 74 20 69 6e 73 74  st the last inst
8820: 72 75 63 74 69 6f 6e 20 6f 66 20 74 68 65 20 70  ruction of the p
8830: 72 6f 67 72 61 6d 0a 2a 2a 20 69 73 20 74 68 65  rogram.** is the
8840: 20 73 61 6d 65 20 61 73 20 65 78 65 63 75 74 69   same as executi
8850: 6e 67 20 48 61 6c 74 2e 0a 2a 2f 0a 63 61 73 65  ng Halt..*/.case
8860: 20 4f 50 5f 48 61 6c 74 3a 20 7b 0a 20 20 56 64   OP_Halt: {.  Vd
8870: 62 65 46 72 61 6d 65 20 2a 70 46 72 61 6d 65 3b  beFrame *pFrame;
8880: 0a 20 20 69 6e 74 20 70 63 78 3b 0a 0a 20 20 70  .  int pcx;..  p
8890: 63 78 20 3d 20 28 69 6e 74 29 28 70 4f 70 20 2d  cx = (int)(pOp -
88a0: 20 61 4f 70 29 3b 0a 23 69 66 64 65 66 20 53 51   aOp);.#ifdef SQ
88b0: 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 69 66 28  LITE_DEBUG.  if(
88c0: 20 70 4f 70 2d 3e 70 32 3d 3d 4f 45 5f 41 62 6f   pOp->p2==OE_Abo
88d0: 72 74 20 29 7b 20 73 71 6c 69 74 65 33 56 64 62  rt ){ sqlite3Vdb
88e0: 65 41 73 73 65 72 74 41 62 6f 72 74 61 62 6c 65  eAssertAbortable
88f0: 28 70 29 3b 20 7d 0a 23 65 6e 64 69 66 0a 20 20  (p); }.#endif.  
8900: 69 66 28 20 70 4f 70 2d 3e 70 31 3d 3d 53 51 4c  if( pOp->p1==SQL
8910: 49 54 45 5f 4f 4b 20 26 26 20 70 2d 3e 70 46 72  ITE_OK && p->pFr
8920: 61 6d 65 20 29 7b 0a 20 20 20 20 2f 2a 20 48 61  ame ){.    /* Ha
8930: 6c 74 20 74 68 65 20 73 75 62 2d 70 72 6f 67 72  lt the sub-progr
8940: 61 6d 2e 20 52 65 74 75 72 6e 20 63 6f 6e 74 72  am. Return contr
8950: 6f 6c 20 74 6f 20 74 68 65 20 70 61 72 65 6e 74  ol to the parent
8960: 20 66 72 61 6d 65 2e 20 2a 2f 0a 20 20 20 20 70   frame. */.    p
8970: 46 72 61 6d 65 20 3d 20 70 2d 3e 70 46 72 61 6d  Frame = p->pFram
8980: 65 3b 0a 20 20 20 20 70 2d 3e 70 46 72 61 6d 65  e;.    p->pFrame
8990: 20 3d 20 70 46 72 61 6d 65 2d 3e 70 50 61 72 65   = pFrame->pPare
89a0: 6e 74 3b 0a 20 20 20 20 70 2d 3e 6e 46 72 61 6d  nt;.    p->nFram
89b0: 65 2d 2d 3b 0a 20 20 20 20 73 71 6c 69 74 65 33  e--;.    sqlite3
89c0: 56 64 62 65 53 65 74 43 68 61 6e 67 65 73 28 64  VdbeSetChanges(d
89d0: 62 2c 20 70 2d 3e 6e 43 68 61 6e 67 65 29 3b 0a  b, p->nChange);.
89e0: 20 20 20 20 70 63 78 20 3d 20 73 71 6c 69 74 65      pcx = sqlite
89f0: 33 56 64 62 65 46 72 61 6d 65 52 65 73 74 6f 72  3VdbeFrameRestor
8a00: 65 28 70 46 72 61 6d 65 29 3b 0a 20 20 20 20 69  e(pFrame);.    i
8a10: 66 28 20 70 4f 70 2d 3e 70 32 3d 3d 4f 45 5f 49  f( pOp->p2==OE_I
8a20: 67 6e 6f 72 65 20 29 7b 0a 20 20 20 20 20 20 2f  gnore ){.      /
8a30: 2a 20 49 6e 73 74 72 75 63 74 69 6f 6e 20 70 63  * Instruction pc
8a40: 78 20 69 73 20 74 68 65 20 4f 50 5f 50 72 6f 67  x is the OP_Prog
8a50: 72 61 6d 20 74 68 61 74 20 69 6e 76 6f 6b 65 64  ram that invoked
8a60: 20 74 68 65 20 73 75 62 2d 70 72 6f 67 72 61 6d   the sub-program
8a70: 20 0a 20 20 20 20 20 20 2a 2a 20 63 75 72 72 65   .      ** curre
8a80: 6e 74 6c 79 20 62 65 69 6e 67 20 68 61 6c 74 65  ntly being halte
8a90: 64 2e 20 49 66 20 74 68 65 20 70 32 20 69 6e 73  d. If the p2 ins
8aa0: 74 72 75 63 74 69 6f 6e 20 6f 66 20 74 68 69 73  truction of this
8ab0: 20 4f 50 5f 48 61 6c 74 0a 20 20 20 20 20 20 2a   OP_Halt.      *
8ac0: 2a 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 69 73  * instruction is
8ad0: 20 73 65 74 20 74 6f 20 4f 45 5f 49 67 6e 6f 72   set to OE_Ignor
8ae0: 65 2c 20 74 68 65 6e 20 74 68 65 20 73 75 62 2d  e, then the sub-
8af0: 70 72 6f 67 72 61 6d 20 69 73 20 74 68 72 6f 77  program is throw
8b00: 69 6e 67 0a 20 20 20 20 20 20 2a 2a 20 61 6e 20  ing.      ** an 
8b10: 49 47 4e 4f 52 45 20 65 78 63 65 70 74 69 6f 6e  IGNORE exception
8b20: 2e 20 49 6e 20 74 68 69 73 20 63 61 73 65 20 6a  . In this case j
8b30: 75 6d 70 20 74 6f 20 74 68 65 20 61 64 64 72 65  ump to the addre
8b40: 73 73 20 73 70 65 63 69 66 69 65 64 0a 20 20 20  ss specified.   
8b50: 20 20 20 2a 2a 20 61 73 20 74 68 65 20 70 32 20     ** as the p2 
8b60: 6f 66 20 74 68 65 20 63 61 6c 6c 69 6e 67 20 4f  of the calling O
8b70: 50 5f 50 72 6f 67 72 61 6d 2e 20 20 2a 2f 0a 20  P_Program.  */. 
8b80: 20 20 20 20 20 70 63 78 20 3d 20 70 2d 3e 61 4f       pcx = p->aO
8b90: 70 5b 70 63 78 5d 2e 70 32 2d 31 3b 0a 20 20 20  p[pcx].p2-1;.   
8ba0: 20 7d 0a 20 20 20 20 61 4f 70 20 3d 20 70 2d 3e   }.    aOp = p->
8bb0: 61 4f 70 3b 0a 20 20 20 20 61 4d 65 6d 20 3d 20  aOp;.    aMem = 
8bc0: 70 2d 3e 61 4d 65 6d 3b 0a 20 20 20 20 70 4f 70  p->aMem;.    pOp
8bd0: 20 3d 20 26 61 4f 70 5b 70 63 78 5d 3b 0a 20 20   = &aOp[pcx];.  
8be0: 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 20 20 70    break;.  }.  p
8bf0: 2d 3e 72 63 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a  ->rc = pOp->p1;.
8c00: 20 20 70 2d 3e 65 72 72 6f 72 41 63 74 69 6f 6e    p->errorAction
8c10: 20 3d 20 28 75 38 29 70 4f 70 2d 3e 70 32 3b 0a   = (u8)pOp->p2;.
8c20: 20 20 70 2d 3e 70 63 20 3d 20 70 63 78 3b 0a 20    p->pc = pcx;. 
8c30: 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 35   assert( pOp->p5
8c40: 3c 3d 34 20 29 3b 0a 20 20 69 66 28 20 70 2d 3e  <=4 );.  if( p->
8c50: 72 63 20 29 7b 0a 20 20 20 20 69 66 28 20 70 4f  rc ){.    if( pO
8c60: 70 2d 3e 70 35 20 29 7b 0a 20 20 20 20 20 20 73  p->p5 ){.      s
8c70: 74 61 74 69 63 20 63 6f 6e 73 74 20 63 68 61 72  tatic const char
8c80: 20 2a 20 63 6f 6e 73 74 20 61 7a 54 79 70 65 5b   * const azType[
8c90: 5d 20 3d 20 7b 20 22 4e 4f 54 20 4e 55 4c 4c 22  ] = { "NOT NULL"
8ca0: 2c 20 22 55 4e 49 51 55 45 22 2c 20 22 43 48 45  , "UNIQUE", "CHE
8cb0: 43 4b 22 2c 0a 20 20 20 20 20 20 20 20 20 20 20  CK",.           
8cc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8cd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8ce0: 20 20 22 46 4f 52 45 49 47 4e 20 4b 45 59 22 20    "FOREIGN KEY" 
8cf0: 7d 3b 0a 20 20 20 20 20 20 74 65 73 74 63 61 73  };.      testcas
8d00: 65 28 20 70 4f 70 2d 3e 70 35 3d 3d 31 20 29 3b  e( pOp->p5==1 );
8d10: 0a 20 20 20 20 20 20 74 65 73 74 63 61 73 65 28  .      testcase(
8d20: 20 70 4f 70 2d 3e 70 35 3d 3d 32 20 29 3b 0a 20   pOp->p5==2 );. 
8d30: 20 20 20 20 20 74 65 73 74 63 61 73 65 28 20 70       testcase( p
8d40: 4f 70 2d 3e 70 35 3d 3d 33 20 29 3b 0a 20 20 20  Op->p5==3 );.   
8d50: 20 20 20 74 65 73 74 63 61 73 65 28 20 70 4f 70     testcase( pOp
8d60: 2d 3e 70 35 3d 3d 34 20 29 3b 0a 20 20 20 20 20  ->p5==4 );.     
8d70: 20 73 71 6c 69 74 65 33 56 64 62 65 45 72 72 6f   sqlite3VdbeErro
8d80: 72 28 70 2c 20 22 25 73 20 63 6f 6e 73 74 72 61  r(p, "%s constra
8d90: 69 6e 74 20 66 61 69 6c 65 64 22 2c 20 61 7a 54  int failed", azT
8da0: 79 70 65 5b 70 4f 70 2d 3e 70 35 2d 31 5d 29 3b  ype[pOp->p5-1]);
8db0: 0a 20 20 20 20 20 20 69 66 28 20 70 4f 70 2d 3e  .      if( pOp->
8dc0: 70 34 2e 7a 20 29 7b 0a 20 20 20 20 20 20 20 20  p4.z ){.        
8dd0: 70 2d 3e 7a 45 72 72 4d 73 67 20 3d 20 73 71 6c  p->zErrMsg = sql
8de0: 69 74 65 33 4d 50 72 69 6e 74 66 28 64 62 2c 20  ite3MPrintf(db, 
8df0: 22 25 7a 3a 20 25 73 22 2c 20 70 2d 3e 7a 45 72  "%z: %s", p->zEr
8e00: 72 4d 73 67 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29  rMsg, pOp->p4.z)
8e10: 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 65  ;.      }.    }e
8e20: 6c 73 65 7b 0a 20 20 20 20 20 20 73 71 6c 69 74  lse{.      sqlit
8e30: 65 33 56 64 62 65 45 72 72 6f 72 28 70 2c 20 22  e3VdbeError(p, "
8e40: 25 73 22 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b  %s", pOp->p4.z);
8e50: 0a 20 20 20 20 7d 0a 20 20 20 20 73 71 6c 69 74  .    }.    sqlit
8e60: 65 33 5f 6c 6f 67 28 70 4f 70 2d 3e 70 31 2c 20  e3_log(pOp->p1, 
8e70: 22 61 62 6f 72 74 20 61 74 20 25 64 20 69 6e 20  "abort at %d in 
8e80: 5b 25 73 5d 3a 20 25 73 22 2c 20 70 63 78 2c 20  [%s]: %s", pcx, 
8e90: 70 2d 3e 7a 53 71 6c 2c 20 70 2d 3e 7a 45 72 72  p->zSql, p->zErr
8ea0: 4d 73 67 29 3b 0a 20 20 7d 0a 20 20 72 63 20 3d  Msg);.  }.  rc =
8eb0: 20 73 71 6c 69 74 65 33 56 64 62 65 48 61 6c 74   sqlite3VdbeHalt
8ec0: 28 70 29 3b 0a 20 20 61 73 73 65 72 74 28 20 72  (p);.  assert( r
8ed0: 63 3d 3d 53 51 4c 49 54 45 5f 42 55 53 59 20 7c  c==SQLITE_BUSY |
8ee0: 7c 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  | rc==SQLITE_OK 
8ef0: 7c 7c 20 72 63 3d 3d 53 51 4c 49 54 45 5f 45 52  || rc==SQLITE_ER
8f00: 52 4f 52 20 29 3b 0a 20 20 69 66 28 20 72 63 3d  ROR );.  if( rc=
8f10: 3d 53 51 4c 49 54 45 5f 42 55 53 59 20 29 7b 0a  =SQLITE_BUSY ){.
8f20: 20 20 20 20 70 2d 3e 72 63 20 3d 20 53 51 4c 49      p->rc = SQLI
8f30: 54 45 5f 42 55 53 59 3b 0a 20 20 7d 65 6c 73 65  TE_BUSY;.  }else
8f40: 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 72 63  {.    assert( rc
8f50: 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 7c 7c 20 28  ==SQLITE_OK || (
8f60: 70 2d 3e 72 63 26 30 78 66 66 29 3d 3d 53 51 4c  p->rc&0xff)==SQL
8f70: 49 54 45 5f 43 4f 4e 53 54 52 41 49 4e 54 20 29  ITE_CONSTRAINT )
8f80: 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 72 63  ;.    assert( rc
8f90: 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 7c 7c 20 64  ==SQLITE_OK || d
8fa0: 62 2d 3e 6e 44 65 66 65 72 72 65 64 43 6f 6e 73  b->nDeferredCons
8fb0: 3e 30 20 7c 7c 20 64 62 2d 3e 6e 44 65 66 65 72  >0 || db->nDefer
8fc0: 72 65 64 49 6d 6d 43 6f 6e 73 3e 30 20 29 3b 0a  redImmCons>0 );.
8fd0: 20 20 20 20 72 63 20 3d 20 70 2d 3e 72 63 20 3f      rc = p->rc ?
8fe0: 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 20 3a 20   SQLITE_ERROR : 
8ff0: 53 51 4c 49 54 45 5f 44 4f 4e 45 3b 0a 20 20 7d  SQLITE_DONE;.  }
9000: 0a 20 20 67 6f 74 6f 20 76 64 62 65 5f 72 65 74  .  goto vdbe_ret
9010: 75 72 6e 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  urn;.}../* Opcod
9020: 65 3a 20 49 6e 74 65 67 65 72 20 50 31 20 50 32  e: Integer P1 P2
9030: 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73   * * *.** Synops
9040: 69 73 3a 20 72 5b 50 32 5d 3d 50 31 0a 2a 2a 0a  is: r[P2]=P1.**.
9050: 2a 2a 20 54 68 65 20 33 32 2d 62 69 74 20 69 6e  ** The 32-bit in
9060: 74 65 67 65 72 20 76 61 6c 75 65 20 50 31 20 69  teger value P1 i
9070: 73 20 77 72 69 74 74 65 6e 20 69 6e 74 6f 20 72  s written into r
9080: 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2f 0a 63  egister P2..*/.c
9090: 61 73 65 20 4f 50 5f 49 6e 74 65 67 65 72 3a 20  ase OP_Integer: 
90a0: 7b 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74  {         /* out
90b0: 32 20 2a 2f 0a 20 20 70 4f 75 74 20 3d 20 6f 75  2 */.  pOut = ou
90c0: 74 32 50 72 65 72 65 6c 65 61 73 65 28 70 2c 20  t2Prerelease(p, 
90d0: 70 4f 70 29 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e  pOp);.  pOut->u.
90e0: 69 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 62  i = pOp->p1;.  b
90f0: 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
9100: 64 65 3a 20 49 6e 74 36 34 20 2a 20 50 32 20 2a  de: Int64 * P2 *
9110: 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69   P4 *.** Synopsi
9120: 73 3a 20 72 5b 50 32 5d 3d 50 34 0a 2a 2a 0a 2a  s: r[P2]=P4.**.*
9130: 2a 20 50 34 20 69 73 20 61 20 70 6f 69 6e 74 65  * P4 is a pointe
9140: 72 20 74 6f 20 61 20 36 34 2d 62 69 74 20 69 6e  r to a 64-bit in
9150: 74 65 67 65 72 20 76 61 6c 75 65 2e 0a 2a 2a 20  teger value..** 
9160: 57 72 69 74 65 20 74 68 61 74 20 76 61 6c 75 65  Write that value
9170: 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50   into register P
9180: 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 6e  2..*/.case OP_In
9190: 74 36 34 3a 20 7b 20 20 20 20 20 20 20 20 20 20  t64: {          
91a0: 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20 20 70 4f   /* out2 */.  pO
91b0: 75 74 20 3d 20 6f 75 74 32 50 72 65 72 65 6c 65  ut = out2Prerele
91c0: 61 73 65 28 70 2c 20 70 4f 70 29 3b 0a 20 20 61  ase(p, pOp);.  a
91d0: 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 2e 70  ssert( pOp->p4.p
91e0: 49 36 34 21 3d 30 20 29 3b 0a 20 20 70 4f 75 74  I64!=0 );.  pOut
91f0: 2d 3e 75 2e 69 20 3d 20 2a 70 4f 70 2d 3e 70 34  ->u.i = *pOp->p4
9200: 2e 70 49 36 34 3b 0a 20 20 62 72 65 61 6b 3b 0a  .pI64;.  break;.
9210: 7d 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  }..#ifndef SQLIT
9220: 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f  E_OMIT_FLOATING_
9230: 50 4f 49 4e 54 0a 2f 2a 20 4f 70 63 6f 64 65 3a  POINT./* Opcode:
9240: 20 52 65 61 6c 20 2a 20 50 32 20 2a 20 50 34 20   Real * P2 * P4 
9250: 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72  *.** Synopsis: r
9260: 5b 50 32 5d 3d 50 34 0a 2a 2a 0a 2a 2a 20 50 34  [P2]=P4.**.** P4
9270: 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f   is a pointer to
9280: 20 61 20 36 34 2d 62 69 74 20 66 6c 6f 61 74 69   a 64-bit floati
9290: 6e 67 20 70 6f 69 6e 74 20 76 61 6c 75 65 2e 0a  ng point value..
92a0: 2a 2a 20 57 72 69 74 65 20 74 68 61 74 20 76 61  ** Write that va
92b0: 6c 75 65 20 69 6e 74 6f 20 72 65 67 69 73 74 65  lue into registe
92c0: 72 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  r P2..*/.case OP
92d0: 5f 52 65 61 6c 3a 20 7b 20 20 20 20 20 20 20 20  _Real: {        
92e0: 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54      /* same as T
92f0: 4b 5f 46 4c 4f 41 54 2c 20 6f 75 74 32 20 2a 2f  K_FLOAT, out2 */
9300: 0a 20 20 70 4f 75 74 20 3d 20 6f 75 74 32 50 72  .  pOut = out2Pr
9310: 65 72 65 6c 65 61 73 65 28 70 2c 20 70 4f 70 29  erelease(p, pOp)
9320: 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20  ;.  pOut->flags 
9330: 3d 20 4d 45 4d 5f 52 65 61 6c 3b 0a 20 20 61 73  = MEM_Real;.  as
9340: 73 65 72 74 28 20 21 73 71 6c 69 74 65 33 49 73  sert( !sqlite3Is
9350: 4e 61 4e 28 2a 70 4f 70 2d 3e 70 34 2e 70 52 65  NaN(*pOp->p4.pRe
9360: 61 6c 29 20 29 3b 0a 20 20 70 4f 75 74 2d 3e 75  al) );.  pOut->u
9370: 2e 72 20 3d 20 2a 70 4f 70 2d 3e 70 34 2e 70 52  .r = *pOp->p4.pR
9380: 65 61 6c 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  eal;.  break;.}.
9390: 23 65 6e 64 69 66 0a 0a 2f 2a 20 4f 70 63 6f 64  #endif../* Opcod
93a0: 65 3a 20 53 74 72 69 6e 67 38 20 2a 20 50 32 20  e: String8 * P2 
93b0: 2a 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73  * P4 *.** Synops
93c0: 69 73 3a 20 72 5b 50 32 5d 3d 27 50 34 27 0a 2a  is: r[P2]='P4'.*
93d0: 2a 0a 2a 2a 20 50 34 20 70 6f 69 6e 74 73 20 74  *.** P4 points t
93e0: 6f 20 61 20 6e 75 6c 20 74 65 72 6d 69 6e 61 74  o a nul terminat
93f0: 65 64 20 55 54 46 2d 38 20 73 74 72 69 6e 67 2e  ed UTF-8 string.
9400: 20 54 68 69 73 20 6f 70 63 6f 64 65 20 69 73 20   This opcode is 
9410: 74 72 61 6e 73 66 6f 72 6d 65 64 20 0a 2a 2a 20  transformed .** 
9420: 69 6e 74 6f 20 61 20 53 74 72 69 6e 67 20 6f 70  into a String op
9430: 63 6f 64 65 20 62 65 66 6f 72 65 20 69 74 20 69  code before it i
9440: 73 20 65 78 65 63 75 74 65 64 20 66 6f 72 20 74  s executed for t
9450: 68 65 20 66 69 72 73 74 20 74 69 6d 65 2e 20 20  he first time.  
9460: 44 75 72 69 6e 67 0a 2a 2a 20 74 68 69 73 20 74  During.** this t
9470: 72 61 6e 73 66 6f 72 6d 61 74 69 6f 6e 2c 20 74  ransformation, t
9480: 68 65 20 6c 65 6e 67 74 68 20 6f 66 20 73 74 72  he length of str
9490: 69 6e 67 20 50 34 20 69 73 20 63 6f 6d 70 75 74  ing P4 is comput
94a0: 65 64 20 61 6e 64 20 73 74 6f 72 65 64 0a 2a 2a  ed and stored.**
94b0: 20 61 73 20 74 68 65 20 50 31 20 70 61 72 61 6d   as the P1 param
94c0: 65 74 65 72 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  eter..*/.case OP
94d0: 5f 53 74 72 69 6e 67 38 3a 20 7b 20 20 20 20 20  _String8: {     
94e0: 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54      /* same as T
94f0: 4b 5f 53 54 52 49 4e 47 2c 20 6f 75 74 32 20 2a  K_STRING, out2 *
9500: 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  /.  assert( pOp-
9510: 3e 70 34 2e 7a 21 3d 30 20 29 3b 0a 20 20 70 4f  >p4.z!=0 );.  pO
9520: 75 74 20 3d 20 6f 75 74 32 50 72 65 72 65 6c 65  ut = out2Prerele
9530: 61 73 65 28 70 2c 20 70 4f 70 29 3b 0a 20 20 70  ase(p, pOp);.  p
9540: 4f 70 2d 3e 6f 70 63 6f 64 65 20 3d 20 4f 50 5f  Op->opcode = OP_
9550: 53 74 72 69 6e 67 3b 0a 20 20 70 4f 70 2d 3e 70  String;.  pOp->p
9560: 31 20 3d 20 73 71 6c 69 74 65 33 53 74 72 6c 65  1 = sqlite3Strle
9570: 6e 33 30 28 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a  n30(pOp->p4.z);.
9580: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
9590: 4f 4d 49 54 5f 55 54 46 31 36 0a 20 20 69 66 28  OMIT_UTF16.  if(
95a0: 20 65 6e 63 6f 64 69 6e 67 21 3d 53 51 4c 49 54   encoding!=SQLIT
95b0: 45 5f 55 54 46 38 20 29 7b 0a 20 20 20 20 72 63  E_UTF8 ){.    rc
95c0: 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65   = sqlite3VdbeMe
95d0: 6d 53 65 74 53 74 72 28 70 4f 75 74 2c 20 70 4f  mSetStr(pOut, pO
95e0: 70 2d 3e 70 34 2e 7a 2c 20 2d 31 2c 20 53 51 4c  p->p4.z, -1, SQL
95f0: 49 54 45 5f 55 54 46 38 2c 20 53 51 4c 49 54 45  ITE_UTF8, SQLITE
9600: 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20 61 73  _STATIC);.    as
9610: 73 65 72 74 28 20 72 63 3d 3d 53 51 4c 49 54 45  sert( rc==SQLITE
9620: 5f 4f 4b 20 7c 7c 20 72 63 3d 3d 53 51 4c 49 54  _OK || rc==SQLIT
9630: 45 5f 54 4f 4f 42 49 47 20 29 3b 0a 20 20 20 20  E_TOOBIG );.    
9640: 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20 74 6f  if( rc ) goto to
9650: 6f 5f 62 69 67 3b 0a 20 20 20 20 69 66 28 20 53  o_big;.    if( S
9660: 51 4c 49 54 45 5f 4f 4b 21 3d 73 71 6c 69 74 65  QLITE_OK!=sqlite
9670: 33 56 64 62 65 43 68 61 6e 67 65 45 6e 63 6f 64  3VdbeChangeEncod
9680: 69 6e 67 28 70 4f 75 74 2c 20 65 6e 63 6f 64 69  ing(pOut, encodi
9690: 6e 67 29 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65  ng) ) goto no_me
96a0: 6d 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  m;.    assert( p
96b0: 4f 75 74 2d 3e 73 7a 4d 61 6c 6c 6f 63 3e 30 20  Out->szMalloc>0 
96c0: 26 26 20 70 4f 75 74 2d 3e 7a 4d 61 6c 6c 6f 63  && pOut->zMalloc
96d0: 3d 3d 70 4f 75 74 2d 3e 7a 20 29 3b 0a 20 20 20  ==pOut->z );.   
96e0: 20 61 73 73 65 72 74 28 20 56 64 62 65 4d 65 6d   assert( VdbeMem
96f0: 44 79 6e 61 6d 69 63 28 70 4f 75 74 29 3d 3d 30  Dynamic(pOut)==0
9700: 20 29 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 73 7a   );.    pOut->sz
9710: 4d 61 6c 6c 6f 63 20 3d 20 30 3b 0a 20 20 20 20  Malloc = 0;.    
9720: 70 4f 75 74 2d 3e 66 6c 61 67 73 20 7c 3d 20 4d  pOut->flags |= M
9730: 45 4d 5f 53 74 61 74 69 63 3b 0a 20 20 20 20 69  EM_Static;.    i
9740: 66 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d  f( pOp->p4type==
9750: 50 34 5f 44 59 4e 41 4d 49 43 20 29 7b 0a 20 20  P4_DYNAMIC ){.  
9760: 20 20 20 20 73 71 6c 69 74 65 33 44 62 46 72 65      sqlite3DbFre
9770: 65 28 64 62 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29  e(db, pOp->p4.z)
9780: 3b 0a 20 20 20 20 7d 0a 20 20 20 20 70 4f 70 2d  ;.    }.    pOp-
9790: 3e 70 34 74 79 70 65 20 3d 20 50 34 5f 44 59 4e  >p4type = P4_DYN
97a0: 41 4d 49 43 3b 0a 20 20 20 20 70 4f 70 2d 3e 70  AMIC;.    pOp->p
97b0: 34 2e 7a 20 3d 20 70 4f 75 74 2d 3e 7a 3b 0a 20  4.z = pOut->z;. 
97c0: 20 20 20 70 4f 70 2d 3e 70 31 20 3d 20 70 4f 75     pOp->p1 = pOu
97d0: 74 2d 3e 6e 3b 0a 20 20 7d 0a 23 65 6e 64 69 66  t->n;.  }.#endif
97e0: 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 31 3e 64  .  if( pOp->p1>d
97f0: 62 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45  b->aLimit[SQLITE
9800: 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54 48 5d 20 29  _LIMIT_LENGTH] )
9810: 7b 0a 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62  {.    goto too_b
9820: 69 67 3b 0a 20 20 7d 0a 20 20 61 73 73 65 72 74  ig;.  }.  assert
9830: 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc==SQLITE_OK 
9840: 29 3b 0a 20 20 2f 2a 20 46 61 6c 6c 20 74 68 72  );.  /* Fall thr
9850: 6f 75 67 68 20 74 6f 20 74 68 65 20 6e 65 78 74  ough to the next
9860: 20 63 61 73 65 2c 20 4f 50 5f 53 74 72 69 6e 67   case, OP_String
9870: 20 2a 2f 0a 7d 0a 20 20 0a 2f 2a 20 4f 70 63 6f   */.}.  ./* Opco
9880: 64 65 3a 20 53 74 72 69 6e 67 20 50 31 20 50 32  de: String P1 P2
9890: 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e   P3 P4 P5.** Syn
98a0: 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 27 50 34  opsis: r[P2]='P4
98b0: 27 20 28 6c 65 6e 3d 50 31 29 0a 2a 2a 0a 2a 2a  ' (len=P1).**.**
98c0: 20 54 68 65 20 73 74 72 69 6e 67 20 76 61 6c 75   The string valu
98d0: 65 20 50 34 20 6f 66 20 6c 65 6e 67 74 68 20 50  e P4 of length P
98e0: 31 20 28 62 79 74 65 73 29 20 69 73 20 73 74 6f  1 (bytes) is sto
98f0: 72 65 64 20 69 6e 20 72 65 67 69 73 74 65 72 20  red in register 
9900: 50 32 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 33 20  P2..**.** If P3 
9910: 69 73 20 6e 6f 74 20 7a 65 72 6f 20 61 6e 64 20  is not zero and 
9920: 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 72  the content of r
9930: 65 67 69 73 74 65 72 20 50 33 20 69 73 20 65 71  egister P3 is eq
9940: 75 61 6c 20 74 6f 20 50 35 2c 20 74 68 65 6e 0a  ual to P5, then.
9950: 2a 2a 20 74 68 65 20 64 61 74 61 74 79 70 65 20  ** the datatype 
9960: 6f 66 20 74 68 65 20 72 65 67 69 73 74 65 72 20  of the register 
9970: 50 32 20 69 73 20 63 6f 6e 76 65 72 74 65 64 20  P2 is converted 
9980: 74 6f 20 42 4c 4f 42 2e 20 20 54 68 65 20 63 6f  to BLOB.  The co
9990: 6e 74 65 6e 74 20 69 73 0a 2a 2a 20 74 68 65 20  ntent is.** the 
99a0: 73 61 6d 65 20 73 65 71 75 65 6e 63 65 20 6f 66  same sequence of
99b0: 20 62 79 74 65 73 2c 20 69 74 20 69 73 20 6d 65   bytes, it is me
99c0: 72 65 6c 79 20 69 6e 74 65 72 70 72 65 74 65 64  rely interpreted
99d0: 20 61 73 20 61 20 42 4c 4f 42 20 69 6e 73 74 65   as a BLOB inste
99e0: 61 64 0a 2a 2a 20 6f 66 20 61 20 73 74 72 69 6e  ad.** of a strin
99f0: 67 2c 20 61 73 20 69 66 20 69 74 20 68 61 64 20  g, as if it had 
9a00: 62 65 65 6e 20 43 41 53 54 2e 20 20 49 6e 20 6f  been CAST.  In o
9a10: 74 68 65 72 20 77 6f 72 64 73 3a 0a 2a 2a 0a 2a  ther words:.**.*
9a20: 2a 20 69 66 28 20 50 33 21 3d 30 20 61 6e 64 20  * if( P3!=0 and 
9a30: 72 65 67 5b 50 33 5d 3d 3d 50 35 20 29 20 72 65  reg[P3]==P5 ) re
9a40: 67 5b 50 32 5d 20 3a 3d 20 43 41 53 54 28 72 65  g[P2] := CAST(re
9a50: 67 5b 50 32 5d 20 61 73 20 42 4c 4f 42 29 0a 2a  g[P2] as BLOB).*
9a60: 2f 0a 63 61 73 65 20 4f 50 5f 53 74 72 69 6e 67  /.case OP_String
9a70: 3a 20 7b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  : {          /* 
9a80: 6f 75 74 32 20 2a 2f 0a 20 20 61 73 73 65 72 74  out2 */.  assert
9a90: 28 20 70 4f 70 2d 3e 70 34 2e 7a 21 3d 30 20 29  ( pOp->p4.z!=0 )
9aa0: 3b 0a 20 20 70 4f 75 74 20 3d 20 6f 75 74 32 50  ;.  pOut = out2P
9ab0: 72 65 72 65 6c 65 61 73 65 28 70 2c 20 70 4f 70  rerelease(p, pOp
9ac0: 29 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73  );.  pOut->flags
9ad0: 20 3d 20 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f 53   = MEM_Str|MEM_S
9ae0: 74 61 74 69 63 7c 4d 45 4d 5f 54 65 72 6d 3b 0a  tatic|MEM_Term;.
9af0: 20 20 70 4f 75 74 2d 3e 7a 20 3d 20 70 4f 70 2d    pOut->z = pOp-
9b00: 3e 70 34 2e 7a 3b 0a 20 20 70 4f 75 74 2d 3e 6e  >p4.z;.  pOut->n
9b10: 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 70 4f   = pOp->p1;.  pO
9b20: 75 74 2d 3e 65 6e 63 20 3d 20 65 6e 63 6f 64 69  ut->enc = encodi
9b30: 6e 67 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41 58  ng;.  UPDATE_MAX
9b40: 5f 42 4c 4f 42 53 49 5a 45 28 70 4f 75 74 29 3b  _BLOBSIZE(pOut);
9b50: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
9b60: 4c 49 4b 45 5f 44 4f 45 53 4e 54 5f 4d 41 54 43  LIKE_DOESNT_MATC
9b70: 48 5f 42 4c 4f 42 53 0a 20 20 69 66 28 20 70 4f  H_BLOBS.  if( pO
9b80: 70 2d 3e 70 33 3e 30 20 29 7b 0a 20 20 20 20 61  p->p3>0 ){.    a
9b90: 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c 3d  ssert( pOp->p3<=
9ba0: 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e  (p->nMem+1 - p->
9bb0: 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 20 20  nCursor) );.    
9bc0: 70 49 6e 33 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn3 = &aMem[pOp
9bd0: 2d 3e 70 33 5d 3b 0a 20 20 20 20 61 73 73 65 72  ->p3];.    asser
9be0: 74 28 20 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26  t( pIn3->flags &
9bf0: 20 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 20 20   MEM_Int );.    
9c00: 69 66 28 20 70 49 6e 33 2d 3e 75 2e 69 3d 3d 70  if( pIn3->u.i==p
9c10: 4f 70 2d 3e 70 35 20 29 20 70 4f 75 74 2d 3e 66  Op->p5 ) pOut->f
9c20: 6c 61 67 73 20 3d 20 4d 45 4d 5f 42 6c 6f 62 7c  lags = MEM_Blob|
9c30: 4d 45 4d 5f 53 74 61 74 69 63 7c 4d 45 4d 5f 54  MEM_Static|MEM_T
9c40: 65 72 6d 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 0a  erm;.  }.#endif.
9c50: 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
9c60: 70 63 6f 64 65 3a 20 4e 75 6c 6c 20 50 31 20 50  pcode: Null P1 P
9c70: 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f  2 P3 * *.** Syno
9c80: 70 73 69 73 3a 20 72 5b 50 32 2e 2e 50 33 5d 3d  psis: r[P2..P3]=
9c90: 4e 55 4c 4c 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65  NULL.**.** Write
9ca0: 20 61 20 4e 55 4c 4c 20 69 6e 74 6f 20 72 65 67   a NULL into reg
9cb0: 69 73 74 65 72 73 20 50 32 2e 20 20 49 66 20 50  isters P2.  If P
9cc0: 33 20 67 72 65 61 74 65 72 20 74 68 61 6e 20 50  3 greater than P
9cd0: 32 2c 20 74 68 65 6e 20 61 6c 73 6f 20 77 72 69  2, then also wri
9ce0: 74 65 0a 2a 2a 20 4e 55 4c 4c 20 69 6e 74 6f 20  te.** NULL into 
9cf0: 72 65 67 69 73 74 65 72 20 50 33 20 61 6e 64 20  register P3 and 
9d00: 65 76 65 72 79 20 72 65 67 69 73 74 65 72 20 69  every register i
9d10: 6e 20 62 65 74 77 65 65 6e 20 50 32 20 61 6e 64  n between P2 and
9d20: 20 50 33 2e 20 20 49 66 20 50 33 0a 2a 2a 20 69   P3.  If P3.** i
9d30: 73 20 6c 65 73 73 20 74 68 61 6e 20 50 32 20 28  s less than P2 (
9d40: 74 79 70 69 63 61 6c 6c 79 20 50 33 20 69 73 20  typically P3 is 
9d50: 7a 65 72 6f 29 20 74 68 65 6e 20 6f 6e 6c 79 20  zero) then only 
9d60: 72 65 67 69 73 74 65 72 20 50 32 20 69 73 0a 2a  register P2 is.*
9d70: 2a 20 73 65 74 20 74 6f 20 4e 55 4c 4c 2e 0a 2a  * set to NULL..*
9d80: 2a 0a 2a 2a 20 49 66 20 74 68 65 20 50 31 20 76  *.** If the P1 v
9d90: 61 6c 75 65 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f  alue is non-zero
9da0: 2c 20 74 68 65 6e 20 61 6c 73 6f 20 73 65 74 20  , then also set 
9db0: 74 68 65 20 4d 45 4d 5f 43 6c 65 61 72 65 64 20  the MEM_Cleared 
9dc0: 66 6c 61 67 20 73 6f 20 74 68 61 74 0a 2a 2a 20  flag so that.** 
9dd0: 4e 55 4c 4c 20 76 61 6c 75 65 73 20 77 69 6c 6c  NULL values will
9de0: 20 6e 6f 74 20 63 6f 6d 70 61 72 65 20 65 71 75   not compare equ
9df0: 61 6c 20 65 76 65 6e 20 69 66 20 53 51 4c 49 54  al even if SQLIT
9e00: 45 5f 4e 55 4c 4c 45 51 20 69 73 20 73 65 74 20  E_NULLEQ is set 
9e10: 6f 6e 0a 2a 2a 20 4f 50 5f 4e 65 20 6f 72 20 4f  on.** OP_Ne or O
9e20: 50 5f 45 71 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  P_Eq..*/.case OP
9e30: 5f 4e 75 6c 6c 3a 20 7b 20 20 20 20 20 20 20 20  _Null: {        
9e40: 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20 20     /* out2 */.  
9e50: 69 6e 74 20 63 6e 74 3b 0a 20 20 75 31 36 20 6e  int cnt;.  u16 n
9e60: 75 6c 6c 46 6c 61 67 3b 0a 20 20 70 4f 75 74 20  ullFlag;.  pOut 
9e70: 3d 20 6f 75 74 32 50 72 65 72 65 6c 65 61 73 65  = out2Prerelease
9e80: 28 70 2c 20 70 4f 70 29 3b 0a 20 20 63 6e 74 20  (p, pOp);.  cnt 
9e90: 3d 20 70 4f 70 2d 3e 70 33 2d 70 4f 70 2d 3e 70  = pOp->p3-pOp->p
9ea0: 32 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  2;.  assert( pOp
9eb0: 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31  ->p3<=(p->nMem+1
9ec0: 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29   - p->nCursor) )
9ed0: 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20  ;.  pOut->flags 
9ee0: 3d 20 6e 75 6c 6c 46 6c 61 67 20 3d 20 70 4f 70  = nullFlag = pOp
9ef0: 2d 3e 70 31 20 3f 20 28 4d 45 4d 5f 4e 75 6c 6c  ->p1 ? (MEM_Null
9f00: 7c 4d 45 4d 5f 43 6c 65 61 72 65 64 29 20 3a 20  |MEM_Cleared) : 
9f10: 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20 20 70 4f 75 74  MEM_Null;.  pOut
9f20: 2d 3e 6e 20 3d 20 30 3b 0a 23 69 66 64 65 66 20  ->n = 0;.#ifdef 
9f30: 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 70  SQLITE_DEBUG.  p
9f40: 4f 75 74 2d 3e 75 54 65 6d 70 20 3d 20 30 3b 0a  Out->uTemp = 0;.
9f50: 23 65 6e 64 69 66 0a 20 20 77 68 69 6c 65 28 20  #endif.  while( 
9f60: 63 6e 74 3e 30 20 29 7b 0a 20 20 20 20 70 4f 75  cnt>0 ){.    pOu
9f70: 74 2b 2b 3b 0a 20 20 20 20 6d 65 6d 41 62 6f 75  t++;.    memAbou
9f80: 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 4f 75  tToChange(p, pOu
9f90: 74 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56  t);.    sqlite3V
9fa0: 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 4f  dbeMemSetNull(pO
9fb0: 75 74 29 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 66  ut);.    pOut->f
9fc0: 6c 61 67 73 20 3d 20 6e 75 6c 6c 46 6c 61 67 3b  lags = nullFlag;
9fd0: 0a 20 20 20 20 70 4f 75 74 2d 3e 6e 20 3d 20 30  .    pOut->n = 0
9fe0: 3b 0a 20 20 20 20 63 6e 74 2d 2d 3b 0a 20 20 7d  ;.    cnt--;.  }
9ff0: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
a000: 4f 70 63 6f 64 65 3a 20 53 6f 66 74 4e 75 6c 6c  Opcode: SoftNull
a010: 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 20 53   P1 * * * *.** S
a020: 79 6e 6f 70 73 69 73 3a 20 72 5b 50 31 5d 3d 4e  ynopsis: r[P1]=N
a030: 55 4c 4c 0a 2a 2a 0a 2a 2a 20 53 65 74 20 72 65  ULL.**.** Set re
a040: 67 69 73 74 65 72 20 50 31 20 74 6f 20 68 61 76  gister P1 to hav
a050: 65 20 74 68 65 20 76 61 6c 75 65 20 4e 55 4c 4c  e the value NULL
a060: 20 61 73 20 73 65 65 6e 20 62 79 20 74 68 65 20   as seen by the 
a070: 4f 50 5f 4d 61 6b 65 52 65 63 6f 72 64 0a 2a 2a  OP_MakeRecord.**
a080: 20 69 6e 73 74 72 75 63 74 69 6f 6e 2c 20 62 75   instruction, bu
a090: 74 20 64 6f 20 6e 6f 74 20 66 72 65 65 20 61 6e  t do not free an
a0a0: 79 20 73 74 72 69 6e 67 20 6f 72 20 62 6c 6f 62  y string or blob
a0b0: 20 6d 65 6d 6f 72 79 20 61 73 73 6f 63 69 61 74   memory associat
a0c0: 65 64 20 77 69 74 68 0a 2a 2a 20 74 68 65 20 72  ed with.** the r
a0d0: 65 67 69 73 74 65 72 2c 20 73 6f 20 74 68 61 74  egister, so that
a0e0: 20 69 66 20 74 68 65 20 76 61 6c 75 65 20 77 61   if the value wa
a0f0: 73 20 61 20 73 74 72 69 6e 67 20 6f 72 20 62 6c  s a string or bl
a100: 6f 62 20 74 68 61 74 20 77 61 73 0a 2a 2a 20 70  ob that was.** p
a110: 72 65 76 69 6f 75 73 6c 79 20 63 6f 70 69 65 64  reviously copied
a120: 20 75 73 69 6e 67 20 4f 50 5f 53 43 6f 70 79 2c   using OP_SCopy,
a130: 20 74 68 65 20 63 6f 70 69 65 73 20 77 69 6c 6c   the copies will
a140: 20 63 6f 6e 74 69 6e 75 65 20 74 6f 20 62 65 20   continue to be 
a150: 76 61 6c 69 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f  valid..*/.case O
a160: 50 5f 53 6f 66 74 4e 75 6c 6c 3a 20 7b 0a 20 20  P_SoftNull: {.  
a170: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
a180: 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 3d 28 70  0 && pOp->p1<=(p
a190: 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43  ->nMem+1 - p->nC
a1a0: 75 72 73 6f 72 29 20 29 3b 0a 20 20 70 4f 75 74  ursor) );.  pOut
a1b0: 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31   = &aMem[pOp->p1
a1c0: 5d 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73  ];.  pOut->flags
a1d0: 20 3d 20 28 70 4f 75 74 2d 3e 66 6c 61 67 73 26   = (pOut->flags&
a1e0: 7e 28 4d 45 4d 5f 55 6e 64 65 66 69 6e 65 64 7c  ~(MEM_Undefined|
a1f0: 4d 45 4d 5f 41 66 66 4d 61 73 6b 29 29 7c 4d 45  MEM_AffMask))|ME
a200: 4d 5f 4e 75 6c 6c 3b 0a 20 20 62 72 65 61 6b 3b  M_Null;.  break;
a210: 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 42  .}../* Opcode: B
a220: 6c 6f 62 20 50 31 20 50 32 20 2a 20 50 34 20 2a  lob P1 P2 * P4 *
a230: 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b  .** Synopsis: r[
a240: 50 32 5d 3d 50 34 20 28 6c 65 6e 3d 50 31 29 0a  P2]=P4 (len=P1).
a250: 2a 2a 0a 2a 2a 20 50 34 20 70 6f 69 6e 74 73 20  **.** P4 points 
a260: 74 6f 20 61 20 62 6c 6f 62 20 6f 66 20 64 61 74  to a blob of dat
a270: 61 20 50 31 20 62 79 74 65 73 20 6c 6f 6e 67 2e  a P1 bytes long.
a280: 20 20 53 74 6f 72 65 20 74 68 69 73 0a 2a 2a 20    Store this.** 
a290: 62 6c 6f 62 20 69 6e 20 72 65 67 69 73 74 65 72  blob in register
a2a0: 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f   P2..*/.case OP_
a2b0: 42 6c 6f 62 3a 20 7b 20 20 20 20 20 20 20 20 20  Blob: {         
a2c0: 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a         /* out2 *
a2d0: 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  /.  assert( pOp-
a2e0: 3e 70 31 20 3c 3d 20 53 51 4c 49 54 45 5f 4d 41  >p1 <= SQLITE_MA
a2f0: 58 5f 4c 45 4e 47 54 48 20 29 3b 0a 20 20 70 4f  X_LENGTH );.  pO
a300: 75 74 20 3d 20 6f 75 74 32 50 72 65 72 65 6c 65  ut = out2Prerele
a310: 61 73 65 28 70 2c 20 70 4f 70 29 3b 0a 20 20 73  ase(p, pOp);.  s
a320: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74  qlite3VdbeMemSet
a330: 53 74 72 28 70 4f 75 74 2c 20 70 4f 70 2d 3e 70  Str(pOut, pOp->p
a340: 34 2e 7a 2c 20 70 4f 70 2d 3e 70 31 2c 20 30 2c  4.z, pOp->p1, 0,
a350: 20 30 29 3b 0a 20 20 70 4f 75 74 2d 3e 65 6e 63   0);.  pOut->enc
a360: 20 3d 20 65 6e 63 6f 64 69 6e 67 3b 0a 20 20 55   = encoding;.  U
a370: 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49  PDATE_MAX_BLOBSI
a380: 5a 45 28 70 4f 75 74 29 3b 0a 20 20 62 72 65 61  ZE(pOut);.  brea
a390: 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
a3a0: 20 56 61 72 69 61 62 6c 65 20 50 31 20 50 32 20   Variable P1 P2 
a3b0: 2a 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73  * P4 *.** Synops
a3c0: 69 73 3a 20 72 5b 50 32 5d 3d 70 61 72 61 6d 65  is: r[P2]=parame
a3d0: 74 65 72 28 50 31 2c 50 34 29 0a 2a 2a 0a 2a 2a  ter(P1,P4).**.**
a3e0: 20 54 72 61 6e 73 66 65 72 20 74 68 65 20 76 61   Transfer the va
a3f0: 6c 75 65 73 20 6f 66 20 62 6f 75 6e 64 20 70 61  lues of bound pa
a400: 72 61 6d 65 74 65 72 20 50 31 20 69 6e 74 6f 20  rameter P1 into 
a410: 72 65 67 69 73 74 65 72 20 50 32 0a 2a 2a 0a 2a  register P2.**.*
a420: 2a 20 49 66 20 74 68 65 20 70 61 72 61 6d 65 74  * If the paramet
a430: 65 72 20 69 73 20 6e 61 6d 65 64 2c 20 74 68 65  er is named, the
a440: 6e 20 69 74 73 20 6e 61 6d 65 20 61 70 70 65 61  n its name appea
a450: 72 73 20 69 6e 20 50 34 2e 0a 2a 2a 20 54 68 65  rs in P4..** The
a460: 20 50 34 20 76 61 6c 75 65 20 69 73 20 75 73 65   P4 value is use
a470: 64 20 62 79 20 73 71 6c 69 74 65 33 5f 62 69 6e  d by sqlite3_bin
a480: 64 5f 70 61 72 61 6d 65 74 65 72 5f 6e 61 6d 65  d_parameter_name
a490: 28 29 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56  ()..*/.case OP_V
a4a0: 61 72 69 61 62 6c 65 3a 20 7b 20 20 20 20 20 20  ariable: {      
a4b0: 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f        /* out2 */
a4c0: 0a 20 20 4d 65 6d 20 2a 70 56 61 72 3b 20 20 20  .  Mem *pVar;   
a4d0: 20 20 20 20 2f 2a 20 56 61 6c 75 65 20 62 65 69      /* Value bei
a4e0: 6e 67 20 74 72 61 6e 73 66 65 72 72 65 64 20 2a  ng transferred *
a4f0: 2f 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  /..  assert( pOp
a500: 2d 3e 70 31 3e 30 20 26 26 20 70 4f 70 2d 3e 70  ->p1>0 && pOp->p
a510: 31 3c 3d 70 2d 3e 6e 56 61 72 20 29 3b 0a 20 20  1<=p->nVar );.  
a520: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 2e  assert( pOp->p4.
a530: 7a 3d 3d 30 20 7c 7c 20 70 4f 70 2d 3e 70 34 2e  z==0 || pOp->p4.
a540: 7a 3d 3d 73 71 6c 69 74 65 33 56 4c 69 73 74 4e  z==sqlite3VListN
a550: 75 6d 54 6f 4e 61 6d 65 28 70 2d 3e 70 56 4c 69  umToName(p->pVLi
a560: 73 74 2c 70 4f 70 2d 3e 70 31 29 20 29 3b 0a 20  st,pOp->p1) );. 
a570: 20 70 56 61 72 20 3d 20 26 70 2d 3e 61 56 61 72   pVar = &p->aVar
a580: 5b 70 4f 70 2d 3e 70 31 20 2d 20 31 5d 3b 0a 20  [pOp->p1 - 1];. 
a590: 20 69 66 28 20 73 71 6c 69 74 65 33 56 64 62 65   if( sqlite3Vdbe
a5a0: 4d 65 6d 54 6f 6f 42 69 67 28 70 56 61 72 29 20  MemTooBig(pVar) 
a5b0: 29 7b 0a 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f  ){.    goto too_
a5c0: 62 69 67 3b 0a 20 20 7d 0a 20 20 70 4f 75 74 20  big;.  }.  pOut 
a5d0: 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d  = &aMem[pOp->p2]
a5e0: 3b 0a 20 20 69 66 28 20 56 64 62 65 4d 65 6d 44  ;.  if( VdbeMemD
a5f0: 79 6e 61 6d 69 63 28 70 4f 75 74 29 20 29 20 73  ynamic(pOut) ) s
a600: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74  qlite3VdbeMemSet
a610: 4e 75 6c 6c 28 70 4f 75 74 29 3b 0a 20 20 6d 65  Null(pOut);.  me
a620: 6d 63 70 79 28 70 4f 75 74 2c 20 70 56 61 72 2c  mcpy(pOut, pVar,
a630: 20 4d 45 4d 43 45 4c 4c 53 49 5a 45 29 3b 0a 20   MEMCELLSIZE);. 
a640: 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 26 3d 20   pOut->flags &= 
a650: 7e 28 4d 45 4d 5f 44 79 6e 7c 4d 45 4d 5f 45 70  ~(MEM_Dyn|MEM_Ep
a660: 68 65 6d 29 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c  hem);.  pOut->fl
a670: 61 67 73 20 7c 3d 20 4d 45 4d 5f 53 74 61 74 69  ags |= MEM_Stati
a680: 63 7c 4d 45 4d 5f 46 72 6f 6d 42 69 6e 64 3b 0a  c|MEM_FromBind;.
a690: 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f    UPDATE_MAX_BLO
a6a0: 42 53 49 5a 45 28 70 4f 75 74 29 3b 0a 20 20 62  BSIZE(pOut);.  b
a6b0: 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
a6c0: 64 65 3a 20 4d 6f 76 65 20 50 31 20 50 32 20 50  de: Move P1 P2 P
a6d0: 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69  3 * *.** Synopsi
a6e0: 73 3a 20 72 5b 50 32 40 50 33 5d 3d 72 5b 50 31  s: r[P2@P3]=r[P1
a6f0: 40 50 33 5d 0a 2a 2a 0a 2a 2a 20 4d 6f 76 65 20  @P3].**.** Move 
a700: 74 68 65 20 50 33 20 76 61 6c 75 65 73 20 69 6e  the P3 values in
a710: 20 72 65 67 69 73 74 65 72 20 50 31 2e 2e 50 31   register P1..P1
a720: 2b 50 33 2d 31 20 6f 76 65 72 20 69 6e 74 6f 0a  +P3-1 over into.
a730: 2a 2a 20 72 65 67 69 73 74 65 72 73 20 50 32 2e  ** registers P2.
a740: 2e 50 32 2b 50 33 2d 31 2e 20 20 52 65 67 69 73  .P2+P3-1.  Regis
a750: 74 65 72 73 20 50 31 2e 2e 50 31 2b 50 33 2d 31  ters P1..P1+P3-1
a760: 20 61 72 65 0a 2a 2a 20 6c 65 66 74 20 68 6f 6c   are.** left hol
a770: 64 69 6e 67 20 61 20 4e 55 4c 4c 2e 20 20 49 74  ding a NULL.  It
a780: 20 69 73 20 61 6e 20 65 72 72 6f 72 20 66 6f 72   is an error for
a790: 20 72 65 67 69 73 74 65 72 20 72 61 6e 67 65 73   register ranges
a7a0: 0a 2a 2a 20 50 31 2e 2e 50 31 2b 50 33 2d 31 20  .** P1..P1+P3-1 
a7b0: 61 6e 64 20 50 32 2e 2e 50 32 2b 50 33 2d 31 20  and P2..P2+P3-1 
a7c0: 74 6f 20 6f 76 65 72 6c 61 70 2e 20 20 49 74 20  to overlap.  It 
a7d0: 69 73 20 61 6e 20 65 72 72 6f 72 0a 2a 2a 20 66  is an error.** f
a7e0: 6f 72 20 50 33 20 74 6f 20 62 65 20 6c 65 73 73  or P3 to be less
a7f0: 20 74 68 61 6e 20 31 2e 0a 2a 2f 0a 63 61 73 65   than 1..*/.case
a800: 20 4f 50 5f 4d 6f 76 65 3a 20 7b 0a 20 20 69 6e   OP_Move: {.  in
a810: 74 20 6e 3b 20 20 20 20 20 20 20 20 20 20 20 2f  t n;           /
a820: 2a 20 4e 75 6d 62 65 72 20 6f 66 20 72 65 67 69  * Number of regi
a830: 73 74 65 72 73 20 6c 65 66 74 20 74 6f 20 63 6f  sters left to co
a840: 70 79 20 2a 2f 0a 20 20 69 6e 74 20 70 31 3b 20  py */.  int p1; 
a850: 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65 67 69           /* Regi
a860: 73 74 65 72 20 74 6f 20 63 6f 70 79 20 66 72 6f  ster to copy fro
a870: 6d 20 2a 2f 0a 20 20 69 6e 74 20 70 32 3b 20 20  m */.  int p2;  
a880: 20 20 20 20 20 20 20 20 2f 2a 20 52 65 67 69 73          /* Regis
a890: 74 65 72 20 74 6f 20 63 6f 70 79 20 74 6f 20 2a  ter to copy to *
a8a0: 2f 0a 0a 20 20 6e 20 3d 20 70 4f 70 2d 3e 70 33  /..  n = pOp->p3
a8b0: 3b 0a 20 20 70 31 20 3d 20 70 4f 70 2d 3e 70 31  ;.  p1 = pOp->p1
a8c0: 3b 0a 20 20 70 32 20 3d 20 70 4f 70 2d 3e 70 32  ;.  p2 = pOp->p2
a8d0: 3b 0a 20 20 61 73 73 65 72 74 28 20 6e 3e 30 20  ;.  assert( n>0 
a8e0: 26 26 20 70 31 3e 30 20 26 26 20 70 32 3e 30 20  && p1>0 && p2>0 
a8f0: 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 31 2b  );.  assert( p1+
a900: 6e 3c 3d 70 32 20 7c 7c 20 70 32 2b 6e 3c 3d 70  n<=p2 || p2+n<=p
a910: 31 20 29 3b 0a 0a 20 20 70 49 6e 31 20 3d 20 26  1 );..  pIn1 = &
a920: 61 4d 65 6d 5b 70 31 5d 3b 0a 20 20 70 4f 75 74  aMem[p1];.  pOut
a930: 20 3d 20 26 61 4d 65 6d 5b 70 32 5d 3b 0a 20 20   = &aMem[p2];.  
a940: 64 6f 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20  do{.    assert( 
a950: 70 4f 75 74 3c 3d 26 61 4d 65 6d 5b 28 70 2d 3e  pOut<=&aMem[(p->
a960: 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72  nMem+1 - p->nCur
a970: 73 6f 72 29 5d 20 29 3b 0a 20 20 20 20 61 73 73  sor)] );.    ass
a980: 65 72 74 28 20 70 49 6e 31 3c 3d 26 61 4d 65 6d  ert( pIn1<=&aMem
a990: 5b 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d  [(p->nMem+1 - p-
a9a0: 3e 6e 43 75 72 73 6f 72 29 5d 20 29 3b 0a 20 20  >nCursor)] );.  
a9b0: 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56    assert( memIsV
a9c0: 61 6c 69 64 28 70 49 6e 31 29 20 29 3b 0a 20 20  alid(pIn1) );.  
a9d0: 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e    memAboutToChan
a9e0: 67 65 28 70 2c 20 70 4f 75 74 29 3b 0a 20 20 20  ge(p, pOut);.   
a9f0: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 4d   sqlite3VdbeMemM
aa00: 6f 76 65 28 70 4f 75 74 2c 20 70 49 6e 31 29 3b  ove(pOut, pIn1);
aa10: 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44  .#ifdef SQLITE_D
aa20: 45 42 55 47 0a 20 20 20 20 69 66 28 20 70 4f 75  EBUG.    if( pOu
aa30: 74 2d 3e 70 53 63 6f 70 79 46 72 6f 6d 3e 3d 26  t->pScopyFrom>=&
aa40: 61 4d 65 6d 5b 70 31 5d 20 26 26 20 70 4f 75 74  aMem[p1] && pOut
aa50: 2d 3e 70 53 63 6f 70 79 46 72 6f 6d 3c 70 4f 75  ->pScopyFrom<pOu
aa60: 74 20 29 7b 0a 20 20 20 20 20 20 70 4f 75 74 2d  t ){.      pOut-
aa70: 3e 70 53 63 6f 70 79 46 72 6f 6d 20 2b 3d 20 70  >pScopyFrom += p
aa80: 4f 70 2d 3e 70 32 20 2d 20 70 31 3b 0a 20 20 20  Op->p2 - p1;.   
aa90: 20 7d 0a 23 65 6e 64 69 66 0a 20 20 20 20 44 65   }.#endif.    De
aaa0: 65 70 68 65 6d 65 72 61 6c 69 7a 65 28 70 4f 75  ephemeralize(pOu
aab0: 74 29 3b 0a 20 20 20 20 52 45 47 49 53 54 45 52  t);.    REGISTER
aac0: 5f 54 52 41 43 45 28 70 32 2b 2b 2c 20 70 4f 75  _TRACE(p2++, pOu
aad0: 74 29 3b 0a 20 20 20 20 70 49 6e 31 2b 2b 3b 0a  t);.    pIn1++;.
aae0: 20 20 20 20 70 4f 75 74 2b 2b 3b 0a 20 20 7d 77      pOut++;.  }w
aaf0: 68 69 6c 65 28 20 2d 2d 6e 20 29 3b 0a 20 20 62  hile( --n );.  b
ab00: 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
ab10: 64 65 3a 20 43 6f 70 79 20 50 31 20 50 32 20 50  de: Copy P1 P2 P
ab20: 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69  3 * *.** Synopsi
ab30: 73 3a 20 72 5b 50 32 40 50 33 2b 31 5d 3d 72 5b  s: r[P2@P3+1]=r[
ab40: 50 31 40 50 33 2b 31 5d 0a 2a 2a 0a 2a 2a 20 4d  P1@P3+1].**.** M
ab50: 61 6b 65 20 61 20 63 6f 70 79 20 6f 66 20 72 65  ake a copy of re
ab60: 67 69 73 74 65 72 73 20 50 31 2e 2e 50 31 2b 50  gisters P1..P1+P
ab70: 33 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 73  3 into registers
ab80: 20 50 32 2e 2e 50 32 2b 50 33 2e 0a 2a 2a 0a 2a   P2..P2+P3..**.*
ab90: 2a 20 54 68 69 73 20 69 6e 73 74 72 75 63 74 69  * This instructi
aba0: 6f 6e 20 6d 61 6b 65 73 20 61 20 64 65 65 70 20  on makes a deep 
abb0: 63 6f 70 79 20 6f 66 20 74 68 65 20 76 61 6c 75  copy of the valu
abc0: 65 2e 20 20 41 20 64 75 70 6c 69 63 61 74 65 0a  e.  A duplicate.
abd0: 2a 2a 20 69 73 20 6d 61 64 65 20 6f 66 20 61 6e  ** is made of an
abe0: 79 20 73 74 72 69 6e 67 20 6f 72 20 62 6c 6f 62  y string or blob
abf0: 20 63 6f 6e 73 74 61 6e 74 2e 20 20 53 65 65 20   constant.  See 
ac00: 61 6c 73 6f 20 4f 50 5f 53 43 6f 70 79 2e 0a 2a  also OP_SCopy..*
ac10: 2f 0a 63 61 73 65 20 4f 50 5f 43 6f 70 79 3a 20  /.case OP_Copy: 
ac20: 7b 0a 20 20 69 6e 74 20 6e 3b 0a 0a 20 20 6e 20  {.  int n;..  n 
ac30: 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 70 49 6e  = pOp->p3;.  pIn
ac40: 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  1 = &aMem[pOp->p
ac50: 31 5d 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d  1];.  pOut = &aM
ac60: 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 61  em[pOp->p2];.  a
ac70: 73 73 65 72 74 28 20 70 4f 75 74 21 3d 70 49 6e  ssert( pOut!=pIn
ac80: 31 20 29 3b 0a 20 20 77 68 69 6c 65 28 20 31 20  1 );.  while( 1 
ac90: 29 7b 0a 20 20 20 20 6d 65 6d 41 62 6f 75 74 54  ){.    memAboutT
aca0: 6f 43 68 61 6e 67 65 28 70 2c 20 70 4f 75 74 29  oChange(p, pOut)
acb0: 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  ;.    sqlite3Vdb
acc0: 65 4d 65 6d 53 68 61 6c 6c 6f 77 43 6f 70 79 28  eMemShallowCopy(
acd0: 70 4f 75 74 2c 20 70 49 6e 31 2c 20 4d 45 4d 5f  pOut, pIn1, MEM_
ace0: 45 70 68 65 6d 29 3b 0a 20 20 20 20 44 65 65 70  Ephem);.    Deep
acf0: 68 65 6d 65 72 61 6c 69 7a 65 28 70 4f 75 74 29  hemeralize(pOut)
ad00: 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ;.#ifdef SQLITE_
ad10: 44 45 42 55 47 0a 20 20 20 20 70 4f 75 74 2d 3e  DEBUG.    pOut->
ad20: 70 53 63 6f 70 79 46 72 6f 6d 20 3d 20 30 3b 0a  pScopyFrom = 0;.
ad30: 23 65 6e 64 69 66 0a 20 20 20 20 52 45 47 49 53  #endif.    REGIS
ad40: 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70  TER_TRACE(pOp->p
ad50: 32 2b 70 4f 70 2d 3e 70 33 2d 6e 2c 20 70 4f 75  2+pOp->p3-n, pOu
ad60: 74 29 3b 0a 20 20 20 20 69 66 28 20 28 6e 2d 2d  t);.    if( (n--
ad70: 29 3d 3d 30 20 29 20 62 72 65 61 6b 3b 0a 20 20  )==0 ) break;.  
ad80: 20 20 70 4f 75 74 2b 2b 3b 0a 20 20 20 20 70 49    pOut++;.    pI
ad90: 6e 31 2b 2b 3b 0a 20 20 7d 0a 20 20 62 72 65 61  n1++;.  }.  brea
ada0: 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
adb0: 20 53 43 6f 70 79 20 50 31 20 50 32 20 2a 20 2a   SCopy P1 P2 * *
adc0: 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
add0: 72 5b 50 32 5d 3d 72 5b 50 31 5d 0a 2a 2a 0a 2a  r[P2]=r[P1].**.*
ade0: 2a 20 4d 61 6b 65 20 61 20 73 68 61 6c 6c 6f 77  * Make a shallow
adf0: 20 63 6f 70 79 20 6f 66 20 72 65 67 69 73 74 65   copy of registe
ae00: 72 20 50 31 20 69 6e 74 6f 20 72 65 67 69 73 74  r P1 into regist
ae10: 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54 68 69  er P2..**.** Thi
ae20: 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 6d 61  s instruction ma
ae30: 6b 65 73 20 61 20 73 68 61 6c 6c 6f 77 20 63 6f  kes a shallow co
ae40: 70 79 20 6f 66 20 74 68 65 20 76 61 6c 75 65 2e  py of the value.
ae50: 20 20 49 66 20 74 68 65 20 76 61 6c 75 65 0a 2a    If the value.*
ae60: 2a 20 69 73 20 61 20 73 74 72 69 6e 67 20 6f 72  * is a string or
ae70: 20 62 6c 6f 62 2c 20 74 68 65 6e 20 74 68 65 20   blob, then the 
ae80: 63 6f 70 79 20 69 73 20 6f 6e 6c 79 20 61 20 70  copy is only a p
ae90: 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 0a 2a 2a  ointer to the.**
aea0: 20 6f 72 69 67 69 6e 61 6c 20 61 6e 64 20 68 65   original and he
aeb0: 6e 63 65 20 69 66 20 74 68 65 20 6f 72 69 67 69  nce if the origi
aec0: 6e 61 6c 20 63 68 61 6e 67 65 73 20 73 6f 20 77  nal changes so w
aed0: 69 6c 6c 20 74 68 65 20 63 6f 70 79 2e 0a 2a 2a  ill the copy..**
aee0: 20 57 6f 72 73 65 2c 20 69 66 20 74 68 65 20 6f   Worse, if the o
aef0: 72 69 67 69 6e 61 6c 20 69 73 20 64 65 61 6c 6c  riginal is deall
af00: 6f 63 61 74 65 64 2c 20 74 68 65 20 63 6f 70 79  ocated, the copy
af10: 20 62 65 63 6f 6d 65 73 20 69 6e 76 61 6c 69 64   becomes invalid
af20: 2e 0a 2a 2a 20 54 68 75 73 20 74 68 65 20 70 72  ..** Thus the pr
af30: 6f 67 72 61 6d 20 6d 75 73 74 20 67 75 61 72 61  ogram must guara
af40: 6e 74 65 65 20 74 68 61 74 20 74 68 65 20 6f 72  ntee that the or
af50: 69 67 69 6e 61 6c 20 77 69 6c 6c 20 6e 6f 74 20  iginal will not 
af60: 63 68 61 6e 67 65 0a 2a 2a 20 64 75 72 69 6e 67  change.** during
af70: 20 74 68 65 20 6c 69 66 65 74 69 6d 65 20 6f 66   the lifetime of
af80: 20 74 68 65 20 63 6f 70 79 2e 20 20 55 73 65 20   the copy.  Use 
af90: 4f 50 5f 43 6f 70 79 20 74 6f 20 6d 61 6b 65 20  OP_Copy to make 
afa0: 61 20 63 6f 6d 70 6c 65 74 65 0a 2a 2a 20 63 6f  a complete.** co
afb0: 70 79 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53  py..*/.case OP_S
afc0: 43 6f 70 79 3a 20 7b 20 20 20 20 20 20 20 20 20  Copy: {         
afd0: 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20 20     /* out2 */.  
afe0: 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn1 = &aMem[pOp
aff0: 2d 3e 70 31 5d 3b 0a 20 20 70 4f 75 74 20 3d 20  ->p1];.  pOut = 
b000: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a  &aMem[pOp->p2];.
b010: 20 20 61 73 73 65 72 74 28 20 70 4f 75 74 21 3d    assert( pOut!=
b020: 70 49 6e 31 20 29 3b 0a 20 20 73 71 6c 69 74 65  pIn1 );.  sqlite
b030: 33 56 64 62 65 4d 65 6d 53 68 61 6c 6c 6f 77 43  3VdbeMemShallowC
b040: 6f 70 79 28 70 4f 75 74 2c 20 70 49 6e 31 2c 20  opy(pOut, pIn1, 
b050: 4d 45 4d 5f 45 70 68 65 6d 29 3b 0a 23 69 66 64  MEM_Ephem);.#ifd
b060: 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a  ef SQLITE_DEBUG.
b070: 20 20 70 4f 75 74 2d 3e 70 53 63 6f 70 79 46 72    pOut->pScopyFr
b080: 6f 6d 20 3d 20 70 49 6e 31 3b 0a 20 20 70 4f 75  om = pIn1;.  pOu
b090: 74 2d 3e 6d 53 63 6f 70 79 46 6c 61 67 73 20 3d  t->mScopyFlags =
b0a0: 20 70 49 6e 31 2d 3e 66 6c 61 67 73 3b 0a 23 65   pIn1->flags;.#e
b0b0: 6e 64 69 66 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  ndif.  break;.}.
b0c0: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 6e 74 43  ./* Opcode: IntC
b0d0: 6f 70 79 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  opy P1 P2 * * *.
b0e0: 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50  ** Synopsis: r[P
b0f0: 32 5d 3d 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 54  2]=r[P1].**.** T
b100: 72 61 6e 73 66 65 72 20 74 68 65 20 69 6e 74 65  ransfer the inte
b110: 67 65 72 20 76 61 6c 75 65 20 68 65 6c 64 20 69  ger value held i
b120: 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 69 6e  n register P1 in
b130: 74 6f 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a  to register P2..
b140: 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 73 20 61 6e  **.** This is an
b150: 20 6f 70 74 69 6d 69 7a 65 64 20 76 65 72 73 69   optimized versi
b160: 6f 6e 20 6f 66 20 53 43 6f 70 79 20 74 68 61 74  on of SCopy that
b170: 20 77 6f 72 6b 73 20 6f 6e 6c 79 20 66 6f 72 20   works only for 
b180: 69 6e 74 65 67 65 72 0a 2a 2a 20 76 61 6c 75 65  integer.** value
b190: 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 6e  s..*/.case OP_In
b1a0: 74 43 6f 70 79 3a 20 7b 20 20 20 20 20 20 20 20  tCopy: {        
b1b0: 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20      /* out2 */. 
b1c0: 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn1 = &aMem[pO
b1d0: 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74  p->p1];.  assert
b1e0: 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26  ( (pIn1->flags &
b1f0: 20 4d 45 4d 5f 49 6e 74 29 21 3d 30 20 29 3b 0a   MEM_Int)!=0 );.
b200: 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70    pOut = &aMem[p
b210: 4f 70 2d 3e 70 32 5d 3b 0a 20 20 73 71 6c 69 74  Op->p2];.  sqlit
b220: 65 33 56 64 62 65 4d 65 6d 53 65 74 49 6e 74 36  e3VdbeMemSetInt6
b230: 34 28 70 4f 75 74 2c 20 70 49 6e 31 2d 3e 75 2e  4(pOut, pIn1->u.
b240: 69 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  i);.  break;.}..
b250: 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65 73 75 6c  /* Opcode: Resul
b260: 74 52 6f 77 20 50 31 20 50 32 20 2a 20 2a 20 2a  tRow P1 P2 * * *
b270: 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6f 75  .** Synopsis: ou
b280: 74 70 75 74 3d 72 5b 50 31 40 50 32 5d 0a 2a 2a  tput=r[P1@P2].**
b290: 0a 2a 2a 20 54 68 65 20 72 65 67 69 73 74 65 72  .** The register
b2a0: 73 20 50 31 20 74 68 72 6f 75 67 68 20 50 31 2b  s P1 through P1+
b2b0: 50 32 2d 31 20 63 6f 6e 74 61 69 6e 20 61 20 73  P2-1 contain a s
b2c0: 69 6e 67 6c 65 20 72 6f 77 20 6f 66 0a 2a 2a 20  ingle row of.** 
b2d0: 72 65 73 75 6c 74 73 2e 20 54 68 69 73 20 6f 70  results. This op
b2e0: 63 6f 64 65 20 63 61 75 73 65 73 20 74 68 65 20  code causes the 
b2f0: 73 71 6c 69 74 65 33 5f 73 74 65 70 28 29 20 63  sqlite3_step() c
b300: 61 6c 6c 20 74 6f 20 74 65 72 6d 69 6e 61 74 65  all to terminate
b310: 0a 2a 2a 20 77 69 74 68 20 61 6e 20 53 51 4c 49  .** with an SQLI
b320: 54 45 5f 52 4f 57 20 72 65 74 75 72 6e 20 63 6f  TE_ROW return co
b330: 64 65 20 61 6e 64 20 69 74 20 73 65 74 73 20 75  de and it sets u
b340: 70 20 74 68 65 20 73 71 6c 69 74 65 33 5f 73 74  p the sqlite3_st
b350: 6d 74 0a 2a 2a 20 73 74 72 75 63 74 75 72 65 20  mt.** structure 
b360: 74 6f 20 70 72 6f 76 69 64 65 20 61 63 63 65 73  to provide acces
b370: 73 20 74 6f 20 74 68 65 20 72 28 50 31 29 2e 2e  s to the r(P1)..
b380: 72 28 50 31 2b 50 32 2d 31 29 20 76 61 6c 75 65  r(P1+P2-1) value
b390: 73 20 61 73 0a 2a 2a 20 74 68 65 20 72 65 73 75  s as.** the resu
b3a0: 6c 74 20 72 6f 77 2e 0a 2a 2f 0a 63 61 73 65 20  lt row..*/.case 
b3b0: 4f 50 5f 52 65 73 75 6c 74 52 6f 77 3a 20 7b 0a  OP_ResultRow: {.
b3c0: 20 20 4d 65 6d 20 2a 70 4d 65 6d 3b 0a 20 20 69    Mem *pMem;.  i
b3d0: 6e 74 20 69 3b 0a 20 20 61 73 73 65 72 74 28 20  nt i;.  assert( 
b3e0: 70 2d 3e 6e 52 65 73 43 6f 6c 75 6d 6e 3d 3d 70  p->nResColumn==p
b3f0: 4f 70 2d 3e 70 32 20 29 3b 0a 20 20 61 73 73 65  Op->p2 );.  asse
b400: 72 74 28 20 70 4f 70 2d 3e 70 31 3e 30 20 29 3b  rt( pOp->p1>0 );
b410: 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
b420: 70 31 2b 70 4f 70 2d 3e 70 32 3c 3d 28 70 2d 3e  p1+pOp->p2<=(p->
b430: 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72  nMem+1 - p->nCur
b440: 73 6f 72 29 2b 31 20 29 3b 0a 0a 20 20 2f 2a 20  sor)+1 );..  /* 
b450: 49 66 20 74 68 69 73 20 73 74 61 74 65 6d 65 6e  If this statemen
b460: 74 20 68 61 73 20 76 69 6f 6c 61 74 65 64 20 69  t has violated i
b470: 6d 6d 65 64 69 61 74 65 20 66 6f 72 65 69 67 6e  mmediate foreign
b480: 20 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e 74 73   key constraints
b490: 2c 20 64 6f 0a 20 20 2a 2a 20 6e 6f 74 20 72 65  , do.  ** not re
b4a0: 74 75 72 6e 20 74 68 65 20 6e 75 6d 62 65 72 20  turn the number 
b4b0: 6f 66 20 72 6f 77 73 20 6d 6f 64 69 66 69 65 64  of rows modified
b4c0: 2e 20 41 6e 64 20 64 6f 20 6e 6f 74 20 52 45 4c  . And do not REL
b4d0: 45 41 53 45 20 74 68 65 20 73 74 61 74 65 6d 65  EASE the stateme
b4e0: 6e 74 0a 20 20 2a 2a 20 74 72 61 6e 73 61 63 74  nt.  ** transact
b4f0: 69 6f 6e 2e 20 49 74 20 6e 65 65 64 73 20 74 6f  ion. It needs to
b500: 20 62 65 20 72 6f 6c 6c 65 64 20 62 61 63 6b 2e   be rolled back.
b510: 20 20 2a 2f 0a 20 20 69 66 28 20 53 51 4c 49 54    */.  if( SQLIT
b520: 45 5f 4f 4b 21 3d 28 72 63 20 3d 20 73 71 6c 69  E_OK!=(rc = sqli
b530: 74 65 33 56 64 62 65 43 68 65 63 6b 46 6b 28 70  te3VdbeCheckFk(p
b540: 2c 20 30 29 29 20 29 7b 0a 20 20 20 20 61 73 73  , 0)) ){.    ass
b550: 65 72 74 28 20 64 62 2d 3e 66 6c 61 67 73 26 53  ert( db->flags&S
b560: 51 4c 49 54 45 5f 43 6f 75 6e 74 52 6f 77 73 20  QLITE_CountRows 
b570: 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  );.    assert( p
b580: 2d 3e 75 73 65 73 53 74 6d 74 4a 6f 75 72 6e 61  ->usesStmtJourna
b590: 6c 20 29 3b 0a 20 20 20 20 67 6f 74 6f 20 61 62  l );.    goto ab
b5a0: 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
b5b0: 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 49 66 20 74  ;.  }..  /* If t
b5c0: 68 65 20 53 51 4c 49 54 45 5f 43 6f 75 6e 74 52  he SQLITE_CountR
b5d0: 6f 77 73 20 66 6c 61 67 20 69 73 20 73 65 74 20  ows flag is set 
b5e0: 69 6e 20 73 71 6c 69 74 65 33 2e 66 6c 61 67 73  in sqlite3.flags
b5f0: 20 6d 61 73 6b 2c 20 74 68 65 6e 20 0a 20 20 2a   mask, then .  *
b600: 2a 20 44 4d 4c 20 73 74 61 74 65 6d 65 6e 74 73  * DML statements
b610: 20 69 6e 76 6f 6b 65 20 74 68 69 73 20 6f 70 63   invoke this opc
b620: 6f 64 65 20 74 6f 20 72 65 74 75 72 6e 20 74 68  ode to return th
b630: 65 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73  e number of rows
b640: 20 0a 20 20 2a 2a 20 6d 6f 64 69 66 69 65 64 20   .  ** modified 
b650: 74 6f 20 74 68 65 20 75 73 65 72 2e 20 54 68 69  to the user. Thi
b660: 73 20 69 73 20 74 68 65 20 6f 6e 6c 79 20 77 61  s is the only wa
b670: 79 20 74 68 61 74 20 61 20 56 4d 20 74 68 61 74  y that a VM that
b680: 0a 20 20 2a 2a 20 6f 70 65 6e 73 20 61 20 73 74  .  ** opens a st
b690: 61 74 65 6d 65 6e 74 20 74 72 61 6e 73 61 63 74  atement transact
b6a0: 69 6f 6e 20 6d 61 79 20 69 6e 76 6f 6b 65 20 74  ion may invoke t
b6b0: 68 69 73 20 6f 70 63 6f 64 65 2e 0a 20 20 2a 2a  his opcode..  **
b6c0: 0a 20 20 2a 2a 20 49 6e 20 63 61 73 65 20 74 68  .  ** In case th
b6d0: 69 73 20 69 73 20 73 75 63 68 20 61 20 73 74 61  is is such a sta
b6e0: 74 65 6d 65 6e 74 2c 20 63 6c 6f 73 65 20 61 6e  tement, close an
b6f0: 79 20 73 74 61 74 65 6d 65 6e 74 20 74 72 61 6e  y statement tran
b700: 73 61 63 74 69 6f 6e 0a 20 20 2a 2a 20 6f 70 65  saction.  ** ope
b710: 6e 65 64 20 62 79 20 74 68 69 73 20 56 4d 20 62  ned by this VM b
b720: 65 66 6f 72 65 20 72 65 74 75 72 6e 69 6e 67 20  efore returning 
b730: 63 6f 6e 74 72 6f 6c 20 74 6f 20 74 68 65 20 75  control to the u
b740: 73 65 72 2e 20 54 68 69 73 20 69 73 20 74 6f 0a  ser. This is to.
b750: 20 20 2a 2a 20 65 6e 73 75 72 65 20 74 68 61 74    ** ensure that
b760: 20 73 74 61 74 65 6d 65 6e 74 2d 74 72 61 6e 73   statement-trans
b770: 61 63 74 69 6f 6e 73 20 61 72 65 20 61 6c 77 61  actions are alwa
b780: 79 73 20 6e 65 73 74 65 64 2c 20 6e 6f 74 20 6f  ys nested, not o
b790: 76 65 72 6c 61 70 70 69 6e 67 2e 0a 20 20 2a 2a  verlapping..  **
b7a0: 20 49 66 20 74 68 65 20 6f 70 65 6e 20 73 74 61   If the open sta
b7b0: 74 65 6d 65 6e 74 2d 74 72 61 6e 73 61 63 74 69  tement-transacti
b7c0: 6f 6e 20 69 73 20 6e 6f 74 20 63 6c 6f 73 65 64  on is not closed
b7d0: 20 68 65 72 65 2c 20 74 68 65 6e 20 74 68 65 20   here, then the 
b7e0: 75 73 65 72 0a 20 20 2a 2a 20 6d 61 79 20 73 74  user.  ** may st
b7f0: 65 70 20 61 6e 6f 74 68 65 72 20 56 4d 20 74 68  ep another VM th
b800: 61 74 20 6f 70 65 6e 73 20 69 74 73 20 6f 77 6e  at opens its own
b810: 20 73 74 61 74 65 6d 65 6e 74 20 74 72 61 6e 73   statement trans
b820: 61 63 74 69 6f 6e 2e 20 54 68 69 73 0a 20 20 2a  action. This.  *
b830: 2a 20 6d 61 79 20 6c 65 61 64 20 74 6f 20 6f 76  * may lead to ov
b840: 65 72 6c 61 70 70 69 6e 67 20 73 74 61 74 65 6d  erlapping statem
b850: 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 73  ent transactions
b860: 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 54 68 65 20  ..  **.  ** The 
b870: 73 74 61 74 65 6d 65 6e 74 20 74 72 61 6e 73 61  statement transa
b880: 63 74 69 6f 6e 20 69 73 20 6e 65 76 65 72 20 61  ction is never a
b890: 20 74 6f 70 2d 6c 65 76 65 6c 20 74 72 61 6e 73   top-level trans
b8a0: 61 63 74 69 6f 6e 2e 20 20 48 65 6e 63 65 0a 20  action.  Hence. 
b8b0: 20 2a 2a 20 74 68 65 20 52 45 4c 45 41 53 45 20   ** the RELEASE 
b8c0: 63 61 6c 6c 20 62 65 6c 6f 77 20 63 61 6e 20 6e  call below can n
b8d0: 65 76 65 72 20 66 61 69 6c 2e 0a 20 20 2a 2f 0a  ever fail..  */.
b8e0: 20 20 61 73 73 65 72 74 28 20 70 2d 3e 69 53 74    assert( p->iSt
b8f0: 61 74 65 6d 65 6e 74 3d 3d 30 20 7c 7c 20 64 62  atement==0 || db
b900: 2d 3e 66 6c 61 67 73 26 53 51 4c 49 54 45 5f 43  ->flags&SQLITE_C
b910: 6f 75 6e 74 52 6f 77 73 20 29 3b 0a 20 20 72 63  ountRows );.  rc
b920: 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 43 6c   = sqlite3VdbeCl
b930: 6f 73 65 53 74 61 74 65 6d 65 6e 74 28 70 2c 20  oseStatement(p, 
b940: 53 41 56 45 50 4f 49 4e 54 5f 52 45 4c 45 41 53  SAVEPOINT_RELEAS
b950: 45 29 3b 0a 20 20 61 73 73 65 72 74 28 20 72 63  E);.  assert( rc
b960: 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 3b 0a 0a  ==SQLITE_OK );..
b970: 20 20 2f 2a 20 49 6e 76 61 6c 69 64 61 74 65 20    /* Invalidate 
b980: 61 6c 6c 20 65 70 68 65 6d 65 72 61 6c 20 63 75  all ephemeral cu
b990: 72 73 6f 72 20 72 6f 77 20 63 61 63 68 65 73 20  rsor row caches 
b9a0: 2a 2f 0a 20 20 70 2d 3e 63 61 63 68 65 43 74 72  */.  p->cacheCtr
b9b0: 20 3d 20 28 70 2d 3e 63 61 63 68 65 43 74 72 20   = (p->cacheCtr 
b9c0: 2b 20 32 29 7c 31 3b 0a 0a 20 20 2f 2a 20 4d 61  + 2)|1;..  /* Ma
b9d0: 6b 65 20 73 75 72 65 20 74 68 65 20 72 65 73 75  ke sure the resu
b9e0: 6c 74 73 20 6f 66 20 74 68 65 20 63 75 72 72 65  lts of the curre
b9f0: 6e 74 20 72 6f 77 20 61 72 65 20 5c 30 30 30 20  nt row are \000 
ba00: 74 65 72 6d 69 6e 61 74 65 64 0a 20 20 2a 2a 20  terminated.  ** 
ba10: 61 6e 64 20 68 61 76 65 20 61 6e 20 61 73 73 69  and have an assi
ba20: 67 6e 65 64 20 74 79 70 65 2e 20 20 54 68 65 20  gned type.  The 
ba30: 72 65 73 75 6c 74 73 20 61 72 65 20 64 65 2d 65  results are de-e
ba40: 70 68 65 6d 65 72 61 6c 69 7a 65 64 20 61 73 0a  phemeralized as.
ba50: 20 20 2a 2a 20 61 20 73 69 64 65 20 65 66 66 65    ** a side effe
ba60: 63 74 2e 0a 20 20 2a 2f 0a 20 20 70 4d 65 6d 20  ct..  */.  pMem 
ba70: 3d 20 70 2d 3e 70 52 65 73 75 6c 74 53 65 74 20  = p->pResultSet 
ba80: 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  = &aMem[pOp->p1]
ba90: 3b 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 70  ;.  for(i=0; i<p
baa0: 4f 70 2d 3e 70 32 3b 20 69 2b 2b 29 7b 0a 20 20  Op->p2; i++){.  
bab0: 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56    assert( memIsV
bac0: 61 6c 69 64 28 26 70 4d 65 6d 5b 69 5d 29 20 29  alid(&pMem[i]) )
bad0: 3b 0a 20 20 20 20 44 65 65 70 68 65 6d 65 72 61  ;.    Deephemera
bae0: 6c 69 7a 65 28 26 70 4d 65 6d 5b 69 5d 29 3b 0a  lize(&pMem[i]);.
baf0: 20 20 20 20 61 73 73 65 72 74 28 20 28 70 4d 65      assert( (pMe
bb00: 6d 5b 69 5d 2e 66 6c 61 67 73 20 26 20 4d 45 4d  m[i].flags & MEM
bb10: 5f 45 70 68 65 6d 29 3d 3d 30 0a 20 20 20 20 20  _Ephem)==0.     
bb20: 20 20 20 20 20 20 20 7c 7c 20 28 70 4d 65 6d 5b         || (pMem[
bb30: 69 5d 2e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f  i].flags & (MEM_
bb40: 53 74 72 7c 4d 45 4d 5f 42 6c 6f 62 29 29 3d 3d  Str|MEM_Blob))==
bb50: 30 20 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33  0 );.    sqlite3
bb60: 56 64 62 65 4d 65 6d 4e 75 6c 54 65 72 6d 69 6e  VdbeMemNulTermin
bb70: 61 74 65 28 26 70 4d 65 6d 5b 69 5d 29 3b 0a 20  ate(&pMem[i]);. 
bb80: 20 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43     REGISTER_TRAC
bb90: 45 28 70 4f 70 2d 3e 70 31 2b 69 2c 20 26 70 4d  E(pOp->p1+i, &pM
bba0: 65 6d 5b 69 5d 29 3b 0a 20 20 7d 0a 20 20 69 66  em[i]);.  }.  if
bbb0: 28 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c  ( db->mallocFail
bbc0: 65 64 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d  ed ) goto no_mem
bbd0: 3b 0a 0a 20 20 69 66 28 20 64 62 2d 3e 6d 54 72  ;..  if( db->mTr
bbe0: 61 63 65 20 26 20 53 51 4c 49 54 45 5f 54 52 41  ace & SQLITE_TRA
bbf0: 43 45 5f 52 4f 57 20 29 7b 0a 20 20 20 20 64 62  CE_ROW ){.    db
bc00: 2d 3e 78 54 72 61 63 65 28 53 51 4c 49 54 45 5f  ->xTrace(SQLITE_
bc10: 54 52 41 43 45 5f 52 4f 57 2c 20 64 62 2d 3e 70  TRACE_ROW, db->p
bc20: 54 72 61 63 65 41 72 67 2c 20 70 2c 20 30 29 3b  TraceArg, p, 0);
bc30: 0a 20 20 7d 0a 0a 20 20 2f 2a 20 52 65 74 75 72  .  }..  /* Retur
bc40: 6e 20 53 51 4c 49 54 45 5f 52 4f 57 0a 20 20 2a  n SQLITE_ROW.  *
bc50: 2f 0a 20 20 70 2d 3e 70 63 20 3d 20 28 69 6e 74  /.  p->pc = (int
bc60: 29 28 70 4f 70 20 2d 20 61 4f 70 29 20 2b 20 31  )(pOp - aOp) + 1
bc70: 3b 0a 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f  ;.  rc = SQLITE_
bc80: 52 4f 57 3b 0a 20 20 67 6f 74 6f 20 76 64 62 65  ROW;.  goto vdbe
bc90: 5f 72 65 74 75 72 6e 3b 0a 7d 0a 0a 2f 2a 20 4f  _return;.}../* O
bca0: 70 63 6f 64 65 3a 20 43 6f 6e 63 61 74 20 50 31  pcode: Concat P1
bcb0: 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79   P2 P3 * *.** Sy
bcc0: 6e 6f 70 73 69 73 3a 20 72 5b 50 33 5d 3d 72 5b  nopsis: r[P3]=r[
bcd0: 50 32 5d 2b 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20  P2]+r[P1].**.** 
bce0: 41 64 64 20 74 68 65 20 74 65 78 74 20 69 6e 20  Add the text in 
bcf0: 72 65 67 69 73 74 65 72 20 50 31 20 6f 6e 74 6f  register P1 onto
bd00: 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20   the end of the 
bd10: 74 65 78 74 20 69 6e 0a 2a 2a 20 72 65 67 69 73  text in.** regis
bd20: 74 65 72 20 50 32 20 61 6e 64 20 73 74 6f 72 65  ter P2 and store
bd30: 20 74 68 65 20 72 65 73 75 6c 74 20 69 6e 20 72   the result in r
bd40: 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a 20 49  egister P3..** I
bd50: 66 20 65 69 74 68 65 72 20 74 68 65 20 50 31 20  f either the P1 
bd60: 6f 72 20 50 32 20 74 65 78 74 20 61 72 65 20 4e  or P2 text are N
bd70: 55 4c 4c 20 74 68 65 6e 20 73 74 6f 72 65 20 4e  ULL then store N
bd80: 55 4c 4c 20 69 6e 20 50 33 2e 0a 2a 2a 0a 2a 2a  ULL in P3..**.**
bd90: 20 20 20 50 33 20 3d 20 50 32 20 7c 7c 20 50 31     P3 = P2 || P1
bda0: 0a 2a 2a 0a 2a 2a 20 49 74 20 69 73 20 69 6c 6c  .**.** It is ill
bdb0: 65 67 61 6c 20 66 6f 72 20 50 31 20 61 6e 64 20  egal for P1 and 
bdc0: 50 33 20 74 6f 20 62 65 20 74 68 65 20 73 61 6d  P3 to be the sam
bdd0: 65 20 72 65 67 69 73 74 65 72 2e 20 53 6f 6d 65  e register. Some
bde0: 74 69 6d 65 73 2c 0a 2a 2a 20 69 66 20 50 33 20  times,.** if P3 
bdf0: 69 73 20 74 68 65 20 73 61 6d 65 20 72 65 67 69  is the same regi
be00: 73 74 65 72 20 61 73 20 50 32 2c 20 74 68 65 20  ster as P2, the 
be10: 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 69  implementation i
be20: 73 20 61 62 6c 65 0a 2a 2a 20 74 6f 20 61 76 6f  s able.** to avo
be30: 69 64 20 61 20 6d 65 6d 63 70 79 28 29 2e 0a 2a  id a memcpy()..*
be40: 2f 0a 63 61 73 65 20 4f 50 5f 43 6f 6e 63 61 74  /.case OP_Concat
be50: 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  : {           /*
be60: 20 73 61 6d 65 20 61 73 20 54 4b 5f 43 4f 4e 43   same as TK_CONC
be70: 41 54 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75  AT, in1, in2, ou
be80: 74 33 20 2a 2f 0a 20 20 69 36 34 20 6e 42 79 74  t3 */.  i64 nByt
be90: 65 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54  e;          /* T
bea0: 6f 74 61 6c 20 73 69 7a 65 20 6f 66 20 74 68 65  otal size of the
beb0: 20 6f 75 74 70 75 74 20 73 74 72 69 6e 67 20 6f   output string o
bec0: 72 20 62 6c 6f 62 20 2a 2f 0a 20 20 75 31 36 20  r blob */.  u16 
bed0: 66 6c 61 67 73 31 3b 20 20 20 20 20 20 20 20 20  flags1;         
bee0: 2f 2a 20 49 6e 69 74 69 61 6c 20 66 6c 61 67 73  /* Initial flags
bef0: 20 66 6f 72 20 50 31 20 2a 2f 0a 20 20 75 31 36   for P1 */.  u16
bf00: 20 66 6c 61 67 73 32 3b 20 20 20 20 20 20 20 20   flags2;        
bf10: 20 2f 2a 20 49 6e 69 74 69 61 6c 20 66 6c 61 67   /* Initial flag
bf20: 73 20 66 6f 72 20 50 32 20 2a 2f 0a 0a 20 20 70  s for P2 */..  p
bf30: 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In1 = &aMem[pOp-
bf40: 3e 70 31 5d 3b 0a 20 20 70 49 6e 32 20 3d 20 26  >p1];.  pIn2 = &
bf50: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20  aMem[pOp->p2];. 
bf60: 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f   pOut = &aMem[pO
bf70: 70 2d 3e 70 33 5d 3b 0a 20 20 74 65 73 74 63 61  p->p3];.  testca
bf80: 73 65 28 20 70 49 6e 31 3d 3d 70 49 6e 32 20 29  se( pIn1==pIn2 )
bf90: 3b 0a 20 20 74 65 73 74 63 61 73 65 28 20 70 4f  ;.  testcase( pO
bfa0: 75 74 3d 3d 70 49 6e 32 20 29 3b 0a 20 20 61 73  ut==pIn2 );.  as
bfb0: 73 65 72 74 28 20 70 49 6e 31 21 3d 70 4f 75 74  sert( pIn1!=pOut
bfc0: 20 29 3b 0a 20 20 66 6c 61 67 73 31 20 3d 20 70   );.  flags1 = p
bfd0: 49 6e 31 2d 3e 66 6c 61 67 73 3b 0a 20 20 74 65  In1->flags;.  te
bfe0: 73 74 63 61 73 65 28 20 66 6c 61 67 73 31 20 26  stcase( flags1 &
bff0: 20 4d 45 4d 5f 4e 75 6c 6c 20 29 3b 0a 20 20 74   MEM_Null );.  t
c000: 65 73 74 63 61 73 65 28 20 70 49 6e 32 2d 3e 66  estcase( pIn2->f
c010: 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20  lags & MEM_Null 
c020: 29 3b 0a 20 20 69 66 28 20 28 66 6c 61 67 73 31  );.  if( (flags1
c030: 20 7c 20 70 49 6e 32 2d 3e 66 6c 61 67 73 29 20   | pIn2->flags) 
c040: 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20  & MEM_Null ){.  
c050: 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
c060: 53 65 74 4e 75 6c 6c 28 70 4f 75 74 29 3b 0a 20  SetNull(pOut);. 
c070: 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 20 20     break;.  }.  
c080: 69 66 28 20 28 66 6c 61 67 73 31 20 26 20 28 4d  if( (flags1 & (M
c090: 45 4d 5f 53 74 72 7c 4d 45 4d 5f 42 6c 6f 62 29  EM_Str|MEM_Blob)
c0a0: 29 3d 3d 30 20 29 7b 0a 20 20 20 20 69 66 28 20  )==0 ){.    if( 
c0b0: 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 74  sqlite3VdbeMemSt
c0c0: 72 69 6e 67 69 66 79 28 70 49 6e 31 2c 65 6e 63  ringify(pIn1,enc
c0d0: 6f 64 69 6e 67 2c 30 29 20 29 20 67 6f 74 6f 20  oding,0) ) goto 
c0e0: 6e 6f 5f 6d 65 6d 3b 0a 20 20 20 20 66 6c 61 67  no_mem;.    flag
c0f0: 73 31 20 3d 20 70 49 6e 31 2d 3e 66 6c 61 67 73  s1 = pIn1->flags
c100: 20 26 20 7e 4d 45 4d 5f 53 74 72 3b 0a 20 20 7d   & ~MEM_Str;.  }
c110: 65 6c 73 65 20 69 66 28 20 28 66 6c 61 67 73 31  else if( (flags1
c120: 20 26 20 4d 45 4d 5f 5a 65 72 6f 29 21 3d 30 20   & MEM_Zero)!=0 
c130: 29 7b 0a 20 20 20 20 69 66 28 20 73 71 6c 69 74  ){.    if( sqlit
c140: 65 33 56 64 62 65 4d 65 6d 45 78 70 61 6e 64 42  e3VdbeMemExpandB
c150: 6c 6f 62 28 70 49 6e 31 29 20 29 20 67 6f 74 6f  lob(pIn1) ) goto
c160: 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 20 20 66 6c 61   no_mem;.    fla
c170: 67 73 31 20 3d 20 70 49 6e 31 2d 3e 66 6c 61 67  gs1 = pIn1->flag
c180: 73 20 26 20 7e 4d 45 4d 5f 53 74 72 3b 0a 20 20  s & ~MEM_Str;.  
c190: 7d 0a 20 20 66 6c 61 67 73 32 20 3d 20 70 49 6e  }.  flags2 = pIn
c1a0: 32 2d 3e 66 6c 61 67 73 3b 0a 20 20 69 66 28 20  2->flags;.  if( 
c1b0: 28 66 6c 61 67 73 32 20 26 20 28 4d 45 4d 5f 53  (flags2 & (MEM_S
c1c0: 74 72 7c 4d 45 4d 5f 42 6c 6f 62 29 29 3d 3d 30  tr|MEM_Blob))==0
c1d0: 20 29 7b 0a 20 20 20 20 69 66 28 20 73 71 6c 69   ){.    if( sqli
c1e0: 74 65 33 56 64 62 65 4d 65 6d 53 74 72 69 6e 67  te3VdbeMemString
c1f0: 69 66 79 28 70 49 6e 32 2c 65 6e 63 6f 64 69 6e  ify(pIn2,encodin
c200: 67 2c 30 29 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d  g,0) ) goto no_m
c210: 65 6d 3b 0a 20 20 20 20 66 6c 61 67 73 32 20 3d  em;.    flags2 =
c220: 20 70 49 6e 32 2d 3e 66 6c 61 67 73 20 26 20 7e   pIn2->flags & ~
c230: 4d 45 4d 5f 53 74 72 3b 0a 20 20 7d 65 6c 73 65  MEM_Str;.  }else
c240: 20 69 66 28 20 28 66 6c 61 67 73 32 20 26 20 4d   if( (flags2 & M
c250: 45 4d 5f 5a 65 72 6f 29 21 3d 30 20 29 7b 0a 20  EM_Zero)!=0 ){. 
c260: 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 56 64     if( sqlite3Vd
c270: 62 65 4d 65 6d 45 78 70 61 6e 64 42 6c 6f 62 28  beMemExpandBlob(
c280: 70 49 6e 32 29 20 29 20 67 6f 74 6f 20 6e 6f 5f  pIn2) ) goto no_
c290: 6d 65 6d 3b 0a 20 20 20 20 66 6c 61 67 73 32 20  mem;.    flags2 
c2a0: 3d 20 70 49 6e 32 2d 3e 66 6c 61 67 73 20 26 20  = pIn2->flags & 
c2b0: 7e 4d 45 4d 5f 53 74 72 3b 0a 20 20 7d 0a 20 20  ~MEM_Str;.  }.  
c2c0: 6e 42 79 74 65 20 3d 20 70 49 6e 31 2d 3e 6e 20  nByte = pIn1->n 
c2d0: 2b 20 70 49 6e 32 2d 3e 6e 3b 0a 20 20 69 66 28  + pIn2->n;.  if(
c2e0: 20 6e 42 79 74 65 3e 64 62 2d 3e 61 4c 69 6d 69   nByte>db->aLimi
c2f0: 74 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c  t[SQLITE_LIMIT_L
c300: 45 4e 47 54 48 5d 20 29 7b 0a 20 20 20 20 67 6f  ENGTH] ){.    go
c310: 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a  to too_big;.  }.
c320: 20 20 69 66 28 20 73 71 6c 69 74 65 33 56 64 62    if( sqlite3Vdb
c330: 65 4d 65 6d 47 72 6f 77 28 70 4f 75 74 2c 20 28  eMemGrow(pOut, (
c340: 69 6e 74 29 6e 42 79 74 65 2b 33 2c 20 70 4f 75  int)nByte+3, pOu
c350: 74 3d 3d 70 49 6e 32 29 20 29 7b 0a 20 20 20 20  t==pIn2) ){.    
c360: 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d  goto no_mem;.  }
c370: 0a 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61  .  MemSetTypeFla
c380: 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 53 74 72 29  g(pOut, MEM_Str)
c390: 3b 0a 20 20 69 66 28 20 70 4f 75 74 21 3d 70 49  ;.  if( pOut!=pI
c3a0: 6e 32 20 29 7b 0a 20 20 20 20 6d 65 6d 63 70 79  n2 ){.    memcpy
c3b0: 28 70 4f 75 74 2d 3e 7a 2c 20 70 49 6e 32 2d 3e  (pOut->z, pIn2->
c3c0: 7a 2c 20 70 49 6e 32 2d 3e 6e 29 3b 0a 20 20 20  z, pIn2->n);.   
c3d0: 20 61 73 73 65 72 74 28 20 28 70 49 6e 32 2d 3e   assert( (pIn2->
c3e0: 66 6c 61 67 73 20 26 20 4d 45 4d 5f 44 79 6e 29  flags & MEM_Dyn)
c3f0: 20 3d 3d 20 28 66 6c 61 67 73 32 20 26 20 4d 45   == (flags2 & ME
c400: 4d 5f 44 79 6e 29 20 29 3b 0a 20 20 20 20 70 49  M_Dyn) );.    pI
c410: 6e 32 2d 3e 66 6c 61 67 73 20 3d 20 66 6c 61 67  n2->flags = flag
c420: 73 32 3b 0a 20 20 7d 0a 20 20 6d 65 6d 63 70 79  s2;.  }.  memcpy
c430: 28 26 70 4f 75 74 2d 3e 7a 5b 70 49 6e 32 2d 3e  (&pOut->z[pIn2->
c440: 6e 5d 2c 20 70 49 6e 31 2d 3e 7a 2c 20 70 49 6e  n], pIn1->z, pIn
c450: 31 2d 3e 6e 29 3b 0a 20 20 61 73 73 65 72 74 28  1->n);.  assert(
c460: 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20   (pIn1->flags & 
c470: 4d 45 4d 5f 44 79 6e 29 20 3d 3d 20 28 66 6c 61  MEM_Dyn) == (fla
c480: 67 73 31 20 26 20 4d 45 4d 5f 44 79 6e 29 20 29  gs1 & MEM_Dyn) )
c490: 3b 0a 20 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20  ;.  pIn1->flags 
c4a0: 3d 20 66 6c 61 67 73 31 3b 0a 20 20 70 4f 75 74  = flags1;.  pOut
c4b0: 2d 3e 7a 5b 6e 42 79 74 65 5d 3d 30 3b 0a 20 20  ->z[nByte]=0;.  
c4c0: 70 4f 75 74 2d 3e 7a 5b 6e 42 79 74 65 2b 31 5d  pOut->z[nByte+1]
c4d0: 20 3d 20 30 3b 0a 20 20 70 4f 75 74 2d 3e 7a 5b   = 0;.  pOut->z[
c4e0: 6e 42 79 74 65 2b 32 5d 20 3d 20 30 3b 0a 20 20  nByte+2] = 0;.  
c4f0: 70 4f 75 74 2d 3e 66 6c 61 67 73 20 7c 3d 20 4d  pOut->flags |= M
c500: 45 4d 5f 54 65 72 6d 3b 0a 20 20 70 4f 75 74 2d  EM_Term;.  pOut-
c510: 3e 6e 20 3d 20 28 69 6e 74 29 6e 42 79 74 65 3b  >n = (int)nByte;
c520: 0a 20 20 70 4f 75 74 2d 3e 65 6e 63 20 3d 20 65  .  pOut->enc = e
c530: 6e 63 6f 64 69 6e 67 3b 0a 20 20 55 50 44 41 54  ncoding;.  UPDAT
c540: 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70  E_MAX_BLOBSIZE(p
c550: 4f 75 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  Out);.  break;.}
c560: 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 41 64 64  ../* Opcode: Add
c570: 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a   P1 P2 P3 * *.**
c580: 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 33 5d   Synopsis: r[P3]
c590: 3d 72 5b 50 31 5d 2b 72 5b 50 32 5d 0a 2a 2a 0a  =r[P1]+r[P2].**.
c5a0: 2a 2a 20 41 64 64 20 74 68 65 20 76 61 6c 75 65  ** Add the value
c5b0: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20   in register P1 
c5c0: 74 6f 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20  to the value in 
c5d0: 72 65 67 69 73 74 65 72 20 50 32 0a 2a 2a 20 61  register P2.** a
c5e0: 6e 64 20 73 74 6f 72 65 20 74 68 65 20 72 65 73  nd store the res
c5f0: 75 6c 74 20 69 6e 20 72 65 67 69 73 74 65 72 20  ult in register 
c600: 50 33 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65 72  P3..** If either
c610: 20 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2c 20   input is NULL, 
c620: 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55  the result is NU
c630: 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65  LL..*/./* Opcode
c640: 3a 20 4d 75 6c 74 69 70 6c 79 20 50 31 20 50 32  : Multiply P1 P2
c650: 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70   P3 * *.** Synop
c660: 73 69 73 3a 20 72 5b 50 33 5d 3d 72 5b 50 31 5d  sis: r[P3]=r[P1]
c670: 2a 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a 0a 2a 2a 20  *r[P2].**.**.** 
c680: 4d 75 6c 74 69 70 6c 79 20 74 68 65 20 76 61 6c  Multiply the val
c690: 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
c6a0: 31 20 62 79 20 74 68 65 20 76 61 6c 75 65 20 69  1 by the value i
c6b0: 6e 20 72 65 67 69 73 74 65 72 20 50 32 0a 2a 2a  n register P2.**
c6c0: 20 61 6e 64 20 73 74 6f 72 65 20 74 68 65 20 72   and store the r
c6d0: 65 73 75 6c 74 20 69 6e 20 72 65 67 69 73 74 65  esult in registe
c6e0: 72 20 50 33 2e 0a 2a 2a 20 49 66 20 65 69 74 68  r P3..** If eith
c6f0: 65 72 20 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c  er input is NULL
c700: 2c 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20  , the result is 
c710: 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f  NULL..*/./* Opco
c720: 64 65 3a 20 53 75 62 74 72 61 63 74 20 50 31 20  de: Subtract P1 
c730: 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e  P2 P3 * *.** Syn
c740: 6f 70 73 69 73 3a 20 72 5b 50 33 5d 3d 72 5b 50  opsis: r[P3]=r[P
c750: 32 5d 2d 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 53  2]-r[P1].**.** S
c760: 75 62 74 72 61 63 74 20 74 68 65 20 76 61 6c 75  ubtract the valu
c770: 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31  e in register P1
c780: 20 66 72 6f 6d 20 74 68 65 20 76 61 6c 75 65 20   from the value 
c790: 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 0a 2a  in register P2.*
c7a0: 2a 20 61 6e 64 20 73 74 6f 72 65 20 74 68 65 20  * and store the 
c7b0: 72 65 73 75 6c 74 20 69 6e 20 72 65 67 69 73 74  result in regist
c7c0: 65 72 20 50 33 2e 0a 2a 2a 20 49 66 20 65 69 74  er P3..** If eit
c7d0: 68 65 72 20 69 6e 70 75 74 20 69 73 20 4e 55 4c  her input is NUL
c7e0: 4c 2c 20 74 68 65 20 72 65 73 75 6c 74 20 69 73  L, the result is
c7f0: 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63   NULL..*/./* Opc
c800: 6f 64 65 3a 20 44 69 76 69 64 65 20 50 31 20 50  ode: Divide P1 P
c810: 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f  2 P3 * *.** Syno
c820: 70 73 69 73 3a 20 72 5b 50 33 5d 3d 72 5b 50 32  psis: r[P3]=r[P2
c830: 5d 2f 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 44 69  ]/r[P1].**.** Di
c840: 76 69 64 65 20 74 68 65 20 76 61 6c 75 65 20 69  vide the value i
c850: 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 62 79  n register P1 by
c860: 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65   the value in re
c870: 67 69 73 74 65 72 20 50 32 0a 2a 2a 20 61 6e 64  gister P2.** and
c880: 20 73 74 6f 72 65 20 74 68 65 20 72 65 73 75 6c   store the resul
c890: 74 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33  t in register P3
c8a0: 20 28 50 33 3d 50 32 2f 50 31 29 2e 20 49 66 20   (P3=P2/P1). If 
c8b0: 74 68 65 20 76 61 6c 75 65 20 69 6e 20 0a 2a 2a  the value in .**
c8c0: 20 72 65 67 69 73 74 65 72 20 50 31 20 69 73 20   register P1 is 
c8d0: 7a 65 72 6f 2c 20 74 68 65 6e 20 74 68 65 20 72  zero, then the r
c8e0: 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 20 49  esult is NULL. I
c8f0: 66 20 65 69 74 68 65 72 20 69 6e 70 75 74 20 69  f either input i
c900: 73 20 0a 2a 2a 20 4e 55 4c 4c 2c 20 74 68 65 20  s .** NULL, the 
c910: 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a  result is NULL..
c920: 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65  */./* Opcode: Re
c930: 6d 61 69 6e 64 65 72 20 50 31 20 50 32 20 50 33  mainder P1 P2 P3
c940: 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73   * *.** Synopsis
c950: 3a 20 72 5b 50 33 5d 3d 72 5b 50 32 5d 25 72 5b  : r[P3]=r[P2]%r[
c960: 50 31 5d 0a 2a 2a 0a 2a 2a 20 43 6f 6d 70 75 74  P1].**.** Comput
c970: 65 20 74 68 65 20 72 65 6d 61 69 6e 64 65 72 20  e the remainder 
c980: 61 66 74 65 72 20 69 6e 74 65 67 65 72 20 72 65  after integer re
c990: 67 69 73 74 65 72 20 50 32 20 69 73 20 64 69 76  gister P2 is div
c9a0: 69 64 65 64 20 62 79 20 0a 2a 2a 20 72 65 67 69  ided by .** regi
c9b0: 73 74 65 72 20 50 31 20 61 6e 64 20 73 74 6f 72  ster P1 and stor
c9c0: 65 20 74 68 65 20 72 65 73 75 6c 74 20 69 6e 20  e the result in 
c9d0: 72 65 67 69 73 74 65 72 20 50 33 2e 20 0a 2a 2a  register P3. .**
c9e0: 20 49 66 20 74 68 65 20 76 61 6c 75 65 20 69 6e   If the value in
c9f0: 20 72 65 67 69 73 74 65 72 20 50 31 20 69 73 20   register P1 is 
ca00: 7a 65 72 6f 20 74 68 65 20 72 65 73 75 6c 74 20  zero the result 
ca10: 69 73 20 4e 55 4c 4c 2e 0a 2a 2a 20 49 66 20 65  is NULL..** If e
ca20: 69 74 68 65 72 20 6f 70 65 72 61 6e 64 20 69 73  ither operand is
ca30: 20 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c   NULL, the resul
ca40: 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61  t is NULL..*/.ca
ca50: 73 65 20 4f 50 5f 41 64 64 3a 20 20 20 20 20 20  se OP_Add:      
ca60: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
ca70: 73 61 6d 65 20 61 73 20 54 4b 5f 50 4c 55 53 2c  same as TK_PLUS,
ca80: 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20   in1, in2, out3 
ca90: 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 75 62 74 72  */.case OP_Subtr
caa0: 61 63 74 3a 20 20 20 20 20 20 20 20 20 20 20 20  act:            
cab0: 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f    /* same as TK_
cac0: 4d 49 4e 55 53 2c 20 69 6e 31 2c 20 69 6e 32 2c  MINUS, in1, in2,
cad0: 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20 4f 50   out3 */.case OP
cae0: 5f 4d 75 6c 74 69 70 6c 79 3a 20 20 20 20 20 20  _Multiply:      
caf0: 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20          /* same 
cb00: 61 73 20 54 4b 5f 53 54 41 52 2c 20 69 6e 31 2c  as TK_STAR, in1,
cb10: 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 63 61   in2, out3 */.ca
cb20: 73 65 20 4f 50 5f 44 69 76 69 64 65 3a 20 20 20  se OP_Divide:   
cb30: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
cb40: 73 61 6d 65 20 61 73 20 54 4b 5f 53 4c 41 53 48  same as TK_SLASH
cb50: 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33  , in1, in2, out3
cb60: 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65 6d 61   */.case OP_Rema
cb70: 69 6e 64 65 72 3a 20 7b 20 20 20 20 20 20 20 20  inder: {        
cb80: 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b     /* same as TK
cb90: 5f 52 45 4d 2c 20 69 6e 31 2c 20 69 6e 32 2c 20  _REM, in1, in2, 
cba0: 6f 75 74 33 20 2a 2f 0a 20 20 63 68 61 72 20 62  out3 */.  char b
cbb0: 49 6e 74 69 6e 74 3b 20 20 20 2f 2a 20 53 74 61  Intint;   /* Sta
cbc0: 72 74 65 64 20 6f 75 74 20 61 73 20 74 77 6f 20  rted out as two 
cbd0: 69 6e 74 65 67 65 72 20 6f 70 65 72 61 6e 64 73  integer operands
cbe0: 20 2a 2f 0a 20 20 75 31 36 20 66 6c 61 67 73 3b   */.  u16 flags;
cbf0: 20 20 20 20 20 20 2f 2a 20 43 6f 6d 62 69 6e 65        /* Combine
cc00: 64 20 4d 45 4d 5f 2a 20 66 6c 61 67 73 20 66 72  d MEM_* flags fr
cc10: 6f 6d 20 62 6f 74 68 20 69 6e 70 75 74 73 20 2a  om both inputs *
cc20: 2f 0a 20 20 75 31 36 20 74 79 70 65 31 3b 20 20  /.  u16 type1;  
cc30: 20 20 20 20 2f 2a 20 4e 75 6d 65 72 69 63 20 74      /* Numeric t
cc40: 79 70 65 20 6f 66 20 6c 65 66 74 20 6f 70 65 72  ype of left oper
cc50: 61 6e 64 20 2a 2f 0a 20 20 75 31 36 20 74 79 70  and */.  u16 typ
cc60: 65 32 3b 20 20 20 20 20 20 2f 2a 20 4e 75 6d 65  e2;      /* Nume
cc70: 72 69 63 20 74 79 70 65 20 6f 66 20 72 69 67 68  ric type of righ
cc80: 74 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20 69  t operand */.  i
cc90: 36 34 20 69 41 3b 20 20 20 20 20 20 20 20 20 2f  64 iA;         /
cca0: 2a 20 49 6e 74 65 67 65 72 20 76 61 6c 75 65 20  * Integer value 
ccb0: 6f 66 20 6c 65 66 74 20 6f 70 65 72 61 6e 64 20  of left operand 
ccc0: 2a 2f 0a 20 20 69 36 34 20 69 42 3b 20 20 20 20  */.  i64 iB;    
ccd0: 20 20 20 20 20 2f 2a 20 49 6e 74 65 67 65 72 20       /* Integer 
cce0: 76 61 6c 75 65 20 6f 66 20 72 69 67 68 74 20 6f  value of right o
ccf0: 70 65 72 61 6e 64 20 2a 2f 0a 20 20 64 6f 75 62  perand */.  doub
cd00: 6c 65 20 72 41 3b 20 20 20 20 20 20 2f 2a 20 52  le rA;      /* R
cd10: 65 61 6c 20 76 61 6c 75 65 20 6f 66 20 6c 65 66  eal value of lef
cd20: 74 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20 64  t operand */.  d
cd30: 6f 75 62 6c 65 20 72 42 3b 20 20 20 20 20 20 2f  ouble rB;      /
cd40: 2a 20 52 65 61 6c 20 76 61 6c 75 65 20 6f 66 20  * Real value of 
cd50: 72 69 67 68 74 20 6f 70 65 72 61 6e 64 20 2a 2f  right operand */
cd60: 0a 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d  ..  pIn1 = &aMem
cd70: 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 74 79 70  [pOp->p1];.  typ
cd80: 65 31 20 3d 20 6e 75 6d 65 72 69 63 54 79 70 65  e1 = numericType
cd90: 28 70 49 6e 31 29 3b 0a 20 20 70 49 6e 32 20 3d  (pIn1);.  pIn2 =
cda0: 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b   &aMem[pOp->p2];
cdb0: 0a 20 20 74 79 70 65 32 20 3d 20 6e 75 6d 65 72  .  type2 = numer
cdc0: 69 63 54 79 70 65 28 70 49 6e 32 29 3b 0a 20 20  icType(pIn2);.  
cdd0: 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pOut = &aMem[pOp
cde0: 2d 3e 70 33 5d 3b 0a 20 20 66 6c 61 67 73 20 3d  ->p3];.  flags =
cdf0: 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 7c 20 70   pIn1->flags | p
ce00: 49 6e 32 2d 3e 66 6c 61 67 73 3b 0a 20 20 69 66  In2->flags;.  if
ce10: 28 20 28 74 79 70 65 31 20 26 20 74 79 70 65 32  ( (type1 & type2
ce20: 20 26 20 4d 45 4d 5f 49 6e 74 29 21 3d 30 20 29   & MEM_Int)!=0 )
ce30: 7b 0a 20 20 20 20 69 41 20 3d 20 70 49 6e 31 2d  {.    iA = pIn1-
ce40: 3e 75 2e 69 3b 0a 20 20 20 20 69 42 20 3d 20 70  >u.i;.    iB = p
ce50: 49 6e 32 2d 3e 75 2e 69 3b 0a 20 20 20 20 62 49  In2->u.i;.    bI
ce60: 6e 74 69 6e 74 20 3d 20 31 3b 0a 20 20 20 20 73  ntint = 1;.    s
ce70: 77 69 74 63 68 28 20 70 4f 70 2d 3e 6f 70 63 6f  witch( pOp->opco
ce80: 64 65 20 29 7b 0a 20 20 20 20 20 20 63 61 73 65  de ){.      case
ce90: 20 4f 50 5f 41 64 64 3a 20 20 20 20 20 20 20 69   OP_Add:       i
cea0: 66 28 20 73 71 6c 69 74 65 33 41 64 64 49 6e 74  f( sqlite3AddInt
ceb0: 36 34 28 26 69 42 2c 69 41 29 20 29 20 67 6f 74  64(&iB,iA) ) got
cec0: 6f 20 66 70 5f 6d 61 74 68 3b 20 20 62 72 65 61  o fp_math;  brea
ced0: 6b 3b 0a 20 20 20 20 20 20 63 61 73 65 20 4f 50  k;.      case OP
cee0: 5f 53 75 62 74 72 61 63 74 3a 20 20 69 66 28 20  _Subtract:  if( 
cef0: 73 71 6c 69 74 65 33 53 75 62 49 6e 74 36 34 28  sqlite3SubInt64(
cf00: 26 69 42 2c 69 41 29 20 29 20 67 6f 74 6f 20 66  &iB,iA) ) goto f
cf10: 70 5f 6d 61 74 68 3b 20 20 62 72 65 61 6b 3b 0a  p_math;  break;.
cf20: 20 20 20 20 20 20 63 61 73 65 20 4f 50 5f 4d 75        case OP_Mu
cf30: 6c 74 69 70 6c 79 3a 20 20 69 66 28 20 73 71 6c  ltiply:  if( sql
cf40: 69 74 65 33 4d 75 6c 49 6e 74 36 34 28 26 69 42  ite3MulInt64(&iB
cf50: 2c 69 41 29 20 29 20 67 6f 74 6f 20 66 70 5f 6d  ,iA) ) goto fp_m
cf60: 61 74 68 3b 20 20 62 72 65 61 6b 3b 0a 20 20 20  ath;  break;.   
cf70: 20 20 20 63 61 73 65 20 4f 50 5f 44 69 76 69 64     case OP_Divid
cf80: 65 3a 20 7b 0a 20 20 20 20 20 20 20 20 69 66 28  e: {.        if(
cf90: 20 69 41 3d 3d 30 20 29 20 67 6f 74 6f 20 61 72   iA==0 ) goto ar
cfa0: 69 74 68 6d 65 74 69 63 5f 72 65 73 75 6c 74 5f  ithmetic_result_
cfb0: 69 73 5f 6e 75 6c 6c 3b 0a 20 20 20 20 20 20 20  is_null;.       
cfc0: 20 69 66 28 20 69 41 3d 3d 2d 31 20 26 26 20 69   if( iA==-1 && i
cfd0: 42 3d 3d 53 4d 41 4c 4c 45 53 54 5f 49 4e 54 36  B==SMALLEST_INT6
cfe0: 34 20 29 20 67 6f 74 6f 20 66 70 5f 6d 61 74 68  4 ) goto fp_math
cff0: 3b 0a 20 20 20 20 20 20 20 20 69 42 20 2f 3d 20  ;.        iB /= 
d000: 69 41 3b 0a 20 20 20 20 20 20 20 20 62 72 65 61  iA;.        brea
d010: 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20  k;.      }.     
d020: 20 64 65 66 61 75 6c 74 3a 20 7b 0a 20 20 20 20   default: {.    
d030: 20 20 20 20 69 66 28 20 69 41 3d 3d 30 20 29 20      if( iA==0 ) 
d040: 67 6f 74 6f 20 61 72 69 74 68 6d 65 74 69 63 5f  goto arithmetic_
d050: 72 65 73 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3b 0a  result_is_null;.
d060: 20 20 20 20 20 20 20 20 69 66 28 20 69 41 3d 3d          if( iA==
d070: 2d 31 20 29 20 69 41 20 3d 20 31 3b 0a 20 20 20  -1 ) iA = 1;.   
d080: 20 20 20 20 20 69 42 20 25 3d 20 69 41 3b 0a 20       iB %= iA;. 
d090: 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20         break;.  
d0a0: 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20      }.    }.    
d0b0: 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 69 42 3b 0a  pOut->u.i = iB;.
d0c0: 20 20 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c      MemSetTypeFl
d0d0: 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 49 6e 74  ag(pOut, MEM_Int
d0e0: 29 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 28  );.  }else if( (
d0f0: 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c  flags & MEM_Null
d100: 29 21 3d 30 20 29 7b 0a 20 20 20 20 67 6f 74 6f  )!=0 ){.    goto
d110: 20 61 72 69 74 68 6d 65 74 69 63 5f 72 65 73 75   arithmetic_resu
d120: 6c 74 5f 69 73 5f 6e 75 6c 6c 3b 0a 20 20 7d 65  lt_is_null;.  }e
d130: 6c 73 65 7b 0a 20 20 20 20 62 49 6e 74 69 6e 74  lse{.    bIntint
d140: 20 3d 20 30 3b 0a 66 70 5f 6d 61 74 68 3a 0a 20   = 0;.fp_math:. 
d150: 20 20 20 72 41 20 3d 20 73 71 6c 69 74 65 33 56     rA = sqlite3V
d160: 64 62 65 52 65 61 6c 56 61 6c 75 65 28 70 49 6e  dbeRealValue(pIn
d170: 31 29 3b 0a 20 20 20 20 72 42 20 3d 20 73 71 6c  1);.    rB = sql
d180: 69 74 65 33 56 64 62 65 52 65 61 6c 56 61 6c 75  ite3VdbeRealValu
d190: 65 28 70 49 6e 32 29 3b 0a 20 20 20 20 73 77 69  e(pIn2);.    swi
d1a0: 74 63 68 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65  tch( pOp->opcode
d1b0: 20 29 7b 0a 20 20 20 20 20 20 63 61 73 65 20 4f   ){.      case O
d1c0: 50 5f 41 64 64 3a 20 20 20 20 20 20 20 20 20 72  P_Add:         r
d1d0: 42 20 2b 3d 20 72 41 3b 20 20 20 20 20 20 20 62  B += rA;       b
d1e0: 72 65 61 6b 3b 0a 20 20 20 20 20 20 63 61 73 65  reak;.      case
d1f0: 20 4f 50 5f 53 75 62 74 72 61 63 74 3a 20 20 20   OP_Subtract:   
d200: 20 72 42 20 2d 3d 20 72 41 3b 20 20 20 20 20 20   rB -= rA;      
d210: 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 63 61   break;.      ca
d220: 73 65 20 4f 50 5f 4d 75 6c 74 69 70 6c 79 3a 20  se OP_Multiply: 
d230: 20 20 20 72 42 20 2a 3d 20 72 41 3b 20 20 20 20     rB *= rA;    
d240: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20     break;.      
d250: 63 61 73 65 20 4f 50 5f 44 69 76 69 64 65 3a 20  case OP_Divide: 
d260: 7b 0a 20 20 20 20 20 20 20 20 2f 2a 20 28 64 6f  {.        /* (do
d270: 75 62 6c 65 29 30 20 49 6e 20 63 61 73 65 20 6f  uble)0 In case o
d280: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c  f SQLITE_OMIT_FL
d290: 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 2e 2e 2e 20  OATING_POINT... 
d2a0: 2a 2f 0a 20 20 20 20 20 20 20 20 69 66 28 20 72  */.        if( r
d2b0: 41 3d 3d 28 64 6f 75 62 6c 65 29 30 20 29 20 67  A==(double)0 ) g
d2c0: 6f 74 6f 20 61 72 69 74 68 6d 65 74 69 63 5f 72  oto arithmetic_r
d2d0: 65 73 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3b 0a 20  esult_is_null;. 
d2e0: 20 20 20 20 20 20 20 72 42 20 2f 3d 20 72 41 3b         rB /= rA;
d2f0: 0a 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a  .        break;.
d300: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 64 65        }.      de
d310: 66 61 75 6c 74 3a 20 7b 0a 20 20 20 20 20 20 20  fault: {.       
d320: 20 69 41 20 3d 20 73 71 6c 69 74 65 33 56 64 62   iA = sqlite3Vdb
d330: 65 49 6e 74 56 61 6c 75 65 28 70 49 6e 31 29 3b  eIntValue(pIn1);
d340: 0a 20 20 20 20 20 20 20 20 69 42 20 3d 20 73 71  .        iB = sq
d350: 6c 69 74 65 33 56 64 62 65 49 6e 74 56 61 6c 75  lite3VdbeIntValu
d360: 65 28 70 49 6e 32 29 3b 0a 20 20 20 20 20 20 20  e(pIn2);.       
d370: 20 69 66 28 20 69 41 3d 3d 30 20 29 20 67 6f 74   if( iA==0 ) got
d380: 6f 20 61 72 69 74 68 6d 65 74 69 63 5f 72 65 73  o arithmetic_res
d390: 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3b 0a 20 20 20  ult_is_null;.   
d3a0: 20 20 20 20 20 69 66 28 20 69 41 3d 3d 2d 31 20       if( iA==-1 
d3b0: 29 20 69 41 20 3d 20 31 3b 0a 20 20 20 20 20 20  ) iA = 1;.      
d3c0: 20 20 72 42 20 3d 20 28 64 6f 75 62 6c 65 29 28    rB = (double)(
d3d0: 69 42 20 25 20 69 41 29 3b 0a 20 20 20 20 20 20  iB % iA);.      
d3e0: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d    break;.      }
d3f0: 0a 20 20 20 20 7d 0a 23 69 66 64 65 66 20 53 51  .    }.#ifdef SQ
d400: 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49  LITE_OMIT_FLOATI
d410: 4e 47 5f 50 4f 49 4e 54 0a 20 20 20 20 70 4f 75  NG_POINT.    pOu
d420: 74 2d 3e 75 2e 69 20 3d 20 72 42 3b 0a 20 20 20  t->u.i = rB;.   
d430: 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28   MemSetTypeFlag(
d440: 70 4f 75 74 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a  pOut, MEM_Int);.
d450: 23 65 6c 73 65 0a 20 20 20 20 69 66 28 20 73 71  #else.    if( sq
d460: 6c 69 74 65 33 49 73 4e 61 4e 28 72 42 29 20 29  lite3IsNaN(rB) )
d470: 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20 61 72 69  {.      goto ari
d480: 74 68 6d 65 74 69 63 5f 72 65 73 75 6c 74 5f 69  thmetic_result_i
d490: 73 5f 6e 75 6c 6c 3b 0a 20 20 20 20 7d 0a 20 20  s_null;.    }.  
d4a0: 20 20 70 4f 75 74 2d 3e 75 2e 72 20 3d 20 72 42    pOut->u.r = rB
d4b0: 3b 0a 20 20 20 20 4d 65 6d 53 65 74 54 79 70 65  ;.    MemSetType
d4c0: 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 52  Flag(pOut, MEM_R
d4d0: 65 61 6c 29 3b 0a 20 20 20 20 69 66 28 20 28 28  eal);.    if( ((
d4e0: 74 79 70 65 31 7c 74 79 70 65 32 29 26 28 4d 45  type1|type2)&(ME
d4f0: 4d 5f 52 65 61 6c 7c 4d 45 4d 5f 49 6e 74 52 65  M_Real|MEM_IntRe
d500: 61 6c 29 29 3d 3d 30 20 26 26 20 21 62 49 6e 74  al))==0 && !bInt
d510: 69 6e 74 20 29 7b 0a 20 20 20 20 20 20 73 71 6c  int ){.      sql
d520: 69 74 65 33 56 64 62 65 49 6e 74 65 67 65 72 41  ite3VdbeIntegerA
d530: 66 66 69 6e 69 74 79 28 70 4f 75 74 29 3b 0a 20  ffinity(pOut);. 
d540: 20 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20 7d 0a     }.#endif.  }.
d550: 20 20 62 72 65 61 6b 3b 0a 0a 61 72 69 74 68 6d    break;..arithm
d560: 65 74 69 63 5f 72 65 73 75 6c 74 5f 69 73 5f 6e  etic_result_is_n
d570: 75 6c 6c 3a 0a 20 20 73 71 6c 69 74 65 33 56 64  ull:.  sqlite3Vd
d580: 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 4f 75  beMemSetNull(pOu
d590: 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  t);.  break;.}..
d5a0: 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6f 6c 6c 53  /* Opcode: CollS
d5b0: 65 71 20 50 31 20 2a 20 2a 20 50 34 0a 2a 2a 0a  eq P1 * * P4.**.
d5c0: 2a 2a 20 50 34 20 69 73 20 61 20 70 6f 69 6e 74  ** P4 is a point
d5d0: 65 72 20 74 6f 20 61 20 43 6f 6c 6c 53 65 71 20  er to a CollSeq 
d5e0: 6f 62 6a 65 63 74 2e 20 49 66 20 74 68 65 20 6e  object. If the n
d5f0: 65 78 74 20 63 61 6c 6c 20 74 6f 20 61 20 75 73  ext call to a us
d600: 65 72 20 66 75 6e 63 74 69 6f 6e 0a 2a 2a 20 6f  er function.** o
d610: 72 20 61 67 67 72 65 67 61 74 65 20 63 61 6c 6c  r aggregate call
d620: 73 20 73 71 6c 69 74 65 33 47 65 74 46 75 6e 63  s sqlite3GetFunc
d630: 43 6f 6c 6c 53 65 71 28 29 2c 20 74 68 69 73 20  CollSeq(), this 
d640: 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e  collation sequen
d650: 63 65 20 77 69 6c 6c 0a 2a 2a 20 62 65 20 72 65  ce will.** be re
d660: 74 75 72 6e 65 64 2e 20 54 68 69 73 20 69 73 20  turned. This is 
d670: 75 73 65 64 20 62 79 20 74 68 65 20 62 75 69 6c  used by the buil
d680: 74 2d 69 6e 20 6d 69 6e 28 29 2c 20 6d 61 78 28  t-in min(), max(
d690: 29 20 61 6e 64 20 6e 75 6c 6c 69 66 28 29 0a 2a  ) and nullif().*
d6a0: 2a 20 66 75 6e 63 74 69 6f 6e 73 2e 0a 2a 2a 0a  * functions..**.
d6b0: 2a 2a 20 49 66 20 50 31 20 69 73 20 6e 6f 74 20  ** If P1 is not 
d6c0: 7a 65 72 6f 2c 20 74 68 65 6e 20 69 74 20 69 73  zero, then it is
d6d0: 20 61 20 72 65 67 69 73 74 65 72 20 74 68 61 74   a register that
d6e0: 20 61 20 73 75 62 73 65 71 75 65 6e 74 20 6d 69   a subsequent mi
d6f0: 6e 28 29 20 6f 72 0a 2a 2a 20 6d 61 78 28 29 20  n() or.** max() 
d700: 61 67 67 72 65 67 61 74 65 20 77 69 6c 6c 20 73  aggregate will s
d710: 65 74 20 74 6f 20 31 20 69 66 20 74 68 65 20 63  et to 1 if the c
d720: 75 72 72 65 6e 74 20 72 6f 77 20 69 73 20 6e 6f  urrent row is no
d730: 74 20 74 68 65 20 6d 69 6e 69 6d 75 6d 20 6f 72  t the minimum or
d740: 0a 2a 2a 20 6d 61 78 69 6d 75 6d 2e 20 20 54 68  .** maximum.  Th
d750: 65 20 50 31 20 72 65 67 69 73 74 65 72 20 69 73  e P1 register is
d760: 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 74 6f 20   initialized to 
d770: 30 20 62 79 20 74 68 69 73 20 69 6e 73 74 72 75  0 by this instru
d780: 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  ction..**.** The
d790: 20 69 6e 74 65 72 66 61 63 65 20 75 73 65 64 20   interface used 
d7a0: 62 79 20 74 68 65 20 69 6d 70 6c 65 6d 65 6e 74  by the implement
d7b0: 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 61 66 6f  ation of the afo
d7c0: 72 65 6d 65 6e 74 69 6f 6e 65 64 20 66 75 6e 63  rementioned func
d7d0: 74 69 6f 6e 73 0a 2a 2a 20 74 6f 20 72 65 74 72  tions.** to retr
d7e0: 69 65 76 65 20 74 68 65 20 63 6f 6c 6c 61 74 69  ieve the collati
d7f0: 6f 6e 20 73 65 71 75 65 6e 63 65 20 73 65 74 20  on sequence set 
d800: 62 79 20 74 68 69 73 20 6f 70 63 6f 64 65 20 69  by this opcode i
d810: 73 20 6e 6f 74 20 61 76 61 69 6c 61 62 6c 65 0a  s not available.
d820: 2a 2a 20 70 75 62 6c 69 63 6c 79 2e 20 20 4f 6e  ** publicly.  On
d830: 6c 79 20 62 75 69 6c 74 2d 69 6e 20 66 75 6e 63  ly built-in func
d840: 74 69 6f 6e 73 20 68 61 76 65 20 61 63 63 65 73  tions have acces
d850: 73 20 74 6f 20 74 68 69 73 20 66 65 61 74 75 72  s to this featur
d860: 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 6f  e..*/.case OP_Co
d870: 6c 6c 53 65 71 3a 20 7b 0a 20 20 61 73 73 65 72  llSeq: {.  asser
d880: 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d  t( pOp->p4type==
d890: 50 34 5f 43 4f 4c 4c 53 45 51 20 29 3b 0a 20 20  P4_COLLSEQ );.  
d8a0: 69 66 28 20 70 4f 70 2d 3e 70 31 20 29 7b 0a 20  if( pOp->p1 ){. 
d8b0: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
d8c0: 6d 53 65 74 49 6e 74 36 34 28 26 61 4d 65 6d 5b  mSetInt64(&aMem[
d8d0: 70 4f 70 2d 3e 70 31 5d 2c 20 30 29 3b 0a 20 20  pOp->p1], 0);.  
d8e0: 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  }.  break;.}../*
d8f0: 20 4f 70 63 6f 64 65 3a 20 42 69 74 41 6e 64 20   Opcode: BitAnd 
d900: 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20  P1 P2 P3 * *.** 
d910: 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 33 5d 3d  Synopsis: r[P3]=
d920: 72 5b 50 31 5d 26 72 5b 50 32 5d 0a 2a 2a 0a 2a  r[P1]&r[P2].**.*
d930: 2a 20 54 61 6b 65 20 74 68 65 20 62 69 74 2d 77  * Take the bit-w
d940: 69 73 65 20 41 4e 44 20 6f 66 20 74 68 65 20 76  ise AND of the v
d950: 61 6c 75 65 73 20 69 6e 20 72 65 67 69 73 74 65  alues in registe
d960: 72 20 50 31 20 61 6e 64 20 50 32 20 61 6e 64 0a  r P1 and P2 and.
d970: 2a 2a 20 73 74 6f 72 65 20 74 68 65 20 72 65 73  ** store the res
d980: 75 6c 74 20 69 6e 20 72 65 67 69 73 74 65 72 20  ult in register 
d990: 50 33 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65 72  P3..** If either
d9a0: 20 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2c 20   input is NULL, 
d9b0: 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55  the result is NU
d9c0: 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65  LL..*/./* Opcode
d9d0: 3a 20 42 69 74 4f 72 20 50 31 20 50 32 20 50 33  : BitOr P1 P2 P3
d9e0: 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73   * *.** Synopsis
d9f0: 3a 20 72 5b 50 33 5d 3d 72 5b 50 31 5d 7c 72 5b  : r[P3]=r[P1]|r[
da00: 50 32 5d 0a 2a 2a 0a 2a 2a 20 54 61 6b 65 20 74  P2].**.** Take t
da10: 68 65 20 62 69 74 2d 77 69 73 65 20 4f 52 20 6f  he bit-wise OR o
da20: 66 20 74 68 65 20 76 61 6c 75 65 73 20 69 6e 20  f the values in 
da30: 72 65 67 69 73 74 65 72 20 50 31 20 61 6e 64 20  register P1 and 
da40: 50 32 20 61 6e 64 0a 2a 2a 20 73 74 6f 72 65 20  P2 and.** store 
da50: 74 68 65 20 72 65 73 75 6c 74 20 69 6e 20 72 65  the result in re
da60: 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a 20 49 66  gister P3..** If
da70: 20 65 69 74 68 65 72 20 69 6e 70 75 74 20 69 73   either input is
da80: 20 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c   NULL, the resul
da90: 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a  t is NULL..*/./*
daa0: 20 4f 70 63 6f 64 65 3a 20 53 68 69 66 74 4c 65   Opcode: ShiftLe
dab0: 66 74 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a  ft P1 P2 P3 * *.
dac0: 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50  ** Synopsis: r[P
dad0: 33 5d 3d 72 5b 50 32 5d 3c 3c 72 5b 50 31 5d 0a  3]=r[P2]<<r[P1].
dae0: 2a 2a 0a 2a 2a 20 53 68 69 66 74 20 74 68 65 20  **.** Shift the 
daf0: 69 6e 74 65 67 65 72 20 76 61 6c 75 65 20 69 6e  integer value in
db00: 20 72 65 67 69 73 74 65 72 20 50 32 20 74 6f 20   register P2 to 
db10: 74 68 65 20 6c 65 66 74 20 62 79 20 74 68 65 0a  the left by the.
db20: 2a 2a 20 6e 75 6d 62 65 72 20 6f 66 20 62 69 74  ** number of bit
db30: 73 20 73 70 65 63 69 66 69 65 64 20 62 79 20 74  s specified by t
db40: 68 65 20 69 6e 74 65 67 65 72 20 69 6e 20 72 65  he integer in re
db50: 67 69 73 74 65 72 20 50 31 2e 0a 2a 2a 20 53 74  gister P1..** St
db60: 6f 72 65 20 74 68 65 20 72 65 73 75 6c 74 20 69  ore the result i
db70: 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a  n register P3..*
db80: 2a 20 49 66 20 65 69 74 68 65 72 20 69 6e 70 75  * If either inpu
db90: 74 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65 20 72  t is NULL, the r
dba0: 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a  esult is NULL..*
dbb0: 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 68 69  /./* Opcode: Shi
dbc0: 66 74 52 69 67 68 74 20 50 31 20 50 32 20 50 33  ftRight P1 P2 P3
dbd0: 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73   * *.** Synopsis
dbe0: 3a 20 72 5b 50 33 5d 3d 72 5b 50 32 5d 3e 3e 72  : r[P3]=r[P2]>>r
dbf0: 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 53 68 69 66 74  [P1].**.** Shift
dc00: 20 74 68 65 20 69 6e 74 65 67 65 72 20 76 61 6c   the integer val
dc10: 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
dc20: 32 20 74 6f 20 74 68 65 20 72 69 67 68 74 20 62  2 to the right b
dc30: 79 20 74 68 65 0a 2a 2a 20 6e 75 6d 62 65 72 20  y the.** number 
dc40: 6f 66 20 62 69 74 73 20 73 70 65 63 69 66 69 65  of bits specifie
dc50: 64 20 62 79 20 74 68 65 20 69 6e 74 65 67 65 72  d by the integer
dc60: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 2e   in register P1.
dc70: 0a 2a 2a 20 53 74 6f 72 65 20 74 68 65 20 72 65  .** Store the re
dc80: 73 75 6c 74 20 69 6e 20 72 65 67 69 73 74 65 72  sult in register
dc90: 20 50 33 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65   P3..** If eithe
dca0: 72 20 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2c  r input is NULL,
dcb0: 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e   the result is N
dcc0: 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ULL..*/.case OP_
dcd0: 42 69 74 41 6e 64 3a 20 20 20 20 20 20 20 20 20  BitAnd:         
dce0: 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20          /* same 
dcf0: 61 73 20 54 4b 5f 42 49 54 41 4e 44 2c 20 69 6e  as TK_BITAND, in
dd00: 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a  1, in2, out3 */.
dd10: 63 61 73 65 20 4f 50 5f 42 69 74 4f 72 3a 20 20  case OP_BitOr:  
dd20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dd30: 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 42 49  /* same as TK_BI
dd40: 54 4f 52 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f  TOR, in1, in2, o
dd50: 75 74 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 53  ut3 */.case OP_S
dd60: 68 69 66 74 4c 65 66 74 3a 20 20 20 20 20 20 20  hiftLeft:       
dd70: 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61         /* same a
dd80: 73 20 54 4b 5f 4c 53 48 49 46 54 2c 20 69 6e 31  s TK_LSHIFT, in1
dd90: 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 63  , in2, out3 */.c
dda0: 61 73 65 20 4f 50 5f 53 68 69 66 74 52 69 67 68  ase OP_ShiftRigh
ddb0: 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 2f  t: {           /
ddc0: 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 52 53 48  * same as TK_RSH
ddd0: 49 46 54 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f  IFT, in1, in2, o
dde0: 75 74 33 20 2a 2f 0a 20 20 69 36 34 20 69 41 3b  ut3 */.  i64 iA;
ddf0: 0a 20 20 75 36 34 20 75 41 3b 0a 20 20 69 36 34  .  u64 uA;.  i64
de00: 20 69 42 3b 0a 20 20 75 38 20 6f 70 3b 0a 0a 20   iB;.  u8 op;.. 
de10: 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn1 = &aMem[pO
de20: 70 2d 3e 70 31 5d 3b 0a 20 20 70 49 6e 32 20 3d  p->p1];.  pIn2 =
de30: 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b   &aMem[pOp->p2];
de40: 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b  .  pOut = &aMem[
de50: 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 69 66 28 20  pOp->p3];.  if( 
de60: 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 7c 20 70  (pIn1->flags | p
de70: 49 6e 32 2d 3e 66 6c 61 67 73 29 20 26 20 4d 45  In2->flags) & ME
de80: 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 73 71  M_Null ){.    sq
de90: 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e  lite3VdbeMemSetN
dea0: 75 6c 6c 28 70 4f 75 74 29 3b 0a 20 20 20 20 62  ull(pOut);.    b
deb0: 72 65 61 6b 3b 0a 20 20 7d 0a 20 20 69 41 20 3d  reak;.  }.  iA =
dec0: 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74 56   sqlite3VdbeIntV
ded0: 61 6c 75 65 28 70 49 6e 32 29 3b 0a 20 20 69 42  alue(pIn2);.  iB
dee0: 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e   = sqlite3VdbeIn
def0: 74 56 61 6c 75 65 28 70 49 6e 31 29 3b 0a 20 20  tValue(pIn1);.  
df00: 6f 70 20 3d 20 70 4f 70 2d 3e 6f 70 63 6f 64 65  op = pOp->opcode
df10: 3b 0a 20 20 69 66 28 20 6f 70 3d 3d 4f 50 5f 42  ;.  if( op==OP_B
df20: 69 74 41 6e 64 20 29 7b 0a 20 20 20 20 69 41 20  itAnd ){.    iA 
df30: 26 3d 20 69 42 3b 0a 20 20 7d 65 6c 73 65 20 69  &= iB;.  }else i
df40: 66 28 20 6f 70 3d 3d 4f 50 5f 42 69 74 4f 72 20  f( op==OP_BitOr 
df50: 29 7b 0a 20 20 20 20 69 41 20 7c 3d 20 69 42 3b  ){.    iA |= iB;
df60: 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 69 42 21  .  }else if( iB!
df70: 3d 30 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74  =0 ){.    assert
df80: 28 20 6f 70 3d 3d 4f 50 5f 53 68 69 66 74 52 69  ( op==OP_ShiftRi
df90: 67 68 74 20 7c 7c 20 6f 70 3d 3d 4f 50 5f 53 68  ght || op==OP_Sh
dfa0: 69 66 74 4c 65 66 74 20 29 3b 0a 0a 20 20 20 20  iftLeft );..    
dfb0: 2f 2a 20 49 66 20 73 68 69 66 74 69 6e 67 20 62  /* If shifting b
dfc0: 79 20 61 20 6e 65 67 61 74 69 76 65 20 61 6d 6f  y a negative amo
dfd0: 75 6e 74 2c 20 73 68 69 66 74 20 69 6e 20 74 68  unt, shift in th
dfe0: 65 20 6f 74 68 65 72 20 64 69 72 65 63 74 69 6f  e other directio
dff0: 6e 20 2a 2f 0a 20 20 20 20 69 66 28 20 69 42 3c  n */.    if( iB<
e000: 30 20 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72  0 ){.      asser
e010: 74 28 20 4f 50 5f 53 68 69 66 74 52 69 67 68 74  t( OP_ShiftRight
e020: 3d 3d 4f 50 5f 53 68 69 66 74 4c 65 66 74 2b 31  ==OP_ShiftLeft+1
e030: 20 29 3b 0a 20 20 20 20 20 20 6f 70 20 3d 20 32   );.      op = 2
e040: 2a 4f 50 5f 53 68 69 66 74 4c 65 66 74 20 2b 20  *OP_ShiftLeft + 
e050: 31 20 2d 20 6f 70 3b 0a 20 20 20 20 20 20 69 42  1 - op;.      iB
e060: 20 3d 20 69 42 3e 28 2d 36 34 29 20 3f 20 2d 69   = iB>(-64) ? -i
e070: 42 20 3a 20 36 34 3b 0a 20 20 20 20 7d 0a 0a 20  B : 64;.    }.. 
e080: 20 20 20 69 66 28 20 69 42 3e 3d 36 34 20 29 7b     if( iB>=64 ){
e090: 0a 20 20 20 20 20 20 69 41 20 3d 20 28 69 41 3e  .      iA = (iA>
e0a0: 3d 30 20 7c 7c 20 6f 70 3d 3d 4f 50 5f 53 68 69  =0 || op==OP_Shi
e0b0: 66 74 4c 65 66 74 29 20 3f 20 30 20 3a 20 2d 31  ftLeft) ? 0 : -1
e0c0: 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20  ;.    }else{.   
e0d0: 20 20 20 6d 65 6d 63 70 79 28 26 75 41 2c 20 26     memcpy(&uA, &
e0e0: 69 41 2c 20 73 69 7a 65 6f 66 28 75 41 29 29 3b  iA, sizeof(uA));
e0f0: 0a 20 20 20 20 20 20 69 66 28 20 6f 70 3d 3d 4f  .      if( op==O
e100: 50 5f 53 68 69 66 74 4c 65 66 74 20 29 7b 0a 20  P_ShiftLeft ){. 
e110: 20 20 20 20 20 20 20 75 41 20 3c 3c 3d 20 69 42         uA <<= iB
e120: 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20  ;.      }else{. 
e130: 20 20 20 20 20 20 20 75 41 20 3e 3e 3d 20 69 42         uA >>= iB
e140: 3b 0a 20 20 20 20 20 20 20 20 2f 2a 20 53 69 67  ;.        /* Sig
e150: 6e 2d 65 78 74 65 6e 64 20 6f 6e 20 61 20 72 69  n-extend on a ri
e160: 67 68 74 20 73 68 69 66 74 20 6f 66 20 61 20 6e  ght shift of a n
e170: 65 67 61 74 69 76 65 20 6e 75 6d 62 65 72 20 2a  egative number *
e180: 2f 0a 20 20 20 20 20 20 20 20 69 66 28 20 69 41  /.        if( iA
e190: 3c 30 20 29 20 75 41 20 7c 3d 20 28 28 28 28 75  <0 ) uA |= ((((u
e1a0: 36 34 29 30 78 66 66 66 66 66 66 66 66 29 3c 3c  64)0xffffffff)<<
e1b0: 33 32 29 7c 30 78 66 66 66 66 66 66 66 66 29 20  32)|0xffffffff) 
e1c0: 3c 3c 20 28 36 34 2d 69 42 29 3b 0a 20 20 20 20  << (64-iB);.    
e1d0: 20 20 7d 0a 20 20 20 20 20 20 6d 65 6d 63 70 79    }.      memcpy
e1e0: 28 26 69 41 2c 20 26 75 41 2c 20 73 69 7a 65 6f  (&iA, &uA, sizeo
e1f0: 66 28 69 41 29 29 3b 0a 20 20 20 20 7d 0a 20 20  f(iA));.    }.  
e200: 7d 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20  }.  pOut->u.i = 
e210: 69 41 3b 0a 20 20 4d 65 6d 53 65 74 54 79 70 65  iA;.  MemSetType
e220: 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 49  Flag(pOut, MEM_I
e230: 6e 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  nt);.  break;.}.
e240: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 41 64 64 49  ./* Opcode: AddI
e250: 6d 6d 20 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  mm  P1 P2 * * *.
e260: 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50  ** Synopsis: r[P
e270: 31 5d 3d 72 5b 50 31 5d 2b 50 32 0a 2a 2a 20 0a  1]=r[P1]+P2.** .
e280: 2a 2a 20 41 64 64 20 74 68 65 20 63 6f 6e 73 74  ** Add the const
e290: 61 6e 74 20 50 32 20 74 6f 20 74 68 65 20 76 61  ant P2 to the va
e2a0: 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  lue in register 
e2b0: 50 31 2e 0a 2a 2a 20 54 68 65 20 72 65 73 75 6c  P1..** The resul
e2c0: 74 20 69 73 20 61 6c 77 61 79 73 20 61 6e 20 69  t is always an i
e2d0: 6e 74 65 67 65 72 2e 0a 2a 2a 0a 2a 2a 20 54 6f  nteger..**.** To
e2e0: 20 66 6f 72 63 65 20 61 6e 79 20 72 65 67 69 73   force any regis
e2f0: 74 65 72 20 74 6f 20 62 65 20 61 6e 20 69 6e 74  ter to be an int
e300: 65 67 65 72 2c 20 6a 75 73 74 20 61 64 64 20 30  eger, just add 0
e310: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 41 64 64  ..*/.case OP_Add
e320: 49 6d 6d 3a 20 7b 20 20 20 20 20 20 20 20 20 20  Imm: {          
e330: 20 20 2f 2a 20 69 6e 31 20 2a 2f 0a 20 20 70 49    /* in1 */.  pI
e340: 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n1 = &aMem[pOp->
e350: 70 31 5d 3b 0a 20 20 6d 65 6d 41 62 6f 75 74 54  p1];.  memAboutT
e360: 6f 43 68 61 6e 67 65 28 70 2c 20 70 49 6e 31 29  oChange(p, pIn1)
e370: 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d  ;.  sqlite3VdbeM
e380: 65 6d 49 6e 74 65 67 65 72 69 66 79 28 70 49 6e  emIntegerify(pIn
e390: 31 29 3b 0a 20 20 70 49 6e 31 2d 3e 75 2e 69 20  1);.  pIn1->u.i 
e3a0: 2b 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 62 72  += pOp->p2;.  br
e3b0: 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
e3c0: 65 3a 20 4d 75 73 74 42 65 49 6e 74 20 50 31 20  e: MustBeInt P1 
e3d0: 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 0a 2a 2a 20  P2 * * *.** .** 
e3e0: 46 6f 72 63 65 20 74 68 65 20 76 61 6c 75 65 20  Force the value 
e3f0: 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 74  in register P1 t
e400: 6f 20 62 65 20 61 6e 20 69 6e 74 65 67 65 72 2e  o be an integer.
e410: 20 20 49 66 20 74 68 65 20 76 61 6c 75 65 0a 2a    If the value.*
e420: 2a 20 69 6e 20 50 31 20 69 73 20 6e 6f 74 20 61  * in P1 is not a
e430: 6e 20 69 6e 74 65 67 65 72 20 61 6e 64 20 63 61  n integer and ca
e440: 6e 6e 6f 74 20 62 65 20 63 6f 6e 76 65 72 74 65  nnot be converte
e450: 64 20 69 6e 74 6f 20 61 6e 20 69 6e 74 65 67 65  d into an intege
e460: 72 0a 2a 2a 20 77 69 74 68 6f 75 74 20 64 61 74  r.** without dat
e470: 61 20 6c 6f 73 73 2c 20 74 68 65 6e 20 6a 75 6d  a loss, then jum
e480: 70 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f  p immediately to
e490: 20 50 32 2c 20 6f 72 20 69 66 20 50 32 3d 3d 30   P2, or if P2==0
e4a0: 0a 2a 2a 20 72 61 69 73 65 20 61 6e 20 53 51 4c  .** raise an SQL
e4b0: 49 54 45 5f 4d 49 53 4d 41 54 43 48 20 65 78 63  ITE_MISMATCH exc
e4c0: 65 70 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20  eption..*/.case 
e4d0: 4f 50 5f 4d 75 73 74 42 65 49 6e 74 3a 20 7b 20  OP_MustBeInt: { 
e4e0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75             /* ju
e4f0: 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e  mp, in1 */.  pIn
e500: 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  1 = &aMem[pOp->p
e510: 31 5d 3b 0a 20 20 69 66 28 20 28 70 49 6e 31 2d  1];.  if( (pIn1-
e520: 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74  >flags & MEM_Int
e530: 29 3d 3d 30 20 29 7b 0a 20 20 20 20 61 70 70 6c  )==0 ){.    appl
e540: 79 41 66 66 69 6e 69 74 79 28 70 49 6e 31 2c 20  yAffinity(pIn1, 
e550: 53 51 4c 49 54 45 5f 41 46 46 5f 4e 55 4d 45 52  SQLITE_AFF_NUMER
e560: 49 43 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20  IC, encoding);. 
e570: 20 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c     if( (pIn1->fl
e580: 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29 3d 3d  ags & MEM_Int)==
e590: 30 20 29 7b 0a 20 20 20 20 20 20 56 64 62 65 42  0 ){.      VdbeB
e5a0: 72 61 6e 63 68 54 61 6b 65 6e 28 31 2c 20 32 29  ranchTaken(1, 2)
e5b0: 3b 0a 20 20 20 20 20 20 69 66 28 20 70 4f 70 2d  ;.      if( pOp-
e5c0: 3e 70 32 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  >p2==0 ){.      
e5d0: 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4d 49    rc = SQLITE_MI
e5e0: 53 4d 41 54 43 48 3b 0a 20 20 20 20 20 20 20 20  SMATCH;.        
e5f0: 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
e600: 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 7d  o_error;.      }
e610: 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 67 6f  else{.        go
e620: 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20  to jump_to_p2;. 
e630: 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d       }.    }.  }
e640: 0a 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b  .  VdbeBranchTak
e650: 65 6e 28 30 2c 20 32 29 3b 0a 20 20 4d 65 6d 53  en(0, 2);.  MemS
e660: 65 74 54 79 70 65 46 6c 61 67 28 70 49 6e 31 2c  etTypeFlag(pIn1,
e670: 20 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20 62 72 65   MEM_Int);.  bre
e680: 61 6b 3b 0a 7d 0a 0a 23 69 66 6e 64 65 66 20 53  ak;.}..#ifndef S
e690: 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54  QLITE_OMIT_FLOAT
e6a0: 49 4e 47 5f 50 4f 49 4e 54 0a 2f 2a 20 4f 70 63  ING_POINT./* Opc
e6b0: 6f 64 65 3a 20 52 65 61 6c 41 66 66 69 6e 69 74  ode: RealAffinit
e6c0: 79 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a  y P1 * * * *.**.
e6d0: 2a 2a 20 49 66 20 72 65 67 69 73 74 65 72 20 50  ** If register P
e6e0: 31 20 68 6f 6c 64 73 20 61 6e 20 69 6e 74 65 67  1 holds an integ
e6f0: 65 72 20 63 6f 6e 76 65 72 74 20 69 74 20 74 6f  er convert it to
e700: 20 61 20 72 65 61 6c 20 76 61 6c 75 65 2e 0a 2a   a real value..*
e710: 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65  *.** This opcode
e720: 20 69 73 20 75 73 65 64 20 77 68 65 6e 20 65 78   is used when ex
e730: 74 72 61 63 74 69 6e 67 20 69 6e 66 6f 72 6d 61  tracting informa
e740: 74 69 6f 6e 20 66 72 6f 6d 20 61 20 63 6f 6c 75  tion from a colu
e750: 6d 6e 20 74 68 61 74 0a 2a 2a 20 68 61 73 20 52  mn that.** has R
e760: 45 41 4c 20 61 66 66 69 6e 69 74 79 2e 20 20 53  EAL affinity.  S
e770: 75 63 68 20 63 6f 6c 75 6d 6e 20 76 61 6c 75 65  uch column value
e780: 73 20 6d 61 79 20 73 74 69 6c 6c 20 62 65 20 73  s may still be s
e790: 74 6f 72 65 64 20 61 73 0a 2a 2a 20 69 6e 74 65  tored as.** inte
e7a0: 67 65 72 73 2c 20 66 6f 72 20 73 70 61 63 65 20  gers, for space 
e7b0: 65 66 66 69 63 69 65 6e 63 79 2c 20 62 75 74 20  efficiency, but 
e7c0: 61 66 74 65 72 20 65 78 74 72 61 63 74 69 6f 6e  after extraction
e7d0: 20 77 65 20 77 61 6e 74 20 74 68 65 6d 0a 2a 2a   we want them.**
e7e0: 20 74 6f 20 68 61 76 65 20 6f 6e 6c 79 20 61 20   to have only a 
e7f0: 72 65 61 6c 20 76 61 6c 75 65 2e 0a 2a 2f 0a 63  real value..*/.c
e800: 61 73 65 20 4f 50 5f 52 65 61 6c 41 66 66 69 6e  ase OP_RealAffin
e810: 69 74 79 3a 20 7b 20 20 20 20 20 20 20 20 20 20  ity: {          
e820: 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 31 20 2a          /* in1 *
e830: 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d  /.  pIn1 = &aMem
e840: 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 69 66 28  [pOp->p1];.  if(
e850: 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 28   pIn1->flags & (
e860: 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 49 6e 74 52  MEM_Int|MEM_IntR
e870: 65 61 6c 29 20 29 7b 0a 20 20 20 20 74 65 73 74  eal) ){.    test
e880: 63 61 73 65 28 20 70 49 6e 31 2d 3e 66 6c 61 67  case( pIn1->flag
e890: 73 20 26 20 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20  s & MEM_Int );. 
e8a0: 20 20 20 74 65 73 74 63 61 73 65 28 20 70 49 6e     testcase( pIn
e8b0: 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49  1->flags & MEM_I
e8c0: 6e 74 52 65 61 6c 20 29 3b 0a 20 20 20 20 73 71  ntReal );.    sq
e8d0: 6c 69 74 65 33 56 64 62 65 4d 65 6d 52 65 61 6c  lite3VdbeMemReal
e8e0: 69 66 79 28 70 49 6e 31 29 3b 0a 20 20 7d 0a 20  ify(pIn1);.  }. 
e8f0: 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66   break;.}.#endif
e900: 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
e910: 5f 4f 4d 49 54 5f 43 41 53 54 0a 2f 2a 20 4f 70  _OMIT_CAST./* Op
e920: 63 6f 64 65 3a 20 43 61 73 74 20 50 31 20 50 32  code: Cast P1 P2
e930: 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73   * * *.** Synops
e940: 69 73 3a 20 61 66 66 69 6e 69 74 79 28 72 5b 50  is: affinity(r[P
e950: 31 5d 29 0a 2a 2a 0a 2a 2a 20 46 6f 72 63 65 20  1]).**.** Force 
e960: 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67  the value in reg
e970: 69 73 74 65 72 20 50 31 20 74 6f 20 62 65 20 74  ister P1 to be t
e980: 68 65 20 74 79 70 65 20 64 65 66 69 6e 65 64 20  he type defined 
e990: 62 79 20 50 32 2e 0a 2a 2a 20 0a 2a 2a 20 3c 75  by P2..** .** <u
e9a0: 6c 3e 0a 2a 2a 20 3c 6c 69 3e 20 50 32 3d 3d 27  l>.** <li> P2=='
e9b0: 41 27 20 26 72 61 72 72 3b 20 42 4c 4f 42 0a 2a  A' &rarr; BLOB.*
e9c0: 2a 20 3c 6c 69 3e 20 50 32 3d 3d 27 42 27 20 26  * <li> P2=='B' &
e9d0: 72 61 72 72 3b 20 54 45 58 54 0a 2a 2a 20 3c 6c  rarr; TEXT.** <l
e9e0: 69 3e 20 50 32 3d 3d 27 43 27 20 26 72 61 72 72  i> P2=='C' &rarr
e9f0: 3b 20 4e 55 4d 45 52 49 43 0a 2a 2a 20 3c 6c 69  ; NUMERIC.** <li
ea00: 3e 20 50 32 3d 3d 27 44 27 20 26 72 61 72 72 3b  > P2=='D' &rarr;
ea10: 20 49 4e 54 45 47 45 52 0a 2a 2a 20 3c 6c 69 3e   INTEGER.** <li>
ea20: 20 50 32 3d 3d 27 45 27 20 26 72 61 72 72 3b 20   P2=='E' &rarr; 
ea30: 52 45 41 4c 0a 2a 2a 20 3c 2f 75 6c 3e 0a 2a 2a  REAL.** </ul>.**
ea40: 0a 2a 2a 20 41 20 4e 55 4c 4c 20 76 61 6c 75 65  .** A NULL value
ea50: 20 69 73 20 6e 6f 74 20 63 68 61 6e 67 65 64 20   is not changed 
ea60: 62 79 20 74 68 69 73 20 72 6f 75 74 69 6e 65 2e  by this routine.
ea70: 20 20 49 74 20 72 65 6d 61 69 6e 73 20 4e 55 4c    It remains NUL
ea80: 4c 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 61  L..*/.case OP_Ca
ea90: 73 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  st: {           
eaa0: 20 20 20 20 20 20 20 2f 2a 20 69 6e 31 20 2a 2f         /* in1 */
eab0: 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
eac0: 70 32 3e 3d 53 51 4c 49 54 45 5f 41 46 46 5f 42  p2>=SQLITE_AFF_B
ead0: 4c 4f 42 20 26 26 20 70 4f 70 2d 3e 70 32 3c 3d  LOB && pOp->p2<=
eae0: 53 51 4c 49 54 45 5f 41 46 46 5f 52 45 41 4c 20  SQLITE_AFF_REAL 
eaf0: 29 3b 0a 20 20 74 65 73 74 63 61 73 65 28 20 70  );.  testcase( p
eb00: 4f 70 2d 3e 70 32 3d 3d 53 51 4c 49 54 45 5f 41  Op->p2==SQLITE_A
eb10: 46 46 5f 54 45 58 54 20 29 3b 0a 20 20 74 65 73  FF_TEXT );.  tes
eb20: 74 63 61 73 65 28 20 70 4f 70 2d 3e 70 32 3d 3d  tcase( pOp->p2==
eb30: 53 51 4c 49 54 45 5f 41 46 46 5f 42 4c 4f 42 20  SQLITE_AFF_BLOB 
eb40: 29 3b 0a 20 20 74 65 73 74 63 61 73 65 28 20 70  );.  testcase( p
eb50: 4f 70 2d 3e 70 32 3d 3d 53 51 4c 49 54 45 5f 41  Op->p2==SQLITE_A
eb60: 46 46 5f 4e 55 4d 45 52 49 43 20 29 3b 0a 20 20  FF_NUMERIC );.  
eb70: 74 65 73 74 63 61 73 65 28 20 70 4f 70 2d 3e 70  testcase( pOp->p
eb80: 32 3d 3d 53 51 4c 49 54 45 5f 41 46 46 5f 49 4e  2==SQLITE_AFF_IN
eb90: 54 45 47 45 52 20 29 3b 0a 20 20 74 65 73 74 63  TEGER );.  testc
eba0: 61 73 65 28 20 70 4f 70 2d 3e 70 32 3d 3d 53 51  ase( pOp->p2==SQ
ebb0: 4c 49 54 45 5f 41 46 46 5f 52 45 41 4c 20 29 3b  LITE_AFF_REAL );
ebc0: 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b  .  pIn1 = &aMem[
ebd0: 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 6d 65 6d 41  pOp->p1];.  memA
ebe0: 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20  boutToChange(p, 
ebf0: 70 49 6e 31 29 3b 0a 20 20 72 63 20 3d 20 45 78  pIn1);.  rc = Ex
ec00: 70 61 6e 64 42 6c 6f 62 28 70 49 6e 31 29 3b 0a  pandBlob(pIn1);.
ec10: 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
ec20: 43 61 73 74 28 70 49 6e 31 2c 20 70 4f 70 2d 3e  Cast(pIn1, pOp->
ec30: 70 32 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20  p2, encoding);. 
ec40: 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42   UPDATE_MAX_BLOB
ec50: 53 49 5a 45 28 70 49 6e 31 29 3b 0a 20 20 69 66  SIZE(pIn1);.  if
ec60: 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72  ( rc ) goto abor
ec70: 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
ec80: 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69    break;.}.#endi
ec90: 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54  f /* SQLITE_OMIT
eca0: 5f 43 41 53 54 20 2a 2f 0a 0a 2f 2a 20 4f 70 63  _CAST */../* Opc
ecb0: 6f 64 65 3a 20 45 71 20 50 31 20 50 32 20 50 33  ode: Eq P1 P2 P3
ecc0: 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73   P4 P5.** Synops
ecd0: 69 73 3a 20 49 46 20 72 5b 50 33 5d 3d 3d 72 5b  is: IF r[P3]==r[
ece0: 50 31 5d 0a 2a 2a 0a 2a 2a 20 43 6f 6d 70 61 72  P1].**.** Compar
ecf0: 65 20 74 68 65 20 76 61 6c 75 65 73 20 69 6e 20  e the values in 
ed00: 72 65 67 69 73 74 65 72 20 50 31 20 61 6e 64 20  register P1 and 
ed10: 50 33 2e 20 20 49 66 20 72 65 67 28 50 33 29 3d  P3.  If reg(P3)=
ed20: 3d 72 65 67 28 50 31 29 20 74 68 65 6e 0a 2a 2a  =reg(P1) then.**
ed30: 20 6a 75 6d 70 20 74 6f 20 61 64 64 72 65 73 73   jump to address
ed40: 20 50 32 2e 20 20 4f 72 20 69 66 20 74 68 65 20   P2.  Or if the 
ed50: 53 51 4c 49 54 45 5f 53 54 4f 52 45 50 32 20 66  SQLITE_STOREP2 f
ed60: 6c 61 67 20 69 73 20 73 65 74 20 69 6e 20 50 35  lag is set in P5
ed70: 2c 20 74 68 65 6e 0a 2a 2a 20 73 74 6f 72 65 20  , then.** store 
ed80: 74 68 65 20 72 65 73 75 6c 74 20 6f 66 20 63 6f  the result of co
ed90: 6d 70 61 72 69 73 6f 6e 20 69 6e 20 72 65 67 69  mparison in regi
eda0: 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54  ster P2..**.** T
edb0: 68 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 4d 41  he SQLITE_AFF_MA
edc0: 53 4b 20 70 6f 72 74 69 6f 6e 20 6f 66 20 50 35  SK portion of P5
edd0: 20 6d 75 73 74 20 62 65 20 61 6e 20 61 66 66 69   must be an affi
ede0: 6e 69 74 79 20 63 68 61 72 61 63 74 65 72 20 2d  nity character -
edf0: 0a 2a 2a 20 53 51 4c 49 54 45 5f 41 46 46 5f 54  .** SQLITE_AFF_T
ee00: 45 58 54 2c 20 53 51 4c 49 54 45 5f 41 46 46 5f  EXT, SQLITE_AFF_
ee10: 49 4e 54 45 47 45 52 2c 20 61 6e 64 20 73 6f 20  INTEGER, and so 
ee20: 66 6f 72 74 68 2e 20 41 6e 20 61 74 74 65 6d 70  forth. An attemp
ee30: 74 20 69 73 20 6d 61 64 65 20 0a 2a 2a 20 74 6f  t is made .** to
ee40: 20 63 6f 65 72 63 65 20 62 6f 74 68 20 69 6e 70   coerce both inp
ee50: 75 74 73 20 61 63 63 6f 72 64 69 6e 67 20 74 6f  uts according to
ee60: 20 74 68 69 73 20 61 66 66 69 6e 69 74 79 20 62   this affinity b
ee70: 65 66 6f 72 65 20 74 68 65 0a 2a 2a 20 63 6f 6d  efore the.** com
ee80: 70 61 72 69 73 6f 6e 20 69 73 20 6d 61 64 65 2e  parison is made.
ee90: 20 49 66 20 74 68 65 20 53 51 4c 49 54 45 5f 41   If the SQLITE_A
eea0: 46 46 5f 4d 41 53 4b 20 69 73 20 30 78 30 30 2c  FF_MASK is 0x00,
eeb0: 20 74 68 65 6e 20 6e 75 6d 65 72 69 63 0a 2a 2a   then numeric.**
eec0: 20 61 66 66 69 6e 69 74 79 20 69 73 20 75 73 65   affinity is use
eed0: 64 2e 20 4e 6f 74 65 20 74 68 61 74 20 74 68 65  d. Note that the
eee0: 20 61 66 66 69 6e 69 74 79 20 63 6f 6e 76 65 72   affinity conver
eef0: 73 69 6f 6e 73 20 61 72 65 20 73 74 6f 72 65 64  sions are stored
ef00: 0a 2a 2a 20 62 61 63 6b 20 69 6e 74 6f 20 74 68  .** back into th
ef10: 65 20 69 6e 70 75 74 20 72 65 67 69 73 74 65 72  e input register
ef20: 73 20 50 31 20 61 6e 64 20 50 33 2e 20 20 53 6f  s P1 and P3.  So
ef30: 20 74 68 69 73 20 6f 70 63 6f 64 65 20 63 61 6e   this opcode can
ef40: 20 63 61 75 73 65 0a 2a 2a 20 70 65 72 73 69 73   cause.** persis
ef50: 74 65 6e 74 20 63 68 61 6e 67 65 73 20 74 6f 20  tent changes to 
ef60: 72 65 67 69 73 74 65 72 73 20 50 31 20 61 6e 64  registers P1 and
ef70: 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 4f 6e 63 65 20   P3..**.** Once 
ef80: 61 6e 79 20 63 6f 6e 76 65 72 73 69 6f 6e 73 20  any conversions 
ef90: 68 61 76 65 20 74 61 6b 65 6e 20 70 6c 61 63 65  have taken place
efa0: 2c 20 61 6e 64 20 6e 65 69 74 68 65 72 20 76 61  , and neither va
efb0: 6c 75 65 20 69 73 20 4e 55 4c 4c 2c 20 0a 2a 2a  lue is NULL, .**
efc0: 20 74 68 65 20 76 61 6c 75 65 73 20 61 72 65 20   the values are 
efd0: 63 6f 6d 70 61 72 65 64 2e 20 49 66 20 62 6f 74  compared. If bot
efe0: 68 20 76 61 6c 75 65 73 20 61 72 65 20 62 6c 6f  h values are blo
eff0: 62 73 20 74 68 65 6e 20 6d 65 6d 63 6d 70 28 29  bs then memcmp()
f000: 20 69 73 0a 2a 2a 20 75 73 65 64 20 74 6f 20 64   is.** used to d
f010: 65 74 65 72 6d 69 6e 65 20 74 68 65 20 72 65 73  etermine the res
f020: 75 6c 74 73 20 6f 66 20 74 68 65 20 63 6f 6d 70  ults of the comp
f030: 61 72 69 73 6f 6e 2e 20 20 49 66 20 62 6f 74 68  arison.  If both
f040: 20 76 61 6c 75 65 73 0a 2a 2a 20 61 72 65 20 74   values.** are t
f050: 65 78 74 2c 20 74 68 65 6e 20 74 68 65 20 61 70  ext, then the ap
f060: 70 72 6f 70 72 69 61 74 65 20 63 6f 6c 6c 61 74  propriate collat
f070: 69 6e 67 20 66 75 6e 63 74 69 6f 6e 20 73 70 65  ing function spe
f080: 63 69 66 69 65 64 20 69 6e 0a 2a 2a 20 50 34 20  cified in.** P4 
f090: 69 73 20 75 73 65 64 20 74 6f 20 64 6f 20 74 68  is used to do th
f0a0: 65 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 20 20 49  e comparison.  I
f0b0: 66 20 50 34 20 69 73 20 6e 6f 74 20 73 70 65 63  f P4 is not spec
f0c0: 69 66 69 65 64 20 74 68 65 6e 0a 2a 2a 20 6d 65  ified then.** me
f0d0: 6d 63 6d 70 28 29 20 69 73 20 75 73 65 64 20 74  mcmp() is used t
f0e0: 6f 20 63 6f 6d 70 61 72 65 20 74 65 78 74 20 73  o compare text s
f0f0: 74 72 69 6e 67 2e 20 20 49 66 20 62 6f 74 68 20  tring.  If both 
f100: 76 61 6c 75 65 73 20 61 72 65 0a 2a 2a 20 6e 75  values are.** nu
f110: 6d 65 72 69 63 2c 20 74 68 65 6e 20 61 20 6e 75  meric, then a nu
f120: 6d 65 72 69 63 20 63 6f 6d 70 61 72 69 73 6f 6e  meric comparison
f130: 20 69 73 20 75 73 65 64 2e 20 49 66 20 74 68 65   is used. If the
f140: 20 74 77 6f 20 76 61 6c 75 65 73 0a 2a 2a 20 61   two values.** a
f150: 72 65 20 6f 66 20 64 69 66 66 65 72 65 6e 74 20  re of different 
f160: 74 79 70 65 73 2c 20 74 68 65 6e 20 6e 75 6d 62  types, then numb
f170: 65 72 73 20 61 72 65 20 63 6f 6e 73 69 64 65 72  ers are consider
f180: 65 64 20 6c 65 73 73 20 74 68 61 6e 0a 2a 2a 20  ed less than.** 
f190: 73 74 72 69 6e 67 73 20 61 6e 64 20 73 74 72 69  strings and stri
f1a0: 6e 67 73 20 61 72 65 20 63 6f 6e 73 69 64 65 72  ngs are consider
f1b0: 65 64 20 6c 65 73 73 20 74 68 61 6e 20 62 6c 6f  ed less than blo
f1c0: 62 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 53 51 4c  bs..**.** If SQL
f1d0: 49 54 45 5f 4e 55 4c 4c 45 51 20 69 73 20 73 65  ITE_NULLEQ is se
f1e0: 74 20 69 6e 20 50 35 20 74 68 65 6e 20 74 68 65  t in P5 then the
f1f0: 20 72 65 73 75 6c 74 20 6f 66 20 63 6f 6d 70 61   result of compa
f200: 72 69 73 6f 6e 20 69 73 20 61 6c 77 61 79 73 20  rison is always 
f210: 65 69 74 68 65 72 0a 2a 2a 20 74 72 75 65 20 6f  either.** true o
f220: 72 20 66 61 6c 73 65 20 61 6e 64 20 69 73 20 6e  r false and is n
f230: 65 76 65 72 20 4e 55 4c 4c 2e 20 20 49 66 20 62  ever NULL.  If b
f240: 6f 74 68 20 6f 70 65 72 61 6e 64 73 20 61 72 65  oth operands are
f250: 20 4e 55 4c 4c 20 74 68 65 6e 20 74 68 65 20 72   NULL then the r
f260: 65 73 75 6c 74 0a 2a 2a 20 6f 66 20 63 6f 6d 70  esult.** of comp
f270: 61 72 69 73 6f 6e 20 69 73 20 74 72 75 65 2e 20  arison is true. 
f280: 20 49 66 20 65 69 74 68 65 72 20 6f 70 65 72 61   If either opera
f290: 6e 64 20 69 73 20 4e 55 4c 4c 20 74 68 65 6e 20  nd is NULL then 
f2a0: 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 66 61  the result is fa
f2b0: 6c 73 65 2e 0a 2a 2a 20 49 66 20 6e 65 69 74 68  lse..** If neith
f2c0: 65 72 20 6f 70 65 72 61 6e 64 20 69 73 20 4e 55  er operand is NU
f2d0: 4c 4c 20 74 68 65 20 72 65 73 75 6c 74 20 69 73  LL the result is
f2e0: 20 74 68 65 20 73 61 6d 65 20 61 73 20 69 74 20   the same as it 
f2f0: 77 6f 75 6c 64 20 62 65 20 69 66 0a 2a 2a 20 74  would be if.** t
f300: 68 65 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51  he SQLITE_NULLEQ
f310: 20 66 6c 61 67 20 77 65 72 65 20 6f 6d 69 74 74   flag were omitt
f320: 65 64 20 66 72 6f 6d 20 50 35 2e 0a 2a 2a 0a 2a  ed from P5..**.*
f330: 2a 20 49 66 20 62 6f 74 68 20 53 51 4c 49 54 45  * If both SQLITE
f340: 5f 53 54 4f 52 45 50 32 20 61 6e 64 20 53 51 4c  _STOREP2 and SQL
f350: 49 54 45 5f 4b 45 45 50 4e 55 4c 4c 20 66 6c 61  ITE_KEEPNULL fla
f360: 67 73 20 61 72 65 20 73 65 74 20 74 68 65 6e 20  gs are set then 
f370: 74 68 65 0a 2a 2a 20 63 6f 6e 74 65 6e 74 20 6f  the.** content o
f380: 66 20 72 5b 50 32 5d 20 69 73 20 6f 6e 6c 79 20  f r[P2] is only 
f390: 63 68 61 6e 67 65 64 20 69 66 20 74 68 65 20 6e  changed if the n
f3a0: 65 77 20 76 61 6c 75 65 20 69 73 20 4e 55 4c 4c  ew value is NULL
f3b0: 20 6f 72 20 30 20 28 66 61 6c 73 65 29 2e 0a 2a   or 0 (false)..*
f3c0: 2a 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73  * In other words
f3d0: 2c 20 61 20 70 72 69 6f 72 20 72 5b 50 32 5d 20  , a prior r[P2] 
f3e0: 76 61 6c 75 65 20 77 69 6c 6c 20 6e 6f 74 20 62  value will not b
f3f0: 65 20 6f 76 65 72 77 72 69 74 74 65 6e 20 62 79  e overwritten by
f400: 20 31 20 28 74 72 75 65 29 2e 0a 2a 2f 0a 2f 2a   1 (true)..*/./*
f410: 20 4f 70 63 6f 64 65 3a 20 4e 65 20 50 31 20 50   Opcode: Ne P1 P
f420: 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79  2 P3 P4 P5.** Sy
f430: 6e 6f 70 73 69 73 3a 20 49 46 20 72 5b 50 33 5d  nopsis: IF r[P3]
f440: 21 3d 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 54 68  !=r[P1].**.** Th
f450: 69 73 20 77 6f 72 6b 73 20 6a 75 73 74 20 6c 69  is works just li
f460: 6b 65 20 74 68 65 20 45 71 20 6f 70 63 6f 64 65  ke the Eq opcode
f470: 20 65 78 63 65 70 74 20 74 68 61 74 20 74 68 65   except that the
f480: 20 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e 20 69   jump is taken i
f490: 66 0a 2a 2a 20 74 68 65 20 6f 70 65 72 61 6e 64  f.** the operand
f4a0: 73 20 69 6e 20 72 65 67 69 73 74 65 72 73 20 50  s in registers P
f4b0: 31 20 61 6e 64 20 50 33 20 61 72 65 20 6e 6f 74  1 and P3 are not
f4c0: 20 65 71 75 61 6c 2e 20 20 53 65 65 20 74 68 65   equal.  See the
f4d0: 20 45 71 20 6f 70 63 6f 64 65 20 66 6f 72 0a 2a   Eq opcode for.*
f4e0: 2a 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66  * additional inf
f4f0: 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20  ormation..**.** 
f500: 49 66 20 62 6f 74 68 20 53 51 4c 49 54 45 5f 53  If both SQLITE_S
f510: 54 4f 52 45 50 32 20 61 6e 64 20 53 51 4c 49 54  TOREP2 and SQLIT
f520: 45 5f 4b 45 45 50 4e 55 4c 4c 20 66 6c 61 67 73  E_KEEPNULL flags
f530: 20 61 72 65 20 73 65 74 20 74 68 65 6e 20 74 68   are set then th
f540: 65 0a 2a 2a 20 63 6f 6e 74 65 6e 74 20 6f 66 20  e.** content of 
f550: 72 5b 50 32 5d 20 69 73 20 6f 6e 6c 79 20 63 68  r[P2] is only ch
f560: 61 6e 67 65 64 20 69 66 20 74 68 65 20 6e 65 77  anged if the new
f570: 20 76 61 6c 75 65 20 69 73 20 4e 55 4c 4c 20 6f   value is NULL o
f580: 72 20 31 20 28 74 72 75 65 29 2e 0a 2a 2a 20 49  r 1 (true)..** I
f590: 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 61  n other words, a
f5a0: 20 70 72 69 6f 72 20 72 5b 50 32 5d 20 76 61 6c   prior r[P2] val
f5b0: 75 65 20 77 69 6c 6c 20 6e 6f 74 20 62 65 20 6f  ue will not be o
f5c0: 76 65 72 77 72 69 74 74 65 6e 20 62 79 20 30 20  verwritten by 0 
f5d0: 28 66 61 6c 73 65 29 2e 0a 2a 2f 0a 2f 2a 20 4f  (false)..*/./* O
f5e0: 70 63 6f 64 65 3a 20 4c 74 20 50 31 20 50 32 20  pcode: Lt P1 P2 
f5f0: 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f  P3 P4 P5.** Syno
f600: 70 73 69 73 3a 20 49 46 20 72 5b 50 33 5d 3c 72  psis: IF r[P3]<r
f610: 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 43 6f 6d 70 61  [P1].**.** Compa
f620: 72 65 20 74 68 65 20 76 61 6c 75 65 73 20 69 6e  re the values in
f630: 20 72 65 67 69 73 74 65 72 20 50 31 20 61 6e 64   register P1 and
f640: 20 50 33 2e 20 20 49 66 20 72 65 67 28 50 33 29   P3.  If reg(P3)
f650: 3c 72 65 67 28 50 31 29 20 74 68 65 6e 0a 2a 2a  <reg(P1) then.**
f660: 20 6a 75 6d 70 20 74 6f 20 61 64 64 72 65 73 73   jump to address
f670: 20 50 32 2e 20 20 4f 72 20 69 66 20 74 68 65 20   P2.  Or if the 
f680: 53 51 4c 49 54 45 5f 53 54 4f 52 45 50 32 20 66  SQLITE_STOREP2 f
f690: 6c 61 67 20 69 73 20 73 65 74 20 69 6e 20 50 35  lag is set in P5
f6a0: 20 73 74 6f 72 65 0a 2a 2a 20 74 68 65 20 72 65   store.** the re
f6b0: 73 75 6c 74 20 6f 66 20 63 6f 6d 70 61 72 69 73  sult of comparis
f6c0: 6f 6e 20 28 30 20 6f 72 20 31 20 6f 72 20 4e 55  on (0 or 1 or NU
f6d0: 4c 4c 29 20 69 6e 74 6f 20 72 65 67 69 73 74 65  LL) into registe
f6e0: 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74  r P2..**.** If t
f6f0: 68 65 20 53 51 4c 49 54 45 5f 4a 55 4d 50 49 46  he SQLITE_JUMPIF
f700: 4e 55 4c 4c 20 62 69 74 20 6f 66 20 50 35 20 69  NULL bit of P5 i
f710: 73 20 73 65 74 20 61 6e 64 20 65 69 74 68 65 72  s set and either
f720: 20 72 65 67 28 50 31 29 20 6f 72 0a 2a 2a 20 72   reg(P1) or.** r
f730: 65 67 28 50 33 29 20 69 73 20 4e 55 4c 4c 20 74  eg(P3) is NULL t
f740: 68 65 6e 20 74 68 65 20 74 61 6b 65 20 74 68 65  hen the take the
f750: 20 6a 75 6d 70 2e 20 20 49 66 20 74 68 65 20 53   jump.  If the S
f760: 51 4c 49 54 45 5f 4a 55 4d 50 49 46 4e 55 4c 4c  QLITE_JUMPIFNULL
f770: 20 0a 2a 2a 20 62 69 74 20 69 73 20 63 6c 65 61   .** bit is clea
f780: 72 20 74 68 65 6e 20 66 61 6c 6c 20 74 68 72 6f  r then fall thro
f790: 75 67 68 20 69 66 20 65 69 74 68 65 72 20 6f 70  ugh if either op
f7a0: 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c 2e 0a 2a  erand is NULL..*
f7b0: 2a 0a 2a 2a 20 54 68 65 20 53 51 4c 49 54 45 5f  *.** The SQLITE_
f7c0: 41 46 46 5f 4d 41 53 4b 20 70 6f 72 74 69 6f 6e  AFF_MASK portion
f7d0: 20 6f 66 20 50 35 20 6d 75 73 74 20 62 65 20 61   of P5 must be a
f7e0: 6e 20 61 66 66 69 6e 69 74 79 20 63 68 61 72 61  n affinity chara
f7f0: 63 74 65 72 20 2d 0a 2a 2a 20 53 51 4c 49 54 45  cter -.** SQLITE
f800: 5f 41 46 46 5f 54 45 58 54 2c 20 53 51 4c 49 54  _AFF_TEXT, SQLIT
f810: 45 5f 41 46 46 5f 49 4e 54 45 47 45 52 2c 20 61  E_AFF_INTEGER, a
f820: 6e 64 20 73 6f 20 66 6f 72 74 68 2e 20 41 6e 20  nd so forth. An 
f830: 61 74 74 65 6d 70 74 20 69 73 20 6d 61 64 65 20  attempt is made 
f840: 0a 2a 2a 20 74 6f 20 63 6f 65 72 63 65 20 62 6f  .** to coerce bo
f850: 74 68 20 69 6e 70 75 74 73 20 61 63 63 6f 72 64  th inputs accord
f860: 69 6e 67 20 74 6f 20 74 68 69 73 20 61 66 66 69  ing to this affi
f870: 6e 69 74 79 20 62 65 66 6f 72 65 20 74 68 65 0a  nity before the.
f880: 2a 2a 20 63 6f 6d 70 61 72 69 73 6f 6e 20 69 73  ** comparison is
f890: 20 6d 61 64 65 2e 20 49 66 20 74 68 65 20 53 51   made. If the SQ
f8a0: 4c 49 54 45 5f 41 46 46 5f 4d 41 53 4b 20 69 73  LITE_AFF_MASK is
f8b0: 20 30 78 30 30 2c 20 74 68 65 6e 20 6e 75 6d 65   0x00, then nume
f8c0: 72 69 63 0a 2a 2a 20 61 66 66 69 6e 69 74 79 20  ric.** affinity 
f8d0: 69 73 20 75 73 65 64 2e 20 4e 6f 74 65 20 74 68  is used. Note th
f8e0: 61 74 20 74 68 65 20 61 66 66 69 6e 69 74 79 20  at the affinity 
f8f0: 63 6f 6e 76 65 72 73 69 6f 6e 73 20 61 72 65 20  conversions are 
f900: 73 74 6f 72 65 64 0a 2a 2a 20 62 61 63 6b 20 69  stored.** back i
f910: 6e 74 6f 20 74 68 65 20 69 6e 70 75 74 20 72 65  nto the input re
f920: 67 69 73 74 65 72 73 20 50 31 20 61 6e 64 20 50  gisters P1 and P
f930: 33 2e 20 20 53 6f 20 74 68 69 73 20 6f 70 63 6f  3.  So this opco
f940: 64 65 20 63 61 6e 20 63 61 75 73 65 0a 2a 2a 20  de can cause.** 
f950: 70 65 72 73 69 73 74 65 6e 74 20 63 68 61 6e 67  persistent chang
f960: 65 73 20 74 6f 20 72 65 67 69 73 74 65 72 73 20  es to registers 
f970: 50 31 20 61 6e 64 20 50 33 2e 0a 2a 2a 0a 2a 2a  P1 and P3..**.**
f980: 20 4f 6e 63 65 20 61 6e 79 20 63 6f 6e 76 65 72   Once any conver
f990: 73 69 6f 6e 73 20 68 61 76 65 20 74 61 6b 65 6e  sions have taken
f9a0: 20 70 6c 61 63 65 2c 20 61 6e 64 20 6e 65 69 74   place, and neit
f9b0: 68 65 72 20 76 61 6c 75 65 20 69 73 20 4e 55 4c  her value is NUL
f9c0: 4c 2c 20 0a 2a 2a 20 74 68 65 20 76 61 6c 75 65  L, .** the value
f9d0: 73 20 61 72 65 20 63 6f 6d 70 61 72 65 64 2e 20  s are compared. 
f9e0: 49 66 20 62 6f 74 68 20 76 61 6c 75 65 73 20 61  If both values a
f9f0: 72 65 20 62 6c 6f 62 73 20 74 68 65 6e 20 6d 65  re blobs then me
fa00: 6d 63 6d 70 28 29 20 69 73 0a 2a 2a 20 75 73 65  mcmp() is.** use
fa10: 64 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 20 74  d to determine t
fa20: 68 65 20 72 65 73 75 6c 74 73 20 6f 66 20 74 68  he results of th
fa30: 65 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 20 20 49  e comparison.  I
fa40: 66 20 62 6f 74 68 20 76 61 6c 75 65 73 0a 2a 2a  f both values.**
fa50: 20 61 72 65 20 74 65 78 74 2c 20 74 68 65 6e 20   are text, then 
fa60: 74 68 65 20 61 70 70 72 6f 70 72 69 61 74 65 20  the appropriate 
fa70: 63 6f 6c 6c 61 74 69 6e 67 20 66 75 6e 63 74 69  collating functi
fa80: 6f 6e 20 73 70 65 63 69 66 69 65 64 20 69 6e 0a  on specified in.
fa90: 2a 2a 20 50 34 20 69 73 20 20 75 73 65 64 20 74  ** P4 is  used t
faa0: 6f 20 64 6f 20 74 68 65 20 63 6f 6d 70 61 72 69  o do the compari
fab0: 73 6f 6e 2e 20 20 49 66 20 50 34 20 69 73 20 6e  son.  If P4 is n
fac0: 6f 74 20 73 70 65 63 69 66 69 65 64 20 74 68 65  ot specified the
fad0: 6e 0a 2a 2a 20 6d 65 6d 63 6d 70 28 29 20 69 73  n.** memcmp() is
fae0: 20 75 73 65 64 20 74 6f 20 63 6f 6d 70 61 72 65   used to compare
faf0: 20 74 65 78 74 20 73 74 72 69 6e 67 2e 20 20 49   text string.  I
fb00: 66 20 62 6f 74 68 20 76 61 6c 75 65 73 20 61 72  f both values ar
fb10: 65 0a 2a 2a 20 6e 75 6d 65 72 69 63 2c 20 74 68  e.** numeric, th
fb20: 65 6e 20 61 20 6e 75 6d 65 72 69 63 20 63 6f 6d  en a numeric com
fb30: 70 61 72 69 73 6f 6e 20 69 73 20 75 73 65 64 2e  parison is used.
fb40: 20 49 66 20 74 68 65 20 74 77 6f 20 76 61 6c 75   If the two valu
fb50: 65 73 0a 2a 2a 20 61 72 65 20 6f 66 20 64 69 66  es.** are of dif
fb60: 66 65 72 65 6e 74 20 74 79 70 65 73 2c 20 74 68  ferent types, th
fb70: 65 6e 20 6e 75 6d 62 65 72 73 20 61 72 65 20 63  en numbers are c
fb80: 6f 6e 73 69 64 65 72 65 64 20 6c 65 73 73 20 74  onsidered less t
fb90: 68 61 6e 0a 2a 2a 20 73 74 72 69 6e 67 73 20 61  han.** strings a
fba0: 6e 64 20 73 74 72 69 6e 67 73 20 61 72 65 20 63  nd strings are c
fbb0: 6f 6e 73 69 64 65 72 65 64 20 6c 65 73 73 20 74  onsidered less t
fbc0: 68 61 6e 20 62 6c 6f 62 73 2e 0a 2a 2f 0a 2f 2a  han blobs..*/./*
fbd0: 20 4f 70 63 6f 64 65 3a 20 4c 65 20 50 31 20 50   Opcode: Le P1 P
fbe0: 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79  2 P3 P4 P5.** Sy
fbf0: 6e 6f 70 73 69 73 3a 20 49 46 20 72 5b 50 33 5d  nopsis: IF r[P3]
fc00: 3c 3d 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 54 68  <=r[P1].**.** Th
fc10: 69 73 20 77 6f 72 6b 73 20 6a 75 73 74 20 6c 69  is works just li
fc20: 6b 65 20 74 68 65 20 4c 74 20 6f 70 63 6f 64 65  ke the Lt opcode
fc30: 20 65 78 63 65 70 74 20 74 68 61 74 20 74 68 65   except that the
fc40: 20 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e 20 69   jump is taken i
fc50: 66 0a 2a 2a 20 74 68 65 20 63 6f 6e 74 65 6e 74  f.** the content
fc60: 20 6f 66 20 72 65 67 69 73 74 65 72 20 50 33 20   of register P3 
fc70: 69 73 20 6c 65 73 73 20 74 68 61 6e 20 6f 72 20  is less than or 
fc80: 65 71 75 61 6c 20 74 6f 20 74 68 65 20 63 6f 6e  equal to the con
fc90: 74 65 6e 74 20 6f 66 0a 2a 2a 20 72 65 67 69 73  tent of.** regis
fca0: 74 65 72 20 50 31 2e 20 20 53 65 65 20 74 68 65  ter P1.  See the
fcb0: 20 4c 74 20 6f 70 63 6f 64 65 20 66 6f 72 20 61   Lt opcode for a
fcc0: 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d  dditional inform
fcd0: 61 74 69 6f 6e 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63  ation..*/./* Opc
fce0: 6f 64 65 3a 20 47 74 20 50 31 20 50 32 20 50 33  ode: Gt P1 P2 P3
fcf0: 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73   P4 P5.** Synops
fd00: 69 73 3a 20 49 46 20 72 5b 50 33 5d 3e 72 5b 50  is: IF r[P3]>r[P
fd10: 31 5d 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 77 6f  1].**.** This wo
fd20: 72 6b 73 20 6a 75 73 74 20 6c 69 6b 65 20 74 68  rks just like th
fd30: 65 20 4c 74 20 6f 70 63 6f 64 65 20 65 78 63 65  e Lt opcode exce
fd40: 70 74 20 74 68 61 74 20 74 68 65 20 6a 75 6d 70  pt that the jump
fd50: 20 69 73 20 74 61 6b 65 6e 20 69 66 0a 2a 2a 20   is taken if.** 
fd60: 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 72  the content of r
fd70: 65 67 69 73 74 65 72 20 50 33 20 69 73 20 67 72  egister P3 is gr
fd80: 65 61 74 65 72 20 74 68 61 6e 20 74 68 65 20 63  eater than the c
fd90: 6f 6e 74 65 6e 74 20 6f 66 0a 2a 2a 20 72 65 67  ontent of.** reg
fda0: 69 73 74 65 72 20 50 31 2e 20 20 53 65 65 20 74  ister P1.  See t
fdb0: 68 65 20 4c 74 20 6f 70 63 6f 64 65 20 66 6f 72  he Lt opcode for
fdc0: 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f   additional info
fdd0: 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 2f 2a 20 4f  rmation..*/./* O
fde0: 70 63 6f 64 65 3a 20 47 65 20 50 31 20 50 32 20  pcode: Ge P1 P2 
fdf0: 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f  P3 P4 P5.** Syno
fe00: 70 73 69 73 3a 20 49 46 20 72 5b 50 33 5d 3e 3d  psis: IF r[P3]>=
fe10: 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 54 68 69 73  r[P1].**.** This
fe20: 20 77 6f 72 6b 73 20 6a 75 73 74 20 6c 69 6b 65   works just like
fe30: 20 74 68 65 20 4c 74 20 6f 70 63 6f 64 65 20 65   the Lt opcode e
fe40: 78 63 65 70 74 20 74 68 61 74 20 74 68 65 20 6a  xcept that the j
fe50: 75 6d 70 20 69 73 20 74 61 6b 65 6e 20 69 66 0a  ump is taken if.
fe60: 2a 2a 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f  ** the content o
fe70: 66 20 72 65 67 69 73 74 65 72 20 50 33 20 69 73  f register P3 is
fe80: 20 67 72 65 61 74 65 72 20 74 68 61 6e 20 6f 72   greater than or
fe90: 20 65 71 75 61 6c 20 74 6f 20 74 68 65 20 63 6f   equal to the co
fea0: 6e 74 65 6e 74 20 6f 66 0a 2a 2a 20 72 65 67 69  ntent of.** regi
feb0: 73 74 65 72 20 50 31 2e 20 20 53 65 65 20 74 68  ster P1.  See th
fec0: 65 20 4c 74 20 6f 70 63 6f 64 65 20 66 6f 72 20  e Lt opcode for 
fed0: 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72  additional infor
fee0: 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20  mation..*/.case 
fef0: 4f 50 5f 45 71 3a 20 20 20 20 20 20 20 20 20 20  OP_Eq:          
ff00: 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20       /* same as 
ff10: 54 4b 5f 45 51 2c 20 6a 75 6d 70 2c 20 69 6e 31  TK_EQ, jump, in1
ff20: 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50  , in3 */.case OP
ff30: 5f 4e 65 3a 20 20 20 20 20 20 20 20 20 20 20 20  _Ne:            
ff40: 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b     /* same as TK
ff50: 5f 4e 45 2c 20 6a 75 6d 70 2c 20 69 6e 31 2c 20  _NE, jump, in1, 
ff60: 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 4c  in3 */.case OP_L
ff70: 74 3a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  t:              
ff80: 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 4c   /* same as TK_L
ff90: 54 2c 20 6a 75 6d 70 2c 20 69 6e 31 2c 20 69 6e  T, jump, in1, in
ffa0: 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 4c 65 3a  3 */.case OP_Le:
ffb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
ffc0: 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 4c 45 2c  * same as TK_LE,
ffd0: 20 6a 75 6d 70 2c 20 69 6e 31 2c 20 69 6e 33 20   jump, in1, in3 
ffe0: 2a 2f 0a 63 61 73 65 20 4f 50 5f 47 74 3a 20 20  */.case OP_Gt:  
fff0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
10000 73 61 6d 65 20 61 73 20 54 4b 5f 47 54 2c 20 6a  same as TK_GT, j
10010 75 6d 70 2c 20 69 6e 31 2c 20 69 6e 33 20 2a 2f  ump, in1, in3 */
10020 0a 63 61 73 65 20 4f 50 5f 47 65 3a 20 7b 20 20  .case OP_Ge: {  
10030 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61             /* sa
10040 6d 65 20 61 73 20 54 4b 5f 47 45 2c 20 6a 75 6d  me as TK_GE, jum
10050 70 2c 20 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a 20  p, in1, in3 */. 
10060 20 69 6e 74 20 72 65 73 2c 20 72 65 73 32 3b 20   int res, res2; 
10070 20 20 20 20 20 2f 2a 20 52 65 73 75 6c 74 20 6f       /* Result o
10080 66 20 74 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e  f the comparison
10090 20 6f 66 20 70 49 6e 31 20 61 67 61 69 6e 73 74   of pIn1 against
100a0 20 70 49 6e 33 20 2a 2f 0a 20 20 63 68 61 72 20   pIn3 */.  char 
100b0 61 66 66 69 6e 69 74 79 3b 20 20 20 20 20 20 2f  affinity;      /
100c0 2a 20 41 66 66 69 6e 69 74 79 20 74 6f 20 75 73  * Affinity to us
100d0 65 20 66 6f 72 20 63 6f 6d 70 61 72 69 73 6f 6e  e for comparison
100e0 20 2a 2f 0a 20 20 75 31 36 20 66 6c 61 67 73 31   */.  u16 flags1
100f0 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 70  ;         /* Cop
10100 79 20 6f 66 20 69 6e 69 74 69 61 6c 20 76 61 6c  y of initial val
10110 75 65 20 6f 66 20 70 49 6e 31 2d 3e 66 6c 61 67  ue of pIn1->flag
10120 73 20 2a 2f 0a 20 20 75 31 36 20 66 6c 61 67 73  s */.  u16 flags
10130 33 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f  3;         /* Co
10140 70 79 20 6f 66 20 69 6e 69 74 69 61 6c 20 76 61  py of initial va
10150 6c 75 65 20 6f 66 20 70 49 6e 33 2d 3e 66 6c 61  lue of pIn3->fla
10160 67 73 20 2a 2f 0a 0a 20 20 70 49 6e 31 20 3d 20  gs */..  pIn1 = 
10170 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  &aMem[pOp->p1];.
10180 20 20 70 49 6e 33 20 3d 20 26 61 4d 65 6d 5b 70    pIn3 = &aMem[p
10190 4f 70 2d 3e 70 33 5d 3b 0a 20 20 66 6c 61 67 73  Op->p3];.  flags
101a0 31 20 3d 20 70 49 6e 31 2d 3e 66 6c 61 67 73 3b  1 = pIn1->flags;
101b0 0a 20 20 66 6c 61 67 73 33 20 3d 20 70 49 6e 33  .  flags3 = pIn3
101c0 2d 3e 66 6c 61 67 73 3b 0a 20 20 69 66 28 20 28  ->flags;.  if( (
101d0 66 6c 61 67 73 31 20 7c 20 66 6c 61 67 73 33 29  flags1 | flags3)
101e0 26 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20  &MEM_Null ){.   
101f0 20 2f 2a 20 4f 6e 65 20 6f 72 20 62 6f 74 68 20   /* One or both 
10200 6f 70 65 72 61 6e 64 73 20 61 72 65 20 4e 55 4c  operands are NUL
10210 4c 20 2a 2f 0a 20 20 20 20 69 66 28 20 70 4f 70  L */.    if( pOp
10220 2d 3e 70 35 20 26 20 53 51 4c 49 54 45 5f 4e 55  ->p5 & SQLITE_NU
10230 4c 4c 45 51 20 29 7b 0a 20 20 20 20 20 20 2f 2a  LLEQ ){.      /*
10240 20 49 66 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45   If SQLITE_NULLE
10250 51 20 69 73 20 73 65 74 20 28 77 68 69 63 68 20  Q is set (which 
10260 77 69 6c 6c 20 6f 6e 6c 79 20 68 61 70 70 65 6e  will only happen
10270 20 69 66 20 74 68 65 20 6f 70 65 72 61 74 6f 72   if the operator
10280 20 69 73 0a 20 20 20 20 20 20 2a 2a 20 4f 50 5f   is.      ** OP_
10290 45 71 20 6f 72 20 4f 50 5f 4e 65 29 20 74 68 65  Eq or OP_Ne) the
102a0 6e 20 74 61 6b 65 20 74 68 65 20 6a 75 6d 70 20  n take the jump 
102b0 6f 72 20 6e 6f 74 20 64 65 70 65 6e 64 69 6e 67  or not depending
102c0 20 6f 6e 20 77 68 65 74 68 65 72 0a 20 20 20 20   on whether.    
102d0 20 20 2a 2a 20 6f 72 20 6e 6f 74 20 62 6f 74 68    ** or not both
102e0 20 6f 70 65 72 61 6e 64 73 20 61 72 65 20 6e 75   operands are nu
102f0 6c 6c 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20  ll..      */.   
10300 20 20 20 61 73 73 65 72 74 28 20 28 66 6c 61 67     assert( (flag
10310 73 31 20 26 20 4d 45 4d 5f 43 6c 65 61 72 65 64  s1 & MEM_Cleared
10320 29 3d 3d 30 20 29 3b 0a 20 20 20 20 20 20 61 73  )==0 );.      as
10330 73 65 72 74 28 20 28 70 4f 70 2d 3e 70 35 20 26  sert( (pOp->p5 &
10340 20 53 51 4c 49 54 45 5f 4a 55 4d 50 49 46 4e 55   SQLITE_JUMPIFNU
10350 4c 4c 29 3d 3d 30 20 7c 7c 20 43 4f 52 52 55 50  LL)==0 || CORRUP
10360 54 5f 44 42 20 29 3b 0a 20 20 20 20 20 20 74 65  T_DB );.      te
10370 73 74 63 61 73 65 28 20 28 70 4f 70 2d 3e 70 35  stcase( (pOp->p5
10380 20 26 20 53 51 4c 49 54 45 5f 4a 55 4d 50 49 46   & SQLITE_JUMPIF
10390 4e 55 4c 4c 29 21 3d 30 20 29 3b 0a 20 20 20 20  NULL)!=0 );.    
103a0 20 20 69 66 28 20 28 66 6c 61 67 73 31 26 66 6c    if( (flags1&fl
103b0 61 67 73 33 26 4d 45 4d 5f 4e 75 6c 6c 29 21 3d  ags3&MEM_Null)!=
103c0 30 0a 20 20 20 20 20 20 20 26 26 20 28 66 6c 61  0.       && (fla
103d0 67 73 33 26 4d 45 4d 5f 43 6c 65 61 72 65 64 29  gs3&MEM_Cleared)
103e0 3d 3d 30 0a 20 20 20 20 20 20 29 7b 0a 20 20 20  ==0.      ){.   
103f0 20 20 20 20 20 72 65 73 20 3d 20 30 3b 20 20 2f       res = 0;  /
10400 2a 20 4f 70 65 72 61 6e 64 73 20 61 72 65 20 65  * Operands are e
10410 71 75 61 6c 20 2a 2f 0a 20 20 20 20 20 20 7d 65  qual */.      }e
10420 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 72 65 73  lse{.        res
10430 20 3d 20 28 28 66 6c 61 67 73 33 20 26 20 4d 45   = ((flags3 & ME
10440 4d 5f 4e 75 6c 6c 29 20 3f 20 2d 31 20 3a 20 2b  M_Null) ? -1 : +
10450 31 29 3b 20 20 2f 2a 20 4f 70 65 72 61 6e 64 73  1);  /* Operands
10460 20 61 72 65 20 6e 6f 74 20 65 71 75 61 6c 20 2a   are not equal *
10470 2f 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 65  /.      }.    }e
10480 6c 73 65 7b 0a 20 20 20 20 20 20 2f 2a 20 53 51  lse{.      /* SQ
10490 4c 49 54 45 5f 4e 55 4c 4c 45 51 20 69 73 20 63  LITE_NULLEQ is c
104a0 6c 65 61 72 20 61 6e 64 20 61 74 20 6c 65 61 73  lear and at leas
104b0 74 20 6f 6e 65 20 6f 70 65 72 61 6e 64 20 69 73  t one operand is
104c0 20 4e 55 4c 4c 2c 0a 20 20 20 20 20 20 2a 2a 20   NULL,.      ** 
104d0 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c 74 20  then the result 
104e0 69 73 20 61 6c 77 61 79 73 20 4e 55 4c 4c 2e 0a  is always NULL..
104f0 20 20 20 20 20 20 2a 2a 20 54 68 65 20 6a 75 6d        ** The jum
10500 70 20 69 73 20 74 61 6b 65 6e 20 69 66 20 74 68  p is taken if th
10510 65 20 53 51 4c 49 54 45 5f 4a 55 4d 50 49 46 4e  e SQLITE_JUMPIFN
10520 55 4c 4c 20 62 69 74 20 69 73 20 73 65 74 2e 0a  ULL bit is set..
10530 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 69        */.      i
10540 66 28 20 70 4f 70 2d 3e 70 35 20 26 20 53 51 4c  f( pOp->p5 & SQL
10550 49 54 45 5f 53 54 4f 52 45 50 32 20 29 7b 0a 20  ITE_STOREP2 ){. 
10560 20 20 20 20 20 20 20 70 4f 75 74 20 3d 20 26 61         pOut = &a
10570 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20  Mem[pOp->p2];.  
10580 20 20 20 20 20 20 69 43 6f 6d 70 61 72 65 20 3d        iCompare =
10590 20 31 3b 20 20 20 20 2f 2a 20 4f 70 65 72 61 6e   1;    /* Operan
105a0 64 73 20 61 72 65 20 6e 6f 74 20 65 71 75 61 6c  ds are not equal
105b0 20 2a 2f 0a 20 20 20 20 20 20 20 20 6d 65 6d 41   */.        memA
105c0 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20  boutToChange(p, 
105d0 70 4f 75 74 29 3b 0a 20 20 20 20 20 20 20 20 4d  pOut);.        M
105e0 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70 4f  emSetTypeFlag(pO
105f0 75 74 2c 20 4d 45 4d 5f 4e 75 6c 6c 29 3b 0a 20  ut, MEM_Null);. 
10600 20 20 20 20 20 20 20 52 45 47 49 53 54 45 52 5f         REGISTER_
10610 54 52 41 43 45 28 70 4f 70 2d 3e 70 32 2c 20 70  TRACE(pOp->p2, p
10620 4f 75 74 29 3b 0a 20 20 20 20 20 20 7d 65 6c 73  Out);.      }els
10630 65 7b 0a 20 20 20 20 20 20 20 20 56 64 62 65 42  e{.        VdbeB
10640 72 61 6e 63 68 54 61 6b 65 6e 28 32 2c 33 29 3b  ranchTaken(2,3);
10650 0a 20 20 20 20 20 20 20 20 69 66 28 20 70 4f 70  .        if( pOp
10660 2d 3e 70 35 20 26 20 53 51 4c 49 54 45 5f 4a 55  ->p5 & SQLITE_JU
10670 4d 50 49 46 4e 55 4c 4c 20 29 7b 0a 20 20 20 20  MPIFNULL ){.    
10680 20 20 20 20 20 20 67 6f 74 6f 20 6a 75 6d 70 5f        goto jump_
10690 74 6f 5f 70 32 3b 0a 20 20 20 20 20 20 20 20 7d  to_p2;.        }
106a0 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 62  .      }.      b
106b0 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 20 20 7d 65  reak;.    }.  }e
106c0 6c 73 65 7b 0a 20 20 20 20 2f 2a 20 4e 65 69 74  lse{.    /* Neit
106d0 68 65 72 20 6f 70 65 72 61 6e 64 20 69 73 20 4e  her operand is N
106e0 55 4c 4c 2e 20 20 44 6f 20 61 20 63 6f 6d 70 61  ULL.  Do a compa
106f0 72 69 73 6f 6e 2e 20 2a 2f 0a 20 20 20 20 61 66  rison. */.    af
10700 66 69 6e 69 74 79 20 3d 20 70 4f 70 2d 3e 70 35  finity = pOp->p5
10710 20 26 20 53 51 4c 49 54 45 5f 41 46 46 5f 4d 41   & SQLITE_AFF_MA
10720 53 4b 3b 0a 20 20 20 20 69 66 28 20 61 66 66 69  SK;.    if( affi
10730 6e 69 74 79 3e 3d 53 51 4c 49 54 45 5f 41 46 46  nity>=SQLITE_AFF
10740 5f 4e 55 4d 45 52 49 43 20 29 7b 0a 20 20 20 20  _NUMERIC ){.    
10750 20 20 69 66 28 20 28 66 6c 61 67 73 31 20 7c 20    if( (flags1 | 
10760 66 6c 61 67 73 33 29 26 4d 45 4d 5f 53 74 72 20  flags3)&MEM_Str 
10770 29 7b 0a 20 20 20 20 20 20 20 20 69 66 28 20 28  ){.        if( (
10780 66 6c 61 67 73 31 20 26 20 28 4d 45 4d 5f 49 6e  flags1 & (MEM_In
10790 74 7c 4d 45 4d 5f 49 6e 74 52 65 61 6c 7c 4d 45  t|MEM_IntReal|ME
107a0 4d 5f 52 65 61 6c 7c 4d 45 4d 5f 53 74 72 29 29  M_Real|MEM_Str))
107b0 3d 3d 4d 45 4d 5f 53 74 72 20 29 7b 0a 20 20 20  ==MEM_Str ){.   
107c0 20 20 20 20 20 20 20 61 70 70 6c 79 4e 75 6d 65         applyNume
107d0 72 69 63 41 66 66 69 6e 69 74 79 28 70 49 6e 31  ricAffinity(pIn1
107e0 2c 30 29 3b 0a 20 20 20 20 20 20 20 20 20 20 61  ,0);.          a
107f0 73 73 65 72 74 28 20 66 6c 61 67 73 33 3d 3d 70  ssert( flags3==p
10800 49 6e 33 2d 3e 66 6c 61 67 73 20 29 3b 0a 20 20  In3->flags );.  
10810 20 20 20 20 20 20 20 20 2f 2a 20 74 65 73 74 63          /* testc
10820 61 73 65 28 20 66 6c 61 67 73 33 21 3d 70 49 6e  ase( flags3!=pIn
10830 33 2d 3e 66 6c 61 67 73 20 29 3b 0a 20 20 20 20  3->flags );.    
10840 20 20 20 20 20 20 2a 2a 20 74 68 69 73 20 75 73        ** this us
10850 65 64 20 74 6f 20 62 65 20 70 6f 73 73 69 62 6c  ed to be possibl
10860 65 20 77 69 74 68 20 70 49 6e 31 3d 3d 70 49 6e  e with pIn1==pIn
10870 33 2c 20 62 75 74 20 6e 6f 74 20 73 69 6e 63 65  3, but not since
10880 0a 20 20 20 20 20 20 20 20 20 20 2a 2a 20 74 68  .          ** th
10890 65 20 63 6f 6c 75 6d 6e 20 63 61 63 68 65 20 77  e column cache w
108a0 61 73 20 72 65 6d 6f 76 65 64 2e 20 20 54 68 65  as removed.  The
108b0 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 73 73 69 67   following assig
108c0 6e 6d 65 6e 74 0a 20 20 20 20 20 20 20 20 20 20  nment.          
108d0 2a 2a 20 69 73 20 65 73 73 65 6e 74 69 61 6c 6c  ** is essentiall
108e0 79 20 61 20 6e 6f 2d 6f 70 2e 20 20 42 75 74 2c  y a no-op.  But,
108f0 20 69 74 20 70 72 6f 76 69 64 65 73 20 64 65 66   it provides def
10900 65 6e 73 65 2d 69 6e 2d 64 65 70 74 68 0a 20 20  ense-in-depth.  
10910 20 20 20 20 20 20 20 20 2a 2a 20 69 6e 20 63 61          ** in ca
10920 73 65 20 6f 75 72 20 61 6e 61 6c 79 73 69 73 20  se our analysis 
10930 69 73 20 69 6e 63 6f 72 72 65 63 74 2c 20 73 6f  is incorrect, so
10940 20 69 74 20 69 73 20 6c 65 66 74 20 69 6e 2e 20   it is left in. 
10950 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 66 6c 61  */.          fla
10960 67 73 33 20 3d 20 70 49 6e 33 2d 3e 66 6c 61 67  gs3 = pIn3->flag
10970 73 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20  s;.        }.   
10980 20 20 20 20 20 69 66 28 20 28 66 6c 61 67 73 33       if( (flags3
10990 20 26 20 28 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f   & (MEM_Int|MEM_
109a0 49 6e 74 52 65 61 6c 7c 4d 45 4d 5f 52 65 61 6c  IntReal|MEM_Real
109b0 7c 4d 45 4d 5f 53 74 72 29 29 3d 3d 4d 45 4d 5f  |MEM_Str))==MEM_
109c0 53 74 72 20 29 7b 0a 20 20 20 20 20 20 20 20 20  Str ){.         
109d0 20 61 70 70 6c 79 4e 75 6d 65 72 69 63 41 66 66   applyNumericAff
109e0 69 6e 69 74 79 28 70 49 6e 33 2c 30 29 3b 0a 20  inity(pIn3,0);. 
109f0 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d         }.      }
10a00 0a 20 20 20 20 20 20 2f 2a 20 48 61 6e 64 6c 65  .      /* Handle
10a10 20 74 68 65 20 63 6f 6d 6d 6f 6e 20 63 61 73 65   the common case
10a20 20 6f 66 20 69 6e 74 65 67 65 72 20 63 6f 6d 70   of integer comp
10a30 61 72 69 73 6f 6e 20 68 65 72 65 2c 20 61 73 20  arison here, as 
10a40 61 6e 0a 20 20 20 20 20 20 2a 2a 20 6f 70 74 69  an.      ** opti
10a50 6d 69 7a 61 74 69 6f 6e 2c 20 74 6f 20 61 76 6f  mization, to avo
10a60 69 64 20 61 20 63 61 6c 6c 20 74 6f 20 73 71 6c  id a call to sql
10a70 69 74 65 33 4d 65 6d 43 6f 6d 70 61 72 65 28 29  ite3MemCompare()
10a80 20 2a 2f 0a 20 20 20 20 20 20 69 66 28 20 28 70   */.      if( (p
10a90 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 70 49 6e  In1->flags & pIn
10aa0 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49  3->flags & MEM_I
10ab0 6e 74 29 21 3d 30 20 29 7b 0a 20 20 20 20 20 20  nt)!=0 ){.      
10ac0 20 20 69 66 28 20 70 49 6e 33 2d 3e 75 2e 69 20    if( pIn3->u.i 
10ad0 3e 20 70 49 6e 31 2d 3e 75 2e 69 20 29 7b 20 72  > pIn1->u.i ){ r
10ae0 65 73 20 3d 20 2b 31 3b 20 67 6f 74 6f 20 63 6f  es = +1; goto co
10af0 6d 70 61 72 65 5f 6f 70 3b 20 7d 0a 20 20 20 20  mpare_op; }.    
10b00 20 20 20 20 69 66 28 20 70 49 6e 33 2d 3e 75 2e      if( pIn3->u.
10b10 69 20 3c 20 70 49 6e 31 2d 3e 75 2e 69 20 29 7b  i < pIn1->u.i ){
10b20 20 72 65 73 20 3d 20 2d 31 3b 20 67 6f 74 6f 20   res = -1; goto 
10b30 63 6f 6d 70 61 72 65 5f 6f 70 3b 20 7d 0a 20 20  compare_op; }.  
10b40 20 20 20 20 20 20 72 65 73 20 3d 20 30 3b 0a 20        res = 0;. 
10b50 20 20 20 20 20 20 20 67 6f 74 6f 20 63 6f 6d 70         goto comp
10b60 61 72 65 5f 6f 70 3b 0a 20 20 20 20 20 20 7d 0a  are_op;.      }.
10b70 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 61 66      }else if( af
10b80 66 69 6e 69 74 79 3d 3d 53 51 4c 49 54 45 5f 41  finity==SQLITE_A
10b90 46 46 5f 54 45 58 54 20 29 7b 0a 20 20 20 20 20  FF_TEXT ){.     
10ba0 20 69 66 28 20 28 66 6c 61 67 73 31 20 26 20 4d   if( (flags1 & M
10bb0 45 4d 5f 53 74 72 29 3d 3d 30 20 26 26 20 28 66  EM_Str)==0 && (f
10bc0 6c 61 67 73 31 26 28 4d 45 4d 5f 49 6e 74 7c 4d  lags1&(MEM_Int|M
10bd0 45 4d 5f 52 65 61 6c 7c 4d 45 4d 5f 49 6e 74 52  EM_Real|MEM_IntR
10be0 65 61 6c 29 29 21 3d 30 20 29 7b 0a 20 20 20 20  eal))!=0 ){.    
10bf0 20 20 20 20 74 65 73 74 63 61 73 65 28 20 70 49      testcase( pI
10c00 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  n1->flags & MEM_
10c10 49 6e 74 20 29 3b 0a 20 20 20 20 20 20 20 20 74  Int );.        t
10c20 65 73 74 63 61 73 65 28 20 70 49 6e 31 2d 3e 66  estcase( pIn1->f
10c30 6c 61 67 73 20 26 20 4d 45 4d 5f 52 65 61 6c 20  lags & MEM_Real 
10c40 29 3b 0a 20 20 20 20 20 20 20 20 74 65 73 74 63  );.        testc
10c50 61 73 65 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73  ase( pIn1->flags
10c60 20 26 20 4d 45 4d 5f 49 6e 74 52 65 61 6c 20 29   & MEM_IntReal )
10c70 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  ;.        sqlite
10c80 33 56 64 62 65 4d 65 6d 53 74 72 69 6e 67 69 66  3VdbeMemStringif
10c90 79 28 70 49 6e 31 2c 20 65 6e 63 6f 64 69 6e 67  y(pIn1, encoding
10ca0 2c 20 31 29 3b 0a 20 20 20 20 20 20 20 20 74 65  , 1);.        te
10cb0 73 74 63 61 73 65 28 20 28 66 6c 61 67 73 31 26  stcase( (flags1&
10cc0 4d 45 4d 5f 44 79 6e 29 20 21 3d 20 28 70 49 6e  MEM_Dyn) != (pIn
10cd0 31 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 44 79 6e  1->flags&MEM_Dyn
10ce0 29 20 29 3b 0a 20 20 20 20 20 20 20 20 66 6c 61  ) );.        fla
10cf0 67 73 31 20 3d 20 28 70 49 6e 31 2d 3e 66 6c 61  gs1 = (pIn1->fla
10d00 67 73 20 26 20 7e 4d 45 4d 5f 54 79 70 65 4d 61  gs & ~MEM_TypeMa
10d10 73 6b 29 20 7c 20 28 66 6c 61 67 73 31 20 26 20  sk) | (flags1 & 
10d20 4d 45 4d 5f 54 79 70 65 4d 61 73 6b 29 3b 0a 20  MEM_TypeMask);. 
10d30 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70         assert( p
10d40 49 6e 31 21 3d 70 49 6e 33 20 29 3b 0a 20 20 20  In1!=pIn3 );.   
10d50 20 20 20 7d 0a 20 20 20 20 20 20 69 66 28 20 28     }.      if( (
10d60 66 6c 61 67 73 33 20 26 20 4d 45 4d 5f 53 74 72  flags3 & MEM_Str
10d70 29 3d 3d 30 20 26 26 20 28 66 6c 61 67 73 33 26  )==0 && (flags3&
10d80 28 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 52 65 61  (MEM_Int|MEM_Rea
10d90 6c 7c 4d 45 4d 5f 49 6e 74 52 65 61 6c 29 29 21  l|MEM_IntReal))!
10da0 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 74 65  =0 ){.        te
10db0 73 74 63 61 73 65 28 20 70 49 6e 33 2d 3e 66 6c  stcase( pIn3->fl
10dc0 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 20 29 3b  ags & MEM_Int );
10dd0 0a 20 20 20 20 20 20 20 20 74 65 73 74 63 61 73  .        testcas
10de0 65 28 20 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26  e( pIn3->flags &
10df0 20 4d 45 4d 5f 52 65 61 6c 20 29 3b 0a 20 20 20   MEM_Real );.   
10e00 20 20 20 20 20 74 65 73 74 63 61 73 65 28 20 70       testcase( p
10e10 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  In3->flags & MEM
10e20 5f 49 6e 74 52 65 61 6c 20 29 3b 0a 20 20 20 20  _IntReal );.    
10e30 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
10e40 65 6d 53 74 72 69 6e 67 69 66 79 28 70 49 6e 33  emStringify(pIn3
10e50 2c 20 65 6e 63 6f 64 69 6e 67 2c 20 31 29 3b 0a  , encoding, 1);.
10e60 20 20 20 20 20 20 20 20 74 65 73 74 63 61 73 65          testcase
10e70 28 20 28 66 6c 61 67 73 33 26 4d 45 4d 5f 44 79  ( (flags3&MEM_Dy
10e80 6e 29 20 21 3d 20 28 70 49 6e 33 2d 3e 66 6c 61  n) != (pIn3->fla
10e90 67 73 26 4d 45 4d 5f 44 79 6e 29 20 29 3b 0a 20  gs&MEM_Dyn) );. 
10ea0 20 20 20 20 20 20 20 66 6c 61 67 73 33 20 3d 20         flags3 = 
10eb0 28 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20 7e  (pIn3->flags & ~
10ec0 4d 45 4d 5f 54 79 70 65 4d 61 73 6b 29 20 7c 20  MEM_TypeMask) | 
10ed0 28 66 6c 61 67 73 33 20 26 20 4d 45 4d 5f 54 79  (flags3 & MEM_Ty
10ee0 70 65 4d 61 73 6b 29 3b 0a 20 20 20 20 20 20 7d  peMask);.      }
10ef0 0a 20 20 20 20 7d 0a 20 20 20 20 61 73 73 65 72  .    }.    asser
10f00 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d  t( pOp->p4type==
10f10 50 34 5f 43 4f 4c 4c 53 45 51 20 7c 7c 20 70 4f  P4_COLLSEQ || pO
10f20 70 2d 3e 70 34 2e 70 43 6f 6c 6c 3d 3d 30 20 29  p->p4.pColl==0 )
10f30 3b 0a 20 20 20 20 72 65 73 20 3d 20 73 71 6c 69  ;.    res = sqli
10f40 74 65 33 4d 65 6d 43 6f 6d 70 61 72 65 28 70 49  te3MemCompare(pI
10f50 6e 33 2c 20 70 49 6e 31 2c 20 70 4f 70 2d 3e 70  n3, pIn1, pOp->p
10f60 34 2e 70 43 6f 6c 6c 29 3b 0a 20 20 7d 0a 63 6f  4.pColl);.  }.co
10f70 6d 70 61 72 65 5f 6f 70 3a 0a 20 20 2f 2a 20 41  mpare_op:.  /* A
10f80 74 20 74 68 69 73 20 70 6f 69 6e 74 2c 20 72 65  t this point, re
10f90 73 20 69 73 20 6e 65 67 61 74 69 76 65 2c 20 7a  s is negative, z
10fa0 65 72 6f 2c 20 6f 72 20 70 6f 73 69 74 69 76 65  ero, or positive
10fb0 20 69 66 20 72 65 67 5b 50 31 5d 20 69 73 0a 20   if reg[P1] is. 
10fc0 20 2a 2a 20 6c 65 73 73 20 74 68 61 6e 2c 20 65   ** less than, e
10fd0 71 75 61 6c 20 74 6f 2c 20 6f 72 20 67 72 65 61  qual to, or grea
10fe0 74 65 72 20 74 68 61 6e 20 72 65 67 5b 50 33 5d  ter than reg[P3]
10ff0 2c 20 72 65 73 70 65 63 74 69 76 65 6c 79 2e 20  , respectively. 
11000 20 43 6f 6d 70 75 74 65 0a 20 20 2a 2a 20 74 68   Compute.  ** th
11010 65 20 61 6e 73 77 65 72 20 74 6f 20 74 68 69 73  e answer to this
11020 20 6f 70 65 72 61 74 6f 72 20 69 6e 20 72 65 73   operator in res
11030 32 2c 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20  2, depending on 
11040 77 68 61 74 20 74 68 65 20 63 6f 6d 70 61 72 69  what the compari
11050 73 6f 6e 0a 20 20 2a 2a 20 6f 70 65 72 61 74 6f  son.  ** operato
11060 72 20 61 63 74 75 61 6c 6c 79 20 69 73 2e 20 20  r actually is.  
11070 54 68 65 20 6e 65 78 74 20 62 6c 6f 63 6b 20 6f  The next block o
11080 66 20 63 6f 64 65 20 64 65 70 65 6e 64 73 20 6f  f code depends o
11090 6e 20 74 68 65 20 66 61 63 74 0a 20 20 2a 2a 20  n the fact.  ** 
110a0 74 68 61 74 20 74 68 65 20 36 20 63 6f 6d 70 61  that the 6 compa
110b0 72 69 73 6f 6e 20 6f 70 65 72 61 74 6f 72 73 20  rison operators 
110c0 61 72 65 20 63 6f 6e 73 65 63 75 74 69 76 65 20  are consecutive 
110d0 69 6e 74 65 67 65 72 73 20 69 6e 20 74 68 69 73  integers in this
110e0 0a 20 20 2a 2a 20 6f 72 64 65 72 3a 20 20 4e 45  .  ** order:  NE
110f0 2c 20 45 51 2c 20 47 54 2c 20 4c 45 2c 20 4c 54  , EQ, GT, LE, LT
11100 2c 20 47 45 20 2a 2f 0a 20 20 61 73 73 65 72 74  , GE */.  assert
11110 28 20 4f 50 5f 45 71 3d 3d 4f 50 5f 4e 65 2b 31  ( OP_Eq==OP_Ne+1
11120 20 29 3b 20 61 73 73 65 72 74 28 20 4f 50 5f 47   ); assert( OP_G
11130 74 3d 3d 4f 50 5f 4e 65 2b 32 20 29 3b 20 61 73  t==OP_Ne+2 ); as
11140 73 65 72 74 28 20 4f 50 5f 4c 65 3d 3d 4f 50 5f  sert( OP_Le==OP_
11150 4e 65 2b 33 20 29 3b 0a 20 20 61 73 73 65 72 74  Ne+3 );.  assert
11160 28 20 4f 50 5f 4c 74 3d 3d 4f 50 5f 4e 65 2b 34  ( OP_Lt==OP_Ne+4
11170 20 29 3b 20 61 73 73 65 72 74 28 20 4f 50 5f 47   ); assert( OP_G
11180 65 3d 3d 4f 50 5f 4e 65 2b 35 20 29 3b 0a 20 20  e==OP_Ne+5 );.  
11190 69 66 28 20 72 65 73 3c 30 20 29 7b 20 20 20 20  if( res<0 ){    
111a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
111b0 20 20 20 20 2f 2a 20 6e 65 2c 20 65 71 2c 20 67      /* ne, eq, g
111c0 74 2c 20 6c 65 2c 20 6c 74 2c 20 67 65 20 2a 2f  t, le, lt, ge */
111d0 0a 20 20 20 20 73 74 61 74 69 63 20 63 6f 6e 73  .    static cons
111e0 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20  t unsigned char 
111f0 61 4c 54 62 5b 5d 20 3d 20 7b 20 31 2c 20 20 30  aLTb[] = { 1,  0
11200 2c 20 20 30 2c 20 20 31 2c 20 20 31 2c 20 20 30  ,  0,  1,  1,  0
11210 20 7d 3b 0a 20 20 20 20 72 65 73 32 20 3d 20 61   };.    res2 = a
11220 4c 54 62 5b 70 4f 70 2d 3e 6f 70 63 6f 64 65 20  LTb[pOp->opcode 
11230 2d 20 4f 50 5f 4e 65 5d 3b 0a 20 20 7d 65 6c 73  - OP_Ne];.  }els
11240 65 20 69 66 28 20 72 65 73 3d 3d 30 20 29 7b 0a  e if( res==0 ){.
11250 20 20 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74      static const
11260 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 61   unsigned char a
11270 45 51 62 5b 5d 20 3d 20 7b 20 30 2c 20 20 31 2c  EQb[] = { 0,  1,
11280 20 20 30 2c 20 20 31 2c 20 20 30 2c 20 20 31 20    0,  1,  0,  1 
11290 7d 3b 0a 20 20 20 20 72 65 73 32 20 3d 20 61 45  };.    res2 = aE
112a0 51 62 5b 70 4f 70 2d 3e 6f 70 63 6f 64 65 20 2d  Qb[pOp->opcode -
112b0 20 4f 50 5f 4e 65 5d 3b 0a 20 20 7d 65 6c 73 65   OP_Ne];.  }else
112c0 7b 0a 20 20 20 20 73 74 61 74 69 63 20 63 6f 6e  {.    static con
112d0 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72  st unsigned char
112e0 20 61 47 54 62 5b 5d 20 3d 20 7b 20 31 2c 20 20   aGTb[] = { 1,  
112f0 30 2c 20 20 31 2c 20 20 30 2c 20 20 30 2c 20 20  0,  1,  0,  0,  
11300 31 20 7d 3b 0a 20 20 20 20 72 65 73 32 20 3d 20  1 };.    res2 = 
11310 61 47 54 62 5b 70 4f 70 2d 3e 6f 70 63 6f 64 65  aGTb[pOp->opcode
11320 20 2d 20 4f 50 5f 4e 65 5d 3b 0a 20 20 7d 0a 0a   - OP_Ne];.  }..
11330 20 20 2f 2a 20 55 6e 64 6f 20 61 6e 79 20 63 68    /* Undo any ch
11340 61 6e 67 65 73 20 6d 61 64 65 20 62 79 20 61 70  anges made by ap
11350 70 6c 79 41 66 66 69 6e 69 74 79 28 29 20 74 6f  plyAffinity() to
11360 20 74 68 65 20 69 6e 70 75 74 20 72 65 67 69 73   the input regis
11370 74 65 72 73 2e 20 2a 2f 0a 20 20 61 73 73 65 72  ters. */.  asser
11380 74 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20  t( (pIn1->flags 
11390 26 20 4d 45 4d 5f 44 79 6e 29 20 3d 3d 20 28 66  & MEM_Dyn) == (f
113a0 6c 61 67 73 31 20 26 20 4d 45 4d 5f 44 79 6e 29  lags1 & MEM_Dyn)
113b0 20 29 3b 0a 20 20 70 49 6e 31 2d 3e 66 6c 61 67   );.  pIn1->flag
113c0 73 20 3d 20 66 6c 61 67 73 31 3b 0a 20 20 61 73  s = flags1;.  as
113d0 73 65 72 74 28 20 28 70 49 6e 33 2d 3e 66 6c 61  sert( (pIn3->fla
113e0 67 73 20 26 20 4d 45 4d 5f 44 79 6e 29 20 3d 3d  gs & MEM_Dyn) ==
113f0 20 28 66 6c 61 67 73 33 20 26 20 4d 45 4d 5f 44   (flags3 & MEM_D
11400 79 6e 29 20 29 3b 0a 20 20 70 49 6e 33 2d 3e 66  yn) );.  pIn3->f
11410 6c 61 67 73 20 3d 20 66 6c 61 67 73 33 3b 0a 0a  lags = flags3;..
11420 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 26 20    if( pOp->p5 & 
11430 53 51 4c 49 54 45 5f 53 54 4f 52 45 50 32 20 29  SQLITE_STOREP2 )
11440 7b 0a 20 20 20 20 70 4f 75 74 20 3d 20 26 61 4d  {.    pOut = &aM
11450 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 20  em[pOp->p2];.   
11460 20 69 43 6f 6d 70 61 72 65 20 3d 20 72 65 73 3b   iCompare = res;
11470 0a 20 20 20 20 69 66 28 20 28 70 4f 70 2d 3e 70  .    if( (pOp->p
11480 35 20 26 20 53 51 4c 49 54 45 5f 4b 45 45 50 4e  5 & SQLITE_KEEPN
11490 55 4c 4c 29 21 3d 30 20 29 7b 0a 20 20 20 20 20  ULL)!=0 ){.     
114a0 20 2f 2a 20 54 68 65 20 4b 45 45 50 4e 55 4c 4c   /* The KEEPNULL
114b0 20 66 6c 61 67 20 70 72 65 76 65 6e 74 73 20 4f   flag prevents O
114c0 50 5f 45 71 20 66 72 6f 6d 20 6f 76 65 72 77 72  P_Eq from overwr
114d0 69 74 69 6e 67 20 61 20 4e 55 4c 4c 20 77 69 74  iting a NULL wit
114e0 68 20 31 0a 20 20 20 20 20 20 2a 2a 20 61 6e 64  h 1.      ** and
114f0 20 70 72 65 76 65 6e 74 73 20 4f 50 5f 4e 65 20   prevents OP_Ne 
11500 66 72 6f 6d 20 6f 76 65 72 77 72 69 74 69 6e 67  from overwriting
11510 20 4e 55 4c 4c 20 77 69 74 68 20 30 2e 20 20 54   NULL with 0.  T
11520 68 69 73 20 66 6c 61 67 0a 20 20 20 20 20 20 2a  his flag.      *
11530 2a 20 69 73 20 6f 6e 6c 79 20 75 73 65 64 20 69  * is only used i
11540 6e 20 63 6f 6e 74 65 78 74 73 20 77 68 65 72 65  n contexts where
11550 20 65 69 74 68 65 72 3a 0a 20 20 20 20 20 20 2a   either:.      *
11560 2a 20 20 20 28 31 29 20 6f 70 3d 3d 4f 50 5f 45  *   (1) op==OP_E
11570 71 20 26 26 20 28 72 5b 50 32 5d 3d 3d 4e 55 4c  q && (r[P2]==NUL
11580 4c 20 7c 7c 20 72 5b 50 32 5d 3d 3d 30 29 0a 20  L || r[P2]==0). 
11590 20 20 20 20 20 2a 2a 20 20 20 28 32 29 20 6f 70       **   (2) op
115a0 3d 3d 4f 50 5f 4e 65 20 26 26 20 28 72 5b 50 32  ==OP_Ne && (r[P2
115b0 5d 3d 3d 4e 55 4c 4c 20 7c 7c 20 72 5b 50 32 5d  ]==NULL || r[P2]
115c0 3d 3d 31 29 0a 20 20 20 20 20 20 2a 2a 20 54 68  ==1).      ** Th
115d0 65 72 65 66 6f 72 65 20 69 74 20 69 73 20 6e 6f  erefore it is no
115e0 74 20 6e 65 63 65 73 73 61 72 79 20 74 6f 20 63  t necessary to c
115f0 68 65 63 6b 20 74 68 65 20 63 6f 6e 74 65 6e 74  heck the content
11600 20 6f 66 20 72 5b 50 32 5d 20 66 6f 72 0a 20 20   of r[P2] for.  
11610 20 20 20 20 2a 2a 20 4e 55 4c 4c 2e 20 2a 2f 0a      ** NULL. */.
11620 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f        assert( pO
11630 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4e 65  p->opcode==OP_Ne
11640 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d   || pOp->opcode=
11650 3d 4f 50 5f 45 71 20 29 3b 0a 20 20 20 20 20 20  =OP_Eq );.      
11660 61 73 73 65 72 74 28 20 72 65 73 32 3d 3d 30 20  assert( res2==0 
11670 7c 7c 20 72 65 73 32 3d 3d 31 20 29 3b 0a 20 20  || res2==1 );.  
11680 20 20 20 20 74 65 73 74 63 61 73 65 28 20 72 65      testcase( re
11690 73 32 3d 3d 30 20 26 26 20 70 4f 70 2d 3e 6f 70  s2==0 && pOp->op
116a0 63 6f 64 65 3d 3d 4f 50 5f 45 71 20 29 3b 0a 20  code==OP_Eq );. 
116b0 20 20 20 20 20 74 65 73 74 63 61 73 65 28 20 72       testcase( r
116c0 65 73 32 3d 3d 31 20 26 26 20 70 4f 70 2d 3e 6f  es2==1 && pOp->o
116d0 70 63 6f 64 65 3d 3d 4f 50 5f 45 71 20 29 3b 0a  pcode==OP_Eq );.
116e0 20 20 20 20 20 20 74 65 73 74 63 61 73 65 28 20        testcase( 
116f0 72 65 73 32 3d 3d 30 20 26 26 20 70 4f 70 2d 3e  res2==0 && pOp->
11700 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4e 65 20 29 3b  opcode==OP_Ne );
11710 0a 20 20 20 20 20 20 74 65 73 74 63 61 73 65 28  .      testcase(
11720 20 72 65 73 32 3d 3d 31 20 26 26 20 70 4f 70 2d   res2==1 && pOp-
11730 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4e 65 20 29  >opcode==OP_Ne )
11740 3b 0a 20 20 20 20 20 20 69 66 28 20 28 70 4f 70  ;.      if( (pOp
11750 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 45 71 29  ->opcode==OP_Eq)
11760 3d 3d 72 65 73 32 20 29 20 62 72 65 61 6b 3b 0a  ==res2 ) break;.
11770 20 20 20 20 7d 0a 20 20 20 20 6d 65 6d 41 62 6f      }.    memAbo
11780 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 4f  utToChange(p, pO
11790 75 74 29 3b 0a 20 20 20 20 4d 65 6d 53 65 74 54  ut);.    MemSetT
117a0 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45  ypeFlag(pOut, ME
117b0 4d 5f 49 6e 74 29 3b 0a 20 20 20 20 70 4f 75 74  M_Int);.    pOut
117c0 2d 3e 75 2e 69 20 3d 20 72 65 73 32 3b 0a 20 20  ->u.i = res2;.  
117d0 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45    REGISTER_TRACE
117e0 28 70 4f 70 2d 3e 70 32 2c 20 70 4f 75 74 29 3b  (pOp->p2, pOut);
117f0 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 56 64  .  }else{.    Vd
11800 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 72 65  beBranchTaken(re
11810 73 32 21 3d 30 2c 20 28 70 4f 70 2d 3e 70 35 20  s2!=0, (pOp->p5 
11820 26 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 29  & SQLITE_NULLEQ)
11830 3f 32 3a 33 29 3b 0a 20 20 20 20 69 66 28 20 72  ?2:3);.    if( r
11840 65 73 32 20 29 7b 0a 20 20 20 20 20 20 67 6f 74  es2 ){.      got
11850 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20  o jump_to_p2;.  
11860 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b    }.  }.  break;
11870 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 45  .}../* Opcode: E
11880 6c 73 65 4e 6f 74 45 71 20 2a 20 50 32 20 2a 20  lseNotEq * P2 * 
11890 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f  * *.**.** This o
118a0 70 63 6f 64 65 20 6d 75 73 74 20 69 6d 6d 65 64  pcode must immed
118b0 69 61 74 65 6c 79 20 66 6f 6c 6c 6f 77 20 61 6e  iately follow an
118c0 20 4f 50 5f 4c 74 20 6f 72 20 4f 50 5f 47 74 20   OP_Lt or OP_Gt 
118d0 63 6f 6d 70 61 72 69 73 6f 6e 20 6f 70 65 72 61  comparison opera
118e0 74 6f 72 2e 0a 2a 2a 20 49 66 20 72 65 73 75 6c  tor..** If resul
118f0 74 20 6f 66 20 61 6e 20 4f 50 5f 45 71 20 63 6f  t of an OP_Eq co
11900 6d 70 61 72 69 73 6f 6e 20 6f 6e 20 74 68 65 20  mparison on the 
11910 73 61 6d 65 20 74 77 6f 20 6f 70 65 72 61 6e 64  same two operand
11920 73 0a 2a 2a 20 77 6f 75 6c 64 20 68 61 76 65 20  s.** would have 
11930 62 65 20 4e 55 4c 4c 20 6f 72 20 66 61 6c 73 65  be NULL or false
11940 20 28 30 29 2c 20 74 68 65 6e 20 74 68 65 6e 20   (0), then then 
11950 6a 75 6d 70 20 74 6f 20 50 32 2e 20 0a 2a 2a 20  jump to P2. .** 
11960 49 66 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66  If the result of
11970 20 61 6e 20 4f 50 5f 45 71 20 63 6f 6d 70 61 72   an OP_Eq compar
11980 69 73 6f 6e 20 6f 6e 20 74 68 65 20 74 77 6f 20  ison on the two 
11990 70 72 65 76 69 6f 75 73 20 6f 70 65 72 61 6e 64  previous operand
119a0 73 0a 2a 2a 20 77 6f 75 6c 64 20 68 61 76 65 20  s.** would have 
119b0 62 65 65 6e 20 74 72 75 65 20 28 31 29 2c 20 74  been true (1), t
119c0 68 65 6e 20 66 61 6c 6c 20 74 68 72 6f 75 67 68  hen fall through
119d0 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 45 6c 73  ..*/.case OP_Els
119e0 65 4e 6f 74 45 71 3a 20 7b 20 20 20 20 20 20 20  eNotEq: {       
119f0 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 45 53  /* same as TK_ES
11a00 43 41 50 45 2c 20 6a 75 6d 70 20 2a 2f 0a 20 20  CAPE, jump */.  
11a10 61 73 73 65 72 74 28 20 70 4f 70 3e 61 4f 70 20  assert( pOp>aOp 
11a20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  );.  assert( pOp
11a30 5b 2d 31 5d 2e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  [-1].opcode==OP_
11a40 4c 74 20 7c 7c 20 70 4f 70 5b 2d 31 5d 2e 6f 70  Lt || pOp[-1].op
11a50 63 6f 64 65 3d 3d 4f 50 5f 47 74 20 29 3b 0a 20  code==OP_Gt );. 
11a60 20 61 73 73 65 72 74 28 20 70 4f 70 5b 2d 31 5d   assert( pOp[-1]
11a70 2e 70 35 20 26 20 53 51 4c 49 54 45 5f 53 54 4f  .p5 & SQLITE_STO
11a80 52 45 50 32 20 29 3b 0a 20 20 56 64 62 65 42 72  REP2 );.  VdbeBr
11a90 61 6e 63 68 54 61 6b 65 6e 28 69 43 6f 6d 70 61  anchTaken(iCompa
11aa0 72 65 21 3d 30 2c 20 32 29 3b 0a 20 20 69 66 28  re!=0, 2);.  if(
11ab0 20 69 43 6f 6d 70 61 72 65 21 3d 30 20 29 20 67   iCompare!=0 ) g
11ac0 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a  oto jump_to_p2;.
11ad0 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 2f 2a 20    break;.}.../* 
11ae0 4f 70 63 6f 64 65 3a 20 50 65 72 6d 75 74 61 74  Opcode: Permutat
11af0 69 6f 6e 20 2a 20 2a 20 2a 20 50 34 20 2a 0a 2a  ion * * * P4 *.*
11b00 2a 0a 2a 2a 20 53 65 74 20 74 68 65 20 70 65 72  *.** Set the per
11b10 6d 75 74 61 74 69 6f 6e 20 75 73 65 64 20 62 79  mutation used by
11b20 20 74 68 65 20 4f 50 5f 43 6f 6d 70 61 72 65 20   the OP_Compare 
11b30 6f 70 65 72 61 74 6f 72 20 69 6e 20 74 68 65 20  operator in the 
11b40 6e 65 78 74 0a 2a 2a 20 69 6e 73 74 72 75 63 74  next.** instruct
11b50 69 6f 6e 2e 20 20 54 68 65 20 70 65 72 6d 75 74  ion.  The permut
11b60 61 74 69 6f 6e 20 69 73 20 73 74 6f 72 65 64 20  ation is stored 
11b70 69 6e 20 74 68 65 20 50 34 20 6f 70 65 72 61 6e  in the P4 operan
11b80 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 70 65 72  d..**.** The per
11b90 6d 75 74 61 74 69 6f 6e 20 69 73 20 6f 6e 6c 79  mutation is only
11ba0 20 76 61 6c 69 64 20 75 6e 74 69 6c 20 74 68 65   valid until the
11bb0 20 6e 65 78 74 20 4f 50 5f 43 6f 6d 70 61 72 65   next OP_Compare
11bc0 20 74 68 61 74 20 68 61 73 0a 2a 2a 20 74 68 65   that has.** the
11bd0 20 4f 50 46 4c 41 47 5f 50 45 52 4d 55 54 45 20   OPFLAG_PERMUTE 
11be0 62 69 74 20 73 65 74 20 69 6e 20 50 35 2e 20 54  bit set in P5. T
11bf0 79 70 69 63 61 6c 6c 79 20 74 68 65 20 4f 50 5f  ypically the OP_
11c00 50 65 72 6d 75 74 61 74 69 6f 6e 20 73 68 6f 75  Permutation shou
11c10 6c 64 20 0a 2a 2a 20 6f 63 63 75 72 20 69 6d 6d  ld .** occur imm
11c20 65 64 69 61 74 65 6c 79 20 70 72 69 6f 72 20 74  ediately prior t
11c30 6f 20 74 68 65 20 4f 50 5f 43 6f 6d 70 61 72 65  o the OP_Compare
11c40 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 66 69 72 73  ..**.** The firs
11c50 74 20 69 6e 74 65 67 65 72 20 69 6e 20 74 68 65  t integer in the
11c60 20 50 34 20 69 6e 74 65 67 65 72 20 61 72 72 61   P4 integer arra
11c70 79 20 69 73 20 74 68 65 20 6c 65 6e 67 74 68 20  y is the length 
11c80 6f 66 20 74 68 65 20 61 72 72 61 79 0a 2a 2a 20  of the array.** 
11c90 61 6e 64 20 64 6f 65 73 20 6e 6f 74 20 62 65 63  and does not bec
11ca0 6f 6d 65 20 70 61 72 74 20 6f 66 20 74 68 65 20  ome part of the 
11cb0 70 65 72 6d 75 74 61 74 69 6f 6e 2e 0a 2a 2f 0a  permutation..*/.
11cc0 63 61 73 65 20 4f 50 5f 50 65 72 6d 75 74 61 74  case OP_Permutat
11cd0 69 6f 6e 3a 20 7b 0a 20 20 61 73 73 65 72 74 28  ion: {.  assert(
11ce0 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34   pOp->p4type==P4
11cf0 5f 49 4e 54 41 52 52 41 59 20 29 3b 0a 20 20 61  _INTARRAY );.  a
11d00 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 2e 61  ssert( pOp->p4.a
11d10 69 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  i );.  assert( p
11d20 4f 70 5b 31 5d 2e 6f 70 63 6f 64 65 3d 3d 4f 50  Op[1].opcode==OP
11d30 5f 43 6f 6d 70 61 72 65 20 29 3b 0a 20 20 61 73  _Compare );.  as
11d40 73 65 72 74 28 20 70 4f 70 5b 31 5d 2e 70 35 20  sert( pOp[1].p5 
11d50 26 20 4f 50 46 4c 41 47 5f 50 45 52 4d 55 54 45  & OPFLAG_PERMUTE
11d60 20 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a   );.  break;.}..
11d70 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6f 6d 70 61  /* Opcode: Compa
11d80 72 65 20 50 31 20 50 32 20 50 33 20 50 34 20 50  re P1 P2 P3 P4 P
11d90 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72  5.** Synopsis: r
11da0 5b 50 31 40 50 33 5d 20 3c 2d 3e 20 72 5b 50 32  [P1@P3] <-> r[P2
11db0 40 50 33 5d 0a 2a 2a 0a 2a 2a 20 43 6f 6d 70 61  @P3].**.** Compa
11dc0 72 65 20 74 77 6f 20 76 65 63 74 6f 72 73 20 6f  re two vectors o
11dd0 66 20 72 65 67 69 73 74 65 72 73 20 69 6e 20 72  f registers in r
11de0 65 67 28 50 31 29 2e 2e 72 65 67 28 50 31 2b 50  eg(P1)..reg(P1+P
11df0 33 2d 31 29 20 28 63 61 6c 6c 20 74 68 69 73 0a  3-1) (call this.
11e00 2a 2a 20 76 65 63 74 6f 72 20 22 41 22 29 20 61  ** vector "A") a
11e10 6e 64 20 69 6e 20 72 65 67 28 50 32 29 2e 2e 72  nd in reg(P2)..r
11e20 65 67 28 50 32 2b 50 33 2d 31 29 20 28 22 42 22  eg(P2+P3-1) ("B"
11e30 29 2e 20 20 53 61 76 65 20 74 68 65 20 72 65 73  ).  Save the res
11e40 75 6c 74 20 6f 66 0a 2a 2a 20 74 68 65 20 63 6f  ult of.** the co
11e50 6d 70 61 72 69 73 6f 6e 20 66 6f 72 20 75 73 65  mparison for use
11e60 20 62 79 20 74 68 65 20 6e 65 78 74 20 4f 50 5f   by the next OP_
11e70 4a 75 6d 70 20 69 6e 73 74 72 75 63 74 2e 0a 2a  Jump instruct..*
11e80 2a 0a 2a 2a 20 49 66 20 50 35 20 68 61 73 20 74  *.** If P5 has t
11e90 68 65 20 4f 50 46 4c 41 47 5f 50 45 52 4d 55 54  he OPFLAG_PERMUT
11ea0 45 20 62 69 74 20 73 65 74 2c 20 74 68 65 6e 20  E bit set, then 
11eb0 74 68 65 20 6f 72 64 65 72 20 6f 66 20 63 6f 6d  the order of com
11ec0 70 61 72 69 73 6f 6e 20 69 73 0a 2a 2a 20 64 65  parison is.** de
11ed0 74 65 72 6d 69 6e 65 64 20 62 79 20 74 68 65 20  termined by the 
11ee0 6d 6f 73 74 20 72 65 63 65 6e 74 20 4f 50 5f 50  most recent OP_P
11ef0 65 72 6d 75 74 61 74 69 6f 6e 20 6f 70 65 72 61  ermutation opera
11f00 74 6f 72 2e 20 20 49 66 20 74 68 65 0a 2a 2a 20  tor.  If the.** 
11f10 4f 50 46 4c 41 47 5f 50 45 52 4d 55 54 45 20 62  OPFLAG_PERMUTE b
11f20 69 74 20 69 73 20 63 6c 65 61 72 2c 20 74 68 65  it is clear, the
11f30 6e 20 72 65 67 69 73 74 65 72 20 61 72 65 20 63  n register are c
11f40 6f 6d 70 61 72 65 64 20 69 6e 20 73 65 71 75 65  ompared in seque
11f50 6e 74 69 61 6c 0a 2a 2a 20 6f 72 64 65 72 2e 0a  ntial.** order..
11f60 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20 4b 65  **.** P4 is a Ke
11f70 79 49 6e 66 6f 20 73 74 72 75 63 74 75 72 65 20  yInfo structure 
11f80 74 68 61 74 20 64 65 66 69 6e 65 73 20 63 6f 6c  that defines col
11f90 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 73  lating sequences
11fa0 20 61 6e 64 20 73 6f 72 74 0a 2a 2a 20 6f 72 64   and sort.** ord
11fb0 65 72 73 20 66 6f 72 20 74 68 65 20 63 6f 6d 70  ers for the comp
11fc0 61 72 69 73 6f 6e 2e 20 20 54 68 65 20 70 65 72  arison.  The per
11fd0 6d 75 74 61 74 69 6f 6e 20 61 70 70 6c 69 65 73  mutation applies
11fe0 20 74 6f 20 72 65 67 69 73 74 65 72 73 0a 2a 2a   to registers.**
11ff0 20 6f 6e 6c 79 2e 20 20 54 68 65 20 4b 65 79 49   only.  The KeyI
12000 6e 66 6f 20 65 6c 65 6d 65 6e 74 73 20 61 72 65  nfo elements are
12010 20 75 73 65 64 20 73 65 71 75 65 6e 74 69 61 6c   used sequential
12020 6c 79 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 63 6f  ly..**.** The co
12030 6d 70 61 72 69 73 6f 6e 20 69 73 20 61 20 73 6f  mparison is a so
12040 72 74 20 63 6f 6d 70 61 72 69 73 6f 6e 2c 20 73  rt comparison, s
12050 6f 20 4e 55 4c 4c 73 20 63 6f 6d 70 61 72 65 20  o NULLs compare 
12060 65 71 75 61 6c 2c 0a 2a 2a 20 4e 55 4c 4c 73 20  equal,.** NULLs 
12070 61 72 65 20 6c 65 73 73 20 74 68 61 6e 20 6e 75  are less than nu
12080 6d 62 65 72 73 2c 20 6e 75 6d 62 65 72 73 20 61  mbers, numbers a
12090 72 65 20 6c 65 73 73 20 74 68 61 6e 20 73 74 72  re less than str
120a0 69 6e 67 73 2c 0a 2a 2a 20 61 6e 64 20 73 74 72  ings,.** and str
120b0 69 6e 67 73 20 61 72 65 20 6c 65 73 73 20 74 68  ings are less th
120c0 61 6e 20 62 6c 6f 62 73 2e 0a 2a 2f 0a 63 61 73  an blobs..*/.cas
120d0 65 20 4f 50 5f 43 6f 6d 70 61 72 65 3a 20 7b 0a  e OP_Compare: {.
120e0 20 20 69 6e 74 20 6e 3b 0a 20 20 69 6e 74 20 69    int n;.  int i
120f0 3b 0a 20 20 69 6e 74 20 70 31 3b 0a 20 20 69 6e  ;.  int p1;.  in
12100 74 20 70 32 3b 0a 20 20 63 6f 6e 73 74 20 4b 65  t p2;.  const Ke
12110 79 49 6e 66 6f 20 2a 70 4b 65 79 49 6e 66 6f 3b  yInfo *pKeyInfo;
12120 0a 20 20 69 6e 74 20 69 64 78 3b 0a 20 20 43 6f  .  int idx;.  Co
12130 6c 6c 53 65 71 20 2a 70 43 6f 6c 6c 3b 20 20 20  llSeq *pColl;   
12140 20 2f 2a 20 43 6f 6c 6c 61 74 69 6e 67 20 73 65   /* Collating se
12150 71 75 65 6e 63 65 20 74 6f 20 75 73 65 20 6f 6e  quence to use on
12160 20 74 68 69 73 20 74 65 72 6d 20 2a 2f 0a 20 20   this term */.  
12170 69 6e 74 20 62 52 65 76 3b 20 20 20 20 20 20 20  int bRev;       
12180 20 20 20 2f 2a 20 54 72 75 65 20 66 6f 72 20 44     /* True for D
12190 45 53 43 45 4e 44 49 4e 47 20 73 6f 72 74 20 6f  ESCENDING sort o
121a0 72 64 65 72 20 2a 2f 0a 20 20 69 6e 74 20 2a 61  rder */.  int *a
121b0 50 65 72 6d 75 74 65 3b 20 20 20 20 20 2f 2a 20  Permute;     /* 
121c0 54 68 65 20 70 65 72 6d 75 74 61 74 69 6f 6e 20  The permutation 
121d0 2a 2f 0a 0a 20 20 69 66 28 20 28 70 4f 70 2d 3e  */..  if( (pOp->
121e0 70 35 20 26 20 4f 50 46 4c 41 47 5f 50 45 52 4d  p5 & OPFLAG_PERM
121f0 55 54 45 29 3d 3d 30 20 29 7b 0a 20 20 20 20 61  UTE)==0 ){.    a
12200 50 65 72 6d 75 74 65 20 3d 20 30 3b 0a 20 20 7d  Permute = 0;.  }
12210 65 6c 73 65 7b 0a 20 20 20 20 61 73 73 65 72 74  else{.    assert
12220 28 20 70 4f 70 3e 61 4f 70 20 29 3b 0a 20 20 20  ( pOp>aOp );.   
12230 20 61 73 73 65 72 74 28 20 70 4f 70 5b 2d 31 5d   assert( pOp[-1]
12240 2e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 50 65 72 6d  .opcode==OP_Perm
12250 75 74 61 74 69 6f 6e 20 29 3b 0a 20 20 20 20 61  utation );.    a
12260 73 73 65 72 74 28 20 70 4f 70 5b 2d 31 5d 2e 70  ssert( pOp[-1].p
12270 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54 41 52 52  4type==P4_INTARR
12280 41 59 20 29 3b 0a 20 20 20 20 61 50 65 72 6d 75  AY );.    aPermu
12290 74 65 20 3d 20 70 4f 70 5b 2d 31 5d 2e 70 34 2e  te = pOp[-1].p4.
122a0 61 69 20 2b 20 31 3b 0a 20 20 20 20 61 73 73 65  ai + 1;.    asse
122b0 72 74 28 20 61 50 65 72 6d 75 74 65 21 3d 30 20  rt( aPermute!=0 
122c0 29 3b 0a 20 20 7d 0a 20 20 6e 20 3d 20 70 4f 70  );.  }.  n = pOp
122d0 2d 3e 70 33 3b 0a 20 20 70 4b 65 79 49 6e 66 6f  ->p3;.  pKeyInfo
122e0 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 4b 65 79 49   = pOp->p4.pKeyI
122f0 6e 66 6f 3b 0a 20 20 61 73 73 65 72 74 28 20 6e  nfo;.  assert( n
12300 3e 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  >0 );.  assert( 
12310 70 4b 65 79 49 6e 66 6f 21 3d 30 20 29 3b 0a 20  pKeyInfo!=0 );. 
12320 20 70 31 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20   p1 = pOp->p1;. 
12330 20 70 32 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 23   p2 = pOp->p2;.#
12340 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42  ifdef SQLITE_DEB
12350 55 47 0a 20 20 69 66 28 20 61 50 65 72 6d 75 74  UG.  if( aPermut
12360 65 20 29 7b 0a 20 20 20 20 69 6e 74 20 6b 2c 20  e ){.    int k, 
12370 6d 78 20 3d 20 30 3b 0a 20 20 20 20 66 6f 72 28  mx = 0;.    for(
12380 6b 3d 30 3b 20 6b 3c 6e 3b 20 6b 2b 2b 29 20 69  k=0; k<n; k++) i
12390 66 28 20 61 50 65 72 6d 75 74 65 5b 6b 5d 3e 6d  f( aPermute[k]>m
123a0 78 20 29 20 6d 78 20 3d 20 61 50 65 72 6d 75 74  x ) mx = aPermut
123b0 65 5b 6b 5d 3b 0a 20 20 20 20 61 73 73 65 72 74  e[k];.    assert
123c0 28 20 70 31 3e 30 20 26 26 20 70 31 2b 6d 78 3c  ( p1>0 && p1+mx<
123d0 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d  =(p->nMem+1 - p-
123e0 3e 6e 43 75 72 73 6f 72 29 2b 31 20 29 3b 0a 20  >nCursor)+1 );. 
123f0 20 20 20 61 73 73 65 72 74 28 20 70 32 3e 30 20     assert( p2>0 
12400 26 26 20 70 32 2b 6d 78 3c 3d 28 70 2d 3e 6e 4d  && p2+mx<=(p->nM
12410 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f  em+1 - p->nCurso
12420 72 29 2b 31 20 29 3b 0a 20 20 7d 65 6c 73 65 7b  r)+1 );.  }else{
12430 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 31 3e  .    assert( p1>
12440 30 20 26 26 20 70 31 2b 6e 3c 3d 28 70 2d 3e 6e  0 && p1+n<=(p->n
12450 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73  Mem+1 - p->nCurs
12460 6f 72 29 2b 31 20 29 3b 0a 20 20 20 20 61 73 73  or)+1 );.    ass
12470 65 72 74 28 20 70 32 3e 30 20 26 26 20 70 32 2b  ert( p2>0 && p2+
12480 6e 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20  n<=(p->nMem+1 - 
12490 70 2d 3e 6e 43 75 72 73 6f 72 29 2b 31 20 29 3b  p->nCursor)+1 );
124a0 0a 20 20 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53  .  }.#endif /* S
124b0 51 4c 49 54 45 5f 44 45 42 55 47 20 2a 2f 0a 20  QLITE_DEBUG */. 
124c0 20 66 6f 72 28 69 3d 30 3b 20 69 3c 6e 3b 20 69   for(i=0; i<n; i
124d0 2b 2b 29 7b 0a 20 20 20 20 69 64 78 20 3d 20 61  ++){.    idx = a
124e0 50 65 72 6d 75 74 65 20 3f 20 61 50 65 72 6d 75  Permute ? aPermu
124f0 74 65 5b 69 5d 20 3a 20 69 3b 0a 20 20 20 20 61  te[i] : i;.    a
12500 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69  ssert( memIsVali
12510 64 28 26 61 4d 65 6d 5b 70 31 2b 69 64 78 5d 29  d(&aMem[p1+idx])
12520 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20   );.    assert( 
12530 6d 65 6d 49 73 56 61 6c 69 64 28 26 61 4d 65 6d  memIsValid(&aMem
12540 5b 70 32 2b 69 64 78 5d 29 20 29 3b 0a 20 20 20  [p2+idx]) );.   
12550 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28   REGISTER_TRACE(
12560 70 31 2b 69 64 78 2c 20 26 61 4d 65 6d 5b 70 31  p1+idx, &aMem[p1
12570 2b 69 64 78 5d 29 3b 0a 20 20 20 20 52 45 47 49  +idx]);.    REGI
12580 53 54 45 52 5f 54 52 41 43 45 28 70 32 2b 69 64  STER_TRACE(p2+id
12590 78 2c 20 26 61 4d 65 6d 5b 70 32 2b 69 64 78 5d  x, &aMem[p2+idx]
125a0 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 69  );.    assert( i
125b0 3c 70 4b 65 79 49 6e 66 6f 2d 3e 6e 4b 65 79 46  <pKeyInfo->nKeyF
125c0 69 65 6c 64 20 29 3b 0a 20 20 20 20 70 43 6f 6c  ield );.    pCol
125d0 6c 20 3d 20 70 4b 65 79 49 6e 66 6f 2d 3e 61 43  l = pKeyInfo->aC
125e0 6f 6c 6c 5b 69 5d 3b 0a 20 20 20 20 62 52 65 76  oll[i];.    bRev
125f0 20 3d 20 70 4b 65 79 49 6e 66 6f 2d 3e 61 53 6f   = pKeyInfo->aSo
12600 72 74 4f 72 64 65 72 5b 69 5d 3b 0a 20 20 20 20  rtOrder[i];.    
12610 69 43 6f 6d 70 61 72 65 20 3d 20 73 71 6c 69 74  iCompare = sqlit
12620 65 33 4d 65 6d 43 6f 6d 70 61 72 65 28 26 61 4d  e3MemCompare(&aM
12630 65 6d 5b 70 31 2b 69 64 78 5d 2c 20 26 61 4d 65  em[p1+idx], &aMe
12640 6d 5b 70 32 2b 69 64 78 5d 2c 20 70 43 6f 6c 6c  m[p2+idx], pColl
12650 29 3b 0a 20 20 20 20 69 66 28 20 69 43 6f 6d 70  );.    if( iComp
12660 61 72 65 20 29 7b 0a 20 20 20 20 20 20 69 66 28  are ){.      if(
12670 20 62 52 65 76 20 29 20 69 43 6f 6d 70 61 72 65   bRev ) iCompare
12680 20 3d 20 2d 69 43 6f 6d 70 61 72 65 3b 0a 20 20   = -iCompare;.  
12690 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d      break;.    }
126a0 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
126b0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4a 75 6d 70  ./* Opcode: Jump
126c0 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a   P1 P2 P3 * *.**
126d0 0a 2a 2a 20 4a 75 6d 70 20 74 6f 20 74 68 65 20  .** Jump to the 
126e0 69 6e 73 74 72 75 63 74 69 6f 6e 20 61 74 20 61  instruction at a
126f0 64 64 72 65 73 73 20 50 31 2c 20 50 32 2c 20 6f  ddress P1, P2, o
12700 72 20 50 33 20 64 65 70 65 6e 64 69 6e 67 20 6f  r P3 depending o
12710 6e 20 77 68 65 74 68 65 72 0a 2a 2a 20 69 6e 20  n whether.** in 
12720 74 68 65 20 6d 6f 73 74 20 72 65 63 65 6e 74 20  the most recent 
12730 4f 50 5f 43 6f 6d 70 61 72 65 20 69 6e 73 74 72  OP_Compare instr
12740 75 63 74 69 6f 6e 20 74 68 65 20 50 31 20 76 65  uction the P1 ve
12750 63 74 6f 72 20 77 61 73 20 6c 65 73 73 20 74 68  ctor was less th
12760 61 6e 0a 2a 2a 20 65 71 75 61 6c 20 74 6f 2c 20  an.** equal to, 
12770 6f 72 20 67 72 65 61 74 65 72 20 74 68 61 6e 20  or greater than 
12780 74 68 65 20 50 32 20 76 65 63 74 6f 72 2c 20 72  the P2 vector, r
12790 65 73 70 65 63 74 69 76 65 6c 79 2e 0a 2a 2f 0a  espectively..*/.
127a0 63 61 73 65 20 4f 50 5f 4a 75 6d 70 3a 20 7b 20  case OP_Jump: { 
127b0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a              /* j
127c0 75 6d 70 20 2a 2f 0a 20 20 69 66 28 20 69 43 6f  ump */.  if( iCo
127d0 6d 70 61 72 65 3c 30 20 29 7b 0a 20 20 20 20 56  mpare<0 ){.    V
127e0 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 30  dbeBranchTaken(0
127f0 2c 34 29 3b 20 70 4f 70 20 3d 20 26 61 4f 70 5b  ,4); pOp = &aOp[
12800 70 4f 70 2d 3e 70 31 20 2d 20 31 5d 3b 0a 20 20  pOp->p1 - 1];.  
12810 7d 65 6c 73 65 20 69 66 28 20 69 43 6f 6d 70 61  }else if( iCompa
12820 72 65 3d 3d 30 20 29 7b 0a 20 20 20 20 56 64 62  re==0 ){.    Vdb
12830 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 31 2c 34  eBranchTaken(1,4
12840 29 3b 20 70 4f 70 20 3d 20 26 61 4f 70 5b 70 4f  ); pOp = &aOp[pO
12850 70 2d 3e 70 32 20 2d 20 31 5d 3b 0a 20 20 7d 65  p->p2 - 1];.  }e
12860 6c 73 65 7b 0a 20 20 20 20 56 64 62 65 42 72 61  lse{.    VdbeBra
12870 6e 63 68 54 61 6b 65 6e 28 32 2c 34 29 3b 20 70  nchTaken(2,4); p
12880 4f 70 20 3d 20 26 61 4f 70 5b 70 4f 70 2d 3e 70  Op = &aOp[pOp->p
12890 33 20 2d 20 31 5d 3b 0a 20 20 7d 0a 20 20 62 72  3 - 1];.  }.  br
128a0 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
128b0 65 3a 20 41 6e 64 20 50 31 20 50 32 20 50 33 20  e: And P1 P2 P3 
128c0 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  * *.** Synopsis:
128d0 20 72 5b 50 33 5d 3d 28 72 5b 50 31 5d 20 26 26   r[P3]=(r[P1] &&
128e0 20 72 5b 50 32 5d 29 0a 2a 2a 0a 2a 2a 20 54 61   r[P2]).**.** Ta
128f0 6b 65 20 74 68 65 20 6c 6f 67 69 63 61 6c 20 41  ke the logical A
12900 4e 44 20 6f 66 20 74 68 65 20 76 61 6c 75 65 73  ND of the values
12910 20 69 6e 20 72 65 67 69 73 74 65 72 73 20 50 31   in registers P1
12920 20 61 6e 64 20 50 32 20 61 6e 64 0a 2a 2a 20 77   and P2 and.** w
12930 72 69 74 65 20 74 68 65 20 72 65 73 75 6c 74 20  rite the result 
12940 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 33  into register P3
12950 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 65 69 74 68 65  ..**.** If eithe
12960 72 20 50 31 20 6f 72 20 50 32 20 69 73 20 30 20  r P1 or P2 is 0 
12970 28 66 61 6c 73 65 29 20 74 68 65 6e 20 74 68 65  (false) then the
12980 20 72 65 73 75 6c 74 20 69 73 20 30 20 65 76 65   result is 0 eve
12990 6e 20 69 66 0a 2a 2a 20 74 68 65 20 6f 74 68 65  n if.** the othe
129a0 72 20 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2e  r input is NULL.
129b0 20 20 41 20 4e 55 4c 4c 20 61 6e 64 20 74 72 75    A NULL and tru
129c0 65 20 6f 72 20 74 77 6f 20 4e 55 4c 4c 73 20 67  e or two NULLs g
129d0 69 76 65 0a 2a 2a 20 61 20 4e 55 4c 4c 20 6f 75  ive.** a NULL ou
129e0 74 70 75 74 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f  tput..*/./* Opco
129f0 64 65 3a 20 4f 72 20 50 31 20 50 32 20 50 33 20  de: Or P1 P2 P3 
12a00 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  * *.** Synopsis:
12a10 20 72 5b 50 33 5d 3d 28 72 5b 50 31 5d 20 7c 7c   r[P3]=(r[P1] ||
12a20 20 72 5b 50 32 5d 29 0a 2a 2a 0a 2a 2a 20 54 61   r[P2]).**.** Ta
12a30 6b 65 20 74 68 65 20 6c 6f 67 69 63 61 6c 20 4f  ke the logical O
12a40 52 20 6f 66 20 74 68 65 20 76 61 6c 75 65 73 20  R of the values 
12a50 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 61  in register P1 a
12a60 6e 64 20 50 32 20 61 6e 64 0a 2a 2a 20 73 74 6f  nd P2 and.** sto
12a70 72 65 20 74 68 65 20 61 6e 73 77 65 72 20 69 6e  re the answer in
12a80 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a   register P3..**
12a90 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20 50 31  .** If either P1
12aa0 20 6f 72 20 50 32 20 69 73 20 6e 6f 6e 7a 65 72   or P2 is nonzer
12ab0 6f 20 28 74 72 75 65 29 20 74 68 65 6e 20 74 68  o (true) then th
12ac0 65 20 72 65 73 75 6c 74 20 69 73 20 31 20 28 74  e result is 1 (t
12ad0 72 75 65 29 0a 2a 2a 20 65 76 65 6e 20 69 66 20  rue).** even if 
12ae0 74 68 65 20 6f 74 68 65 72 20 69 6e 70 75 74 20  the other input 
12af0 69 73 20 4e 55 4c 4c 2e 20 20 41 20 4e 55 4c 4c  is NULL.  A NULL
12b00 20 61 6e 64 20 66 61 6c 73 65 20 6f 72 20 74 77   and false or tw
12b10 6f 20 4e 55 4c 4c 73 0a 2a 2a 20 67 69 76 65 20  o NULLs.** give 
12b20 61 20 4e 55 4c 4c 20 6f 75 74 70 75 74 2e 0a 2a  a NULL output..*
12b30 2f 0a 63 61 73 65 20 4f 50 5f 41 6e 64 3a 20 20  /.case OP_And:  
12b40 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73              /* s
12b50 61 6d 65 20 61 73 20 54 4b 5f 41 4e 44 2c 20 69  ame as TK_AND, i
12b60 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f  n1, in2, out3 */
12b70 0a 63 61 73 65 20 4f 50 5f 4f 72 3a 20 7b 20 20  .case OP_Or: {  
12b80 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61             /* sa
12b90 6d 65 20 61 73 20 54 4b 5f 4f 52 2c 20 69 6e 31  me as TK_OR, in1
12ba0 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 20  , in2, out3 */. 
12bb0 20 69 6e 74 20 76 31 3b 20 20 20 20 2f 2a 20 4c   int v1;    /* L
12bc0 65 66 74 20 6f 70 65 72 61 6e 64 3a 20 20 30 3d  eft operand:  0=
12bd0 3d 46 41 4c 53 45 2c 20 31 3d 3d 54 52 55 45 2c  =FALSE, 1==TRUE,
12be0 20 32 3d 3d 55 4e 4b 4e 4f 57 4e 20 6f 72 20 4e   2==UNKNOWN or N
12bf0 55 4c 4c 20 2a 2f 0a 20 20 69 6e 74 20 76 32 3b  ULL */.  int v2;
12c00 20 20 20 20 2f 2a 20 52 69 67 68 74 20 6f 70 65      /* Right ope
12c10 72 61 6e 64 3a 20 30 3d 3d 46 41 4c 53 45 2c 20  rand: 0==FALSE, 
12c20 31 3d 3d 54 52 55 45 2c 20 32 3d 3d 55 4e 4b 4e  1==TRUE, 2==UNKN
12c30 4f 57 4e 20 6f 72 20 4e 55 4c 4c 20 2a 2f 0a 0a  OWN or NULL */..
12c40 20 20 76 31 20 3d 20 73 71 6c 69 74 65 33 56 64    v1 = sqlite3Vd
12c50 62 65 42 6f 6f 6c 65 61 6e 56 61 6c 75 65 28 26  beBooleanValue(&
12c60 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 2c 20 32  aMem[pOp->p1], 2
12c70 29 3b 0a 20 20 76 32 20 3d 20 73 71 6c 69 74 65  );.  v2 = sqlite
12c80 33 56 64 62 65 42 6f 6f 6c 65 61 6e 56 61 6c 75  3VdbeBooleanValu
12c90 65 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d  e(&aMem[pOp->p2]
12ca0 2c 20 32 29 3b 0a 20 20 69 66 28 20 70 4f 70 2d  , 2);.  if( pOp-
12cb0 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 41 6e 64 20  >opcode==OP_And 
12cc0 29 7b 0a 20 20 20 20 73 74 61 74 69 63 20 63 6f  ){.    static co
12cd0 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61  nst unsigned cha
12ce0 72 20 61 6e 64 5f 6c 6f 67 69 63 5b 5d 20 3d 20  r and_logic[] = 
12cf0 7b 20 30 2c 20 30 2c 20 30 2c 20 30 2c 20 31 2c  { 0, 0, 0, 0, 1,
12d00 20 32 2c 20 30 2c 20 32 2c 20 32 20 7d 3b 0a 20   2, 0, 2, 2 };. 
12d10 20 20 20 76 31 20 3d 20 61 6e 64 5f 6c 6f 67 69     v1 = and_logi
12d20 63 5b 76 31 2a 33 2b 76 32 5d 3b 0a 20 20 7d 65  c[v1*3+v2];.  }e
12d30 6c 73 65 7b 0a 20 20 20 20 73 74 61 74 69 63 20  lse{.    static 
12d40 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63  const unsigned c
12d50 68 61 72 20 6f 72 5f 6c 6f 67 69 63 5b 5d 20 3d  har or_logic[] =
12d60 20 7b 20 30 2c 20 31 2c 20 32 2c 20 31 2c 20 31   { 0, 1, 2, 1, 1
12d70 2c 20 31 2c 20 32 2c 20 31 2c 20 32 20 7d 3b 0a  , 1, 2, 1, 2 };.
12d80 20 20 20 20 76 31 20 3d 20 6f 72 5f 6c 6f 67 69      v1 = or_logi
12d90 63 5b 76 31 2a 33 2b 76 32 5d 3b 0a 20 20 7d 0a  c[v1*3+v2];.  }.
12da0 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70    pOut = &aMem[p
12db0 4f 70 2d 3e 70 33 5d 3b 0a 20 20 69 66 28 20 76  Op->p3];.  if( v
12dc0 31 3d 3d 32 20 29 7b 0a 20 20 20 20 4d 65 6d 53  1==2 ){.    MemS
12dd0 65 74 54 79 70 65 46 6c 61 67 28 70 4f 75 74 2c  etTypeFlag(pOut,
12de0 20 4d 45 4d 5f 4e 75 6c 6c 29 3b 0a 20 20 7d 65   MEM_Null);.  }e
12df0 6c 73 65 7b 0a 20 20 20 20 70 4f 75 74 2d 3e 75  lse{.    pOut->u
12e00 2e 69 20 3d 20 76 31 3b 0a 20 20 20 20 4d 65 6d  .i = v1;.    Mem
12e10 53 65 74 54 79 70 65 46 6c 61 67 28 70 4f 75 74  SetTypeFlag(pOut
12e20 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20 7d 0a  , MEM_Int);.  }.
12e30 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
12e40 70 63 6f 64 65 3a 20 49 73 54 72 75 65 20 50 31  pcode: IsTrue P1
12e50 20 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a 20 53   P2 P3 P4 *.** S
12e60 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 20 3d  ynopsis: r[P2] =
12e70 20 63 6f 61 6c 65 73 63 65 28 72 5b 50 31 5d 3d   coalesce(r[P1]=
12e80 3d 54 52 55 45 2c 50 33 29 20 5e 20 50 34 0a 2a  =TRUE,P3) ^ P4.*
12e90 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65  *.** This opcode
12ea0 20 69 6d 70 6c 65 6d 65 6e 74 73 20 74 68 65 20   implements the 
12eb0 49 53 20 54 52 55 45 2c 20 49 53 20 46 41 4c 53  IS TRUE, IS FALS
12ec0 45 2c 20 49 53 20 4e 4f 54 20 54 52 55 45 2c 20  E, IS NOT TRUE, 
12ed0 61 6e 64 0a 2a 2a 20 49 53 20 4e 4f 54 20 46 41  and.** IS NOT FA
12ee0 4c 53 45 20 6f 70 65 72 61 74 6f 72 73 2e 0a 2a  LSE operators..*
12ef0 2a 0a 2a 2a 20 49 6e 74 65 72 70 72 65 74 20 74  *.** Interpret t
12f00 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69  he value in regi
12f10 73 74 65 72 20 50 31 20 61 73 20 61 20 62 6f 6f  ster P1 as a boo
12f20 6c 65 61 6e 20 76 61 6c 75 65 2e 20 20 53 74 6f  lean value.  Sto
12f30 72 65 20 74 68 61 74 0a 2a 2a 20 62 6f 6f 6c 65  re that.** boole
12f40 61 6e 20 28 61 20 30 20 6f 72 20 31 29 20 69 6e  an (a 0 or 1) in
12f50 20 72 65 67 69 73 74 65 72 20 50 32 2e 20 20 4f   register P2.  O
12f60 72 20 69 66 20 74 68 65 20 76 61 6c 75 65 20 69  r if the value i
12f70 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 69 73  n register P1 is
12f80 20 0a 2a 2a 20 4e 55 4c 4c 2c 20 74 68 65 6e 20   .** NULL, then 
12f90 74 68 65 20 50 33 20 69 73 20 73 74 6f 72 65 64  the P3 is stored
12fa0 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 2e   in register P2.
12fb0 20 20 49 6e 76 65 72 74 20 74 68 65 20 61 6e 73    Invert the ans
12fc0 77 65 72 20 69 66 20 50 34 0a 2a 2a 20 69 73 20  wer if P4.** is 
12fd0 31 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6c 6f 67  1..**.** The log
12fe0 69 63 20 69 73 20 73 75 6d 6d 61 72 69 7a 65 64  ic is summarized
12ff0 20 6c 69 6b 65 20 74 68 69 73 3a 0a 2a 2a 0a 2a   like this:.**.*
13000 2a 20 3c 75 6c 3e 20 0a 2a 2a 20 3c 6c 69 3e 20  * <ul> .** <li> 
13010 49 66 20 50 33 3d 3d 30 20 61 6e 64 20 50 34 3d  If P3==0 and P4=
13020 3d 30 20 20 74 68 65 6e 20 20 72 5b 50 32 5d 20  =0  then  r[P2] 
13030 3a 3d 20 72 5b 50 31 5d 20 49 53 20 54 52 55 45  := r[P1] IS TRUE
13040 0a 2a 2a 20 3c 6c 69 3e 20 49 66 20 50 33 3d 3d  .** <li> If P3==
13050 31 20 61 6e 64 20 50 34 3d 3d 31 20 20 74 68 65  1 and P4==1  the
13060 6e 20 20 72 5b 50 32 5d 20 3a 3d 20 72 5b 50 31  n  r[P2] := r[P1
13070 5d 20 49 53 20 46 41 4c 53 45 0a 2a 2a 20 3c 6c  ] IS FALSE.** <l
13080 69 3e 20 49 66 20 50 33 3d 3d 30 20 61 6e 64 20  i> If P3==0 and 
13090 50 34 3d 3d 31 20 20 74 68 65 6e 20 20 72 5b 50  P4==1  then  r[P
130a0 32 5d 20 3a 3d 20 72 5b 50 31 5d 20 49 53 20 4e  2] := r[P1] IS N
130b0 4f 54 20 54 52 55 45 0a 2a 2a 20 3c 6c 69 3e 20  OT TRUE.** <li> 
130c0 49 66 20 50 33 3d 3d 31 20 61 6e 64 20 50 34 3d  If P3==1 and P4=
130d0 3d 30 20 20 74 68 65 6e 20 20 72 5b 50 32 5d 20  =0  then  r[P2] 
130e0 3a 3d 20 72 5b 50 31 5d 20 49 53 20 4e 4f 54 20  := r[P1] IS NOT 
130f0 46 41 4c 53 45 0a 2a 2a 20 3c 2f 75 6c 3e 0a 2a  FALSE.** </ul>.*
13100 2f 0a 63 61 73 65 20 4f 50 5f 49 73 54 72 75 65  /.case OP_IsTrue
13110 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20  : {             
13120 20 20 2f 2a 20 69 6e 31 2c 20 6f 75 74 32 20 2a    /* in1, out2 *
13130 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  /.  assert( pOp-
13140 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54 33  >p4type==P4_INT3
13150 32 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  2 );.  assert( p
13160 4f 70 2d 3e 70 34 2e 69 3d 3d 30 20 7c 7c 20 70  Op->p4.i==0 || p
13170 4f 70 2d 3e 70 34 2e 69 3d 3d 31 20 29 3b 0a 20  Op->p4.i==1 );. 
13180 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33   assert( pOp->p3
13190 3d 3d 30 20 7c 7c 20 70 4f 70 2d 3e 70 33 3d 3d  ==0 || pOp->p3==
131a0 31 20 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64  1 );.  sqlite3Vd
131b0 62 65 4d 65 6d 53 65 74 49 6e 74 36 34 28 26 61  beMemSetInt64(&a
131c0 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 2c 0a 20 20  Mem[pOp->p2],.  
131d0 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 42      sqlite3VdbeB
131e0 6f 6f 6c 65 61 6e 56 61 6c 75 65 28 26 61 4d 65  ooleanValue(&aMe
131f0 6d 5b 70 4f 70 2d 3e 70 31 5d 2c 20 70 4f 70 2d  m[pOp->p1], pOp-
13200 3e 70 33 29 20 5e 20 70 4f 70 2d 3e 70 34 2e 69  >p3) ^ pOp->p4.i
13210 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  );.  break;.}../
13220 2a 20 4f 70 63 6f 64 65 3a 20 4e 6f 74 20 50 31  * Opcode: Not P1
13230 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e   P2 * * *.** Syn
13240 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 20 21 72  opsis: r[P2]= !r
13250 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 49 6e 74 65 72  [P1].**.** Inter
13260 70 72 65 74 20 74 68 65 20 76 61 6c 75 65 20 69  pret the value i
13270 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 61 73  n register P1 as
13280 20 61 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65   a boolean value
13290 2e 20 20 53 74 6f 72 65 20 74 68 65 0a 2a 2a 20  .  Store the.** 
132a0 62 6f 6f 6c 65 61 6e 20 63 6f 6d 70 6c 65 6d 65  boolean compleme
132b0 6e 74 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  nt in register P
132c0 32 2e 20 20 49 66 20 74 68 65 20 76 61 6c 75 65  2.  If the value
132d0 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20   in register P1 
132e0 69 73 20 0a 2a 2a 20 4e 55 4c 4c 2c 20 74 68 65  is .** NULL, the
132f0 6e 20 61 20 4e 55 4c 4c 20 69 73 20 73 74 6f 72  n a NULL is stor
13300 65 64 20 69 6e 20 50 32 2e 0a 2a 2f 0a 63 61 73  ed in P2..*/.cas
13310 65 20 4f 50 5f 4e 6f 74 3a 20 7b 20 20 20 20 20  e OP_Not: {     
13320 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61             /* sa
13330 6d 65 20 61 73 20 54 4b 5f 4e 4f 54 2c 20 69 6e  me as TK_NOT, in
13340 31 2c 20 6f 75 74 32 20 2a 2f 0a 20 20 70 49 6e  1, out2 */.  pIn
13350 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  1 = &aMem[pOp->p
13360 31 5d 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d  1];.  pOut = &aM
13370 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 69  em[pOp->p2];.  i
13380 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20  f( (pIn1->flags 
13390 26 20 4d 45 4d 5f 4e 75 6c 6c 29 3d 3d 30 20 29  & MEM_Null)==0 )
133a0 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  {.    sqlite3Vdb
133b0 65 4d 65 6d 53 65 74 49 6e 74 36 34 28 70 4f 75  eMemSetInt64(pOu
133c0 74 2c 20 21 73 71 6c 69 74 65 33 56 64 62 65 42  t, !sqlite3VdbeB
133d0 6f 6f 6c 65 61 6e 56 61 6c 75 65 28 70 49 6e 31  ooleanValue(pIn1
133e0 2c 30 29 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  ,0));.  }else{. 
133f0 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
13400 6d 53 65 74 4e 75 6c 6c 28 70 4f 75 74 29 3b 0a  mSetNull(pOut);.
13410 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
13420 2f 2a 20 4f 70 63 6f 64 65 3a 20 42 69 74 4e 6f  /* Opcode: BitNo
13430 74 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  t P1 P2 * * *.**
13440 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d   Synopsis: r[P2]
13450 3d 20 7e 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 49  = ~r[P1].**.** I
13460 6e 74 65 72 70 72 65 74 20 74 68 65 20 63 6f 6e  nterpret the con
13470 74 65 6e 74 20 6f 66 20 72 65 67 69 73 74 65 72  tent of register
13480 20 50 31 20 61 73 20 61 6e 20 69 6e 74 65 67 65   P1 as an intege
13490 72 2e 20 20 53 74 6f 72 65 20 74 68 65 0a 2a 2a  r.  Store the.**
134a0 20 6f 6e 65 73 2d 63 6f 6d 70 6c 65 6d 65 6e 74   ones-complement
134b0 20 6f 66 20 74 68 65 20 50 31 20 76 61 6c 75 65   of the P1 value
134c0 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50   into register P
134d0 32 2e 20 20 49 66 20 50 31 20 68 6f 6c 64 73 0a  2.  If P1 holds.
134e0 2a 2a 20 61 20 4e 55 4c 4c 20 74 68 65 6e 20 73  ** a NULL then s
134f0 74 6f 72 65 20 61 20 4e 55 4c 4c 20 69 6e 20 50  tore a NULL in P
13500 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 42 69  2..*/.case OP_Bi
13510 74 4e 6f 74 3a 20 7b 20 20 20 20 20 20 20 20 20  tNot: {         
13520 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54      /* same as T
13530 4b 5f 42 49 54 4e 4f 54 2c 20 69 6e 31 2c 20 6f  K_BITNOT, in1, o
13540 75 74 32 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20  ut2 */.  pIn1 = 
13550 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  &aMem[pOp->p1];.
13560 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70    pOut = &aMem[p
13570 4f 70 2d 3e 70 32 5d 3b 0a 20 20 73 71 6c 69 74  Op->p2];.  sqlit
13580 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c  e3VdbeMemSetNull
13590 28 70 4f 75 74 29 3b 0a 20 20 69 66 28 20 28 70  (pOut);.  if( (p
135a0 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  In1->flags & MEM
135b0 5f 4e 75 6c 6c 29 3d 3d 30 20 29 7b 0a 20 20 20  _Null)==0 ){.   
135c0 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d   pOut->flags = M
135d0 45 4d 5f 49 6e 74 3b 0a 20 20 20 20 70 4f 75 74  EM_Int;.    pOut
135e0 2d 3e 75 2e 69 20 3d 20 7e 73 71 6c 69 74 65 33  ->u.i = ~sqlite3
135f0 56 64 62 65 49 6e 74 56 61 6c 75 65 28 70 49 6e  VdbeIntValue(pIn
13600 31 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  1);.  }.  break;
13610 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f  .}../* Opcode: O
13620 6e 63 65 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  nce P1 P2 * * *.
13630 2a 2a 0a 2a 2a 20 46 61 6c 6c 20 74 68 72 6f 75  **.** Fall throu
13640 67 68 20 74 6f 20 74 68 65 20 6e 65 78 74 20 69  gh to the next i
13650 6e 73 74 72 75 63 74 69 6f 6e 20 74 68 65 20 66  nstruction the f
13660 69 72 73 74 20 74 69 6d 65 20 74 68 69 73 20 6f  irst time this o
13670 70 63 6f 64 65 20 69 73 0a 2a 2a 20 65 6e 63 6f  pcode is.** enco
13680 75 6e 74 65 72 65 64 20 6f 6e 20 65 61 63 68 20  untered on each 
13690 69 6e 76 6f 63 61 74 69 6f 6e 20 6f 66 20 74 68  invocation of th
136a0 65 20 62 79 74 65 2d 63 6f 64 65 20 70 72 6f 67  e byte-code prog
136b0 72 61 6d 2e 20 20 4a 75 6d 70 20 74 6f 20 50 32  ram.  Jump to P2
136c0 0a 2a 2a 20 6f 6e 20 74 68 65 20 73 65 63 6f 6e  .** on the secon
136d0 64 20 61 6e 64 20 61 6c 6c 20 73 75 62 73 65 71  d and all subseq
136e0 75 65 6e 74 20 65 6e 63 6f 75 6e 74 65 72 73 20  uent encounters 
136f0 64 75 72 69 6e 67 20 74 68 65 20 73 61 6d 65 20  during the same 
13700 69 6e 76 6f 63 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a  invocation..**.*
13710 2a 20 54 6f 70 2d 6c 65 76 65 6c 20 70 72 6f 67  * Top-level prog
13720 72 61 6d 73 20 64 65 74 65 72 6d 69 6e 65 20 66  rams determine f
13730 69 72 73 74 20 69 6e 76 6f 63 61 74 69 6f 6e 20  irst invocation 
13740 62 79 20 63 6f 6d 70 61 72 69 6e 67 20 74 68 65  by comparing the
13750 20 50 31 0a 2a 2a 20 6f 70 65 72 61 6e 64 20 61   P1.** operand a
13760 67 61 69 6e 73 74 20 74 68 65 20 50 31 20 6f 70  gainst the P1 op
13770 65 72 61 6e 64 20 6f 6e 20 74 68 65 20 4f 50 5f  erand on the OP_
13780 49 6e 69 74 20 6f 70 63 6f 64 65 20 61 74 20 74  Init opcode at t
13790 68 65 20 62 65 67 69 6e 6e 69 6e 67 0a 2a 2a 20  he beginning.** 
137a0 6f 66 20 74 68 65 20 70 72 6f 67 72 61 6d 2e 20  of the program. 
137b0 20 49 66 20 74 68 65 20 50 31 20 76 61 6c 75 65   If the P1 value
137c0 73 20 64 69 66 66 65 72 2c 20 74 68 65 6e 20 66  s differ, then f
137d0 61 6c 6c 20 74 68 72 6f 75 67 68 20 61 6e 64 20  all through and 
137e0 6d 61 6b 65 0a 2a 2a 20 74 68 65 20 50 31 20 6f  make.** the P1 o
137f0 66 20 74 68 69 73 20 6f 70 63 6f 64 65 20 65 71  f this opcode eq
13800 75 61 6c 20 74 6f 20 74 68 65 20 50 31 20 6f 66  ual to the P1 of
13810 20 4f 50 5f 49 6e 69 74 2e 20 20 49 66 20 50 31   OP_Init.  If P1
13820 20 76 61 6c 75 65 73 20 61 72 65 0a 2a 2a 20 74   values are.** t
13830 68 65 20 73 61 6d 65 20 74 68 65 6e 20 74 61 6b  he same then tak
13840 65 20 74 68 65 20 6a 75 6d 70 2e 0a 2a 2a 0a 2a  e the jump..**.*
13850 2a 20 46 6f 72 20 73 75 62 70 72 6f 67 72 61 6d  * For subprogram
13860 73 2c 20 74 68 65 72 65 20 69 73 20 61 20 62 69  s, there is a bi
13870 74 6d 61 73 6b 20 69 6e 20 74 68 65 20 56 64 62  tmask in the Vdb
13880 65 46 72 61 6d 65 20 74 68 61 74 20 64 65 74 65  eFrame that dete
13890 72 6d 69 6e 65 73 0a 2a 2a 20 77 68 65 74 68 65  rmines.** whethe
138a0 72 20 6f 72 20 6e 6f 74 20 74 68 65 20 6a 75 6d  r or not the jum
138b0 70 20 73 68 6f 75 6c 64 20 62 65 20 74 61 6b 65  p should be take
138c0 6e 2e 20 20 54 68 65 20 62 69 74 6d 61 73 6b 20  n.  The bitmask 
138d0 69 73 20 6e 65 63 65 73 73 61 72 79 0a 2a 2a 20  is necessary.** 
138e0 62 65 63 61 75 73 65 20 74 68 65 20 73 65 6c 66  because the self
138f0 2d 61 6c 74 65 72 69 6e 67 20 63 6f 64 65 20 74  -altering code t
13900 72 69 63 6b 20 64 6f 65 73 20 6e 6f 74 20 77 6f  rick does not wo
13910 72 6b 20 66 6f 72 20 72 65 63 75 72 73 69 76 65  rk for recursive
13920 0a 2a 2a 20 74 72 69 67 67 65 72 73 2e 0a 2a 2f  .** triggers..*/
13930 0a 63 61 73 65 20 4f 50 5f 4f 6e 63 65 3a 20 7b  .case OP_Once: {
13940 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
13950 6a 75 6d 70 20 2a 2f 0a 20 20 75 33 32 20 69 41  jump */.  u32 iA
13960 64 64 72 3b 20 20 20 20 20 20 20 20 20 20 20 20  ddr;            
13970 20 20 20 20 2f 2a 20 41 64 64 72 65 73 73 20 6f      /* Address o
13980 66 20 74 68 69 73 20 69 6e 73 74 72 75 63 74 69  f this instructi
13990 6f 6e 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20  on */.  assert( 
139a0 70 2d 3e 61 4f 70 5b 30 5d 2e 6f 70 63 6f 64 65  p->aOp[0].opcode
139b0 3d 3d 4f 50 5f 49 6e 69 74 20 29 3b 0a 20 20 69  ==OP_Init );.  i
139c0 66 28 20 70 2d 3e 70 46 72 61 6d 65 20 29 7b 0a  f( p->pFrame ){.
139d0 20 20 20 20 69 41 64 64 72 20 3d 20 28 69 6e 74      iAddr = (int
139e0 29 28 70 4f 70 20 2d 20 70 2d 3e 61 4f 70 29 3b  )(pOp - p->aOp);
139f0 0a 20 20 20 20 69 66 28 20 28 70 2d 3e 70 46 72  .    if( (p->pFr
13a00 61 6d 65 2d 3e 61 4f 6e 63 65 5b 69 41 64 64 72  ame->aOnce[iAddr
13a10 2f 38 5d 20 26 20 28 31 3c 3c 28 69 41 64 64 72  /8] & (1<<(iAddr
13a20 20 26 20 37 29 29 29 21 3d 30 20 29 7b 0a 20 20   & 7)))!=0 ){.  
13a30 20 20 20 20 56 64 62 65 42 72 61 6e 63 68 54 61      VdbeBranchTa
13a40 6b 65 6e 28 31 2c 20 32 29 3b 0a 20 20 20 20 20  ken(1, 2);.     
13a50 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32   goto jump_to_p2
13a60 3b 0a 20 20 20 20 7d 0a 20 20 20 20 70 2d 3e 70  ;.    }.    p->p
13a70 46 72 61 6d 65 2d 3e 61 4f 6e 63 65 5b 69 41 64  Frame->aOnce[iAd
13a80 64 72 2f 38 5d 20 7c 3d 20 31 3c 3c 28 69 41 64  dr/8] |= 1<<(iAd
13a90 64 72 20 26 20 37 29 3b 0a 20 20 7d 65 6c 73 65  dr & 7);.  }else
13aa0 7b 0a 20 20 20 20 69 66 28 20 70 2d 3e 61 4f 70  {.    if( p->aOp
13ab0 5b 30 5d 2e 70 31 3d 3d 70 4f 70 2d 3e 70 31 20  [0].p1==pOp->p1 
13ac0 29 7b 0a 20 20 20 20 20 20 56 64 62 65 42 72 61  ){.      VdbeBra
13ad0 6e 63 68 54 61 6b 65 6e 28 31 2c 20 32 29 3b 0a  nchTaken(1, 2);.
13ae0 20 20 20 20 20 20 67 6f 74 6f 20 6a 75 6d 70 5f        goto jump_
13af0 74 6f 5f 70 32 3b 0a 20 20 20 20 7d 0a 20 20 7d  to_p2;.    }.  }
13b00 0a 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b  .  VdbeBranchTak
13b10 65 6e 28 30 2c 20 32 29 3b 0a 20 20 70 4f 70 2d  en(0, 2);.  pOp-
13b20 3e 70 31 20 3d 20 70 2d 3e 61 4f 70 5b 30 5d 2e  >p1 = p->aOp[0].
13b30 70 31 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  p1;.  break;.}..
13b40 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 66 20 50 31  /* Opcode: If P1
13b50 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a   P2 P3 * *.**.**
13b60 20 4a 75 6d 70 20 74 6f 20 50 32 20 69 66 20 74   Jump to P2 if t
13b70 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69  he value in regi
13b80 73 74 65 72 20 50 31 20 69 73 20 74 72 75 65 2e  ster P1 is true.
13b90 20 20 54 68 65 20 76 61 6c 75 65 0a 2a 2a 20 69    The value.** i
13ba0 73 20 63 6f 6e 73 69 64 65 72 65 64 20 74 72 75  s considered tru
13bb0 65 20 69 66 20 69 74 20 69 73 20 6e 75 6d 65 72  e if it is numer
13bc0 69 63 20 61 6e 64 20 6e 6f 6e 2d 7a 65 72 6f 2e  ic and non-zero.
13bd0 20 20 49 66 20 74 68 65 20 76 61 6c 75 65 0a 2a    If the value.*
13be0 2a 20 69 6e 20 50 31 20 69 73 20 4e 55 4c 4c 20  * in P1 is NULL 
13bf0 74 68 65 6e 20 74 61 6b 65 20 74 68 65 20 6a 75  then take the ju
13c00 6d 70 20 69 66 20 61 6e 64 20 6f 6e 6c 79 20 69  mp if and only i
13c10 66 20 50 33 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f  f P3 is non-zero
13c20 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 66 3a  ..*/.case OP_If:
13c30 20 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20    {             
13c40 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 20 2a    /* jump, in1 *
13c50 2f 0a 20 20 69 6e 74 20 63 3b 0a 20 20 63 20 3d  /.  int c;.  c =
13c60 20 73 71 6c 69 74 65 33 56 64 62 65 42 6f 6f 6c   sqlite3VdbeBool
13c70 65 61 6e 56 61 6c 75 65 28 26 61 4d 65 6d 5b 70  eanValue(&aMem[p
13c80 4f 70 2d 3e 70 31 5d 2c 20 70 4f 70 2d 3e 70 33  Op->p1], pOp->p3
13c90 29 3b 0a 20 20 56 64 62 65 42 72 61 6e 63 68 54  );.  VdbeBranchT
13ca0 61 6b 65 6e 28 63 21 3d 30 2c 20 32 29 3b 0a 20  aken(c!=0, 2);. 
13cb0 20 69 66 28 20 63 20 29 20 67 6f 74 6f 20 6a 75   if( c ) goto ju
13cc0 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 62 72 65 61  mp_to_p2;.  brea
13cd0 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
13ce0 20 49 66 4e 6f 74 20 50 31 20 50 32 20 50 33 20   IfNot P1 P2 P3 
13cf0 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70 20 74  * *.**.** Jump t
13d00 6f 20 50 32 20 69 66 20 74 68 65 20 76 61 6c 75  o P2 if the valu
13d10 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31  e in register P1
13d20 20 69 73 20 46 61 6c 73 65 2e 20 20 54 68 65 20   is False.  The 
13d30 76 61 6c 75 65 0a 2a 2a 20 69 73 20 63 6f 6e 73  value.** is cons
13d40 69 64 65 72 65 64 20 66 61 6c 73 65 20 69 66 20  idered false if 
13d50 69 74 20 68 61 73 20 61 20 6e 75 6d 65 72 69 63  it has a numeric
13d60 20 76 61 6c 75 65 20 6f 66 20 7a 65 72 6f 2e 20   value of zero. 
13d70 20 49 66 20 74 68 65 20 76 61 6c 75 65 0a 2a 2a   If the value.**
13d80 20 69 6e 20 50 31 20 69 73 20 4e 55 4c 4c 20 74   in P1 is NULL t
13d90 68 65 6e 20 74 61 6b 65 20 74 68 65 20 6a 75 6d  hen take the jum
13da0 70 20 69 66 20 61 6e 64 20 6f 6e 6c 79 20 69 66  p if and only if
13db0 20 50 33 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2e   P3 is non-zero.
13dc0 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 66 4e 6f  .*/.case OP_IfNo
13dd0 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20  t: {            
13de0 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a  /* jump, in1 */.
13df0 20 20 69 6e 74 20 63 3b 0a 20 20 63 20 3d 20 21    int c;.  c = !
13e00 73 71 6c 69 74 65 33 56 64 62 65 42 6f 6f 6c 65  sqlite3VdbeBoole
13e10 61 6e 56 61 6c 75 65 28 26 61 4d 65 6d 5b 70 4f  anValue(&aMem[pO
13e20 70 2d 3e 70 31 5d 2c 20 21 70 4f 70 2d 3e 70 33  p->p1], !pOp->p3
13e30 29 3b 0a 20 20 56 64 62 65 42 72 61 6e 63 68 54  );.  VdbeBranchT
13e40 61 6b 65 6e 28 63 21 3d 30 2c 20 32 29 3b 0a 20  aken(c!=0, 2);. 
13e50 20 69 66 28 20 63 20 29 20 67 6f 74 6f 20 6a 75   if( c ) goto ju
13e60 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 62 72 65 61  mp_to_p2;.  brea
13e70 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
13e80 20 49 73 4e 75 6c 6c 20 50 31 20 50 32 20 2a 20   IsNull P1 P2 * 
13e90 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  * *.** Synopsis:
13ea0 20 69 66 20 72 5b 50 31 5d 3d 3d 4e 55 4c 4c 20   if r[P1]==NULL 
13eb0 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 4a 75  goto P2.**.** Ju
13ec0 6d 70 20 74 6f 20 50 32 20 69 66 20 74 68 65 20  mp to P2 if the 
13ed0 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65  value in registe
13ee0 72 20 50 31 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f  r P1 is NULL..*/
13ef0 0a 63 61 73 65 20 4f 50 5f 49 73 4e 75 6c 6c 3a  .case OP_IsNull:
13f00 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a   {            /*
13f10 20 73 61 6d 65 20 61 73 20 54 4b 5f 49 53 4e 55   same as TK_ISNU
13f20 4c 4c 2c 20 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f  LL, jump, in1 */
13f30 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b  .  pIn1 = &aMem[
13f40 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 56 64 62 65  pOp->p1];.  Vdbe
13f50 42 72 61 6e 63 68 54 61 6b 65 6e 28 20 28 70 49  BranchTaken( (pI
13f60 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  n1->flags & MEM_
13f70 4e 75 6c 6c 29 21 3d 30 2c 20 32 29 3b 0a 20 20  Null)!=0, 2);.  
13f80 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73  if( (pIn1->flags
13f90 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29 21 3d 30 20   & MEM_Null)!=0 
13fa0 29 7b 0a 20 20 20 20 67 6f 74 6f 20 6a 75 6d 70  ){.    goto jump
13fb0 5f 74 6f 5f 70 32 3b 0a 20 20 7d 0a 20 20 62 72  _to_p2;.  }.  br
13fc0 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
13fd0 65 3a 20 4e 6f 74 4e 75 6c 6c 20 50 31 20 50 32  e: NotNull P1 P2
13fe0 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73   * * *.** Synops
13ff0 69 73 3a 20 69 66 20 72 5b 50 31 5d 21 3d 4e 55  is: if r[P1]!=NU
14000 4c 4c 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a  LL goto P2.**.**
14010 20 4a 75 6d 70 20 74 6f 20 50 32 20 69 66 20 74   Jump to P2 if t
14020 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69  he value in regi
14030 73 74 65 72 20 50 31 20 69 73 20 6e 6f 74 20 4e  ster P1 is not N
14040 55 4c 4c 2e 20 20 0a 2a 2f 0a 63 61 73 65 20 4f  ULL.  .*/.case O
14050 50 5f 4e 6f 74 4e 75 6c 6c 3a 20 7b 20 20 20 20  P_NotNull: {    
14060 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20          /* same 
14070 61 73 20 54 4b 5f 4e 4f 54 4e 55 4c 4c 2c 20 6a  as TK_NOTNULL, j
14080 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20 70 49  ump, in1 */.  pI
14090 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n1 = &aMem[pOp->
140a0 70 31 5d 3b 0a 20 20 56 64 62 65 42 72 61 6e 63  p1];.  VdbeBranc
140b0 68 54 61 6b 65 6e 28 20 28 70 49 6e 31 2d 3e 66  hTaken( (pIn1->f
140c0 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29  lags & MEM_Null)
140d0 3d 3d 30 2c 20 32 29 3b 0a 20 20 69 66 28 20 28  ==0, 2);.  if( (
140e0 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn1->flags & ME
140f0 4d 5f 4e 75 6c 6c 29 3d 3d 30 20 29 7b 0a 20 20  M_Null)==0 ){.  
14100 20 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70    goto jump_to_p
14110 32 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  2;.  }.  break;.
14120 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 66  }../* Opcode: If
14130 4e 75 6c 6c 52 6f 77 20 50 31 20 50 32 20 50 33  NullRow P1 P2 P3
14140 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73   * *.** Synopsis
14150 3a 20 69 66 20 50 31 2e 6e 75 6c 6c 52 6f 77 20  : if P1.nullRow 
14160 74 68 65 6e 20 72 5b 50 33 5d 3d 4e 55 4c 4c 2c  then r[P3]=NULL,
14170 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 43   goto P2.**.** C
14180 68 65 63 6b 20 74 68 65 20 63 75 72 73 6f 72 20  heck the cursor 
14190 50 31 20 74 6f 20 73 65 65 20 69 66 20 69 74 20  P1 to see if it 
141a0 69 73 20 63 75 72 72 65 6e 74 6c 79 20 70 6f 69  is currently poi
141b0 6e 74 69 6e 67 20 61 74 20 61 20 4e 55 4c 4c 20  nting at a NULL 
141c0 72 6f 77 2e 0a 2a 2a 20 49 66 20 69 74 20 69 73  row..** If it is
141d0 2c 20 74 68 65 6e 20 73 65 74 20 72 65 67 69 73  , then set regis
141e0 74 65 72 20 50 33 20 74 6f 20 4e 55 4c 4c 20 61  ter P3 to NULL a
141f0 6e 64 20 6a 75 6d 70 20 69 6d 6d 65 64 69 61 74  nd jump immediat
14200 65 6c 79 20 74 6f 20 50 32 2e 0a 2a 2a 20 49 66  ely to P2..** If
14210 20 50 31 20 69 73 20 6e 6f 74 20 6f 6e 20 61 20   P1 is not on a 
14220 4e 55 4c 4c 20 72 6f 77 2c 20 74 68 65 6e 20 66  NULL row, then f
14230 61 6c 6c 20 74 68 72 6f 75 67 68 20 77 69 74 68  all through with
14240 6f 75 74 20 6d 61 6b 69 6e 67 20 61 6e 79 0a 2a  out making any.*
14250 2a 20 63 68 61 6e 67 65 73 2e 0a 2a 2f 0a 63 61  * changes..*/.ca
14260 73 65 20 4f 50 5f 49 66 4e 75 6c 6c 52 6f 77 3a  se OP_IfNullRow:
14270 20 7b 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75   {         /* ju
14280 6d 70 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20  mp */.  assert( 
14290 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f  pOp->p1>=0 && pO
142a0 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72  p->p1<p->nCursor
142b0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d   );.  assert( p-
142c0 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 21  >apCsr[pOp->p1]!
142d0 3d 30 20 29 3b 0a 20 20 69 66 28 20 70 2d 3e 61  =0 );.  if( p->a
142e0 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 2d 3e 6e  pCsr[pOp->p1]->n
142f0 75 6c 6c 52 6f 77 20 29 7b 0a 20 20 20 20 73 71  ullRow ){.    sq
14300 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e  lite3VdbeMemSetN
14310 75 6c 6c 28 61 4d 65 6d 20 2b 20 70 4f 70 2d 3e  ull(aMem + pOp->
14320 70 33 29 3b 0a 20 20 20 20 67 6f 74 6f 20 6a 75  p3);.    goto ju
14330 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 7d 0a 20 20  mp_to_p2;.  }.  
14340 62 72 65 61 6b 3b 0a 7d 0a 0a 23 69 66 64 65 66  break;.}..#ifdef
14350 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 4f   SQLITE_ENABLE_O
14360 46 46 53 45 54 5f 53 51 4c 5f 46 55 4e 43 0a 2f  FFSET_SQL_FUNC./
14370 2a 20 4f 70 63 6f 64 65 3a 20 4f 66 66 73 65 74  * Opcode: Offset
14380 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a   P1 P2 P3 * *.**
14390 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 33 5d   Synopsis: r[P3]
143a0 20 3d 20 73 71 6c 69 74 65 5f 6f 66 66 73 65 74   = sqlite_offset
143b0 28 50 31 29 0a 2a 2a 0a 2a 2a 20 53 74 6f 72 65  (P1).**.** Store
143c0 20 69 6e 20 72 65 67 69 73 74 65 72 20 72 5b 50   in register r[P
143d0 33 5d 20 74 68 65 20 62 79 74 65 20 6f 66 66 73  3] the byte offs
143e0 65 74 20 69 6e 74 6f 20 74 68 65 20 64 61 74 61  et into the data
143f0 62 61 73 65 20 66 69 6c 65 20 74 68 61 74 20 69  base file that i
14400 73 20 74 68 65 0a 2a 2a 20 73 74 61 72 74 20 6f  s the.** start o
14410 66 20 74 68 65 20 70 61 79 6c 6f 61 64 20 66 6f  f the payload fo
14420 72 20 74 68 65 20 72 65 63 6f 72 64 20 61 74 20  r the record at 
14430 77 68 69 63 68 20 74 68 61 74 20 63 75 72 73 6f  which that curso
14440 72 20 50 31 20 69 73 20 63 75 72 72 65 6e 74 6c  r P1 is currentl
14450 79 0a 2a 2a 20 70 6f 69 6e 74 69 6e 67 2e 0a 2a  y.** pointing..*
14460 2a 0a 2a 2a 20 50 32 20 69 73 20 74 68 65 20 63  *.** P2 is the c
14470 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72 20 66 6f 72  olumn number for
14480 20 74 68 65 20 61 72 67 75 6d 65 6e 74 20 74 6f   the argument to
14490 20 74 68 65 20 73 71 6c 69 74 65 5f 6f 66 66 73   the sqlite_offs
144a0 65 74 28 29 20 66 75 6e 63 74 69 6f 6e 2e 0a 2a  et() function..*
144b0 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 64 6f  * This opcode do
144c0 65 73 20 6e 6f 74 20 75 73 65 20 50 32 20 69 74  es not use P2 it
144d0 73 65 6c 66 2c 20 62 75 74 20 74 68 65 20 50 32  self, but the P2
144e0 20 76 61 6c 75 65 20 69 73 20 75 73 65 64 20 62   value is used b
144f0 79 20 74 68 65 0a 2a 2a 20 63 6f 64 65 20 67 65  y the.** code ge
14500 6e 65 72 61 74 6f 72 2e 20 20 54 68 65 20 50 31  nerator.  The P1
14510 2c 20 50 32 2c 20 61 6e 64 20 50 33 20 6f 70 65  , P2, and P3 ope
14520 72 61 6e 64 73 20 74 6f 20 74 68 69 73 20 6f 70  rands to this op
14530 63 6f 64 65 20 61 72 65 20 74 68 65 0a 2a 2a 20  code are the.** 
14540 73 61 6d 65 20 61 73 20 66 6f 72 20 4f 50 5f 43  same as for OP_C
14550 6f 6c 75 6d 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68 69  olumn..**.** Thi
14560 73 20 6f 70 63 6f 64 65 20 69 73 20 6f 6e 6c 79  s opcode is only
14570 20 61 76 61 69 6c 61 62 6c 65 20 69 66 20 53 51   available if SQ
14580 4c 69 74 65 20 69 73 20 63 6f 6d 70 69 6c 65 64  Lite is compiled
14590 20 77 69 74 68 20 74 68 65 0a 2a 2a 20 2d 44 53   with the.** -DS
145a0 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 4f 46 46  QLITE_ENABLE_OFF
145b0 53 45 54 5f 53 51 4c 5f 46 55 4e 43 20 6f 70 74  SET_SQL_FUNC opt
145c0 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ion..*/.case OP_
145d0 4f 66 66 73 65 74 3a 20 7b 20 20 20 20 20 20 20  Offset: {       
145e0 20 20 20 2f 2a 20 6f 75 74 33 20 2a 2f 0a 20 20     /* out3 */.  
145f0 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 20  VdbeCursor *pC; 
14600 20 20 20 2f 2a 20 54 68 65 20 56 44 42 45 20 63     /* The VDBE c
14610 75 72 73 6f 72 20 2a 2f 0a 20 20 61 73 73 65 72  ursor */.  asser
14620 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26  t( pOp->p1>=0 &&
14630 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72   pOp->p1<p->nCur
14640 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d  sor );.  pC = p-
14650 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b  >apCsr[pOp->p1];
14660 0a 20 20 70 4f 75 74 20 3d 20 26 70 2d 3e 61 4d  .  pOut = &p->aM
14670 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 69  em[pOp->p3];.  i
14680 66 28 20 4e 45 56 45 52 28 70 43 3d 3d 30 29 20  f( NEVER(pC==0) 
14690 7c 7c 20 70 43 2d 3e 65 43 75 72 54 79 70 65 21  || pC->eCurType!
146a0 3d 43 55 52 54 59 50 45 5f 42 54 52 45 45 20 29  =CURTYPE_BTREE )
146b0 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  {.    sqlite3Vdb
146c0 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 4f 75 74  eMemSetNull(pOut
146d0 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  );.  }else{.    
146e0 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65  sqlite3VdbeMemSe
146f0 74 49 6e 74 36 34 28 70 4f 75 74 2c 20 73 71 6c  tInt64(pOut, sql
14700 69 74 65 33 42 74 72 65 65 4f 66 66 73 65 74 28  ite3BtreeOffset(
14710 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 29 29  pC->uc.pCursor))
14720 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
14730 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54  .#endif /* SQLIT
14740 45 5f 45 4e 41 42 4c 45 5f 4f 46 46 53 45 54 5f  E_ENABLE_OFFSET_
14750 53 51 4c 5f 46 55 4e 43 20 2a 2f 0a 0a 2f 2a 20  SQL_FUNC */../* 
14760 4f 70 63 6f 64 65 3a 20 43 6f 6c 75 6d 6e 20 50  Opcode: Column P
14770 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a  1 P2 P3 P4 P5.**
14780 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 33 5d   Synopsis: r[P3]
14790 3d 50 58 0a 2a 2a 0a 2a 2a 20 49 6e 74 65 72 70  =PX.**.** Interp
147a0 72 65 74 20 74 68 65 20 64 61 74 61 20 74 68 61  ret the data tha
147b0 74 20 63 75 72 73 6f 72 20 50 31 20 70 6f 69 6e  t cursor P1 poin
147c0 74 73 20 74 6f 20 61 73 20 61 20 73 74 72 75 63  ts to as a struc
147d0 74 75 72 65 20 62 75 69 6c 74 20 75 73 69 6e 67  ture built using
147e0 0a 2a 2a 20 74 68 65 20 4d 61 6b 65 52 65 63 6f  .** the MakeReco
147f0 72 64 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20  rd instruction. 
14800 20 28 53 65 65 20 74 68 65 20 4d 61 6b 65 52 65   (See the MakeRe
14810 63 6f 72 64 20 6f 70 63 6f 64 65 20 66 6f 72 20  cord opcode for 
14820 61 64 64 69 74 69 6f 6e 61 6c 0a 2a 2a 20 69 6e  additional.** in
14830 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20  formation about 
14840 74 68 65 20 66 6f 72 6d 61 74 20 6f 66 20 74 68  the format of th
14850 65 20 64 61 74 61 2e 29 20 20 45 78 74 72 61 63  e data.)  Extrac
14860 74 20 74 68 65 20 50 32 2d 74 68 20 63 6f 6c 75  t the P2-th colu
14870 6d 6e 0a 2a 2a 20 66 72 6f 6d 20 74 68 69 73 20  mn.** from this 
14880 72 65 63 6f 72 64 2e 20 20 49 66 20 74 68 65 72  record.  If ther
14890 65 20 61 72 65 20 6c 65 73 73 20 74 68 61 74 20  e are less that 
148a0 28 50 32 2b 31 29 20 0a 2a 2a 20 76 61 6c 75 65  (P2+1) .** value
148b0 73 20 69 6e 20 74 68 65 20 72 65 63 6f 72 64 2c  s in the record,
148c0 20 65 78 74 72 61 63 74 20 61 20 4e 55 4c 4c 2e   extract a NULL.
148d0 0a 2a 2a 0a 2a 2a 20 54 68 65 20 76 61 6c 75 65  .**.** The value
148e0 20 65 78 74 72 61 63 74 65 64 20 69 73 20 73 74   extracted is st
148f0 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74 65 72  ored in register
14900 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68   P3..**.** If th
14910 65 20 72 65 63 6f 72 64 20 63 6f 6e 74 61 69 6e  e record contain
14920 73 20 66 65 77 65 72 20 74 68 61 6e 20 50 32 20  s fewer than P2 
14930 66 69 65 6c 64 73 2c 20 74 68 65 6e 20 65 78 74  fields, then ext
14940 72 61 63 74 20 61 20 4e 55 4c 4c 2e 20 20 4f 72  ract a NULL.  Or
14950 2c 0a 2a 2a 20 69 66 20 74 68 65 20 50 34 20 61  ,.** if the P4 a
14960 72 67 75 6d 65 6e 74 20 69 73 20 61 20 50 34 5f  rgument is a P4_
14970 4d 45 4d 20 75 73 65 20 74 68 65 20 76 61 6c 75  MEM use the valu
14980 65 20 6f 66 20 74 68 65 20 50 34 20 61 72 67 75  e of the P4 argu
14990 6d 65 6e 74 20 61 73 0a 2a 2a 20 74 68 65 20 72  ment as.** the r
149a0 65 73 75 6c 74 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  esult..**.** If 
149b0 74 68 65 20 4f 50 46 4c 41 47 5f 43 4c 45 41 52  the OPFLAG_CLEAR
149c0 43 41 43 48 45 20 62 69 74 20 69 73 20 73 65 74  CACHE bit is set
149d0 20 6f 6e 20 50 35 20 61 6e 64 20 50 31 20 69 73   on P5 and P1 is
149e0 20 61 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 20   a pseudo-table 
149f0 63 75 72 73 6f 72 2c 0a 2a 2a 20 74 68 65 6e 20  cursor,.** then 
14a00 74 68 65 20 63 61 63 68 65 20 6f 66 20 74 68 65  the cache of the
14a10 20 63 75 72 73 6f 72 20 69 73 20 72 65 73 65 74   cursor is reset
14a20 20 70 72 69 6f 72 20 74 6f 20 65 78 74 72 61 63   prior to extrac
14a30 74 69 6e 67 20 74 68 65 20 63 6f 6c 75 6d 6e 2e  ting the column.
14a40 0a 2a 2a 20 54 68 65 20 66 69 72 73 74 20 4f 50  .** The first OP
14a50 5f 43 6f 6c 75 6d 6e 20 61 67 61 69 6e 73 74 20  _Column against 
14a60 61 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 20 61  a pseudo-table a
14a70 66 74 65 72 20 74 68 65 20 76 61 6c 75 65 20 6f  fter the value o
14a80 66 20 74 68 65 20 63 6f 6e 74 65 6e 74 0a 2a 2a  f the content.**
14a90 20 72 65 67 69 73 74 65 72 20 68 61 73 20 63 68   register has ch
14aa0 61 6e 67 65 64 20 73 68 6f 75 6c 64 20 68 61 76  anged should hav
14ab0 65 20 74 68 69 73 20 62 69 74 20 73 65 74 2e 0a  e this bit set..
14ac0 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 4f 50 46  **.** If the OPF
14ad0 4c 41 47 5f 4c 45 4e 47 54 48 41 52 47 20 61 6e  LAG_LENGTHARG an
14ae0 64 20 4f 50 46 4c 41 47 5f 54 59 50 45 4f 46 41  d OPFLAG_TYPEOFA
14af0 52 47 20 62 69 74 73 20 61 72 65 20 73 65 74 20  RG bits are set 
14b00 6f 6e 20 50 35 20 74 68 65 6e 0a 2a 2a 20 74 68  on P5 then.** th
14b10 65 20 72 65 73 75 6c 74 20 69 73 20 67 75 61 72  e result is guar
14b20 61 6e 74 65 65 64 20 74 6f 20 6f 6e 6c 79 20 62  anteed to only b
14b30 65 20 75 73 65 64 20 61 73 20 74 68 65 20 61 72  e used as the ar
14b40 67 75 6d 65 6e 74 20 6f 66 20 61 20 6c 65 6e 67  gument of a leng
14b50 74 68 28 29 0a 2a 2a 20 6f 72 20 74 79 70 65 6f  th().** or typeo
14b60 66 28 29 20 66 75 6e 63 74 69 6f 6e 2c 20 72 65  f() function, re
14b70 73 70 65 63 74 69 76 65 6c 79 2e 20 20 54 68 65  spectively.  The
14b80 20 6c 6f 61 64 69 6e 67 20 6f 66 20 6c 61 72 67   loading of larg
14b90 65 20 62 6c 6f 62 73 20 63 61 6e 20 62 65 0a 2a  e blobs can be.*
14ba0 2a 20 73 6b 69 70 70 65 64 20 66 6f 72 20 6c 65  * skipped for le
14bb0 6e 67 74 68 28 29 20 61 6e 64 20 61 6c 6c 20 63  ngth() and all c
14bc0 6f 6e 74 65 6e 74 20 6c 6f 61 64 69 6e 67 20 63  ontent loading c
14bd0 61 6e 20 62 65 20 73 6b 69 70 70 65 64 20 66 6f  an be skipped fo
14be0 72 20 74 79 70 65 6f 66 28 29 2e 0a 2a 2f 0a 63  r typeof()..*/.c
14bf0 61 73 65 20 4f 50 5f 43 6f 6c 75 6d 6e 3a 20 7b  ase OP_Column: {
14c00 0a 20 20 69 6e 74 20 70 32 3b 20 20 20 20 20 20  .  int p2;      
14c10 20 20 20 20 20 20 2f 2a 20 63 6f 6c 75 6d 6e 20        /* column 
14c20 6e 75 6d 62 65 72 20 74 6f 20 72 65 74 72 69 65  number to retrie
14c30 76 65 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73  ve */.  VdbeCurs
14c40 6f 72 20 2a 70 43 3b 20 20 20 20 2f 2a 20 54 68  or *pC;    /* Th
14c50 65 20 56 44 42 45 20 63 75 72 73 6f 72 20 2a 2f  e VDBE cursor */
14c60 0a 20 20 42 74 43 75 72 73 6f 72 20 2a 70 43 72  .  BtCursor *pCr
14c70 73 72 3b 20 20 20 2f 2a 20 54 68 65 20 42 54 72  sr;   /* The BTr
14c80 65 65 20 63 75 72 73 6f 72 20 2a 2f 0a 20 20 75  ee cursor */.  u
14c90 33 32 20 2a 61 4f 66 66 73 65 74 3b 20 20 20 20  32 *aOffset;    
14ca0 20 20 2f 2a 20 61 4f 66 66 73 65 74 5b 69 5d 20    /* aOffset[i] 
14cb0 69 73 20 6f 66 66 73 65 74 20 74 6f 20 73 74 61  is offset to sta
14cc0 72 74 20 6f 66 20 64 61 74 61 20 66 6f 72 20 69  rt of data for i
14cd0 2d 74 68 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20  -th column */.  
14ce0 69 6e 74 20 6c 65 6e 3b 20 20 20 20 20 20 20 20  int len;        
14cf0 20 20 20 2f 2a 20 54 68 65 20 6c 65 6e 67 74 68     /* The length
14d00 20 6f 66 20 74 68 65 20 73 65 72 69 61 6c 69 7a   of the serializ
14d10 65 64 20 64 61 74 61 20 66 6f 72 20 74 68 65 20  ed data for the 
14d20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 69 6e 74 20  column */.  int 
14d30 69 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  i;             /
14d40 2a 20 4c 6f 6f 70 20 63 6f 75 6e 74 65 72 20 2a  * Loop counter *
14d50 2f 0a 20 20 4d 65 6d 20 2a 70 44 65 73 74 3b 20  /.  Mem *pDest; 
14d60 20 20 20 20 20 20 20 2f 2a 20 57 68 65 72 65 20         /* Where 
14d70 74 6f 20 77 72 69 74 65 20 74 68 65 20 65 78 74  to write the ext
14d80 72 61 63 74 65 64 20 76 61 6c 75 65 20 2a 2f 0a  racted value */.
14d90 20 20 4d 65 6d 20 73 4d 65 6d 3b 20 20 20 20 20    Mem sMem;     
14da0 20 20 20 20 20 2f 2a 20 46 6f 72 20 73 74 6f 72       /* For stor
14db0 69 6e 67 20 74 68 65 20 72 65 63 6f 72 64 20 62  ing the record b
14dc0 65 69 6e 67 20 64 65 63 6f 64 65 64 20 2a 2f 0a  eing decoded */.
14dd0 20 20 63 6f 6e 73 74 20 75 38 20 2a 7a 44 61 74    const u8 *zDat
14de0 61 3b 20 20 20 2f 2a 20 50 61 72 74 20 6f 66 20  a;   /* Part of 
14df0 74 68 65 20 72 65 63 6f 72 64 20 62 65 69 6e 67  the record being
14e00 20 64 65 63 6f 64 65 64 20 2a 2f 0a 20 20 63 6f   decoded */.  co
14e10 6e 73 74 20 75 38 20 2a 7a 48 64 72 3b 20 20 20  nst u8 *zHdr;   
14e20 20 2f 2a 20 4e 65 78 74 20 75 6e 70 61 72 73 65   /* Next unparse
14e30 64 20 62 79 74 65 20 6f 66 20 74 68 65 20 68 65  d byte of the he
14e40 61 64 65 72 20 2a 2f 0a 20 20 63 6f 6e 73 74 20  ader */.  const 
14e50 75 38 20 2a 7a 45 6e 64 48 64 72 3b 20 2f 2a 20  u8 *zEndHdr; /* 
14e60 50 6f 69 6e 74 65 72 20 74 6f 20 66 69 72 73 74  Pointer to first
14e70 20 62 79 74 65 20 61 66 74 65 72 20 74 68 65 20   byte after the 
14e80 68 65 61 64 65 72 20 2a 2f 0a 20 20 75 36 34 20  header */.  u64 
14e90 6f 66 66 73 65 74 36 34 3b 20 20 20 20 20 20 2f  offset64;      /
14ea0 2a 20 36 34 2d 62 69 74 20 6f 66 66 73 65 74 20  * 64-bit offset 
14eb0 2a 2f 0a 20 20 75 33 32 20 74 3b 20 20 20 20 20  */.  u32 t;     
14ec0 20 20 20 20 20 20 20 20 2f 2a 20 41 20 74 79 70          /* A typ
14ed0 65 20 63 6f 64 65 20 66 72 6f 6d 20 74 68 65 20  e code from the 
14ee0 72 65 63 6f 72 64 20 68 65 61 64 65 72 20 2a 2f  record header */
14ef0 0a 20 20 4d 65 6d 20 2a 70 52 65 67 3b 20 20 20  .  Mem *pReg;   
14f00 20 20 20 20 20 20 2f 2a 20 50 73 65 75 64 6f 54        /* PseudoT
14f10 61 62 6c 65 20 69 6e 70 75 74 20 72 65 67 69 73  able input regis
14f20 74 65 72 20 2a 2f 0a 0a 20 20 70 43 20 3d 20 70  ter */..  pC = p
14f30 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d  ->apCsr[pOp->p1]
14f40 3b 0a 20 20 70 32 20 3d 20 70 4f 70 2d 3e 70 32  ;.  p2 = pOp->p2
14f50 3b 0a 0a 20 20 2f 2a 20 49 66 20 74 68 65 20 63  ;..  /* If the c
14f60 75 72 73 6f 72 20 63 61 63 68 65 20 69 73 20 73  ursor cache is s
14f70 74 61 6c 65 20 28 6d 65 61 6e 69 6e 67 20 69 74  tale (meaning it
14f80 20 69 73 20 6e 6f 74 20 63 75 72 72 65 6e 74 6c   is not currentl
14f90 79 20 70 6f 69 6e 74 20 61 74 0a 20 20 2a 2a 20  y point at.  ** 
14fa0 74 68 65 20 63 6f 72 72 65 63 74 20 72 6f 77 29  the correct row)
14fb0 20 74 68 65 6e 20 62 72 69 6e 67 20 69 74 20 75   then bring it u
14fc0 70 2d 74 6f 2d 64 61 74 65 20 62 79 20 64 6f 69  p-to-date by doi
14fd0 6e 67 20 74 68 65 20 6e 65 63 65 73 73 61 72 79  ng the necessary
14fe0 20 0a 20 20 2a 2a 20 42 2d 54 72 65 65 20 73 65   .  ** B-Tree se
14ff0 65 6b 2e 20 2a 2f 0a 20 20 72 63 20 3d 20 73 71  ek. */.  rc = sq
15000 6c 69 74 65 33 56 64 62 65 43 75 72 73 6f 72 4d  lite3VdbeCursorM
15010 6f 76 65 74 6f 28 26 70 43 2c 20 26 70 32 29 3b  oveto(&pC, &p2);
15020 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f  .  if( rc ) goto
15030 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
15040 72 6f 72 3b 0a 0a 20 20 61 73 73 65 72 74 28 20  ror;..  assert( 
15050 70 4f 70 2d 3e 70 33 3e 30 20 26 26 20 70 4f 70  pOp->p3>0 && pOp
15060 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31  ->p3<=(p->nMem+1
15070 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29   - p->nCursor) )
15080 3b 0a 20 20 70 44 65 73 74 20 3d 20 26 61 4d 65  ;.  pDest = &aMe
15090 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 6d 65  m[pOp->p3];.  me
150a0 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70  mAboutToChange(p
150b0 2c 20 70 44 65 73 74 29 3b 0a 20 20 61 73 73 65  , pDest);.  asse
150c0 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26  rt( pOp->p1>=0 &
150d0 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75  & pOp->p1<p->nCu
150e0 72 73 6f 72 20 29 3b 0a 20 20 61 73 73 65 72 74  rsor );.  assert
150f0 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 61 73 73  ( pC!=0 );.  ass
15100 65 72 74 28 20 70 32 3c 70 43 2d 3e 6e 46 69 65  ert( p2<pC->nFie
15110 6c 64 20 29 3b 0a 20 20 61 4f 66 66 73 65 74 20  ld );.  aOffset 
15120 3d 20 70 43 2d 3e 61 4f 66 66 73 65 74 3b 0a 20  = pC->aOffset;. 
15130 20 61 73 73 65 72 74 28 20 70 43 2d 3e 65 43 75   assert( pC->eCu
15140 72 54 79 70 65 21 3d 43 55 52 54 59 50 45 5f 56  rType!=CURTYPE_V
15150 54 41 42 20 29 3b 0a 20 20 61 73 73 65 72 74 28  TAB );.  assert(
15160 20 70 43 2d 3e 65 43 75 72 54 79 70 65 21 3d 43   pC->eCurType!=C
15170 55 52 54 59 50 45 5f 50 53 45 55 44 4f 20 7c 7c  URTYPE_PSEUDO ||
15180 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 29 3b 0a   pC->nullRow );.
15190 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 65 43    assert( pC->eC
151a0 75 72 54 79 70 65 21 3d 43 55 52 54 59 50 45 5f  urType!=CURTYPE_
151b0 53 4f 52 54 45 52 20 29 3b 0a 0a 20 20 69 66 28  SORTER );..  if(
151c0 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73   pC->cacheStatus
151d0 21 3d 70 2d 3e 63 61 63 68 65 43 74 72 20 29 7b  !=p->cacheCtr ){
151e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
151f0 2f 2a 4f 50 54 49 4d 49 5a 41 54 49 4f 4e 2d 49  /*OPTIMIZATION-I
15200 46 2d 46 41 4c 53 45 2a 2f 0a 20 20 20 20 69 66  F-FALSE*/.    if
15210 28 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 29 7b  ( pC->nullRow ){
15220 0a 20 20 20 20 20 20 69 66 28 20 70 43 2d 3e 65  .      if( pC->e
15230 43 75 72 54 79 70 65 3d 3d 43 55 52 54 59 50 45  CurType==CURTYPE
15240 5f 50 53 45 55 44 4f 20 29 7b 0a 20 20 20 20 20  _PSEUDO ){.     
15250 20 20 20 2f 2a 20 46 6f 72 20 74 68 65 20 73 70     /* For the sp
15260 65 63 69 61 6c 20 63 61 73 65 20 6f 66 20 61 73  ecial case of as
15270 20 70 73 65 75 64 6f 2d 63 75 72 73 6f 72 2c 20   pseudo-cursor, 
15280 74 68 65 20 73 65 65 6b 52 65 73 75 6c 74 20 66  the seekResult f
15290 69 65 6c 64 0a 20 20 20 20 20 20 20 20 2a 2a 20  ield.        ** 
152a0 69 64 65 6e 74 69 66 69 65 73 20 74 68 65 20 72  identifies the r
152b0 65 67 69 73 74 65 72 20 74 68 61 74 20 68 6f 6c  egister that hol
152c0 64 73 20 74 68 65 20 72 65 63 6f 72 64 20 2a 2f  ds the record */
152d0 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28  .        assert(
152e0 20 70 43 2d 3e 73 65 65 6b 52 65 73 75 6c 74 3e   pC->seekResult>
152f0 30 20 29 3b 0a 20 20 20 20 20 20 20 20 70 52 65  0 );.        pRe
15300 67 20 3d 20 26 61 4d 65 6d 5b 70 43 2d 3e 73 65  g = &aMem[pC->se
15310 65 6b 52 65 73 75 6c 74 5d 3b 0a 20 20 20 20 20  ekResult];.     
15320 20 20 20 61 73 73 65 72 74 28 20 70 52 65 67 2d     assert( pReg-
15330 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 42 6c 6f  >flags & MEM_Blo
15340 62 20 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73  b );.        ass
15350 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28  ert( memIsValid(
15360 70 52 65 67 29 20 29 3b 0a 20 20 20 20 20 20 20  pReg) );.       
15370 20 70 43 2d 3e 70 61 79 6c 6f 61 64 53 69 7a 65   pC->payloadSize
15380 20 3d 20 70 43 2d 3e 73 7a 52 6f 77 20 3d 20 70   = pC->szRow = p
15390 52 65 67 2d 3e 6e 3b 0a 20 20 20 20 20 20 20 20  Reg->n;.        
153a0 70 43 2d 3e 61 52 6f 77 20 3d 20 28 75 38 2a 29  pC->aRow = (u8*)
153b0 70 52 65 67 2d 3e 7a 3b 0a 20 20 20 20 20 20 7d  pReg->z;.      }
153c0 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 73 71  else{.        sq
153d0 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e  lite3VdbeMemSetN
153e0 75 6c 6c 28 70 44 65 73 74 29 3b 0a 20 20 20 20  ull(pDest);.    
153f0 20 20 20 20 67 6f 74 6f 20 6f 70 5f 63 6f 6c 75      goto op_colu
15400 6d 6e 5f 6f 75 74 3b 0a 20 20 20 20 20 20 7d 0a  mn_out;.      }.
15410 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
15420 20 70 43 72 73 72 20 3d 20 70 43 2d 3e 75 63 2e   pCrsr = pC->uc.
15430 70 43 75 72 73 6f 72 3b 0a 20 20 20 20 20 20 61  pCursor;.      a
15440 73 73 65 72 74 28 20 70 43 2d 3e 65 43 75 72 54  ssert( pC->eCurT
15450 79 70 65 3d 3d 43 55 52 54 59 50 45 5f 42 54 52  ype==CURTYPE_BTR
15460 45 45 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65  EE );.      asse
15470 72 74 28 20 70 43 72 73 72 20 29 3b 0a 20 20 20  rt( pCrsr );.   
15480 20 20 20 61 73 73 65 72 74 28 20 73 71 6c 69 74     assert( sqlit
15490 65 33 42 74 72 65 65 43 75 72 73 6f 72 49 73 56  e3BtreeCursorIsV
154a0 61 6c 69 64 28 70 43 72 73 72 29 20 29 3b 0a 20  alid(pCrsr) );. 
154b0 20 20 20 20 20 70 43 2d 3e 70 61 79 6c 6f 61 64       pC->payload
154c0 53 69 7a 65 20 3d 20 73 71 6c 69 74 65 33 42 74  Size = sqlite3Bt
154d0 72 65 65 50 61 79 6c 6f 61 64 53 69 7a 65 28 70  reePayloadSize(p
154e0 43 72 73 72 29 3b 0a 20 20 20 20 20 20 70 43 2d  Crsr);.      pC-
154f0 3e 61 52 6f 77 20 3d 20 73 71 6c 69 74 65 33 42  >aRow = sqlite3B
15500 74 72 65 65 50 61 79 6c 6f 61 64 46 65 74 63 68  treePayloadFetch
15510 28 70 43 72 73 72 2c 20 26 70 43 2d 3e 73 7a 52  (pCrsr, &pC->szR
15520 6f 77 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72  ow);.      asser
15530 74 28 20 70 43 2d 3e 73 7a 52 6f 77 3c 3d 70 43  t( pC->szRow<=pC
15540 2d 3e 70 61 79 6c 6f 61 64 53 69 7a 65 20 29 3b  ->payloadSize );
15550 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70  .      assert( p
15560 43 2d 3e 73 7a 52 6f 77 3c 3d 36 35 35 33 36 20  C->szRow<=65536 
15570 29 3b 20 20 2f 2a 20 4d 61 78 69 6d 75 6d 20 70  );  /* Maximum p
15580 61 67 65 20 73 69 7a 65 20 69 73 20 36 34 4b 69  age size is 64Ki
15590 42 20 2a 2f 0a 20 20 20 20 20 20 69 66 28 20 70  B */.      if( p
155a0 43 2d 3e 70 61 79 6c 6f 61 64 53 69 7a 65 20 3e  C->payloadSize >
155b0 20 28 75 33 32 29 64 62 2d 3e 61 4c 69 6d 69 74   (u32)db->aLimit
155c0 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c 45  [SQLITE_LIMIT_LE
155d0 4e 47 54 48 5d 20 29 7b 0a 20 20 20 20 20 20 20  NGTH] ){.       
155e0 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20   goto too_big;. 
155f0 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20       }.    }.   
15600 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73   pC->cacheStatus
15610 20 3d 20 70 2d 3e 63 61 63 68 65 43 74 72 3b 0a   = p->cacheCtr;.
15620 20 20 20 20 70 43 2d 3e 69 48 64 72 4f 66 66 73      pC->iHdrOffs
15630 65 74 20 3d 20 67 65 74 56 61 72 69 6e 74 33 32  et = getVarint32
15640 28 70 43 2d 3e 61 52 6f 77 2c 20 61 4f 66 66 73  (pC->aRow, aOffs
15650 65 74 5b 30 5d 29 3b 0a 20 20 20 20 70 43 2d 3e  et[0]);.    pC->
15660 6e 48 64 72 50 61 72 73 65 64 20 3d 20 30 3b 0a  nHdrParsed = 0;.
15670 0a 0a 20 20 20 20 69 66 28 20 70 43 2d 3e 73 7a  ..    if( pC->sz
15680 52 6f 77 3c 61 4f 66 66 73 65 74 5b 30 5d 20 29  Row<aOffset[0] )
15690 7b 20 20 20 20 20 20 2f 2a 4f 50 54 49 4d 49 5a  {      /*OPTIMIZ
156a0 41 54 49 4f 4e 2d 49 46 2d 46 41 4c 53 45 2a 2f  ATION-IF-FALSE*/
156b0 0a 20 20 20 20 20 20 2f 2a 20 70 43 2d 3e 61 52  .      /* pC->aR
156c0 6f 77 20 64 6f 65 73 20 6e 6f 74 20 68 61 76 65  ow does not have
156d0 20 74 6f 20 68 6f 6c 64 20 74 68 65 20 65 6e 74   to hold the ent
156e0 69 72 65 20 72 6f 77 2c 20 62 75 74 20 69 74 20  ire row, but it 
156f0 64 6f 65 73 20 61 74 20 6c 65 61 73 74 0a 20 20  does at least.  
15700 20 20 20 20 2a 2a 20 6e 65 65 64 20 74 6f 20 63      ** need to c
15710 6f 76 65 72 20 74 68 65 20 68 65 61 64 65 72 20  over the header 
15720 6f 66 20 74 68 65 20 72 65 63 6f 72 64 2e 20 20  of the record.  
15730 49 66 20 70 43 2d 3e 61 52 6f 77 20 64 6f 65 73  If pC->aRow does
15740 20 6e 6f 74 20 63 6f 6e 74 61 69 6e 0a 20 20 20   not contain.   
15750 20 20 20 2a 2a 20 74 68 65 20 63 6f 6d 70 6c 65     ** the comple
15760 74 65 20 68 65 61 64 65 72 2c 20 74 68 65 6e 20  te header, then 
15770 73 65 74 20 69 74 20 74 6f 20 7a 65 72 6f 2c 20  set it to zero, 
15780 66 6f 72 63 69 6e 67 20 74 68 65 20 68 65 61 64  forcing the head
15790 65 72 20 74 6f 20 62 65 0a 20 20 20 20 20 20 2a  er to be.      *
157a0 2a 20 64 79 6e 61 6d 69 63 61 6c 6c 79 20 61 6c  * dynamically al
157b0 6c 6f 63 61 74 65 64 2e 20 2a 2f 0a 20 20 20 20  located. */.    
157c0 20 20 70 43 2d 3e 61 52 6f 77 20 3d 20 30 3b 0a    pC->aRow = 0;.
157d0 20 20 20 20 20 20 70 43 2d 3e 73 7a 52 6f 77 20        pC->szRow 
157e0 3d 20 30 3b 0a 0a 20 20 20 20 20 20 2f 2a 20 4d  = 0;..      /* M
157f0 61 6b 65 20 73 75 72 65 20 61 20 63 6f 72 72 75  ake sure a corru
15800 70 74 20 64 61 74 61 62 61 73 65 20 68 61 73 20  pt database has 
15810 6e 6f 74 20 67 69 76 65 6e 20 75 73 20 61 6e 20  not given us an 
15820 6f 76 65 72 73 69 7a 65 20 68 65 61 64 65 72 2e  oversize header.
15830 0a 20 20 20 20 20 20 2a 2a 20 44 6f 20 74 68 69  .      ** Do thi
15840 73 20 6e 6f 77 20 74 6f 20 61 76 6f 69 64 20 61  s now to avoid a
15850 6e 20 6f 76 65 72 73 69 7a 65 20 6d 65 6d 6f 72  n oversize memor
15860 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 2e 0a 20 20  y allocation..  
15870 20 20 20 20 2a 2a 0a 20 20 20 20 20 20 2a 2a 20      **.      ** 
15880 54 79 70 65 20 65 6e 74 72 69 65 73 20 63 61 6e  Type entries can
15890 20 62 65 20 62 65 74 77 65 65 6e 20 31 20 61 6e   be between 1 an
158a0 64 20 35 20 62 79 74 65 73 20 65 61 63 68 2e 20  d 5 bytes each. 
158b0 20 42 75 74 20 34 20 61 6e 64 20 35 20 62 79 74   But 4 and 5 byt
158c0 65 0a 20 20 20 20 20 20 2a 2a 20 74 79 70 65 73  e.      ** types
158d0 20 75 73 65 20 73 6f 20 6d 75 63 68 20 64 61 74   use so much dat
158e0 61 20 73 70 61 63 65 20 74 68 61 74 20 74 68 65  a space that the
158f0 72 65 20 63 61 6e 20 6f 6e 6c 79 20 62 65 20 34  re can only be 4
15900 30 39 36 20 61 6e 64 20 33 32 20 6f 66 0a 20 20  096 and 32 of.  
15910 20 20 20 20 2a 2a 20 74 68 65 6d 2c 20 72 65 73      ** them, res
15920 70 65 63 74 69 76 65 6c 79 2e 20 20 53 6f 20 74  pectively.  So t
15930 68 65 20 6d 61 78 69 6d 75 6d 20 68 65 61 64 65  he maximum heade
15940 72 20 6c 65 6e 67 74 68 20 72 65 73 75 6c 74 73  r length results
15950 20 66 72 6f 6d 20 61 0a 20 20 20 20 20 20 2a 2a   from a.      **
15960 20 33 2d 62 79 74 65 20 74 79 70 65 20 66 6f 72   3-byte type for
15970 20 65 61 63 68 20 6f 66 20 74 68 65 20 6d 61 78   each of the max
15980 69 6d 75 6d 20 6f 66 20 33 32 37 36 38 20 63 6f  imum of 32768 co
15990 6c 75 6d 6e 73 20 70 6c 75 73 20 74 68 72 65 65  lumns plus three
159a0 0a 20 20 20 20 20 20 2a 2a 20 65 78 74 72 61 20  .      ** extra 
159b0 62 79 74 65 73 20 66 6f 72 20 74 68 65 20 68 65  bytes for the he
159c0 61 64 65 72 20 6c 65 6e 67 74 68 20 69 74 73 65  ader length itse
159d0 6c 66 2e 20 20 33 32 37 36 38 2a 33 20 2b 20 33  lf.  32768*3 + 3
159e0 20 3d 20 39 38 33 30 37 2e 0a 20 20 20 20 20 20   = 98307..      
159f0 2a 2f 0a 20 20 20 20 20 20 69 66 28 20 61 4f 66  */.      if( aOf
15a00 66 73 65 74 5b 30 5d 20 3e 20 39 38 33 30 37 20  fset[0] > 98307 
15a10 7c 7c 20 61 4f 66 66 73 65 74 5b 30 5d 20 3e 20  || aOffset[0] > 
15a20 70 43 2d 3e 70 61 79 6c 6f 61 64 53 69 7a 65 20  pC->payloadSize 
15a30 29 7b 0a 20 20 20 20 20 20 20 20 67 6f 74 6f 20  ){.        goto 
15a40 6f 70 5f 63 6f 6c 75 6d 6e 5f 63 6f 72 72 75 70  op_column_corrup
15a50 74 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  t;.      }.    }
15a60 65 6c 73 65 7b 0a 20 20 20 20 20 20 2f 2a 20 54  else{.      /* T
15a70 68 69 73 20 69 73 20 61 6e 20 6f 70 74 69 6d 69  his is an optimi
15a80 7a 61 74 69 6f 6e 2e 20 20 42 79 20 73 6b 69 70  zation.  By skip
15a90 70 69 6e 67 20 6f 76 65 72 20 74 68 65 20 66 69  ping over the fi
15aa0 72 73 74 20 66 65 77 20 74 65 73 74 73 0a 20 20  rst few tests.  
15ab0 20 20 20 20 2a 2a 20 28 65 78 3a 20 70 43 2d 3e      ** (ex: pC->
15ac0 6e 48 64 72 50 61 72 73 65 64 3c 3d 70 32 29 20  nHdrParsed<=p2) 
15ad0 69 6e 20 74 68 65 20 6e 65 78 74 20 73 65 63 74  in the next sect
15ae0 69 6f 6e 2c 20 77 65 20 61 63 68 69 65 76 65 20  ion, we achieve 
15af0 61 0a 20 20 20 20 20 20 2a 2a 20 6d 65 61 73 75  a.      ** measu
15b00 72 61 62 6c 65 20 70 65 72 66 6f 72 6d 61 6e 63  rable performanc
15b10 65 20 67 61 69 6e 2e 0a 20 20 20 20 20 20 2a 2a  e gain..      **
15b20 0a 20 20 20 20 20 20 2a 2a 20 54 68 69 73 20 62  .      ** This b
15b30 72 61 6e 63 68 20 69 73 20 74 61 6b 65 6e 20 65  ranch is taken e
15b40 76 65 6e 20 69 66 20 61 4f 66 66 73 65 74 5b 30  ven if aOffset[0
15b50 5d 3d 3d 30 2e 20 20 53 75 63 68 20 61 20 72 65  ]==0.  Such a re
15b60 63 6f 72 64 20 69 73 20 6e 65 76 65 72 0a 20 20  cord is never.  
15b70 20 20 20 20 2a 2a 20 67 65 6e 65 72 61 74 65 64      ** generated
15b80 20 62 79 20 53 51 4c 69 74 65 2c 20 61 6e 64 20   by SQLite, and 
15b90 63 6f 75 6c 64 20 62 65 20 63 6f 6e 73 69 64 65  could be conside
15ba0 72 65 64 20 63 6f 72 72 75 70 74 69 6f 6e 2c 20  red corruption, 
15bb0 62 75 74 20 77 65 0a 20 20 20 20 20 20 2a 2a 20  but we.      ** 
15bc0 61 63 63 65 70 74 20 69 74 20 66 6f 72 20 68 69  accept it for hi
15bd0 73 74 6f 72 69 63 61 6c 20 72 65 61 73 6f 6e 73  storical reasons
15be0 2e 20 20 57 68 65 6e 20 61 4f 66 66 73 65 74 5b  .  When aOffset[
15bf0 30 5d 3d 3d 30 2c 20 74 68 65 20 63 6f 64 65 20  0]==0, the code 
15c00 74 68 69 73 0a 20 20 20 20 20 20 2a 2a 20 62 72  this.      ** br
15c10 61 6e 63 68 20 6a 75 6d 70 73 20 74 6f 20 72 65  anch jumps to re
15c20 61 64 73 20 70 61 73 74 20 74 68 65 20 65 6e 64  ads past the end
15c30 20 6f 66 20 74 68 65 20 72 65 63 6f 72 64 2c 20   of the record, 
15c40 62 75 74 20 6e 65 76 65 72 20 6d 6f 72 65 0a 20  but never more. 
15c50 20 20 20 20 20 2a 2a 20 74 68 61 6e 20 61 20 66       ** than a f
15c60 65 77 20 62 79 74 65 73 2e 20 20 45 76 65 6e 20  ew bytes.  Even 
15c70 69 66 20 74 68 65 20 72 65 63 6f 72 64 20 6f 63  if the record oc
15c80 63 75 72 73 20 61 74 20 74 68 65 20 65 6e 64 20  curs at the end 
15c90 6f 66 20 74 68 65 20 70 61 67 65 0a 20 20 20 20  of the page.    
15ca0 20 20 2a 2a 20 63 6f 6e 74 65 6e 74 20 61 72 65    ** content are
15cb0 61 2c 20 74 68 65 20 22 70 61 67 65 20 68 65 61  a, the "page hea
15cc0 64 65 72 22 20 63 6f 6d 65 73 20 61 66 74 65 72  der" comes after
15cd0 20 74 68 65 20 70 61 67 65 20 63 6f 6e 74 65 6e   the page conten
15ce0 74 20 61 6e 64 20 73 6f 0a 20 20 20 20 20 20 2a  t and so.      *
15cf0 2a 20 74 68 69 73 20 6f 76 65 72 72 65 61 64 20  * this overread 
15d00 69 73 20 68 61 72 6d 6c 65 73 73 2e 20 20 53 69  is harmless.  Si
15d10 6d 69 6c 61 72 20 6f 76 65 72 72 65 61 64 73 20  milar overreads 
15d20 63 61 6e 20 6f 63 63 75 72 20 66 6f 72 20 61 20  can occur for a 
15d30 63 6f 72 72 75 70 74 0a 20 20 20 20 20 20 2a 2a  corrupt.      **
15d40 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e 0a   database file..
15d50 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 7a        */.      z
15d60 44 61 74 61 20 3d 20 70 43 2d 3e 61 52 6f 77 3b  Data = pC->aRow;
15d70 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70  .      assert( p
15d80 43 2d 3e 6e 48 64 72 50 61 72 73 65 64 3c 3d 70  C->nHdrParsed<=p
15d90 32 20 29 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  2 );         /* 
15da0 43 6f 6e 64 69 74 69 6f 6e 61 6c 20 73 6b 69 70  Conditional skip
15db0 70 65 64 20 2a 2f 0a 20 20 20 20 20 20 74 65 73  ped */.      tes
15dc0 74 63 61 73 65 28 20 61 4f 66 66 73 65 74 5b 30  tcase( aOffset[0
15dd0 5d 3d 3d 30 20 29 3b 0a 20 20 20 20 20 20 67 6f  ]==0 );.      go
15de0 74 6f 20 6f 70 5f 63 6f 6c 75 6d 6e 5f 72 65 61  to op_column_rea
15df0 64 5f 68 65 61 64 65 72 3b 0a 20 20 20 20 7d 0a  d_header;.    }.
15e00 20 20 7d 0a 0a 20 20 2f 2a 20 4d 61 6b 65 20 73    }..  /* Make s
15e10 75 72 65 20 61 74 20 6c 65 61 73 74 20 74 68 65  ure at least the
15e20 20 66 69 72 73 74 20 70 32 2b 31 20 65 6e 74 72   first p2+1 entr
15e30 69 65 73 20 6f 66 20 74 68 65 20 68 65 61 64 65  ies of the heade
15e40 72 20 68 61 76 65 20 62 65 65 6e 0a 20 20 2a 2a  r have been.  **
15e50 20 70 61 72 73 65 64 20 61 6e 64 20 76 61 6c 69   parsed and vali
15e60 64 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 69 73  d information is
15e70 20 69 6e 20 61 4f 66 66 73 65 74 5b 5d 20 61 6e   in aOffset[] an
15e80 64 20 70 43 2d 3e 61 54 79 70 65 5b 5d 2e 0a 20  d pC->aType[].. 
15e90 20 2a 2f 0a 20 20 69 66 28 20 70 43 2d 3e 6e 48   */.  if( pC->nH
15ea0 64 72 50 61 72 73 65 64 3c 3d 70 32 20 29 7b 0a  drParsed<=p2 ){.
15eb0 20 20 20 20 2f 2a 20 49 66 20 74 68 65 72 65 20      /* If there 
15ec0 69 73 20 6d 6f 72 65 20 68 65 61 64 65 72 20 61  is more header a
15ed0 76 61 69 6c 61 62 6c 65 20 66 6f 72 20 70 61 72  vailable for par
15ee0 73 69 6e 67 20 69 6e 20 74 68 65 20 72 65 63 6f  sing in the reco
15ef0 72 64 2c 20 74 72 79 0a 20 20 20 20 2a 2a 20 74  rd, try.    ** t
15f00 6f 20 65 78 74 72 61 63 74 20 61 64 64 69 74 69  o extract additi
15f10 6f 6e 61 6c 20 66 69 65 6c 64 73 20 75 70 20 74  onal fields up t
15f20 68 72 6f 75 67 68 20 74 68 65 20 70 32 2b 31 2d  hrough the p2+1-
15f30 74 68 20 66 69 65 6c 64 20 0a 20 20 20 20 2a 2f  th field .    */
15f40 0a 20 20 20 20 69 66 28 20 70 43 2d 3e 69 48 64  .    if( pC->iHd
15f50 72 4f 66 66 73 65 74 3c 61 4f 66 66 73 65 74 5b  rOffset<aOffset[
15f60 30 5d 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 4d  0] ){.      /* M
15f70 61 6b 65 20 73 75 72 65 20 7a 44 61 74 61 20 70  ake sure zData p
15f80 6f 69 6e 74 73 20 74 6f 20 65 6e 6f 75 67 68 20  oints to enough 
15f90 6f 66 20 74 68 65 20 72 65 63 6f 72 64 20 74 6f  of the record to
15fa0 20 63 6f 76 65 72 20 74 68 65 20 68 65 61 64 65   cover the heade
15fb0 72 2e 20 2a 2f 0a 20 20 20 20 20 20 69 66 28 20  r. */.      if( 
15fc0 70 43 2d 3e 61 52 6f 77 3d 3d 30 20 29 7b 0a 20  pC->aRow==0 ){. 
15fd0 20 20 20 20 20 20 20 6d 65 6d 73 65 74 28 26 73         memset(&s
15fe0 4d 65 6d 2c 20 30 2c 20 73 69 7a 65 6f 66 28 73  Mem, 0, sizeof(s
15ff0 4d 65 6d 29 29 3b 0a 20 20 20 20 20 20 20 20 72  Mem));.        r
16000 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 4d  c = sqlite3VdbeM
16010 65 6d 46 72 6f 6d 42 74 72 65 65 28 70 43 2d 3e  emFromBtree(pC->
16020 75 63 2e 70 43 75 72 73 6f 72 2c 20 30 2c 20 61  uc.pCursor, 0, a
16030 4f 66 66 73 65 74 5b 30 5d 2c 20 26 73 4d 65 6d  Offset[0], &sMem
16040 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 72  );.        if( r
16050 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 20 67  c!=SQLITE_OK ) g
16060 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
16070 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 20 20  _error;.        
16080 7a 44 61 74 61 20 3d 20 28 75 38 2a 29 73 4d 65  zData = (u8*)sMe
16090 6d 2e 7a 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65  m.z;.      }else
160a0 7b 0a 20 20 20 20 20 20 20 20 7a 44 61 74 61 20  {.        zData 
160b0 3d 20 70 43 2d 3e 61 52 6f 77 3b 0a 20 20 20 20  = pC->aRow;.    
160c0 20 20 7d 0a 20 20 0a 20 20 20 20 20 20 2f 2a 20    }.  .      /* 
160d0 46 69 6c 6c 20 69 6e 20 70 43 2d 3e 61 54 79 70  Fill in pC->aTyp
160e0 65 5b 69 5d 20 61 6e 64 20 61 4f 66 66 73 65 74  e[i] and aOffset
160f0 5b 69 5d 20 76 61 6c 75 65 73 20 74 68 72 6f 75  [i] values throu
16100 67 68 20 74 68 65 20 70 32 2d 74 68 20 66 69 65  gh the p2-th fie
16110 6c 64 2e 20 2a 2f 0a 20 20 20 20 6f 70 5f 63 6f  ld. */.    op_co
16120 6c 75 6d 6e 5f 72 65 61 64 5f 68 65 61 64 65 72  lumn_read_header
16130 3a 0a 20 20 20 20 20 20 69 20 3d 20 70 43 2d 3e  :.      i = pC->
16140 6e 48 64 72 50 61 72 73 65 64 3b 0a 20 20 20 20  nHdrParsed;.    
16150 20 20 6f 66 66 73 65 74 36 34 20 3d 20 61 4f 66    offset64 = aOf
16160 66 73 65 74 5b 69 5d 3b 0a 20 20 20 20 20 20 7a  fset[i];.      z
16170 48 64 72 20 3d 20 7a 44 61 74 61 20 2b 20 70 43  Hdr = zData + pC
16180 2d 3e 69 48 64 72 4f 66 66 73 65 74 3b 0a 20 20  ->iHdrOffset;.  
16190 20 20 20 20 7a 45 6e 64 48 64 72 20 3d 20 7a 44      zEndHdr = zD
161a0 61 74 61 20 2b 20 61 4f 66 66 73 65 74 5b 30 5d  ata + aOffset[0]
161b0 3b 0a 20 20 20 20 20 20 74 65 73 74 63 61 73 65  ;.      testcase
161c0 28 20 7a 48 64 72 3e 3d 7a 45 6e 64 48 64 72 20  ( zHdr>=zEndHdr 
161d0 29 3b 0a 20 20 20 20 20 20 64 6f 7b 0a 20 20 20  );.      do{.   
161e0 20 20 20 20 20 69 66 28 20 28 70 43 2d 3e 61 54       if( (pC->aT
161f0 79 70 65 5b 69 5d 20 3d 20 74 20 3d 20 7a 48 64  ype[i] = t = zHd
16200 72 5b 30 5d 29 3c 30 78 38 30 20 29 7b 0a 20 20  r[0])<0x80 ){.  
16210 20 20 20 20 20 20 20 20 7a 48 64 72 2b 2b 3b 0a          zHdr++;.
16220 20 20 20 20 20 20 20 20 20 20 6f 66 66 73 65 74            offset
16230 36 34 20 2b 3d 20 73 71 6c 69 74 65 33 56 64 62  64 += sqlite3Vdb
16240 65 4f 6e 65 42 79 74 65 53 65 72 69 61 6c 54 79  eOneByteSerialTy
16250 70 65 4c 65 6e 28 74 29 3b 0a 20 20 20 20 20 20  peLen(t);.      
16260 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20    }else{.       
16270 20 20 20 7a 48 64 72 20 2b 3d 20 73 71 6c 69 74     zHdr += sqlit
16280 65 33 47 65 74 56 61 72 69 6e 74 33 32 28 7a 48  e3GetVarint32(zH
16290 64 72 2c 20 26 74 29 3b 0a 20 20 20 20 20 20 20  dr, &t);.       
162a0 20 20 20 70 43 2d 3e 61 54 79 70 65 5b 69 5d 20     pC->aType[i] 
162b0 3d 20 74 3b 0a 20 20 20 20 20 20 20 20 20 20 6f  = t;.          o
162c0 66 66 73 65 74 36 34 20 2b 3d 20 73 71 6c 69 74  ffset64 += sqlit
162d0 65 33 56 64 62 65 53 65 72 69 61 6c 54 79 70 65  e3VdbeSerialType
162e0 4c 65 6e 28 74 29 3b 0a 20 20 20 20 20 20 20 20  Len(t);.        
162f0 7d 0a 20 20 20 20 20 20 20 20 61 4f 66 66 73 65  }.        aOffse
16300 74 5b 2b 2b 69 5d 20 3d 20 28 75 33 32 29 28 6f  t[++i] = (u32)(o
16310 66 66 73 65 74 36 34 20 26 20 30 78 66 66 66 66  ffset64 & 0xffff
16320 66 66 66 66 29 3b 0a 20 20 20 20 20 20 7d 77 68  ffff);.      }wh
16330 69 6c 65 28 20 69 3c 3d 70 32 20 26 26 20 7a 48  ile( i<=p2 && zH
16340 64 72 3c 7a 45 6e 64 48 64 72 20 29 3b 0a 0a 20  dr<zEndHdr );.. 
16350 20 20 20 20 20 2f 2a 20 54 68 65 20 72 65 63 6f       /* The reco
16360 72 64 20 69 73 20 63 6f 72 72 75 70 74 20 69 66  rd is corrupt if
16370 20 61 6e 79 20 6f 66 20 74 68 65 20 66 6f 6c 6c   any of the foll
16380 6f 77 69 6e 67 20 61 72 65 20 74 72 75 65 3a 0a  owing are true:.
16390 20 20 20 20 20 20 2a 2a 20 28 31 29 20 74 68 65        ** (1) the
163a0 20 62 79 74 65 73 20 6f 66 20 74 68 65 20 68 65   bytes of the he
163b0 61 64 65 72 20 65 78 74 65 6e 64 20 70 61 73 74  ader extend past
163c0 20 74 68 65 20 64 65 63 6c 61 72 65 64 20 68 65   the declared he
163d0 61 64 65 72 20 73 69 7a 65 0a 20 20 20 20 20 20  ader size.      
163e0 2a 2a 20 28 32 29 20 74 68 65 20 65 6e 74 69 72  ** (2) the entir
163f0 65 20 68 65 61 64 65 72 20 77 61 73 20 75 73 65  e header was use
16400 64 20 62 75 74 20 6e 6f 74 20 61 6c 6c 20 64 61  d but not all da
16410 74 61 20 77 61 73 20 75 73 65 64 0a 20 20 20 20  ta was used.    
16420 20 20 2a 2a 20 28 33 29 20 74 68 65 20 65 6e 64    ** (3) the end
16430 20 6f 66 20 74 68 65 20 64 61 74 61 20 65 78 74   of the data ext
16440 65 6e 64 73 20 62 65 79 6f 6e 64 20 74 68 65 20  ends beyond the 
16450 65 6e 64 20 6f 66 20 74 68 65 20 72 65 63 6f 72  end of the recor
16460 64 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20  d..      */.    
16470 20 20 69 66 28 20 28 7a 48 64 72 3e 3d 7a 45 6e    if( (zHdr>=zEn
16480 64 48 64 72 20 26 26 20 28 7a 48 64 72 3e 7a 45  dHdr && (zHdr>zE
16490 6e 64 48 64 72 20 7c 7c 20 6f 66 66 73 65 74 36  ndHdr || offset6
164a0 34 21 3d 70 43 2d 3e 70 61 79 6c 6f 61 64 53 69  4!=pC->payloadSi
164b0 7a 65 29 29 0a 20 20 20 20 20 20 20 7c 7c 20 28  ze)).       || (
164c0 6f 66 66 73 65 74 36 34 20 3e 20 70 43 2d 3e 70  offset64 > pC->p
164d0 61 79 6c 6f 61 64 53 69 7a 65 29 0a 20 20 20 20  ayloadSize).    
164e0 20 20 29 7b 0a 20 20 20 20 20 20 20 20 69 66 28    ){.        if(
164f0 20 61 4f 66 66 73 65 74 5b 30 5d 3d 3d 30 20 29   aOffset[0]==0 )
16500 7b 0a 20 20 20 20 20 20 20 20 20 20 69 20 3d 20  {.          i = 
16510 30 3b 0a 20 20 20 20 20 20 20 20 20 20 7a 48 64  0;.          zHd
16520 72 20 3d 20 7a 45 6e 64 48 64 72 3b 0a 20 20 20  r = zEndHdr;.   
16530 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
16540 20 20 20 20 20 20 69 66 28 20 70 43 2d 3e 61 52        if( pC->aR
16550 6f 77 3d 3d 30 20 29 20 73 71 6c 69 74 65 33 56  ow==0 ) sqlite3V
16560 64 62 65 4d 65 6d 52 65 6c 65 61 73 65 28 26 73  dbeMemRelease(&s
16570 4d 65 6d 29 3b 0a 20 20 20 20 20 20 20 20 20 20  Mem);.          
16580 67 6f 74 6f 20 6f 70 5f 63 6f 6c 75 6d 6e 5f 63  goto op_column_c
16590 6f 72 72 75 70 74 3b 0a 20 20 20 20 20 20 20 20  orrupt;.        
165a0 7d 0a 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20  }.      }..     
165b0 20 70 43 2d 3e 6e 48 64 72 50 61 72 73 65 64 20   pC->nHdrParsed 
165c0 3d 20 69 3b 0a 20 20 20 20 20 20 70 43 2d 3e 69  = i;.      pC->i
165d0 48 64 72 4f 66 66 73 65 74 20 3d 20 28 75 33 32  HdrOffset = (u32
165e0 29 28 7a 48 64 72 20 2d 20 7a 44 61 74 61 29 3b  )(zHdr - zData);
165f0 0a 20 20 20 20 20 20 69 66 28 20 70 43 2d 3e 61  .      if( pC->a
16600 52 6f 77 3d 3d 30 20 29 20 73 71 6c 69 74 65 33  Row==0 ) sqlite3
16610 56 64 62 65 4d 65 6d 52 65 6c 65 61 73 65 28 26  VdbeMemRelease(&
16620 73 4d 65 6d 29 3b 0a 20 20 20 20 7d 65 6c 73 65  sMem);.    }else
16630 7b 0a 20 20 20 20 20 20 74 20 3d 20 30 3b 0a 20  {.      t = 0;. 
16640 20 20 20 7d 0a 0a 20 20 20 20 2f 2a 20 49 66 20     }..    /* If 
16650 61 66 74 65 72 20 74 72 79 69 6e 67 20 74 6f 20  after trying to 
16660 65 78 74 72 61 63 74 20 6e 65 77 20 65 6e 74 72  extract new entr
16670 69 65 73 20 66 72 6f 6d 20 74 68 65 20 68 65 61  ies from the hea
16680 64 65 72 2c 20 6e 48 64 72 50 61 72 73 65 64 20  der, nHdrParsed 
16690 69 73 0a 20 20 20 20 2a 2a 20 73 74 69 6c 6c 20  is.    ** still 
166a0 6e 6f 74 20 75 70 20 74 6f 20 70 32 2c 20 74 68  not up to p2, th
166b0 61 74 20 6d 65 61 6e 73 20 74 68 61 74 20 74 68  at means that th
166c0 65 20 72 65 63 6f 72 64 20 68 61 73 20 66 65 77  e record has few
166d0 65 72 20 74 68 61 6e 20 70 32 0a 20 20 20 20 2a  er than p2.    *
166e0 2a 20 63 6f 6c 75 6d 6e 73 2e 20 20 53 6f 20 74  * columns.  So t
166f0 68 65 20 72 65 73 75 6c 74 20 77 69 6c 6c 20 62  he result will b
16700 65 20 65 69 74 68 65 72 20 74 68 65 20 64 65 66  e either the def
16710 61 75 6c 74 20 76 61 6c 75 65 20 6f 72 20 61 20  ault value or a 
16720 4e 55 4c 4c 2e 0a 20 20 20 20 2a 2f 0a 20 20 20  NULL..    */.   
16730 20 69 66 28 20 70 43 2d 3e 6e 48 64 72 50 61 72   if( pC->nHdrPar
16740 73 65 64 3c 3d 70 32 20 29 7b 0a 20 20 20 20 20  sed<=p2 ){.     
16750 20 69 66 28 20 70 4f 70 2d 3e 70 34 74 79 70 65   if( pOp->p4type
16760 3d 3d 50 34 5f 4d 45 4d 20 29 7b 0a 20 20 20 20  ==P4_MEM ){.    
16770 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
16780 65 6d 53 68 61 6c 6c 6f 77 43 6f 70 79 28 70 44  emShallowCopy(pD
16790 65 73 74 2c 20 70 4f 70 2d 3e 70 34 2e 70 4d 65  est, pOp->p4.pMe
167a0 6d 2c 20 4d 45 4d 5f 53 74 61 74 69 63 29 3b 0a  m, MEM_Static);.
167b0 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20        }else{.   
167c0 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
167d0 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 44 65 73 74  MemSetNull(pDest
167e0 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20  );.      }.     
167f0 20 67 6f 74 6f 20 6f 70 5f 63 6f 6c 75 6d 6e 5f   goto op_column_
16800 6f 75 74 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c  out;.    }.  }el
16810 73 65 7b 0a 20 20 20 20 74 20 3d 20 70 43 2d 3e  se{.    t = pC->
16820 61 54 79 70 65 5b 70 32 5d 3b 0a 20 20 7d 0a 0a  aType[p2];.  }..
16830 20 20 2f 2a 20 45 78 74 72 61 63 74 20 74 68 65    /* Extract the
16840 20 63 6f 6e 74 65 6e 74 20 66 6f 72 20 74 68 65   content for the
16850 20 70 32 2b 31 2d 74 68 20 63 6f 6c 75 6d 6e 2e   p2+1-th column.
16860 20 20 43 6f 6e 74 72 6f 6c 20 63 61 6e 20 6f 6e    Control can on
16870 6c 79 0a 20 20 2a 2a 20 72 65 61 63 68 20 74 68  ly.  ** reach th
16880 69 73 20 70 6f 69 6e 74 20 69 66 20 61 4f 66 66  is point if aOff
16890 73 65 74 5b 70 32 5d 2c 20 61 4f 66 66 73 65 74  set[p2], aOffset
168a0 5b 70 32 2b 31 5d 2c 20 61 6e 64 20 70 43 2d 3e  [p2+1], and pC->
168b0 61 54 79 70 65 5b 70 32 5d 20 61 72 65 0a 20 20  aType[p2] are.  
168c0 2a 2a 20 61 6c 6c 20 76 61 6c 69 64 2e 0a 20 20  ** all valid..  
168d0 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70 32 3c  */.  assert( p2<
168e0 70 43 2d 3e 6e 48 64 72 50 61 72 73 65 64 20 29  pC->nHdrParsed )
168f0 3b 0a 20 20 61 73 73 65 72 74 28 20 72 63 3d 3d  ;.  assert( rc==
16900 53 51 4c 49 54 45 5f 4f 4b 20 29 3b 0a 20 20 61  SQLITE_OK );.  a
16910 73 73 65 72 74 28 20 73 71 6c 69 74 65 33 56 64  ssert( sqlite3Vd
16920 62 65 43 68 65 63 6b 4d 65 6d 49 6e 76 61 72 69  beCheckMemInvari
16930 61 6e 74 73 28 70 44 65 73 74 29 20 29 3b 0a 20  ants(pDest) );. 
16940 20 69 66 28 20 56 64 62 65 4d 65 6d 44 79 6e 61   if( VdbeMemDyna
16950 6d 69 63 28 70 44 65 73 74 29 20 29 7b 0a 20 20  mic(pDest) ){.  
16960 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
16970 53 65 74 4e 75 6c 6c 28 70 44 65 73 74 29 3b 0a  SetNull(pDest);.
16980 20 20 7d 0a 20 20 61 73 73 65 72 74 28 20 74 3d    }.  assert( t=
16990 3d 70 43 2d 3e 61 54 79 70 65 5b 70 32 5d 20 29  =pC->aType[p2] )
169a0 3b 0a 20 20 69 66 28 20 70 43 2d 3e 73 7a 52 6f  ;.  if( pC->szRo
169b0 77 3e 3d 61 4f 66 66 73 65 74 5b 70 32 2b 31 5d  w>=aOffset[p2+1]
169c0 20 29 7b 0a 20 20 20 20 2f 2a 20 54 68 69 73 20   ){.    /* This 
169d0 69 73 20 74 68 65 20 63 6f 6d 6d 6f 6e 20 63 61  is the common ca
169e0 73 65 20 77 68 65 72 65 20 74 68 65 20 64 65 73  se where the des
169f0 69 72 65 64 20 63 6f 6e 74 65 6e 74 20 66 69 74  ired content fit
16a00 73 20 6f 6e 20 74 68 65 20 6f 72 69 67 69 6e 61  s on the origina
16a10 6c 0a 20 20 20 20 2a 2a 20 70 61 67 65 20 2d 20  l.    ** page - 
16a20 77 68 65 72 65 20 74 68 65 20 63 6f 6e 74 65 6e  where the conten
16a30 74 20 69 73 20 6e 6f 74 20 6f 6e 20 61 6e 20 6f  t is not on an o
16a40 76 65 72 66 6c 6f 77 20 70 61 67 65 20 2a 2f 0a  verflow page */.
16a50 20 20 20 20 7a 44 61 74 61 20 3d 20 70 43 2d 3e      zData = pC->
16a60 61 52 6f 77 20 2b 20 61 4f 66 66 73 65 74 5b 70  aRow + aOffset[p
16a70 32 5d 3b 0a 20 20 20 20 69 66 28 20 74 3c 31 32  2];.    if( t<12
16a80 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65   ){.      sqlite
16a90 33 56 64 62 65 53 65 72 69 61 6c 47 65 74 28 7a  3VdbeSerialGet(z
16aa0 44 61 74 61 2c 20 74 2c 20 70 44 65 73 74 29 3b  Data, t, pDest);
16ab0 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  .    }else{.    
16ac0 20 20 2f 2a 20 49 66 20 74 68 65 20 63 6f 6c 75    /* If the colu
16ad0 6d 6e 20 76 61 6c 75 65 20 69 73 20 61 20 73 74  mn value is a st
16ae0 72 69 6e 67 2c 20 77 65 20 6e 65 65 64 20 61 20  ring, we need a 
16af0 70 65 72 73 69 73 74 65 6e 74 20 76 61 6c 75 65  persistent value
16b00 2c 20 6e 6f 74 0a 20 20 20 20 20 20 2a 2a 20 61  , not.      ** a
16b10 20 4d 45 4d 5f 45 70 68 65 6d 20 76 61 6c 75 65   MEM_Ephem value
16b20 2e 20 20 54 68 69 73 20 62 72 61 6e 63 68 20 69  .  This branch i
16b30 73 20 61 20 66 61 73 74 20 73 68 6f 72 74 2d 63  s a fast short-c
16b40 75 74 20 74 68 61 74 20 69 73 20 65 71 75 69 76  ut that is equiv
16b50 61 6c 65 6e 74 0a 20 20 20 20 20 20 2a 2a 20 74  alent.      ** t
16b60 6f 20 63 61 6c 6c 69 6e 67 20 73 71 6c 69 74 65  o calling sqlite
16b70 33 56 64 62 65 53 65 72 69 61 6c 47 65 74 28 29  3VdbeSerialGet()
16b80 20 61 6e 64 20 73 71 6c 69 74 65 33 56 64 62 65   and sqlite3Vdbe
16b90 44 65 65 70 68 65 6d 65 72 61 6c 69 7a 65 28 29  Deephemeralize()
16ba0 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20  ..      */.     
16bb0 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20 75 31   static const u1
16bc0 36 20 61 46 6c 61 67 5b 5d 20 3d 20 7b 20 4d 45  6 aFlag[] = { ME
16bd0 4d 5f 42 6c 6f 62 2c 20 4d 45 4d 5f 53 74 72 7c  M_Blob, MEM_Str|
16be0 4d 45 4d 5f 54 65 72 6d 20 7d 3b 0a 20 20 20 20  MEM_Term };.    
16bf0 20 20 70 44 65 73 74 2d 3e 6e 20 3d 20 6c 65 6e    pDest->n = len
16c00 20 3d 20 28 74 2d 31 32 29 2f 32 3b 0a 20 20 20   = (t-12)/2;.   
16c10 20 20 20 70 44 65 73 74 2d 3e 65 6e 63 20 3d 20     pDest->enc = 
16c20 65 6e 63 6f 64 69 6e 67 3b 0a 20 20 20 20 20 20  encoding;.      
16c30 69 66 28 20 70 44 65 73 74 2d 3e 73 7a 4d 61 6c  if( pDest->szMal
16c40 6c 6f 63 20 3c 20 6c 65 6e 2b 32 20 29 7b 0a 20  loc < len+2 ){. 
16c50 20 20 20 20 20 20 20 70 44 65 73 74 2d 3e 66 6c         pDest->fl
16c60 61 67 73 20 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a  ags = MEM_Null;.
16c70 20 20 20 20 20 20 20 20 69 66 28 20 73 71 6c 69          if( sqli
16c80 74 65 33 56 64 62 65 4d 65 6d 47 72 6f 77 28 70  te3VdbeMemGrow(p
16c90 44 65 73 74 2c 20 6c 65 6e 2b 32 2c 20 30 29 20  Dest, len+2, 0) 
16ca0 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20  ) goto no_mem;. 
16cb0 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
16cc0 20 20 20 20 70 44 65 73 74 2d 3e 7a 20 3d 20 70      pDest->z = p
16cd0 44 65 73 74 2d 3e 7a 4d 61 6c 6c 6f 63 3b 0a 20  Dest->zMalloc;. 
16ce0 20 20 20 20 20 7d 0a 20 20 20 20 20 20 6d 65 6d       }.      mem
16cf0 63 70 79 28 70 44 65 73 74 2d 3e 7a 2c 20 7a 44  cpy(pDest->z, zD
16d00 61 74 61 2c 20 6c 65 6e 29 3b 0a 20 20 20 20 20  ata, len);.     
16d10 20 70 44 65 73 74 2d 3e 7a 5b 6c 65 6e 5d 20 3d   pDest->z[len] =
16d20 20 30 3b 0a 20 20 20 20 20 20 70 44 65 73 74 2d   0;.      pDest-
16d30 3e 7a 5b 6c 65 6e 2b 31 5d 20 3d 20 30 3b 0a 20  >z[len+1] = 0;. 
16d40 20 20 20 20 20 70 44 65 73 74 2d 3e 66 6c 61 67       pDest->flag
16d50 73 20 3d 20 61 46 6c 61 67 5b 74 26 31 5d 3b 0a  s = aFlag[t&1];.
16d60 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20      }.  }else{. 
16d70 20 20 20 70 44 65 73 74 2d 3e 65 6e 63 20 3d 20     pDest->enc = 
16d80 65 6e 63 6f 64 69 6e 67 3b 0a 20 20 20 20 2f 2a  encoding;.    /*
16d90 20 54 68 69 73 20 62 72 61 6e 63 68 20 68 61 70   This branch hap
16da0 70 65 6e 73 20 6f 6e 6c 79 20 77 68 65 6e 20 63  pens only when c
16db0 6f 6e 74 65 6e 74 20 69 73 20 6f 6e 20 6f 76 65  ontent is on ove
16dc0 72 66 6c 6f 77 20 70 61 67 65 73 20 2a 2f 0a 20  rflow pages */. 
16dd0 20 20 20 69 66 28 20 28 28 70 4f 70 2d 3e 70 35     if( ((pOp->p5
16de0 20 26 20 28 4f 50 46 4c 41 47 5f 4c 45 4e 47 54   & (OPFLAG_LENGT
16df0 48 41 52 47 7c 4f 50 46 4c 41 47 5f 54 59 50 45  HARG|OPFLAG_TYPE
16e00 4f 46 41 52 47 29 29 21 3d 30 0a 20 20 20 20 20  OFARG))!=0.     
16e10 20 20 20 20 20 26 26 20 28 28 74 3e 3d 31 32 20       && ((t>=12 
16e20 26 26 20 28 74 26 31 29 3d 3d 30 29 20 7c 7c 20  && (t&1)==0) || 
16e30 28 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41  (pOp->p5 & OPFLA
16e40 47 5f 54 59 50 45 4f 46 41 52 47 29 21 3d 30 29  G_TYPEOFARG)!=0)
16e50 29 0a 20 20 20 20 20 7c 7c 20 28 6c 65 6e 20 3d  ).     || (len =
16e60 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 72 69   sqlite3VdbeSeri
16e70 61 6c 54 79 70 65 4c 65 6e 28 74 29 29 3d 3d 30  alTypeLen(t))==0
16e80 0a 20 20 20 20 29 7b 0a 20 20 20 20 20 20 2f 2a  .    ){.      /*
16e90 20 43 6f 6e 74 65 6e 74 20 69 73 20 69 72 72 65   Content is irre
16ea0 6c 65 76 61 6e 74 20 66 6f 72 0a 20 20 20 20 20  levant for.     
16eb0 20 2a 2a 20 20 20 20 31 2e 20 74 68 65 20 74 79   **    1. the ty
16ec0 70 65 6f 66 28 29 20 66 75 6e 63 74 69 6f 6e 2c  peof() function,
16ed0 0a 20 20 20 20 20 20 2a 2a 20 20 20 20 32 2e 20  .      **    2. 
16ee0 74 68 65 20 6c 65 6e 67 74 68 28 58 29 20 66 75  the length(X) fu
16ef0 6e 63 74 69 6f 6e 20 69 66 20 58 20 69 73 20 61  nction if X is a
16f00 20 62 6c 6f 62 2c 20 61 6e 64 0a 20 20 20 20 20   blob, and.     
16f10 20 2a 2a 20 20 20 20 33 2e 20 69 66 20 74 68 65   **    3. if the
16f20 20 63 6f 6e 74 65 6e 74 20 6c 65 6e 67 74 68 20   content length 
16f30 69 73 20 7a 65 72 6f 2e 0a 20 20 20 20 20 20 2a  is zero..      *
16f40 2a 20 53 6f 20 77 65 20 6d 69 67 68 74 20 61 73  * So we might as
16f50 20 77 65 6c 6c 20 75 73 65 20 62 6f 67 75 73 20   well use bogus 
16f60 63 6f 6e 74 65 6e 74 20 72 61 74 68 65 72 20 74  content rather t
16f70 68 61 6e 20 72 65 61 64 69 6e 67 0a 20 20 20 20  han reading.    
16f80 20 20 2a 2a 20 63 6f 6e 74 65 6e 74 20 66 72 6f    ** content fro
16f90 6d 20 64 69 73 6b 2e 20 0a 20 20 20 20 20 20 2a  m disk. .      *
16fa0 2a 0a 20 20 20 20 20 20 2a 2a 20 41 6c 74 68 6f  *.      ** Altho
16fb0 75 67 68 20 73 71 6c 69 74 65 33 56 64 62 65 53  ugh sqlite3VdbeS
16fc0 65 72 69 61 6c 47 65 74 28 29 20 6d 61 79 20 72  erialGet() may r
16fd0 65 61 64 20 61 74 20 6d 6f 73 74 20 38 20 62 79  ead at most 8 by
16fe0 74 65 73 20 66 72 6f 6d 20 74 68 65 0a 20 20 20  tes from the.   
16ff0 20 20 20 2a 2a 20 62 75 66 66 65 72 20 70 61 73     ** buffer pas
17000 73 65 64 20 74 6f 20 69 74 2c 20 64 65 62 75 67  sed to it, debug
17010 67 69 6e 67 20 66 75 6e 63 74 69 6f 6e 20 56 64  ging function Vd
17020 62 65 4d 65 6d 50 72 65 74 74 79 50 72 69 6e 74  beMemPrettyPrint
17030 28 29 20 6d 61 79 0a 20 20 20 20 20 20 2a 2a 20  () may.      ** 
17040 72 65 61 64 20 75 70 20 74 6f 20 31 36 2e 20 53  read up to 16. S
17050 6f 20 31 36 20 62 79 74 65 73 20 6f 66 20 62 6f  o 16 bytes of bo
17060 67 75 73 20 63 6f 6e 74 65 6e 74 20 69 73 20 73  gus content is s
17070 75 70 70 6c 69 65 64 2e 0a 20 20 20 20 20 20 2a  upplied..      *
17080 2f 0a 20 20 20 20 20 20 73 74 61 74 69 63 20 75  /.      static u
17090 38 20 61 5a 65 72 6f 5b 31 36 5d 3b 20 20 2f 2a  8 aZero[16];  /*
170a0 20 54 68 69 73 20 69 73 20 74 68 65 20 62 6f 67   This is the bog
170b0 75 73 20 63 6f 6e 74 65 6e 74 20 2a 2f 0a 20 20  us content */.  
170c0 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53      sqlite3VdbeS
170d0 65 72 69 61 6c 47 65 74 28 61 5a 65 72 6f 2c 20  erialGet(aZero, 
170e0 74 2c 20 70 44 65 73 74 29 3b 0a 20 20 20 20 7d  t, pDest);.    }
170f0 65 6c 73 65 7b 0a 20 20 20 20 20 20 72 63 20 3d  else{.      rc =
17100 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 46   sqlite3VdbeMemF
17110 72 6f 6d 42 74 72 65 65 28 70 43 2d 3e 75 63 2e  romBtree(pC->uc.
17120 70 43 75 72 73 6f 72 2c 20 61 4f 66 66 73 65 74  pCursor, aOffset
17130 5b 70 32 5d 2c 20 6c 65 6e 2c 20 70 44 65 73 74  [p2], len, pDest
17140 29 3b 0a 20 20 20 20 20 20 69 66 28 20 72 63 21  );.      if( rc!
17150 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 20 67 6f 74  =SQLITE_OK ) got
17160 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
17170 72 72 6f 72 3b 0a 20 20 20 20 20 20 73 71 6c 69  rror;.      sqli
17180 74 65 33 56 64 62 65 53 65 72 69 61 6c 47 65 74  te3VdbeSerialGet
17190 28 28 63 6f 6e 73 74 20 75 38 2a 29 70 44 65 73  ((const u8*)pDes
171a0 74 2d 3e 7a 2c 20 74 2c 20 70 44 65 73 74 29 3b  t->z, t, pDest);
171b0 0a 20 20 20 20 20 20 70 44 65 73 74 2d 3e 66 6c  .      pDest->fl
171c0 61 67 73 20 26 3d 20 7e 4d 45 4d 5f 45 70 68 65  ags &= ~MEM_Ephe
171d0 6d 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 0a 6f 70  m;.    }.  }..op
171e0 5f 63 6f 6c 75 6d 6e 5f 6f 75 74 3a 0a 20 20 55  _column_out:.  U
171f0 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49  PDATE_MAX_BLOBSI
17200 5a 45 28 70 44 65 73 74 29 3b 0a 20 20 52 45 47  ZE(pDest);.  REG
17210 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d  ISTER_TRACE(pOp-
17220 3e 70 33 2c 20 70 44 65 73 74 29 3b 0a 20 20 62  >p3, pDest);.  b
17230 72 65 61 6b 3b 0a 0a 6f 70 5f 63 6f 6c 75 6d 6e  reak;..op_column
17240 5f 63 6f 72 72 75 70 74 3a 0a 20 20 69 66 28 20  _corrupt:.  if( 
17250 61 4f 70 5b 30 5d 2e 70 33 3e 30 20 29 7b 0a 20  aOp[0].p3>0 ){. 
17260 20 20 20 70 4f 70 20 3d 20 26 61 4f 70 5b 61 4f     pOp = &aOp[aO
17270 70 5b 30 5d 2e 70 33 2d 31 5d 3b 0a 20 20 20 20  p[0].p3-1];.    
17280 62 72 65 61 6b 3b 0a 20 20 7d 65 6c 73 65 7b 0a  break;.  }else{.
17290 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f      rc = SQLITE_
172a0 43 4f 52 52 55 50 54 5f 42 4b 50 54 3b 0a 20 20  CORRUPT_BKPT;.  
172b0 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65    goto abort_due
172c0 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 7d 0a 7d  _to_error;.  }.}
172d0 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 41 66 66  ../* Opcode: Aff
172e0 69 6e 69 74 79 20 50 31 20 50 32 20 2a 20 50 34  inity P1 P2 * P4
172f0 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
17300 61 66 66 69 6e 69 74 79 28 72 5b 50 31 40 50 32  affinity(r[P1@P2
17310 5d 29 0a 2a 2a 0a 2a 2a 20 41 70 70 6c 79 20 61  ]).**.** Apply a
17320 66 66 69 6e 69 74 69 65 73 20 74 6f 20 61 20 72  ffinities to a r
17330 61 6e 67 65 20 6f 66 20 50 32 20 72 65 67 69 73  ange of P2 regis
17340 74 65 72 73 20 73 74 61 72 74 69 6e 67 20 77 69  ters starting wi
17350 74 68 20 50 31 2e 0a 2a 2a 0a 2a 2a 20 50 34 20  th P1..**.** P4 
17360 69 73 20 61 20 73 74 72 69 6e 67 20 74 68 61 74  is a string that
17370 20 69 73 20 50 32 20 63 68 61 72 61 63 74 65 72   is P2 character
17380 73 20 6c 6f 6e 67 2e 20 54 68 65 20 4e 2d 74 68  s long. The N-th
17390 20 63 68 61 72 61 63 74 65 72 20 6f 66 20 74 68   character of th
173a0 65 0a 2a 2a 20 73 74 72 69 6e 67 20 69 6e 64 69  e.** string indi
173b0 63 61 74 65 73 20 74 68 65 20 63 6f 6c 75 6d 6e  cates the column
173c0 20 61 66 66 69 6e 69 74 79 20 74 68 61 74 20 73   affinity that s
173d0 68 6f 75 6c 64 20 62 65 20 75 73 65 64 20 66 6f  hould be used fo
173e0 72 20 74 68 65 20 4e 2d 74 68 0a 2a 2a 20 6d 65  r the N-th.** me
173f0 6d 6f 72 79 20 63 65 6c 6c 20 69 6e 20 74 68 65  mory cell in the
17400 20 72 61 6e 67 65 2e 0a 2a 2f 0a 63 61 73 65 20   range..*/.case 
17410 4f 50 5f 41 66 66 69 6e 69 74 79 3a 20 7b 0a 20  OP_Affinity: {. 
17420 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 41 66   const char *zAf
17430 66 69 6e 69 74 79 3b 20 20 20 2f 2a 20 54 68 65  finity;   /* The
17440 20 61 66 66 69 6e 69 74 79 20 74 6f 20 62 65 20   affinity to be 
17450 61 70 70 6c 69 65 64 20 2a 2f 0a 0a 20 20 7a 41  applied */..  zA
17460 66 66 69 6e 69 74 79 20 3d 20 70 4f 70 2d 3e 70  ffinity = pOp->p
17470 34 2e 7a 3b 0a 20 20 61 73 73 65 72 74 28 20 7a  4.z;.  assert( z
17480 41 66 66 69 6e 69 74 79 21 3d 30 20 29 3b 0a 20  Affinity!=0 );. 
17490 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32   assert( pOp->p2
174a0 3e 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  >0 );.  assert( 
174b0 7a 41 66 66 69 6e 69 74 79 5b 70 4f 70 2d 3e 70  zAffinity[pOp->p
174c0 32 5d 3d 3d 30 20 29 3b 0a 20 20 70 49 6e 31 20  2]==0 );.  pIn1 
174d0 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  = &aMem[pOp->p1]
174e0 3b 0a 20 20 77 68 69 6c 65 28 20 31 20 2f 2a 65  ;.  while( 1 /*e
174f0 64 69 74 2d 62 79 2d 62 72 65 61 6b 2a 2f 20 29  dit-by-break*/ )
17500 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 49  {.    assert( pI
17510 6e 31 20 3c 3d 20 26 70 2d 3e 61 4d 65 6d 5b 28  n1 <= &p->aMem[(
17520 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e  p->nMem+1 - p->n
17530 43 75 72 73 6f 72 29 5d 20 29 3b 0a 20 20 20 20  Cursor)] );.    
17540 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c  assert( memIsVal
17550 69 64 28 70 49 6e 31 29 20 29 3b 0a 20 20 20 20  id(pIn1) );.    
17560 61 70 70 6c 79 41 66 66 69 6e 69 74 79 28 70 49  applyAffinity(pI
17570 6e 31 2c 20 7a 41 66 66 69 6e 69 74 79 5b 30 5d  n1, zAffinity[0]
17580 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 20  , encoding);.   
17590 20 69 66 28 20 7a 41 66 66 69 6e 69 74 79 5b 30   if( zAffinity[0
175a0 5d 3d 3d 53 51 4c 49 54 45 5f 41 46 46 5f 52 45  ]==SQLITE_AFF_RE
175b0 41 4c 20 26 26 20 28 70 49 6e 31 2d 3e 66 6c 61  AL && (pIn1->fla
175c0 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29 21 3d 30  gs & MEM_Int)!=0
175d0 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 57 68 65   ){.      /* Whe
175e0 6e 20 61 70 70 6c 79 69 6e 67 20 52 45 41 4c 20  n applying REAL 
175f0 61 66 66 69 6e 69 74 79 2c 20 69 66 20 74 68 65  affinity, if the
17600 20 72 65 73 75 6c 74 20 69 73 20 73 74 69 6c 6c   result is still
17610 20 4d 45 4d 5f 49 6e 74 2c 20 0a 20 20 20 20 20   MEM_Int, .     
17620 20 2a 2a 20 69 6e 64 69 63 61 74 65 20 74 68 61   ** indicate tha
17630 74 20 52 45 41 4c 20 69 73 20 61 63 74 75 61 6c  t REAL is actual
17640 6c 79 20 64 65 73 69 72 65 64 20 2a 2f 0a 20 20  ly desired */.  
17650 20 20 20 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20      pIn1->flags 
17660 7c 3d 20 4d 45 4d 5f 49 6e 74 52 65 61 6c 3b 0a  |= MEM_IntReal;.
17670 20 20 20 20 20 20 70 49 6e 31 2d 3e 66 6c 61 67        pIn1->flag
17680 73 20 26 3d 20 7e 4d 45 4d 5f 49 6e 74 3b 0a 20  s &= ~MEM_Int;. 
17690 20 20 20 7d 0a 20 20 20 20 52 45 47 49 53 54 45     }.    REGISTE
176a0 52 5f 54 52 41 43 45 28 28 69 6e 74 29 28 70 49  R_TRACE((int)(pI
176b0 6e 31 2d 61 4d 65 6d 29 2c 20 70 49 6e 31 29 3b  n1-aMem), pIn1);
176c0 0a 20 20 20 20 7a 41 66 66 69 6e 69 74 79 2b 2b  .    zAffinity++
176d0 3b 0a 20 20 20 20 69 66 28 20 7a 41 66 66 69 6e  ;.    if( zAffin
176e0 69 74 79 5b 30 5d 3d 3d 30 20 29 20 62 72 65 61  ity[0]==0 ) brea
176f0 6b 3b 0a 20 20 20 20 70 49 6e 31 2b 2b 3b 0a 20  k;.    pIn1++;. 
17700 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f   }.  break;.}../
17710 2a 20 4f 70 63 6f 64 65 3a 20 4d 61 6b 65 52 65  * Opcode: MakeRe
17720 63 6f 72 64 20 50 31 20 50 32 20 50 33 20 50 34  cord P1 P2 P3 P4
17730 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
17740 72 5b 50 33 5d 3d 6d 6b 72 65 63 28 72 5b 50 31  r[P3]=mkrec(r[P1
17750 40 50 32 5d 29 0a 2a 2a 0a 2a 2a 20 43 6f 6e 76  @P2]).**.** Conv
17760 65 72 74 20 50 32 20 72 65 67 69 73 74 65 72 73  ert P2 registers
17770 20 62 65 67 69 6e 6e 69 6e 67 20 77 69 74 68 20   beginning with 
17780 50 31 20 69 6e 74 6f 20 74 68 65 20 5b 72 65 63  P1 into the [rec
17790 6f 72 64 20 66 6f 72 6d 61 74 5d 0a 2a 2a 20 75  ord format].** u
177a0 73 65 20 61 73 20 61 20 64 61 74 61 20 72 65 63  se as a data rec
177b0 6f 72 64 20 69 6e 20 61 20 64 61 74 61 62 61 73  ord in a databas
177c0 65 20 74 61 62 6c 65 20 6f 72 20 61 73 20 61 20  e table or as a 
177d0 6b 65 79 0a 2a 2a 20 69 6e 20 61 6e 20 69 6e 64  key.** in an ind
177e0 65 78 2e 20 20 54 68 65 20 4f 50 5f 43 6f 6c 75  ex.  The OP_Colu
177f0 6d 6e 20 6f 70 63 6f 64 65 20 63 61 6e 20 64 65  mn opcode can de
17800 63 6f 64 65 20 74 68 65 20 72 65 63 6f 72 64 20  code the record 
17810 6c 61 74 65 72 2e 0a 2a 2a 0a 2a 2a 20 50 34 20  later..**.** P4 
17820 6d 61 79 20 62 65 20 61 20 73 74 72 69 6e 67 20  may be a string 
17830 74 68 61 74 20 69 73 20 50 32 20 63 68 61 72 61  that is P2 chara
17840 63 74 65 72 73 20 6c 6f 6e 67 2e 20 20 54 68 65  cters long.  The
17850 20 4e 2d 74 68 20 63 68 61 72 61 63 74 65 72 20   N-th character 
17860 6f 66 20 74 68 65 0a 2a 2a 20 73 74 72 69 6e 67  of the.** string
17870 20 69 6e 64 69 63 61 74 65 73 20 74 68 65 20 63   indicates the c
17880 6f 6c 75 6d 6e 20 61 66 66 69 6e 69 74 79 20 74  olumn affinity t
17890 68 61 74 20 73 68 6f 75 6c 64 20 62 65 20 75 73  hat should be us
178a0 65 64 20 66 6f 72 20 74 68 65 20 4e 2d 74 68 0a  ed for the N-th.
178b0 2a 2a 20 66 69 65 6c 64 20 6f 66 20 74 68 65 20  ** field of the 
178c0 69 6e 64 65 78 20 6b 65 79 2e 0a 2a 2a 0a 2a 2a  index key..**.**
178d0 20 54 68 65 20 6d 61 70 70 69 6e 67 20 66 72 6f   The mapping fro
178e0 6d 20 63 68 61 72 61 63 74 65 72 20 74 6f 20 61  m character to a
178f0 66 66 69 6e 69 74 79 20 69 73 20 67 69 76 65 6e  ffinity is given
17900 20 62 79 20 74 68 65 20 53 51 4c 49 54 45 5f 41   by the SQLITE_A
17910 46 46 5f 0a 2a 2a 20 6d 61 63 72 6f 73 20 64 65  FF_.** macros de
17920 66 69 6e 65 64 20 69 6e 20 73 71 6c 69 74 65 49  fined in sqliteI
17930 6e 74 2e 68 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50  nt.h..**.** If P
17940 34 20 69 73 20 4e 55 4c 4c 20 74 68 65 6e 20 61  4 is NULL then a
17950 6c 6c 20 69 6e 64 65 78 20 66 69 65 6c 64 73 20  ll index fields 
17960 68 61 76 65 20 74 68 65 20 61 66 66 69 6e 69 74  have the affinit
17970 79 20 42 4c 4f 42 2e 0a 2a 2f 0a 63 61 73 65 20  y BLOB..*/.case 
17980 4f 50 5f 4d 61 6b 65 52 65 63 6f 72 64 3a 20 7b  OP_MakeRecord: {
17990 0a 20 20 4d 65 6d 20 2a 70 52 65 63 3b 20 20 20  .  Mem *pRec;   
179a0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65            /* The
179b0 20 6e 65 77 20 72 65 63 6f 72 64 20 2a 2f 0a 20   new record */. 
179c0 20 75 36 34 20 6e 44 61 74 61 3b 20 20 20 20 20   u64 nData;     
179d0 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
179e0 72 20 6f 66 20 62 79 74 65 73 20 6f 66 20 64 61  r of bytes of da
179f0 74 61 20 73 70 61 63 65 20 2a 2f 0a 20 20 69 6e  ta space */.  in
17a00 74 20 6e 48 64 72 3b 20 20 20 20 20 20 20 20 20  t nHdr;         
17a10 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
17a20 66 20 62 79 74 65 73 20 6f 66 20 68 65 61 64 65  f bytes of heade
17a30 72 20 73 70 61 63 65 20 2a 2f 0a 20 20 69 36 34  r space */.  i64
17a40 20 6e 42 79 74 65 3b 20 20 20 20 20 20 20 20 20   nByte;         
17a50 20 20 20 20 2f 2a 20 44 61 74 61 20 73 70 61 63      /* Data spac
17a60 65 20 72 65 71 75 69 72 65 64 20 66 6f 72 20 74  e required for t
17a70 68 69 73 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20  his record */.  
17a80 69 36 34 20 6e 5a 65 72 6f 3b 20 20 20 20 20 20  i64 nZero;      
17a90 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
17aa0 20 6f 66 20 7a 65 72 6f 20 62 79 74 65 73 20 61   of zero bytes a
17ab0 74 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68 65  t the end of the
17ac0 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69 6e 74   record */.  int
17ad0 20 6e 56 61 72 69 6e 74 3b 20 20 20 20 20 20 20   nVarint;       
17ae0 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
17af0 20 62 79 74 65 73 20 69 6e 20 61 20 76 61 72 69   bytes in a vari
17b00 6e 74 20 2a 2f 0a 20 20 75 33 32 20 73 65 72 69  nt */.  u32 seri
17b10 61 6c 5f 74 79 70 65 3b 20 20 20 20 20 20 20 2f  al_type;       /
17b20 2a 20 54 79 70 65 20 66 69 65 6c 64 20 2a 2f 0a  * Type field */.
17b30 20 20 4d 65 6d 20 2a 70 44 61 74 61 30 3b 20 20    Mem *pData0;  
17b40 20 20 20 20 20 20 20 20 20 2f 2a 20 46 69 72 73           /* Firs
17b50 74 20 66 69 65 6c 64 20 74 6f 20 62 65 20 63 6f  t field to be co
17b60 6d 62 69 6e 65 64 20 69 6e 74 6f 20 74 68 65 20  mbined into the 
17b70 72 65 63 6f 72 64 20 2a 2f 0a 20 20 4d 65 6d 20  record */.  Mem 
17b80 2a 70 4c 61 73 74 3b 20 20 20 20 20 20 20 20 20  *pLast;         
17b90 20 20 20 2f 2a 20 4c 61 73 74 20 66 69 65 6c 64     /* Last field
17ba0 20 6f 66 20 74 68 65 20 72 65 63 6f 72 64 20 2a   of the record *
17bb0 2f 0a 20 20 69 6e 74 20 6e 46 69 65 6c 64 3b 20  /.  int nField; 
17bc0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
17bd0 6d 62 65 72 20 6f 66 20 66 69 65 6c 64 73 20 69  mber of fields i
17be0 6e 20 74 68 65 20 72 65 63 6f 72 64 20 2a 2f 0a  n the record */.
17bf0 20 20 63 68 61 72 20 2a 7a 41 66 66 69 6e 69 74    char *zAffinit
17c00 79 3b 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20  y;       /* The 
17c10 61 66 66 69 6e 69 74 79 20 73 74 72 69 6e 67 20  affinity string 
17c20 66 6f 72 20 74 68 65 20 72 65 63 6f 72 64 20 2a  for the record *
17c30 2f 0a 20 20 69 6e 74 20 66 69 6c 65 5f 66 6f 72  /.  int file_for
17c40 6d 61 74 3b 20 20 20 20 20 20 20 2f 2a 20 46 69  mat;       /* Fi
17c50 6c 65 20 66 6f 72 6d 61 74 20 74 6f 20 75 73 65  le format to use
17c60 20 66 6f 72 20 65 6e 63 6f 64 69 6e 67 20 2a 2f   for encoding */
17c70 0a 20 20 75 33 32 20 6c 65 6e 3b 20 20 20 20 20  .  u32 len;     
17c80 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 65 6e            /* Len
17c90 67 74 68 20 6f 66 20 61 20 66 69 65 6c 64 20 2a  gth of a field *
17ca0 2f 0a 20 20 75 38 20 2a 7a 48 64 72 3b 20 20 20  /.  u8 *zHdr;   
17cb0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 57 68             /* Wh
17cc0 65 72 65 20 74 6f 20 77 72 69 74 65 20 6e 65 78  ere to write nex
17cd0 74 20 62 79 74 65 20 6f 66 20 74 68 65 20 68 65  t byte of the he
17ce0 61 64 65 72 20 2a 2f 0a 20 20 75 38 20 2a 7a 50  ader */.  u8 *zP
17cf0 61 79 6c 6f 61 64 3b 20 20 20 20 20 20 20 20 20  ayload;         
17d00 20 2f 2a 20 57 68 65 72 65 20 74 6f 20 77 72 69   /* Where to wri
17d10 74 65 20 6e 65 78 74 20 62 79 74 65 20 6f 66 20  te next byte of 
17d20 74 68 65 20 70 61 79 6c 6f 61 64 20 2a 2f 0a 0a  the payload */..
17d30 20 20 2f 2a 20 41 73 73 75 6d 69 6e 67 20 74 68    /* Assuming th
17d40 65 20 72 65 63 6f 72 64 20 63 6f 6e 74 61 69 6e  e record contain
17d50 73 20 4e 20 66 69 65 6c 64 73 2c 20 74 68 65 20  s N fields, the 
17d60 72 65 63 6f 72 64 20 66 6f 72 6d 61 74 20 6c 6f  record format lo
17d70 6f 6b 73 0a 20 20 2a 2a 20 6c 69 6b 65 20 74 68  oks.  ** like th
17d80 69 73 3a 0a 20 20 2a 2a 0a 20 20 2a 2a 20 2d 2d  is:.  **.  ** --
17d90 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
17da0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
17db0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
17dc0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
17dd0 2d 2d 2d 2d 2d 2d 0a 20 20 2a 2a 20 7c 20 68 64  ------.  ** | hd
17de0 72 2d 73 69 7a 65 20 7c 20 74 79 70 65 20 30 20  r-size | type 0 
17df0 7c 20 74 79 70 65 20 31 20 7c 20 2e 2e 2e 20 7c  | type 1 | ... |
17e00 20 74 79 70 65 20 4e 2d 31 20 7c 20 64 61 74 61   type N-1 | data
17e10 30 20 7c 20 2e 2e 2e 20 7c 20 64 61 74 61 20 4e  0 | ... | data N
17e20 2d 31 20 7c 20 0a 20 20 2a 2a 20 2d 2d 2d 2d 2d  -1 | .  ** -----
17e30 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
17e40 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
17e50 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
17e60 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
17e70 2d 2d 2d 0a 20 20 2a 2a 0a 20 20 2a 2a 20 44 61  ---.  **.  ** Da
17e80 74 61 28 30 29 20 69 73 20 74 61 6b 65 6e 20 66  ta(0) is taken f
17e90 72 6f 6d 20 72 65 67 69 73 74 65 72 20 50 31 2e  rom register P1.
17ea0 20 20 44 61 74 61 28 31 29 20 63 6f 6d 65 73 20    Data(1) comes 
17eb0 66 72 6f 6d 20 72 65 67 69 73 74 65 72 20 50 31  from register P1
17ec0 2b 31 0a 20 20 2a 2a 20 61 6e 64 20 73 6f 20 66  +1.  ** and so f
17ed0 6f 72 74 68 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20  orth..  **.  ** 
17ee0 45 61 63 68 20 74 79 70 65 20 66 69 65 6c 64 20  Each type field 
17ef0 69 73 20 61 20 76 61 72 69 6e 74 20 72 65 70 72  is a varint repr
17f00 65 73 65 6e 74 69 6e 67 20 74 68 65 20 73 65 72  esenting the ser
17f10 69 61 6c 20 74 79 70 65 20 6f 66 20 74 68 65 20  ial type of the 
17f20 0a 20 20 2a 2a 20 63 6f 72 72 65 73 70 6f 6e 64  .  ** correspond
17f30 69 6e 67 20 64 61 74 61 20 65 6c 65 6d 65 6e 74  ing data element
17f40 20 28 73 65 65 20 73 71 6c 69 74 65 33 56 64 62   (see sqlite3Vdb
17f50 65 53 65 72 69 61 6c 54 79 70 65 28 29 29 2e 20  eSerialType()). 
17f60 54 68 65 0a 20 20 2a 2a 20 68 64 72 2d 73 69 7a  The.  ** hdr-siz
17f70 65 20 66 69 65 6c 64 20 69 73 20 61 6c 73 6f 20  e field is also 
17f80 61 20 76 61 72 69 6e 74 20 77 68 69 63 68 20 69  a varint which i
17f90 73 20 74 68 65 20 6f 66 66 73 65 74 20 66 72 6f  s the offset fro
17fa0 6d 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 0a  m the beginning.
17fb0 20 20 2a 2a 20 6f 66 20 74 68 65 20 72 65 63 6f    ** of the reco
17fc0 72 64 20 74 6f 20 64 61 74 61 30 2e 0a 20 20 2a  rd to data0..  *
17fd0 2f 0a 20 20 6e 44 61 74 61 20 3d 20 30 3b 20 20  /.  nData = 0;  
17fe0 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
17ff0 20 6f 66 20 62 79 74 65 73 20 6f 66 20 64 61 74   of bytes of dat
18000 61 20 73 70 61 63 65 20 2a 2f 0a 20 20 6e 48 64  a space */.  nHd
18010 72 20 3d 20 30 3b 20 20 20 20 20 20 20 20 20 20  r = 0;          
18020 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62 79 74  /* Number of byt
18030 65 73 20 6f 66 20 68 65 61 64 65 72 20 73 70 61  es of header spa
18040 63 65 20 2a 2f 0a 20 20 6e 5a 65 72 6f 20 3d 20  ce */.  nZero = 
18050 30 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75  0;         /* Nu
18060 6d 62 65 72 20 6f 66 20 7a 65 72 6f 20 62 79 74  mber of zero byt
18070 65 73 20 61 74 20 74 68 65 20 65 6e 64 20 6f 66  es at the end of
18080 20 74 68 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20   the record */. 
18090 20 6e 46 69 65 6c 64 20 3d 20 70 4f 70 2d 3e 70   nField = pOp->p
180a0 31 3b 0a 20 20 7a 41 66 66 69 6e 69 74 79 20 3d  1;.  zAffinity =
180b0 20 70 4f 70 2d 3e 70 34 2e 7a 3b 0a 20 20 61 73   pOp->p4.z;.  as
180c0 73 65 72 74 28 20 6e 46 69 65 6c 64 3e 30 20 26  sert( nField>0 &
180d0 26 20 70 4f 70 2d 3e 70 32 3e 30 20 26 26 20 70  & pOp->p2>0 && p
180e0 4f 70 2d 3e 70 32 2b 6e 46 69 65 6c 64 3c 3d 28  Op->p2+nField<=(
180f0 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e  p->nMem+1 - p->n
18100 43 75 72 73 6f 72 29 2b 31 20 29 3b 0a 20 20 70  Cursor)+1 );.  p
18110 44 61 74 61 30 20 3d 20 26 61 4d 65 6d 5b 6e 46  Data0 = &aMem[nF
18120 69 65 6c 64 5d 3b 0a 20 20 6e 46 69 65 6c 64 20  ield];.  nField 
18130 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 70 4c 61  = pOp->p2;.  pLa
18140 73 74 20 3d 20 26 70 44 61 74 61 30 5b 6e 46 69  st = &pData0[nFi
18150 65 6c 64 2d 31 5d 3b 0a 20 20 66 69 6c 65 5f 66  eld-1];.  file_f
18160 6f 72 6d 61 74 20 3d 20 70 2d 3e 6d 69 6e 57 72  ormat = p->minWr
18170 69 74 65 46 69 6c 65 46 6f 72 6d 61 74 3b 0a 0a  iteFileFormat;..
18180 20 20 2f 2a 20 49 64 65 6e 74 69 66 79 20 74 68    /* Identify th
18190 65 20 6f 75 74 70 75 74 20 72 65 67 69 73 74 65  e output registe
181a0 72 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70  r */.  assert( p
181b0 4f 70 2d 3e 70 33 3c 70 4f 70 2d 3e 70 31 20 7c  Op->p3<pOp->p1 |
181c0 7c 20 70 4f 70 2d 3e 70 33 3e 3d 70 4f 70 2d 3e  | pOp->p3>=pOp->
181d0 70 31 2b 70 4f 70 2d 3e 70 32 20 29 3b 0a 20 20  p1+pOp->p2 );.  
181e0 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pOut = &aMem[pOp
181f0 2d 3e 70 33 5d 3b 0a 20 20 6d 65 6d 41 62 6f 75  ->p3];.  memAbou
18200 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 4f 75  tToChange(p, pOu
18210 74 29 3b 0a 0a 20 20 2f 2a 20 41 70 70 6c 79 20  t);..  /* Apply 
18220 74 68 65 20 72 65 71 75 65 73 74 65 64 20 61 66  the requested af
18230 66 69 6e 69 74 79 20 74 6f 20 61 6c 6c 20 69 6e  finity to all in
18240 70 75 74 73 0a 20 20 2a 2f 0a 20 20 61 73 73 65  puts.  */.  asse
18250 72 74 28 20 70 44 61 74 61 30 3c 3d 70 4c 61 73  rt( pData0<=pLas
18260 74 20 29 3b 0a 20 20 69 66 28 20 7a 41 66 66 69  t );.  if( zAffi
18270 6e 69 74 79 20 29 7b 0a 20 20 20 20 70 52 65 63  nity ){.    pRec
18280 20 3d 20 70 44 61 74 61 30 3b 0a 20 20 20 20 64   = pData0;.    d
18290 6f 7b 0a 20 20 20 20 20 20 61 70 70 6c 79 41 66  o{.      applyAf
182a0 66 69 6e 69 74 79 28 70 52 65 63 2c 20 7a 41 66  finity(pRec, zAf
182b0 66 69 6e 69 74 79 5b 30 5d 2c 20 65 6e 63 6f 64  finity[0], encod
182c0 69 6e 67 29 3b 0a 20 20 20 20 20 20 52 45 47 49  ing);.      REGI
182d0 53 54 45 52 5f 54 52 41 43 45 28 28 69 6e 74 29  STER_TRACE((int)
182e0 28 70 52 65 63 2d 61 4d 65 6d 29 2c 20 70 52 65  (pRec-aMem), pRe
182f0 63 29 3b 0a 20 20 20 20 20 20 7a 41 66 66 69 6e  c);.      zAffin
18300 69 74 79 2b 2b 3b 0a 20 20 20 20 20 20 70 52 65  ity++;.      pRe
18310 63 2b 2b 3b 0a 20 20 20 20 20 20 61 73 73 65 72  c++;.      asser
18320 74 28 20 7a 41 66 66 69 6e 69 74 79 5b 30 5d 3d  t( zAffinity[0]=
18330 3d 30 20 7c 7c 20 70 52 65 63 3c 3d 70 4c 61 73  =0 || pRec<=pLas
18340 74 20 29 3b 0a 20 20 20 20 7d 77 68 69 6c 65 28  t );.    }while(
18350 20 7a 41 66 66 69 6e 69 74 79 5b 30 5d 20 29 3b   zAffinity[0] );
18360 0a 20 20 7d 0a 0a 23 69 66 64 65 66 20 53 51 4c  .  }..#ifdef SQL
18370 49 54 45 5f 45 4e 41 42 4c 45 5f 4e 55 4c 4c 5f  ITE_ENABLE_NULL_
18380 54 52 49 4d 0a 20 20 2f 2a 20 4e 55 4c 4c 73 20  TRIM.  /* NULLs 
18390 63 61 6e 20 62 65 20 73 61 66 65 6c 79 20 74 72  can be safely tr
183a0 69 6d 6d 65 64 20 66 72 6f 6d 20 74 68 65 20 65  immed from the e
183b0 6e 64 20 6f 66 20 74 68 65 20 72 65 63 6f 72 64  nd of the record
183c0 2c 20 61 73 20 6c 6f 6e 67 20 61 73 0a 20 20 2a  , as long as.  *
183d0 2a 20 61 73 20 74 68 65 20 73 63 68 65 6d 61 20  * as the schema 
183e0 66 6f 72 6d 61 74 20 69 73 20 32 20 6f 72 20 6d  format is 2 or m
183f0 6f 72 65 20 61 6e 64 20 6e 6f 6e 65 20 6f 66 20  ore and none of 
18400 74 68 65 20 6f 6d 69 74 74 65 64 20 63 6f 6c 75  the omitted colu
18410 6d 6e 73 0a 20 20 2a 2a 20 68 61 76 65 20 61 20  mns.  ** have a 
18420 6e 6f 6e 2d 4e 55 4c 4c 20 64 65 66 61 75 6c 74  non-NULL default
18430 20 76 61 6c 75 65 2e 20 20 41 6c 73 6f 2c 20 74   value.  Also, t
18440 68 65 20 72 65 63 6f 72 64 20 6d 75 73 74 20 62  he record must b
18450 65 20 6c 65 66 74 20 77 69 74 68 0a 20 20 2a 2a  e left with.  **
18460 20 61 74 20 6c 65 61 73 74 20 6f 6e 65 20 66 69   at least one fi
18470 65 6c 64 2e 20 20 49 66 20 50 35 3e 30 20 74 68  eld.  If P5>0 th
18480 65 6e 20 69 74 20 77 69 6c 6c 20 62 65 20 6f 6e  en it will be on
18490 65 20 6d 6f 72 65 20 74 68 61 6e 20 74 68 65 0a  e more than the.
184a0 20 20 2a 2a 20 69 6e 64 65 78 20 6f 66 20 74 68    ** index of th
184b0 65 20 72 69 67 68 74 2d 6d 6f 73 74 20 63 6f 6c  e right-most col
184c0 75 6d 6e 20 77 69 74 68 20 61 20 6e 6f 6e 2d 4e  umn with a non-N
184d0 55 4c 4c 20 64 65 66 61 75 6c 74 20 76 61 6c 75  ULL default valu
184e0 65 20 2a 2f 0a 20 20 69 66 28 20 70 4f 70 2d 3e  e */.  if( pOp->
184f0 70 35 20 29 7b 0a 20 20 20 20 77 68 69 6c 65 28  p5 ){.    while(
18500 20 28 70 4c 61 73 74 2d 3e 66 6c 61 67 73 20 26   (pLast->flags &
18510 20 4d 45 4d 5f 4e 75 6c 6c 29 21 3d 30 20 26 26   MEM_Null)!=0 &&
18520 20 6e 46 69 65 6c 64 3e 70 4f 70 2d 3e 70 35 20   nField>pOp->p5 
18530 29 7b 0a 20 20 20 20 20 20 70 4c 61 73 74 2d 2d  ){.      pLast--
18540 3b 0a 20 20 20 20 20 20 6e 46 69 65 6c 64 2d 2d  ;.      nField--
18550 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 23 65 6e 64  ;.    }.  }.#end
18560 69 66 0a 0a 20 20 2f 2a 20 4c 6f 6f 70 20 74 68  if..  /* Loop th
18570 72 6f 75 67 68 20 74 68 65 20 65 6c 65 6d 65 6e  rough the elemen
18580 74 73 20 74 68 61 74 20 77 69 6c 6c 20 6d 61 6b  ts that will mak
18590 65 20 75 70 20 74 68 65 20 72 65 63 6f 72 64 20  e up the record 
185a0 74 6f 20 66 69 67 75 72 65 0a 20 20 2a 2a 20 6f  to figure.  ** o
185b0 75 74 20 68 6f 77 20 6d 75 63 68 20 73 70 61 63  ut how much spac
185c0 65 20 69 73 20 72 65 71 75 69 72 65 64 20 66 6f  e is required fo
185d0 72 20 74 68 65 20 6e 65 77 20 72 65 63 6f 72 64  r the new record
185e0 2e 0a 20 20 2a 2f 0a 20 20 70 52 65 63 20 3d 20  ..  */.  pRec = 
185f0 70 4c 61 73 74 3b 0a 20 20 64 6f 7b 0a 20 20 20  pLast;.  do{.   
18600 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61   assert( memIsVa
18610 6c 69 64 28 70 52 65 63 29 20 29 3b 0a 20 20 20  lid(pRec) );.   
18620 20 73 65 72 69 61 6c 5f 74 79 70 65 20 3d 20 73   serial_type = s
18630 71 6c 69 74 65 33 56 64 62 65 53 65 72 69 61 6c  qlite3VdbeSerial
18640 54 79 70 65 28 70 52 65 63 2c 20 66 69 6c 65 5f  Type(pRec, file_
18650 66 6f 72 6d 61 74 2c 20 26 6c 65 6e 29 3b 0a 20  format, &len);. 
18660 20 20 20 69 66 28 20 70 52 65 63 2d 3e 66 6c 61     if( pRec->fla
18670 67 73 20 26 20 4d 45 4d 5f 5a 65 72 6f 20 29 7b  gs & MEM_Zero ){
18680 0a 20 20 20 20 20 20 69 66 28 20 73 65 72 69 61  .      if( seria
18690 6c 5f 74 79 70 65 3d 3d 30 20 29 7b 0a 20 20 20  l_type==0 ){.   
186a0 20 20 20 20 20 2f 2a 20 56 61 6c 75 65 73 20 77       /* Values w
186b0 69 74 68 20 4d 45 4d 5f 4e 75 6c 6c 20 61 6e 64  ith MEM_Null and
186c0 20 4d 45 4d 5f 5a 65 72 6f 20 61 72 65 20 63 72   MEM_Zero are cr
186d0 65 61 74 65 64 20 62 79 20 78 43 6f 6c 75 6d 6e  eated by xColumn
186e0 20 76 69 72 74 75 61 6c 0a 20 20 20 20 20 20 20   virtual.       
186f0 20 2a 2a 20 74 61 62 6c 65 20 6d 65 74 68 6f 64   ** table method
18700 73 20 74 68 61 74 20 6e 65 76 65 72 20 69 6e 76  s that never inv
18710 6f 6b 65 20 73 71 6c 69 74 65 33 5f 72 65 73 75  oke sqlite3_resu
18720 6c 74 5f 78 78 78 78 78 28 29 20 77 68 69 6c 65  lt_xxxxx() while
18730 0a 20 20 20 20 20 20 20 20 2a 2a 20 63 6f 6d 70  .        ** comp
18740 75 74 69 6e 67 20 61 6e 20 75 6e 63 68 61 6e 67  uting an unchang
18750 69 6e 67 20 63 6f 6c 75 6d 6e 20 76 61 6c 75 65  ing column value
18760 20 69 6e 20 61 6e 20 55 50 44 41 54 45 20 73 74   in an UPDATE st
18770 61 74 65 6d 65 6e 74 2e 0a 20 20 20 20 20 20 20  atement..       
18780 20 2a 2a 20 47 69 76 65 20 73 75 63 68 20 76 61   ** Give such va
18790 6c 75 65 73 20 61 20 73 70 65 63 69 61 6c 20 69  lues a special i
187a0 6e 74 65 72 6e 61 6c 2d 75 73 65 2d 6f 6e 6c 79  nternal-use-only
187b0 20 73 65 72 69 61 6c 2d 74 79 70 65 20 6f 66 20   serial-type of 
187c0 31 30 0a 20 20 20 20 20 20 20 20 2a 2a 20 73 6f  10.        ** so
187d0 20 74 68 61 74 20 74 68 65 79 20 63 61 6e 20 62   that they can b
187e0 65 20 70 61 73 73 65 64 20 74 68 72 6f 75 67 68  e passed through
187f0 20 74 6f 20 78 55 70 64 61 74 65 20 61 6e 64 20   to xUpdate and 
18800 68 61 76 65 0a 20 20 20 20 20 20 20 20 2a 2a 20  have.        ** 
18810 61 20 74 72 75 65 20 73 71 6c 69 74 65 33 5f 76  a true sqlite3_v
18820 61 6c 75 65 5f 6e 6f 63 68 61 6e 67 65 28 29 2e  alue_nochange().
18830 20 2a 2f 0a 20 20 20 20 20 20 20 20 61 73 73 65   */.        asse
18840 72 74 28 20 70 4f 70 2d 3e 70 35 3d 3d 4f 50 46  rt( pOp->p5==OPF
18850 4c 41 47 5f 4e 4f 43 48 4e 47 5f 4d 41 47 49 43  LAG_NOCHNG_MAGIC
18860 20 7c 7c 20 43 4f 52 52 55 50 54 5f 44 42 20 29   || CORRUPT_DB )
18870 3b 0a 20 20 20 20 20 20 20 20 73 65 72 69 61 6c  ;.        serial
18880 5f 74 79 70 65 20 3d 20 31 30 3b 0a 20 20 20 20  _type = 10;.    
18890 20 20 7d 65 6c 73 65 20 69 66 28 20 6e 44 61 74    }else if( nDat
188a0 61 20 29 7b 0a 20 20 20 20 20 20 20 20 69 66 28  a ){.        if(
188b0 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 45   sqlite3VdbeMemE
188c0 78 70 61 6e 64 42 6c 6f 62 28 70 52 65 63 29 20  xpandBlob(pRec) 
188d0 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20  ) goto no_mem;. 
188e0 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
188f0 20 20 20 20 6e 5a 65 72 6f 20 2b 3d 20 70 52 65      nZero += pRe
18900 63 2d 3e 75 2e 6e 5a 65 72 6f 3b 0a 20 20 20 20  c->u.nZero;.    
18910 20 20 20 20 6c 65 6e 20 2d 3d 20 70 52 65 63 2d      len -= pRec-
18920 3e 75 2e 6e 5a 65 72 6f 3b 0a 20 20 20 20 20 20  >u.nZero;.      
18930 7d 0a 20 20 20 20 7d 0a 20 20 20 20 6e 44 61 74  }.    }.    nDat
18940 61 20 2b 3d 20 6c 65 6e 3b 0a 20 20 20 20 74 65  a += len;.    te
18950 73 74 63 61 73 65 28 20 73 65 72 69 61 6c 5f 74  stcase( serial_t
18960 79 70 65 3d 3d 31 32 37 20 29 3b 0a 20 20 20 20  ype==127 );.    
18970 74 65 73 74 63 61 73 65 28 20 73 65 72 69 61 6c  testcase( serial
18980 5f 74 79 70 65 3d 3d 31 32 38 20 29 3b 0a 20 20  _type==128 );.  
18990 20 20 6e 48 64 72 20 2b 3d 20 73 65 72 69 61 6c    nHdr += serial
189a0 5f 74 79 70 65 3c 3d 31 32 37 20 3f 20 31 20 3a  _type<=127 ? 1 :
189b0 20 73 71 6c 69 74 65 33 56 61 72 69 6e 74 4c 65   sqlite3VarintLe
189c0 6e 28 73 65 72 69 61 6c 5f 74 79 70 65 29 3b 0a  n(serial_type);.
189d0 20 20 20 20 70 52 65 63 2d 3e 75 54 65 6d 70 20      pRec->uTemp 
189e0 3d 20 73 65 72 69 61 6c 5f 74 79 70 65 3b 0a 20  = serial_type;. 
189f0 20 20 20 69 66 28 20 70 52 65 63 3d 3d 70 44 61     if( pRec==pDa
18a00 74 61 30 20 29 20 62 72 65 61 6b 3b 0a 20 20 20  ta0 ) break;.   
18a10 20 70 52 65 63 2d 2d 3b 0a 20 20 7d 77 68 69 6c   pRec--;.  }whil
18a20 65 28 31 29 3b 0a 0a 20 20 2f 2a 20 45 56 49 44  e(1);..  /* EVID
18a30 45 4e 43 45 2d 4f 46 3a 20 52 2d 32 32 35 36 34  ENCE-OF: R-22564
18a40 2d 31 31 36 34 37 20 54 68 65 20 68 65 61 64 65  -11647 The heade
18a50 72 20 62 65 67 69 6e 73 20 77 69 74 68 20 61 20  r begins with a 
18a60 73 69 6e 67 6c 65 20 76 61 72 69 6e 74 0a 20 20  single varint.  
18a70 2a 2a 20 77 68 69 63 68 20 64 65 74 65 72 6d 69  ** which determi
18a80 6e 65 73 20 74 68 65 20 74 6f 74 61 6c 20 6e 75  nes the total nu
18a90 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20 69 6e  mber of bytes in
18aa0 20 74 68 65 20 68 65 61 64 65 72 2e 20 54 68 65   the header. The
18ab0 20 76 61 72 69 6e 74 0a 20 20 2a 2a 20 76 61 6c   varint.  ** val
18ac0 75 65 20 69 73 20 74 68 65 20 73 69 7a 65 20 6f  ue is the size o
18ad0 66 20 74 68 65 20 68 65 61 64 65 72 20 69 6e 20  f the header in 
18ae0 62 79 74 65 73 20 69 6e 63 6c 75 64 69 6e 67 20  bytes including 
18af0 74 68 65 20 73 69 7a 65 20 76 61 72 69 6e 74 0a  the size varint.
18b00 20 20 2a 2a 20 69 74 73 65 6c 66 2e 20 2a 2f 0a    ** itself. */.
18b10 20 20 74 65 73 74 63 61 73 65 28 20 6e 48 64 72    testcase( nHdr
18b20 3d 3d 31 32 36 20 29 3b 0a 20 20 74 65 73 74 63  ==126 );.  testc
18b30 61 73 65 28 20 6e 48 64 72 3d 3d 31 32 37 20 29  ase( nHdr==127 )
18b40 3b 0a 20 20 69 66 28 20 6e 48 64 72 3c 3d 31 32  ;.  if( nHdr<=12
18b50 36 20 29 7b 0a 20 20 20 20 2f 2a 20 54 68 65 20  6 ){.    /* The 
18b60 63 6f 6d 6d 6f 6e 20 63 61 73 65 20 2a 2f 0a 20  common case */. 
18b70 20 20 20 6e 48 64 72 20 2b 3d 20 31 3b 0a 20 20     nHdr += 1;.  
18b80 7d 65 6c 73 65 7b 0a 20 20 20 20 2f 2a 20 52 61  }else{.    /* Ra
18b90 72 65 20 63 61 73 65 20 6f 66 20 61 20 72 65 61  re case of a rea
18ba0 6c 6c 79 20 6c 61 72 67 65 20 68 65 61 64 65 72  lly large header
18bb0 20 2a 2f 0a 20 20 20 20 6e 56 61 72 69 6e 74 20   */.    nVarint 
18bc0 3d 20 73 71 6c 69 74 65 33 56 61 72 69 6e 74 4c  = sqlite3VarintL
18bd0 65 6e 28 6e 48 64 72 29 3b 0a 20 20 20 20 6e 48  en(nHdr);.    nH
18be0 64 72 20 2b 3d 20 6e 56 61 72 69 6e 74 3b 0a 20  dr += nVarint;. 
18bf0 20 20 20 69 66 28 20 6e 56 61 72 69 6e 74 3c 73     if( nVarint<s
18c00 71 6c 69 74 65 33 56 61 72 69 6e 74 4c 65 6e 28  qlite3VarintLen(
18c10 6e 48 64 72 29 20 29 20 6e 48 64 72 2b 2b 3b 0a  nHdr) ) nHdr++;.
18c20 20 20 7d 0a 20 20 6e 42 79 74 65 20 3d 20 6e 48    }.  nByte = nH
18c30 64 72 2b 6e 44 61 74 61 3b 0a 0a 20 20 2f 2a 20  dr+nData;..  /* 
18c40 4d 61 6b 65 20 73 75 72 65 20 74 68 65 20 6f 75  Make sure the ou
18c50 74 70 75 74 20 72 65 67 69 73 74 65 72 20 68 61  tput register ha
18c60 73 20 61 20 62 75 66 66 65 72 20 6c 61 72 67 65  s a buffer large
18c70 20 65 6e 6f 75 67 68 20 74 6f 20 73 74 6f 72 65   enough to store
18c80 20 0a 20 20 2a 2a 20 74 68 65 20 6e 65 77 20 72   .  ** the new r
18c90 65 63 6f 72 64 2e 20 54 68 65 20 6f 75 74 70 75  ecord. The outpu
18ca0 74 20 72 65 67 69 73 74 65 72 20 28 70 4f 70 2d  t register (pOp-
18cb0 3e 70 33 29 20 69 73 20 6e 6f 74 20 61 6c 6c 6f  >p3) is not allo
18cc0 77 65 64 20 74 6f 0a 20 20 2a 2a 20 62 65 20 6f  wed to.  ** be o
18cd0 6e 65 20 6f 66 20 74 68 65 20 69 6e 70 75 74 20  ne of the input 
18ce0 72 65 67 69 73 74 65 72 73 20 28 62 65 63 61 75  registers (becau
18cf0 73 65 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  se the following
18d00 20 63 61 6c 6c 20 74 6f 0a 20 20 2a 2a 20 73 71   call to.  ** sq
18d10 6c 69 74 65 33 56 64 62 65 4d 65 6d 43 6c 65 61  lite3VdbeMemClea
18d20 72 41 6e 64 52 65 73 69 7a 65 28 29 20 63 6f 75  rAndResize() cou
18d30 6c 64 20 63 6c 6f 62 62 65 72 20 74 68 65 20 76  ld clobber the v
18d40 61 6c 75 65 20 62 65 66 6f 72 65 20 69 74 20 69  alue before it i
18d50 73 20 75 73 65 64 29 2e 0a 20 20 2a 2f 0a 20 20  s used)..  */.  
18d60 69 66 28 20 6e 42 79 74 65 2b 6e 5a 65 72 6f 3c  if( nByte+nZero<
18d70 3d 70 4f 75 74 2d 3e 73 7a 4d 61 6c 6c 6f 63 20  =pOut->szMalloc 
18d80 29 7b 0a 20 20 20 20 2f 2a 20 54 68 65 20 6f 75  ){.    /* The ou
18d90 74 70 75 74 20 72 65 67 69 73 74 65 72 20 69 73  tput register is
18da0 20 61 6c 72 65 61 64 79 20 6c 61 72 67 65 20 65   already large e
18db0 6e 6f 75 67 68 20 74 6f 20 68 6f 6c 64 20 74 68  nough to hold th
18dc0 65 20 72 65 63 6f 72 64 2e 0a 20 20 20 20 2a 2a  e record..    **
18dd0 20 4e 6f 20 65 72 72 6f 72 20 63 68 65 63 6b 73   No error checks
18de0 20 6f 72 20 62 75 66 66 65 72 20 65 6e 6c 61 72   or buffer enlar
18df0 67 65 6d 65 6e 74 20 69 73 20 72 65 71 75 69 72  gement is requir
18e00 65 64 20 2a 2f 0a 20 20 20 20 70 4f 75 74 2d 3e  ed */.    pOut->
18e10 7a 20 3d 20 70 4f 75 74 2d 3e 7a 4d 61 6c 6c 6f  z = pOut->zMallo
18e20 63 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  c;.  }else{.    
18e30 2f 2a 20 4e 65 65 64 20 74 6f 20 6d 61 6b 65 20  /* Need to make 
18e40 73 75 72 65 20 74 68 61 74 20 74 68 65 20 6f 75  sure that the ou
18e50 74 70 75 74 20 69 73 20 6e 6f 74 20 74 6f 6f 20  tput is not too 
18e60 62 69 67 20 61 6e 64 20 74 68 65 6e 20 65 6e 6c  big and then enl
18e70 61 72 67 65 0a 20 20 20 20 2a 2a 20 74 68 65 20  arge.    ** the 
18e80 6f 75 74 70 75 74 20 72 65 67 69 73 74 65 72 20  output register 
18e90 74 6f 20 68 6f 6c 64 20 74 68 65 20 66 75 6c 6c  to hold the full
18ea0 20 72 65 73 75 6c 74 20 2a 2f 0a 20 20 20 20 69   result */.    i
18eb0 66 28 20 6e 42 79 74 65 2b 6e 5a 65 72 6f 3e 64  f( nByte+nZero>d
18ec0 62 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45  b->aLimit[SQLITE
18ed0 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54 48 5d 20 29  _LIMIT_LENGTH] )
18ee0 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20 74 6f 6f  {.      goto too
18ef0 5f 62 69 67 3b 0a 20 20 20 20 7d 0a 20 20 20 20  _big;.    }.    
18f00 69 66 28 20 73 71 6c 69 74 65 33 56 64 62 65 4d  if( sqlite3VdbeM
18f10 65 6d 43 6c 65 61 72 41 6e 64 52 65 73 69 7a 65  emClearAndResize
18f20 28 70 4f 75 74 2c 20 28 69 6e 74 29 6e 42 79 74  (pOut, (int)nByt
18f30 65 29 20 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f  e) ){.      goto
18f40 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 20 20 7d 0a 20   no_mem;.    }. 
18f50 20 7d 0a 20 20 70 4f 75 74 2d 3e 6e 20 3d 20 28   }.  pOut->n = (
18f60 69 6e 74 29 6e 42 79 74 65 3b 0a 20 20 70 4f 75  int)nByte;.  pOu
18f70 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 42  t->flags = MEM_B
18f80 6c 6f 62 3b 0a 20 20 69 66 28 20 6e 5a 65 72 6f  lob;.  if( nZero
18f90 20 29 7b 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e   ){.    pOut->u.
18fa0 6e 5a 65 72 6f 20 3d 20 6e 5a 65 72 6f 3b 0a 20  nZero = nZero;. 
18fb0 20 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 7c     pOut->flags |
18fc0 3d 20 4d 45 4d 5f 5a 65 72 6f 3b 0a 20 20 7d 0a  = MEM_Zero;.  }.
18fd0 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f    UPDATE_MAX_BLO
18fe0 42 53 49 5a 45 28 70 4f 75 74 29 3b 0a 20 20 7a  BSIZE(pOut);.  z
18ff0 48 64 72 20 3d 20 28 75 38 20 2a 29 70 4f 75 74  Hdr = (u8 *)pOut
19000 2d 3e 7a 3b 0a 20 20 7a 50 61 79 6c 6f 61 64 20  ->z;.  zPayload 
19010 3d 20 7a 48 64 72 20 2b 20 6e 48 64 72 3b 0a 0a  = zHdr + nHdr;..
19020 20 20 2f 2a 20 57 72 69 74 65 20 74 68 65 20 72    /* Write the r
19030 65 63 6f 72 64 20 2a 2f 0a 20 20 7a 48 64 72 20  ecord */.  zHdr 
19040 2b 3d 20 70 75 74 56 61 72 69 6e 74 33 32 28 7a  += putVarint32(z
19050 48 64 72 2c 20 6e 48 64 72 29 3b 0a 20 20 61 73  Hdr, nHdr);.  as
19060 73 65 72 74 28 20 70 44 61 74 61 30 3c 3d 70 4c  sert( pData0<=pL
19070 61 73 74 20 29 3b 0a 20 20 70 52 65 63 20 3d 20  ast );.  pRec = 
19080 70 44 61 74 61 30 3b 0a 20 20 64 6f 7b 0a 20 20  pData0;.  do{.  
19090 20 20 73 65 72 69 61 6c 5f 74 79 70 65 20 3d 20    serial_type = 
190a0 70 52 65 63 2d 3e 75 54 65 6d 70 3b 0a 20 20 20  pRec->uTemp;.   
190b0 20 2f 2a 20 45 56 49 44 45 4e 43 45 2d 4f 46 3a   /* EVIDENCE-OF:
190c0 20 52 2d 30 36 35 32 39 2d 34 37 33 36 32 20 46   R-06529-47362 F
190d0 6f 6c 6c 6f 77 69 6e 67 20 74 68 65 20 73 69 7a  ollowing the siz
190e0 65 20 76 61 72 69 6e 74 20 61 72 65 20 6f 6e 65  e varint are one
190f0 20 6f 72 20 6d 6f 72 65 0a 20 20 20 20 2a 2a 20   or more.    ** 
19100 61 64 64 69 74 69 6f 6e 61 6c 20 76 61 72 69 6e  additional varin
19110 74 73 2c 20 6f 6e 65 20 70 65 72 20 63 6f 6c 75  ts, one per colu
19120 6d 6e 2e 20 2a 2f 0a 20 20 20 20 7a 48 64 72 20  mn. */.    zHdr 
19130 2b 3d 20 70 75 74 56 61 72 69 6e 74 33 32 28 7a  += putVarint32(z
19140 48 64 72 2c 20 73 65 72 69 61 6c 5f 74 79 70 65  Hdr, serial_type
19150 29 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  );            /*
19160 20 73 65 72 69 61 6c 20 74 79 70 65 20 2a 2f 0a   serial type */.
19170 20 20 20 20 2f 2a 20 45 56 49 44 45 4e 43 45 2d      /* EVIDENCE-
19180 4f 46 3a 20 52 2d 36 34 35 33 36 2d 35 31 37 32  OF: R-64536-5172
19190 38 20 54 68 65 20 76 61 6c 75 65 73 20 66 6f 72  8 The values for
191a0 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 69 6e 20   each column in 
191b0 74 68 65 20 72 65 63 6f 72 64 0a 20 20 20 20 2a  the record.    *
191c0 2a 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 66 6f  * immediately fo
191d0 6c 6c 6f 77 20 74 68 65 20 68 65 61 64 65 72 2e  llow the header.
191e0 20 2a 2f 0a 20 20 20 20 7a 50 61 79 6c 6f 61 64   */.    zPayload
191f0 20 2b 3d 20 73 71 6c 69 74 65 33 56 64 62 65 53   += sqlite3VdbeS
19200 65 72 69 61 6c 50 75 74 28 7a 50 61 79 6c 6f 61  erialPut(zPayloa
19210 64 2c 20 70 52 65 63 2c 20 73 65 72 69 61 6c 5f  d, pRec, serial_
19220 74 79 70 65 29 3b 20 2f 2a 20 63 6f 6e 74 65 6e  type); /* conten
19230 74 20 2a 2f 0a 20 20 7d 77 68 69 6c 65 28 20 28  t */.  }while( (
19240 2b 2b 70 52 65 63 29 3c 3d 70 4c 61 73 74 20 29  ++pRec)<=pLast )
19250 3b 0a 20 20 61 73 73 65 72 74 28 20 6e 48 64 72  ;.  assert( nHdr
19260 3d 3d 28 69 6e 74 29 28 7a 48 64 72 20 2d 20 28  ==(int)(zHdr - (
19270 75 38 2a 29 70 4f 75 74 2d 3e 7a 29 20 29 3b 0a  u8*)pOut->z) );.
19280 20 20 61 73 73 65 72 74 28 20 6e 42 79 74 65 3d    assert( nByte=
19290 3d 28 69 6e 74 29 28 7a 50 61 79 6c 6f 61 64 20  =(int)(zPayload 
192a0 2d 20 28 75 38 2a 29 70 4f 75 74 2d 3e 7a 29 20  - (u8*)pOut->z) 
192b0 29 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f  );..  assert( pO
192c0 70 2d 3e 70 33 3e 30 20 26 26 20 70 4f 70 2d 3e  p->p3>0 && pOp->
192d0 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d  p3<=(p->nMem+1 -
192e0 20 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a   p->nCursor) );.
192f0 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45    REGISTER_TRACE
19300 28 70 4f 70 2d 3e 70 33 2c 20 70 4f 75 74 29 3b  (pOp->p3, pOut);
19310 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
19320 4f 70 63 6f 64 65 3a 20 43 6f 75 6e 74 20 50 31  Opcode: Count P1
19330 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e   P2 * * *.** Syn
19340 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 63 6f 75  opsis: r[P2]=cou
19350 6e 74 28 29 0a 2a 2a 0a 2a 2a 20 53 74 6f 72 65  nt().**.** Store
19360 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 65   the number of e
19370 6e 74 72 69 65 73 20 28 61 6e 20 69 6e 74 65 67  ntries (an integ
19380 65 72 20 76 61 6c 75 65 29 20 69 6e 20 74 68 65  er value) in the
19390 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20   table or index 
193a0 0a 2a 2a 20 6f 70 65 6e 65 64 20 62 79 20 63 75  .** opened by cu
193b0 72 73 6f 72 20 50 31 20 69 6e 20 72 65 67 69 73  rsor P1 in regis
193c0 74 65 72 20 50 32 0a 2a 2f 0a 23 69 66 6e 64 65  ter P2.*/.#ifnde
193d0 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 42 54  f SQLITE_OMIT_BT
193e0 52 45 45 43 4f 55 4e 54 0a 63 61 73 65 20 4f 50  REECOUNT.case OP
193f0 5f 43 6f 75 6e 74 3a 20 7b 20 20 20 20 20 20 20  _Count: {       
19400 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20 20 69    /* out2 */.  i
19410 36 34 20 6e 45 6e 74 72 79 3b 0a 20 20 42 74 43  64 nEntry;.  BtC
19420 75 72 73 6f 72 20 2a 70 43 72 73 72 3b 0a 0a 20  ursor *pCrsr;.. 
19430 20 61 73 73 65 72 74 28 20 70 2d 3e 61 70 43 73   assert( p->apCs
19440 72 5b 70 4f 70 2d 3e 70 31 5d 2d 3e 65 43 75 72  r[pOp->p1]->eCur
19450 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f 42 54  Type==CURTYPE_BT
19460 52 45 45 20 29 3b 0a 20 20 70 43 72 73 72 20 3d  REE );.  pCrsr =
19470 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70   p->apCsr[pOp->p
19480 31 5d 2d 3e 75 63 2e 70 43 75 72 73 6f 72 3b 0a  1]->uc.pCursor;.
19490 20 20 61 73 73 65 72 74 28 20 70 43 72 73 72 20    assert( pCrsr 
194a0 29 3b 0a 20 20 6e 45 6e 74 72 79 20 3d 20 30 3b  );.  nEntry = 0;
194b0 20 20 2f 2a 20 4e 6f 74 20 6e 65 65 64 65 64 2e    /* Not needed.
194c0 20 20 4f 6e 6c 79 20 75 73 65 64 20 74 6f 20 73    Only used to s
194d0 69 6c 65 6e 63 65 20 61 20 77 61 72 6e 69 6e 67  ilence a warning
194e0 2e 20 2a 2f 0a 20 20 72 63 20 3d 20 73 71 6c 69  . */.  rc = sqli
194f0 74 65 33 42 74 72 65 65 43 6f 75 6e 74 28 70 43  te3BtreeCount(pC
19500 72 73 72 2c 20 26 6e 45 6e 74 72 79 29 3b 0a 20  rsr, &nEntry);. 
19510 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61   if( rc ) goto a
19520 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
19530 72 3b 0a 20 20 70 4f 75 74 20 3d 20 6f 75 74 32  r;.  pOut = out2
19540 50 72 65 72 65 6c 65 61 73 65 28 70 2c 20 70 4f  Prerelease(p, pO
19550 70 29 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20  p);.  pOut->u.i 
19560 3d 20 6e 45 6e 74 72 79 3b 0a 20 20 62 72 65 61  = nEntry;.  brea
19570 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20  k;.}.#endif../* 
19580 4f 70 63 6f 64 65 3a 20 53 61 76 65 70 6f 69 6e  Opcode: Savepoin
19590 74 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a  t P1 * * P4 *.**
195a0 0a 2a 2a 20 4f 70 65 6e 2c 20 72 65 6c 65 61 73  .** Open, releas
195b0 65 20 6f 72 20 72 6f 6c 6c 62 61 63 6b 20 74 68  e or rollback th
195c0 65 20 73 61 76 65 70 6f 69 6e 74 20 6e 61 6d 65  e savepoint name
195d0 64 20 62 79 20 70 61 72 61 6d 65 74 65 72 20 50  d by parameter P
195e0 34 2c 20 64 65 70 65 6e 64 69 6e 67 0a 2a 2a 20  4, depending.** 
195f0 6f 6e 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20  on the value of 
19600 50 31 2e 20 54 6f 20 6f 70 65 6e 20 61 20 6e 65  P1. To open a ne
19610 77 20 73 61 76 65 70 6f 69 6e 74 20 73 65 74 20  w savepoint set 
19620 50 31 3d 3d 30 20 28 53 41 56 45 50 4f 49 4e 54  P1==0 (SAVEPOINT
19630 5f 42 45 47 49 4e 29 2e 0a 2a 2a 20 54 6f 20 72  _BEGIN)..** To r
19640 65 6c 65 61 73 65 20 28 63 6f 6d 6d 69 74 29 20  elease (commit) 
19650 61 6e 20 65 78 69 73 74 69 6e 67 20 73 61 76 65  an existing save
19660 70 6f 69 6e 74 20 73 65 74 20 50 31 3d 3d 31 20  point set P1==1 
19670 28 53 41 56 45 50 4f 49 4e 54 5f 52 45 4c 45 41  (SAVEPOINT_RELEA
19680 53 45 29 2e 0a 2a 2a 20 54 6f 20 72 6f 6c 6c 62  SE)..** To rollb
19690 61 63 6b 20 61 6e 20 65 78 69 73 74 69 6e 67 20  ack an existing 
196a0 73 61 76 65 70 6f 69 6e 74 20 73 65 74 20 50 31  savepoint set P1
196b0 3d 3d 32 20 28 53 41 56 45 50 4f 49 4e 54 5f 52  ==2 (SAVEPOINT_R
196c0 4f 4c 4c 42 41 43 4b 29 2e 0a 2a 2f 0a 63 61 73  OLLBACK)..*/.cas
196d0 65 20 4f 50 5f 53 61 76 65 70 6f 69 6e 74 3a 20  e OP_Savepoint: 
196e0 7b 0a 20 20 69 6e 74 20 70 31 3b 20 20 20 20 20  {.  int p1;     
196f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19700 20 20 20 20 2f 2a 20 56 61 6c 75 65 20 6f 66 20      /* Value of 
19710 50 31 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20  P1 operand */.  
19720 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20  char *zName;    
19730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19740 2f 2a 20 4e 61 6d 65 20 6f 66 20 73 61 76 65 70  /* Name of savep
19750 6f 69 6e 74 20 2a 2f 0a 20 20 69 6e 74 20 6e 4e  oint */.  int nN
19760 61 6d 65 3b 0a 20 20 53 61 76 65 70 6f 69 6e 74  ame;.  Savepoint
19770 20 2a 70 4e 65 77 3b 0a 20 20 53 61 76 65 70 6f   *pNew;.  Savepo
19780 69 6e 74 20 2a 70 53 61 76 65 70 6f 69 6e 74 3b  int *pSavepoint;
19790 0a 20 20 53 61 76 65 70 6f 69 6e 74 20 2a 70 54  .  Savepoint *pT
197a0 6d 70 3b 0a 20 20 69 6e 74 20 69 53 61 76 65 70  mp;.  int iSavep
197b0 6f 69 6e 74 3b 0a 20 20 69 6e 74 20 69 69 3b 0a  oint;.  int ii;.
197c0 0a 20 20 70 31 20 3d 20 70 4f 70 2d 3e 70 31 3b  .  p1 = pOp->p1;
197d0 0a 20 20 7a 4e 61 6d 65 20 3d 20 70 4f 70 2d 3e  .  zName = pOp->
197e0 70 34 2e 7a 3b 0a 0a 20 20 2f 2a 20 41 73 73 65  p4.z;..  /* Asse
197f0 72 74 20 74 68 61 74 20 74 68 65 20 70 31 20 70  rt that the p1 p
19800 61 72 61 6d 65 74 65 72 20 69 73 20 76 61 6c 69  arameter is vali
19810 64 2e 20 41 6c 73 6f 20 74 68 61 74 20 69 66 20  d. Also that if 
19820 74 68 65 72 65 20 69 73 20 6e 6f 20 6f 70 65 6e  there is no open
19830 0a 20 20 2a 2a 20 74 72 61 6e 73 61 63 74 69 6f  .  ** transactio
19840 6e 2c 20 74 68 65 6e 20 74 68 65 72 65 20 63 61  n, then there ca
19850 6e 6e 6f 74 20 62 65 20 61 6e 79 20 73 61 76 65  nnot be any save
19860 70 6f 69 6e 74 73 2e 20 0a 20 20 2a 2f 0a 20 20  points. .  */.  
19870 61 73 73 65 72 74 28 20 64 62 2d 3e 70 53 61 76  assert( db->pSav
19880 65 70 6f 69 6e 74 3d 3d 30 20 7c 7c 20 64 62 2d  epoint==0 || db-
19890 3e 61 75 74 6f 43 6f 6d 6d 69 74 3d 3d 30 20 29  >autoCommit==0 )
198a0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 31 3d 3d  ;.  assert( p1==
198b0 53 41 56 45 50 4f 49 4e 54 5f 42 45 47 49 4e 7c  SAVEPOINT_BEGIN|
198c0 7c 70 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 52  |p1==SAVEPOINT_R
198d0 45 4c 45 41 53 45 7c 7c 70 31 3d 3d 53 41 56 45  ELEASE||p1==SAVE
198e0 50 4f 49 4e 54 5f 52 4f 4c 4c 42 41 43 4b 20 29  POINT_ROLLBACK )
198f0 3b 0a 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e  ;.  assert( db->
19900 70 53 61 76 65 70 6f 69 6e 74 20 7c 7c 20 64 62  pSavepoint || db
19910 2d 3e 69 73 54 72 61 6e 73 61 63 74 69 6f 6e 53  ->isTransactionS
19920 61 76 65 70 6f 69 6e 74 3d 3d 30 20 29 3b 0a 20  avepoint==0 );. 
19930 20 61 73 73 65 72 74 28 20 63 68 65 63 6b 53 61   assert( checkSa
19940 76 65 70 6f 69 6e 74 43 6f 75 6e 74 28 64 62 29  vepointCount(db)
19950 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d   );.  assert( p-
19960 3e 62 49 73 52 65 61 64 65 72 20 29 3b 0a 0a 20  >bIsReader );.. 
19970 20 69 66 28 20 70 31 3d 3d 53 41 56 45 50 4f 49   if( p1==SAVEPOI
19980 4e 54 5f 42 45 47 49 4e 20 29 7b 0a 20 20 20 20  NT_BEGIN ){.    
19990 69 66 28 20 64 62 2d 3e 6e 56 64 62 65 57 72 69  if( db->nVdbeWri
199a0 74 65 3e 30 20 29 7b 0a 20 20 20 20 20 20 2f 2a  te>0 ){.      /*
199b0 20 41 20 6e 65 77 20 73 61 76 65 70 6f 69 6e 74   A new savepoint
199c0 20 63 61 6e 6e 6f 74 20 62 65 20 63 72 65 61 74   cannot be creat
199d0 65 64 20 69 66 20 74 68 65 72 65 20 61 72 65 20  ed if there are 
199e0 61 63 74 69 76 65 20 77 72 69 74 65 20 0a 20 20  active write .  
199f0 20 20 20 20 2a 2a 20 73 74 61 74 65 6d 65 6e 74      ** statement
19a00 73 20 28 69 2e 65 2e 20 6f 70 65 6e 20 72 65 61  s (i.e. open rea
19a10 64 2f 77 72 69 74 65 20 69 6e 63 72 65 6d 65 6e  d/write incremen
19a20 74 61 6c 20 62 6c 6f 62 20 68 61 6e 64 6c 65 73  tal blob handles
19a30 29 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20  )..      */.    
19a40 20 20 73 71 6c 69 74 65 33 56 64 62 65 45 72 72    sqlite3VdbeErr
19a50 6f 72 28 70 2c 20 22 63 61 6e 6e 6f 74 20 6f 70  or(p, "cannot op
19a60 65 6e 20 73 61 76 65 70 6f 69 6e 74 20 2d 20 53  en savepoint - S
19a70 51 4c 20 73 74 61 74 65 6d 65 6e 74 73 20 69 6e  QL statements in
19a80 20 70 72 6f 67 72 65 73 73 22 29 3b 0a 20 20 20   progress");.   
19a90 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 42     rc = SQLITE_B
19aa0 55 53 59 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a  USY;.    }else{.
19ab0 20 20 20 20 20 20 6e 4e 61 6d 65 20 3d 20 73 71        nName = sq
19ac0 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28 7a 4e  lite3Strlen30(zN
19ad0 61 6d 65 29 3b 0a 0a 23 69 66 6e 64 65 66 20 53  ame);..#ifndef S
19ae0 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
19af0 41 4c 54 41 42 4c 45 0a 20 20 20 20 20 20 2f 2a  ALTABLE.      /*
19b00 20 54 68 69 73 20 63 61 6c 6c 20 69 73 20 4f 6b   This call is Ok
19b10 20 65 76 65 6e 20 69 66 20 74 68 69 73 20 73 61   even if this sa
19b20 76 65 70 6f 69 6e 74 20 69 73 20 61 63 74 75 61  vepoint is actua
19b30 6c 6c 79 20 61 20 74 72 61 6e 73 61 63 74 69 6f  lly a transactio
19b40 6e 0a 20 20 20 20 20 20 2a 2a 20 73 61 76 65 70  n.      ** savep
19b50 6f 69 6e 74 20 28 61 6e 64 20 74 68 65 72 65 66  oint (and theref
19b60 6f 72 65 20 73 68 6f 75 6c 64 20 6e 6f 74 20 70  ore should not p
19b70 72 6f 6d 70 74 20 78 53 61 76 65 70 6f 69 6e 74  rompt xSavepoint
19b80 28 29 29 20 63 61 6c 6c 62 61 63 6b 73 2e 0a 20  ()) callbacks.. 
19b90 20 20 20 20 20 2a 2a 20 49 66 20 74 68 69 73 20       ** If this 
19ba0 69 73 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e  is a transaction
19bb0 20 73 61 76 65 70 6f 69 6e 74 20 62 65 69 6e 67   savepoint being
19bc0 20 6f 70 65 6e 65 64 2c 20 69 74 20 69 73 20 67   opened, it is g
19bd0 75 61 72 61 6e 74 65 65 64 0a 20 20 20 20 20 20  uaranteed.      
19be0 2a 2a 20 74 68 61 74 20 74 68 65 20 64 62 2d 3e  ** that the db->
19bf0 61 56 54 72 61 6e 73 5b 5d 20 61 72 72 61 79 20  aVTrans[] array 
19c00 69 73 20 65 6d 70 74 79 2e 20 20 2a 2f 0a 20 20  is empty.  */.  
19c10 20 20 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e      assert( db->
19c20 61 75 74 6f 43 6f 6d 6d 69 74 3d 3d 30 20 7c 7c  autoCommit==0 ||
19c30 20 64 62 2d 3e 6e 56 54 72 61 6e 73 3d 3d 30 20   db->nVTrans==0 
19c40 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71  );.      rc = sq
19c50 6c 69 74 65 33 56 74 61 62 53 61 76 65 70 6f 69  lite3VtabSavepoi
19c60 6e 74 28 64 62 2c 20 53 41 56 45 50 4f 49 4e 54  nt(db, SAVEPOINT
19c70 5f 42 45 47 49 4e 2c 0a 20 20 20 20 20 20 20 20  _BEGIN,.        
19c80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19c90 20 20 20 20 20 20 20 20 64 62 2d 3e 6e 53 74 61          db->nSta
19ca0 74 65 6d 65 6e 74 2b 64 62 2d 3e 6e 53 61 76 65  tement+db->nSave
19cb0 70 6f 69 6e 74 29 3b 0a 20 20 20 20 20 20 69 66  point);.      if
19cc0 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc!=SQLITE_OK 
19cd0 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65  ) goto abort_due
19ce0 5f 74 6f 5f 65 72 72 6f 72 3b 0a 23 65 6e 64 69  _to_error;.#endi
19cf0 66 0a 0a 20 20 20 20 20 20 2f 2a 20 43 72 65 61  f..      /* Crea
19d00 74 65 20 61 20 6e 65 77 20 73 61 76 65 70 6f 69  te a new savepoi
19d10 6e 74 20 73 74 72 75 63 74 75 72 65 2e 20 2a 2f  nt structure. */
19d20 0a 20 20 20 20 20 20 70 4e 65 77 20 3d 20 73 71  .      pNew = sq
19d30 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 52 61 77  lite3DbMallocRaw
19d40 4e 4e 28 64 62 2c 20 73 69 7a 65 6f 66 28 53 61  NN(db, sizeof(Sa
19d50 76 65 70 6f 69 6e 74 29 2b 6e 4e 61 6d 65 2b 31  vepoint)+nName+1
19d60 29 3b 0a 20 20 20 20 20 20 69 66 28 20 70 4e 65  );.      if( pNe
19d70 77 20 29 7b 0a 20 20 20 20 20 20 20 20 70 4e 65  w ){.        pNe
19d80 77 2d 3e 7a 4e 61 6d 65 20 3d 20 28 63 68 61 72  w->zName = (char
19d90 20 2a 29 26 70 4e 65 77 5b 31 5d 3b 0a 20 20 20   *)&pNew[1];.   
19da0 20 20 20 20 20 6d 65 6d 63 70 79 28 70 4e 65 77       memcpy(pNew
19db0 2d 3e 7a 4e 61 6d 65 2c 20 7a 4e 61 6d 65 2c 20  ->zName, zName, 
19dc0 6e 4e 61 6d 65 2b 31 29 3b 0a 20 20 20 20 0a 20  nName+1);.    . 
19dd0 20 20 20 20 20 20 20 2f 2a 20 49 66 20 74 68 65         /* If the
19de0 72 65 20 69 73 20 6e 6f 20 6f 70 65 6e 20 74 72  re is no open tr
19df0 61 6e 73 61 63 74 69 6f 6e 2c 20 74 68 65 6e 20  ansaction, then 
19e00 6d 61 72 6b 20 74 68 69 73 20 61 73 20 61 20 73  mark this as a s
19e10 70 65 63 69 61 6c 0a 20 20 20 20 20 20 20 20 2a  pecial.        *
19e20 2a 20 22 74 72 61 6e 73 61 63 74 69 6f 6e 20 73  * "transaction s
19e30 61 76 65 70 6f 69 6e 74 22 2e 20 2a 2f 0a 20 20  avepoint". */.  
19e40 20 20 20 20 20 20 69 66 28 20 64 62 2d 3e 61 75        if( db->au
19e50 74 6f 43 6f 6d 6d 69 74 20 29 7b 0a 20 20 20 20  toCommit ){.    
19e60 20 20 20 20 20 20 64 62 2d 3e 61 75 74 6f 43 6f        db->autoCo
19e70 6d 6d 69 74 20 3d 20 30 3b 0a 20 20 20 20 20 20  mmit = 0;.      
19e80 20 20 20 20 64 62 2d 3e 69 73 54 72 61 6e 73 61      db->isTransa
19e90 63 74 69 6f 6e 53 61 76 65 70 6f 69 6e 74 20 3d  ctionSavepoint =
19ea0 20 31 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c 73   1;.        }els
19eb0 65 7b 0a 20 20 20 20 20 20 20 20 20 20 64 62 2d  e{.          db-
19ec0 3e 6e 53 61 76 65 70 6f 69 6e 74 2b 2b 3b 0a 20  >nSavepoint++;. 
19ed0 20 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20         }..      
19ee0 20 20 2f 2a 20 4c 69 6e 6b 20 74 68 65 20 6e 65    /* Link the ne
19ef0 77 20 73 61 76 65 70 6f 69 6e 74 20 69 6e 74 6f  w savepoint into
19f00 20 74 68 65 20 64 61 74 61 62 61 73 65 20 68 61   the database ha
19f10 6e 64 6c 65 27 73 20 6c 69 73 74 2e 20 2a 2f 0a  ndle's list. */.
19f20 20 20 20 20 20 20 20 20 70 4e 65 77 2d 3e 70 4e          pNew->pN
19f30 65 78 74 20 3d 20 64 62 2d 3e 70 53 61 76 65 70  ext = db->pSavep
19f40 6f 69 6e 74 3b 0a 20 20 20 20 20 20 20 20 64 62  oint;.        db
19f50 2d 3e 70 53 61 76 65 70 6f 69 6e 74 20 3d 20 70  ->pSavepoint = p
19f60 4e 65 77 3b 0a 20 20 20 20 20 20 20 20 70 4e 65  New;.        pNe
19f70 77 2d 3e 6e 44 65 66 65 72 72 65 64 43 6f 6e 73  w->nDeferredCons
19f80 20 3d 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64   = db->nDeferred
19f90 43 6f 6e 73 3b 0a 20 20 20 20 20 20 20 20 70 4e  Cons;.        pN
19fa0 65 77 2d 3e 6e 44 65 66 65 72 72 65 64 49 6d 6d  ew->nDeferredImm
19fb0 43 6f 6e 73 20 3d 20 64 62 2d 3e 6e 44 65 66 65  Cons = db->nDefe
19fc0 72 72 65 64 49 6d 6d 43 6f 6e 73 3b 0a 20 20 20  rredImmCons;.   
19fd0 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 65 6c     }.    }.  }el
19fe0 73 65 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20  se{.    assert( 
19ff0 70 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 52 45  p1==SAVEPOINT_RE
1a000 4c 45 41 53 45 20 7c 7c 20 70 31 3d 3d 53 41 56  LEASE || p1==SAV
1a010 45 50 4f 49 4e 54 5f 52 4f 4c 4c 42 41 43 4b 20  EPOINT_ROLLBACK 
1a020 29 3b 0a 20 20 20 20 69 53 61 76 65 70 6f 69 6e  );.    iSavepoin
1a030 74 20 3d 20 30 3b 0a 0a 20 20 20 20 2f 2a 20 46  t = 0;..    /* F
1a040 69 6e 64 20 74 68 65 20 6e 61 6d 65 64 20 73 61  ind the named sa
1a050 76 65 70 6f 69 6e 74 2e 20 49 66 20 74 68 65 72  vepoint. If ther
1a060 65 20 69 73 20 6e 6f 20 73 75 63 68 20 73 61 76  e is no such sav
1a070 65 70 6f 69 6e 74 2c 20 74 68 65 6e 20 61 6e 0a  epoint, then an.
1a080 20 20 20 20 2a 2a 20 61 6e 20 65 72 72 6f 72 20      ** an error 
1a090 69 73 20 72 65 74 75 72 6e 65 64 20 74 6f 20 74  is returned to t
1a0a0 68 65 20 75 73 65 72 2e 20 20 2a 2f 0a 20 20 20  he user.  */.   
1a0b0 20 66 6f 72 28 0a 20 20 20 20 20 20 70 53 61 76   for(.      pSav
1a0c0 65 70 6f 69 6e 74 20 3d 20 64 62 2d 3e 70 53 61  epoint = db->pSa
1a0d0 76 65 70 6f 69 6e 74 3b 20 0a 20 20 20 20 20 20  vepoint; .      
1a0e0 70 53 61 76 65 70 6f 69 6e 74 20 26 26 20 73 71  pSavepoint && sq
1a0f0 6c 69 74 65 33 53 74 72 49 43 6d 70 28 70 53 61  lite3StrICmp(pSa
1a100 76 65 70 6f 69 6e 74 2d 3e 7a 4e 61 6d 65 2c 20  vepoint->zName, 
1a110 7a 4e 61 6d 65 29 3b 0a 20 20 20 20 20 20 70 53  zName);.      pS
1a120 61 76 65 70 6f 69 6e 74 20 3d 20 70 53 61 76 65  avepoint = pSave
1a130 70 6f 69 6e 74 2d 3e 70 4e 65 78 74 0a 20 20 20  point->pNext.   
1a140 20 29 7b 0a 20 20 20 20 20 20 69 53 61 76 65 70   ){.      iSavep
1a150 6f 69 6e 74 2b 2b 3b 0a 20 20 20 20 7d 0a 20 20  oint++;.    }.  
1a160 20 20 69 66 28 20 21 70 53 61 76 65 70 6f 69 6e    if( !pSavepoin
1a170 74 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74  t ){.      sqlit
1a180 65 33 56 64 62 65 45 72 72 6f 72 28 70 2c 20 22  e3VdbeError(p, "
1a190 6e 6f 20 73 75 63 68 20 73 61 76 65 70 6f 69 6e  no such savepoin
1a1a0 74 3a 20 25 73 22 2c 20 7a 4e 61 6d 65 29 3b 0a  t: %s", zName);.
1a1b0 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54        rc = SQLIT
1a1c0 45 5f 45 52 52 4f 52 3b 0a 20 20 20 20 7d 65 6c  E_ERROR;.    }el
1a1d0 73 65 20 69 66 28 20 64 62 2d 3e 6e 56 64 62 65  se if( db->nVdbe
1a1e0 57 72 69 74 65 3e 30 20 26 26 20 70 31 3d 3d 53  Write>0 && p1==S
1a1f0 41 56 45 50 4f 49 4e 54 5f 52 45 4c 45 41 53 45  AVEPOINT_RELEASE
1a200 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 49 74 20   ){.      /* It 
1a210 69 73 20 6e 6f 74 20 70 6f 73 73 69 62 6c 65 20  is not possible 
1a220 74 6f 20 72 65 6c 65 61 73 65 20 28 63 6f 6d 6d  to release (comm
1a230 69 74 29 20 61 20 73 61 76 65 70 6f 69 6e 74 20  it) a savepoint 
1a240 69 66 20 74 68 65 72 65 20 61 72 65 20 0a 20 20  if there are .  
1a250 20 20 20 20 2a 2a 20 61 63 74 69 76 65 20 77 72      ** active wr
1a260 69 74 65 20 73 74 61 74 65 6d 65 6e 74 73 2e 0a  ite statements..
1a270 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 73        */.      s
1a280 71 6c 69 74 65 33 56 64 62 65 45 72 72 6f 72 28  qlite3VdbeError(
1a290 70 2c 20 22 63 61 6e 6e 6f 74 20 72 65 6c 65 61  p, "cannot relea
1a2a0 73 65 20 73 61 76 65 70 6f 69 6e 74 20 2d 20 22  se savepoint - "
1a2b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1a2c0 20 20 20 20 20 20 20 20 20 20 20 22 53 51 4c 20             "SQL 
1a2d0 73 74 61 74 65 6d 65 6e 74 73 20 69 6e 20 70 72  statements in pr
1a2e0 6f 67 72 65 73 73 22 29 3b 0a 20 20 20 20 20 20  ogress");.      
1a2f0 72 63 20 3d 20 53 51 4c 49 54 45 5f 42 55 53 59  rc = SQLITE_BUSY
1a300 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 0a 20 20  ;.    }else{..  
1a310 20 20 20 20 2f 2a 20 44 65 74 65 72 6d 69 6e 65      /* Determine
1a320 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20   whether or not 
1a330 74 68 69 73 20 69 73 20 61 20 74 72 61 6e 73 61  this is a transa
1a340 63 74 69 6f 6e 20 73 61 76 65 70 6f 69 6e 74 2e  ction savepoint.
1a350 20 49 66 20 73 6f 2c 0a 20 20 20 20 20 20 2a 2a   If so,.      **
1a360 20 61 6e 64 20 74 68 69 73 20 69 73 20 61 20 52   and this is a R
1a370 45 4c 45 41 53 45 20 63 6f 6d 6d 61 6e 64 2c 20  ELEASE command, 
1a380 74 68 65 6e 20 74 68 65 20 63 75 72 72 65 6e 74  then the current
1a390 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 0a 20 20   transaction .  
1a3a0 20 20 20 20 2a 2a 20 69 73 20 63 6f 6d 6d 69 74      ** is commit
1a3b0 74 65 64 2e 20 0a 20 20 20 20 20 20 2a 2f 0a 20  ted. .      */. 
1a3c0 20 20 20 20 20 69 6e 74 20 69 73 54 72 61 6e 73       int isTrans
1a3d0 61 63 74 69 6f 6e 20 3d 20 70 53 61 76 65 70 6f  action = pSavepo
1a3e0 69 6e 74 2d 3e 70 4e 65 78 74 3d 3d 30 20 26 26  int->pNext==0 &&
1a3f0 20 64 62 2d 3e 69 73 54 72 61 6e 73 61 63 74 69   db->isTransacti
1a400 6f 6e 53 61 76 65 70 6f 69 6e 74 3b 0a 20 20 20  onSavepoint;.   
1a410 20 20 20 69 66 28 20 69 73 54 72 61 6e 73 61 63     if( isTransac
1a420 74 69 6f 6e 20 26 26 20 70 31 3d 3d 53 41 56 45  tion && p1==SAVE
1a430 50 4f 49 4e 54 5f 52 45 4c 45 41 53 45 20 29 7b  POINT_RELEASE ){
1a440 0a 20 20 20 20 20 20 20 20 69 66 28 20 28 72 63  .        if( (rc
1a450 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 43 68   = sqlite3VdbeCh
1a460 65 63 6b 46 6b 28 70 2c 20 31 29 29 21 3d 53 51  eckFk(p, 1))!=SQ
1a470 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20  LITE_OK ){.     
1a480 20 20 20 20 20 67 6f 74 6f 20 76 64 62 65 5f 72       goto vdbe_r
1a490 65 74 75 72 6e 3b 0a 20 20 20 20 20 20 20 20 7d  eturn;.        }
1a4a0 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 61 75 74  .        db->aut
1a4b0 6f 43 6f 6d 6d 69 74 20 3d 20 31 3b 0a 20 20 20  oCommit = 1;.   
1a4c0 20 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33       if( sqlite3
1a4d0 56 64 62 65 48 61 6c 74 28 70 29 3d 3d 53 51 4c  VdbeHalt(p)==SQL
1a4e0 49 54 45 5f 42 55 53 59 20 29 7b 0a 20 20 20 20  ITE_BUSY ){.    
1a4f0 20 20 20 20 20 20 70 2d 3e 70 63 20 3d 20 28 69        p->pc = (i
1a500 6e 74 29 28 70 4f 70 20 2d 20 61 4f 70 29 3b 0a  nt)(pOp - aOp);.
1a510 20 20 20 20 20 20 20 20 20 20 64 62 2d 3e 61 75            db->au
1a520 74 6f 43 6f 6d 6d 69 74 20 3d 20 30 3b 0a 20 20  toCommit = 0;.  
1a530 20 20 20 20 20 20 20 20 70 2d 3e 72 63 20 3d 20          p->rc = 
1a540 72 63 20 3d 20 53 51 4c 49 54 45 5f 42 55 53 59  rc = SQLITE_BUSY
1a550 3b 0a 20 20 20 20 20 20 20 20 20 20 67 6f 74 6f  ;.          goto
1a560 20 76 64 62 65 5f 72 65 74 75 72 6e 3b 0a 20 20   vdbe_return;.  
1a570 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
1a580 64 62 2d 3e 69 73 54 72 61 6e 73 61 63 74 69 6f  db->isTransactio
1a590 6e 53 61 76 65 70 6f 69 6e 74 20 3d 20 30 3b 0a  nSavepoint = 0;.
1a5a0 20 20 20 20 20 20 20 20 72 63 20 3d 20 70 2d 3e          rc = p->
1a5b0 72 63 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b  rc;.      }else{
1a5c0 0a 20 20 20 20 20 20 20 20 69 6e 74 20 69 73 53  .        int isS
1a5d0 63 68 65 6d 61 43 68 61 6e 67 65 3b 0a 20 20 20  chemaChange;.   
1a5e0 20 20 20 20 20 69 53 61 76 65 70 6f 69 6e 74 20       iSavepoint 
1a5f0 3d 20 64 62 2d 3e 6e 53 61 76 65 70 6f 69 6e 74  = db->nSavepoint
1a600 20 2d 20 69 53 61 76 65 70 6f 69 6e 74 20 2d 20   - iSavepoint - 
1a610 31 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 70  1;.        if( p
1a620 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 52 4f 4c  1==SAVEPOINT_ROL
1a630 4c 42 41 43 4b 20 29 7b 0a 20 20 20 20 20 20 20  LBACK ){.       
1a640 20 20 20 69 73 53 63 68 65 6d 61 43 68 61 6e 67     isSchemaChang
1a650 65 20 3d 20 28 64 62 2d 3e 6d 44 62 46 6c 61 67  e = (db->mDbFlag
1a660 73 20 26 20 44 42 46 4c 41 47 5f 53 63 68 65 6d  s & DBFLAG_Schem
1a670 61 43 68 61 6e 67 65 29 21 3d 30 3b 0a 20 20 20  aChange)!=0;.   
1a680 20 20 20 20 20 20 20 66 6f 72 28 69 69 3d 30 3b         for(ii=0;
1a690 20 69 69 3c 64 62 2d 3e 6e 44 62 3b 20 69 69 2b   ii<db->nDb; ii+
1a6a0 2b 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20  +){.            
1a6b0 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
1a6c0 65 54 72 69 70 41 6c 6c 43 75 72 73 6f 72 73 28  eTripAllCursors(
1a6d0 64 62 2d 3e 61 44 62 5b 69 69 5d 2e 70 42 74 2c  db->aDb[ii].pBt,
1a6e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1a6f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a700 20 20 20 20 20 20 20 20 53 51 4c 49 54 45 5f 41          SQLITE_A
1a710 42 4f 52 54 5f 52 4f 4c 4c 42 41 43 4b 2c 0a 20  BORT_ROLLBACK,. 
1a720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a740 20 20 20 20 20 20 69 73 53 63 68 65 6d 61 43 68        isSchemaCh
1a750 61 6e 67 65 3d 3d 30 29 3b 0a 20 20 20 20 20 20  ange==0);.      
1a760 20 20 20 20 20 20 69 66 28 20 72 63 21 3d 53 51        if( rc!=SQ
1a770 4c 49 54 45 5f 4f 4b 20 29 20 67 6f 74 6f 20 61  LITE_OK ) goto a
1a780 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
1a790 72 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 20  r;.          }. 
1a7a0 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20         }else{.  
1a7b0 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20          assert( 
1a7c0 70 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 52 45  p1==SAVEPOINT_RE
1a7d0 4c 45 41 53 45 20 29 3b 0a 20 20 20 20 20 20 20  LEASE );.       
1a7e0 20 20 20 69 73 53 63 68 65 6d 61 43 68 61 6e 67     isSchemaChang
1a7f0 65 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 7d  e = 0;.        }
1a800 0a 20 20 20 20 20 20 20 20 66 6f 72 28 69 69 3d  .        for(ii=
1a810 30 3b 20 69 69 3c 64 62 2d 3e 6e 44 62 3b 20 69  0; ii<db->nDb; i
1a820 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 20 20  i++){.          
1a830 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
1a840 65 53 61 76 65 70 6f 69 6e 74 28 64 62 2d 3e 61  eSavepoint(db->a
1a850 44 62 5b 69 69 5d 2e 70 42 74 2c 20 70 31 2c 20  Db[ii].pBt, p1, 
1a860 69 53 61 76 65 70 6f 69 6e 74 29 3b 0a 20 20 20  iSavepoint);.   
1a870 20 20 20 20 20 20 20 69 66 28 20 72 63 21 3d 53         if( rc!=S
1a880 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20  QLITE_OK ){.    
1a890 20 20 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f          goto abo
1a8a0 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
1a8b0 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20  .          }.   
1a8c0 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 69       }.        i
1a8d0 66 28 20 69 73 53 63 68 65 6d 61 43 68 61 6e 67  f( isSchemaChang
1a8e0 65 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 73  e ){.          s
1a8f0 71 6c 69 74 65 33 45 78 70 69 72 65 50 72 65 70  qlite3ExpirePrep
1a900 61 72 65 64 53 74 61 74 65 6d 65 6e 74 73 28 64  aredStatements(d
1a910 62 2c 20 30 29 3b 0a 20 20 20 20 20 20 20 20 20  b, 0);.         
1a920 20 73 71 6c 69 74 65 33 52 65 73 65 74 41 6c 6c   sqlite3ResetAll
1a930 53 63 68 65 6d 61 73 4f 66 43 6f 6e 6e 65 63 74  SchemasOfConnect
1a940 69 6f 6e 28 64 62 29 3b 0a 20 20 20 20 20 20 20  ion(db);.       
1a950 20 20 20 64 62 2d 3e 6d 44 62 46 6c 61 67 73 20     db->mDbFlags 
1a960 7c 3d 20 44 42 46 4c 41 47 5f 53 63 68 65 6d 61  |= DBFLAG_Schema
1a970 43 68 61 6e 67 65 3b 0a 20 20 20 20 20 20 20 20  Change;.        
1a980 7d 0a 20 20 20 20 20 20 7d 0a 20 20 0a 20 20 20  }.      }.  .   
1a990 20 20 20 2f 2a 20 52 65 67 61 72 64 6c 65 73 73     /* Regardless
1a9a0 20 6f 66 20 77 68 65 74 68 65 72 20 74 68 69 73   of whether this
1a9b0 20 69 73 20 61 20 52 45 4c 45 41 53 45 20 6f 72   is a RELEASE or
1a9c0 20 52 4f 4c 4c 42 41 43 4b 2c 20 64 65 73 74 72   ROLLBACK, destr
1a9d0 6f 79 20 61 6c 6c 20 0a 20 20 20 20 20 20 2a 2a  oy all .      **
1a9e0 20 73 61 76 65 70 6f 69 6e 74 73 20 6e 65 73 74   savepoints nest
1a9f0 65 64 20 69 6e 73 69 64 65 20 6f 66 20 74 68 65  ed inside of the
1aa00 20 73 61 76 65 70 6f 69 6e 74 20 62 65 69 6e 67   savepoint being
1aa10 20 6f 70 65 72 61 74 65 64 20 6f 6e 2e 20 2a 2f   operated on. */
1aa20 0a 20 20 20 20 20 20 77 68 69 6c 65 28 20 64 62  .      while( db
1aa30 2d 3e 70 53 61 76 65 70 6f 69 6e 74 21 3d 70 53  ->pSavepoint!=pS
1aa40 61 76 65 70 6f 69 6e 74 20 29 7b 0a 20 20 20 20  avepoint ){.    
1aa50 20 20 20 20 70 54 6d 70 20 3d 20 64 62 2d 3e 70      pTmp = db->p
1aa60 53 61 76 65 70 6f 69 6e 74 3b 0a 20 20 20 20 20  Savepoint;.     
1aa70 20 20 20 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e     db->pSavepoin
1aa80 74 20 3d 20 70 54 6d 70 2d 3e 70 4e 65 78 74 3b  t = pTmp->pNext;
1aa90 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
1aaa0 44 62 46 72 65 65 28 64 62 2c 20 70 54 6d 70 29  DbFree(db, pTmp)
1aab0 3b 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 6e 53  ;.        db->nS
1aac0 61 76 65 70 6f 69 6e 74 2d 2d 3b 0a 20 20 20 20  avepoint--;.    
1aad0 20 20 7d 0a 0a 20 20 20 20 20 20 2f 2a 20 49 66    }..      /* If
1aae0 20 69 74 20 69 73 20 61 20 52 45 4c 45 41 53 45   it is a RELEASE
1aaf0 2c 20 74 68 65 6e 20 64 65 73 74 72 6f 79 20 74  , then destroy t
1ab00 68 65 20 73 61 76 65 70 6f 69 6e 74 20 62 65 69  he savepoint bei
1ab10 6e 67 20 6f 70 65 72 61 74 65 64 20 6f 6e 20 0a  ng operated on .
1ab20 20 20 20 20 20 20 2a 2a 20 74 6f 6f 2e 20 49 66        ** too. If
1ab30 20 69 74 20 69 73 20 61 20 52 4f 4c 4c 42 41 43   it is a ROLLBAC
1ab40 4b 20 54 4f 2c 20 74 68 65 6e 20 73 65 74 20 74  K TO, then set t
1ab50 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 64 65 66  he number of def
1ab60 65 72 72 65 64 20 0a 20 20 20 20 20 20 2a 2a 20  erred .      ** 
1ab70 63 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61  constraint viola
1ab80 74 69 6f 6e 73 20 70 72 65 73 65 6e 74 20 69 6e  tions present in
1ab90 20 74 68 65 20 64 61 74 61 62 61 73 65 20 74 6f   the database to
1aba0 20 74 68 65 20 76 61 6c 75 65 20 73 74 6f 72 65   the value store
1abb0 64 0a 20 20 20 20 20 20 2a 2a 20 77 68 65 6e 20  d.      ** when 
1abc0 74 68 65 20 73 61 76 65 70 6f 69 6e 74 20 77 61  the savepoint wa
1abd0 73 20 63 72 65 61 74 65 64 2e 20 20 2a 2f 0a 20  s created.  */. 
1abe0 20 20 20 20 20 69 66 28 20 70 31 3d 3d 53 41 56       if( p1==SAV
1abf0 45 50 4f 49 4e 54 5f 52 45 4c 45 41 53 45 20 29  EPOINT_RELEASE )
1ac00 7b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74  {.        assert
1ac10 28 20 70 53 61 76 65 70 6f 69 6e 74 3d 3d 64 62  ( pSavepoint==db
1ac20 2d 3e 70 53 61 76 65 70 6f 69 6e 74 20 29 3b 0a  ->pSavepoint );.
1ac30 20 20 20 20 20 20 20 20 64 62 2d 3e 70 53 61 76          db->pSav
1ac40 65 70 6f 69 6e 74 20 3d 20 70 53 61 76 65 70 6f  epoint = pSavepo
1ac50 69 6e 74 2d 3e 70 4e 65 78 74 3b 0a 20 20 20 20  int->pNext;.    
1ac60 20 20 20 20 73 71 6c 69 74 65 33 44 62 46 72 65      sqlite3DbFre
1ac70 65 28 64 62 2c 20 70 53 61 76 65 70 6f 69 6e 74  e(db, pSavepoint
1ac80 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 21  );.        if( !
1ac90 69 73 54 72 61 6e 73 61 63 74 69 6f 6e 20 29 7b  isTransaction ){
1aca0 0a 20 20 20 20 20 20 20 20 20 20 64 62 2d 3e 6e  .          db->n
1acb0 53 61 76 65 70 6f 69 6e 74 2d 2d 3b 0a 20 20 20  Savepoint--;.   
1acc0 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 65 6c       }.      }el
1acd0 73 65 7b 0a 20 20 20 20 20 20 20 20 61 73 73 65  se{.        asse
1ace0 72 74 28 20 70 31 3d 3d 53 41 56 45 50 4f 49 4e  rt( p1==SAVEPOIN
1acf0 54 5f 52 4f 4c 4c 42 41 43 4b 20 29 3b 0a 20 20  T_ROLLBACK );.  
1ad00 20 20 20 20 20 20 64 62 2d 3e 6e 44 65 66 65 72        db->nDefer
1ad10 72 65 64 43 6f 6e 73 20 3d 20 70 53 61 76 65 70  redCons = pSavep
1ad20 6f 69 6e 74 2d 3e 6e 44 65 66 65 72 72 65 64 43  oint->nDeferredC
1ad30 6f 6e 73 3b 0a 20 20 20 20 20 20 20 20 64 62 2d  ons;.        db-
1ad40 3e 6e 44 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e  >nDeferredImmCon
1ad50 73 20 3d 20 70 53 61 76 65 70 6f 69 6e 74 2d 3e  s = pSavepoint->
1ad60 6e 44 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73  nDeferredImmCons
1ad70 3b 0a 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20  ;.      }..     
1ad80 20 69 66 28 20 21 69 73 54 72 61 6e 73 61 63 74   if( !isTransact
1ad90 69 6f 6e 20 7c 7c 20 70 31 3d 3d 53 41 56 45 50  ion || p1==SAVEP
1ada0 4f 49 4e 54 5f 52 4f 4c 4c 42 41 43 4b 20 29 7b  OINT_ROLLBACK ){
1adb0 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20 73 71  .        rc = sq
1adc0 6c 69 74 65 33 56 74 61 62 53 61 76 65 70 6f 69  lite3VtabSavepoi
1add0 6e 74 28 64 62 2c 20 70 31 2c 20 69 53 61 76 65  nt(db, p1, iSave
1ade0 70 6f 69 6e 74 29 3b 0a 20 20 20 20 20 20 20 20  point);.        
1adf0 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f  if( rc!=SQLITE_O
1ae00 4b 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64  K ) goto abort_d
1ae10 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20  ue_to_error;.   
1ae20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a 20     }.    }.  }. 
1ae30 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61   if( rc ) goto a
1ae40 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
1ae50 72 3b 0a 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  r;..  break;.}..
1ae60 2f 2a 20 4f 70 63 6f 64 65 3a 20 41 75 74 6f 43  /* Opcode: AutoC
1ae70 6f 6d 6d 69 74 20 50 31 20 50 32 20 2a 20 2a 20  ommit P1 P2 * * 
1ae80 2a 0a 2a 2a 0a 2a 2a 20 53 65 74 20 74 68 65 20  *.**.** Set the 
1ae90 64 61 74 61 62 61 73 65 20 61 75 74 6f 2d 63 6f  database auto-co
1aea0 6d 6d 69 74 20 66 6c 61 67 20 74 6f 20 50 31 20  mmit flag to P1 
1aeb0 28 31 20 6f 72 20 30 29 2e 20 49 66 20 50 32 20  (1 or 0). If P2 
1aec0 69 73 20 74 72 75 65 2c 20 72 6f 6c 6c 0a 2a 2a  is true, roll.**
1aed0 20 62 61 63 6b 20 61 6e 79 20 63 75 72 72 65 6e   back any curren
1aee0 74 6c 79 20 61 63 74 69 76 65 20 62 74 72 65 65  tly active btree
1aef0 20 74 72 61 6e 73 61 63 74 69 6f 6e 73 2e 20 49   transactions. I
1af00 66 20 74 68 65 72 65 20 61 72 65 20 61 6e 79 20  f there are any 
1af10 61 63 74 69 76 65 0a 2a 2a 20 56 4d 73 20 28 61  active.** VMs (a
1af20 70 61 72 74 20 66 72 6f 6d 20 74 68 69 73 20 6f  part from this o
1af30 6e 65 29 2c 20 74 68 65 6e 20 61 20 52 4f 4c 4c  ne), then a ROLL
1af40 42 41 43 4b 20 66 61 69 6c 73 2e 20 20 41 20 43  BACK fails.  A C
1af50 4f 4d 4d 49 54 20 66 61 69 6c 73 20 69 66 0a 2a  OMMIT fails if.*
1af60 2a 20 74 68 65 72 65 20 61 72 65 20 61 63 74 69  * there are acti
1af70 76 65 20 77 72 69 74 69 6e 67 20 56 4d 73 20 6f  ve writing VMs o
1af80 72 20 61 63 74 69 76 65 20 56 4d 73 20 74 68 61  r active VMs tha
1af90 74 20 75 73 65 20 73 68 61 72 65 64 20 63 61 63  t use shared cac
1afa0 68 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 69  he..**.** This i
1afb0 6e 73 74 72 75 63 74 69 6f 6e 20 63 61 75 73 65  nstruction cause
1afc0 73 20 74 68 65 20 56 4d 20 74 6f 20 68 61 6c 74  s the VM to halt
1afd0 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 41 75 74  ..*/.case OP_Aut
1afe0 6f 43 6f 6d 6d 69 74 3a 20 7b 0a 20 20 69 6e 74  oCommit: {.  int
1aff0 20 64 65 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d   desiredAutoComm
1b000 69 74 3b 0a 20 20 69 6e 74 20 69 52 6f 6c 6c 62  it;.  int iRollb
1b010 61 63 6b 3b 0a 0a 20 20 64 65 73 69 72 65 64 41  ack;..  desiredA
1b020 75 74 6f 43 6f 6d 6d 69 74 20 3d 20 70 4f 70 2d  utoCommit = pOp-
1b030 3e 70 31 3b 0a 20 20 69 52 6f 6c 6c 62 61 63 6b  >p1;.  iRollback
1b040 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 61 73   = pOp->p2;.  as
1b050 73 65 72 74 28 20 64 65 73 69 72 65 64 41 75 74  sert( desiredAut
1b060 6f 43 6f 6d 6d 69 74 3d 3d 31 20 7c 7c 20 64 65  oCommit==1 || de
1b070 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74 3d  siredAutoCommit=
1b080 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
1b090 64 65 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69  desiredAutoCommi
1b0a0 74 3d 3d 31 20 7c 7c 20 69 52 6f 6c 6c 62 61 63  t==1 || iRollbac
1b0b0 6b 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  k==0 );.  assert
1b0c0 28 20 64 62 2d 3e 6e 56 64 62 65 41 63 74 69 76  ( db->nVdbeActiv
1b0d0 65 3e 30 20 29 3b 20 20 2f 2a 20 41 74 20 6c 65  e>0 );  /* At le
1b0e0 61 73 74 20 74 68 69 73 20 6f 6e 65 20 56 4d 20  ast this one VM 
1b0f0 69 73 20 61 63 74 69 76 65 20 2a 2f 0a 20 20 61  is active */.  a
1b100 73 73 65 72 74 28 20 70 2d 3e 62 49 73 52 65 61  ssert( p->bIsRea
1b110 64 65 72 20 29 3b 0a 0a 20 20 69 66 28 20 64 65  der );..  if( de
1b120 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74 21  siredAutoCommit!
1b130 3d 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20  =db->autoCommit 
1b140 29 7b 0a 20 20 20 20 69 66 28 20 69 52 6f 6c 6c  ){.    if( iRoll
1b150 62 61 63 6b 20 29 7b 0a 20 20 20 20 20 20 61 73  back ){.      as
1b160 73 65 72 74 28 20 64 65 73 69 72 65 64 41 75 74  sert( desiredAut
1b170 6f 43 6f 6d 6d 69 74 3d 3d 31 20 29 3b 0a 20 20  oCommit==1 );.  
1b180 20 20 20 20 73 71 6c 69 74 65 33 52 6f 6c 6c 62      sqlite3Rollb
1b190 61 63 6b 41 6c 6c 28 64 62 2c 20 53 51 4c 49 54  ackAll(db, SQLIT
1b1a0 45 5f 41 42 4f 52 54 5f 52 4f 4c 4c 42 41 43 4b  E_ABORT_ROLLBACK
1b1b0 29 3b 0a 20 20 20 20 20 20 64 62 2d 3e 61 75 74  );.      db->aut
1b1c0 6f 43 6f 6d 6d 69 74 20 3d 20 31 3b 0a 20 20 20  oCommit = 1;.   
1b1d0 20 7d 65 6c 73 65 20 69 66 28 20 64 65 73 69 72   }else if( desir
1b1e0 65 64 41 75 74 6f 43 6f 6d 6d 69 74 20 26 26 20  edAutoCommit && 
1b1f0 64 62 2d 3e 6e 56 64 62 65 57 72 69 74 65 3e 30  db->nVdbeWrite>0
1b200 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 49 66 20   ){.      /* If 
1b210 74 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e  this instruction
1b220 20 69 6d 70 6c 65 6d 65 6e 74 73 20 61 20 43 4f   implements a CO
1b230 4d 4d 49 54 20 61 6e 64 20 6f 74 68 65 72 20 56  MMIT and other V
1b240 4d 73 20 61 72 65 20 77 72 69 74 69 6e 67 0a 20  Ms are writing. 
1b250 20 20 20 20 20 2a 2a 20 72 65 74 75 72 6e 20 61       ** return a
1b260 6e 20 65 72 72 6f 72 20 69 6e 64 69 63 61 74 69  n error indicati
1b270 6e 67 20 74 68 61 74 20 74 68 65 20 6f 74 68 65  ng that the othe
1b280 72 20 56 4d 73 20 6d 75 73 74 20 63 6f 6d 70 6c  r VMs must compl
1b290 65 74 65 20 66 69 72 73 74 2e 20 0a 20 20 20 20  ete first. .    
1b2a0 20 20 2a 2f 0a 20 20 20 20 20 20 73 71 6c 69 74    */.      sqlit
1b2b0 65 33 56 64 62 65 45 72 72 6f 72 28 70 2c 20 22  e3VdbeError(p, "
1b2c0 63 61 6e 6e 6f 74 20 63 6f 6d 6d 69 74 20 74 72  cannot commit tr
1b2d0 61 6e 73 61 63 74 69 6f 6e 20 2d 20 22 0a 20 20  ansaction - ".  
1b2e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b2f0 20 20 20 20 20 20 20 20 22 53 51 4c 20 73 74 61          "SQL sta
1b300 74 65 6d 65 6e 74 73 20 69 6e 20 70 72 6f 67 72  tements in progr
1b310 65 73 73 22 29 3b 0a 20 20 20 20 20 20 72 63 20  ess");.      rc 
1b320 3d 20 53 51 4c 49 54 45 5f 42 55 53 59 3b 0a 20  = SQLITE_BUSY;. 
1b330 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f       goto abort_
1b340 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
1b350 20 20 7d 65 6c 73 65 20 69 66 28 20 28 72 63 20    }else if( (rc 
1b360 3d 20 73 71 6c 69 74 65 33 56 64 62 65 43 68 65  = sqlite3VdbeChe
1b370 63 6b 46 6b 28 70 2c 20 31 29 29 21 3d 53 51 4c  ckFk(p, 1))!=SQL
1b380 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20  ITE_OK ){.      
1b390 67 6f 74 6f 20 76 64 62 65 5f 72 65 74 75 72 6e  goto vdbe_return
1b3a0 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20  ;.    }else{.   
1b3b0 20 20 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69     db->autoCommi
1b3c0 74 20 3d 20 28 75 38 29 64 65 73 69 72 65 64 41  t = (u8)desiredA
1b3d0 75 74 6f 43 6f 6d 6d 69 74 3b 0a 20 20 20 20 7d  utoCommit;.    }
1b3e0 0a 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33  .    if( sqlite3
1b3f0 56 64 62 65 48 61 6c 74 28 70 29 3d 3d 53 51 4c  VdbeHalt(p)==SQL
1b400 49 54 45 5f 42 55 53 59 20 29 7b 0a 20 20 20 20  ITE_BUSY ){.    
1b410 20 20 70 2d 3e 70 63 20 3d 20 28 69 6e 74 29 28    p->pc = (int)(
1b420 70 4f 70 20 2d 20 61 4f 70 29 3b 0a 20 20 20 20  pOp - aOp);.    
1b430 20 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74    db->autoCommit
1b440 20 3d 20 28 75 38 29 28 31 2d 64 65 73 69 72 65   = (u8)(1-desire
1b450 64 41 75 74 6f 43 6f 6d 6d 69 74 29 3b 0a 20 20  dAutoCommit);.  
1b460 20 20 20 20 70 2d 3e 72 63 20 3d 20 72 63 20 3d      p->rc = rc =
1b470 20 53 51 4c 49 54 45 5f 42 55 53 59 3b 0a 20 20   SQLITE_BUSY;.  
1b480 20 20 20 20 67 6f 74 6f 20 76 64 62 65 5f 72 65      goto vdbe_re
1b490 74 75 72 6e 3b 0a 20 20 20 20 7d 0a 20 20 20 20  turn;.    }.    
1b4a0 61 73 73 65 72 74 28 20 64 62 2d 3e 6e 53 74 61  assert( db->nSta
1b4b0 74 65 6d 65 6e 74 3d 3d 30 20 29 3b 0a 20 20 20  tement==0 );.   
1b4c0 20 73 71 6c 69 74 65 33 43 6c 6f 73 65 53 61 76   sqlite3CloseSav
1b4d0 65 70 6f 69 6e 74 73 28 64 62 29 3b 0a 20 20 20  epoints(db);.   
1b4e0 20 69 66 28 20 70 2d 3e 72 63 3d 3d 53 51 4c 49   if( p->rc==SQLI
1b4f0 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 72  TE_OK ){.      r
1b500 63 20 3d 20 53 51 4c 49 54 45 5f 44 4f 4e 45 3b  c = SQLITE_DONE;
1b510 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  .    }else{.    
1b520 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 45 52    rc = SQLITE_ER
1b530 52 4f 52 3b 0a 20 20 20 20 7d 0a 20 20 20 20 67  ROR;.    }.    g
1b540 6f 74 6f 20 76 64 62 65 5f 72 65 74 75 72 6e 3b  oto vdbe_return;
1b550 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 73 71  .  }else{.    sq
1b560 6c 69 74 65 33 56 64 62 65 45 72 72 6f 72 28 70  lite3VdbeError(p
1b570 2c 0a 20 20 20 20 20 20 20 20 28 21 64 65 73 69  ,.        (!desi
1b580 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74 29 3f 22  redAutoCommit)?"
1b590 63 61 6e 6e 6f 74 20 73 74 61 72 74 20 61 20 74  cannot start a t
1b5a0 72 61 6e 73 61 63 74 69 6f 6e 20 77 69 74 68 69  ransaction withi
1b5b0 6e 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 22  n a transaction"
1b5c0 3a 28 0a 20 20 20 20 20 20 20 20 28 69 52 6f 6c  :(.        (iRol
1b5d0 6c 62 61 63 6b 29 3f 22 63 61 6e 6e 6f 74 20 72  lback)?"cannot r
1b5e0 6f 6c 6c 62 61 63 6b 20 2d 20 6e 6f 20 74 72 61  ollback - no tra
1b5f0 6e 73 61 63 74 69 6f 6e 20 69 73 20 61 63 74 69  nsaction is acti
1b600 76 65 22 3a 0a 20 20 20 20 20 20 20 20 20 20 20  ve":.           
1b610 20 20 20 20 20 20 20 20 22 63 61 6e 6e 6f 74 20          "cannot 
1b620 63 6f 6d 6d 69 74 20 2d 20 6e 6f 20 74 72 61 6e  commit - no tran
1b630 73 61 63 74 69 6f 6e 20 69 73 20 61 63 74 69 76  saction is activ
1b640 65 22 29 29 3b 0a 20 20 20 20 20 20 20 20 20 0a  e"));.         .
1b650 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f      rc = SQLITE_
1b660 45 52 52 4f 52 3b 0a 20 20 20 20 67 6f 74 6f 20  ERROR;.    goto 
1b670 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
1b680 6f 72 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  or;.  }.  break;
1b690 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 54  .}../* Opcode: T
1b6a0 72 61 6e 73 61 63 74 69 6f 6e 20 50 31 20 50 32  ransaction P1 P2
1b6b0 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20   P3 P4 P5.**.** 
1b6c0 42 65 67 69 6e 20 61 20 74 72 61 6e 73 61 63 74  Begin a transact
1b6d0 69 6f 6e 20 6f 6e 20 64 61 74 61 62 61 73 65 20  ion on database 
1b6e0 50 31 20 69 66 20 61 20 74 72 61 6e 73 61 63 74  P1 if a transact
1b6f0 69 6f 6e 20 69 73 20 6e 6f 74 20 61 6c 72 65 61  ion is not alrea
1b700 64 79 0a 2a 2a 20 61 63 74 69 76 65 2e 0a 2a 2a  dy.** active..**
1b710 20 49 66 20 50 32 20 69 73 20 6e 6f 6e 2d 7a 65   If P2 is non-ze
1b720 72 6f 2c 20 74 68 65 6e 20 61 20 77 72 69 74 65  ro, then a write
1b730 2d 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20  -transaction is 
1b740 73 74 61 72 74 65 64 2c 20 6f 72 20 69 66 20 61  started, or if a
1b750 20 0a 2a 2a 20 72 65 61 64 2d 74 72 61 6e 73 61   .** read-transa
1b760 63 74 69 6f 6e 20 69 73 20 61 6c 72 65 61 64 79  ction is already
1b770 20 61 63 74 69 76 65 2c 20 69 74 20 69 73 20 75   active, it is u
1b780 70 67 72 61 64 65 64 20 74 6f 20 61 20 77 72 69  pgraded to a wri
1b790 74 65 2d 74 72 61 6e 73 61 63 74 69 6f 6e 2e 0a  te-transaction..
1b7a0 2a 2a 20 49 66 20 50 32 20 69 73 20 7a 65 72 6f  ** If P2 is zero
1b7b0 2c 20 74 68 65 6e 20 61 20 72 65 61 64 2d 74 72  , then a read-tr
1b7c0 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 73 74 61  ansaction is sta
1b7d0 72 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 50 31 20 69  rted..**.** P1 i
1b7e0 73 20 74 68 65 20 69 6e 64 65 78 20 6f 66 20 74  s the index of t
1b7f0 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  he database file
1b800 20 6f 6e 20 77 68 69 63 68 20 74 68 65 20 74 72   on which the tr
1b810 61 6e 73 61 63 74 69 6f 6e 20 69 73 0a 2a 2a 20  ansaction is.** 
1b820 73 74 61 72 74 65 64 2e 20 20 49 6e 64 65 78 20  started.  Index 
1b830 30 20 69 73 20 74 68 65 20 6d 61 69 6e 20 64 61  0 is the main da
1b840 74 61 62 61 73 65 20 66 69 6c 65 20 61 6e 64 20  tabase file and 
1b850 69 6e 64 65 78 20 31 20 69 73 20 74 68 65 0a 2a  index 1 is the.*
1b860 2a 20 66 69 6c 65 20 75 73 65 64 20 66 6f 72 20  * file used for 
1b870 74 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 73  temporary tables
1b880 2e 20 20 49 6e 64 69 63 65 73 20 6f 66 20 32 20  .  Indices of 2 
1b890 6f 72 20 6d 6f 72 65 20 61 72 65 20 75 73 65 64  or more are used
1b8a0 20 66 6f 72 0a 2a 2a 20 61 74 74 61 63 68 65 64   for.** attached
1b8b0 20 64 61 74 61 62 61 73 65 73 2e 0a 2a 2a 0a 2a   databases..**.*
1b8c0 2a 20 49 66 20 61 20 77 72 69 74 65 2d 74 72 61  * If a write-tra
1b8d0 6e 73 61 63 74 69 6f 6e 20 69 73 20 73 74 61 72  nsaction is star
1b8e0 74 65 64 20 61 6e 64 20 74 68 65 20 56 64 62 65  ted and the Vdbe
1b8f0 2e 75 73 65 73 53 74 6d 74 4a 6f 75 72 6e 61 6c  .usesStmtJournal
1b900 20 66 6c 61 67 20 69 73 0a 2a 2a 20 74 72 75 65   flag is.** true
1b910 20 28 74 68 69 73 20 66 6c 61 67 20 69 73 20 73   (this flag is s
1b920 65 74 20 69 66 20 74 68 65 20 56 64 62 65 20 6d  et if the Vdbe m
1b930 61 79 20 6d 6f 64 69 66 79 20 6d 6f 72 65 20 74  ay modify more t
1b940 68 61 6e 20 6f 6e 65 20 72 6f 77 20 61 6e 64 20  han one row and 
1b950 6d 61 79 0a 2a 2a 20 74 68 72 6f 77 20 61 6e 20  may.** throw an 
1b960 41 42 4f 52 54 20 65 78 63 65 70 74 69 6f 6e 29  ABORT exception)
1b970 2c 20 61 20 73 74 61 74 65 6d 65 6e 74 20 74 72  , a statement tr
1b980 61 6e 73 61 63 74 69 6f 6e 20 6d 61 79 20 61 6c  ansaction may al
1b990 73 6f 20 62 65 20 6f 70 65 6e 65 64 2e 0a 2a 2a  so be opened..**
1b9a0 20 4d 6f 72 65 20 73 70 65 63 69 66 69 63 61 6c   More specifical
1b9b0 6c 79 2c 20 61 20 73 74 61 74 65 6d 65 6e 74 20  ly, a statement 
1b9c0 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 6f  transaction is o
1b9d0 70 65 6e 65 64 20 69 66 66 20 74 68 65 20 64 61  pened iff the da
1b9e0 74 61 62 61 73 65 0a 2a 2a 20 63 6f 6e 6e 65 63  tabase.** connec
1b9f0 74 69 6f 6e 20 69 73 20 63 75 72 72 65 6e 74 6c  tion is currentl
1ba00 79 20 6e 6f 74 20 69 6e 20 61 75 74 6f 63 6f 6d  y not in autocom
1ba10 6d 69 74 20 6d 6f 64 65 2c 20 6f 72 20 69 66 20  mit mode, or if 
1ba20 74 68 65 72 65 20 61 72 65 20 6f 74 68 65 72 0a  there are other.
1ba30 2a 2a 20 61 63 74 69 76 65 20 73 74 61 74 65 6d  ** active statem
1ba40 65 6e 74 73 2e 20 41 20 73 74 61 74 65 6d 65 6e  ents. A statemen
1ba50 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 61 6c  t transaction al
1ba60 6c 6f 77 73 20 74 68 65 20 63 68 61 6e 67 65 73  lows the changes
1ba70 20 6d 61 64 65 20 62 79 20 74 68 69 73 0a 2a 2a   made by this.**
1ba80 20 56 44 42 45 20 74 6f 20 62 65 20 72 6f 6c 6c   VDBE to be roll
1ba90 65 64 20 62 61 63 6b 20 61 66 74 65 72 20 61 6e  ed back after an
1baa0 20 65 72 72 6f 72 20 77 69 74 68 6f 75 74 20 68   error without h
1bab0 61 76 69 6e 67 20 74 6f 20 72 6f 6c 6c 20 62 61  aving to roll ba
1bac0 63 6b 20 74 68 65 0a 2a 2a 20 65 6e 74 69 72 65  ck the.** entire
1bad0 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20 49 66   transaction. If
1bae0 20 6e 6f 20 65 72 72 6f 72 20 69 73 20 65 6e 63   no error is enc
1baf0 6f 75 6e 74 65 72 65 64 2c 20 74 68 65 20 73 74  ountered, the st
1bb00 61 74 65 6d 65 6e 74 20 74 72 61 6e 73 61 63 74  atement transact
1bb10 69 6f 6e 0a 2a 2a 20 77 69 6c 6c 20 61 75 74 6f  ion.** will auto
1bb20 6d 61 74 69 63 61 6c 6c 79 20 63 6f 6d 6d 69 74  matically commit
1bb30 20 77 68 65 6e 20 74 68 65 20 56 44 42 45 20 68   when the VDBE h
1bb40 61 6c 74 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50  alts..**.** If P
1bb50 35 21 3d 30 20 74 68 65 6e 20 74 68 69 73 20 6f  5!=0 then this o
1bb60 70 63 6f 64 65 20 61 6c 73 6f 20 63 68 65 63 6b  pcode also check
1bb70 73 20 74 68 65 20 73 63 68 65 6d 61 20 63 6f 6f  s the schema coo
1bb80 6b 69 65 20 61 67 61 69 6e 73 74 20 50 33 0a 2a  kie against P3.*
1bb90 2a 20 61 6e 64 20 74 68 65 20 73 63 68 65 6d 61  * and the schema
1bba0 20 67 65 6e 65 72 61 74 69 6f 6e 20 63 6f 75 6e   generation coun
1bbb0 74 65 72 20 61 67 61 69 6e 73 74 20 50 34 2e 0a  ter against P4..
1bbc0 2a 2a 20 54 68 65 20 63 6f 6f 6b 69 65 20 63 68  ** The cookie ch
1bbd0 61 6e 67 65 73 20 69 74 73 20 76 61 6c 75 65 20  anges its value 
1bbe0 77 68 65 6e 65 76 65 72 20 74 68 65 20 64 61 74  whenever the dat
1bbf0 61 62 61 73 65 20 73 63 68 65 6d 61 20 63 68 61  abase schema cha
1bc00 6e 67 65 73 2e 0a 2a 2a 20 54 68 69 73 20 6f 70  nges..** This op
1bc10 65 72 61 74 69 6f 6e 20 69 73 20 75 73 65 64 20  eration is used 
1bc20 74 6f 20 64 65 74 65 63 74 20 77 68 65 6e 20 74  to detect when t
1bc30 68 61 74 20 74 68 65 20 63 6f 6f 6b 69 65 20 68  hat the cookie h
1bc40 61 73 20 63 68 61 6e 67 65 64 0a 2a 2a 20 61 6e  as changed.** an
1bc50 64 20 74 68 61 74 20 74 68 65 20 63 75 72 72 65  d that the curre
1bc60 6e 74 20 70 72 6f 63 65 73 73 20 6e 65 65 64 73  nt process needs
1bc70 20 74 6f 20 72 65 72 65 61 64 20 74 68 65 20 73   to reread the s
1bc80 63 68 65 6d 61 2e 20 20 49 66 20 74 68 65 20 73  chema.  If the s
1bc90 63 68 65 6d 61 0a 2a 2a 20 63 6f 6f 6b 69 65 20  chema.** cookie 
1bca0 69 6e 20 50 33 20 64 69 66 66 65 72 73 20 66 72  in P3 differs fr
1bcb0 6f 6d 20 74 68 65 20 73 63 68 65 6d 61 20 63 6f  om the schema co
1bcc0 6f 6b 69 65 20 69 6e 20 74 68 65 20 64 61 74 61  okie in the data
1bcd0 62 61 73 65 20 68 65 61 64 65 72 20 6f 72 0a 2a  base header or.*
1bce0 2a 20 69 66 20 74 68 65 20 73 63 68 65 6d 61 20  * if the schema 
1bcf0 67 65 6e 65 72 61 74 69 6f 6e 20 63 6f 75 6e 74  generation count
1bd00 65 72 20 69 6e 20 50 34 20 64 69 66 66 65 72 73  er in P4 differs
1bd10 20 66 72 6f 6d 20 74 68 65 20 63 75 72 72 65 6e   from the curren
1bd20 74 0a 2a 2a 20 67 65 6e 65 72 61 74 69 6f 6e 20  t.** generation 
1bd30 63 6f 75 6e 74 65 72 2c 20 74 68 65 6e 20 61 6e  counter, then an
1bd40 20 53 51 4c 49 54 45 5f 53 43 48 45 4d 41 20 65   SQLITE_SCHEMA e
1bd50 72 72 6f 72 20 69 73 20 72 61 69 73 65 64 20 61  rror is raised a
1bd60 6e 64 20 65 78 65 63 75 74 69 6f 6e 0a 2a 2a 20  nd execution.** 
1bd70 68 61 6c 74 73 2e 20 20 54 68 65 20 73 71 6c 69  halts.  The sqli
1bd80 74 65 33 5f 73 74 65 70 28 29 20 77 72 61 70 70  te3_step() wrapp
1bd90 65 72 20 66 75 6e 63 74 69 6f 6e 20 6d 69 67 68  er function migh
1bda0 74 20 74 68 65 6e 20 72 65 70 72 65 70 61 72 65  t then reprepare
1bdb0 20 74 68 65 0a 2a 2a 20 73 74 61 74 65 6d 65 6e   the.** statemen
1bdc0 74 20 61 6e 64 20 72 65 72 75 6e 20 69 74 20 66  t and rerun it f
1bdd0 72 6f 6d 20 74 68 65 20 62 65 67 69 6e 6e 69 6e  rom the beginnin
1bde0 67 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 54 72  g..*/.case OP_Tr
1bdf0 61 6e 73 61 63 74 69 6f 6e 3a 20 7b 0a 20 20 42  ansaction: {.  B
1be00 74 72 65 65 20 2a 70 42 74 3b 0a 20 20 69 6e 74  tree *pBt;.  int
1be10 20 69 4d 65 74 61 20 3d 20 30 3b 0a 0a 20 20 61   iMeta = 0;..  a
1be20 73 73 65 72 74 28 20 70 2d 3e 62 49 73 52 65 61  ssert( p->bIsRea
1be30 64 65 72 20 29 3b 0a 20 20 61 73 73 65 72 74 28  der );.  assert(
1be40 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30 20   p->readOnly==0 
1be50 7c 7c 20 70 4f 70 2d 3e 70 32 3d 3d 30 20 29 3b  || pOp->p2==0 );
1be60 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
1be70 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31  p1>=0 && pOp->p1
1be80 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73  <db->nDb );.  as
1be90 73 65 72 74 28 20 44 62 4d 61 73 6b 54 65 73 74  sert( DbMaskTest
1bea0 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b 2c 20 70  (p->btreeMask, p
1beb0 4f 70 2d 3e 70 31 29 20 29 3b 0a 20 20 69 66 28  Op->p1) );.  if(
1bec0 20 70 4f 70 2d 3e 70 32 20 26 26 20 28 64 62 2d   pOp->p2 && (db-
1bed0 3e 66 6c 61 67 73 20 26 20 53 51 4c 49 54 45 5f  >flags & SQLITE_
1bee0 51 75 65 72 79 4f 6e 6c 79 29 21 3d 30 20 29 7b  QueryOnly)!=0 ){
1bef0 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45  .    rc = SQLITE
1bf00 5f 52 45 41 44 4f 4e 4c 59 3b 0a 20 20 20 20 67  _READONLY;.    g
1bf10 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
1bf20 5f 65 72 72 6f 72 3b 0a 20 20 7d 0a 20 20 70 42  _error;.  }.  pB
1bf30 74 20 3d 20 64 62 2d 3e 61 44 62 5b 70 4f 70 2d  t = db->aDb[pOp-
1bf40 3e 70 31 5d 2e 70 42 74 3b 0a 0a 20 20 69 66 28  >p1].pBt;..  if(
1bf50 20 70 42 74 20 29 7b 0a 20 20 20 20 72 63 20 3d   pBt ){.    rc =
1bf60 20 73 71 6c 69 74 65 33 42 74 72 65 65 42 65 67   sqlite3BtreeBeg
1bf70 69 6e 54 72 61 6e 73 28 70 42 74 2c 20 70 4f 70  inTrans(pBt, pOp
1bf80 2d 3e 70 32 2c 20 26 69 4d 65 74 61 29 3b 0a 20  ->p2, &iMeta);. 
1bf90 20 20 20 74 65 73 74 63 61 73 65 28 20 72 63 3d     testcase( rc=
1bfa0 3d 53 51 4c 49 54 45 5f 42 55 53 59 5f 53 4e 41  =SQLITE_BUSY_SNA
1bfb0 50 53 48 4f 54 20 29 3b 0a 20 20 20 20 74 65 73  PSHOT );.    tes
1bfc0 74 63 61 73 65 28 20 72 63 3d 3d 53 51 4c 49 54  tcase( rc==SQLIT
1bfd0 45 5f 42 55 53 59 5f 52 45 43 4f 56 45 52 59 20  E_BUSY_RECOVERY 
1bfe0 29 3b 0a 20 20 20 20 69 66 28 20 72 63 21 3d 53  );.    if( rc!=S
1bff0 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20  QLITE_OK ){.    
1c000 20 20 69 66 28 20 28 72 63 26 30 78 66 66 29 3d    if( (rc&0xff)=
1c010 3d 53 51 4c 49 54 45 5f 42 55 53 59 20 29 7b 0a  =SQLITE_BUSY ){.
1c020 20 20 20 20 20 20 20 20 70 2d 3e 70 63 20 3d 20          p->pc = 
1c030 28 69 6e 74 29 28 70 4f 70 20 2d 20 61 4f 70 29  (int)(pOp - aOp)
1c040 3b 0a 20 20 20 20 20 20 20 20 70 2d 3e 72 63 20  ;.        p->rc 
1c050 3d 20 72 63 3b 0a 20 20 20 20 20 20 20 20 67 6f  = rc;.        go
1c060 74 6f 20 76 64 62 65 5f 72 65 74 75 72 6e 3b 0a  to vdbe_return;.
1c070 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 67 6f        }.      go
1c080 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
1c090 65 72 72 6f 72 3b 0a 20 20 20 20 7d 0a 0a 20 20  error;.    }..  
1c0a0 20 20 69 66 28 20 70 4f 70 2d 3e 70 32 20 26 26    if( pOp->p2 &&
1c0b0 20 70 2d 3e 75 73 65 73 53 74 6d 74 4a 6f 75 72   p->usesStmtJour
1c0c0 6e 61 6c 20 0a 20 20 20 20 20 26 26 20 28 64 62  nal .     && (db
1c0d0 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 3d 3d 30 20  ->autoCommit==0 
1c0e0 7c 7c 20 64 62 2d 3e 6e 56 64 62 65 52 65 61 64  || db->nVdbeRead
1c0f0 3e 31 29 20 0a 20 20 20 20 29 7b 0a 20 20 20 20  >1) .    ){.    
1c100 20 20 61 73 73 65 72 74 28 20 73 71 6c 69 74 65    assert( sqlite
1c110 33 42 74 72 65 65 49 73 49 6e 54 72 61 6e 73 28  3BtreeIsInTrans(
1c120 70 42 74 29 20 29 3b 0a 20 20 20 20 20 20 69 66  pBt) );.      if
1c130 28 20 70 2d 3e 69 53 74 61 74 65 6d 65 6e 74 3d  ( p->iStatement=
1c140 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 61 73  =0 ){.        as
1c150 73 65 72 74 28 20 64 62 2d 3e 6e 53 74 61 74 65  sert( db->nState
1c160 6d 65 6e 74 3e 3d 30 20 26 26 20 64 62 2d 3e 6e  ment>=0 && db->n
1c170 53 61 76 65 70 6f 69 6e 74 3e 3d 30 20 29 3b 0a  Savepoint>=0 );.
1c180 20 20 20 20 20 20 20 20 64 62 2d 3e 6e 53 74 61          db->nSta
1c190 74 65 6d 65 6e 74 2b 2b 3b 20 0a 20 20 20 20 20  tement++; .     
1c1a0 20 20 20 70 2d 3e 69 53 74 61 74 65 6d 65 6e 74     p->iStatement
1c1b0 20 3d 20 64 62 2d 3e 6e 53 61 76 65 70 6f 69 6e   = db->nSavepoin
1c1c0 74 20 2b 20 64 62 2d 3e 6e 53 74 61 74 65 6d 65  t + db->nStateme
1c1d0 6e 74 3b 0a 20 20 20 20 20 20 7d 0a 0a 20 20 20  nt;.      }..   
1c1e0 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56     rc = sqlite3V
1c1f0 74 61 62 53 61 76 65 70 6f 69 6e 74 28 64 62 2c  tabSavepoint(db,
1c200 20 53 41 56 45 50 4f 49 4e 54 5f 42 45 47 49 4e   SAVEPOINT_BEGIN
1c210 2c 20 70 2d 3e 69 53 74 61 74 65 6d 65 6e 74 2d  , p->iStatement-
1c220 31 29 3b 0a 20 20 20 20 20 20 69 66 28 20 72 63  1);.      if( rc
1c230 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20  ==SQLITE_OK ){. 
1c240 20 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69         rc = sqli
1c250 74 65 33 42 74 72 65 65 42 65 67 69 6e 53 74 6d  te3BtreeBeginStm
1c260 74 28 70 42 74 2c 20 70 2d 3e 69 53 74 61 74 65  t(pBt, p->iState
1c270 6d 65 6e 74 29 3b 0a 20 20 20 20 20 20 7d 0a 0a  ment);.      }..
1c280 20 20 20 20 20 20 2f 2a 20 53 74 6f 72 65 20 74        /* Store t
1c290 68 65 20 63 75 72 72 65 6e 74 20 76 61 6c 75 65  he current value
1c2a0 20 6f 66 20 74 68 65 20 64 61 74 61 62 61 73 65   of the database
1c2b0 20 68 61 6e 64 6c 65 73 20 64 65 66 65 72 72 65   handles deferre
1c2c0 64 20 63 6f 6e 73 74 72 61 69 6e 74 0a 20 20 20  d constraint.   
1c2d0 20 20 20 2a 2a 20 63 6f 75 6e 74 65 72 2e 20 49     ** counter. I
1c2e0 66 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74 20  f the statement 
1c2f0 74 72 61 6e 73 61 63 74 69 6f 6e 20 6e 65 65 64  transaction need
1c300 73 20 74 6f 20 62 65 20 72 6f 6c 6c 65 64 20 62  s to be rolled b
1c310 61 63 6b 2c 0a 20 20 20 20 20 20 2a 2a 20 74 68  ack,.      ** th
1c320 65 20 76 61 6c 75 65 20 6f 66 20 74 68 69 73 20  e value of this 
1c330 63 6f 75 6e 74 65 72 20 6e 65 65 64 73 20 74 6f  counter needs to
1c340 20 62 65 20 72 65 73 74 6f 72 65 64 20 74 6f 6f   be restored too
1c350 2e 20 20 2a 2f 0a 20 20 20 20 20 20 70 2d 3e 6e  .  */.      p->n
1c360 53 74 6d 74 44 65 66 43 6f 6e 73 20 3d 20 64 62  StmtDefCons = db
1c370 2d 3e 6e 44 65 66 65 72 72 65 64 43 6f 6e 73 3b  ->nDeferredCons;
1c380 0a 20 20 20 20 20 20 70 2d 3e 6e 53 74 6d 74 44  .      p->nStmtD
1c390 65 66 49 6d 6d 43 6f 6e 73 20 3d 20 64 62 2d 3e  efImmCons = db->
1c3a0 6e 44 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73  nDeferredImmCons
1c3b0 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 61 73  ;.    }.  }.  as
1c3c0 73 65 72 74 28 20 70 4f 70 2d 3e 70 35 3d 3d 30  sert( pOp->p5==0
1c3d0 20 7c 7c 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d   || pOp->p4type=
1c3e0 3d 50 34 5f 49 4e 54 33 32 20 29 3b 0a 20 20 69  =P4_INT32 );.  i
1c3f0 66 28 20 70 4f 70 2d 3e 70 35 0a 20 20 20 26 26  f( pOp->p5.   &&
1c400 20 28 69 4d 65 74 61 21 3d 70 4f 70 2d 3e 70 33   (iMeta!=pOp->p3
1c410 0a 20 20 20 20 20 20 7c 7c 20 64 62 2d 3e 61 44  .      || db->aD
1c420 62 5b 70 4f 70 2d 3e 70 31 5d 2e 70 53 63 68 65  b[pOp->p1].pSche
1c430 6d 61 2d 3e 69 47 65 6e 65 72 61 74 69 6f 6e 21  ma->iGeneration!
1c440 3d 70 4f 70 2d 3e 70 34 2e 69 29 0a 20 20 29 7b  =pOp->p4.i).  ){
1c450 0a 20 20 20 20 2f 2a 0a 20 20 20 20 2a 2a 20 49  .    /*.    ** I
1c460 4d 50 4c 45 4d 45 4e 54 41 54 49 4f 4e 2d 4f 46  MPLEMENTATION-OF
1c470 3a 20 52 2d 30 33 31 38 39 2d 35 31 31 33 35 20  : R-03189-51135 
1c480 41 73 20 65 61 63 68 20 53 51 4c 20 73 74 61 74  As each SQL stat
1c490 65 6d 65 6e 74 20 72 75 6e 73 2c 20 74 68 65 20  ement runs, the 
1c4a0 73 63 68 65 6d 61 0a 20 20 20 20 2a 2a 20 76 65  schema.    ** ve
1c4b0 72 73 69 6f 6e 20 69 73 20 63 68 65 63 6b 65 64  rsion is checked
1c4c0 20 74 6f 20 65 6e 73 75 72 65 20 74 68 61 74 20   to ensure that 
1c4d0 74 68 65 20 73 63 68 65 6d 61 20 68 61 73 20 6e  the schema has n
1c4e0 6f 74 20 63 68 61 6e 67 65 64 20 73 69 6e 63 65  ot changed since
1c4f0 20 74 68 65 0a 20 20 20 20 2a 2a 20 53 51 4c 20   the.    ** SQL 
1c500 73 74 61 74 65 6d 65 6e 74 20 77 61 73 20 70 72  statement was pr
1c510 65 70 61 72 65 64 2e 0a 20 20 20 20 2a 2f 0a 20  epared..    */. 
1c520 20 20 20 73 71 6c 69 74 65 33 44 62 46 72 65 65     sqlite3DbFree
1c530 28 64 62 2c 20 70 2d 3e 7a 45 72 72 4d 73 67 29  (db, p->zErrMsg)
1c540 3b 0a 20 20 20 20 70 2d 3e 7a 45 72 72 4d 73 67  ;.    p->zErrMsg
1c550 20 3d 20 73 71 6c 69 74 65 33 44 62 53 74 72 44   = sqlite3DbStrD
1c560 75 70 28 64 62 2c 20 22 64 61 74 61 62 61 73 65  up(db, "database
1c570 20 73 63 68 65 6d 61 20 68 61 73 20 63 68 61 6e   schema has chan
1c580 67 65 64 22 29 3b 0a 20 20 20 20 2f 2a 20 49 66  ged");.    /* If
1c590 20 74 68 65 20 73 63 68 65 6d 61 2d 63 6f 6f 6b   the schema-cook
1c5a0 69 65 20 66 72 6f 6d 20 74 68 65 20 64 61 74 61  ie from the data
1c5b0 62 61 73 65 20 66 69 6c 65 20 6d 61 74 63 68 65  base file matche
1c5c0 73 20 74 68 65 20 63 6f 6f 6b 69 65 20 0a 20 20  s the cookie .  
1c5d0 20 20 2a 2a 20 73 74 6f 72 65 64 20 77 69 74 68    ** stored with
1c5e0 20 74 68 65 20 69 6e 2d 6d 65 6d 6f 72 79 20 72   the in-memory r
1c5f0 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66  epresentation of
1c600 20 74 68 65 20 73 63 68 65 6d 61 2c 20 64 6f 0a   the schema, do.
1c610 20 20 20 20 2a 2a 20 6e 6f 74 20 72 65 6c 6f 61      ** not reloa
1c620 64 20 74 68 65 20 73 63 68 65 6d 61 20 66 72 6f  d the schema fro
1c630 6d 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66  m the database f
1c640 69 6c 65 2e 0a 20 20 20 20 2a 2a 0a 20 20 20 20  ile..    **.    
1c650 2a 2a 20 49 66 20 76 69 72 74 75 61 6c 2d 74 61  ** If virtual-ta
1c660 62 6c 65 73 20 61 72 65 20 69 6e 20 75 73 65 2c  bles are in use,
1c670 20 74 68 69 73 20 69 73 20 6e 6f 74 20 6a 75 73   this is not jus
1c680 74 20 61 6e 20 6f 70 74 69 6d 69 7a 61 74 69 6f  t an optimizatio
1c690 6e 2e 0a 20 20 20 20 2a 2a 20 4f 66 74 65 6e 2c  n..    ** Often,
1c6a0 20 76 2d 74 61 62 6c 65 73 20 73 74 6f 72 65 20   v-tables store 
1c6b0 74 68 65 69 72 20 64 61 74 61 20 69 6e 20 6f 74  their data in ot
1c6c0 68 65 72 20 53 51 4c 69 74 65 20 74 61 62 6c 65  her SQLite table
1c6d0 73 2c 20 77 68 69 63 68 0a 20 20 20 20 2a 2a 20  s, which.    ** 
1c6e0 61 72 65 20 71 75 65 72 69 65 64 20 66 72 6f 6d  are queried from
1c6f0 20 77 69 74 68 69 6e 20 78 4e 65 78 74 28 29 20   within xNext() 
1c700 61 6e 64 20 6f 74 68 65 72 20 76 2d 74 61 62 6c  and other v-tabl
1c710 65 20 6d 65 74 68 6f 64 73 20 75 73 69 6e 67 0a  e methods using.
1c720 20 20 20 20 2a 2a 20 70 72 65 70 61 72 65 64 20      ** prepared 
1c730 71 75 65 72 69 65 73 2e 20 49 66 20 73 75 63 68  queries. If such
1c740 20 61 20 71 75 65 72 79 20 69 73 20 6f 75 74 2d   a query is out-
1c750 6f 66 2d 64 61 74 65 2c 20 77 65 20 64 6f 20 6e  of-date, we do n
1c760 6f 74 20 77 61 6e 74 20 74 6f 0a 20 20 20 20 2a  ot want to.    *
1c770 2a 20 64 69 73 63 61 72 64 20 74 68 65 20 64 61  * discard the da
1c780 74 61 62 61 73 65 20 73 63 68 65 6d 61 2c 20 61  tabase schema, a
1c790 73 20 74 68 65 20 75 73 65 72 20 63 6f 64 65 20  s the user code 
1c7a0 69 6d 70 6c 65 6d 65 6e 74 69 6e 67 20 74 68 65  implementing the
1c7b0 0a 20 20 20 20 2a 2a 20 76 2d 74 61 62 6c 65 20  .    ** v-table 
1c7c0 77 6f 75 6c 64 20 68 61 76 65 20 74 6f 20 62 65  would have to be
1c7d0 20 72 65 61 64 79 20 66 6f 72 20 74 68 65 20 73   ready for the s
1c7e0 71 6c 69 74 65 33 5f 76 74 61 62 20 73 74 72 75  qlite3_vtab stru
1c7f0 63 74 75 72 65 20 69 74 73 65 6c 66 0a 20 20 20  cture itself.   
1c800 20 2a 2a 20 74 6f 20 62 65 20 69 6e 76 61 6c 69   ** to be invali
1c810 64 61 74 65 64 20 77 68 65 6e 65 76 65 72 20 73  dated whenever s
1c820 71 6c 69 74 65 33 5f 73 74 65 70 28 29 20 69 73  qlite3_step() is
1c830 20 63 61 6c 6c 65 64 20 66 72 6f 6d 20 77 69 74   called from wit
1c840 68 69 6e 20 0a 20 20 20 20 2a 2a 20 61 20 76 2d  hin .    ** a v-
1c850 74 61 62 6c 65 20 6d 65 74 68 6f 64 2e 0a 20 20  table method..  
1c860 20 20 2a 2f 0a 20 20 20 20 69 66 28 20 64 62 2d    */.    if( db-
1c870 3e 61 44 62 5b 70 4f 70 2d 3e 70 31 5d 2e 70 53  >aDb[pOp->p1].pS
1c880 63 68 65 6d 61 2d 3e 73 63 68 65 6d 61 5f 63 6f  chema->schema_co
1c890 6f 6b 69 65 21 3d 69 4d 65 74 61 20 29 7b 0a 20  okie!=iMeta ){. 
1c8a0 20 20 20 20 20 73 71 6c 69 74 65 33 52 65 73 65       sqlite3Rese
1c8b0 74 4f 6e 65 53 63 68 65 6d 61 28 64 62 2c 20 70  tOneSchema(db, p
1c8c0 4f 70 2d 3e 70 31 29 3b 0a 20 20 20 20 7d 0a 20  Op->p1);.    }. 
1c8d0 20 20 20 70 2d 3e 65 78 70 69 72 65 64 20 3d 20     p->expired = 
1c8e0 31 3b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49  1;.    rc = SQLI
1c8f0 54 45 5f 53 43 48 45 4d 41 3b 0a 20 20 7d 0a 20  TE_SCHEMA;.  }. 
1c900 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61   if( rc ) goto a
1c910 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
1c920 72 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  r;.  break;.}../
1c930 2a 20 4f 70 63 6f 64 65 3a 20 52 65 61 64 43 6f  * Opcode: ReadCo
1c940 6f 6b 69 65 20 50 31 20 50 32 20 50 33 20 2a 20  okie P1 P2 P3 * 
1c950 2a 0a 2a 2a 0a 2a 2a 20 52 65 61 64 20 63 6f 6f  *.**.** Read coo
1c960 6b 69 65 20 6e 75 6d 62 65 72 20 50 33 20 66 72  kie number P3 fr
1c970 6f 6d 20 64 61 74 61 62 61 73 65 20 50 31 20 61  om database P1 a
1c980 6e 64 20 77 72 69 74 65 20 69 74 20 69 6e 74 6f  nd write it into
1c990 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a   register P2..**
1c9a0 20 50 33 3d 3d 31 20 69 73 20 74 68 65 20 73 63   P3==1 is the sc
1c9b0 68 65 6d 61 20 76 65 72 73 69 6f 6e 2e 20 20 50  hema version.  P
1c9c0 33 3d 3d 32 20 69 73 20 74 68 65 20 64 61 74 61  3==2 is the data
1c9d0 62 61 73 65 20 66 6f 72 6d 61 74 2e 0a 2a 2a 20  base format..** 
1c9e0 50 33 3d 3d 33 20 69 73 20 74 68 65 20 72 65 63  P3==3 is the rec
1c9f0 6f 6d 6d 65 6e 64 65 64 20 70 61 67 65 72 20 63  ommended pager c
1ca00 61 63 68 65 20 73 69 7a 65 2c 20 61 6e 64 20 73  ache size, and s
1ca10 6f 20 66 6f 72 74 68 2e 20 20 50 31 3d 3d 30 20  o forth.  P1==0 
1ca20 69 73 0a 2a 2a 20 74 68 65 20 6d 61 69 6e 20 64  is.** the main d
1ca30 61 74 61 62 61 73 65 20 66 69 6c 65 20 61 6e 64  atabase file and
1ca40 20 50 31 3d 3d 31 20 69 73 20 74 68 65 20 64 61   P1==1 is the da
1ca50 74 61 62 61 73 65 20 66 69 6c 65 20 75 73 65 64  tabase file used
1ca60 20 74 6f 20 73 74 6f 72 65 0a 2a 2a 20 74 65 6d   to store.** tem
1ca70 70 6f 72 61 72 79 20 74 61 62 6c 65 73 2e 0a 2a  porary tables..*
1ca80 2a 0a 2a 2a 20 54 68 65 72 65 20 6d 75 73 74 20  *.** There must 
1ca90 62 65 20 61 20 72 65 61 64 2d 6c 6f 63 6b 20 6f  be a read-lock o
1caa0 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20 28  n the database (
1cab0 65 69 74 68 65 72 20 61 20 74 72 61 6e 73 61 63  either a transac
1cac0 74 69 6f 6e 0a 2a 2a 20 6d 75 73 74 20 62 65 20  tion.** must be 
1cad0 73 74 61 72 74 65 64 20 6f 72 20 74 68 65 72 65  started or there
1cae0 20 6d 75 73 74 20 62 65 20 61 6e 20 6f 70 65 6e   must be an open
1caf0 20 63 75 72 73 6f 72 29 20 62 65 66 6f 72 65 0a   cursor) before.
1cb00 2a 2a 20 65 78 65 63 75 74 69 6e 67 20 74 68 69  ** executing thi
1cb10 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a  s instruction..*
1cb20 2f 0a 63 61 73 65 20 4f 50 5f 52 65 61 64 43 6f  /.case OP_ReadCo
1cb30 6f 6b 69 65 3a 20 7b 20 20 20 20 20 20 20 20 20  okie: {         
1cb40 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f        /* out2 */
1cb50 0a 20 20 69 6e 74 20 69 4d 65 74 61 3b 0a 20 20  .  int iMeta;.  
1cb60 69 6e 74 20 69 44 62 3b 0a 20 20 69 6e 74 20 69  int iDb;.  int i
1cb70 43 6f 6f 6b 69 65 3b 0a 0a 20 20 61 73 73 65 72  Cookie;..  asser
1cb80 74 28 20 70 2d 3e 62 49 73 52 65 61 64 65 72 20  t( p->bIsReader 
1cb90 29 3b 0a 20 20 69 44 62 20 3d 20 70 4f 70 2d 3e  );.  iDb = pOp->
1cba0 70 31 3b 0a 20 20 69 43 6f 6f 6b 69 65 20 3d 20  p1;.  iCookie = 
1cbb0 70 4f 70 2d 3e 70 33 3b 0a 20 20 61 73 73 65 72  pOp->p3;.  asser
1cbc0 74 28 20 70 4f 70 2d 3e 70 33 3c 53 51 4c 49 54  t( pOp->p3<SQLIT
1cbd0 45 5f 4e 5f 42 54 52 45 45 5f 4d 45 54 41 20 29  E_N_BTREE_META )
1cbe0 3b 0a 20 20 61 73 73 65 72 74 28 20 69 44 62 3e  ;.  assert( iDb>
1cbf0 3d 30 20 26 26 20 69 44 62 3c 64 62 2d 3e 6e 44  =0 && iDb<db->nD
1cc00 62 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 64  b );.  assert( d
1cc10 62 2d 3e 61 44 62 5b 69 44 62 5d 2e 70 42 74 21  b->aDb[iDb].pBt!
1cc20 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
1cc30 44 62 4d 61 73 6b 54 65 73 74 28 70 2d 3e 62 74  DbMaskTest(p->bt
1cc40 72 65 65 4d 61 73 6b 2c 20 69 44 62 29 20 29 3b  reeMask, iDb) );
1cc50 0a 0a 20 20 73 71 6c 69 74 65 33 42 74 72 65 65  ..  sqlite3Btree
1cc60 47 65 74 4d 65 74 61 28 64 62 2d 3e 61 44 62 5b  GetMeta(db->aDb[
1cc70 69 44 62 5d 2e 70 42 74 2c 20 69 43 6f 6f 6b 69  iDb].pBt, iCooki
1cc80 65 2c 20 28 75 33 32 20 2a 29 26 69 4d 65 74 61  e, (u32 *)&iMeta
1cc90 29 3b 0a 20 20 70 4f 75 74 20 3d 20 6f 75 74 32  );.  pOut = out2
1cca0 50 72 65 72 65 6c 65 61 73 65 28 70 2c 20 70 4f  Prerelease(p, pO
1ccb0 70 29 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20  p);.  pOut->u.i 
1ccc0 3d 20 69 4d 65 74 61 3b 0a 20 20 62 72 65 61 6b  = iMeta;.  break
1ccd0 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
1cce0 53 65 74 43 6f 6f 6b 69 65 20 50 31 20 50 32 20  SetCookie P1 P2 
1ccf0 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 57 72 69  P3 * *.**.** Wri
1cd00 74 65 20 74 68 65 20 69 6e 74 65 67 65 72 20 76  te the integer v
1cd10 61 6c 75 65 20 50 33 20 69 6e 74 6f 20 63 6f 6f  alue P3 into coo
1cd20 6b 69 65 20 6e 75 6d 62 65 72 20 50 32 20 6f 66  kie number P2 of
1cd30 20 64 61 74 61 62 61 73 65 20 50 31 2e 0a 2a 2a   database P1..**
1cd40 20 50 32 3d 3d 31 20 69 73 20 74 68 65 20 73 63   P2==1 is the sc
1cd50 68 65 6d 61 20 76 65 72 73 69 6f 6e 2e 20 20 50  hema version.  P
1cd60 32 3d 3d 32 20 69 73 20 74 68 65 20 64 61 74 61  2==2 is the data
1cd70 62 61 73 65 20 66 6f 72 6d 61 74 2e 0a 2a 2a 20  base format..** 
1cd80 50 32 3d 3d 33 20 69 73 20 74 68 65 20 72 65 63  P2==3 is the rec
1cd90 6f 6d 6d 65 6e 64 65 64 20 70 61 67 65 72 20 63  ommended pager c
1cda0 61 63 68 65 20 0a 2a 2a 20 73 69 7a 65 2c 20 61  ache .** size, a
1cdb0 6e 64 20 73 6f 20 66 6f 72 74 68 2e 20 20 50 31  nd so forth.  P1
1cdc0 3d 3d 30 20 69 73 20 74 68 65 20 6d 61 69 6e 20  ==0 is the main 
1cdd0 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 61 6e  database file an
1cde0 64 20 50 31 3d 3d 31 20 69 73 20 74 68 65 20 0a  d P1==1 is the .
1cdf0 2a 2a 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  ** database file
1ce00 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20 74   used to store t
1ce10 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 73 2e  emporary tables.
1ce20 0a 2a 2a 0a 2a 2a 20 41 20 74 72 61 6e 73 61 63  .**.** A transac
1ce30 74 69 6f 6e 20 6d 75 73 74 20 62 65 20 73 74 61  tion must be sta
1ce40 72 74 65 64 20 62 65 66 6f 72 65 20 65 78 65 63  rted before exec
1ce50 75 74 69 6e 67 20 74 68 69 73 20 6f 70 63 6f 64  uting this opcod
1ce60 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 65  e..*/.case OP_Se
1ce70 74 43 6f 6f 6b 69 65 3a 20 7b 0a 20 20 44 62 20  tCookie: {.  Db 
1ce80 2a 70 44 62 3b 0a 0a 20 20 73 71 6c 69 74 65 33  *pDb;..  sqlite3
1ce90 56 64 62 65 49 6e 63 72 57 72 69 74 65 43 6f 75  VdbeIncrWriteCou
1cea0 6e 74 65 72 28 70 2c 20 30 29 3b 0a 20 20 61 73  nter(p, 0);.  as
1ceb0 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3c 53 51  sert( pOp->p2<SQ
1cec0 4c 49 54 45 5f 4e 5f 42 54 52 45 45 5f 4d 45 54  LITE_N_BTREE_MET
1ced0 41 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  A );.  assert( p
1cee0 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70  Op->p1>=0 && pOp
1cef0 2d 3e 70 31 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a  ->p1<db->nDb );.
1cf00 20 20 61 73 73 65 72 74 28 20 44 62 4d 61 73 6b    assert( DbMask
1cf10 54 65 73 74 28 70 2d 3e 62 74 72 65 65 4d 61 73  Test(p->btreeMas
1cf20 6b 2c 20 70 4f 70 2d 3e 70 31 29 20 29 3b 0a 20  k, pOp->p1) );. 
1cf30 20 61 73 73 65 72 74 28 20 70 2d 3e 72 65 61 64   assert( p->read
1cf40 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 20 20 70 44 62  Only==0 );.  pDb
1cf50 20 3d 20 26 64 62 2d 3e 61 44 62 5b 70 4f 70 2d   = &db->aDb[pOp-
1cf60 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p1];.  assert( 
1cf70 70 44 62 2d 3e 70 42 74 21 3d 30 20 29 3b 0a 20  pDb->pBt!=0 );. 
1cf80 20 61 73 73 65 72 74 28 20 73 71 6c 69 74 65 33   assert( sqlite3
1cf90 53 63 68 65 6d 61 4d 75 74 65 78 48 65 6c 64 28  SchemaMutexHeld(
1cfa0 64 62 2c 20 70 4f 70 2d 3e 70 31 2c 20 30 29 20  db, pOp->p1, 0) 
1cfb0 29 3b 0a 20 20 2f 2a 20 53 65 65 20 6e 6f 74 65  );.  /* See note
1cfc0 20 61 62 6f 75 74 20 69 6e 64 65 78 20 73 68 69   about index shi
1cfd0 66 74 69 6e 67 20 6f 6e 20 4f 50 5f 52 65 61 64  fting on OP_Read
1cfe0 43 6f 6f 6b 69 65 20 2a 2f 0a 20 20 72 63 20 3d  Cookie */.  rc =
1cff0 20 73 71 6c 69 74 65 33 42 74 72 65 65 55 70 64   sqlite3BtreeUpd
1d000 61 74 65 4d 65 74 61 28 70 44 62 2d 3e 70 42 74  ateMeta(pDb->pBt
1d010 2c 20 70 4f 70 2d 3e 70 32 2c 20 70 4f 70 2d 3e  , pOp->p2, pOp->
1d020 70 33 29 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e  p3);.  if( pOp->
1d030 70 32 3d 3d 42 54 52 45 45 5f 53 43 48 45 4d 41  p2==BTREE_SCHEMA
1d040 5f 56 45 52 53 49 4f 4e 20 29 7b 0a 20 20 20 20  _VERSION ){.    
1d050 2f 2a 20 57 68 65 6e 20 74 68 65 20 73 63 68 65  /* When the sche
1d060 6d 61 20 63 6f 6f 6b 69 65 20 63 68 61 6e 67 65  ma cookie change
1d070 73 2c 20 72 65 63 6f 72 64 20 74 68 65 20 6e 65  s, record the ne
1d080 77 20 63 6f 6f 6b 69 65 20 69 6e 74 65 72 6e 61  w cookie interna
1d090 6c 6c 79 20 2a 2f 0a 20 20 20 20 70 44 62 2d 3e  lly */.    pDb->
1d0a0 70 53 63 68 65 6d 61 2d 3e 73 63 68 65 6d 61 5f  pSchema->schema_
1d0b0 63 6f 6f 6b 69 65 20 3d 20 70 4f 70 2d 3e 70 33  cookie = pOp->p3
1d0c0 3b 0a 20 20 20 20 64 62 2d 3e 6d 44 62 46 6c 61  ;.    db->mDbFla
1d0d0 67 73 20 7c 3d 20 44 42 46 4c 41 47 5f 53 63 68  gs |= DBFLAG_Sch
1d0e0 65 6d 61 43 68 61 6e 67 65 3b 0a 20 20 7d 65 6c  emaChange;.  }el
1d0f0 73 65 20 69 66 28 20 70 4f 70 2d 3e 70 32 3d 3d  se if( pOp->p2==
1d100 42 54 52 45 45 5f 46 49 4c 45 5f 46 4f 52 4d 41  BTREE_FILE_FORMA
1d110 54 20 29 7b 0a 20 20 20 20 2f 2a 20 52 65 63 6f  T ){.    /* Reco
1d120 72 64 20 63 68 61 6e 67 65 73 20 69 6e 20 74 68  rd changes in th
1d130 65 20 66 69 6c 65 20 66 6f 72 6d 61 74 20 2a 2f  e file format */
1d140 0a 20 20 20 20 70 44 62 2d 3e 70 53 63 68 65 6d  .    pDb->pSchem
1d150 61 2d 3e 66 69 6c 65 5f 66 6f 72 6d 61 74 20 3d  a->file_format =
1d160 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 7d 0a 20 20   pOp->p3;.  }.  
1d170 69 66 28 20 70 4f 70 2d 3e 70 31 3d 3d 31 20 29  if( pOp->p1==1 )
1d180 7b 0a 20 20 20 20 2f 2a 20 49 6e 76 61 6c 69 64  {.    /* Invalid
1d190 61 74 65 20 61 6c 6c 20 70 72 65 70 61 72 65 64  ate all prepared
1d1a0 20 73 74 61 74 65 6d 65 6e 74 73 20 77 68 65 6e   statements when
1d1b0 65 76 65 72 20 74 68 65 20 54 45 4d 50 20 64 61  ever the TEMP da
1d1c0 74 61 62 61 73 65 0a 20 20 20 20 2a 2a 20 73 63  tabase.    ** sc
1d1d0 68 65 6d 61 20 69 73 20 63 68 61 6e 67 65 64 2e  hema is changed.
1d1e0 20 20 54 69 63 6b 65 74 20 23 31 36 34 34 20 2a    Ticket #1644 *
1d1f0 2f 0a 20 20 20 20 73 71 6c 69 74 65 33 45 78 70  /.    sqlite3Exp
1d200 69 72 65 50 72 65 70 61 72 65 64 53 74 61 74 65  irePreparedState
1d210 6d 65 6e 74 73 28 64 62 2c 20 30 29 3b 0a 20 20  ments(db, 0);.  
1d220 20 20 70 2d 3e 65 78 70 69 72 65 64 20 3d 20 30    p->expired = 0
1d230 3b 0a 20 20 7d 0a 20 20 69 66 28 20 72 63 20 29  ;.  }.  if( rc )
1d240 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
1d250 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 62 72 65 61  to_error;.  brea
1d260 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
1d270 20 4f 70 65 6e 52 65 61 64 20 50 31 20 50 32 20   OpenRead P1 P2 
1d280 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f  P3 P4 P5.** Syno
1d290 70 73 69 73 3a 20 72 6f 6f 74 3d 50 32 20 69 44  psis: root=P2 iD
1d2a0 62 3d 50 33 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e 20  b=P3.**.** Open 
1d2b0 61 20 72 65 61 64 2d 6f 6e 6c 79 20 63 75 72 73  a read-only curs
1d2c0 6f 72 20 66 6f 72 20 74 68 65 20 64 61 74 61 62  or for the datab
1d2d0 61 73 65 20 74 61 62 6c 65 20 77 68 6f 73 65 20  ase table whose 
1d2e0 72 6f 6f 74 20 70 61 67 65 20 69 73 0a 2a 2a 20  root page is.** 
1d2f0 50 32 20 69 6e 20 61 20 64 61 74 61 62 61 73 65  P2 in a database
1d300 20 66 69 6c 65 2e 20 20 54 68 65 20 64 61 74 61   file.  The data
1d310 62 61 73 65 20 66 69 6c 65 20 69 73 20 64 65 74  base file is det
1d320 65 72 6d 69 6e 65 64 20 62 79 20 50 33 2e 20 0a  ermined by P3. .
1d330 2a 2a 20 50 33 3d 3d 30 20 6d 65 61 6e 73 20 74  ** P3==0 means t
1d340 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65  he main database
1d350 2c 20 50 33 3d 3d 31 20 6d 65 61 6e 73 20 74 68  , P3==1 means th
1d360 65 20 64 61 74 61 62 61 73 65 20 75 73 65 64 20  e database used 
1d370 66 6f 72 20 0a 2a 2a 20 74 65 6d 70 6f 72 61 72  for .** temporar
1d380 79 20 74 61 62 6c 65 73 2c 20 61 6e 64 20 50 33  y tables, and P3
1d390 3e 31 20 6d 65 61 6e 73 20 75 73 65 64 20 74 68  >1 means used th
1d3a0 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20  e corresponding 
1d3b0 61 74 74 61 63 68 65 64 0a 2a 2a 20 64 61 74 61  attached.** data
1d3c0 62 61 73 65 2e 20 20 47 69 76 65 20 74 68 65 20  base.  Give the 
1d3d0 6e 65 77 20 63 75 72 73 6f 72 20 61 6e 20 69 64  new cursor an id
1d3e0 65 6e 74 69 66 69 65 72 20 6f 66 20 50 31 2e 20  entifier of P1. 
1d3f0 20 54 68 65 20 50 31 0a 2a 2a 20 76 61 6c 75 65   The P1.** value
1d400 73 20 6e 65 65 64 20 6e 6f 74 20 62 65 20 63 6f  s need not be co
1d410 6e 74 69 67 75 6f 75 73 20 62 75 74 20 61 6c 6c  ntiguous but all
1d420 20 50 31 20 76 61 6c 75 65 73 20 73 68 6f 75 6c   P1 values shoul
1d430 64 20 62 65 20 73 6d 61 6c 6c 20 69 6e 74 65 67  d be small integ
1d440 65 72 73 2e 0a 2a 2a 20 49 74 20 69 73 20 61 6e  ers..** It is an
1d450 20 65 72 72 6f 72 20 66 6f 72 20 50 31 20 74 6f   error for P1 to
1d460 20 62 65 20 6e 65 67 61 74 69 76 65 2e 0a 2a 2a   be negative..**
1d470 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 50 35 20 62  .** Allowed P5 b
1d480 69 74 73 3a 0a 2a 2a 20 3c 75 6c 3e 0a 2a 2a 20  its:.** <ul>.** 
1d490 3c 6c 69 3e 20 20 3c 62 3e 30 78 30 32 20 4f 50  <li>  <b>0x02 OP
1d4a0 46 4c 41 47 5f 53 45 45 4b 45 51 3c 2f 62 3e 3a  FLAG_SEEKEQ</b>:
1d4b0 20 54 68 69 73 20 63 75 72 73 6f 72 20 77 69 6c   This cursor wil
1d4c0 6c 20 6f 6e 6c 79 20 62 65 20 75 73 65 64 20 66  l only be used f
1d4d0 6f 72 0a 2a 2a 20 20 20 20 20 20 20 65 71 75 61  or.**       equa
1d4e0 6c 69 74 79 20 6c 6f 6f 6b 75 70 73 20 28 69 6d  lity lookups (im
1d4f0 70 6c 65 6d 65 6e 74 65 64 20 61 73 20 61 20 70  plemented as a p
1d500 61 69 72 20 6f 66 20 6f 70 63 6f 64 65 73 20 4f  air of opcodes O
1d510 50 5f 53 65 65 6b 47 45 2f 4f 50 5f 49 64 78 47  P_SeekGE/OP_IdxG
1d520 54 0a 2a 2a 20 20 20 20 20 20 20 6f 66 20 4f 50  T.**       of OP
1d530 5f 53 65 65 6b 4c 45 2f 4f 50 5f 49 64 78 47 54  _SeekLE/OP_IdxGT
1d540 29 0a 2a 2a 20 3c 2f 75 6c 3e 0a 2a 2a 0a 2a 2a  ).** </ul>.**.**
1d550 20 54 68 65 20 50 34 20 76 61 6c 75 65 20 6d 61   The P4 value ma
1d560 79 20 62 65 20 65 69 74 68 65 72 20 61 6e 20 69  y be either an i
1d570 6e 74 65 67 65 72 20 28 50 34 5f 49 4e 54 33 32  nteger (P4_INT32
1d580 29 20 6f 72 20 61 20 70 6f 69 6e 74 65 72 20 74  ) or a pointer t
1d590 6f 0a 2a 2a 20 61 20 4b 65 79 49 6e 66 6f 20 73  o.** a KeyInfo s
1d5a0 74 72 75 63 74 75 72 65 20 28 50 34 5f 4b 45 59  tructure (P4_KEY
1d5b0 49 4e 46 4f 29 2e 20 49 66 20 69 74 20 69 73 20  INFO). If it is 
1d5c0 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 4b  a pointer to a K
1d5d0 65 79 49 6e 66 6f 20 0a 2a 2a 20 6f 62 6a 65 63  eyInfo .** objec
1d5e0 74 2c 20 74 68 65 6e 20 74 61 62 6c 65 20 62 65  t, then table be
1d5f0 69 6e 67 20 6f 70 65 6e 65 64 20 6d 75 73 74 20  ing opened must 
1d600 62 65 20 61 6e 20 5b 69 6e 64 65 78 20 62 2d 74  be an [index b-t
1d610 72 65 65 5d 20 77 68 65 72 65 20 74 68 65 0a 2a  ree] where the.*
1d620 2a 20 4b 65 79 49 6e 66 6f 20 6f 62 6a 65 63 74  * KeyInfo object
1d630 20 64 65 66 69 6e 65 73 20 74 68 65 20 63 6f 6e   defines the con
1d640 74 65 6e 74 20 61 6e 64 20 63 6f 6c 6c 61 74 69  tent and collati
1d650 6e 67 20 0a 2a 2a 20 73 65 71 75 65 6e 63 65 20  ng .** sequence 
1d660 6f 66 20 74 68 61 74 20 69 6e 64 65 78 20 62 2d  of that index b-
1d670 74 72 65 65 2e 20 4f 74 68 65 72 77 69 73 65 2c  tree. Otherwise,
1d680 20 69 66 20 50 34 20 69 73 20 61 6e 20 69 6e 74   if P4 is an int
1d690 65 67 65 72 20 0a 2a 2a 20 76 61 6c 75 65 2c 20  eger .** value, 
1d6a0 74 68 65 6e 20 74 68 65 20 74 61 62 6c 65 20 62  then the table b
1d6b0 65 69 6e 67 20 6f 70 65 6e 65 64 20 6d 75 73 74  eing opened must
1d6c0 20 62 65 20 61 20 5b 74 61 62 6c 65 20 62 2d 74   be a [table b-t
1d6d0 72 65 65 5d 20 77 69 74 68 20 61 0a 2a 2a 20 6e  ree] with a.** n
1d6e0 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73  umber of columns
1d6f0 20 6e 6f 20 6c 65 73 73 20 74 68 61 6e 20 74 68   no less than th
1d700 65 20 76 61 6c 75 65 20 6f 66 20 50 34 2e 0a 2a  e value of P4..*
1d710 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 4f  *.** See also: O
1d720 70 65 6e 57 72 69 74 65 2c 20 52 65 6f 70 65 6e  penWrite, Reopen
1d730 49 64 78 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65  Idx.*/./* Opcode
1d740 3a 20 52 65 6f 70 65 6e 49 64 78 20 50 31 20 50  : ReopenIdx P1 P
1d750 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79  2 P3 P4 P5.** Sy
1d760 6e 6f 70 73 69 73 3a 20 72 6f 6f 74 3d 50 32 20  nopsis: root=P2 
1d770 69 44 62 3d 50 33 0a 2a 2a 0a 2a 2a 20 54 68 65  iDb=P3.**.** The
1d780 20 52 65 6f 70 65 6e 49 64 78 20 6f 70 63 6f 64   ReopenIdx opcod
1d790 65 20 77 6f 72 6b 73 20 6c 69 6b 65 20 4f 50 5f  e works like OP_
1d7a0 4f 70 65 6e 52 65 61 64 20 65 78 63 65 70 74 20  OpenRead except 
1d7b0 74 68 61 74 20 69 74 20 66 69 72 73 74 0a 2a 2a  that it first.**
1d7c0 20 63 68 65 63 6b 73 20 74 6f 20 73 65 65 20 69   checks to see i
1d7d0 66 20 74 68 65 20 63 75 72 73 6f 72 20 6f 6e 20  f the cursor on 
1d7e0 50 31 20 69 73 20 61 6c 72 65 61 64 79 20 6f 70  P1 is already op
1d7f0 65 6e 20 6f 6e 20 74 68 65 20 73 61 6d 65 0a 2a  en on the same.*
1d800 2a 20 62 2d 74 72 65 65 20 61 6e 64 20 69 66 20  * b-tree and if 
1d810 69 74 20 69 73 20 74 68 69 73 20 6f 70 63 6f 64  it is this opcod
1d820 65 20 62 65 63 6f 6d 65 73 20 61 20 6e 6f 2d 6f  e becomes a no-o
1d830 70 2e 20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72  p.  In other wor
1d840 64 73 2c 0a 2a 2a 20 69 66 20 74 68 65 20 63 75  ds,.** if the cu
1d850 72 73 6f 72 20 69 73 20 61 6c 72 65 61 64 79 20  rsor is already 
1d860 6f 70 65 6e 2c 20 64 6f 20 6e 6f 74 20 72 65 6f  open, do not reo
1d870 70 65 6e 20 69 74 2e 0a 2a 2a 0a 2a 2a 20 54 68  pen it..**.** Th
1d880 65 20 52 65 6f 70 65 6e 49 64 78 20 6f 70 63 6f  e ReopenIdx opco
1d890 64 65 20 6d 61 79 20 6f 6e 6c 79 20 62 65 20 75  de may only be u
1d8a0 73 65 64 20 77 69 74 68 20 50 35 3d 3d 30 20 6f  sed with P5==0 o
1d8b0 72 20 50 35 3d 3d 4f 50 46 4c 41 47 5f 53 45 45  r P5==OPFLAG_SEE
1d8c0 4b 45 51 0a 2a 2a 20 61 6e 64 20 77 69 74 68 20  KEQ.** and with 
1d8d0 50 34 20 62 65 69 6e 67 20 61 20 50 34 5f 4b 45  P4 being a P4_KE
1d8e0 59 49 4e 46 4f 20 6f 62 6a 65 63 74 2e 20 20 46  YINFO object.  F
1d8f0 75 72 74 68 65 72 6d 6f 72 65 2c 20 74 68 65 20  urthermore, the 
1d900 50 33 20 76 61 6c 75 65 20 6d 75 73 74 0a 2a 2a  P3 value must.**
1d910 20 62 65 20 74 68 65 20 73 61 6d 65 20 61 73 20   be the same as 
1d920 65 76 65 72 79 20 6f 74 68 65 72 20 52 65 6f 70  every other Reop
1d930 65 6e 49 64 78 20 6f 72 20 4f 70 65 6e 52 65 61  enIdx or OpenRea
1d940 64 20 66 6f 72 20 74 68 65 20 73 61 6d 65 20 63  d for the same c
1d950 75 72 73 6f 72 0a 2a 2a 20 6e 75 6d 62 65 72 2e  ursor.** number.
1d960 0a 2a 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 50  .**.** Allowed P
1d970 35 20 62 69 74 73 3a 0a 2a 2a 20 3c 75 6c 3e 0a  5 bits:.** <ul>.
1d980 2a 2a 20 3c 6c 69 3e 20 20 3c 62 3e 30 78 30 32  ** <li>  <b>0x02
1d990 20 4f 50 46 4c 41 47 5f 53 45 45 4b 45 51 3c 2f   OPFLAG_SEEKEQ</
1d9a0 62 3e 3a 20 54 68 69 73 20 63 75 72 73 6f 72 20  b>: This cursor 
1d9b0 77 69 6c 6c 20 6f 6e 6c 79 20 62 65 20 75 73 65  will only be use
1d9c0 64 20 66 6f 72 0a 2a 2a 20 20 20 20 20 20 20 65  d for.**       e
1d9d0 71 75 61 6c 69 74 79 20 6c 6f 6f 6b 75 70 73 20  quality lookups 
1d9e0 28 69 6d 70 6c 65 6d 65 6e 74 65 64 20 61 73 20  (implemented as 
1d9f0 61 20 70 61 69 72 20 6f 66 20 6f 70 63 6f 64 65  a pair of opcode
1da00 73 20 4f 50 5f 53 65 65 6b 47 45 2f 4f 50 5f 49  s OP_SeekGE/OP_I
1da10 64 78 47 54 0a 2a 2a 20 20 20 20 20 20 20 6f 66  dxGT.**       of
1da20 20 4f 50 5f 53 65 65 6b 4c 45 2f 4f 50 5f 49 64   OP_SeekLE/OP_Id
1da30 78 47 54 29 0a 2a 2a 20 3c 2f 75 6c 3e 0a 2a 2a  xGT).** </ul>.**
1da40 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 4f 50  .** See also: OP
1da50 5f 4f 70 65 6e 52 65 61 64 2c 20 4f 50 5f 4f 70  _OpenRead, OP_Op
1da60 65 6e 57 72 69 74 65 0a 2a 2f 0a 2f 2a 20 4f 70  enWrite.*/./* Op
1da70 63 6f 64 65 3a 20 4f 70 65 6e 57 72 69 74 65 20  code: OpenWrite 
1da80 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a  P1 P2 P3 P4 P5.*
1da90 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 6f 6f 74  * Synopsis: root
1daa0 3d 50 32 20 69 44 62 3d 50 33 0a 2a 2a 0a 2a 2a  =P2 iDb=P3.**.**
1dab0 20 4f 70 65 6e 20 61 20 72 65 61 64 2f 77 72 69   Open a read/wri
1dac0 74 65 20 63 75 72 73 6f 72 20 6e 61 6d 65 64 20  te cursor named 
1dad0 50 31 20 6f 6e 20 74 68 65 20 74 61 62 6c 65 20  P1 on the table 
1dae0 6f 72 20 69 6e 64 65 78 20 77 68 6f 73 65 20 72  or index whose r
1daf0 6f 6f 74 0a 2a 2a 20 70 61 67 65 20 69 73 20 50  oot.** page is P
1db00 32 20 28 6f 72 20 77 68 6f 73 65 20 72 6f 6f 74  2 (or whose root
1db10 20 70 61 67 65 20 69 73 20 68 65 6c 64 20 69 6e   page is held in
1db20 20 72 65 67 69 73 74 65 72 20 50 32 20 69 66 20   register P2 if 
1db30 74 68 65 0a 2a 2a 20 4f 50 46 4c 41 47 5f 50 32  the.** OPFLAG_P2
1db40 49 53 52 45 47 20 62 69 74 20 69 73 20 73 65 74  ISREG bit is set
1db50 20 69 6e 20 50 35 20 2d 20 73 65 65 20 62 65 6c   in P5 - see bel
1db60 6f 77 29 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50  ow)..**.** The P
1db70 34 20 76 61 6c 75 65 20 6d 61 79 20 62 65 20 65  4 value may be e
1db80 69 74 68 65 72 20 61 6e 20 69 6e 74 65 67 65 72  ither an integer
1db90 20 28 50 34 5f 49 4e 54 33 32 29 20 6f 72 20 61   (P4_INT32) or a
1dba0 20 70 6f 69 6e 74 65 72 20 74 6f 0a 2a 2a 20 61   pointer to.** a
1dbb0 20 4b 65 79 49 6e 66 6f 20 73 74 72 75 63 74 75   KeyInfo structu
1dbc0 72 65 20 28 50 34 5f 4b 45 59 49 4e 46 4f 29 2e  re (P4_KEYINFO).
1dbd0 20 49 66 20 69 74 20 69 73 20 61 20 70 6f 69 6e   If it is a poin
1dbe0 74 65 72 20 74 6f 20 61 20 4b 65 79 49 6e 66 6f  ter to a KeyInfo
1dbf0 20 0a 2a 2a 20 6f 62 6a 65 63 74 2c 20 74 68 65   .** object, the
1dc00 6e 20 74 61 62 6c 65 20 62 65 69 6e 67 20 6f 70  n table being op
1dc10 65 6e 65 64 20 6d 75 73 74 20 62 65 20 61 6e 20  ened must be an 
1dc20 5b 69 6e 64 65 78 20 62 2d 74 72 65 65 5d 20 77  [index b-tree] w
1dc30 68 65 72 65 20 74 68 65 0a 2a 2a 20 4b 65 79 49  here the.** KeyI
1dc40 6e 66 6f 20 6f 62 6a 65 63 74 20 64 65 66 69 6e  nfo object defin
1dc50 65 73 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 61  es the content a
1dc60 6e 64 20 63 6f 6c 6c 61 74 69 6e 67 20 0a 2a 2a  nd collating .**
1dc70 20 73 65 71 75 65 6e 63 65 20 6f 66 20 74 68 61   sequence of tha
1dc80 74 20 69 6e 64 65 78 20 62 2d 74 72 65 65 2e 20  t index b-tree. 
1dc90 4f 74 68 65 72 77 69 73 65 2c 20 69 66 20 50 34  Otherwise, if P4
1dca0 20 69 73 20 61 6e 20 69 6e 74 65 67 65 72 20 0a   is an integer .
1dcb0 2a 2a 20 76 61 6c 75 65 2c 20 74 68 65 6e 20 74  ** value, then t
1dcc0 68 65 20 74 61 62 6c 65 20 62 65 69 6e 67 20 6f  he table being o
1dcd0 70 65 6e 65 64 20 6d 75 73 74 20 62 65 20 61 20  pened must be a 
1dce0 5b 74 61 62 6c 65 20 62 2d 74 72 65 65 5d 20 77  [table b-tree] w
1dcf0 69 74 68 20 61 0a 2a 2a 20 6e 75 6d 62 65 72 20  ith a.** number 
1dd00 6f 66 20 63 6f 6c 75 6d 6e 73 20 6e 6f 20 6c 65  of columns no le
1dd10 73 73 20 74 68 61 6e 20 74 68 65 20 76 61 6c 75  ss than the valu
1dd20 65 20 6f 66 20 50 34 2e 0a 2a 2a 0a 2a 2a 20 41  e of P4..**.** A
1dd30 6c 6c 6f 77 65 64 20 50 35 20 62 69 74 73 3a 0a  llowed P5 bits:.
1dd40 2a 2a 20 3c 75 6c 3e 0a 2a 2a 20 3c 6c 69 3e 20  ** <ul>.** <li> 
1dd50 20 3c 62 3e 30 78 30 32 20 4f 50 46 4c 41 47 5f   <b>0x02 OPFLAG_
1dd60 53 45 45 4b 45 51 3c 2f 62 3e 3a 20 54 68 69 73  SEEKEQ</b>: This
1dd70 20 63 75 72 73 6f 72 20 77 69 6c 6c 20 6f 6e 6c   cursor will onl
1dd80 79 20 62 65 20 75 73 65 64 20 66 6f 72 0a 2a 2a  y be used for.**
1dd90 20 20 20 20 20 20 20 65 71 75 61 6c 69 74 79 20         equality 
1dda0 6c 6f 6f 6b 75 70 73 20 28 69 6d 70 6c 65 6d 65  lookups (impleme
1ddb0 6e 74 65 64 20 61 73 20 61 20 70 61 69 72 20 6f  nted as a pair o
1ddc0 66 20 6f 70 63 6f 64 65 73 20 4f 50 5f 53 65 65  f opcodes OP_See
1ddd0 6b 47 45 2f 4f 50 5f 49 64 78 47 54 0a 2a 2a 20  kGE/OP_IdxGT.** 
1dde0 20 20 20 20 20 20 6f 66 20 4f 50 5f 53 65 65 6b        of OP_Seek
1ddf0 4c 45 2f 4f 50 5f 49 64 78 47 54 29 0a 2a 2a 20  LE/OP_IdxGT).** 
1de00 3c 6c 69 3e 20 20 3c 62 3e 30 78 30 38 20 4f 50  <li>  <b>0x08 OP
1de10 46 4c 41 47 5f 46 4f 52 44 45 4c 45 54 45 3c 2f  FLAG_FORDELETE</
1de20 62 3e 3a 20 54 68 69 73 20 63 75 72 73 6f 72 20  b>: This cursor 
1de30 69 73 20 75 73 65 64 20 6f 6e 6c 79 20 74 6f 20  is used only to 
1de40 73 65 65 6b 0a 2a 2a 20 20 20 20 20 20 20 61 6e  seek.**       an
1de50 64 20 73 75 62 73 65 71 75 65 6e 74 6c 79 20 64  d subsequently d
1de60 65 6c 65 74 65 20 65 6e 74 72 69 65 73 20 69 6e  elete entries in
1de70 20 61 6e 20 69 6e 64 65 78 20 62 74 72 65 65 2e   an index btree.
1de80 20 20 54 68 69 73 20 69 73 20 61 0a 2a 2a 20 20    This is a.**  
1de90 20 20 20 20 20 68 69 6e 74 20 74 6f 20 74 68 65       hint to the
1dea0 20 73 74 6f 72 61 67 65 20 65 6e 67 69 6e 65 20   storage engine 
1deb0 74 68 61 74 20 74 68 65 20 73 74 6f 72 61 67 65  that the storage
1dec0 20 65 6e 67 69 6e 65 20 69 73 20 61 6c 6c 6f 77   engine is allow
1ded0 65 64 20 74 6f 0a 2a 2a 20 20 20 20 20 20 20 69  ed to.**       i
1dee0 67 6e 6f 72 65 2e 20 20 54 68 65 20 68 69 6e 74  gnore.  The hint
1def0 20 69 73 20 6e 6f 74 20 75 73 65 64 20 62 79 20   is not used by 
1df00 74 68 65 20 6f 66 66 69 63 69 61 6c 20 53 51 4c  the official SQL
1df10 69 74 65 20 62 2a 74 72 65 65 20 73 74 6f 72 61  ite b*tree stora
1df20 67 65 0a 2a 2a 20 20 20 20 20 20 20 65 6e 67 69  ge.**       engi
1df30 6e 65 2c 20 62 75 74 20 69 73 20 75 73 65 64 20  ne, but is used 
1df40 62 79 20 43 4f 4d 44 42 32 2e 0a 2a 2a 20 3c 6c  by COMDB2..** <l
1df50 69 3e 20 20 3c 62 3e 30 78 31 30 20 4f 50 46 4c  i>  <b>0x10 OPFL
1df60 41 47 5f 50 32 49 53 52 45 47 3c 2f 62 3e 3a 20  AG_P2ISREG</b>: 
1df70 55 73 65 20 74 68 65 20 63 6f 6e 74 65 6e 74 20  Use the content 
1df80 6f 66 20 72 65 67 69 73 74 65 72 20 50 32 0a 2a  of register P2.*
1df90 2a 20 20 20 20 20 20 20 61 73 20 74 68 65 20 72  *       as the r
1dfa0 6f 6f 74 20 70 61 67 65 2c 20 6e 6f 74 20 74 68  oot page, not th
1dfb0 65 20 76 61 6c 75 65 20 6f 66 20 50 32 20 69 74  e value of P2 it
1dfc0 73 65 6c 66 2e 0a 2a 2a 20 3c 2f 75 6c 3e 0a 2a  self..** </ul>.*
1dfd0 2a 0a 2a 2a 20 54 68 69 73 20 69 6e 73 74 72 75  *.** This instru
1dfe0 63 74 69 6f 6e 20 77 6f 72 6b 73 20 6c 69 6b 65  ction works like
1dff0 20 4f 70 65 6e 52 65 61 64 20 65 78 63 65 70 74   OpenRead except
1e000 20 74 68 61 74 20 69 74 20 6f 70 65 6e 73 20 74   that it opens t
1e010 68 65 20 63 75 72 73 6f 72 0a 2a 2a 20 69 6e 20  he cursor.** in 
1e020 72 65 61 64 2f 77 72 69 74 65 20 6d 6f 64 65 2e  read/write mode.
1e030 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a  .**.** See also:
1e040 20 4f 50 5f 4f 70 65 6e 52 65 61 64 2c 20 4f 50   OP_OpenRead, OP
1e050 5f 52 65 6f 70 65 6e 49 64 78 0a 2a 2f 0a 63 61  _ReopenIdx.*/.ca
1e060 73 65 20 4f 50 5f 52 65 6f 70 65 6e 49 64 78 3a  se OP_ReopenIdx:
1e070 20 7b 0a 20 20 69 6e 74 20 6e 46 69 65 6c 64 3b   {.  int nField;
1e080 0a 20 20 4b 65 79 49 6e 66 6f 20 2a 70 4b 65 79  .  KeyInfo *pKey
1e090 49 6e 66 6f 3b 0a 20 20 69 6e 74 20 70 32 3b 0a  Info;.  int p2;.
1e0a0 20 20 69 6e 74 20 69 44 62 3b 0a 20 20 69 6e 74    int iDb;.  int
1e0b0 20 77 72 46 6c 61 67 3b 0a 20 20 42 74 72 65 65   wrFlag;.  Btree
1e0c0 20 2a 70 58 3b 0a 20 20 56 64 62 65 43 75 72 73   *pX;.  VdbeCurs
1e0d0 6f 72 20 2a 70 43 75 72 3b 0a 20 20 44 62 20 2a  or *pCur;.  Db *
1e0e0 70 44 62 3b 0a 0a 20 20 61 73 73 65 72 74 28 20  pDb;..  assert( 
1e0f0 70 4f 70 2d 3e 70 35 3d 3d 30 20 7c 7c 20 70 4f  pOp->p5==0 || pO
1e100 70 2d 3e 70 35 3d 3d 4f 50 46 4c 41 47 5f 53 45  p->p5==OPFLAG_SE
1e110 45 4b 45 51 20 29 3b 0a 20 20 61 73 73 65 72 74  EKEQ );.  assert
1e120 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50  ( pOp->p4type==P
1e130 34 5f 4b 45 59 49 4e 46 4f 20 29 3b 0a 20 20 70  4_KEYINFO );.  p
1e140 43 75 72 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70  Cur = p->apCsr[p
1e150 4f 70 2d 3e 70 31 5d 3b 0a 20 20 69 66 28 20 70  Op->p1];.  if( p
1e160 43 75 72 20 26 26 20 70 43 75 72 2d 3e 70 67 6e  Cur && pCur->pgn
1e170 6f 52 6f 6f 74 3d 3d 28 75 33 32 29 70 4f 70 2d  oRoot==(u32)pOp-
1e180 3e 70 32 20 29 7b 0a 20 20 20 20 61 73 73 65 72  >p2 ){.    asser
1e190 74 28 20 70 43 75 72 2d 3e 69 44 62 3d 3d 70 4f  t( pCur->iDb==pO
1e1a0 70 2d 3e 70 33 20 29 3b 20 20 20 20 20 20 2f 2a  p->p3 );      /*
1e1b0 20 47 75 61 72 61 6e 74 65 65 64 20 62 79 20 74   Guaranteed by t
1e1c0 68 65 20 63 6f 64 65 20 67 65 6e 65 72 61 74 6f  he code generato
1e1d0 72 20 2a 2f 0a 20 20 20 20 67 6f 74 6f 20 6f 70  r */.    goto op
1e1e0 65 6e 5f 63 75 72 73 6f 72 5f 73 65 74 5f 68 69  en_cursor_set_hi
1e1f0 6e 74 73 3b 0a 20 20 7d 0a 20 20 2f 2a 20 49 66  nts;.  }.  /* If
1e200 20 74 68 65 20 63 75 72 73 6f 72 20 69 73 20 6e   the cursor is n
1e210 6f 74 20 63 75 72 72 65 6e 74 6c 79 20 6f 70 65  ot currently ope
1e220 6e 20 6f 72 20 69 73 20 6f 70 65 6e 20 6f 6e 20  n or is open on 
1e230 61 20 64 69 66 66 65 72 65 6e 74 0a 20 20 2a 2a  a different.  **
1e240 20 69 6e 64 65 78 2c 20 74 68 65 6e 20 66 61 6c   index, then fal
1e250 6c 20 74 68 72 6f 75 67 68 20 69 6e 74 6f 20 4f  l through into O
1e260 50 5f 4f 70 65 6e 52 65 61 64 20 74 6f 20 66 6f  P_OpenRead to fo
1e270 72 63 65 20 61 20 72 65 6f 70 65 6e 20 2a 2f 0a  rce a reopen */.
1e280 63 61 73 65 20 4f 50 5f 4f 70 65 6e 52 65 61 64  case OP_OpenRead
1e290 3a 0a 63 61 73 65 20 4f 50 5f 4f 70 65 6e 57 72  :.case OP_OpenWr
1e2a0 69 74 65 3a 0a 0a 20 20 61 73 73 65 72 74 28 20  ite:..  assert( 
1e2b0 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  pOp->opcode==OP_
1e2c0 4f 70 65 6e 57 72 69 74 65 20 7c 7c 20 70 4f 70  OpenWrite || pOp
1e2d0 2d 3e 70 35 3d 3d 30 20 7c 7c 20 70 4f 70 2d 3e  ->p5==0 || pOp->
1e2e0 70 35 3d 3d 4f 50 46 4c 41 47 5f 53 45 45 4b 45  p5==OPFLAG_SEEKE
1e2f0 51 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  Q );.  assert( p
1e300 2d 3e 62 49 73 52 65 61 64 65 72 20 29 3b 0a 20  ->bIsReader );. 
1e310 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70   assert( pOp->op
1e320 63 6f 64 65 3d 3d 4f 50 5f 4f 70 65 6e 52 65 61  code==OP_OpenRea
1e330 64 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65  d || pOp->opcode
1e340 3d 3d 4f 50 5f 52 65 6f 70 65 6e 49 64 78 0a 20  ==OP_ReopenIdx. 
1e350 20 20 20 20 20 20 20 20 20 7c 7c 20 70 2d 3e 72           || p->r
1e360 65 61 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 0a 20  eadOnly==0 );.. 
1e370 20 69 66 28 20 70 2d 3e 65 78 70 69 72 65 64 3d   if( p->expired=
1e380 3d 31 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 53  =1 ){.    rc = S
1e390 51 4c 49 54 45 5f 41 42 4f 52 54 5f 52 4f 4c 4c  QLITE_ABORT_ROLL
1e3a0 42 41 43 4b 3b 0a 20 20 20 20 67 6f 74 6f 20 61  BACK;.    goto a
1e3b0 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
1e3c0 72 3b 0a 20 20 7d 0a 0a 20 20 6e 46 69 65 6c 64  r;.  }..  nField
1e3d0 20 3d 20 30 3b 0a 20 20 70 4b 65 79 49 6e 66 6f   = 0;.  pKeyInfo
1e3e0 20 3d 20 30 3b 0a 20 20 70 32 20 3d 20 70 4f 70   = 0;.  p2 = pOp
1e3f0 2d 3e 70 32 3b 0a 20 20 69 44 62 20 3d 20 70 4f  ->p2;.  iDb = pO
1e400 70 2d 3e 70 33 3b 0a 20 20 61 73 73 65 72 74 28  p->p3;.  assert(
1e410 20 69 44 62 3e 3d 30 20 26 26 20 69 44 62 3c 64   iDb>=0 && iDb<d
1e420 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73 65  b->nDb );.  asse
1e430 72 74 28 20 44 62 4d 61 73 6b 54 65 73 74 28 70  rt( DbMaskTest(p
1e440 2d 3e 62 74 72 65 65 4d 61 73 6b 2c 20 69 44 62  ->btreeMask, iDb
1e450 29 20 29 3b 0a 20 20 70 44 62 20 3d 20 26 64 62  ) );.  pDb = &db
1e460 2d 3e 61 44 62 5b 69 44 62 5d 3b 0a 20 20 70 58  ->aDb[iDb];.  pX
1e470 20 3d 20 70 44 62 2d 3e 70 42 74 3b 0a 20 20 61   = pDb->pBt;.  a
1e480 73 73 65 72 74 28 20 70 58 21 3d 30 20 29 3b 0a  ssert( pX!=0 );.
1e490 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64    if( pOp->opcod
1e4a0 65 3d 3d 4f 50 5f 4f 70 65 6e 57 72 69 74 65 20  e==OP_OpenWrite 
1e4b0 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 4f  ){.    assert( O
1e4c0 50 46 4c 41 47 5f 46 4f 52 44 45 4c 45 54 45 3d  PFLAG_FORDELETE=
1e4d0 3d 42 54 52 45 45 5f 46 4f 52 44 45 4c 45 54 45  =BTREE_FORDELETE
1e4e0 20 29 3b 0a 20 20 20 20 77 72 46 6c 61 67 20 3d   );.    wrFlag =
1e4f0 20 42 54 52 45 45 5f 57 52 43 53 52 20 7c 20 28   BTREE_WRCSR | (
1e500 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47  pOp->p5 & OPFLAG
1e510 5f 46 4f 52 44 45 4c 45 54 45 29 3b 0a 20 20 20  _FORDELETE);.   
1e520 20 61 73 73 65 72 74 28 20 73 71 6c 69 74 65 33   assert( sqlite3
1e530 53 63 68 65 6d 61 4d 75 74 65 78 48 65 6c 64 28  SchemaMutexHeld(
1e540 64 62 2c 20 69 44 62 2c 20 30 29 20 29 3b 0a 20  db, iDb, 0) );. 
1e550 20 20 20 69 66 28 20 70 44 62 2d 3e 70 53 63 68     if( pDb->pSch
1e560 65 6d 61 2d 3e 66 69 6c 65 5f 66 6f 72 6d 61 74  ema->file_format
1e570 20 3c 20 70 2d 3e 6d 69 6e 57 72 69 74 65 46 69   < p->minWriteFi
1e580 6c 65 46 6f 72 6d 61 74 20 29 7b 0a 20 20 20 20  leFormat ){.    
1e590 20 20 70 2d 3e 6d 69 6e 57 72 69 74 65 46 69 6c    p->minWriteFil
1e5a0 65 46 6f 72 6d 61 74 20 3d 20 70 44 62 2d 3e 70  eFormat = pDb->p
1e5b0 53 63 68 65 6d 61 2d 3e 66 69 6c 65 5f 66 6f 72  Schema->file_for
1e5c0 6d 61 74 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c  mat;.    }.  }el
1e5d0 73 65 7b 0a 20 20 20 20 77 72 46 6c 61 67 20 3d  se{.    wrFlag =
1e5e0 20 30 3b 0a 20 20 7d 0a 20 20 69 66 28 20 70 4f   0;.  }.  if( pO
1e5f0 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 50  p->p5 & OPFLAG_P
1e600 32 49 53 52 45 47 20 29 7b 0a 20 20 20 20 61 73  2ISREG ){.    as
1e610 73 65 72 74 28 20 70 32 3e 30 20 29 3b 0a 20 20  sert( p2>0 );.  
1e620 20 20 61 73 73 65 72 74 28 20 70 32 3c 3d 28 70    assert( p2<=(p
1e630 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43  ->nMem+1 - p->nC
1e640 75 72 73 6f 72 29 20 29 3b 0a 20 20 20 20 61 73  ursor) );.    as
1e650 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64  sert( pOp->opcod
1e660 65 3d 3d 4f 50 5f 4f 70 65 6e 57 72 69 74 65 20  e==OP_OpenWrite 
1e670 29 3b 0a 20 20 20 20 70 49 6e 32 20 3d 20 26 61  );.    pIn2 = &a
1e680 4d 65 6d 5b 70 32 5d 3b 0a 20 20 20 20 61 73 73  Mem[p2];.    ass
1e690 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28  ert( memIsValid(
1e6a0 70 49 6e 32 29 20 29 3b 0a 20 20 20 20 61 73 73  pIn2) );.    ass
1e6b0 65 72 74 28 20 28 70 49 6e 32 2d 3e 66 6c 61 67  ert( (pIn2->flag
1e6c0 73 20 26 20 4d 45 4d 5f 49 6e 74 29 21 3d 30 20  s & MEM_Int)!=0 
1e6d0 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  );.    sqlite3Vd
1e6e0 62 65 4d 65 6d 49 6e 74 65 67 65 72 69 66 79 28  beMemIntegerify(
1e6f0 70 49 6e 32 29 3b 0a 20 20 20 20 70 32 20 3d 20  pIn2);.    p2 = 
1e700 28 69 6e 74 29 70 49 6e 32 2d 3e 75 2e 69 3b 0a  (int)pIn2->u.i;.
1e710 20 20 20 20 2f 2a 20 54 68 65 20 70 32 20 76 61      /* The p2 va
1e720 6c 75 65 20 61 6c 77 61 79 73 20 63 6f 6d 65 73  lue always comes
1e730 20 66 72 6f 6d 20 61 20 70 72 69 6f 72 20 4f 50   from a prior OP
1e740 5f 43 72 65 61 74 65 42 74 72 65 65 20 6f 70 63  _CreateBtree opc
1e750 6f 64 65 20 61 6e 64 0a 20 20 20 20 2a 2a 20 74  ode and.    ** t
1e760 68 61 74 20 6f 70 63 6f 64 65 20 77 69 6c 6c 20  hat opcode will 
1e770 61 6c 77 61 79 73 20 73 65 74 20 74 68 65 20 70  always set the p
1e780 32 20 76 61 6c 75 65 20 74 6f 20 32 20 6f 72 20  2 value to 2 or 
1e790 6d 6f 72 65 20 6f 72 20 65 6c 73 65 20 66 61 69  more or else fai
1e7a0 6c 2e 0a 20 20 20 20 2a 2a 20 49 66 20 74 68 65  l..    ** If the
1e7b0 72 65 20 77 65 72 65 20 61 20 66 61 69 6c 75 72  re were a failur
1e7c0 65 2c 20 74 68 65 20 70 72 65 70 61 72 65 64 20  e, the prepared 
1e7d0 73 74 61 74 65 6d 65 6e 74 20 77 6f 75 6c 64 20  statement would 
1e7e0 68 61 76 65 20 68 61 6c 74 65 64 0a 20 20 20 20  have halted.    
1e7f0 2a 2a 20 62 65 66 6f 72 65 20 72 65 61 63 68 69  ** before reachi
1e800 6e 67 20 74 68 69 73 20 69 6e 73 74 72 75 63 74  ng this instruct
1e810 69 6f 6e 2e 20 2a 2f 0a 20 20 20 20 61 73 73 65  ion. */.    asse
1e820 72 74 28 20 70 32 3e 3d 32 20 29 3b 0a 20 20 7d  rt( p2>=2 );.  }
1e830 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 34 74 79  .  if( pOp->p4ty
1e840 70 65 3d 3d 50 34 5f 4b 45 59 49 4e 46 4f 20 29  pe==P4_KEYINFO )
1e850 7b 0a 20 20 20 20 70 4b 65 79 49 6e 66 6f 20 3d  {.    pKeyInfo =
1e860 20 70 4f 70 2d 3e 70 34 2e 70 4b 65 79 49 6e 66   pOp->p4.pKeyInf
1e870 6f 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  o;.    assert( p
1e880 4b 65 79 49 6e 66 6f 2d 3e 65 6e 63 3d 3d 45 4e  KeyInfo->enc==EN
1e890 43 28 64 62 29 20 29 3b 0a 20 20 20 20 61 73 73  C(db) );.    ass
1e8a0 65 72 74 28 20 70 4b 65 79 49 6e 66 6f 2d 3e 64  ert( pKeyInfo->d
1e8b0 62 3d 3d 64 62 20 29 3b 0a 20 20 20 20 6e 46 69  b==db );.    nFi
1e8c0 65 6c 64 20 3d 20 70 4b 65 79 49 6e 66 6f 2d 3e  eld = pKeyInfo->
1e8d0 6e 41 6c 6c 46 69 65 6c 64 3b 0a 20 20 7d 65 6c  nAllField;.  }el
1e8e0 73 65 20 69 66 28 20 70 4f 70 2d 3e 70 34 74 79  se if( pOp->p4ty
1e8f0 70 65 3d 3d 50 34 5f 49 4e 54 33 32 20 29 7b 0a  pe==P4_INT32 ){.
1e900 20 20 20 20 6e 46 69 65 6c 64 20 3d 20 70 4f 70      nField = pOp
1e910 2d 3e 70 34 2e 69 3b 0a 20 20 7d 0a 20 20 61 73  ->p4.i;.  }.  as
1e920 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30  sert( pOp->p1>=0
1e930 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 6e 46   );.  assert( nF
1e940 69 65 6c 64 3e 3d 30 20 29 3b 0a 20 20 74 65 73  ield>=0 );.  tes
1e950 74 63 61 73 65 28 20 6e 46 69 65 6c 64 3d 3d 30  tcase( nField==0
1e960 20 29 3b 20 20 2f 2a 20 54 61 62 6c 65 20 77 69   );  /* Table wi
1e970 74 68 20 49 4e 54 45 47 45 52 20 50 52 49 4d 41  th INTEGER PRIMA
1e980 52 59 20 4b 45 59 20 61 6e 64 20 6e 6f 74 68 69  RY KEY and nothi
1e990 6e 67 20 65 6c 73 65 20 2a 2f 0a 20 20 70 43 75  ng else */.  pCu
1e9a0 72 20 3d 20 61 6c 6c 6f 63 61 74 65 43 75 72 73  r = allocateCurs
1e9b0 6f 72 28 70 2c 20 70 4f 70 2d 3e 70 31 2c 20 6e  or(p, pOp->p1, n
1e9c0 46 69 65 6c 64 2c 20 69 44 62 2c 20 43 55 52 54  Field, iDb, CURT
1e9d0 59 50 45 5f 42 54 52 45 45 29 3b 0a 20 20 69 66  YPE_BTREE);.  if
1e9e0 28 20 70 43 75 72 3d 3d 30 20 29 20 67 6f 74 6f  ( pCur==0 ) goto
1e9f0 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 70 43 75 72 2d   no_mem;.  pCur-
1ea00 3e 6e 75 6c 6c 52 6f 77 20 3d 20 31 3b 0a 20 20  >nullRow = 1;.  
1ea10 70 43 75 72 2d 3e 69 73 4f 72 64 65 72 65 64 20  pCur->isOrdered 
1ea20 3d 20 31 3b 0a 20 20 70 43 75 72 2d 3e 70 67 6e  = 1;.  pCur->pgn
1ea30 6f 52 6f 6f 74 20 3d 20 70 32 3b 0a 23 69 66 64  oRoot = p2;.#ifd
1ea40 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a  ef SQLITE_DEBUG.
1ea50 20 20 70 43 75 72 2d 3e 77 72 46 6c 61 67 20 3d    pCur->wrFlag =
1ea60 20 77 72 46 6c 61 67 3b 0a 23 65 6e 64 69 66 0a   wrFlag;.#endif.
1ea70 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
1ea80 72 65 65 43 75 72 73 6f 72 28 70 58 2c 20 70 32  reeCursor(pX, p2
1ea90 2c 20 77 72 46 6c 61 67 2c 20 70 4b 65 79 49 6e  , wrFlag, pKeyIn
1eaa0 66 6f 2c 20 70 43 75 72 2d 3e 75 63 2e 70 43 75  fo, pCur->uc.pCu
1eab0 72 73 6f 72 29 3b 0a 20 20 70 43 75 72 2d 3e 70  rsor);.  pCur->p
1eac0 4b 65 79 49 6e 66 6f 20 3d 20 70 4b 65 79 49 6e  KeyInfo = pKeyIn
1ead0 66 6f 3b 0a 20 20 2f 2a 20 53 65 74 20 74 68 65  fo;.  /* Set the
1eae0 20 56 64 62 65 43 75 72 73 6f 72 2e 69 73 54 61   VdbeCursor.isTa
1eaf0 62 6c 65 20 76 61 72 69 61 62 6c 65 2e 20 50 72  ble variable. Pr
1eb00 65 76 69 6f 75 73 20 76 65 72 73 69 6f 6e 73 20  evious versions 
1eb10 6f 66 0a 20 20 2a 2a 20 53 51 4c 69 74 65 20 75  of.  ** SQLite u
1eb20 73 65 64 20 74 6f 20 63 68 65 63 6b 20 69 66 20  sed to check if 
1eb30 74 68 65 20 72 6f 6f 74 2d 70 61 67 65 20 66 6c  the root-page fl
1eb40 61 67 73 20 77 65 72 65 20 73 61 6e 65 20 61 74  ags were sane at
1eb50 20 74 68 69 73 20 70 6f 69 6e 74 0a 20 20 2a 2a   this point.  **
1eb60 20 61 6e 64 20 72 65 70 6f 72 74 20 64 61 74 61   and report data
1eb70 62 61 73 65 20 63 6f 72 72 75 70 74 69 6f 6e 20  base corruption 
1eb80 69 66 20 74 68 65 79 20 77 65 72 65 20 6e 6f 74  if they were not
1eb90 2c 20 62 75 74 20 74 68 69 73 20 63 68 65 63 6b  , but this check
1eba0 20 68 61 73 0a 20 20 2a 2a 20 73 69 6e 63 65 20   has.  ** since 
1ebb0 6d 6f 76 65 64 20 69 6e 74 6f 20 74 68 65 20 62  moved into the b
1ebc0 74 72 65 65 20 6c 61 79 65 72 2e 20 20 2a 2f 20  tree layer.  */ 
1ebd0 20 0a 20 20 70 43 75 72 2d 3e 69 73 54 61 62 6c   .  pCur->isTabl
1ebe0 65 20 3d 20 70 4f 70 2d 3e 70 34 74 79 70 65 21  e = pOp->p4type!
1ebf0 3d 50 34 5f 4b 45 59 49 4e 46 4f 3b 0a 0a 6f 70  =P4_KEYINFO;..op
1ec00 65 6e 5f 63 75 72 73 6f 72 5f 73 65 74 5f 68 69  en_cursor_set_hi
1ec10 6e 74 73 3a 0a 20 20 61 73 73 65 72 74 28 20 4f  nts:.  assert( O
1ec20 50 46 4c 41 47 5f 42 55 4c 4b 43 53 52 3d 3d 42  PFLAG_BULKCSR==B
1ec30 54 52 45 45 5f 42 55 4c 4b 4c 4f 41 44 20 29 3b  TREE_BULKLOAD );
1ec40 0a 20 20 61 73 73 65 72 74 28 20 4f 50 46 4c 41  .  assert( OPFLA
1ec50 47 5f 53 45 45 4b 45 51 3d 3d 42 54 52 45 45 5f  G_SEEKEQ==BTREE_
1ec60 53 45 45 4b 5f 45 51 20 29 3b 0a 20 20 74 65 73  SEEK_EQ );.  tes
1ec70 74 63 61 73 65 28 20 70 4f 70 2d 3e 70 35 20 26  tcase( pOp->p5 &
1ec80 20 4f 50 46 4c 41 47 5f 42 55 4c 4b 43 53 52 20   OPFLAG_BULKCSR 
1ec90 29 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  );.#ifdef SQLITE
1eca0 5f 45 4e 41 42 4c 45 5f 43 55 52 53 4f 52 5f 48  _ENABLE_CURSOR_H
1ecb0 49 4e 54 53 0a 20 20 74 65 73 74 63 61 73 65 28  INTS.  testcase(
1ecc0 20 70 4f 70 2d 3e 70 32 20 26 20 4f 50 46 4c 41   pOp->p2 & OPFLA
1ecd0 47 5f 53 45 45 4b 45 51 20 29 3b 0a 23 65 6e 64  G_SEEKEQ );.#end
1ece0 69 66 0a 20 20 73 71 6c 69 74 65 33 42 74 72 65  if.  sqlite3Btre
1ecf0 65 43 75 72 73 6f 72 48 69 6e 74 46 6c 61 67 73  eCursorHintFlags
1ed00 28 70 43 75 72 2d 3e 75 63 2e 70 43 75 72 73 6f  (pCur->uc.pCurso
1ed10 72 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  r,.             
1ed20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ed30 20 20 28 70 4f 70 2d 3e 70 35 20 26 20 28 4f 50    (pOp->p5 & (OP
1ed40 46 4c 41 47 5f 42 55 4c 4b 43 53 52 7c 4f 50 46  FLAG_BULKCSR|OPF
1ed50 4c 41 47 5f 53 45 45 4b 45 51 29 29 29 3b 0a 20  LAG_SEEKEQ)));. 
1ed60 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61   if( rc ) goto a
1ed70 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
1ed80 72 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  r;.  break;.}../
1ed90 2a 20 4f 70 63 6f 64 65 3a 20 4f 70 65 6e 44 75  * Opcode: OpenDu
1eda0 70 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  p P1 P2 * * *.**
1edb0 0a 2a 2a 20 4f 70 65 6e 20 61 20 6e 65 77 20 63  .** Open a new c
1edc0 75 72 73 6f 72 20 50 31 20 74 68 61 74 20 70 6f  ursor P1 that po
1edd0 69 6e 74 73 20 74 6f 20 74 68 65 20 73 61 6d 65  ints to the same
1ede0 20 65 70 68 65 6d 65 72 61 6c 20 74 61 62 6c 65   ephemeral table
1edf0 20 61 73 0a 2a 2a 20 63 75 72 73 6f 72 20 50 32   as.** cursor P2
1ee00 2e 20 20 54 68 65 20 50 32 20 63 75 72 73 6f 72  .  The P2 cursor
1ee10 20 6d 75 73 74 20 68 61 76 65 20 62 65 65 6e 20   must have been 
1ee20 6f 70 65 6e 65 64 20 62 79 20 61 20 70 72 69 6f  opened by a prio
1ee30 72 20 4f 50 5f 4f 70 65 6e 45 70 68 65 6d 65 72  r OP_OpenEphemer
1ee40 61 6c 0a 2a 2a 20 6f 70 63 6f 64 65 2e 20 20 4f  al.** opcode.  O
1ee50 6e 6c 79 20 65 70 68 65 6d 65 72 61 6c 20 63 75  nly ephemeral cu
1ee60 72 73 6f 72 73 20 6d 61 79 20 62 65 20 64 75 70  rsors may be dup
1ee70 6c 69 63 61 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 44  licated..**.** D
1ee80 75 70 6c 69 63 61 74 65 20 65 70 68 65 6d 65 72  uplicate ephemer
1ee90 61 6c 20 63 75 72 73 6f 72 73 20 61 72 65 20 75  al cursors are u
1eea0 73 65 64 20 66 6f 72 20 73 65 6c 66 2d 6a 6f 69  sed for self-joi
1eeb0 6e 73 20 6f 66 20 6d 61 74 65 72 69 61 6c 69 7a  ns of materializ
1eec0 65 64 20 76 69 65 77 73 2e 0a 2a 2f 0a 63 61 73  ed views..*/.cas
1eed0 65 20 4f 50 5f 4f 70 65 6e 44 75 70 3a 20 7b 0a  e OP_OpenDup: {.
1eee0 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 4f    VdbeCursor *pO
1eef0 72 69 67 3b 20 20 20 20 2f 2a 20 54 68 65 20 6f  rig;    /* The o
1ef00 72 69 67 69 6e 61 6c 20 63 75 72 73 6f 72 20 74  riginal cursor t
1ef10 6f 20 62 65 20 64 75 70 6c 69 63 61 74 65 64 20  o be duplicated 
1ef20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20  */.  VdbeCursor 
1ef30 2a 70 43 78 3b 20 20 20 20 20 20 2f 2a 20 54 68  *pCx;      /* Th
1ef40 65 20 6e 65 77 20 63 75 72 73 6f 72 20 2a 2f 0a  e new cursor */.
1ef50 0a 20 20 70 4f 72 69 67 20 3d 20 70 2d 3e 61 70  .  pOrig = p->ap
1ef60 43 73 72 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20  Csr[pOp->p2];.  
1ef70 61 73 73 65 72 74 28 20 70 4f 72 69 67 2d 3e 70  assert( pOrig->p
1ef80 42 74 78 21 3d 30 20 29 3b 20 20 2f 2a 20 4f 6e  Btx!=0 );  /* On
1ef90 6c 79 20 65 70 68 65 6d 65 72 61 6c 20 63 75 72  ly ephemeral cur
1efa0 73 6f 72 73 20 63 61 6e 20 62 65 20 64 75 70 6c  sors can be dupl
1efb0 69 63 61 74 65 64 20 2a 2f 0a 0a 20 20 70 43 78  icated */..  pCx
1efc0 20 3d 20 61 6c 6c 6f 63 61 74 65 43 75 72 73 6f   = allocateCurso
1efd0 72 28 70 2c 20 70 4f 70 2d 3e 70 31 2c 20 70 4f  r(p, pOp->p1, pO
1efe0 72 69 67 2d 3e 6e 46 69 65 6c 64 2c 20 2d 31 2c  rig->nField, -1,
1eff0 20 43 55 52 54 59 50 45 5f 42 54 52 45 45 29 3b   CURTYPE_BTREE);
1f000 0a 20 20 69 66 28 20 70 43 78 3d 3d 30 20 29 20  .  if( pCx==0 ) 
1f010 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 70  goto no_mem;.  p
1f020 43 78 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 31 3b  Cx->nullRow = 1;
1f030 0a 20 20 70 43 78 2d 3e 69 73 45 70 68 65 6d 65  .  pCx->isEpheme
1f040 72 61 6c 20 3d 20 31 3b 0a 20 20 70 43 78 2d 3e  ral = 1;.  pCx->
1f050 70 4b 65 79 49 6e 66 6f 20 3d 20 70 4f 72 69 67  pKeyInfo = pOrig
1f060 2d 3e 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 70 43  ->pKeyInfo;.  pC
1f070 78 2d 3e 69 73 54 61 62 6c 65 20 3d 20 70 4f 72  x->isTable = pOr
1f080 69 67 2d 3e 69 73 54 61 62 6c 65 3b 0a 20 20 70  ig->isTable;.  p
1f090 43 78 2d 3e 70 67 6e 6f 52 6f 6f 74 20 3d 20 70  Cx->pgnoRoot = p
1f0a0 4f 72 69 67 2d 3e 70 67 6e 6f 52 6f 6f 74 3b 0a  Orig->pgnoRoot;.
1f0b0 20 20 70 43 78 2d 3e 69 73 4f 72 64 65 72 65 64    pCx->isOrdered
1f0c0 20 3d 20 70 4f 72 69 67 2d 3e 69 73 4f 72 64 65   = pOrig->isOrde
1f0d0 72 65 64 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69  red;.  rc = sqli
1f0e0 74 65 33 42 74 72 65 65 43 75 72 73 6f 72 28 70  te3BtreeCursor(p
1f0f0 4f 72 69 67 2d 3e 70 42 74 78 2c 20 70 43 78 2d  Orig->pBtx, pCx-
1f100 3e 70 67 6e 6f 52 6f 6f 74 2c 20 42 54 52 45 45  >pgnoRoot, BTREE
1f110 5f 57 52 43 53 52 2c 0a 20 20 20 20 20 20 20 20  _WRCSR,.        
1f120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f130 20 20 70 43 78 2d 3e 70 4b 65 79 49 6e 66 6f 2c    pCx->pKeyInfo,
1f140 20 70 43 78 2d 3e 75 63 2e 70 43 75 72 73 6f 72   pCx->uc.pCursor
1f150 29 3b 0a 20 20 2f 2a 20 54 68 65 20 73 71 6c 69  );.  /* The sqli
1f160 74 65 33 42 74 72 65 65 43 75 72 73 6f 72 28 29  te3BtreeCursor()
1f170 20 72 6f 75 74 69 6e 65 20 63 61 6e 20 6f 6e 6c   routine can onl
1f180 79 20 66 61 69 6c 20 66 6f 72 20 74 68 65 20 66  y fail for the f
1f190 69 72 73 74 20 63 75 72 73 6f 72 0a 20 20 2a 2a  irst cursor.  **
1f1a0 20 6f 70 65 6e 65 64 20 66 6f 72 20 61 20 64 61   opened for a da
1f1b0 74 61 62 61 73 65 2e 20 20 53 69 6e 63 65 20 74  tabase.  Since t
1f1c0 68 65 72 65 20 69 73 20 61 6c 72 65 61 64 79 20  here is already 
1f1d0 61 6e 20 6f 70 65 6e 20 63 75 72 73 6f 72 20 77  an open cursor w
1f1e0 68 65 6e 20 74 68 69 73 0a 20 20 2a 2a 20 6f 70  hen this.  ** op
1f1f0 63 6f 64 65 20 69 73 20 72 75 6e 2c 20 74 68 65  code is run, the
1f200 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 75 72   sqlite3BtreeCur
1f210 73 6f 72 28 29 20 63 61 6e 6e 6f 74 20 66 61 69  sor() cannot fai
1f220 6c 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 72  l */.  assert( r
1f230 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 3b 0a  c==SQLITE_OK );.
1f240 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 2f 2a 20    break;.}.../* 
1f250 4f 70 63 6f 64 65 3a 20 4f 70 65 6e 45 70 68 65  Opcode: OpenEphe
1f260 6d 65 72 61 6c 20 50 31 20 50 32 20 2a 20 50 34  meral P1 P2 * P4
1f270 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a   P5.** Synopsis:
1f280 20 6e 43 6f 6c 75 6d 6e 3d 50 32 0a 2a 2a 0a 2a   nColumn=P2.**.*
1f290 2a 20 4f 70 65 6e 20 61 20 6e 65 77 20 63 75 72  * Open a new cur
1f2a0 73 6f 72 20 50 31 20 74 6f 20 61 20 74 72 61 6e  sor P1 to a tran
1f2b0 73 69 65 6e 74 20 74 61 62 6c 65 2e 0a 2a 2a 20  sient table..** 
1f2c0 54 68 65 20 63 75 72 73 6f 72 20 69 73 20 61 6c  The cursor is al
1f2d0 77 61 79 73 20 6f 70 65 6e 65 64 20 72 65 61 64  ways opened read
1f2e0 2f 77 72 69 74 65 20 65 76 65 6e 20 69 66 20 0a  /write even if .
1f2f0 2a 2a 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61  ** the main data
1f300 62 61 73 65 20 69 73 20 72 65 61 64 2d 6f 6e 6c  base is read-onl
1f310 79 2e 20 20 54 68 65 20 65 70 68 65 6d 65 72 61  y.  The ephemera
1f320 6c 0a 2a 2a 20 74 61 62 6c 65 20 69 73 20 64 65  l.** table is de
1f330 6c 65 74 65 64 20 61 75 74 6f 6d 61 74 69 63 61  leted automatica
1f340 6c 6c 79 20 77 68 65 6e 20 74 68 65 20 63 75 72  lly when the cur
1f350 73 6f 72 20 69 73 20 63 6c 6f 73 65 64 2e 0a 2a  sor is closed..*
1f360 2a 0a 2a 2a 20 49 66 20 74 68 65 20 63 75 72 73  *.** If the curs
1f370 6f 72 20 50 31 20 69 73 20 61 6c 72 65 61 64 79  or P1 is already
1f380 20 6f 70 65 6e 65 64 20 6f 6e 20 61 6e 20 65 70   opened on an ep
1f390 68 65 6d 65 72 61 6c 20 74 61 62 6c 65 2c 20 74  hemeral table, t
1f3a0 68 65 20 74 61 62 6c 65 0a 2a 2a 20 69 73 20 63  he table.** is c
1f3b0 6c 65 61 72 65 64 20 28 61 6c 6c 20 63 6f 6e 74  leared (all cont
1f3c0 65 6e 74 20 69 73 20 65 72 61 73 65 64 29 2e 0a  ent is erased)..
1f3d0 2a 2a 0a 2a 2a 20 50 32 20 69 73 20 74 68 65 20  **.** P2 is the 
1f3e0 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e  number of column
1f3f0 73 20 69 6e 20 74 68 65 20 65 70 68 65 6d 65 72  s in the ephemer
1f400 61 6c 20 74 61 62 6c 65 2e 0a 2a 2a 20 54 68 65  al table..** The
1f410 20 63 75 72 73 6f 72 20 70 6f 69 6e 74 73 20 74   cursor points t
1f420 6f 20 61 20 42 54 72 65 65 20 74 61 62 6c 65 20  o a BTree table 
1f430 69 66 20 50 34 3d 3d 30 20 61 6e 64 20 74 6f 20  if P4==0 and to 
1f440 61 20 42 54 72 65 65 20 69 6e 64 65 78 0a 2a 2a  a BTree index.**
1f450 20 69 66 20 50 34 20 69 73 20 6e 6f 74 20 30 2e   if P4 is not 0.
1f460 20 20 49 66 20 50 34 20 69 73 20 6e 6f 74 20 4e    If P4 is not N
1f470 55 4c 4c 2c 20 69 74 20 70 6f 69 6e 74 73 20 74  ULL, it points t
1f480 6f 20 61 20 4b 65 79 49 6e 66 6f 20 73 74 72 75  o a KeyInfo stru
1f490 63 74 75 72 65 0a 2a 2a 20 74 68 61 74 20 64 65  cture.** that de
1f4a0 66 69 6e 65 73 20 74 68 65 20 66 6f 72 6d 61 74  fines the format
1f4b0 20 6f 66 20 6b 65 79 73 20 69 6e 20 74 68 65 20   of keys in the 
1f4c0 69 6e 64 65 78 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  index..**.** The
1f4d0 20 50 35 20 70 61 72 61 6d 65 74 65 72 20 63 61   P5 parameter ca
1f4e0 6e 20 62 65 20 61 20 6d 61 73 6b 20 6f 66 20 74  n be a mask of t
1f4f0 68 65 20 42 54 52 45 45 5f 2a 20 66 6c 61 67 73  he BTREE_* flags
1f500 20 64 65 66 69 6e 65 64 0a 2a 2a 20 69 6e 20 62   defined.** in b
1f510 74 72 65 65 2e 68 2e 20 20 54 68 65 73 65 20 66  tree.h.  These f
1f520 6c 61 67 73 20 63 6f 6e 74 72 6f 6c 20 61 73 70  lags control asp
1f530 65 63 74 73 20 6f 66 20 74 68 65 20 6f 70 65 72  ects of the oper
1f540 61 74 69 6f 6e 20 6f 66 0a 2a 2a 20 74 68 65 20  ation of.** the 
1f550 62 74 72 65 65 2e 20 20 54 68 65 20 42 54 52 45  btree.  The BTRE
1f560 45 5f 4f 4d 49 54 5f 4a 4f 55 52 4e 41 4c 20 61  E_OMIT_JOURNAL a
1f570 6e 64 20 42 54 52 45 45 5f 53 49 4e 47 4c 45 20  nd BTREE_SINGLE 
1f580 66 6c 61 67 73 20 61 72 65 0a 2a 2a 20 61 64 64  flags are.** add
1f590 65 64 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79  ed automatically
1f5a0 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ..*/./* Opcode: 
1f5b0 4f 70 65 6e 41 75 74 6f 69 6e 64 65 78 20 50 31  OpenAutoindex P1
1f5c0 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 20 53 79   P2 * P4 *.** Sy
1f5d0 6e 6f 70 73 69 73 3a 20 6e 43 6f 6c 75 6d 6e 3d  nopsis: nColumn=
1f5e0 50 32 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70  P2.**.** This op
1f5f0 63 6f 64 65 20 77 6f 72 6b 73 20 74 68 65 20 73  code works the s
1f600 61 6d 65 20 61 73 20 4f 50 5f 4f 70 65 6e 45 70  ame as OP_OpenEp
1f610 68 65 6d 65 72 61 6c 2e 20 20 49 74 20 68 61 73  hemeral.  It has
1f620 20 61 0a 2a 2a 20 64 69 66 66 65 72 65 6e 74 20   a.** different 
1f630 6e 61 6d 65 20 74 6f 20 64 69 73 74 69 6e 67 75  name to distingu
1f640 69 73 68 20 69 74 73 20 75 73 65 2e 20 20 54 61  ish its use.  Ta
1f650 62 6c 65 73 20 63 72 65 61 74 65 64 20 75 73 69  bles created usi
1f660 6e 67 0a 2a 2a 20 62 79 20 74 68 69 73 20 6f 70  ng.** by this op
1f670 63 6f 64 65 20 77 69 6c 6c 20 62 65 20 75 73 65  code will be use
1f680 64 20 66 6f 72 20 61 75 74 6f 6d 61 74 69 63 61  d for automatica
1f690 6c 6c 79 20 63 72 65 61 74 65 64 20 74 72 61 6e  lly created tran
1f6a0 73 69 65 6e 74 0a 2a 2a 20 69 6e 64 69 63 65 73  sient.** indices
1f6b0 20 69 6e 20 6a 6f 69 6e 73 2e 0a 2a 2f 0a 63 61   in joins..*/.ca
1f6c0 73 65 20 4f 50 5f 4f 70 65 6e 41 75 74 6f 69 6e  se OP_OpenAutoin
1f6d0 64 65 78 3a 20 0a 63 61 73 65 20 4f 50 5f 4f 70  dex: .case OP_Op
1f6e0 65 6e 45 70 68 65 6d 65 72 61 6c 3a 20 7b 0a 20  enEphemeral: {. 
1f6f0 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 78   VdbeCursor *pCx
1f700 3b 0a 20 20 4b 65 79 49 6e 66 6f 20 2a 70 4b 65  ;.  KeyInfo *pKe
1f710 79 49 6e 66 6f 3b 0a 0a 20 20 73 74 61 74 69 63  yInfo;..  static
1f720 20 63 6f 6e 73 74 20 69 6e 74 20 76 66 73 46 6c   const int vfsFl
1f730 61 67 73 20 3d 20 0a 20 20 20 20 20 20 53 51 4c  ags = .      SQL
1f740 49 54 45 5f 4f 50 45 4e 5f 52 45 41 44 57 52 49  ITE_OPEN_READWRI
1f750 54 45 20 7c 0a 20 20 20 20 20 20 53 51 4c 49 54  TE |.      SQLIT
1f760 45 5f 4f 50 45 4e 5f 43 52 45 41 54 45 20 7c 0a  E_OPEN_CREATE |.
1f770 20 20 20 20 20 20 53 51 4c 49 54 45 5f 4f 50 45        SQLITE_OPE
1f780 4e 5f 45 58 43 4c 55 53 49 56 45 20 7c 0a 20 20  N_EXCLUSIVE |.  
1f790 20 20 20 20 53 51 4c 49 54 45 5f 4f 50 45 4e 5f      SQLITE_OPEN_
1f7a0 44 45 4c 45 54 45 4f 4e 43 4c 4f 53 45 20 7c 0a  DELETEONCLOSE |.
1f7b0 20 20 20 20 20 20 53 51 4c 49 54 45 5f 4f 50 45        SQLITE_OPE
1f7c0 4e 5f 54 52 41 4e 53 49 45 4e 54 5f 44 42 3b 0a  N_TRANSIENT_DB;.
1f7d0 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
1f7e0 31 3e 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  1>=0 );.  assert
1f7f0 28 20 70 4f 70 2d 3e 70 32 3e 3d 30 20 29 3b 0a  ( pOp->p2>=0 );.
1f800 20 20 70 43 78 20 3d 20 70 2d 3e 61 70 43 73 72    pCx = p->apCsr
1f810 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 69 66 28  [pOp->p1];.  if(
1f820 20 70 43 78 20 29 7b 0a 20 20 20 20 2f 2a 20 49   pCx ){.    /* I
1f830 66 20 74 68 65 20 65 70 68 65 72 6d 65 72 61 6c  f the ephermeral
1f840 20 74 61 62 6c 65 20 69 73 20 61 6c 72 65 61 64   table is alread
1f850 79 20 6f 70 65 6e 2c 20 65 72 61 73 65 20 61 6c  y open, erase al
1f860 6c 20 65 78 69 73 74 69 6e 67 20 63 6f 6e 74 65  l existing conte
1f870 6e 74 0a 20 20 20 20 2a 2a 20 73 6f 20 74 68 61  nt.    ** so tha
1f880 74 20 74 68 65 20 74 61 62 6c 65 20 69 73 20 65  t the table is e
1f890 6d 70 74 79 20 61 67 61 69 6e 2c 20 72 61 74 68  mpty again, rath
1f8a0 65 72 20 74 68 61 6e 20 63 72 65 61 74 69 6e 67  er than creating
1f8b0 20 61 20 6e 65 77 20 74 61 62 6c 65 2e 20 2a 2f   a new table. */
1f8c0 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 43 78  .    assert( pCx
1f8d0 2d 3e 69 73 45 70 68 65 6d 65 72 61 6c 20 29 3b  ->isEphemeral );
1f8e0 0a 20 20 20 20 69 66 28 20 70 43 78 2d 3e 70 42  .    if( pCx->pB
1f8f0 74 78 20 29 7b 0a 20 20 20 20 20 20 72 63 20 3d  tx ){.      rc =
1f900 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 6c 65   sqlite3BtreeCle
1f910 61 72 54 61 62 6c 65 28 70 43 78 2d 3e 70 42 74  arTable(pCx->pBt
1f920 78 2c 20 70 43 78 2d 3e 70 67 6e 6f 52 6f 6f 74  x, pCx->pgnoRoot
1f930 2c 20 30 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 65  , 0);.    }.  }e
1f940 6c 73 65 7b 0a 20 20 20 20 70 43 78 20 3d 20 61  lse{.    pCx = a
1f950 6c 6c 6f 63 61 74 65 43 75 72 73 6f 72 28 70 2c  llocateCursor(p,
1f960 20 70 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70   pOp->p1, pOp->p
1f970 32 2c 20 2d 31 2c 20 43 55 52 54 59 50 45 5f 42  2, -1, CURTYPE_B
1f980 54 52 45 45 29 3b 0a 20 20 20 20 69 66 28 20 70  TREE);.    if( p
1f990 43 78 3d 3d 30 20 29 20 67 6f 74 6f 20 6e 6f 5f  Cx==0 ) goto no_
1f9a0 6d 65 6d 3b 0a 20 20 20 20 70 43 78 2d 3e 6e 75  mem;.    pCx->nu
1f9b0 6c 6c 52 6f 77 20 3d 20 31 3b 0a 20 20 20 20 70  llRow = 1;.    p
1f9c0 43 78 2d 3e 69 73 45 70 68 65 6d 65 72 61 6c 20  Cx->isEphemeral 
1f9d0 3d 20 31 3b 0a 20 20 20 20 72 63 20 3d 20 73 71  = 1;.    rc = sq
1f9e0 6c 69 74 65 33 42 74 72 65 65 4f 70 65 6e 28 64  lite3BtreeOpen(d
1f9f0 62 2d 3e 70 56 66 73 2c 20 30 2c 20 64 62 2c 20  b->pVfs, 0, db, 
1fa00 26 70 43 78 2d 3e 70 42 74 78 2c 20 0a 20 20 20  &pCx->pBtx, .   
1fa10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fa20 20 20 20 20 20 20 20 42 54 52 45 45 5f 4f 4d 49         BTREE_OMI
1fa30 54 5f 4a 4f 55 52 4e 41 4c 20 7c 20 42 54 52 45  T_JOURNAL | BTRE
1fa40 45 5f 53 49 4e 47 4c 45 20 7c 20 70 4f 70 2d 3e  E_SINGLE | pOp->
1fa50 70 35 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  p5,.            
1fa60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 76 66                vf
1fa70 73 46 6c 61 67 73 29 3b 0a 20 20 20 20 69 66 28  sFlags);.    if(
1fa80 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc==SQLITE_OK )
1fa90 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c  {.      rc = sql
1faa0 69 74 65 33 42 74 72 65 65 42 65 67 69 6e 54 72  ite3BtreeBeginTr
1fab0 61 6e 73 28 70 43 78 2d 3e 70 42 74 78 2c 20 31  ans(pCx->pBtx, 1
1fac0 2c 20 30 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20  , 0);.    }.    
1fad0 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f  if( rc==SQLITE_O
1fae0 4b 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 49 66  K ){.      /* If
1faf0 20 61 20 74 72 61 6e 73 69 65 6e 74 20 69 6e 64   a transient ind
1fb00 65 78 20 69 73 20 72 65 71 75 69 72 65 64 2c 20  ex is required, 
1fb10 63 72 65 61 74 65 20 69 74 20 62 79 20 63 61 6c  create it by cal
1fb20 6c 69 6e 67 0a 20 20 20 20 20 20 2a 2a 20 73 71  ling.      ** sq
1fb30 6c 69 74 65 33 42 74 72 65 65 43 72 65 61 74 65  lite3BtreeCreate
1fb40 54 61 62 6c 65 28 29 20 77 69 74 68 20 74 68 65  Table() with the
1fb50 20 42 54 52 45 45 5f 42 4c 4f 42 4b 45 59 20 66   BTREE_BLOBKEY f
1fb60 6c 61 67 20 62 65 66 6f 72 65 0a 20 20 20 20 20  lag before.     
1fb70 20 2a 2a 20 6f 70 65 6e 69 6e 67 20 69 74 2e 20   ** opening it. 
1fb80 49 66 20 61 20 74 72 61 6e 73 69 65 6e 74 20 74  If a transient t
1fb90 61 62 6c 65 20 69 73 20 72 65 71 75 69 72 65 64  able is required
1fba0 2c 20 6a 75 73 74 20 75 73 65 20 74 68 65 0a 20  , just use the. 
1fbb0 20 20 20 20 20 2a 2a 20 61 75 74 6f 6d 61 74 69       ** automati
1fbc0 63 61 6c 6c 79 20 63 72 65 61 74 65 64 20 74 61  cally created ta
1fbd0 62 6c 65 20 77 69 74 68 20 72 6f 6f 74 2d 70 61  ble with root-pa
1fbe0 67 65 20 31 20 28 61 6e 20 42 4c 4f 42 5f 49 4e  ge 1 (an BLOB_IN
1fbf0 54 4b 45 59 20 74 61 62 6c 65 29 2e 0a 20 20 20  TKEY table)..   
1fc00 20 20 20 2a 2f 0a 20 20 20 20 20 20 69 66 28 20     */.      if( 
1fc10 28 70 43 78 2d 3e 70 4b 65 79 49 6e 66 6f 20 3d  (pCx->pKeyInfo =
1fc20 20 70 4b 65 79 49 6e 66 6f 20 3d 20 70 4f 70 2d   pKeyInfo = pOp-
1fc30 3e 70 34 2e 70 4b 65 79 49 6e 66 6f 29 21 3d 30  >p4.pKeyInfo)!=0
1fc40 20 29 7b 0a 20 20 20 20 20 20 20 20 61 73 73 65   ){.        asse
1fc50 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d  rt( pOp->p4type=
1fc60 3d 50 34 5f 4b 45 59 49 4e 46 4f 20 29 3b 0a 20  =P4_KEYINFO );. 
1fc70 20 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69         rc = sqli
1fc80 74 65 33 42 74 72 65 65 43 72 65 61 74 65 54 61  te3BtreeCreateTa
1fc90 62 6c 65 28 70 43 78 2d 3e 70 42 74 78 2c 20 28  ble(pCx->pBtx, (
1fca0 69 6e 74 2a 29 26 70 43 78 2d 3e 70 67 6e 6f 52  int*)&pCx->pgnoR
1fcb0 6f 6f 74 2c 0a 20 20 20 20 20 20 20 20 20 20 20  oot,.           
1fcc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fcd0 20 20 20 20 20 20 20 20 20 20 42 54 52 45 45 5f            BTREE_
1fce0 42 4c 4f 42 4b 45 59 20 7c 20 70 4f 70 2d 3e 70  BLOBKEY | pOp->p
1fcf0 35 29 3b 20 0a 20 20 20 20 20 20 20 20 69 66 28  5); .        if(
1fd00 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc==SQLITE_OK )
1fd10 7b 0a 20 20 20 20 20 20 20 20 20 20 61 73 73 65  {.          asse
1fd20 72 74 28 20 70 43 78 2d 3e 70 67 6e 6f 52 6f 6f  rt( pCx->pgnoRoo
1fd30 74 3d 3d 4d 41 53 54 45 52 5f 52 4f 4f 54 2b 31  t==MASTER_ROOT+1
1fd40 20 29 3b 0a 20 20 20 20 20 20 20 20 20 20 61 73   );.          as
1fd50 73 65 72 74 28 20 70 4b 65 79 49 6e 66 6f 2d 3e  sert( pKeyInfo->
1fd60 64 62 3d 3d 64 62 20 29 3b 0a 20 20 20 20 20 20  db==db );.      
1fd70 20 20 20 20 61 73 73 65 72 74 28 20 70 4b 65 79      assert( pKey
1fd80 49 6e 66 6f 2d 3e 65 6e 63 3d 3d 45 4e 43 28 64  Info->enc==ENC(d
1fd90 62 29 20 29 3b 0a 20 20 20 20 20 20 20 20 20 20  b) );.          
1fda0 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
1fdb0 65 43 75 72 73 6f 72 28 70 43 78 2d 3e 70 42 74  eCursor(pCx->pBt
1fdc0 78 2c 20 70 43 78 2d 3e 70 67 6e 6f 52 6f 6f 74  x, pCx->pgnoRoot
1fdd0 2c 20 42 54 52 45 45 5f 57 52 43 53 52 2c 0a 20  , BTREE_WRCSR,. 
1fde0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fdf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fe00 20 70 4b 65 79 49 6e 66 6f 2c 20 70 43 78 2d 3e   pKeyInfo, pCx->
1fe10 75 63 2e 70 43 75 72 73 6f 72 29 3b 0a 20 20 20  uc.pCursor);.   
1fe20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 70       }.        p
1fe30 43 78 2d 3e 69 73 54 61 62 6c 65 20 3d 20 30 3b  Cx->isTable = 0;
1fe40 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  .      }else{.  
1fe50 20 20 20 20 20 20 70 43 78 2d 3e 70 67 6e 6f 52        pCx->pgnoR
1fe60 6f 6f 74 20 3d 20 4d 41 53 54 45 52 5f 52 4f 4f  oot = MASTER_ROO
1fe70 54 3b 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20  T;.        rc = 
1fe80 73 71 6c 69 74 65 33 42 74 72 65 65 43 75 72 73  sqlite3BtreeCurs
1fe90 6f 72 28 70 43 78 2d 3e 70 42 74 78 2c 20 4d 41  or(pCx->pBtx, MA
1fea0 53 54 45 52 5f 52 4f 4f 54 2c 20 42 54 52 45 45  STER_ROOT, BTREE
1feb0 5f 57 52 43 53 52 2c 0a 20 20 20 20 20 20 20 20  _WRCSR,.        
1fec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fed0 20 20 20 20 20 20 20 20 30 2c 20 70 43 78 2d 3e          0, pCx->
1fee0 75 63 2e 70 43 75 72 73 6f 72 29 3b 0a 20 20 20  uc.pCursor);.   
1fef0 20 20 20 20 20 70 43 78 2d 3e 69 73 54 61 62 6c       pCx->isTabl
1ff00 65 20 3d 20 31 3b 0a 20 20 20 20 20 20 7d 0a 20  e = 1;.      }. 
1ff10 20 20 20 7d 0a 20 20 20 20 70 43 78 2d 3e 69 73     }.    pCx->is
1ff20 4f 72 64 65 72 65 64 20 3d 20 28 70 4f 70 2d 3e  Ordered = (pOp->
1ff30 70 35 21 3d 42 54 52 45 45 5f 55 4e 4f 52 44 45  p5!=BTREE_UNORDE
1ff40 52 45 44 29 3b 0a 20 20 7d 0a 20 20 69 66 28 20  RED);.  }.  if( 
1ff50 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f  rc ) goto abort_
1ff60 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
1ff70 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
1ff80 6f 64 65 3a 20 53 6f 72 74 65 72 4f 70 65 6e 20  ode: SorterOpen 
1ff90 50 31 20 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a  P1 P2 P3 P4 *.**
1ffa0 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20  .** This opcode 
1ffb0 77 6f 72 6b 73 20 6c 69 6b 65 20 4f 50 5f 4f 70  works like OP_Op
1ffc0 65 6e 45 70 68 65 6d 65 72 61 6c 20 65 78 63 65  enEphemeral exce
1ffd0 70 74 20 74 68 61 74 20 69 74 20 6f 70 65 6e 73  pt that it opens
1ffe0 0a 2a 2a 20 61 20 74 72 61 6e 73 69 65 6e 74 20  .** a transient 
1fff0 69 6e 64 65 78 20 74 68 61 74 20 69 73 20 73 70  index that is sp
20000 65 63 69 66 69 63 61 6c 6c 79 20 64 65 73 69 67  ecifically desig
20010 6e 65 64 20 74 6f 20 73 6f 72 74 20 6c 61 72 67  ned to sort larg
20020 65 0a 2a 2a 20 74 61 62 6c 65 73 20 75 73 69 6e  e.** tables usin
20030 67 20 61 6e 20 65 78 74 65 72 6e 61 6c 20 6d 65  g an external me
20040 72 67 65 2d 73 6f 72 74 20 61 6c 67 6f 72 69 74  rge-sort algorit
20050 68 6d 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 61 72 67  hm..**.** If arg
20060 75 6d 65 6e 74 20 50 33 20 69 73 20 6e 6f 6e 2d  ument P3 is non-
20070 7a 65 72 6f 2c 20 74 68 65 6e 20 69 74 20 69 6e  zero, then it in
20080 64 69 63 61 74 65 73 20 74 68 61 74 20 74 68 65  dicates that the
20090 20 73 6f 72 74 65 72 20 6d 61 79 0a 2a 2a 20 61   sorter may.** a
200a0 73 73 75 6d 65 20 74 68 61 74 20 61 20 73 74 61  ssume that a sta
200b0 62 6c 65 20 73 6f 72 74 20 63 6f 6e 73 69 64 65  ble sort conside
200c0 72 69 6e 67 20 74 68 65 20 66 69 72 73 74 20 50  ring the first P
200d0 33 20 66 69 65 6c 64 73 20 6f 66 20 65 61 63 68  3 fields of each
200e0 0a 2a 2a 20 6b 65 79 20 69 73 20 73 75 66 66 69  .** key is suffi
200f0 63 69 65 6e 74 20 74 6f 20 70 72 6f 64 75 63 65  cient to produce
20100 20 74 68 65 20 72 65 71 75 69 72 65 64 20 72 65   the required re
20110 73 75 6c 74 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f  sults..*/.case O
20120 50 5f 53 6f 72 74 65 72 4f 70 65 6e 3a 20 7b 0a  P_SorterOpen: {.
20130 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43    VdbeCursor *pC
20140 78 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f  x;..  assert( pO
20150 70 2d 3e 70 31 3e 3d 30 20 29 3b 0a 20 20 61 73  p->p1>=0 );.  as
20160 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e 3d 30  sert( pOp->p2>=0
20170 20 29 3b 0a 20 20 70 43 78 20 3d 20 61 6c 6c 6f   );.  pCx = allo
20180 63 61 74 65 43 75 72 73 6f 72 28 70 2c 20 70 4f  cateCursor(p, pO
20190 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70 32 2c 20  p->p1, pOp->p2, 
201a0 2d 31 2c 20 43 55 52 54 59 50 45 5f 53 4f 52 54  -1, CURTYPE_SORT
201b0 45 52 29 3b 0a 20 20 69 66 28 20 70 43 78 3d 3d  ER);.  if( pCx==
201c0 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b  0 ) goto no_mem;
201d0 0a 20 20 70 43 78 2d 3e 70 4b 65 79 49 6e 66 6f  .  pCx->pKeyInfo
201e0 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 4b 65 79 49   = pOp->p4.pKeyI
201f0 6e 66 6f 3b 0a 20 20 61 73 73 65 72 74 28 20 70  nfo;.  assert( p
20200 43 78 2d 3e 70 4b 65 79 49 6e 66 6f 2d 3e 64 62  Cx->pKeyInfo->db
20210 3d 3d 64 62 20 29 3b 0a 20 20 61 73 73 65 72 74  ==db );.  assert
20220 28 20 70 43 78 2d 3e 70 4b 65 79 49 6e 66 6f 2d  ( pCx->pKeyInfo-
20230 3e 65 6e 63 3d 3d 45 4e 43 28 64 62 29 20 29 3b  >enc==ENC(db) );
20240 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56  .  rc = sqlite3V
20250 64 62 65 53 6f 72 74 65 72 49 6e 69 74 28 64 62  dbeSorterInit(db
20260 2c 20 70 4f 70 2d 3e 70 33 2c 20 70 43 78 29 3b  , pOp->p3, pCx);
20270 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f  .  if( rc ) goto
20280 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
20290 72 6f 72 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  ror;.  break;.}.
202a0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 65 71 75  ./* Opcode: Sequ
202b0 65 6e 63 65 54 65 73 74 20 50 31 20 50 32 20 2a  enceTest P1 P2 *
202c0 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73   * *.** Synopsis
202d0 3a 20 69 66 28 20 63 75 72 73 6f 72 5b 50 31 5d  : if( cursor[P1]
202e0 2e 63 74 72 2b 2b 20 29 20 70 63 20 3d 20 50 32  .ctr++ ) pc = P2
202f0 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 61 20 73  .**.** P1 is a s
20300 6f 72 74 65 72 20 63 75 72 73 6f 72 2e 20 49 66  orter cursor. If
20310 20 74 68 65 20 73 65 71 75 65 6e 63 65 20 63 6f   the sequence co
20320 75 6e 74 65 72 20 69 73 20 63 75 72 72 65 6e 74  unter is current
20330 6c 79 20 7a 65 72 6f 2c 20 6a 75 6d 70 0a 2a 2a  ly zero, jump.**
20340 20 74 6f 20 50 32 2e 20 52 65 67 61 72 64 6c 65   to P2. Regardle
20350 73 73 20 6f 66 20 77 68 65 74 68 65 72 20 6f 72  ss of whether or
20360 20 6e 6f 74 20 74 68 65 20 6a 75 6d 70 20 69 73   not the jump is
20370 20 74 61 6b 65 6e 2c 20 69 6e 63 72 65 6d 65 6e   taken, incremen
20380 74 20 74 68 65 0a 2a 2a 20 74 68 65 20 73 65 71  t the.** the seq
20390 75 65 6e 63 65 20 76 61 6c 75 65 2e 0a 2a 2f 0a  uence value..*/.
203a0 63 61 73 65 20 4f 50 5f 53 65 71 75 65 6e 63 65  case OP_Sequence
203b0 54 65 73 74 3a 20 7b 0a 20 20 56 64 62 65 43 75  Test: {.  VdbeCu
203c0 72 73 6f 72 20 2a 70 43 3b 0a 20 20 61 73 73 65  rsor *pC;.  asse
203d0 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26  rt( pOp->p1>=0 &
203e0 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75  & pOp->p1<p->nCu
203f0 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70  rsor );.  pC = p
20400 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d  ->apCsr[pOp->p1]
20410 3b 0a 20 20 61 73 73 65 72 74 28 20 69 73 53 6f  ;.  assert( isSo
20420 72 74 65 72 28 70 43 29 20 29 3b 0a 20 20 69 66  rter(pC) );.  if
20430 28 20 28 70 43 2d 3e 73 65 71 43 6f 75 6e 74 2b  ( (pC->seqCount+
20440 2b 29 3d 3d 30 20 29 7b 0a 20 20 20 20 67 6f 74  +)==0 ){.    got
20450 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20  o jump_to_p2;.  
20460 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  }.  break;.}../*
20470 20 4f 70 63 6f 64 65 3a 20 4f 70 65 6e 50 73 65   Opcode: OpenPse
20480 75 64 6f 20 50 31 20 50 32 20 50 33 20 2a 20 2a  udo P1 P2 P3 * *
20490 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 50 33  .** Synopsis: P3
204a0 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 72 5b 50 32   columns in r[P2
204b0 5d 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e 20 61 20 6e  ].**.** Open a n
204c0 65 77 20 63 75 72 73 6f 72 20 74 68 61 74 20 70  ew cursor that p
204d0 6f 69 6e 74 73 20 74 6f 20 61 20 66 61 6b 65 20  oints to a fake 
204e0 74 61 62 6c 65 20 74 68 61 74 20 63 6f 6e 74 61  table that conta
204f0 69 6e 73 20 61 20 73 69 6e 67 6c 65 0a 2a 2a 20  ins a single.** 
20500 72 6f 77 20 6f 66 20 64 61 74 61 2e 20 20 54 68  row of data.  Th
20510 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 74 68 61  e content of tha
20520 74 20 6f 6e 65 20 72 6f 77 20 69 73 20 74 68 65  t one row is the
20530 20 63 6f 6e 74 65 6e 74 20 6f 66 20 6d 65 6d 6f   content of memo
20540 72 79 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 50  ry.** register P
20550 32 2e 20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72  2.  In other wor
20560 64 73 2c 20 63 75 72 73 6f 72 20 50 31 20 62 65  ds, cursor P1 be
20570 63 6f 6d 65 73 20 61 6e 20 61 6c 69 61 73 20 66  comes an alias f
20580 6f 72 20 74 68 65 20 0a 2a 2a 20 4d 45 4d 5f 42  or the .** MEM_B
20590 6c 6f 62 20 63 6f 6e 74 65 6e 74 20 63 6f 6e 74  lob content cont
205a0 61 69 6e 65 64 20 69 6e 20 72 65 67 69 73 74 65  ained in registe
205b0 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 41 20 70 73  r P2..**.** A ps
205c0 65 75 64 6f 2d 74 61 62 6c 65 20 63 72 65 61 74  eudo-table creat
205d0 65 64 20 62 79 20 74 68 69 73 20 6f 70 63 6f 64  ed by this opcod
205e0 65 20 69 73 20 75 73 65 64 20 74 6f 20 68 6f 6c  e is used to hol
205f0 64 20 61 20 73 69 6e 67 6c 65 0a 2a 2a 20 72 6f  d a single.** ro
20600 77 20 6f 75 74 70 75 74 20 66 72 6f 6d 20 74 68  w output from th
20610 65 20 73 6f 72 74 65 72 20 73 6f 20 74 68 61 74  e sorter so that
20620 20 74 68 65 20 72 6f 77 20 63 61 6e 20 62 65 20   the row can be 
20630 64 65 63 6f 6d 70 6f 73 65 64 20 69 6e 74 6f 0a  decomposed into.
20640 2a 2a 20 69 6e 64 69 76 69 64 75 61 6c 20 63 6f  ** individual co
20650 6c 75 6d 6e 73 20 75 73 69 6e 67 20 74 68 65 20  lumns using the 
20660 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 70 63 6f 64 65  OP_Column opcode
20670 2e 20 20 54 68 65 20 4f 50 5f 43 6f 6c 75 6d 6e  .  The OP_Column
20680 20 6f 70 63 6f 64 65 0a 2a 2a 20 69 73 20 74 68   opcode.** is th
20690 65 20 6f 6e 6c 79 20 63 75 72 73 6f 72 20 6f 70  e only cursor op
206a0 63 6f 64 65 20 74 68 61 74 20 77 6f 72 6b 73 20  code that works 
206b0 77 69 74 68 20 61 20 70 73 65 75 64 6f 2d 74 61  with a pseudo-ta
206c0 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 50 33 20 69 73  ble..**.** P3 is
206d0 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 66   the number of f
206e0 69 65 6c 64 73 20 69 6e 20 74 68 65 20 72 65 63  ields in the rec
206f0 6f 72 64 73 20 74 68 61 74 20 77 69 6c 6c 20 62  ords that will b
20700 65 20 73 74 6f 72 65 64 20 62 79 0a 2a 2a 20 74  e stored by.** t
20710 68 65 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 2e  he pseudo-table.
20720 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4f 70 65 6e  .*/.case OP_Open
20730 50 73 65 75 64 6f 3a 20 7b 0a 20 20 56 64 62 65  Pseudo: {.  Vdbe
20740 43 75 72 73 6f 72 20 2a 70 43 78 3b 0a 0a 20 20  Cursor *pCx;..  
20750 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
20760 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
20770 70 4f 70 2d 3e 70 33 3e 3d 30 20 29 3b 0a 20 20  pOp->p3>=0 );.  
20780 70 43 78 20 3d 20 61 6c 6c 6f 63 61 74 65 43 75  pCx = allocateCu
20790 72 73 6f 72 28 70 2c 20 70 4f 70 2d 3e 70 31 2c  rsor(p, pOp->p1,
207a0 20 70 4f 70 2d 3e 70 33 2c 20 2d 31 2c 20 43 55   pOp->p3, -1, CU
207b0 52 54 59 50 45 5f 50 53 45 55 44 4f 29 3b 0a 20  RTYPE_PSEUDO);. 
207c0 20 69 66 28 20 70 43 78 3d 3d 30 20 29 20 67 6f   if( pCx==0 ) go
207d0 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 70 43 78  to no_mem;.  pCx
207e0 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 31 3b 0a 20  ->nullRow = 1;. 
207f0 20 70 43 78 2d 3e 73 65 65 6b 52 65 73 75 6c 74   pCx->seekResult
20800 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 70 43   = pOp->p2;.  pC
20810 78 2d 3e 69 73 54 61 62 6c 65 20 3d 20 31 3b 0a  x->isTable = 1;.
20820 20 20 2f 2a 20 47 69 76 65 20 74 68 69 73 20 70    /* Give this p
20830 73 65 75 64 6f 2d 63 75 72 73 6f 72 20 61 20 66  seudo-cursor a f
20840 61 6b 65 20 42 74 43 75 72 73 6f 72 20 70 6f 69  ake BtCursor poi
20850 6e 74 65 72 20 73 6f 20 74 68 61 74 20 70 43 78  nter so that pCx
20860 0a 20 20 2a 2a 20 63 61 6e 20 62 65 20 73 61 66  .  ** can be saf
20870 65 6c 79 20 70 61 73 73 65 64 20 74 6f 20 73 71  ely passed to sq
20880 6c 69 74 65 33 56 64 62 65 43 75 72 73 6f 72 4d  lite3VdbeCursorM
20890 6f 76 65 74 6f 28 29 2e 20 20 54 68 69 73 20 61  oveto().  This a
208a0 76 6f 69 64 73 20 61 20 74 65 73 74 0a 20 20 2a  voids a test.  *
208b0 2a 20 66 6f 72 20 70 43 78 2d 3e 65 43 75 72 54  * for pCx->eCurT
208c0 79 70 65 3d 3d 43 55 52 54 59 50 45 5f 42 54 52  ype==CURTYPE_BTR
208d0 45 45 20 69 6e 73 69 64 65 20 6f 66 20 73 71 6c  EE inside of sql
208e0 69 74 65 33 56 64 62 65 43 75 72 73 6f 72 4d 6f  ite3VdbeCursorMo
208f0 76 65 74 6f 28 29 0a 20 20 2a 2a 20 77 68 69 63  veto().  ** whic
20900 68 20 69 73 20 61 20 70 65 72 66 6f 72 6d 61 6e  h is a performan
20910 63 65 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 20  ce optimization 
20920 2a 2f 0a 20 20 70 43 78 2d 3e 75 63 2e 70 43 75  */.  pCx->uc.pCu
20930 72 73 6f 72 20 3d 20 73 71 6c 69 74 65 33 42 74  rsor = sqlite3Bt
20940 72 65 65 46 61 6b 65 56 61 6c 69 64 43 75 72 73  reeFakeValidCurs
20950 6f 72 28 29 3b 0a 20 20 61 73 73 65 72 74 28 20  or();.  assert( 
20960 70 4f 70 2d 3e 70 35 3d 3d 30 20 29 3b 0a 20 20  pOp->p5==0 );.  
20970 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
20980 6f 64 65 3a 20 43 6c 6f 73 65 20 50 31 20 2a 20  ode: Close P1 * 
20990 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 43 6c 6f 73  * * *.**.** Clos
209a0 65 20 61 20 63 75 72 73 6f 72 20 70 72 65 76 69  e a cursor previ
209b0 6f 75 73 6c 79 20 6f 70 65 6e 65 64 20 61 73 20  ously opened as 
209c0 50 31 2e 20 20 49 66 20 50 31 20 69 73 20 6e 6f  P1.  If P1 is no
209d0 74 0a 2a 2a 20 63 75 72 72 65 6e 74 6c 79 20 6f  t.** currently o
209e0 70 65 6e 2c 20 74 68 69 73 20 69 6e 73 74 72 75  pen, this instru
209f0 63 74 69 6f 6e 20 69 73 20 61 20 6e 6f 2d 6f 70  ction is a no-op
20a00 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 6c 6f  ..*/.case OP_Clo
20a10 73 65 3a 20 7b 0a 20 20 61 73 73 65 72 74 28 20  se: {.  assert( 
20a20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f  pOp->p1>=0 && pO
20a30 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72  p->p1<p->nCursor
20a40 20 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62   );.  sqlite3Vdb
20a50 65 46 72 65 65 43 75 72 73 6f 72 28 70 2c 20 70  eFreeCursor(p, p
20a60 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d  ->apCsr[pOp->p1]
20a70 29 3b 0a 20 20 70 2d 3e 61 70 43 73 72 5b 70 4f  );.  p->apCsr[pO
20a80 70 2d 3e 70 31 5d 20 3d 20 30 3b 0a 20 20 62 72  p->p1] = 0;.  br
20a90 65 61 6b 3b 0a 7d 0a 0a 23 69 66 64 65 66 20 53  eak;.}..#ifdef S
20aa0 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 43 4f 4c  QLITE_ENABLE_COL
20ab0 55 4d 4e 5f 55 53 45 44 5f 4d 41 53 4b 0a 2f 2a  UMN_USED_MASK./*
20ac0 20 4f 70 63 6f 64 65 3a 20 43 6f 6c 75 6d 6e 73   Opcode: Columns
20ad0 55 73 65 64 20 50 31 20 2a 20 2a 20 50 34 20 2a  Used P1 * * P4 *
20ae0 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f  .**.** This opco
20af0 64 65 20 28 77 68 69 63 68 20 6f 6e 6c 79 20 65  de (which only e
20b00 78 69 73 74 73 20 69 66 20 53 51 4c 69 74 65 20  xists if SQLite 
20b10 77 61 73 20 63 6f 6d 70 69 6c 65 64 20 77 69 74  was compiled wit
20b20 68 0a 2a 2a 20 53 51 4c 49 54 45 5f 45 4e 41 42  h.** SQLITE_ENAB
20b30 4c 45 5f 43 4f 4c 55 4d 4e 5f 55 53 45 44 5f 4d  LE_COLUMN_USED_M
20b40 41 53 4b 29 20 69 64 65 6e 74 69 66 69 65 73 20  ASK) identifies 
20b50 77 68 69 63 68 20 63 6f 6c 75 6d 6e 73 20 6f 66  which columns of
20b60 20 74 68 65 0a 2a 2a 20 74 61 62 6c 65 20 6f 72   the.** table or
20b70 20 69 6e 64 65 78 20 66 6f 72 20 63 75 72 73 6f   index for curso
20b80 72 20 50 31 20 61 72 65 20 75 73 65 64 2e 20 20  r P1 are used.  
20b90 50 34 20 69 73 20 61 20 36 34 2d 62 69 74 20 69  P4 is a 64-bit i
20ba0 6e 74 65 67 65 72 0a 2a 2a 20 28 50 34 5f 49 4e  nteger.** (P4_IN
20bb0 54 36 34 29 20 69 6e 20 77 68 69 63 68 20 74 68  T64) in which th
20bc0 65 20 66 69 72 73 74 20 36 33 20 62 69 74 73 20  e first 63 bits 
20bd0 61 72 65 20 6f 6e 65 20 66 6f 72 20 65 61 63 68  are one for each
20be0 20 6f 66 20 74 68 65 0a 2a 2a 20 66 69 72 73 74   of the.** first
20bf0 20 36 33 20 63 6f 6c 75 6d 6e 73 20 6f 66 20 74   63 columns of t
20c00 68 65 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65  he table or inde
20c10 78 20 74 68 61 74 20 61 72 65 20 61 63 74 75 61  x that are actua
20c20 6c 6c 79 20 75 73 65 64 0a 2a 2a 20 62 79 20 74  lly used.** by t
20c30 68 65 20 63 75 72 73 6f 72 2e 20 20 54 68 65 20  he cursor.  The 
20c40 68 69 67 68 2d 6f 72 64 65 72 20 62 69 74 20 69  high-order bit i
20c50 73 20 73 65 74 20 69 66 20 61 6e 79 20 63 6f 6c  s set if any col
20c60 75 6d 6e 20 61 66 74 65 72 0a 2a 2a 20 74 68 65  umn after.** the
20c70 20 36 34 74 68 20 69 73 20 75 73 65 64 2e 0a 2a   64th is used..*
20c80 2f 0a 63 61 73 65 20 4f 50 5f 43 6f 6c 75 6d 6e  /.case OP_Column
20c90 73 55 73 65 64 3a 20 7b 0a 20 20 56 64 62 65 43  sUsed: {.  VdbeC
20ca0 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 70 43 20  ursor *pC;.  pC 
20cb0 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e  = p->apCsr[pOp->
20cc0 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p1];.  assert( p
20cd0 43 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43 55 52  C->eCurType==CUR
20ce0 54 59 50 45 5f 42 54 52 45 45 20 29 3b 0a 20 20  TYPE_BTREE );.  
20cf0 70 43 2d 3e 6d 61 73 6b 55 73 65 64 20 3d 20 2a  pC->maskUsed = *
20d00 28 75 36 34 2a 29 70 4f 70 2d 3e 70 34 2e 70 49  (u64*)pOp->p4.pI
20d10 36 34 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23  64;.  break;.}.#
20d20 65 6e 64 69 66 0a 0a 2f 2a 20 4f 70 63 6f 64 65  endif../* Opcode
20d30 3a 20 53 65 65 6b 47 45 20 50 31 20 50 32 20 50  : SeekGE P1 P2 P
20d40 33 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73  3 P4 *.** Synops
20d50 69 73 3a 20 6b 65 79 3d 72 5b 50 33 40 50 34 5d  is: key=r[P3@P4]
20d60 0a 2a 2a 0a 2a 2a 20 49 66 20 63 75 72 73 6f 72  .**.** If cursor
20d70 20 50 31 20 72 65 66 65 72 73 20 74 6f 20 61 6e   P1 refers to an
20d80 20 53 51 4c 20 74 61 62 6c 65 20 28 42 2d 54 72   SQL table (B-Tr
20d90 65 65 20 74 68 61 74 20 75 73 65 73 20 69 6e 74  ee that uses int
20da0 65 67 65 72 20 6b 65 79 73 29 2c 20 0a 2a 2a 20  eger keys), .** 
20db0 75 73 65 20 74 68 65 20 76 61 6c 75 65 20 69 6e  use the value in
20dc0 20 72 65 67 69 73 74 65 72 20 50 33 20 61 73 20   register P3 as 
20dd0 74 68 65 20 6b 65 79 2e 20 20 49 66 20 63 75 72  the key.  If cur
20de0 73 6f 72 20 50 31 20 72 65 66 65 72 73 20 0a 2a  sor P1 refers .*
20df0 2a 20 74 6f 20 61 6e 20 53 51 4c 20 69 6e 64 65  * to an SQL inde
20e00 78 2c 20 74 68 65 6e 20 50 33 20 69 73 20 74 68  x, then P3 is th
20e10 65 20 66 69 72 73 74 20 69 6e 20 61 6e 20 61 72  e first in an ar
20e20 72 61 79 20 6f 66 20 50 34 20 72 65 67 69 73 74  ray of P4 regist
20e30 65 72 73 20 0a 2a 2a 20 74 68 61 74 20 61 72 65  ers .** that are
20e40 20 75 73 65 64 20 61 73 20 61 6e 20 75 6e 70 61   used as an unpa
20e50 63 6b 65 64 20 69 6e 64 65 78 20 6b 65 79 2e 20  cked index key. 
20e60 0a 2a 2a 0a 2a 2a 20 52 65 70 6f 73 69 74 69 6f  .**.** Repositio
20e70 6e 20 63 75 72 73 6f 72 20 50 31 20 73 6f 20 74  n cursor P1 so t
20e80 68 61 74 20 20 69 74 20 70 6f 69 6e 74 73 20 74  hat  it points t
20e90 6f 20 74 68 65 20 73 6d 61 6c 6c 65 73 74 20 65  o the smallest e
20ea0 6e 74 72 79 20 74 68 61 74 20 0a 2a 2a 20 69 73  ntry that .** is
20eb0 20 67 72 65 61 74 65 72 20 74 68 61 6e 20 6f 72   greater than or
20ec0 20 65 71 75 61 6c 20 74 6f 20 74 68 65 20 6b 65   equal to the ke
20ed0 79 20 76 61 6c 75 65 2e 20 49 66 20 74 68 65 72  y value. If ther
20ee0 65 20 61 72 65 20 6e 6f 20 72 65 63 6f 72 64 73  e are no records
20ef0 20 0a 2a 2a 20 67 72 65 61 74 65 72 20 74 68 61   .** greater tha
20f00 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f 20 74 68  n or equal to th
20f10 65 20 6b 65 79 20 61 6e 64 20 50 32 20 69 73 20  e key and P2 is 
20f20 6e 6f 74 20 7a 65 72 6f 2c 20 74 68 65 6e 20 6a  not zero, then j
20f30 75 6d 70 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a  ump to P2..**.**
20f40 20 49 66 20 74 68 65 20 63 75 72 73 6f 72 20 50   If the cursor P
20f50 31 20 77 61 73 20 6f 70 65 6e 65 64 20 75 73 69  1 was opened usi
20f60 6e 67 20 74 68 65 20 4f 50 46 4c 41 47 5f 53 45  ng the OPFLAG_SE
20f70 45 4b 45 51 20 66 6c 61 67 2c 20 74 68 65 6e 20  EKEQ flag, then 
20f80 74 68 69 73 0a 2a 2a 20 6f 70 63 6f 64 65 20 77  this.** opcode w
20f90 69 6c 6c 20 61 6c 77 61 79 73 20 6c 61 6e 64 20  ill always land 
20fa0 6f 6e 20 61 20 72 65 63 6f 72 64 20 74 68 61 74  on a record that
20fb0 20 65 71 75 61 6c 6c 79 20 65 71 75 61 6c 73 20   equally equals 
20fc0 74 68 65 20 6b 65 79 2c 20 6f 72 0a 2a 2a 20 65  the key, or.** e
20fd0 6c 73 65 20 6a 75 6d 70 20 69 6d 6d 65 64 69 61  lse jump immedia
20fe0 74 65 6c 79 20 74 6f 20 50 32 2e 20 20 57 68 65  tely to P2.  Whe
20ff0 6e 20 74 68 65 20 63 75 72 73 6f 72 20 69 73 20  n the cursor is 
21000 4f 50 46 4c 41 47 5f 53 45 45 4b 45 51 2c 20 74  OPFLAG_SEEKEQ, t
21010 68 69 73 0a 2a 2a 20 6f 70 63 6f 64 65 20 6d 75  his.** opcode mu
21020 73 74 20 62 65 20 66 6f 6c 6c 6f 77 65 64 20 62  st be followed b
21030 79 20 61 6e 20 49 64 78 4c 45 20 6f 70 63 6f 64  y an IdxLE opcod
21040 65 20 77 69 74 68 20 74 68 65 20 73 61 6d 65 20  e with the same 
21050 61 72 67 75 6d 65 6e 74 73 2e 0a 2a 2a 20 54 68  arguments..** Th
21060 65 20 49 64 78 4c 45 20 6f 70 63 6f 64 65 20 77  e IdxLE opcode w
21070 69 6c 6c 20 62 65 20 73 6b 69 70 70 65 64 20 69  ill be skipped i
21080 66 20 74 68 69 73 20 6f 70 63 6f 64 65 20 73 75  f this opcode su
21090 63 63 65 65 64 73 2c 20 62 75 74 20 74 68 65 0a  cceeds, but the.
210a0 2a 2a 20 49 64 78 4c 45 20 6f 70 63 6f 64 65 20  ** IdxLE opcode 
210b0 77 69 6c 6c 20 62 65 20 75 73 65 64 20 6f 6e 20  will be used on 
210c0 73 75 62 73 65 71 75 65 6e 74 20 6c 6f 6f 70 20  subsequent loop 
210d0 69 74 65 72 61 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a  iterations..**.*
210e0 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 6c 65  * This opcode le
210f0 61 76 65 73 20 74 68 65 20 63 75 72 73 6f 72 20  aves the cursor 
21100 63 6f 6e 66 69 67 75 72 65 64 20 74 6f 20 6d 6f  configured to mo
21110 76 65 20 69 6e 20 66 6f 72 77 61 72 64 20 6f 72  ve in forward or
21120 64 65 72 2c 0a 2a 2a 20 66 72 6f 6d 20 74 68 65  der,.** from the
21130 20 62 65 67 69 6e 6e 69 6e 67 20 74 6f 77 61 72   beginning towar
21140 64 20 74 68 65 20 65 6e 64 2e 20 20 49 6e 20 6f  d the end.  In o
21150 74 68 65 72 20 77 6f 72 64 73 2c 20 74 68 65 20  ther words, the 
21160 63 75 72 73 6f 72 20 69 73 0a 2a 2a 20 63 6f 6e  cursor is.** con
21170 66 69 67 75 72 65 64 20 74 6f 20 75 73 65 20 4e  figured to use N
21180 65 78 74 2c 20 6e 6f 74 20 50 72 65 76 2e 0a 2a  ext, not Prev..*
21190 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 46  *.** See also: F
211a0 6f 75 6e 64 2c 20 4e 6f 74 46 6f 75 6e 64 2c 20  ound, NotFound, 
211b0 53 65 65 6b 4c 74 2c 20 53 65 65 6b 47 74 2c 20  SeekLt, SeekGt, 
211c0 53 65 65 6b 4c 65 0a 2a 2f 0a 2f 2a 20 4f 70 63  SeekLe.*/./* Opc
211d0 6f 64 65 3a 20 53 65 65 6b 47 54 20 50 31 20 50  ode: SeekGT P1 P
211e0 32 20 50 33 20 50 34 20 2a 0a 2a 2a 20 53 79 6e  2 P3 P4 *.** Syn
211f0 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50 33 40  opsis: key=r[P3@
21200 50 34 5d 0a 2a 2a 0a 2a 2a 20 49 66 20 63 75 72  P4].**.** If cur
21210 73 6f 72 20 50 31 20 72 65 66 65 72 73 20 74 6f  sor P1 refers to
21220 20 61 6e 20 53 51 4c 20 74 61 62 6c 65 20 28 42   an SQL table (B
21230 2d 54 72 65 65 20 74 68 61 74 20 75 73 65 73 20  -Tree that uses 
21240 69 6e 74 65 67 65 72 20 6b 65 79 73 29 2c 20 0a  integer keys), .
21250 2a 2a 20 75 73 65 20 74 68 65 20 76 61 6c 75 65  ** use the value
21260 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 20   in register P3 
21270 61 73 20 61 20 6b 65 79 2e 20 49 66 20 63 75 72  as a key. If cur
21280 73 6f 72 20 50 31 20 72 65 66 65 72 73 20 0a 2a  sor P1 refers .*
21290 2a 20 74 6f 20 61 6e 20 53 51 4c 20 69 6e 64 65  * to an SQL inde
212a0 78 2c 20 74 68 65 6e 20 50 33 20 69 73 20 74 68  x, then P3 is th
212b0 65 20 66 69 72 73 74 20 69 6e 20 61 6e 20 61 72  e first in an ar
212c0 72 61 79 20 6f 66 20 50 34 20 72 65 67 69 73 74  ray of P4 regist
212d0 65 72 73 20 0a 2a 2a 20 74 68 61 74 20 61 72 65  ers .** that are
212e0 20 75 73 65 64 20 61 73 20 61 6e 20 75 6e 70 61   used as an unpa
212f0 63 6b 65 64 20 69 6e 64 65 78 20 6b 65 79 2e 20  cked index key. 
21300 0a 2a 2a 0a 2a 2a 20 52 65 70 6f 73 69 74 69 6f  .**.** Repositio
21310 6e 20 63 75 72 73 6f 72 20 50 31 20 73 6f 20 74  n cursor P1 so t
21320 68 61 74 20 20 69 74 20 70 6f 69 6e 74 73 20 74  hat  it points t
21330 6f 20 74 68 65 20 73 6d 61 6c 6c 65 73 74 20 65  o the smallest e
21340 6e 74 72 79 20 74 68 61 74 20 0a 2a 2a 20 69 73  ntry that .** is
21350 20 67 72 65 61 74 65 72 20 74 68 61 6e 20 74 68   greater than th
21360 65 20 6b 65 79 20 76 61 6c 75 65 2e 20 49 66 20  e key value. If 
21370 74 68 65 72 65 20 61 72 65 20 6e 6f 20 72 65 63  there are no rec
21380 6f 72 64 73 20 67 72 65 61 74 65 72 20 74 68 61  ords greater tha
21390 6e 20 0a 2a 2a 20 74 68 65 20 6b 65 79 20 61 6e  n .** the key an
213a0 64 20 50 32 20 69 73 20 6e 6f 74 20 7a 65 72 6f  d P2 is not zero
213b0 2c 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20 50  , then jump to P
213c0 32 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70  2..**.** This op
213d0 63 6f 64 65 20 6c 65 61 76 65 73 20 74 68 65 20  code leaves the 
213e0 63 75 72 73 6f 72 20 63 6f 6e 66 69 67 75 72 65  cursor configure
213f0 64 20 74 6f 20 6d 6f 76 65 20 69 6e 20 66 6f 72  d to move in for
21400 77 61 72 64 20 6f 72 64 65 72 2c 0a 2a 2a 20 66  ward order,.** f
21410 72 6f 6d 20 74 68 65 20 62 65 67 69 6e 6e 69 6e  rom the beginnin
21420 67 20 74 6f 77 61 72 64 20 74 68 65 20 65 6e 64  g toward the end
21430 2e 20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64  .  In other word
21440 73 2c 20 74 68 65 20 63 75 72 73 6f 72 20 69 73  s, the cursor is
21450 0a 2a 2a 20 63 6f 6e 66 69 67 75 72 65 64 20 74  .** configured t
21460 6f 20 75 73 65 20 4e 65 78 74 2c 20 6e 6f 74 20  o use Next, not 
21470 50 72 65 76 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20  Prev..**.** See 
21480 61 6c 73 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f 74  also: Found, Not
21490 46 6f 75 6e 64 2c 20 53 65 65 6b 4c 74 2c 20 53  Found, SeekLt, S
214a0 65 65 6b 47 65 2c 20 53 65 65 6b 4c 65 0a 2a 2f  eekGe, SeekLe.*/
214b0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 65 65 6b  ./* Opcode: Seek
214c0 4c 54 20 50 31 20 50 32 20 50 33 20 50 34 20 2a  LT P1 P2 P3 P4 *
214d0 20 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b   .** Synopsis: k
214e0 65 79 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a  ey=r[P3@P4].**.*
214f0 2a 20 49 66 20 63 75 72 73 6f 72 20 50 31 20 72  * If cursor P1 r
21500 65 66 65 72 73 20 74 6f 20 61 6e 20 53 51 4c 20  efers to an SQL 
21510 74 61 62 6c 65 20 28 42 2d 54 72 65 65 20 74 68  table (B-Tree th
21520 61 74 20 75 73 65 73 20 69 6e 74 65 67 65 72 20  at uses integer 
21530 6b 65 79 73 29 2c 20 0a 2a 2a 20 75 73 65 20 74  keys), .** use t
21540 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69  he value in regi
21550 73 74 65 72 20 50 33 20 61 73 20 61 20 6b 65 79  ster P3 as a key
21560 2e 20 49 66 20 63 75 72 73 6f 72 20 50 31 20 72  . If cursor P1 r
21570 65 66 65 72 73 20 0a 2a 2a 20 74 6f 20 61 6e 20  efers .** to an 
21580 53 51 4c 20 69 6e 64 65 78 2c 20 74 68 65 6e 20  SQL index, then 
21590 50 33 20 69 73 20 74 68 65 20 66 69 72 73 74 20  P3 is the first 
215a0 69 6e 20 61 6e 20 61 72 72 61 79 20 6f 66 20 50  in an array of P
215b0 34 20 72 65 67 69 73 74 65 72 73 20 0a 2a 2a 20  4 registers .** 
215c0 74 68 61 74 20 61 72 65 20 75 73 65 64 20 61 73  that are used as
215d0 20 61 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e 64   an unpacked ind
215e0 65 78 20 6b 65 79 2e 20 0a 2a 2a 0a 2a 2a 20 52  ex key. .**.** R
215f0 65 70 6f 73 69 74 69 6f 6e 20 63 75 72 73 6f 72  eposition cursor
21600 20 50 31 20 73 6f 20 74 68 61 74 20 20 69 74 20   P1 so that  it 
21610 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 20 6c 61  points to the la
21620 72 67 65 73 74 20 65 6e 74 72 79 20 74 68 61 74  rgest entry that
21630 20 0a 2a 2a 20 69 73 20 6c 65 73 73 20 74 68 61   .** is less tha
21640 6e 20 74 68 65 20 6b 65 79 20 76 61 6c 75 65 2e  n the key value.
21650 20 49 66 20 74 68 65 72 65 20 61 72 65 20 6e 6f   If there are no
21660 20 72 65 63 6f 72 64 73 20 6c 65 73 73 20 74 68   records less th
21670 61 6e 20 0a 2a 2a 20 74 68 65 20 6b 65 79 20 61  an .** the key a
21680 6e 64 20 50 32 20 69 73 20 6e 6f 74 20 7a 65 72  nd P2 is not zer
21690 6f 2c 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20  o, then jump to 
216a0 50 32 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f  P2..**.** This o
216b0 70 63 6f 64 65 20 6c 65 61 76 65 73 20 74 68 65  pcode leaves the
216c0 20 63 75 72 73 6f 72 20 63 6f 6e 66 69 67 75 72   cursor configur
216d0 65 64 20 74 6f 20 6d 6f 76 65 20 69 6e 20 72 65  ed to move in re
216e0 76 65 72 73 65 20 6f 72 64 65 72 2c 0a 2a 2a 20  verse order,.** 
216f0 66 72 6f 6d 20 74 68 65 20 65 6e 64 20 74 6f 77  from the end tow
21700 61 72 64 20 74 68 65 20 62 65 67 69 6e 6e 69 6e  ard the beginnin
21710 67 2e 20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72  g.  In other wor
21720 64 73 2c 20 74 68 65 20 63 75 72 73 6f 72 20 69  ds, the cursor i
21730 73 0a 2a 2a 20 63 6f 6e 66 69 67 75 72 65 64 20  s.** configured 
21740 74 6f 20 75 73 65 20 50 72 65 76 2c 20 6e 6f 74  to use Prev, not
21750 20 4e 65 78 74 2e 0a 2a 2a 0a 2a 2a 20 53 65 65   Next..**.** See
21760 20 61 6c 73 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f   also: Found, No
21770 74 46 6f 75 6e 64 2c 20 53 65 65 6b 47 74 2c 20  tFound, SeekGt, 
21780 53 65 65 6b 47 65 2c 20 53 65 65 6b 4c 65 0a 2a  SeekGe, SeekLe.*
21790 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 65 65  /./* Opcode: See
217a0 6b 4c 45 20 50 31 20 50 32 20 50 33 20 50 34 20  kLE P1 P2 P3 P4 
217b0 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b  *.** Synopsis: k
217c0 65 79 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a  ey=r[P3@P4].**.*
217d0 2a 20 49 66 20 63 75 72 73 6f 72 20 50 31 20 72  * If cursor P1 r
217e0 65 66 65 72 73 20 74 6f 20 61 6e 20 53 51 4c 20  efers to an SQL 
217f0 74 61 62 6c 65 20 28 42 2d 54 72 65 65 20 74 68  table (B-Tree th
21800 61 74 20 75 73 65 73 20 69 6e 74 65 67 65 72 20  at uses integer 
21810 6b 65 79 73 29 2c 20 0a 2a 2a 20 75 73 65 20 74  keys), .** use t
21820 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69  he value in regi
21830 73 74 65 72 20 50 33 20 61 73 20 61 20 6b 65 79  ster P3 as a key
21840 2e 20 49 66 20 63 75 72 73 6f 72 20 50 31 20 72  . If cursor P1 r
21850 65 66 65 72 73 20 0a 2a 2a 20 74 6f 20 61 6e 20  efers .** to an 
21860 53 51 4c 20 69 6e 64 65 78 2c 20 74 68 65 6e 20  SQL index, then 
21870 50 33 20 69 73 20 74 68 65 20 66 69 72 73 74 20  P3 is the first 
21880 69 6e 20 61 6e 20 61 72 72 61 79 20 6f 66 20 50  in an array of P
21890 34 20 72 65 67 69 73 74 65 72 73 20 0a 2a 2a 20  4 registers .** 
218a0 74 68 61 74 20 61 72 65 20 75 73 65 64 20 61 73  that are used as
218b0 20 61 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e 64   an unpacked ind
218c0 65 78 20 6b 65 79 2e 20 0a 2a 2a 0a 2a 2a 20 52  ex key. .**.** R
218d0 65 70 6f 73 69 74 69 6f 6e 20 63 75 72 73 6f 72  eposition cursor
218e0 20 50 31 20 73 6f 20 74 68 61 74 20 69 74 20 70   P1 so that it p
218f0 6f 69 6e 74 73 20 74 6f 20 74 68 65 20 6c 61 72  oints to the lar
21900 67 65 73 74 20 65 6e 74 72 79 20 74 68 61 74 20  gest entry that 
21910 0a 2a 2a 20 69 73 20 6c 65 73 73 20 74 68 61 6e  .** is less than
21920 20 6f 72 20 65 71 75 61 6c 20 74 6f 20 74 68 65   or equal to the
21930 20 6b 65 79 20 76 61 6c 75 65 2e 20 49 66 20 74   key value. If t
21940 68 65 72 65 20 61 72 65 20 6e 6f 20 72 65 63 6f  here are no reco
21950 72 64 73 20 0a 2a 2a 20 6c 65 73 73 20 74 68 61  rds .** less tha
21960 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f 20 74 68  n or equal to th
21970 65 20 6b 65 79 20 61 6e 64 20 50 32 20 69 73 20  e key and P2 is 
21980 6e 6f 74 20 7a 65 72 6f 2c 20 74 68 65 6e 20 6a  not zero, then j
21990 75 6d 70 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a  ump to P2..**.**
219a0 20 54 68 69 73 20 6f 70 63 6f 64 65 20 6c 65 61   This opcode lea
219b0 76 65 73 20 74 68 65 20 63 75 72 73 6f 72 20 63  ves the cursor c
219c0 6f 6e 66 69 67 75 72 65 64 20 74 6f 20 6d 6f 76  onfigured to mov
219d0 65 20 69 6e 20 72 65 76 65 72 73 65 20 6f 72 64  e in reverse ord
219e0 65 72 2c 0a 2a 2a 20 66 72 6f 6d 20 74 68 65 20  er,.** from the 
219f0 65 6e 64 20 74 6f 77 61 72 64 20 74 68 65 20 62  end toward the b
21a00 65 67 69 6e 6e 69 6e 67 2e 20 20 49 6e 20 6f 74  eginning.  In ot
21a10 68 65 72 20 77 6f 72 64 73 2c 20 74 68 65 20 63  her words, the c
21a20 75 72 73 6f 72 20 69 73 0a 2a 2a 20 63 6f 6e 66  ursor is.** conf
21a30 69 67 75 72 65 64 20 74 6f 20 75 73 65 20 50 72  igured to use Pr
21a40 65 76 2c 20 6e 6f 74 20 4e 65 78 74 2e 0a 2a 2a  ev, not Next..**
21a50 0a 2a 2a 20 49 66 20 74 68 65 20 63 75 72 73 6f  .** If the curso
21a60 72 20 50 31 20 77 61 73 20 6f 70 65 6e 65 64 20  r P1 was opened 
21a70 75 73 69 6e 67 20 74 68 65 20 4f 50 46 4c 41 47  using the OPFLAG
21a80 5f 53 45 45 4b 45 51 20 66 6c 61 67 2c 20 74 68  _SEEKEQ flag, th
21a90 65 6e 20 74 68 69 73 0a 2a 2a 20 6f 70 63 6f 64  en this.** opcod
21aa0 65 20 77 69 6c 6c 20 61 6c 77 61 79 73 20 6c 61  e will always la
21ab0 6e 64 20 6f 6e 20 61 20 72 65 63 6f 72 64 20 74  nd on a record t
21ac0 68 61 74 20 65 71 75 61 6c 6c 79 20 65 71 75 61  hat equally equa
21ad0 6c 73 20 74 68 65 20 6b 65 79 2c 20 6f 72 0a 2a  ls the key, or.*
21ae0 2a 20 65 6c 73 65 20 6a 75 6d 70 20 69 6d 6d 65  * else jump imme
21af0 64 69 61 74 65 6c 79 20 74 6f 20 50 32 2e 20 20  diately to P2.  
21b00 57 68 65 6e 20 74 68 65 20 63 75 72 73 6f 72 20  When the cursor 
21b10 69 73 20 4f 50 46 4c 41 47 5f 53 45 45 4b 45 51  is OPFLAG_SEEKEQ
21b20 2c 20 74 68 69 73 0a 2a 2a 20 6f 70 63 6f 64 65  , this.** opcode
21b30 20 6d 75 73 74 20 62 65 20 66 6f 6c 6c 6f 77 65   must be followe
21b40 64 20 62 79 20 61 6e 20 49 64 78 47 45 20 6f 70  d by an IdxGE op
21b50 63 6f 64 65 20 77 69 74 68 20 74 68 65 20 73 61  code with the sa
21b60 6d 65 20 61 72 67 75 6d 65 6e 74 73 2e 0a 2a 2a  me arguments..**
21b70 20 54 68 65 20 49 64 78 47 45 20 6f 70 63 6f 64   The IdxGE opcod
21b80 65 20 77 69 6c 6c 20 62 65 20 73 6b 69 70 70 65  e will be skippe
21b90 64 20 69 66 20 74 68 69 73 20 6f 70 63 6f 64 65  d if this opcode
21ba0 20 73 75 63 63 65 65 64 73 2c 20 62 75 74 20 74   succeeds, but t
21bb0 68 65 0a 2a 2a 20 49 64 78 47 45 20 6f 70 63 6f  he.** IdxGE opco
21bc0 64 65 20 77 69 6c 6c 20 62 65 20 75 73 65 64 20  de will be used 
21bd0 6f 6e 20 73 75 62 73 65 71 75 65 6e 74 20 6c 6f  on subsequent lo
21be0 6f 70 20 69 74 65 72 61 74 69 6f 6e 73 2e 0a 2a  op iterations..*
21bf0 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 46  *.** See also: F
21c00 6f 75 6e 64 2c 20 4e 6f 74 46 6f 75 6e 64 2c 20  ound, NotFound, 
21c10 53 65 65 6b 47 74 2c 20 53 65 65 6b 47 65 2c 20  SeekGt, SeekGe, 
21c20 53 65 65 6b 4c 74 0a 2a 2f 0a 63 61 73 65 20 4f  SeekLt.*/.case O
21c30 50 5f 53 65 65 6b 4c 54 3a 20 20 20 20 20 20 20  P_SeekLT:       
21c40 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 2c 20    /* jump, in3, 
21c50 67 72 6f 75 70 20 2a 2f 0a 63 61 73 65 20 4f 50  group */.case OP
21c60 5f 53 65 65 6b 4c 45 3a 20 20 20 20 20 20 20 20  _SeekLE:        
21c70 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 2c 20 67   /* jump, in3, g
21c80 72 6f 75 70 20 2a 2f 0a 63 61 73 65 20 4f 50 5f  roup */.case OP_
21c90 53 65 65 6b 47 45 3a 20 20 20 20 20 20 20 20 20  SeekGE:         
21ca0 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 2c 20 67 72  /* jump, in3, gr
21cb0 6f 75 70 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 53  oup */.case OP_S
21cc0 65 65 6b 47 54 3a 20 7b 20 20 20 20 20 20 20 2f  eekGT: {       /
21cd0 2a 20 6a 75 6d 70 2c 20 69 6e 33 2c 20 67 72 6f  * jump, in3, gro
21ce0 75 70 20 2a 2f 0a 20 20 69 6e 74 20 72 65 73 3b  up */.  int res;
21cf0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f             /* Co
21d00 6d 70 61 72 69 73 6f 6e 20 72 65 73 75 6c 74 20  mparison result 
21d10 2a 2f 0a 20 20 69 6e 74 20 6f 63 3b 20 20 20 20  */.  int oc;    
21d20 20 20 20 20 20 20 20 20 2f 2a 20 4f 70 63 6f 64          /* Opcod
21d30 65 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73 6f  e */.  VdbeCurso
21d40 72 20 2a 70 43 3b 20 20 20 20 2f 2a 20 54 68 65  r *pC;    /* The
21d50 20 63 75 72 73 6f 72 20 74 6f 20 73 65 65 6b 20   cursor to seek 
21d60 2a 2f 0a 20 20 55 6e 70 61 63 6b 65 64 52 65 63  */.  UnpackedRec
21d70 6f 72 64 20 72 3b 20 20 2f 2a 20 54 68 65 20 6b  ord r;  /* The k
21d80 65 79 20 74 6f 20 73 65 65 6b 20 66 6f 72 20 2a  ey to seek for *
21d90 2f 0a 20 20 69 6e 74 20 6e 46 69 65 6c 64 3b 20  /.  int nField; 
21da0 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
21db0 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 6f 72 20 66   of columns or f
21dc0 69 65 6c 64 73 20 69 6e 20 74 68 65 20 6b 65 79  ields in the key
21dd0 20 2a 2f 0a 20 20 69 36 34 20 69 4b 65 79 3b 20   */.  i64 iKey; 
21de0 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
21df0 72 6f 77 69 64 20 77 65 20 61 72 65 20 74 6f 20  rowid we are to 
21e00 73 65 65 6b 20 74 6f 20 2a 2f 0a 20 20 69 6e 74  seek to */.  int
21e10 20 65 71 4f 6e 6c 79 3b 20 20 20 20 20 20 20 20   eqOnly;        
21e20 2f 2a 20 4f 6e 6c 79 20 69 6e 74 65 72 65 73 74  /* Only interest
21e30 65 64 20 69 6e 20 3d 3d 20 72 65 73 75 6c 74 73  ed in == results
21e40 20 2a 2f 0a 0a 20 20 61 73 73 65 72 74 28 20 70   */..  assert( p
21e50 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70  Op->p1>=0 && pOp
21e60 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20  ->p1<p->nCursor 
21e70 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  );.  assert( pOp
21e80 2d 3e 70 32 21 3d 30 20 29 3b 0a 20 20 70 43 20  ->p2!=0 );.  pC 
21e90 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e  = p->apCsr[pOp->
21ea0 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p1];.  assert( p
21eb0 43 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  C!=0 );.  assert
21ec0 28 20 70 43 2d 3e 65 43 75 72 54 79 70 65 3d 3d  ( pC->eCurType==
21ed0 43 55 52 54 59 50 45 5f 42 54 52 45 45 20 29 3b  CURTYPE_BTREE );
21ee0 0a 20 20 61 73 73 65 72 74 28 20 4f 50 5f 53 65  .  assert( OP_Se
21ef0 65 6b 4c 45 20 3d 3d 20 4f 50 5f 53 65 65 6b 4c  ekLE == OP_SeekL
21f00 54 2b 31 20 29 3b 0a 20 20 61 73 73 65 72 74 28  T+1 );.  assert(
21f10 20 4f 50 5f 53 65 65 6b 47 45 20 3d 3d 20 4f 50   OP_SeekGE == OP
21f20 5f 53 65 65 6b 4c 54 2b 32 20 29 3b 0a 20 20 61  _SeekLT+2 );.  a
21f30 73 73 65 72 74 28 20 4f 50 5f 53 65 65 6b 47 54  ssert( OP_SeekGT
21f40 20 3d 3d 20 4f 50 5f 53 65 65 6b 4c 54 2b 33 20   == OP_SeekLT+3 
21f50 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d  );.  assert( pC-
21f60 3e 69 73 4f 72 64 65 72 65 64 20 29 3b 0a 20 20  >isOrdered );.  
21f70 61 73 73 65 72 74 28 20 70 43 2d 3e 75 63 2e 70  assert( pC->uc.p
21f80 43 75 72 73 6f 72 21 3d 30 20 29 3b 0a 20 20 6f  Cursor!=0 );.  o
21f90 63 20 3d 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3b  c = pOp->opcode;
21fa0 0a 20 20 65 71 4f 6e 6c 79 20 3d 20 30 3b 0a 20  .  eqOnly = 0;. 
21fb0 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 30   pC->nullRow = 0
21fc0 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ;.#ifdef SQLITE_
21fd0 44 45 42 55 47 0a 20 20 70 43 2d 3e 73 65 65 6b  DEBUG.  pC->seek
21fe0 4f 70 20 3d 20 70 4f 70 2d 3e 6f 70 63 6f 64 65  Op = pOp->opcode
21ff0 3b 0a 23 65 6e 64 69 66 0a 0a 20 20 70 43 2d 3e  ;.#endif..  pC->
22000 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d  deferredMoveto =
22010 20 30 3b 0a 20 20 70 43 2d 3e 63 61 63 68 65 53   0;.  pC->cacheS
22020 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54  tatus = CACHE_ST
22030 41 4c 45 3b 0a 20 20 69 66 28 20 70 43 2d 3e 69  ALE;.  if( pC->i
22040 73 54 61 62 6c 65 20 29 7b 0a 20 20 20 20 2f 2a  sTable ){.    /*
22050 20 54 68 65 20 42 54 52 45 45 5f 53 45 45 4b 5f   The BTREE_SEEK_
22060 45 51 20 66 6c 61 67 20 69 73 20 6f 6e 6c 79 20  EQ flag is only 
22070 73 65 74 20 6f 6e 20 69 6e 64 65 78 20 63 75 72  set on index cur
22080 73 6f 72 73 20 2a 2f 0a 20 20 20 20 61 73 73 65  sors */.    asse
22090 72 74 28 20 73 71 6c 69 74 65 33 42 74 72 65 65  rt( sqlite3Btree
220a0 43 75 72 73 6f 72 48 61 73 48 69 6e 74 28 70 43  CursorHasHint(pC
220b0 2d 3e 75 63 2e 70 43 75 72 73 6f 72 2c 20 42 54  ->uc.pCursor, BT
220c0 52 45 45 5f 53 45 45 4b 5f 45 51 29 3d 3d 30 0a  REE_SEEK_EQ)==0.
220d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7c 7c                ||
220e0 20 43 4f 52 52 55 50 54 5f 44 42 20 29 3b 0a 0a   CORRUPT_DB );..
220f0 20 20 20 20 2f 2a 20 54 68 65 20 69 6e 70 75 74      /* The input
22100 20 76 61 6c 75 65 20 69 6e 20 50 33 20 6d 69 67   value in P3 mig
22110 68 74 20 62 65 20 6f 66 20 61 6e 79 20 74 79 70  ht be of any typ
22120 65 3a 20 69 6e 74 65 67 65 72 2c 20 72 65 61 6c  e: integer, real
22130 2c 20 73 74 72 69 6e 67 2c 0a 20 20 20 20 2a 2a  , string,.    **
22140 20 62 6c 6f 62 2c 20 6f 72 20 4e 55 4c 4c 2e 20   blob, or NULL. 
22150 20 42 75 74 20 69 74 20 6e 65 65 64 73 20 74 6f   But it needs to
22160 20 62 65 20 61 6e 20 69 6e 74 65 67 65 72 20 62   be an integer b
22170 65 66 6f 72 65 20 77 65 20 63 61 6e 20 64 6f 0a  efore we can do.
22180 20 20 20 20 2a 2a 20 74 68 65 20 73 65 65 6b 2c      ** the seek,
22190 20 73 6f 20 63 6f 6e 76 65 72 74 20 69 74 2e 20   so convert it. 
221a0 2a 2f 0a 20 20 20 20 70 49 6e 33 20 3d 20 26 61  */.    pIn3 = &a
221b0 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20  Mem[pOp->p3];.  
221c0 20 20 69 66 28 20 28 70 49 6e 33 2d 3e 66 6c 61    if( (pIn3->fla
221d0 67 73 20 26 20 28 4d 45 4d 5f 49 6e 74 7c 4d 45  gs & (MEM_Int|ME
221e0 4d 5f 52 65 61 6c 7c 4d 45 4d 5f 49 6e 74 52 65  M_Real|MEM_IntRe
221f0 61 6c 7c 4d 45 4d 5f 53 74 72 29 29 3d 3d 4d 45  al|MEM_Str))==ME
22200 4d 5f 53 74 72 20 29 7b 0a 20 20 20 20 20 20 61  M_Str ){.      a
22210 70 70 6c 79 4e 75 6d 65 72 69 63 41 66 66 69 6e  pplyNumericAffin
22220 69 74 79 28 70 49 6e 33 2c 20 30 29 3b 0a 20 20  ity(pIn3, 0);.  
22230 20 20 7d 0a 20 20 20 20 69 4b 65 79 20 3d 20 73    }.    iKey = s
22240 71 6c 69 74 65 33 56 64 62 65 49 6e 74 56 61 6c  qlite3VdbeIntVal
22250 75 65 28 70 49 6e 33 29 3b 0a 0a 20 20 20 20 2f  ue(pIn3);..    /
22260 2a 20 49 66 20 74 68 65 20 50 33 20 76 61 6c 75  * If the P3 valu
22270 65 20 63 6f 75 6c 64 20 6e 6f 74 20 62 65 20 63  e could not be c
22280 6f 6e 76 65 72 74 65 64 20 69 6e 74 6f 20 61 6e  onverted into an
22290 20 69 6e 74 65 67 65 72 20 77 69 74 68 6f 75 74   integer without
222a0 0a 20 20 20 20 2a 2a 20 6c 6f 73 73 20 6f 66 20  .    ** loss of 
222b0 69 6e 66 6f 72 6d 61 74 69 6f 6e 2c 20 74 68 65  information, the
222c0 6e 20 73 70 65 63 69 61 6c 20 70 72 6f 63 65 73  n special proces
222d0 73 69 6e 67 20 69 73 20 72 65 71 75 69 72 65 64  sing is required
222e0 2e 2e 2e 20 2a 2f 0a 20 20 20 20 69 66 28 20 28  ... */.    if( (
222f0 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20 28 4d  pIn3->flags & (M
22300 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 49 6e 74 52 65  EM_Int|MEM_IntRe
22310 61 6c 29 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20  al))==0 ){.     
22320 20 69 66 28 20 28 70 49 6e 33 2d 3e 66 6c 61 67   if( (pIn3->flag
22330 73 20 26 20 4d 45 4d 5f 52 65 61 6c 29 3d 3d 30  s & MEM_Real)==0
22340 20 29 7b 0a 20 20 20 20 20 20 20 20 69 66 28 20   ){.        if( 
22350 28 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d  (pIn3->flags & M
22360 45 4d 5f 4e 75 6c 6c 29 20 7c 7c 20 6f 63 3e 3d  EM_Null) || oc>=
22370 4f 50 5f 53 65 65 6b 47 45 20 29 7b 0a 20 20 20  OP_SeekGE ){.   
22380 20 20 20 20 20 20 20 56 64 62 65 42 72 61 6e 63         VdbeBranc
22390 68 54 61 6b 65 6e 28 31 2c 32 29 3b 20 67 6f 74  hTaken(1,2); got
223a0 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20  o jump_to_p2;.  
223b0 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20          break;. 
223c0 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20         }else{.  
223d0 20 20 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c          rc = sql
223e0 69 74 65 33 42 74 72 65 65 4c 61 73 74 28 70 43  ite3BtreeLast(pC
223f0 2d 3e 75 63 2e 70 43 75 72 73 6f 72 2c 20 26 72  ->uc.pCursor, &r
22400 65 73 29 3b 0a 20 20 20 20 20 20 20 20 20 20 69  es);.          i
22410 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc!=SQLITE_OK
22420 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75   ) goto abort_du
22430 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20  e_to_error;.    
22440 20 20 20 20 20 20 67 6f 74 6f 20 73 65 65 6b 5f        goto seek_
22450 6e 6f 74 5f 66 6f 75 6e 64 3b 0a 20 20 20 20 20  not_found;.     
22460 20 20 20 7d 0a 20 20 20 20 20 20 7d 65 6c 73 65     }.      }else
22470 0a 0a 20 20 20 20 20 20 2f 2a 20 49 66 20 74 68  ..      /* If th
22480 65 20 61 70 70 72 6f 78 69 6d 61 74 69 6f 6e 20  e approximation 
22490 69 4b 65 79 20 69 73 20 6c 61 72 67 65 72 20 74  iKey is larger t
224a0 68 61 6e 20 74 68 65 20 61 63 74 75 61 6c 20 72  han the actual r
224b0 65 61 6c 20 73 65 61 72 63 68 0a 20 20 20 20 20  eal search.     
224c0 20 2a 2a 20 74 65 72 6d 2c 20 73 75 62 73 74 69   ** term, substi
224d0 74 75 74 65 20 3e 3d 20 66 6f 72 20 3e 20 61 6e  tute >= for > an
224e0 64 20 3c 20 66 6f 72 20 3c 3d 2e 20 65 2e 67 2e  d < for <=. e.g.
224f0 20 69 66 20 74 68 65 20 73 65 61 72 63 68 20 74   if the search t
22500 65 72 6d 0a 20 20 20 20 20 20 2a 2a 20 69 73 20  erm.      ** is 
22510 34 2e 39 20 61 6e 64 20 74 68 65 20 69 6e 74 65  4.9 and the inte
22520 67 65 72 20 61 70 70 72 6f 78 69 6d 61 74 69 6f  ger approximatio
22530 6e 20 35 3a 0a 20 20 20 20 20 20 2a 2a 0a 20 20  n 5:.      **.  
22540 20 20 20 20 2a 2a 20 20 20 20 20 20 20 20 28 78      **        (x
22550 20 3e 20 20 34 2e 39 29 20 20 20 20 2d 3e 20 20   >  4.9)    ->  
22560 20 20 20 28 78 20 3e 3d 20 35 29 0a 20 20 20 20     (x >= 5).    
22570 20 20 2a 2a 20 20 20 20 20 20 20 20 28 78 20 3c    **        (x <
22580 3d 20 34 2e 39 29 20 20 20 20 2d 3e 20 20 20 20  = 4.9)    ->    
22590 20 28 78 20 3c 20 20 35 29 0a 20 20 20 20 20 20   (x <  5).      
225a0 2a 2f 0a 20 20 20 20 20 20 69 66 28 20 70 49 6e  */.      if( pIn
225b0 33 2d 3e 75 2e 72 3c 28 64 6f 75 62 6c 65 29 69  3->u.r<(double)i
225c0 4b 65 79 20 29 7b 0a 20 20 20 20 20 20 20 20 61  Key ){.        a
225d0 73 73 65 72 74 28 20 4f 50 5f 53 65 65 6b 47 45  ssert( OP_SeekGE
225e0 3d 3d 28 4f 50 5f 53 65 65 6b 47 54 2d 31 29 20  ==(OP_SeekGT-1) 
225f0 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72  );.        asser
22600 74 28 20 4f 50 5f 53 65 65 6b 4c 54 3d 3d 28 4f  t( OP_SeekLT==(O
22610 50 5f 53 65 65 6b 4c 45 2d 31 29 20 29 3b 0a 20  P_SeekLE-1) );. 
22620 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20 28         assert( (
22630 4f 50 5f 53 65 65 6b 4c 45 20 26 20 30 78 30 30  OP_SeekLE & 0x00
22640 30 31 29 3d 3d 28 4f 50 5f 53 65 65 6b 47 54 20  01)==(OP_SeekGT 
22650 26 20 30 78 30 30 30 31 29 20 29 3b 0a 20 20 20  & 0x0001) );.   
22660 20 20 20 20 20 69 66 28 20 28 6f 63 20 26 20 30       if( (oc & 0
22670 78 30 30 30 31 29 3d 3d 28 4f 50 5f 53 65 65 6b  x0001)==(OP_Seek
22680 47 54 20 26 20 30 78 30 30 30 31 29 20 29 20 6f  GT & 0x0001) ) o
22690 63 2d 2d 3b 0a 20 20 20 20 20 20 7d 0a 0a 20 20  c--;.      }..  
226a0 20 20 20 20 2f 2a 20 49 66 20 74 68 65 20 61 70      /* If the ap
226b0 70 72 6f 78 69 6d 61 74 69 6f 6e 20 69 4b 65 79  proximation iKey
226c0 20 69 73 20 73 6d 61 6c 6c 65 72 20 74 68 61 6e   is smaller than
226d0 20 74 68 65 20 61 63 74 75 61 6c 20 72 65 61 6c   the actual real
226e0 20 73 65 61 72 63 68 0a 20 20 20 20 20 20 2a 2a   search.      **
226f0 20 74 65 72 6d 2c 20 73 75 62 73 74 69 74 75 74   term, substitut
22700 65 20 3c 3d 20 66 6f 72 20 3c 20 61 6e 64 20 3e  e <= for < and >
22710 20 66 6f 72 20 3e 3d 2e 20 20 2a 2f 0a 20 20 20   for >=.  */.   
22720 20 20 20 65 6c 73 65 20 69 66 28 20 70 49 6e 33     else if( pIn3
22730 2d 3e 75 2e 72 3e 28 64 6f 75 62 6c 65 29 69 4b  ->u.r>(double)iK
22740 65 79 20 29 7b 0a 20 20 20 20 20 20 20 20 61 73  ey ){.        as
22750 73 65 72 74 28 20 4f 50 5f 53 65 65 6b 4c 45 3d  sert( OP_SeekLE=
22760 3d 28 4f 50 5f 53 65 65 6b 4c 54 2b 31 29 20 29  =(OP_SeekLT+1) )
22770 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74  ;.        assert
22780 28 20 4f 50 5f 53 65 65 6b 47 54 3d 3d 28 4f 50  ( OP_SeekGT==(OP
22790 5f 53 65 65 6b 47 45 2b 31 29 20 29 3b 0a 20 20  _SeekGE+1) );.  
227a0 20 20 20 20 20 20 61 73 73 65 72 74 28 20 28 4f        assert( (O
227b0 50 5f 53 65 65 6b 4c 54 20 26 20 30 78 30 30 30  P_SeekLT & 0x000
227c0 31 29 3d 3d 28 4f 50 5f 53 65 65 6b 47 45 20 26  1)==(OP_SeekGE &
227d0 20 30 78 30 30 30 31 29 20 29 3b 0a 20 20 20 20   0x0001) );.    
227e0 20 20 20 20 69 66 28 20 28 6f 63 20 26 20 30 78      if( (oc & 0x
227f0 30 30 30 31 29 3d 3d 28 4f 50 5f 53 65 65 6b 4c  0001)==(OP_SeekL
22800 54 20 26 20 30 78 30 30 30 31 29 20 29 20 6f 63  T & 0x0001) ) oc
22810 2b 2b 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  ++;.      }.    
22820 7d 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74  }.    rc = sqlit
22830 65 33 42 74 72 65 65 4d 6f 76 65 74 6f 55 6e 70  e3BtreeMovetoUnp
22840 61 63 6b 65 64 28 70 43 2d 3e 75 63 2e 70 43 75  acked(pC->uc.pCu
22850 72 73 6f 72 2c 20 30 2c 20 28 75 36 34 29 69 4b  rsor, 0, (u64)iK
22860 65 79 2c 20 30 2c 20 26 72 65 73 29 3b 0a 20 20  ey, 0, &res);.  
22870 20 20 70 43 2d 3e 6d 6f 76 65 74 6f 54 61 72 67    pC->movetoTarg
22880 65 74 20 3d 20 69 4b 65 79 3b 20 20 2f 2a 20 55  et = iKey;  /* U
22890 73 65 64 20 62 79 20 4f 50 5f 44 65 6c 65 74 65  sed by OP_Delete
228a0 20 2a 2f 0a 20 20 20 20 69 66 28 20 72 63 21 3d   */.    if( rc!=
228b0 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20  SQLITE_OK ){.   
228c0 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75     goto abort_du
228d0 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20  e_to_error;.    
228e0 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 2f  }.  }else{.    /
228f0 2a 20 46 6f 72 20 61 20 63 75 72 73 6f 72 20 77  * For a cursor w
22900 69 74 68 20 74 68 65 20 42 54 52 45 45 5f 53 45  ith the BTREE_SE
22910 45 4b 5f 45 51 20 68 69 6e 74 2c 20 6f 6e 6c 79  EK_EQ hint, only
22920 20 74 68 65 20 4f 50 5f 53 65 65 6b 47 45 20 61   the OP_SeekGE a
22930 6e 64 0a 20 20 20 20 2a 2a 20 4f 50 5f 53 65 65  nd.    ** OP_See
22940 6b 4c 45 20 6f 70 63 6f 64 65 73 20 61 72 65 20  kLE opcodes are 
22950 61 6c 6c 6f 77 65 64 2c 20 61 6e 64 20 74 68 65  allowed, and the
22960 73 65 20 6d 75 73 74 20 62 65 20 69 6d 6d 65 64  se must be immed
22970 69 61 74 65 6c 79 20 66 6f 6c 6c 6f 77 65 64 0a  iately followed.
22980 20 20 20 20 2a 2a 20 62 79 20 61 6e 20 4f 50 5f      ** by an OP_
22990 49 64 78 47 54 20 6f 72 20 4f 50 5f 49 64 78 4c  IdxGT or OP_IdxL
229a0 54 20 6f 70 63 6f 64 65 2c 20 72 65 73 70 65 63  T opcode, respec
229b0 74 69 76 65 6c 79 2c 20 77 69 74 68 20 74 68 65  tively, with the
229c0 20 73 61 6d 65 20 6b 65 79 2e 0a 20 20 20 20 2a   same key..    *
229d0 2f 0a 20 20 20 20 69 66 28 20 73 71 6c 69 74 65  /.    if( sqlite
229e0 33 42 74 72 65 65 43 75 72 73 6f 72 48 61 73 48  3BtreeCursorHasH
229f0 69 6e 74 28 70 43 2d 3e 75 63 2e 70 43 75 72 73  int(pC->uc.pCurs
22a00 6f 72 2c 20 42 54 52 45 45 5f 53 45 45 4b 5f 45  or, BTREE_SEEK_E
22a10 51 29 20 29 7b 0a 20 20 20 20 20 20 65 71 4f 6e  Q) ){.      eqOn
22a20 6c 79 20 3d 20 31 3b 0a 20 20 20 20 20 20 61 73  ly = 1;.      as
22a30 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64  sert( pOp->opcod
22a40 65 3d 3d 4f 50 5f 53 65 65 6b 47 45 20 7c 7c 20  e==OP_SeekGE || 
22a50 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  pOp->opcode==OP_
22a60 53 65 65 6b 4c 45 20 29 3b 0a 20 20 20 20 20 20  SeekLE );.      
22a70 61 73 73 65 72 74 28 20 70 4f 70 5b 31 5d 2e 6f  assert( pOp[1].o
22a80 70 63 6f 64 65 3d 3d 4f 50 5f 49 64 78 4c 54 20  pcode==OP_IdxLT 
22a90 7c 7c 20 70 4f 70 5b 31 5d 2e 6f 70 63 6f 64 65  || pOp[1].opcode
22aa0 3d 3d 4f 50 5f 49 64 78 47 54 20 29 3b 0a 20 20  ==OP_IdxGT );.  
22ab0 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 5b      assert( pOp[
22ac0 31 5d 2e 70 31 3d 3d 70 4f 70 5b 30 5d 2e 70 31  1].p1==pOp[0].p1
22ad0 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74   );.      assert
22ae0 28 20 70 4f 70 5b 31 5d 2e 70 32 3d 3d 70 4f 70  ( pOp[1].p2==pOp
22af0 5b 30 5d 2e 70 32 20 29 3b 0a 20 20 20 20 20 20  [0].p2 );.      
22b00 61 73 73 65 72 74 28 20 70 4f 70 5b 31 5d 2e 70  assert( pOp[1].p
22b10 33 3d 3d 70 4f 70 5b 30 5d 2e 70 33 20 29 3b 0a  3==pOp[0].p3 );.
22b20 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f        assert( pO
22b30 70 5b 31 5d 2e 70 34 2e 69 3d 3d 70 4f 70 5b 30  p[1].p4.i==pOp[0
22b40 5d 2e 70 34 2e 69 20 29 3b 0a 20 20 20 20 7d 0a  ].p4.i );.    }.
22b50 0a 20 20 20 20 6e 46 69 65 6c 64 20 3d 20 70 4f  .    nField = pO
22b60 70 2d 3e 70 34 2e 69 3b 0a 20 20 20 20 61 73 73  p->p4.i;.    ass
22b70 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65  ert( pOp->p4type
22b80 3d 3d 50 34 5f 49 4e 54 33 32 20 29 3b 0a 20 20  ==P4_INT32 );.  
22b90 20 20 61 73 73 65 72 74 28 20 6e 46 69 65 6c 64    assert( nField
22ba0 3e 30 20 29 3b 0a 20 20 20 20 72 2e 70 4b 65 79  >0 );.    r.pKey
22bb0 49 6e 66 6f 20 3d 20 70 43 2d 3e 70 4b 65 79 49  Info = pC->pKeyI
22bc0 6e 66 6f 3b 0a 20 20 20 20 72 2e 6e 46 69 65 6c  nfo;.    r.nFiel
22bd0 64 20 3d 20 28 75 31 36 29 6e 46 69 65 6c 64 3b  d = (u16)nField;
22be0 0a 0a 20 20 20 20 2f 2a 20 54 68 65 20 6e 65 78  ..    /* The nex
22bf0 74 20 6c 69 6e 65 20 6f 66 20 63 6f 64 65 20 63  t line of code c
22c00 6f 6d 70 75 74 65 73 20 61 73 20 66 6f 6c 6c 6f  omputes as follo
22c10 77 73 2c 20 6f 6e 6c 79 20 66 61 73 74 65 72 3a  ws, only faster:
22c20 0a 20 20 20 20 2a 2a 20 20 20 69 66 28 20 6f 63  .    **   if( oc
22c30 3d 3d 4f 50 5f 53 65 65 6b 47 54 20 7c 7c 20 6f  ==OP_SeekGT || o
22c40 63 3d 3d 4f 50 5f 53 65 65 6b 4c 45 20 29 7b 0a  c==OP_SeekLE ){.
22c50 20 20 20 20 2a 2a 20 20 20 20 20 72 2e 64 65 66      **     r.def
22c60 61 75 6c 74 5f 72 63 20 3d 20 2d 31 3b 0a 20 20  ault_rc = -1;.  
22c70 20 20 2a 2a 20 20 20 7d 65 6c 73 65 7b 0a 20 20    **   }else{.  
22c80 20 20 2a 2a 20 20 20 20 20 72 2e 64 65 66 61 75    **     r.defau
22c90 6c 74 5f 72 63 20 3d 20 2b 31 3b 0a 20 20 20 20  lt_rc = +1;.    
22ca0 2a 2a 20 20 20 7d 0a 20 20 20 20 2a 2f 0a 20 20  **   }.    */.  
22cb0 20 20 72 2e 64 65 66 61 75 6c 74 5f 72 63 20 3d    r.default_rc =
22cc0 20 28 28 31 20 26 20 28 6f 63 20 2d 20 4f 50 5f   ((1 & (oc - OP_
22cd0 53 65 65 6b 4c 54 29 29 20 3f 20 2d 31 20 3a 20  SeekLT)) ? -1 : 
22ce0 2b 31 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  +1);.    assert(
22cf0 20 6f 63 21 3d 4f 50 5f 53 65 65 6b 47 54 20 7c   oc!=OP_SeekGT |
22d00 7c 20 72 2e 64 65 66 61 75 6c 74 5f 72 63 3d 3d  | r.default_rc==
22d10 2d 31 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74  -1 );.    assert
22d20 28 20 6f 63 21 3d 4f 50 5f 53 65 65 6b 4c 45 20  ( oc!=OP_SeekLE 
22d30 7c 7c 20 72 2e 64 65 66 61 75 6c 74 5f 72 63 3d  || r.default_rc=
22d40 3d 2d 31 20 29 3b 0a 20 20 20 20 61 73 73 65 72  =-1 );.    asser
22d50 74 28 20 6f 63 21 3d 4f 50 5f 53 65 65 6b 47 45  t( oc!=OP_SeekGE
22d60 20 7c 7c 20 72 2e 64 65 66 61 75 6c 74 5f 72 63   || r.default_rc
22d70 3d 3d 2b 31 20 29 3b 0a 20 20 20 20 61 73 73 65  ==+1 );.    asse
22d80 72 74 28 20 6f 63 21 3d 4f 50 5f 53 65 65 6b 4c  rt( oc!=OP_SeekL
22d90 54 20 7c 7c 20 72 2e 64 65 66 61 75 6c 74 5f 72  T || r.default_r
22da0 63 3d 3d 2b 31 20 29 3b 0a 0a 20 20 20 20 72 2e  c==+1 );..    r.
22db0 61 4d 65 6d 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  aMem = &aMem[pOp
22dc0 2d 3e 70 33 5d 3b 0a 23 69 66 64 65 66 20 53 51  ->p3];.#ifdef SQ
22dd0 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 20 20 7b  LITE_DEBUG.    {
22de0 20 69 6e 74 20 69 3b 20 66 6f 72 28 69 3d 30 3b   int i; for(i=0;
22df0 20 69 3c 72 2e 6e 46 69 65 6c 64 3b 20 69 2b 2b   i<r.nField; i++
22e00 29 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56  ) assert( memIsV
22e10 61 6c 69 64 28 26 72 2e 61 4d 65 6d 5b 69 5d 29  alid(&r.aMem[i])
22e20 20 29 3b 20 7d 0a 23 65 6e 64 69 66 0a 20 20 20   ); }.#endif.   
22e30 20 72 2e 65 71 53 65 65 6e 20 3d 20 30 3b 0a 20   r.eqSeen = 0;. 
22e40 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42     rc = sqlite3B
22e50 74 72 65 65 4d 6f 76 65 74 6f 55 6e 70 61 63 6b  treeMovetoUnpack
22e60 65 64 28 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f  ed(pC->uc.pCurso
22e70 72 2c 20 26 72 2c 20 30 2c 20 30 2c 20 26 72 65  r, &r, 0, 0, &re
22e80 73 29 3b 0a 20 20 20 20 69 66 28 20 72 63 21 3d  s);.    if( rc!=
22e90 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20  SQLITE_OK ){.   
22ea0 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75     goto abort_du
22eb0 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20  e_to_error;.    
22ec0 7d 0a 20 20 20 20 69 66 28 20 65 71 4f 6e 6c 79  }.    if( eqOnly
22ed0 20 26 26 20 72 2e 65 71 53 65 65 6e 3d 3d 30 20   && r.eqSeen==0 
22ee0 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  ){.      assert(
22ef0 20 72 65 73 21 3d 30 20 29 3b 0a 20 20 20 20 20   res!=0 );.     
22f00 20 67 6f 74 6f 20 73 65 65 6b 5f 6e 6f 74 5f 66   goto seek_not_f
22f10 6f 75 6e 64 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a  ound;.    }.  }.
22f20 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 54 45  #ifdef SQLITE_TE
22f30 53 54 0a 20 20 73 71 6c 69 74 65 33 5f 73 65 61  ST.  sqlite3_sea
22f40 72 63 68 5f 63 6f 75 6e 74 2b 2b 3b 0a 23 65 6e  rch_count++;.#en
22f50 64 69 66 0a 20 20 69 66 28 20 6f 63 3e 3d 4f 50  dif.  if( oc>=OP
22f60 5f 53 65 65 6b 47 45 20 29 7b 20 20 61 73 73 65  _SeekGE ){  asse
22f70 72 74 28 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 47  rt( oc==OP_SeekG
22f80 45 20 7c 7c 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b  E || oc==OP_Seek
22f90 47 54 20 29 3b 0a 20 20 20 20 69 66 28 20 72 65  GT );.    if( re
22fa0 73 3c 30 20 7c 7c 20 28 72 65 73 3d 3d 30 20 26  s<0 || (res==0 &
22fb0 26 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 47 54 29  & oc==OP_SeekGT)
22fc0 20 29 7b 0a 20 20 20 20 20 20 72 65 73 20 3d 20   ){.      res = 
22fd0 30 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71  0;.      rc = sq
22fe0 6c 69 74 65 33 42 74 72 65 65 4e 65 78 74 28 70  lite3BtreeNext(p
22ff0 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 2c 20 30  C->uc.pCursor, 0
23000 29 3b 0a 20 20 20 20 20 20 69 66 28 20 72 63 21  );.      if( rc!
23010 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20  =SQLITE_OK ){.  
23020 20 20 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51        if( rc==SQ
23030 4c 49 54 45 5f 44 4f 4e 45 20 29 7b 0a 20 20 20  LITE_DONE ){.   
23040 20 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49         rc = SQLI
23050 54 45 5f 4f 4b 3b 0a 20 20 20 20 20 20 20 20 20  TE_OK;.         
23060 20 72 65 73 20 3d 20 31 3b 0a 20 20 20 20 20 20   res = 1;.      
23070 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20    }else{.       
23080 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75     goto abort_du
23090 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20  e_to_error;.    
230a0 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20      }.      }.  
230b0 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 72    }else{.      r
230c0 65 73 20 3d 20 30 3b 0a 20 20 20 20 7d 0a 20 20  es = 0;.    }.  
230d0 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73 73 65 72  }else{.    asser
230e0 74 28 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 4c 54  t( oc==OP_SeekLT
230f0 20 7c 7c 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 4c   || oc==OP_SeekL
23100 45 20 29 3b 0a 20 20 20 20 69 66 28 20 72 65 73  E );.    if( res
23110 3e 30 20 7c 7c 20 28 72 65 73 3d 3d 30 20 26 26  >0 || (res==0 &&
23120 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 4c 54 29 20   oc==OP_SeekLT) 
23130 29 7b 0a 20 20 20 20 20 20 72 65 73 20 3d 20 30  ){.      res = 0
23140 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c  ;.      rc = sql
23150 69 74 65 33 42 74 72 65 65 50 72 65 76 69 6f 75  ite3BtreePreviou
23160 73 28 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72  s(pC->uc.pCursor
23170 2c 20 30 29 3b 0a 20 20 20 20 20 20 69 66 28 20  , 0);.      if( 
23180 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b  rc!=SQLITE_OK ){
23190 0a 20 20 20 20 20 20 20 20 69 66 28 20 72 63 3d  .        if( rc=
231a0 3d 53 51 4c 49 54 45 5f 44 4f 4e 45 20 29 7b 0a  =SQLITE_DONE ){.
231b0 20 20 20 20 20 20 20 20 20 20 72 63 20 3d 20 53            rc = S
231c0 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20 20 20 20 20  QLITE_OK;.      
231d0 20 20 20 20 72 65 73 20 3d 20 31 3b 0a 20 20 20      res = 1;.   
231e0 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
231f0 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74        goto abort
23200 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20  _due_to_error;. 
23210 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d         }.      }
23220 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  .    }else{.    
23230 20 20 2f 2a 20 72 65 73 20 6d 69 67 68 74 20 62    /* res might b
23240 65 20 6e 65 67 61 74 69 76 65 20 62 65 63 61 75  e negative becau
23250 73 65 20 74 68 65 20 74 61 62 6c 65 20 69 73 20  se the table is 
23260 65 6d 70 74 79 2e 20 20 43 68 65 63 6b 20 74 6f  empty.  Check to
23270 0a 20 20 20 20 20 20 2a 2a 20 73 65 65 20 69 66  .      ** see if
23280 20 74 68 69 73 20 69 73 20 74 68 65 20 63 61 73   this is the cas
23290 65 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20  e..      */.    
232a0 20 20 72 65 73 20 3d 20 73 71 6c 69 74 65 33 42    res = sqlite3B
232b0 74 72 65 65 45 6f 66 28 70 43 2d 3e 75 63 2e 70  treeEof(pC->uc.p
232c0 43 75 72 73 6f 72 29 3b 0a 20 20 20 20 7d 0a 20  Cursor);.    }. 
232d0 20 7d 0a 73 65 65 6b 5f 6e 6f 74 5f 66 6f 75 6e   }.seek_not_foun
232e0 64 3a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  d:.  assert( pOp
232f0 2d 3e 70 32 3e 30 20 29 3b 0a 20 20 56 64 62 65  ->p2>0 );.  Vdbe
23300 42 72 61 6e 63 68 54 61 6b 65 6e 28 72 65 73 21  BranchTaken(res!
23310 3d 30 2c 32 29 3b 0a 20 20 69 66 28 20 72 65 73  =0,2);.  if( res
23320 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 6a 75 6d   ){.    goto jum
23330 70 5f 74 6f 5f 70 32 3b 0a 20 20 7d 65 6c 73 65  p_to_p2;.  }else
23340 20 69 66 28 20 65 71 4f 6e 6c 79 20 29 7b 0a 20   if( eqOnly ){. 
23350 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 5b 31     assert( pOp[1
23360 5d 2e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 64 78  ].opcode==OP_Idx
23370 4c 54 20 7c 7c 20 70 4f 70 5b 31 5d 2e 6f 70 63  LT || pOp[1].opc
23380 6f 64 65 3d 3d 4f 50 5f 49 64 78 47 54 20 29 3b  ode==OP_IdxGT );
23390 0a 20 20 20 20 70 4f 70 2b 2b 3b 20 2f 2a 20 53  .    pOp++; /* S
233a0 6b 69 70 20 74 68 65 20 4f 50 5f 49 64 78 4c 74  kip the OP_IdxLt
233b0 20 6f 72 20 4f 50 5f 49 64 78 47 54 20 74 68 61   or OP_IdxGT tha
233c0 74 20 66 6f 6c 6c 6f 77 73 20 2a 2f 0a 20 20 7d  t follows */.  }
233d0 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
233e0 4f 70 63 6f 64 65 3a 20 53 65 65 6b 48 69 74 20  Opcode: SeekHit 
233f0 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53  P1 P2 * * *.** S
23400 79 6e 6f 70 73 69 73 3a 20 73 65 65 6b 48 69 74  ynopsis: seekHit
23410 3d 50 32 0a 2a 2a 0a 2a 2a 20 53 65 74 20 74 68  =P2.**.** Set th
23420 65 20 73 65 65 6b 48 69 74 20 66 6c 61 67 20 6f  e seekHit flag o
23430 6e 20 63 75 72 73 6f 72 20 50 31 20 74 6f 20 74  n cursor P1 to t
23440 68 65 20 76 61 6c 75 65 20 69 6e 20 50 32 2e 0a  he value in P2..
23450 2a 2a 20 54 68 65 20 73 65 65 6b 48 69 74 20 66  ** The seekHit f
23460 6c 61 67 20 69 73 20 75 73 65 64 20 62 79 20 74  lag is used by t
23470 68 65 20 49 66 4e 6f 48 6f 70 65 20 6f 70 63 6f  he IfNoHope opco
23480 64 65 2e 0a 2a 2a 0a 2a 2a 20 50 31 20 6d 75 73  de..**.** P1 mus
23490 74 20 62 65 20 61 20 76 61 6c 69 64 20 62 2d 74  t be a valid b-t
234a0 72 65 65 20 63 75 72 73 6f 72 2e 20 20 50 32 20  ree cursor.  P2 
234b0 6d 75 73 74 20 62 65 20 61 20 62 6f 6f 6c 65 61  must be a boolea
234c0 6e 20 76 61 6c 75 65 2c 0a 2a 2a 20 65 69 74 68  n value,.** eith
234d0 65 72 20 30 20 6f 72 20 31 2e 0a 2a 2f 0a 63 61  er 0 or 1..*/.ca
234e0 73 65 20 4f 50 5f 53 65 65 6b 48 69 74 3a 20 7b  se OP_SeekHit: {
234f0 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70  .  VdbeCursor *p
23500 43 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  C;.  assert( pOp
23510 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e  ->p1>=0 && pOp->
23520 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b  p1<p->nCursor );
23530 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72  .  pC = p->apCsr
23540 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
23550 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20  ert( pC!=0 );.  
23560 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3d  assert( pOp->p2=
23570 3d 30 20 7c 7c 20 70 4f 70 2d 3e 70 32 3d 3d 31  =0 || pOp->p2==1
23580 20 29 3b 0a 20 20 70 43 2d 3e 73 65 65 6b 48 69   );.  pC->seekHi
23590 74 20 3d 20 70 4f 70 2d 3e 70 32 20 26 20 31 3b  t = pOp->p2 & 1;
235a0 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
235b0 4f 70 63 6f 64 65 3a 20 46 6f 75 6e 64 20 50 31  Opcode: Found P1
235c0 20 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a 20 53   P2 P3 P4 *.** S
235d0 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50  ynopsis: key=r[P
235e0 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 49 66 20 50  3@P4].**.** If P
235f0 34 3d 3d 30 20 74 68 65 6e 20 72 65 67 69 73 74  4==0 then regist
23600 65 72 20 50 33 20 68 6f 6c 64 73 20 61 20 62 6c  er P3 holds a bl
23610 6f 62 20 63 6f 6e 73 74 72 75 63 74 65 64 20 62  ob constructed b
23620 79 20 4d 61 6b 65 52 65 63 6f 72 64 2e 20 20 49  y MakeRecord.  I
23630 66 0a 2a 2a 20 50 34 3e 30 20 74 68 65 6e 20 72  f.** P4>0 then r
23640 65 67 69 73 74 65 72 20 50 33 20 69 73 20 74 68  egister P3 is th
23650 65 20 66 69 72 73 74 20 6f 66 20 50 34 20 72 65  e first of P4 re
23660 67 69 73 74 65 72 73 20 74 68 61 74 20 66 6f 72  gisters that for
23670 6d 20 61 6e 20 75 6e 70 61 63 6b 65 64 0a 2a 2a  m an unpacked.**
23680 20 72 65 63 6f 72 64 2e 0a 2a 2a 0a 2a 2a 20 43   record..**.** C
23690 75 72 73 6f 72 20 50 31 20 69 73 20 6f 6e 20 61  ursor P1 is on a
236a0 6e 20 69 6e 64 65 78 20 62 74 72 65 65 2e 20 20  n index btree.  
236b0 49 66 20 74 68 65 20 72 65 63 6f 72 64 20 69 64  If the record id
236c0 65 6e 74 69 66 69 65 64 20 62 79 20 50 33 20 61  entified by P3 a
236d0 6e 64 20 50 34 0a 2a 2a 20 69 73 20 61 20 70 72  nd P4.** is a pr
236e0 65 66 69 78 20 6f 66 20 61 6e 79 20 65 6e 74 72  efix of any entr
236f0 79 20 69 6e 20 50 31 20 74 68 65 6e 20 61 20 6a  y in P1 then a j
23700 75 6d 70 20 69 73 20 6d 61 64 65 20 74 6f 20 50  ump is made to P
23710 32 20 61 6e 64 0a 2a 2a 20 50 31 20 69 73 20 6c  2 and.** P1 is l
23720 65 66 74 20 70 6f 69 6e 74 69 6e 67 20 61 74 20  eft pointing at 
23730 74 68 65 20 6d 61 74 63 68 69 6e 67 20 65 6e 74  the matching ent
23740 72 79 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f  ry..**.** This o
23750 70 65 72 61 74 69 6f 6e 20 6c 65 61 76 65 73 20  peration leaves 
23760 74 68 65 20 63 75 72 73 6f 72 20 69 6e 20 61 20  the cursor in a 
23770 73 74 61 74 65 20 77 68 65 72 65 20 69 74 20 63  state where it c
23780 61 6e 20 62 65 0a 2a 2a 20 61 64 76 61 6e 63 65  an be.** advance
23790 64 20 69 6e 20 74 68 65 20 66 6f 72 77 61 72 64  d in the forward
237a0 20 64 69 72 65 63 74 69 6f 6e 2e 20 20 54 68 65   direction.  The
237b0 20 4e 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f   Next instructio
237c0 6e 20 77 69 6c 6c 20 77 6f 72 6b 2c 0a 2a 2a 20  n will work,.** 
237d0 62 75 74 20 6e 6f 74 20 74 68 65 20 50 72 65 76  but not the Prev
237e0 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a   instruction..**
237f0 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 4e 6f  .** See also: No
23800 74 46 6f 75 6e 64 2c 20 4e 6f 43 6f 6e 66 6c 69  tFound, NoConfli
23810 63 74 2c 20 4e 6f 74 45 78 69 73 74 73 2e 20 53  ct, NotExists. S
23820 65 65 6b 47 65 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f  eekGe.*/./* Opco
23830 64 65 3a 20 4e 6f 74 46 6f 75 6e 64 20 50 31 20  de: NotFound P1 
23840 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a 20 53 79  P2 P3 P4 *.** Sy
23850 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50 33  nopsis: key=r[P3
23860 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 49 66 20 50 34  @P4].**.** If P4
23870 3d 3d 30 20 74 68 65 6e 20 72 65 67 69 73 74 65  ==0 then registe
23880 72 20 50 33 20 68 6f 6c 64 73 20 61 20 62 6c 6f  r P3 holds a blo
23890 62 20 63 6f 6e 73 74 72 75 63 74 65 64 20 62 79  b constructed by
238a0 20 4d 61 6b 65 52 65 63 6f 72 64 2e 20 20 49 66   MakeRecord.  If
238b0 0a 2a 2a 20 50 34 3e 30 20 74 68 65 6e 20 72 65  .** P4>0 then re
238c0 67 69 73 74 65 72 20 50 33 20 69 73 20 74 68 65  gister P3 is the
238d0 20 66 69 72 73 74 20 6f 66 20 50 34 20 72 65 67   first of P4 reg
238e0 69 73 74 65 72 73 20 74 68 61 74 20 66 6f 72 6d  isters that form
238f0 20 61 6e 20 75 6e 70 61 63 6b 65 64 0a 2a 2a 20   an unpacked.** 
23900 72 65 63 6f 72 64 2e 0a 2a 2a 20 0a 2a 2a 20 43  record..** .** C
23910 75 72 73 6f 72 20 50 31 20 69 73 20 6f 6e 20 61  ursor P1 is on a
23920 6e 20 69 6e 64 65 78 20 62 74 72 65 65 2e 20 20  n index btree.  
23930 49 66 20 74 68 65 20 72 65 63 6f 72 64 20 69 64  If the record id
23940 65 6e 74 69 66 69 65 64 20 62 79 20 50 33 20 61  entified by P3 a
23950 6e 64 20 50 34 0a 2a 2a 20 69 73 20 6e 6f 74 20  nd P4.** is not 
23960 74 68 65 20 70 72 65 66 69 78 20 6f 66 20 61 6e  the prefix of an
23970 79 20 65 6e 74 72 79 20 69 6e 20 50 31 20 74 68  y entry in P1 th
23980 65 6e 20 61 20 6a 75 6d 70 20 69 73 20 6d 61 64  en a jump is mad
23990 65 20 74 6f 20 50 32 2e 20 20 49 66 20 50 31 20  e to P2.  If P1 
239a0 0a 2a 2a 20 64 6f 65 73 20 63 6f 6e 74 61 69 6e  .** does contain
239b0 20 61 6e 20 65 6e 74 72 79 20 77 68 6f 73 65 20   an entry whose 
239c0 70 72 65 66 69 78 20 6d 61 74 63 68 65 73 20 74  prefix matches t
239d0 68 65 20 50 33 2f 50 34 20 72 65 63 6f 72 64 20  he P3/P4 record 
239e0 74 68 65 6e 20 63 6f 6e 74 72 6f 6c 0a 2a 2a 20  then control.** 
239f0 66 61 6c 6c 73 20 74 68 72 6f 75 67 68 20 74 6f  falls through to
23a00 20 74 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75   the next instru
23a10 63 74 69 6f 6e 20 61 6e 64 20 50 31 20 69 73 20  ction and P1 is 
23a20 6c 65 66 74 20 70 6f 69 6e 74 69 6e 67 20 61 74  left pointing at
23a30 20 74 68 65 0a 2a 2a 20 6d 61 74 63 68 69 6e 67   the.** matching
23a40 20 65 6e 74 72 79 2e 0a 2a 2a 0a 2a 2a 20 54 68   entry..**.** Th
23a50 69 73 20 6f 70 65 72 61 74 69 6f 6e 20 6c 65 61  is operation lea
23a60 76 65 73 20 74 68 65 20 63 75 72 73 6f 72 20 69  ves the cursor i
23a70 6e 20 61 20 73 74 61 74 65 20 77 68 65 72 65 20  n a state where 
23a80 69 74 20 63 61 6e 6e 6f 74 20 62 65 0a 2a 2a 20  it cannot be.** 
23a90 61 64 76 61 6e 63 65 64 20 69 6e 20 65 69 74 68  advanced in eith
23aa0 65 72 20 64 69 72 65 63 74 69 6f 6e 2e 20 20 49  er direction.  I
23ab0 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 74  n other words, t
23ac0 68 65 20 4e 65 78 74 20 61 6e 64 20 50 72 65 76  he Next and Prev
23ad0 0a 2a 2a 20 6f 70 63 6f 64 65 73 20 64 6f 20 6e  .** opcodes do n
23ae0 6f 74 20 77 6f 72 6b 20 61 66 74 65 72 20 74 68  ot work after th
23af0 69 73 20 6f 70 65 72 61 74 69 6f 6e 2e 0a 2a 2a  is operation..**
23b00 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 46 6f  .** See also: Fo
23b10 75 6e 64 2c 20 4e 6f 74 45 78 69 73 74 73 2c 20  und, NotExists, 
23b20 4e 6f 43 6f 6e 66 6c 69 63 74 2c 20 49 66 4e 6f  NoConflict, IfNo
23b30 48 6f 70 65 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64  Hope.*/./* Opcod
23b40 65 3a 20 49 66 4e 6f 48 6f 70 65 20 50 31 20 50  e: IfNoHope P1 P
23b50 32 20 50 33 20 50 34 20 2a 0a 2a 2a 20 53 79 6e  2 P3 P4 *.** Syn
23b60 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50 33 40  opsis: key=r[P3@
23b70 50 34 5d 0a 2a 2a 0a 2a 2a 20 52 65 67 69 73 74  P4].**.** Regist
23b80 65 72 20 50 33 20 69 73 20 74 68 65 20 66 69 72  er P3 is the fir
23b90 73 74 20 6f 66 20 50 34 20 72 65 67 69 73 74 65  st of P4 registe
23ba0 72 73 20 74 68 61 74 20 66 6f 72 6d 20 61 6e 20  rs that form an 
23bb0 75 6e 70 61 63 6b 65 64 0a 2a 2a 20 72 65 63 6f  unpacked.** reco
23bc0 72 64 2e 0a 2a 2a 0a 2a 2a 20 43 75 72 73 6f 72  rd..**.** Cursor
23bd0 20 50 31 20 69 73 20 6f 6e 20 61 6e 20 69 6e 64   P1 is on an ind
23be0 65 78 20 62 74 72 65 65 2e 20 20 49 66 20 74 68  ex btree.  If th
23bf0 65 20 73 65 65 6b 48 69 74 20 66 6c 61 67 20 69  e seekHit flag i
23c00 73 20 73 65 74 20 6f 6e 20 50 31 2c 20 74 68 65  s set on P1, the
23c10 6e 0a 2a 2a 20 74 68 69 73 20 6f 70 63 6f 64 65  n.** this opcode
23c20 20 69 73 20 61 20 6e 6f 2d 6f 70 2e 20 20 42 75   is a no-op.  Bu
23c30 74 20 69 66 20 74 68 65 20 73 65 65 6b 48 69 74  t if the seekHit
23c40 20 66 6c 61 67 20 6f 66 20 50 31 20 69 73 20 63   flag of P1 is c
23c50 6c 65 61 72 2c 20 74 68 65 6e 0a 2a 2a 20 63 68  lear, then.** ch
23c60 65 63 6b 20 74 6f 20 73 65 65 20 69 66 20 74 68  eck to see if th
23c70 65 72 65 20 69 73 20 61 6e 79 20 65 6e 74 72 79  ere is any entry
23c80 20 69 6e 20 50 31 20 74 68 61 74 20 6d 61 74 63   in P1 that matc
23c90 68 65 73 20 74 68 65 0a 2a 2a 20 70 72 65 66 69  hes the.** prefi
23ca0 78 20 69 64 65 6e 74 69 66 69 65 64 20 62 79 20  x identified by 
23cb0 50 33 20 61 6e 64 20 50 34 2e 20 20 49 66 20 6e  P3 and P4.  If n
23cc0 6f 20 65 6e 74 72 79 20 6d 61 74 63 68 65 73 20  o entry matches 
23cd0 74 68 65 20 70 72 65 66 69 78 2c 0a 2a 2a 20 6a  the prefix,.** j
23ce0 75 6d 70 20 74 6f 20 50 32 2e 20 20 4f 74 68 65  ump to P2.  Othe
23cf0 72 77 69 73 65 20 66 61 6c 6c 20 74 68 72 6f 75  rwise fall throu
23d00 67 68 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f  gh..**.** This o
23d10 70 63 6f 64 65 20 62 65 68 61 76 65 73 20 6c 69  pcode behaves li
23d20 6b 65 20 4f 50 5f 4e 6f 74 46 6f 75 6e 64 20 69  ke OP_NotFound i
23d30 66 20 74 68 65 20 73 65 65 6b 48 69 74 0a 2a 2a  f the seekHit.**
23d40 20 66 6c 61 67 20 69 73 20 63 6c 65 61 72 20 61   flag is clear a
23d50 6e 64 20 69 74 20 62 65 68 61 76 65 73 20 6c 69  nd it behaves li
23d60 6b 65 20 4f 50 5f 4e 6f 6f 70 20 69 66 20 74 68  ke OP_Noop if th
23d70 65 20 73 65 65 6b 48 69 74 20 66 6c 61 67 20 69  e seekHit flag i
23d80 73 20 73 65 74 2e 0a 2a 2a 0a 2a 2a 20 54 68 69  s set..**.** Thi
23d90 73 20 6f 70 63 6f 64 65 20 69 73 20 75 73 65 64  s opcode is used
23da0 20 69 6e 20 49 4e 20 63 6c 61 75 73 65 20 70 72   in IN clause pr
23db0 6f 63 65 73 73 69 6e 67 20 66 6f 72 20 61 20 6d  ocessing for a m
23dc0 75 6c 74 69 2d 63 6f 6c 75 6d 6e 20 6b 65 79 2e  ulti-column key.
23dd0 0a 2a 2a 20 49 66 20 61 6e 20 49 4e 20 63 6c 61  .** If an IN cla
23de0 75 73 65 20 69 73 20 61 74 74 61 63 68 65 64 20  use is attached 
23df0 74 6f 20 61 6e 20 65 6c 65 6d 65 6e 74 20 6f 66  to an element of
23e00 20 74 68 65 20 6b 65 79 20 6f 74 68 65 72 20 74   the key other t
23e10 68 61 6e 20 74 68 65 0a 2a 2a 20 6c 65 66 74 2d  han the.** left-
23e20 6d 6f 73 74 20 65 6c 65 6d 65 6e 74 2c 20 61 6e  most element, an
23e30 64 20 69 66 20 74 68 65 72 65 20 61 72 65 20 6e  d if there are n
23e40 6f 20 6d 61 74 63 68 65 73 20 6f 6e 20 74 68 65  o matches on the
23e50 20 6d 6f 73 74 20 72 65 63 65 6e 74 0a 2a 2a 20   most recent.** 
23e60 73 65 65 6b 20 6f 76 65 72 20 74 68 65 20 77 68  seek over the wh
23e70 6f 6c 65 20 6b 65 79 2c 20 74 68 65 6e 20 69 74  ole key, then it
23e80 20 6d 69 67 68 74 20 62 65 20 74 68 61 74 20 6f   might be that o
23e90 6e 65 20 6f 66 20 74 68 65 20 6b 65 79 20 65 6c  ne of the key el
23ea0 65 6d 65 6e 74 0a 2a 2a 20 74 6f 20 74 68 65 20  ement.** to the 
23eb0 6c 65 66 74 20 69 73 20 70 72 6f 68 69 62 69 74  left is prohibit
23ec0 69 6e 67 20 61 20 6d 61 74 63 68 2c 20 61 6e 64  ing a match, and
23ed0 20 68 65 6e 63 65 20 74 68 65 72 65 20 69 73 20   hence there is 
23ee0 22 6e 6f 20 68 6f 70 65 22 20 6f 66 0a 2a 2a 20  "no hope" of.** 
23ef0 61 6e 79 20 6d 61 74 63 68 20 72 65 67 61 72 64  any match regard
23f00 6c 65 73 73 20 6f 66 20 68 6f 77 20 6d 61 6e 79  less of how many
23f10 20 49 4e 20 63 6c 61 75 73 65 20 65 6c 65 6d 65   IN clause eleme
23f20 6e 74 73 20 61 72 65 20 63 68 65 63 6b 65 64 2e  nts are checked.
23f30 0a 2a 2a 20 49 6e 20 73 75 63 68 20 61 20 63 61  .** In such a ca
23f40 73 65 2c 20 77 65 20 61 62 61 6e 64 6f 6e 20 74  se, we abandon t
23f50 68 65 20 49 4e 20 63 6c 61 75 73 65 20 73 65 61  he IN clause sea
23f60 72 63 68 20 65 61 72 6c 79 2c 20 75 73 69 6e 67  rch early, using
23f70 20 74 68 69 73 0a 2a 2a 20 6f 70 63 6f 64 65 2e   this.** opcode.
23f80 20 20 54 68 65 20 6f 70 63 6f 64 65 20 6e 61 6d    The opcode nam
23f90 65 20 63 6f 6d 65 73 20 66 72 6f 6d 20 74 68 65  e comes from the
23fa0 20 66 61 63 74 20 74 68 61 74 20 74 68 65 0a 2a   fact that the.*
23fb0 2a 20 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e 20  * jump is taken 
23fc0 69 66 20 74 68 65 72 65 20 69 73 20 22 6e 6f 20  if there is "no 
23fd0 68 6f 70 65 22 20 6f 66 20 61 63 68 69 65 76 69  hope" of achievi
23fe0 6e 67 20 61 20 6d 61 74 63 68 2e 0a 2a 2a 0a 2a  ng a match..**.*
23ff0 2a 20 53 65 65 20 61 6c 73 6f 3a 20 4e 6f 74 46  * See also: NotF
24000 6f 75 6e 64 2c 20 53 65 65 6b 48 69 74 0a 2a 2f  ound, SeekHit.*/
24010 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 6f 43 6f  ./* Opcode: NoCo
24020 6e 66 6c 69 63 74 20 50 31 20 50 32 20 50 33 20  nflict P1 P2 P3 
24030 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73  P4 *.** Synopsis
24040 3a 20 6b 65 79 3d 72 5b 50 33 40 50 34 5d 0a 2a  : key=r[P3@P4].*
24050 2a 0a 2a 2a 20 49 66 20 50 34 3d 3d 30 20 74 68  *.** If P4==0 th
24060 65 6e 20 72 65 67 69 73 74 65 72 20 50 33 20 68  en register P3 h
24070 6f 6c 64 73 20 61 20 62 6c 6f 62 20 63 6f 6e 73  olds a blob cons
24080 74 72 75 63 74 65 64 20 62 79 20 4d 61 6b 65 52  tructed by MakeR
24090 65 63 6f 72 64 2e 20 20 49 66 0a 2a 2a 20 50 34  ecord.  If.** P4
240a0 3e 30 20 74 68 65 6e 20 72 65 67 69 73 74 65 72  >0 then register
240b0 20 50 33 20 69 73 20 74 68 65 20 66 69 72 73 74   P3 is the first
240c0 20 6f 66 20 50 34 20 72 65 67 69 73 74 65 72 73   of P4 registers
240d0 20 74 68 61 74 20 66 6f 72 6d 20 61 6e 20 75 6e   that form an un
240e0 70 61 63 6b 65 64 0a 2a 2a 20 72 65 63 6f 72 64  packed.** record
240f0 2e 0a 2a 2a 20 0a 2a 2a 20 43 75 72 73 6f 72 20  ..** .** Cursor 
24100 50 31 20 69 73 20 6f 6e 20 61 6e 20 69 6e 64 65  P1 is on an inde
24110 78 20 62 74 72 65 65 2e 20 20 49 66 20 74 68 65  x btree.  If the
24120 20 72 65 63 6f 72 64 20 69 64 65 6e 74 69 66 69   record identifi
24130 65 64 20 62 79 20 50 33 20 61 6e 64 20 50 34 0a  ed by P3 and P4.
24140 2a 2a 20 63 6f 6e 74 61 69 6e 73 20 61 6e 79 20  ** contains any 
24150 4e 55 4c 4c 20 76 61 6c 75 65 2c 20 6a 75 6d 70  NULL value, jump
24160 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f 20   immediately to 
24170 50 32 2e 20 20 49 66 20 61 6c 6c 20 74 65 72 6d  P2.  If all term
24180 73 20 6f 66 20 74 68 65 0a 2a 2a 20 72 65 63 6f  s of the.** reco
24190 72 64 20 61 72 65 20 6e 6f 74 2d 4e 55 4c 4c 20  rd are not-NULL 
241a0 74 68 65 6e 20 61 20 63 68 65 63 6b 20 69 73 20  then a check is 
241b0 64 6f 6e 65 20 74 6f 20 64 65 74 65 72 6d 69 6e  done to determin
241c0 65 20 69 66 20 61 6e 79 20 72 6f 77 20 69 6e 20  e if any row in 
241d0 74 68 65 0a 2a 2a 20 50 31 20 69 6e 64 65 78 20  the.** P1 index 
241e0 62 74 72 65 65 20 68 61 73 20 61 20 6d 61 74 63  btree has a matc
241f0 68 69 6e 67 20 6b 65 79 20 70 72 65 66 69 78 2e  hing key prefix.
24200 20 20 49 66 20 74 68 65 72 65 20 61 72 65 20 6e    If there are n
24210 6f 20 6d 61 74 63 68 65 73 2c 20 6a 75 6d 70 0a  o matches, jump.
24220 2a 2a 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 74  ** immediately t
24230 6f 20 50 32 2e 20 20 49 66 20 74 68 65 72 65 20  o P2.  If there 
24240 69 73 20 61 20 6d 61 74 63 68 2c 20 66 61 6c 6c  is a match, fall
24250 20 74 68 72 6f 75 67 68 20 61 6e 64 20 6c 65 61   through and lea
24260 76 65 20 74 68 65 20 50 31 0a 2a 2a 20 63 75 72  ve the P1.** cur
24270 73 6f 72 20 70 6f 69 6e 74 69 6e 67 20 74 6f 20  sor pointing to 
24280 74 68 65 20 6d 61 74 63 68 69 6e 67 20 72 6f 77  the matching row
24290 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63  ..**.** This opc
242a0 6f 64 65 20 69 73 20 73 69 6d 69 6c 61 72 20 74  ode is similar t
242b0 6f 20 4f 50 5f 4e 6f 74 46 6f 75 6e 64 20 77 69  o OP_NotFound wi
242c0 74 68 20 74 68 65 20 65 78 63 65 70 74 69 6f 6e  th the exception
242d0 73 20 74 68 61 74 20 74 68 65 0a 2a 2a 20 62 72  s that the.** br
242e0 61 6e 63 68 20 69 73 20 61 6c 77 61 79 73 20 74  anch is always t
242f0 61 6b 65 6e 20 69 66 20 61 6e 79 20 70 61 72 74  aken if any part
24300 20 6f 66 20 74 68 65 20 73 65 61 72 63 68 20 6b   of the search k
24310 65 79 20 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c  ey input is NULL
24320 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 65  ..**.** This ope
24330 72 61 74 69 6f 6e 20 6c 65 61 76 65 73 20 74 68  ration leaves th
24340 65 20 63 75 72 73 6f 72 20 69 6e 20 61 20 73 74  e cursor in a st
24350 61 74 65 20 77 68 65 72 65 20 69 74 20 63 61 6e  ate where it can
24360 6e 6f 74 20 62 65 0a 2a 2a 20 61 64 76 61 6e 63  not be.** advanc
24370 65 64 20 69 6e 20 65 69 74 68 65 72 20 64 69 72  ed in either dir
24380 65 63 74 69 6f 6e 2e 20 20 49 6e 20 6f 74 68 65  ection.  In othe
24390 72 20 77 6f 72 64 73 2c 20 74 68 65 20 4e 65 78  r words, the Nex
243a0 74 20 61 6e 64 20 50 72 65 76 0a 2a 2a 20 6f 70  t and Prev.** op
243b0 63 6f 64 65 73 20 64 6f 20 6e 6f 74 20 77 6f 72  codes do not wor
243c0 6b 20 61 66 74 65 72 20 74 68 69 73 20 6f 70 65  k after this ope
243d0 72 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 53 65  ration..**.** Se
243e0 65 20 61 6c 73 6f 3a 20 4e 6f 74 46 6f 75 6e 64  e also: NotFound
243f0 2c 20 46 6f 75 6e 64 2c 20 4e 6f 74 45 78 69 73  , Found, NotExis
24400 74 73 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 66  ts.*/.case OP_If
24410 4e 6f 48 6f 70 65 3a 20 7b 20 20 20 20 20 2f 2a  NoHope: {     /*
24420 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 20 20   jump, in3 */.  
24430 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a  VdbeCursor *pC;.
24440 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
24450 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c  1>=0 && pOp->p1<
24460 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20  p->nCursor );.  
24470 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f  pC = p->apCsr[pO
24480 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74  p->p1];.  assert
24490 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 69 66 28  ( pC!=0 );.  if(
244a0 20 70 43 2d 3e 73 65 65 6b 48 69 74 20 29 20 62   pC->seekHit ) b
244b0 72 65 61 6b 3b 0a 20 20 2f 2a 20 46 61 6c 6c 20  reak;.  /* Fall 
244c0 74 68 72 6f 75 67 68 20 69 6e 74 6f 20 4f 50 5f  through into OP_
244d0 4e 6f 74 46 6f 75 6e 64 20 2a 2f 0a 7d 0a 63 61  NotFound */.}.ca
244e0 73 65 20 4f 50 5f 4e 6f 43 6f 6e 66 6c 69 63 74  se OP_NoConflict
244f0 3a 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69  :     /* jump, i
24500 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 6f  n3 */.case OP_No
24510 74 46 6f 75 6e 64 3a 20 20 20 20 20 20 20 2f 2a  tFound:       /*
24520 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 63 61   jump, in3 */.ca
24530 73 65 20 4f 50 5f 46 6f 75 6e 64 3a 20 7b 20 20  se OP_Found: {  
24540 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69        /* jump, i
24550 6e 33 20 2a 2f 0a 20 20 69 6e 74 20 61 6c 72 65  n3 */.  int alre
24560 61 64 79 45 78 69 73 74 73 3b 0a 20 20 69 6e 74  adyExists;.  int
24570 20 74 61 6b 65 4a 75 6d 70 3b 0a 20 20 69 6e 74   takeJump;.  int
24580 20 69 69 3b 0a 20 20 56 64 62 65 43 75 72 73 6f   ii;.  VdbeCurso
24590 72 20 2a 70 43 3b 0a 20 20 69 6e 74 20 72 65 73  r *pC;.  int res
245a0 3b 0a 20 20 55 6e 70 61 63 6b 65 64 52 65 63 6f  ;.  UnpackedReco
245b0 72 64 20 2a 70 46 72 65 65 3b 0a 20 20 55 6e 70  rd *pFree;.  Unp
245c0 61 63 6b 65 64 52 65 63 6f 72 64 20 2a 70 49 64  ackedRecord *pId
245d0 78 4b 65 79 3b 0a 20 20 55 6e 70 61 63 6b 65 64  xKey;.  Unpacked
245e0 52 65 63 6f 72 64 20 72 3b 0a 0a 23 69 66 64 65  Record r;..#ifde
245f0 66 20 53 51 4c 49 54 45 5f 54 45 53 54 0a 20 20  f SQLITE_TEST.  
24600 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 21  if( pOp->opcode!
24610 3d 4f 50 5f 4e 6f 43 6f 6e 66 6c 69 63 74 20 29  =OP_NoConflict )
24620 20 73 71 6c 69 74 65 33 5f 66 6f 75 6e 64 5f 63   sqlite3_found_c
24630 6f 75 6e 74 2b 2b 3b 0a 23 65 6e 64 69 66 0a 0a  ount++;.#endif..
24640 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
24650 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c  1>=0 && pOp->p1<
24660 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20  p->nCursor );.  
24670 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74  assert( pOp->p4t
24680 79 70 65 3d 3d 50 34 5f 49 4e 54 33 32 20 29 3b  ype==P4_INT32 );
24690 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72  .  pC = p->apCsr
246a0 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
246b0 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 23 69  ert( pC!=0 );.#i
246c0 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55  fdef SQLITE_DEBU
246d0 47 0a 20 20 70 43 2d 3e 73 65 65 6b 4f 70 20 3d  G.  pC->seekOp =
246e0 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3b 0a 23 65   pOp->opcode;.#e
246f0 6e 64 69 66 0a 20 20 70 49 6e 33 20 3d 20 26 61  ndif.  pIn3 = &a
24700 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20  Mem[pOp->p3];.  
24710 61 73 73 65 72 74 28 20 70 43 2d 3e 65 43 75 72  assert( pC->eCur
24720 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f 42 54  Type==CURTYPE_BT
24730 52 45 45 20 29 3b 0a 20 20 61 73 73 65 72 74 28  REE );.  assert(
24740 20 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 21   pC->uc.pCursor!
24750 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
24760 70 43 2d 3e 69 73 54 61 62 6c 65 3d 3d 30 20 29  pC->isTable==0 )
24770 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 34 2e  ;.  if( pOp->p4.
24780 69 3e 30 20 29 7b 0a 20 20 20 20 72 2e 70 4b 65  i>0 ){.    r.pKe
24790 79 49 6e 66 6f 20 3d 20 70 43 2d 3e 70 4b 65 79  yInfo = pC->pKey
247a0 49 6e 66 6f 3b 0a 20 20 20 20 72 2e 6e 46 69 65  Info;.    r.nFie
247b0 6c 64 20 3d 20 28 75 31 36 29 70 4f 70 2d 3e 70  ld = (u16)pOp->p
247c0 34 2e 69 3b 0a 20 20 20 20 72 2e 61 4d 65 6d 20  4.i;.    r.aMem 
247d0 3d 20 70 49 6e 33 3b 0a 23 69 66 64 65 66 20 53  = pIn3;.#ifdef S
247e0 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 20 20  QLITE_DEBUG.    
247f0 66 6f 72 28 69 69 3d 30 3b 20 69 69 3c 72 2e 6e  for(ii=0; ii<r.n
24800 46 69 65 6c 64 3b 20 69 69 2b 2b 29 7b 0a 20 20  Field; ii++){.  
24810 20 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49      assert( memI
24820 73 56 61 6c 69 64 28 26 72 2e 61 4d 65 6d 5b 69  sValid(&r.aMem[i
24830 69 5d 29 20 29 3b 0a 20 20 20 20 20 20 61 73 73  i]) );.      ass
24840 65 72 74 28 20 28 72 2e 61 4d 65 6d 5b 69 69 5d  ert( (r.aMem[ii]
24850 2e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 5a 65 72  .flags & MEM_Zer
24860 6f 29 3d 3d 30 20 7c 7c 20 72 2e 61 4d 65 6d 5b  o)==0 || r.aMem[
24870 69 69 5d 2e 6e 3d 3d 30 20 29 3b 0a 20 20 20 20  ii].n==0 );.    
24880 20 20 69 66 28 20 69 69 20 29 20 52 45 47 49 53    if( ii ) REGIS
24890 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70  TER_TRACE(pOp->p
248a0 33 2b 69 69 2c 20 26 72 2e 61 4d 65 6d 5b 69 69  3+ii, &r.aMem[ii
248b0 5d 29 3b 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66  ]);.    }.#endif
248c0 0a 20 20 20 20 70 49 64 78 4b 65 79 20 3d 20 26  .    pIdxKey = &
248d0 72 3b 0a 20 20 20 20 70 46 72 65 65 20 3d 20 30  r;.    pFree = 0
248e0 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61  ;.  }else{.    a
248f0 73 73 65 72 74 28 20 70 49 6e 33 2d 3e 66 6c 61  ssert( pIn3->fla
24900 67 73 20 26 20 4d 45 4d 5f 42 6c 6f 62 20 29 3b  gs & MEM_Blob );
24910 0a 20 20 20 20 72 63 20 3d 20 45 78 70 61 6e 64  .    rc = Expand
24920 42 6c 6f 62 28 70 49 6e 33 29 3b 0a 20 20 20 20  Blob(pIn3);.    
24930 61 73 73 65 72 74 28 20 72 63 3d 3d 53 51 4c 49  assert( rc==SQLI
24940 54 45 5f 4f 4b 20 7c 7c 20 72 63 3d 3d 53 51 4c  TE_OK || rc==SQL
24950 49 54 45 5f 4e 4f 4d 45 4d 20 29 3b 0a 20 20 20  ITE_NOMEM );.   
24960 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20 6e   if( rc ) goto n
24970 6f 5f 6d 65 6d 3b 0a 20 20 20 20 70 46 72 65 65  o_mem;.    pFree
24980 20 3d 20 70 49 64 78 4b 65 79 20 3d 20 73 71 6c   = pIdxKey = sql
24990 69 74 65 33 56 64 62 65 41 6c 6c 6f 63 55 6e 70  ite3VdbeAllocUnp
249a0 61 63 6b 65 64 52 65 63 6f 72 64 28 70 43 2d 3e  ackedRecord(pC->
249b0 70 4b 65 79 49 6e 66 6f 29 3b 0a 20 20 20 20 69  pKeyInfo);.    i
249c0 66 28 20 70 49 64 78 4b 65 79 3d 3d 30 20 29 20  f( pIdxKey==0 ) 
249d0 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 20  goto no_mem;.   
249e0 20 73 71 6c 69 74 65 33 56 64 62 65 52 65 63 6f   sqlite3VdbeReco
249f0 72 64 55 6e 70 61 63 6b 28 70 43 2d 3e 70 4b 65  rdUnpack(pC->pKe
24a00 79 49 6e 66 6f 2c 20 70 49 6e 33 2d 3e 6e 2c 20  yInfo, pIn3->n, 
24a10 70 49 6e 33 2d 3e 7a 2c 20 70 49 64 78 4b 65 79  pIn3->z, pIdxKey
24a20 29 3b 0a 20 20 7d 0a 20 20 70 49 64 78 4b 65 79  );.  }.  pIdxKey
24a30 2d 3e 64 65 66 61 75 6c 74 5f 72 63 20 3d 20 30  ->default_rc = 0
24a40 3b 0a 20 20 74 61 6b 65 4a 75 6d 70 20 3d 20 30  ;.  takeJump = 0
24a50 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63  ;.  if( pOp->opc
24a60 6f 64 65 3d 3d 4f 50 5f 4e 6f 43 6f 6e 66 6c 69  ode==OP_NoConfli
24a70 63 74 20 29 7b 0a 20 20 20 20 2f 2a 20 46 6f 72  ct ){.    /* For
24a80 20 74 68 65 20 4f 50 5f 4e 6f 43 6f 6e 66 6c 69   the OP_NoConfli
24a90 63 74 20 6f 70 63 6f 64 65 2c 20 74 61 6b 65 20  ct opcode, take 
24aa0 74 68 65 20 6a 75 6d 70 20 69 66 20 61 6e 79 20  the jump if any 
24ab0 6f 66 20 74 68 65 0a 20 20 20 20 2a 2a 20 69 6e  of the.    ** in
24ac0 70 75 74 20 66 69 65 6c 64 73 20 61 72 65 20 4e  put fields are N
24ad0 55 4c 4c 2c 20 73 69 6e 63 65 20 61 6e 79 20 6b  ULL, since any k
24ae0 65 79 20 77 69 74 68 20 61 20 4e 55 4c 4c 20 77  ey with a NULL w
24af0 69 6c 6c 20 6e 6f 74 0a 20 20 20 20 2a 2a 20 63  ill not.    ** c
24b00 6f 6e 66 6c 69 63 74 20 2a 2f 0a 20 20 20 20 66  onflict */.    f
24b10 6f 72 28 69 69 3d 30 3b 20 69 69 3c 70 49 64 78  or(ii=0; ii<pIdx
24b20 4b 65 79 2d 3e 6e 46 69 65 6c 64 3b 20 69 69 2b  Key->nField; ii+
24b30 2b 29 7b 0a 20 20 20 20 20 20 69 66 28 20 70 49  +){.      if( pI
24b40 64 78 4b 65 79 2d 3e 61 4d 65 6d 5b 69 69 5d 2e  dxKey->aMem[ii].
24b50 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c  flags & MEM_Null
24b60 20 29 7b 0a 20 20 20 20 20 20 20 20 74 61 6b 65   ){.        take
24b70 4a 75 6d 70 20 3d 20 31 3b 0a 20 20 20 20 20 20  Jump = 1;.      
24b80 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d    break;.      }
24b90 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 72 63 20  .    }.  }.  rc 
24ba0 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 4d 6f  = sqlite3BtreeMo
24bb0 76 65 74 6f 55 6e 70 61 63 6b 65 64 28 70 43 2d  vetoUnpacked(pC-
24bc0 3e 75 63 2e 70 43 75 72 73 6f 72 2c 20 70 49 64  >uc.pCursor, pId
24bd0 78 4b 65 79 2c 20 30 2c 20 30 2c 20 26 72 65 73  xKey, 0, 0, &res
24be0 29 3b 0a 20 20 69 66 28 20 70 46 72 65 65 20 29  );.  if( pFree )
24bf0 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 4e 4e   sqlite3DbFreeNN
24c00 28 64 62 2c 20 70 46 72 65 65 29 3b 0a 20 20 69  (db, pFree);.  i
24c10 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc!=SQLITE_OK
24c20 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 61 62 6f   ){.    goto abo
24c30 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
24c40 0a 20 20 7d 0a 20 20 70 43 2d 3e 73 65 65 6b 52  .  }.  pC->seekR
24c50 65 73 75 6c 74 20 3d 20 72 65 73 3b 0a 20 20 61  esult = res;.  a
24c60 6c 72 65 61 64 79 45 78 69 73 74 73 20 3d 20 28  lreadyExists = (
24c70 72 65 73 3d 3d 30 29 3b 0a 20 20 70 43 2d 3e 6e  res==0);.  pC->n
24c80 75 6c 6c 52 6f 77 20 3d 20 31 2d 61 6c 72 65 61  ullRow = 1-alrea
24c90 64 79 45 78 69 73 74 73 3b 0a 20 20 70 43 2d 3e  dyExists;.  pC->
24ca0 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d  deferredMoveto =
24cb0 20 30 3b 0a 20 20 70 43 2d 3e 63 61 63 68 65 53   0;.  pC->cacheS
24cc0 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54  tatus = CACHE_ST
24cd0 41 4c 45 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e  ALE;.  if( pOp->
24ce0 6f 70 63 6f 64 65 3d 3d 4f 50 5f 46 6f 75 6e 64  opcode==OP_Found
24cf0 20 29 7b 0a 20 20 20 20 56 64 62 65 42 72 61 6e   ){.    VdbeBran
24d00 63 68 54 61 6b 65 6e 28 61 6c 72 65 61 64 79 45  chTaken(alreadyE
24d10 78 69 73 74 73 21 3d 30 2c 32 29 3b 0a 20 20 20  xists!=0,2);.   
24d20 20 69 66 28 20 61 6c 72 65 61 64 79 45 78 69 73   if( alreadyExis
24d30 74 73 20 29 20 67 6f 74 6f 20 6a 75 6d 70 5f 74  ts ) goto jump_t
24d40 6f 5f 70 32 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  o_p2;.  }else{. 
24d50 20 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b     VdbeBranchTak
24d60 65 6e 28 74 61 6b 65 4a 75 6d 70 7c 7c 61 6c 72  en(takeJump||alr
24d70 65 61 64 79 45 78 69 73 74 73 3d 3d 30 2c 32 29  eadyExists==0,2)
24d80 3b 0a 20 20 20 20 69 66 28 20 74 61 6b 65 4a 75  ;.    if( takeJu
24d90 6d 70 20 7c 7c 20 21 61 6c 72 65 61 64 79 45 78  mp || !alreadyEx
24da0 69 73 74 73 20 29 20 67 6f 74 6f 20 6a 75 6d 70  ists ) goto jump
24db0 5f 74 6f 5f 70 32 3b 0a 20 20 7d 0a 20 20 62 72  _to_p2;.  }.  br
24dc0 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
24dd0 65 3a 20 53 65 65 6b 52 6f 77 69 64 20 50 31 20  e: SeekRowid P1 
24de0 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e  P2 P3 * *.** Syn
24df0 6f 70 73 69 73 3a 20 69 6e 74 6b 65 79 3d 72 5b  opsis: intkey=r[
24e00 50 33 5d 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20  P3].**.** P1 is 
24e10 74 68 65 20 69 6e 64 65 78 20 6f 66 20 61 20 63  the index of a c
24e20 75 72 73 6f 72 20 6f 70 65 6e 20 6f 6e 20 61 6e  ursor open on an
24e30 20 53 51 4c 20 74 61 62 6c 65 20 62 74 72 65 65   SQL table btree
24e40 20 28 77 69 74 68 20 69 6e 74 65 67 65 72 0a 2a   (with integer.*
24e50 2a 20 6b 65 79 73 29 2e 20 20 49 66 20 72 65 67  * keys).  If reg
24e60 69 73 74 65 72 20 50 33 20 64 6f 65 73 20 6e 6f  ister P3 does no
24e70 74 20 63 6f 6e 74 61 69 6e 20 61 6e 20 69 6e 74  t contain an int
24e80 65 67 65 72 20 6f 72 20 69 66 20 50 31 20 64 6f  eger or if P1 do
24e90 65 73 20 6e 6f 74 0a 2a 2a 20 63 6f 6e 74 61 69  es not.** contai
24ea0 6e 20 61 20 72 65 63 6f 72 64 20 77 69 74 68 20  n a record with 
24eb0 72 6f 77 69 64 20 50 33 20 74 68 65 6e 20 6a 75  rowid P3 then ju
24ec0 6d 70 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 74  mp immediately t
24ed0 6f 20 50 32 2e 20 20 0a 2a 2a 20 4f 72 2c 20 69  o P2.  .** Or, i
24ee0 66 20 50 32 20 69 73 20 30 2c 20 72 61 69 73 65  f P2 is 0, raise
24ef0 20 61 6e 20 53 51 4c 49 54 45 5f 43 4f 52 52 55   an SQLITE_CORRU
24f00 50 54 20 65 72 72 6f 72 2e 20 49 66 20 50 31 20  PT error. If P1 
24f10 64 6f 65 73 20 63 6f 6e 74 61 69 6e 0a 2a 2a 20  does contain.** 
24f20 61 20 72 65 63 6f 72 64 20 77 69 74 68 20 72 6f  a record with ro
24f30 77 69 64 20 50 33 20 74 68 65 6e 20 0a 2a 2a 20  wid P3 then .** 
24f40 6c 65 61 76 65 20 74 68 65 20 63 75 72 73 6f 72  leave the cursor
24f50 20 70 6f 69 6e 74 69 6e 67 20 61 74 20 74 68 61   pointing at tha
24f60 74 20 72 65 63 6f 72 64 20 61 6e 64 20 66 61 6c  t record and fal
24f70 6c 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65  l through to the
24f80 20 6e 65 78 74 0a 2a 2a 20 69 6e 73 74 72 75 63   next.** instruc
24f90 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  tion..**.** The 
24fa0 4f 50 5f 4e 6f 74 45 78 69 73 74 73 20 6f 70 63  OP_NotExists opc
24fb0 6f 64 65 20 70 65 72 66 6f 72 6d 73 20 74 68 65  ode performs the
24fc0 20 73 61 6d 65 20 6f 70 65 72 61 74 69 6f 6e 2c   same operation,
24fd0 20 62 75 74 20 77 69 74 68 20 4f 50 5f 4e 6f 74   but with OP_Not
24fe0 45 78 69 73 74 73 0a 2a 2a 20 74 68 65 20 50 33  Exists.** the P3
24ff0 20 72 65 67 69 73 74 65 72 20 6d 75 73 74 20 62   register must b
25000 65 20 67 75 61 72 61 6e 74 65 65 64 20 74 6f 20  e guaranteed to 
25010 63 6f 6e 74 61 69 6e 20 61 6e 20 69 6e 74 65 67  contain an integ
25020 65 72 20 76 61 6c 75 65 2e 20 20 57 69 74 68 20  er value.  With 
25030 74 68 69 73 0a 2a 2a 20 6f 70 63 6f 64 65 2c 20  this.** opcode, 
25040 72 65 67 69 73 74 65 72 20 50 33 20 6d 69 67 68  register P3 migh
25050 74 20 6e 6f 74 20 63 6f 6e 74 61 69 6e 20 61 6e  t not contain an
25060 20 69 6e 74 65 67 65 72 2e 0a 2a 2a 0a 2a 2a 20   integer..**.** 
25070 54 68 65 20 4f 50 5f 4e 6f 74 46 6f 75 6e 64 20  The OP_NotFound 
25080 6f 70 63 6f 64 65 20 70 65 72 66 6f 72 6d 73 20  opcode performs 
25090 74 68 65 20 73 61 6d 65 20 6f 70 65 72 61 74 69  the same operati
250a0 6f 6e 20 6f 6e 20 69 6e 64 65 78 20 62 74 72 65  on on index btre
250b0 65 73 0a 2a 2a 20 28 77 69 74 68 20 61 72 62 69  es.** (with arbi
250c0 74 72 61 72 79 20 6d 75 6c 74 69 2d 76 61 6c 75  trary multi-valu
250d0 65 20 6b 65 79 73 29 2e 0a 2a 2a 0a 2a 2a 20 54  e keys)..**.** T
250e0 68 69 73 20 6f 70 63 6f 64 65 20 6c 65 61 76 65  his opcode leave
250f0 73 20 74 68 65 20 63 75 72 73 6f 72 20 69 6e 20  s the cursor in 
25100 61 20 73 74 61 74 65 20 77 68 65 72 65 20 69 74  a state where it
25110 20 63 61 6e 6e 6f 74 20 62 65 20 61 64 76 61 6e   cannot be advan
25120 63 65 64 0a 2a 2a 20 69 6e 20 65 69 74 68 65 72  ced.** in either
25130 20 64 69 72 65 63 74 69 6f 6e 2e 20 20 49 6e 20   direction.  In 
25140 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 74 68 65  other words, the
25150 20 4e 65 78 74 20 61 6e 64 20 50 72 65 76 20 6f   Next and Prev o
25160 70 63 6f 64 65 73 20 77 69 6c 6c 0a 2a 2a 20 6e  pcodes will.** n
25170 6f 74 20 77 6f 72 6b 20 66 6f 6c 6c 6f 77 69 6e  ot work followin
25180 67 20 74 68 69 73 20 6f 70 63 6f 64 65 2e 0a 2a  g this opcode..*
25190 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 46  *.** See also: F
251a0 6f 75 6e 64 2c 20 4e 6f 74 46 6f 75 6e 64 2c 20  ound, NotFound, 
251b0 4e 6f 43 6f 6e 66 6c 69 63 74 2c 20 53 65 65 6b  NoConflict, Seek
251c0 52 6f 77 69 64 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f  Rowid.*/./* Opco
251d0 64 65 3a 20 4e 6f 74 45 78 69 73 74 73 20 50 31  de: NotExists P1
251e0 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79   P2 P3 * *.** Sy
251f0 6e 6f 70 73 69 73 3a 20 69 6e 74 6b 65 79 3d 72  nopsis: intkey=r
25200 5b 50 33 5d 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73  [P3].**.** P1 is
25210 20 74 68 65 20 69 6e 64 65 78 20 6f 66 20 61 20   the index of a 
25220 63 75 72 73 6f 72 20 6f 70 65 6e 20 6f 6e 20 61  cursor open on a
25230 6e 20 53 51 4c 20 74 61 62 6c 65 20 62 74 72 65  n SQL table btre
25240 65 20 28 77 69 74 68 20 69 6e 74 65 67 65 72 0a  e (with integer.
25250 2a 2a 20 6b 65 79 73 29 2e 20 20 50 33 20 69 73  ** keys).  P3 is
25260 20 61 6e 20 69 6e 74 65 67 65 72 20 72 6f 77 69   an integer rowi
25270 64 2e 20 20 49 66 20 50 31 20 64 6f 65 73 20 6e  d.  If P1 does n
25280 6f 74 20 63 6f 6e 74 61 69 6e 20 61 20 72 65 63  ot contain a rec
25290 6f 72 64 20 77 69 74 68 0a 2a 2a 20 72 6f 77 69  ord with.** rowi
252a0 64 20 50 33 20 74 68 65 6e 20 6a 75 6d 70 20 69  d P3 then jump i
252b0 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f 20 50 32  mmediately to P2
252c0 2e 20 20 4f 72 2c 20 69 66 20 50 32 20 69 73 20  .  Or, if P2 is 
252d0 30 2c 20 72 61 69 73 65 20 61 6e 0a 2a 2a 20 53  0, raise an.** S
252e0 51 4c 49 54 45 5f 43 4f 52 52 55 50 54 20 65 72  QLITE_CORRUPT er
252f0 72 6f 72 2e 20 49 66 20 50 31 20 64 6f 65 73 20  ror. If P1 does 
25300 63 6f 6e 74 61 69 6e 20 61 20 72 65 63 6f 72 64  contain a record
25310 20 77 69 74 68 20 72 6f 77 69 64 20 50 33 20 74   with rowid P3 t
25320 68 65 6e 20 0a 2a 2a 20 6c 65 61 76 65 20 74 68  hen .** leave th
25330 65 20 63 75 72 73 6f 72 20 70 6f 69 6e 74 69 6e  e cursor pointin
25340 67 20 61 74 20 74 68 61 74 20 72 65 63 6f 72 64  g at that record
25350 20 61 6e 64 20 66 61 6c 6c 20 74 68 72 6f 75 67   and fall throug
25360 68 20 74 6f 20 74 68 65 20 6e 65 78 74 0a 2a 2a  h to the next.**
25370 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a   instruction..**
25380 0a 2a 2a 20 54 68 65 20 4f 50 5f 53 65 65 6b 52  .** The OP_SeekR
25390 6f 77 69 64 20 6f 70 63 6f 64 65 20 70 65 72 66  owid opcode perf
253a0 6f 72 6d 73 20 74 68 65 20 73 61 6d 65 20 6f 70  orms the same op
253b0 65 72 61 74 69 6f 6e 20 62 75 74 20 61 6c 73 6f  eration but also
253c0 20 61 6c 6c 6f 77 73 20 74 68 65 0a 2a 2a 20 50   allows the.** P
253d0 33 20 72 65 67 69 73 74 65 72 20 74 6f 20 63 6f  3 register to co
253e0 6e 74 61 69 6e 20 61 20 6e 6f 6e 2d 69 6e 74 65  ntain a non-inte
253f0 67 65 72 20 76 61 6c 75 65 2c 20 69 6e 20 77 68  ger value, in wh
25400 69 63 68 20 63 61 73 65 20 74 68 65 20 6a 75 6d  ich case the jum
25410 70 20 69 73 0a 2a 2a 20 61 6c 77 61 79 73 20 74  p is.** always t
25420 61 6b 65 6e 2e 20 20 54 68 69 73 20 6f 70 63 6f  aken.  This opco
25430 64 65 20 72 65 71 75 69 72 65 73 20 74 68 61 74  de requires that
25440 20 50 33 20 61 6c 77 61 79 73 20 63 6f 6e 74 61   P3 always conta
25450 69 6e 20 61 6e 20 69 6e 74 65 67 65 72 2e 0a 2a  in an integer..*
25460 2a 0a 2a 2a 20 54 68 65 20 4f 50 5f 4e 6f 74 46  *.** The OP_NotF
25470 6f 75 6e 64 20 6f 70 63 6f 64 65 20 70 65 72 66  ound opcode perf
25480 6f 72 6d 73 20 74 68 65 20 73 61 6d 65 20 6f 70  orms the same op
25490 65 72 61 74 69 6f 6e 20 6f 6e 20 69 6e 64 65 78  eration on index
254a0 20 62 74 72 65 65 73 0a 2a 2a 20 28 77 69 74 68   btrees.** (with
254b0 20 61 72 62 69 74 72 61 72 79 20 6d 75 6c 74 69   arbitrary multi
254c0 2d 76 61 6c 75 65 20 6b 65 79 73 29 2e 0a 2a 2a  -value keys)..**
254d0 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20  .** This opcode 
254e0 6c 65 61 76 65 73 20 74 68 65 20 63 75 72 73 6f  leaves the curso
254f0 72 20 69 6e 20 61 20 73 74 61 74 65 20 77 68 65  r in a state whe
25500 72 65 20 69 74 20 63 61 6e 6e 6f 74 20 62 65 20  re it cannot be 
25510 61 64 76 61 6e 63 65 64 0a 2a 2a 20 69 6e 20 65  advanced.** in e
25520 69 74 68 65 72 20 64 69 72 65 63 74 69 6f 6e 2e  ither direction.
25530 20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73    In other words
25540 2c 20 74 68 65 20 4e 65 78 74 20 61 6e 64 20 50  , the Next and P
25550 72 65 76 20 6f 70 63 6f 64 65 73 20 77 69 6c 6c  rev opcodes will
25560 0a 2a 2a 20 6e 6f 74 20 77 6f 72 6b 20 66 6f 6c  .** not work fol
25570 6c 6f 77 69 6e 67 20 74 68 69 73 20 6f 70 63 6f  lowing this opco
25580 64 65 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c  de..**.** See al
25590 73 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f 74 46 6f  so: Found, NotFo
255a0 75 6e 64 2c 20 4e 6f 43 6f 6e 66 6c 69 63 74 2c  und, NoConflict,
255b0 20 53 65 65 6b 52 6f 77 69 64 0a 2a 2f 0a 63 61   SeekRowid.*/.ca
255c0 73 65 20 4f 50 5f 53 65 65 6b 52 6f 77 69 64 3a  se OP_SeekRowid:
255d0 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d   {        /* jum
255e0 70 2c 20 69 6e 33 20 2a 2f 0a 20 20 56 64 62 65  p, in3 */.  Vdbe
255f0 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 42 74  Cursor *pC;.  Bt
25600 43 75 72 73 6f 72 20 2a 70 43 72 73 72 3b 0a 20  Cursor *pCrsr;. 
25610 20 69 6e 74 20 72 65 73 3b 0a 20 20 75 36 34 20   int res;.  u64 
25620 69 4b 65 79 3b 0a 0a 20 20 70 49 6e 33 20 3d 20  iKey;..  pIn3 = 
25630 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a  &aMem[pOp->p3];.
25640 20 20 74 65 73 74 63 61 73 65 28 20 70 49 6e 33    testcase( pIn3
25650 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e  ->flags & MEM_In
25660 74 20 29 3b 0a 20 20 74 65 73 74 63 61 73 65 28  t );.  testcase(
25670 20 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d   pIn3->flags & M
25680 45 4d 5f 49 6e 74 52 65 61 6c 20 29 3b 0a 20 20  EM_IntReal );.  
25690 69 66 28 20 28 70 49 6e 33 2d 3e 66 6c 61 67 73  if( (pIn3->flags
256a0 20 26 20 28 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f   & (MEM_Int|MEM_
256b0 49 6e 74 52 65 61 6c 29 29 3d 3d 30 20 29 7b 0a  IntReal))==0 ){.
256c0 20 20 20 20 2f 2a 20 4d 61 6b 65 20 73 75 72 65      /* Make sure
256d0 20 70 49 6e 33 2d 3e 75 2e 69 20 63 6f 6e 74 61   pIn3->u.i conta
256e0 69 6e 73 20 61 20 76 61 6c 69 64 20 69 6e 74 65  ins a valid inte
256f0 67 65 72 20 72 65 70 72 65 73 65 6e 74 61 74 69  ger representati
25700 6f 6e 20 6f 66 0a 20 20 20 20 2a 2a 20 74 68 65  on of.    ** the
25710 20 6b 65 79 20 76 61 6c 75 65 2c 20 62 75 74 20   key value, but 
25720 64 6f 20 6e 6f 74 20 63 68 61 6e 67 65 20 74 68  do not change th
25730 65 20 64 61 74 61 74 79 70 65 20 6f 66 20 74 68  e datatype of th
25740 65 20 72 65 67 69 73 74 65 72 2c 20 61 73 0a 20  e register, as. 
25750 20 20 20 2a 2a 20 6f 74 68 65 72 20 70 61 72 74     ** other part
25760 73 20 6f 66 20 74 68 65 20 70 65 72 70 61 72 65  s of the perpare
25770 64 20 73 74 61 74 65 6d 65 6e 74 20 6d 69 67 68  d statement migh
25780 74 20 62 65 20 64 65 70 65 6e 64 69 6e 67 20 6f  t be depending o
25790 6e 20 74 68 65 0a 20 20 20 20 2a 2a 20 63 75 72  n the.    ** cur
257a0 72 65 6e 74 20 64 61 74 61 74 79 70 65 2e 20 2a  rent datatype. *
257b0 2f 0a 20 20 20 20 75 31 36 20 6f 72 69 67 46 6c  /.    u16 origFl
257c0 61 67 73 20 3d 20 70 49 6e 33 2d 3e 66 6c 61 67  ags = pIn3->flag
257d0 73 3b 0a 20 20 20 20 69 6e 74 20 69 73 4e 6f 74  s;.    int isNot
257e0 49 6e 74 3b 0a 20 20 20 20 61 70 70 6c 79 41 66  Int;.    applyAf
257f0 66 69 6e 69 74 79 28 70 49 6e 33 2c 20 53 51 4c  finity(pIn3, SQL
25800 49 54 45 5f 41 46 46 5f 4e 55 4d 45 52 49 43 2c  ITE_AFF_NUMERIC,
25810 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 20 20   encoding);.    
25820 69 73 4e 6f 74 49 6e 74 20 3d 20 28 70 49 6e 33  isNotInt = (pIn3
25830 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e  ->flags & MEM_In
25840 74 29 3d 3d 30 3b 0a 20 20 20 20 70 49 6e 33 2d  t)==0;.    pIn3-
25850 3e 66 6c 61 67 73 20 3d 20 6f 72 69 67 46 6c 61  >flags = origFla
25860 67 73 3b 0a 20 20 20 20 69 66 28 20 69 73 4e 6f  gs;.    if( isNo
25870 74 49 6e 74 20 29 20 67 6f 74 6f 20 6a 75 6d 70  tInt ) goto jump
25880 5f 74 6f 5f 70 32 3b 0a 20 20 7d 0a 20 20 2f 2a  _to_p2;.  }.  /*
25890 20 46 61 6c 6c 20 74 68 72 6f 75 67 68 20 69 6e   Fall through in
258a0 74 6f 20 4f 50 5f 4e 6f 74 45 78 69 73 74 73 20  to OP_NotExists 
258b0 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 6f 74 45 78  */.case OP_NotEx
258c0 69 73 74 73 3a 20 20 20 20 20 20 20 20 20 20 2f  ists:          /
258d0 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 20  * jump, in3 */. 
258e0 20 70 49 6e 33 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn3 = &aMem[pO
258f0 70 2d 3e 70 33 5d 3b 0a 20 20 61 73 73 65 72 74  p->p3];.  assert
25900 28 20 28 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26  ( (pIn3->flags &
25910 20 4d 45 4d 5f 49 6e 74 29 21 3d 30 20 7c 7c 20   MEM_Int)!=0 || 
25920 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  pOp->opcode==OP_
25930 53 65 65 6b 52 6f 77 69 64 20 29 3b 0a 20 20 61  SeekRowid );.  a
25940 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d  ssert( pOp->p1>=
25950 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e  0 && pOp->p1<p->
25960 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20  nCursor );.  pC 
25970 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e  = p->apCsr[pOp->
25980 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p1];.  assert( p
25990 43 21 3d 30 20 29 3b 0a 23 69 66 64 65 66 20 53  C!=0 );.#ifdef S
259a0 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 69 66  QLITE_DEBUG.  if
259b0 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f  ( pOp->opcode==O
259c0 50 5f 53 65 65 6b 52 6f 77 69 64 20 29 20 70 43  P_SeekRowid ) pC
259d0 2d 3e 73 65 65 6b 4f 70 20 3d 20 4f 50 5f 53 65  ->seekOp = OP_Se
259e0 65 6b 52 6f 77 69 64 3b 0a 23 65 6e 64 69 66 0a  ekRowid;.#endif.
259f0 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73    assert( pC->is
25a00 54 61 62 6c 65 20 29 3b 0a 20 20 61 73 73 65 72  Table );.  asser
25a10 74 28 20 70 43 2d 3e 65 43 75 72 54 79 70 65 3d  t( pC->eCurType=
25a20 3d 43 55 52 54 59 50 45 5f 42 54 52 45 45 20 29  =CURTYPE_BTREE )
25a30 3b 0a 20 20 70 43 72 73 72 20 3d 20 70 43 2d 3e  ;.  pCrsr = pC->
25a40 75 63 2e 70 43 75 72 73 6f 72 3b 0a 20 20 61 73  uc.pCursor;.  as
25a50 73 65 72 74 28 20 70 43 72 73 72 21 3d 30 20 29  sert( pCrsr!=0 )
25a60 3b 0a 20 20 72 65 73 20 3d 20 30 3b 0a 20 20 69  ;.  res = 0;.  i
25a70 4b 65 79 20 3d 20 70 49 6e 33 2d 3e 75 2e 69 3b  Key = pIn3->u.i;
25a80 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42  .  rc = sqlite3B
25a90 74 72 65 65 4d 6f 76 65 74 6f 55 6e 70 61 63 6b  treeMovetoUnpack
25aa0 65 64 28 70 43 72 73 72 2c 20 30 2c 20 69 4b 65  ed(pCrsr, 0, iKe
25ab0 79 2c 20 30 2c 20 26 72 65 73 29 3b 0a 20 20 61  y, 0, &res);.  a
25ac0 73 73 65 72 74 28 20 72 63 3d 3d 53 51 4c 49 54  ssert( rc==SQLIT
25ad0 45 5f 4f 4b 20 7c 7c 20 72 65 73 3d 3d 30 20 29  E_OK || res==0 )
25ae0 3b 0a 20 20 70 43 2d 3e 6d 6f 76 65 74 6f 54 61  ;.  pC->movetoTa
25af0 72 67 65 74 20 3d 20 69 4b 65 79 3b 20 20 2f 2a  rget = iKey;  /*
25b00 20 55 73 65 64 20 62 79 20 4f 50 5f 44 65 6c 65   Used by OP_Dele
25b10 74 65 20 2a 2f 0a 20 20 70 43 2d 3e 6e 75 6c 6c  te */.  pC->null
25b20 52 6f 77 20 3d 20 30 3b 0a 20 20 70 43 2d 3e 63  Row = 0;.  pC->c
25b30 61 63 68 65 53 74 61 74 75 73 20 3d 20 43 41 43  acheStatus = CAC
25b40 48 45 5f 53 54 41 4c 45 3b 0a 20 20 70 43 2d 3e  HE_STALE;.  pC->
25b50 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d  deferredMoveto =
25b60 20 30 3b 0a 20 20 56 64 62 65 42 72 61 6e 63 68   0;.  VdbeBranch
25b70 54 61 6b 65 6e 28 72 65 73 21 3d 30 2c 32 29 3b  Taken(res!=0,2);
25b80 0a 20 20 70 43 2d 3e 73 65 65 6b 52 65 73 75 6c  .  pC->seekResul
25b90 74 20 3d 20 72 65 73 3b 0a 20 20 69 66 28 20 72  t = res;.  if( r
25ba0 65 73 21 3d 30 20 29 7b 0a 20 20 20 20 61 73 73  es!=0 ){.    ass
25bb0 65 72 74 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f  ert( rc==SQLITE_
25bc0 4f 4b 20 29 3b 0a 20 20 20 20 69 66 28 20 70 4f  OK );.    if( pO
25bd0 70 2d 3e 70 32 3d 3d 30 20 29 7b 0a 20 20 20 20  p->p2==0 ){.    
25be0 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 43 4f    rc = SQLITE_CO
25bf0 52 52 55 50 54 5f 42 4b 50 54 3b 0a 20 20 20 20  RRUPT_BKPT;.    
25c00 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 67 6f 74  }else{.      got
25c10 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20  o jump_to_p2;.  
25c20 20 20 7d 0a 20 20 7d 0a 20 20 69 66 28 20 72 63    }.  }.  if( rc
25c30 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75   ) goto abort_du
25c40 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 62 72  e_to_error;.  br
25c50 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
25c60 65 3a 20 53 65 71 75 65 6e 63 65 20 50 31 20 50  e: Sequence P1 P
25c70 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70  2 * * *.** Synop
25c80 73 69 73 3a 20 72 5b 50 32 5d 3d 63 75 72 73 6f  sis: r[P2]=curso
25c90 72 5b 50 31 5d 2e 63 74 72 2b 2b 0a 2a 2a 0a 2a  r[P1].ctr++.**.*
25ca0 2a 20 46 69 6e 64 20 74 68 65 20 6e 65 78 74 20  * Find the next 
25cb0 61 76 61 69 6c 61 62 6c 65 20 73 65 71 75 65 6e  available sequen
25cc0 63 65 20 6e 75 6d 62 65 72 20 66 6f 72 20 63 75  ce number for cu
25cd0 72 73 6f 72 20 50 31 2e 0a 2a 2a 20 57 72 69 74  rsor P1..** Writ
25ce0 65 20 74 68 65 20 73 65 71 75 65 6e 63 65 20 6e  e the sequence n
25cf0 75 6d 62 65 72 20 69 6e 74 6f 20 72 65 67 69 73  umber into regis
25d00 74 65 72 20 50 32 2e 0a 2a 2a 20 54 68 65 20 73  ter P2..** The s
25d10 65 71 75 65 6e 63 65 20 6e 75 6d 62 65 72 20 6f  equence number o
25d20 6e 20 74 68 65 20 63 75 72 73 6f 72 20 69 73 20  n the cursor is 
25d30 69 6e 63 72 65 6d 65 6e 74 65 64 20 61 66 74 65  incremented afte
25d40 72 20 74 68 69 73 0a 2a 2a 20 69 6e 73 74 72 75  r this.** instru
25d50 63 74 69 6f 6e 2e 20 20 0a 2a 2f 0a 63 61 73 65  ction.  .*/.case
25d60 20 4f 50 5f 53 65 71 75 65 6e 63 65 3a 20 7b 20   OP_Sequence: { 
25d70 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74            /* out
25d80 32 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70  2 */.  assert( p
25d90 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70  Op->p1>=0 && pOp
25da0 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20  ->p1<p->nCursor 
25db0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e  );.  assert( p->
25dc0 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 21 3d  apCsr[pOp->p1]!=
25dd0 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  0 );.  assert( p
25de0 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d  ->apCsr[pOp->p1]
25df0 2d 3e 65 43 75 72 54 79 70 65 21 3d 43 55 52 54  ->eCurType!=CURT
25e00 59 50 45 5f 56 54 41 42 20 29 3b 0a 20 20 70 4f  YPE_VTAB );.  pO
25e10 75 74 20 3d 20 6f 75 74 32 50 72 65 72 65 6c 65  ut = out2Prerele
25e20 61 73 65 28 70 2c 20 70 4f 70 29 3b 0a 20 20 70  ase(p, pOp);.  p
25e30 4f 75 74 2d 3e 75 2e 69 20 3d 20 70 2d 3e 61 70  Out->u.i = p->ap
25e40 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 2d 3e 73 65  Csr[pOp->p1]->se
25e50 71 43 6f 75 6e 74 2b 2b 3b 0a 20 20 62 72 65 61  qCount++;.  brea
25e60 6b 3b 0a 7d 0a 0a 0a 2f 2a 20 4f 70 63 6f 64 65  k;.}.../* Opcode
25e70 3a 20 4e 65 77 52 6f 77 69 64 20 50 31 20 50 32  : NewRowid P1 P2
25e80 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70   P3 * *.** Synop
25e90 73 69 73 3a 20 72 5b 50 32 5d 3d 72 6f 77 69 64  sis: r[P2]=rowid
25ea0 0a 2a 2a 0a 2a 2a 20 47 65 74 20 61 20 6e 65 77  .**.** Get a new
25eb0 20 69 6e 74 65 67 65 72 20 72 65 63 6f 72 64 20   integer record 
25ec0 6e 75 6d 62 65 72 20 28 61 2e 6b 2e 61 20 22 72  number (a.k.a "r
25ed0 6f 77 69 64 22 29 20 75 73 65 64 20 61 73 20 74  owid") used as t
25ee0 68 65 20 6b 65 79 20 74 6f 20 61 20 74 61 62 6c  he key to a tabl
25ef0 65 2e 0a 2a 2a 20 54 68 65 20 72 65 63 6f 72 64  e..** The record
25f00 20 6e 75 6d 62 65 72 20 69 73 20 6e 6f 74 20 70   number is not p
25f10 72 65 76 69 6f 75 73 6c 79 20 75 73 65 64 20 61  reviously used a
25f20 73 20 61 20 6b 65 79 20 69 6e 20 74 68 65 20 64  s a key in the d
25f30 61 74 61 62 61 73 65 0a 2a 2a 20 74 61 62 6c 65  atabase.** table
25f40 20 74 68 61 74 20 63 75 72 73 6f 72 20 50 31 20   that cursor P1 
25f50 70 6f 69 6e 74 73 20 74 6f 2e 20 20 54 68 65 20  points to.  The 
25f60 6e 65 77 20 72 65 63 6f 72 64 20 6e 75 6d 62 65  new record numbe
25f70 72 20 69 73 20 77 72 69 74 74 65 6e 0a 2a 2a 20  r is written.** 
25f80 77 72 69 74 74 65 6e 20 74 6f 20 72 65 67 69 73  written to regis
25f90 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 49 66  ter P2..**.** If
25fa0 20 50 33 3e 30 20 74 68 65 6e 20 50 33 20 69 73   P3>0 then P3 is
25fb0 20 61 20 72 65 67 69 73 74 65 72 20 69 6e 20 74   a register in t
25fc0 68 65 20 72 6f 6f 74 20 66 72 61 6d 65 20 6f 66  he root frame of
25fd0 20 74 68 69 73 20 56 44 42 45 20 74 68 61 74 20   this VDBE that 
25fe0 68 6f 6c 64 73 20 0a 2a 2a 20 74 68 65 20 6c 61  holds .** the la
25ff0 72 67 65 73 74 20 70 72 65 76 69 6f 75 73 6c 79  rgest previously
26000 20 67 65 6e 65 72 61 74 65 64 20 72 65 63 6f 72   generated recor
26010 64 20 6e 75 6d 62 65 72 2e 20 4e 6f 20 6e 65 77  d number. No new
26020 20 72 65 63 6f 72 64 20 6e 75 6d 62 65 72 73 20   record numbers 
26030 61 72 65 0a 2a 2a 20 61 6c 6c 6f 77 65 64 20 74  are.** allowed t
26040 6f 20 62 65 20 6c 65 73 73 20 74 68 61 6e 20 74  o be less than t
26050 68 69 73 20 76 61 6c 75 65 2e 20 57 68 65 6e 20  his value. When 
26060 74 68 69 73 20 76 61 6c 75 65 20 72 65 61 63 68  this value reach
26070 65 73 20 69 74 73 20 6d 61 78 69 6d 75 6d 2c 20  es its maximum, 
26080 0a 2a 2a 20 61 6e 20 53 51 4c 49 54 45 5f 46 55  .** an SQLITE_FU
26090 4c 4c 20 65 72 72 6f 72 20 69 73 20 67 65 6e 65  LL error is gene
260a0 72 61 74 65 64 2e 20 54 68 65 20 50 33 20 72 65  rated. The P3 re
260b0 67 69 73 74 65 72 20 69 73 20 75 70 64 61 74 65  gister is update
260c0 64 20 77 69 74 68 20 74 68 65 20 27 0a 2a 2a 20  d with the '.** 
260d0 67 65 6e 65 72 61 74 65 64 20 72 65 63 6f 72 64  generated record
260e0 20 6e 75 6d 62 65 72 2e 20 54 68 69 73 20 50 33   number. This P3
260f0 20 6d 65 63 68 61 6e 69 73 6d 20 69 73 20 75 73   mechanism is us
26100 65 64 20 74 6f 20 68 65 6c 70 20 69 6d 70 6c 65  ed to help imple
26110 6d 65 6e 74 20 74 68 65 0a 2a 2a 20 41 55 54 4f  ment the.** AUTO
26120 49 4e 43 52 45 4d 45 4e 54 20 66 65 61 74 75 72  INCREMENT featur
26130 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 65  e..*/.case OP_Ne
26140 77 52 6f 77 69 64 3a 20 7b 20 20 20 20 20 20 20  wRowid: {       
26150 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20      /* out2 */. 
26160 20 69 36 34 20 76 3b 20 20 20 20 20 20 20 20 20   i64 v;         
26170 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6e          /* The n
26180 65 77 20 72 6f 77 69 64 20 2a 2f 0a 20 20 56 64  ew rowid */.  Vd
26190 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 20 20 20  beCursor *pC;   
261a0 20 20 20 20 20 2f 2a 20 43 75 72 73 6f 72 20 6f       /* Cursor o
261b0 66 20 74 61 62 6c 65 20 74 6f 20 67 65 74 20 74  f table to get t
261c0 68 65 20 6e 65 77 20 72 6f 77 69 64 20 2a 2f 0a  he new rowid */.
261d0 20 20 69 6e 74 20 72 65 73 3b 20 20 20 20 20 20    int res;      
261e0 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65 73 75           /* Resu
261f0 6c 74 20 6f 66 20 61 6e 20 73 71 6c 69 74 65 33  lt of an sqlite3
26200 42 74 72 65 65 4c 61 73 74 28 29 20 2a 2f 0a 20  BtreeLast() */. 
26210 20 69 6e 74 20 63 6e 74 3b 20 20 20 20 20 20 20   int cnt;       
26220 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 75 6e 74          /* Count
26230 65 72 20 74 6f 20 6c 69 6d 69 74 20 74 68 65 20  er to limit the 
26240 6e 75 6d 62 65 72 20 6f 66 20 73 65 61 72 63 68  number of search
26250 65 73 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 4d 65  es */.  Mem *pMe
26260 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  m;             /
26270 2a 20 52 65 67 69 73 74 65 72 20 68 6f 6c 64 69  * Register holdi
26280 6e 67 20 6c 61 72 67 65 73 74 20 72 6f 77 69 64  ng largest rowid
26290 20 66 6f 72 20 41 55 54 4f 49 4e 43 52 45 4d 45   for AUTOINCREME
262a0 4e 54 20 2a 2f 0a 20 20 56 64 62 65 46 72 61 6d  NT */.  VdbeFram
262b0 65 20 2a 70 46 72 61 6d 65 3b 20 20 20 20 20 2f  e *pFrame;     /
262c0 2a 20 52 6f 6f 74 20 66 72 61 6d 65 20 6f 66 20  * Root frame of 
262d0 56 44 42 45 20 2a 2f 0a 0a 20 20 76 20 3d 20 30  VDBE */..  v = 0
262e0 3b 0a 20 20 72 65 73 20 3d 20 30 3b 0a 20 20 70  ;.  res = 0;.  p
262f0 4f 75 74 20 3d 20 6f 75 74 32 50 72 65 72 65 6c  Out = out2Prerel
26300 65 61 73 65 28 70 2c 20 70 4f 70 29 3b 0a 20 20  ease(p, pOp);.  
26310 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
26320 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d  =0 && pOp->p1<p-
26330 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43  >nCursor );.  pC
26340 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d   = p->apCsr[pOp-
26350 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p1];.  assert( 
26360 70 43 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  pC!=0 );.  asser
26370 74 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 20 29  t( pC->isTable )
26380 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  ;.  assert( pC->
26390 65 43 75 72 54 79 70 65 3d 3d 43 55 52 54 59 50  eCurType==CURTYP
263a0 45 5f 42 54 52 45 45 20 29 3b 0a 20 20 61 73 73  E_BTREE );.  ass
263b0 65 72 74 28 20 70 43 2d 3e 75 63 2e 70 43 75 72  ert( pC->uc.pCur
263c0 73 6f 72 21 3d 30 20 29 3b 0a 20 20 7b 0a 20 20  sor!=0 );.  {.  
263d0 20 20 2f 2a 20 54 68 65 20 6e 65 78 74 20 72 6f    /* The next ro
263e0 77 69 64 20 6f 72 20 72 65 63 6f 72 64 20 6e 75  wid or record nu
263f0 6d 62 65 72 20 28 64 69 66 66 65 72 65 6e 74 20  mber (different 
26400 74 65 72 6d 73 20 66 6f 72 20 74 68 65 20 73 61  terms for the sa
26410 6d 65 0a 20 20 20 20 2a 2a 20 74 68 69 6e 67 29  me.    ** thing)
26420 20 69 73 20 6f 62 74 61 69 6e 65 64 20 69 6e 20   is obtained in 
26430 61 20 74 77 6f 2d 73 74 65 70 20 61 6c 67 6f 72  a two-step algor
26440 69 74 68 6d 2e 0a 20 20 20 20 2a 2a 0a 20 20 20  ithm..    **.   
26450 20 2a 2a 20 46 69 72 73 74 20 77 65 20 61 74 74   ** First we att
26460 65 6d 70 74 20 74 6f 20 66 69 6e 64 20 74 68 65  empt to find the
26470 20 6c 61 72 67 65 73 74 20 65 78 69 73 74 69 6e   largest existin
26480 67 20 72 6f 77 69 64 20 61 6e 64 20 61 64 64 20  g rowid and add 
26490 6f 6e 65 0a 20 20 20 20 2a 2a 20 74 6f 20 74 68  one.    ** to th
264a0 61 74 2e 20 20 42 75 74 20 69 66 20 74 68 65 20  at.  But if the 
264b0 6c 61 72 67 65 73 74 20 65 78 69 73 74 69 6e 67  largest existing
264c0 20 72 6f 77 69 64 20 69 73 20 61 6c 72 65 61 64   rowid is alread
264d0 79 20 74 68 65 20 6d 61 78 69 6d 75 6d 0a 20 20  y the maximum.  
264e0 20 20 2a 2a 20 70 6f 73 69 74 69 76 65 20 69 6e    ** positive in
264f0 74 65 67 65 72 2c 20 77 65 20 68 61 76 65 20 74  teger, we have t
26500 6f 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 20 74  o fall through t
26510 6f 20 74 68 65 20 73 65 63 6f 6e 64 0a 20 20 20  o the second.   
26520 20 2a 2a 20 70 72 6f 62 61 62 69 6c 69 73 74 69   ** probabilisti
26530 63 20 61 6c 67 6f 72 69 74 68 6d 0a 20 20 20 20  c algorithm.    
26540 2a 2a 0a 20 20 20 20 2a 2a 20 54 68 65 20 73 65  **.    ** The se
26550 63 6f 6e 64 20 61 6c 67 6f 72 69 74 68 6d 20 69  cond algorithm i
26560 73 20 74 6f 20 73 65 6c 65 63 74 20 61 20 72 6f  s to select a ro
26570 77 69 64 20 61 74 20 72 61 6e 64 6f 6d 20 61 6e  wid at random an
26580 64 20 73 65 65 20 69 66 0a 20 20 20 20 2a 2a 20  d see if.    ** 
26590 69 74 20 61 6c 72 65 61 64 79 20 65 78 69 73 74  it already exist
265a0 73 20 69 6e 20 74 68 65 20 74 61 62 6c 65 2e 20  s in the table. 
265b0 20 49 66 20 69 74 20 64 6f 65 73 20 6e 6f 74 20   If it does not 
265c0 65 78 69 73 74 2c 20 77 65 20 68 61 76 65 0a 20  exist, we have. 
265d0 20 20 20 2a 2a 20 73 75 63 63 65 65 64 65 64 2e     ** succeeded.
265e0 20 20 49 66 20 74 68 65 20 72 61 6e 64 6f 6d 20    If the random 
265f0 72 6f 77 69 64 20 64 6f 65 73 20 65 78 69 73 74  rowid does exist
26600 2c 20 77 65 20 73 65 6c 65 63 74 20 61 20 6e 65  , we select a ne
26610 77 20 6f 6e 65 0a 20 20 20 20 2a 2a 20 61 6e 64  w one.    ** and
26620 20 74 72 79 20 61 67 61 69 6e 2c 20 75 70 20 74   try again, up t
26630 6f 20 31 30 30 20 74 69 6d 65 73 2e 0a 20 20 20  o 100 times..   
26640 20 2a 2f 0a 20 20 20 20 61 73 73 65 72 74 28 20   */.    assert( 
26650 70 43 2d 3e 69 73 54 61 62 6c 65 20 29 3b 0a 0a  pC->isTable );..
26660 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 33 32  #ifdef SQLITE_32
26670 42 49 54 5f 52 4f 57 49 44 0a 23 20 20 20 64 65  BIT_ROWID.#   de
26680 66 69 6e 65 20 4d 41 58 5f 52 4f 57 49 44 20 30  fine MAX_ROWID 0
26690 78 37 66 66 66 66 66 66 66 0a 23 65 6c 73 65 0a  x7fffffff.#else.
266a0 20 20 20 20 2f 2a 20 53 6f 6d 65 20 63 6f 6d 70      /* Some comp
266b0 69 6c 65 72 73 20 63 6f 6d 70 6c 61 69 6e 20 61  ilers complain a
266c0 62 6f 75 74 20 63 6f 6e 73 74 61 6e 74 73 20 6f  bout constants o
266d0 66 20 74 68 65 20 66 6f 72 6d 20 30 78 37 66 66  f the form 0x7ff
266e0 66 66 66 66 66 66 66 66 66 66 66 66 66 2e 0a 20  fffffffffffff.. 
266f0 20 20 20 2a 2a 20 4f 74 68 65 72 73 20 63 6f 6d     ** Others com
26700 70 6c 61 69 6e 20 61 62 6f 75 74 20 30 78 37 66  plain about 0x7f
26710 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 4c  fffffffffffffffL
26720 4c 2e 20 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e  L.  The followin
26730 67 20 6d 61 63 72 6f 20 73 65 65 6d 73 0a 20 20  g macro seems.  
26740 20 20 2a 2a 20 74 6f 20 70 72 6f 76 69 64 65 20    ** to provide 
26750 74 68 65 20 63 6f 6e 73 74 61 6e 74 20 77 68 69  the constant whi
26760 6c 65 20 6d 61 6b 69 6e 67 20 61 6c 6c 20 63 6f  le making all co
26770 6d 70 69 6c 65 72 73 20 68 61 70 70 79 2e 0a 20  mpilers happy.. 
26780 20 20 20 2a 2f 0a 23 20 20 20 64 65 66 69 6e 65     */.#   define
26790 20 4d 41 58 5f 52 4f 57 49 44 20 20 28 69 36 34   MAX_ROWID  (i64
267a0 29 28 20 28 28 28 75 36 34 29 30 78 37 66 66 66  )( (((u64)0x7fff
267b0 66 66 66 66 29 3c 3c 33 32 29 20 7c 20 28 75 36  ffff)<<32) | (u6
267c0 34 29 30 78 66 66 66 66 66 66 66 66 20 29 0a 23  4)0xffffffff ).#
267d0 65 6e 64 69 66 0a 0a 20 20 20 20 69 66 28 20 21  endif..    if( !
267e0 70 43 2d 3e 75 73 65 52 61 6e 64 6f 6d 52 6f 77  pC->useRandomRow
267f0 69 64 20 29 7b 0a 20 20 20 20 20 20 72 63 20 3d  id ){.      rc =
26800 20 73 71 6c 69 74 65 33 42 74 72 65 65 4c 61 73   sqlite3BtreeLas
26810 74 28 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72  t(pC->uc.pCursor
26820 2c 20 26 72 65 73 29 3b 0a 20 20 20 20 20 20 69  , &res);.      i
26830 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc!=SQLITE_OK
26840 20 29 7b 0a 20 20 20 20 20 20 20 20 67 6f 74 6f   ){.        goto
26850 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
26860 72 6f 72 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  ror;.      }.   
26870 20 20 20 69 66 28 20 72 65 73 20 29 7b 0a 20 20     if( res ){.  
26880 20 20 20 20 20 20 76 20 3d 20 31 3b 20 20 20 2f        v = 1;   /
26890 2a 20 49 4d 50 3a 20 52 2d 36 31 39 31 34 2d 34  * IMP: R-61914-4
268a0 38 30 37 34 20 2a 2f 0a 20 20 20 20 20 20 7d 65  8074 */.      }e
268b0 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 61 73 73  lse{.        ass
268c0 65 72 74 28 20 73 71 6c 69 74 65 33 42 74 72 65  ert( sqlite3Btre
268d0 65 43 75 72 73 6f 72 49 73 56 61 6c 69 64 28 70  eCursorIsValid(p
268e0 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 29 20 29  C->uc.pCursor) )
268f0 3b 0a 20 20 20 20 20 20 20 20 76 20 3d 20 73 71  ;.        v = sq
26900 6c 69 74 65 33 42 74 72 65 65 49 6e 74 65 67 65  lite3BtreeIntege
26910 72 4b 65 79 28 70 43 2d 3e 75 63 2e 70 43 75 72  rKey(pC->uc.pCur
26920 73 6f 72 29 3b 0a 20 20 20 20 20 20 20 20 69 66  sor);.        if
26930 28 20 76 3e 3d 4d 41 58 5f 52 4f 57 49 44 20 29  ( v>=MAX_ROWID )
26940 7b 0a 20 20 20 20 20 20 20 20 20 20 70 43 2d 3e  {.          pC->
26950 75 73 65 52 61 6e 64 6f 6d 52 6f 77 69 64 20 3d  useRandomRowid =
26960 20 31 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c 73   1;.        }els
26970 65 7b 0a 20 20 20 20 20 20 20 20 20 20 76 2b 2b  e{.          v++
26980 3b 20 20 20 2f 2a 20 49 4d 50 3a 20 52 2d 32 39  ;   /* IMP: R-29
26990 35 33 38 2d 33 34 39 38 37 20 2a 2f 0a 20 20 20  538-34987 */.   
269a0 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20       }.      }. 
269b0 20 20 20 7d 0a 0a 23 69 66 6e 64 65 66 20 53 51     }..#ifndef SQ
269c0 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 49 4e  LITE_OMIT_AUTOIN
269d0 43 52 45 4d 45 4e 54 0a 20 20 20 20 69 66 28 20  CREMENT.    if( 
269e0 70 4f 70 2d 3e 70 33 20 29 7b 0a 20 20 20 20 20  pOp->p3 ){.     
269f0 20 2f 2a 20 41 73 73 65 72 74 20 74 68 61 74 20   /* Assert that 
26a00 50 33 20 69 73 20 61 20 76 61 6c 69 64 20 6d 65  P3 is a valid me
26a10 6d 6f 72 79 20 63 65 6c 6c 2e 20 2a 2f 0a 20 20  mory cell. */.  
26a20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d      assert( pOp-
26a30 3e 70 33 3e 30 20 29 3b 0a 20 20 20 20 20 20 69  >p3>0 );.      i
26a40 66 28 20 70 2d 3e 70 46 72 61 6d 65 20 29 7b 0a  f( p->pFrame ){.
26a50 20 20 20 20 20 20 20 20 66 6f 72 28 70 46 72 61          for(pFra
26a60 6d 65 3d 70 2d 3e 70 46 72 61 6d 65 3b 20 70 46  me=p->pFrame; pF
26a70 72 61 6d 65 2d 3e 70 50 61 72 65 6e 74 3b 20 70  rame->pParent; p
26a80 46 72 61 6d 65 3d 70 46 72 61 6d 65 2d 3e 70 50  Frame=pFrame->pP
26a90 61 72 65 6e 74 29 3b 0a 20 20 20 20 20 20 20 20  arent);.        
26aa0 2f 2a 20 41 73 73 65 72 74 20 74 68 61 74 20 50  /* Assert that P
26ab0 33 20 69 73 20 61 20 76 61 6c 69 64 20 6d 65 6d  3 is a valid mem
26ac0 6f 72 79 20 63 65 6c 6c 2e 20 2a 2f 0a 20 20 20  ory cell. */.   
26ad0 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70       assert( pOp
26ae0 2d 3e 70 33 3c 3d 70 46 72 61 6d 65 2d 3e 6e 4d  ->p3<=pFrame->nM
26af0 65 6d 20 29 3b 0a 20 20 20 20 20 20 20 20 70 4d  em );.        pM
26b00 65 6d 20 3d 20 26 70 46 72 61 6d 65 2d 3e 61 4d  em = &pFrame->aM
26b10 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 20  em[pOp->p3];.   
26b20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
26b30 20 20 2f 2a 20 41 73 73 65 72 74 20 74 68 61 74    /* Assert that
26b40 20 50 33 20 69 73 20 61 20 76 61 6c 69 64 20 6d   P3 is a valid m
26b50 65 6d 6f 72 79 20 63 65 6c 6c 2e 20 2a 2f 0a 20  emory cell. */. 
26b60 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70         assert( p
26b70 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d  Op->p3<=(p->nMem
26b80 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29  +1 - p->nCursor)
26b90 20 29 3b 0a 20 20 20 20 20 20 20 20 70 4d 65 6d   );.        pMem
26ba0 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33   = &aMem[pOp->p3
26bb0 5d 3b 0a 20 20 20 20 20 20 20 20 6d 65 6d 41 62  ];.        memAb
26bc0 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70  outToChange(p, p
26bd0 4d 65 6d 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20  Mem);.      }.  
26be0 20 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49      assert( memI
26bf0 73 56 61 6c 69 64 28 70 4d 65 6d 29 20 29 3b 0a  sValid(pMem) );.
26c00 0a 20 20 20 20 20 20 52 45 47 49 53 54 45 52 5f  .      REGISTER_
26c10 54 52 41 43 45 28 70 4f 70 2d 3e 70 33 2c 20 70  TRACE(pOp->p3, p
26c20 4d 65 6d 29 3b 0a 20 20 20 20 20 20 73 71 6c 69  Mem);.      sqli
26c30 74 65 33 56 64 62 65 4d 65 6d 49 6e 74 65 67 65  te3VdbeMemIntege
26c40 72 69 66 79 28 70 4d 65 6d 29 3b 0a 20 20 20 20  rify(pMem);.    
26c50 20 20 61 73 73 65 72 74 28 20 28 70 4d 65 6d 2d    assert( (pMem-
26c60 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74  >flags & MEM_Int
26c70 29 21 3d 30 20 29 3b 20 20 2f 2a 20 6d 65 6d 28  )!=0 );  /* mem(
26c80 50 33 29 20 68 6f 6c 64 73 20 61 6e 20 69 6e 74  P3) holds an int
26c90 65 67 65 72 20 2a 2f 0a 20 20 20 20 20 20 69 66  eger */.      if
26ca0 28 20 70 4d 65 6d 2d 3e 75 2e 69 3d 3d 4d 41 58  ( pMem->u.i==MAX
26cb0 5f 52 4f 57 49 44 20 7c 7c 20 70 43 2d 3e 75 73  _ROWID || pC->us
26cc0 65 52 61 6e 64 6f 6d 52 6f 77 69 64 20 29 7b 0a  eRandomRowid ){.
26cd0 20 20 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c          rc = SQL
26ce0 49 54 45 5f 46 55 4c 4c 3b 20 20 20 2f 2a 20 49  ITE_FULL;   /* I
26cf0 4d 50 3a 20 52 2d 31 37 38 31 37 2d 30 30 36 33  MP: R-17817-0063
26d00 30 20 2a 2f 0a 20 20 20 20 20 20 20 20 67 6f 74  0 */.        got
26d10 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
26d20 72 72 6f 72 3b 0a 20 20 20 20 20 20 7d 0a 20 20  rror;.      }.  
26d30 20 20 20 20 69 66 28 20 76 3c 70 4d 65 6d 2d 3e      if( v<pMem->
26d40 75 2e 69 2b 31 20 29 7b 0a 20 20 20 20 20 20 20  u.i+1 ){.       
26d50 20 76 20 3d 20 70 4d 65 6d 2d 3e 75 2e 69 20 2b   v = pMem->u.i +
26d60 20 31 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20   1;.      }.    
26d70 20 20 70 4d 65 6d 2d 3e 75 2e 69 20 3d 20 76 3b    pMem->u.i = v;
26d80 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20  .    }.#endif.  
26d90 20 20 69 66 28 20 70 43 2d 3e 75 73 65 52 61 6e    if( pC->useRan
26da0 64 6f 6d 52 6f 77 69 64 20 29 7b 0a 20 20 20 20  domRowid ){.    
26db0 20 20 2f 2a 20 49 4d 50 4c 45 4d 45 4e 54 41 54    /* IMPLEMENTAT
26dc0 49 4f 4e 2d 4f 46 3a 20 52 2d 30 37 36 37 37 2d  ION-OF: R-07677-
26dd0 34 31 38 38 31 20 49 66 20 74 68 65 20 6c 61 72  41881 If the lar
26de0 67 65 73 74 20 52 4f 57 49 44 20 69 73 20 65 71  gest ROWID is eq
26df0 75 61 6c 20 74 6f 20 74 68 65 0a 20 20 20 20 20  ual to the.     
26e00 20 2a 2a 20 6c 61 72 67 65 73 74 20 70 6f 73 73   ** largest poss
26e10 69 62 6c 65 20 69 6e 74 65 67 65 72 20 28 39 32  ible integer (92
26e20 32 33 33 37 32 30 33 36 38 35 34 37 37 35 38 30  2337203685477580
26e30 37 29 20 74 68 65 6e 20 74 68 65 20 64 61 74 61  7) then the data
26e40 62 61 73 65 0a 20 20 20 20 20 20 2a 2a 20 65 6e  base.      ** en
26e50 67 69 6e 65 20 73 74 61 72 74 73 20 70 69 63 6b  gine starts pick
26e60 69 6e 67 20 70 6f 73 69 74 69 76 65 20 63 61 6e  ing positive can
26e70 64 69 64 61 74 65 20 52 4f 57 49 44 73 20 61 74  didate ROWIDs at
26e80 20 72 61 6e 64 6f 6d 20 75 6e 74 69 6c 0a 20 20   random until.  
26e90 20 20 20 20 2a 2a 20 69 74 20 66 69 6e 64 73 20      ** it finds 
26ea0 6f 6e 65 20 74 68 61 74 20 69 73 20 6e 6f 74 20  one that is not 
26eb0 70 72 65 76 69 6f 75 73 6c 79 20 75 73 65 64 2e  previously used.
26ec0 20 2a 2f 0a 20 20 20 20 20 20 61 73 73 65 72 74   */.      assert
26ed0 28 20 70 4f 70 2d 3e 70 33 3d 3d 30 20 29 3b 20  ( pOp->p3==0 ); 
26ee0 20 2f 2a 20 57 65 20 63 61 6e 6e 6f 74 20 62 65   /* We cannot be
26ef0 20 69 6e 20 72 61 6e 64 6f 6d 20 72 6f 77 69 64   in random rowid
26f00 20 6d 6f 64 65 20 69 66 20 74 68 69 73 20 69 73   mode if this is
26f10 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
26f20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a                **
26f30 20 61 6e 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e   an AUTOINCREMEN
26f40 54 20 74 61 62 6c 65 2e 20 2a 2f 0a 20 20 20 20  T table. */.    
26f50 20 20 63 6e 74 20 3d 20 30 3b 0a 20 20 20 20 20    cnt = 0;.     
26f60 20 64 6f 7b 0a 20 20 20 20 20 20 20 20 73 71 6c   do{.        sql
26f70 69 74 65 33 5f 72 61 6e 64 6f 6d 6e 65 73 73 28  ite3_randomness(
26f80 73 69 7a 65 6f 66 28 76 29 2c 20 26 76 29 3b 0a  sizeof(v), &v);.
26f90 20 20 20 20 20 20 20 20 76 20 26 3d 20 28 4d 41          v &= (MA
26fa0 58 5f 52 4f 57 49 44 3e 3e 31 29 3b 20 76 2b 2b  X_ROWID>>1); v++
26fb0 3b 20 20 2f 2a 20 45 6e 73 75 72 65 20 74 68 61  ;  /* Ensure tha
26fc0 74 20 76 20 69 73 20 67 72 65 61 74 65 72 20 74  t v is greater t
26fd0 68 61 6e 20 7a 65 72 6f 20 2a 2f 0a 20 20 20 20  han zero */.    
26fe0 20 20 7d 77 68 69 6c 65 28 20 20 28 28 72 63 20    }while(  ((rc 
26ff0 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 4d 6f  = sqlite3BtreeMo
27000 76 65 74 6f 55 6e 70 61 63 6b 65 64 28 70 43 2d  vetoUnpacked(pC-
27010 3e 75 63 2e 70 43 75 72 73 6f 72 2c 20 30 2c 20  >uc.pCursor, 0, 
27020 28 75 36 34 29 76 2c 0a 20 20 20 20 20 20 20 20  (u64)v,.        
27030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27050 20 20 20 20 20 20 20 20 20 30 2c 20 26 72 65 73           0, &res
27060 29 29 3d 3d 53 51 4c 49 54 45 5f 4f 4b 29 0a 20  ))==SQLITE_OK). 
27070 20 20 20 20 20 20 20 20 20 20 20 26 26 20 28 72             && (r
27080 65 73 3d 3d 30 29 0a 20 20 20 20 20 20 20 20 20  es==0).         
27090 20 20 20 26 26 20 28 2b 2b 63 6e 74 3c 31 30 30     && (++cnt<100
270a0 29 29 3b 0a 20 20 20 20 20 20 69 66 28 20 72 63  ));.      if( rc
270b0 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75   ) goto abort_du
270c0 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20  e_to_error;.    
270d0 20 20 69 66 28 20 72 65 73 3d 3d 30 20 29 7b 0a    if( res==0 ){.
270e0 20 20 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c          rc = SQL
270f0 49 54 45 5f 46 55 4c 4c 3b 20 20 20 2f 2a 20 49  ITE_FULL;   /* I
27100 4d 50 3a 20 52 2d 33 38 32 31 39 2d 35 33 30 30  MP: R-38219-5300
27110 32 20 2a 2f 0a 20 20 20 20 20 20 20 20 67 6f 74  2 */.        got
27120 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
27130 72 72 6f 72 3b 0a 20 20 20 20 20 20 7d 0a 20 20  rror;.      }.  
27140 20 20 20 20 61 73 73 65 72 74 28 20 76 3e 30 20      assert( v>0 
27150 29 3b 20 20 2f 2a 20 45 56 3a 20 52 2d 34 30 38  );  /* EV: R-408
27160 31 32 2d 30 33 35 37 30 20 2a 2f 0a 20 20 20 20  12-03570 */.    
27170 7d 0a 20 20 20 20 70 43 2d 3e 64 65 66 65 72 72  }.    pC->deferr
27180 65 64 4d 6f 76 65 74 6f 20 3d 20 30 3b 0a 20 20  edMoveto = 0;.  
27190 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75    pC->cacheStatu
271a0 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b  s = CACHE_STALE;
271b0 0a 20 20 7d 0a 20 20 70 4f 75 74 2d 3e 75 2e 69  .  }.  pOut->u.i
271c0 20 3d 20 76 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d   = v;.  break;.}
271d0 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 6e 73  ../* Opcode: Ins
271e0 65 72 74 20 50 31 20 50 32 20 50 33 20 50 34 20  ert P1 P2 P3 P4 
271f0 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20  P5.** Synopsis: 
27200 69 6e 74 6b 65 79 3d 72 5b 50 33 5d 20 64 61 74  intkey=r[P3] dat
27210 61 3d 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20 57 72  a=r[P2].**.** Wr
27220 69 74 65 20 61 6e 20 65 6e 74 72 79 20 69 6e 74  ite an entry int
27230 6f 20 74 68 65 20 74 61 62 6c 65 20 6f 66 20 63  o the table of c
27240 75 72 73 6f 72 20 50 31 2e 20 20 41 20 6e 65 77  ursor P1.  A new
27250 20 65 6e 74 72 79 20 69 73 0a 2a 2a 20 63 72 65   entry is.** cre
27260 61 74 65 64 20 69 66 20 69 74 20 64 6f 65 73 6e  ated if it doesn
27270 27 74 20 61 6c 72 65 61 64 79 20 65 78 69 73 74  't already exist
27280 20 6f 72 20 74 68 65 20 64 61 74 61 20 66 6f 72   or the data for
27290 20 61 6e 20 65 78 69 73 74 69 6e 67 0a 2a 2a 20   an existing.** 
272a0 65 6e 74 72 79 20 69 73 20 6f 76 65 72 77 72 69  entry is overwri
272b0 74 74 65 6e 2e 20 20 54 68 65 20 64 61 74 61 20  tten.  The data 
272c0 69 73 20 74 68 65 20 76 61 6c 75 65 20 4d 45 4d  is the value MEM
272d0 5f 42 6c 6f 62 20 73 74 6f 72 65 64 20 69 6e 20  _Blob stored in 
272e0 72 65 67 69 73 74 65 72 0a 2a 2a 20 6e 75 6d 62  register.** numb
272f0 65 72 20 50 32 2e 20 54 68 65 20 6b 65 79 20 69  er P2. The key i
27300 73 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69  s stored in regi
27310 73 74 65 72 20 50 33 2e 20 54 68 65 20 6b 65 79  ster P3. The key
27320 20 6d 75 73 74 0a 2a 2a 20 62 65 20 61 20 4d 45   must.** be a ME
27330 4d 5f 49 6e 74 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  M_Int..**.** If 
27340 74 68 65 20 4f 50 46 4c 41 47 5f 4e 43 48 41 4e  the OPFLAG_NCHAN
27350 47 45 20 66 6c 61 67 20 6f 66 20 50 35 20 69 73  GE flag of P5 is
27360 20 73 65 74 2c 20 74 68 65 6e 20 74 68 65 20 72   set, then the r
27370 6f 77 20 63 68 61 6e 67 65 20 63 6f 75 6e 74 20  ow change count 
27380 69 73 0a 2a 2a 20 69 6e 63 72 65 6d 65 6e 74 65  is.** incremente
27390 64 20 28 6f 74 68 65 72 77 69 73 65 20 6e 6f 74  d (otherwise not
273a0 29 2e 20 20 49 66 20 74 68 65 20 4f 50 46 4c 41  ).  If the OPFLA
273b0 47 5f 4c 41 53 54 52 4f 57 49 44 20 66 6c 61 67  G_LASTROWID flag
273c0 20 6f 66 20 50 35 20 69 73 20 73 65 74 2c 0a 2a   of P5 is set,.*
273d0 2a 20 74 68 65 6e 20 72 6f 77 69 64 20 69 73 20  * then rowid is 
273e0 73 74 6f 72 65 64 20 66 6f 72 20 73 75 62 73 65  stored for subse
273f0 71 75 65 6e 74 20 72 65 74 75 72 6e 20 62 79 20  quent return by 
27400 74 68 65 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 6c  the.** sqlite3_l
27410 61 73 74 5f 69 6e 73 65 72 74 5f 72 6f 77 69 64  ast_insert_rowid
27420 28 29 20 66 75 6e 63 74 69 6f 6e 20 28 6f 74 68  () function (oth
27430 65 72 77 69 73 65 20 69 74 20 69 73 20 75 6e 6d  erwise it is unm
27440 6f 64 69 66 69 65 64 29 2e 0a 2a 2a 0a 2a 2a 20  odified)..**.** 
27450 49 66 20 74 68 65 20 4f 50 46 4c 41 47 5f 55 53  If the OPFLAG_US
27460 45 53 45 45 4b 52 45 53 55 4c 54 20 66 6c 61 67  ESEEKRESULT flag
27470 20 6f 66 20 50 35 20 69 73 20 73 65 74 2c 20 74   of P5 is set, t
27480 68 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f  he implementatio
27490 6e 20 6d 69 67 68 74 0a 2a 2a 20 72 75 6e 20 66  n might.** run f
274a0 61 73 74 65 72 20 62 79 20 61 76 6f 69 64 69 6e  aster by avoidin
274b0 67 20 61 6e 20 75 6e 6e 65 63 65 73 73 61 72 79  g an unnecessary
274c0 20 73 65 65 6b 20 6f 6e 20 63 75 72 73 6f 72 20   seek on cursor 
274d0 50 31 2e 20 20 48 6f 77 65 76 65 72 2c 0a 2a 2a  P1.  However,.**
274e0 20 74 68 65 20 4f 50 46 4c 41 47 5f 55 53 45 53   the OPFLAG_USES
274f0 45 45 4b 52 45 53 55 4c 54 20 66 6c 61 67 20 6d  EEKRESULT flag m
27500 75 73 74 20 6f 6e 6c 79 20 62 65 20 73 65 74 20  ust only be set 
27510 69 66 20 74 68 65 72 65 20 68 61 76 65 20 62 65  if there have be
27520 65 6e 20 6e 6f 20 70 72 69 6f 72 0a 2a 2a 20 73  en no prior.** s
27530 65 65 6b 73 20 6f 6e 20 74 68 65 20 63 75 72 73  eeks on the curs
27540 6f 72 20 6f 72 20 69 66 20 74 68 65 20 6d 6f 73  or or if the mos
27550 74 20 72 65 63 65 6e 74 20 73 65 65 6b 20 75 73  t recent seek us
27560 65 64 20 61 20 6b 65 79 20 65 71 75 61 6c 20 74  ed a key equal t
27570 6f 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74  o P3..**.** If t
27580 68 65 20 4f 50 46 4c 41 47 5f 49 53 55 50 44 41  he OPFLAG_ISUPDA
27590 54 45 20 66 6c 61 67 20 69 73 20 73 65 74 2c 20  TE flag is set, 
275a0 74 68 65 6e 20 74 68 69 73 20 6f 70 63 6f 64 65  then this opcode
275b0 20 69 73 20 70 61 72 74 20 6f 66 20 61 6e 0a 2a   is part of an.*
275c0 2a 20 55 50 44 41 54 45 20 6f 70 65 72 61 74 69  * UPDATE operati
275d0 6f 6e 2e 20 20 4f 74 68 65 72 77 69 73 65 20 28  on.  Otherwise (
275e0 69 66 20 74 68 65 20 66 6c 61 67 20 69 73 20 63  if the flag is c
275f0 6c 65 61 72 29 20 74 68 65 6e 20 74 68 69 73 20  lear) then this 
27600 6f 70 63 6f 64 65 0a 2a 2a 20 69 73 20 70 61 72  opcode.** is par
27610 74 20 6f 66 20 61 6e 20 49 4e 53 45 52 54 20 6f  t of an INSERT o
27620 70 65 72 61 74 69 6f 6e 2e 20 20 54 68 65 20 64  peration.  The d
27630 69 66 66 65 72 65 6e 63 65 20 69 73 20 6f 6e 6c  ifference is onl
27640 79 20 69 6d 70 6f 72 74 61 6e 74 20 74 6f 0a 2a  y important to.*
27650 2a 20 74 68 65 20 75 70 64 61 74 65 20 68 6f 6f  * the update hoo
27660 6b 2e 0a 2a 2a 0a 2a 2a 20 50 61 72 61 6d 65 74  k..**.** Paramet
27670 65 72 20 50 34 20 6d 61 79 20 70 6f 69 6e 74 20  er P4 may point 
27680 74 6f 20 61 20 54 61 62 6c 65 20 73 74 72 75 63  to a Table struc
27690 74 75 72 65 2c 20 6f 72 20 6d 61 79 20 62 65 20  ture, or may be 
276a0 4e 55 4c 4c 2e 20 49 66 20 69 74 20 69 73 20 0a  NULL. If it is .
276b0 2a 2a 20 6e 6f 74 20 4e 55 4c 4c 2c 20 74 68 65  ** not NULL, the
276c0 6e 20 74 68 65 20 75 70 64 61 74 65 2d 68 6f 6f  n the update-hoo
276d0 6b 20 28 73 71 6c 69 74 65 33 2e 78 55 70 64 61  k (sqlite3.xUpda
276e0 74 65 43 61 6c 6c 62 61 63 6b 29 20 69 73 20 69  teCallback) is i
276f0 6e 76 6f 6b 65 64 20 0a 2a 2a 20 66 6f 6c 6c 6f  nvoked .** follo
27700 77 69 6e 67 20 61 20 73 75 63 63 65 73 73 66 75  wing a successfu
27710 6c 20 69 6e 73 65 72 74 2e 0a 2a 2a 0a 2a 2a 20  l insert..**.** 
27720 28 57 41 52 4e 49 4e 47 2f 54 4f 44 4f 3a 20 49  (WARNING/TODO: I
27730 66 20 50 31 20 69 73 20 61 20 70 73 65 75 64 6f  f P1 is a pseudo
27740 2d 63 75 72 73 6f 72 20 61 6e 64 20 50 32 20 69  -cursor and P2 i
27750 73 20 64 79 6e 61 6d 69 63 61 6c 6c 79 0a 2a 2a  s dynamically.**
27760 20 61 6c 6c 6f 63 61 74 65 64 2c 20 74 68 65 6e   allocated, then
27770 20 6f 77 6e 65 72 73 68 69 70 20 6f 66 20 50 32   ownership of P2
27780 20 69 73 20 74 72 61 6e 73 66 65 72 72 65 64 20   is transferred 
27790 74 6f 20 74 68 65 20 70 73 65 75 64 6f 2d 63 75  to the pseudo-cu
277a0 72 73 6f 72 0a 2a 2a 20 61 6e 64 20 72 65 67 69  rsor.** and regi
277b0 73 74 65 72 20 50 32 20 62 65 63 6f 6d 65 73 20  ster P2 becomes 
277c0 65 70 68 65 6d 65 72 61 6c 2e 20 20 49 66 20 74  ephemeral.  If t
277d0 68 65 20 63 75 72 73 6f 72 20 69 73 20 63 68 61  he cursor is cha
277e0 6e 67 65 64 2c 20 74 68 65 0a 2a 2a 20 76 61 6c  nged, the.** val
277f0 75 65 20 6f 66 20 72 65 67 69 73 74 65 72 20 50  ue of register P
27800 32 20 77 69 6c 6c 20 74 68 65 6e 20 63 68 61 6e  2 will then chan
27810 67 65 2e 20 20 4d 61 6b 65 20 73 75 72 65 20 74  ge.  Make sure t
27820 68 69 73 20 64 6f 65 73 20 6e 6f 74 0a 2a 2a 20  his does not.** 
27830 63 61 75 73 65 20 61 6e 79 20 70 72 6f 62 6c 65  cause any proble
27840 6d 73 2e 29 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20  ms.).**.** This 
27850 69 6e 73 74 72 75 63 74 69 6f 6e 20 6f 6e 6c 79  instruction only
27860 20 77 6f 72 6b 73 20 6f 6e 20 74 61 62 6c 65 73   works on tables
27870 2e 20 20 54 68 65 20 65 71 75 69 76 61 6c 65 6e  .  The equivalen
27880 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 0a 2a 2a  t instruction.**
27890 20 66 6f 72 20 69 6e 64 69 63 65 73 20 69 73 20   for indices is 
278a0 4f 50 5f 49 64 78 49 6e 73 65 72 74 2e 0a 2a 2f  OP_IdxInsert..*/
278b0 0a 63 61 73 65 20 4f 50 5f 49 6e 73 65 72 74 3a  .case OP_Insert:
278c0 20 7b 0a 20 20 4d 65 6d 20 2a 70 44 61 74 61 3b   {.  Mem *pData;
278d0 20 20 20 20 20 20 20 2f 2a 20 4d 45 4d 20 63 65         /* MEM ce
278e0 6c 6c 20 68 6f 6c 64 69 6e 67 20 64 61 74 61 20  ll holding data 
278f0 66 6f 72 20 74 68 65 20 72 65 63 6f 72 64 20 74  for the record t
27900 6f 20 62 65 20 69 6e 73 65 72 74 65 64 20 2a 2f  o be inserted */
27910 0a 20 20 4d 65 6d 20 2a 70 4b 65 79 3b 20 20 20  .  Mem *pKey;   
27920 20 20 20 20 20 2f 2a 20 4d 45 4d 20 63 65 6c 6c       /* MEM cell
27930 20 68 6f 6c 64 69 6e 67 20 6b 65 79 20 20 66 6f   holding key  fo
27940 72 20 74 68 65 20 72 65 63 6f 72 64 20 2a 2f 0a  r the record */.
27950 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43    VdbeCursor *pC
27960 3b 20 20 20 2f 2a 20 43 75 72 73 6f 72 20 74 6f  ;   /* Cursor to
27970 20 74 61 62 6c 65 20 69 6e 74 6f 20 77 68 69 63   table into whic
27980 68 20 69 6e 73 65 72 74 20 69 73 20 77 72 69 74  h insert is writ
27990 74 65 6e 20 2a 2f 0a 20 20 69 6e 74 20 73 65 65  ten */.  int see
279a0 6b 52 65 73 75 6c 74 3b 20 20 20 2f 2a 20 52 65  kResult;   /* Re
279b0 73 75 6c 74 20 6f 66 20 70 72 69 6f 72 20 73 65  sult of prior se
279c0 65 6b 20 6f 72 20 30 20 69 66 20 6e 6f 20 55 53  ek or 0 if no US
279d0 45 53 45 45 4b 52 45 53 55 4c 54 20 66 6c 61 67  ESEEKRESULT flag
279e0 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72   */.  const char
279f0 20 2a 7a 44 62 3b 20 20 2f 2a 20 64 61 74 61 62   *zDb;  /* datab
27a00 61 73 65 20 6e 61 6d 65 20 2d 20 75 73 65 64 20  ase name - used 
27a10 62 79 20 74 68 65 20 75 70 64 61 74 65 20 68 6f  by the update ho
27a20 6f 6b 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70  ok */.  Table *p
27a30 54 61 62 3b 20 20 20 20 20 20 2f 2a 20 54 61 62  Tab;      /* Tab
27a40 6c 65 20 73 74 72 75 63 74 75 72 65 20 2d 20 75  le structure - u
27a50 73 65 64 20 62 79 20 75 70 64 61 74 65 20 61 6e  sed by update an
27a60 64 20 70 72 65 2d 75 70 64 61 74 65 20 68 6f 6f  d pre-update hoo
27a70 6b 73 20 2a 2f 0a 20 20 42 74 72 65 65 50 61 79  ks */.  BtreePay
27a80 6c 6f 61 64 20 78 3b 20 20 20 2f 2a 20 50 61 79  load x;   /* Pay
27a90 6c 6f 61 64 20 74 6f 20 62 65 20 69 6e 73 65 72  load to be inser
27aa0 74 65 64 20 2a 2f 0a 0a 20 20 70 44 61 74 61 20  ted */..  pData 
27ab0 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d  = &aMem[pOp->p2]
27ac0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
27ad0 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70  >p1>=0 && pOp->p
27ae0 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a  1<p->nCursor );.
27af0 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56    assert( memIsV
27b00 61 6c 69 64 28 70 44 61 74 61 29 20 29 3b 0a 20  alid(pData) );. 
27b10 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70   pC = p->apCsr[p
27b20 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72  Op->p1];.  asser
27b30 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 61 73  t( pC!=0 );.  as
27b40 73 65 72 74 28 20 70 43 2d 3e 65 43 75 72 54 79  sert( pC->eCurTy
27b50 70 65 3d 3d 43 55 52 54 59 50 45 5f 42 54 52 45  pe==CURTYPE_BTRE
27b60 45 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  E );.  assert( p
27b70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 21 3d 30  C->uc.pCursor!=0
27b80 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70   );.  assert( (p
27b90 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f  Op->p5 & OPFLAG_
27ba0 49 53 4e 4f 4f 50 29 20 7c 7c 20 70 43 2d 3e 69  ISNOOP) || pC->i
27bb0 73 54 61 62 6c 65 20 29 3b 0a 20 20 61 73 73 65  sTable );.  asse
27bc0 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d  rt( pOp->p4type=
27bd0 3d 50 34 5f 54 41 42 4c 45 20 7c 7c 20 70 4f 70  =P4_TABLE || pOp
27be0 2d 3e 70 34 74 79 70 65 3e 3d 50 34 5f 53 54 41  ->p4type>=P4_STA
27bf0 54 49 43 20 29 3b 0a 20 20 52 45 47 49 53 54 45  TIC );.  REGISTE
27c00 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 32 2c  R_TRACE(pOp->p2,
27c10 20 70 44 61 74 61 29 3b 0a 20 20 73 71 6c 69 74   pData);.  sqlit
27c20 65 33 56 64 62 65 49 6e 63 72 57 72 69 74 65 43  e3VdbeIncrWriteC
27c30 6f 75 6e 74 65 72 28 70 2c 20 70 43 29 3b 0a 0a  ounter(p, pC);..
27c40 20 20 70 4b 65 79 20 3d 20 26 61 4d 65 6d 5b 70    pKey = &aMem[p
27c50 4f 70 2d 3e 70 33 5d 3b 0a 20 20 61 73 73 65 72  Op->p3];.  asser
27c60 74 28 20 70 4b 65 79 2d 3e 66 6c 61 67 73 20 26  t( pKey->flags &
27c70 20 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 61 73   MEM_Int );.  as
27c80 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64  sert( memIsValid
27c90 28 70 4b 65 79 29 20 29 3b 0a 20 20 52 45 47 49  (pKey) );.  REGI
27ca0 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e  STER_TRACE(pOp->
27cb0 70 33 2c 20 70 4b 65 79 29 3b 0a 20 20 78 2e 6e  p3, pKey);.  x.n
27cc0 4b 65 79 20 3d 20 70 4b 65 79 2d 3e 75 2e 69 3b  Key = pKey->u.i;
27cd0 0a 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 34 74  ..  if( pOp->p4t
27ce0 79 70 65 3d 3d 50 34 5f 54 41 42 4c 45 20 26 26  ype==P4_TABLE &&
27cf0 20 48 41 53 5f 55 50 44 41 54 45 5f 48 4f 4f 4b   HAS_UPDATE_HOOK
27d00 28 64 62 29 20 29 7b 0a 20 20 20 20 61 73 73 65  (db) ){.    asse
27d10 72 74 28 20 70 43 2d 3e 69 44 62 3e 3d 30 20 29  rt( pC->iDb>=0 )
27d20 3b 0a 20 20 20 20 7a 44 62 20 3d 20 64 62 2d 3e  ;.    zDb = db->
27d30 61 44 62 5b 70 43 2d 3e 69 44 62 5d 2e 7a 44 62  aDb[pC->iDb].zDb
27d40 53 4e 61 6d 65 3b 0a 20 20 20 20 70 54 61 62 20  SName;.    pTab 
27d50 3d 20 70 4f 70 2d 3e 70 34 2e 70 54 61 62 3b 0a  = pOp->p4.pTab;.
27d60 20 20 20 20 61 73 73 65 72 74 28 20 28 70 4f 70      assert( (pOp
27d70 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 49 53  ->p5 & OPFLAG_IS
27d80 4e 4f 4f 50 29 20 7c 7c 20 48 61 73 52 6f 77 69  NOOP) || HasRowi
27d90 64 28 70 54 61 62 29 20 29 3b 0a 20 20 7d 65 6c  d(pTab) );.  }el
27da0 73 65 7b 0a 20 20 20 20 70 54 61 62 20 3d 20 30  se{.    pTab = 0
27db0 3b 0a 20 20 20 20 7a 44 62 20 3d 20 30 3b 20 20  ;.    zDb = 0;  
27dc0 2f 2a 20 4e 6f 74 20 6e 65 65 64 65 64 2e 20 20  /* Not needed.  
27dd0 53 69 6c 65 6e 63 65 20 61 20 63 6f 6d 70 69 6c  Silence a compil
27de0 65 72 20 77 61 72 6e 69 6e 67 2e 20 2a 2f 0a 20  er warning. */. 
27df0 20 7d 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54   }..#ifdef SQLIT
27e00 45 5f 45 4e 41 42 4c 45 5f 50 52 45 55 50 44 41  E_ENABLE_PREUPDA
27e10 54 45 5f 48 4f 4f 4b 0a 20 20 2f 2a 20 49 6e 76  TE_HOOK.  /* Inv
27e20 6f 6b 65 20 74 68 65 20 70 72 65 2d 75 70 64 61  oke the pre-upda
27e30 74 65 20 68 6f 6f 6b 2c 20 69 66 20 61 6e 79 20  te hook, if any 
27e40 2a 2f 0a 20 20 69 66 28 20 70 54 61 62 20 29 7b  */.  if( pTab ){
27e50 0a 20 20 20 20 69 66 28 20 64 62 2d 3e 78 50 72  .    if( db->xPr
27e60 65 55 70 64 61 74 65 43 61 6c 6c 62 61 63 6b 20  eUpdateCallback 
27e70 26 26 20 21 28 70 4f 70 2d 3e 70 35 20 26 20 4f  && !(pOp->p5 & O
27e80 50 46 4c 41 47 5f 49 53 55 50 44 41 54 45 29 20  PFLAG_ISUPDATE) 
27e90 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  ){.      sqlite3
27ea0 56 64 62 65 50 72 65 55 70 64 61 74 65 48 6f 6f  VdbePreUpdateHoo
27eb0 6b 28 70 2c 20 70 43 2c 20 53 51 4c 49 54 45 5f  k(p, pC, SQLITE_
27ec0 49 4e 53 45 52 54 2c 20 7a 44 62 2c 20 70 54 61  INSERT, zDb, pTa
27ed0 62 2c 20 78 2e 6e 4b 65 79 2c 70 4f 70 2d 3e 70  b, x.nKey,pOp->p
27ee0 32 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66  2);.    }.    if
27ef0 28 20 64 62 2d 3e 78 55 70 64 61 74 65 43 61 6c  ( db->xUpdateCal
27f00 6c 62 61 63 6b 3d 3d 30 20 7c 7c 20 70 54 61 62  lback==0 || pTab
27f10 2d 3e 61 43 6f 6c 3d 3d 30 20 29 7b 0a 20 20 20  ->aCol==0 ){.   
27f20 20 20 20 2f 2a 20 50 72 65 76 65 6e 74 20 70 6f     /* Prevent po
27f30 73 74 2d 75 70 64 61 74 65 20 68 6f 6f 6b 20 66  st-update hook f
27f40 72 6f 6d 20 72 75 6e 6e 69 6e 67 20 69 6e 20 63  rom running in c
27f50 61 73 65 73 20 77 68 65 6e 20 69 74 20 73 68 6f  ases when it sho
27f60 75 6c 64 20 6e 6f 74 20 2a 2f 0a 20 20 20 20 20  uld not */.     
27f70 20 70 54 61 62 20 3d 20 30 3b 0a 20 20 20 20 7d   pTab = 0;.    }
27f80 0a 20 20 7d 0a 20 20 69 66 28 20 70 4f 70 2d 3e  .  }.  if( pOp->
27f90 70 35 20 26 20 4f 50 46 4c 41 47 5f 49 53 4e 4f  p5 & OPFLAG_ISNO
27fa0 4f 50 20 29 20 62 72 65 61 6b 3b 0a 23 65 6e 64  OP ) break;.#end
27fb0 69 66 0a 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70  if..  if( pOp->p
27fc0 35 20 26 20 4f 50 46 4c 41 47 5f 4e 43 48 41 4e  5 & OPFLAG_NCHAN
27fd0 47 45 20 29 20 70 2d 3e 6e 43 68 61 6e 67 65 2b  GE ) p->nChange+
27fe0 2b 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 35  +;.  if( pOp->p5
27ff0 20 26 20 4f 50 46 4c 41 47 5f 4c 41 53 54 52 4f   & OPFLAG_LASTRO
28000 57 49 44 20 29 20 64 62 2d 3e 6c 61 73 74 52 6f  WID ) db->lastRo
28010 77 69 64 20 3d 20 78 2e 6e 4b 65 79 3b 0a 20 20  wid = x.nKey;.  
28020 61 73 73 65 72 74 28 20 70 44 61 74 61 2d 3e 66  assert( pData->f
28030 6c 61 67 73 20 26 20 28 4d 45 4d 5f 42 6c 6f 62  lags & (MEM_Blob
28040 7c 4d 45 4d 5f 53 74 72 29 20 29 3b 0a 20 20 78  |MEM_Str) );.  x
28050 2e 70 44 61 74 61 20 3d 20 70 44 61 74 61 2d 3e  .pData = pData->
28060 7a 3b 0a 20 20 78 2e 6e 44 61 74 61 20 3d 20 70  z;.  x.nData = p
28070 44 61 74 61 2d 3e 6e 3b 0a 20 20 73 65 65 6b 52  Data->n;.  seekR
28080 65 73 75 6c 74 20 3d 20 28 28 70 4f 70 2d 3e 70  esult = ((pOp->p
28090 35 20 26 20 4f 50 46 4c 41 47 5f 55 53 45 53 45  5 & OPFLAG_USESE
280a0 45 4b 52 45 53 55 4c 54 29 20 3f 20 70 43 2d 3e  EKRESULT) ? pC->
280b0 73 65 65 6b 52 65 73 75 6c 74 20 3a 20 30 29 3b  seekResult : 0);
280c0 0a 20 20 69 66 28 20 70 44 61 74 61 2d 3e 66 6c  .  if( pData->fl
280d0 61 67 73 20 26 20 4d 45 4d 5f 5a 65 72 6f 20 29  ags & MEM_Zero )
280e0 7b 0a 20 20 20 20 78 2e 6e 5a 65 72 6f 20 3d 20  {.    x.nZero = 
280f0 70 44 61 74 61 2d 3e 75 2e 6e 5a 65 72 6f 3b 0a  pData->u.nZero;.
28100 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 78 2e 6e    }else{.    x.n
28110 5a 65 72 6f 20 3d 20 30 3b 0a 20 20 7d 0a 20 20  Zero = 0;.  }.  
28120 78 2e 70 4b 65 79 20 3d 20 30 3b 0a 20 20 72 63  x.pKey = 0;.  rc
28130 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 49   = sqlite3BtreeI
28140 6e 73 65 72 74 28 70 43 2d 3e 75 63 2e 70 43 75  nsert(pC->uc.pCu
28150 72 73 6f 72 2c 20 26 78 2c 0a 20 20 20 20 20 20  rsor, &x,.      
28160 28 70 4f 70 2d 3e 70 35 20 26 20 28 4f 50 46 4c  (pOp->p5 & (OPFL
28170 41 47 5f 41 50 50 45 4e 44 7c 4f 50 46 4c 41 47  AG_APPEND|OPFLAG
28180 5f 53 41 56 45 50 4f 53 49 54 49 4f 4e 29 29 2c  _SAVEPOSITION)),
28190 20 73 65 65 6b 52 65 73 75 6c 74 0a 20 20 29 3b   seekResult.  );
281a0 0a 20 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d  .  pC->deferredM
281b0 6f 76 65 74 6f 20 3d 20 30 3b 0a 20 20 70 43 2d  oveto = 0;.  pC-
281c0 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d 20 43  >cacheStatus = C
281d0 41 43 48 45 5f 53 54 41 4c 45 3b 0a 0a 20 20 2f  ACHE_STALE;..  /
281e0 2a 20 49 6e 76 6f 6b 65 20 74 68 65 20 75 70 64  * Invoke the upd
281f0 61 74 65 2d 68 6f 6f 6b 20 69 66 20 72 65 71 75  ate-hook if requ
28200 69 72 65 64 2e 20 2a 2f 0a 20 20 69 66 28 20 72  ired. */.  if( r
28210 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64  c ) goto abort_d
28220 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 69  ue_to_error;.  i
28230 66 28 20 70 54 61 62 20 29 7b 0a 20 20 20 20 61  f( pTab ){.    a
28240 73 73 65 72 74 28 20 64 62 2d 3e 78 55 70 64 61  ssert( db->xUpda
28250 74 65 43 61 6c 6c 62 61 63 6b 21 3d 30 20 29 3b  teCallback!=0 );
28260 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 54 61  .    assert( pTa
28270 62 2d 3e 61 43 6f 6c 21 3d 30 20 29 3b 0a 20 20  b->aCol!=0 );.  
28280 20 20 64 62 2d 3e 78 55 70 64 61 74 65 43 61 6c    db->xUpdateCal
28290 6c 62 61 63 6b 28 64 62 2d 3e 70 55 70 64 61 74  lback(db->pUpdat
282a0 65 41 72 67 2c 0a 20 20 20 20 20 20 20 20 20 20  eArg,.          
282b0 20 28 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c   (pOp->p5 & OPFL
282c0 41 47 5f 49 53 55 50 44 41 54 45 29 20 3f 20 53  AG_ISUPDATE) ? S
282d0 51 4c 49 54 45 5f 55 50 44 41 54 45 20 3a 20 53  QLITE_UPDATE : S
282e0 51 4c 49 54 45 5f 49 4e 53 45 52 54 2c 0a 20 20  QLITE_INSERT,.  
282f0 20 20 20 20 20 20 20 20 20 7a 44 62 2c 20 70 54           zDb, pT
28300 61 62 2d 3e 7a 4e 61 6d 65 2c 20 78 2e 6e 4b 65  ab->zName, x.nKe
28310 79 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  y);.  }.  break;
28320 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 44  .}../* Opcode: D
28330 65 6c 65 74 65 20 50 31 20 50 32 20 50 33 20 50  elete P1 P2 P3 P
28340 34 20 50 35 0a 2a 2a 0a 2a 2a 20 44 65 6c 65 74  4 P5.**.** Delet
28350 65 20 74 68 65 20 72 65 63 6f 72 64 20 61 74 20  e the record at 
28360 77 68 69 63 68 20 74 68 65 20 50 31 20 63 75 72  which the P1 cur
28370 73 6f 72 20 69 73 20 63 75 72 72 65 6e 74 6c 79  sor is currently
28380 20 70 6f 69 6e 74 69 6e 67 2e 0a 2a 2a 0a 2a 2a   pointing..**.**
28390 20 49 66 20 74 68 65 20 4f 50 46 4c 41 47 5f 53   If the OPFLAG_S
283a0 41 56 45 50 4f 53 49 54 49 4f 4e 20 62 69 74 20  AVEPOSITION bit 
283b0 6f 66 20 74 68 65 20 50 35 20 70 61 72 61 6d 65  of the P5 parame
283c0 74 65 72 20 69 73 20 73 65 74 2c 20 74 68 65 6e  ter is set, then
283d0 0a 2a 2a 20 74 68 65 20 63 75 72 73 6f 72 20 77  .** the cursor w
283e0 69 6c 6c 20 62 65 20 6c 65 66 74 20 70 6f 69 6e  ill be left poin
283f0 74 69 6e 67 20 61 74 20 20 65 69 74 68 65 72 20  ting at  either 
28400 74 68 65 20 6e 65 78 74 20 6f 72 20 74 68 65 20  the next or the 
28410 70 72 65 76 69 6f 75 73 0a 2a 2a 20 72 65 63 6f  previous.** reco
28420 72 64 20 69 6e 20 74 68 65 20 74 61 62 6c 65 2e  rd in the table.
28430 20 49 66 20 69 74 20 69 73 20 6c 65 66 74 20 70   If it is left p
28440 6f 69 6e 74 69 6e 67 20 61 74 20 74 68 65 20 6e  ointing at the n
28450 65 78 74 20 72 65 63 6f 72 64 2c 20 74 68 65 6e  ext record, then
28460 0a 2a 2a 20 74 68 65 20 6e 65 78 74 20 4e 65 78  .** the next Nex
28470 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 77 69  t instruction wi
28480 6c 6c 20 62 65 20 61 20 6e 6f 2d 6f 70 2e 20 41  ll be a no-op. A
28490 73 20 61 20 72 65 73 75 6c 74 2c 20 69 6e 20 74  s a result, in t
284a0 68 69 73 20 63 61 73 65 0a 2a 2a 20 69 74 20 69  his case.** it i
284b0 73 20 6f 6b 20 74 6f 20 64 65 6c 65 74 65 20 61  s ok to delete a
284c0 20 72 65 63 6f 72 64 20 66 72 6f 6d 20 77 69 74   record from wit
284d0 68 69 6e 20 61 20 4e 65 78 74 20 6c 6f 6f 70 2e  hin a Next loop.
284e0 20 49 66 20 0a 2a 2a 20 4f 50 46 4c 41 47 5f 53   If .** OPFLAG_S
284f0 41 56 45 50 4f 53 49 54 49 4f 4e 20 62 69 74 20  AVEPOSITION bit 
28500 6f 66 20 50 35 20 69 73 20 63 6c 65 61 72 2c 20  of P5 is clear, 
28510 74 68 65 6e 20 74 68 65 20 63 75 72 73 6f 72 20  then the cursor 
28520 77 69 6c 6c 20 62 65 0a 2a 2a 20 6c 65 66 74 20  will be.** left 
28530 69 6e 20 61 6e 20 75 6e 64 65 66 69 6e 65 64 20  in an undefined 
28540 73 74 61 74 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  state..**.** If 
28550 74 68 65 20 4f 50 46 4c 41 47 5f 41 55 58 44 45  the OPFLAG_AUXDE
28560 4c 45 54 45 20 62 69 74 20 69 73 20 73 65 74 20  LETE bit is set 
28570 6f 6e 20 50 35 2c 20 74 68 61 74 20 69 6e 64 69  on P5, that indi
28580 63 61 74 65 73 20 74 68 61 74 20 74 68 69 73 0a  cates that this.
28590 2a 2a 20 64 65 6c 65 74 65 20 6f 6e 65 20 6f 66  ** delete one of
285a0 20 73 65 76 65 72 61 6c 20 61 73 73 6f 63 69 61   several associa
285b0 74 65 64 20 77 69 74 68 20 64 65 6c 65 74 69 6e  ted with deletin
285c0 67 20 61 20 74 61 62 6c 65 20 72 6f 77 20 61 6e  g a table row an
285d0 64 20 61 6c 6c 20 69 74 73 0a 2a 2a 20 61 73 73  d all its.** ass
285e0 6f 63 69 61 74 65 64 20 69 6e 64 65 78 20 65 6e  ociated index en
285f0 74 72 69 65 73 2e 20 20 45 78 61 63 74 6c 79 20  tries.  Exactly 
28600 6f 6e 65 20 6f 66 20 74 68 6f 73 65 20 64 65 6c  one of those del
28610 65 74 65 73 20 69 73 20 74 68 65 20 22 70 72 69  etes is the "pri
28620 6d 61 72 79 22 0a 2a 2a 20 64 65 6c 65 74 65 2e  mary".** delete.
28630 20 20 54 68 65 20 6f 74 68 65 72 73 20 61 72 65    The others are
28640 20 61 6c 6c 20 6f 6e 20 4f 50 46 4c 41 47 5f 46   all on OPFLAG_F
28650 4f 52 44 45 4c 45 54 45 20 63 75 72 73 6f 72 73  ORDELETE cursors
28660 20 6f 72 20 65 6c 73 65 20 61 72 65 0a 2a 2a 20   or else are.** 
28670 6d 61 72 6b 65 64 20 77 69 74 68 20 74 68 65 20  marked with the 
28680 41 55 58 44 45 4c 45 54 45 20 66 6c 61 67 2e 0a  AUXDELETE flag..
28690 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 4f 50 46  **.** If the OPF
286a0 4c 41 47 5f 4e 43 48 41 4e 47 45 20 66 6c 61 67  LAG_NCHANGE flag
286b0 20 6f 66 20 50 32 20 28 4e 42 3a 20 50 32 20 6e   of P2 (NB: P2 n
286c0 6f 74 20 50 35 29 20 69 73 20 73 65 74 2c 20 74  ot P5) is set, t
286d0 68 65 6e 20 74 68 65 20 72 6f 77 0a 2a 2a 20 63  hen the row.** c
286e0 68 61 6e 67 65 20 63 6f 75 6e 74 20 69 73 20 69  hange count is i
286f0 6e 63 72 65 6d 65 6e 74 65 64 20 28 6f 74 68 65  ncremented (othe
28700 72 77 69 73 65 20 6e 6f 74 29 2e 0a 2a 2a 0a 2a  rwise not)..**.*
28710 2a 20 50 31 20 6d 75 73 74 20 6e 6f 74 20 62 65  * P1 must not be
28720 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 2e 20 20   pseudo-table.  
28730 49 74 20 68 61 73 20 74 6f 20 62 65 20 61 20 72  It has to be a r
28740 65 61 6c 20 74 61 62 6c 65 20 77 69 74 68 0a 2a  eal table with.*
28750 2a 20 6d 75 6c 74 69 70 6c 65 20 72 6f 77 73 2e  * multiple rows.
28760 0a 2a 2a 0a 2a 2a 20 49 66 20 50 34 20 69 73 20  .**.** If P4 is 
28770 6e 6f 74 20 4e 55 4c 4c 20 74 68 65 6e 20 69 74  not NULL then it
28780 20 70 6f 69 6e 74 73 20 74 6f 20 61 20 54 61 62   points to a Tab
28790 6c 65 20 6f 62 6a 65 63 74 2e 20 49 6e 20 74 68  le object. In th
287a0 69 73 20 63 61 73 65 20 65 69 74 68 65 72 20 0a  is case either .
287b0 2a 2a 20 74 68 65 20 75 70 64 61 74 65 20 6f 72  ** the update or
287c0 20 70 72 65 2d 75 70 64 61 74 65 20 68 6f 6f 6b   pre-update hook
287d0 2c 20 6f 72 20 62 6f 74 68 2c 20 6d 61 79 20 62  , or both, may b
287e0 65 20 69 6e 76 6f 6b 65 64 2e 20 54 68 65 20 50  e invoked. The P
287f0 31 20 63 75 72 73 6f 72 20 6d 75 73 74 0a 2a 2a  1 cursor must.**
28800 20 68 61 76 65 20 62 65 65 6e 20 70 6f 73 69 74   have been posit
28810 69 6f 6e 65 64 20 75 73 69 6e 67 20 4f 50 5f 4e  ioned using OP_N
28820 6f 74 46 6f 75 6e 64 20 70 72 69 6f 72 20 74 6f  otFound prior to
28830 20 69 6e 76 6f 6b 69 6e 67 20 74 68 69 73 20 6f   invoking this o
28840 70 63 6f 64 65 20 69 6e 20 0a 2a 2a 20 74 68 69  pcode in .** thi
28850 73 20 63 61 73 65 2e 20 53 70 65 63 69 66 69 63  s case. Specific
28860 61 6c 6c 79 2c 20 69 66 20 6f 6e 65 20 69 73 20  ally, if one is 
28870 63 6f 6e 66 69 67 75 72 65 64 2c 20 74 68 65 20  configured, the 
28880 70 72 65 2d 75 70 64 61 74 65 20 68 6f 6f 6b 20  pre-update hook 
28890 69 73 20 0a 2a 2a 20 69 6e 76 6f 6b 65 64 20 69  is .** invoked i
288a0 66 20 50 34 20 69 73 20 6e 6f 74 20 4e 55 4c 4c  f P4 is not NULL
288b0 2e 20 54 68 65 20 75 70 64 61 74 65 2d 68 6f 6f  . The update-hoo
288c0 6b 20 69 73 20 69 6e 76 6f 6b 65 64 20 69 66 20  k is invoked if 
288d0 6f 6e 65 20 69 73 20 63 6f 6e 66 69 67 75 72 65  one is configure
288e0 64 2c 20 0a 2a 2a 20 50 34 20 69 73 20 6e 6f 74  d, .** P4 is not
288f0 20 4e 55 4c 4c 2c 20 61 6e 64 20 74 68 65 20 4f   NULL, and the O
28900 50 46 4c 41 47 5f 4e 43 48 41 4e 47 45 20 66 6c  PFLAG_NCHANGE fl
28910 61 67 20 69 73 20 73 65 74 20 69 6e 20 50 32 2e  ag is set in P2.
28920 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 4f 50  .**.** If the OP
28930 46 4c 41 47 5f 49 53 55 50 44 41 54 45 20 66 6c  FLAG_ISUPDATE fl
28940 61 67 20 69 73 20 73 65 74 20 69 6e 20 50 32 2c  ag is set in P2,
28950 20 74 68 65 6e 20 50 33 20 63 6f 6e 74 61 69 6e   then P3 contain
28960 73 20 74 68 65 20 61 64 64 72 65 73 73 0a 2a 2a  s the address.**
28970 20 6f 66 20 74 68 65 20 6d 65 6d 6f 72 79 20 63   of the memory c
28980 65 6c 6c 20 74 68 61 74 20 63 6f 6e 74 61 69 6e  ell that contain
28990 73 20 74 68 65 20 76 61 6c 75 65 20 74 68 61 74  s the value that
289a0 20 74 68 65 20 72 6f 77 69 64 20 6f 66 20 74 68   the rowid of th
289b0 65 20 72 6f 77 20 77 69 6c 6c 0a 2a 2a 20 62 65  e row will.** be
289c0 20 73 65 74 20 74 6f 20 62 79 20 74 68 65 20 75   set to by the u
289d0 70 64 61 74 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f  pdate..*/.case O
289e0 50 5f 44 65 6c 65 74 65 3a 20 7b 0a 20 20 56 64  P_Delete: {.  Vd
289f0 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20  beCursor *pC;.  
28a00 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 44 62 3b  const char *zDb;
28a10 0a 20 20 54 61 62 6c 65 20 2a 70 54 61 62 3b 0a  .  Table *pTab;.
28a20 20 20 69 6e 74 20 6f 70 66 6c 61 67 73 3b 0a 0a    int opflags;..
28a30 20 20 6f 70 66 6c 61 67 73 20 3d 20 70 4f 70 2d    opflags = pOp-
28a40 3e 70 32 3b 0a 20 20 61 73 73 65 72 74 28 20 70  >p2;.  assert( p
28a50 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70  Op->p1>=0 && pOp
28a60 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20  ->p1<p->nCursor 
28a70 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43  );.  pC = p->apC
28a80 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  sr[pOp->p1];.  a
28a90 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a  ssert( pC!=0 );.
28aa0 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 65 43    assert( pC->eC
28ab0 75 72 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f  urType==CURTYPE_
28ac0 42 54 52 45 45 20 29 3b 0a 20 20 61 73 73 65 72  BTREE );.  asser
28ad0 74 28 20 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f  t( pC->uc.pCurso
28ae0 72 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  r!=0 );.  assert
28af0 28 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f  ( pC->deferredMo
28b00 76 65 74 6f 3d 3d 30 20 29 3b 0a 20 20 73 71 6c  veto==0 );.  sql
28b10 69 74 65 33 56 64 62 65 49 6e 63 72 57 72 69 74  ite3VdbeIncrWrit
28b20 65 43 6f 75 6e 74 65 72 28 70 2c 20 70 43 29 3b  eCounter(p, pC);
28b30 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ..#ifdef SQLITE_
28b40 44 45 42 55 47 0a 20 20 69 66 28 20 70 4f 70 2d  DEBUG.  if( pOp-
28b50 3e 70 34 74 79 70 65 3d 3d 50 34 5f 54 41 42 4c  >p4type==P4_TABL
28b60 45 20 26 26 20 48 61 73 52 6f 77 69 64 28 70 4f  E && HasRowid(pO
28b70 70 2d 3e 70 34 2e 70 54 61 62 29 20 26 26 20 70  p->p4.pTab) && p
28b80 4f 70 2d 3e 70 35 3d 3d 30 20 29 7b 0a 20 20 20  Op->p5==0 ){.   
28b90 20 2f 2a 20 49 66 20 70 35 20 69 73 20 7a 65 72   /* If p5 is zer
28ba0 6f 2c 20 74 68 65 20 73 65 65 6b 20 6f 70 65 72  o, the seek oper
28bb0 61 74 69 6f 6e 20 74 68 61 74 20 70 6f 73 69 74  ation that posit
28bc0 69 6f 6e 65 64 20 74 68 65 20 63 75 72 73 6f 72  ioned the cursor
28bd0 20 70 72 69 6f 72 20 74 6f 0a 20 20 20 20 2a 2a   prior to.    **
28be0 20 4f 50 5f 44 65 6c 65 74 65 20 77 69 6c 6c 20   OP_Delete will 
28bf0 68 61 76 65 20 61 6c 73 6f 20 73 65 74 20 74 68  have also set th
28c00 65 20 70 43 2d 3e 6d 6f 76 65 74 6f 54 61 72 67  e pC->movetoTarg
28c10 65 74 20 66 69 65 6c 64 20 74 6f 20 74 68 65 20  et field to the 
28c20 72 6f 77 69 64 20 6f 66 0a 20 20 20 20 2a 2a 20  rowid of.    ** 
28c30 74 68 65 20 72 6f 77 20 74 68 61 74 20 69 73 20  the row that is 
28c40 62 65 69 6e 67 20 64 65 6c 65 74 65 64 20 2a 2f  being deleted */
28c50 0a 20 20 20 20 69 36 34 20 69 4b 65 79 20 3d 20  .    i64 iKey = 
28c60 73 71 6c 69 74 65 33 42 74 72 65 65 49 6e 74 65  sqlite3BtreeInte
28c70 67 65 72 4b 65 79 28 70 43 2d 3e 75 63 2e 70 43  gerKey(pC->uc.pC
28c80 75 72 73 6f 72 29 3b 0a 20 20 20 20 61 73 73 65  ursor);.    asse
28c90 72 74 28 20 70 43 2d 3e 6d 6f 76 65 74 6f 54 61  rt( pC->movetoTa
28ca0 72 67 65 74 3d 3d 69 4b 65 79 20 29 3b 0a 20 20  rget==iKey );.  
28cb0 7d 0a 23 65 6e 64 69 66 0a 0a 20 20 2f 2a 20 49  }.#endif..  /* I
28cc0 66 20 74 68 65 20 75 70 64 61 74 65 2d 68 6f 6f  f the update-hoo
28cd0 6b 20 6f 72 20 70 72 65 2d 75 70 64 61 74 65 2d  k or pre-update-
28ce0 68 6f 6f 6b 20 77 69 6c 6c 20 62 65 20 69 6e 76  hook will be inv
28cf0 6f 6b 65 64 2c 20 73 65 74 20 7a 44 62 20 74 6f  oked, set zDb to
28d00 0a 20 20 2a 2a 20 74 68 65 20 6e 61 6d 65 20 6f  .  ** the name o
28d10 66 20 74 68 65 20 64 62 20 74 6f 20 70 61 73 73  f the db to pass
28d20 20 61 73 20 74 6f 20 69 74 2e 20 41 6c 73 6f 20   as to it. Also 
28d30 73 65 74 20 6c 6f 63 61 6c 20 70 54 61 62 20 74  set local pTab t
28d40 6f 20 61 20 63 6f 70 79 0a 20 20 2a 2a 20 6f 66  o a copy.  ** of
28d50 20 70 34 2e 70 54 61 62 2e 20 46 69 6e 61 6c 6c   p4.pTab. Finall
28d60 79 2c 20 69 66 20 70 35 20 69 73 20 74 72 75 65  y, if p5 is true
28d70 2c 20 69 6e 64 69 63 61 74 69 6e 67 20 74 68 61  , indicating tha
28d80 74 20 74 68 69 73 20 63 75 72 73 6f 72 20 77 61  t this cursor wa
28d90 73 0a 20 20 2a 2a 20 6c 61 73 74 20 6d 6f 76 65  s.  ** last move
28da0 64 20 77 69 74 68 20 4f 50 5f 4e 65 78 74 20 6f  d with OP_Next o
28db0 72 20 4f 50 5f 50 72 65 76 2c 20 6e 6f 74 20 53  r OP_Prev, not S
28dc0 65 65 6b 20 6f 72 20 4e 6f 74 46 6f 75 6e 64 2c  eek or NotFound,
28dd0 20 73 65 74 20 0a 20 20 2a 2a 20 56 64 62 65 43   set .  ** VdbeC
28de0 75 72 73 6f 72 2e 6d 6f 76 65 74 6f 54 61 72 67  ursor.movetoTarg
28df0 65 74 20 74 6f 20 74 68 65 20 63 75 72 72 65 6e  et to the curren
28e00 74 20 72 6f 77 69 64 2e 20 20 2a 2f 0a 20 20 69  t rowid.  */.  i
28e10 66 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d  f( pOp->p4type==
28e20 50 34 5f 54 41 42 4c 45 20 26 26 20 48 41 53 5f  P4_TABLE && HAS_
28e30 55 50 44 41 54 45 5f 48 4f 4f 4b 28 64 62 29 20  UPDATE_HOOK(db) 
28e40 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  ){.    assert( p
28e50 43 2d 3e 69 44 62 3e 3d 30 20 29 3b 0a 20 20 20  C->iDb>=0 );.   
28e60 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34   assert( pOp->p4
28e70 2e 70 54 61 62 21 3d 30 20 29 3b 0a 20 20 20 20  .pTab!=0 );.    
28e80 7a 44 62 20 3d 20 64 62 2d 3e 61 44 62 5b 70 43  zDb = db->aDb[pC
28e90 2d 3e 69 44 62 5d 2e 7a 44 62 53 4e 61 6d 65 3b  ->iDb].zDbSName;
28ea0 0a 20 20 20 20 70 54 61 62 20 3d 20 70 4f 70 2d  .    pTab = pOp-
28eb0 3e 70 34 2e 70 54 61 62 3b 0a 20 20 20 20 69 66  >p4.pTab;.    if
28ec0 28 20 28 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46  ( (pOp->p5 & OPF
28ed0 4c 41 47 5f 53 41 56 45 50 4f 53 49 54 49 4f 4e  LAG_SAVEPOSITION
28ee0 29 21 3d 30 20 26 26 20 70 43 2d 3e 69 73 54 61  )!=0 && pC->isTa
28ef0 62 6c 65 20 29 7b 0a 20 20 20 20 20 20 70 43 2d  ble ){.      pC-
28f00 3e 6d 6f 76 65 74 6f 54 61 72 67 65 74 20 3d 20  >movetoTarget = 
28f10 73 71 6c 69 74 65 33 42 74 72 65 65 49 6e 74 65  sqlite3BtreeInte
28f20 67 65 72 4b 65 79 28 70 43 2d 3e 75 63 2e 70 43  gerKey(pC->uc.pC
28f30 75 72 73 6f 72 29 3b 0a 20 20 20 20 7d 0a 20 20  ursor);.    }.  
28f40 7d 65 6c 73 65 7b 0a 20 20 20 20 7a 44 62 20 3d  }else{.    zDb =
28f50 20 30 3b 20 20 20 2f 2a 20 4e 6f 74 20 6e 65 65   0;   /* Not nee
28f60 64 65 64 2e 20 20 53 69 6c 65 6e 63 65 20 61 20  ded.  Silence a 
28f70 63 6f 6d 70 69 6c 65 72 20 77 61 72 6e 69 6e 67  compiler warning
28f80 2e 20 2a 2f 0a 20 20 20 20 70 54 61 62 20 3d 20  . */.    pTab = 
28f90 30 3b 20 20 2f 2a 20 4e 6f 74 20 6e 65 65 64 65  0;  /* Not neede
28fa0 64 2e 20 20 53 69 6c 65 6e 63 65 20 61 20 63 6f  d.  Silence a co
28fb0 6d 70 69 6c 65 72 20 77 61 72 6e 69 6e 67 2e 20  mpiler warning. 
28fc0 2a 2f 0a 20 20 7d 0a 0a 23 69 66 64 65 66 20 53  */.  }..#ifdef S
28fd0 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 50 52 45  QLITE_ENABLE_PRE
28fe0 55 50 44 41 54 45 5f 48 4f 4f 4b 0a 20 20 2f 2a  UPDATE_HOOK.  /*
28ff0 20 49 6e 76 6f 6b 65 20 74 68 65 20 70 72 65 2d   Invoke the pre-
29000 75 70 64 61 74 65 2d 68 6f 6f 6b 20 69 66 20 72  update-hook if r
29010 65 71 75 69 72 65 64 2e 20 2a 2f 0a 20 20 69 66  equired. */.  if
29020 28 20 64 62 2d 3e 78 50 72 65 55 70 64 61 74 65  ( db->xPreUpdate
29030 43 61 6c 6c 62 61 63 6b 20 26 26 20 70 4f 70 2d  Callback && pOp-
29040 3e 70 34 2e 70 54 61 62 20 29 7b 0a 20 20 20 20  >p4.pTab ){.    
29050 61 73 73 65 72 74 28 20 21 28 6f 70 66 6c 61 67  assert( !(opflag
29060 73 20 26 20 4f 50 46 4c 41 47 5f 49 53 55 50 44  s & OPFLAG_ISUPD
29070 41 54 45 29 20 0a 20 20 20 20 20 20 20 20 20 7c  ATE) .         |
29080 7c 20 48 61 73 52 6f 77 69 64 28 70 54 61 62 29  | HasRowid(pTab)
29090 3d 3d 30 20 0a 20 20 20 20 20 20 20 20 20 7c 7c  ==0 .         ||
290a0 20 28 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 2e   (aMem[pOp->p3].
290b0 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29  flags & MEM_Int)
290c0 20 0a 20 20 20 20 29 3b 0a 20 20 20 20 73 71 6c   .    );.    sql
290d0 69 74 65 33 56 64 62 65 50 72 65 55 70 64 61 74  ite3VdbePreUpdat
290e0 65 48 6f 6f 6b 28 70 2c 20 70 43 2c 0a 20 20 20  eHook(p, pC,.   
290f0 20 20 20 20 20 28 6f 70 66 6c 61 67 73 20 26 20       (opflags & 
29100 4f 50 46 4c 41 47 5f 49 53 55 50 44 41 54 45 29  OPFLAG_ISUPDATE)
29110 20 3f 20 53 51 4c 49 54 45 5f 55 50 44 41 54 45   ? SQLITE_UPDATE
29120 20 3a 20 53 51 4c 49 54 45 5f 44 45 4c 45 54 45   : SQLITE_DELETE
29130 2c 20 0a 20 20 20 20 20 20 20 20 7a 44 62 2c 20  , .        zDb, 
29140 70 54 61 62 2c 20 70 43 2d 3e 6d 6f 76 65 74 6f  pTab, pC->moveto
29150 54 61 72 67 65 74 2c 0a 20 20 20 20 20 20 20 20  Target,.        
29160 70 4f 70 2d 3e 70 33 0a 20 20 20 20 29 3b 0a 20  pOp->p3.    );. 
29170 20 7d 0a 20 20 69 66 28 20 6f 70 66 6c 61 67 73   }.  if( opflags
29180 20 26 20 4f 50 46 4c 41 47 5f 49 53 4e 4f 4f 50   & OPFLAG_ISNOOP
29190 20 29 20 62 72 65 61 6b 3b 0a 23 65 6e 64 69 66   ) break;.#endif
291a0 0a 20 0a 20 20 2f 2a 20 4f 6e 6c 79 20 66 6c 61  . .  /* Only fla
291b0 67 73 20 74 68 61 74 20 63 61 6e 20 62 65 20 73  gs that can be s
291c0 65 74 20 61 72 65 20 53 41 56 45 50 4f 49 53 54  et are SAVEPOIST
291d0 49 4f 4e 20 61 6e 64 20 41 55 58 44 45 4c 45 54  ION and AUXDELET
291e0 45 20 2a 2f 20 0a 20 20 61 73 73 65 72 74 28 20  E */ .  assert( 
291f0 28 70 4f 70 2d 3e 70 35 20 26 20 7e 28 4f 50 46  (pOp->p5 & ~(OPF
29200 4c 41 47 5f 53 41 56 45 50 4f 53 49 54 49 4f 4e  LAG_SAVEPOSITION
29210 7c 4f 50 46 4c 41 47 5f 41 55 58 44 45 4c 45 54  |OPFLAG_AUXDELET
29220 45 29 29 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65  E))==0 );.  asse
29230 72 74 28 20 4f 50 46 4c 41 47 5f 53 41 56 45 50  rt( OPFLAG_SAVEP
29240 4f 53 49 54 49 4f 4e 3d 3d 42 54 52 45 45 5f 53  OSITION==BTREE_S
29250 41 56 45 50 4f 53 49 54 49 4f 4e 20 29 3b 0a 20  AVEPOSITION );. 
29260 20 61 73 73 65 72 74 28 20 4f 50 46 4c 41 47 5f   assert( OPFLAG_
29270 41 55 58 44 45 4c 45 54 45 3d 3d 42 54 52 45 45  AUXDELETE==BTREE
29280 5f 41 55 58 44 45 4c 45 54 45 20 29 3b 0a 0a 23  _AUXDELETE );..#
29290 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42  ifdef SQLITE_DEB
292a0 55 47 0a 20 20 69 66 28 20 70 2d 3e 70 46 72 61  UG.  if( p->pFra
292b0 6d 65 3d 3d 30 20 29 7b 0a 20 20 20 20 69 66 28  me==0 ){.    if(
292c0 20 70 43 2d 3e 69 73 45 70 68 65 6d 65 72 61 6c   pC->isEphemeral
292d0 3d 3d 30 0a 20 20 20 20 20 20 20 20 26 26 20 28  ==0.        && (
292e0 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47  pOp->p5 & OPFLAG
292f0 5f 41 55 58 44 45 4c 45 54 45 29 3d 3d 30 0a 20  _AUXDELETE)==0. 
29300 20 20 20 20 20 20 20 26 26 20 28 70 43 2d 3e 77         && (pC->w
29310 72 46 6c 61 67 20 26 20 4f 50 46 4c 41 47 5f 46  rFlag & OPFLAG_F
29320 4f 52 44 45 4c 45 54 45 29 3d 3d 30 0a 20 20 20  ORDELETE)==0.   
29330 20 20 20 29 7b 0a 20 20 20 20 20 20 6e 45 78 74     ){.      nExt
29340 72 61 44 65 6c 65 74 65 2b 2b 3b 0a 20 20 20 20  raDelete++;.    
29350 7d 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70  }.    if( pOp->p
29360 32 20 26 20 4f 50 46 4c 41 47 5f 4e 43 48 41 4e  2 & OPFLAG_NCHAN
29370 47 45 20 29 7b 0a 20 20 20 20 20 20 6e 45 78 74  GE ){.      nExt
29380 72 61 44 65 6c 65 74 65 2d 2d 3b 0a 20 20 20 20  raDelete--;.    
29390 7d 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 20 20  }.  }.#endif..  
293a0 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
293b0 65 44 65 6c 65 74 65 28 70 43 2d 3e 75 63 2e 70  eDelete(pC->uc.p
293c0 43 75 72 73 6f 72 2c 20 70 4f 70 2d 3e 70 35 29  Cursor, pOp->p5)
293d0 3b 0a 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61  ;.  pC->cacheSta
293e0 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c  tus = CACHE_STAL
293f0 45 3b 0a 20 20 70 43 2d 3e 73 65 65 6b 52 65 73  E;.  pC->seekRes
29400 75 6c 74 20 3d 20 30 3b 0a 20 20 69 66 28 20 72  ult = 0;.  if( r
29410 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64  c ) goto abort_d
29420 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 0a 20 20  ue_to_error;..  
29430 2f 2a 20 49 6e 76 6f 6b 65 20 74 68 65 20 75 70  /* Invoke the up
29440 64 61 74 65 2d 68 6f 6f 6b 20 69 66 20 72 65 71  date-hook if req
29450 75 69 72 65 64 2e 20 2a 2f 0a 20 20 69 66 28 20  uired. */.  if( 
29460 6f 70 66 6c 61 67 73 20 26 20 4f 50 46 4c 41 47  opflags & OPFLAG
29470 5f 4e 43 48 41 4e 47 45 20 29 7b 0a 20 20 20 20  _NCHANGE ){.    
29480 70 2d 3e 6e 43 68 61 6e 67 65 2b 2b 3b 0a 20 20  p->nChange++;.  
29490 20 20 69 66 28 20 64 62 2d 3e 78 55 70 64 61 74    if( db->xUpdat
294a0 65 43 61 6c 6c 62 61 63 6b 20 26 26 20 48 61 73  eCallback && Has
294b0 52 6f 77 69 64 28 70 54 61 62 29 20 29 7b 0a 20  Rowid(pTab) ){. 
294c0 20 20 20 20 20 64 62 2d 3e 78 55 70 64 61 74 65       db->xUpdate
294d0 43 61 6c 6c 62 61 63 6b 28 64 62 2d 3e 70 55 70  Callback(db->pUp
294e0 64 61 74 65 41 72 67 2c 20 53 51 4c 49 54 45 5f  dateArg, SQLITE_
294f0 44 45 4c 45 54 45 2c 20 7a 44 62 2c 20 70 54 61  DELETE, zDb, pTa
29500 62 2d 3e 7a 4e 61 6d 65 2c 0a 20 20 20 20 20 20  b->zName,.      
29510 20 20 20 20 70 43 2d 3e 6d 6f 76 65 74 6f 54 61      pC->movetoTa
29520 72 67 65 74 29 3b 0a 20 20 20 20 20 20 61 73 73  rget);.      ass
29530 65 72 74 28 20 70 43 2d 3e 69 44 62 3e 3d 30 20  ert( pC->iDb>=0 
29540 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 0a 20 20  );.    }.  }..  
29550 62 72 65 61 6b 3b 0a 7d 0a 2f 2a 20 4f 70 63 6f  break;.}./* Opco
29560 64 65 3a 20 52 65 73 65 74 43 6f 75 6e 74 20 2a  de: ResetCount *
29570 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54   * * * *.**.** T
29580 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20  he value of the 
29590 63 68 61 6e 67 65 20 63 6f 75 6e 74 65 72 20 69  change counter i
295a0 73 20 63 6f 70 69 65 64 20 74 6f 20 74 68 65 20  s copied to the 
295b0 64 61 74 61 62 61 73 65 20 68 61 6e 64 6c 65 0a  database handle.
295c0 2a 2a 20 63 68 61 6e 67 65 20 63 6f 75 6e 74 65  ** change counte
295d0 72 20 28 72 65 74 75 72 6e 65 64 20 62 79 20 73  r (returned by s
295e0 75 62 73 65 71 75 65 6e 74 20 63 61 6c 6c 73 20  ubsequent calls 
295f0 74 6f 20 73 71 6c 69 74 65 33 5f 63 68 61 6e 67  to sqlite3_chang
29600 65 73 28 29 29 2e 0a 2a 2a 20 54 68 65 6e 20 74  es())..** Then t
29610 68 65 20 56 4d 73 20 69 6e 74 65 72 6e 61 6c 20  he VMs internal 
29620 63 68 61 6e 67 65 20 63 6f 75 6e 74 65 72 20 72  change counter r
29630 65 73 65 74 73 20 74 6f 20 30 2e 0a 2a 2a 20 54  esets to 0..** T
29640 68 69 73 20 69 73 20 75 73 65 64 20 62 79 20 74  his is used by t
29650 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d 73 2e  rigger programs.
29660 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65 73 65  .*/.case OP_Rese
29670 74 43 6f 75 6e 74 3a 20 7b 0a 20 20 73 71 6c 69  tCount: {.  sqli
29680 74 65 33 56 64 62 65 53 65 74 43 68 61 6e 67 65  te3VdbeSetChange
29690 73 28 64 62 2c 20 70 2d 3e 6e 43 68 61 6e 67 65  s(db, p->nChange
296a0 29 3b 0a 20 20 70 2d 3e 6e 43 68 61 6e 67 65 20  );.  p->nChange 
296b0 3d 20 30 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  = 0;.  break;.}.
296c0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 6f 72 74  ./* Opcode: Sort
296d0 65 72 43 6f 6d 70 61 72 65 20 50 31 20 50 32 20  erCompare P1 P2 
296e0 50 33 20 50 34 0a 2a 2a 20 53 79 6e 6f 70 73 69  P3 P4.** Synopsi
296f0 73 3a 20 69 66 20 6b 65 79 28 50 31 29 21 3d 74  s: if key(P1)!=t
29700 72 69 6d 28 72 5b 50 33 5d 2c 50 34 29 20 67 6f  rim(r[P3],P4) go
29710 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 50 31 20 69  to P2.**.** P1 i
29720 73 20 61 20 73 6f 72 74 65 72 20 63 75 72 73 6f  s a sorter curso
29730 72 2e 20 54 68 69 73 20 69 6e 73 74 72 75 63 74  r. This instruct
29740 69 6f 6e 20 63 6f 6d 70 61 72 65 73 20 61 20 70  ion compares a p
29750 72 65 66 69 78 20 6f 66 20 74 68 65 0a 2a 2a 20  refix of the.** 
29760 72 65 63 6f 72 64 20 62 6c 6f 62 20 69 6e 20 72  record blob in r
29770 65 67 69 73 74 65 72 20 50 33 20 61 67 61 69 6e  egister P3 again
29780 73 74 20 61 20 70 72 65 66 69 78 20 6f 66 20 74  st a prefix of t
29790 68 65 20 65 6e 74 72 79 20 74 68 61 74 20 0a 2a  he entry that .*
297a0 2a 20 74 68 65 20 73 6f 72 74 65 72 20 63 75 72  * the sorter cur
297b0 73 6f 72 20 63 75 72 72 65 6e 74 6c 79 20 70 6f  sor currently po
297c0 69 6e 74 73 20 74 6f 2e 20 20 4f 6e 6c 79 20 74  ints to.  Only t
297d0 68 65 20 66 69 72 73 74 20 50 34 20 66 69 65 6c  he first P4 fiel
297e0 64 73 0a 2a 2a 20 6f 66 20 72 5b 50 33 5d 20 61  ds.** of r[P3] a
297f0 6e 64 20 74 68 65 20 73 6f 72 74 65 72 20 72 65  nd the sorter re
29800 63 6f 72 64 20 61 72 65 20 63 6f 6d 70 61 72 65  cord are compare
29810 64 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 65 69 74 68  d..**.** If eith
29820 65 72 20 50 33 20 6f 72 20 74 68 65 20 73 6f 72  er P3 or the sor
29830 74 65 72 20 63 6f 6e 74 61 69 6e 73 20 61 20 4e  ter contains a N
29840 55 4c 4c 20 69 6e 20 6f 6e 65 20 6f 66 20 74 68  ULL in one of th
29850 65 69 72 20 73 69 67 6e 69 66 69 63 61 6e 74 0a  eir significant.
29860 2a 2a 20 66 69 65 6c 64 73 20 28 6e 6f 74 20 63  ** fields (not c
29870 6f 75 6e 74 69 6e 67 20 74 68 65 20 50 34 20 66  ounting the P4 f
29880 69 65 6c 64 73 20 61 74 20 74 68 65 20 65 6e 64  ields at the end
29890 20 77 68 69 63 68 20 61 72 65 20 69 67 6e 6f 72   which are ignor
298a0 65 64 29 20 74 68 65 6e 0a 2a 2a 20 74 68 65 20  ed) then.** the 
298b0 63 6f 6d 70 61 72 69 73 6f 6e 20 69 73 20 61 73  comparison is as
298c0 73 75 6d 65 64 20 74 6f 20 62 65 20 65 71 75 61  sumed to be equa
298d0 6c 2e 0a 2a 2a 0a 2a 2a 20 46 61 6c 6c 20 74 68  l..**.** Fall th
298e0 72 6f 75 67 68 20 74 6f 20 6e 65 78 74 20 69 6e  rough to next in
298f0 73 74 72 75 63 74 69 6f 6e 20 69 66 20 74 68 65  struction if the
29900 20 74 77 6f 20 72 65 63 6f 72 64 73 20 63 6f 6d   two records com
29910 70 61 72 65 20 65 71 75 61 6c 20 74 6f 0a 2a 2a  pare equal to.**
29920 20 65 61 63 68 20 6f 74 68 65 72 2e 20 20 4a 75   each other.  Ju
29930 6d 70 20 74 6f 20 50 32 20 69 66 20 74 68 65 79  mp to P2 if they
29940 20 61 72 65 20 64 69 66 66 65 72 65 6e 74 2e 0a   are different..
29950 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 6f 72 74 65  */.case OP_Sorte
29960 72 43 6f 6d 70 61 72 65 3a 20 7b 0a 20 20 56 64  rCompare: {.  Vd
29970 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20  beCursor *pC;.  
29980 69 6e 74 20 72 65 73 3b 0a 20 20 69 6e 74 20 6e  int res;.  int n
29990 4b 65 79 43 6f 6c 3b 0a 0a 20 20 70 43 20 3d 20  KeyCol;..  pC = 
299a0 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31  p->apCsr[pOp->p1
299b0 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 69 73 53  ];.  assert( isS
299c0 6f 72 74 65 72 28 70 43 29 20 29 3b 0a 20 20 61  orter(pC) );.  a
299d0 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79  ssert( pOp->p4ty
299e0 70 65 3d 3d 50 34 5f 49 4e 54 33 32 20 29 3b 0a  pe==P4_INT32 );.
299f0 20 20 70 49 6e 33 20 3d 20 26 61 4d 65 6d 5b 70    pIn3 = &aMem[p
29a00 4f 70 2d 3e 70 33 5d 3b 0a 20 20 6e 4b 65 79 43  Op->p3];.  nKeyC
29a10 6f 6c 20 3d 20 70 4f 70 2d 3e 70 34 2e 69 3b 0a  ol = pOp->p4.i;.
29a20 20 20 72 65 73 20 3d 20 30 3b 0a 20 20 72 63 20    res = 0;.  rc 
29a30 3d 20 73 71 6c 69 74 65 33 56 64 62 65 53 6f 72  = sqlite3VdbeSor
29a40 74 65 72 43 6f 6d 70 61 72 65 28 70 43 2c 20 70  terCompare(pC, p
29a50 49 6e 33 2c 20 6e 4b 65 79 43 6f 6c 2c 20 26 72  In3, nKeyCol, &r
29a60 65 73 29 3b 0a 20 20 56 64 62 65 42 72 61 6e 63  es);.  VdbeBranc
29a70 68 54 61 6b 65 6e 28 72 65 73 21 3d 30 2c 32 29  hTaken(res!=0,2)
29a80 3b 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f 74  ;.  if( rc ) got
29a90 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
29aa0 72 72 6f 72 3b 0a 20 20 69 66 28 20 72 65 73 20  rror;.  if( res 
29ab0 29 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70  ) goto jump_to_p
29ac0 32 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 3b 0a 0a  2;.  break;.};..
29ad0 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 6f 72 74 65  /* Opcode: Sorte
29ae0 72 44 61 74 61 20 50 31 20 50 32 20 50 33 20 2a  rData P1 P2 P3 *
29af0 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
29b00 72 5b 50 32 5d 3d 64 61 74 61 0a 2a 2a 0a 2a 2a  r[P2]=data.**.**
29b10 20 57 72 69 74 65 20 69 6e 74 6f 20 72 65 67 69   Write into regi
29b20 73 74 65 72 20 50 32 20 74 68 65 20 63 75 72 72  ster P2 the curr
29b30 65 6e 74 20 73 6f 72 74 65 72 20 64 61 74 61 20  ent sorter data 
29b40 66 6f 72 20 73 6f 72 74 65 72 20 63 75 72 73 6f  for sorter curso
29b50 72 20 50 31 2e 0a 2a 2a 20 54 68 65 6e 20 63 6c  r P1..** Then cl
29b60 65 61 72 20 74 68 65 20 63 6f 6c 75 6d 6e 20 68  ear the column h
29b70 65 61 64 65 72 20 63 61 63 68 65 20 6f 6e 20 63  eader cache on c
29b80 75 72 73 6f 72 20 50 33 2e 0a 2a 2a 0a 2a 2a 20  ursor P3..**.** 
29b90 54 68 69 73 20 6f 70 63 6f 64 65 20 69 73 20 6e  This opcode is n
29ba0 6f 72 6d 61 6c 6c 79 20 75 73 65 20 74 6f 20 6d  ormally use to m
29bb0 6f 76 65 20 61 20 72 65 63 6f 72 64 20 6f 75 74  ove a record out
29bc0 20 6f 66 20 74 68 65 20 73 6f 72 74 65 72 20 61   of the sorter a
29bd0 6e 64 20 69 6e 74 6f 0a 2a 2a 20 61 20 72 65 67  nd into.** a reg
29be0 69 73 74 65 72 20 74 68 61 74 20 69 73 20 74 68  ister that is th
29bf0 65 20 73 6f 75 72 63 65 20 66 6f 72 20 61 20 70  e source for a p
29c00 73 65 75 64 6f 2d 74 61 62 6c 65 20 63 75 72 73  seudo-table curs
29c10 6f 72 20 63 72 65 61 74 65 64 20 75 73 69 6e 67  or created using
29c20 0a 2a 2a 20 4f 70 65 6e 50 73 65 75 64 6f 2e 20  .** OpenPseudo. 
29c30 20 54 68 61 74 20 70 73 65 75 64 6f 2d 74 61 62   That pseudo-tab
29c40 6c 65 20 63 75 72 73 6f 72 20 69 73 20 74 68 65  le cursor is the
29c50 20 6f 6e 65 20 74 68 61 74 20 69 73 20 69 64 65   one that is ide
29c60 6e 74 69 66 69 65 64 20 62 79 0a 2a 2a 20 70 61  ntified by.** pa
29c70 72 61 6d 65 74 65 72 20 50 33 2e 20 20 43 6c 65  rameter P3.  Cle
29c80 61 72 69 6e 67 20 74 68 65 20 50 33 20 63 6f 6c  aring the P3 col
29c90 75 6d 6e 20 63 61 63 68 65 20 61 73 20 70 61 72  umn cache as par
29ca0 74 20 6f 66 20 74 68 69 73 20 6f 70 63 6f 64 65  t of this opcode
29cb0 20 73 61 76 65 73 0a 2a 2a 20 75 73 20 66 72 6f   saves.** us fro
29cc0 6d 20 68 61 76 69 6e 67 20 74 6f 20 69 73 73 75  m having to issu
29cd0 65 20 61 20 73 65 70 61 72 61 74 65 20 4e 75 6c  e a separate Nul
29ce0 6c 52 6f 77 20 69 6e 73 74 72 75 63 74 69 6f 6e  lRow instruction
29cf0 20 74 6f 20 63 6c 65 61 72 20 74 68 61 74 20 63   to clear that c
29d00 61 63 68 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  ache..*/.case OP
29d10 5f 53 6f 72 74 65 72 44 61 74 61 3a 20 7b 0a 20  _SorterData: {. 
29d20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b   VdbeCursor *pC;
29d30 0a 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d  ..  pOut = &aMem
29d40 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 70 43 20  [pOp->p2];.  pC 
29d50 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e  = p->apCsr[pOp->
29d60 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 69  p1];.  assert( i
29d70 73 53 6f 72 74 65 72 28 70 43 29 20 29 3b 0a 20  sSorter(pC) );. 
29d80 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62   rc = sqlite3Vdb
29d90 65 53 6f 72 74 65 72 52 6f 77 6b 65 79 28 70 43  eSorterRowkey(pC
29da0 2c 20 70 4f 75 74 29 3b 0a 20 20 61 73 73 65 72  , pOut);.  asser
29db0 74 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b  t( rc!=SQLITE_OK
29dc0 20 7c 7c 20 28 70 4f 75 74 2d 3e 66 6c 61 67 73   || (pOut->flags
29dd0 20 26 20 4d 45 4d 5f 42 6c 6f 62 29 20 29 3b 0a   & MEM_Blob) );.
29de0 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
29df0 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c  1>=0 && pOp->p1<
29e00 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20  p->nCursor );.  
29e10 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62  if( rc ) goto ab
29e20 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
29e30 3b 0a 20 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70  ;.  p->apCsr[pOp
29e40 2d 3e 70 33 5d 2d 3e 63 61 63 68 65 53 74 61 74  ->p3]->cacheStat
29e50 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45  us = CACHE_STALE
29e60 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
29e70 20 4f 70 63 6f 64 65 3a 20 52 6f 77 44 61 74 61   Opcode: RowData
29e80 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a   P1 P2 P3 * *.**
29e90 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d   Synopsis: r[P2]
29ea0 3d 64 61 74 61 0a 2a 2a 0a 2a 2a 20 57 72 69 74  =data.**.** Writ
29eb0 65 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20  e into register 
29ec0 50 32 20 74 68 65 20 63 6f 6d 70 6c 65 74 65 20  P2 the complete 
29ed0 72 6f 77 20 63 6f 6e 74 65 6e 74 20 66 6f 72 20  row content for 
29ee0 74 68 65 20 72 6f 77 20 61 74 20 0a 2a 2a 20 77  the row at .** w
29ef0 68 69 63 68 20 63 75 72 73 6f 72 20 50 31 20 69  hich cursor P1 i
29f00 73 20 63 75 72 72 65 6e 74 6c 79 20 70 6f 69 6e  s currently poin
29f10 74 69 6e 67 2e 0a 2a 2a 20 54 68 65 72 65 20 69  ting..** There i
29f20 73 20 6e 6f 20 69 6e 74 65 72 70 72 65 74 61 74  s no interpretat
29f30 69 6f 6e 20 6f 66 20 74 68 65 20 64 61 74 61 2e  ion of the data.
29f40 20 20 0a 2a 2a 20 49 74 20 69 73 20 6a 75 73 74    .** It is just
29f50 20 63 6f 70 69 65 64 20 6f 6e 74 6f 20 74 68 65   copied onto the
29f60 20 50 32 20 72 65 67 69 73 74 65 72 20 65 78 61   P2 register exa
29f70 63 74 6c 79 20 61 73 20 0a 2a 2a 20 69 74 20 69  ctly as .** it i
29f80 73 20 66 6f 75 6e 64 20 69 6e 20 74 68 65 20 64  s found in the d
29f90 61 74 61 62 61 73 65 20 66 69 6c 65 2e 0a 2a 2a  atabase file..**
29fa0 0a 2a 2a 20 49 66 20 63 75 72 73 6f 72 20 50 31  .** If cursor P1
29fb0 20 69 73 20 61 6e 20 69 6e 64 65 78 2c 20 74 68   is an index, th
29fc0 65 6e 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 69  en the content i
29fd0 73 20 74 68 65 20 6b 65 79 20 6f 66 20 74 68 65  s the key of the
29fe0 20 72 6f 77 2e 0a 2a 2a 20 49 66 20 63 75 72 73   row..** If curs
29ff0 6f 72 20 50 32 20 69 73 20 61 20 74 61 62 6c 65  or P2 is a table
2a000 2c 20 74 68 65 6e 20 74 68 65 20 63 6f 6e 74 65  , then the conte
2a010 6e 74 20 65 78 74 72 61 63 74 65 64 20 69 73 20  nt extracted is 
2a020 74 68 65 20 64 61 74 61 2e 0a 2a 2a 0a 2a 2a 20  the data..**.** 
2a030 49 66 20 74 68 65 20 50 31 20 63 75 72 73 6f 72  If the P1 cursor
2a040 20 6d 75 73 74 20 62 65 20 70 6f 69 6e 74 69 6e   must be pointin
2a050 67 20 74 6f 20 61 20 76 61 6c 69 64 20 72 6f 77  g to a valid row
2a060 20 28 6e 6f 74 20 61 20 4e 55 4c 4c 20 72 6f 77   (not a NULL row
2a070 29 0a 2a 2a 20 6f 66 20 61 20 72 65 61 6c 20 74  ).** of a real t
2a080 61 62 6c 65 2c 20 6e 6f 74 20 61 20 70 73 65 75  able, not a pseu
2a090 64 6f 2d 74 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20  do-table..**.** 
2a0a0 49 66 20 50 33 21 3d 30 20 74 68 65 6e 20 74 68  If P3!=0 then th
2a0b0 69 73 20 6f 70 63 6f 64 65 20 69 73 20 61 6c 6c  is opcode is all
2a0c0 6f 77 65 64 20 74 6f 20 6d 61 6b 65 20 61 6e 20  owed to make an 
2a0d0 65 70 68 65 6d 65 72 61 6c 20 70 6f 69 6e 74 65  ephemeral pointe
2a0e0 72 0a 2a 2a 20 69 6e 74 6f 20 74 68 65 20 64 61  r.** into the da
2a0f0 74 61 62 61 73 65 20 70 61 67 65 2e 20 20 54 68  tabase page.  Th
2a100 61 74 20 6d 65 61 6e 73 20 74 68 61 74 20 74 68  at means that th
2a110 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 74 68 65  e content of the
2a120 20 6f 75 74 70 75 74 0a 2a 2a 20 72 65 67 69 73   output.** regis
2a130 74 65 72 20 77 69 6c 6c 20 62 65 20 69 6e 76 61  ter will be inva
2a140 6c 69 64 61 74 65 64 20 61 73 20 73 6f 6f 6e 20  lidated as soon 
2a150 61 73 20 74 68 65 20 63 75 72 73 6f 72 20 6d 6f  as the cursor mo
2a160 76 65 73 20 2d 20 69 6e 63 6c 75 64 69 6e 67 0a  ves - including.
2a170 2a 2a 20 6d 6f 76 65 73 20 63 61 75 73 65 64 20  ** moves caused 
2a180 62 79 20 6f 74 68 65 72 20 63 75 72 73 6f 72 73  by other cursors
2a190 20 74 68 61 74 20 22 73 61 76 65 22 20 74 68 65   that "save" the
2a1a0 20 63 75 72 72 65 6e 74 20 63 75 72 73 6f 72 73   current cursors
2a1b0 0a 2a 2a 20 70 6f 73 69 74 69 6f 6e 20 69 6e 20  .** position in 
2a1c0 6f 72 64 65 72 20 74 68 61 74 20 74 68 65 79 20  order that they 
2a1d0 63 61 6e 20 77 72 69 74 65 20 74 6f 20 74 68 65  can write to the
2a1e0 20 73 61 6d 65 20 74 61 62 6c 65 2e 20 20 49 66   same table.  If
2a1f0 20 50 33 3d 3d 30 0a 2a 2a 20 74 68 65 6e 20 61   P3==0.** then a
2a200 20 63 6f 70 79 20 6f 66 20 74 68 65 20 64 61 74   copy of the dat
2a210 61 20 69 73 20 6d 61 64 65 20 69 6e 74 6f 20 6d  a is made into m
2a220 65 6d 6f 72 79 2e 20 20 50 33 21 3d 30 20 69 73  emory.  P3!=0 is
2a230 20 66 61 73 74 65 72 2c 20 62 75 74 0a 2a 2a 20   faster, but.** 
2a240 50 33 3d 3d 30 20 69 73 20 73 61 66 65 72 2e 0a  P3==0 is safer..
2a250 2a 2a 0a 2a 2a 20 49 66 20 50 33 21 3d 30 20 74  **.** If P3!=0 t
2a260 68 65 6e 20 74 68 65 20 63 6f 6e 74 65 6e 74 20  hen the content 
2a270 6f 66 20 74 68 65 20 50 32 20 72 65 67 69 73 74  of the P2 regist
2a280 65 72 20 69 73 20 75 6e 73 75 69 74 61 62 6c 65  er is unsuitable
2a290 20 66 6f 72 20 75 73 65 0a 2a 2a 20 69 6e 20 4f   for use.** in O
2a2a0 50 5f 52 65 73 75 6c 74 20 61 6e 64 20 61 6e 79  P_Result and any
2a2b0 20 4f 50 5f 52 65 73 75 6c 74 20 77 69 6c 6c 20   OP_Result will 
2a2c0 69 6e 76 61 6c 69 64 61 74 65 20 74 68 65 20 50  invalidate the P
2a2d0 32 20 72 65 67 69 73 74 65 72 20 63 6f 6e 74 65  2 register conte
2a2e0 6e 74 2e 0a 2a 2a 20 54 68 65 20 50 32 20 72 65  nt..** The P2 re
2a2f0 67 69 73 74 65 72 20 63 6f 6e 74 65 6e 74 20 69  gister content i
2a300 73 20 69 6e 76 61 6c 69 64 61 74 65 64 20 62 79  s invalidated by
2a310 20 6f 70 63 6f 64 65 73 20 6c 69 6b 65 20 4f 50   opcodes like OP
2a320 5f 46 75 6e 63 74 69 6f 6e 20 6f 72 0a 2a 2a 20  _Function or.** 
2a330 62 79 20 61 6e 79 20 75 73 65 20 6f 66 20 61 6e  by any use of an
2a340 6f 74 68 65 72 20 63 75 72 73 6f 72 20 70 6f 69  other cursor poi
2a350 6e 74 69 6e 67 20 74 6f 20 74 68 65 20 73 61 6d  nting to the sam
2a360 65 20 74 61 62 6c 65 2e 0a 2a 2f 0a 63 61 73 65  e table..*/.case
2a370 20 4f 50 5f 52 6f 77 44 61 74 61 3a 20 7b 0a 20   OP_RowData: {. 
2a380 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b   VdbeCursor *pC;
2a390 0a 20 20 42 74 43 75 72 73 6f 72 20 2a 70 43 72  .  BtCursor *pCr
2a3a0 73 72 3b 0a 20 20 75 33 32 20 6e 3b 0a 0a 20 20  sr;.  u32 n;..  
2a3b0 70 4f 75 74 20 3d 20 6f 75 74 32 50 72 65 72 65  pOut = out2Prere
2a3c0 6c 65 61 73 65 28 70 2c 20 70 4f 70 29 3b 0a 0a  lease(p, pOp);..
2a3d0 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
2a3e0 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c  1>=0 && pOp->p1<
2a3f0 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20  p->nCursor );.  
2a400 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f  pC = p->apCsr[pO
2a410 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74  p->p1];.  assert
2a420 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 61 73 73  ( pC!=0 );.  ass
2a430 65 72 74 28 20 70 43 2d 3e 65 43 75 72 54 79 70  ert( pC->eCurTyp
2a440 65 3d 3d 43 55 52 54 59 50 45 5f 42 54 52 45 45  e==CURTYPE_BTREE
2a450 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 69 73   );.  assert( is
2a460 53 6f 72 74 65 72 28 70 43 29 3d 3d 30 20 29 3b  Sorter(pC)==0 );
2a470 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 6e  .  assert( pC->n
2a480 75 6c 6c 52 6f 77 3d 3d 30 20 29 3b 0a 20 20 61  ullRow==0 );.  a
2a490 73 73 65 72 74 28 20 70 43 2d 3e 75 63 2e 70 43  ssert( pC->uc.pC
2a4a0 75 72 73 6f 72 21 3d 30 20 29 3b 0a 20 20 70 43  ursor!=0 );.  pC
2a4b0 72 73 72 20 3d 20 70 43 2d 3e 75 63 2e 70 43 75  rsr = pC->uc.pCu
2a4c0 72 73 6f 72 3b 0a 0a 20 20 2f 2a 20 54 68 65 20  rsor;..  /* The 
2a4d0 4f 50 5f 52 6f 77 44 61 74 61 20 6f 70 63 6f 64  OP_RowData opcod
2a4e0 65 73 20 61 6c 77 61 79 73 20 66 6f 6c 6c 6f 77  es always follow
2a4f0 20 4f 50 5f 4e 6f 74 45 78 69 73 74 73 20 6f 72   OP_NotExists or
2a500 0a 20 20 2a 2a 20 4f 50 5f 53 65 65 6b 52 6f 77  .  ** OP_SeekRow
2a510 69 64 20 6f 72 20 4f 50 5f 52 65 77 69 6e 64 2f  id or OP_Rewind/
2a520 4f 70 5f 4e 65 78 74 20 77 69 74 68 20 6e 6f 20  Op_Next with no 
2a530 69 6e 74 65 72 76 65 6e 69 6e 67 20 69 6e 73 74  intervening inst
2a540 72 75 63 74 69 6f 6e 73 0a 20 20 2a 2a 20 74 68  ructions.  ** th
2a550 61 74 20 6d 69 67 68 74 20 69 6e 76 61 6c 69 64  at might invalid
2a560 61 74 65 20 74 68 65 20 63 75 72 73 6f 72 2e 0a  ate the cursor..
2a570 20 20 2a 2a 20 49 66 20 74 68 69 73 20 77 68 65    ** If this whe
2a580 72 65 20 6e 6f 74 20 74 68 65 20 63 61 73 65 2c  re not the case,
2a590 20 6f 6e 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f   on of the follo
2a5a0 77 69 6e 67 20 61 73 73 65 72 74 28 29 73 0a 20  wing assert()s. 
2a5b0 20 2a 2a 20 77 6f 75 6c 64 20 66 61 69 6c 2e 20   ** would fail. 
2a5c0 20 53 68 6f 75 6c 64 20 74 68 69 73 20 65 76 65   Should this eve
2a5d0 72 20 63 68 61 6e 67 65 20 28 62 65 63 61 75 73  r change (becaus
2a5e0 65 20 6f 66 20 63 68 61 6e 67 65 73 20 69 6e 20  e of changes in 
2a5f0 74 68 65 20 63 6f 64 65 0a 20 20 2a 2a 20 67 65  the code.  ** ge
2a600 6e 65 72 61 74 6f 72 29 20 74 68 65 6e 20 74 68  nerator) then th
2a610 65 20 66 69 78 20 77 6f 75 6c 64 20 62 65 20 74  e fix would be t
2a620 6f 20 69 6e 73 65 72 74 20 61 20 63 61 6c 6c 20  o insert a call 
2a630 74 6f 0a 20 20 2a 2a 20 73 71 6c 69 74 65 33 56  to.  ** sqlite3V
2a640 64 62 65 43 75 72 73 6f 72 4d 6f 76 65 74 6f 28  dbeCursorMoveto(
2a650 29 2e 0a 20 20 2a 2f 0a 20 20 61 73 73 65 72 74  )..  */.  assert
2a660 28 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f  ( pC->deferredMo
2a670 76 65 74 6f 3d 3d 30 20 29 3b 0a 20 20 61 73 73  veto==0 );.  ass
2a680 65 72 74 28 20 73 71 6c 69 74 65 33 42 74 72 65  ert( sqlite3Btre
2a690 65 43 75 72 73 6f 72 49 73 56 61 6c 69 64 28 70  eCursorIsValid(p
2a6a0 43 72 73 72 29 20 29 3b 0a 23 69 66 20 30 20 20  Crsr) );.#if 0  
2a6b0 2f 2a 20 4e 6f 74 20 72 65 71 75 69 72 65 64 20  /* Not required 
2a6c0 64 75 65 20 74 6f 20 74 68 65 20 70 72 65 76 69  due to the previ
2a6d0 6f 75 73 20 74 6f 20 61 73 73 65 72 74 28 29 20  ous to assert() 
2a6e0 73 74 61 74 65 6d 65 6e 74 73 20 2a 2f 0a 20 20  statements */.  
2a6f0 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  rc = sqlite3Vdbe
2a700 43 75 72 73 6f 72 4d 6f 76 65 74 6f 28 70 43 29  CursorMoveto(pC)
2a710 3b 0a 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49  ;.  if( rc!=SQLI
2a720 54 45 5f 4f 4b 20 29 20 67 6f 74 6f 20 61 62 6f  TE_OK ) goto abo
2a730 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
2a740 0a 23 65 6e 64 69 66 0a 0a 20 20 6e 20 3d 20 73  .#endif..  n = s
2a750 71 6c 69 74 65 33 42 74 72 65 65 50 61 79 6c 6f  qlite3BtreePaylo
2a760 61 64 53 69 7a 65 28 70 43 72 73 72 29 3b 0a 20  adSize(pCrsr);. 
2a770 20 69 66 28 20 6e 3e 28 75 33 32 29 64 62 2d 3e   if( n>(u32)db->
2a780 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4c 49  aLimit[SQLITE_LI
2a790 4d 49 54 5f 4c 45 4e 47 54 48 5d 20 29 7b 0a 20  MIT_LENGTH] ){. 
2a7a0 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b     goto too_big;
2a7b0 0a 20 20 7d 0a 20 20 74 65 73 74 63 61 73 65 28  .  }.  testcase(
2a7c0 20 6e 3d 3d 30 20 29 3b 0a 20 20 72 63 20 3d 20   n==0 );.  rc = 
2a7d0 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 46 72  sqlite3VdbeMemFr
2a7e0 6f 6d 42 74 72 65 65 28 70 43 72 73 72 2c 20 30  omBtree(pCrsr, 0
2a7f0 2c 20 6e 2c 20 70 4f 75 74 29 3b 0a 20 20 69 66  , n, pOut);.  if
2a800 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72  ( rc ) goto abor
2a810 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
2a820 20 20 69 66 28 20 21 70 4f 70 2d 3e 70 33 20 29    if( !pOp->p3 )
2a830 20 44 65 65 70 68 65 6d 65 72 61 6c 69 7a 65 28   Deephemeralize(
2a840 70 4f 75 74 29 3b 0a 20 20 55 50 44 41 54 45 5f  pOut);.  UPDATE_
2a850 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 4f 75  MAX_BLOBSIZE(pOu
2a860 74 29 3b 0a 20 20 52 45 47 49 53 54 45 52 5f 54  t);.  REGISTER_T
2a870 52 41 43 45 28 70 4f 70 2d 3e 70 32 2c 20 70 4f  RACE(pOp->p2, pO
2a880 75 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  ut);.  break;.}.
2a890 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 6f 77 69  ./* Opcode: Rowi
2a8a0 64 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  d P1 P2 * * *.**
2a8b0 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d   Synopsis: r[P2]
2a8c0 3d 72 6f 77 69 64 0a 2a 2a 0a 2a 2a 20 53 74 6f  =rowid.**.** Sto
2a8d0 72 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  re in register P
2a8e0 32 20 61 6e 20 69 6e 74 65 67 65 72 20 77 68 69  2 an integer whi
2a8f0 63 68 20 69 73 20 74 68 65 20 6b 65 79 20 6f 66  ch is the key of
2a900 20 74 68 65 20 74 61 62 6c 65 20 65 6e 74 72 79   the table entry
2a910 20 74 68 61 74 0a 2a 2a 20 50 31 20 69 73 20 63   that.** P1 is c
2a920 75 72 72 65 6e 74 6c 79 20 70 6f 69 6e 74 20 74  urrently point t
2a930 6f 2e 0a 2a 2a 0a 2a 2a 20 50 31 20 63 61 6e 20  o..**.** P1 can 
2a940 62 65 20 65 69 74 68 65 72 20 61 6e 20 6f 72 64  be either an ord
2a950 69 6e 61 72 79 20 74 61 62 6c 65 20 6f 72 20 61  inary table or a
2a960 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 2e 20   virtual table. 
2a970 20 54 68 65 72 65 20 75 73 65 64 20 74 6f 0a 2a   There used to.*
2a980 2a 20 62 65 20 61 20 73 65 70 61 72 61 74 65 20  * be a separate 
2a990 4f 50 5f 56 52 6f 77 69 64 20 6f 70 63 6f 64 65  OP_VRowid opcode
2a9a0 20 66 6f 72 20 75 73 65 20 77 69 74 68 20 76 69   for use with vi
2a9b0 72 74 75 61 6c 20 74 61 62 6c 65 73 2c 20 62 75  rtual tables, bu
2a9c0 74 20 74 68 69 73 0a 2a 2a 20 6f 6e 65 20 6f 70  t this.** one op
2a9d0 63 6f 64 65 20 6e 6f 77 20 77 6f 72 6b 73 20 66  code now works f
2a9e0 6f 72 20 62 6f 74 68 20 74 61 62 6c 65 20 74 79  or both table ty
2a9f0 70 65 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  pes..*/.case OP_
2aa00 52 6f 77 69 64 3a 20 7b 20 20 20 20 20 20 20 20  Rowid: {        
2aa10 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32           /* out2
2aa20 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73 6f 72   */.  VdbeCursor
2aa30 20 2a 70 43 3b 0a 20 20 69 36 34 20 76 3b 0a 20   *pC;.  i64 v;. 
2aa40 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20 2a 70   sqlite3_vtab *p
2aa50 56 74 61 62 3b 0a 20 20 63 6f 6e 73 74 20 73 71  Vtab;.  const sq
2aa60 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20 2a 70 4d  lite3_module *pM
2aa70 6f 64 75 6c 65 3b 0a 0a 20 20 70 4f 75 74 20 3d  odule;..  pOut =
2aa80 20 6f 75 74 32 50 72 65 72 65 6c 65 61 73 65 28   out2Prerelease(
2aa90 70 2c 20 70 4f 70 29 3b 0a 20 20 61 73 73 65 72  p, pOp);.  asser
2aaa0 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26  t( pOp->p1>=0 &&
2aab0 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72   pOp->p1<p->nCur
2aac0 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d  sor );.  pC = p-
2aad0 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b  >apCsr[pOp->p1];
2aae0 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30  .  assert( pC!=0
2aaf0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43   );.  assert( pC
2ab00 2d 3e 65 43 75 72 54 79 70 65 21 3d 43 55 52 54  ->eCurType!=CURT
2ab10 59 50 45 5f 50 53 45 55 44 4f 20 7c 7c 20 70 43  YPE_PSEUDO || pC
2ab20 2d 3e 6e 75 6c 6c 52 6f 77 20 29 3b 0a 20 20 69  ->nullRow );.  i
2ab30 66 28 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 29  f( pC->nullRow )
2ab40 7b 0a 20 20 20 20 70 4f 75 74 2d 3e 66 6c 61 67  {.    pOut->flag
2ab50 73 20 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20 20  s = MEM_Null;.  
2ab60 20 20 62 72 65 61 6b 3b 0a 20 20 7d 65 6c 73 65    break;.  }else
2ab70 20 69 66 28 20 70 43 2d 3e 64 65 66 65 72 72 65   if( pC->deferre
2ab80 64 4d 6f 76 65 74 6f 20 29 7b 0a 20 20 20 20 76  dMoveto ){.    v
2ab90 20 3d 20 70 43 2d 3e 6d 6f 76 65 74 6f 54 61 72   = pC->movetoTar
2aba0 67 65 74 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c  get;.#ifndef SQL
2abb0 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c  ITE_OMIT_VIRTUAL
2abc0 54 41 42 4c 45 0a 20 20 7d 65 6c 73 65 20 69 66  TABLE.  }else if
2abd0 28 20 70 43 2d 3e 65 43 75 72 54 79 70 65 3d 3d  ( pC->eCurType==
2abe0 43 55 52 54 59 50 45 5f 56 54 41 42 20 29 7b 0a  CURTYPE_VTAB ){.
2abf0 20 20 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e      assert( pC->
2ac00 75 63 2e 70 56 43 75 72 21 3d 30 20 29 3b 0a 20  uc.pVCur!=0 );. 
2ac10 20 20 20 70 56 74 61 62 20 3d 20 70 43 2d 3e 75     pVtab = pC->u
2ac20 63 2e 70 56 43 75 72 2d 3e 70 56 74 61 62 3b 0a  c.pVCur->pVtab;.
2ac30 20 20 20 20 70 4d 6f 64 75 6c 65 20 3d 20 70 56      pModule = pV
2ac40 74 61 62 2d 3e 70 4d 6f 64 75 6c 65 3b 0a 20 20  tab->pModule;.  
2ac50 20 20 61 73 73 65 72 74 28 20 70 4d 6f 64 75 6c    assert( pModul
2ac60 65 2d 3e 78 52 6f 77 69 64 20 29 3b 0a 20 20 20  e->xRowid );.   
2ac70 20 72 63 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78   rc = pModule->x
2ac80 52 6f 77 69 64 28 70 43 2d 3e 75 63 2e 70 56 43  Rowid(pC->uc.pVC
2ac90 75 72 2c 20 26 76 29 3b 0a 20 20 20 20 73 71 6c  ur, &v);.    sql
2aca0 69 74 65 33 56 74 61 62 49 6d 70 6f 72 74 45 72  ite3VtabImportEr
2acb0 72 6d 73 67 28 70 2c 20 70 56 74 61 62 29 3b 0a  rmsg(p, pVtab);.
2acc0 20 20 20 20 69 66 28 20 72 63 20 29 20 67 6f 74      if( rc ) got
2acd0 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
2ace0 72 72 6f 72 3b 0a 23 65 6e 64 69 66 20 2f 2a 20  rror;.#endif /* 
2acf0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54  SQLITE_OMIT_VIRT
2ad00 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 20 20 7d 65  UALTABLE */.  }e
2ad10 6c 73 65 7b 0a 20 20 20 20 61 73 73 65 72 74 28  lse{.    assert(
2ad20 20 70 43 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43   pC->eCurType==C
2ad30 55 52 54 59 50 45 5f 42 54 52 45 45 20 29 3b 0a  URTYPE_BTREE );.
2ad40 20 20 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e      assert( pC->
2ad50 75 63 2e 70 43 75 72 73 6f 72 21 3d 30 20 29 3b  uc.pCursor!=0 );
2ad60 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65  .    rc = sqlite
2ad70 33 56 64 62 65 43 75 72 73 6f 72 52 65 73 74 6f  3VdbeCursorResto
2ad80 72 65 28 70 43 29 3b 0a 20 20 20 20 69 66 28 20  re(pC);.    if( 
2ad90 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f  rc ) goto abort_
2ada0 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
2adb0 20 20 69 66 28 20 70 43 2d 3e 6e 75 6c 6c 52 6f    if( pC->nullRo
2adc0 77 20 29 7b 0a 20 20 20 20 20 20 70 4f 75 74 2d  w ){.      pOut-
2add0 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 4e 75 6c  >flags = MEM_Nul
2ade0 6c 3b 0a 20 20 20 20 20 20 62 72 65 61 6b 3b 0a  l;.      break;.
2adf0 20 20 20 20 7d 0a 20 20 20 20 76 20 3d 20 73 71      }.    v = sq
2ae00 6c 69 74 65 33 42 74 72 65 65 49 6e 74 65 67 65  lite3BtreeIntege
2ae10 72 4b 65 79 28 70 43 2d 3e 75 63 2e 70 43 75 72  rKey(pC->uc.pCur
2ae20 73 6f 72 29 3b 0a 20 20 7d 0a 20 20 70 4f 75 74  sor);.  }.  pOut
2ae30 2d 3e 75 2e 69 20 3d 20 76 3b 0a 20 20 62 72 65  ->u.i = v;.  bre
2ae40 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
2ae50 3a 20 4e 75 6c 6c 52 6f 77 20 50 31 20 2a 20 2a  : NullRow P1 * *
2ae60 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4d 6f 76 65 20   * *.**.** Move 
2ae70 74 68 65 20 63 75 72 73 6f 72 20 50 31 20 74 6f  the cursor P1 to
2ae80 20 61 20 6e 75 6c 6c 20 72 6f 77 2e 20 20 41 6e   a null row.  An
2ae90 79 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 70 65 72  y OP_Column oper
2aea0 61 74 69 6f 6e 73 0a 2a 2a 20 74 68 61 74 20 6f  ations.** that o
2aeb0 63 63 75 72 20 77 68 69 6c 65 20 74 68 65 20 63  ccur while the c
2aec0 75 72 73 6f 72 20 69 73 20 6f 6e 20 74 68 65 20  ursor is on the 
2aed0 6e 75 6c 6c 20 72 6f 77 20 77 69 6c 6c 20 61 6c  null row will al
2aee0 77 61 79 73 0a 2a 2a 20 77 72 69 74 65 20 61 20  ways.** write a 
2aef0 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  NULL..*/.case OP
2af00 5f 4e 75 6c 6c 52 6f 77 3a 20 7b 0a 20 20 56 64  _NullRow: {.  Vd
2af10 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 0a 20  beCursor *pC;.. 
2af20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
2af30 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70  >=0 && pOp->p1<p
2af40 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70  ->nCursor );.  p
2af50 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70  C = p->apCsr[pOp
2af60 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p1];.  assert(
2af70 20 70 43 21 3d 30 20 29 3b 0a 20 20 70 43 2d 3e   pC!=0 );.  pC->
2af80 6e 75 6c 6c 52 6f 77 20 3d 20 31 3b 0a 20 20 70  nullRow = 1;.  p
2af90 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d  C->cacheStatus =
2afa0 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20   CACHE_STALE;.  
2afb0 69 66 28 20 70 43 2d 3e 65 43 75 72 54 79 70 65  if( pC->eCurType
2afc0 3d 3d 43 55 52 54 59 50 45 5f 42 54 52 45 45 20  ==CURTYPE_BTREE 
2afd0 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  ){.    assert( p
2afe0 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 21 3d 30  C->uc.pCursor!=0
2aff0 20 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 42   );.    sqlite3B
2b000 74 72 65 65 43 6c 65 61 72 43 75 72 73 6f 72 28  treeClearCursor(
2b010 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 29 3b  pC->uc.pCursor);
2b020 0a 20 20 7d 0a 23 69 66 64 65 66 20 53 51 4c 49  .  }.#ifdef SQLI
2b030 54 45 5f 44 45 42 55 47 0a 20 20 69 66 28 20 70  TE_DEBUG.  if( p
2b040 43 2d 3e 73 65 65 6b 4f 70 3d 3d 30 20 29 20 70  C->seekOp==0 ) p
2b050 43 2d 3e 73 65 65 6b 4f 70 20 3d 20 4f 50 5f 4e  C->seekOp = OP_N
2b060 75 6c 6c 52 6f 77 3b 0a 23 65 6e 64 69 66 0a 20  ullRow;.#endif. 
2b070 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
2b080 63 6f 64 65 3a 20 53 65 65 6b 45 6e 64 20 50 31  code: SeekEnd P1
2b090 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 50   * * * *.**.** P
2b0a0 6f 73 69 74 69 6f 6e 20 63 75 72 73 6f 72 20 50  osition cursor P
2b0b0 31 20 61 74 20 74 68 65 20 65 6e 64 20 6f 66 20  1 at the end of 
2b0c0 74 68 65 20 62 74 72 65 65 20 66 6f 72 20 74 68  the btree for th
2b0d0 65 20 70 75 72 70 6f 73 65 20 6f 66 0a 2a 2a 20  e purpose of.** 
2b0e0 61 70 70 65 6e 64 69 6e 67 20 61 20 6e 65 77 20  appending a new 
2b0f0 65 6e 74 72 79 20 6f 6e 74 6f 20 74 68 65 20 62  entry onto the b
2b100 74 72 65 65 2e 0a 2a 2a 0a 2a 2a 20 49 74 20 69  tree..**.** It i
2b110 73 20 61 73 73 75 6d 65 64 20 74 68 61 74 20 74  s assumed that t
2b120 68 65 20 63 75 72 73 6f 72 20 69 73 20 75 73 65  he cursor is use
2b130 64 20 6f 6e 6c 79 20 66 6f 72 20 61 70 70 65 6e  d only for appen
2b140 64 69 6e 67 20 61 6e 64 20 73 6f 0a 2a 2a 20 69  ding and so.** i
2b150 66 20 74 68 65 20 63 75 72 73 6f 72 20 69 73 20  f the cursor is 
2b160 76 61 6c 69 64 2c 20 74 68 65 6e 20 74 68 65 20  valid, then the 
2b170 63 75 72 73 6f 72 20 6d 75 73 74 20 61 6c 72 65  cursor must alre
2b180 61 64 79 20 62 65 20 70 6f 69 6e 74 69 6e 67 0a  ady be pointing.
2b190 2a 2a 20 61 74 20 74 68 65 20 65 6e 64 20 6f 66  ** at the end of
2b1a0 20 74 68 65 20 62 74 72 65 65 20 61 6e 64 20 73   the btree and s
2b1b0 6f 20 6e 6f 20 63 68 61 6e 67 65 73 20 61 72 65  o no changes are
2b1c0 20 6d 61 64 65 20 74 6f 0a 2a 2a 20 74 68 65 20   made to.** the 
2b1d0 63 75 72 73 6f 72 2e 0a 2a 2f 0a 2f 2a 20 4f 70  cursor..*/./* Op
2b1e0 63 6f 64 65 3a 20 4c 61 73 74 20 50 31 20 50 32  code: Last P1 P2
2b1f0 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 65   * * *.**.** The
2b200 20 6e 65 78 74 20 75 73 65 20 6f 66 20 74 68 65   next use of the
2b210 20 52 6f 77 69 64 20 6f 72 20 43 6f 6c 75 6d 6e   Rowid or Column
2b220 20 6f 72 20 50 72 65 76 20 69 6e 73 74 72 75 63   or Prev instruc
2b230 74 69 6f 6e 20 66 6f 72 20 50 31 20 0a 2a 2a 20  tion for P1 .** 
2b240 77 69 6c 6c 20 72 65 66 65 72 20 74 6f 20 74 68  will refer to th
2b250 65 20 6c 61 73 74 20 65 6e 74 72 79 20 69 6e 20  e last entry in 
2b260 74 68 65 20 64 61 74 61 62 61 73 65 20 74 61 62  the database tab
2b270 6c 65 20 6f 72 20 69 6e 64 65 78 2e 0a 2a 2a 20  le or index..** 
2b280 49 66 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20  If the table or 
2b290 69 6e 64 65 78 20 69 73 20 65 6d 70 74 79 20 61  index is empty a
2b2a0 6e 64 20 50 32 3e 30 2c 20 74 68 65 6e 20 6a 75  nd P2>0, then ju
2b2b0 6d 70 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 74  mp immediately t
2b2c0 6f 20 50 32 2e 0a 2a 2a 20 49 66 20 50 32 20 69  o P2..** If P2 i
2b2d0 73 20 30 20 6f 72 20 69 66 20 74 68 65 20 74 61  s 0 or if the ta
2b2e0 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 69 73 20  ble or index is 
2b2f0 6e 6f 74 20 65 6d 70 74 79 2c 20 66 61 6c 6c 20  not empty, fall 
2b300 74 68 72 6f 75 67 68 0a 2a 2a 20 74 6f 20 74 68  through.** to th
2b310 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 69 6e 73 74  e following inst
2b320 72 75 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54  ruction..**.** T
2b330 68 69 73 20 6f 70 63 6f 64 65 20 6c 65 61 76 65  his opcode leave
2b340 73 20 74 68 65 20 63 75 72 73 6f 72 20 63 6f 6e  s the cursor con
2b350 66 69 67 75 72 65 64 20 74 6f 20 6d 6f 76 65 20  figured to move 
2b360 69 6e 20 72 65 76 65 72 73 65 20 6f 72 64 65 72  in reverse order
2b370 2c 0a 2a 2a 20 66 72 6f 6d 20 74 68 65 20 65 6e  ,.** from the en
2b380 64 20 74 6f 77 61 72 64 20 74 68 65 20 62 65 67  d toward the beg
2b390 69 6e 6e 69 6e 67 2e 20 20 49 6e 20 6f 74 68 65  inning.  In othe
2b3a0 72 20 77 6f 72 64 73 2c 20 74 68 65 20 63 75 72  r words, the cur
2b3b0 73 6f 72 20 69 73 0a 2a 2a 20 63 6f 6e 66 69 67  sor is.** config
2b3c0 75 72 65 64 20 74 6f 20 75 73 65 20 50 72 65 76  ured to use Prev
2b3d0 2c 20 6e 6f 74 20 4e 65 78 74 2e 0a 2a 2f 0a 63  , not Next..*/.c
2b3e0 61 73 65 20 4f 50 5f 53 65 65 6b 45 6e 64 3a 0a  ase OP_SeekEnd:.
2b3f0 63 61 73 65 20 4f 50 5f 4c 61 73 74 3a 20 7b 20  case OP_Last: { 
2b400 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a         /* jump *
2b410 2f 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a  /.  VdbeCursor *
2b420 70 43 3b 0a 20 20 42 74 43 75 72 73 6f 72 20 2a  pC;.  BtCursor *
2b430 70 43 72 73 72 3b 0a 20 20 69 6e 74 20 72 65 73  pCrsr;.  int res
2b440 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  ;..  assert( pOp
2b450 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e  ->p1>=0 && pOp->
2b460 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b  p1<p->nCursor );
2b470 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72  .  pC = p->apCsr
2b480 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
2b490 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20  ert( pC!=0 );.  
2b4a0 61 73 73 65 72 74 28 20 70 43 2d 3e 65 43 75 72  assert( pC->eCur
2b4b0 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f 42 54  Type==CURTYPE_BT
2b4c0 52 45 45 20 29 3b 0a 20 20 70 43 72 73 72 20 3d  REE );.  pCrsr =
2b4d0 20 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 3b   pC->uc.pCursor;
2b4e0 0a 20 20 72 65 73 20 3d 20 30 3b 0a 20 20 61 73  .  res = 0;.  as
2b4f0 73 65 72 74 28 20 70 43 72 73 72 21 3d 30 20 29  sert( pCrsr!=0 )
2b500 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ;.#ifdef SQLITE_
2b510 44 45 42 55 47 0a 20 20 70 43 2d 3e 73 65 65 6b  DEBUG.  pC->seek
2b520 4f 70 20 3d 20 70 4f 70 2d 3e 6f 70 63 6f 64 65  Op = pOp->opcode
2b530 3b 0a 23 65 6e 64 69 66 0a 20 20 69 66 28 20 70  ;.#endif.  if( p
2b540 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 53  Op->opcode==OP_S
2b550 65 65 6b 45 6e 64 20 29 7b 0a 20 20 20 20 61 73  eekEnd ){.    as
2b560 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3d 3d 30  sert( pOp->p2==0
2b570 20 29 3b 0a 20 20 20 20 70 43 2d 3e 73 65 65 6b   );.    pC->seek
2b580 52 65 73 75 6c 74 20 3d 20 2d 31 3b 0a 20 20 20  Result = -1;.   
2b590 20 69 66 28 20 73 71 6c 69 74 65 33 42 74 72 65   if( sqlite3Btre
2b5a0 65 43 75 72 73 6f 72 49 73 56 61 6c 69 64 4e 4e  eCursorIsValidNN
2b5b0 28 70 43 72 73 72 29 20 29 7b 0a 20 20 20 20 20  (pCrsr) ){.     
2b5c0 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 20 20   break;.    }.  
2b5d0 7d 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  }.  rc = sqlite3
2b5e0 42 74 72 65 65 4c 61 73 74 28 70 43 72 73 72 2c  BtreeLast(pCrsr,
2b5f0 20 26 72 65 73 29 3b 0a 20 20 70 43 2d 3e 6e 75   &res);.  pC->nu
2b600 6c 6c 52 6f 77 20 3d 20 28 75 38 29 72 65 73 3b  llRow = (u8)res;
2b610 0a 20 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d  .  pC->deferredM
2b620 6f 76 65 74 6f 20 3d 20 30 3b 0a 20 20 70 43 2d  oveto = 0;.  pC-
2b630 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d 20 43  >cacheStatus = C
2b640 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20 69 66  ACHE_STALE;.  if
2b650 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72  ( rc ) goto abor
2b660 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
2b670 20 20 69 66 28 20 70 4f 70 2d 3e 70 32 3e 30 20    if( pOp->p2>0 
2b680 29 7b 0a 20 20 20 20 56 64 62 65 42 72 61 6e 63  ){.    VdbeBranc
2b690 68 54 61 6b 65 6e 28 72 65 73 21 3d 30 2c 32 29  hTaken(res!=0,2)
2b6a0 3b 0a 20 20 20 20 69 66 28 20 72 65 73 20 29 20  ;.    if( res ) 
2b6b0 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b  goto jump_to_p2;
2b6c0 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
2b6d0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 66 53 6d  ./* Opcode: IfSm
2b6e0 61 6c 6c 65 72 20 50 31 20 50 32 20 50 33 20 2a  aller P1 P2 P3 *
2b6f0 20 2a 0a 2a 2a 0a 2a 2a 20 45 73 74 69 6d 61 74   *.**.** Estimat
2b700 65 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  e the number of 
2b710 72 6f 77 73 20 69 6e 20 74 68 65 20 74 61 62 6c  rows in the tabl
2b720 65 20 50 31 2e 20 20 4a 75 6d 70 20 74 6f 20 50  e P1.  Jump to P
2b730 32 20 69 66 20 74 68 61 74 0a 2a 2a 20 65 73 74  2 if that.** est
2b740 69 6d 61 74 65 20 69 73 20 6c 65 73 73 20 74 68  imate is less th
2b750 61 6e 20 61 70 70 72 6f 78 69 6d 61 74 65 6c 79  an approximately
2b760 20 32 2a 2a 28 30 2e 31 2a 50 33 29 2e 0a 2a 2f   2**(0.1*P3)..*/
2b770 0a 63 61 73 65 20 4f 50 5f 49 66 53 6d 61 6c 6c  .case OP_IfSmall
2b780 65 72 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20  er: {        /* 
2b790 6a 75 6d 70 20 2a 2f 0a 20 20 56 64 62 65 43 75  jump */.  VdbeCu
2b7a0 72 73 6f 72 20 2a 70 43 3b 0a 20 20 42 74 43 75  rsor *pC;.  BtCu
2b7b0 72 73 6f 72 20 2a 70 43 72 73 72 3b 0a 20 20 69  rsor *pCrsr;.  i
2b7c0 6e 74 20 72 65 73 3b 0a 20 20 69 36 34 20 73 7a  nt res;.  i64 sz
2b7d0 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  ;..  assert( pOp
2b7e0 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e  ->p1>=0 && pOp->
2b7f0 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b  p1<p->nCursor );
2b800 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72  .  pC = p->apCsr
2b810 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
2b820 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20  ert( pC!=0 );.  
2b830 70 43 72 73 72 20 3d 20 70 43 2d 3e 75 63 2e 70  pCrsr = pC->uc.p
2b840 43 75 72 73 6f 72 3b 0a 20 20 61 73 73 65 72 74  Cursor;.  assert
2b850 28 20 70 43 72 73 72 20 29 3b 0a 20 20 72 63 20  ( pCrsr );.  rc 
2b860 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 46 69  = sqlite3BtreeFi
2b870 72 73 74 28 70 43 72 73 72 2c 20 26 72 65 73 29  rst(pCrsr, &res)
2b880 3b 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f 74  ;.  if( rc ) got
2b890 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
2b8a0 72 72 6f 72 3b 0a 20 20 69 66 28 20 72 65 73 3d  rror;.  if( res=
2b8b0 3d 30 20 29 7b 0a 20 20 20 20 73 7a 20 3d 20 73  =0 ){.    sz = s
2b8c0 71 6c 69 74 65 33 42 74 72 65 65 52 6f 77 43 6f  qlite3BtreeRowCo
2b8d0 75 6e 74 45 73 74 28 70 43 72 73 72 29 3b 0a 20  untEst(pCrsr);. 
2b8e0 20 20 20 69 66 28 20 41 4c 57 41 59 53 28 73 7a     if( ALWAYS(sz
2b8f0 3e 3d 30 29 20 26 26 20 73 71 6c 69 74 65 33 4c  >=0) && sqlite3L
2b900 6f 67 45 73 74 28 28 75 36 34 29 73 7a 29 3c 70  ogEst((u64)sz)<p
2b910 4f 70 2d 3e 70 33 20 29 20 72 65 73 20 3d 20 31  Op->p3 ) res = 1
2b920 3b 0a 20 20 7d 0a 20 20 56 64 62 65 42 72 61 6e  ;.  }.  VdbeBran
2b930 63 68 54 61 6b 65 6e 28 72 65 73 21 3d 30 2c 32  chTaken(res!=0,2
2b940 29 3b 0a 20 20 69 66 28 20 72 65 73 20 29 20 67  );.  if( res ) g
2b950 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a  oto jump_to_p2;.
2b960 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 2f 2a 20    break;.}.../* 
2b970 4f 70 63 6f 64 65 3a 20 53 6f 72 74 65 72 53 6f  Opcode: SorterSo
2b980 72 74 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  rt P1 P2 * * *.*
2b990 2a 0a 2a 2a 20 41 66 74 65 72 20 61 6c 6c 20 72  *.** After all r
2b9a0 65 63 6f 72 64 73 20 68 61 76 65 20 62 65 65 6e  ecords have been
2b9b0 20 69 6e 73 65 72 74 65 64 20 69 6e 74 6f 20 74   inserted into t
2b9c0 68 65 20 53 6f 72 74 65 72 20 6f 62 6a 65 63 74  he Sorter object
2b9d0 0a 2a 2a 20 69 64 65 6e 74 69 66 69 65 64 20 62  .** identified b
2b9e0 79 20 50 31 2c 20 69 6e 76 6f 6b 65 20 74 68 69  y P1, invoke thi
2b9f0 73 20 6f 70 63 6f 64 65 20 74 6f 20 61 63 74 75  s opcode to actu
2ba00 61 6c 6c 79 20 64 6f 20 74 68 65 20 73 6f 72 74  ally do the sort
2ba10 69 6e 67 2e 0a 2a 2a 20 4a 75 6d 70 20 74 6f 20  ing..** Jump to 
2ba20 50 32 20 69 66 20 74 68 65 72 65 20 61 72 65 20  P2 if there are 
2ba30 6e 6f 20 72 65 63 6f 72 64 73 20 74 6f 20 62 65  no records to be
2ba40 20 73 6f 72 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 54   sorted..**.** T
2ba50 68 69 73 20 6f 70 63 6f 64 65 20 69 73 20 61 6e  his opcode is an
2ba60 20 61 6c 69 61 73 20 66 6f 72 20 4f 50 5f 53 6f   alias for OP_So
2ba70 72 74 20 61 6e 64 20 4f 50 5f 52 65 77 69 6e 64  rt and OP_Rewind
2ba80 20 74 68 61 74 20 69 73 20 75 73 65 64 0a 2a 2a   that is used.**
2ba90 20 66 6f 72 20 53 6f 72 74 65 72 20 6f 62 6a 65   for Sorter obje
2baa0 63 74 73 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64  cts..*/./* Opcod
2bab0 65 3a 20 53 6f 72 74 20 50 31 20 50 32 20 2a 20  e: Sort P1 P2 * 
2bac0 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f  * *.**.** This o
2bad0 70 63 6f 64 65 20 64 6f 65 73 20 65 78 61 63 74  pcode does exact
2bae0 6c 79 20 74 68 65 20 73 61 6d 65 20 74 68 69 6e  ly the same thin
2baf0 67 20 61 73 20 4f 50 5f 52 65 77 69 6e 64 20 65  g as OP_Rewind e
2bb00 78 63 65 70 74 20 74 68 61 74 0a 2a 2a 20 69 74  xcept that.** it
2bb10 20 69 6e 63 72 65 6d 65 6e 74 73 20 61 6e 20 75   increments an u
2bb20 6e 64 6f 63 75 6d 65 6e 74 65 64 20 67 6c 6f 62  ndocumented glob
2bb30 61 6c 20 76 61 72 69 61 62 6c 65 20 75 73 65 64  al variable used
2bb40 20 66 6f 72 20 74 65 73 74 69 6e 67 2e 0a 2a 2a   for testing..**
2bb50 0a 2a 2a 20 53 6f 72 74 69 6e 67 20 69 73 20 61  .** Sorting is a
2bb60 63 63 6f 6d 70 6c 69 73 68 65 64 20 62 79 20 77  ccomplished by w
2bb70 72 69 74 69 6e 67 20 72 65 63 6f 72 64 73 20 69  riting records i
2bb80 6e 74 6f 20 61 20 73 6f 72 74 69 6e 67 20 69 6e  nto a sorting in
2bb90 64 65 78 2c 0a 2a 2a 20 74 68 65 6e 20 72 65 77  dex,.** then rew
2bba0 69 6e 64 69 6e 67 20 74 68 61 74 20 69 6e 64 65  inding that inde
2bbb0 78 20 61 6e 64 20 70 6c 61 79 69 6e 67 20 69 74  x and playing it
2bbc0 20 62 61 63 6b 20 66 72 6f 6d 20 62 65 67 69 6e   back from begin
2bbd0 6e 69 6e 67 20 74 6f 0a 2a 2a 20 65 6e 64 2e 20  ning to.** end. 
2bbe0 20 57 65 20 75 73 65 20 74 68 65 20 4f 50 5f 53   We use the OP_S
2bbf0 6f 72 74 20 6f 70 63 6f 64 65 20 69 6e 73 74 65  ort opcode inste
2bc00 61 64 20 6f 66 20 4f 50 5f 52 65 77 69 6e 64 20  ad of OP_Rewind 
2bc10 74 6f 20 64 6f 20 74 68 65 0a 2a 2a 20 72 65 77  to do the.** rew
2bc20 69 6e 64 69 6e 67 20 73 6f 20 74 68 61 74 20 74  inding so that t
2bc30 68 65 20 67 6c 6f 62 61 6c 20 76 61 72 69 61 62  he global variab
2bc40 6c 65 20 77 69 6c 6c 20 62 65 20 69 6e 63 72 65  le will be incre
2bc50 6d 65 6e 74 65 64 20 61 6e 64 0a 2a 2a 20 72 65  mented and.** re
2bc60 67 72 65 73 73 69 6f 6e 20 74 65 73 74 73 20 63  gression tests c
2bc70 61 6e 20 64 65 74 65 72 6d 69 6e 65 20 77 68 65  an determine whe
2bc80 74 68 65 72 20 6f 72 20 6e 6f 74 20 74 68 65 20  ther or not the 
2bc90 6f 70 74 69 6d 69 7a 65 72 20 69 73 0a 2a 2a 20  optimizer is.** 
2bca0 63 6f 72 72 65 63 74 6c 79 20 6f 70 74 69 6d 69  correctly optimi
2bcb0 7a 69 6e 67 20 6f 75 74 20 73 6f 72 74 73 2e 0a  zing out sorts..
2bcc0 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 6f 72 74 65  */.case OP_Sorte
2bcd0 72 53 6f 72 74 3a 20 20 20 20 2f 2a 20 6a 75 6d  rSort:    /* jum
2bce0 70 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 6f 72  p */.case OP_Sor
2bcf0 74 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a  t: {        /* j
2bd00 75 6d 70 20 2a 2f 0a 23 69 66 64 65 66 20 53 51  ump */.#ifdef SQ
2bd10 4c 49 54 45 5f 54 45 53 54 0a 20 20 73 71 6c 69  LITE_TEST.  sqli
2bd20 74 65 33 5f 73 6f 72 74 5f 63 6f 75 6e 74 2b 2b  te3_sort_count++
2bd30 3b 0a 20 20 73 71 6c 69 74 65 33 5f 73 65 61 72  ;.  sqlite3_sear
2bd40 63 68 5f 63 6f 75 6e 74 2d 2d 3b 0a 23 65 6e 64  ch_count--;.#end
2bd50 69 66 0a 20 20 70 2d 3e 61 43 6f 75 6e 74 65 72  if.  p->aCounter
2bd60 5b 53 51 4c 49 54 45 5f 53 54 4d 54 53 54 41 54  [SQLITE_STMTSTAT
2bd70 55 53 5f 53 4f 52 54 5d 2b 2b 3b 0a 20 20 2f 2a  US_SORT]++;.  /*
2bd80 20 46 61 6c 6c 20 74 68 72 6f 75 67 68 20 69 6e   Fall through in
2bd90 74 6f 20 4f 50 5f 52 65 77 69 6e 64 20 2a 2f 0a  to OP_Rewind */.
2bda0 7d 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65 77  }./* Opcode: Rew
2bdb0 69 6e 64 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  ind P1 P2 * * *.
2bdc0 2a 2a 0a 2a 2a 20 54 68 65 20 6e 65 78 74 20 75  **.** The next u
2bdd0 73 65 20 6f 66 20 74 68 65 20 52 6f 77 69 64 20  se of the Rowid 
2bde0 6f 72 20 43 6f 6c 75 6d 6e 20 6f 72 20 4e 65 78  or Column or Nex
2bdf0 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 66 6f  t instruction fo
2be00 72 20 50 31 20 0a 2a 2a 20 77 69 6c 6c 20 72 65  r P1 .** will re
2be10 66 65 72 20 74 6f 20 74 68 65 20 66 69 72 73 74  fer to the first
2be20 20 65 6e 74 72 79 20 69 6e 20 74 68 65 20 64 61   entry in the da
2be30 74 61 62 61 73 65 20 74 61 62 6c 65 20 6f 72 20  tabase table or 
2be40 69 6e 64 65 78 2e 0a 2a 2a 20 49 66 20 74 68 65  index..** If the
2be50 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20   table or index 
2be60 69 73 20 65 6d 70 74 79 2c 20 6a 75 6d 70 20 69  is empty, jump i
2be70 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f 20 50 32  mmediately to P2
2be80 2e 0a 2a 2a 20 49 66 20 74 68 65 20 74 61 62 6c  ..** If the tabl
2be90 65 20 6f 72 20 69 6e 64 65 78 20 69 73 20 6e 6f  e or index is no
2bea0 74 20 65 6d 70 74 79 2c 20 66 61 6c 6c 20 74 68  t empty, fall th
2beb0 72 6f 75 67 68 20 74 6f 20 74 68 65 20 66 6f 6c  rough to the fol
2bec0 6c 6f 77 69 6e 67 20 0a 2a 2a 20 69 6e 73 74 72  lowing .** instr
2bed0 75 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68  uction..**.** Th
2bee0 69 73 20 6f 70 63 6f 64 65 20 6c 65 61 76 65 73  is opcode leaves
2bef0 20 74 68 65 20 63 75 72 73 6f 72 20 63 6f 6e 66   the cursor conf
2bf00 69 67 75 72 65 64 20 74 6f 20 6d 6f 76 65 20 69  igured to move i
2bf10 6e 20 66 6f 72 77 61 72 64 20 6f 72 64 65 72 2c  n forward order,
2bf20 0a 2a 2a 20 66 72 6f 6d 20 74 68 65 20 62 65 67  .** from the beg
2bf30 69 6e 6e 69 6e 67 20 74 6f 77 61 72 64 20 74 68  inning toward th
2bf40 65 20 65 6e 64 2e 20 20 49 6e 20 6f 74 68 65 72  e end.  In other
2bf50 20 77 6f 72 64 73 2c 20 74 68 65 20 63 75 72 73   words, the curs
2bf60 6f 72 20 69 73 0a 2a 2a 20 63 6f 6e 66 69 67 75  or is.** configu
2bf70 72 65 64 20 74 6f 20 75 73 65 20 4e 65 78 74 2c  red to use Next,
2bf80 20 6e 6f 74 20 50 72 65 76 2e 0a 2a 2f 0a 63 61   not Prev..*/.ca
2bf90 73 65 20 4f 50 5f 52 65 77 69 6e 64 3a 20 7b 20  se OP_Rewind: { 
2bfa0 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a         /* jump *
2bfb0 2f 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a  /.  VdbeCursor *
2bfc0 70 43 3b 0a 20 20 42 74 43 75 72 73 6f 72 20 2a  pC;.  BtCursor *
2bfd0 70 43 72 73 72 3b 0a 20 20 69 6e 74 20 72 65 73  pCrsr;.  int res
2bfe0 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  ;..  assert( pOp
2bff0 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e  ->p1>=0 && pOp->
2c000 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b  p1<p->nCursor );
2c010 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
2c020 70 35 3d 3d 30 20 29 3b 0a 20 20 70 43 20 3d 20  p5==0 );.  pC = 
2c030 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31  p->apCsr[pOp->p1
2c040 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21  ];.  assert( pC!
2c050 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
2c060 69 73 53 6f 72 74 65 72 28 70 43 29 3d 3d 28 70  isSorter(pC)==(p
2c070 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 53  Op->opcode==OP_S
2c080 6f 72 74 65 72 53 6f 72 74 29 20 29 3b 0a 20 20  orterSort) );.  
2c090 72 65 73 20 3d 20 31 3b 0a 23 69 66 64 65 66 20  res = 1;.#ifdef 
2c0a0 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 70  SQLITE_DEBUG.  p
2c0b0 43 2d 3e 73 65 65 6b 4f 70 20 3d 20 4f 50 5f 52  C->seekOp = OP_R
2c0c0 65 77 69 6e 64 3b 0a 23 65 6e 64 69 66 0a 20 20  ewind;.#endif.  
2c0d0 69 66 28 20 69 73 53 6f 72 74 65 72 28 70 43 29  if( isSorter(pC)
2c0e0 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c   ){.    rc = sql
2c0f0 69 74 65 33 56 64 62 65 53 6f 72 74 65 72 52 65  ite3VdbeSorterRe
2c100 77 69 6e 64 28 70 43 2c 20 26 72 65 73 29 3b 0a  wind(pC, &res);.
2c110 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73 73    }else{.    ass
2c120 65 72 74 28 20 70 43 2d 3e 65 43 75 72 54 79 70  ert( pC->eCurTyp
2c130 65 3d 3d 43 55 52 54 59 50 45 5f 42 54 52 45 45  e==CURTYPE_BTREE
2c140 20 29 3b 0a 20 20 20 20 70 43 72 73 72 20 3d 20   );.    pCrsr = 
2c150 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 3b 0a  pC->uc.pCursor;.
2c160 20 20 20 20 61 73 73 65 72 74 28 20 70 43 72 73      assert( pCrs
2c170 72 20 29 3b 0a 20 20 20 20 72 63 20 3d 20 73 71  r );.    rc = sq
2c180 6c 69 74 65 33 42 74 72 65 65 46 69 72 73 74 28  lite3BtreeFirst(
2c190 70 43 72 73 72 2c 20 26 72 65 73 29 3b 0a 20 20  pCrsr, &res);.  
2c1a0 20 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f    pC->deferredMo
2c1b0 76 65 74 6f 20 3d 20 30 3b 0a 20 20 20 20 70 43  veto = 0;.    pC
2c1c0 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d 20  ->cacheStatus = 
2c1d0 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20 7d  CACHE_STALE;.  }
2c1e0 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f  .  if( rc ) goto
2c1f0 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
2c200 72 6f 72 3b 0a 20 20 70 43 2d 3e 6e 75 6c 6c 52  ror;.  pC->nullR
2c210 6f 77 20 3d 20 28 75 38 29 72 65 73 3b 0a 20 20  ow = (u8)res;.  
2c220 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e  assert( pOp->p2>
2c230 30 20 26 26 20 70 4f 70 2d 3e 70 32 3c 70 2d 3e  0 && pOp->p2<p->
2c240 6e 4f 70 20 29 3b 0a 20 20 56 64 62 65 42 72 61  nOp );.  VdbeBra
2c250 6e 63 68 54 61 6b 65 6e 28 72 65 73 21 3d 30 2c  nchTaken(res!=0,
2c260 32 29 3b 0a 20 20 69 66 28 20 72 65 73 20 29 20  2);.  if( res ) 
2c270 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b  goto jump_to_p2;
2c280 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
2c290 4f 70 63 6f 64 65 3a 20 4e 65 78 74 20 50 31 20  Opcode: Next P1 
2c2a0 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a  P2 P3 P4 P5.**.*
2c2b0 2a 20 41 64 76 61 6e 63 65 20 63 75 72 73 6f 72  * Advance cursor
2c2c0 20 50 31 20 73 6f 20 74 68 61 74 20 69 74 20 70   P1 so that it p
2c2d0 6f 69 6e 74 73 20 74 6f 20 74 68 65 20 6e 65 78  oints to the nex
2c2e0 74 20 6b 65 79 2f 64 61 74 61 20 70 61 69 72 20  t key/data pair 
2c2f0 69 6e 20 69 74 73 0a 2a 2a 20 74 61 62 6c 65 20  in its.** table 
2c300 6f 72 20 69 6e 64 65 78 2e 20 20 49 66 20 74 68  or index.  If th
2c310 65 72 65 20 61 72 65 20 6e 6f 20 6d 6f 72 65 20  ere are no more 
2c320 6b 65 79 2f 76 61 6c 75 65 20 70 61 69 72 73 20  key/value pairs 
2c330 74 68 65 6e 20 66 61 6c 6c 20 74 68 72 6f 75 67  then fall throug
2c340 68 0a 2a 2a 20 74 6f 20 74 68 65 20 66 6f 6c 6c  h.** to the foll
2c350 6f 77 69 6e 67 20 69 6e 73 74 72 75 63 74 69 6f  owing instructio
2c360 6e 2e 20 20 42 75 74 20 69 66 20 74 68 65 20 63  n.  But if the c
2c370 75 72 73 6f 72 20 61 64 76 61 6e 63 65 20 77 61  ursor advance wa
2c380 73 20 73 75 63 63 65 73 73 66 75 6c 2c 0a 2a 2a  s successful,.**
2c390 20 6a 75 6d 70 20 69 6d 6d 65 64 69 61 74 65 6c   jump immediatel
2c3a0 79 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54  y to P2..**.** T
2c3b0 68 65 20 4e 65 78 74 20 6f 70 63 6f 64 65 20 69  he Next opcode i
2c3c0 73 20 6f 6e 6c 79 20 76 61 6c 69 64 20 66 6f 6c  s only valid fol
2c3d0 6c 6f 77 69 6e 67 20 61 6e 20 53 65 65 6b 47 54  lowing an SeekGT
2c3e0 2c 20 53 65 65 6b 47 45 2c 20 6f 72 0a 2a 2a 20  , SeekGE, or.** 
2c3f0 4f 50 5f 52 65 77 69 6e 64 20 6f 70 63 6f 64 65  OP_Rewind opcode
2c400 20 75 73 65 64 20 74 6f 20 70 6f 73 69 74 69 6f   used to positio
2c410 6e 20 74 68 65 20 63 75 72 73 6f 72 2e 20 20 4e  n the cursor.  N
2c420 65 78 74 20 69 73 20 6e 6f 74 20 61 6c 6c 6f 77  ext is not allow
2c430 65 64 0a 2a 2a 20 74 6f 20 66 6f 6c 6c 6f 77 20  ed.** to follow 
2c440 53 65 65 6b 4c 54 2c 20 53 65 65 6b 4c 45 2c 20  SeekLT, SeekLE, 
2c450 6f 72 20 4f 50 5f 4c 61 73 74 2e 0a 2a 2a 0a 2a  or OP_Last..**.*
2c460 2a 20 54 68 65 20 50 31 20 63 75 72 73 6f 72 20  * The P1 cursor 
2c470 6d 75 73 74 20 62 65 20 66 6f 72 20 61 20 72 65  must be for a re
2c480 61 6c 20 74 61 62 6c 65 2c 20 6e 6f 74 20 61 20  al table, not a 
2c490 70 73 65 75 64 6f 2d 74 61 62 6c 65 2e 20 20 50  pseudo-table.  P
2c4a0 31 20 6d 75 73 74 20 68 61 76 65 0a 2a 2a 20 62  1 must have.** b
2c4b0 65 65 6e 20 6f 70 65 6e 65 64 20 70 72 69 6f 72  een opened prior
2c4c0 20 74 6f 20 74 68 69 73 20 6f 70 63 6f 64 65 20   to this opcode 
2c4d0 6f 72 20 74 68 65 20 70 72 6f 67 72 61 6d 20 77  or the program w
2c4e0 69 6c 6c 20 73 65 67 66 61 75 6c 74 2e 0a 2a 2a  ill segfault..**
2c4f0 0a 2a 2a 20 54 68 65 20 50 33 20 76 61 6c 75 65  .** The P3 value
2c500 20 69 73 20 61 20 68 69 6e 74 20 74 6f 20 74 68   is a hint to th
2c510 65 20 62 74 72 65 65 20 69 6d 70 6c 65 6d 65 6e  e btree implemen
2c520 74 61 74 69 6f 6e 2e 20 49 66 20 50 33 3d 3d 31  tation. If P3==1
2c530 2c 20 74 68 61 74 0a 2a 2a 20 6d 65 61 6e 73 20  , that.** means 
2c540 50 31 20 69 73 20 61 6e 20 53 51 4c 20 69 6e 64  P1 is an SQL ind
2c550 65 78 20 61 6e 64 20 74 68 61 74 20 74 68 69 73  ex and that this
2c560 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 63 6f 75   instruction cou
2c570 6c 64 20 68 61 76 65 20 62 65 65 6e 0a 2a 2a 20  ld have been.** 
2c580 6f 6d 69 74 74 65 64 20 69 66 20 74 68 61 74 20  omitted if that 
2c590 69 6e 64 65 78 20 68 61 64 20 62 65 65 6e 20 75  index had been u
2c5a0 6e 69 71 75 65 2e 20 20 50 33 20 69 73 20 75 73  nique.  P3 is us
2c5b0 75 61 6c 6c 79 20 30 2e 20 20 50 33 20 69 73 0a  ually 0.  P3 is.
2c5c0 2a 2a 20 61 6c 77 61 79 73 20 65 69 74 68 65 72  ** always either
2c5d0 20 30 20 6f 72 20 31 2e 0a 2a 2a 0a 2a 2a 20 50   0 or 1..**.** P
2c5e0 34 20 69 73 20 61 6c 77 61 79 73 20 6f 66 20 74  4 is always of t
2c5f0 79 70 65 20 50 34 5f 41 44 56 41 4e 43 45 2e 20  ype P4_ADVANCE. 
2c600 54 68 65 20 66 75 6e 63 74 69 6f 6e 20 70 6f 69  The function poi
2c610 6e 74 65 72 20 70 6f 69 6e 74 73 20 74 6f 0a 2a  nter points to.*
2c620 2a 20 73 71 6c 69 74 65 33 42 74 72 65 65 4e 65  * sqlite3BtreeNe
2c630 78 74 28 29 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50  xt()..**.** If P
2c640 35 20 69 73 20 70 6f 73 69 74 69 76 65 20 61 6e  5 is positive an
2c650 64 20 74 68 65 20 6a 75 6d 70 20 69 73 20 74 61  d the jump is ta
2c660 6b 65 6e 2c 20 74 68 65 6e 20 65 76 65 6e 74 20  ken, then event 
2c670 63 6f 75 6e 74 65 72 0a 2a 2a 20 6e 75 6d 62 65  counter.** numbe
2c680 72 20 50 35 2d 31 20 69 6e 20 74 68 65 20 70 72  r P5-1 in the pr
2c690 65 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74  epared statement
2c6a0 20 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 2e   is incremented.
2c6b0 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a  .**.** See also:
2c6c0 20 50 72 65 76 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f   Prev.*/./* Opco
2c6d0 64 65 3a 20 50 72 65 76 20 50 31 20 50 32 20 50  de: Prev P1 P2 P
2c6e0 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 42 61  3 P4 P5.**.** Ba
2c6f0 63 6b 20 75 70 20 63 75 72 73 6f 72 20 50 31 20  ck up cursor P1 
2c700 73 6f 20 74 68 61 74 20 69 74 20 70 6f 69 6e 74  so that it point
2c710 73 20 74 6f 20 74 68 65 20 70 72 65 76 69 6f 75  s to the previou
2c720 73 20 6b 65 79 2f 64 61 74 61 20 70 61 69 72 20  s key/data pair 
2c730 69 6e 20 69 74 73 0a 2a 2a 20 74 61 62 6c 65 20  in its.** table 
2c740 6f 72 20 69 6e 64 65 78 2e 20 20 49 66 20 74 68  or index.  If th
2c750 65 72 65 20 69 73 20 6e 6f 20 70 72 65 76 69 6f  ere is no previo
2c760 75 73 20 6b 65 79 2f 76 61 6c 75 65 20 70 61 69  us key/value pai
2c770 72 73 20 74 68 65 6e 20 66 61 6c 6c 20 74 68 72  rs then fall thr
2c780 6f 75 67 68 0a 2a 2a 20 74 6f 20 74 68 65 20 66  ough.** to the f
2c790 6f 6c 6c 6f 77 69 6e 67 20 69 6e 73 74 72 75 63  ollowing instruc
2c7a0 74 69 6f 6e 2e 20 20 42 75 74 20 69 66 20 74 68  tion.  But if th
2c7b0 65 20 63 75 72 73 6f 72 20 62 61 63 6b 75 70 20  e cursor backup 
2c7c0 77 61 73 20 73 75 63 63 65 73 73 66 75 6c 2c 0a  was successful,.
2c7d0 2a 2a 20 6a 75 6d 70 20 69 6d 6d 65 64 69 61 74  ** jump immediat
2c7e0 65 6c 79 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a  ely to P2..**.**
2c7f0 0a 2a 2a 20 54 68 65 20 50 72 65 76 20 6f 70 63  .** The Prev opc
2c800 6f 64 65 20 69 73 20 6f 6e 6c 79 20 76 61 6c 69  ode is only vali
2c810 64 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 6e 20 53  d following an S
2c820 65 65 6b 4c 54 2c 20 53 65 65 6b 4c 45 2c 20 6f  eekLT, SeekLE, o
2c830 72 0a 2a 2a 20 4f 50 5f 4c 61 73 74 20 6f 70 63  r.** OP_Last opc
2c840 6f 64 65 20 75 73 65 64 20 74 6f 20 70 6f 73 69  ode used to posi
2c850 74 69 6f 6e 20 74 68 65 20 63 75 72 73 6f 72 2e  tion the cursor.
2c860 20 20 50 72 65 76 20 69 73 20 6e 6f 74 20 61 6c    Prev is not al
2c870 6c 6f 77 65 64 0a 2a 2a 20 74 6f 20 66 6f 6c 6c  lowed.** to foll
2c880 6f 77 20 53 65 65 6b 47 54 2c 20 53 65 65 6b 47  ow SeekGT, SeekG
2c890 45 2c 20 6f 72 20 4f 50 5f 52 65 77 69 6e 64 2e  E, or OP_Rewind.
2c8a0 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 31 20 63 75  .**.** The P1 cu
2c8b0 72 73 6f 72 20 6d 75 73 74 20 62 65 20 66 6f 72  rsor must be for
2c8c0 20 61 20 72 65 61 6c 20 74 61 62 6c 65 2c 20 6e   a real table, n
2c8d0 6f 74 20 61 20 70 73 65 75 64 6f 2d 74 61 62 6c  ot a pseudo-tabl
2c8e0 65 2e 20 20 49 66 20 50 31 20 69 73 0a 2a 2a 20  e.  If P1 is.** 
2c8f0 6e 6f 74 20 6f 70 65 6e 20 74 68 65 6e 20 74 68  not open then th
2c900 65 20 62 65 68 61 76 69 6f 72 20 69 73 20 75 6e  e behavior is un
2c910 64 65 66 69 6e 65 64 2e 0a 2a 2a 0a 2a 2a 20 54  defined..**.** T
2c920 68 65 20 50 33 20 76 61 6c 75 65 20 69 73 20 61  he P3 value is a
2c930 20 68 69 6e 74 20 74 6f 20 74 68 65 20 62 74 72   hint to the btr
2c940 65 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f  ee implementatio
2c950 6e 2e 20 49 66 20 50 33 3d 3d 31 2c 20 74 68 61  n. If P3==1, tha
2c960 74 0a 2a 2a 20 6d 65 61 6e 73 20 50 31 20 69 73  t.** means P1 is
2c970 20 61 6e 20 53 51 4c 20 69 6e 64 65 78 20 61 6e   an SQL index an
2c980 64 20 74 68 61 74 20 74 68 69 73 20 69 6e 73 74  d that this inst
2c990 72 75 63 74 69 6f 6e 20 63 6f 75 6c 64 20 68 61  ruction could ha
2c9a0 76 65 20 62 65 65 6e 0a 2a 2a 20 6f 6d 69 74 74  ve been.** omitt
2c9b0 65 64 20 69 66 20 74 68 61 74 20 69 6e 64 65 78  ed if that index
2c9c0 20 68 61 64 20 62 65 65 6e 20 75 6e 69 71 75 65   had been unique
2c9d0 2e 20 20 50 33 20 69 73 20 75 73 75 61 6c 6c 79  .  P3 is usually
2c9e0 20 30 2e 20 20 50 33 20 69 73 0a 2a 2a 20 61 6c   0.  P3 is.** al
2c9f0 77 61 79 73 20 65 69 74 68 65 72 20 30 20 6f 72  ways either 0 or
2ca00 20 31 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20   1..**.** P4 is 
2ca10 61 6c 77 61 79 73 20 6f 66 20 74 79 70 65 20 50  always of type P
2ca20 34 5f 41 44 56 41 4e 43 45 2e 20 54 68 65 20 66  4_ADVANCE. The f
2ca30 75 6e 63 74 69 6f 6e 20 70 6f 69 6e 74 65 72 20  unction pointer 
2ca40 70 6f 69 6e 74 73 20 74 6f 0a 2a 2a 20 73 71 6c  points to.** sql
2ca50 69 74 65 33 42 74 72 65 65 50 72 65 76 69 6f 75  ite3BtreePreviou
2ca60 73 28 29 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35  s()..**.** If P5
2ca70 20 69 73 20 70 6f 73 69 74 69 76 65 20 61 6e 64   is positive and
2ca80 20 74 68 65 20 6a 75 6d 70 20 69 73 20 74 61 6b   the jump is tak
2ca90 65 6e 2c 20 74 68 65 6e 20 65 76 65 6e 74 20 63  en, then event c
2caa0 6f 75 6e 74 65 72 0a 2a 2a 20 6e 75 6d 62 65 72  ounter.** number
2cab0 20 50 35 2d 31 20 69 6e 20 74 68 65 20 70 72 65   P5-1 in the pre
2cac0 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74 20  pared statement 
2cad0 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 2e 0a  is incremented..
2cae0 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 6f  */./* Opcode: So
2caf0 72 74 65 72 4e 65 78 74 20 50 31 20 50 32 20 2a  rterNext P1 P2 *
2cb00 20 2a 20 50 35 0a 2a 2a 0a 2a 2a 20 54 68 69 73   * P5.**.** This
2cb10 20 6f 70 63 6f 64 65 20 77 6f 72 6b 73 20 6a 75   opcode works ju
2cb20 73 74 20 6c 69 6b 65 20 4f 50 5f 4e 65 78 74 20  st like OP_Next 
2cb30 65 78 63 65 70 74 20 74 68 61 74 20 50 31 20 6d  except that P1 m
2cb40 75 73 74 20 62 65 20 61 0a 2a 2a 20 73 6f 72 74  ust be a.** sort
2cb50 65 72 20 6f 62 6a 65 63 74 20 66 6f 72 20 77 68  er object for wh
2cb60 69 63 68 20 74 68 65 20 4f 50 5f 53 6f 72 74 65  ich the OP_Sorte
2cb70 72 53 6f 72 74 20 6f 70 63 6f 64 65 20 68 61 73  rSort opcode has
2cb80 20 62 65 65 6e 0a 2a 2a 20 69 6e 76 6f 6b 65 64   been.** invoked
2cb90 2e 20 20 54 68 69 73 20 6f 70 63 6f 64 65 20 61  .  This opcode a
2cba0 64 76 61 6e 63 65 73 20 74 68 65 20 63 75 72 73  dvances the curs
2cbb0 6f 72 20 74 6f 20 74 68 65 20 6e 65 78 74 20 73  or to the next s
2cbc0 6f 72 74 65 64 0a 2a 2a 20 72 65 63 6f 72 64 2c  orted.** record,
2cbd0 20 6f 72 20 6a 75 6d 70 73 20 74 6f 20 50 32 20   or jumps to P2 
2cbe0 69 66 20 74 68 65 72 65 20 61 72 65 20 6e 6f 20  if there are no 
2cbf0 6d 6f 72 65 20 73 6f 72 74 65 64 20 72 65 63 6f  more sorted reco
2cc00 72 64 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  rds..*/.case OP_
2cc10 53 6f 72 74 65 72 4e 65 78 74 3a 20 7b 20 20 2f  SorterNext: {  /
2cc20 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 56 64 62 65  * jump */.  Vdbe
2cc30 43 75 72 73 6f 72 20 2a 70 43 3b 0a 0a 20 20 70  Cursor *pC;..  p
2cc40 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70  C = p->apCsr[pOp
2cc50 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p1];.  assert(
2cc60 20 69 73 53 6f 72 74 65 72 28 70 43 29 20 29 3b   isSorter(pC) );
2cc70 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56  .  rc = sqlite3V
2cc80 64 62 65 53 6f 72 74 65 72 4e 65 78 74 28 64 62  dbeSorterNext(db
2cc90 2c 20 70 43 29 3b 0a 20 20 67 6f 74 6f 20 6e 65  , pC);.  goto ne
2cca0 78 74 5f 74 61 69 6c 3b 0a 63 61 73 65 20 4f 50  xt_tail;.case OP
2ccb0 5f 50 72 65 76 3a 20 20 20 20 20 20 20 20 20 20  _Prev:          
2ccc0 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 63 61 73 65 20  /* jump */.case 
2ccd0 4f 50 5f 4e 65 78 74 3a 20 20 20 20 20 20 20 20  OP_Next:        
2cce0 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 61    /* jump */.  a
2ccf0 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d  ssert( pOp->p1>=
2cd00 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e  0 && pOp->p1<p->
2cd10 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 61 73 73  nCursor );.  ass
2cd20 65 72 74 28 20 70 4f 70 2d 3e 70 35 3c 41 72 72  ert( pOp->p5<Arr
2cd30 61 79 53 69 7a 65 28 70 2d 3e 61 43 6f 75 6e 74  aySize(p->aCount
2cd40 65 72 29 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d  er) );.  pC = p-
2cd50 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b  >apCsr[pOp->p1];
2cd60 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30  .  assert( pC!=0
2cd70 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43   );.  assert( pC
2cd80 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f  ->deferredMoveto
2cd90 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  ==0 );.  assert(
2cda0 20 70 43 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43   pC->eCurType==C
2cdb0 55 52 54 59 50 45 5f 42 54 52 45 45 20 29 3b 0a  URTYPE_BTREE );.
2cdc0 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f    assert( pOp->o
2cdd0 70 63 6f 64 65 21 3d 4f 50 5f 4e 65 78 74 20 7c  pcode!=OP_Next |
2cde0 7c 20 70 4f 70 2d 3e 70 34 2e 78 41 64 76 61 6e  | pOp->p4.xAdvan
2cdf0 63 65 3d 3d 73 71 6c 69 74 65 33 42 74 72 65 65  ce==sqlite3Btree
2ce00 4e 65 78 74 20 29 3b 0a 20 20 61 73 73 65 72 74  Next );.  assert
2ce10 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 21 3d 4f  ( pOp->opcode!=O
2ce20 50 5f 50 72 65 76 20 7c 7c 20 70 4f 70 2d 3e 70  P_Prev || pOp->p
2ce30 34 2e 78 41 64 76 61 6e 63 65 3d 3d 73 71 6c 69  4.xAdvance==sqli
2ce40 74 65 33 42 74 72 65 65 50 72 65 76 69 6f 75 73  te3BtreePrevious
2ce50 20 29 3b 0a 0a 20 20 2f 2a 20 54 68 65 20 4e 65   );..  /* The Ne
2ce60 78 74 20 6f 70 63 6f 64 65 20 69 73 20 6f 6e 6c  xt opcode is onl
2ce70 79 20 75 73 65 64 20 61 66 74 65 72 20 53 65 65  y used after See
2ce80 6b 47 54 2c 20 53 65 65 6b 47 45 2c 20 52 65 77  kGT, SeekGE, Rew
2ce90 69 6e 64 2c 20 61 6e 64 20 46 6f 75 6e 64 2e 0a  ind, and Found..
2cea0 20 20 2a 2a 20 54 68 65 20 50 72 65 76 20 6f 70    ** The Prev op
2ceb0 63 6f 64 65 20 69 73 20 6f 6e 6c 79 20 75 73 65  code is only use
2cec0 64 20 61 66 74 65 72 20 53 65 65 6b 4c 54 2c 20  d after SeekLT, 
2ced0 53 65 65 6b 4c 45 2c 20 61 6e 64 20 4c 61 73 74  SeekLE, and Last
2cee0 2e 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70  . */.  assert( p
2cef0 4f 70 2d 3e 6f 70 63 6f 64 65 21 3d 4f 50 5f 4e  Op->opcode!=OP_N
2cf00 65 78 74 0a 20 20 20 20 20 20 20 7c 7c 20 70 43  ext.       || pC
2cf10 2d 3e 73 65 65 6b 4f 70 3d 3d 4f 50 5f 53 65 65  ->seekOp==OP_See
2cf20 6b 47 54 20 7c 7c 20 70 43 2d 3e 73 65 65 6b 4f  kGT || pC->seekO
2cf30 70 3d 3d 4f 50 5f 53 65 65 6b 47 45 0a 20 20 20  p==OP_SeekGE.   
2cf40 20 20 20 20 7c 7c 20 70 43 2d 3e 73 65 65 6b 4f      || pC->seekO
2cf50 70 3d 3d 4f 50 5f 52 65 77 69 6e 64 20 7c 7c 20  p==OP_Rewind || 
2cf60 70 43 2d 3e 73 65 65 6b 4f 70 3d 3d 4f 50 5f 46  pC->seekOp==OP_F
2cf70 6f 75 6e 64 20 0a 20 20 20 20 20 20 20 7c 7c 20  ound .       || 
2cf80 70 43 2d 3e 73 65 65 6b 4f 70 3d 3d 4f 50 5f 4e  pC->seekOp==OP_N
2cf90 75 6c 6c 52 6f 77 7c 7c 20 70 43 2d 3e 73 65 65  ullRow|| pC->see
2cfa0 6b 4f 70 3d 3d 4f 50 5f 53 65 65 6b 52 6f 77 69  kOp==OP_SeekRowi
2cfb0 64 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f  d);.  assert( pO
2cfc0 70 2d 3e 6f 70 63 6f 64 65 21 3d 4f 50 5f 50 72  p->opcode!=OP_Pr
2cfd0 65 76 0a 20 20 20 20 20 20 20 7c 7c 20 70 43 2d  ev.       || pC-
2cfe0 3e 73 65 65 6b 4f 70 3d 3d 4f 50 5f 53 65 65 6b  >seekOp==OP_Seek
2cff0 4c 54 20 7c 7c 20 70 43 2d 3e 73 65 65 6b 4f 70  LT || pC->seekOp
2d000 3d 3d 4f 50 5f 53 65 65 6b 4c 45 0a 20 20 20 20  ==OP_SeekLE.    
2d010 20 20 20 7c 7c 20 70 43 2d 3e 73 65 65 6b 4f 70     || pC->seekOp
2d020 3d 3d 4f 50 5f 4c 61 73 74 20 0a 20 20 20 20 20  ==OP_Last .     
2d030 20 20 7c 7c 20 70 43 2d 3e 73 65 65 6b 4f 70 3d    || pC->seekOp=
2d040 3d 4f 50 5f 4e 75 6c 6c 52 6f 77 29 3b 0a 0a 20  =OP_NullRow);.. 
2d050 20 72 63 20 3d 20 70 4f 70 2d 3e 70 34 2e 78 41   rc = pOp->p4.xA
2d060 64 76 61 6e 63 65 28 70 43 2d 3e 75 63 2e 70 43  dvance(pC->uc.pC
2d070 75 72 73 6f 72 2c 20 70 4f 70 2d 3e 70 33 29 3b  ursor, pOp->p3);
2d080 0a 6e 65 78 74 5f 74 61 69 6c 3a 0a 20 20 70 43  .next_tail:.  pC
2d090 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d 20  ->cacheStatus = 
2d0a0 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20 56  CACHE_STALE;.  V
2d0b0 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 72  dbeBranchTaken(r
2d0c0 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 2c 32 29 3b  c==SQLITE_OK,2);
2d0d0 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54  .  if( rc==SQLIT
2d0e0 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 70 43 2d 3e  E_OK ){.    pC->
2d0f0 6e 75 6c 6c 52 6f 77 20 3d 20 30 3b 0a 20 20 20  nullRow = 0;.   
2d100 20 70 2d 3e 61 43 6f 75 6e 74 65 72 5b 70 4f 70   p->aCounter[pOp
2d110 2d 3e 70 35 5d 2b 2b 3b 0a 23 69 66 64 65 66 20  ->p5]++;.#ifdef 
2d120 53 51 4c 49 54 45 5f 54 45 53 54 0a 20 20 20 20  SQLITE_TEST.    
2d130 73 71 6c 69 74 65 33 5f 73 65 61 72 63 68 5f 63  sqlite3_search_c
2d140 6f 75 6e 74 2b 2b 3b 0a 23 65 6e 64 69 66 0a 20  ount++;.#endif. 
2d150 20 20 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f     goto jump_to_
2d160 70 32 5f 61 6e 64 5f 63 68 65 63 6b 5f 66 6f 72  p2_and_check_for
2d170 5f 69 6e 74 65 72 72 75 70 74 3b 0a 20 20 7d 0a  _interrupt;.  }.
2d180 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45    if( rc!=SQLITE
2d190 5f 44 4f 4e 45 20 29 20 67 6f 74 6f 20 61 62 6f  _DONE ) goto abo
2d1a0 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
2d1b0 0a 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f  .  rc = SQLITE_O
2d1c0 4b 3b 0a 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77  K;.  pC->nullRow
2d1d0 20 3d 20 31 3b 0a 20 20 67 6f 74 6f 20 63 68 65   = 1;.  goto che
2d1e0 63 6b 5f 66 6f 72 5f 69 6e 74 65 72 72 75 70 74  ck_for_interrupt
2d1f0 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
2d200 49 64 78 49 6e 73 65 72 74 20 50 31 20 50 32 20  IdxInsert P1 P2 
2d210 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f  P3 P4 P5.** Syno
2d220 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50 32 5d 0a  psis: key=r[P2].
2d230 2a 2a 0a 2a 2a 20 52 65 67 69 73 74 65 72 20 50  **.** Register P
2d240 32 20 68 6f 6c 64 73 20 61 6e 20 53 51 4c 20 69  2 holds an SQL i
2d250 6e 64 65 78 20 6b 65 79 20 6d 61 64 65 20 75 73  ndex key made us
2d260 69 6e 67 20 74 68 65 0a 2a 2a 20 4d 61 6b 65 52  ing the.** MakeR
2d270 65 63 6f 72 64 20 69 6e 73 74 72 75 63 74 69 6f  ecord instructio
2d280 6e 73 2e 20 20 54 68 69 73 20 6f 70 63 6f 64 65  ns.  This opcode
2d290 20 77 72 69 74 65 73 20 74 68 61 74 20 6b 65 79   writes that key
2d2a0 0a 2a 2a 20 69 6e 74 6f 20 74 68 65 20 69 6e 64  .** into the ind
2d2b0 65 78 20 50 31 2e 20 20 44 61 74 61 20 66 6f 72  ex P1.  Data for
2d2c0 20 74 68 65 20 65 6e 74 72 79 20 69 73 20 6e 69   the entry is ni
2d2d0 6c 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 34 20 69  l..**.** If P4 i
2d2e0 73 20 6e 6f 74 20 7a 65 72 6f 2c 20 74 68 65 6e  s not zero, then
2d2f0 20 69 74 20 69 73 20 74 68 65 20 6e 75 6d 62 65   it is the numbe
2d300 72 20 6f 66 20 76 61 6c 75 65 73 20 69 6e 20 74  r of values in t
2d310 68 65 20 75 6e 70 61 63 6b 65 64 0a 2a 2a 20 6b  he unpacked.** k
2d320 65 79 20 6f 66 20 72 65 67 28 50 32 29 2e 20 20  ey of reg(P2).  
2d330 49 6e 20 74 68 61 74 20 63 61 73 65 2c 20 50 33  In that case, P3
2d340 20 69 73 20 74 68 65 20 69 6e 64 65 78 20 6f 66   is the index of
2d350 20 74 68 65 20 66 69 72 73 74 20 72 65 67 69 73   the first regis
2d360 74 65 72 0a 2a 2a 20 66 6f 72 20 74 68 65 20 75  ter.** for the u
2d370 6e 70 61 63 6b 65 64 20 6b 65 79 2e 20 20 54 68  npacked key.  Th
2d380 65 20 61 76 61 69 6c 61 62 69 6c 69 74 79 20 6f  e availability o
2d390 66 20 74 68 65 20 75 6e 70 61 63 6b 65 64 20 6b  f the unpacked k
2d3a0 65 79 20 63 61 6e 20 73 6f 6d 65 74 69 6d 65 73  ey can sometimes
2d3b0 0a 2a 2a 20 62 65 20 61 6e 20 6f 70 74 69 6d 69  .** be an optimi
2d3c0 7a 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 49 66  zation..**.** If
2d3d0 20 50 35 20 68 61 73 20 74 68 65 20 4f 50 46 4c   P5 has the OPFL
2d3e0 41 47 5f 41 50 50 45 4e 44 20 62 69 74 20 73 65  AG_APPEND bit se
2d3f0 74 2c 20 74 68 61 74 20 69 73 20 61 20 68 69 6e  t, that is a hin
2d400 74 20 74 6f 20 74 68 65 20 62 2d 74 72 65 65 20  t to the b-tree 
2d410 6c 61 79 65 72 0a 2a 2a 20 74 68 61 74 20 74 68  layer.** that th
2d420 69 73 20 69 6e 73 65 72 74 20 69 73 20 6c 69 6b  is insert is lik
2d430 65 6c 79 20 74 6f 20 62 65 20 61 6e 20 61 70 70  ely to be an app
2d440 65 6e 64 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35  end..**.** If P5
2d450 20 68 61 73 20 74 68 65 20 4f 50 46 4c 41 47 5f   has the OPFLAG_
2d460 4e 43 48 41 4e 47 45 20 62 69 74 20 73 65 74 2c  NCHANGE bit set,
2d470 20 74 68 65 6e 20 74 68 65 20 63 68 61 6e 67 65   then the change
2d480 20 63 6f 75 6e 74 65 72 20 69 73 0a 2a 2a 20 69   counter is.** i
2d490 6e 63 72 65 6d 65 6e 74 65 64 20 62 79 20 74 68  ncremented by th
2d4a0 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20  is instruction. 
2d4b0 20 49 66 20 74 68 65 20 4f 50 46 4c 41 47 5f 4e   If the OPFLAG_N
2d4c0 43 48 41 4e 47 45 20 62 69 74 20 69 73 20 63 6c  CHANGE bit is cl
2d4d0 65 61 72 2c 0a 2a 2a 20 74 68 65 6e 20 74 68 65  ear,.** then the
2d4e0 20 63 68 61 6e 67 65 20 63 6f 75 6e 74 65 72 20   change counter 
2d4f0 69 73 20 75 6e 63 68 61 6e 67 65 64 2e 0a 2a 2a  is unchanged..**
2d500 0a 2a 2a 20 49 66 20 74 68 65 20 4f 50 46 4c 41  .** If the OPFLA
2d510 47 5f 55 53 45 53 45 45 4b 52 45 53 55 4c 54 20  G_USESEEKRESULT 
2d520 66 6c 61 67 20 6f 66 20 50 35 20 69 73 20 73 65  flag of P5 is se
2d530 74 2c 20 74 68 65 20 69 6d 70 6c 65 6d 65 6e 74  t, the implement
2d540 61 74 69 6f 6e 20 6d 69 67 68 74 0a 2a 2a 20 72  ation might.** r
2d550 75 6e 20 66 61 73 74 65 72 20 62 79 20 61 76 6f  un faster by avo
2d560 69 64 69 6e 67 20 61 6e 20 75 6e 6e 65 63 65 73  iding an unneces
2d570 73 61 72 79 20 73 65 65 6b 20 6f 6e 20 63 75 72  sary seek on cur
2d580 73 6f 72 20 50 31 2e 20 20 48 6f 77 65 76 65 72  sor P1.  However
2d590 2c 0a 2a 2a 20 74 68 65 20 4f 50 46 4c 41 47 5f  ,.** the OPFLAG_
2d5a0 55 53 45 53 45 45 4b 52 45 53 55 4c 54 20 66 6c  USESEEKRESULT fl
2d5b0 61 67 20 6d 75 73 74 20 6f 6e 6c 79 20 62 65 20  ag must only be 
2d5c0 73 65 74 20 69 66 20 74 68 65 72 65 20 68 61 76  set if there hav
2d5d0 65 20 62 65 65 6e 20 6e 6f 20 70 72 69 6f 72 0a  e been no prior.
2d5e0 2a 2a 20 73 65 65 6b 73 20 6f 6e 20 74 68 65 20  ** seeks on the 
2d5f0 63 75 72 73 6f 72 20 6f 72 20 69 66 20 74 68 65  cursor or if the
2d600 20 6d 6f 73 74 20 72 65 63 65 6e 74 20 73 65 65   most recent see
2d610 6b 20 75 73 65 64 20 61 20 6b 65 79 20 65 71 75  k used a key equ
2d620 69 76 61 6c 65 6e 74 0a 2a 2a 20 74 6f 20 50 32  ivalent.** to P2
2d630 2e 20 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 6e  . .**.** This in
2d640 73 74 72 75 63 74 69 6f 6e 20 6f 6e 6c 79 20 77  struction only w
2d650 6f 72 6b 73 20 66 6f 72 20 69 6e 64 69 63 65 73  orks for indices
2d660 2e 20 20 54 68 65 20 65 71 75 69 76 61 6c 65 6e  .  The equivalen
2d670 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 0a 2a 2a  t instruction.**
2d680 20 66 6f 72 20 74 61 62 6c 65 73 20 69 73 20 4f   for tables is O
2d690 50 5f 49 6e 73 65 72 74 2e 0a 2a 2f 0a 2f 2a 20  P_Insert..*/./* 
2d6a0 4f 70 63 6f 64 65 3a 20 53 6f 72 74 65 72 49 6e  Opcode: SorterIn
2d6b0 73 65 72 74 20 50 31 20 50 32 20 2a 20 2a 20 2a  sert P1 P2 * * *
2d6c0 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65  .** Synopsis: ke
2d6d0 79 3d 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20 52 65  y=r[P2].**.** Re
2d6e0 67 69 73 74 65 72 20 50 32 20 68 6f 6c 64 73 20  gister P2 holds 
2d6f0 61 6e 20 53 51 4c 20 69 6e 64 65 78 20 6b 65 79  an SQL index key
2d700 20 6d 61 64 65 20 75 73 69 6e 67 20 74 68 65 0a   made using the.
2d710 2a 2a 20 4d 61 6b 65 52 65 63 6f 72 64 20 69 6e  ** MakeRecord in
2d720 73 74 72 75 63 74 69 6f 6e 73 2e 20 20 54 68 69  structions.  Thi
2d730 73 20 6f 70 63 6f 64 65 20 77 72 69 74 65 73 20  s opcode writes 
2d740 74 68 61 74 20 6b 65 79 0a 2a 2a 20 69 6e 74 6f  that key.** into
2d750 20 74 68 65 20 73 6f 72 74 65 72 20 50 31 2e 20   the sorter P1. 
2d760 20 44 61 74 61 20 66 6f 72 20 74 68 65 20 65 6e   Data for the en
2d770 74 72 79 20 69 73 20 6e 69 6c 2e 0a 2a 2f 0a 63  try is nil..*/.c
2d780 61 73 65 20 4f 50 5f 53 6f 72 74 65 72 49 6e 73  ase OP_SorterIns
2d790 65 72 74 3a 20 20 20 20 20 20 20 2f 2a 20 69 6e  ert:       /* in
2d7a0 32 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 64 78  2 */.case OP_Idx
2d7b0 49 6e 73 65 72 74 3a 20 7b 20 20 20 20 20 20 20  Insert: {       
2d7c0 20 2f 2a 20 69 6e 32 20 2a 2f 0a 20 20 56 64 62   /* in2 */.  Vdb
2d7d0 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 42  eCursor *pC;.  B
2d7e0 74 72 65 65 50 61 79 6c 6f 61 64 20 78 3b 0a 0a  treePayload x;..
2d7f0 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
2d800 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c  1>=0 && pOp->p1<
2d810 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20  p->nCursor );.  
2d820 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f  pC = p->apCsr[pO
2d830 70 2d 3e 70 31 5d 3b 0a 20 20 73 71 6c 69 74 65  p->p1];.  sqlite
2d840 33 56 64 62 65 49 6e 63 72 57 72 69 74 65 43 6f  3VdbeIncrWriteCo
2d850 75 6e 74 65 72 28 70 2c 20 70 43 29 3b 0a 20 20  unter(p, pC);.  
2d860 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b  assert( pC!=0 );
2d870 0a 20 20 61 73 73 65 72 74 28 20 69 73 53 6f 72  .  assert( isSor
2d880 74 65 72 28 70 43 29 3d 3d 28 70 4f 70 2d 3e 6f  ter(pC)==(pOp->o
2d890 70 63 6f 64 65 3d 3d 4f 50 5f 53 6f 72 74 65 72  pcode==OP_Sorter
2d8a0 49 6e 73 65 72 74 29 20 29 3b 0a 20 20 70 49 6e  Insert) );.  pIn
2d8b0 32 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  2 = &aMem[pOp->p
2d8c0 32 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 49  2];.  assert( pI
2d8d0 6e 32 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  n2->flags & MEM_
2d8e0 42 6c 6f 62 20 29 3b 0a 20 20 69 66 28 20 70 4f  Blob );.  if( pO
2d8f0 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 4e  p->p5 & OPFLAG_N
2d900 43 48 41 4e 47 45 20 29 20 70 2d 3e 6e 43 68 61  CHANGE ) p->nCha
2d910 6e 67 65 2b 2b 3b 0a 20 20 61 73 73 65 72 74 28  nge++;.  assert(
2d920 20 70 43 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43   pC->eCurType==C
2d930 55 52 54 59 50 45 5f 42 54 52 45 45 20 7c 7c 20  URTYPE_BTREE || 
2d940 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  pOp->opcode==OP_
2d950 53 6f 72 74 65 72 49 6e 73 65 72 74 20 29 3b 0a  SorterInsert );.
2d960 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73    assert( pC->is
2d970 54 61 62 6c 65 3d 3d 30 20 29 3b 0a 20 20 72 63  Table==0 );.  rc
2d980 20 3d 20 45 78 70 61 6e 64 42 6c 6f 62 28 70 49   = ExpandBlob(pI
2d990 6e 32 29 3b 0a 20 20 69 66 28 20 72 63 20 29 20  n2);.  if( rc ) 
2d9a0 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
2d9b0 6f 5f 65 72 72 6f 72 3b 0a 20 20 69 66 28 20 70  o_error;.  if( p
2d9c0 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 53  Op->opcode==OP_S
2d9d0 6f 72 74 65 72 49 6e 73 65 72 74 20 29 7b 0a 20  orterInsert ){. 
2d9e0 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56     rc = sqlite3V
2d9f0 64 62 65 53 6f 72 74 65 72 57 72 69 74 65 28 70  dbeSorterWrite(p
2da00 43 2c 20 70 49 6e 32 29 3b 0a 20 20 7d 65 6c 73  C, pIn2);.  }els
2da10 65 7b 0a 20 20 20 20 78 2e 6e 4b 65 79 20 3d 20  e{.    x.nKey = 
2da20 70 49 6e 32 2d 3e 6e 3b 0a 20 20 20 20 78 2e 70  pIn2->n;.    x.p
2da30 4b 65 79 20 3d 20 70 49 6e 32 2d 3e 7a 3b 0a 20  Key = pIn2->z;. 
2da40 20 20 20 78 2e 61 4d 65 6d 20 3d 20 61 4d 65 6d     x.aMem = aMem
2da50 20 2b 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 20 20   + pOp->p3;.    
2da60 78 2e 6e 4d 65 6d 20 3d 20 28 75 31 36 29 70 4f  x.nMem = (u16)pO
2da70 70 2d 3e 70 34 2e 69 3b 0a 20 20 20 20 72 63 20  p->p4.i;.    rc 
2da80 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 49 6e  = sqlite3BtreeIn
2da90 73 65 72 74 28 70 43 2d 3e 75 63 2e 70 43 75 72  sert(pC->uc.pCur
2daa0 73 6f 72 2c 20 26 78 2c 0a 20 20 20 20 20 20 20  sor, &x,.       
2dab0 20 20 28 70 4f 70 2d 3e 70 35 20 26 20 28 4f 50    (pOp->p5 & (OP
2dac0 46 4c 41 47 5f 41 50 50 45 4e 44 7c 4f 50 46 4c  FLAG_APPEND|OPFL
2dad0 41 47 5f 53 41 56 45 50 4f 53 49 54 49 4f 4e 29  AG_SAVEPOSITION)
2dae0 29 2c 20 0a 20 20 20 20 20 20 20 20 28 28 70 4f  ), .        ((pO
2daf0 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 55  p->p5 & OPFLAG_U
2db00 53 45 53 45 45 4b 52 45 53 55 4c 54 29 20 3f 20  SESEEKRESULT) ? 
2db10 70 43 2d 3e 73 65 65 6b 52 65 73 75 6c 74 20 3a  pC->seekResult :
2db20 20 30 29 0a 20 20 20 20 20 20 20 20 29 3b 0a 20   0).        );. 
2db30 20 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 64     assert( pC->d
2db40 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 3d 3d 30  eferredMoveto==0
2db50 20 29 3b 0a 20 20 20 20 70 43 2d 3e 63 61 63 68   );.    pC->cach
2db60 65 53 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f  eStatus = CACHE_
2db70 53 54 41 4c 45 3b 0a 20 20 7d 0a 20 20 69 66 28  STALE;.  }.  if(
2db80 20 72 63 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f   rc) goto abort_
2db90 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
2dba0 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
2dbb0 6f 64 65 3a 20 49 64 78 44 65 6c 65 74 65 20 50  ode: IdxDelete P
2dbc0 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53  1 P2 P3 * *.** S
2dbd0 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50  ynopsis: key=r[P
2dbe0 32 40 50 33 5d 0a 2a 2a 0a 2a 2a 20 54 68 65 20  2@P3].**.** The 
2dbf0 63 6f 6e 74 65 6e 74 20 6f 66 20 50 33 20 72 65  content of P3 re
2dc00 67 69 73 74 65 72 73 20 73 74 61 72 74 69 6e 67  gisters starting
2dc10 20 61 74 20 72 65 67 69 73 74 65 72 20 50 32 20   at register P2 
2dc20 66 6f 72 6d 0a 2a 2a 20 61 6e 20 75 6e 70 61 63  form.** an unpac
2dc30 6b 65 64 20 69 6e 64 65 78 20 6b 65 79 2e 20 54  ked index key. T
2dc40 68 69 73 20 6f 70 63 6f 64 65 20 72 65 6d 6f 76  his opcode remov
2dc50 65 73 20 74 68 61 74 20 65 6e 74 72 79 20 66 72  es that entry fr
2dc60 6f 6d 20 74 68 65 20 0a 2a 2a 20 69 6e 64 65 78  om the .** index
2dc70 20 6f 70 65 6e 65 64 20 62 79 20 63 75 72 73 6f   opened by curso
2dc80 72 20 50 31 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  r P1..*/.case OP
2dc90 5f 49 64 78 44 65 6c 65 74 65 3a 20 7b 0a 20 20  _IdxDelete: {.  
2dca0 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a  VdbeCursor *pC;.
2dcb0 20 20 42 74 43 75 72 73 6f 72 20 2a 70 43 72 73    BtCursor *pCrs
2dcc0 72 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a 20 20  r;.  int res;.  
2dcd0 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 20 72  UnpackedRecord r
2dce0 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  ;..  assert( pOp
2dcf0 2d 3e 70 33 3e 30 20 29 3b 0a 20 20 61 73 73 65  ->p3>0 );.  asse
2dd00 72 74 28 20 70 4f 70 2d 3e 70 32 3e 30 20 26 26  rt( pOp->p2>0 &&
2dd10 20 70 4f 70 2d 3e 70 32 2b 70 4f 70 2d 3e 70 33   pOp->p2+pOp->p3
2dd20 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70  <=(p->nMem+1 - p
2dd30 2d 3e 6e 43 75 72 73 6f 72 29 2b 31 20 29 3b 0a  ->nCursor)+1 );.
2dd40 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
2dd50 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c  1>=0 && pOp->p1<
2dd60 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20  p->nCursor );.  
2dd70 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f  pC = p->apCsr[pO
2dd80 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74  p->p1];.  assert
2dd90 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 61 73 73  ( pC!=0 );.  ass
2dda0 65 72 74 28 20 70 43 2d 3e 65 43 75 72 54 79 70  ert( pC->eCurTyp
2ddb0 65 3d 3d 43 55 52 54 59 50 45 5f 42 54 52 45 45  e==CURTYPE_BTREE
2ddc0 20 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62   );.  sqlite3Vdb
2ddd0 65 49 6e 63 72 57 72 69 74 65 43 6f 75 6e 74 65  eIncrWriteCounte
2dde0 72 28 70 2c 20 70 43 29 3b 0a 20 20 70 43 72 73  r(p, pC);.  pCrs
2ddf0 72 20 3d 20 70 43 2d 3e 75 63 2e 70 43 75 72 73  r = pC->uc.pCurs
2de00 6f 72 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43  or;.  assert( pC
2de10 72 73 72 21 3d 30 20 29 3b 0a 20 20 61 73 73 65  rsr!=0 );.  asse
2de20 72 74 28 20 70 4f 70 2d 3e 70 35 3d 3d 30 20 29  rt( pOp->p5==0 )
2de30 3b 0a 20 20 72 2e 70 4b 65 79 49 6e 66 6f 20 3d  ;.  r.pKeyInfo =
2de40 20 70 43 2d 3e 70 4b 65 79 49 6e 66 6f 3b 0a 20   pC->pKeyInfo;. 
2de50 20 72 2e 6e 46 69 65 6c 64 20 3d 20 28 75 31 36   r.nField = (u16
2de60 29 70 4f 70 2d 3e 70 33 3b 0a 20 20 72 2e 64 65  )pOp->p3;.  r.de
2de70 66 61 75 6c 74 5f 72 63 20 3d 20 30 3b 0a 20 20  fault_rc = 0;.  
2de80 72 2e 61 4d 65 6d 20 3d 20 26 61 4d 65 6d 5b 70  r.aMem = &aMem[p
2de90 4f 70 2d 3e 70 32 5d 3b 0a 20 20 72 63 20 3d 20  Op->p2];.  rc = 
2dea0 73 71 6c 69 74 65 33 42 74 72 65 65 4d 6f 76 65  sqlite3BtreeMove
2deb0 74 6f 55 6e 70 61 63 6b 65 64 28 70 43 72 73 72  toUnpacked(pCrsr
2dec0 2c 20 26 72 2c 20 30 2c 20 30 2c 20 26 72 65 73  , &r, 0, 0, &res
2ded0 29 3b 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f  );.  if( rc ) go
2dee0 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
2def0 65 72 72 6f 72 3b 0a 20 20 69 66 28 20 72 65 73  error;.  if( res
2df00 3d 3d 30 20 29 7b 0a 20 20 20 20 72 63 20 3d 20  ==0 ){.    rc = 
2df10 73 71 6c 69 74 65 33 42 74 72 65 65 44 65 6c 65  sqlite3BtreeDele
2df20 74 65 28 70 43 72 73 72 2c 20 42 54 52 45 45 5f  te(pCrsr, BTREE_
2df30 41 55 58 44 45 4c 45 54 45 29 3b 0a 20 20 20 20  AUXDELETE);.    
2df40 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62  if( rc ) goto ab
2df50 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
2df60 3b 0a 20 20 7d 0a 20 20 61 73 73 65 72 74 28 20  ;.  }.  assert( 
2df70 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65  pC->deferredMove
2df80 74 6f 3d 3d 30 20 29 3b 0a 20 20 70 43 2d 3e 63  to==0 );.  pC->c
2df90 61 63 68 65 53 74 61 74 75 73 20 3d 20 43 41 43  acheStatus = CAC
2dfa0 48 45 5f 53 54 41 4c 45 3b 0a 20 20 70 43 2d 3e  HE_STALE;.  pC->
2dfb0 73 65 65 6b 52 65 73 75 6c 74 20 3d 20 30 3b 0a  seekResult = 0;.
2dfc0 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
2dfd0 70 63 6f 64 65 3a 20 44 65 66 65 72 72 65 64 53  pcode: DeferredS
2dfe0 65 65 6b 20 50 31 20 2a 20 50 33 20 50 34 20 2a  eek P1 * P3 P4 *
2dff0 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 4d 6f  .** Synopsis: Mo
2e000 76 65 20 50 33 20 74 6f 20 50 31 2e 72 6f 77 69  ve P3 to P1.rowi
2e010 64 20 69 66 20 6e 65 65 64 65 64 0a 2a 2a 0a 2a  d if needed.**.*
2e020 2a 20 50 31 20 69 73 20 61 6e 20 6f 70 65 6e 20  * P1 is an open 
2e030 69 6e 64 65 78 20 63 75 72 73 6f 72 20 61 6e 64  index cursor and
2e040 20 50 33 20 69 73 20 61 20 63 75 72 73 6f 72 20   P3 is a cursor 
2e050 6f 6e 20 74 68 65 20 63 6f 72 72 65 73 70 6f 6e  on the correspon
2e060 64 69 6e 67 0a 2a 2a 20 74 61 62 6c 65 2e 20 20  ding.** table.  
2e070 54 68 69 73 20 6f 70 63 6f 64 65 20 64 6f 65 73  This opcode does
2e080 20 61 20 64 65 66 65 72 72 65 64 20 73 65 65 6b   a deferred seek
2e090 20 6f 66 20 74 68 65 20 50 33 20 74 61 62 6c 65   of the P3 table
2e0a0 20 63 75 72 73 6f 72 0a 2a 2a 20 74 6f 20 74 68   cursor.** to th
2e0b0 65 20 72 6f 77 20 74 68 61 74 20 63 6f 72 72 65  e row that corre
2e0c0 73 70 6f 6e 64 73 20 74 6f 20 74 68 65 20 63 75  sponds to the cu
2e0d0 72 72 65 6e 74 20 72 6f 77 20 6f 66 20 50 31 2e  rrent row of P1.
2e0e0 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 73 20 61  .**.** This is a
2e0f0 20 64 65 66 65 72 72 65 64 20 73 65 65 6b 2e 20   deferred seek. 
2e100 20 4e 6f 74 68 69 6e 67 20 61 63 74 75 61 6c 6c   Nothing actuall
2e110 79 20 68 61 70 70 65 6e 73 20 75 6e 74 69 6c 0a  y happens until.
2e120 2a 2a 20 74 68 65 20 63 75 72 73 6f 72 20 69 73  ** the cursor is
2e130 20 75 73 65 64 20 74 6f 20 72 65 61 64 20 61 20   used to read a 
2e140 72 65 63 6f 72 64 2e 20 20 54 68 61 74 20 77 61  record.  That wa
2e150 79 2c 20 69 66 20 6e 6f 20 72 65 61 64 73 0a 2a  y, if no reads.*
2e160 2a 20 6f 63 63 75 72 2c 20 6e 6f 20 75 6e 6e 65  * occur, no unne
2e170 63 65 73 73 61 72 79 20 49 2f 4f 20 68 61 70 70  cessary I/O happ
2e180 65 6e 73 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 6d 61  ens..**.** P4 ma
2e190 79 20 62 65 20 61 6e 20 61 72 72 61 79 20 6f 66  y be an array of
2e1a0 20 69 6e 74 65 67 65 72 73 20 28 74 79 70 65 20   integers (type 
2e1b0 50 34 5f 49 4e 54 41 52 52 41 59 29 20 63 6f 6e  P4_INTARRAY) con
2e1c0 74 61 69 6e 69 6e 67 0a 2a 2a 20 6f 6e 65 20 65  taining.** one e
2e1d0 6e 74 72 79 20 66 6f 72 20 65 61 63 68 20 63 6f  ntry for each co
2e1e0 6c 75 6d 6e 20 69 6e 20 74 68 65 20 50 33 20 74  lumn in the P3 t
2e1f0 61 62 6c 65 2e 20 20 49 66 20 61 72 72 61 79 20  able.  If array 
2e200 65 6e 74 72 79 20 61 28 69 29 0a 2a 2a 20 69 73  entry a(i).** is
2e210 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65 6e 20   non-zero, then 
2e220 72 65 61 64 69 6e 67 20 63 6f 6c 75 6d 6e 20 61  reading column a
2e230 28 69 29 2d 31 20 66 72 6f 6d 20 63 75 72 73 6f  (i)-1 from curso
2e240 72 20 50 33 20 69 73 20 0a 2a 2a 20 65 71 75 69  r P3 is .** equi
2e250 76 61 6c 65 6e 74 20 74 6f 20 70 65 72 66 6f 72  valent to perfor
2e260 6d 69 6e 67 20 74 68 65 20 64 65 66 65 72 72 65  ming the deferre
2e270 64 20 73 65 65 6b 20 61 6e 64 20 74 68 65 6e 20  d seek and then 
2e280 72 65 61 64 69 6e 67 20 63 6f 6c 75 6d 6e 20 69  reading column i
2e290 20 0a 2a 2a 20 66 72 6f 6d 20 50 31 2e 20 20 54   .** from P1.  T
2e2a0 68 69 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20  his information 
2e2b0 69 73 20 73 74 6f 72 65 64 20 69 6e 20 50 33 20  is stored in P3 
2e2c0 61 6e 64 20 75 73 65 64 20 74 6f 20 72 65 64 69  and used to redi
2e2d0 72 65 63 74 0a 2a 2a 20 72 65 61 64 73 20 61 67  rect.** reads ag
2e2e0 61 69 6e 73 74 20 50 33 20 6f 76 65 72 20 74 6f  ainst P3 over to
2e2f0 20 50 31 2c 20 74 68 75 73 20 70 6f 73 73 69 62   P1, thus possib
2e300 6c 79 20 61 76 6f 69 64 69 6e 67 20 74 68 65 20  ly avoiding the 
2e310 6e 65 65 64 20 74 6f 0a 2a 2a 20 73 65 65 6b 20  need to.** seek 
2e320 61 6e 64 20 72 65 61 64 20 63 75 72 73 6f 72 20  and read cursor 
2e330 50 33 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65  P3..*/./* Opcode
2e340 3a 20 49 64 78 52 6f 77 69 64 20 50 31 20 50 32  : IdxRowid P1 P2
2e350 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73   * * *.** Synops
2e360 69 73 3a 20 72 5b 50 32 5d 3d 72 6f 77 69 64 0a  is: r[P2]=rowid.
2e370 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 69 6e 74 6f  **.** Write into
2e380 20 72 65 67 69 73 74 65 72 20 50 32 20 61 6e 20   register P2 an 
2e390 69 6e 74 65 67 65 72 20 77 68 69 63 68 20 69 73  integer which is
2e3a0 20 74 68 65 20 6c 61 73 74 20 65 6e 74 72 79 20   the last entry 
2e3b0 69 6e 20 74 68 65 20 72 65 63 6f 72 64 20 61 74  in the record at
2e3c0 0a 2a 2a 20 74 68 65 20 65 6e 64 20 6f 66 20 74  .** the end of t
2e3d0 68 65 20 69 6e 64 65 78 20 6b 65 79 20 70 6f 69  he index key poi
2e3e0 6e 74 65 64 20 74 6f 20 62 79 20 63 75 72 73 6f  nted to by curso
2e3f0 72 20 50 31 2e 20 20 54 68 69 73 20 69 6e 74 65  r P1.  This inte
2e400 67 65 72 20 73 68 6f 75 6c 64 20 62 65 0a 2a 2a  ger should be.**
2e410 20 74 68 65 20 72 6f 77 69 64 20 6f 66 20 74 68   the rowid of th
2e420 65 20 74 61 62 6c 65 20 65 6e 74 72 79 20 74 6f  e table entry to
2e430 20 77 68 69 63 68 20 74 68 69 73 20 69 6e 64 65   which this inde
2e440 78 20 65 6e 74 72 79 20 70 6f 69 6e 74 73 2e 0a  x entry points..
2e450 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20  **.** See also: 
2e460 52 6f 77 69 64 2c 20 4d 61 6b 65 52 65 63 6f 72  Rowid, MakeRecor
2e470 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 44 65  d..*/.case OP_De
2e480 66 65 72 72 65 64 53 65 65 6b 3a 0a 63 61 73 65  ferredSeek:.case
2e490 20 4f 50 5f 49 64 78 52 6f 77 69 64 3a 20 7b 20   OP_IdxRowid: { 
2e4a0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74            /* out
2e4b0 32 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73 6f  2 */.  VdbeCurso
2e4c0 72 20 2a 70 43 3b 20 20 20 20 20 20 20 20 20 20  r *pC;          
2e4d0 20 20 20 2f 2a 20 54 68 65 20 50 31 20 69 6e 64     /* The P1 ind
2e4e0 65 78 20 63 75 72 73 6f 72 20 2a 2f 0a 20 20 56  ex cursor */.  V
2e4f0 64 62 65 43 75 72 73 6f 72 20 2a 70 54 61 62 43  dbeCursor *pTabC
2e500 75 72 3b 20 20 20 20 20 20 20 20 2f 2a 20 54 68  ur;        /* Th
2e510 65 20 50 32 20 74 61 62 6c 65 20 63 75 72 73 6f  e P2 table curso
2e520 72 20 28 4f 50 5f 44 65 66 65 72 72 65 64 53 65  r (OP_DeferredSe
2e530 65 6b 20 6f 6e 6c 79 29 20 2a 2f 0a 20 20 69 36  ek only) */.  i6
2e540 34 20 72 6f 77 69 64 3b 20 20 20 20 20 20 20 20  4 rowid;        
2e550 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 6f 77            /* Row
2e560 69 64 20 74 68 61 74 20 50 31 20 63 75 72 72 65  id that P1 curre
2e570 6e 74 20 70 6f 69 6e 74 73 20 74 6f 20 2a 2f 0a  nt points to */.
2e580 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
2e590 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31  p1>=0 && pOp->p1
2e5a0 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20  <p->nCursor );. 
2e5b0 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70   pC = p->apCsr[p
2e5c0 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72  Op->p1];.  asser
2e5d0 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 61 73  t( pC!=0 );.  as
2e5e0 73 65 72 74 28 20 70 43 2d 3e 65 43 75 72 54 79  sert( pC->eCurTy
2e5f0 70 65 3d 3d 43 55 52 54 59 50 45 5f 42 54 52 45  pe==CURTYPE_BTRE
2e600 45 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  E );.  assert( p
2e610 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 21 3d 30  C->uc.pCursor!=0
2e620 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43   );.  assert( pC
2e630 2d 3e 69 73 54 61 62 6c 65 3d 3d 30 20 29 3b 0a  ->isTable==0 );.
2e640 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 64 65    assert( pC->de
2e650 66 65 72 72 65 64 4d 6f 76 65 74 6f 3d 3d 30 20  ferredMoveto==0 
2e660 29 3b 0a 20 20 61 73 73 65 72 74 28 20 21 70 43  );.  assert( !pC
2e670 2d 3e 6e 75 6c 6c 52 6f 77 20 7c 7c 20 70 4f 70  ->nullRow || pOp
2e680 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 64 78  ->opcode==OP_Idx
2e690 52 6f 77 69 64 20 29 3b 0a 0a 20 20 2f 2a 20 54  Rowid );..  /* T
2e6a0 68 65 20 49 64 78 52 6f 77 69 64 20 61 6e 64 20  he IdxRowid and 
2e6b0 53 65 65 6b 20 6f 70 63 6f 64 65 73 20 61 72 65  Seek opcodes are
2e6c0 20 63 6f 6d 62 69 6e 65 64 20 62 65 63 61 75 73   combined becaus
2e6d0 65 20 6f 66 20 74 68 65 20 63 6f 6d 6d 6f 6e 61  e of the commona
2e6e0 6c 69 74 79 0a 20 20 2a 2a 20 6f 66 20 73 71 6c  lity.  ** of sql
2e6f0 69 74 65 33 56 64 62 65 43 75 72 73 6f 72 52 65  ite3VdbeCursorRe
2e700 73 74 6f 72 65 28 29 20 61 6e 64 20 73 71 6c 69  store() and sqli
2e710 74 65 33 56 64 62 65 49 64 78 52 6f 77 69 64 28  te3VdbeIdxRowid(
2e720 29 2e 20 2a 2f 0a 20 20 72 63 20 3d 20 73 71 6c  ). */.  rc = sql
2e730 69 74 65 33 56 64 62 65 43 75 72 73 6f 72 52 65  ite3VdbeCursorRe
2e740 73 74 6f 72 65 28 70 43 29 3b 0a 0a 20 20 2f 2a  store(pC);..  /*
2e750 20 73 71 6c 69 74 65 33 56 62 65 43 75 72 73 6f   sqlite3VbeCurso
2e760 72 52 65 73 74 6f 72 65 28 29 20 63 61 6e 20 6f  rRestore() can o
2e770 6e 6c 79 20 66 61 69 6c 20 69 66 20 74 68 65 20  nly fail if the 
2e780 72 65 63 6f 72 64 20 68 61 73 20 62 65 65 6e 20  record has been 
2e790 64 65 6c 65 74 65 64 0a 20 20 2a 2a 20 6f 75 74  deleted.  ** out
2e7a0 20 66 72 6f 6d 20 75 6e 64 65 72 20 74 68 65 20   from under the 
2e7b0 63 75 72 73 6f 72 2e 20 20 54 68 61 74 20 77 69  cursor.  That wi
2e7c0 6c 6c 20 6e 65 76 65 72 20 68 61 70 70 65 6e 73  ll never happens
2e7d0 20 66 6f 72 20 61 6e 20 49 64 78 52 6f 77 69 64   for an IdxRowid
2e7e0 0a 20 20 2a 2a 20 6f 72 20 53 65 65 6b 20 6f 70  .  ** or Seek op
2e7f0 63 6f 64 65 20 2a 2f 0a 20 20 69 66 28 20 4e 45  code */.  if( NE
2e800 56 45 52 28 72 63 21 3d 53 51 4c 49 54 45 5f 4f  VER(rc!=SQLITE_O
2e810 4b 29 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f  K) ) goto abort_
2e820 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 0a 20  due_to_error;.. 
2e830 20 69 66 28 20 21 70 43 2d 3e 6e 75 6c 6c 52 6f   if( !pC->nullRo
2e840 77 20 29 7b 0a 20 20 20 20 72 6f 77 69 64 20 3d  w ){.    rowid =
2e850 20 30 3b 20 20 2f 2a 20 4e 6f 74 20 6e 65 65 64   0;  /* Not need
2e860 65 64 2e 20 20 4f 6e 6c 79 20 75 73 65 64 20 74  ed.  Only used t
2e870 6f 20 73 69 6c 65 6e 63 65 20 61 20 77 61 72 6e  o silence a warn
2e880 69 6e 67 2e 20 2a 2f 0a 20 20 20 20 72 63 20 3d  ing. */.    rc =
2e890 20 73 71 6c 69 74 65 33 56 64 62 65 49 64 78 52   sqlite3VdbeIdxR
2e8a0 6f 77 69 64 28 64 62 2c 20 70 43 2d 3e 75 63 2e  owid(db, pC->uc.
2e8b0 70 43 75 72 73 6f 72 2c 20 26 72 6f 77 69 64 29  pCursor, &rowid)
2e8c0 3b 0a 20 20 20 20 69 66 28 20 72 63 21 3d 53 51  ;.    if( rc!=SQ
2e8d0 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20  LITE_OK ){.     
2e8e0 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
2e8f0 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 7d 0a  to_error;.    }.
2e900 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63      if( pOp->opc
2e910 6f 64 65 3d 3d 4f 50 5f 44 65 66 65 72 72 65 64  ode==OP_Deferred
2e920 53 65 65 6b 20 29 7b 0a 20 20 20 20 20 20 61 73  Seek ){.      as
2e930 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 3d 30  sert( pOp->p3>=0
2e940 20 26 26 20 70 4f 70 2d 3e 70 33 3c 70 2d 3e 6e   && pOp->p3<p->n
2e950 43 75 72 73 6f 72 20 29 3b 0a 20 20 20 20 20 20  Cursor );.      
2e960 70 54 61 62 43 75 72 20 3d 20 70 2d 3e 61 70 43  pTabCur = p->apC
2e970 73 72 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 20  sr[pOp->p3];.   
2e980 20 20 20 61 73 73 65 72 74 28 20 70 54 61 62 43     assert( pTabC
2e990 75 72 21 3d 30 20 29 3b 0a 20 20 20 20 20 20 61  ur!=0 );.      a
2e9a0 73 73 65 72 74 28 20 70 54 61 62 43 75 72 2d 3e  ssert( pTabCur->
2e9b0 65 43 75 72 54 79 70 65 3d 3d 43 55 52 54 59 50  eCurType==CURTYP
2e9c0 45 5f 42 54 52 45 45 20 29 3b 0a 20 20 20 20 20  E_BTREE );.     
2e9d0 20 61 73 73 65 72 74 28 20 70 54 61 62 43 75 72   assert( pTabCur
2e9e0 2d 3e 75 63 2e 70 43 75 72 73 6f 72 21 3d 30 20  ->uc.pCursor!=0 
2e9f0 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  );.      assert(
2ea00 20 70 54 61 62 43 75 72 2d 3e 69 73 54 61 62 6c   pTabCur->isTabl
2ea10 65 20 29 3b 0a 20 20 20 20 20 20 70 54 61 62 43  e );.      pTabC
2ea20 75 72 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 30 3b  ur->nullRow = 0;
2ea30 0a 20 20 20 20 20 20 70 54 61 62 43 75 72 2d 3e  .      pTabCur->
2ea40 6d 6f 76 65 74 6f 54 61 72 67 65 74 20 3d 20 72  movetoTarget = r
2ea50 6f 77 69 64 3b 0a 20 20 20 20 20 20 70 54 61 62  owid;.      pTab
2ea60 43 75 72 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76  Cur->deferredMov
2ea70 65 74 6f 20 3d 20 31 3b 0a 20 20 20 20 20 20 61  eto = 1;.      a
2ea80 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79  ssert( pOp->p4ty
2ea90 70 65 3d 3d 50 34 5f 49 4e 54 41 52 52 41 59 20  pe==P4_INTARRAY 
2eaa0 7c 7c 20 70 4f 70 2d 3e 70 34 2e 61 69 3d 3d 30  || pOp->p4.ai==0
2eab0 20 29 3b 0a 20 20 20 20 20 20 70 54 61 62 43 75   );.      pTabCu
2eac0 72 2d 3e 61 41 6c 74 4d 61 70 20 3d 20 70 4f 70  r->aAltMap = pOp
2ead0 2d 3e 70 34 2e 61 69 3b 0a 20 20 20 20 20 20 70  ->p4.ai;.      p
2eae0 54 61 62 43 75 72 2d 3e 70 41 6c 74 43 75 72 73  TabCur->pAltCurs
2eaf0 6f 72 20 3d 20 70 43 3b 0a 20 20 20 20 7d 65 6c  or = pC;.    }el
2eb00 73 65 7b 0a 20 20 20 20 20 20 70 4f 75 74 20 3d  se{.      pOut =
2eb10 20 6f 75 74 32 50 72 65 72 65 6c 65 61 73 65 28   out2Prerelease(
2eb20 70 2c 20 70 4f 70 29 3b 0a 20 20 20 20 20 20 70  p, pOp);.      p
2eb30 4f 75 74 2d 3e 75 2e 69 20 3d 20 72 6f 77 69 64  Out->u.i = rowid
2eb40 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b  ;.    }.  }else{
2eb50 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70  .    assert( pOp
2eb60 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 64 78  ->opcode==OP_Idx
2eb70 52 6f 77 69 64 20 29 3b 0a 20 20 20 20 73 71 6c  Rowid );.    sql
2eb80 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75  ite3VdbeMemSetNu
2eb90 6c 6c 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32  ll(&aMem[pOp->p2
2eba0 5d 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  ]);.  }.  break;
2ebb0 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49  .}../* Opcode: I
2ebc0 64 78 47 45 20 50 31 20 50 32 20 50 33 20 50 34  dxGE P1 P2 P3 P4
2ebd0 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a   P5.** Synopsis:
2ebe0 20 6b 65 79 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a   key=r[P3@P4].**
2ebf0 0a 2a 2a 20 54 68 65 20 50 34 20 72 65 67 69 73  .** The P4 regis
2ec00 74 65 72 20 76 61 6c 75 65 73 20 62 65 67 69 6e  ter values begin
2ec10 6e 69 6e 67 20 77 69 74 68 20 50 33 20 66 6f 72  ning with P3 for
2ec20 6d 20 61 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e  m an unpacked in
2ec30 64 65 78 20 0a 2a 2a 20 6b 65 79 20 74 68 61 74  dex .** key that
2ec40 20 6f 6d 69 74 73 20 74 68 65 20 50 52 49 4d 41   omits the PRIMA
2ec50 52 59 20 4b 45 59 2e 20 20 43 6f 6d 70 61 72 65  RY KEY.  Compare
2ec60 20 74 68 69 73 20 6b 65 79 20 76 61 6c 75 65 20   this key value 
2ec70 61 67 61 69 6e 73 74 20 74 68 65 20 69 6e 64 65  against the inde
2ec80 78 20 0a 2a 2a 20 74 68 61 74 20 50 31 20 69 73  x .** that P1 is
2ec90 20 63 75 72 72 65 6e 74 6c 79 20 70 6f 69 6e 74   currently point
2eca0 69 6e 67 20 74 6f 2c 20 69 67 6e 6f 72 69 6e 67  ing to, ignoring
2ecb0 20 74 68 65 20 50 52 49 4d 41 52 59 20 4b 45 59   the PRIMARY KEY
2ecc0 20 6f 72 20 52 4f 57 49 44 20 0a 2a 2a 20 66 69   or ROWID .** fi
2ecd0 65 6c 64 73 20 61 74 20 74 68 65 20 65 6e 64 2e  elds at the end.
2ece0 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 50 31  .**.** If the P1
2ecf0 20 69 6e 64 65 78 20 65 6e 74 72 79 20 69 73 20   index entry is 
2ed00 67 72 65 61 74 65 72 20 74 68 61 6e 20 6f 72 20  greater than or 
2ed10 65 71 75 61 6c 20 74 6f 20 74 68 65 20 6b 65 79  equal to the key
2ed20 20 76 61 6c 75 65 0a 2a 2a 20 74 68 65 6e 20 6a   value.** then j
2ed30 75 6d 70 20 74 6f 20 50 32 2e 20 20 4f 74 68 65  ump to P2.  Othe
2ed40 72 77 69 73 65 20 66 61 6c 6c 20 74 68 72 6f 75  rwise fall throu
2ed50 67 68 20 74 6f 20 74 68 65 20 6e 65 78 74 20 69  gh to the next i
2ed60 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 2f  nstruction..*/./
2ed70 2a 20 4f 70 63 6f 64 65 3a 20 49 64 78 47 54 20  * Opcode: IdxGT 
2ed80 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a  P1 P2 P3 P4 P5.*
2ed90 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d  * Synopsis: key=
2eda0 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 54  r[P3@P4].**.** T
2edb0 68 65 20 50 34 20 72 65 67 69 73 74 65 72 20 76  he P4 register v
2edc0 61 6c 75 65 73 20 62 65 67 69 6e 6e 69 6e 67 20  alues beginning 
2edd0 77 69 74 68 20 50 33 20 66 6f 72 6d 20 61 6e 20  with P3 form an 
2ede0 75 6e 70 61 63 6b 65 64 20 69 6e 64 65 78 20 0a  unpacked index .
2edf0 2a 2a 20 6b 65 79 20 74 68 61 74 20 6f 6d 69 74  ** key that omit
2ee00 73 20 74 68 65 20 50 52 49 4d 41 52 59 20 4b 45  s the PRIMARY KE
2ee10 59 2e 20 20 43 6f 6d 70 61 72 65 20 74 68 69 73  Y.  Compare this
2ee20 20 6b 65 79 20 76 61 6c 75 65 20 61 67 61 69 6e   key value again
2ee30 73 74 20 74 68 65 20 69 6e 64 65 78 20 0a 2a 2a  st the index .**
2ee40 20 74 68 61 74 20 50 31 20 69 73 20 63 75 72 72   that P1 is curr
2ee50 65 6e 74 6c 79 20 70 6f 69 6e 74 69 6e 67 20 74  ently pointing t
2ee60 6f 2c 20 69 67 6e 6f 72 69 6e 67 20 74 68 65 20  o, ignoring the 
2ee70 50 52 49 4d 41 52 59 20 4b 45 59 20 6f 72 20 52  PRIMARY KEY or R
2ee80 4f 57 49 44 20 0a 2a 2a 20 66 69 65 6c 64 73 20  OWID .** fields 
2ee90 61 74 20 74 68 65 20 65 6e 64 2e 0a 2a 2a 0a 2a  at the end..**.*
2eea0 2a 20 49 66 20 74 68 65 20 50 31 20 69 6e 64 65  * If the P1 inde
2eeb0 78 20 65 6e 74 72 79 20 69 73 20 67 72 65 61 74  x entry is great
2eec0 65 72 20 74 68 61 6e 20 74 68 65 20 6b 65 79 20  er than the key 
2eed0 76 61 6c 75 65 0a 2a 2a 20 74 68 65 6e 20 6a 75  value.** then ju
2eee0 6d 70 20 74 6f 20 50 32 2e 20 20 4f 74 68 65 72  mp to P2.  Other
2eef0 77 69 73 65 20 66 61 6c 6c 20 74 68 72 6f 75 67  wise fall throug
2ef00 68 20 74 6f 20 74 68 65 20 6e 65 78 74 20 69 6e  h to the next in
2ef10 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 2f 2a  struction..*/./*
2ef20 20 4f 70 63 6f 64 65 3a 20 49 64 78 4c 54 20 50   Opcode: IdxLT P
2ef30 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a  1 P2 P3 P4 P5.**
2ef40 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72   Synopsis: key=r
2ef50 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 54 68  [P3@P4].**.** Th
2ef60 65 20 50 34 20 72 65 67 69 73 74 65 72 20 76 61  e P4 register va
2ef70 6c 75 65 73 20 62 65 67 69 6e 6e 69 6e 67 20 77  lues beginning w
2ef80 69 74 68 20 50 33 20 66 6f 72 6d 20 61 6e 20 75  ith P3 form an u
2ef90 6e 70 61 63 6b 65 64 20 69 6e 64 65 78 20 0a 2a  npacked index .*
2efa0 2a 20 6b 65 79 20 74 68 61 74 20 6f 6d 69 74 73  * key that omits
2efb0 20 74 68 65 20 50 52 49 4d 41 52 59 20 4b 45 59   the PRIMARY KEY
2efc0 20 6f 72 20 52 4f 57 49 44 2e 20 20 43 6f 6d 70   or ROWID.  Comp
2efd0 61 72 65 20 74 68 69 73 20 6b 65 79 20 76 61 6c  are this key val
2efe0 75 65 20 61 67 61 69 6e 73 74 0a 2a 2a 20 74 68  ue against.** th
2eff0 65 20 69 6e 64 65 78 20 74 68 61 74 20 50 31 20  e index that P1 
2f000 69 73 20 63 75 72 72 65 6e 74 6c 79 20 70 6f 69  is currently poi
2f010 6e 74 69 6e 67 20 74 6f 2c 20 69 67 6e 6f 72 69  nting to, ignori
2f020 6e 67 20 74 68 65 20 50 52 49 4d 41 52 59 20 4b  ng the PRIMARY K
2f030 45 59 20 6f 72 0a 2a 2a 20 52 4f 57 49 44 20 6f  EY or.** ROWID o
2f040 6e 20 74 68 65 20 50 31 20 69 6e 64 65 78 2e 0a  n the P1 index..
2f050 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 50 31 20  **.** If the P1 
2f060 69 6e 64 65 78 20 65 6e 74 72 79 20 69 73 20 6c  index entry is l
2f070 65 73 73 20 74 68 61 6e 20 74 68 65 20 6b 65 79  ess than the key
2f080 20 76 61 6c 75 65 20 74 68 65 6e 20 6a 75 6d 70   value then jump
2f090 20 74 6f 20 50 32 2e 0a 2a 2a 20 4f 74 68 65 72   to P2..** Other
2f0a0 77 69 73 65 20 66 61 6c 6c 20 74 68 72 6f 75 67  wise fall throug
2f0b0 68 20 74 6f 20 74 68 65 20 6e 65 78 74 20 69 6e  h to the next in
2f0c0 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 2f 2a  struction..*/./*
2f0d0 20 4f 70 63 6f 64 65 3a 20 49 64 78 4c 45 20 50   Opcode: IdxLE P
2f0e0 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a  1 P2 P3 P4 P5.**
2f0f0 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72   Synopsis: key=r
2f100 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 54 68  [P3@P4].**.** Th
2f110 65 20 50 34 20 72 65 67 69 73 74 65 72 20 76 61  e P4 register va
2f120 6c 75 65 73 20 62 65 67 69 6e 6e 69 6e 67 20 77  lues beginning w
2f130 69 74 68 20 50 33 20 66 6f 72 6d 20 61 6e 20 75  ith P3 form an u
2f140 6e 70 61 63 6b 65 64 20 69 6e 64 65 78 20 0a 2a  npacked index .*
2f150 2a 20 6b 65 79 20 74 68 61 74 20 6f 6d 69 74 73  * key that omits
2f160 20 74 68 65 20 50 52 49 4d 41 52 59 20 4b 45 59   the PRIMARY KEY
2f170 20 6f 72 20 52 4f 57 49 44 2e 20 20 43 6f 6d 70   or ROWID.  Comp
2f180 61 72 65 20 74 68 69 73 20 6b 65 79 20 76 61 6c  are this key val
2f190 75 65 20 61 67 61 69 6e 73 74 0a 2a 2a 20 74 68  ue against.** th
2f1a0 65 20 69 6e 64 65 78 20 74 68 61 74 20 50 31 20  e index that P1 
2f1b0 69 73 20 63 75 72 72 65 6e 74 6c 79 20 70 6f 69  is currently poi
2f1c0 6e 74 69 6e 67 20 74 6f 2c 20 69 67 6e 6f 72 69  nting to, ignori
2f1d0 6e 67 20 74 68 65 20 50 52 49 4d 41 52 59 20 4b  ng the PRIMARY K
2f1e0 45 59 20 6f 72 0a 2a 2a 20 52 4f 57 49 44 20 6f  EY or.** ROWID o
2f1f0 6e 20 74 68 65 20 50 31 20 69 6e 64 65 78 2e 0a  n the P1 index..
2f200 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 50 31 20  **.** If the P1 
2f210 69 6e 64 65 78 20 65 6e 74 72 79 20 69 73 20 6c  index entry is l
2f220 65 73 73 20 74 68 61 6e 20 6f 72 20 65 71 75 61  ess than or equa
2f230 6c 20 74 6f 20 74 68 65 20 6b 65 79 20 76 61 6c  l to the key val
2f240 75 65 20 74 68 65 6e 20 6a 75 6d 70 0a 2a 2a 20  ue then jump.** 
2f250 74 6f 20 50 32 2e 20 4f 74 68 65 72 77 69 73 65  to P2. Otherwise
2f260 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f   fall through to
2f270 20 74 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75   the next instru
2f280 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f  ction..*/.case O
2f290 50 5f 49 64 78 4c 45 3a 20 20 20 20 20 20 20 20  P_IdxLE:        
2f2a0 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 63 61 73    /* jump */.cas
2f2b0 65 20 4f 50 5f 49 64 78 47 54 3a 20 20 20 20 20  e OP_IdxGT:     
2f2c0 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a       /* jump */.
2f2d0 63 61 73 65 20 4f 50 5f 49 64 78 4c 54 3a 20 20  case OP_IdxLT:  
2f2e0 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20          /* jump 
2f2f0 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 64 78 47 45  */.case OP_IdxGE
2f300 3a 20 20 7b 20 20 20 20 20 20 20 2f 2a 20 6a 75  :  {       /* ju
2f310 6d 70 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73  mp */.  VdbeCurs
2f320 6f 72 20 2a 70 43 3b 0a 20 20 69 6e 74 20 72 65  or *pC;.  int re
2f330 73 3b 0a 20 20 55 6e 70 61 63 6b 65 64 52 65 63  s;.  UnpackedRec
2f340 6f 72 64 20 72 3b 0a 0a 20 20 61 73 73 65 72 74  ord r;..  assert
2f350 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20  ( pOp->p1>=0 && 
2f360 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73  pOp->p1<p->nCurs
2f370 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e  or );.  pC = p->
2f380 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  apCsr[pOp->p1];.
2f390 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20    assert( pC!=0 
2f3a0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d  );.  assert( pC-
2f3b0 3e 69 73 4f 72 64 65 72 65 64 20 29 3b 0a 20 20  >isOrdered );.  
2f3c0 61 73 73 65 72 74 28 20 70 43 2d 3e 65 43 75 72  assert( pC->eCur
2f3d0 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f 42 54  Type==CURTYPE_BT
2f3e0 52 45 45 20 29 3b 0a 20 20 61 73 73 65 72 74 28  REE );.  assert(
2f3f0 20 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 21   pC->uc.pCursor!
2f400 3d 30 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  =0);.  assert( p
2f410 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74  C->deferredMovet
2f420 6f 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  o==0 );.  assert
2f430 28 20 70 4f 70 2d 3e 70 35 3d 3d 30 20 7c 7c 20  ( pOp->p5==0 || 
2f440 70 4f 70 2d 3e 70 35 3d 3d 31 20 29 3b 0a 20 20  pOp->p5==1 );.  
2f450 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74  assert( pOp->p4t
2f460 79 70 65 3d 3d 50 34 5f 49 4e 54 33 32 20 29 3b  ype==P4_INT32 );
2f470 0a 20 20 72 2e 70 4b 65 79 49 6e 66 6f 20 3d 20  .  r.pKeyInfo = 
2f480 70 43 2d 3e 70 4b 65 79 49 6e 66 6f 3b 0a 20 20  pC->pKeyInfo;.  
2f490 72 2e 6e 46 69 65 6c 64 20 3d 20 28 75 31 36 29  r.nField = (u16)
2f4a0 70 4f 70 2d 3e 70 34 2e 69 3b 0a 20 20 69 66 28  pOp->p4.i;.  if(
2f4b0 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3c 4f 50 5f   pOp->opcode<OP_
2f4c0 49 64 78 4c 54 20 29 7b 0a 20 20 20 20 61 73 73  IdxLT ){.    ass
2f4d0 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65  ert( pOp->opcode
2f4e0 3d 3d 4f 50 5f 49 64 78 4c 45 20 7c 7c 20 70 4f  ==OP_IdxLE || pO
2f4f0 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 64  p->opcode==OP_Id
2f500 78 47 54 20 29 3b 0a 20 20 20 20 72 2e 64 65 66  xGT );.    r.def
2f510 61 75 6c 74 5f 72 63 20 3d 20 2d 31 3b 0a 20 20  ault_rc = -1;.  
2f520 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73 73 65 72  }else{.    asser
2f530 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d  t( pOp->opcode==
2f540 4f 50 5f 49 64 78 47 45 20 7c 7c 20 70 4f 70 2d  OP_IdxGE || pOp-
2f550 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 64 78 4c  >opcode==OP_IdxL
2f560 54 20 29 3b 0a 20 20 20 20 72 2e 64 65 66 61 75  T );.    r.defau
2f570 6c 74 5f 72 63 20 3d 20 30 3b 0a 20 20 7d 0a 20  lt_rc = 0;.  }. 
2f580 20 72 2e 61 4d 65 6d 20 3d 20 26 61 4d 65 6d 5b   r.aMem = &aMem[
2f590 70 4f 70 2d 3e 70 33 5d 3b 0a 23 69 66 64 65 66  pOp->p3];.#ifdef
2f5a0 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20   SQLITE_DEBUG.  
2f5b0 7b 0a 20 20 20 20 69 6e 74 20 69 3b 0a 20 20 20  {.    int i;.   
2f5c0 20 66 6f 72 28 69 3d 30 3b 20 69 3c 72 2e 6e 46   for(i=0; i<r.nF
2f5d0 69 65 6c 64 3b 20 69 2b 2b 29 7b 0a 20 20 20 20  ield; i++){.    
2f5e0 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56    assert( memIsV
2f5f0 61 6c 69 64 28 26 72 2e 61 4d 65 6d 5b 69 5d 29  alid(&r.aMem[i])
2f600 20 29 3b 0a 20 20 20 20 20 20 52 45 47 49 53 54   );.      REGIST
2f610 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 33  ER_TRACE(pOp->p3
2f620 2b 69 2c 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  +i, &aMem[pOp->p
2f630 33 2b 69 5d 29 3b 0a 20 20 20 20 7d 0a 20 20 7d  3+i]);.    }.  }
2f640 0a 23 65 6e 64 69 66 0a 20 20 72 65 73 20 3d 20  .#endif.  res = 
2f650 30 3b 20 20 2f 2a 20 4e 6f 74 20 6e 65 65 64 65  0;  /* Not neede
2f660 64 2e 20 20 4f 6e 6c 79 20 75 73 65 64 20 74 6f  d.  Only used to
2f670 20 73 69 6c 65 6e 63 65 20 61 20 77 61 72 6e 69   silence a warni
2f680 6e 67 2e 20 2a 2f 0a 20 20 72 63 20 3d 20 73 71  ng. */.  rc = sq
2f690 6c 69 74 65 33 56 64 62 65 49 64 78 4b 65 79 43  lite3VdbeIdxKeyC
2f6a0 6f 6d 70 61 72 65 28 64 62 2c 20 70 43 2c 20 26  ompare(db, pC, &
2f6b0 72 2c 20 26 72 65 73 29 3b 0a 20 20 61 73 73 65  r, &res);.  asse
2f6c0 72 74 28 20 28 4f 50 5f 49 64 78 4c 45 26 31 29  rt( (OP_IdxLE&1)
2f6d0 3d 3d 28 4f 50 5f 49 64 78 4c 54 26 31 29 20 26  ==(OP_IdxLT&1) &
2f6e0 26 20 28 4f 50 5f 49 64 78 47 45 26 31 29 3d 3d  & (OP_IdxGE&1)==
2f6f0 28 4f 50 5f 49 64 78 47 54 26 31 29 20 29 3b 0a  (OP_IdxGT&1) );.
2f700 20 20 69 66 28 20 28 70 4f 70 2d 3e 6f 70 63 6f    if( (pOp->opco
2f710 64 65 26 31 29 3d 3d 28 4f 50 5f 49 64 78 4c 54  de&1)==(OP_IdxLT
2f720 26 31 29 20 29 7b 0a 20 20 20 20 61 73 73 65 72  &1) ){.    asser
2f730 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d  t( pOp->opcode==
2f740 4f 50 5f 49 64 78 4c 45 20 7c 7c 20 70 4f 70 2d  OP_IdxLE || pOp-
2f750 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 64 78 4c  >opcode==OP_IdxL
2f760 54 20 29 3b 0a 20 20 20 20 72 65 73 20 3d 20 2d  T );.    res = -
2f770 72 65 73 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  res;.  }else{.  
2f780 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f    assert( pOp->o
2f790 70 63 6f 64 65 3d 3d 4f 50 5f 49 64 78 47 45 20  pcode==OP_IdxGE 
2f7a0 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d  || pOp->opcode==
2f7b0 4f 50 5f 49 64 78 47 54 20 29 3b 0a 20 20 20 20  OP_IdxGT );.    
2f7c0 72 65 73 2b 2b 3b 0a 20 20 7d 0a 20 20 56 64 62  res++;.  }.  Vdb
2f7d0 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 72 65 73  eBranchTaken(res
2f7e0 3e 30 2c 32 29 3b 0a 20 20 69 66 28 20 72 63 20  >0,2);.  if( rc 
2f7f0 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65  ) goto abort_due
2f800 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 69 66 28  _to_error;.  if(
2f810 20 72 65 73 3e 30 20 29 20 67 6f 74 6f 20 6a 75   res>0 ) goto ju
2f820 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 62 72 65 61  mp_to_p2;.  brea
2f830 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
2f840 20 44 65 73 74 72 6f 79 20 50 31 20 50 32 20 50   Destroy P1 P2 P
2f850 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 44 65 6c 65  3 * *.**.** Dele
2f860 74 65 20 61 6e 20 65 6e 74 69 72 65 20 64 61 74  te an entire dat
2f870 61 62 61 73 65 20 74 61 62 6c 65 20 6f 72 20 69  abase table or i
2f880 6e 64 65 78 20 77 68 6f 73 65 20 72 6f 6f 74 20  ndex whose root 
2f890 70 61 67 65 20 69 6e 20 74 68 65 20 64 61 74 61  page in the data
2f8a0 62 61 73 65 0a 2a 2a 20 66 69 6c 65 20 69 73 20  base.** file is 
2f8b0 67 69 76 65 6e 20 62 79 20 50 31 2e 0a 2a 2a 0a  given by P1..**.
2f8c0 2a 2a 20 54 68 65 20 74 61 62 6c 65 20 62 65 69  ** The table bei
2f8d0 6e 67 20 64 65 73 74 72 6f 79 65 64 20 69 73 20  ng destroyed is 
2f8e0 69 6e 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61  in the main data
2f8f0 62 61 73 65 20 66 69 6c 65 20 69 66 20 50 33 3d  base file if P3=
2f900 3d 30 2e 20 20 49 66 0a 2a 2a 20 50 33 3d 3d 31  =0.  If.** P3==1
2f910 20 74 68 65 6e 20 74 68 65 20 74 61 62 6c 65 20   then the table 
2f920 74 6f 20 62 65 20 63 6c 65 61 72 20 69 73 20 69  to be clear is i
2f930 6e 20 74 68 65 20 61 75 78 69 6c 69 61 72 79 20  n the auxiliary 
2f940 64 61 74 61 62 61 73 65 20 66 69 6c 65 0a 2a 2a  database file.**
2f950 20 74 68 61 74 20 69 73 20 75 73 65 64 20 74 6f   that is used to
2f960 20 73 74 6f 72 65 20 74 61 62 6c 65 73 20 63 72   store tables cr
2f970 65 61 74 65 20 75 73 69 6e 67 20 43 52 45 41 54  eate using CREAT
2f980 45 20 54 45 4d 50 4f 52 41 52 59 20 54 41 42 4c  E TEMPORARY TABL
2f990 45 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 41 55 54 4f  E..**.** If AUTO
2f9a0 56 41 43 55 55 4d 20 69 73 20 65 6e 61 62 6c 65  VACUUM is enable
2f9b0 64 20 74 68 65 6e 20 69 74 20 69 73 20 70 6f 73  d then it is pos
2f9c0 73 69 62 6c 65 20 74 68 61 74 20 61 6e 6f 74 68  sible that anoth
2f9d0 65 72 20 72 6f 6f 74 20 70 61 67 65 0a 2a 2a 20  er root page.** 
2f9e0 6d 69 67 68 74 20 62 65 20 6d 6f 76 65 64 20 69  might be moved i
2f9f0 6e 74 6f 20 74 68 65 20 6e 65 77 6c 79 20 64 65  nto the newly de
2fa00 6c 65 74 65 64 20 72 6f 6f 74 20 70 61 67 65 20  leted root page 
2fa10 69 6e 20 6f 72 64 65 72 20 74 6f 20 6b 65 65 70  in order to keep
2fa20 20 61 6c 6c 0a 2a 2a 20 72 6f 6f 74 20 70 61 67   all.** root pag
2fa30 65 73 20 63 6f 6e 74 69 67 75 6f 75 73 20 61 74  es contiguous at
2fa40 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 20 6f   the beginning o
2fa50 66 20 74 68 65 20 64 61 74 61 62 61 73 65 2e 20  f the database. 
2fa60 20 54 68 65 20 66 6f 72 6d 65 72 0a 2a 2a 20 76   The former.** v
2fa70 61 6c 75 65 20 6f 66 20 74 68 65 20 72 6f 6f 74  alue of the root
2fa80 20 70 61 67 65 20 74 68 61 74 20 6d 6f 76 65 64   page that moved
2fa90 20 2d 20 69 74 73 20 76 61 6c 75 65 20 62 65 66   - its value bef
2faa0 6f 72 65 20 74 68 65 20 6d 6f 76 65 20 6f 63 63  ore the move occ
2fab0 75 72 72 65 64 20 2d 0a 2a 2a 20 69 73 20 73 74  urred -.** is st
2fac0 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74 65 72  ored in register
2fad0 20 50 32 2e 20 49 66 20 6e 6f 20 70 61 67 65 20   P2. If no page 
2fae0 6d 6f 76 65 6d 65 6e 74 20 77 61 73 20 72 65 71  movement was req
2faf0 75 69 72 65 64 20 28 62 65 63 61 75 73 65 20 74  uired (because t
2fb00 68 65 0a 2a 2a 20 74 61 62 6c 65 20 62 65 69 6e  he.** table bein
2fb10 67 20 64 72 6f 70 70 65 64 20 77 61 73 20 61 6c  g dropped was al
2fb20 72 65 61 64 79 20 74 68 65 20 6c 61 73 74 20 6f  ready the last o
2fb30 6e 65 20 69 6e 20 74 68 65 20 64 61 74 61 62 61  ne in the databa
2fb40 73 65 29 20 74 68 65 6e 20 61 20 0a 2a 2a 20 7a  se) then a .** z
2fb50 65 72 6f 20 69 73 20 73 74 6f 72 65 64 20 69 6e  ero is stored in
2fb60 20 72 65 67 69 73 74 65 72 20 50 32 2e 20 20 49   register P2.  I
2fb70 66 20 41 55 54 4f 56 41 43 55 55 4d 20 69 73 20  f AUTOVACUUM is 
2fb80 64 69 73 61 62 6c 65 64 20 74 68 65 6e 20 61 20  disabled then a 
2fb90 7a 65 72 6f 20 0a 2a 2a 20 69 73 20 73 74 6f 72  zero .** is stor
2fba0 65 64 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ed in register P
2fbb0 32 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70  2..**.** This op
2fbc0 63 6f 64 65 20 74 68 72 6f 77 73 20 61 6e 20 65  code throws an e
2fbd0 72 72 6f 72 20 69 66 20 74 68 65 72 65 20 61 72  rror if there ar
2fbe0 65 20 61 6e 79 20 61 63 74 69 76 65 20 72 65 61  e any active rea
2fbf0 64 65 72 20 56 4d 73 20 77 68 65 6e 0a 2a 2a 20  der VMs when.** 
2fc00 69 74 20 69 73 20 69 6e 76 6f 6b 65 64 2e 20 54  it is invoked. T
2fc10 68 69 73 20 69 73 20 64 6f 6e 65 20 74 6f 20 61  his is done to a
2fc20 76 6f 69 64 20 74 68 65 20 64 69 66 66 69 63 75  void the difficu
2fc30 6c 74 79 20 61 73 73 6f 63 69 61 74 65 64 20 77  lty associated w
2fc40 69 74 68 20 0a 2a 2a 20 75 70 64 61 74 69 6e 67  ith .** updating
2fc50 20 65 78 69 73 74 69 6e 67 20 63 75 72 73 6f 72   existing cursor
2fc60 73 20 77 68 65 6e 20 61 20 72 6f 6f 74 20 70 61  s when a root pa
2fc70 67 65 20 69 73 20 6d 6f 76 65 64 20 69 6e 20 61  ge is moved in a
2fc80 6e 20 41 55 54 4f 56 41 43 55 55 4d 20 0a 2a 2a  n AUTOVACUUM .**
2fc90 20 64 61 74 61 62 61 73 65 2e 20 54 68 69 73 20   database. This 
2fca0 65 72 72 6f 72 20 69 73 20 74 68 72 6f 77 6e 20  error is thrown 
2fcb0 65 76 65 6e 20 69 66 20 74 68 65 20 64 61 74 61  even if the data
2fcc0 62 61 73 65 20 69 73 20 6e 6f 74 20 61 6e 20 41  base is not an A
2fcd0 55 54 4f 56 41 43 55 55 4d 20 0a 2a 2a 20 64 62  UTOVACUUM .** db
2fce0 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 61 76 6f   in order to avo
2fcf0 69 64 20 69 6e 74 72 6f 64 75 63 69 6e 67 20 61  id introducing a
2fd00 6e 20 69 6e 63 6f 6d 70 61 74 69 62 69 6c 69 74  n incompatibilit
2fd10 79 20 62 65 74 77 65 65 6e 20 61 75 74 6f 76 61  y between autova
2fd20 63 75 75 6d 20 0a 2a 2a 20 61 6e 64 20 6e 6f 6e  cuum .** and non
2fd30 2d 61 75 74 6f 76 61 63 75 75 6d 20 6d 6f 64 65  -autovacuum mode
2fd40 73 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73  s..**.** See als
2fd50 6f 3a 20 43 6c 65 61 72 0a 2a 2f 0a 63 61 73 65  o: Clear.*/.case
2fd60 20 4f 50 5f 44 65 73 74 72 6f 79 3a 20 7b 20 20   OP_Destroy: {  
2fd70 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20 20     /* out2 */.  
2fd80 69 6e 74 20 69 4d 6f 76 65 64 3b 0a 20 20 69 6e  int iMoved;.  in
2fd90 74 20 69 44 62 3b 0a 0a 20 20 73 71 6c 69 74 65  t iDb;..  sqlite
2fda0 33 56 64 62 65 49 6e 63 72 57 72 69 74 65 43 6f  3VdbeIncrWriteCo
2fdb0 75 6e 74 65 72 28 70 2c 20 30 29 3b 0a 20 20 61  unter(p, 0);.  a
2fdc0 73 73 65 72 74 28 20 70 2d 3e 72 65 61 64 4f 6e  ssert( p->readOn
2fdd0 6c 79 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  ly==0 );.  asser
2fde0 74 28 20 70 4f 70 2d 3e 70 31 3e 31 20 29 3b 0a  t( pOp->p1>1 );.
2fdf0 20 20 70 4f 75 74 20 3d 20 6f 75 74 32 50 72 65    pOut = out2Pre
2fe00 72 65 6c 65 61 73 65 28 70 2c 20 70 4f 70 29 3b  release(p, pOp);
2fe10 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d  .  pOut->flags =
2fe20 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20 20 69 66 28   MEM_Null;.  if(
2fe30 20 64 62 2d 3e 6e 56 64 62 65 52 65 61 64 20 3e   db->nVdbeRead >
2fe40 20 64 62 2d 3e 6e 56 44 65 73 74 72 6f 79 2b 31   db->nVDestroy+1
2fe50 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c   ){.    rc = SQL
2fe60 49 54 45 5f 4c 4f 43 4b 45 44 3b 0a 20 20 20 20  ITE_LOCKED;.    
2fe70 70 2d 3e 65 72 72 6f 72 41 63 74 69 6f 6e 20 3d  p->errorAction =
2fe80 20 4f 45 5f 41 62 6f 72 74 3b 0a 20 20 20 20 67   OE_Abort;.    g
2fe90 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
2fea0 5f 65 72 72 6f 72 3b 0a 20 20 7d 65 6c 73 65 7b  _error;.  }else{
2feb0 0a 20 20 20 20 69 44 62 20 3d 20 70 4f 70 2d 3e  .    iDb = pOp->
2fec0 70 33 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20  p3;.    assert( 
2fed0 44 62 4d 61 73 6b 54 65 73 74 28 70 2d 3e 62 74  DbMaskTest(p->bt
2fee0 72 65 65 4d 61 73 6b 2c 20 69 44 62 29 20 29 3b  reeMask, iDb) );
2fef0 0a 20 20 20 20 69 4d 6f 76 65 64 20 3d 20 30 3b  .    iMoved = 0;
2ff00 20 20 2f 2a 20 4e 6f 74 20 6e 65 65 64 65 64 2e    /* Not needed.
2ff10 20 20 4f 6e 6c 79 20 74 6f 20 73 69 6c 65 6e 63    Only to silenc
2ff20 65 20 61 20 77 61 72 6e 69 6e 67 2e 20 2a 2f 0a  e a warning. */.
2ff30 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
2ff40 42 74 72 65 65 44 72 6f 70 54 61 62 6c 65 28 64  BtreeDropTable(d
2ff50 62 2d 3e 61 44 62 5b 69 44 62 5d 2e 70 42 74 2c  b->aDb[iDb].pBt,
2ff60 20 70 4f 70 2d 3e 70 31 2c 20 26 69 4d 6f 76 65   pOp->p1, &iMove
2ff70 64 29 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 66 6c  d);.    pOut->fl
2ff80 61 67 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20  ags = MEM_Int;. 
2ff90 20 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 69     pOut->u.i = i
2ffa0 4d 6f 76 65 64 3b 0a 20 20 20 20 69 66 28 20 72  Moved;.    if( r
2ffb0 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64  c ) goto abort_d
2ffc0 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 23 69 66  ue_to_error;.#if
2ffd0 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
2ffe0 5f 41 55 54 4f 56 41 43 55 55 4d 0a 20 20 20 20  _AUTOVACUUM.    
2fff0 69 66 28 20 69 4d 6f 76 65 64 21 3d 30 20 29 7b  if( iMoved!=0 ){
30000 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 52 6f  .      sqlite3Ro
30010 6f 74 50 61 67 65 4d 6f 76 65 64 28 64 62 2c 20  otPageMoved(db, 
30020 69 44 62 2c 20 69 4d 6f 76 65 64 2c 20 70 4f 70  iDb, iMoved, pOp
30030 2d 3e 70 31 29 3b 0a 20 20 20 20 20 20 2f 2a 20  ->p1);.      /* 
30040 41 6c 6c 20 4f 50 5f 44 65 73 74 72 6f 79 20 6f  All OP_Destroy o
30050 70 65 72 61 74 69 6f 6e 73 20 6f 63 63 75 72 20  perations occur 
30060 6f 6e 20 74 68 65 20 73 61 6d 65 20 62 74 72 65  on the same btre
30070 65 20 2a 2f 0a 20 20 20 20 20 20 61 73 73 65 72  e */.      asser
30080 74 28 20 72 65 73 65 74 53 63 68 65 6d 61 4f 6e  t( resetSchemaOn
30090 46 61 75 6c 74 3d 3d 30 20 7c 7c 20 72 65 73 65  Fault==0 || rese
300a0 74 53 63 68 65 6d 61 4f 6e 46 61 75 6c 74 3d 3d  tSchemaOnFault==
300b0 69 44 62 2b 31 20 29 3b 0a 20 20 20 20 20 20 72  iDb+1 );.      r
300c0 65 73 65 74 53 63 68 65 6d 61 4f 6e 46 61 75 6c  esetSchemaOnFaul
300d0 74 20 3d 20 69 44 62 2b 31 3b 0a 20 20 20 20 7d  t = iDb+1;.    }
300e0 0a 23 65 6e 64 69 66 0a 20 20 7d 0a 20 20 62 72  .#endif.  }.  br
300f0 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
30100 65 3a 20 43 6c 65 61 72 20 50 31 20 50 32 20 50  e: Clear P1 P2 P
30110 33 0a 2a 2a 0a 2a 2a 20 44 65 6c 65 74 65 20 61  3.**.** Delete a
30120 6c 6c 20 63 6f 6e 74 65 6e 74 73 20 6f 66 20 74  ll contents of t
30130 68 65 20 64 61 74 61 62 61 73 65 20 74 61 62 6c  he database tabl
30140 65 20 6f 72 20 69 6e 64 65 78 20 77 68 6f 73 65  e or index whose
30150 20 72 6f 6f 74 20 70 61 67 65 0a 2a 2a 20 69 6e   root page.** in
30160 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69   the database fi
30170 6c 65 20 69 73 20 67 69 76 65 6e 20 62 79 20 50  le is given by P
30180 31 2e 20 20 42 75 74 2c 20 75 6e 6c 69 6b 65 20  1.  But, unlike 
30190 44 65 73 74 72 6f 79 2c 20 64 6f 20 6e 6f 74 0a  Destroy, do not.
301a0 2a 2a 20 72 65 6d 6f 76 65 20 74 68 65 20 74 61  ** remove the ta
301b0 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 66 72 6f  ble or index fro
301c0 6d 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66  m the database f
301d0 69 6c 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 74  ile..**.** The t
301e0 61 62 6c 65 20 62 65 69 6e 67 20 63 6c 65 61 72  able being clear
301f0 20 69 73 20 69 6e 20 74 68 65 20 6d 61 69 6e 20   is in the main 
30200 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 69 66  database file if
30210 20 50 32 3d 3d 30 2e 20 20 49 66 0a 2a 2a 20 50   P2==0.  If.** P
30220 32 3d 3d 31 20 74 68 65 6e 20 74 68 65 20 74 61  2==1 then the ta
30230 62 6c 65 20 74 6f 20 62 65 20 63 6c 65 61 72 20  ble to be clear 
30240 69 73 20 69 6e 20 74 68 65 20 61 75 78 69 6c 69  is in the auxili
30250 61 72 79 20 64 61 74 61 62 61 73 65 20 66 69 6c  ary database fil
30260 65 0a 2a 2a 20 74 68 61 74 20 69 73 20 75 73 65  e.** that is use
30270 64 20 74 6f 20 73 74 6f 72 65 20 74 61 62 6c 65  d to store table
30280 73 20 63 72 65 61 74 65 20 75 73 69 6e 67 20 43  s create using C
30290 52 45 41 54 45 20 54 45 4d 50 4f 52 41 52 59 20  REATE TEMPORARY 
302a0 54 41 42 4c 45 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  TABLE..**.** If 
302b0 74 68 65 20 50 33 20 76 61 6c 75 65 20 69 73 20  the P3 value is 
302c0 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65 6e 20 74  non-zero, then t
302d0 68 65 20 74 61 62 6c 65 20 72 65 66 65 72 72 65  he table referre
302e0 64 20 74 6f 20 6d 75 73 74 20 62 65 20 61 6e 0a  d to must be an.
302f0 2a 2a 20 69 6e 74 6b 65 79 20 74 61 62 6c 65 20  ** intkey table 
30300 28 61 6e 20 53 51 4c 20 74 61 62 6c 65 2c 20 6e  (an SQL table, n
30310 6f 74 20 61 6e 20 69 6e 64 65 78 29 2e 20 49 6e  ot an index). In
30320 20 74 68 69 73 20 63 61 73 65 20 74 68 65 20 72   this case the r
30330 6f 77 20 63 68 61 6e 67 65 20 0a 2a 2a 20 63 6f  ow change .** co
30340 75 6e 74 20 69 73 20 69 6e 63 72 65 6d 65 6e 74  unt is increment
30350 65 64 20 62 79 20 74 68 65 20 6e 75 6d 62 65 72  ed by the number
30360 20 6f 66 20 72 6f 77 73 20 69 6e 20 74 68 65 20   of rows in the 
30370 74 61 62 6c 65 20 62 65 69 6e 67 20 63 6c 65 61  table being clea
30380 72 65 64 2e 20 0a 2a 2a 20 49 66 20 50 33 20 69  red. .** If P3 i
30390 73 20 67 72 65 61 74 65 72 20 74 68 61 6e 20 7a  s greater than z
303a0 65 72 6f 2c 20 74 68 65 6e 20 74 68 65 20 76 61  ero, then the va
303b0 6c 75 65 20 73 74 6f 72 65 64 20 69 6e 20 72 65  lue stored in re
303c0 67 69 73 74 65 72 20 50 33 20 69 73 0a 2a 2a 20  gister P3 is.** 
303d0 61 6c 73 6f 20 69 6e 63 72 65 6d 65 6e 74 65 64  also incremented
303e0 20 62 79 20 74 68 65 20 6e 75 6d 62 65 72 20 6f   by the number o
303f0 66 20 72 6f 77 73 20 69 6e 20 74 68 65 20 74 61  f rows in the ta
30400 62 6c 65 20 62 65 69 6e 67 20 63 6c 65 61 72 65  ble being cleare
30410 64 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73  d..**.** See als
30420 6f 3a 20 44 65 73 74 72 6f 79 0a 2a 2f 0a 63 61  o: Destroy.*/.ca
30430 73 65 20 4f 50 5f 43 6c 65 61 72 3a 20 7b 0a 20  se OP_Clear: {. 
30440 20 69 6e 74 20 6e 43 68 61 6e 67 65 3b 0a 20 0a   int nChange;. .
30450 20 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e 63    sqlite3VdbeInc
30460 72 57 72 69 74 65 43 6f 75 6e 74 65 72 28 70 2c  rWriteCounter(p,
30470 20 30 29 3b 0a 20 20 6e 43 68 61 6e 67 65 20 3d   0);.  nChange =
30480 20 30 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d   0;.  assert( p-
30490 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a  >readOnly==0 );.
304a0 20 20 61 73 73 65 72 74 28 20 44 62 4d 61 73 6b    assert( DbMask
304b0 54 65 73 74 28 70 2d 3e 62 74 72 65 65 4d 61 73  Test(p->btreeMas
304c0 6b 2c 20 70 4f 70 2d 3e 70 32 29 20 29 3b 0a 20  k, pOp->p2) );. 
304d0 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
304e0 65 65 43 6c 65 61 72 54 61 62 6c 65 28 0a 20 20  eeClearTable(.  
304f0 20 20 20 20 64 62 2d 3e 61 44 62 5b 70 4f 70 2d      db->aDb[pOp-
30500 3e 70 32 5d 2e 70 42 74 2c 20 70 4f 70 2d 3e 70  >p2].pBt, pOp->p
30510 31 2c 20 28 70 4f 70 2d 3e 70 33 20 3f 20 26 6e  1, (pOp->p3 ? &n
30520 43 68 61 6e 67 65 20 3a 20 30 29 0a 20 20 29 3b  Change : 0).  );
30530 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 33 20 29  .  if( pOp->p3 )
30540 7b 0a 20 20 20 20 70 2d 3e 6e 43 68 61 6e 67 65  {.    p->nChange
30550 20 2b 3d 20 6e 43 68 61 6e 67 65 3b 0a 20 20 20   += nChange;.   
30560 20 69 66 28 20 70 4f 70 2d 3e 70 33 3e 30 20 29   if( pOp->p3>0 )
30570 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  {.      assert( 
30580 6d 65 6d 49 73 56 61 6c 69 64 28 26 61 4d 65 6d  memIsValid(&aMem
30590 5b 70 4f 70 2d 3e 70 33 5d 29 20 29 3b 0a 20 20  [pOp->p3]) );.  
305a0 20 20 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68      memAboutToCh
305b0 61 6e 67 65 28 70 2c 20 26 61 4d 65 6d 5b 70 4f  ange(p, &aMem[pO
305c0 70 2d 3e 70 33 5d 29 3b 0a 20 20 20 20 20 20 61  p->p3]);.      a
305d0 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 2e 75 2e 69  Mem[pOp->p3].u.i
305e0 20 2b 3d 20 6e 43 68 61 6e 67 65 3b 0a 20 20 20   += nChange;.   
305f0 20 7d 0a 20 20 7d 0a 20 20 69 66 28 20 72 63 20   }.  }.  if( rc 
30600 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65  ) goto abort_due
30610 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 62 72 65  _to_error;.  bre
30620 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
30630 3a 20 52 65 73 65 74 53 6f 72 74 65 72 20 50 31  : ResetSorter P1
30640 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 44   * * * *.**.** D
30650 65 6c 65 74 65 20 61 6c 6c 20 63 6f 6e 74 65 6e  elete all conten
30660 74 73 20 66 72 6f 6d 20 74 68 65 20 65 70 68 65  ts from the ephe
30670 6d 65 72 61 6c 20 74 61 62 6c 65 20 6f 72 20 73  meral table or s
30680 6f 72 74 65 72 0a 2a 2a 20 74 68 61 74 20 69 73  orter.** that is
30690 20 6f 70 65 6e 20 6f 6e 20 63 75 72 73 6f 72 20   open on cursor 
306a0 50 31 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f  P1..**.** This o
306b0 70 63 6f 64 65 20 6f 6e 6c 79 20 77 6f 72 6b 73  pcode only works
306c0 20 66 6f 72 20 63 75 72 73 6f 72 73 20 75 73 65   for cursors use
306d0 64 20 66 6f 72 20 73 6f 72 74 69 6e 67 20 61 6e  d for sorting an
306e0 64 0a 2a 2a 20 6f 70 65 6e 65 64 20 77 69 74 68  d.** opened with
306f0 20 4f 50 5f 4f 70 65 6e 45 70 68 65 6d 65 72 61   OP_OpenEphemera
30700 6c 20 6f 72 20 4f 50 5f 53 6f 72 74 65 72 4f 70  l or OP_SorterOp
30710 65 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52  en..*/.case OP_R
30720 65 73 65 74 53 6f 72 74 65 72 3a 20 7b 0a 20 20  esetSorter: {.  
30730 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a  VdbeCursor *pC;.
30740 20 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d   .  assert( pOp-
30750 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70  >p1>=0 && pOp->p
30760 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a  1<p->nCursor );.
30770 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b    pC = p->apCsr[
30780 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65  pOp->p1];.  asse
30790 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 69  rt( pC!=0 );.  i
307a0 66 28 20 69 73 53 6f 72 74 65 72 28 70 43 29 20  f( isSorter(pC) 
307b0 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  ){.    sqlite3Vd
307c0 62 65 53 6f 72 74 65 72 52 65 73 65 74 28 64 62  beSorterReset(db
307d0 2c 20 70 43 2d 3e 75 63 2e 70 53 6f 72 74 65 72  , pC->uc.pSorter
307e0 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  );.  }else{.    
307f0 61 73 73 65 72 74 28 20 70 43 2d 3e 65 43 75 72  assert( pC->eCur
30800 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f 42 54  Type==CURTYPE_BT
30810 52 45 45 20 29 3b 0a 20 20 20 20 61 73 73 65 72  REE );.    asser
30820 74 28 20 70 43 2d 3e 69 73 45 70 68 65 6d 65 72  t( pC->isEphemer
30830 61 6c 20 29 3b 0a 20 20 20 20 72 63 20 3d 20 73  al );.    rc = s
30840 71 6c 69 74 65 33 42 74 72 65 65 43 6c 65 61 72  qlite3BtreeClear
30850 54 61 62 6c 65 4f 66 43 75 72 73 6f 72 28 70 43  TableOfCursor(pC
30860 2d 3e 75 63 2e 70 43 75 72 73 6f 72 29 3b 0a 20  ->uc.pCursor);. 
30870 20 20 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f     if( rc ) goto
30880 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
30890 72 6f 72 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  ror;.  }.  break
308a0 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
308b0 43 72 65 61 74 65 42 74 72 65 65 20 50 31 20 50  CreateBtree P1 P
308c0 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f  2 P3 * *.** Syno
308d0 70 73 69 73 3a 20 72 5b 50 32 5d 3d 72 6f 6f 74  psis: r[P2]=root
308e0 20 69 44 62 3d 50 31 20 66 6c 61 67 73 3d 50 33   iDb=P1 flags=P3
308f0 0a 2a 2a 0a 2a 2a 20 41 6c 6c 6f 63 61 74 65 20  .**.** Allocate 
30900 61 20 6e 65 77 20 62 2d 74 72 65 65 20 69 6e 20  a new b-tree in 
30910 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73  the main databas
30920 65 20 66 69 6c 65 20 69 66 20 50 31 3d 3d 30 20  e file if P1==0 
30930 6f 72 20 69 6e 20 74 68 65 0a 2a 2a 20 54 45 4d  or in the.** TEM
30940 50 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  P database file 
30950 69 66 20 50 31 3d 3d 31 20 6f 72 20 69 6e 20 61  if P1==1 or in a
30960 6e 20 61 74 74 61 63 68 65 64 20 64 61 74 61 62  n attached datab
30970 61 73 65 20 69 66 0a 2a 2a 20 50 31 3e 31 2e 20  ase if.** P1>1. 
30980 20 54 68 65 20 50 33 20 61 72 67 75 6d 65 6e 74   The P3 argument
30990 20 6d 75 73 74 20 62 65 20 31 20 28 42 54 52 45   must be 1 (BTRE
309a0 45 5f 49 4e 54 4b 45 59 29 20 66 6f 72 20 61 20  E_INTKEY) for a 
309b0 72 6f 77 69 64 20 74 61 62 6c 65 0a 2a 2a 20 69  rowid table.** i
309c0 74 20 6d 75 73 74 20 62 65 20 32 20 28 42 54 52  t must be 2 (BTR
309d0 45 45 5f 42 4c 4f 42 4b 45 59 29 20 66 6f 72 20  EE_BLOBKEY) for 
309e0 61 6e 20 69 6e 64 65 78 20 6f 72 20 57 49 54 48  an index or WITH
309f0 4f 55 54 20 52 4f 57 49 44 20 74 61 62 6c 65 2e  OUT ROWID table.
30a00 0a 2a 2a 20 54 68 65 20 72 6f 6f 74 20 70 61 67  .** The root pag
30a10 65 20 6e 75 6d 62 65 72 20 6f 66 20 74 68 65 20  e number of the 
30a20 6e 65 77 20 62 2d 74 72 65 65 20 69 73 20 73 74  new b-tree is st
30a30 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74 65 72  ored in register
30a40 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f   P2..*/.case OP_
30a50 43 72 65 61 74 65 42 74 72 65 65 3a 20 7b 20 20  CreateBtree: {  
30a60 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 20          /* out2 
30a70 2a 2f 0a 20 20 69 6e 74 20 70 67 6e 6f 3b 0a 20  */.  int pgno;. 
30a80 20 44 62 20 2a 70 44 62 3b 0a 0a 20 20 73 71 6c   Db *pDb;..  sql
30a90 69 74 65 33 56 64 62 65 49 6e 63 72 57 72 69 74  ite3VdbeIncrWrit
30aa0 65 43 6f 75 6e 74 65 72 28 70 2c 20 30 29 3b 0a  eCounter(p, 0);.
30ab0 20 20 70 4f 75 74 20 3d 20 6f 75 74 32 50 72 65    pOut = out2Pre
30ac0 72 65 6c 65 61 73 65 28 70 2c 20 70 4f 70 29 3b  release(p, pOp);
30ad0 0a 20 20 70 67 6e 6f 20 3d 20 30 3b 0a 20 20 61  .  pgno = 0;.  a
30ae0 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3d 3d  ssert( pOp->p3==
30af0 42 54 52 45 45 5f 49 4e 54 4b 45 59 20 7c 7c 20  BTREE_INTKEY || 
30b00 70 4f 70 2d 3e 70 33 3d 3d 42 54 52 45 45 5f 42  pOp->p3==BTREE_B
30b10 4c 4f 42 4b 45 59 20 29 3b 0a 20 20 61 73 73 65  LOBKEY );.  asse
30b20 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26  rt( pOp->p1>=0 &
30b30 26 20 70 4f 70 2d 3e 70 31 3c 64 62 2d 3e 6e 44  & pOp->p1<db->nD
30b40 62 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 44  b );.  assert( D
30b50 62 4d 61 73 6b 54 65 73 74 28 70 2d 3e 62 74 72  bMaskTest(p->btr
30b60 65 65 4d 61 73 6b 2c 20 70 4f 70 2d 3e 70 31 29  eeMask, pOp->p1)
30b70 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d   );.  assert( p-
30b80 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a  >readOnly==0 );.
30b90 20 20 70 44 62 20 3d 20 26 64 62 2d 3e 61 44 62    pDb = &db->aDb
30ba0 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
30bb0 65 72 74 28 20 70 44 62 2d 3e 70 42 74 21 3d 30  ert( pDb->pBt!=0
30bc0 20 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74   );.  rc = sqlit
30bd0 65 33 42 74 72 65 65 43 72 65 61 74 65 54 61 62  e3BtreeCreateTab
30be0 6c 65 28 70 44 62 2d 3e 70 42 74 2c 20 26 70 67  le(pDb->pBt, &pg
30bf0 6e 6f 2c 20 70 4f 70 2d 3e 70 33 29 3b 0a 20 20  no, pOp->p3);.  
30c00 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62  if( rc ) goto ab
30c10 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
30c20 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20  ;.  pOut->u.i = 
30c30 70 67 6e 6f 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  pgno;.  break;.}
30c40 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 71 6c  ../* Opcode: Sql
30c50 45 78 65 63 20 2a 20 2a 20 2a 20 50 34 20 2a 0a  Exec * * * P4 *.
30c60 2a 2a 0a 2a 2a 20 52 75 6e 20 74 68 65 20 53 51  **.** Run the SQ
30c70 4c 20 73 74 61 74 65 6d 65 6e 74 20 6f 72 20 73  L statement or s
30c80 74 61 74 65 6d 65 6e 74 73 20 73 70 65 63 69 66  tatements specif
30c90 69 65 64 20 69 6e 20 74 68 65 20 50 34 20 73 74  ied in the P4 st
30ca0 72 69 6e 67 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  ring..*/.case OP
30cb0 5f 53 71 6c 45 78 65 63 3a 20 7b 0a 20 20 73 71  _SqlExec: {.  sq
30cc0 6c 69 74 65 33 56 64 62 65 49 6e 63 72 57 72 69  lite3VdbeIncrWri
30cd0 74 65 43 6f 75 6e 74 65 72 28 70 2c 20 30 29 3b  teCounter(p, 0);
30ce0 0a 20 20 64 62 2d 3e 6e 53 71 6c 45 78 65 63 2b  .  db->nSqlExec+
30cf0 2b 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65  +;.  rc = sqlite
30d00 33 5f 65 78 65 63 28 64 62 2c 20 70 4f 70 2d 3e  3_exec(db, pOp->
30d10 70 34 2e 7a 2c 20 30 2c 20 30 2c 20 30 29 3b 0a  p4.z, 0, 0, 0);.
30d20 20 20 64 62 2d 3e 6e 53 71 6c 45 78 65 63 2d 2d    db->nSqlExec--
30d30 3b 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f 74  ;.  if( rc ) got
30d40 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
30d50 72 72 6f 72 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  rror;.  break;.}
30d60 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 50 61 72  ../* Opcode: Par
30d70 73 65 53 63 68 65 6d 61 20 50 31 20 2a 20 2a 20  seSchema P1 * * 
30d80 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 52 65 61 64 20  P4 *.**.** Read 
30d90 61 6e 64 20 70 61 72 73 65 20 61 6c 6c 20 65 6e  and parse all en
30da0 74 72 69 65 73 20 66 72 6f 6d 20 74 68 65 20 53  tries from the S
30db0 51 4c 49 54 45 5f 4d 41 53 54 45 52 20 74 61 62  QLITE_MASTER tab
30dc0 6c 65 20 6f 66 20 64 61 74 61 62 61 73 65 20 50  le of database P
30dd0 31 0a 2a 2a 20 74 68 61 74 20 6d 61 74 63 68 20  1.** that match 
30de0 74 68 65 20 57 48 45 52 45 20 63 6c 61 75 73 65  the WHERE clause
30df0 20 50 34 2e 20 20 49 66 20 50 34 20 69 73 20 61   P4.  If P4 is a
30e00 20 4e 55 4c 4c 20 70 6f 69 6e 74 65 72 2c 20 74   NULL pointer, t
30e10 68 65 6e 20 74 68 65 0a 2a 2a 20 65 6e 74 69 72  hen the.** entir
30e20 65 20 73 63 68 65 6d 61 20 66 6f 72 20 50 31 20  e schema for P1 
30e30 69 73 20 72 65 70 61 72 73 65 64 2e 0a 2a 2a 0a  is reparsed..**.
30e40 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 69  ** This opcode i
30e50 6e 76 6f 6b 65 73 20 74 68 65 20 70 61 72 73 65  nvokes the parse
30e60 72 20 74 6f 20 63 72 65 61 74 65 20 61 20 6e 65  r to create a ne
30e70 77 20 76 69 72 74 75 61 6c 20 6d 61 63 68 69 6e  w virtual machin
30e80 65 2c 0a 2a 2a 20 74 68 65 6e 20 72 75 6e 73 20  e,.** then runs 
30e90 74 68 65 20 6e 65 77 20 76 69 72 74 75 61 6c 20  the new virtual 
30ea0 6d 61 63 68 69 6e 65 2e 20 20 49 74 20 69 73 20  machine.  It is 
30eb0 74 68 75 73 20 61 20 72 65 2d 65 6e 74 72 61 6e  thus a re-entran
30ec0 74 20 6f 70 63 6f 64 65 2e 0a 2a 2f 0a 63 61 73  t opcode..*/.cas
30ed0 65 20 4f 50 5f 50 61 72 73 65 53 63 68 65 6d 61  e OP_ParseSchema
30ee0 3a 20 7b 0a 20 20 69 6e 74 20 69 44 62 3b 0a 20  : {.  int iDb;. 
30ef0 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4d 61   const char *zMa
30f00 73 74 65 72 3b 0a 20 20 63 68 61 72 20 2a 7a 53  ster;.  char *zS
30f10 71 6c 3b 0a 20 20 49 6e 69 74 44 61 74 61 20 69  ql;.  InitData i
30f20 6e 69 74 44 61 74 61 3b 0a 0a 20 20 2f 2a 20 41  nitData;..  /* A
30f30 6e 79 20 70 72 65 70 61 72 65 64 20 73 74 61 74  ny prepared stat
30f40 65 6d 65 6e 74 20 74 68 61 74 20 69 6e 76 6f 6b  ement that invok
30f50 65 73 20 74 68 69 73 20 6f 70 63 6f 64 65 20 77  es this opcode w
30f60 69 6c 6c 20 68 6f 6c 64 20 6d 75 74 65 78 65 73  ill hold mutexes
30f70 0a 20 20 2a 2a 20 6f 6e 20 65 76 65 72 79 20 62  .  ** on every b
30f80 74 72 65 65 2e 20 20 54 68 69 73 20 69 73 20 61  tree.  This is a
30f90 20 70 72 65 72 65 71 75 69 73 69 74 65 20 66 6f   prerequisite fo
30fa0 72 20 69 6e 76 6f 6b 69 6e 67 20 0a 20 20 2a 2a  r invoking .  **
30fb0 20 73 71 6c 69 74 65 33 49 6e 69 74 43 61 6c 6c   sqlite3InitCall
30fc0 62 61 63 6b 28 29 2e 0a 20 20 2a 2f 0a 23 69 66  back()..  */.#if
30fd0 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47  def SQLITE_DEBUG
30fe0 0a 20 20 66 6f 72 28 69 44 62 3d 30 3b 20 69 44  .  for(iDb=0; iD
30ff0 62 3c 64 62 2d 3e 6e 44 62 3b 20 69 44 62 2b 2b  b<db->nDb; iDb++
31000 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 69  ){.    assert( i
31010 44 62 3d 3d 31 20 7c 7c 20 73 71 6c 69 74 65 33  Db==1 || sqlite3
31020 42 74 72 65 65 48 6f 6c 64 73 4d 75 74 65 78 28  BtreeHoldsMutex(
31030 64 62 2d 3e 61 44 62 5b 69 44 62 5d 2e 70 42 74  db->aDb[iDb].pBt
31040 29 20 29 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 0a  ) );.  }.#endif.
31050 0a 20 20 69 44 62 20 3d 20 70 4f 70 2d 3e 70 31  .  iDb = pOp->p1
31060 3b 0a 20 20 61 73 73 65 72 74 28 20 69 44 62 3e  ;.  assert( iDb>
31070 3d 30 20 26 26 20 69 44 62 3c 64 62 2d 3e 6e 44  =0 && iDb<db->nD
31080 62 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 44  b );.  assert( D
31090 62 48 61 73 50 72 6f 70 65 72 74 79 28 64 62 2c  bHasProperty(db,
310a0 20 69 44 62 2c 20 44 42 5f 53 63 68 65 6d 61 4c   iDb, DB_SchemaL
310b0 6f 61 64 65 64 29 20 29 3b 0a 0a 23 69 66 6e 64  oaded) );..#ifnd
310c0 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41  ef SQLITE_OMIT_A
310d0 4c 54 45 52 54 41 42 4c 45 0a 20 20 69 66 28 20  LTERTABLE.  if( 
310e0 70 4f 70 2d 3e 70 34 2e 7a 3d 3d 30 20 29 7b 0a  pOp->p4.z==0 ){.
310f0 20 20 20 20 73 71 6c 69 74 65 33 53 63 68 65 6d      sqlite3Schem
31100 61 43 6c 65 61 72 28 64 62 2d 3e 61 44 62 5b 69  aClear(db->aDb[i
31110 44 62 5d 2e 70 53 63 68 65 6d 61 29 3b 0a 20 20  Db].pSchema);.  
31120 20 20 64 62 2d 3e 6d 44 62 46 6c 61 67 73 20 26    db->mDbFlags &
31130 3d 20 7e 44 42 46 4c 41 47 5f 53 63 68 65 6d 61  = ~DBFLAG_Schema
31140 4b 6e 6f 77 6e 4f 6b 3b 0a 20 20 20 20 72 63 20  KnownOk;.    rc 
31150 3d 20 73 71 6c 69 74 65 33 49 6e 69 74 4f 6e 65  = sqlite3InitOne
31160 28 64 62 2c 20 69 44 62 2c 20 26 70 2d 3e 7a 45  (db, iDb, &p->zE
31170 72 72 4d 73 67 2c 20 49 4e 49 54 46 4c 41 47 5f  rrMsg, INITFLAG_
31180 41 6c 74 65 72 54 61 62 6c 65 29 3b 0a 20 20 20  AlterTable);.   
31190 20 64 62 2d 3e 6d 44 62 46 6c 61 67 73 20 7c 3d   db->mDbFlags |=
311a0 20 44 42 46 4c 41 47 5f 53 63 68 65 6d 61 43 68   DBFLAG_SchemaCh
311b0 61 6e 67 65 3b 0a 20 20 20 20 70 2d 3e 65 78 70  ange;.    p->exp
311c0 69 72 65 64 20 3d 20 30 3b 0a 20 20 7d 65 6c 73  ired = 0;.  }els
311d0 65 0a 23 65 6e 64 69 66 0a 20 20 7b 0a 20 20 20  e.#endif.  {.   
311e0 20 7a 4d 61 73 74 65 72 20 3d 20 4d 41 53 54 45   zMaster = MASTE
311f0 52 5f 4e 41 4d 45 3b 0a 20 20 20 20 69 6e 69 74  R_NAME;.    init
31200 44 61 74 61 2e 64 62 20 3d 20 64 62 3b 0a 20 20  Data.db = db;.  
31210 20 20 69 6e 69 74 44 61 74 61 2e 69 44 62 20 3d    initData.iDb =
31220 20 69 44 62 3b 0a 20 20 20 20 69 6e 69 74 44 61   iDb;.    initDa
31230 74 61 2e 70 7a 45 72 72 4d 73 67 20 3d 20 26 70  ta.pzErrMsg = &p
31240 2d 3e 7a 45 72 72 4d 73 67 3b 0a 20 20 20 20 69  ->zErrMsg;.    i
31250 6e 69 74 44 61 74 61 2e 6d 49 6e 69 74 46 6c 61  nitData.mInitFla
31260 67 73 20 3d 20 30 3b 0a 20 20 20 20 7a 53 71 6c  gs = 0;.    zSql
31270 20 3d 20 73 71 6c 69 74 65 33 4d 50 72 69 6e 74   = sqlite3MPrint
31280 66 28 64 62 2c 0a 20 20 20 20 20 20 20 22 53 45  f(db,.       "SE
31290 4c 45 43 54 20 6e 61 6d 65 2c 20 72 6f 6f 74 70  LECT name, rootp
312a0 61 67 65 2c 20 73 71 6c 20 46 52 4f 4d 20 27 25  age, sql FROM '%
312b0 71 27 2e 25 73 20 57 48 45 52 45 20 25 73 20 4f  q'.%s WHERE %s O
312c0 52 44 45 52 20 42 59 20 72 6f 77 69 64 22 2c 0a  RDER BY rowid",.
312d0 20 20 20 20 20 20 20 64 62 2d 3e 61 44 62 5b 69         db->aDb[i
312e0 44 62 5d 2e 7a 44 62 53 4e 61 6d 65 2c 20 7a 4d  Db].zDbSName, zM
312f0 61 73 74 65 72 2c 20 70 4f 70 2d 3e 70 34 2e 7a  aster, pOp->p4.z
31300 29 3b 0a 20 20 20 20 69 66 28 20 7a 53 71 6c 3d  );.    if( zSql=
31310 3d 30 20 29 7b 0a 20 20 20 20 20 20 72 63 20 3d  =0 ){.      rc =
31320 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 5f 42 4b   SQLITE_NOMEM_BK
31330 50 54 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20  PT;.    }else{. 
31340 20 20 20 20 20 61 73 73 65 72 74 28 20 64 62 2d       assert( db-
31350 3e 69 6e 69 74 2e 62 75 73 79 3d 3d 30 20 29 3b  >init.busy==0 );
31360 0a 20 20 20 20 20 20 64 62 2d 3e 69 6e 69 74 2e  .      db->init.
31370 62 75 73 79 20 3d 20 31 3b 0a 20 20 20 20 20 20  busy = 1;.      
31380 69 6e 69 74 44 61 74 61 2e 72 63 20 3d 20 53 51  initData.rc = SQ
31390 4c 49 54 45 5f 4f 4b 3b 0a 20 20 20 20 20 20 69  LITE_OK;.      i
313a0 6e 69 74 44 61 74 61 2e 6e 49 6e 69 74 52 6f 77  nitData.nInitRow
313b0 20 3d 20 30 3b 0a 20 20 20 20 20 20 61 73 73 65   = 0;.      asse
313c0 72 74 28 20 21 64 62 2d 3e 6d 61 6c 6c 6f 63 46  rt( !db->mallocF
313d0 61 69 6c 65 64 20 29 3b 0a 20 20 20 20 20 20 72  ailed );.      r
313e0 63 20 3d 20 73 71 6c 69 74 65 33 5f 65 78 65 63  c = sqlite3_exec
313f0 28 64 62 2c 20 7a 53 71 6c 2c 20 73 71 6c 69 74  (db, zSql, sqlit
31400 65 33 49 6e 69 74 43 61 6c 6c 62 61 63 6b 2c 20  e3InitCallback, 
31410 26 69 6e 69 74 44 61 74 61 2c 20 30 29 3b 0a 20  &initData, 0);. 
31420 20 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c       if( rc==SQL
31430 49 54 45 5f 4f 4b 20 29 20 72 63 20 3d 20 69 6e  ITE_OK ) rc = in
31440 69 74 44 61 74 61 2e 72 63 3b 0a 20 20 20 20 20  itData.rc;.     
31450 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f   if( rc==SQLITE_
31460 4f 4b 20 26 26 20 69 6e 69 74 44 61 74 61 2e 6e  OK && initData.n
31470 49 6e 69 74 52 6f 77 3d 3d 30 20 29 7b 0a 20 20  InitRow==0 ){.  
31480 20 20 20 20 20 20 2f 2a 20 54 68 65 20 4f 50 5f        /* The OP_
31490 50 61 72 73 65 53 63 68 65 6d 61 20 6f 70 63 6f  ParseSchema opco
314a0 64 65 20 77 69 74 68 20 61 20 6e 6f 6e 2d 4e 55  de with a non-NU
314b0 4c 4c 20 50 34 20 61 72 67 75 6d 65 6e 74 20 73  LL P4 argument s
314c0 68 6f 75 6c 64 20 70 61 72 73 65 0a 20 20 20 20  hould parse.    
314d0 20 20 20 20 2a 2a 20 61 74 20 6c 65 61 73 74 20      ** at least 
314e0 6f 6e 65 20 53 51 4c 20 73 74 61 74 65 6d 65 6e  one SQL statemen
314f0 74 2e 20 41 6e 79 20 6c 65 73 73 20 74 68 61 6e  t. Any less than
31500 20 74 68 61 74 20 69 6e 64 69 63 61 74 65 73 20   that indicates 
31510 74 68 61 74 0a 20 20 20 20 20 20 20 20 2a 2a 20  that.        ** 
31520 74 68 65 20 73 71 6c 69 74 65 5f 6d 61 73 74 65  the sqlite_maste
31530 72 20 74 61 62 6c 65 20 69 73 20 63 6f 72 72 75  r table is corru
31540 70 74 2e 20 2a 2f 0a 20 20 20 20 20 20 20 20 72  pt. */.        r
31550 63 20 3d 20 53 51 4c 49 54 45 5f 43 4f 52 52 55  c = SQLITE_CORRU
31560 50 54 5f 42 4b 50 54 3b 0a 20 20 20 20 20 20 7d  PT_BKPT;.      }
31570 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 44 62  .      sqlite3Db
31580 46 72 65 65 4e 4e 28 64 62 2c 20 7a 53 71 6c 29  FreeNN(db, zSql)
31590 3b 0a 20 20 20 20 20 20 64 62 2d 3e 69 6e 69 74  ;.      db->init
315a0 2e 62 75 73 79 20 3d 20 30 3b 0a 20 20 20 20 7d  .busy = 0;.    }
315b0 0a 20 20 7d 0a 20 20 69 66 28 20 72 63 20 29 7b  .  }.  if( rc ){
315c0 0a 20 20 20 20 73 71 6c 69 74 65 33 52 65 73 65  .    sqlite3Rese
315d0 74 41 6c 6c 53 63 68 65 6d 61 73 4f 66 43 6f 6e  tAllSchemasOfCon
315e0 6e 65 63 74 69 6f 6e 28 64 62 29 3b 0a 20 20 20  nection(db);.   
315f0 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f   if( rc==SQLITE_
31600 4e 4f 4d 45 4d 20 29 7b 0a 20 20 20 20 20 20 67  NOMEM ){.      g
31610 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 20 20  oto no_mem;.    
31620 7d 0a 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74  }.    goto abort
31630 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20  _due_to_error;. 
31640 20 7d 0a 20 20 62 72 65 61 6b 3b 20 20 0a 7d 0a   }.  break;  .}.
31650 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51  .#if !defined(SQ
31660 4c 49 54 45 5f 4f 4d 49 54 5f 41 4e 41 4c 59 5a  LITE_OMIT_ANALYZ
31670 45 29 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4c 6f  E)./* Opcode: Lo
31680 61 64 41 6e 61 6c 79 73 69 73 20 50 31 20 2a 20  adAnalysis P1 * 
31690 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 52 65 61 64  * * *.**.** Read
316a0 20 74 68 65 20 73 71 6c 69 74 65 5f 73 74 61 74   the sqlite_stat
316b0 31 20 74 61 62 6c 65 20 66 6f 72 20 64 61 74 61  1 table for data
316c0 62 61 73 65 20 50 31 20 61 6e 64 20 6c 6f 61 64  base P1 and load
316d0 20 74 68 65 20 63 6f 6e 74 65 6e 74 0a 2a 2a 20   the content.** 
316e0 6f 66 20 74 68 61 74 20 74 61 62 6c 65 20 69 6e  of that table in
316f0 74 6f 20 74 68 65 20 69 6e 74 65 72 6e 61 6c 20  to the internal 
31700 69 6e 64 65 78 20 68 61 73 68 20 74 61 62 6c 65  index hash table
31710 2e 20 20 54 68 69 73 20 77 69 6c 6c 20 63 61 75  .  This will cau
31720 73 65 0a 2a 2a 20 74 68 65 20 61 6e 61 6c 79 73  se.** the analys
31730 69 73 20 74 6f 20 62 65 20 75 73 65 64 20 77 68  is to be used wh
31740 65 6e 20 70 72 65 70 61 72 69 6e 67 20 61 6c 6c  en preparing all
31750 20 73 75 62 73 65 71 75 65 6e 74 20 71 75 65 72   subsequent quer
31760 69 65 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ies..*/.case OP_
31770 4c 6f 61 64 41 6e 61 6c 79 73 69 73 3a 20 7b 0a  LoadAnalysis: {.
31780 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
31790 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c  1>=0 && pOp->p1<
317a0 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 72 63 20  db->nDb );.  rc 
317b0 3d 20 73 71 6c 69 74 65 33 41 6e 61 6c 79 73 69  = sqlite3Analysi
317c0 73 4c 6f 61 64 28 64 62 2c 20 70 4f 70 2d 3e 70  sLoad(db, pOp->p
317d0 31 29 3b 0a 20 20 69 66 28 20 72 63 20 29 20 67  1);.  if( rc ) g
317e0 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
317f0 5f 65 72 72 6f 72 3b 0a 20 20 62 72 65 61 6b 3b  _error;.  break;
31800 20 20 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 21    .}.#endif /* !
31810 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f  defined(SQLITE_O
31820 4d 49 54 5f 41 4e 41 4c 59 5a 45 29 20 2a 2f 0a  MIT_ANALYZE) */.
31830 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 44 72 6f 70  ./* Opcode: Drop
31840 54 61 62 6c 65 20 50 31 20 2a 20 2a 20 50 34 20  Table P1 * * P4 
31850 2a 0a 2a 2a 0a 2a 2a 20 52 65 6d 6f 76 65 20 74  *.**.** Remove t
31860 68 65 20 69 6e 74 65 72 6e 61 6c 20 28 69 6e 2d  he internal (in-
31870 6d 65 6d 6f 72 79 29 20 64 61 74 61 20 73 74 72  memory) data str
31880 75 63 74 75 72 65 73 20 74 68 61 74 20 64 65 73  uctures that des
31890 63 72 69 62 65 0a 2a 2a 20 74 68 65 20 74 61 62  cribe.** the tab
318a0 6c 65 20 6e 61 6d 65 64 20 50 34 20 69 6e 20 64  le named P4 in d
318b0 61 74 61 62 61 73 65 20 50 31 2e 20 20 54 68 69  atabase P1.  Thi
318c0 73 20 69 73 20 63 61 6c 6c 65 64 20 61 66 74 65  s is called afte
318d0 72 20 61 20 74 61 62 6c 65 0a 2a 2a 20 69 73 20  r a table.** is 
318e0 64 72 6f 70 70 65 64 20 66 72 6f 6d 20 64 69 73  dropped from dis
318f0 6b 20 28 75 73 69 6e 67 20 74 68 65 20 44 65 73  k (using the Des
31900 74 72 6f 79 20 6f 70 63 6f 64 65 29 20 69 6e 20  troy opcode) in 
31910 6f 72 64 65 72 20 74 6f 20 6b 65 65 70 20 0a 2a  order to keep .*
31920 2a 20 74 68 65 20 69 6e 74 65 72 6e 61 6c 20 72  * the internal r
31930 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66  epresentation of
31940 20 74 68 65 0a 2a 2a 20 73 63 68 65 6d 61 20 63   the.** schema c
31950 6f 6e 73 69 73 74 65 6e 74 20 77 69 74 68 20 77  onsistent with w
31960 68 61 74 20 69 73 20 6f 6e 20 64 69 73 6b 2e 0a  hat is on disk..
31970 2a 2f 0a 63 61 73 65 20 4f 50 5f 44 72 6f 70 54  */.case OP_DropT
31980 61 62 6c 65 3a 20 7b 0a 20 20 73 71 6c 69 74 65  able: {.  sqlite
31990 33 56 64 62 65 49 6e 63 72 57 72 69 74 65 43 6f  3VdbeIncrWriteCo
319a0 75 6e 74 65 72 28 70 2c 20 30 29 3b 0a 20 20 73  unter(p, 0);.  s
319b0 71 6c 69 74 65 33 55 6e 6c 69 6e 6b 41 6e 64 44  qlite3UnlinkAndD
319c0 65 6c 65 74 65 54 61 62 6c 65 28 64 62 2c 20 70  eleteTable(db, p
319d0 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70 34 2e  Op->p1, pOp->p4.
319e0 7a 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  z);.  break;.}..
319f0 2f 2a 20 4f 70 63 6f 64 65 3a 20 44 72 6f 70 49  /* Opcode: DropI
31a00 6e 64 65 78 20 50 31 20 2a 20 2a 20 50 34 20 2a  ndex P1 * * P4 *
31a10 0a 2a 2a 0a 2a 2a 20 52 65 6d 6f 76 65 20 74 68  .**.** Remove th
31a20 65 20 69 6e 74 65 72 6e 61 6c 20 28 69 6e 2d 6d  e internal (in-m
31a30 65 6d 6f 72 79 29 20 64 61 74 61 20 73 74 72 75  emory) data stru
31a40 63 74 75 72 65 73 20 74 68 61 74 20 64 65 73 63  ctures that desc
31a50 72 69 62 65 0a 2a 2a 20 74 68 65 20 69 6e 64 65  ribe.** the inde
31a60 78 20 6e 61 6d 65 64 20 50 34 20 69 6e 20 64 61  x named P4 in da
31a70 74 61 62 61 73 65 20 50 31 2e 20 20 54 68 69 73  tabase P1.  This
31a80 20 69 73 20 63 61 6c 6c 65 64 20 61 66 74 65 72   is called after
31a90 20 61 6e 20 69 6e 64 65 78 0a 2a 2a 20 69 73 20   an index.** is 
31aa0 64 72 6f 70 70 65 64 20 66 72 6f 6d 20 64 69 73  dropped from dis
31ab0 6b 20 28 75 73 69 6e 67 20 74 68 65 20 44 65 73  k (using the Des
31ac0 74 72 6f 79 20 6f 70 63 6f 64 65 29 0a 2a 2a 20  troy opcode).** 
31ad0 69 6e 20 6f 72 64 65 72 20 74 6f 20 6b 65 65 70  in order to keep
31ae0 20 74 68 65 20 69 6e 74 65 72 6e 61 6c 20 72 65   the internal re
31af0 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66 20  presentation of 
31b00 74 68 65 0a 2a 2a 20 73 63 68 65 6d 61 20 63 6f  the.** schema co
31b10 6e 73 69 73 74 65 6e 74 20 77 69 74 68 20 77 68  nsistent with wh
31b20 61 74 20 69 73 20 6f 6e 20 64 69 73 6b 2e 0a 2a  at is on disk..*
31b30 2f 0a 63 61 73 65 20 4f 50 5f 44 72 6f 70 49 6e  /.case OP_DropIn
31b40 64 65 78 3a 20 7b 0a 20 20 73 71 6c 69 74 65 33  dex: {.  sqlite3
31b50 56 64 62 65 49 6e 63 72 57 72 69 74 65 43 6f 75  VdbeIncrWriteCou
31b60 6e 74 65 72 28 70 2c 20 30 29 3b 0a 20 20 73 71  nter(p, 0);.  sq
31b70 6c 69 74 65 33 55 6e 6c 69 6e 6b 41 6e 64 44 65  lite3UnlinkAndDe
31b80 6c 65 74 65 49 6e 64 65 78 28 64 62 2c 20 70 4f  leteIndex(db, pO
31b90 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70 34 2e 7a  p->p1, pOp->p4.z
31ba0 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  );.  break;.}../
31bb0 2a 20 4f 70 63 6f 64 65 3a 20 44 72 6f 70 54 72  * Opcode: DropTr
31bc0 69 67 67 65 72 20 50 31 20 2a 20 2a 20 50 34 20  igger P1 * * P4 
31bd0 2a 0a 2a 2a 0a 2a 2a 20 52 65 6d 6f 76 65 20 74  *.**.** Remove t
31be0 68 65 20 69 6e 74 65 72 6e 61 6c 20 28 69 6e 2d  he internal (in-
31bf0 6d 65 6d 6f 72 79 29 20 64 61 74 61 20 73 74 72  memory) data str
31c00 75 63 74 75 72 65 73 20 74 68 61 74 20 64 65 73  uctures that des
31c10 63 72 69 62 65 0a 2a 2a 20 74 68 65 20 74 72 69  cribe.** the tri
31c20 67 67 65 72 20 6e 61 6d 65 64 20 50 34 20 69 6e  gger named P4 in
31c30 20 64 61 74 61 62 61 73 65 20 50 31 2e 20 20 54   database P1.  T
31c40 68 69 73 20 69 73 20 63 61 6c 6c 65 64 20 61 66  his is called af
31c50 74 65 72 20 61 20 74 72 69 67 67 65 72 0a 2a 2a  ter a trigger.**
31c60 20 69 73 20 64 72 6f 70 70 65 64 20 66 72 6f 6d   is dropped from
31c70 20 64 69 73 6b 20 28 75 73 69 6e 67 20 74 68 65   disk (using the
31c80 20 44 65 73 74 72 6f 79 20 6f 70 63 6f 64 65 29   Destroy opcode)
31c90 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 6b 65 65   in order to kee
31ca0 70 20 0a 2a 2a 20 74 68 65 20 69 6e 74 65 72 6e  p .** the intern
31cb0 61 6c 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f  al representatio
31cc0 6e 20 6f 66 20 74 68 65 0a 2a 2a 20 73 63 68 65  n of the.** sche
31cd0 6d 61 20 63 6f 6e 73 69 73 74 65 6e 74 20 77 69  ma consistent wi
31ce0 74 68 20 77 68 61 74 20 69 73 20 6f 6e 20 64 69  th what is on di
31cf0 73 6b 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 44  sk..*/.case OP_D
31d00 72 6f 70 54 72 69 67 67 65 72 3a 20 7b 0a 20 20  ropTrigger: {.  
31d10 73 71 6c 69 74 65 33 56 64 62 65 49 6e 63 72 57  sqlite3VdbeIncrW
31d20 72 69 74 65 43 6f 75 6e 74 65 72 28 70 2c 20 30  riteCounter(p, 0
31d30 29 3b 0a 20 20 73 71 6c 69 74 65 33 55 6e 6c 69  );.  sqlite3Unli
31d40 6e 6b 41 6e 64 44 65 6c 65 74 65 54 72 69 67 67  nkAndDeleteTrigg
31d50 65 72 28 64 62 2c 20 70 4f 70 2d 3e 70 31 2c 20  er(db, pOp->p1, 
31d60 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20 62 72  pOp->p4.z);.  br
31d70 65 61 6b 3b 0a 7d 0a 0a 0a 23 69 66 6e 64 65 66  eak;.}...#ifndef
31d80 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 49 4e 54   SQLITE_OMIT_INT
31d90 45 47 52 49 54 59 5f 43 48 45 43 4b 0a 2f 2a 20  EGRITY_CHECK./* 
31da0 4f 70 63 6f 64 65 3a 20 49 6e 74 65 67 72 69 74  Opcode: Integrit
31db0 79 43 6b 20 50 31 20 50 32 20 50 33 20 50 34 20  yCk P1 P2 P3 P4 
31dc0 50 35 0a 2a 2a 0a 2a 2a 20 44 6f 20 61 6e 20 61  P5.**.** Do an a
31dd0 6e 61 6c 79 73 69 73 20 6f 66 20 74 68 65 20 63  nalysis of the c
31de0 75 72 72 65 6e 74 6c 79 20 6f 70 65 6e 20 64 61  urrently open da
31df0 74 61 62 61 73 65 2e 20 20 53 74 6f 72 65 20 69  tabase.  Store i
31e00 6e 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 50 31  n.** register P1
31e10 20 74 68 65 20 74 65 78 74 20 6f 66 20 61 6e 20   the text of an 
31e20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 20 64 65  error message de
31e30 73 63 72 69 62 69 6e 67 20 61 6e 79 20 70 72 6f  scribing any pro
31e40 62 6c 65 6d 73 2e 0a 2a 2a 20 49 66 20 6e 6f 20  blems..** If no 
31e50 70 72 6f 62 6c 65 6d 73 20 61 72 65 20 66 6f 75  problems are fou
31e60 6e 64 2c 20 73 74 6f 72 65 20 61 20 4e 55 4c 4c  nd, store a NULL
31e70 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 2e   in register P1.
31e80 0a 2a 2a 0a 2a 2a 20 54 68 65 20 72 65 67 69 73  .**.** The regis
31e90 74 65 72 20 50 33 20 63 6f 6e 74 61 69 6e 73 20  ter P3 contains 
31ea0 6f 6e 65 20 6c 65 73 73 20 74 68 61 6e 20 74 68  one less than th
31eb0 65 20 6d 61 78 69 6d 75 6d 20 6e 75 6d 62 65 72  e maximum number
31ec0 20 6f 66 20 61 6c 6c 6f 77 65 64 20 65 72 72 6f   of allowed erro
31ed0 72 73 2e 0a 2a 2a 20 41 74 20 6d 6f 73 74 20 72  rs..** At most r
31ee0 65 67 28 50 33 29 20 65 72 72 6f 72 73 20 77 69  eg(P3) errors wi
31ef0 6c 6c 20 62 65 20 72 65 70 6f 72 74 65 64 2e 0a  ll be reported..
31f00 2a 2a 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64  ** In other word
31f10 73 2c 20 74 68 65 20 61 6e 61 6c 79 73 69 73 20  s, the analysis 
31f20 73 74 6f 70 73 20 61 73 20 73 6f 6f 6e 20 61 73  stops as soon as
31f30 20 72 65 67 28 50 31 29 20 65 72 72 6f 72 73 20   reg(P1) errors 
31f40 61 72 65 20 0a 2a 2a 20 73 65 65 6e 2e 20 20 52  are .** seen.  R
31f50 65 67 28 50 31 29 20 69 73 20 75 70 64 61 74 65  eg(P1) is update
31f60 64 20 77 69 74 68 20 74 68 65 20 6e 75 6d 62 65  d with the numbe
31f70 72 20 6f 66 20 65 72 72 6f 72 73 20 72 65 6d 61  r of errors rema
31f80 69 6e 69 6e 67 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  ining..**.** The
31f90 20 72 6f 6f 74 20 70 61 67 65 20 6e 75 6d 62 65   root page numbe
31fa0 72 73 20 6f 66 20 61 6c 6c 20 74 61 62 6c 65 73  rs of all tables
31fb0 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65   in the database
31fc0 20 61 72 65 20 69 6e 74 65 67 65 72 73 0a 2a 2a   are integers.**
31fd0 20 73 74 6f 72 65 64 20 69 6e 20 50 34 5f 49 4e   stored in P4_IN
31fe0 54 41 52 52 41 59 20 61 72 67 75 6d 65 6e 74 2e  TARRAY argument.
31ff0 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 20 69 73 20  .**.** If P5 is 
32000 6e 6f 74 20 7a 65 72 6f 2c 20 74 68 65 20 63 68  not zero, the ch
32010 65 63 6b 20 69 73 20 64 6f 6e 65 20 6f 6e 20 74  eck is done on t
32020 68 65 20 61 75 78 69 6c 69 61 72 79 20 64 61 74  he auxiliary dat
32030 61 62 61 73 65 0a 2a 2a 20 66 69 6c 65 2c 20 6e  abase.** file, n
32040 6f 74 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61  ot the main data
32050 62 61 73 65 20 66 69 6c 65 2e 0a 2a 2a 0a 2a 2a  base file..**.**
32060 20 54 68 69 73 20 6f 70 63 6f 64 65 20 69 73 20   This opcode is 
32070 75 73 65 64 20 74 6f 20 69 6d 70 6c 65 6d 65 6e  used to implemen
32080 74 20 74 68 65 20 69 6e 74 65 67 72 69 74 79 5f  t the integrity_
32090 63 68 65 63 6b 20 70 72 61 67 6d 61 2e 0a 2a 2f  check pragma..*/
320a0 0a 63 61 73 65 20 4f 50 5f 49 6e 74 65 67 72 69  .case OP_Integri
320b0 74 79 43 6b 3a 20 7b 0a 20 20 69 6e 74 20 6e 52  tyCk: {.  int nR
320c0 6f 6f 74 3b 20 20 20 20 20 20 2f 2a 20 4e 75 6d  oot;      /* Num
320d0 62 65 72 20 6f 66 20 74 61 62 6c 65 73 20 74 6f  ber of tables to
320e0 20 63 68 65 63 6b 2e 20 20 28 4e 75 6d 62 65 72   check.  (Number
320f0 20 6f 66 20 72 6f 6f 74 20 70 61 67 65 73 2e 29   of root pages.)
32100 20 2a 2f 0a 20 20 69 6e 74 20 2a 61 52 6f 6f 74   */.  int *aRoot
32110 3b 20 20 20 20 20 2f 2a 20 41 72 72 61 79 20 6f  ;     /* Array o
32120 66 20 72 6f 6f 74 70 61 67 65 20 6e 75 6d 62 65  f rootpage numbe
32130 72 73 20 66 6f 72 20 74 61 62 6c 65 73 20 74 6f  rs for tables to
32140 20 62 65 20 63 68 65 63 6b 65 64 20 2a 2f 0a 20   be checked */. 
32150 20 69 6e 74 20 6e 45 72 72 3b 20 20 20 20 20 20   int nErr;      
32160 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 72   /* Number of er
32170 72 6f 72 73 20 72 65 70 6f 72 74 65 64 20 2a 2f  rors reported */
32180 0a 20 20 63 68 61 72 20 2a 7a 3b 20 20 20 20 20  .  char *z;     
32190 20 20 20 2f 2a 20 54 65 78 74 20 6f 66 20 74 68     /* Text of th
321a0 65 20 65 72 72 6f 72 20 72 65 70 6f 72 74 20 2a  e error report *
321b0 2f 0a 20 20 4d 65 6d 20 2a 70 6e 45 72 72 3b 20  /.  Mem *pnErr; 
321c0 20 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72 20      /* Register 
321d0 6b 65 65 70 69 6e 67 20 74 72 61 63 6b 20 6f 66  keeping track of
321e0 20 65 72 72 6f 72 73 20 72 65 6d 61 69 6e 69 6e   errors remainin
321f0 67 20 2a 2f 0a 0a 20 20 61 73 73 65 72 74 28 20  g */..  assert( 
32200 70 2d 3e 62 49 73 52 65 61 64 65 72 20 29 3b 0a  p->bIsReader );.
32210 20 20 6e 52 6f 6f 74 20 3d 20 70 4f 70 2d 3e 70    nRoot = pOp->p
32220 32 3b 0a 20 20 61 52 6f 6f 74 20 3d 20 70 4f 70  2;.  aRoot = pOp
32230 2d 3e 70 34 2e 61 69 3b 0a 20 20 61 73 73 65 72  ->p4.ai;.  asser
32240 74 28 20 6e 52 6f 6f 74 3e 30 20 29 3b 0a 20 20  t( nRoot>0 );.  
32250 61 73 73 65 72 74 28 20 61 52 6f 6f 74 5b 30 5d  assert( aRoot[0]
32260 3d 3d 6e 52 6f 6f 74 20 29 3b 0a 20 20 61 73 73  ==nRoot );.  ass
32270 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20 26  ert( pOp->p3>0 &
32280 26 20 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e  & pOp->p3<=(p->n
32290 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73  Mem+1 - p->nCurs
322a0 6f 72 29 20 29 3b 0a 20 20 70 6e 45 72 72 20 3d  or) );.  pnErr =
322b0 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b   &aMem[pOp->p3];
322c0 0a 20 20 61 73 73 65 72 74 28 20 28 70 6e 45 72  .  assert( (pnEr
322d0 72 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49  r->flags & MEM_I
322e0 6e 74 29 21 3d 30 20 29 3b 0a 20 20 61 73 73 65  nt)!=0 );.  asse
322f0 72 74 28 20 28 70 6e 45 72 72 2d 3e 66 6c 61 67  rt( (pnErr->flag
32300 73 20 26 20 28 4d 45 4d 5f 53 74 72 7c 4d 45 4d  s & (MEM_Str|MEM
32310 5f 42 6c 6f 62 29 29 3d 3d 30 20 29 3b 0a 20 20  _Blob))==0 );.  
32320 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn1 = &aMem[pOp
32330 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p1];.  assert(
32340 20 70 4f 70 2d 3e 70 35 3c 64 62 2d 3e 6e 44 62   pOp->p5<db->nDb
32350 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 44 62   );.  assert( Db
32360 4d 61 73 6b 54 65 73 74 28 70 2d 3e 62 74 72 65  MaskTest(p->btre
32370 65 4d 61 73 6b 2c 20 70 4f 70 2d 3e 70 35 29 20  eMask, pOp->p5) 
32380 29 3b 0a 20 20 7a 20 3d 20 73 71 6c 69 74 65 33  );.  z = sqlite3
32390 42 74 72 65 65 49 6e 74 65 67 72 69 74 79 43 68  BtreeIntegrityCh
323a0 65 63 6b 28 64 62 2d 3e 61 44 62 5b 70 4f 70 2d  eck(db->aDb[pOp-
323b0 3e 70 35 5d 2e 70 42 74 2c 20 26 61 52 6f 6f 74  >p5].pBt, &aRoot
323c0 5b 31 5d 2c 20 6e 52 6f 6f 74 2c 0a 20 20 20 20  [1], nRoot,.    
323d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
323e0 20 20 20 20 20 20 20 20 20 20 20 20 20 28 69 6e               (in
323f0 74 29 70 6e 45 72 72 2d 3e 75 2e 69 2b 31 2c 20  t)pnErr->u.i+1, 
32400 26 6e 45 72 72 29 3b 0a 20 20 73 71 6c 69 74 65  &nErr);.  sqlite
32410 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28  3VdbeMemSetNull(
32420 70 49 6e 31 29 3b 0a 20 20 69 66 28 20 6e 45 72  pIn1);.  if( nEr
32430 72 3d 3d 30 20 29 7b 0a 20 20 20 20 61 73 73 65  r==0 ){.    asse
32440 72 74 28 20 7a 3d 3d 30 20 29 3b 0a 20 20 7d 65  rt( z==0 );.  }e
32450 6c 73 65 20 69 66 28 20 7a 3d 3d 30 20 29 7b 0a  lse if( z==0 ){.
32460 20 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b      goto no_mem;
32470 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70 6e  .  }else{.    pn
32480 45 72 72 2d 3e 75 2e 69 20 2d 3d 20 6e 45 72 72  Err->u.i -= nErr
32490 2d 31 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56  -1;.    sqlite3V
324a0 64 62 65 4d 65 6d 53 65 74 53 74 72 28 70 49 6e  dbeMemSetStr(pIn
324b0 31 2c 20 7a 2c 20 2d 31 2c 20 53 51 4c 49 54 45  1, z, -1, SQLITE
324c0 5f 55 54 46 38 2c 20 73 71 6c 69 74 65 33 5f 66  _UTF8, sqlite3_f
324d0 72 65 65 29 3b 0a 20 20 7d 0a 20 20 55 50 44 41  ree);.  }.  UPDA
324e0 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28  TE_MAX_BLOBSIZE(
324f0 70 49 6e 31 29 3b 0a 20 20 73 71 6c 69 74 65 33  pIn1);.  sqlite3
32500 56 64 62 65 43 68 61 6e 67 65 45 6e 63 6f 64 69  VdbeChangeEncodi
32510 6e 67 28 70 49 6e 31 2c 20 65 6e 63 6f 64 69 6e  ng(pIn1, encodin
32520 67 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23  g);.  break;.}.#
32530 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f  endif /* SQLITE_
32540 4f 4d 49 54 5f 49 4e 54 45 47 52 49 54 59 5f 43  OMIT_INTEGRITY_C
32550 48 45 43 4b 20 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f  HECK */../* Opco
32560 64 65 3a 20 52 6f 77 53 65 74 41 64 64 20 50 31  de: RowSetAdd P1
32570 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e   P2 * * *.** Syn
32580 6f 70 73 69 73 3a 20 72 6f 77 73 65 74 28 50 31  opsis: rowset(P1
32590 29 3d 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20 49 6e  )=r[P2].**.** In
325a0 73 65 72 74 20 74 68 65 20 69 6e 74 65 67 65 72  sert the integer
325b0 20 76 61 6c 75 65 20 68 65 6c 64 20 62 79 20 72   value held by r
325c0 65 67 69 73 74 65 72 20 50 32 20 69 6e 74 6f 20  egister P2 into 
325d0 61 20 52 6f 77 53 65 74 20 6f 62 6a 65 63 74 0a  a RowSet object.
325e0 2a 2a 20 68 65 6c 64 20 69 6e 20 72 65 67 69 73  ** held in regis
325f0 74 65 72 20 50 31 2e 0a 2a 2a 0a 2a 2a 20 41 6e  ter P1..**.** An
32600 20 61 73 73 65 72 74 69 6f 6e 20 66 61 69 6c 73   assertion fails
32610 20 69 66 20 50 32 20 69 73 20 6e 6f 74 20 61 6e   if P2 is not an
32620 20 69 6e 74 65 67 65 72 2e 0a 2a 2f 0a 63 61 73   integer..*/.cas
32630 65 20 4f 50 5f 52 6f 77 53 65 74 41 64 64 3a 20  e OP_RowSetAdd: 
32640 7b 20 20 20 20 20 20 20 2f 2a 20 69 6e 31 2c 20  {       /* in1, 
32650 69 6e 32 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20  in2 */.  pIn1 = 
32660 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  &aMem[pOp->p1];.
32670 20 20 70 49 6e 32 20 3d 20 26 61 4d 65 6d 5b 70    pIn2 = &aMem[p
32680 4f 70 2d 3e 70 32 5d 3b 0a 20 20 61 73 73 65 72  Op->p2];.  asser
32690 74 28 20 28 70 49 6e 32 2d 3e 66 6c 61 67 73 20  t( (pIn2->flags 
326a0 26 20 4d 45 4d 5f 49 6e 74 29 21 3d 30 20 29 3b  & MEM_Int)!=0 );
326b0 0a 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c  .  if( (pIn1->fl
326c0 61 67 73 20 26 20 4d 45 4d 5f 42 6c 6f 62 29 3d  ags & MEM_Blob)=
326d0 3d 30 20 29 7b 0a 20 20 20 20 69 66 28 20 73 71  =0 ){.    if( sq
326e0 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 52  lite3VdbeMemSetR
326f0 6f 77 53 65 74 28 70 49 6e 31 29 20 29 20 67 6f  owSet(pIn1) ) go
32700 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 20  to no_mem;.  }. 
32710 20 61 73 73 65 72 74 28 20 73 71 6c 69 74 65 33   assert( sqlite3
32720 56 64 62 65 4d 65 6d 49 73 52 6f 77 53 65 74 28  VdbeMemIsRowSet(
32730 70 49 6e 31 29 20 29 3b 0a 20 20 73 71 6c 69 74  pIn1) );.  sqlit
32740 65 33 52 6f 77 53 65 74 49 6e 73 65 72 74 28 28  e3RowSetInsert((
32750 52 6f 77 53 65 74 2a 29 70 49 6e 31 2d 3e 7a 2c  RowSet*)pIn1->z,
32760 20 70 49 6e 32 2d 3e 75 2e 69 29 3b 0a 20 20 62   pIn2->u.i);.  b
32770 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
32780 64 65 3a 20 52 6f 77 53 65 74 52 65 61 64 20 50  de: RowSetRead P
32790 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53  1 P2 P3 * *.** S
327a0 79 6e 6f 70 73 69 73 3a 20 72 5b 50 33 5d 3d 72  ynopsis: r[P3]=r
327b0 6f 77 73 65 74 28 50 31 29 0a 2a 2a 0a 2a 2a 20  owset(P1).**.** 
327c0 45 78 74 72 61 63 74 20 74 68 65 20 73 6d 61 6c  Extract the smal
327d0 6c 65 73 74 20 76 61 6c 75 65 20 66 72 6f 6d 20  lest value from 
327e0 74 68 65 20 52 6f 77 53 65 74 20 6f 62 6a 65 63  the RowSet objec
327f0 74 20 69 6e 20 50 31 0a 2a 2a 20 61 6e 64 20 70  t in P1.** and p
32800 75 74 20 74 68 61 74 20 76 61 6c 75 65 20 69 6e  ut that value in
32810 74 6f 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a  to register P3..
32820 2a 2a 20 4f 72 2c 20 69 66 20 52 6f 77 53 65 74  ** Or, if RowSet
32830 20 6f 62 6a 65 63 74 20 50 31 20 69 73 20 69 6e   object P1 is in
32840 69 74 69 61 6c 6c 79 20 65 6d 70 74 79 2c 20 6c  itially empty, l
32850 65 61 76 65 20 50 33 0a 2a 2a 20 75 6e 63 68 61  eave P3.** uncha
32860 6e 67 65 64 20 61 6e 64 20 6a 75 6d 70 20 74 6f  nged and jump to
32870 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 50 32 2e   instruction P2.
32880 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 6f 77 53  .*/.case OP_RowS
32890 65 74 52 65 61 64 3a 20 7b 20 20 20 20 20 20 20  etRead: {       
328a0 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 2c 20 6f 75  /* jump, in1, ou
328b0 74 33 20 2a 2f 0a 20 20 69 36 34 20 76 61 6c 3b  t3 */.  i64 val;
328c0 0a 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d  ..  pIn1 = &aMem
328d0 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
328e0 65 72 74 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67  ert( (pIn1->flag
328f0 73 20 26 20 4d 45 4d 5f 42 6c 6f 62 29 3d 3d 30  s & MEM_Blob)==0
32900 20 7c 7c 20 73 71 6c 69 74 65 33 56 64 62 65 4d   || sqlite3VdbeM
32910 65 6d 49 73 52 6f 77 53 65 74 28 70 49 6e 31 29  emIsRowSet(pIn1)
32920 20 29 3b 0a 20 20 69 66 28 20 28 70 49 6e 31 2d   );.  if( (pIn1-
32930 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 42 6c 6f  >flags & MEM_Blo
32940 62 29 3d 3d 30 20 0a 20 20 20 7c 7c 20 73 71 6c  b)==0 .   || sql
32950 69 74 65 33 52 6f 77 53 65 74 4e 65 78 74 28 28  ite3RowSetNext((
32960 52 6f 77 53 65 74 2a 29 70 49 6e 31 2d 3e 7a 2c  RowSet*)pIn1->z,
32970 20 26 76 61 6c 29 3d 3d 30 0a 20 20 29 7b 0a 20   &val)==0.  ){. 
32980 20 20 20 2f 2a 20 54 68 65 20 62 6f 6f 6c 65 61     /* The boolea
32990 6e 20 69 6e 64 65 78 20 69 73 20 65 6d 70 74 79  n index is empty
329a0 20 2a 2f 0a 20 20 20 20 73 71 6c 69 74 65 33 56   */.    sqlite3V
329b0 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 49  dbeMemSetNull(pI
329c0 6e 31 29 3b 0a 20 20 20 20 56 64 62 65 42 72 61  n1);.    VdbeBra
329d0 6e 63 68 54 61 6b 65 6e 28 31 2c 32 29 3b 0a 20  nchTaken(1,2);. 
329e0 20 20 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f     goto jump_to_
329f0 70 32 5f 61 6e 64 5f 63 68 65 63 6b 5f 66 6f 72  p2_and_check_for
32a00 5f 69 6e 74 65 72 72 75 70 74 3b 0a 20 20 7d 65  _interrupt;.  }e
32a10 6c 73 65 7b 0a 20 20 20 20 2f 2a 20 41 20 76 61  lse{.    /* A va
32a20 6c 75 65 20 77 61 73 20 70 75 6c 6c 65 64 20 66  lue was pulled f
32a30 72 6f 6d 20 74 68 65 20 69 6e 64 65 78 20 2a 2f  rom the index */
32a40 0a 20 20 20 20 56 64 62 65 42 72 61 6e 63 68 54  .    VdbeBranchT
32a50 61 6b 65 6e 28 30 2c 32 29 3b 0a 20 20 20 20 73  aken(0,2);.    s
32a60 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74  qlite3VdbeMemSet
32a70 49 6e 74 36 34 28 26 61 4d 65 6d 5b 70 4f 70 2d  Int64(&aMem[pOp-
32a80 3e 70 33 5d 2c 20 76 61 6c 29 3b 0a 20 20 7d 0a  >p3], val);.  }.
32a90 20 20 67 6f 74 6f 20 63 68 65 63 6b 5f 66 6f 72    goto check_for
32aa0 5f 69 6e 74 65 72 72 75 70 74 3b 0a 7d 0a 0a 2f  _interrupt;.}../
32ab0 2a 20 4f 70 63 6f 64 65 3a 20 52 6f 77 53 65 74  * Opcode: RowSet
32ac0 54 65 73 74 20 50 31 20 50 32 20 50 33 20 50 34  Test P1 P2 P3 P4
32ad0 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 66  .** Synopsis: if
32ae0 20 72 5b 50 33 5d 20 69 6e 20 72 6f 77 73 65 74   r[P3] in rowset
32af0 28 50 31 29 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a  (P1) goto P2.**.
32b00 2a 2a 20 52 65 67 69 73 74 65 72 20 50 33 20 69  ** Register P3 i
32b10 73 20 61 73 73 75 6d 65 64 20 74 6f 20 68 6f 6c  s assumed to hol
32b20 64 20 61 20 36 34 2d 62 69 74 20 69 6e 74 65 67  d a 64-bit integ
32b30 65 72 20 76 61 6c 75 65 2e 20 49 66 20 72 65 67  er value. If reg
32b40 69 73 74 65 72 20 50 31 0a 2a 2a 20 63 6f 6e 74  ister P1.** cont
32b50 61 69 6e 73 20 61 20 52 6f 77 53 65 74 20 6f 62  ains a RowSet ob
32b60 6a 65 63 74 20 61 6e 64 20 74 68 61 74 20 52 6f  ject and that Ro
32b70 77 53 65 74 20 6f 62 6a 65 63 74 20 63 6f 6e 74  wSet object cont
32b80 61 69 6e 73 0a 2a 2a 20 74 68 65 20 76 61 6c 75  ains.** the valu
32b90 65 20 68 65 6c 64 20 69 6e 20 50 33 2c 20 6a 75  e held in P3, ju
32ba0 6d 70 20 74 6f 20 72 65 67 69 73 74 65 72 20 50  mp to register P
32bb0 32 2e 20 4f 74 68 65 72 77 69 73 65 2c 20 69 6e  2. Otherwise, in
32bc0 73 65 72 74 20 74 68 65 0a 2a 2a 20 69 6e 74 65  sert the.** inte
32bd0 67 65 72 20 69 6e 20 50 33 20 69 6e 74 6f 20 74  ger in P3 into t
32be0 68 65 20 52 6f 77 53 65 74 20 61 6e 64 20 63 6f  he RowSet and co
32bf0 6e 74 69 6e 75 65 20 6f 6e 20 74 6f 20 74 68 65  ntinue on to the
32c00 0a 2a 2a 20 6e 65 78 74 20 6f 70 63 6f 64 65 2e  .** next opcode.
32c10 0a 2a 2a 0a 2a 2a 20 54 68 65 20 52 6f 77 53 65  .**.** The RowSe
32c20 74 20 6f 62 6a 65 63 74 20 69 73 20 6f 70 74 69  t object is opti
32c30 6d 69 7a 65 64 20 66 6f 72 20 74 68 65 20 63 61  mized for the ca
32c40 73 65 20 77 68 65 72 65 20 73 65 74 73 20 6f 66  se where sets of
32c50 20 69 6e 74 65 67 65 72 73 0a 2a 2a 20 61 72 65   integers.** are
32c60 20 69 6e 73 65 72 74 65 64 20 69 6e 20 64 69 73   inserted in dis
32c70 74 69 6e 63 74 20 70 68 61 73 65 73 2c 20 77 68  tinct phases, wh
32c80 69 63 68 20 65 61 63 68 20 73 65 74 20 63 6f 6e  ich each set con
32c90 74 61 69 6e 73 20 6e 6f 20 64 75 70 6c 69 63 61  tains no duplica
32ca0 74 65 73 2e 0a 2a 2a 20 45 61 63 68 20 73 65 74  tes..** Each set
32cb0 20 69 73 20 69 64 65 6e 74 69 66 69 65 64 20 62   is identified b
32cc0 79 20 61 20 75 6e 69 71 75 65 20 50 34 20 76 61  y a unique P4 va
32cd0 6c 75 65 2e 20 54 68 65 20 66 69 72 73 74 20 73  lue. The first s
32ce0 65 74 0a 2a 2a 20 6d 75 73 74 20 68 61 76 65 20  et.** must have 
32cf0 50 34 3d 3d 30 2c 20 74 68 65 20 66 69 6e 61 6c  P4==0, the final
32d00 20 73 65 74 20 6d 75 73 74 20 68 61 76 65 20 50   set must have P
32d10 34 3d 3d 2d 31 2c 20 61 6e 64 20 66 6f 72 20 61  4==-1, and for a
32d20 6c 6c 20 6f 74 68 65 72 20 73 65 74 73 0a 2a 2a  ll other sets.**
32d30 20 6d 75 73 74 20 68 61 76 65 20 50 34 3e 30 2e   must have P4>0.
32d40 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 61 6c 6c 6f  .**.** This allo
32d50 77 73 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 73  ws optimizations
32d60 3a 20 28 61 29 20 77 68 65 6e 20 50 34 3d 3d 30  : (a) when P4==0
32d70 20 74 68 65 72 65 20 69 73 20 6e 6f 20 6e 65 65   there is no nee
32d80 64 20 74 6f 20 74 65 73 74 0a 2a 2a 20 74 68 65  d to test.** the
32d90 20 52 6f 77 53 65 74 20 6f 62 6a 65 63 74 20 66   RowSet object f
32da0 6f 72 20 50 33 2c 20 61 73 20 69 74 20 69 73 20  or P3, as it is 
32db0 67 75 61 72 61 6e 74 65 65 64 20 6e 6f 74 20 74  guaranteed not t
32dc0 6f 20 63 6f 6e 74 61 69 6e 20 69 74 2c 0a 2a 2a  o contain it,.**
32dd0 20 28 62 29 20 77 68 65 6e 20 50 34 3d 3d 2d 31   (b) when P4==-1
32de0 20 74 68 65 72 65 20 69 73 20 6e 6f 20 6e 65 65   there is no nee
32df0 64 20 74 6f 20 69 6e 73 65 72 74 20 74 68 65 20  d to insert the 
32e00 76 61 6c 75 65 2c 20 61 73 20 69 74 20 77 69 6c  value, as it wil
32e10 6c 0a 2a 2a 20 6e 65 76 65 72 20 62 65 20 74 65  l.** never be te
32e20 73 74 65 64 20 66 6f 72 2c 20 61 6e 64 20 28 63  sted for, and (c
32e30 29 20 77 68 65 6e 20 61 20 76 61 6c 75 65 20 74  ) when a value t
32e40 68 61 74 20 69 73 20 70 61 72 74 20 6f 66 20 73  hat is part of s
32e50 65 74 20 58 20 69 73 0a 2a 2a 20 69 6e 73 65 72  et X is.** inser
32e60 74 65 64 2c 20 74 68 65 72 65 20 69 73 20 6e 6f  ted, there is no
32e70 20 6e 65 65 64 20 74 6f 20 73 65 61 72 63 68 20   need to search 
32e80 74 6f 20 73 65 65 20 69 66 20 74 68 65 20 73 61  to see if the sa
32e90 6d 65 20 76 61 6c 75 65 20 77 61 73 0a 2a 2a 20  me value was.** 
32ea0 70 72 65 76 69 6f 75 73 6c 79 20 69 6e 73 65 72  previously inser
32eb0 74 65 64 20 61 73 20 70 61 72 74 20 6f 66 20 73  ted as part of s
32ec0 65 74 20 58 20 28 6f 6e 6c 79 20 69 66 20 69 74  et X (only if it
32ed0 20 77 61 73 20 70 72 65 76 69 6f 75 73 6c 79 0a   was previously.
32ee0 2a 2a 20 69 6e 73 65 72 74 65 64 20 61 73 20 70  ** inserted as p
32ef0 61 72 74 20 6f 66 20 73 6f 6d 65 20 6f 74 68 65  art of some othe
32f00 72 20 73 65 74 29 2e 0a 2a 2f 0a 63 61 73 65 20  r set)..*/.case 
32f10 4f 50 5f 52 6f 77 53 65 74 54 65 73 74 3a 20 7b  OP_RowSetTest: {
32f20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32f30 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e       /* jump, in
32f40 31 2c 20 69 6e 33 20 2a 2f 0a 20 20 69 6e 74 20  1, in3 */.  int 
32f50 69 53 65 74 3b 0a 20 20 69 6e 74 20 65 78 69 73  iSet;.  int exis
32f60 74 73 3b 0a 0a 20 20 70 49 6e 31 20 3d 20 26 61  ts;..  pIn1 = &a
32f70 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
32f80 70 49 6e 33 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn3 = &aMem[pOp
32f90 2d 3e 70 33 5d 3b 0a 20 20 69 53 65 74 20 3d 20  ->p3];.  iSet = 
32fa0 70 4f 70 2d 3e 70 34 2e 69 3b 0a 20 20 61 73 73  pOp->p4.i;.  ass
32fb0 65 72 74 28 20 70 49 6e 33 2d 3e 66 6c 61 67 73  ert( pIn3->flags
32fc0 26 4d 45 4d 5f 49 6e 74 20 29 3b 0a 0a 20 20 2f  &MEM_Int );..  /
32fd0 2a 20 49 66 20 74 68 65 72 65 20 69 73 20 61 6e  * If there is an
32fe0 79 74 68 69 6e 67 20 6f 74 68 65 72 20 74 68 61  ything other tha
32ff0 6e 20 61 20 72 6f 77 73 65 74 20 6f 62 6a 65 63  n a rowset objec
33000 74 20 69 6e 20 6d 65 6d 6f 72 79 20 63 65 6c 6c  t in memory cell
33010 20 50 31 2c 0a 20 20 2a 2a 20 64 65 6c 65 74 65   P1,.  ** delete
33020 20 69 74 20 6e 6f 77 20 61 6e 64 20 69 6e 69 74   it now and init
33030 69 61 6c 69 7a 65 20 50 31 20 77 69 74 68 20 61  ialize P1 with a
33040 6e 20 65 6d 70 74 79 20 72 6f 77 73 65 74 0a 20  n empty rowset. 
33050 20 2a 2f 0a 20 20 69 66 28 20 28 70 49 6e 31 2d   */.  if( (pIn1-
33060 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 42 6c 6f  >flags & MEM_Blo
33070 62 29 3d 3d 30 20 29 7b 0a 20 20 20 20 69 66 28  b)==0 ){.    if(
33080 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53   sqlite3VdbeMemS
33090 65 74 52 6f 77 53 65 74 28 70 49 6e 31 29 20 29  etRowSet(pIn1) )
330a0 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20   goto no_mem;.  
330b0 7d 0a 20 20 61 73 73 65 72 74 28 20 73 71 6c 69  }.  assert( sqli
330c0 74 65 33 56 64 62 65 4d 65 6d 49 73 52 6f 77 53  te3VdbeMemIsRowS
330d0 65 74 28 70 49 6e 31 29 20 29 3b 0a 20 20 61 73  et(pIn1) );.  as
330e0 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70  sert( pOp->p4typ
330f0 65 3d 3d 50 34 5f 49 4e 54 33 32 20 29 3b 0a 20  e==P4_INT32 );. 
33100 20 61 73 73 65 72 74 28 20 69 53 65 74 3d 3d 2d   assert( iSet==-
33110 31 20 7c 7c 20 69 53 65 74 3e 3d 30 20 29 3b 0a  1 || iSet>=0 );.
33120 20 20 69 66 28 20 69 53 65 74 20 29 7b 0a 20 20    if( iSet ){.  
33130 20 20 65 78 69 73 74 73 20 3d 20 73 71 6c 69 74    exists = sqlit
33140 65 33 52 6f 77 53 65 74 54 65 73 74 28 28 52 6f  e3RowSetTest((Ro
33150 77 53 65 74 2a 29 70 49 6e 31 2d 3e 7a 2c 20 69  wSet*)pIn1->z, i
33160 53 65 74 2c 20 70 49 6e 33 2d 3e 75 2e 69 29 3b  Set, pIn3->u.i);
33170 0a 20 20 20 20 56 64 62 65 42 72 61 6e 63 68 54  .    VdbeBranchT
33180 61 6b 65 6e 28 65 78 69 73 74 73 21 3d 30 2c 32  aken(exists!=0,2
33190 29 3b 0a 20 20 20 20 69 66 28 20 65 78 69 73 74  );.    if( exist
331a0 73 20 29 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f  s ) goto jump_to
331b0 5f 70 32 3b 0a 20 20 7d 0a 20 20 69 66 28 20 69  _p2;.  }.  if( i
331c0 53 65 74 3e 3d 30 20 29 7b 0a 20 20 20 20 73 71  Set>=0 ){.    sq
331d0 6c 69 74 65 33 52 6f 77 53 65 74 49 6e 73 65 72  lite3RowSetInser
331e0 74 28 28 52 6f 77 53 65 74 2a 29 70 49 6e 31 2d  t((RowSet*)pIn1-
331f0 3e 7a 2c 20 70 49 6e 33 2d 3e 75 2e 69 29 3b 0a  >z, pIn3->u.i);.
33200 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
33210 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
33220 4f 4d 49 54 5f 54 52 49 47 47 45 52 0a 0a 2f 2a  OMIT_TRIGGER../*
33230 20 4f 70 63 6f 64 65 3a 20 50 72 6f 67 72 61 6d   Opcode: Program
33240 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a   P1 P2 P3 P4 P5.
33250 2a 2a 0a 2a 2a 20 45 78 65 63 75 74 65 20 74 68  **.** Execute th
33260 65 20 74 72 69 67 67 65 72 20 70 72 6f 67 72 61  e trigger progra
33270 6d 20 70 61 73 73 65 64 20 61 73 20 50 34 20 28  m passed as P4 (
33280 74 79 70 65 20 50 34 5f 53 55 42 50 52 4f 47 52  type P4_SUBPROGR
33290 41 4d 29 2e 20 0a 2a 2a 0a 2a 2a 20 50 31 20 63  AM). .**.** P1 c
332a0 6f 6e 74 61 69 6e 73 20 74 68 65 20 61 64 64 72  ontains the addr
332b0 65 73 73 20 6f 66 20 74 68 65 20 6d 65 6d 6f 72  ess of the memor
332c0 79 20 63 65 6c 6c 20 74 68 61 74 20 63 6f 6e 74  y cell that cont
332d0 61 69 6e 73 20 74 68 65 20 66 69 72 73 74 20 6d  ains the first m
332e0 65 6d 6f 72 79 20 0a 2a 2a 20 63 65 6c 6c 20 69  emory .** cell i
332f0 6e 20 61 6e 20 61 72 72 61 79 20 6f 66 20 76 61  n an array of va
33300 6c 75 65 73 20 75 73 65 64 20 61 73 20 61 72 67  lues used as arg
33310 75 6d 65 6e 74 73 20 74 6f 20 74 68 65 20 73 75  uments to the su
33320 62 2d 70 72 6f 67 72 61 6d 2e 20 50 32 20 0a 2a  b-program. P2 .*
33330 2a 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 61  * contains the a
33340 64 64 72 65 73 73 20 74 6f 20 6a 75 6d 70 20 74  ddress to jump t
33350 6f 20 69 66 20 74 68 65 20 73 75 62 2d 70 72 6f  o if the sub-pro
33360 67 72 61 6d 20 74 68 72 6f 77 73 20 61 6e 20 49  gram throws an I
33370 47 4e 4f 52 45 20 0a 2a 2a 20 65 78 63 65 70 74  GNORE .** except
33380 69 6f 6e 20 75 73 69 6e 67 20 74 68 65 20 52 41  ion using the RA
33390 49 53 45 28 29 20 66 75 6e 63 74 69 6f 6e 2e 20  ISE() function. 
333a0 52 65 67 69 73 74 65 72 20 50 33 20 63 6f 6e 74  Register P3 cont
333b0 61 69 6e 73 20 74 68 65 20 61 64 64 72 65 73 73  ains the address
333c0 20 0a 2a 2a 20 6f 66 20 61 20 6d 65 6d 6f 72 79   .** of a memory
333d0 20 63 65 6c 6c 20 69 6e 20 74 68 69 73 20 28 74   cell in this (t
333e0 68 65 20 70 61 72 65 6e 74 29 20 56 4d 20 74 68  he parent) VM th
333f0 61 74 20 69 73 20 75 73 65 64 20 74 6f 20 61 6c  at is used to al
33400 6c 6f 63 61 74 65 20 74 68 65 20 0a 2a 2a 20 6d  locate the .** m
33410 65 6d 6f 72 79 20 72 65 71 75 69 72 65 64 20 62  emory required b
33420 79 20 74 68 65 20 73 75 62 2d 76 64 62 65 20 61  y the sub-vdbe a
33430 74 20 72 75 6e 74 69 6d 65 2e 0a 2a 2a 0a 2a 2a  t runtime..**.**
33440 20 50 34 20 69 73 20 61 20 70 6f 69 6e 74 65 72   P4 is a pointer
33450 20 74 6f 20 74 68 65 20 56 4d 20 63 6f 6e 74 61   to the VM conta
33460 69 6e 69 6e 67 20 74 68 65 20 74 72 69 67 67 65  ining the trigge
33470 72 20 70 72 6f 67 72 61 6d 2e 0a 2a 2a 0a 2a 2a  r program..**.**
33480 20 49 66 20 50 35 20 69 73 20 6e 6f 6e 2d 7a 65   If P5 is non-ze
33490 72 6f 2c 20 74 68 65 6e 20 72 65 63 75 72 73 69  ro, then recursi
334a0 76 65 20 70 72 6f 67 72 61 6d 20 69 6e 76 6f 63  ve program invoc
334b0 61 74 69 6f 6e 20 69 73 20 65 6e 61 62 6c 65 64  ation is enabled
334c0 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 50 72 6f  ..*/.case OP_Pro
334d0 67 72 61 6d 3a 20 7b 20 20 20 20 20 20 20 20 2f  gram: {        /
334e0 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 69 6e 74 20  * jump */.  int 
334f0 6e 4d 65 6d 3b 20 20 20 20 20 20 20 20 20 20 20  nMem;           
33500 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
33510 20 6d 65 6d 6f 72 79 20 72 65 67 69 73 74 65 72   memory register
33520 73 20 66 6f 72 20 73 75 62 2d 70 72 6f 67 72 61  s for sub-progra
33530 6d 20 2a 2f 0a 20 20 69 6e 74 20 6e 42 79 74 65  m */.  int nByte
33540 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ;              /
33550 2a 20 42 79 74 65 73 20 6f 66 20 72 75 6e 74 69  * Bytes of runti
33560 6d 65 20 73 70 61 63 65 20 72 65 71 75 69 72 65  me space require
33570 64 20 66 6f 72 20 73 75 62 2d 70 72 6f 67 72 61  d for sub-progra
33580 6d 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 52 74 3b  m */.  Mem *pRt;
33590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
335a0 2a 20 52 65 67 69 73 74 65 72 20 74 6f 20 61 6c  * Register to al
335b0 6c 6f 63 61 74 65 20 72 75 6e 74 69 6d 65 20 73  locate runtime s
335c0 70 61 63 65 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70  pace */.  Mem *p
335d0 4d 65 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20  Mem;            
335e0 20 20 2f 2a 20 55 73 65 64 20 74 6f 20 69 74 65    /* Used to ite
335f0 72 61 74 65 20 74 68 72 6f 75 67 68 20 6d 65 6d  rate through mem
33600 6f 72 79 20 63 65 6c 6c 73 20 2a 2f 0a 20 20 4d  ory cells */.  M
33610 65 6d 20 2a 70 45 6e 64 3b 20 20 20 20 20 20 20  em *pEnd;       
33620 20 20 20 20 20 20 20 2f 2a 20 4c 61 73 74 20 6d         /* Last m
33630 65 6d 6f 72 79 20 63 65 6c 6c 20 69 6e 20 6e 65  emory cell in ne
33640 77 20 61 72 72 61 79 20 2a 2f 0a 20 20 56 64 62  w array */.  Vdb
33650 65 46 72 61 6d 65 20 2a 70 46 72 61 6d 65 3b 20  eFrame *pFrame; 
33660 20 20 20 20 20 2f 2a 20 4e 65 77 20 76 64 62 65       /* New vdbe
33670 20 66 72 61 6d 65 20 74 6f 20 65 78 65 63 75 74   frame to execut
33680 65 20 69 6e 20 2a 2f 0a 20 20 53 75 62 50 72 6f  e in */.  SubPro
33690 67 72 61 6d 20 2a 70 50 72 6f 67 72 61 6d 3b 20  gram *pProgram; 
336a0 20 20 2f 2a 20 53 75 62 2d 70 72 6f 67 72 61 6d    /* Sub-program
336b0 20 74 6f 20 65 78 65 63 75 74 65 20 2a 2f 0a 20   to execute */. 
336c0 20 76 6f 69 64 20 2a 74 3b 20 20 20 20 20 20 20   void *t;       
336d0 20 20 20 20 20 20 20 20 20 2f 2a 20 54 6f 6b 65           /* Toke
336e0 6e 20 69 64 65 6e 74 69 66 79 69 6e 67 20 74 72  n identifying tr
336f0 69 67 67 65 72 20 2a 2f 0a 0a 20 20 70 50 72 6f  igger */..  pPro
33700 67 72 61 6d 20 3d 20 70 4f 70 2d 3e 70 34 2e 70  gram = pOp->p4.p
33710 50 72 6f 67 72 61 6d 3b 0a 20 20 70 52 74 20 3d  Program;.  pRt =
33720 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b   &aMem[pOp->p3];
33730 0a 20 20 61 73 73 65 72 74 28 20 70 50 72 6f 67  .  assert( pProg
33740 72 61 6d 2d 3e 6e 4f 70 3e 30 20 29 3b 0a 20 20  ram->nOp>0 );.  
33750 0a 20 20 2f 2a 20 49 66 20 74 68 65 20 70 35 20  .  /* If the p5 
33760 66 6c 61 67 20 69 73 20 63 6c 65 61 72 2c 20 74  flag is clear, t
33770 68 65 6e 20 72 65 63 75 72 73 69 76 65 20 69 6e  hen recursive in
33780 76 6f 63 61 74 69 6f 6e 20 6f 66 20 74 72 69 67  vocation of trig
33790 67 65 72 73 20 69 73 20 0a 20 20 2a 2a 20 64 69  gers is .  ** di
337a0 73 61 62 6c 65 64 20 66 6f 72 20 62 61 63 6b 77  sabled for backw
337b0 61 72 64 73 20 63 6f 6d 70 61 74 69 62 69 6c 69  ards compatibili
337c0 74 79 20 28 70 35 20 69 73 20 73 65 74 20 69 66  ty (p5 is set if
337d0 20 74 68 69 73 20 73 75 62 2d 70 72 6f 67 72 61   this sub-progra
337e0 6d 0a 20 20 2a 2a 20 69 73 20 72 65 61 6c 6c 79  m.  ** is really
337f0 20 61 20 74 72 69 67 67 65 72 2c 20 6e 6f 74 20   a trigger, not 
33800 61 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 61 63  a foreign key ac
33810 74 69 6f 6e 2c 20 61 6e 64 20 74 68 65 20 66 6c  tion, and the fl
33820 61 67 20 73 65 74 0a 20 20 2a 2a 20 61 6e 64 20  ag set.  ** and 
33830 63 6c 65 61 72 65 64 20 62 79 20 74 68 65 20 22  cleared by the "
33840 50 52 41 47 4d 41 20 72 65 63 75 72 73 69 76 65  PRAGMA recursive
33850 5f 74 72 69 67 67 65 72 73 22 20 63 6f 6d 6d 61  _triggers" comma
33860 6e 64 20 69 73 20 63 6c 65 61 72 29 2e 0a 20 20  nd is clear)..  
33870 2a 2a 20 0a 20 20 2a 2a 20 49 74 20 69 73 20 72  ** .  ** It is r
33880 65 63 75 72 73 69 76 65 20 69 6e 76 6f 63 61 74  ecursive invocat
33890 69 6f 6e 20 6f 66 20 74 72 69 67 67 65 72 73 2c  ion of triggers,
338a0 20 61 74 20 74 68 65 20 53 51 4c 20 6c 65 76 65   at the SQL leve
338b0 6c 2c 20 74 68 61 74 20 69 73 20 0a 20 20 2a 2a  l, that is .  **
338c0 20 64 69 73 61 62 6c 65 64 2e 20 49 6e 20 73 6f   disabled. In so
338d0 6d 65 20 63 61 73 65 73 20 61 20 73 69 6e 67 6c  me cases a singl
338e0 65 20 74 72 69 67 67 65 72 20 6d 61 79 20 67 65  e trigger may ge
338f0 6e 65 72 61 74 65 20 6d 6f 72 65 20 74 68 61 6e  nerate more than
33900 20 6f 6e 65 20 0a 20 20 2a 2a 20 53 75 62 50 72   one .  ** SubPr
33910 6f 67 72 61 6d 20 28 69 66 20 74 68 65 20 74 72  ogram (if the tr
33920 69 67 67 65 72 20 6d 61 79 20 62 65 20 65 78 65  igger may be exe
33930 63 75 74 65 64 20 77 69 74 68 20 6d 6f 72 65 20  cuted with more 
33940 74 68 61 6e 20 6f 6e 65 20 64 69 66 66 65 72 65  than one differe
33950 6e 74 20 0a 20 20 2a 2a 20 4f 4e 20 43 4f 4e 46  nt .  ** ON CONF
33960 4c 49 43 54 20 61 6c 67 6f 72 69 74 68 6d 29 2e  LICT algorithm).
33970 20 53 75 62 50 72 6f 67 72 61 6d 20 73 74 72 75   SubProgram stru
33980 63 74 75 72 65 73 20 61 73 73 6f 63 69 61 74 65  ctures associate
33990 64 20 77 69 74 68 20 61 0a 20 20 2a 2a 20 73 69  d with a.  ** si
339a0 6e 67 6c 65 20 74 72 69 67 67 65 72 20 61 6c 6c  ngle trigger all
339b0 20 68 61 76 65 20 74 68 65 20 73 61 6d 65 20 76   have the same v
339c0 61 6c 75 65 20 66 6f 72 20 74 68 65 20 53 75 62  alue for the Sub
339d0 50 72 6f 67 72 61 6d 2e 74 6f 6b 65 6e 20 0a 20  Program.token . 
339e0 20 2a 2a 20 76 61 72 69 61 62 6c 65 2e 20 20 2a   ** variable.  *
339f0 2f 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 20  /.  if( pOp->p5 
33a00 29 7b 0a 20 20 20 20 74 20 3d 20 70 50 72 6f 67  ){.    t = pProg
33a10 72 61 6d 2d 3e 74 6f 6b 65 6e 3b 0a 20 20 20 20  ram->token;.    
33a20 66 6f 72 28 70 46 72 61 6d 65 3d 70 2d 3e 70 46  for(pFrame=p->pF
33a30 72 61 6d 65 3b 20 70 46 72 61 6d 65 20 26 26 20  rame; pFrame && 
33a40 70 46 72 61 6d 65 2d 3e 74 6f 6b 65 6e 21 3d 74  pFrame->token!=t
33a50 3b 20 70 46 72 61 6d 65 3d 70 46 72 61 6d 65 2d  ; pFrame=pFrame-
33a60 3e 70 50 61 72 65 6e 74 29 3b 0a 20 20 20 20 69  >pParent);.    i
33a70 66 28 20 70 46 72 61 6d 65 20 29 20 62 72 65 61  f( pFrame ) brea
33a80 6b 3b 0a 20 20 7d 0a 0a 20 20 69 66 28 20 70 2d  k;.  }..  if( p-
33a90 3e 6e 46 72 61 6d 65 3e 3d 64 62 2d 3e 61 4c 69  >nFrame>=db->aLi
33aa0 6d 69 74 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54  mit[SQLITE_LIMIT
33ab0 5f 54 52 49 47 47 45 52 5f 44 45 50 54 48 5d 20  _TRIGGER_DEPTH] 
33ac0 29 7b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49  ){.    rc = SQLI
33ad0 54 45 5f 45 52 52 4f 52 3b 0a 20 20 20 20 73 71  TE_ERROR;.    sq
33ae0 6c 69 74 65 33 56 64 62 65 45 72 72 6f 72 28 70  lite3VdbeError(p
33af0 2c 20 22 74 6f 6f 20 6d 61 6e 79 20 6c 65 76 65  , "too many leve
33b00 6c 73 20 6f 66 20 74 72 69 67 67 65 72 20 72 65  ls of trigger re
33b10 63 75 72 73 69 6f 6e 22 29 3b 0a 20 20 20 20 67  cursion");.    g
33b20 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
33b30 5f 65 72 72 6f 72 3b 0a 20 20 7d 0a 0a 20 20 2f  _error;.  }..  /
33b40 2a 20 52 65 67 69 73 74 65 72 20 70 52 74 20 69  * Register pRt i
33b50 73 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20  s used to store 
33b60 74 68 65 20 6d 65 6d 6f 72 79 20 72 65 71 75 69  the memory requi
33b70 72 65 64 20 74 6f 20 73 61 76 65 20 74 68 65 20  red to save the 
33b80 73 74 61 74 65 0a 20 20 2a 2a 20 6f 66 20 74 68  state.  ** of th
33b90 65 20 63 75 72 72 65 6e 74 20 70 72 6f 67 72 61  e current progra
33ba0 6d 2c 20 61 6e 64 20 74 68 65 20 6d 65 6d 6f 72  m, and the memor
33bb0 79 20 72 65 71 75 69 72 65 64 20 61 74 20 72 75  y required at ru
33bc0 6e 74 69 6d 65 20 74 6f 20 65 78 65 63 75 74 65  ntime to execute
33bd0 0a 20 20 2a 2a 20 74 68 65 20 74 72 69 67 67 65  .  ** the trigge
33be0 72 20 70 72 6f 67 72 61 6d 2e 20 49 66 20 74 68  r program. If th
33bf0 69 73 20 74 72 69 67 67 65 72 20 68 61 73 20 62  is trigger has b
33c00 65 65 6e 20 66 69 72 65 64 20 62 65 66 6f 72 65  een fired before
33c10 2c 20 74 68 65 6e 20 70 52 74 20 0a 20 20 2a 2a  , then pRt .  **
33c20 20 69 73 20 61 6c 72 65 61 64 79 20 61 6c 6c 6f   is already allo
33c30 63 61 74 65 64 2e 20 4f 74 68 65 72 77 69 73 65  cated. Otherwise
33c40 2c 20 69 74 20 6d 75 73 74 20 62 65 20 69 6e 69  , it must be ini
33c50 74 69 61 6c 69 7a 65 64 2e 20 20 2a 2f 0a 20 20  tialized.  */.  
33c60 69 66 28 20 28 70 52 74 2d 3e 66 6c 61 67 73 26  if( (pRt->flags&
33c70 4d 45 4d 5f 42 6c 6f 62 29 3d 3d 30 20 29 7b 0a  MEM_Blob)==0 ){.
33c80 20 20 20 20 2f 2a 20 53 75 62 50 72 6f 67 72 61      /* SubProgra
33c90 6d 2e 6e 4d 65 6d 20 69 73 20 73 65 74 20 74 6f  m.nMem is set to
33ca0 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 6d   the number of m
33cb0 65 6d 6f 72 79 20 63 65 6c 6c 73 20 75 73 65 64  emory cells used
33cc0 20 62 79 20 74 68 65 20 0a 20 20 20 20 2a 2a 20   by the .    ** 
33cd0 70 72 6f 67 72 61 6d 20 73 74 6f 72 65 64 20 69  program stored i
33ce0 6e 20 53 75 62 50 72 6f 67 72 61 6d 2e 61 4f 70  n SubProgram.aOp
33cf0 2e 20 41 73 20 77 65 6c 6c 20 61 73 20 74 68 65  . As well as the
33d00 73 65 2c 20 6f 6e 65 20 6d 65 6d 6f 72 79 0a 20  se, one memory. 
33d10 20 20 20 2a 2a 20 63 65 6c 6c 20 69 73 20 72 65     ** cell is re
33d20 71 75 69 72 65 64 20 66 6f 72 20 65 61 63 68 20  quired for each 
33d30 63 75 72 73 6f 72 20 75 73 65 64 20 62 79 20 74  cursor used by t
33d40 68 65 20 70 72 6f 67 72 61 6d 2e 20 53 65 74 20  he program. Set 
33d50 6c 6f 63 61 6c 0a 20 20 20 20 2a 2a 20 76 61 72  local.    ** var
33d60 69 61 62 6c 65 20 6e 4d 65 6d 20 28 61 6e 64 20  iable nMem (and 
33d70 6c 61 74 65 72 2c 20 56 64 62 65 46 72 61 6d 65  later, VdbeFrame
33d80 2e 6e 43 68 69 6c 64 4d 65 6d 29 20 74 6f 20 74  .nChildMem) to t
33d90 68 69 73 20 76 61 6c 75 65 2e 0a 20 20 20 20 2a  his value..    *
33da0 2f 0a 20 20 20 20 6e 4d 65 6d 20 3d 20 70 50 72  /.    nMem = pPr
33db0 6f 67 72 61 6d 2d 3e 6e 4d 65 6d 20 2b 20 70 50  ogram->nMem + pP
33dc0 72 6f 67 72 61 6d 2d 3e 6e 43 73 72 3b 0a 20 20  rogram->nCsr;.  
33dd0 20 20 61 73 73 65 72 74 28 20 6e 4d 65 6d 3e 30    assert( nMem>0
33de0 20 29 3b 0a 20 20 20 20 69 66 28 20 70 50 72 6f   );.    if( pPro
33df0 67 72 61 6d 2d 3e 6e 43 73 72 3d 3d 30 20 29 20  gram->nCsr==0 ) 
33e00 6e 4d 65 6d 2b 2b 3b 0a 20 20 20 20 6e 42 79 74  nMem++;.    nByt
33e10 65 20 3d 20 52 4f 55 4e 44 38 28 73 69 7a 65 6f  e = ROUND8(sizeo
33e20 66 28 56 64 62 65 46 72 61 6d 65 29 29 0a 20 20  f(VdbeFrame)).  
33e30 20 20 20 20 20 20 20 20 20 20 20 20 2b 20 6e 4d              + nM
33e40 65 6d 20 2a 20 73 69 7a 65 6f 66 28 4d 65 6d 29  em * sizeof(Mem)
33e50 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2b  .              +
33e60 20 70 50 72 6f 67 72 61 6d 2d 3e 6e 43 73 72 20   pProgram->nCsr 
33e70 2a 20 73 69 7a 65 6f 66 28 56 64 62 65 43 75 72  * sizeof(VdbeCur
33e80 73 6f 72 2a 29 0a 20 20 20 20 20 20 20 20 20 20  sor*).          
33e90 20 20 20 20 2b 20 28 70 50 72 6f 67 72 61 6d 2d      + (pProgram-
33ea0 3e 6e 4f 70 20 2b 20 37 29 2f 38 3b 0a 20 20 20  >nOp + 7)/8;.   
33eb0 20 70 46 72 61 6d 65 20 3d 20 73 71 6c 69 74 65   pFrame = sqlite
33ec0 33 44 62 4d 61 6c 6c 6f 63 5a 65 72 6f 28 64 62  3DbMallocZero(db
33ed0 2c 20 6e 42 79 74 65 29 3b 0a 20 20 20 20 69 66  , nByte);.    if
33ee0 28 20 21 70 46 72 61 6d 65 20 29 7b 0a 20 20 20  ( !pFrame ){.   
33ef0 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a     goto no_mem;.
33f00 20 20 20 20 7d 0a 20 20 20 20 73 71 6c 69 74 65      }.    sqlite
33f10 33 56 64 62 65 4d 65 6d 52 65 6c 65 61 73 65 28  3VdbeMemRelease(
33f20 70 52 74 29 3b 0a 20 20 20 20 70 52 74 2d 3e 66  pRt);.    pRt->f
33f30 6c 61 67 73 20 3d 20 4d 45 4d 5f 42 6c 6f 62 7c  lags = MEM_Blob|
33f40 4d 45 4d 5f 44 79 6e 3b 0a 20 20 20 20 70 52 74  MEM_Dyn;.    pRt
33f50 2d 3e 7a 20 3d 20 28 63 68 61 72 2a 29 70 46 72  ->z = (char*)pFr
33f60 61 6d 65 3b 0a 20 20 20 20 70 52 74 2d 3e 6e 20  ame;.    pRt->n 
33f70 3d 20 6e 42 79 74 65 3b 0a 20 20 20 20 70 52 74  = nByte;.    pRt
33f80 2d 3e 78 44 65 6c 20 3d 20 73 71 6c 69 74 65 33  ->xDel = sqlite3
33f90 56 64 62 65 46 72 61 6d 65 4d 65 6d 44 65 6c 3b  VdbeFrameMemDel;
33fa0 0a 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 76 20  ..    pFrame->v 
33fb0 3d 20 70 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d  = p;.    pFrame-
33fc0 3e 6e 43 68 69 6c 64 4d 65 6d 20 3d 20 6e 4d 65  >nChildMem = nMe
33fd0 6d 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 6e  m;.    pFrame->n
33fe0 43 68 69 6c 64 43 73 72 20 3d 20 70 50 72 6f 67  ChildCsr = pProg
33ff0 72 61 6d 2d 3e 6e 43 73 72 3b 0a 20 20 20 20 70  ram->nCsr;.    p
34000 46 72 61 6d 65 2d 3e 70 63 20 3d 20 28 69 6e 74  Frame->pc = (int
34010 29 28 70 4f 70 20 2d 20 61 4f 70 29 3b 0a 20 20  )(pOp - aOp);.  
34020 20 20 70 46 72 61 6d 65 2d 3e 61 4d 65 6d 20 3d    pFrame->aMem =
34030 20 70 2d 3e 61 4d 65 6d 3b 0a 20 20 20 20 70 46   p->aMem;.    pF
34040 72 61 6d 65 2d 3e 6e 4d 65 6d 20 3d 20 70 2d 3e  rame->nMem = p->
34050 6e 4d 65 6d 3b 0a 20 20 20 20 70 46 72 61 6d 65  nMem;.    pFrame
34060 2d 3e 61 70 43 73 72 20 3d 20 70 2d 3e 61 70 43  ->apCsr = p->apC
34070 73 72 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e  sr;.    pFrame->
34080 6e 43 75 72 73 6f 72 20 3d 20 70 2d 3e 6e 43 75  nCursor = p->nCu
34090 72 73 6f 72 3b 0a 20 20 20 20 70 46 72 61 6d 65  rsor;.    pFrame
340a0 2d 3e 61 4f 70 20 3d 20 70 2d 3e 61 4f 70 3b 0a  ->aOp = p->aOp;.
340b0 20 20 20 20 70 46 72 61 6d 65 2d 3e 6e 4f 70 20      pFrame->nOp 
340c0 3d 20 70 2d 3e 6e 4f 70 3b 0a 20 20 20 20 70 46  = p->nOp;.    pF
340d0 72 61 6d 65 2d 3e 74 6f 6b 65 6e 20 3d 20 70 50  rame->token = pP
340e0 72 6f 67 72 61 6d 2d 3e 74 6f 6b 65 6e 3b 0a 23  rogram->token;.#
340f0 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41  ifdef SQLITE_ENA
34100 42 4c 45 5f 53 54 4d 54 5f 53 43 41 4e 53 54 41  BLE_STMT_SCANSTA
34110 54 55 53 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e  TUS.    pFrame->
34120 61 6e 45 78 65 63 20 3d 20 70 2d 3e 61 6e 45 78  anExec = p->anEx
34130 65 63 3b 0a 23 65 6e 64 69 66 0a 23 69 66 64 65  ec;.#endif.#ifde
34140 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20  f SQLITE_DEBUG. 
34150 20 20 20 70 46 72 61 6d 65 2d 3e 69 46 72 61 6d     pFrame->iFram
34160 65 4d 61 67 69 63 20 3d 20 53 51 4c 49 54 45 5f  eMagic = SQLITE_
34170 46 52 41 4d 45 5f 4d 41 47 49 43 3b 0a 23 65 6e  FRAME_MAGIC;.#en
34180 64 69 66 0a 0a 20 20 20 20 70 45 6e 64 20 3d 20  dif..    pEnd = 
34190 26 56 64 62 65 46 72 61 6d 65 4d 65 6d 28 70 46  &VdbeFrameMem(pF
341a0 72 61 6d 65 29 5b 70 46 72 61 6d 65 2d 3e 6e 43  rame)[pFrame->nC
341b0 68 69 6c 64 4d 65 6d 5d 3b 0a 20 20 20 20 66 6f  hildMem];.    fo
341c0 72 28 70 4d 65 6d 3d 56 64 62 65 46 72 61 6d 65  r(pMem=VdbeFrame
341d0 4d 65 6d 28 70 46 72 61 6d 65 29 3b 20 70 4d 65  Mem(pFrame); pMe
341e0 6d 21 3d 70 45 6e 64 3b 20 70 4d 65 6d 2b 2b 29  m!=pEnd; pMem++)
341f0 7b 0a 20 20 20 20 20 20 70 4d 65 6d 2d 3e 66 6c  {.      pMem->fl
34200 61 67 73 20 3d 20 4d 45 4d 5f 55 6e 64 65 66 69  ags = MEM_Undefi
34210 6e 65 64 3b 0a 20 20 20 20 20 20 70 4d 65 6d 2d  ned;.      pMem-
34220 3e 64 62 20 3d 20 64 62 3b 0a 20 20 20 20 7d 0a  >db = db;.    }.
34230 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70 46 72    }else{.    pFr
34240 61 6d 65 20 3d 20 28 56 64 62 65 46 72 61 6d 65  ame = (VdbeFrame
34250 2a 29 70 52 74 2d 3e 7a 3b 0a 20 20 20 20 61 73  *)pRt->z;.    as
34260 73 65 72 74 28 20 70 52 74 2d 3e 78 44 65 6c 3d  sert( pRt->xDel=
34270 3d 73 71 6c 69 74 65 33 56 64 62 65 46 72 61 6d  =sqlite3VdbeFram
34280 65 4d 65 6d 44 65 6c 20 29 3b 0a 20 20 20 20 61  eMemDel );.    a
34290 73 73 65 72 74 28 20 70 50 72 6f 67 72 61 6d 2d  ssert( pProgram-
342a0 3e 6e 4d 65 6d 2b 70 50 72 6f 67 72 61 6d 2d 3e  >nMem+pProgram->
342b0 6e 43 73 72 3d 3d 70 46 72 61 6d 65 2d 3e 6e 43  nCsr==pFrame->nC
342c0 68 69 6c 64 4d 65 6d 20 0a 20 20 20 20 20 20 20  hildMem .       
342d0 20 7c 7c 20 28 70 50 72 6f 67 72 61 6d 2d 3e 6e   || (pProgram->n
342e0 43 73 72 3d 3d 30 20 26 26 20 70 50 72 6f 67 72  Csr==0 && pProgr
342f0 61 6d 2d 3e 6e 4d 65 6d 2b 31 3d 3d 70 46 72 61  am->nMem+1==pFra
34300 6d 65 2d 3e 6e 43 68 69 6c 64 4d 65 6d 29 20 29  me->nChildMem) )
34310 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 50  ;.    assert( pP
34320 72 6f 67 72 61 6d 2d 3e 6e 43 73 72 3d 3d 70 46  rogram->nCsr==pF
34330 72 61 6d 65 2d 3e 6e 43 68 69 6c 64 43 73 72 20  rame->nChildCsr 
34340 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 28  );.    assert( (
34350 69 6e 74 29 28 70 4f 70 20 2d 20 61 4f 70 29 3d  int)(pOp - aOp)=
34360 3d 70 46 72 61 6d 65 2d 3e 70 63 20 29 3b 0a 20  =pFrame->pc );. 
34370 20 7d 0a 0a 20 20 70 2d 3e 6e 46 72 61 6d 65 2b   }..  p->nFrame+
34380 2b 3b 0a 20 20 70 46 72 61 6d 65 2d 3e 70 50 61  +;.  pFrame->pPa
34390 72 65 6e 74 20 3d 20 70 2d 3e 70 46 72 61 6d 65  rent = p->pFrame
343a0 3b 0a 20 20 70 46 72 61 6d 65 2d 3e 6c 61 73 74  ;.  pFrame->last
343b0 52 6f 77 69 64 20 3d 20 64 62 2d 3e 6c 61 73 74  Rowid = db->last
343c0 52 6f 77 69 64 3b 0a 20 20 70 46 72 61 6d 65 2d  Rowid;.  pFrame-
343d0 3e 6e 43 68 61 6e 67 65 20 3d 20 70 2d 3e 6e 43  >nChange = p->nC
343e0 68 61 6e 67 65 3b 0a 20 20 70 46 72 61 6d 65 2d  hange;.  pFrame-
343f0 3e 6e 44 62 43 68 61 6e 67 65 20 3d 20 70 2d 3e  >nDbChange = p->
34400 64 62 2d 3e 6e 43 68 61 6e 67 65 3b 0a 20 20 61  db->nChange;.  a
34410 73 73 65 72 74 28 20 70 46 72 61 6d 65 2d 3e 70  ssert( pFrame->p
34420 41 75 78 44 61 74 61 3d 3d 30 20 29 3b 0a 20 20  AuxData==0 );.  
34430 70 46 72 61 6d 65 2d 3e 70 41 75 78 44 61 74 61  pFrame->pAuxData
34440 20 3d 20 70 2d 3e 70 41 75 78 44 61 74 61 3b 0a   = p->pAuxData;.
34450 20 20 70 2d 3e 70 41 75 78 44 61 74 61 20 3d 20    p->pAuxData = 
34460 30 3b 0a 20 20 70 2d 3e 6e 43 68 61 6e 67 65 20  0;.  p->nChange 
34470 3d 20 30 3b 0a 20 20 70 2d 3e 70 46 72 61 6d 65  = 0;.  p->pFrame
34480 20 3d 20 70 46 72 61 6d 65 3b 0a 20 20 70 2d 3e   = pFrame;.  p->
34490 61 4d 65 6d 20 3d 20 61 4d 65 6d 20 3d 20 56 64  aMem = aMem = Vd
344a0 62 65 46 72 61 6d 65 4d 65 6d 28 70 46 72 61 6d  beFrameMem(pFram
344b0 65 29 3b 0a 20 20 70 2d 3e 6e 4d 65 6d 20 3d 20  e);.  p->nMem = 
344c0 70 46 72 61 6d 65 2d 3e 6e 43 68 69 6c 64 4d 65  pFrame->nChildMe
344d0 6d 3b 0a 20 20 70 2d 3e 6e 43 75 72 73 6f 72 20  m;.  p->nCursor 
344e0 3d 20 28 75 31 36 29 70 46 72 61 6d 65 2d 3e 6e  = (u16)pFrame->n
344f0 43 68 69 6c 64 43 73 72 3b 0a 20 20 70 2d 3e 61  ChildCsr;.  p->a
34500 70 43 73 72 20 3d 20 28 56 64 62 65 43 75 72 73  pCsr = (VdbeCurs
34510 6f 72 20 2a 2a 29 26 61 4d 65 6d 5b 70 2d 3e 6e  or **)&aMem[p->n
34520 4d 65 6d 5d 3b 0a 20 20 70 46 72 61 6d 65 2d 3e  Mem];.  pFrame->
34530 61 4f 6e 63 65 20 3d 20 28 75 38 2a 29 26 70 2d  aOnce = (u8*)&p-
34540 3e 61 70 43 73 72 5b 70 50 72 6f 67 72 61 6d 2d  >apCsr[pProgram-
34550 3e 6e 43 73 72 5d 3b 0a 20 20 6d 65 6d 73 65 74  >nCsr];.  memset
34560 28 70 46 72 61 6d 65 2d 3e 61 4f 6e 63 65 2c 20  (pFrame->aOnce, 
34570 30 2c 20 28 70 50 72 6f 67 72 61 6d 2d 3e 6e 4f  0, (pProgram->nO
34580 70 20 2b 20 37 29 2f 38 29 3b 0a 20 20 70 2d 3e  p + 7)/8);.  p->
34590 61 4f 70 20 3d 20 61 4f 70 20 3d 20 70 50 72 6f  aOp = aOp = pPro
345a0 67 72 61 6d 2d 3e 61 4f 70 3b 0a 20 20 70 2d 3e  gram->aOp;.  p->
345b0 6e 4f 70 20 3d 20 70 50 72 6f 67 72 61 6d 2d 3e  nOp = pProgram->
345c0 6e 4f 70 3b 0a 23 69 66 64 65 66 20 53 51 4c 49  nOp;.#ifdef SQLI
345d0 54 45 5f 45 4e 41 42 4c 45 5f 53 54 4d 54 5f 53  TE_ENABLE_STMT_S
345e0 43 41 4e 53 54 41 54 55 53 0a 20 20 70 2d 3e 61  CANSTATUS.  p->a
345f0 6e 45 78 65 63 20 3d 20 30 3b 0a 23 65 6e 64 69  nExec = 0;.#endi
34600 66 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  f.#ifdef SQLITE_
34610 44 45 42 55 47 0a 20 20 2f 2a 20 56 65 72 69 66  DEBUG.  /* Verif
34620 79 20 74 68 61 74 20 73 65 63 6f 6e 64 20 61 6e  y that second an
34630 64 20 73 75 62 73 65 71 75 65 6e 74 20 65 78 65  d subsequent exe
34640 63 75 74 69 6f 6e 73 20 6f 66 20 74 68 65 20 73  cutions of the s
34650 61 6d 65 20 74 72 69 67 67 65 72 20 64 6f 20 6e  ame trigger do n
34660 6f 74 0a 20 20 2a 2a 20 74 72 79 20 74 6f 20 72  ot.  ** try to r
34670 65 75 73 65 20 72 65 67 69 73 74 65 72 20 76 61  euse register va
34680 6c 75 65 73 20 66 72 6f 6d 20 74 68 65 20 66 69  lues from the fi
34690 72 73 74 20 75 73 65 2e 20 2a 2f 0a 20 20 7b 0a  rst use. */.  {.
346a0 20 20 20 20 69 6e 74 20 69 3b 0a 20 20 20 20 66      int i;.    f
346b0 6f 72 28 69 3d 30 3b 20 69 3c 70 2d 3e 6e 4d 65  or(i=0; i<p->nMe
346c0 6d 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 61  m; i++){.      a
346d0 4d 65 6d 5b 69 5d 2e 70 53 63 6f 70 79 46 72 6f  Mem[i].pScopyFro
346e0 6d 20 3d 20 30 3b 20 20 2f 2a 20 50 72 65 76 65  m = 0;  /* Preve
346f0 6e 74 20 66 61 6c 73 65 2d 70 6f 73 69 74 69 76  nt false-positiv
34700 65 20 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28  e AboutToChange(
34710 29 20 65 72 72 73 20 2a 2f 0a 20 20 20 20 20 20  ) errs */.      
34720 61 4d 65 6d 5b 69 5d 2e 66 6c 61 67 73 20 7c 3d  aMem[i].flags |=
34730 20 4d 45 4d 5f 55 6e 64 65 66 69 6e 65 64 3b 20   MEM_Undefined; 
34740 2f 2a 20 43 61 75 73 65 20 61 20 66 61 75 6c 74  /* Cause a fault
34750 20 69 66 20 74 68 69 73 20 72 65 67 20 69 73 20   if this reg is 
34760 72 65 75 73 65 64 20 2a 2f 0a 20 20 20 20 7d 0a  reused */.    }.
34770 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20 70 4f 70    }.#endif.  pOp
34780 20 3d 20 26 61 4f 70 5b 2d 31 5d 3b 0a 20 20 67   = &aOp[-1];.  g
34790 6f 74 6f 20 63 68 65 63 6b 5f 66 6f 72 5f 69 6e  oto check_for_in
347a0 74 65 72 72 75 70 74 3b 0a 7d 0a 0a 2f 2a 20 4f  terrupt;.}../* O
347b0 70 63 6f 64 65 3a 20 50 61 72 61 6d 20 50 31 20  pcode: Param P1 
347c0 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54  P2 * * *.**.** T
347d0 68 69 73 20 6f 70 63 6f 64 65 20 69 73 20 6f 6e  his opcode is on
347e0 6c 79 20 65 76 65 72 20 70 72 65 73 65 6e 74 20  ly ever present 
347f0 69 6e 20 73 75 62 2d 70 72 6f 67 72 61 6d 73 20  in sub-programs 
34800 63 61 6c 6c 65 64 20 76 69 61 20 74 68 65 20 0a  called via the .
34810 2a 2a 20 4f 50 5f 50 72 6f 67 72 61 6d 20 69 6e  ** OP_Program in
34820 73 74 72 75 63 74 69 6f 6e 2e 20 43 6f 70 79 20  struction. Copy 
34830 61 20 76 61 6c 75 65 20 63 75 72 72 65 6e 74 6c  a value currentl
34840 79 20 73 74 6f 72 65 64 20 69 6e 20 61 20 6d 65  y stored in a me
34850 6d 6f 72 79 20 0a 2a 2a 20 63 65 6c 6c 20 6f 66  mory .** cell of
34860 20 74 68 65 20 63 61 6c 6c 69 6e 67 20 28 70 61   the calling (pa
34870 72 65 6e 74 29 20 66 72 61 6d 65 20 74 6f 20 63  rent) frame to c
34880 65 6c 6c 20 50 32 20 69 6e 20 74 68 65 20 63 75  ell P2 in the cu
34890 72 72 65 6e 74 20 66 72 61 6d 65 73 20 0a 2a 2a  rrent frames .**
348a0 20 61 64 64 72 65 73 73 20 73 70 61 63 65 2e 20   address space. 
348b0 54 68 69 73 20 69 73 20 75 73 65 64 20 62 79 20  This is used by 
348c0 74 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d 73  trigger programs
348d0 20 74 6f 20 61 63 63 65 73 73 20 74 68 65 20 6e   to access the n
348e0 65 77 2e 2a 20 0a 2a 2a 20 61 6e 64 20 6f 6c 64  ew.* .** and old
348f0 2e 2a 20 76 61 6c 75 65 73 2e 0a 2a 2a 0a 2a 2a  .* values..**.**
34900 20 54 68 65 20 61 64 64 72 65 73 73 20 6f 66 20   The address of 
34910 74 68 65 20 63 65 6c 6c 20 69 6e 20 74 68 65 20  the cell in the 
34920 70 61 72 65 6e 74 20 66 72 61 6d 65 20 69 73 20  parent frame is 
34930 64 65 74 65 72 6d 69 6e 65 64 20 62 79 20 61 64  determined by ad
34940 64 69 6e 67 0a 2a 2a 20 74 68 65 20 76 61 6c 75  ding.** the valu
34950 65 20 6f 66 20 74 68 65 20 50 31 20 61 72 67 75  e of the P1 argu
34960 6d 65 6e 74 20 74 6f 20 74 68 65 20 76 61 6c 75  ment to the valu
34970 65 20 6f 66 20 74 68 65 20 50 31 20 61 72 67 75  e of the P1 argu
34980 6d 65 6e 74 20 74 6f 20 74 68 65 0a 2a 2a 20 63  ment to the.** c
34990 61 6c 6c 69 6e 67 20 4f 50 5f 50 72 6f 67 72 61  alling OP_Progra
349a0 6d 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a  m instruction..*
349b0 2f 0a 63 61 73 65 20 4f 50 5f 50 61 72 61 6d 3a  /.case OP_Param:
349c0 20 7b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20   {           /* 
349d0 6f 75 74 32 20 2a 2f 0a 20 20 56 64 62 65 46 72  out2 */.  VdbeFr
349e0 61 6d 65 20 2a 70 46 72 61 6d 65 3b 0a 20 20 4d  ame *pFrame;.  M
349f0 65 6d 20 2a 70 49 6e 3b 0a 20 20 70 4f 75 74 20  em *pIn;.  pOut 
34a00 3d 20 6f 75 74 32 50 72 65 72 65 6c 65 61 73 65  = out2Prerelease
34a10 28 70 2c 20 70 4f 70 29 3b 0a 20 20 70 46 72 61  (p, pOp);.  pFra
34a20 6d 65 20 3d 20 70 2d 3e 70 46 72 61 6d 65 3b 0a  me = p->pFrame;.
34a30 20 20 70 49 6e 20 3d 20 26 70 46 72 61 6d 65 2d    pIn = &pFrame-
34a40 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 20 2b 20  >aMem[pOp->p1 + 
34a50 70 46 72 61 6d 65 2d 3e 61 4f 70 5b 70 46 72 61  pFrame->aOp[pFra
34a60 6d 65 2d 3e 70 63 5d 2e 70 31 5d 3b 20 20 20 0a  me->pc].p1];   .
34a70 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
34a80 53 68 61 6c 6c 6f 77 43 6f 70 79 28 70 4f 75 74  ShallowCopy(pOut
34a90 2c 20 70 49 6e 2c 20 4d 45 4d 5f 45 70 68 65 6d  , pIn, MEM_Ephem
34aa0 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 23  );.  break;.}..#
34ab0 65 6e 64 69 66 20 2f 2a 20 23 69 66 6e 64 65 66  endif /* #ifndef
34ac0 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 49   SQLITE_OMIT_TRI
34ad0 47 47 45 52 20 2a 2f 0a 0a 23 69 66 6e 64 65 66  GGER */..#ifndef
34ae0 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4f 52   SQLITE_OMIT_FOR
34af0 45 49 47 4e 5f 4b 45 59 0a 2f 2a 20 4f 70 63 6f  EIGN_KEY./* Opco
34b00 64 65 3a 20 46 6b 43 6f 75 6e 74 65 72 20 50 31  de: FkCounter P1
34b10 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e   P2 * * *.** Syn
34b20 6f 70 73 69 73 3a 20 66 6b 63 74 72 5b 50 31 5d  opsis: fkctr[P1]
34b30 2b 3d 50 32 0a 2a 2a 0a 2a 2a 20 49 6e 63 72 65  +=P2.**.** Incre
34b40 6d 65 6e 74 20 61 20 22 63 6f 6e 73 74 72 61 69  ment a "constrai
34b50 6e 74 20 63 6f 75 6e 74 65 72 22 20 62 79 20 50  nt counter" by P
34b60 32 20 28 50 32 20 6d 61 79 20 62 65 20 6e 65 67  2 (P2 may be neg
34b70 61 74 69 76 65 20 6f 72 20 70 6f 73 69 74 69 76  ative or positiv
34b80 65 29 2e 0a 2a 2a 20 49 66 20 50 31 20 69 73 20  e)..** If P1 is 
34b90 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65 20 64 61  non-zero, the da
34ba0 74 61 62 61 73 65 20 63 6f 6e 73 74 72 61 69 6e  tabase constrain
34bb0 74 20 63 6f 75 6e 74 65 72 20 69 73 20 69 6e 63  t counter is inc
34bc0 72 65 6d 65 6e 74 65 64 20 0a 2a 2a 20 28 64 65  remented .** (de
34bd0 66 65 72 72 65 64 20 66 6f 72 65 69 67 6e 20 6b  ferred foreign k
34be0 65 79 20 63 6f 6e 73 74 72 61 69 6e 74 73 29 2e  ey constraints).
34bf0 20 4f 74 68 65 72 77 69 73 65 2c 20 69 66 20 50   Otherwise, if P
34c00 31 20 69 73 20 7a 65 72 6f 2c 20 74 68 65 20 0a  1 is zero, the .
34c10 2a 2a 20 73 74 61 74 65 6d 65 6e 74 20 63 6f 75  ** statement cou
34c20 6e 74 65 72 20 69 73 20 69 6e 63 72 65 6d 65 6e  nter is incremen
34c30 74 65 64 20 28 69 6d 6d 65 64 69 61 74 65 20 66  ted (immediate f
34c40 6f 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74  oreign key const
34c50 72 61 69 6e 74 73 29 2e 0a 2a 2f 0a 63 61 73 65  raints)..*/.case
34c60 20 4f 50 5f 46 6b 43 6f 75 6e 74 65 72 3a 20 7b   OP_FkCounter: {
34c70 0a 20 20 69 66 28 20 64 62 2d 3e 66 6c 61 67 73  .  if( db->flags
34c80 20 26 20 53 51 4c 49 54 45 5f 44 65 66 65 72 46   & SQLITE_DeferF
34c90 4b 73 20 29 7b 0a 20 20 20 20 64 62 2d 3e 6e 44  Ks ){.    db->nD
34ca0 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73 20 2b  eferredImmCons +
34cb0 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 7d 65 6c  = pOp->p2;.  }el
34cc0 73 65 20 69 66 28 20 70 4f 70 2d 3e 70 31 20 29  se if( pOp->p1 )
34cd0 7b 0a 20 20 20 20 64 62 2d 3e 6e 44 65 66 65 72  {.    db->nDefer
34ce0 72 65 64 43 6f 6e 73 20 2b 3d 20 70 4f 70 2d 3e  redCons += pOp->
34cf0 70 32 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  p2;.  }else{.   
34d00 20 70 2d 3e 6e 46 6b 43 6f 6e 73 74 72 61 69 6e   p->nFkConstrain
34d10 74 20 2b 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20  t += pOp->p2;.  
34d20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  }.  break;.}../*
34d30 20 4f 70 63 6f 64 65 3a 20 46 6b 49 66 5a 65 72   Opcode: FkIfZer
34d40 6f 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  o P1 P2 * * *.**
34d50 20 53 79 6e 6f 70 73 69 73 3a 20 69 66 20 66 6b   Synopsis: if fk
34d60 63 74 72 5b 50 31 5d 3d 3d 30 20 67 6f 74 6f 20  ctr[P1]==0 goto 
34d70 50 32 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70  P2.**.** This op
34d80 63 6f 64 65 20 74 65 73 74 73 20 69 66 20 61 20  code tests if a 
34d90 66 6f 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73  foreign key cons
34da0 74 72 61 69 6e 74 2d 63 6f 75 6e 74 65 72 20 69  traint-counter i
34db0 73 20 63 75 72 72 65 6e 74 6c 79 20 7a 65 72 6f  s currently zero
34dc0 2e 0a 2a 2a 20 49 66 20 73 6f 2c 20 6a 75 6d 70  ..** If so, jump
34dd0 20 74 6f 20 69 6e 73 74 72 75 63 74 69 6f 6e 20   to instruction 
34de0 50 32 2e 20 4f 74 68 65 72 77 69 73 65 2c 20 66  P2. Otherwise, f
34df0 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20 74  all through to t
34e00 68 65 20 6e 65 78 74 20 0a 2a 2a 20 69 6e 73 74  he next .** inst
34e10 72 75 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 49  ruction..**.** I
34e20 66 20 50 31 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f  f P1 is non-zero
34e30 2c 20 74 68 65 6e 20 74 68 65 20 6a 75 6d 70 20  , then the jump 
34e40 69 73 20 74 61 6b 65 6e 20 69 66 20 74 68 65 20  is taken if the 
34e50 64 61 74 61 62 61 73 65 20 63 6f 6e 73 74 72 61  database constra
34e60 69 6e 74 2d 63 6f 75 6e 74 65 72 0a 2a 2a 20 69  int-counter.** i
34e70 73 20 7a 65 72 6f 20 28 74 68 65 20 6f 6e 65 20  s zero (the one 
34e80 74 68 61 74 20 63 6f 75 6e 74 73 20 64 65 66 65  that counts defe
34e90 72 72 65 64 20 63 6f 6e 73 74 72 61 69 6e 74 20  rred constraint 
34ea0 76 69 6f 6c 61 74 69 6f 6e 73 29 2e 20 49 66 20  violations). If 
34eb0 50 31 20 69 73 0a 2a 2a 20 7a 65 72 6f 2c 20 74  P1 is.** zero, t
34ec0 68 65 20 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e  he jump is taken
34ed0 20 69 66 20 74 68 65 20 73 74 61 74 65 6d 65 6e   if the statemen
34ee0 74 20 63 6f 6e 73 74 72 61 69 6e 74 2d 63 6f 75  t constraint-cou
34ef0 6e 74 65 72 20 69 73 20 7a 65 72 6f 0a 2a 2a 20  nter is zero.** 
34f00 28 69 6d 6d 65 64 69 61 74 65 20 66 6f 72 65 69  (immediate forei
34f10 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e  gn key constrain
34f20 74 20 76 69 6f 6c 61 74 69 6f 6e 73 29 2e 0a 2a  t violations)..*
34f30 2f 0a 63 61 73 65 20 4f 50 5f 46 6b 49 66 5a 65  /.case OP_FkIfZe
34f40 72 6f 3a 20 7b 20 20 20 20 20 20 20 20 20 2f 2a  ro: {         /*
34f50 20 6a 75 6d 70 20 2a 2f 0a 20 20 69 66 28 20 70   jump */.  if( p
34f60 4f 70 2d 3e 70 31 20 29 7b 0a 20 20 20 20 56 64  Op->p1 ){.    Vd
34f70 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 64 62  beBranchTaken(db
34f80 2d 3e 6e 44 65 66 65 72 72 65 64 43 6f 6e 73 3d  ->nDeferredCons=
34f90 3d 30 20 26 26 20 64 62 2d 3e 6e 44 65 66 65 72  =0 && db->nDefer
34fa0 72 65 64 49 6d 6d 43 6f 6e 73 3d 3d 30 2c 20 32  redImmCons==0, 2
34fb0 29 3b 0a 20 20 20 20 69 66 28 20 64 62 2d 3e 6e  );.    if( db->n
34fc0 44 65 66 65 72 72 65 64 43 6f 6e 73 3d 3d 30 20  DeferredCons==0 
34fd0 26 26 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64  && db->nDeferred
34fe0 49 6d 6d 43 6f 6e 73 3d 3d 30 20 29 20 67 6f 74  ImmCons==0 ) got
34ff0 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20  o jump_to_p2;.  
35000 7d 65 6c 73 65 7b 0a 20 20 20 20 56 64 62 65 42  }else{.    VdbeB
35010 72 61 6e 63 68 54 61 6b 65 6e 28 70 2d 3e 6e 46  ranchTaken(p->nF
35020 6b 43 6f 6e 73 74 72 61 69 6e 74 3d 3d 30 20 26  kConstraint==0 &
35030 26 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 49  & db->nDeferredI
35040 6d 6d 43 6f 6e 73 3d 3d 30 2c 20 32 29 3b 0a 20  mmCons==0, 2);. 
35050 20 20 20 69 66 28 20 70 2d 3e 6e 46 6b 43 6f 6e     if( p->nFkCon
35060 73 74 72 61 69 6e 74 3d 3d 30 20 26 26 20 64 62  straint==0 && db
35070 2d 3e 6e 44 65 66 65 72 72 65 64 49 6d 6d 43 6f  ->nDeferredImmCo
35080 6e 73 3d 3d 30 20 29 20 67 6f 74 6f 20 6a 75 6d  ns==0 ) goto jum
35090 70 5f 74 6f 5f 70 32 3b 0a 20 20 7d 0a 20 20 62  p_to_p2;.  }.  b
350a0 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f  reak;.}.#endif /
350b0 2a 20 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  * #ifndef SQLITE
350c0 5f 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45  _OMIT_FOREIGN_KE
350d0 59 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51  Y */..#ifndef SQ
350e0 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 49 4e  LITE_OMIT_AUTOIN
350f0 43 52 45 4d 45 4e 54 0a 2f 2a 20 4f 70 63 6f 64  CREMENT./* Opcod
35100 65 3a 20 4d 65 6d 4d 61 78 20 50 31 20 50 32 20  e: MemMax P1 P2 
35110 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69  * * *.** Synopsi
35120 73 3a 20 72 5b 50 31 5d 3d 6d 61 78 28 72 5b 50  s: r[P1]=max(r[P
35130 31 5d 2c 72 5b 50 32 5d 29 0a 2a 2a 0a 2a 2a 20  1],r[P2]).**.** 
35140 50 31 20 69 73 20 61 20 72 65 67 69 73 74 65 72  P1 is a register
35150 20 69 6e 20 74 68 65 20 72 6f 6f 74 20 66 72 61   in the root fra
35160 6d 65 20 6f 66 20 74 68 69 73 20 56 4d 20 28 74  me of this VM (t
35170 68 65 20 72 6f 6f 74 20 66 72 61 6d 65 20 69 73  he root frame is
35180 0a 2a 2a 20 64 69 66 66 65 72 65 6e 74 20 66 72  .** different fr
35190 6f 6d 20 74 68 65 20 63 75 72 72 65 6e 74 20 66  om the current f
351a0 72 61 6d 65 20 69 66 20 74 68 69 73 20 69 6e 73  rame if this ins
351b0 74 72 75 63 74 69 6f 6e 20 69 73 20 62 65 69 6e  truction is bein
351c0 67 20 65 78 65 63 75 74 65 64 0a 2a 2a 20 77 69  g executed.** wi
351d0 74 68 69 6e 20 61 20 73 75 62 2d 70 72 6f 67 72  thin a sub-progr
351e0 61 6d 29 2e 20 53 65 74 20 74 68 65 20 76 61 6c  am). Set the val
351f0 75 65 20 6f 66 20 72 65 67 69 73 74 65 72 20 50  ue of register P
35200 31 20 74 6f 20 74 68 65 20 6d 61 78 69 6d 75 6d  1 to the maximum
35210 20 6f 66 20 0a 2a 2a 20 69 74 73 20 63 75 72 72   of .** its curr
35220 65 6e 74 20 76 61 6c 75 65 20 61 6e 64 20 74 68  ent value and th
35230 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73  e value in regis
35240 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54 68  ter P2..**.** Th
35250 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 74  is instruction t
35260 68 72 6f 77 73 20 61 6e 20 65 72 72 6f 72 20 69  hrows an error i
35270 66 20 74 68 65 20 6d 65 6d 6f 72 79 20 63 65 6c  f the memory cel
35280 6c 20 69 73 20 6e 6f 74 20 69 6e 69 74 69 61 6c  l is not initial
35290 6c 79 0a 2a 2a 20 61 6e 20 69 6e 74 65 67 65 72  ly.** an integer
352a0 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4d 65 6d  ..*/.case OP_Mem
352b0 4d 61 78 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a  Max: {        /*
352c0 20 69 6e 32 20 2a 2f 0a 20 20 56 64 62 65 46 72   in2 */.  VdbeFr
352d0 61 6d 65 20 2a 70 46 72 61 6d 65 3b 0a 20 20 69  ame *pFrame;.  i
352e0 66 28 20 70 2d 3e 70 46 72 61 6d 65 20 29 7b 0a  f( p->pFrame ){.
352f0 20 20 20 20 66 6f 72 28 70 46 72 61 6d 65 3d 70      for(pFrame=p
35300 2d 3e 70 46 72 61 6d 65 3b 20 70 46 72 61 6d 65  ->pFrame; pFrame
35310 2d 3e 70 50 61 72 65 6e 74 3b 20 70 46 72 61 6d  ->pParent; pFram
35320 65 3d 70 46 72 61 6d 65 2d 3e 70 50 61 72 65 6e  e=pFrame->pParen
35330 74 29 3b 0a 20 20 20 20 70 49 6e 31 20 3d 20 26  t);.    pIn1 = &
35340 70 46 72 61 6d 65 2d 3e 61 4d 65 6d 5b 70 4f 70  pFrame->aMem[pOp
35350 2d 3e 70 31 5d 3b 0a 20 20 7d 65 6c 73 65 7b 0a  ->p1];.  }else{.
35360 20 20 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d      pIn1 = &aMem
35370 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 7d 0a 20  [pOp->p1];.  }. 
35380 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61   assert( memIsVa
35390 6c 69 64 28 70 49 6e 31 29 20 29 3b 0a 20 20 73  lid(pIn1) );.  s
353a0 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 49 6e 74  qlite3VdbeMemInt
353b0 65 67 65 72 69 66 79 28 70 49 6e 31 29 3b 0a 20  egerify(pIn1);. 
353c0 20 70 49 6e 32 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn2 = &aMem[pO
353d0 70 2d 3e 70 32 5d 3b 0a 20 20 73 71 6c 69 74 65  p->p2];.  sqlite
353e0 33 56 64 62 65 4d 65 6d 49 6e 74 65 67 65 72 69  3VdbeMemIntegeri
353f0 66 79 28 70 49 6e 32 29 3b 0a 20 20 69 66 28 20  fy(pIn2);.  if( 
35400 70 49 6e 31 2d 3e 75 2e 69 3c 70 49 6e 32 2d 3e  pIn1->u.i<pIn2->
35410 75 2e 69 29 7b 0a 20 20 20 20 70 49 6e 31 2d 3e  u.i){.    pIn1->
35420 75 2e 69 20 3d 20 70 49 6e 32 2d 3e 75 2e 69 3b  u.i = pIn2->u.i;
35430 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
35440 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45  #endif /* SQLITE
35450 5f 4f 4d 49 54 5f 41 55 54 4f 49 4e 43 52 45 4d  _OMIT_AUTOINCREM
35460 45 4e 54 20 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f 64  ENT */../* Opcod
35470 65 3a 20 49 66 50 6f 73 20 50 31 20 50 32 20 50  e: IfPos P1 P2 P
35480 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69  3 * *.** Synopsi
35490 73 3a 20 69 66 20 72 5b 50 31 5d 3e 30 20 74 68  s: if r[P1]>0 th
354a0 65 6e 20 72 5b 50 31 5d 2d 3d 50 33 2c 20 67 6f  en r[P1]-=P3, go
354b0 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 52 65 67 69  to P2.**.** Regi
354c0 73 74 65 72 20 50 31 20 6d 75 73 74 20 63 6f 6e  ster P1 must con
354d0 74 61 69 6e 20 61 6e 20 69 6e 74 65 67 65 72 2e  tain an integer.
354e0 0a 2a 2a 20 49 66 20 74 68 65 20 76 61 6c 75 65  .** If the value
354f0 20 6f 66 20 72 65 67 69 73 74 65 72 20 50 31 20   of register P1 
35500 69 73 20 31 20 6f 72 20 67 72 65 61 74 65 72 2c  is 1 or greater,
35510 20 73 75 62 74 72 61 63 74 20 50 33 20 66 72 6f   subtract P3 fro
35520 6d 20 74 68 65 0a 2a 2a 20 76 61 6c 75 65 20 69  m the.** value i
35530 6e 20 50 31 20 61 6e 64 20 6a 75 6d 70 20 74 6f  n P1 and jump to
35540 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68   P2..**.** If th
35550 65 20 69 6e 69 74 69 61 6c 20 76 61 6c 75 65 20  e initial value 
35560 6f 66 20 72 65 67 69 73 74 65 72 20 50 31 20 69  of register P1 i
35570 73 20 6c 65 73 73 20 74 68 61 6e 20 31 2c 20 74  s less than 1, t
35580 68 65 6e 20 74 68 65 0a 2a 2a 20 76 61 6c 75 65  hen the.** value
35590 20 69 73 20 75 6e 63 68 61 6e 67 65 64 20 61 6e   is unchanged an
355a0 64 20 63 6f 6e 74 72 6f 6c 20 70 61 73 73 65 73  d control passes
355b0 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20   through to the 
355c0 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e  next instruction
355d0 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 66 50  ..*/.case OP_IfP
355e0 6f 73 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20  os: {        /* 
355f0 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20 70  jump, in1 */.  p
35600 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In1 = &aMem[pOp-
35610 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p1];.  assert( 
35620 70 49 6e 31 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f  pIn1->flags&MEM_
35630 49 6e 74 20 29 3b 0a 20 20 56 64 62 65 42 72 61  Int );.  VdbeBra
35640 6e 63 68 54 61 6b 65 6e 28 20 70 49 6e 31 2d 3e  nchTaken( pIn1->
35650 75 2e 69 3e 30 2c 20 32 29 3b 0a 20 20 69 66 28  u.i>0, 2);.  if(
35660 20 70 49 6e 31 2d 3e 75 2e 69 3e 30 20 29 7b 0a   pIn1->u.i>0 ){.
35670 20 20 20 20 70 49 6e 31 2d 3e 75 2e 69 20 2d 3d      pIn1->u.i -=
35680 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 20 20 67 6f   pOp->p3;.    go
35690 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20  to jump_to_p2;. 
356a0 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f   }.  break;.}../
356b0 2a 20 4f 70 63 6f 64 65 3a 20 4f 66 66 73 65 74  * Opcode: Offset
356c0 4c 69 6d 69 74 20 50 31 20 50 32 20 50 33 20 2a  Limit P1 P2 P3 *
356d0 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
356e0 69 66 20 72 5b 50 31 5d 3e 30 20 74 68 65 6e 20  if r[P1]>0 then 
356f0 72 5b 50 32 5d 3d 72 5b 50 31 5d 2b 6d 61 78 28  r[P2]=r[P1]+max(
35700 30 2c 72 5b 50 33 5d 29 20 65 6c 73 65 20 72 5b  0,r[P3]) else r[
35710 50 32 5d 3d 28 2d 31 29 0a 2a 2a 0a 2a 2a 20 54  P2]=(-1).**.** T
35720 68 69 73 20 6f 70 63 6f 64 65 20 70 65 72 66 6f  his opcode perfo
35730 72 6d 73 20 61 20 63 6f 6d 6d 6f 6e 6c 79 20 75  rms a commonly u
35740 73 65 64 20 63 6f 6d 70 75 74 61 74 69 6f 6e 20  sed computation 
35750 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 0a  associated with.
35760 2a 2a 20 4c 49 4d 49 54 20 61 6e 64 20 4f 46 46  ** LIMIT and OFF
35770 53 45 54 20 70 72 6f 63 65 73 73 2e 20 20 72 5b  SET process.  r[
35780 50 31 5d 20 68 6f 6c 64 73 20 74 68 65 20 6c 69  P1] holds the li
35790 6d 69 74 20 63 6f 75 6e 74 65 72 2e 20 20 72 5b  mit counter.  r[
357a0 50 33 5d 0a 2a 2a 20 68 6f 6c 64 73 20 74 68 65  P3].** holds the
357b0 20 6f 66 66 73 65 74 20 63 6f 75 6e 74 65 72 2e   offset counter.
357c0 20 20 54 68 65 20 6f 70 63 6f 64 65 20 63 6f 6d    The opcode com
357d0 70 75 74 65 73 20 74 68 65 20 63 6f 6d 62 69 6e  putes the combin
357e0 65 64 20 76 61 6c 75 65 0a 2a 2a 20 6f 66 20 74  ed value.** of t
357f0 68 65 20 4c 49 4d 49 54 20 61 6e 64 20 4f 46 46  he LIMIT and OFF
35800 53 45 54 20 61 6e 64 20 73 74 6f 72 65 73 20 74  SET and stores t
35810 68 61 74 20 76 61 6c 75 65 20 69 6e 20 72 5b 50  hat value in r[P
35820 32 5d 2e 20 20 54 68 65 20 72 5b 50 32 5d 0a 2a  2].  The r[P2].*
35830 2a 20 76 61 6c 75 65 20 63 6f 6d 70 75 74 65 64  * value computed
35840 20 69 73 20 74 68 65 20 74 6f 74 61 6c 20 6e 75   is the total nu
35850 6d 62 65 72 20 6f 66 20 72 6f 77 73 20 74 68 61  mber of rows tha
35860 74 20 77 69 6c 6c 20 6e 65 65 64 20 74 6f 20 62  t will need to b
35870 65 0a 2a 2a 20 76 69 73 69 74 65 64 20 69 6e 20  e.** visited in 
35880 6f 72 64 65 72 20 74 6f 20 63 6f 6d 70 6c 65 74  order to complet
35890 65 20 74 68 65 20 71 75 65 72 79 2e 0a 2a 2a 0a  e the query..**.
358a0 2a 2a 20 49 66 20 72 5b 50 33 5d 20 69 73 20 7a  ** If r[P3] is z
358b0 65 72 6f 20 6f 72 20 6e 65 67 61 74 69 76 65 2c  ero or negative,
358c0 20 74 68 61 74 20 6d 65 61 6e 73 20 74 68 65 72   that means ther
358d0 65 20 69 73 20 6e 6f 20 4f 46 46 53 45 54 0a 2a  e is no OFFSET.*
358e0 2a 20 61 6e 64 20 72 5b 50 32 5d 20 69 73 20 73  * and r[P2] is s
358f0 65 74 20 74 6f 20 62 65 20 74 68 65 20 76 61 6c  et to be the val
35900 75 65 20 6f 66 20 74 68 65 20 4c 49 4d 49 54 2c  ue of the LIMIT,
35910 20 72 5b 50 31 5d 2e 0a 2a 2a 0a 2a 2a 20 69 66   r[P1]..**.** if
35920 20 72 5b 50 31 5d 20 69 73 20 7a 65 72 6f 20 6f   r[P1] is zero o
35930 72 20 6e 65 67 61 74 69 76 65 2c 20 74 68 61 74  r negative, that
35940 20 6d 65 61 6e 73 20 74 68 65 72 65 20 69 73 20   means there is 
35950 6e 6f 20 4c 49 4d 49 54 0a 2a 2a 20 61 6e 64 20  no LIMIT.** and 
35960 72 5b 50 32 5d 20 69 73 20 73 65 74 20 74 6f 20  r[P2] is set to 
35970 2d 31 2e 20 0a 2a 2a 0a 2a 2a 20 4f 74 68 65 72  -1. .**.** Other
35980 77 69 73 65 2c 20 72 5b 50 32 5d 20 69 73 20 73  wise, r[P2] is s
35990 65 74 20 74 6f 20 74 68 65 20 73 75 6d 20 6f 66  et to the sum of
359a0 20 72 5b 50 31 5d 20 61 6e 64 20 72 5b 50 33 5d   r[P1] and r[P3]
359b0 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4f 66 66  ..*/.case OP_Off
359c0 73 65 74 4c 69 6d 69 74 3a 20 7b 20 20 20 20 2f  setLimit: {    /
359d0 2a 20 69 6e 31 2c 20 6f 75 74 32 2c 20 69 6e 33  * in1, out2, in3
359e0 20 2a 2f 0a 20 20 69 36 34 20 78 3b 0a 20 20 70   */.  i64 x;.  p
359f0 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In1 = &aMem[pOp-
35a00 3e 70 31 5d 3b 0a 20 20 70 49 6e 33 20 3d 20 26  >p1];.  pIn3 = &
35a10 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20  aMem[pOp->p3];. 
35a20 20 70 4f 75 74 20 3d 20 6f 75 74 32 50 72 65 72   pOut = out2Prer
35a30 65 6c 65 61 73 65 28 70 2c 20 70 4f 70 29 3b 0a  elease(p, pOp);.
35a40 20 20 61 73 73 65 72 74 28 20 70 49 6e 31 2d 3e    assert( pIn1->
35a50 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 20  flags & MEM_Int 
35a60 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 49 6e  );.  assert( pIn
35a70 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49  3->flags & MEM_I
35a80 6e 74 20 29 3b 0a 20 20 78 20 3d 20 70 49 6e 31  nt );.  x = pIn1
35a90 2d 3e 75 2e 69 3b 0a 20 20 69 66 28 20 78 3c 3d  ->u.i;.  if( x<=
35aa0 30 20 7c 7c 20 73 71 6c 69 74 65 33 41 64 64 49  0 || sqlite3AddI
35ab0 6e 74 36 34 28 26 78 2c 20 70 49 6e 33 2d 3e 75  nt64(&x, pIn3->u
35ac0 2e 69 3e 30 3f 70 49 6e 33 2d 3e 75 2e 69 3a 30  .i>0?pIn3->u.i:0
35ad0 29 20 29 7b 0a 20 20 20 20 2f 2a 20 49 66 20 74  ) ){.    /* If t
35ae0 68 65 20 4c 49 4d 49 54 20 69 73 20 6c 65 73 73  he LIMIT is less
35af0 20 74 68 61 6e 20 6f 72 20 65 71 75 61 6c 20 74   than or equal t
35b00 6f 20 7a 65 72 6f 2c 20 6c 6f 6f 70 20 66 6f 72  o zero, loop for
35b10 65 76 65 72 2e 20 20 54 68 69 73 0a 20 20 20 20  ever.  This.    
35b20 2a 2a 20 69 73 20 64 6f 63 75 6d 65 6e 74 65 64  ** is documented
35b30 2e 20 20 42 75 74 20 61 6c 73 6f 2c 20 69 66 20  .  But also, if 
35b40 74 68 65 20 4c 49 4d 49 54 2b 4f 46 46 53 45 54  the LIMIT+OFFSET
35b50 20 65 78 63 65 65 64 73 20 32 5e 36 33 20 74 68   exceeds 2^63 th
35b60 65 6e 0a 20 20 20 20 2a 2a 20 61 6c 73 6f 20 6c  en.    ** also l
35b70 6f 6f 70 20 66 6f 72 65 76 65 72 2e 20 20 54 68  oop forever.  Th
35b80 69 73 20 69 73 20 75 6e 64 6f 63 75 6d 65 6e 74  is is undocument
35b90 65 64 2e 20 20 49 6e 20 66 61 63 74 2c 20 6f 6e  ed.  In fact, on
35ba0 65 20 63 6f 75 6c 64 20 61 72 67 75 65 0a 20 20  e could argue.  
35bb0 20 20 2a 2a 20 74 68 61 74 20 74 68 65 20 6c 6f    ** that the lo
35bc0 6f 70 20 73 68 6f 75 6c 64 20 74 65 72 6d 69 6e  op should termin
35bd0 61 74 65 2e 20 20 42 75 74 20 61 73 73 75 6d 69  ate.  But assumi
35be0 6e 67 20 31 20 62 69 6c 6c 69 6f 6e 20 69 74 65  ng 1 billion ite
35bf0 72 61 74 69 6f 6e 73 0a 20 20 20 20 2a 2a 20 70  rations.    ** p
35c00 65 72 20 73 65 63 6f 6e 64 20 28 66 61 72 20 65  er second (far e
35c10 78 63 65 65 64 69 6e 67 20 74 68 65 20 63 61 70  xceeding the cap
35c20 61 62 69 6c 69 74 69 65 73 20 6f 66 20 61 6e 79  abilities of any
35c30 20 63 75 72 72 65 6e 74 20 68 61 72 64 77 61 72   current hardwar
35c40 65 29 0a 20 20 20 20 2a 2a 20 69 74 20 77 6f 75  e).    ** it wou
35c50 6c 64 20 74 61 6b 65 20 6e 65 61 72 6c 79 20 33  ld take nearly 3
35c60 30 30 20 79 65 61 72 73 20 74 6f 20 61 63 74 75  00 years to actu
35c70 61 6c 6c 79 20 72 65 61 63 68 20 74 68 65 20 6c  ally reach the l
35c80 69 6d 69 74 2e 20 20 53 6f 0a 20 20 20 20 2a 2a  imit.  So.    **
35c90 20 6c 6f 6f 70 69 6e 67 20 66 6f 72 65 76 65 72   looping forever
35ca0 20 69 73 20 61 20 72 65 61 73 6f 6e 61 62 6c 65   is a reasonable
35cb0 20 61 70 70 72 6f 78 69 6d 61 74 69 6f 6e 2e 20   approximation. 
35cc0 2a 2f 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e 69  */.    pOut->u.i
35cd0 20 3d 20 2d 31 3b 0a 20 20 7d 65 6c 73 65 7b 0a   = -1;.  }else{.
35ce0 20 20 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20      pOut->u.i = 
35cf0 78 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  x;.  }.  break;.
35d00 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 66  }../* Opcode: If
35d10 4e 6f 74 5a 65 72 6f 20 50 31 20 50 32 20 2a 20  NotZero P1 P2 * 
35d20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  * *.** Synopsis:
35d30 20 69 66 20 72 5b 50 31 5d 21 3d 30 20 74 68 65   if r[P1]!=0 the
35d40 6e 20 72 5b 50 31 5d 2d 2d 2c 20 67 6f 74 6f 20  n r[P1]--, goto 
35d50 50 32 0a 2a 2a 0a 2a 2a 20 52 65 67 69 73 74 65  P2.**.** Registe
35d60 72 20 50 31 20 6d 75 73 74 20 63 6f 6e 74 61 69  r P1 must contai
35d70 6e 20 61 6e 20 69 6e 74 65 67 65 72 2e 20 20 49  n an integer.  I
35d80 66 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66  f the content of
35d90 20 72 65 67 69 73 74 65 72 20 50 31 20 69 73 0a   register P1 is.
35da0 2a 2a 20 69 6e 69 74 69 61 6c 6c 79 20 67 72 65  ** initially gre
35db0 61 74 65 72 20 74 68 61 6e 20 7a 65 72 6f 2c 20  ater than zero, 
35dc0 74 68 65 6e 20 64 65 63 72 65 6d 65 6e 74 20 74  then decrement t
35dd0 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69  he value in regi
35de0 73 74 65 72 20 50 31 2e 0a 2a 2a 20 49 66 20 69  ster P1..** If i
35df0 74 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 20 28 6e  t is non-zero (n
35e00 65 67 61 74 69 76 65 20 6f 72 20 70 6f 73 69 74  egative or posit
35e10 69 76 65 29 20 61 6e 64 20 74 68 65 6e 20 61 6c  ive) and then al
35e20 73 6f 20 6a 75 6d 70 20 74 6f 20 50 32 2e 20 20  so jump to P2.  
35e30 0a 2a 2a 20 49 66 20 72 65 67 69 73 74 65 72 20  .** If register 
35e40 50 31 20 69 73 20 69 6e 69 74 69 61 6c 6c 79 20  P1 is initially 
35e50 7a 65 72 6f 2c 20 6c 65 61 76 65 20 69 74 20 75  zero, leave it u
35e60 6e 63 68 61 6e 67 65 64 20 61 6e 64 20 66 61 6c  nchanged and fal
35e70 6c 20 74 68 72 6f 75 67 68 2e 0a 2a 2f 0a 63 61  l through..*/.ca
35e80 73 65 20 4f 50 5f 49 66 4e 6f 74 5a 65 72 6f 3a  se OP_IfNotZero:
35e90 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d   {        /* jum
35ea0 70 2c 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31  p, in1 */.  pIn1
35eb0 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31   = &aMem[pOp->p1
35ec0 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 49 6e  ];.  assert( pIn
35ed0 31 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 49 6e 74  1->flags&MEM_Int
35ee0 20 29 3b 0a 20 20 56 64 62 65 42 72 61 6e 63 68   );.  VdbeBranch
35ef0 54 61 6b 65 6e 28 70 49 6e 31 2d 3e 75 2e 69 3c  Taken(pIn1->u.i<
35f00 30 2c 20 32 29 3b 0a 20 20 69 66 28 20 70 49 6e  0, 2);.  if( pIn
35f10 31 2d 3e 75 2e 69 20 29 7b 0a 20 20 20 20 20 69  1->u.i ){.     i
35f20 66 28 20 70 49 6e 31 2d 3e 75 2e 69 3e 30 20 29  f( pIn1->u.i>0 )
35f30 20 70 49 6e 31 2d 3e 75 2e 69 2d 2d 3b 0a 20 20   pIn1->u.i--;.  
35f40 20 20 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f     goto jump_to_
35f50 70 32 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  p2;.  }.  break;
35f60 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 44  .}../* Opcode: D
35f70 65 63 72 4a 75 6d 70 5a 65 72 6f 20 50 31 20 50  ecrJumpZero P1 P
35f80 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70  2 * * *.** Synop
35f90 73 69 73 3a 20 69 66 20 28 2d 2d 72 5b 50 31 5d  sis: if (--r[P1]
35fa0 29 3d 3d 30 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a  )==0 goto P2.**.
35fb0 2a 2a 20 52 65 67 69 73 74 65 72 20 50 31 20 6d  ** Register P1 m
35fc0 75 73 74 20 68 6f 6c 64 20 61 6e 20 69 6e 74 65  ust hold an inte
35fd0 67 65 72 2e 20 20 44 65 63 72 65 6d 65 6e 74 20  ger.  Decrement 
35fe0 74 68 65 20 76 61 6c 75 65 20 69 6e 20 50 31 0a  the value in P1.
35ff0 2a 2a 20 61 6e 64 20 6a 75 6d 70 20 74 6f 20 50  ** and jump to P
36000 32 20 69 66 20 74 68 65 20 6e 65 77 20 76 61 6c  2 if the new val
36010 75 65 20 69 73 20 65 78 61 63 74 6c 79 20 7a 65  ue is exactly ze
36020 72 6f 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 44  ro..*/.case OP_D
36030 65 63 72 4a 75 6d 70 5a 65 72 6f 3a 20 7b 20 20  ecrJumpZero: {  
36040 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31      /* jump, in1
36050 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d   */.  pIn1 = &aM
36060 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  em[pOp->p1];.  a
36070 73 73 65 72 74 28 20 70 49 6e 31 2d 3e 66 6c 61  ssert( pIn1->fla
36080 67 73 26 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20  gs&MEM_Int );.  
36090 69 66 28 20 70 49 6e 31 2d 3e 75 2e 69 3e 53 4d  if( pIn1->u.i>SM
360a0 41 4c 4c 45 53 54 5f 49 4e 54 36 34 20 29 20 70  ALLEST_INT64 ) p
360b0 49 6e 31 2d 3e 75 2e 69 2d 2d 3b 0a 20 20 56 64  In1->u.i--;.  Vd
360c0 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 70 49  beBranchTaken(pI
360d0 6e 31 2d 3e 75 2e 69 3d 3d 30 2c 20 32 29 3b 0a  n1->u.i==0, 2);.
360e0 20 20 69 66 28 20 70 49 6e 31 2d 3e 75 2e 69 3d    if( pIn1->u.i=
360f0 3d 30 20 29 20 67 6f 74 6f 20 6a 75 6d 70 5f 74  =0 ) goto jump_t
36100 6f 5f 70 32 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  o_p2;.  break;.}
36110 0a 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 41 67  .../* Opcode: Ag
36120 67 53 74 65 70 20 2a 20 50 32 20 50 33 20 50 34  gStep * P2 P3 P4
36130 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a   P5.** Synopsis:
36140 20 61 63 63 75 6d 3d 72 5b 50 33 5d 20 73 74 65   accum=r[P3] ste
36150 70 28 72 5b 50 32 40 50 35 5d 29 0a 2a 2a 0a 2a  p(r[P2@P5]).**.*
36160 2a 20 45 78 65 63 75 74 65 20 74 68 65 20 78 53  * Execute the xS
36170 74 65 70 20 66 75 6e 63 74 69 6f 6e 20 66 6f 72  tep function for
36180 20 61 6e 20 61 67 67 72 65 67 61 74 65 2e 0a 2a   an aggregate..*
36190 2a 20 54 68 65 20 66 75 6e 63 74 69 6f 6e 20 68  * The function h
361a0 61 73 20 50 35 20 61 72 67 75 6d 65 6e 74 73 2e  as P5 arguments.
361b0 20 20 50 34 20 69 73 20 61 20 70 6f 69 6e 74 65    P4 is a pointe
361c0 72 20 74 6f 20 74 68 65 20 0a 2a 2a 20 46 75 6e  r to the .** Fun
361d0 63 44 65 66 20 73 74 72 75 63 74 75 72 65 20 74  cDef structure t
361e0 68 61 74 20 73 70 65 63 69 66 69 65 73 20 74 68  hat specifies th
361f0 65 20 66 75 6e 63 74 69 6f 6e 2e 20 20 52 65 67  e function.  Reg
36200 69 73 74 65 72 20 50 33 20 69 73 20 74 68 65 0a  ister P3 is the.
36210 2a 2a 20 61 63 63 75 6d 75 6c 61 74 6f 72 2e 0a  ** accumulator..
36220 2a 2a 0a 2a 2a 20 54 68 65 20 50 35 20 61 72 67  **.** The P5 arg
36230 75 6d 65 6e 74 73 20 61 72 65 20 74 61 6b 65 6e  uments are taken
36240 20 66 72 6f 6d 20 72 65 67 69 73 74 65 72 20 50   from register P
36250 32 20 61 6e 64 20 69 74 73 0a 2a 2a 20 73 75 63  2 and its.** suc
36260 63 65 73 73 6f 72 73 2e 0a 2a 2f 0a 2f 2a 20 4f  cessors..*/./* O
36270 70 63 6f 64 65 3a 20 41 67 67 49 6e 76 65 72 73  pcode: AggInvers
36280 65 20 2a 20 50 32 20 50 33 20 50 34 20 50 35 0a  e * P2 P3 P4 P5.
36290 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 61 63 63  ** Synopsis: acc
362a0 75 6d 3d 72 5b 50 33 5d 20 69 6e 76 65 72 73 65  um=r[P3] inverse
362b0 28 72 5b 50 32 40 50 35 5d 29 0a 2a 2a 0a 2a 2a  (r[P2@P5]).**.**
362c0 20 45 78 65 63 75 74 65 20 74 68 65 20 78 49 6e   Execute the xIn
362d0 76 65 72 73 65 20 66 75 6e 63 74 69 6f 6e 20 66  verse function f
362e0 6f 72 20 61 6e 20 61 67 67 72 65 67 61 74 65 2e  or an aggregate.
362f0 0a 2a 2a 20 54 68 65 20 66 75 6e 63 74 69 6f 6e  .** The function
36300 20 68 61 73 20 50 35 20 61 72 67 75 6d 65 6e 74   has P5 argument
36310 73 2e 20 20 50 34 20 69 73 20 61 20 70 6f 69 6e  s.  P4 is a poin
36320 74 65 72 20 74 6f 20 74 68 65 20 0a 2a 2a 20 46  ter to the .** F
36330 75 6e 63 44 65 66 20 73 74 72 75 63 74 75 72 65  uncDef structure
36340 20 74 68 61 74 20 73 70 65 63 69 66 69 65 73 20   that specifies 
36350 74 68 65 20 66 75 6e 63 74 69 6f 6e 2e 20 20 52  the function.  R
36360 65 67 69 73 74 65 72 20 50 33 20 69 73 20 74 68  egister P3 is th
36370 65 0a 2a 2a 20 61 63 63 75 6d 75 6c 61 74 6f 72  e.** accumulator
36380 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 35 20 61  ..**.** The P5 a
36390 72 67 75 6d 65 6e 74 73 20 61 72 65 20 74 61 6b  rguments are tak
363a0 65 6e 20 66 72 6f 6d 20 72 65 67 69 73 74 65 72  en from register
363b0 20 50 32 20 61 6e 64 20 69 74 73 0a 2a 2a 20 73   P2 and its.** s
363c0 75 63 63 65 73 73 6f 72 73 2e 0a 2a 2f 0a 2f 2a  uccessors..*/./*
363d0 20 4f 70 63 6f 64 65 3a 20 41 67 67 53 74 65 70   Opcode: AggStep
363e0 31 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35  1 P1 P2 P3 P4 P5
363f0 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 61 63  .** Synopsis: ac
36400 63 75 6d 3d 72 5b 50 33 5d 20 73 74 65 70 28 72  cum=r[P3] step(r
36410 5b 50 32 40 50 35 5d 29 0a 2a 2a 0a 2a 2a 20 45  [P2@P5]).**.** E
36420 78 65 63 75 74 65 20 74 68 65 20 78 53 74 65 70  xecute the xStep
36430 20 28 69 66 20 50 31 3d 3d 30 29 20 6f 72 20 78   (if P1==0) or x
36440 49 6e 76 65 72 73 65 20 28 69 66 20 50 31 21 3d  Inverse (if P1!=
36450 30 29 20 66 75 6e 63 74 69 6f 6e 20 66 6f 72 20  0) function for 
36460 61 6e 0a 2a 2a 20 61 67 67 72 65 67 61 74 65 2e  an.** aggregate.
36470 20 20 54 68 65 20 66 75 6e 63 74 69 6f 6e 20 68    The function h
36480 61 73 20 50 35 20 61 72 67 75 6d 65 6e 74 73 2e  as P5 arguments.
36490 20 20 50 34 20 69 73 20 61 20 70 6f 69 6e 74 65    P4 is a pointe
364a0 72 20 74 6f 20 74 68 65 20 0a 2a 2a 20 46 75 6e  r to the .** Fun
364b0 63 44 65 66 20 73 74 72 75 63 74 75 72 65 20 74  cDef structure t
364c0 68 61 74 20 73 70 65 63 69 66 69 65 73 20 74 68  hat specifies th
364d0 65 20 66 75 6e 63 74 69 6f 6e 2e 20 20 52 65 67  e function.  Reg
364e0 69 73 74 65 72 20 50 33 20 69 73 20 74 68 65 0a  ister P3 is the.
364f0 2a 2a 20 61 63 63 75 6d 75 6c 61 74 6f 72 2e 0a  ** accumulator..
36500 2a 2a 0a 2a 2a 20 54 68 65 20 50 35 20 61 72 67  **.** The P5 arg
36510 75 6d 65 6e 74 73 20 61 72 65 20 74 61 6b 65 6e  uments are taken
36520 20 66 72 6f 6d 20 72 65 67 69 73 74 65 72 20 50   from register P
36530 32 20 61 6e 64 20 69 74 73 0a 2a 2a 20 73 75 63  2 and its.** suc
36540 63 65 73 73 6f 72 73 2e 0a 2a 2a 0a 2a 2a 20 54  cessors..**.** T
36550 68 69 73 20 6f 70 63 6f 64 65 20 69 73 20 69 6e  his opcode is in
36560 69 74 69 61 6c 6c 79 20 63 6f 64 65 64 20 61 73  itially coded as
36570 20 4f 50 5f 41 67 67 53 74 65 70 30 2e 20 20 4f   OP_AggStep0.  O
36580 6e 20 66 69 72 73 74 20 65 76 61 6c 75 61 74 69  n first evaluati
36590 6f 6e 2c 0a 2a 2a 20 74 68 65 20 46 75 6e 63 44  on,.** the FuncD
365a0 65 66 20 73 74 6f 72 65 64 20 69 6e 20 50 34 20  ef stored in P4 
365b0 69 73 20 63 6f 6e 76 65 72 74 65 64 20 69 6e 74  is converted int
365c0 6f 20 61 6e 20 73 71 6c 69 74 65 33 5f 63 6f 6e  o an sqlite3_con
365d0 74 65 78 74 20 61 6e 64 0a 2a 2a 20 74 68 65 20  text and.** the 
365e0 6f 70 63 6f 64 65 20 69 73 20 63 68 61 6e 67 65  opcode is change
365f0 64 2e 20 20 49 6e 20 74 68 69 73 20 77 61 79 2c  d.  In this way,
36600 20 74 68 65 20 69 6e 69 74 69 61 6c 69 7a 61 74   the initializat
36610 69 6f 6e 20 6f 66 20 74 68 65 0a 2a 2a 20 73 71  ion of the.** sq
36620 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 20 6f 6e  lite3_context on
36630 6c 79 20 68 61 70 70 65 6e 73 20 6f 6e 63 65 2c  ly happens once,
36640 20 69 6e 73 74 65 61 64 20 6f 66 20 6f 6e 20 65   instead of on e
36650 61 63 68 20 63 61 6c 6c 20 74 6f 20 74 68 65 0a  ach call to the.
36660 2a 2a 20 73 74 65 70 20 66 75 6e 63 74 69 6f 6e  ** step function
36670 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 41 67 67  ..*/.case OP_Agg
36680 49 6e 76 65 72 73 65 3a 0a 63 61 73 65 20 4f 50  Inverse:.case OP
36690 5f 41 67 67 53 74 65 70 3a 20 7b 0a 20 20 69 6e  _AggStep: {.  in
366a0 74 20 6e 3b 0a 20 20 73 71 6c 69 74 65 33 5f 63  t n;.  sqlite3_c
366b0 6f 6e 74 65 78 74 20 2a 70 43 74 78 3b 0a 0a 20  ontext *pCtx;.. 
366c0 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34   assert( pOp->p4
366d0 74 79 70 65 3d 3d 50 34 5f 46 55 4e 43 44 45 46  type==P4_FUNCDEF
366e0 20 29 3b 0a 20 20 6e 20 3d 20 70 4f 70 2d 3e 70   );.  n = pOp->p
366f0 35 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  5;.  assert( pOp
36700 2d 3e 70 33 3e 30 20 26 26 20 70 4f 70 2d 3e 70  ->p3>0 && pOp->p
36710 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20  3<=(p->nMem+1 - 
36720 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20  p->nCursor) );. 
36730 20 61 73 73 65 72 74 28 20 6e 3d 3d 30 20 7c 7c   assert( n==0 ||
36740 20 28 70 4f 70 2d 3e 70 32 3e 30 20 26 26 20 70   (pOp->p2>0 && p
36750 4f 70 2d 3e 70 32 2b 6e 3c 3d 28 70 2d 3e 6e 4d  Op->p2+n<=(p->nM
36760 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f  em+1 - p->nCurso
36770 72 29 2b 31 29 20 29 3b 0a 20 20 61 73 73 65 72  r)+1) );.  asser
36780 74 28 20 70 4f 70 2d 3e 70 33 3c 70 4f 70 2d 3e  t( pOp->p3<pOp->
36790 70 32 20 7c 7c 20 70 4f 70 2d 3e 70 33 3e 3d 70  p2 || pOp->p3>=p
367a0 4f 70 2d 3e 70 32 2b 6e 20 29 3b 0a 20 20 70 43  Op->p2+n );.  pC
367b0 74 78 20 3d 20 73 71 6c 69 74 65 33 44 62 4d 61  tx = sqlite3DbMa
367c0 6c 6c 6f 63 52 61 77 4e 4e 28 64 62 2c 20 6e 2a  llocRawNN(db, n*
367d0 73 69 7a 65 6f 66 28 73 71 6c 69 74 65 33 5f 76  sizeof(sqlite3_v
367e0 61 6c 75 65 2a 29 20 2b 0a 20 20 20 20 20 20 20  alue*) +.       
367f0 20 20 20 20 20 20 20 20 28 73 69 7a 65 6f 66 28          (sizeof(
36800 70 43 74 78 5b 30 5d 29 20 2b 20 73 69 7a 65 6f  pCtx[0]) + sizeo
36810 66 28 4d 65 6d 29 20 2d 20 73 69 7a 65 6f 66 28  f(Mem) - sizeof(
36820 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 29 29  sqlite3_value*))
36830 29 3b 0a 20 20 69 66 28 20 70 43 74 78 3d 3d 30  );.  if( pCtx==0
36840 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a   ) goto no_mem;.
36850 20 20 70 43 74 78 2d 3e 70 4d 65 6d 20 3d 20 30    pCtx->pMem = 0
36860 3b 0a 20 20 70 43 74 78 2d 3e 70 4f 75 74 20 3d  ;.  pCtx->pOut =
36870 20 28 4d 65 6d 2a 29 26 28 70 43 74 78 2d 3e 61   (Mem*)&(pCtx->a
36880 72 67 76 5b 6e 5d 29 3b 0a 20 20 73 71 6c 69 74  rgv[n]);.  sqlit
36890 65 33 56 64 62 65 4d 65 6d 49 6e 69 74 28 70 43  e3VdbeMemInit(pC
368a0 74 78 2d 3e 70 4f 75 74 2c 20 64 62 2c 20 4d 45  tx->pOut, db, ME
368b0 4d 5f 4e 75 6c 6c 29 3b 0a 20 20 70 43 74 78 2d  M_Null);.  pCtx-
368c0 3e 70 46 75 6e 63 20 3d 20 70 4f 70 2d 3e 70 34  >pFunc = pOp->p4
368d0 2e 70 46 75 6e 63 3b 0a 20 20 70 43 74 78 2d 3e  .pFunc;.  pCtx->
368e0 69 4f 70 20 3d 20 28 69 6e 74 29 28 70 4f 70 20  iOp = (int)(pOp 
368f0 2d 20 61 4f 70 29 3b 0a 20 20 70 43 74 78 2d 3e  - aOp);.  pCtx->
36900 70 56 64 62 65 20 3d 20 70 3b 0a 20 20 70 43 74  pVdbe = p;.  pCt
36910 78 2d 3e 73 6b 69 70 46 6c 61 67 20 3d 20 30 3b  x->skipFlag = 0;
36920 0a 20 20 70 43 74 78 2d 3e 69 73 45 72 72 6f 72  .  pCtx->isError
36930 20 3d 20 30 3b 0a 20 20 70 43 74 78 2d 3e 61 72   = 0;.  pCtx->ar
36940 67 63 20 3d 20 6e 3b 0a 20 20 70 4f 70 2d 3e 70  gc = n;.  pOp->p
36950 34 74 79 70 65 20 3d 20 50 34 5f 46 55 4e 43 43  4type = P4_FUNCC
36960 54 58 3b 0a 20 20 70 4f 70 2d 3e 70 34 2e 70 43  TX;.  pOp->p4.pC
36970 74 78 20 3d 20 70 43 74 78 3b 0a 0a 20 20 2f 2a  tx = pCtx;..  /*
36980 20 4f 50 5f 41 67 67 49 6e 76 65 72 73 65 20 6d   OP_AggInverse m
36990 75 73 74 20 68 61 76 65 20 50 31 3d 3d 31 20 61  ust have P1==1 a
369a0 6e 64 20 4f 50 5f 41 67 67 53 74 65 70 20 6d 75  nd OP_AggStep mu
369b0 73 74 20 68 61 76 65 20 50 31 3d 3d 30 20 2a 2f  st have P1==0 */
369c0 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
369d0 70 31 3d 3d 28 70 4f 70 2d 3e 6f 70 63 6f 64 65  p1==(pOp->opcode
369e0 3d 3d 4f 50 5f 41 67 67 49 6e 76 65 72 73 65 29  ==OP_AggInverse)
369f0 20 29 3b 0a 0a 20 20 70 4f 70 2d 3e 6f 70 63 6f   );..  pOp->opco
36a00 64 65 20 3d 20 4f 50 5f 41 67 67 53 74 65 70 31  de = OP_AggStep1
36a10 3b 0a 20 20 2f 2a 20 46 61 6c 6c 20 74 68 72 6f  ;.  /* Fall thro
36a20 75 67 68 20 69 6e 74 6f 20 4f 50 5f 41 67 67 53  ugh into OP_AggS
36a30 74 65 70 20 2a 2f 0a 7d 0a 63 61 73 65 20 4f 50  tep */.}.case OP
36a40 5f 41 67 67 53 74 65 70 31 3a 20 7b 0a 20 20 69  _AggStep1: {.  i
36a50 6e 74 20 69 3b 0a 20 20 73 71 6c 69 74 65 33 5f  nt i;.  sqlite3_
36a60 63 6f 6e 74 65 78 74 20 2a 70 43 74 78 3b 0a 20  context *pCtx;. 
36a70 20 4d 65 6d 20 2a 70 4d 65 6d 3b 0a 0a 20 20 61   Mem *pMem;..  a
36a80 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79  ssert( pOp->p4ty
36a90 70 65 3d 3d 50 34 5f 46 55 4e 43 43 54 58 20 29  pe==P4_FUNCCTX )
36aa0 3b 0a 20 20 70 43 74 78 20 3d 20 70 4f 70 2d 3e  ;.  pCtx = pOp->
36ab0 70 34 2e 70 43 74 78 3b 0a 20 20 70 4d 65 6d 20  p4.pCtx;.  pMem 
36ac0 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  = &aMem[pOp->p3]
36ad0 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  ;..#ifdef SQLITE
36ae0 5f 44 45 42 55 47 0a 20 20 69 66 28 20 70 4f 70  _DEBUG.  if( pOp
36af0 2d 3e 70 31 20 29 7b 0a 20 20 20 20 2f 2a 20 54  ->p1 ){.    /* T
36b00 68 69 73 20 69 73 20 61 6e 20 4f 50 5f 41 67 67  his is an OP_Agg
36b10 49 6e 76 65 72 73 65 20 63 61 6c 6c 2e 20 20 56  Inverse call.  V
36b20 65 72 69 66 79 20 74 68 61 74 20 78 53 74 65 70  erify that xStep
36b30 20 68 61 73 20 61 6c 77 61 79 73 0a 20 20 20 20   has always.    
36b40 2a 2a 20 62 65 65 6e 20 63 61 6c 6c 65 64 20 61  ** been called a
36b50 74 20 6c 65 61 73 74 20 6f 6e 63 65 20 70 72 69  t least once pri
36b60 6f 72 20 74 6f 20 61 6e 79 20 78 49 6e 76 65 72  or to any xInver
36b70 73 65 20 63 61 6c 6c 2e 20 2a 2f 0a 20 20 20 20  se call. */.    
36b80 61 73 73 65 72 74 28 20 70 4d 65 6d 2d 3e 75 54  assert( pMem->uT
36b90 65 6d 70 3d 3d 30 78 31 31 32 32 65 30 65 33 20  emp==0x1122e0e3 
36ba0 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  );.  }else{.    
36bb0 2f 2a 20 54 68 69 73 20 69 73 20 61 6e 20 4f 50  /* This is an OP
36bc0 5f 41 67 67 53 74 65 70 20 63 61 6c 6c 2e 20 20  _AggStep call.  
36bd0 4d 61 72 6b 20 69 74 20 61 73 20 73 75 63 68 2e  Mark it as such.
36be0 20 2a 2f 0a 20 20 20 20 70 4d 65 6d 2d 3e 75 54   */.    pMem->uT
36bf0 65 6d 70 20 3d 20 30 78 31 31 32 32 65 30 65 33  emp = 0x1122e0e3
36c00 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 20 20  ;.  }.#endif..  
36c10 2f 2a 20 49 66 20 74 68 69 73 20 66 75 6e 63 74  /* If this funct
36c20 69 6f 6e 20 69 73 20 69 6e 73 69 64 65 20 6f 66  ion is inside of
36c30 20 61 20 74 72 69 67 67 65 72 2c 20 74 68 65 20   a trigger, the 
36c40 72 65 67 69 73 74 65 72 20 61 72 72 61 79 20 69  register array i
36c50 6e 20 61 4d 65 6d 5b 5d 0a 20 20 2a 2a 20 6d 69  n aMem[].  ** mi
36c60 67 68 74 20 63 68 61 6e 67 65 20 66 72 6f 6d 20  ght change from 
36c70 6f 6e 65 20 65 76 61 6c 75 61 74 69 6f 6e 20 74  one evaluation t
36c80 6f 20 74 68 65 20 6e 65 78 74 2e 20 20 54 68 65  o the next.  The
36c90 20 6e 65 78 74 20 62 6c 6f 63 6b 20 6f 66 20 63   next block of c
36ca0 6f 64 65 0a 20 20 2a 2a 20 63 68 65 63 6b 73 20  ode.  ** checks 
36cb0 74 6f 20 73 65 65 20 69 66 20 74 68 65 20 72 65  to see if the re
36cc0 67 69 73 74 65 72 20 61 72 72 61 79 20 68 61 73  gister array has
36cd0 20 63 68 61 6e 67 65 64 2c 20 61 6e 64 20 69 66   changed, and if
36ce0 20 73 6f 20 69 74 0a 20 20 2a 2a 20 72 65 69 6e   so it.  ** rein
36cf0 69 74 69 61 6c 69 7a 65 73 20 74 68 65 20 72 65  itializes the re
36d00 6c 61 76 61 6e 74 20 70 61 72 74 73 20 6f 66 20  lavant parts of 
36d10 74 68 65 20 73 71 6c 69 74 65 33 5f 63 6f 6e 74  the sqlite3_cont
36d20 65 78 74 20 6f 62 6a 65 63 74 20 2a 2f 0a 20 20  ext object */.  
36d30 69 66 28 20 70 43 74 78 2d 3e 70 4d 65 6d 20 21  if( pCtx->pMem !
36d40 3d 20 70 4d 65 6d 20 29 7b 0a 20 20 20 20 70 43  = pMem ){.    pC
36d50 74 78 2d 3e 70 4d 65 6d 20 3d 20 70 4d 65 6d 3b  tx->pMem = pMem;
36d60 0a 20 20 20 20 66 6f 72 28 69 3d 70 43 74 78 2d  .    for(i=pCtx-
36d70 3e 61 72 67 63 2d 31 3b 20 69 3e 3d 30 3b 20 69  >argc-1; i>=0; i
36d80 2d 2d 29 20 70 43 74 78 2d 3e 61 72 67 76 5b 69  --) pCtx->argv[i
36d90 5d 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  ] = &aMem[pOp->p
36da0 32 2b 69 5d 3b 0a 20 20 7d 0a 0a 23 69 66 64 65  2+i];.  }..#ifde
36db0 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20  f SQLITE_DEBUG. 
36dc0 20 66 6f 72 28 69 3d 30 3b 20 69 3c 70 43 74 78   for(i=0; i<pCtx
36dd0 2d 3e 61 72 67 63 3b 20 69 2b 2b 29 7b 0a 20 20  ->argc; i++){.  
36de0 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56    assert( memIsV
36df0 61 6c 69 64 28 70 43 74 78 2d 3e 61 72 67 76 5b  alid(pCtx->argv[
36e00 69 5d 29 20 29 3b 0a 20 20 20 20 52 45 47 49 53  i]) );.    REGIS
36e10 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70  TER_TRACE(pOp->p
36e20 32 2b 69 2c 20 70 43 74 78 2d 3e 61 72 67 76 5b  2+i, pCtx->argv[
36e30 69 5d 29 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 0a  i]);.  }.#endif.
36e40 0a 20 20 70 4d 65 6d 2d 3e 6e 2b 2b 3b 0a 20 20  .  pMem->n++;.  
36e50 61 73 73 65 72 74 28 20 70 43 74 78 2d 3e 70 4f  assert( pCtx->pO
36e60 75 74 2d 3e 66 6c 61 67 73 3d 3d 4d 45 4d 5f 4e  ut->flags==MEM_N
36e70 75 6c 6c 20 29 3b 0a 20 20 61 73 73 65 72 74 28  ull );.  assert(
36e80 20 70 43 74 78 2d 3e 69 73 45 72 72 6f 72 3d 3d   pCtx->isError==
36e90 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  0 );.  assert( p
36ea0 43 74 78 2d 3e 73 6b 69 70 46 6c 61 67 3d 3d 30  Ctx->skipFlag==0
36eb0 20 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49   );.#ifndef SQLI
36ec0 54 45 5f 4f 4d 49 54 5f 57 49 4e 44 4f 57 46 55  TE_OMIT_WINDOWFU
36ed0 4e 43 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 31  NC.  if( pOp->p1
36ee0 20 29 7b 0a 20 20 20 20 28 70 43 74 78 2d 3e 70   ){.    (pCtx->p
36ef0 46 75 6e 63 2d 3e 78 49 6e 76 65 72 73 65 29 28  Func->xInverse)(
36f00 70 43 74 78 2c 70 43 74 78 2d 3e 61 72 67 63 2c  pCtx,pCtx->argc,
36f10 70 43 74 78 2d 3e 61 72 67 76 29 3b 0a 20 20 7d  pCtx->argv);.  }
36f20 65 6c 73 65 0a 23 65 6e 64 69 66 0a 20 20 28 70  else.#endif.  (p
36f30 43 74 78 2d 3e 70 46 75 6e 63 2d 3e 78 53 46 75  Ctx->pFunc->xSFu
36f40 6e 63 29 28 70 43 74 78 2c 70 43 74 78 2d 3e 61  nc)(pCtx,pCtx->a
36f50 72 67 63 2c 70 43 74 78 2d 3e 61 72 67 76 29 3b  rgc,pCtx->argv);
36f60 20 2f 2a 20 49 4d 50 3a 20 52 2d 32 34 35 30 35   /* IMP: R-24505
36f70 2d 32 33 32 33 30 20 2a 2f 0a 0a 20 20 69 66 28  -23230 */..  if(
36f80 20 70 43 74 78 2d 3e 69 73 45 72 72 6f 72 20 29   pCtx->isError )
36f90 7b 0a 20 20 20 20 69 66 28 20 70 43 74 78 2d 3e  {.    if( pCtx->
36fa0 69 73 45 72 72 6f 72 3e 30 20 29 7b 0a 20 20 20  isError>0 ){.   
36fb0 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 45 72     sqlite3VdbeEr
36fc0 72 6f 72 28 70 2c 20 22 25 73 22 2c 20 73 71 6c  ror(p, "%s", sql
36fd0 69 74 65 33 5f 76 61 6c 75 65 5f 74 65 78 74 28  ite3_value_text(
36fe0 70 43 74 78 2d 3e 70 4f 75 74 29 29 3b 0a 20 20  pCtx->pOut));.  
36ff0 20 20 20 20 72 63 20 3d 20 70 43 74 78 2d 3e 69      rc = pCtx->i
37000 73 45 72 72 6f 72 3b 0a 20 20 20 20 7d 0a 20 20  sError;.    }.  
37010 20 20 69 66 28 20 70 43 74 78 2d 3e 73 6b 69 70    if( pCtx->skip
37020 46 6c 61 67 20 29 7b 0a 20 20 20 20 20 20 61 73  Flag ){.      as
37030 73 65 72 74 28 20 70 4f 70 5b 2d 31 5d 2e 6f 70  sert( pOp[-1].op
37040 63 6f 64 65 3d 3d 4f 50 5f 43 6f 6c 6c 53 65 71  code==OP_CollSeq
37050 20 29 3b 0a 20 20 20 20 20 20 69 20 3d 20 70 4f   );.      i = pO
37060 70 5b 2d 31 5d 2e 70 31 3b 0a 20 20 20 20 20 20  p[-1].p1;.      
37070 69 66 28 20 69 20 29 20 73 71 6c 69 74 65 33 56  if( i ) sqlite3V
37080 64 62 65 4d 65 6d 53 65 74 49 6e 74 36 34 28 26  dbeMemSetInt64(&
37090 61 4d 65 6d 5b 69 5d 2c 20 31 29 3b 0a 20 20 20  aMem[i], 1);.   
370a0 20 20 20 70 43 74 78 2d 3e 73 6b 69 70 46 6c 61     pCtx->skipFla
370b0 67 20 3d 20 30 3b 0a 20 20 20 20 7d 0a 20 20 20  g = 0;.    }.   
370c0 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 52   sqlite3VdbeMemR
370d0 65 6c 65 61 73 65 28 70 43 74 78 2d 3e 70 4f 75  elease(pCtx->pOu
370e0 74 29 3b 0a 20 20 20 20 70 43 74 78 2d 3e 70 4f  t);.    pCtx->pO
370f0 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f  ut->flags = MEM_
37100 4e 75 6c 6c 3b 0a 20 20 20 20 70 43 74 78 2d 3e  Null;.    pCtx->
37110 69 73 45 72 72 6f 72 20 3d 20 30 3b 0a 20 20 20  isError = 0;.   
37120 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61   if( rc ) goto a
37130 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
37140 72 3b 0a 20 20 7d 0a 20 20 61 73 73 65 72 74 28  r;.  }.  assert(
37150 20 70 43 74 78 2d 3e 70 4f 75 74 2d 3e 66 6c 61   pCtx->pOut->fla
37160 67 73 3d 3d 4d 45 4d 5f 4e 75 6c 6c 20 29 3b 0a  gs==MEM_Null );.
37170 20 20 61 73 73 65 72 74 28 20 70 43 74 78 2d 3e    assert( pCtx->
37180 73 6b 69 70 46 6c 61 67 3d 3d 30 20 29 3b 0a 20  skipFlag==0 );. 
37190 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
371a0 63 6f 64 65 3a 20 41 67 67 46 69 6e 61 6c 20 50  code: AggFinal P
371b0 31 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 20 53  1 P2 * P4 *.** S
371c0 79 6e 6f 70 73 69 73 3a 20 61 63 63 75 6d 3d 72  ynopsis: accum=r
371d0 5b 50 31 5d 20 4e 3d 50 32 0a 2a 2a 0a 2a 2a 20  [P1] N=P2.**.** 
371e0 50 31 20 69 73 20 74 68 65 20 6d 65 6d 6f 72 79  P1 is the memory
371f0 20 6c 6f 63 61 74 69 6f 6e 20 74 68 61 74 20 69   location that i
37200 73 20 74 68 65 20 61 63 63 75 6d 75 6c 61 74 6f  s the accumulato
37210 72 20 66 6f 72 20 61 6e 20 61 67 67 72 65 67 61  r for an aggrega
37220 74 65 0a 2a 2a 20 6f 72 20 77 69 6e 64 6f 77 20  te.** or window 
37230 66 75 6e 63 74 69 6f 6e 2e 20 20 45 78 65 63 75  function.  Execu
37240 74 65 20 74 68 65 20 66 69 6e 61 6c 69 7a 65 72  te the finalizer
37250 20 66 75 6e 63 74 69 6f 6e 20 0a 2a 2a 20 66 6f   function .** fo
37260 72 20 61 6e 20 61 67 67 72 65 67 61 74 65 20 61  r an aggregate a
37270 6e 64 20 73 74 6f 72 65 20 74 68 65 20 72 65 73  nd store the res
37280 75 6c 74 20 69 6e 20 50 31 2e 0a 2a 2a 0a 2a 2a  ult in P1..**.**
37290 20 50 32 20 69 73 20 74 68 65 20 6e 75 6d 62 65   P2 is the numbe
372a0 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 74  r of arguments t
372b0 68 61 74 20 74 68 65 20 73 74 65 70 20 66 75 6e  hat the step fun
372c0 63 74 69 6f 6e 20 74 61 6b 65 73 20 61 6e 64 0a  ction takes and.
372d0 2a 2a 20 50 34 20 69 73 20 61 20 70 6f 69 6e 74  ** P4 is a point
372e0 65 72 20 74 6f 20 74 68 65 20 46 75 6e 63 44 65  er to the FuncDe
372f0 66 20 66 6f 72 20 74 68 69 73 20 66 75 6e 63 74  f for this funct
37300 69 6f 6e 2e 20 20 54 68 65 20 50 32 0a 2a 2a 20  ion.  The P2.** 
37310 61 72 67 75 6d 65 6e 74 20 69 73 20 6e 6f 74 20  argument is not 
37320 75 73 65 64 20 62 79 20 74 68 69 73 20 6f 70 63  used by this opc
37330 6f 64 65 2e 20 20 49 74 20 69 73 20 6f 6e 6c 79  ode.  It is only
37340 20 74 68 65 72 65 20 74 6f 20 64 69 73 61 6d 62   there to disamb
37350 69 67 75 61 74 65 0a 2a 2a 20 66 75 6e 63 74 69  iguate.** functi
37360 6f 6e 73 20 74 68 61 74 20 63 61 6e 20 74 61 6b  ons that can tak
37370 65 20 76 61 72 79 69 6e 67 20 6e 75 6d 62 65 72  e varying number
37380 73 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 2e 20  s of arguments. 
37390 20 54 68 65 0a 2a 2a 20 50 34 20 61 72 67 75 6d   The.** P4 argum
373a0 65 6e 74 20 69 73 20 6f 6e 6c 79 20 6e 65 65 64  ent is only need
373b0 65 64 20 66 6f 72 20 74 68 65 20 63 61 73 65 20  ed for the case 
373c0 77 68 65 72 65 0a 2a 2a 20 74 68 65 20 73 74 65  where.** the ste
373d0 70 20 66 75 6e 63 74 69 6f 6e 20 77 61 73 20 6e  p function was n
373e0 6f 74 20 70 72 65 76 69 6f 75 73 6c 79 20 63 61  ot previously ca
373f0 6c 6c 65 64 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f  lled..*/./* Opco
37400 64 65 3a 20 41 67 67 56 61 6c 75 65 20 2a 20 50  de: AggValue * P
37410 32 20 50 33 20 50 34 20 2a 0a 2a 2a 20 53 79 6e  2 P3 P4 *.** Syn
37420 6f 70 73 69 73 3a 20 72 5b 50 33 5d 3d 76 61 6c  opsis: r[P3]=val
37430 75 65 20 4e 3d 50 32 0a 2a 2a 0a 2a 2a 20 49 6e  ue N=P2.**.** In
37440 76 6f 6b 65 20 74 68 65 20 78 56 61 6c 75 65 28  voke the xValue(
37450 29 20 66 75 6e 63 74 69 6f 6e 20 61 6e 64 20 73  ) function and s
37460 74 6f 72 65 20 74 68 65 20 72 65 73 75 6c 74 20  tore the result 
37470 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a  in register P3..
37480 2a 2a 0a 2a 2a 20 50 32 20 69 73 20 74 68 65 20  **.** P2 is the 
37490 6e 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65  number of argume
374a0 6e 74 73 20 74 68 61 74 20 74 68 65 20 73 74 65  nts that the ste
374b0 70 20 66 75 6e 63 74 69 6f 6e 20 74 61 6b 65 73  p function takes
374c0 20 61 6e 64 0a 2a 2a 20 50 34 20 69 73 20 61 20   and.** P4 is a 
374d0 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20 46  pointer to the F
374e0 75 6e 63 44 65 66 20 66 6f 72 20 74 68 69 73 20  uncDef for this 
374f0 66 75 6e 63 74 69 6f 6e 2e 20 20 54 68 65 20 50  function.  The P
37500 32 0a 2a 2a 20 61 72 67 75 6d 65 6e 74 20 69 73  2.** argument is
37510 20 6e 6f 74 20 75 73 65 64 20 62 79 20 74 68 69   not used by thi
37520 73 20 6f 70 63 6f 64 65 2e 20 20 49 74 20 69 73  s opcode.  It is
37530 20 6f 6e 6c 79 20 74 68 65 72 65 20 74 6f 20 64   only there to d
37540 69 73 61 6d 62 69 67 75 61 74 65 0a 2a 2a 20 66  isambiguate.** f
37550 75 6e 63 74 69 6f 6e 73 20 74 68 61 74 20 63 61  unctions that ca
37560 6e 20 74 61 6b 65 20 76 61 72 79 69 6e 67 20 6e  n take varying n
37570 75 6d 62 65 72 73 20 6f 66 20 61 72 67 75 6d 65  umbers of argume
37580 6e 74 73 2e 20 20 54 68 65 0a 2a 2a 20 50 34 20  nts.  The.** P4 
37590 61 72 67 75 6d 65 6e 74 20 69 73 20 6f 6e 6c 79  argument is only
375a0 20 6e 65 65 64 65 64 20 66 6f 72 20 74 68 65 20   needed for the 
375b0 63 61 73 65 20 77 68 65 72 65 0a 2a 2a 20 74 68  case where.** th
375c0 65 20 73 74 65 70 20 66 75 6e 63 74 69 6f 6e 20  e step function 
375d0 77 61 73 20 6e 6f 74 20 70 72 65 76 69 6f 75 73  was not previous
375e0 6c 79 20 63 61 6c 6c 65 64 2e 0a 2a 2f 0a 63 61  ly called..*/.ca
375f0 73 65 20 4f 50 5f 41 67 67 56 61 6c 75 65 3a 0a  se OP_AggValue:.
37600 63 61 73 65 20 4f 50 5f 41 67 67 46 69 6e 61 6c  case OP_AggFinal
37610 3a 20 7b 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d 3b  : {.  Mem *pMem;
37620 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
37630 70 31 3e 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c  p1>0 && pOp->p1<
37640 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d  =(p->nMem+1 - p-
37650 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 61  >nCursor) );.  a
37660 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3d 3d  ssert( pOp->p3==
37670 30 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65  0 || pOp->opcode
37680 3d 3d 4f 50 5f 41 67 67 56 61 6c 75 65 20 29 3b  ==OP_AggValue );
37690 0a 20 20 70 4d 65 6d 20 3d 20 26 61 4d 65 6d 5b  .  pMem = &aMem[
376a0 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65  pOp->p1];.  asse
376b0 72 74 28 20 28 70 4d 65 6d 2d 3e 66 6c 61 67 73  rt( (pMem->flags
376c0 20 26 20 7e 28 4d 45 4d 5f 4e 75 6c 6c 7c 4d 45   & ~(MEM_Null|ME
376d0 4d 5f 41 67 67 29 29 3d 3d 30 20 29 3b 0a 23 69  M_Agg))==0 );.#i
376e0 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
376f0 54 5f 57 49 4e 44 4f 57 46 55 4e 43 0a 20 20 69  T_WINDOWFUNC.  i
37700 66 28 20 70 4f 70 2d 3e 70 33 20 29 7b 0a 20 20  f( pOp->p3 ){.  
37710 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e    memAboutToChan
37720 67 65 28 70 2c 20 26 61 4d 65 6d 5b 70 4f 70 2d  ge(p, &aMem[pOp-
37730 3e 70 33 5d 29 3b 0a 20 20 20 20 72 63 20 3d 20  >p3]);.    rc = 
37740 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 41 67  sqlite3VdbeMemAg
37750 67 56 61 6c 75 65 28 70 4d 65 6d 2c 20 26 61 4d  gValue(pMem, &aM
37760 65 6d 5b 70 4f 70 2d 3e 70 33 5d 2c 20 70 4f 70  em[pOp->p3], pOp
37770 2d 3e 70 34 2e 70 46 75 6e 63 29 3b 0a 20 20 20  ->p4.pFunc);.   
37780 20 70 4d 65 6d 20 3d 20 26 61 4d 65 6d 5b 70 4f   pMem = &aMem[pO
37790 70 2d 3e 70 33 5d 3b 0a 20 20 7d 65 6c 73 65 0a  p->p3];.  }else.
377a0 23 65 6e 64 69 66 0a 20 20 7b 0a 20 20 20 20 72  #endif.  {.    r
377b0 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 4d  c = sqlite3VdbeM
377c0 65 6d 46 69 6e 61 6c 69 7a 65 28 70 4d 65 6d 2c  emFinalize(pMem,
377d0 20 70 4f 70 2d 3e 70 34 2e 70 46 75 6e 63 29 3b   pOp->p4.pFunc);
377e0 0a 20 20 7d 0a 20 20 0a 20 20 69 66 28 20 72 63  .  }.  .  if( rc
377f0 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56   ){.    sqlite3V
37800 64 62 65 45 72 72 6f 72 28 70 2c 20 22 25 73 22  dbeError(p, "%s"
37810 2c 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f  , sqlite3_value_
37820 74 65 78 74 28 70 4d 65 6d 29 29 3b 0a 20 20 20  text(pMem));.   
37830 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
37840 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 7d 0a 20 20  to_error;.  }.  
37850 73 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67  sqlite3VdbeChang
37860 65 45 6e 63 6f 64 69 6e 67 28 70 4d 65 6d 2c 20  eEncoding(pMem, 
37870 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 55 50 44  encoding);.  UPD
37880 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45  ATE_MAX_BLOBSIZE
37890 28 70 4d 65 6d 29 3b 0a 20 20 69 66 28 20 73 71  (pMem);.  if( sq
378a0 6c 69 74 65 33 56 64 62 65 4d 65 6d 54 6f 6f 42  lite3VdbeMemTooB
378b0 69 67 28 70 4d 65 6d 29 20 29 7b 0a 20 20 20 20  ig(pMem) ){.    
378c0 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20  goto too_big;.  
378d0 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 23 69  }.  break;.}..#i
378e0 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
378f0 54 5f 57 41 4c 0a 2f 2a 20 4f 70 63 6f 64 65 3a  T_WAL./* Opcode:
37900 20 43 68 65 63 6b 70 6f 69 6e 74 20 50 31 20 50   Checkpoint P1 P
37910 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 43  2 P3 * *.**.** C
37920 68 65 63 6b 70 6f 69 6e 74 20 64 61 74 61 62 61  heckpoint databa
37930 73 65 20 50 31 2e 20 54 68 69 73 20 69 73 20 61  se P1. This is a
37940 20 6e 6f 2d 6f 70 20 69 66 20 50 31 20 69 73 20   no-op if P1 is 
37950 6e 6f 74 20 63 75 72 72 65 6e 74 6c 79 20 69 6e  not currently in
37960 0a 2a 2a 20 57 41 4c 20 6d 6f 64 65 2e 20 50 61  .** WAL mode. Pa
37970 72 61 6d 65 74 65 72 20 50 32 20 69 73 20 6f 6e  rameter P2 is on
37980 65 20 6f 66 20 53 51 4c 49 54 45 5f 43 48 45 43  e of SQLITE_CHEC
37990 4b 50 4f 49 4e 54 5f 50 41 53 53 49 56 45 2c 20  KPOINT_PASSIVE, 
379a0 46 55 4c 4c 2c 0a 2a 2a 20 52 45 53 54 41 52 54  FULL,.** RESTART
379b0 2c 20 6f 72 20 54 52 55 4e 43 41 54 45 2e 20 20  , or TRUNCATE.  
379c0 57 72 69 74 65 20 31 20 6f 72 20 30 20 69 6e 74  Write 1 or 0 int
379d0 6f 20 6d 65 6d 5b 50 33 5d 20 69 66 20 74 68 65  o mem[P3] if the
379e0 20 63 68 65 63 6b 70 6f 69 6e 74 20 72 65 74 75   checkpoint retu
379f0 72 6e 73 0a 2a 2a 20 53 51 4c 49 54 45 5f 42 55  rns.** SQLITE_BU
37a00 53 59 20 6f 72 20 6e 6f 74 2c 20 72 65 73 70 65  SY or not, respe
37a10 63 74 69 76 65 6c 79 2e 20 20 57 72 69 74 65 20  ctively.  Write 
37a20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 70 61  the number of pa
37a30 67 65 73 20 69 6e 20 74 68 65 0a 2a 2a 20 57 41  ges in the.** WA
37a40 4c 20 61 66 74 65 72 20 74 68 65 20 63 68 65 63  L after the chec
37a50 6b 70 6f 69 6e 74 20 69 6e 74 6f 20 6d 65 6d 5b  kpoint into mem[
37a60 50 33 2b 31 5d 20 61 6e 64 20 74 68 65 20 6e 75  P3+1] and the nu
37a70 6d 62 65 72 20 6f 66 20 70 61 67 65 73 0a 2a 2a  mber of pages.**
37a80 20 69 6e 20 74 68 65 20 57 41 4c 20 74 68 61 74   in the WAL that
37a90 20 68 61 76 65 20 62 65 65 6e 20 63 68 65 63 6b   have been check
37aa0 70 6f 69 6e 74 65 64 20 61 66 74 65 72 20 74 68  pointed after th
37ab0 65 20 63 68 65 63 6b 70 6f 69 6e 74 0a 2a 2a 20  e checkpoint.** 
37ac0 63 6f 6d 70 6c 65 74 65 73 20 69 6e 74 6f 20 6d  completes into m
37ad0 65 6d 5b 50 33 2b 32 5d 2e 20 20 48 6f 77 65 76  em[P3+2].  Howev
37ae0 65 72 20 6f 6e 20 61 6e 20 65 72 72 6f 72 2c 20  er on an error, 
37af0 6d 65 6d 5b 50 33 2b 31 5d 20 61 6e 64 0a 2a 2a  mem[P3+1] and.**
37b00 20 6d 65 6d 5b 50 33 2b 32 5d 20 61 72 65 20 69   mem[P3+2] are i
37b10 6e 69 74 69 61 6c 69 7a 65 64 20 74 6f 20 2d 31  nitialized to -1
37b20 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 68 65  ..*/.case OP_Che
37b30 63 6b 70 6f 69 6e 74 3a 20 7b 0a 20 20 69 6e 74  ckpoint: {.  int
37b40 20 69 3b 20 20 20 20 20 20 20 20 20 20 20 20 20   i;             
37b50 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
37b60 4c 6f 6f 70 20 63 6f 75 6e 74 65 72 20 2a 2f 0a  Loop counter */.
37b70 20 20 69 6e 74 20 61 52 65 73 5b 33 5d 3b 20 20    int aRes[3];  
37b80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37b90 20 20 2f 2a 20 52 65 73 75 6c 74 73 20 2a 2f 0a    /* Results */.
37ba0 20 20 4d 65 6d 20 2a 70 4d 65 6d 3b 20 20 20 20    Mem *pMem;    
37bb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37bc0 20 20 2f 2a 20 57 72 69 74 65 20 72 65 73 75 6c    /* Write resul
37bd0 74 73 20 68 65 72 65 20 2a 2f 0a 0a 20 20 61 73  ts here */..  as
37be0 73 65 72 74 28 20 70 2d 3e 72 65 61 64 4f 6e 6c  sert( p->readOnl
37bf0 79 3d 3d 30 20 29 3b 0a 20 20 61 52 65 73 5b 30  y==0 );.  aRes[0
37c00 5d 20 3d 20 30 3b 0a 20 20 61 52 65 73 5b 31 5d  ] = 0;.  aRes[1]
37c10 20 3d 20 61 52 65 73 5b 32 5d 20 3d 20 2d 31 3b   = aRes[2] = -1;
37c20 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
37c30 70 32 3d 3d 53 51 4c 49 54 45 5f 43 48 45 43 4b  p2==SQLITE_CHECK
37c40 50 4f 49 4e 54 5f 50 41 53 53 49 56 45 0a 20 20  POINT_PASSIVE.  
37c50 20 20 20 20 20 7c 7c 20 70 4f 70 2d 3e 70 32 3d       || pOp->p2=
37c60 3d 53 51 4c 49 54 45 5f 43 48 45 43 4b 50 4f 49  =SQLITE_CHECKPOI
37c70 4e 54 5f 46 55 4c 4c 0a 20 20 20 20 20 20 20 7c  NT_FULL.       |
37c80 7c 20 70 4f 70 2d 3e 70 32 3d 3d 53 51 4c 49 54  | pOp->p2==SQLIT
37c90 45 5f 43 48 45 43 4b 50 4f 49 4e 54 5f 52 45 53  E_CHECKPOINT_RES
37ca0 54 41 52 54 0a 20 20 20 20 20 20 20 7c 7c 20 70  TART.       || p
37cb0 4f 70 2d 3e 70 32 3d 3d 53 51 4c 49 54 45 5f 43  Op->p2==SQLITE_C
37cc0 48 45 43 4b 50 4f 49 4e 54 5f 54 52 55 4e 43 41  HECKPOINT_TRUNCA
37cd0 54 45 0a 20 20 29 3b 0a 20 20 72 63 20 3d 20 73  TE.  );.  rc = s
37ce0 71 6c 69 74 65 33 43 68 65 63 6b 70 6f 69 6e 74  qlite3Checkpoint
37cf0 28 64 62 2c 20 70 4f 70 2d 3e 70 31 2c 20 70 4f  (db, pOp->p1, pO
37d00 70 2d 3e 70 32 2c 20 26 61 52 65 73 5b 31 5d 2c  p->p2, &aRes[1],
37d10 20 26 61 52 65 73 5b 32 5d 29 3b 0a 20 20 69 66   &aRes[2]);.  if
37d20 28 20 72 63 20 29 7b 0a 20 20 20 20 69 66 28 20  ( rc ){.    if( 
37d30 72 63 21 3d 53 51 4c 49 54 45 5f 42 55 53 59 20  rc!=SQLITE_BUSY 
37d40 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65  ) goto abort_due
37d50 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 72  _to_error;.    r
37d60 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20  c = SQLITE_OK;. 
37d70 20 20 20 61 52 65 73 5b 30 5d 20 3d 20 31 3b 0a     aRes[0] = 1;.
37d80 20 20 7d 0a 20 20 66 6f 72 28 69 3d 30 2c 20 70    }.  for(i=0, p
37d90 4d 65 6d 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  Mem = &aMem[pOp-
37da0 3e 70 33 5d 3b 20 69 3c 33 3b 20 69 2b 2b 2c 20  >p3]; i<3; i++, 
37db0 70 4d 65 6d 2b 2b 29 7b 0a 20 20 20 20 73 71 6c  pMem++){.    sql
37dc0 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 49 6e  ite3VdbeMemSetIn
37dd0 74 36 34 28 70 4d 65 6d 2c 20 28 69 36 34 29 61  t64(pMem, (i64)a
37de0 52 65 73 5b 69 5d 29 3b 0a 20 20 7d 20 20 20 20  Res[i]);.  }    
37df0 0a 20 20 62 72 65 61 6b 3b 0a 7d 3b 20 20 0a 23  .  break;.};  .#
37e00 65 6e 64 69 66 0a 0a 23 69 66 6e 64 65 66 20 53  endif..#ifndef S
37e10 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 52 41 47 4d  QLITE_OMIT_PRAGM
37e20 41 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4a 6f 75  A./* Opcode: Jou
37e30 72 6e 61 6c 4d 6f 64 65 20 50 31 20 50 32 20 50  rnalMode P1 P2 P
37e40 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 43 68 61 6e  3 * *.**.** Chan
37e50 67 65 20 74 68 65 20 6a 6f 75 72 6e 61 6c 20 6d  ge the journal m
37e60 6f 64 65 20 6f 66 20 64 61 74 61 62 61 73 65 20  ode of database 
37e70 50 31 20 74 6f 20 50 33 2e 20 50 33 20 6d 75 73  P1 to P3. P3 mus
37e80 74 20 62 65 20 6f 6e 65 20 6f 66 20 74 68 65 0a  t be one of the.
37e90 2a 2a 20 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c  ** PAGER_JOURNAL
37ea0 4d 4f 44 45 5f 58 58 58 20 76 61 6c 75 65 73 2e  MODE_XXX values.
37eb0 20 49 66 20 63 68 61 6e 67 69 6e 67 20 62 65 74   If changing bet
37ec0 77 65 65 6e 20 74 68 65 20 76 61 72 69 6f 75 73  ween the various
37ed0 20 72 6f 6c 6c 62 61 63 6b 0a 2a 2a 20 6d 6f 64   rollback.** mod
37ee0 65 73 20 28 64 65 6c 65 74 65 2c 20 74 72 75 6e  es (delete, trun
37ef0 63 61 74 65 2c 20 70 65 72 73 69 73 74 2c 20 6f  cate, persist, o
37f00 66 66 20 61 6e 64 20 6d 65 6d 6f 72 79 29 2c 20  ff and memory), 
37f10 74 68 69 73 20 69 73 20 61 20 73 69 6d 70 6c 65  this is a simple
37f20 0a 2a 2a 20 6f 70 65 72 61 74 69 6f 6e 2e 20 4e  .** operation. N
37f30 6f 20 49 4f 20 69 73 20 72 65 71 75 69 72 65 64  o IO is required
37f40 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 63 68 61 6e 67  ..**.** If chang
37f50 69 6e 67 20 69 6e 74 6f 20 6f 72 20 6f 75 74 20  ing into or out 
37f60 6f 66 20 57 41 4c 20 6d 6f 64 65 20 74 68 65 20  of WAL mode the 
37f70 70 72 6f 63 65 64 75 72 65 20 69 73 20 6d 6f 72  procedure is mor
37f80 65 20 63 6f 6d 70 6c 69 63 61 74 65 64 2e 0a 2a  e complicated..*
37f90 2a 0a 2a 2a 20 57 72 69 74 65 20 61 20 73 74 72  *.** Write a str
37fa0 69 6e 67 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74  ing containing t
37fb0 68 65 20 66 69 6e 61 6c 20 6a 6f 75 72 6e 61 6c  he final journal
37fc0 2d 6d 6f 64 65 20 74 6f 20 72 65 67 69 73 74 65  -mode to registe
37fd0 72 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  r P2..*/.case OP
37fe0 5f 4a 6f 75 72 6e 61 6c 4d 6f 64 65 3a 20 7b 20  _JournalMode: { 
37ff0 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20 20     /* out2 */.  
38000 42 74 72 65 65 20 2a 70 42 74 3b 20 20 20 20 20  Btree *pBt;     
38010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38020 2f 2a 20 42 74 72 65 65 20 74 6f 20 63 68 61 6e  /* Btree to chan
38030 67 65 20 6a 6f 75 72 6e 61 6c 20 6d 6f 64 65 20  ge journal mode 
38040 6f 66 20 2a 2f 0a 20 20 50 61 67 65 72 20 2a 70  of */.  Pager *p
38050 50 61 67 65 72 3b 20 20 20 20 20 20 20 20 20 20  Pager;          
38060 20 20 20 20 20 20 20 20 2f 2a 20 50 61 67 65 72          /* Pager
38070 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68   associated with
38080 20 70 42 74 20 2a 2f 0a 20 20 69 6e 74 20 65 4e   pBt */.  int eN
38090 65 77 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ew;             
380a0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 65 77            /* New
380b0 20 6a 6f 75 72 6e 61 6c 20 6d 6f 64 65 20 2a 2f   journal mode */
380c0 0a 20 20 69 6e 74 20 65 4f 6c 64 3b 20 20 20 20  .  int eOld;    
380d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
380e0 20 20 20 2f 2a 20 54 68 65 20 6f 6c 64 20 6a 6f     /* The old jo
380f0 75 72 6e 61 6c 20 6d 6f 64 65 20 2a 2f 0a 23 69  urnal mode */.#i
38100 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
38110 54 5f 57 41 4c 0a 20 20 63 6f 6e 73 74 20 63 68  T_WAL.  const ch
38120 61 72 20 2a 7a 46 69 6c 65 6e 61 6d 65 3b 20 20  ar *zFilename;  
38130 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20          /* Name 
38140 6f 66 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  of database file
38150 20 66 6f 72 20 70 50 61 67 65 72 20 2a 2f 0a 23   for pPager */.#
38160 65 6e 64 69 66 0a 0a 20 20 70 4f 75 74 20 3d 20  endif..  pOut = 
38170 6f 75 74 32 50 72 65 72 65 6c 65 61 73 65 28 70  out2Prerelease(p
38180 2c 20 70 4f 70 29 3b 0a 20 20 65 4e 65 77 20 3d  , pOp);.  eNew =
38190 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 61 73 73 65   pOp->p3;.  asse
381a0 72 74 28 20 65 4e 65 77 3d 3d 50 41 47 45 52 5f  rt( eNew==PAGER_
381b0 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 44 45 4c 45  JOURNALMODE_DELE
381c0 54 45 20 0a 20 20 20 20 20 20 20 7c 7c 20 65 4e  TE .       || eN
381d0 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41  ew==PAGER_JOURNA
381e0 4c 4d 4f 44 45 5f 54 52 55 4e 43 41 54 45 20 0a  LMODE_TRUNCATE .
381f0 20 20 20 20 20 20 20 7c 7c 20 65 4e 65 77 3d 3d         || eNew==
38200 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44  PAGER_JOURNALMOD
38210 45 5f 50 45 52 53 49 53 54 20 0a 20 20 20 20 20  E_PERSIST .     
38220 20 20 7c 7c 20 65 4e 65 77 3d 3d 50 41 47 45 52    || eNew==PAGER
38230 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 4f 46 46  _JOURNALMODE_OFF
38240 0a 20 20 20 20 20 20 20 7c 7c 20 65 4e 65 77 3d  .       || eNew=
38250 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f  =PAGER_JOURNALMO
38260 44 45 5f 4d 45 4d 4f 52 59 0a 20 20 20 20 20 20  DE_MEMORY.      
38270 20 7c 7c 20 65 4e 65 77 3d 3d 50 41 47 45 52 5f   || eNew==PAGER_
38280 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 57 41 4c 0a  JOURNALMODE_WAL.
38290 20 20 20 20 20 20 20 7c 7c 20 65 4e 65 77 3d 3d         || eNew==
382a0 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44  PAGER_JOURNALMOD
382b0 45 5f 51 55 45 52 59 0a 20 20 29 3b 0a 20 20 61  E_QUERY.  );.  a
382c0 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d  ssert( pOp->p1>=
382d0 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 64 62 2d  0 && pOp->p1<db-
382e0 3e 6e 44 62 20 29 3b 0a 20 20 6