/ Hex Artifact Content
Login

Artifact 1e83f44813acafd9e0da81861773261431e673246233b8e6775c24c437ffa513:


0000: 2f 2a 0a 2a 2a 20 32 30 30 31 20 53 65 70 74 65  /*.** 2001 Septe
0010: 6d 62 65 72 20 31 35 0a 2a 2a 0a 2a 2a 20 54 68  mber 15.**.** Th
0020: 65 20 61 75 74 68 6f 72 20 64 69 73 63 6c 61 69  e author disclai
0030: 6d 73 20 63 6f 70 79 72 69 67 68 74 20 74 6f 20  ms copyright to 
0040: 74 68 69 73 20 73 6f 75 72 63 65 20 63 6f 64 65  this source code
0050: 2e 20 20 49 6e 20 70 6c 61 63 65 20 6f 66 0a 2a  .  In place of.*
0060: 2a 20 61 20 6c 65 67 61 6c 20 6e 6f 74 69 63 65  * a legal notice
0070: 2c 20 68 65 72 65 20 69 73 20 61 20 62 6c 65 73  , here is a bles
0080: 73 69 6e 67 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 4d  sing:.**.**    M
0090: 61 79 20 79 6f 75 20 64 6f 20 67 6f 6f 64 20 61  ay you do good a
00a0: 6e 64 20 6e 6f 74 20 65 76 69 6c 2e 0a 2a 2a 20  nd not evil..** 
00b0: 20 20 20 4d 61 79 20 79 6f 75 20 66 69 6e 64 20     May you find 
00c0: 66 6f 72 67 69 76 65 6e 65 73 73 20 66 6f 72 20  forgiveness for 
00d0: 79 6f 75 72 73 65 6c 66 20 61 6e 64 20 66 6f 72  yourself and for
00e0: 67 69 76 65 20 6f 74 68 65 72 73 2e 0a 2a 2a 20  give others..** 
00f0: 20 20 20 4d 61 79 20 79 6f 75 20 73 68 61 72 65     May you share
0100: 20 66 72 65 65 6c 79 2c 20 6e 65 76 65 72 20 74   freely, never t
0110: 61 6b 69 6e 67 20 6d 6f 72 65 20 74 68 61 6e 20  aking more than 
0120: 79 6f 75 20 67 69 76 65 2e 0a 2a 2a 0a 2a 2a 2a  you give..**.***
0130: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0140: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0150: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0160: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0170: 2a 2a 2a 2a 2a 2a 0a 2a 2a 20 54 68 65 20 63 6f  ******.** The co
0180: 64 65 20 69 6e 20 74 68 69 73 20 66 69 6c 65 20  de in this file 
0190: 69 6d 70 6c 65 6d 65 6e 74 73 20 74 68 65 20 66  implements the f
01a0: 75 6e 63 74 69 6f 6e 20 74 68 61 74 20 72 75 6e  unction that run
01b0: 73 20 74 68 65 0a 2a 2a 20 62 79 74 65 63 6f 64  s the.** bytecod
01c0: 65 20 6f 66 20 61 20 70 72 65 70 61 72 65 64 20  e of a prepared 
01d0: 73 74 61 74 65 6d 65 6e 74 2e 0a 2a 2a 0a 2a 2a  statement..**.**
01e0: 20 56 61 72 69 6f 75 73 20 73 63 72 69 70 74 73   Various scripts
01f0: 20 73 63 61 6e 20 74 68 69 73 20 73 6f 75 72 63   scan this sourc
0200: 65 20 66 69 6c 65 20 69 6e 20 6f 72 64 65 72 20  e file in order 
0210: 74 6f 20 67 65 6e 65 72 61 74 65 20 48 54 4d 4c  to generate HTML
0220: 0a 2a 2a 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f  .** documentatio
0230: 6e 2c 20 68 65 61 64 65 72 73 20 66 69 6c 65 73  n, headers files
0240: 2c 20 6f 72 20 6f 74 68 65 72 20 64 65 72 69 76  , or other deriv
0250: 65 64 20 66 69 6c 65 73 2e 20 20 54 68 65 20 66  ed files.  The f
0260: 6f 72 6d 61 74 74 69 6e 67 0a 2a 2a 20 6f 66 20  ormatting.** of 
0270: 74 68 65 20 63 6f 64 65 20 69 6e 20 74 68 69 73  the code in this
0280: 20 66 69 6c 65 20 69 73 2c 20 74 68 65 72 65 66   file is, theref
0290: 6f 72 65 2c 20 69 6d 70 6f 72 74 61 6e 74 2e 20  ore, important. 
02a0: 20 53 65 65 20 6f 74 68 65 72 20 63 6f 6d 6d 65   See other comme
02b0: 6e 74 73 0a 2a 2a 20 69 6e 20 74 68 69 73 20 66  nts.** in this f
02c0: 69 6c 65 20 66 6f 72 20 64 65 74 61 69 6c 73 2e  ile for details.
02d0: 20 20 49 66 20 69 6e 20 64 6f 75 62 74 2c 20 64    If in doubt, d
02e0: 6f 20 6e 6f 74 20 64 65 76 69 61 74 65 20 66 72  o not deviate fr
02f0: 6f 6d 20 65 78 69 73 74 69 6e 67 0a 2a 2a 20 63  om existing.** c
0300: 6f 6d 6d 65 6e 74 69 6e 67 20 61 6e 64 20 69 6e  ommenting and in
0310: 64 65 6e 74 61 74 69 6f 6e 20 70 72 61 63 74 69  dentation practi
0320: 63 65 73 20 77 68 65 6e 20 63 68 61 6e 67 69 6e  ces when changin
0330: 67 20 6f 72 20 61 64 64 69 6e 67 20 63 6f 64 65  g or adding code
0340: 2e 0a 2a 2f 0a 23 69 6e 63 6c 75 64 65 20 22 73  ..*/.#include "s
0350: 71 6c 69 74 65 49 6e 74 2e 68 22 0a 23 69 6e 63  qliteInt.h".#inc
0360: 6c 75 64 65 20 22 76 64 62 65 49 6e 74 2e 68 22  lude "vdbeInt.h"
0370: 0a 0a 2f 2a 0a 2a 2a 20 49 6e 76 6f 6b 65 20 74  ../*.** Invoke t
0380: 68 69 73 20 6d 61 63 72 6f 20 6f 6e 20 6d 65 6d  his macro on mem
0390: 6f 72 79 20 63 65 6c 6c 73 20 6a 75 73 74 20 70  ory cells just p
03a0: 72 69 6f 72 20 74 6f 20 63 68 61 6e 67 69 6e 67  rior to changing
03b0: 20 74 68 65 0a 2a 2a 20 76 61 6c 75 65 20 6f 66   the.** value of
03c0: 20 74 68 65 20 63 65 6c 6c 2e 20 20 54 68 69 73   the cell.  This
03d0: 20 6d 61 63 72 6f 20 76 65 72 69 66 69 65 73 20   macro verifies 
03e0: 74 68 61 74 20 73 68 61 6c 6c 6f 77 20 63 6f 70  that shallow cop
03f0: 69 65 73 20 61 72 65 0a 2a 2a 20 6e 6f 74 20 6d  ies are.** not m
0400: 69 73 75 73 65 64 2e 20 20 41 20 73 68 61 6c 6c  isused.  A shall
0410: 6f 77 20 63 6f 70 79 20 6f 66 20 61 20 73 74 72  ow copy of a str
0420: 69 6e 67 20 6f 72 20 62 6c 6f 62 20 6a 75 73 74  ing or blob just
0430: 20 63 6f 70 69 65 73 20 61 0a 2a 2a 20 70 6f 69   copies a.** poi
0440: 6e 74 65 72 20 74 6f 20 74 68 65 20 73 74 72 69  nter to the stri
0450: 6e 67 20 6f 72 20 62 6c 6f 62 2c 20 6e 6f 74 20  ng or blob, not 
0460: 74 68 65 20 63 6f 6e 74 65 6e 74 2e 20 20 49 66  the content.  If
0470: 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 0a 2a 2a   the original.**
0480: 20 69 73 20 63 68 61 6e 67 65 64 20 77 68 69 6c   is changed whil
0490: 65 20 74 68 65 20 63 6f 70 79 20 69 73 20 73 74  e the copy is st
04a0: 69 6c 6c 20 69 6e 20 75 73 65 2c 20 74 68 65 20  ill in use, the 
04b0: 73 74 72 69 6e 67 20 6f 72 20 62 6c 6f 62 20 6d  string or blob m
04c0: 69 67 68 74 0a 2a 2a 20 62 65 20 63 68 61 6e 67  ight.** be chang
04d0: 65 64 20 6f 75 74 20 66 72 6f 6d 20 75 6e 64 65  ed out from unde
04e0: 72 20 74 68 65 20 63 6f 70 79 2e 20 20 54 68 69  r the copy.  Thi
04f0: 73 20 6d 61 63 72 6f 20 76 65 72 69 66 69 65 73  s macro verifies
0500: 20 74 68 61 74 20 6e 6f 74 68 69 6e 67 0a 2a 2a   that nothing.**
0510: 20 6c 69 6b 65 20 74 68 61 74 20 65 76 65 72 20   like that ever 
0520: 68 61 70 70 65 6e 73 2e 0a 2a 2f 0a 23 69 66 64  happens..*/.#ifd
0530: 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a  ef SQLITE_DEBUG.
0540: 23 20 64 65 66 69 6e 65 20 6d 65 6d 41 62 6f 75  # define memAbou
0550: 74 54 6f 43 68 61 6e 67 65 28 50 2c 4d 29 20 73  tToChange(P,M) s
0560: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 41 62 6f  qlite3VdbeMemAbo
0570: 75 74 54 6f 43 68 61 6e 67 65 28 50 2c 4d 29 0a  utToChange(P,M).
0580: 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 6d  #else.# define m
0590: 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28  emAboutToChange(
05a0: 50 2c 4d 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  P,M).#endif../*.
05b0: 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  ** The following
05c0: 20 67 6c 6f 62 61 6c 20 76 61 72 69 61 62 6c 65   global variable
05d0: 20 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 20   is incremented 
05e0: 65 76 65 72 79 20 74 69 6d 65 20 61 20 63 75 72  every time a cur
05f0: 73 6f 72 0a 2a 2a 20 6d 6f 76 65 73 2c 20 65 69  sor.** moves, ei
0600: 74 68 65 72 20 62 79 20 74 68 65 20 4f 50 5f 53  ther by the OP_S
0610: 65 65 6b 58 58 2c 20 4f 50 5f 4e 65 78 74 2c 20  eekXX, OP_Next, 
0620: 6f 72 20 4f 50 5f 50 72 65 76 20 6f 70 63 6f 64  or OP_Prev opcod
0630: 65 73 2e 20 20 54 68 65 20 74 65 73 74 0a 2a 2a  es.  The test.**
0640: 20 70 72 6f 63 65 64 75 72 65 73 20 75 73 65 20   procedures use 
0650: 74 68 69 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  this information
0660: 20 74 6f 20 6d 61 6b 65 20 73 75 72 65 20 74 68   to make sure th
0670: 61 74 20 69 6e 64 69 63 65 73 20 61 72 65 0a 2a  at indices are.*
0680: 2a 20 77 6f 72 6b 69 6e 67 20 63 6f 72 72 65 63  * working correc
0690: 74 6c 79 2e 20 20 54 68 69 73 20 76 61 72 69 61  tly.  This varia
06a0: 62 6c 65 20 68 61 73 20 6e 6f 20 66 75 6e 63 74  ble has no funct
06b0: 69 6f 6e 20 6f 74 68 65 72 20 74 68 61 6e 20 74  ion other than t
06c0: 6f 0a 2a 2a 20 68 65 6c 70 20 76 65 72 69 66 79  o.** help verify
06d0: 20 74 68 65 20 63 6f 72 72 65 63 74 20 6f 70 65   the correct ope
06e0: 72 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 6c 69  ration of the li
06f0: 62 72 61 72 79 2e 0a 2a 2f 0a 23 69 66 64 65 66  brary..*/.#ifdef
0700: 20 53 51 4c 49 54 45 5f 54 45 53 54 0a 69 6e 74   SQLITE_TEST.int
0710: 20 73 71 6c 69 74 65 33 5f 73 65 61 72 63 68 5f   sqlite3_search_
0720: 63 6f 75 6e 74 20 3d 20 30 3b 0a 23 65 6e 64 69  count = 0;.#endi
0730: 66 0a 0a 2f 2a 0a 2a 2a 20 57 68 65 6e 20 74 68  f../*.** When th
0740: 69 73 20 67 6c 6f 62 61 6c 20 76 61 72 69 61 62  is global variab
0750: 6c 65 20 69 73 20 70 6f 73 69 74 69 76 65 2c 20  le is positive, 
0760: 69 74 20 67 65 74 73 20 64 65 63 72 65 6d 65 6e  it gets decremen
0770: 74 65 64 20 6f 6e 63 65 20 62 65 66 6f 72 65 0a  ted once before.
0780: 2a 2a 20 65 61 63 68 20 69 6e 73 74 72 75 63 74  ** each instruct
0790: 69 6f 6e 20 69 6e 20 74 68 65 20 56 44 42 45 2e  ion in the VDBE.
07a0: 20 20 57 68 65 6e 20 69 74 20 72 65 61 63 68 65    When it reache
07b0: 73 20 7a 65 72 6f 2c 20 74 68 65 20 75 31 2e 69  s zero, the u1.i
07c0: 73 49 6e 74 65 72 72 75 70 74 65 64 0a 2a 2a 20  sInterrupted.** 
07d0: 66 69 65 6c 64 20 6f 66 20 74 68 65 20 73 71 6c  field of the sql
07e0: 69 74 65 33 20 73 74 72 75 63 74 75 72 65 20 69  ite3 structure i
07f0: 73 20 73 65 74 20 69 6e 20 6f 72 64 65 72 20 74  s set in order t
0800: 6f 20 73 69 6d 75 6c 61 74 65 20 61 6e 20 69 6e  o simulate an in
0810: 74 65 72 72 75 70 74 2e 0a 2a 2a 0a 2a 2a 20 54  terrupt..**.** T
0820: 68 69 73 20 66 61 63 69 6c 69 74 79 20 69 73 20  his facility is 
0830: 75 73 65 64 20 66 6f 72 20 74 65 73 74 69 6e 67  used for testing
0840: 20 70 75 72 70 6f 73 65 73 20 6f 6e 6c 79 2e 20   purposes only. 
0850: 20 49 74 20 64 6f 65 73 20 6e 6f 74 20 66 75 6e   It does not fun
0860: 63 74 69 6f 6e 0a 2a 2a 20 69 6e 20 61 6e 20 6f  ction.** in an o
0870: 72 64 69 6e 61 72 79 20 62 75 69 6c 64 2e 0a 2a  rdinary build..*
0880: 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
0890: 54 45 53 54 0a 69 6e 74 20 73 71 6c 69 74 65 33  TEST.int sqlite3
08a0: 5f 69 6e 74 65 72 72 75 70 74 5f 63 6f 75 6e 74  _interrupt_count
08b0: 20 3d 20 30 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a   = 0;.#endif../*
08c0: 0a 2a 2a 20 54 68 65 20 6e 65 78 74 20 67 6c 6f  .** The next glo
08d0: 62 61 6c 20 76 61 72 69 61 62 6c 65 20 69 73 20  bal variable is 
08e0: 69 6e 63 72 65 6d 65 6e 74 65 64 20 65 61 63 68  incremented each
08f0: 20 74 79 70 65 20 74 68 65 20 4f 50 5f 53 6f 72   type the OP_Sor
0900: 74 20 6f 70 63 6f 64 65 0a 2a 2a 20 69 73 20 65  t opcode.** is e
0910: 78 65 63 75 74 65 64 2e 20 20 54 68 65 20 74 65  xecuted.  The te
0920: 73 74 20 70 72 6f 63 65 64 75 72 65 73 20 75 73  st procedures us
0930: 65 20 74 68 69 73 20 69 6e 66 6f 72 6d 61 74 69  e this informati
0940: 6f 6e 20 74 6f 20 6d 61 6b 65 20 73 75 72 65 20  on to make sure 
0950: 74 68 61 74 0a 2a 2a 20 73 6f 72 74 69 6e 67 20  that.** sorting 
0960: 69 73 20 6f 63 63 75 72 72 69 6e 67 20 6f 72 20  is occurring or 
0970: 6e 6f 74 20 6f 63 63 75 72 72 69 6e 67 20 61 74  not occurring at
0980: 20 61 70 70 72 6f 70 72 69 61 74 65 20 74 69 6d   appropriate tim
0990: 65 73 2e 20 20 20 54 68 69 73 20 76 61 72 69 61  es.   This varia
09a0: 62 6c 65 0a 2a 2a 20 68 61 73 20 6e 6f 20 66 75  ble.** has no fu
09b0: 6e 63 74 69 6f 6e 20 6f 74 68 65 72 20 74 68 61  nction other tha
09c0: 6e 20 74 6f 20 68 65 6c 70 20 76 65 72 69 66 79  n to help verify
09d0: 20 74 68 65 20 63 6f 72 72 65 63 74 20 6f 70 65   the correct ope
09e0: 72 61 74 69 6f 6e 20 6f 66 20 74 68 65 0a 2a 2a  ration of the.**
09f0: 20 6c 69 62 72 61 72 79 2e 0a 2a 2f 0a 23 69 66   library..*/.#if
0a00: 64 65 66 20 53 51 4c 49 54 45 5f 54 45 53 54 0a  def SQLITE_TEST.
0a10: 69 6e 74 20 73 71 6c 69 74 65 33 5f 73 6f 72 74  int sqlite3_sort
0a20: 5f 63 6f 75 6e 74 20 3d 20 30 3b 0a 23 65 6e 64  _count = 0;.#end
0a30: 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 6e 65  if../*.** The ne
0a40: 78 74 20 67 6c 6f 62 61 6c 20 76 61 72 69 61 62  xt global variab
0a50: 6c 65 20 72 65 63 6f 72 64 73 20 74 68 65 20 73  le records the s
0a60: 69 7a 65 20 6f 66 20 74 68 65 20 6c 61 72 67 65  ize of the large
0a70: 73 74 20 4d 45 4d 5f 42 6c 6f 62 0a 2a 2a 20 6f  st MEM_Blob.** o
0a80: 72 20 4d 45 4d 5f 53 74 72 20 74 68 61 74 20 68  r MEM_Str that h
0a90: 61 73 20 62 65 65 6e 20 75 73 65 64 20 62 79 20  as been used by 
0aa0: 61 20 56 44 42 45 20 6f 70 63 6f 64 65 2e 20 20  a VDBE opcode.  
0ab0: 54 68 65 20 74 65 73 74 20 70 72 6f 63 65 64 75  The test procedu
0ac0: 72 65 73 0a 2a 2a 20 75 73 65 20 74 68 69 73 20  res.** use this 
0ad0: 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 74 6f 20 6d  information to m
0ae0: 61 6b 65 20 73 75 72 65 20 74 68 61 74 20 74 68  ake sure that th
0af0: 65 20 7a 65 72 6f 2d 62 6c 6f 62 20 66 75 6e 63  e zero-blob func
0b00: 74 69 6f 6e 61 6c 69 74 79 0a 2a 2a 20 69 73 20  tionality.** is 
0b10: 77 6f 72 6b 69 6e 67 20 63 6f 72 72 65 63 74 6c  working correctl
0b20: 79 2e 20 20 20 54 68 69 73 20 76 61 72 69 61 62  y.   This variab
0b30: 6c 65 20 68 61 73 20 6e 6f 20 66 75 6e 63 74 69  le has no functi
0b40: 6f 6e 20 6f 74 68 65 72 20 74 68 61 6e 20 74 6f  on other than to
0b50: 0a 2a 2a 20 68 65 6c 70 20 76 65 72 69 66 79 20  .** help verify 
0b60: 74 68 65 20 63 6f 72 72 65 63 74 20 6f 70 65 72  the correct oper
0b70: 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 6c 69 62  ation of the lib
0b80: 72 61 72 79 2e 0a 2a 2f 0a 23 69 66 64 65 66 20  rary..*/.#ifdef 
0b90: 53 51 4c 49 54 45 5f 54 45 53 54 0a 69 6e 74 20  SQLITE_TEST.int 
0ba0: 73 71 6c 69 74 65 33 5f 6d 61 78 5f 62 6c 6f 62  sqlite3_max_blob
0bb0: 73 69 7a 65 20 3d 20 30 3b 0a 73 74 61 74 69 63  size = 0;.static
0bc0: 20 76 6f 69 64 20 75 70 64 61 74 65 4d 61 78 42   void updateMaxB
0bd0: 6c 6f 62 73 69 7a 65 28 4d 65 6d 20 2a 70 29 7b  lobsize(Mem *p){
0be0: 0a 20 20 69 66 28 20 28 70 2d 3e 66 6c 61 67 73  .  if( (p->flags
0bf0: 20 26 20 28 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f   & (MEM_Str|MEM_
0c00: 42 6c 6f 62 29 29 21 3d 30 20 26 26 20 70 2d 3e  Blob))!=0 && p->
0c10: 6e 3e 73 71 6c 69 74 65 33 5f 6d 61 78 5f 62 6c  n>sqlite3_max_bl
0c20: 6f 62 73 69 7a 65 20 29 7b 0a 20 20 20 20 73 71  obsize ){.    sq
0c30: 6c 69 74 65 33 5f 6d 61 78 5f 62 6c 6f 62 73 69  lite3_max_blobsi
0c40: 7a 65 20 3d 20 70 2d 3e 6e 3b 0a 20 20 7d 0a 7d  ze = p->n;.  }.}
0c50: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54  .#endif../*.** T
0c60: 68 69 73 20 6d 61 63 72 6f 20 65 76 61 6c 75 61  his macro evalua
0c70: 74 65 73 20 74 6f 20 74 72 75 65 20 69 66 20 65  tes to true if e
0c80: 69 74 68 65 72 20 74 68 65 20 75 70 64 61 74 65  ither the update
0c90: 20 68 6f 6f 6b 20 6f 72 20 74 68 65 20 70 72 65   hook or the pre
0ca0: 75 70 64 61 74 65 0a 2a 2a 20 68 6f 6f 6b 20 61  update.** hook a
0cb0: 72 65 20 65 6e 61 62 6c 65 64 20 66 6f 72 20 64  re enabled for d
0cc0: 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 20  atabase connect 
0cd0: 44 42 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51  DB..*/.#ifdef SQ
0ce0: 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 50 52 45 55  LITE_ENABLE_PREU
0cf0: 50 44 41 54 45 5f 48 4f 4f 4b 0a 23 20 64 65 66  PDATE_HOOK.# def
0d00: 69 6e 65 20 48 41 53 5f 55 50 44 41 54 45 5f 48  ine HAS_UPDATE_H
0d10: 4f 4f 4b 28 44 42 29 20 28 28 44 42 29 2d 3e 78  OOK(DB) ((DB)->x
0d20: 50 72 65 55 70 64 61 74 65 43 61 6c 6c 62 61 63  PreUpdateCallbac
0d30: 6b 7c 7c 28 44 42 29 2d 3e 78 55 70 64 61 74 65  k||(DB)->xUpdate
0d40: 43 61 6c 6c 62 61 63 6b 29 0a 23 65 6c 73 65 0a  Callback).#else.
0d50: 23 20 64 65 66 69 6e 65 20 48 41 53 5f 55 50 44  # define HAS_UPD
0d60: 41 54 45 5f 48 4f 4f 4b 28 44 42 29 20 28 28 44  ATE_HOOK(DB) ((D
0d70: 42 29 2d 3e 78 55 70 64 61 74 65 43 61 6c 6c 62  B)->xUpdateCallb
0d80: 61 63 6b 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  ack).#endif../*.
0d90: 2a 2a 20 54 68 65 20 6e 65 78 74 20 67 6c 6f 62  ** The next glob
0da0: 61 6c 20 76 61 72 69 61 62 6c 65 20 69 73 20 69  al variable is i
0db0: 6e 63 72 65 6d 65 6e 74 65 64 20 65 61 63 68 20  ncremented each 
0dc0: 74 69 6d 65 20 74 68 65 20 4f 50 5f 46 6f 75 6e  time the OP_Foun
0dd0: 64 20 6f 70 63 6f 64 65 0a 2a 2a 20 69 73 20 65  d opcode.** is e
0de0: 78 65 63 75 74 65 64 2e 20 54 68 69 73 20 69 73  xecuted. This is
0df0: 20 75 73 65 64 20 74 6f 20 74 65 73 74 20 77 68   used to test wh
0e00: 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 74 68 65  ether or not the
0e10: 20 66 6f 72 65 69 67 6e 20 6b 65 79 0a 2a 2a 20   foreign key.** 
0e20: 6f 70 65 72 61 74 69 6f 6e 20 69 6d 70 6c 65 6d  operation implem
0e30: 65 6e 74 65 64 20 75 73 69 6e 67 20 4f 50 5f 46  ented using OP_F
0e40: 6b 49 73 5a 65 72 6f 20 69 73 20 77 6f 72 6b 69  kIsZero is worki
0e50: 6e 67 2e 20 54 68 69 73 20 76 61 72 69 61 62 6c  ng. This variabl
0e60: 65 0a 2a 2a 20 68 61 73 20 6e 6f 20 66 75 6e 63  e.** has no func
0e70: 74 69 6f 6e 20 6f 74 68 65 72 20 74 68 61 6e 20  tion other than 
0e80: 74 6f 20 68 65 6c 70 20 76 65 72 69 66 79 20 74  to help verify t
0e90: 68 65 20 63 6f 72 72 65 63 74 20 6f 70 65 72 61  he correct opera
0ea0: 74 69 6f 6e 20 6f 66 20 74 68 65 0a 2a 2a 20 6c  tion of the.** l
0eb0: 69 62 72 61 72 79 2e 0a 2a 2f 0a 23 69 66 64 65  ibrary..*/.#ifde
0ec0: 66 20 53 51 4c 49 54 45 5f 54 45 53 54 0a 69 6e  f SQLITE_TEST.in
0ed0: 74 20 73 71 6c 69 74 65 33 5f 66 6f 75 6e 64 5f  t sqlite3_found_
0ee0: 63 6f 75 6e 74 20 3d 20 30 3b 0a 23 65 6e 64 69  count = 0;.#endi
0ef0: 66 0a 0a 2f 2a 0a 2a 2a 20 54 65 73 74 20 61 20  f../*.** Test a 
0f00: 72 65 67 69 73 74 65 72 20 74 6f 20 73 65 65 20  register to see 
0f10: 69 66 20 69 74 20 65 78 63 65 65 64 73 20 74 68  if it exceeds th
0f20: 65 20 63 75 72 72 65 6e 74 20 6d 61 78 69 6d 75  e current maximu
0f30: 6d 20 62 6c 6f 62 20 73 69 7a 65 2e 0a 2a 2a 20  m blob size..** 
0f40: 49 66 20 69 74 20 64 6f 65 73 2c 20 72 65 63 6f  If it does, reco
0f50: 72 64 20 74 68 65 20 6e 65 77 20 6d 61 78 69 6d  rd the new maxim
0f60: 75 6d 20 62 6c 6f 62 20 73 69 7a 65 2e 0a 2a 2f  um blob size..*/
0f70: 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c  .#if defined(SQL
0f80: 49 54 45 5f 54 45 53 54 29 20 26 26 20 21 64 65  ITE_TEST) && !de
0f90: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 55 4e 54  fined(SQLITE_UNT
0fa0: 45 53 54 41 42 4c 45 29 0a 23 20 64 65 66 69 6e  ESTABLE).# defin
0fb0: 65 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f  e UPDATE_MAX_BLO
0fc0: 42 53 49 5a 45 28 50 29 20 20 75 70 64 61 74 65  BSIZE(P)  update
0fd0: 4d 61 78 42 6c 6f 62 73 69 7a 65 28 50 29 0a 23  MaxBlobsize(P).#
0fe0: 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 55 50  else.# define UP
0ff0: 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a  DATE_MAX_BLOBSIZ
1000: 45 28 50 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  E(P).#endif../*.
1010: 2a 2a 20 49 6e 76 6f 6b 65 20 74 68 65 20 56 44  ** Invoke the VD
1020: 42 45 20 63 6f 76 65 72 61 67 65 20 63 61 6c 6c  BE coverage call
1030: 62 61 63 6b 2c 20 69 66 20 74 68 61 74 20 63 61  back, if that ca
1040: 6c 6c 62 61 63 6b 20 69 73 20 64 65 66 69 6e 65  llback is define
1050: 64 2e 20 20 54 68 69 73 0a 2a 2a 20 66 65 61 74  d.  This.** feat
1060: 75 72 65 20 69 73 20 75 73 65 64 20 66 6f 72 20  ure is used for 
1070: 74 65 73 74 20 73 75 69 74 65 20 76 61 6c 69 64  test suite valid
1080: 61 74 69 6f 6e 20 6f 6e 6c 79 20 61 6e 64 20 64  ation only and d
1090: 6f 65 73 20 6e 6f 74 20 61 70 70 65 61 72 20 61  oes not appear a
10a0: 6e 0a 2a 2a 20 70 72 6f 64 75 63 74 69 6f 6e 20  n.** production 
10b0: 62 75 69 6c 64 73 2e 0a 2a 2a 0a 2a 2a 20 4d 20  builds..**.** M 
10c0: 69 73 20 61 6e 20 69 6e 74 65 67 65 72 20 62 65  is an integer be
10d0: 74 77 65 65 6e 20 32 20 61 6e 64 20 34 2e 20 20  tween 2 and 4.  
10e0: 32 20 69 6e 64 69 63 61 74 65 73 20 61 20 6f 72  2 indicates a or
10f0: 64 69 6e 61 72 79 20 74 77 6f 2d 77 61 79 0a 2a  dinary two-way.*
1100: 2a 20 62 72 61 6e 63 68 20 28 49 3d 30 20 6d 65  * branch (I=0 me
1110: 61 6e 73 20 66 61 6c 6c 20 74 68 72 6f 75 67 68  ans fall through
1120: 20 61 6e 64 20 49 3d 31 20 6d 65 61 6e 73 20 74   and I=1 means t
1130: 61 6b 65 6e 29 2e 20 20 33 20 69 6e 64 69 63 61  aken).  3 indica
1140: 74 65 73 0a 2a 2a 20 61 20 33 2d 77 61 79 20 62  tes.** a 3-way b
1150: 72 61 6e 63 68 20 77 68 65 72 65 20 74 68 65 20  ranch where the 
1160: 74 68 69 72 64 20 77 61 79 20 69 73 20 77 68 65  third way is whe
1170: 6e 20 6f 6e 65 20 6f 66 20 74 68 65 20 6f 70 65  n one of the ope
1180: 72 61 6e 64 73 20 69 73 0a 2a 2a 20 4e 55 4c 4c  rands is.** NULL
1190: 2e 20 20 34 20 69 6e 64 69 63 61 74 65 73 20 74  .  4 indicates t
11a0: 68 65 20 4f 50 5f 4a 75 6d 70 20 69 6e 73 74 72  he OP_Jump instr
11b0: 75 63 74 69 6f 6e 20 77 68 69 63 68 20 68 61 73  uction which has
11c0: 20 74 68 72 65 65 20 64 65 73 74 69 6e 61 74 69   three destinati
11d0: 6f 6e 73 0a 2a 2a 20 64 65 70 65 6e 64 69 6e 67  ons.** depending
11e0: 20 6f 6e 20 77 68 65 74 68 65 72 20 74 68 65 20   on whether the 
11f0: 66 69 72 73 74 20 6f 70 65 72 61 6e 64 20 69 73  first operand is
1200: 20 6c 65 73 73 20 74 68 61 6e 2c 20 65 71 75 61   less than, equa
1210: 6c 20 74 6f 2c 20 6f 72 20 67 72 65 61 74 65 72  l to, or greater
1220: 0a 2a 2a 20 74 68 61 6e 20 74 68 65 20 73 65 63  .** than the sec
1230: 6f 6e 64 2e 20 0a 2a 2a 0a 2a 2a 20 69 53 72 63  ond. .**.** iSrc
1240: 4c 69 6e 65 20 69 73 20 74 68 65 20 73 6f 75 72  Line is the sour
1250: 63 65 20 63 6f 64 65 20 6c 69 6e 65 20 28 66 72  ce code line (fr
1260: 6f 6d 20 74 68 65 20 5f 5f 4c 49 4e 45 5f 5f 20  om the __LINE__ 
1270: 6d 61 63 72 6f 29 20 74 68 61 74 0a 2a 2a 20 67  macro) that.** g
1280: 65 6e 65 72 61 74 65 64 20 74 68 65 20 56 44 42  enerated the VDB
1290: 45 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 63 6f  E instruction co
12a0: 6d 62 69 6e 65 64 20 77 69 74 68 20 66 6c 61 67  mbined with flag
12b0: 20 62 69 74 73 2e 20 20 54 68 65 20 73 6f 75 72   bits.  The sour
12c0: 63 65 0a 2a 2a 20 63 6f 64 65 20 6c 69 6e 65 20  ce.** code line 
12d0: 6e 75 6d 62 65 72 20 69 73 20 69 6e 20 74 68 65  number is in the
12e0: 20 6c 6f 77 65 72 20 32 34 20 62 69 74 73 20 6f   lower 24 bits o
12f0: 66 20 69 53 72 63 4c 69 6e 65 20 61 6e 64 20 74  f iSrcLine and t
1300: 68 65 20 75 70 70 65 72 0a 2a 2a 20 38 20 62 79  he upper.** 8 by
1310: 74 65 73 20 61 72 65 20 66 6c 61 67 73 2e 20 20  tes are flags.  
1320: 54 68 65 20 6c 6f 77 65 72 20 74 68 72 65 65 20  The lower three 
1330: 62 69 74 73 20 6f 66 20 74 68 65 20 66 6c 61 67  bits of the flag
1340: 73 20 69 6e 64 69 63 61 74 65 0a 2a 2a 20 76 61  s indicate.** va
1350: 6c 75 65 73 20 66 6f 72 20 49 20 74 68 61 74 20  lues for I that 
1360: 73 68 6f 75 6c 64 20 6e 65 76 65 72 20 6f 63 63  should never occ
1370: 75 72 2e 20 20 46 6f 72 20 65 78 61 6d 70 6c 65  ur.  For example
1380: 2c 20 69 66 20 74 68 65 20 62 72 61 6e 63 68 20  , if the branch 
1390: 69 73 0a 2a 2a 20 61 6c 77 61 79 73 20 74 61 6b  is.** always tak
13a0: 65 6e 2c 20 74 68 65 20 66 6c 61 67 73 20 73 68  en, the flags sh
13b0: 6f 75 6c 64 20 62 65 20 30 78 30 35 20 73 69 6e  ould be 0x05 sin
13c0: 63 65 20 74 68 65 20 66 61 6c 6c 2d 74 68 72 6f  ce the fall-thro
13d0: 75 67 68 20 61 6e 64 0a 2a 2a 20 61 6c 74 65 72  ugh and.** alter
13e0: 6e 61 74 65 20 62 72 61 6e 63 68 20 61 72 65 20  nate branch are 
13f0: 6e 65 76 65 72 20 74 61 6b 65 6e 2e 20 20 49 66  never taken.  If
1400: 20 61 20 62 72 61 6e 63 68 20 69 73 20 6e 65 76   a branch is nev
1410: 65 72 20 74 61 6b 65 6e 20 74 68 65 6e 0a 2a 2a  er taken then.**
1420: 20 66 6c 61 67 73 20 73 68 6f 75 6c 64 20 62 65   flags should be
1430: 20 30 78 30 36 20 73 69 6e 63 65 20 6f 6e 6c 79   0x06 since only
1440: 20 74 68 65 20 66 61 6c 6c 2d 74 68 72 6f 75 67   the fall-throug
1450: 68 20 61 70 70 72 6f 61 63 68 20 69 73 20 61 6c  h approach is al
1460: 6c 6f 77 65 64 2e 0a 2a 2a 0a 2a 2a 20 42 69 74  lowed..**.** Bit
1470: 20 30 78 30 34 20 6f 66 20 74 68 65 20 66 6c 61   0x04 of the fla
1480: 67 73 20 69 6e 64 69 63 61 74 65 73 20 61 6e 20  gs indicates an 
1490: 4f 50 5f 4a 75 6d 70 20 6f 70 63 6f 64 65 20 74  OP_Jump opcode t
14a0: 68 61 74 20 69 73 20 6f 6e 6c 79 0a 2a 2a 20 69  hat is only.** i
14b0: 6e 74 65 72 65 73 74 65 64 20 69 6e 20 65 71 75  nterested in equ
14c0: 61 6c 20 6f 72 20 6e 6f 74 2d 65 71 75 61 6c 2e  al or not-equal.
14d0: 20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73    In other words
14e0: 2c 20 49 3d 3d 30 20 61 6e 64 20 49 3d 3d 32 0a  , I==0 and I==2.
14f0: 2a 2a 20 73 68 6f 75 6c 64 20 62 65 20 74 72 65  ** should be tre
1500: 61 74 65 64 20 74 68 65 20 73 61 6d 65 2e 0a 2a  ated the same..*
1510: 2a 0a 2a 2a 20 53 69 6e 63 65 20 6f 6e 6c 79 20  *.** Since only 
1520: 61 20 6c 69 6e 65 20 6e 75 6d 62 65 72 20 69 73  a line number is
1530: 20 72 65 74 61 69 6e 65 64 2c 20 6e 6f 74 20 74   retained, not t
1540: 68 65 20 66 69 6c 65 6e 61 6d 65 2c 20 74 68 69  he filename, thi
1550: 73 20 6d 61 63 72 6f 0a 2a 2a 20 6f 6e 6c 79 20  s macro.** only 
1560: 77 6f 72 6b 73 20 66 6f 72 20 61 6d 61 6c 67 61  works for amalga
1570: 6d 61 74 69 6f 6e 20 62 75 69 6c 64 73 2e 20 20  mation builds.  
1580: 42 75 74 20 74 68 61 74 20 69 73 20 6f 6b 2c 20  But that is ok, 
1590: 73 69 6e 63 65 20 74 68 65 73 65 20 6d 61 63 72  since these macr
15a0: 6f 73 0a 2a 2a 20 73 68 6f 75 6c 64 20 62 65 20  os.** should be 
15b0: 6e 6f 2d 6f 70 73 20 65 78 63 65 70 74 20 66 6f  no-ops except fo
15c0: 72 20 73 70 65 63 69 61 6c 20 62 75 69 6c 64 73  r special builds
15d0: 20 75 73 65 64 20 74 6f 20 6d 65 61 73 75 72 65   used to measure
15e0: 20 74 65 73 74 20 63 6f 76 65 72 61 67 65 2e 0a   test coverage..
15f0: 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28  */.#if !defined(
1600: 53 51 4c 49 54 45 5f 56 44 42 45 5f 43 4f 56 45  SQLITE_VDBE_COVE
1610: 52 41 47 45 29 0a 23 20 64 65 66 69 6e 65 20 56  RAGE).# define V
1620: 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 49  dbeBranchTaken(I
1630: 2c 4d 29 0a 23 65 6c 73 65 0a 23 20 64 65 66 69  ,M).#else.# defi
1640: 6e 65 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b  ne VdbeBranchTak
1650: 65 6e 28 49 2c 4d 29 20 76 64 62 65 54 61 6b 65  en(I,M) vdbeTake
1660: 42 72 61 6e 63 68 28 70 4f 70 2d 3e 69 53 72 63  Branch(pOp->iSrc
1670: 4c 69 6e 65 2c 49 2c 4d 29 0a 20 20 73 74 61 74  Line,I,M).  stat
1680: 69 63 20 76 6f 69 64 20 76 64 62 65 54 61 6b 65  ic void vdbeTake
1690: 42 72 61 6e 63 68 28 75 33 32 20 69 53 72 63 4c  Branch(u32 iSrcL
16a0: 69 6e 65 2c 20 75 38 20 49 2c 20 75 38 20 4d 29  ine, u8 I, u8 M)
16b0: 7b 0a 20 20 20 20 75 38 20 6d 4e 65 76 65 72 3b  {.    u8 mNever;
16c0: 0a 20 20 20 20 61 73 73 65 72 74 28 20 49 3c 3d  .    assert( I<=
16d0: 32 20 29 3b 20 20 2f 2a 20 30 3a 20 66 61 6c 6c  2 );  /* 0: fall
16e0: 20 74 68 72 6f 75 67 68 2c 20 20 31 3a 20 74 61   through,  1: ta
16f0: 6b 65 6e 2c 20 20 32 3a 20 61 6c 74 65 72 6e 61  ken,  2: alterna
1700: 74 65 20 74 61 6b 65 6e 20 2a 2f 0a 20 20 20 20  te taken */.    
1710: 61 73 73 65 72 74 28 20 4d 3c 3d 34 20 29 3b 20  assert( M<=4 ); 
1720: 20 2f 2a 20 32 3a 20 74 77 6f 2d 77 61 79 20 62   /* 2: two-way b
1730: 72 61 6e 63 68 2c 20 33 3a 20 74 68 72 65 65 2d  ranch, 3: three-
1740: 77 61 79 20 62 72 61 6e 63 68 2c 20 34 3a 20 4f  way branch, 4: O
1750: 50 5f 4a 75 6d 70 20 2a 2f 0a 20 20 20 20 61 73  P_Jump */.    as
1760: 73 65 72 74 28 20 49 3c 4d 20 29 3b 20 20 20 2f  sert( I<M );   /
1770: 2a 20 49 20 63 61 6e 20 6f 6e 6c 79 20 62 65 20  * I can only be 
1780: 32 20 69 66 20 4d 20 69 73 20 33 20 6f 72 20 34  2 if M is 3 or 4
1790: 20 2a 2f 0a 20 20 20 20 2f 2a 20 54 72 61 6e 73   */.    /* Trans
17a0: 66 6f 72 6d 20 49 20 66 72 6f 6d 20 61 20 69 6e  form I from a in
17b0: 74 65 67 65 72 20 5b 30 2c 31 2c 32 5d 20 69 6e  teger [0,1,2] in
17c0: 74 6f 20 61 20 62 69 74 6d 61 73 6b 20 6f 66 20  to a bitmask of 
17d0: 5b 31 2c 32 2c 34 5d 20 2a 2f 0a 20 20 20 20 49  [1,2,4] */.    I
17e0: 20 3d 20 31 3c 3c 49 3b 0a 20 20 20 20 2f 2a 20   = 1<<I;.    /* 
17f0: 54 68 65 20 75 70 70 65 72 20 38 20 62 69 74 73  The upper 8 bits
1800: 20 6f 66 20 69 53 72 63 4c 69 6e 65 20 61 72 65   of iSrcLine are
1810: 20 66 6c 61 67 73 2e 20 20 54 68 65 20 6c 6f 77   flags.  The low
1820: 65 72 20 74 68 72 65 65 20 62 69 74 73 20 6f 66  er three bits of
1830: 0a 20 20 20 20 2a 2a 20 74 68 65 20 66 6c 61 67  .    ** the flag
1840: 73 20 69 6e 64 69 63 61 74 65 20 64 69 72 65 63  s indicate direc
1850: 74 69 6f 6e 73 20 74 68 61 74 20 74 68 65 20 62  tions that the b
1860: 72 61 6e 63 68 20 63 61 6e 20 6e 65 76 65 72 20  ranch can never 
1870: 67 6f 2e 20 20 49 66 0a 20 20 20 20 2a 2a 20 61  go.  If.    ** a
1880: 20 62 72 61 6e 63 68 20 72 65 61 6c 6c 79 20 64   branch really d
1890: 6f 65 73 20 67 6f 20 69 6e 20 6f 6e 65 20 6f 66  oes go in one of
18a0: 20 74 68 6f 73 65 20 64 69 72 65 63 74 69 6f 6e   those direction
18b0: 73 2c 20 61 73 73 65 72 74 20 72 69 67 68 74 0a  s, assert right.
18c0: 20 20 20 20 2a 2a 20 61 77 61 79 2e 20 2a 2f 0a      ** away. */.
18d0: 20 20 20 20 6d 4e 65 76 65 72 20 3d 20 69 53 72      mNever = iSr
18e0: 63 4c 69 6e 65 20 3e 3e 20 32 34 3b 0a 20 20 20  cLine >> 24;.   
18f0: 20 61 73 73 65 72 74 28 20 28 49 20 26 20 6d 4e   assert( (I & mN
1900: 65 76 65 72 29 3d 3d 30 20 29 3b 0a 20 20 20 20  ever)==0 );.    
1910: 69 66 28 20 73 71 6c 69 74 65 33 47 6c 6f 62 61  if( sqlite3Globa
1920: 6c 43 6f 6e 66 69 67 2e 78 56 64 62 65 42 72 61  lConfig.xVdbeBra
1930: 6e 63 68 3d 3d 30 20 29 20 72 65 74 75 72 6e 3b  nch==0 ) return;
1940: 20 20 2f 2a 4e 4f 5f 54 45 53 54 2a 2f 0a 20 20    /*NO_TEST*/.  
1950: 20 20 49 20 7c 3d 20 6d 4e 65 76 65 72 3b 0a 20    I |= mNever;. 
1960: 20 20 20 69 66 28 20 4d 3d 3d 32 20 29 20 49 20     if( M==2 ) I 
1970: 7c 3d 20 30 78 30 34 3b 0a 20 20 20 20 69 66 28  |= 0x04;.    if(
1980: 20 4d 3d 3d 34 20 29 7b 0a 20 20 20 20 20 20 49   M==4 ){.      I
1990: 20 7c 3d 20 30 78 30 38 3b 0a 20 20 20 20 20 20   |= 0x08;.      
19a0: 69 66 28 20 28 6d 4e 65 76 65 72 26 30 78 30 38  if( (mNever&0x08
19b0: 29 21 3d 30 20 26 26 20 28 49 26 30 78 30 35 29  )!=0 && (I&0x05)
19c0: 21 3d 30 29 20 49 20 7c 3d 20 30 78 30 35 3b 20  !=0) I |= 0x05; 
19d0: 2f 2a 4e 4f 5f 54 45 53 54 2a 2f 0a 20 20 20 20  /*NO_TEST*/.    
19e0: 7d 0a 20 20 20 20 73 71 6c 69 74 65 33 47 6c 6f  }.    sqlite3Glo
19f0: 62 61 6c 43 6f 6e 66 69 67 2e 78 56 64 62 65 42  balConfig.xVdbeB
1a00: 72 61 6e 63 68 28 73 71 6c 69 74 65 33 47 6c 6f  ranch(sqlite3Glo
1a10: 62 61 6c 43 6f 6e 66 69 67 2e 70 56 64 62 65 42  balConfig.pVdbeB
1a20: 72 61 6e 63 68 41 72 67 2c 0a 20 20 20 20 20 20  ranchArg,.      
1a30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 53                iS
1a50: 72 63 4c 69 6e 65 26 30 78 66 66 66 66 66 66 2c  rcLine&0xffffff,
1a60: 20 49 2c 20 4d 29 3b 0a 20 20 7d 0a 23 65 6e 64   I, M);.  }.#end
1a70: 69 66 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6e 76 65 72  if../*.** Conver
1a80: 74 20 74 68 65 20 67 69 76 65 6e 20 72 65 67 69  t the given regi
1a90: 73 74 65 72 20 69 6e 74 6f 20 61 20 73 74 72 69  ster into a stri
1aa0: 6e 67 20 69 66 20 69 74 20 69 73 6e 27 74 20 6f  ng if it isn't o
1ab0: 6e 65 0a 2a 2a 20 61 6c 72 65 61 64 79 2e 20 52  ne.** already. R
1ac0: 65 74 75 72 6e 20 6e 6f 6e 2d 7a 65 72 6f 20 69  eturn non-zero i
1ad0: 66 20 61 20 6d 61 6c 6c 6f 63 28 29 20 66 61 69  f a malloc() fai
1ae0: 6c 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ls..*/.#define S
1af0: 74 72 69 6e 67 69 66 79 28 50 2c 20 65 6e 63 29  tringify(P, enc)
1b00: 20 5c 0a 20 20 20 69 66 28 28 28 50 29 2d 3e 66   \.   if(((P)->f
1b10: 6c 61 67 73 26 28 4d 45 4d 5f 53 74 72 7c 4d 45  lags&(MEM_Str|ME
1b20: 4d 5f 42 6c 6f 62 29 29 3d 3d 30 20 26 26 20 73  M_Blob))==0 && s
1b30: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 74 72  qlite3VdbeMemStr
1b40: 69 6e 67 69 66 79 28 50 2c 65 6e 63 2c 30 29 29  ingify(P,enc,0))
1b50: 20 5c 0a 20 20 20 20 20 7b 20 67 6f 74 6f 20 6e   \.     { goto n
1b60: 6f 5f 6d 65 6d 3b 20 7d 0a 0a 2f 2a 0a 2a 2a 20  o_mem; }../*.** 
1b70: 41 6e 20 65 70 68 65 6d 65 72 61 6c 20 73 74 72  An ephemeral str
1b80: 69 6e 67 20 76 61 6c 75 65 20 28 73 69 67 6e 69  ing value (signi
1b90: 66 69 65 64 20 62 79 20 74 68 65 20 4d 45 4d 5f  fied by the MEM_
1ba0: 45 70 68 65 6d 20 66 6c 61 67 29 20 63 6f 6e 74  Ephem flag) cont
1bb0: 61 69 6e 73 0a 2a 2a 20 61 20 70 6f 69 6e 74 65  ains.** a pointe
1bc0: 72 20 74 6f 20 61 20 64 79 6e 61 6d 69 63 61 6c  r to a dynamical
1bd0: 6c 79 20 61 6c 6c 6f 63 61 74 65 64 20 73 74 72  ly allocated str
1be0: 69 6e 67 20 77 68 65 72 65 20 73 6f 6d 65 20 6f  ing where some o
1bf0: 74 68 65 72 20 65 6e 74 69 74 79 0a 2a 2a 20 69  ther entity.** i
1c00: 73 20 72 65 73 70 6f 6e 73 69 62 6c 65 20 66 6f  s responsible fo
1c10: 72 20 64 65 61 6c 6c 6f 63 61 74 69 6e 67 20 74  r deallocating t
1c20: 68 61 74 20 73 74 72 69 6e 67 2e 20 20 42 65 63  hat string.  Bec
1c30: 61 75 73 65 20 74 68 65 20 72 65 67 69 73 74 65  ause the registe
1c40: 72 0a 2a 2a 20 64 6f 65 73 20 6e 6f 74 20 63 6f  r.** does not co
1c50: 6e 74 72 6f 6c 20 74 68 65 20 73 74 72 69 6e 67  ntrol the string
1c60: 2c 20 69 74 20 6d 69 67 68 74 20 62 65 20 64 65  , it might be de
1c70: 6c 65 74 65 64 20 77 69 74 68 6f 75 74 20 74 68  leted without th
1c80: 65 20 72 65 67 69 73 74 65 72 0a 2a 2a 20 6b 6e  e register.** kn
1c90: 6f 77 69 6e 67 20 69 74 2e 0a 2a 2a 0a 2a 2a 20  owing it..**.** 
1ca0: 54 68 69 73 20 72 6f 75 74 69 6e 65 20 63 6f 6e  This routine con
1cb0: 76 65 72 74 73 20 61 6e 20 65 70 68 65 6d 65 72  verts an ephemer
1cc0: 61 6c 20 73 74 72 69 6e 67 20 69 6e 74 6f 20 61  al string into a
1cd0: 20 64 79 6e 61 6d 69 63 61 6c 6c 79 20 61 6c 6c   dynamically all
1ce0: 6f 63 61 74 65 64 0a 2a 2a 20 73 74 72 69 6e 67  ocated.** string
1cf0: 20 74 68 61 74 20 74 68 65 20 72 65 67 69 73 74   that the regist
1d00: 65 72 20 69 74 73 65 6c 66 20 63 6f 6e 74 72 6f  er itself contro
1d10: 6c 73 2e 20 20 49 6e 20 6f 74 68 65 72 20 77 6f  ls.  In other wo
1d20: 72 64 73 2c 20 69 74 0a 2a 2a 20 63 6f 6e 76 65  rds, it.** conve
1d30: 72 74 73 20 61 6e 20 4d 45 4d 5f 45 70 68 65 6d  rts an MEM_Ephem
1d40: 20 73 74 72 69 6e 67 20 69 6e 74 6f 20 61 20 73   string into a s
1d50: 74 72 69 6e 67 20 77 69 74 68 20 50 2e 7a 3d 3d  tring with P.z==
1d60: 50 2e 7a 4d 61 6c 6c 6f 63 2e 0a 2a 2f 0a 23 64  P.zMalloc..*/.#d
1d70: 65 66 69 6e 65 20 44 65 65 70 68 65 6d 65 72 61  efine Deephemera
1d80: 6c 69 7a 65 28 50 29 20 5c 0a 20 20 20 69 66 28  lize(P) \.   if(
1d90: 20 28 28 50 29 2d 3e 66 6c 61 67 73 26 4d 45 4d   ((P)->flags&MEM
1da0: 5f 45 70 68 65 6d 29 21 3d 30 20 5c 0a 20 20 20  _Ephem)!=0 \.   
1db0: 20 20 20 20 26 26 20 73 71 6c 69 74 65 33 56 64      && sqlite3Vd
1dc0: 62 65 4d 65 6d 4d 61 6b 65 57 72 69 74 65 61 62  beMemMakeWriteab
1dd0: 6c 65 28 50 29 20 29 7b 20 67 6f 74 6f 20 6e 6f  le(P) ){ goto no
1de0: 5f 6d 65 6d 3b 7d 0a 0a 2f 2a 20 52 65 74 75 72  _mem;}../* Retur
1df0: 6e 20 74 72 75 65 20 69 66 20 74 68 65 20 63 75  n true if the cu
1e00: 72 73 6f 72 20 77 61 73 20 6f 70 65 6e 65 64 20  rsor was opened 
1e10: 75 73 69 6e 67 20 74 68 65 20 4f 50 5f 4f 70 65  using the OP_Ope
1e20: 6e 53 6f 72 74 65 72 20 6f 70 63 6f 64 65 2e 20  nSorter opcode. 
1e30: 2a 2f 0a 23 64 65 66 69 6e 65 20 69 73 53 6f 72  */.#define isSor
1e40: 74 65 72 28 78 29 20 28 28 78 29 2d 3e 65 43 75  ter(x) ((x)->eCu
1e50: 72 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f 53  rType==CURTYPE_S
1e60: 4f 52 54 45 52 29 0a 0a 2f 2a 0a 2a 2a 20 41 6c  ORTER)../*.** Al
1e70: 6c 6f 63 61 74 65 20 56 64 62 65 43 75 72 73 6f  locate VdbeCurso
1e80: 72 20 6e 75 6d 62 65 72 20 69 43 75 72 2e 20 20  r number iCur.  
1e90: 52 65 74 75 72 6e 20 61 20 70 6f 69 6e 74 65 72  Return a pointer
1ea0: 20 74 6f 20 69 74 2e 20 20 52 65 74 75 72 6e 20   to it.  Return 
1eb0: 4e 55 4c 4c 0a 2a 2a 20 69 66 20 77 65 20 72 75  NULL.** if we ru
1ec0: 6e 20 6f 75 74 20 6f 66 20 6d 65 6d 6f 72 79 2e  n out of memory.
1ed0: 0a 2a 2f 0a 73 74 61 74 69 63 20 56 64 62 65 43  .*/.static VdbeC
1ee0: 75 72 73 6f 72 20 2a 61 6c 6c 6f 63 61 74 65 43  ursor *allocateC
1ef0: 75 72 73 6f 72 28 0a 20 20 56 64 62 65 20 2a 70  ursor(.  Vdbe *p
1f00: 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ,              /
1f10: 2a 20 54 68 65 20 76 69 72 74 75 61 6c 20 6d 61  * The virtual ma
1f20: 63 68 69 6e 65 20 2a 2f 0a 20 20 69 6e 74 20 69  chine */.  int i
1f30: 43 75 72 2c 20 20 20 20 20 20 20 20 20 20 20 20  Cur,            
1f40: 20 2f 2a 20 49 6e 64 65 78 20 6f 66 20 74 68 65   /* Index of the
1f50: 20 6e 65 77 20 56 64 62 65 43 75 72 73 6f 72 20   new VdbeCursor 
1f60: 2a 2f 0a 20 20 69 6e 74 20 6e 46 69 65 6c 64 2c  */.  int nField,
1f70: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
1f80: 6d 62 65 72 20 6f 66 20 66 69 65 6c 64 73 20 69  mber of fields i
1f90: 6e 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20 69  n the table or i
1fa0: 6e 64 65 78 20 2a 2f 0a 20 20 69 6e 74 20 69 44  ndex */.  int iD
1fb0: 62 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20  b,              
1fc0: 2f 2a 20 44 61 74 61 62 61 73 65 20 74 68 65 20  /* Database the 
1fd0: 63 75 72 73 6f 72 20 62 65 6c 6f 6e 67 73 20 74  cursor belongs t
1fe0: 6f 2c 20 6f 72 20 2d 31 20 2a 2f 0a 20 20 75 38  o, or -1 */.  u8
1ff0: 20 65 43 75 72 54 79 70 65 20 20 20 20 20 20 20   eCurType       
2000: 20 20 20 20 2f 2a 20 54 79 70 65 20 6f 66 20 74      /* Type of t
2010: 68 65 20 6e 65 77 20 63 75 72 73 6f 72 20 2a 2f  he new cursor */
2020: 0a 29 7b 0a 20 20 2f 2a 20 46 69 6e 64 20 74 68  .){.  /* Find th
2030: 65 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 74 68  e memory cell th
2040: 61 74 20 77 69 6c 6c 20 62 65 20 75 73 65 64 20  at will be used 
2050: 74 6f 20 73 74 6f 72 65 20 74 68 65 20 62 6c 6f  to store the blo
2060: 62 20 6f 66 20 6d 65 6d 6f 72 79 0a 20 20 2a 2a  b of memory.  **
2070: 20 72 65 71 75 69 72 65 64 20 66 6f 72 20 74 68   required for th
2080: 69 73 20 56 64 62 65 43 75 72 73 6f 72 20 73 74  is VdbeCursor st
2090: 72 75 63 74 75 72 65 2e 20 49 74 20 69 73 20 63  ructure. It is c
20a0: 6f 6e 76 65 6e 69 65 6e 74 20 74 6f 20 75 73 65  onvenient to use
20b0: 20 61 20 0a 20 20 2a 2a 20 76 64 62 65 20 6d 65   a .  ** vdbe me
20c0: 6d 6f 72 79 20 63 65 6c 6c 20 74 6f 20 6d 61 6e  mory cell to man
20d0: 61 67 65 20 74 68 65 20 6d 65 6d 6f 72 79 20 61  age the memory a
20e0: 6c 6c 6f 63 61 74 69 6f 6e 20 72 65 71 75 69 72  llocation requir
20f0: 65 64 20 66 6f 72 20 61 0a 20 20 2a 2a 20 56 64  ed for a.  ** Vd
2100: 62 65 43 75 72 73 6f 72 20 73 74 72 75 63 74 75  beCursor structu
2110: 72 65 20 66 6f 72 20 74 68 65 20 66 6f 6c 6c 6f  re for the follo
2120: 77 69 6e 67 20 72 65 61 73 6f 6e 73 3a 0a 20 20  wing reasons:.  
2130: 2a 2a 0a 20 20 2a 2a 20 20 20 2a 20 53 6f 6d 65  **.  **   * Some
2140: 74 69 6d 65 73 20 63 75 72 73 6f 72 20 6e 75 6d  times cursor num
2150: 62 65 72 73 20 61 72 65 20 75 73 65 64 20 66 6f  bers are used fo
2160: 72 20 61 20 63 6f 75 70 6c 65 20 6f 66 20 64 69  r a couple of di
2170: 66 66 65 72 65 6e 74 0a 20 20 2a 2a 20 20 20 20  fferent.  **    
2180: 20 70 75 72 70 6f 73 65 73 20 69 6e 20 61 20 76   purposes in a v
2190: 64 62 65 20 70 72 6f 67 72 61 6d 2e 20 54 68 65  dbe program. The
21a0: 20 64 69 66 66 65 72 65 6e 74 20 75 73 65 73 20   different uses 
21b0: 6d 69 67 68 74 20 72 65 71 75 69 72 65 0a 20 20  might require.  
21c0: 2a 2a 20 20 20 20 20 64 69 66 66 65 72 65 6e 74  **     different
21d0: 20 73 69 7a 65 64 20 61 6c 6c 6f 63 61 74 69 6f   sized allocatio
21e0: 6e 73 2e 20 4d 65 6d 6f 72 79 20 63 65 6c 6c 73  ns. Memory cells
21f0: 20 70 72 6f 76 69 64 65 20 67 72 6f 77 61 62 6c   provide growabl
2200: 65 0a 20 20 2a 2a 20 20 20 20 20 61 6c 6c 6f 63  e.  **     alloc
2210: 61 74 69 6f 6e 73 2e 0a 20 20 2a 2a 0a 20 20 2a  ations..  **.  *
2220: 2a 20 20 20 2a 20 57 68 65 6e 20 75 73 69 6e 67  *   * When using
2230: 20 45 4e 41 42 4c 45 5f 4d 45 4d 4f 52 59 5f 4d   ENABLE_MEMORY_M
2240: 41 4e 41 47 45 4d 45 4e 54 2c 20 6d 65 6d 6f 72  ANAGEMENT, memor
2250: 79 20 63 65 6c 6c 20 62 75 66 66 65 72 73 20 63  y cell buffers c
2260: 61 6e 0a 20 20 2a 2a 20 20 20 20 20 62 65 20 66  an.  **     be f
2270: 72 65 65 64 20 6c 61 7a 69 6c 79 20 76 69 61 20  reed lazily via 
2280: 74 68 65 20 73 71 6c 69 74 65 33 5f 72 65 6c 65  the sqlite3_rele
2290: 61 73 65 5f 6d 65 6d 6f 72 79 28 29 20 41 50 49  ase_memory() API
22a0: 2e 20 54 68 69 73 0a 20 20 2a 2a 20 20 20 20 20  . This.  **     
22b0: 6d 69 6e 69 6d 69 7a 65 73 20 74 68 65 20 6e 75  minimizes the nu
22c0: 6d 62 65 72 20 6f 66 20 6d 61 6c 6c 6f 63 20 63  mber of malloc c
22d0: 61 6c 6c 73 20 6d 61 64 65 20 62 79 20 74 68 65  alls made by the
22e0: 20 73 79 73 74 65 6d 2e 0a 20 20 2a 2a 0a 20 20   system..  **.  
22f0: 2a 2a 20 54 68 65 20 6d 65 6d 6f 72 79 20 63 65  ** The memory ce
2300: 6c 6c 20 66 6f 72 20 63 75 72 73 6f 72 20 30 20  ll for cursor 0 
2310: 69 73 20 61 4d 65 6d 5b 30 5d 2e 20 54 68 65 20  is aMem[0]. The 
2320: 72 65 73 74 20 61 72 65 20 61 6c 6c 6f 63 61 74  rest are allocat
2330: 65 64 20 66 72 6f 6d 0a 20 20 2a 2a 20 74 68 65  ed from.  ** the
2340: 20 74 6f 70 20 6f 66 20 74 68 65 20 72 65 67 69   top of the regi
2350: 73 74 65 72 20 73 70 61 63 65 2e 20 20 43 75 72  ster space.  Cur
2360: 73 6f 72 20 31 20 69 73 20 61 74 20 4d 65 6d 5b  sor 1 is at Mem[
2370: 70 2d 3e 6e 4d 65 6d 2d 31 5d 2e 0a 20 20 2a 2a  p->nMem-1]..  **
2380: 20 43 75 72 73 6f 72 20 32 20 69 73 20 61 74 20   Cursor 2 is at 
2390: 4d 65 6d 5b 70 2d 3e 6e 4d 65 6d 2d 32 5d 2e 20  Mem[p->nMem-2]. 
23a0: 41 6e 64 20 73 6f 20 66 6f 72 74 68 2e 0a 20 20  And so forth..  
23b0: 2a 2f 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d 20 3d  */.  Mem *pMem =
23c0: 20 69 43 75 72 3e 30 20 3f 20 26 70 2d 3e 61 4d   iCur>0 ? &p->aM
23d0: 65 6d 5b 70 2d 3e 6e 4d 65 6d 2d 69 43 75 72 5d  em[p->nMem-iCur]
23e0: 20 3a 20 70 2d 3e 61 4d 65 6d 3b 0a 0a 20 20 69   : p->aMem;..  i
23f0: 6e 74 20 6e 42 79 74 65 3b 0a 20 20 56 64 62 65  nt nByte;.  Vdbe
2400: 43 75 72 73 6f 72 20 2a 70 43 78 20 3d 20 30 3b  Cursor *pCx = 0;
2410: 0a 20 20 6e 42 79 74 65 20 3d 20 0a 20 20 20 20  .  nByte = .    
2420: 20 20 52 4f 55 4e 44 38 28 73 69 7a 65 6f 66 28    ROUND8(sizeof(
2430: 56 64 62 65 43 75 72 73 6f 72 29 29 20 2b 20 32  VdbeCursor)) + 2
2440: 2a 73 69 7a 65 6f 66 28 75 33 32 29 2a 6e 46 69  *sizeof(u32)*nFi
2450: 65 6c 64 20 2b 20 0a 20 20 20 20 20 20 28 65 43  eld + .      (eC
2460: 75 72 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f  urType==CURTYPE_
2470: 42 54 52 45 45 3f 73 71 6c 69 74 65 33 42 74 72  BTREE?sqlite3Btr
2480: 65 65 43 75 72 73 6f 72 53 69 7a 65 28 29 3a 30  eeCursorSize():0
2490: 29 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 69 43  );..  assert( iC
24a0: 75 72 3e 3d 30 20 26 26 20 69 43 75 72 3c 70 2d  ur>=0 && iCur<p-
24b0: 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 69 66  >nCursor );.  if
24c0: 28 20 70 2d 3e 61 70 43 73 72 5b 69 43 75 72 5d  ( p->apCsr[iCur]
24d0: 20 29 7b 20 2f 2a 4f 50 54 49 4d 49 5a 41 54 49   ){ /*OPTIMIZATI
24e0: 4f 4e 2d 49 46 2d 46 41 4c 53 45 2a 2f 0a 20 20  ON-IF-FALSE*/.  
24f0: 20 20 2f 2a 20 42 65 66 6f 72 65 20 63 61 6c 6c    /* Before call
2500: 69 6e 67 20 73 71 6c 69 74 65 33 56 64 62 65 46  ing sqlite3VdbeF
2510: 72 65 65 43 75 72 73 6f 72 28 29 2c 20 65 6e 73  reeCursor(), ens
2520: 75 72 65 20 74 68 65 20 69 73 45 70 68 65 6d 65  ure the isEpheme
2530: 72 61 6c 20 66 6c 61 67 0a 20 20 20 20 2a 2a 20  ral flag.    ** 
2540: 69 73 20 63 6c 65 61 72 2e 20 4f 74 68 65 72 77  is clear. Otherw
2550: 69 73 65 2c 20 69 66 20 74 68 69 73 20 69 73 20  ise, if this is 
2560: 61 6e 20 65 70 68 65 6d 65 72 61 6c 20 63 75 72  an ephemeral cur
2570: 73 6f 72 20 63 72 65 61 74 65 64 20 62 79 20 0a  sor created by .
2580: 20 20 20 20 2a 2a 20 4f 50 5f 4f 70 65 6e 44 75      ** OP_OpenDu
2590: 70 2c 20 74 68 65 20 63 75 72 73 6f 72 20 77 69  p, the cursor wi
25a0: 6c 6c 20 6e 6f 74 20 62 65 20 63 6c 6f 73 65 64  ll not be closed
25b0: 20 61 6e 64 20 77 69 6c 6c 20 73 74 69 6c 6c 20   and will still 
25c0: 62 65 20 70 61 72 74 0a 20 20 20 20 2a 2a 20 6f  be part.    ** o
25d0: 66 20 61 20 42 74 53 68 61 72 65 64 2e 70 43 75  f a BtShared.pCu
25e0: 72 73 6f 72 20 6c 69 73 74 2e 20 20 2a 2f 0a 20  rsor list.  */. 
25f0: 20 20 20 70 2d 3e 61 70 43 73 72 5b 69 43 75 72     p->apCsr[iCur
2600: 5d 2d 3e 69 73 45 70 68 65 6d 65 72 61 6c 20 3d  ]->isEphemeral =
2610: 20 30 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56   0;.    sqlite3V
2620: 64 62 65 46 72 65 65 43 75 72 73 6f 72 28 70 2c  dbeFreeCursor(p,
2630: 20 70 2d 3e 61 70 43 73 72 5b 69 43 75 72 5d 29   p->apCsr[iCur])
2640: 3b 0a 20 20 20 20 70 2d 3e 61 70 43 73 72 5b 69  ;.    p->apCsr[i
2650: 43 75 72 5d 20 3d 20 30 3b 0a 20 20 7d 0a 20 20  Cur] = 0;.  }.  
2660: 69 66 28 20 53 51 4c 49 54 45 5f 4f 4b 3d 3d 73  if( SQLITE_OK==s
2670: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 43 6c 65  qlite3VdbeMemCle
2680: 61 72 41 6e 64 52 65 73 69 7a 65 28 70 4d 65 6d  arAndResize(pMem
2690: 2c 20 6e 42 79 74 65 29 20 29 7b 0a 20 20 20 20  , nByte) ){.    
26a0: 70 2d 3e 61 70 43 73 72 5b 69 43 75 72 5d 20 3d  p->apCsr[iCur] =
26b0: 20 70 43 78 20 3d 20 28 56 64 62 65 43 75 72 73   pCx = (VdbeCurs
26c0: 6f 72 2a 29 70 4d 65 6d 2d 3e 7a 3b 0a 20 20 20  or*)pMem->z;.   
26d0: 20 6d 65 6d 73 65 74 28 70 43 78 2c 20 30 2c 20   memset(pCx, 0, 
26e0: 6f 66 66 73 65 74 6f 66 28 56 64 62 65 43 75 72  offsetof(VdbeCur
26f0: 73 6f 72 2c 70 41 6c 74 43 75 72 73 6f 72 29 29  sor,pAltCursor))
2700: 3b 0a 20 20 20 20 70 43 78 2d 3e 65 43 75 72 54  ;.    pCx->eCurT
2710: 79 70 65 20 3d 20 65 43 75 72 54 79 70 65 3b 0a  ype = eCurType;.
2720: 20 20 20 20 70 43 78 2d 3e 69 44 62 20 3d 20 69      pCx->iDb = i
2730: 44 62 3b 0a 20 20 20 20 70 43 78 2d 3e 6e 46 69  Db;.    pCx->nFi
2740: 65 6c 64 20 3d 20 6e 46 69 65 6c 64 3b 0a 20 20  eld = nField;.  
2750: 20 20 70 43 78 2d 3e 61 4f 66 66 73 65 74 20 3d    pCx->aOffset =
2760: 20 26 70 43 78 2d 3e 61 54 79 70 65 5b 6e 46 69   &pCx->aType[nFi
2770: 65 6c 64 5d 3b 0a 20 20 20 20 69 66 28 20 65 43  eld];.    if( eC
2780: 75 72 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f  urType==CURTYPE_
2790: 42 54 52 45 45 20 29 7b 0a 20 20 20 20 20 20 70  BTREE ){.      p
27a0: 43 78 2d 3e 75 63 2e 70 43 75 72 73 6f 72 20 3d  Cx->uc.pCursor =
27b0: 20 28 42 74 43 75 72 73 6f 72 2a 29 0a 20 20 20   (BtCursor*).   
27c0: 20 20 20 20 20 20 20 26 70 4d 65 6d 2d 3e 7a 5b         &pMem->z[
27d0: 52 4f 55 4e 44 38 28 73 69 7a 65 6f 66 28 56 64  ROUND8(sizeof(Vd
27e0: 62 65 43 75 72 73 6f 72 29 29 2b 32 2a 73 69 7a  beCursor))+2*siz
27f0: 65 6f 66 28 75 33 32 29 2a 6e 46 69 65 6c 64 5d  eof(u32)*nField]
2800: 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 42  ;.      sqlite3B
2810: 74 72 65 65 43 75 72 73 6f 72 5a 65 72 6f 28 70  treeCursorZero(p
2820: 43 78 2d 3e 75 63 2e 70 43 75 72 73 6f 72 29 3b  Cx->uc.pCursor);
2830: 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 72 65 74  .    }.  }.  ret
2840: 75 72 6e 20 70 43 78 3b 0a 7d 0a 0a 2f 2a 0a 2a  urn pCx;.}../*.*
2850: 2a 20 54 72 79 20 74 6f 20 63 6f 6e 76 65 72 74  * Try to convert
2860: 20 61 20 76 61 6c 75 65 20 69 6e 74 6f 20 61 20   a value into a 
2870: 6e 75 6d 65 72 69 63 20 72 65 70 72 65 73 65 6e  numeric represen
2880: 74 61 74 69 6f 6e 20 69 66 20 77 65 20 63 61 6e  tation if we can
2890: 0a 2a 2a 20 64 6f 20 73 6f 20 77 69 74 68 6f 75  .** do so withou
28a0: 74 20 6c 6f 73 73 20 6f 66 20 69 6e 66 6f 72 6d  t loss of inform
28b0: 61 74 69 6f 6e 2e 20 20 49 6e 20 6f 74 68 65 72  ation.  In other
28c0: 20 77 6f 72 64 73 2c 20 69 66 20 74 68 65 20 73   words, if the s
28d0: 74 72 69 6e 67 0a 2a 2a 20 6c 6f 6f 6b 73 20 6c  tring.** looks l
28e0: 69 6b 65 20 61 20 6e 75 6d 62 65 72 2c 20 63 6f  ike a number, co
28f0: 6e 76 65 72 74 20 69 74 20 69 6e 74 6f 20 61 20  nvert it into a 
2900: 6e 75 6d 62 65 72 2e 20 20 49 66 20 69 74 20 64  number.  If it d
2910: 6f 65 73 20 6e 6f 74 0a 2a 2a 20 6c 6f 6f 6b 20  oes not.** look 
2920: 6c 69 6b 65 20 61 20 6e 75 6d 62 65 72 2c 20 6c  like a number, l
2930: 65 61 76 65 20 69 74 20 61 6c 6f 6e 65 2e 0a 2a  eave it alone..*
2940: 2a 0a 2a 2a 20 49 66 20 74 68 65 20 62 54 72 79  *.** If the bTry
2950: 46 6f 72 49 6e 74 20 66 6c 61 67 20 69 73 20 74  ForInt flag is t
2960: 72 75 65 2c 20 74 68 65 6e 20 65 78 74 72 61 20  rue, then extra 
2970: 65 66 66 6f 72 74 20 69 73 20 6d 61 64 65 20 74  effort is made t
2980: 6f 20 67 69 76 65 0a 2a 2a 20 61 6e 20 69 6e 74  o give.** an int
2990: 65 67 65 72 20 72 65 70 72 65 73 65 6e 74 61 74  eger representat
29a0: 69 6f 6e 2e 20 20 53 74 72 69 6e 67 73 20 74 68  ion.  Strings th
29b0: 61 74 20 6c 6f 6f 6b 20 6c 69 6b 65 20 66 6c 6f  at look like flo
29c0: 61 74 69 6e 67 20 70 6f 69 6e 74 0a 2a 2a 20 76  ating point.** v
29d0: 61 6c 75 65 73 20 62 75 74 20 77 68 69 63 68 20  alues but which 
29e0: 68 61 76 65 20 6e 6f 20 66 72 61 63 74 69 6f 6e  have no fraction
29f0: 61 6c 20 63 6f 6d 70 6f 6e 65 6e 74 20 28 65 78  al component (ex
2a00: 61 6d 70 6c 65 3a 20 27 34 38 2e 30 30 27 29 0a  ample: '48.00').
2a10: 2a 2a 20 77 69 6c 6c 20 68 61 76 65 20 61 20 4d  ** will have a M
2a20: 45 4d 5f 49 6e 74 20 72 65 70 72 65 73 65 6e 74  EM_Int represent
2a30: 61 74 69 6f 6e 20 77 68 65 6e 20 62 54 72 79 46  ation when bTryF
2a40: 6f 72 49 6e 74 20 69 73 20 74 72 75 65 2e 0a 2a  orInt is true..*
2a50: 2a 0a 2a 2a 20 49 66 20 62 54 72 79 46 6f 72 49  *.** If bTryForI
2a60: 6e 74 20 69 73 20 66 61 6c 73 65 2c 20 74 68 65  nt is false, the
2a70: 6e 20 69 66 20 74 68 65 20 69 6e 70 75 74 20 73  n if the input s
2a80: 74 72 69 6e 67 20 63 6f 6e 74 61 69 6e 73 20 61  tring contains a
2a90: 20 64 65 63 69 6d 61 6c 0a 2a 2a 20 70 6f 69 6e   decimal.** poin
2aa0: 74 20 6f 72 20 65 78 70 6f 6e 65 6e 74 69 61 6c  t or exponential
2ab0: 20 6e 6f 74 61 74 69 6f 6e 2c 20 74 68 65 20 72   notation, the r
2ac0: 65 73 75 6c 74 20 69 73 20 6f 6e 6c 79 20 4d 45  esult is only ME
2ad0: 4d 5f 52 65 61 6c 2c 20 65 76 65 6e 0a 2a 2a 20  M_Real, even.** 
2ae0: 69 66 20 74 68 65 72 65 20 69 73 20 61 6e 20 65  if there is an e
2af0: 78 61 63 74 20 69 6e 74 65 67 65 72 20 72 65 70  xact integer rep
2b00: 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74  resentation of t
2b10: 68 65 20 71 75 61 6e 74 69 74 79 2e 0a 2a 2f 0a  he quantity..*/.
2b20: 73 74 61 74 69 63 20 76 6f 69 64 20 61 70 70 6c  static void appl
2b30: 79 4e 75 6d 65 72 69 63 41 66 66 69 6e 69 74 79  yNumericAffinity
2b40: 28 4d 65 6d 20 2a 70 52 65 63 2c 20 69 6e 74 20  (Mem *pRec, int 
2b50: 62 54 72 79 46 6f 72 49 6e 74 29 7b 0a 20 20 64  bTryForInt){.  d
2b60: 6f 75 62 6c 65 20 72 56 61 6c 75 65 3b 0a 20 20  ouble rValue;.  
2b70: 69 36 34 20 69 56 61 6c 75 65 3b 0a 20 20 75 38  i64 iValue;.  u8
2b80: 20 65 6e 63 20 3d 20 70 52 65 63 2d 3e 65 6e 63   enc = pRec->enc
2b90: 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70 52 65  ;.  assert( (pRe
2ba0: 63 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f  c->flags & (MEM_
2bb0: 53 74 72 7c 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f  Str|MEM_Int|MEM_
2bc0: 52 65 61 6c 29 29 3d 3d 4d 45 4d 5f 53 74 72 20  Real))==MEM_Str 
2bd0: 29 3b 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33  );.  if( sqlite3
2be0: 41 74 6f 46 28 70 52 65 63 2d 3e 7a 2c 20 26 72  AtoF(pRec->z, &r
2bf0: 56 61 6c 75 65 2c 20 70 52 65 63 2d 3e 6e 2c 20  Value, pRec->n, 
2c00: 65 6e 63 29 3d 3d 30 20 29 20 72 65 74 75 72 6e  enc)==0 ) return
2c10: 3b 0a 20 20 69 66 28 20 30 3d 3d 73 71 6c 69 74  ;.  if( 0==sqlit
2c20: 65 33 41 74 6f 69 36 34 28 70 52 65 63 2d 3e 7a  e3Atoi64(pRec->z
2c30: 2c 20 26 69 56 61 6c 75 65 2c 20 70 52 65 63 2d  , &iValue, pRec-
2c40: 3e 6e 2c 20 65 6e 63 29 20 29 7b 0a 20 20 20 20  >n, enc) ){.    
2c50: 70 52 65 63 2d 3e 75 2e 69 20 3d 20 69 56 61 6c  pRec->u.i = iVal
2c60: 75 65 3b 0a 20 20 20 20 70 52 65 63 2d 3e 66 6c  ue;.    pRec->fl
2c70: 61 67 73 20 7c 3d 20 4d 45 4d 5f 49 6e 74 3b 0a  ags |= MEM_Int;.
2c80: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70 52 65    }else{.    pRe
2c90: 63 2d 3e 75 2e 72 20 3d 20 72 56 61 6c 75 65 3b  c->u.r = rValue;
2ca0: 0a 20 20 20 20 70 52 65 63 2d 3e 66 6c 61 67 73  .    pRec->flags
2cb0: 20 7c 3d 20 4d 45 4d 5f 52 65 61 6c 3b 0a 20 20   |= MEM_Real;.  
2cc0: 20 20 69 66 28 20 62 54 72 79 46 6f 72 49 6e 74    if( bTryForInt
2cd0: 20 29 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e   ) sqlite3VdbeIn
2ce0: 74 65 67 65 72 41 66 66 69 6e 69 74 79 28 70 52  tegerAffinity(pR
2cf0: 65 63 29 3b 0a 20 20 7d 0a 20 20 2f 2a 20 54 45  ec);.  }.  /* TE
2d00: 58 54 2d 3e 4e 55 4d 45 52 49 43 20 69 73 20 6d  XT->NUMERIC is m
2d10: 61 6e 79 2d 3e 6f 6e 65 2e 20 20 48 65 6e 63 65  any->one.  Hence
2d20: 2c 20 69 74 20 69 73 20 69 6d 70 6f 72 74 61 6e  , it is importan
2d30: 74 20 74 6f 20 69 6e 76 61 6c 69 64 61 74 65 20  t to invalidate 
2d40: 74 68 65 0a 20 20 2a 2a 20 73 74 72 69 6e 67 20  the.  ** string 
2d50: 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 61  representation a
2d60: 66 74 65 72 20 63 6f 6d 70 75 74 69 6e 67 20 61  fter computing a
2d70: 20 6e 75 6d 65 72 69 63 20 65 71 75 69 76 61 6c   numeric equival
2d80: 65 6e 74 2c 20 62 65 63 61 75 73 65 20 74 68 65  ent, because the
2d90: 0a 20 20 2a 2a 20 73 74 72 69 6e 67 20 72 65 70  .  ** string rep
2da0: 72 65 73 65 6e 74 61 74 69 6f 6e 20 6d 69 67 68  resentation migh
2db0: 74 20 6e 6f 74 20 62 65 20 74 68 65 20 63 61 6e  t not be the can
2dc0: 6f 6e 69 63 61 6c 20 72 65 70 72 65 73 65 6e 74  onical represent
2dd0: 61 74 69 6f 6e 20 66 6f 72 20 74 68 65 0a 20 20  ation for the.  
2de0: 2a 2a 20 6e 75 6d 65 72 69 63 20 76 61 6c 75 65  ** numeric value
2df0: 2e 20 20 54 69 63 6b 65 74 20 5b 33 34 33 36 33  .  Ticket [34363
2e00: 34 39 34 32 64 64 35 34 61 62 35 37 62 37 30 32  4942dd54ab57b702
2e10: 34 5d 20 32 30 31 38 2d 30 31 2d 33 31 2e 20 2a  4] 2018-01-31. *
2e20: 2f 0a 20 20 70 52 65 63 2d 3e 66 6c 61 67 73 20  /.  pRec->flags 
2e30: 26 3d 20 7e 4d 45 4d 5f 53 74 72 3b 0a 7d 0a 0a  &= ~MEM_Str;.}..
2e40: 2f 2a 0a 2a 2a 20 50 72 6f 63 65 73 73 69 6e 67  /*.** Processing
2e50: 20 69 73 20 64 65 74 65 72 6d 69 6e 65 20 62 79   is determine by
2e60: 20 74 68 65 20 61 66 66 69 6e 69 74 79 20 70 61   the affinity pa
2e70: 72 61 6d 65 74 65 72 3a 0a 2a 2a 0a 2a 2a 20 53  rameter:.**.** S
2e80: 51 4c 49 54 45 5f 41 46 46 5f 49 4e 54 45 47 45  QLITE_AFF_INTEGE
2e90: 52 3a 0a 2a 2a 20 53 51 4c 49 54 45 5f 41 46 46  R:.** SQLITE_AFF
2ea0: 5f 52 45 41 4c 3a 0a 2a 2a 20 53 51 4c 49 54 45  _REAL:.** SQLITE
2eb0: 5f 41 46 46 5f 4e 55 4d 45 52 49 43 3a 0a 2a 2a  _AFF_NUMERIC:.**
2ec0: 20 20 20 20 54 72 79 20 74 6f 20 63 6f 6e 76 65      Try to conve
2ed0: 72 74 20 70 52 65 63 20 74 6f 20 61 6e 20 69 6e  rt pRec to an in
2ee0: 74 65 67 65 72 20 72 65 70 72 65 73 65 6e 74 61  teger representa
2ef0: 74 69 6f 6e 20 6f 72 20 61 20 0a 2a 2a 20 20 20  tion or a .**   
2f00: 20 66 6c 6f 61 74 69 6e 67 2d 70 6f 69 6e 74 20   floating-point 
2f10: 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 69  representation i
2f20: 66 20 61 6e 20 69 6e 74 65 67 65 72 20 72 65 70  f an integer rep
2f30: 72 65 73 65 6e 74 61 74 69 6f 6e 0a 2a 2a 20 20  resentation.**  
2f40: 20 20 69 73 20 6e 6f 74 20 70 6f 73 73 69 62 6c    is not possibl
2f50: 65 2e 20 20 4e 6f 74 65 20 74 68 61 74 20 74 68  e.  Note that th
2f60: 65 20 69 6e 74 65 67 65 72 20 72 65 70 72 65 73  e integer repres
2f70: 65 6e 74 61 74 69 6f 6e 20 69 73 0a 2a 2a 20 20  entation is.**  
2f80: 20 20 61 6c 77 61 79 73 20 70 72 65 66 65 72 72    always preferr
2f90: 65 64 2c 20 65 76 65 6e 20 69 66 20 74 68 65 20  ed, even if the 
2fa0: 61 66 66 69 6e 69 74 79 20 69 73 20 52 45 41 4c  affinity is REAL
2fb0: 2c 20 62 65 63 61 75 73 65 0a 2a 2a 20 20 20 20  , because.**    
2fc0: 61 6e 20 69 6e 74 65 67 65 72 20 72 65 70 72 65  an integer repre
2fd0: 73 65 6e 74 61 74 69 6f 6e 20 69 73 20 6d 6f 72  sentation is mor
2fe0: 65 20 73 70 61 63 65 20 65 66 66 69 63 69 65 6e  e space efficien
2ff0: 74 20 6f 6e 20 64 69 73 6b 2e 0a 2a 2a 0a 2a 2a  t on disk..**.**
3000: 20 53 51 4c 49 54 45 5f 41 46 46 5f 54 45 58 54   SQLITE_AFF_TEXT
3010: 3a 0a 2a 2a 20 20 20 20 43 6f 6e 76 65 72 74 20  :.**    Convert 
3020: 70 52 65 63 20 74 6f 20 61 20 74 65 78 74 20 72  pRec to a text r
3030: 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 2e 0a 2a  epresentation..*
3040: 2a 0a 2a 2a 20 53 51 4c 49 54 45 5f 41 46 46 5f  *.** SQLITE_AFF_
3050: 42 4c 4f 42 3a 0a 2a 2a 20 20 20 20 4e 6f 2d 6f  BLOB:.**    No-o
3060: 70 2e 20 20 70 52 65 63 20 69 73 20 75 6e 63 68  p.  pRec is unch
3070: 61 6e 67 65 64 2e 0a 2a 2f 0a 73 74 61 74 69 63  anged..*/.static
3080: 20 76 6f 69 64 20 61 70 70 6c 79 41 66 66 69 6e   void applyAffin
3090: 69 74 79 28 0a 20 20 4d 65 6d 20 2a 70 52 65 63  ity(.  Mem *pRec
30a0: 2c 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68  ,          /* Th
30b0: 65 20 76 61 6c 75 65 20 74 6f 20 61 70 70 6c 79  e value to apply
30c0: 20 61 66 66 69 6e 69 74 79 20 74 6f 20 2a 2f 0a   affinity to */.
30d0: 20 20 63 68 61 72 20 61 66 66 69 6e 69 74 79 2c    char affinity,
30e0: 20 20 20 20 20 20 2f 2a 20 54 68 65 20 61 66 66        /* The aff
30f0: 69 6e 69 74 79 20 74 6f 20 62 65 20 61 70 70 6c  inity to be appl
3100: 69 65 64 20 2a 2f 0a 20 20 75 38 20 65 6e 63 20  ied */.  u8 enc 
3110: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
3120: 55 73 65 20 74 68 69 73 20 74 65 78 74 20 65 6e  Use this text en
3130: 63 6f 64 69 6e 67 20 2a 2f 0a 29 7b 0a 20 20 69  coding */.){.  i
3140: 66 28 20 61 66 66 69 6e 69 74 79 3e 3d 53 51 4c  f( affinity>=SQL
3150: 49 54 45 5f 41 46 46 5f 4e 55 4d 45 52 49 43 20  ITE_AFF_NUMERIC 
3160: 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 61  ){.    assert( a
3170: 66 66 69 6e 69 74 79 3d 3d 53 51 4c 49 54 45 5f  ffinity==SQLITE_
3180: 41 46 46 5f 49 4e 54 45 47 45 52 20 7c 7c 20 61  AFF_INTEGER || a
3190: 66 66 69 6e 69 74 79 3d 3d 53 51 4c 49 54 45 5f  ffinity==SQLITE_
31a0: 41 46 46 5f 52 45 41 4c 0a 20 20 20 20 20 20 20  AFF_REAL.       
31b0: 20 20 20 20 20 20 7c 7c 20 61 66 66 69 6e 69 74        || affinit
31c0: 79 3d 3d 53 51 4c 49 54 45 5f 41 46 46 5f 4e 55  y==SQLITE_AFF_NU
31d0: 4d 45 52 49 43 20 29 3b 0a 20 20 20 20 69 66 28  MERIC );.    if(
31e0: 20 28 70 52 65 63 2d 3e 66 6c 61 67 73 20 26 20   (pRec->flags & 
31f0: 4d 45 4d 5f 49 6e 74 29 3d 3d 30 20 29 7b 20 2f  MEM_Int)==0 ){ /
3200: 2a 4f 50 54 49 4d 49 5a 41 54 49 4f 4e 2d 49 46  *OPTIMIZATION-IF
3210: 2d 46 41 4c 53 45 2a 2f 0a 20 20 20 20 20 20 69  -FALSE*/.      i
3220: 66 28 20 28 70 52 65 63 2d 3e 66 6c 61 67 73 20  f( (pRec->flags 
3230: 26 20 4d 45 4d 5f 52 65 61 6c 29 3d 3d 30 20 29  & MEM_Real)==0 )
3240: 7b 0a 20 20 20 20 20 20 20 20 69 66 28 20 70 52  {.        if( pR
3250: 65 63 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  ec->flags & MEM_
3260: 53 74 72 20 29 20 61 70 70 6c 79 4e 75 6d 65 72  Str ) applyNumer
3270: 69 63 41 66 66 69 6e 69 74 79 28 70 52 65 63 2c  icAffinity(pRec,
3280: 31 29 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b  1);.      }else{
3290: 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
32a0: 56 64 62 65 49 6e 74 65 67 65 72 41 66 66 69 6e  VdbeIntegerAffin
32b0: 69 74 79 28 70 52 65 63 29 3b 0a 20 20 20 20 20  ity(pRec);.     
32c0: 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65   }.    }.  }else
32d0: 20 69 66 28 20 61 66 66 69 6e 69 74 79 3d 3d 53   if( affinity==S
32e0: 51 4c 49 54 45 5f 41 46 46 5f 54 45 58 54 20 29  QLITE_AFF_TEXT )
32f0: 7b 0a 20 20 20 20 2f 2a 20 4f 6e 6c 79 20 61 74  {.    /* Only at
3300: 74 65 6d 70 74 20 74 68 65 20 63 6f 6e 76 65 72  tempt the conver
3310: 73 69 6f 6e 20 74 6f 20 54 45 58 54 20 69 66 20  sion to TEXT if 
3320: 74 68 65 72 65 20 69 73 20 61 6e 20 69 6e 74 65  there is an inte
3330: 67 65 72 20 6f 72 20 72 65 61 6c 0a 20 20 20 20  ger or real.    
3340: 2a 2a 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f  ** representatio
3350: 6e 20 28 62 6c 6f 62 20 61 6e 64 20 4e 55 4c 4c  n (blob and NULL
3360: 20 64 6f 20 6e 6f 74 20 67 65 74 20 63 6f 6e 76   do not get conv
3370: 65 72 74 65 64 29 20 62 75 74 20 6e 6f 20 73 74  erted) but no st
3380: 72 69 6e 67 0a 20 20 20 20 2a 2a 20 72 65 70 72  ring.    ** repr
3390: 65 73 65 6e 74 61 74 69 6f 6e 2e 20 20 49 74 20  esentation.  It 
33a0: 77 6f 75 6c 64 20 62 65 20 68 61 72 6d 6c 65 73  would be harmles
33b0: 73 20 74 6f 20 72 65 70 65 61 74 20 74 68 65 20  s to repeat the 
33c0: 63 6f 6e 76 65 72 73 69 6f 6e 20 69 66 20 0a 20  conversion if . 
33d0: 20 20 20 2a 2a 20 74 68 65 72 65 20 69 73 20 61     ** there is a
33e0: 6c 72 65 61 64 79 20 61 20 73 74 72 69 6e 67 20  lready a string 
33f0: 72 65 70 2c 20 62 75 74 20 69 74 20 69 73 20 70  rep, but it is p
3400: 6f 69 6e 74 6c 65 73 73 20 74 6f 20 77 61 73 74  ointless to wast
3410: 65 20 74 68 6f 73 65 0a 20 20 20 20 2a 2a 20 43  e those.    ** C
3420: 50 55 20 63 79 63 6c 65 73 2e 20 2a 2f 0a 20 20  PU cycles. */.  
3430: 20 20 69 66 28 20 30 3d 3d 28 70 52 65 63 2d 3e    if( 0==(pRec->
3440: 66 6c 61 67 73 26 4d 45 4d 5f 53 74 72 29 20 29  flags&MEM_Str) )
3450: 7b 20 2f 2a 4f 50 54 49 4d 49 5a 41 54 49 4f 4e  { /*OPTIMIZATION
3460: 2d 49 46 2d 46 41 4c 53 45 2a 2f 0a 20 20 20 20  -IF-FALSE*/.    
3470: 20 20 69 66 28 20 28 70 52 65 63 2d 3e 66 6c 61    if( (pRec->fla
3480: 67 73 26 28 4d 45 4d 5f 52 65 61 6c 7c 4d 45 4d  gs&(MEM_Real|MEM
3490: 5f 49 6e 74 29 29 20 29 7b 0a 20 20 20 20 20 20  _Int)) ){.      
34a0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
34b0: 53 74 72 69 6e 67 69 66 79 28 70 52 65 63 2c 20  Stringify(pRec, 
34c0: 65 6e 63 2c 20 31 29 3b 0a 20 20 20 20 20 20 7d  enc, 1);.      }
34d0: 0a 20 20 20 20 7d 0a 20 20 20 20 70 52 65 63 2d  .    }.    pRec-
34e0: 3e 66 6c 61 67 73 20 26 3d 20 7e 28 4d 45 4d 5f  >flags &= ~(MEM_
34f0: 52 65 61 6c 7c 4d 45 4d 5f 49 6e 74 29 3b 0a 20  Real|MEM_Int);. 
3500: 20 7d 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 72 79 20   }.}../*.** Try 
3510: 74 6f 20 63 6f 6e 76 65 72 74 20 74 68 65 20 74  to convert the t
3520: 79 70 65 20 6f 66 20 61 20 66 75 6e 63 74 69 6f  ype of a functio
3530: 6e 20 61 72 67 75 6d 65 6e 74 20 6f 72 20 61 20  n argument or a 
3540: 72 65 73 75 6c 74 20 63 6f 6c 75 6d 6e 0a 2a 2a  result column.**
3550: 20 69 6e 74 6f 20 61 20 6e 75 6d 65 72 69 63 20   into a numeric 
3560: 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 2e 20  representation. 
3570: 20 55 73 65 20 65 69 74 68 65 72 20 49 4e 54 45   Use either INTE
3580: 47 45 52 20 6f 72 20 52 45 41 4c 20 77 68 69 63  GER or REAL whic
3590: 68 65 76 65 72 0a 2a 2a 20 69 73 20 61 70 70 72  hever.** is appr
35a0: 6f 70 72 69 61 74 65 2e 20 20 42 75 74 20 6f 6e  opriate.  But on
35b0: 6c 79 20 64 6f 20 74 68 65 20 63 6f 6e 76 65 72  ly do the conver
35c0: 73 69 6f 6e 20 69 66 20 69 74 20 69 73 20 70 6f  sion if it is po
35d0: 73 73 69 62 6c 65 20 77 69 74 68 6f 75 74 0a 2a  ssible without.*
35e0: 2a 20 6c 6f 73 73 20 6f 66 20 69 6e 66 6f 72 6d  * loss of inform
35f0: 61 74 69 6f 6e 20 61 6e 64 20 72 65 74 75 72 6e  ation and return
3600: 20 74 68 65 20 72 65 76 69 73 65 64 20 74 79 70   the revised typ
3610: 65 20 6f 66 20 74 68 65 20 61 72 67 75 6d 65 6e  e of the argumen
3620: 74 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65  t..*/.int sqlite
3630: 33 5f 76 61 6c 75 65 5f 6e 75 6d 65 72 69 63 5f  3_value_numeric_
3640: 74 79 70 65 28 73 71 6c 69 74 65 33 5f 76 61 6c  type(sqlite3_val
3650: 75 65 20 2a 70 56 61 6c 29 7b 0a 20 20 69 6e 74  ue *pVal){.  int
3660: 20 65 54 79 70 65 20 3d 20 73 71 6c 69 74 65 33   eType = sqlite3
3670: 5f 76 61 6c 75 65 5f 74 79 70 65 28 70 56 61 6c  _value_type(pVal
3680: 29 3b 0a 20 20 69 66 28 20 65 54 79 70 65 3d 3d  );.  if( eType==
3690: 53 51 4c 49 54 45 5f 54 45 58 54 20 29 7b 0a 20  SQLITE_TEXT ){. 
36a0: 20 20 20 4d 65 6d 20 2a 70 4d 65 6d 20 3d 20 28     Mem *pMem = (
36b0: 4d 65 6d 2a 29 70 56 61 6c 3b 0a 20 20 20 20 61  Mem*)pVal;.    a
36c0: 70 70 6c 79 4e 75 6d 65 72 69 63 41 66 66 69 6e  pplyNumericAffin
36d0: 69 74 79 28 70 4d 65 6d 2c 20 30 29 3b 0a 20 20  ity(pMem, 0);.  
36e0: 20 20 65 54 79 70 65 20 3d 20 73 71 6c 69 74 65    eType = sqlite
36f0: 33 5f 76 61 6c 75 65 5f 74 79 70 65 28 70 56 61  3_value_type(pVa
3700: 6c 29 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e  l);.  }.  return
3710: 20 65 54 79 70 65 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a   eType;.}../*.**
3720: 20 45 78 70 6f 72 74 65 64 20 76 65 72 73 69 6f   Exported versio
3730: 6e 20 6f 66 20 61 70 70 6c 79 41 66 66 69 6e 69  n of applyAffini
3740: 74 79 28 29 2e 20 54 68 69 73 20 6f 6e 65 20 77  ty(). This one w
3750: 6f 72 6b 73 20 6f 6e 20 73 71 6c 69 74 65 33 5f  orks on sqlite3_
3760: 76 61 6c 75 65 2a 2c 20 0a 2a 2a 20 6e 6f 74 20  value*, .** not 
3770: 74 68 65 20 69 6e 74 65 72 6e 61 6c 20 4d 65 6d  the internal Mem
3780: 2a 20 74 79 70 65 2e 0a 2a 2f 0a 76 6f 69 64 20  * type..*/.void 
3790: 73 71 6c 69 74 65 33 56 61 6c 75 65 41 70 70 6c  sqlite3ValueAppl
37a0: 79 41 66 66 69 6e 69 74 79 28 0a 20 20 73 71 6c  yAffinity(.  sql
37b0: 69 74 65 33 5f 76 61 6c 75 65 20 2a 70 56 61 6c  ite3_value *pVal
37c0: 2c 20 0a 20 20 75 38 20 61 66 66 69 6e 69 74 79  , .  u8 affinity
37d0: 2c 20 0a 20 20 75 38 20 65 6e 63 0a 29 7b 0a 20  , .  u8 enc.){. 
37e0: 20 61 70 70 6c 79 41 66 66 69 6e 69 74 79 28 28   applyAffinity((
37f0: 4d 65 6d 20 2a 29 70 56 61 6c 2c 20 61 66 66 69  Mem *)pVal, affi
3800: 6e 69 74 79 2c 20 65 6e 63 29 3b 0a 7d 0a 0a 2f  nity, enc);.}../
3810: 2a 0a 2a 2a 20 70 4d 65 6d 20 63 75 72 72 65 6e  *.** pMem curren
3820: 74 6c 79 20 6f 6e 6c 79 20 68 6f 6c 64 73 20 61  tly only holds a
3830: 20 73 74 72 69 6e 67 20 74 79 70 65 20 28 6f 72   string type (or
3840: 20 6d 61 79 62 65 20 61 20 42 4c 4f 42 20 74 68   maybe a BLOB th
3850: 61 74 20 77 65 20 63 61 6e 0a 2a 2a 20 69 6e 74  at we can.** int
3860: 65 72 70 72 65 74 20 61 73 20 61 20 73 74 72 69  erpret as a stri
3870: 6e 67 20 69 66 20 77 65 20 77 61 6e 74 20 74 6f  ng if we want to
3880: 29 2e 20 20 43 6f 6d 70 75 74 65 20 69 74 73 20  ).  Compute its 
3890: 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 0a 2a 2a  corresponding.**
38a0: 20 6e 75 6d 65 72 69 63 20 74 79 70 65 2c 20 69   numeric type, i
38b0: 66 20 68 61 73 20 6f 6e 65 2e 20 20 53 65 74 20  f has one.  Set 
38c0: 74 68 65 20 70 4d 65 6d 2d 3e 75 2e 72 20 61 6e  the pMem->u.r an
38d0: 64 20 70 4d 65 6d 2d 3e 75 2e 69 20 66 69 65 6c  d pMem->u.i fiel
38e0: 64 73 0a 2a 2a 20 61 63 63 6f 72 64 69 6e 67 6c  ds.** accordingl
38f0: 79 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 75 31 36  y..*/.static u16
3900: 20 53 51 4c 49 54 45 5f 4e 4f 49 4e 4c 49 4e 45   SQLITE_NOINLINE
3910: 20 63 6f 6d 70 75 74 65 4e 75 6d 65 72 69 63 54   computeNumericT
3920: 79 70 65 28 4d 65 6d 20 2a 70 4d 65 6d 29 7b 0a  ype(Mem *pMem){.
3930: 20 20 61 73 73 65 72 74 28 20 28 70 4d 65 6d 2d    assert( (pMem-
3940: 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f 49 6e  >flags & (MEM_In
3950: 74 7c 4d 45 4d 5f 52 65 61 6c 29 29 3d 3d 30 20  t|MEM_Real))==0 
3960: 29 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70 4d  );.  assert( (pM
3970: 65 6d 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d  em->flags & (MEM
3980: 5f 53 74 72 7c 4d 45 4d 5f 42 6c 6f 62 29 29 21  _Str|MEM_Blob))!
3990: 3d 30 20 29 3b 0a 20 20 45 78 70 61 6e 64 42 6c  =0 );.  ExpandBl
39a0: 6f 62 28 70 4d 65 6d 29 3b 0a 20 20 69 66 28 20  ob(pMem);.  if( 
39b0: 73 71 6c 69 74 65 33 41 74 6f 46 28 70 4d 65 6d  sqlite3AtoF(pMem
39c0: 2d 3e 7a 2c 20 26 70 4d 65 6d 2d 3e 75 2e 72 2c  ->z, &pMem->u.r,
39d0: 20 70 4d 65 6d 2d 3e 6e 2c 20 70 4d 65 6d 2d 3e   pMem->n, pMem->
39e0: 65 6e 63 29 3d 3d 30 20 29 7b 0a 20 20 20 20 72  enc)==0 ){.    r
39f0: 65 74 75 72 6e 20 30 3b 0a 20 20 7d 0a 20 20 69  eturn 0;.  }.  i
3a00: 66 28 20 73 71 6c 69 74 65 33 41 74 6f 69 36 34  f( sqlite3Atoi64
3a10: 28 70 4d 65 6d 2d 3e 7a 2c 20 26 70 4d 65 6d 2d  (pMem->z, &pMem-
3a20: 3e 75 2e 69 2c 20 70 4d 65 6d 2d 3e 6e 2c 20 70  >u.i, pMem->n, p
3a30: 4d 65 6d 2d 3e 65 6e 63 29 3d 3d 30 20 29 7b 0a  Mem->enc)==0 ){.
3a40: 20 20 20 20 72 65 74 75 72 6e 20 4d 45 4d 5f 49      return MEM_I
3a50: 6e 74 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e  nt;.  }.  return
3a60: 20 4d 45 4d 5f 52 65 61 6c 3b 0a 7d 0a 0a 2f 2a   MEM_Real;.}../*
3a70: 0a 2a 2a 20 52 65 74 75 72 6e 20 74 68 65 20 6e  .** Return the n
3a80: 75 6d 65 72 69 63 20 74 79 70 65 20 66 6f 72 20  umeric type for 
3a90: 70 4d 65 6d 2c 20 65 69 74 68 65 72 20 4d 45 4d  pMem, either MEM
3aa0: 5f 49 6e 74 20 6f 72 20 4d 45 4d 5f 52 65 61 6c  _Int or MEM_Real
3ab0: 20 6f 72 20 62 6f 74 68 20 6f 72 0a 2a 2a 20 6e   or both or.** n
3ac0: 6f 6e 65 2e 20 20 0a 2a 2a 0a 2a 2a 20 55 6e 6c  one.  .**.** Unl
3ad0: 69 6b 65 20 61 70 70 6c 79 4e 75 6d 65 72 69 63  ike applyNumeric
3ae0: 41 66 66 69 6e 69 74 79 28 29 2c 20 74 68 69 73  Affinity(), this
3af0: 20 72 6f 75 74 69 6e 65 20 64 6f 65 73 20 6e 6f   routine does no
3b00: 74 20 6d 6f 64 69 66 79 20 70 4d 65 6d 2d 3e 66  t modify pMem->f
3b10: 6c 61 67 73 2e 0a 2a 2a 20 42 75 74 20 69 74 20  lags..** But it 
3b20: 64 6f 65 73 20 73 65 74 20 70 4d 65 6d 2d 3e 75  does set pMem->u
3b30: 2e 72 20 61 6e 64 20 70 4d 65 6d 2d 3e 75 2e 69  .r and pMem->u.i
3b40: 20 61 70 70 72 6f 70 72 69 61 74 65 6c 79 2e 0a   appropriately..
3b50: 2a 2f 0a 73 74 61 74 69 63 20 75 31 36 20 6e 75  */.static u16 nu
3b60: 6d 65 72 69 63 54 79 70 65 28 4d 65 6d 20 2a 70  mericType(Mem *p
3b70: 4d 65 6d 29 7b 0a 20 20 69 66 28 20 70 4d 65 6d  Mem){.  if( pMem
3b80: 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f 49  ->flags & (MEM_I
3b90: 6e 74 7c 4d 45 4d 5f 52 65 61 6c 29 20 29 7b 0a  nt|MEM_Real) ){.
3ba0: 20 20 20 20 72 65 74 75 72 6e 20 70 4d 65 6d 2d      return pMem-
3bb0: 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f 49 6e  >flags & (MEM_In
3bc0: 74 7c 4d 45 4d 5f 52 65 61 6c 29 3b 0a 20 20 7d  t|MEM_Real);.  }
3bd0: 0a 20 20 69 66 28 20 70 4d 65 6d 2d 3e 66 6c 61  .  if( pMem->fla
3be0: 67 73 20 26 20 28 4d 45 4d 5f 53 74 72 7c 4d 45  gs & (MEM_Str|ME
3bf0: 4d 5f 42 6c 6f 62 29 20 29 7b 0a 20 20 20 20 72  M_Blob) ){.    r
3c00: 65 74 75 72 6e 20 63 6f 6d 70 75 74 65 4e 75 6d  eturn computeNum
3c10: 65 72 69 63 54 79 70 65 28 70 4d 65 6d 29 3b 0a  ericType(pMem);.
3c20: 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 30 3b 0a    }.  return 0;.
3c30: 7d 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  }..#ifdef SQLITE
3c40: 5f 44 45 42 55 47 0a 2f 2a 0a 2a 2a 20 57 72 69  _DEBUG./*.** Wri
3c50: 74 65 20 61 20 6e 69 63 65 20 73 74 72 69 6e 67  te a nice string
3c60: 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20   representation 
3c70: 6f 66 20 74 68 65 20 63 6f 6e 74 65 6e 74 73 20  of the contents 
3c80: 6f 66 20 63 65 6c 6c 20 70 4d 65 6d 0a 2a 2a 20  of cell pMem.** 
3c90: 69 6e 74 6f 20 62 75 66 66 65 72 20 7a 42 75 66  into buffer zBuf
3ca0: 2c 20 6c 65 6e 67 74 68 20 6e 42 75 66 2e 0a 2a  , length nBuf..*
3cb0: 2f 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 64  /.void sqlite3Vd
3cc0: 62 65 4d 65 6d 50 72 65 74 74 79 50 72 69 6e 74  beMemPrettyPrint
3cd0: 28 4d 65 6d 20 2a 70 4d 65 6d 2c 20 63 68 61 72  (Mem *pMem, char
3ce0: 20 2a 7a 42 75 66 29 7b 0a 20 20 63 68 61 72 20   *zBuf){.  char 
3cf0: 2a 7a 43 73 72 20 3d 20 7a 42 75 66 3b 0a 20 20  *zCsr = zBuf;.  
3d00: 69 6e 74 20 66 20 3d 20 70 4d 65 6d 2d 3e 66 6c  int f = pMem->fl
3d10: 61 67 73 3b 0a 0a 20 20 73 74 61 74 69 63 20 63  ags;..  static c
3d20: 6f 6e 73 74 20 63 68 61 72 20 2a 63 6f 6e 73 74  onst char *const
3d30: 20 65 6e 63 6e 61 6d 65 73 5b 5d 20 3d 20 7b 22   encnames[] = {"
3d40: 28 58 29 22 2c 20 22 28 38 29 22 2c 20 22 28 31  (X)", "(8)", "(1
3d50: 36 4c 45 29 22 2c 20 22 28 31 36 42 45 29 22 7d  6LE)", "(16BE)"}
3d60: 3b 0a 0a 20 20 69 66 28 20 66 26 4d 45 4d 5f 42  ;..  if( f&MEM_B
3d70: 6c 6f 62 20 29 7b 0a 20 20 20 20 69 6e 74 20 69  lob ){.    int i
3d80: 3b 0a 20 20 20 20 63 68 61 72 20 63 3b 0a 20 20  ;.    char c;.  
3d90: 20 20 69 66 28 20 66 20 26 20 4d 45 4d 5f 44 79    if( f & MEM_Dy
3da0: 6e 20 29 7b 0a 20 20 20 20 20 20 63 20 3d 20 27  n ){.      c = '
3db0: 7a 27 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74  z';.      assert
3dc0: 28 20 28 66 20 26 20 28 4d 45 4d 5f 53 74 61 74  ( (f & (MEM_Stat
3dd0: 69 63 7c 4d 45 4d 5f 45 70 68 65 6d 29 29 3d 3d  ic|MEM_Ephem))==
3de0: 30 20 29 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69  0 );.    }else i
3df0: 66 28 20 66 20 26 20 4d 45 4d 5f 53 74 61 74 69  f( f & MEM_Stati
3e00: 63 20 29 7b 0a 20 20 20 20 20 20 63 20 3d 20 27  c ){.      c = '
3e10: 74 27 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74  t';.      assert
3e20: 28 20 28 66 20 26 20 28 4d 45 4d 5f 44 79 6e 7c  ( (f & (MEM_Dyn|
3e30: 4d 45 4d 5f 45 70 68 65 6d 29 29 3d 3d 30 20 29  MEM_Ephem))==0 )
3e40: 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20  ;.    }else if( 
3e50: 66 20 26 20 4d 45 4d 5f 45 70 68 65 6d 20 29 7b  f & MEM_Ephem ){
3e60: 0a 20 20 20 20 20 20 63 20 3d 20 27 65 27 3b 0a  .      c = 'e';.
3e70: 20 20 20 20 20 20 61 73 73 65 72 74 28 20 28 66        assert( (f
3e80: 20 26 20 28 4d 45 4d 5f 53 74 61 74 69 63 7c 4d   & (MEM_Static|M
3e90: 45 4d 5f 44 79 6e 29 29 3d 3d 30 20 29 3b 0a 20  EM_Dyn))==0 );. 
3ea0: 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
3eb0: 63 20 3d 20 27 73 27 3b 0a 20 20 20 20 7d 0a 20  c = 's';.    }. 
3ec0: 20 20 20 2a 28 7a 43 73 72 2b 2b 29 20 3d 20 63     *(zCsr++) = c
3ed0: 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 73 6e  ;.    sqlite3_sn
3ee0: 70 72 69 6e 74 66 28 31 30 30 2c 20 7a 43 73 72  printf(100, zCsr
3ef0: 2c 20 22 25 64 5b 22 2c 20 70 4d 65 6d 2d 3e 6e  , "%d[", pMem->n
3f00: 29 3b 0a 20 20 20 20 7a 43 73 72 20 2b 3d 20 73  );.    zCsr += s
3f10: 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28 7a  qlite3Strlen30(z
3f20: 43 73 72 29 3b 0a 20 20 20 20 66 6f 72 28 69 3d  Csr);.    for(i=
3f30: 30 3b 20 69 3c 31 36 20 26 26 20 69 3c 70 4d 65  0; i<16 && i<pMe
3f40: 6d 2d 3e 6e 3b 20 69 2b 2b 29 7b 0a 20 20 20 20  m->n; i++){.    
3f50: 20 20 73 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e    sqlite3_snprin
3f60: 74 66 28 31 30 30 2c 20 7a 43 73 72 2c 20 22 25  tf(100, zCsr, "%
3f70: 30 32 58 22 2c 20 28 28 69 6e 74 29 70 4d 65 6d  02X", ((int)pMem
3f80: 2d 3e 7a 5b 69 5d 20 26 20 30 78 46 46 29 29 3b  ->z[i] & 0xFF));
3f90: 0a 20 20 20 20 20 20 7a 43 73 72 20 2b 3d 20 73  .      zCsr += s
3fa0: 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28 7a  qlite3Strlen30(z
3fb0: 43 73 72 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20  Csr);.    }.    
3fc0: 66 6f 72 28 69 3d 30 3b 20 69 3c 31 36 20 26 26  for(i=0; i<16 &&
3fd0: 20 69 3c 70 4d 65 6d 2d 3e 6e 3b 20 69 2b 2b 29   i<pMem->n; i++)
3fe0: 7b 0a 20 20 20 20 20 20 63 68 61 72 20 7a 20 3d  {.      char z =
3ff0: 20 70 4d 65 6d 2d 3e 7a 5b 69 5d 3b 0a 20 20 20   pMem->z[i];.   
4000: 20 20 20 69 66 28 20 7a 3c 33 32 20 7c 7c 20 7a     if( z<32 || z
4010: 3e 31 32 36 20 29 20 2a 7a 43 73 72 2b 2b 20 3d  >126 ) *zCsr++ =
4020: 20 27 2e 27 3b 0a 20 20 20 20 20 20 65 6c 73 65   '.';.      else
4030: 20 2a 7a 43 73 72 2b 2b 20 3d 20 7a 3b 0a 20 20   *zCsr++ = z;.  
4040: 20 20 7d 0a 20 20 20 20 2a 28 7a 43 73 72 2b 2b    }.    *(zCsr++
4050: 29 20 3d 20 27 5d 27 3b 0a 20 20 20 20 69 66 28  ) = ']';.    if(
4060: 20 66 20 26 20 4d 45 4d 5f 5a 65 72 6f 20 29 7b   f & MEM_Zero ){
4070: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 73  .      sqlite3_s
4080: 6e 70 72 69 6e 74 66 28 31 30 30 2c 20 7a 43 73  nprintf(100, zCs
4090: 72 2c 22 2b 25 64 7a 22 2c 70 4d 65 6d 2d 3e 75  r,"+%dz",pMem->u
40a0: 2e 6e 5a 65 72 6f 29 3b 0a 20 20 20 20 20 20 7a  .nZero);.      z
40b0: 43 73 72 20 2b 3d 20 73 71 6c 69 74 65 33 53 74  Csr += sqlite3St
40c0: 72 6c 65 6e 33 30 28 7a 43 73 72 29 3b 0a 20 20  rlen30(zCsr);.  
40d0: 20 20 7d 0a 20 20 20 20 2a 7a 43 73 72 20 3d 20    }.    *zCsr = 
40e0: 27 5c 30 27 3b 0a 20 20 7d 65 6c 73 65 20 69 66  '\0';.  }else if
40f0: 28 20 66 20 26 20 4d 45 4d 5f 53 74 72 20 29 7b  ( f & MEM_Str ){
4100: 0a 20 20 20 20 69 6e 74 20 6a 2c 20 6b 3b 0a 20  .    int j, k;. 
4110: 20 20 20 7a 42 75 66 5b 30 5d 20 3d 20 27 20 27     zBuf[0] = ' '
4120: 3b 0a 20 20 20 20 69 66 28 20 66 20 26 20 4d 45  ;.    if( f & ME
4130: 4d 5f 44 79 6e 20 29 7b 0a 20 20 20 20 20 20 7a  M_Dyn ){.      z
4140: 42 75 66 5b 31 5d 20 3d 20 27 7a 27 3b 0a 20 20  Buf[1] = 'z';.  
4150: 20 20 20 20 61 73 73 65 72 74 28 20 28 66 20 26      assert( (f &
4160: 20 28 4d 45 4d 5f 53 74 61 74 69 63 7c 4d 45 4d   (MEM_Static|MEM
4170: 5f 45 70 68 65 6d 29 29 3d 3d 30 20 29 3b 0a 20  _Ephem))==0 );. 
4180: 20 20 20 7d 65 6c 73 65 20 69 66 28 20 66 20 26     }else if( f &
4190: 20 4d 45 4d 5f 53 74 61 74 69 63 20 29 7b 0a 20   MEM_Static ){. 
41a0: 20 20 20 20 20 7a 42 75 66 5b 31 5d 20 3d 20 27       zBuf[1] = '
41b0: 74 27 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74  t';.      assert
41c0: 28 20 28 66 20 26 20 28 4d 45 4d 5f 44 79 6e 7c  ( (f & (MEM_Dyn|
41d0: 4d 45 4d 5f 45 70 68 65 6d 29 29 3d 3d 30 20 29  MEM_Ephem))==0 )
41e0: 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20  ;.    }else if( 
41f0: 66 20 26 20 4d 45 4d 5f 45 70 68 65 6d 20 29 7b  f & MEM_Ephem ){
4200: 0a 20 20 20 20 20 20 7a 42 75 66 5b 31 5d 20 3d  .      zBuf[1] =
4210: 20 27 65 27 3b 0a 20 20 20 20 20 20 61 73 73 65   'e';.      asse
4220: 72 74 28 20 28 66 20 26 20 28 4d 45 4d 5f 53 74  rt( (f & (MEM_St
4230: 61 74 69 63 7c 4d 45 4d 5f 44 79 6e 29 29 3d 3d  atic|MEM_Dyn))==
4240: 30 20 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a  0 );.    }else{.
4250: 20 20 20 20 20 20 7a 42 75 66 5b 31 5d 20 3d 20        zBuf[1] = 
4260: 27 73 27 3b 0a 20 20 20 20 7d 0a 20 20 20 20 6b  's';.    }.    k
4270: 20 3d 20 32 3b 0a 20 20 20 20 73 71 6c 69 74 65   = 2;.    sqlite
4280: 33 5f 73 6e 70 72 69 6e 74 66 28 31 30 30 2c 20  3_snprintf(100, 
4290: 26 7a 42 75 66 5b 6b 5d 2c 20 22 25 64 22 2c 20  &zBuf[k], "%d", 
42a0: 70 4d 65 6d 2d 3e 6e 29 3b 0a 20 20 20 20 6b 20  pMem->n);.    k 
42b0: 2b 3d 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e  += sqlite3Strlen
42c0: 33 30 28 26 7a 42 75 66 5b 6b 5d 29 3b 0a 20 20  30(&zBuf[k]);.  
42d0: 20 20 7a 42 75 66 5b 6b 2b 2b 5d 20 3d 20 27 5b    zBuf[k++] = '[
42e0: 27 3b 0a 20 20 20 20 66 6f 72 28 6a 3d 30 3b 20  ';.    for(j=0; 
42f0: 6a 3c 31 35 20 26 26 20 6a 3c 70 4d 65 6d 2d 3e  j<15 && j<pMem->
4300: 6e 3b 20 6a 2b 2b 29 7b 0a 20 20 20 20 20 20 75  n; j++){.      u
4310: 38 20 63 20 3d 20 70 4d 65 6d 2d 3e 7a 5b 6a 5d  8 c = pMem->z[j]
4320: 3b 0a 20 20 20 20 20 20 69 66 28 20 63 3e 3d 30  ;.      if( c>=0
4330: 78 32 30 20 26 26 20 63 3c 30 78 37 66 20 29 7b  x20 && c<0x7f ){
4340: 0a 20 20 20 20 20 20 20 20 7a 42 75 66 5b 6b 2b  .        zBuf[k+
4350: 2b 5d 20 3d 20 63 3b 0a 20 20 20 20 20 20 7d 65  +] = c;.      }e
4360: 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 7a 42 75  lse{.        zBu
4370: 66 5b 6b 2b 2b 5d 20 3d 20 27 2e 27 3b 0a 20 20  f[k++] = '.';.  
4380: 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20      }.    }.    
4390: 7a 42 75 66 5b 6b 2b 2b 5d 20 3d 20 27 5d 27 3b  zBuf[k++] = ']';
43a0: 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 73 6e 70  .    sqlite3_snp
43b0: 72 69 6e 74 66 28 31 30 30 2c 26 7a 42 75 66 5b  rintf(100,&zBuf[
43c0: 6b 5d 2c 20 65 6e 63 6e 61 6d 65 73 5b 70 4d 65  k], encnames[pMe
43d0: 6d 2d 3e 65 6e 63 5d 29 3b 0a 20 20 20 20 6b 20  m->enc]);.    k 
43e0: 2b 3d 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e  += sqlite3Strlen
43f0: 33 30 28 26 7a 42 75 66 5b 6b 5d 29 3b 0a 20 20  30(&zBuf[k]);.  
4400: 20 20 7a 42 75 66 5b 6b 2b 2b 5d 20 3d 20 30 3b    zBuf[k++] = 0;
4410: 0a 20 20 7d 0a 7d 0a 23 65 6e 64 69 66 0a 0a 23  .  }.}.#endif..#
4420: 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42  ifdef SQLITE_DEB
4430: 55 47 0a 2f 2a 0a 2a 2a 20 50 72 69 6e 74 20 74  UG./*.** Print t
4440: 68 65 20 76 61 6c 75 65 20 6f 66 20 61 20 72 65  he value of a re
4450: 67 69 73 74 65 72 20 66 6f 72 20 74 72 61 63 69  gister for traci
4460: 6e 67 20 70 75 72 70 6f 73 65 73 3a 0a 2a 2f 0a  ng purposes:.*/.
4470: 73 74 61 74 69 63 20 76 6f 69 64 20 6d 65 6d 54  static void memT
4480: 72 61 63 65 50 72 69 6e 74 28 4d 65 6d 20 2a 70  racePrint(Mem *p
4490: 29 7b 0a 20 20 69 66 28 20 70 2d 3e 66 6c 61 67  ){.  if( p->flag
44a0: 73 20 26 20 4d 45 4d 5f 55 6e 64 65 66 69 6e 65  s & MEM_Undefine
44b0: 64 20 29 7b 0a 20 20 20 20 70 72 69 6e 74 66 28  d ){.    printf(
44c0: 22 20 75 6e 64 65 66 69 6e 65 64 22 29 3b 0a 20  " undefined");. 
44d0: 20 7d 65 6c 73 65 20 69 66 28 20 70 2d 3e 66 6c   }else if( p->fl
44e0: 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29  ags & MEM_Null )
44f0: 7b 0a 20 20 20 20 70 72 69 6e 74 66 28 70 2d 3e  {.    printf(p->
4500: 66 6c 61 67 73 20 26 20 4d 45 4d 5f 5a 65 72 6f  flags & MEM_Zero
4510: 20 3f 20 22 20 4e 55 4c 4c 2d 6e 6f 63 68 6e 67   ? " NULL-nochng
4520: 22 20 3a 20 22 20 4e 55 4c 4c 22 29 3b 0a 20 20  " : " NULL");.  
4530: 7d 65 6c 73 65 20 69 66 28 20 28 70 2d 3e 66 6c  }else if( (p->fl
4540: 61 67 73 20 26 20 28 4d 45 4d 5f 49 6e 74 7c 4d  ags & (MEM_Int|M
4550: 45 4d 5f 53 74 72 29 29 3d 3d 28 4d 45 4d 5f 49  EM_Str))==(MEM_I
4560: 6e 74 7c 4d 45 4d 5f 53 74 72 29 20 29 7b 0a 20  nt|MEM_Str) ){. 
4570: 20 20 20 70 72 69 6e 74 66 28 22 20 73 69 3a 25     printf(" si:%
4580: 6c 6c 64 22 2c 20 70 2d 3e 75 2e 69 29 3b 0a 20  lld", p->u.i);. 
4590: 20 7d 65 6c 73 65 20 69 66 28 20 70 2d 3e 66 6c   }else if( p->fl
45a0: 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 20 29 7b  ags & MEM_Int ){
45b0: 0a 20 20 20 20 70 72 69 6e 74 66 28 22 20 69 3a  .    printf(" i:
45c0: 25 6c 6c 64 22 2c 20 70 2d 3e 75 2e 69 29 3b 0a  %lld", p->u.i);.
45d0: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
45e0: 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49  MIT_FLOATING_POI
45f0: 4e 54 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 70  NT.  }else if( p
4600: 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52 65  ->flags & MEM_Re
4610: 61 6c 20 29 7b 0a 20 20 20 20 70 72 69 6e 74 66  al ){.    printf
4620: 28 22 20 72 3a 25 67 22 2c 20 70 2d 3e 75 2e 72  (" r:%g", p->u.r
4630: 29 3b 0a 23 65 6e 64 69 66 0a 20 20 7d 65 6c 73  );.#endif.  }els
4640: 65 20 69 66 28 20 73 71 6c 69 74 65 33 56 64 62  e if( sqlite3Vdb
4650: 65 4d 65 6d 49 73 52 6f 77 53 65 74 28 70 29 20  eMemIsRowSet(p) 
4660: 29 7b 0a 20 20 20 20 70 72 69 6e 74 66 28 22 20  ){.    printf(" 
4670: 28 72 6f 77 73 65 74 29 22 29 3b 0a 20 20 7d 65  (rowset)");.  }e
4680: 6c 73 65 7b 0a 20 20 20 20 63 68 61 72 20 7a 42  lse{.    char zB
4690: 75 66 5b 32 30 30 5d 3b 0a 20 20 20 20 73 71 6c  uf[200];.    sql
46a0: 69 74 65 33 56 64 62 65 4d 65 6d 50 72 65 74 74  ite3VdbeMemPrett
46b0: 79 50 72 69 6e 74 28 70 2c 20 7a 42 75 66 29 3b  yPrint(p, zBuf);
46c0: 0a 20 20 20 20 70 72 69 6e 74 66 28 22 20 25 73  .    printf(" %s
46d0: 22 2c 20 7a 42 75 66 29 3b 0a 20 20 7d 0a 20 20  ", zBuf);.  }.  
46e0: 69 66 28 20 70 2d 3e 66 6c 61 67 73 20 26 20 4d  if( p->flags & M
46f0: 45 4d 5f 53 75 62 74 79 70 65 20 29 20 70 72 69  EM_Subtype ) pri
4700: 6e 74 66 28 22 20 73 75 62 74 79 70 65 3d 30 78  ntf(" subtype=0x
4710: 25 30 32 78 22 2c 20 70 2d 3e 65 53 75 62 74 79  %02x", p->eSubty
4720: 70 65 29 3b 0a 7d 0a 73 74 61 74 69 63 20 76 6f  pe);.}.static vo
4730: 69 64 20 72 65 67 69 73 74 65 72 54 72 61 63 65  id registerTrace
4740: 28 69 6e 74 20 69 52 65 67 2c 20 4d 65 6d 20 2a  (int iReg, Mem *
4750: 70 29 7b 0a 20 20 70 72 69 6e 74 66 28 22 52 45  p){.  printf("RE
4760: 47 5b 25 64 5d 20 3d 20 22 2c 20 69 52 65 67 29  G[%d] = ", iReg)
4770: 3b 0a 20 20 6d 65 6d 54 72 61 63 65 50 72 69 6e  ;.  memTracePrin
4780: 74 28 70 29 3b 0a 20 20 70 72 69 6e 74 66 28 22  t(p);.  printf("
4790: 5c 6e 22 29 3b 0a 20 20 73 71 6c 69 74 65 33 56  \n");.  sqlite3V
47a0: 64 62 65 43 68 65 63 6b 4d 65 6d 49 6e 76 61 72  dbeCheckMemInvar
47b0: 69 61 6e 74 73 28 70 29 3b 0a 7d 0a 23 65 6e 64  iants(p);.}.#end
47c0: 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54  if..#ifdef SQLIT
47d0: 45 5f 44 45 42 55 47 0a 23 20 20 64 65 66 69 6e  E_DEBUG.#  defin
47e0: 65 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45  e REGISTER_TRACE
47f0: 28 52 2c 4d 29 20 69 66 28 64 62 2d 3e 66 6c 61  (R,M) if(db->fla
4800: 67 73 26 53 51 4c 49 54 45 5f 56 64 62 65 54 72  gs&SQLITE_VdbeTr
4810: 61 63 65 29 72 65 67 69 73 74 65 72 54 72 61 63  ace)registerTrac
4820: 65 28 52 2c 4d 29 0a 23 65 6c 73 65 0a 23 20 20  e(R,M).#else.#  
4830: 64 65 66 69 6e 65 20 52 45 47 49 53 54 45 52 5f  define REGISTER_
4840: 54 52 41 43 45 28 52 2c 4d 29 0a 23 65 6e 64 69  TRACE(R,M).#endi
4850: 66 0a 0a 0a 23 69 66 64 65 66 20 56 44 42 45 5f  f...#ifdef VDBE_
4860: 50 52 4f 46 49 4c 45 0a 0a 2f 2a 20 0a 2a 2a 20  PROFILE../* .** 
4870: 68 77 74 69 6d 65 2e 68 20 63 6f 6e 74 61 69 6e  hwtime.h contain
4880: 73 20 69 6e 6c 69 6e 65 20 61 73 73 65 6d 62 6c  s inline assembl
4890: 65 72 20 63 6f 64 65 20 66 6f 72 20 69 6d 70 6c  er code for impl
48a0: 65 6d 65 6e 74 69 6e 67 20 0a 2a 2a 20 68 69 67  ementing .** hig
48b0: 68 2d 70 65 72 66 6f 72 6d 61 6e 63 65 20 74 69  h-performance ti
48c0: 6d 69 6e 67 20 72 6f 75 74 69 6e 65 73 2e 0a 2a  ming routines..*
48d0: 2f 0a 23 69 6e 63 6c 75 64 65 20 22 68 77 74 69  /.#include "hwti
48e0: 6d 65 2e 68 22 0a 0a 23 65 6e 64 69 66 0a 0a 23  me.h"..#endif..#
48f0: 69 66 6e 64 65 66 20 4e 44 45 42 55 47 0a 2f 2a  ifndef NDEBUG./*
4900: 0a 2a 2a 20 54 68 69 73 20 66 75 6e 63 74 69 6f  .** This functio
4910: 6e 20 69 73 20 6f 6e 6c 79 20 63 61 6c 6c 65 64  n is only called
4920: 20 66 72 6f 6d 20 77 69 74 68 69 6e 20 61 6e 20   from within an 
4930: 61 73 73 65 72 74 28 29 20 65 78 70 72 65 73 73  assert() express
4940: 69 6f 6e 2e 20 49 74 0a 2a 2a 20 63 68 65 63 6b  ion. It.** check
4950: 73 20 74 68 61 74 20 74 68 65 20 73 71 6c 69 74  s that the sqlit
4960: 65 33 2e 6e 54 72 61 6e 73 61 63 74 69 6f 6e 20  e3.nTransaction 
4970: 76 61 72 69 61 62 6c 65 20 69 73 20 63 6f 72 72  variable is corr
4980: 65 63 74 6c 79 20 73 65 74 20 74 6f 0a 2a 2a 20  ectly set to.** 
4990: 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 6e 6f  the number of no
49a0: 6e 2d 74 72 61 6e 73 61 63 74 69 6f 6e 20 73 61  n-transaction sa
49b0: 76 65 70 6f 69 6e 74 73 20 63 75 72 72 65 6e 74  vepoints current
49c0: 6c 79 20 69 6e 20 74 68 65 20 0a 2a 2a 20 6c 69  ly in the .** li
49d0: 6e 6b 65 64 20 6c 69 73 74 20 73 74 61 72 74 69  nked list starti
49e0: 6e 67 20 61 74 20 73 71 6c 69 74 65 33 2e 70 53  ng at sqlite3.pS
49f0: 61 76 65 70 6f 69 6e 74 2e 0a 2a 2a 20 0a 2a 2a  avepoint..** .**
4a00: 20 55 73 61 67 65 3a 0a 2a 2a 0a 2a 2a 20 20 20   Usage:.**.**   
4a10: 20 20 61 73 73 65 72 74 28 20 63 68 65 63 6b 53    assert( checkS
4a20: 61 76 65 70 6f 69 6e 74 43 6f 75 6e 74 28 64 62  avepointCount(db
4a30: 29 20 29 3b 0a 2a 2f 0a 73 74 61 74 69 63 20 69  ) );.*/.static i
4a40: 6e 74 20 63 68 65 63 6b 53 61 76 65 70 6f 69 6e  nt checkSavepoin
4a50: 74 43 6f 75 6e 74 28 73 71 6c 69 74 65 33 20 2a  tCount(sqlite3 *
4a60: 64 62 29 7b 0a 20 20 69 6e 74 20 6e 20 3d 20 30  db){.  int n = 0
4a70: 3b 0a 20 20 53 61 76 65 70 6f 69 6e 74 20 2a 70  ;.  Savepoint *p
4a80: 3b 0a 20 20 66 6f 72 28 70 3d 64 62 2d 3e 70 53  ;.  for(p=db->pS
4a90: 61 76 65 70 6f 69 6e 74 3b 20 70 3b 20 70 3d 70  avepoint; p; p=p
4aa0: 2d 3e 70 4e 65 78 74 29 20 6e 2b 2b 3b 0a 20 20  ->pNext) n++;.  
4ab0: 61 73 73 65 72 74 28 20 6e 3d 3d 28 64 62 2d 3e  assert( n==(db->
4ac0: 6e 53 61 76 65 70 6f 69 6e 74 20 2b 20 64 62 2d  nSavepoint + db-
4ad0: 3e 69 73 54 72 61 6e 73 61 63 74 69 6f 6e 53 61  >isTransactionSa
4ae0: 76 65 70 6f 69 6e 74 29 20 29 3b 0a 20 20 72 65  vepoint) );.  re
4af0: 74 75 72 6e 20 31 3b 0a 7d 0a 23 65 6e 64 69 66  turn 1;.}.#endif
4b00: 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74  ../*.** Return t
4b10: 68 65 20 72 65 67 69 73 74 65 72 20 6f 66 20 70  he register of p
4b20: 4f 70 2d 3e 70 32 20 61 66 74 65 72 20 66 69 72  Op->p2 after fir
4b30: 73 74 20 70 72 65 70 61 72 69 6e 67 20 69 74 20  st preparing it 
4b40: 74 6f 20 62 65 0a 2a 2a 20 6f 76 65 72 77 72 69  to be.** overwri
4b50: 74 74 65 6e 20 77 69 74 68 20 61 6e 20 69 6e 74  tten with an int
4b60: 65 67 65 72 20 76 61 6c 75 65 2e 0a 2a 2f 0a 73  eger value..*/.s
4b70: 74 61 74 69 63 20 53 51 4c 49 54 45 5f 4e 4f 49  tatic SQLITE_NOI
4b80: 4e 4c 49 4e 45 20 4d 65 6d 20 2a 6f 75 74 32 50  NLINE Mem *out2P
4b90: 72 65 72 65 6c 65 61 73 65 57 69 74 68 43 6c 65  rereleaseWithCle
4ba0: 61 72 28 4d 65 6d 20 2a 70 4f 75 74 29 7b 0a 20  ar(Mem *pOut){. 
4bb0: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53   sqlite3VdbeMemS
4bc0: 65 74 4e 75 6c 6c 28 70 4f 75 74 29 3b 0a 20 20  etNull(pOut);.  
4bd0: 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45  pOut->flags = ME
4be0: 4d 5f 49 6e 74 3b 0a 20 20 72 65 74 75 72 6e 20  M_Int;.  return 
4bf0: 70 4f 75 74 3b 0a 7d 0a 73 74 61 74 69 63 20 4d  pOut;.}.static M
4c00: 65 6d 20 2a 6f 75 74 32 50 72 65 72 65 6c 65 61  em *out2Prerelea
4c10: 73 65 28 56 64 62 65 20 2a 70 2c 20 56 64 62 65  se(Vdbe *p, Vdbe
4c20: 4f 70 20 2a 70 4f 70 29 7b 0a 20 20 4d 65 6d 20  Op *pOp){.  Mem 
4c30: 2a 70 4f 75 74 3b 0a 20 20 61 73 73 65 72 74 28  *pOut;.  assert(
4c40: 20 70 4f 70 2d 3e 70 32 3e 30 20 29 3b 0a 20 20   pOp->p2>0 );.  
4c50: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3c  assert( pOp->p2<
4c60: 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d  =(p->nMem+1 - p-
4c70: 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 70  >nCursor) );.  p
4c80: 4f 75 74 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70  Out = &p->aMem[p
4c90: 4f 70 2d 3e 70 32 5d 3b 0a 20 20 6d 65 6d 41 62  Op->p2];.  memAb
4ca0: 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70  outToChange(p, p
4cb0: 4f 75 74 29 3b 0a 20 20 69 66 28 20 56 64 62 65  Out);.  if( Vdbe
4cc0: 4d 65 6d 44 79 6e 61 6d 69 63 28 70 4f 75 74 29  MemDynamic(pOut)
4cd0: 20 29 7b 20 2f 2a 4f 50 54 49 4d 49 5a 41 54 49   ){ /*OPTIMIZATI
4ce0: 4f 4e 2d 49 46 2d 46 41 4c 53 45 2a 2f 0a 20 20  ON-IF-FALSE*/.  
4cf0: 20 20 72 65 74 75 72 6e 20 6f 75 74 32 50 72 65    return out2Pre
4d00: 72 65 6c 65 61 73 65 57 69 74 68 43 6c 65 61 72  releaseWithClear
4d10: 28 70 4f 75 74 29 3b 0a 20 20 7d 65 6c 73 65 7b  (pOut);.  }else{
4d20: 0a 20 20 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73  .    pOut->flags
4d30: 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20 20 20   = MEM_Int;.    
4d40: 72 65 74 75 72 6e 20 70 4f 75 74 3b 0a 20 20 7d  return pOut;.  }
4d50: 0a 7d 0a 0a 0a 2f 2a 0a 2a 2a 20 45 78 65 63 75  .}.../*.** Execu
4d60: 74 65 20 61 73 20 6d 75 63 68 20 6f 66 20 61 20  te as much of a 
4d70: 56 44 42 45 20 70 72 6f 67 72 61 6d 20 61 73 20  VDBE program as 
4d80: 77 65 20 63 61 6e 2e 0a 2a 2a 20 54 68 69 73 20  we can..** This 
4d90: 69 73 20 74 68 65 20 63 6f 72 65 20 6f 66 20 73  is the core of s
4da0: 71 6c 69 74 65 33 5f 73 74 65 70 28 29 2e 20 20  qlite3_step().  
4db0: 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 56  .*/.int sqlite3V
4dc0: 64 62 65 45 78 65 63 28 0a 20 20 56 64 62 65 20  dbeExec(.  Vdbe 
4dd0: 2a 70 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *p              
4de0: 20 20 20 20 20 20 2f 2a 20 54 68 65 20 56 44 42        /* The VDB
4df0: 45 20 2a 2f 0a 29 7b 0a 20 20 4f 70 20 2a 61 4f  E */.){.  Op *aO
4e00: 70 20 3d 20 70 2d 3e 61 4f 70 3b 20 20 20 20 20  p = p->aOp;     
4e10: 20 20 20 20 20 2f 2a 20 43 6f 70 79 20 6f 66 20       /* Copy of 
4e20: 70 2d 3e 61 4f 70 20 2a 2f 0a 20 20 4f 70 20 2a  p->aOp */.  Op *
4e30: 70 4f 70 20 3d 20 61 4f 70 3b 20 20 20 20 20 20  pOp = aOp;      
4e40: 20 20 20 20 20 20 20 2f 2a 20 43 75 72 72 65 6e         /* Curren
4e50: 74 20 6f 70 65 72 61 74 69 6f 6e 20 2a 2f 0a 23  t operation */.#
4e60: 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54  if defined(SQLIT
4e70: 45 5f 44 45 42 55 47 29 20 7c 7c 20 64 65 66 69  E_DEBUG) || defi
4e80: 6e 65 64 28 56 44 42 45 5f 50 52 4f 46 49 4c 45  ned(VDBE_PROFILE
4e90: 29 0a 20 20 4f 70 20 2a 70 4f 72 69 67 4f 70 3b  ).  Op *pOrigOp;
4ea0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
4eb0: 2a 20 56 61 6c 75 65 20 6f 66 20 70 4f 70 20 61  * Value of pOp a
4ec0: 74 20 74 68 65 20 74 6f 70 20 6f 66 20 74 68 65  t the top of the
4ed0: 20 6c 6f 6f 70 20 2a 2f 0a 23 65 6e 64 69 66 0a   loop */.#endif.
4ee0: 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45  #ifdef SQLITE_DE
4ef0: 42 55 47 0a 20 20 69 6e 74 20 6e 45 78 74 72 61  BUG.  int nExtra
4f00: 44 65 6c 65 74 65 20 3d 20 30 3b 20 20 20 20 20  Delete = 0;     
4f10: 20 2f 2a 20 56 65 72 69 66 69 65 73 20 46 4f 52   /* Verifies FOR
4f20: 44 45 4c 45 54 45 20 61 6e 64 20 41 55 58 44 45  DELETE and AUXDE
4f30: 4c 45 54 45 20 66 6c 61 67 73 20 2a 2f 0a 23 65  LETE flags */.#e
4f40: 6e 64 69 66 0a 20 20 69 6e 74 20 72 63 20 3d 20  ndif.  int rc = 
4f50: 53 51 4c 49 54 45 5f 4f 4b 3b 20 20 20 20 20 20  SQLITE_OK;      
4f60: 20 20 2f 2a 20 56 61 6c 75 65 20 74 6f 20 72 65    /* Value to re
4f70: 74 75 72 6e 20 2a 2f 0a 20 20 73 71 6c 69 74 65  turn */.  sqlite
4f80: 33 20 2a 64 62 20 3d 20 70 2d 3e 64 62 3b 20 20  3 *db = p->db;  
4f90: 20 20 20 20 20 2f 2a 20 54 68 65 20 64 61 74 61       /* The data
4fa0: 62 61 73 65 20 2a 2f 0a 20 20 75 38 20 72 65 73  base */.  u8 res
4fb0: 65 74 53 63 68 65 6d 61 4f 6e 46 61 75 6c 74 20  etSchemaOnFault 
4fc0: 3d 20 30 3b 20 2f 2a 20 52 65 73 65 74 20 73 63  = 0; /* Reset sc
4fd0: 68 65 6d 61 20 61 66 74 65 72 20 61 6e 20 65 72  hema after an er
4fe0: 72 6f 72 20 69 66 20 70 6f 73 69 74 69 76 65 20  ror if positive 
4ff0: 2a 2f 0a 20 20 75 38 20 65 6e 63 6f 64 69 6e 67  */.  u8 encoding
5000: 20 3d 20 45 4e 43 28 64 62 29 3b 20 20 20 20 20   = ENC(db);     
5010: 2f 2a 20 54 68 65 20 64 61 74 61 62 61 73 65 20  /* The database 
5020: 65 6e 63 6f 64 69 6e 67 20 2a 2f 0a 20 20 69 6e  encoding */.  in
5030: 74 20 69 43 6f 6d 70 61 72 65 20 3d 20 30 3b 20  t iCompare = 0; 
5040: 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65 73 75           /* Resu
5050: 6c 74 20 6f 66 20 6c 61 73 74 20 63 6f 6d 70 61  lt of last compa
5060: 72 69 73 6f 6e 20 2a 2f 0a 20 20 75 6e 73 69 67  rison */.  unsig
5070: 6e 65 64 20 6e 56 6d 53 74 65 70 20 3d 20 30 3b  ned nVmStep = 0;
5080: 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
5090: 6f 66 20 76 69 72 74 75 61 6c 20 6d 61 63 68 69  of virtual machi
50a0: 6e 65 20 73 74 65 70 73 20 2a 2f 0a 23 69 66 6e  ne steps */.#ifn
50b0: 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
50c0: 50 52 4f 47 52 45 53 53 5f 43 41 4c 4c 42 41 43  PROGRESS_CALLBAC
50d0: 4b 0a 20 20 75 6e 73 69 67 6e 65 64 20 6e 50 72  K.  unsigned nPr
50e0: 6f 67 72 65 73 73 4c 69 6d 69 74 3b 20 20 20 2f  ogressLimit;   /
50f0: 2a 20 49 6e 76 6f 6b 65 20 78 50 72 6f 67 72 65  * Invoke xProgre
5100: 73 73 28 29 20 77 68 65 6e 20 6e 56 6d 53 74 65  ss() when nVmSte
5110: 70 20 72 65 61 63 68 65 73 20 74 68 69 73 20 2a  p reaches this *
5120: 2f 0a 23 65 6e 64 69 66 0a 20 20 4d 65 6d 20 2a  /.#endif.  Mem *
5130: 61 4d 65 6d 20 3d 20 70 2d 3e 61 4d 65 6d 3b 20  aMem = p->aMem; 
5140: 20 20 20 20 20 20 2f 2a 20 43 6f 70 79 20 6f 66        /* Copy of
5150: 20 70 2d 3e 61 4d 65 6d 20 2a 2f 0a 20 20 4d 65   p->aMem */.  Me
5160: 6d 20 2a 70 49 6e 31 20 3d 20 30 3b 20 20 20 20  m *pIn1 = 0;    
5170: 20 20 20 20 20 20 20 20 20 2f 2a 20 31 73 74 20           /* 1st 
5180: 69 6e 70 75 74 20 6f 70 65 72 61 6e 64 20 2a 2f  input operand */
5190: 0a 20 20 4d 65 6d 20 2a 70 49 6e 32 20 3d 20 30  .  Mem *pIn2 = 0
51a0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
51b0: 20 32 6e 64 20 69 6e 70 75 74 20 6f 70 65 72 61   2nd input opera
51c0: 6e 64 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 49 6e  nd */.  Mem *pIn
51d0: 33 20 3d 20 30 3b 20 20 20 20 20 20 20 20 20 20  3 = 0;          
51e0: 20 20 20 2f 2a 20 33 72 64 20 69 6e 70 75 74 20     /* 3rd input 
51f0: 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20 4d 65 6d  operand */.  Mem
5200: 20 2a 70 4f 75 74 20 3d 20 30 3b 20 20 20 20 20   *pOut = 0;     
5210: 20 20 20 20 20 20 20 20 2f 2a 20 4f 75 74 70 75          /* Outpu
5220: 74 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 23 69 66  t operand */.#if
5230: 64 65 66 20 56 44 42 45 5f 50 52 4f 46 49 4c 45  def VDBE_PROFILE
5240: 0a 20 20 75 36 34 20 73 74 61 72 74 3b 20 20 20  .  u64 start;   
5250: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
5260: 20 43 50 55 20 63 6c 6f 63 6b 20 63 6f 75 6e 74   CPU clock count
5270: 20 61 74 20 73 74 61 72 74 20 6f 66 20 6f 70 63   at start of opc
5280: 6f 64 65 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20  ode */.#endif.  
5290: 2f 2a 2a 2a 20 49 4e 53 45 52 54 20 53 54 41 43  /*** INSERT STAC
52a0: 4b 20 55 4e 49 4f 4e 20 48 45 52 45 20 2a 2a 2a  K UNION HERE ***
52b0: 2f 0a 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e  /..  assert( p->
52c0: 6d 61 67 69 63 3d 3d 56 44 42 45 5f 4d 41 47 49  magic==VDBE_MAGI
52d0: 43 5f 52 55 4e 20 29 3b 20 20 2f 2a 20 73 71 6c  C_RUN );  /* sql
52e0: 69 74 65 33 5f 73 74 65 70 28 29 20 76 65 72 69  ite3_step() veri
52f0: 66 69 65 73 20 74 68 69 73 20 2a 2f 0a 20 20 73  fies this */.  s
5300: 71 6c 69 74 65 33 56 64 62 65 45 6e 74 65 72 28  qlite3VdbeEnter(
5310: 70 29 3b 0a 20 20 69 66 28 20 70 2d 3e 72 63 3d  p);.  if( p->rc=
5320: 3d 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 20 29 7b  =SQLITE_NOMEM ){
5330: 0a 20 20 20 20 2f 2a 20 54 68 69 73 20 68 61 70  .    /* This hap
5340: 70 65 6e 73 20 69 66 20 61 20 6d 61 6c 6c 6f 63  pens if a malloc
5350: 28 29 20 69 6e 73 69 64 65 20 61 20 63 61 6c 6c  () inside a call
5360: 20 74 6f 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75   to sqlite3_colu
5370: 6d 6e 5f 74 65 78 74 28 29 20 6f 72 0a 20 20 20  mn_text() or.   
5380: 20 2a 2a 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75   ** sqlite3_colu
5390: 6d 6e 5f 74 65 78 74 31 36 28 29 20 66 61 69 6c  mn_text16() fail
53a0: 65 64 2e 20 20 2a 2f 0a 20 20 20 20 67 6f 74 6f  ed.  */.    goto
53b0: 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 20 20 61   no_mem;.  }.  a
53c0: 73 73 65 72 74 28 20 70 2d 3e 72 63 3d 3d 53 51  ssert( p->rc==SQ
53d0: 4c 49 54 45 5f 4f 4b 20 7c 7c 20 28 70 2d 3e 72  LITE_OK || (p->r
53e0: 63 26 30 78 66 66 29 3d 3d 53 51 4c 49 54 45 5f  c&0xff)==SQLITE_
53f0: 42 55 53 59 0a 20 20 20 20 20 20 20 20 20 20 20  BUSY.           
5400: 20 7c 7c 20 28 70 2d 3e 72 63 26 30 78 46 46 29   || (p->rc&0xFF)
5410: 3d 3d 53 51 4c 49 54 45 5f 4c 4f 43 4b 45 44 20  ==SQLITE_LOCKED 
5420: 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e  );.  assert( p->
5430: 62 49 73 52 65 61 64 65 72 20 7c 7c 20 70 2d 3e  bIsReader || p->
5440: 72 65 61 64 4f 6e 6c 79 21 3d 30 20 29 3b 0a 20  readOnly!=0 );. 
5450: 20 70 2d 3e 69 43 75 72 72 65 6e 74 54 69 6d 65   p->iCurrentTime
5460: 20 3d 20 30 3b 0a 20 20 61 73 73 65 72 74 28 20   = 0;.  assert( 
5470: 70 2d 3e 65 78 70 6c 61 69 6e 3d 3d 30 20 29 3b  p->explain==0 );
5480: 0a 20 20 70 2d 3e 70 52 65 73 75 6c 74 53 65 74  .  p->pResultSet
5490: 20 3d 20 30 3b 0a 20 20 64 62 2d 3e 62 75 73 79   = 0;.  db->busy
54a0: 48 61 6e 64 6c 65 72 2e 6e 42 75 73 79 20 3d 20  Handler.nBusy = 
54b0: 30 3b 0a 20 20 69 66 28 20 64 62 2d 3e 75 31 2e  0;.  if( db->u1.
54c0: 69 73 49 6e 74 65 72 72 75 70 74 65 64 20 29 20  isInterrupted ) 
54d0: 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
54e0: 6f 5f 69 6e 74 65 72 72 75 70 74 3b 0a 20 20 73  o_interrupt;.  s
54f0: 71 6c 69 74 65 33 56 64 62 65 49 4f 54 72 61 63  qlite3VdbeIOTrac
5500: 65 53 71 6c 28 70 29 3b 0a 23 69 66 6e 64 65 66  eSql(p);.#ifndef
5510: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 52 4f   SQLITE_OMIT_PRO
5520: 47 52 45 53 53 5f 43 41 4c 4c 42 41 43 4b 0a 20  GRESS_CALLBACK. 
5530: 20 69 66 28 20 64 62 2d 3e 78 50 72 6f 67 72 65   if( db->xProgre
5540: 73 73 20 29 7b 0a 20 20 20 20 75 33 32 20 69 50  ss ){.    u32 iP
5550: 72 69 6f 72 20 3d 20 70 2d 3e 61 43 6f 75 6e 74  rior = p->aCount
5560: 65 72 5b 53 51 4c 49 54 45 5f 53 54 4d 54 53 54  er[SQLITE_STMTST
5570: 41 54 55 53 5f 56 4d 5f 53 54 45 50 5d 3b 0a 20  ATUS_VM_STEP];. 
5580: 20 20 20 61 73 73 65 72 74 28 20 30 20 3c 20 64     assert( 0 < d
5590: 62 2d 3e 6e 50 72 6f 67 72 65 73 73 4f 70 73 20  b->nProgressOps 
55a0: 29 3b 0a 20 20 20 20 6e 50 72 6f 67 72 65 73 73  );.    nProgress
55b0: 4c 69 6d 69 74 20 3d 20 64 62 2d 3e 6e 50 72 6f  Limit = db->nPro
55c0: 67 72 65 73 73 4f 70 73 20 2d 20 28 69 50 72 69  gressOps - (iPri
55d0: 6f 72 20 25 20 64 62 2d 3e 6e 50 72 6f 67 72 65  or % db->nProgre
55e0: 73 73 4f 70 73 29 3b 0a 20 20 7d 65 6c 73 65 7b  ssOps);.  }else{
55f0: 0a 20 20 20 20 6e 50 72 6f 67 72 65 73 73 4c 69  .    nProgressLi
5600: 6d 69 74 20 3d 20 30 78 66 66 66 66 66 66 66 66  mit = 0xffffffff
5610: 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 23 69 66  ;.  }.#endif.#if
5620: 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47  def SQLITE_DEBUG
5630: 0a 20 20 73 71 6c 69 74 65 33 42 65 67 69 6e 42  .  sqlite3BeginB
5640: 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28 29 3b 0a 20  enignMalloc();. 
5650: 20 69 66 28 20 70 2d 3e 70 63 3d 3d 30 0a 20 20   if( p->pc==0.  
5660: 20 26 26 20 28 70 2d 3e 64 62 2d 3e 66 6c 61 67   && (p->db->flag
5670: 73 20 26 20 28 53 51 4c 49 54 45 5f 56 64 62 65  s & (SQLITE_Vdbe
5680: 4c 69 73 74 69 6e 67 7c 53 51 4c 49 54 45 5f 56  Listing|SQLITE_V
5690: 64 62 65 45 51 50 7c 53 51 4c 49 54 45 5f 56 64  dbeEQP|SQLITE_Vd
56a0: 62 65 54 72 61 63 65 29 29 21 3d 30 0a 20 20 29  beTrace))!=0.  )
56b0: 7b 0a 20 20 20 20 69 6e 74 20 69 3b 0a 20 20 20  {.    int i;.   
56c0: 20 69 6e 74 20 6f 6e 63 65 20 3d 20 31 3b 0a 20   int once = 1;. 
56d0: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 50 72     sqlite3VdbePr
56e0: 69 6e 74 53 71 6c 28 70 29 3b 0a 20 20 20 20 69  intSql(p);.    i
56f0: 66 28 20 70 2d 3e 64 62 2d 3e 66 6c 61 67 73 20  f( p->db->flags 
5700: 26 20 53 51 4c 49 54 45 5f 56 64 62 65 4c 69 73  & SQLITE_VdbeLis
5710: 74 69 6e 67 20 29 7b 0a 20 20 20 20 20 20 70 72  ting ){.      pr
5720: 69 6e 74 66 28 22 56 44 42 45 20 50 72 6f 67 72  intf("VDBE Progr
5730: 61 6d 20 4c 69 73 74 69 6e 67 3a 5c 6e 22 29 3b  am Listing:\n");
5740: 0a 20 20 20 20 20 20 66 6f 72 28 69 3d 30 3b 20  .      for(i=0; 
5750: 69 3c 70 2d 3e 6e 4f 70 3b 20 69 2b 2b 29 7b 0a  i<p->nOp; i++){.
5760: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
5770: 64 62 65 50 72 69 6e 74 4f 70 28 73 74 64 6f 75  dbePrintOp(stdou
5780: 74 2c 20 69 2c 20 26 61 4f 70 5b 69 5d 29 3b 0a  t, i, &aOp[i]);.
5790: 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20        }.    }.  
57a0: 20 20 69 66 28 20 70 2d 3e 64 62 2d 3e 66 6c 61    if( p->db->fla
57b0: 67 73 20 26 20 53 51 4c 49 54 45 5f 56 64 62 65  gs & SQLITE_Vdbe
57c0: 45 51 50 20 29 7b 0a 20 20 20 20 20 20 66 6f 72  EQP ){.      for
57d0: 28 69 3d 30 3b 20 69 3c 70 2d 3e 6e 4f 70 3b 20  (i=0; i<p->nOp; 
57e0: 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 69 66  i++){.        if
57f0: 28 20 61 4f 70 5b 69 5d 2e 6f 70 63 6f 64 65 3d  ( aOp[i].opcode=
5800: 3d 4f 50 5f 45 78 70 6c 61 69 6e 20 29 7b 0a 20  =OP_Explain ){. 
5810: 20 20 20 20 20 20 20 20 20 69 66 28 20 6f 6e 63           if( onc
5820: 65 20 29 20 70 72 69 6e 74 66 28 22 56 44 42 45  e ) printf("VDBE
5830: 20 51 75 65 72 79 20 50 6c 61 6e 3a 5c 6e 22 29   Query Plan:\n")
5840: 3b 0a 20 20 20 20 20 20 20 20 20 20 70 72 69 6e  ;.          prin
5850: 74 66 28 22 25 73 5c 6e 22 2c 20 61 4f 70 5b 69  tf("%s\n", aOp[i
5860: 5d 2e 70 34 2e 7a 29 3b 0a 20 20 20 20 20 20 20  ].p4.z);.       
5870: 20 20 20 6f 6e 63 65 20 3d 20 30 3b 0a 20 20 20     once = 0;.   
5880: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20       }.      }. 
5890: 20 20 20 7d 0a 20 20 20 20 69 66 28 20 70 2d 3e     }.    if( p->
58a0: 64 62 2d 3e 66 6c 61 67 73 20 26 20 53 51 4c 49  db->flags & SQLI
58b0: 54 45 5f 56 64 62 65 54 72 61 63 65 20 29 20 20  TE_VdbeTrace )  
58c0: 70 72 69 6e 74 66 28 22 56 44 42 45 20 54 72 61  printf("VDBE Tra
58d0: 63 65 3a 5c 6e 22 29 3b 0a 20 20 7d 0a 20 20 73  ce:\n");.  }.  s
58e0: 71 6c 69 74 65 33 45 6e 64 42 65 6e 69 67 6e 4d  qlite3EndBenignM
58f0: 61 6c 6c 6f 63 28 29 3b 0a 23 65 6e 64 69 66 0a  alloc();.#endif.
5900: 20 20 66 6f 72 28 70 4f 70 3d 26 61 4f 70 5b 70    for(pOp=&aOp[p
5910: 2d 3e 70 63 5d 3b 20 31 3b 20 70 4f 70 2b 2b 29  ->pc]; 1; pOp++)
5920: 7b 0a 20 20 20 20 2f 2a 20 45 72 72 6f 72 73 20  {.    /* Errors 
5930: 61 72 65 20 64 65 74 65 63 74 65 64 20 62 79 20  are detected by 
5940: 69 6e 64 69 76 69 64 75 61 6c 20 6f 70 63 6f 64  individual opcod
5950: 65 73 2c 20 77 69 74 68 20 61 6e 20 69 6d 6d 65  es, with an imme
5960: 64 69 61 74 65 0a 20 20 20 20 2a 2a 20 6a 75 6d  diate.    ** jum
5970: 70 73 20 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f  ps to abort_due_
5980: 74 6f 5f 65 72 72 6f 72 2e 20 2a 2f 0a 20 20 20  to_error. */.   
5990: 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53 51 4c   assert( rc==SQL
59a0: 49 54 45 5f 4f 4b 20 29 3b 0a 0a 20 20 20 20 61  ITE_OK );..    a
59b0: 73 73 65 72 74 28 20 70 4f 70 3e 3d 61 4f 70 20  ssert( pOp>=aOp 
59c0: 26 26 20 70 4f 70 3c 26 61 4f 70 5b 70 2d 3e 6e  && pOp<&aOp[p->n
59d0: 4f 70 5d 29 3b 0a 23 69 66 64 65 66 20 56 44 42  Op]);.#ifdef VDB
59e0: 45 5f 50 52 4f 46 49 4c 45 0a 20 20 20 20 73 74  E_PROFILE.    st
59f0: 61 72 74 20 3d 20 73 71 6c 69 74 65 33 4e 50 72  art = sqlite3NPr
5a00: 6f 66 69 6c 65 43 6e 74 20 3f 20 73 71 6c 69 74  ofileCnt ? sqlit
5a10: 65 33 4e 50 72 6f 66 69 6c 65 43 6e 74 20 3a 20  e3NProfileCnt : 
5a20: 73 71 6c 69 74 65 33 48 77 74 69 6d 65 28 29 3b  sqlite3Hwtime();
5a30: 0a 23 65 6e 64 69 66 0a 20 20 20 20 6e 56 6d 53  .#endif.    nVmS
5a40: 74 65 70 2b 2b 3b 0a 23 69 66 64 65 66 20 53 51  tep++;.#ifdef SQ
5a50: 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 4d 54  LITE_ENABLE_STMT
5a60: 5f 53 43 41 4e 53 54 41 54 55 53 0a 20 20 20 20  _SCANSTATUS.    
5a70: 69 66 28 20 70 2d 3e 61 6e 45 78 65 63 20 29 20  if( p->anExec ) 
5a80: 70 2d 3e 61 6e 45 78 65 63 5b 28 69 6e 74 29 28  p->anExec[(int)(
5a90: 70 4f 70 2d 61 4f 70 29 5d 2b 2b 3b 0a 23 65 6e  pOp-aOp)]++;.#en
5aa0: 64 69 66 0a 0a 20 20 20 20 2f 2a 20 4f 6e 6c 79  dif..    /* Only
5ab0: 20 61 6c 6c 6f 77 20 74 72 61 63 69 6e 67 20 69   allow tracing i
5ac0: 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 20 69  f SQLITE_DEBUG i
5ad0: 73 20 64 65 66 69 6e 65 64 2e 0a 20 20 20 20 2a  s defined..    *
5ae0: 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
5af0: 44 45 42 55 47 0a 20 20 20 20 69 66 28 20 64 62  DEBUG.    if( db
5b00: 2d 3e 66 6c 61 67 73 20 26 20 53 51 4c 49 54 45  ->flags & SQLITE
5b10: 5f 56 64 62 65 54 72 61 63 65 20 29 7b 0a 20 20  _VdbeTrace ){.  
5b20: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 50      sqlite3VdbeP
5b30: 72 69 6e 74 4f 70 28 73 74 64 6f 75 74 2c 20 28  rintOp(stdout, (
5b40: 69 6e 74 29 28 70 4f 70 20 2d 20 61 4f 70 29 2c  int)(pOp - aOp),
5b50: 20 70 4f 70 29 3b 0a 20 20 20 20 7d 0a 23 65 6e   pOp);.    }.#en
5b60: 64 69 66 0a 20 20 20 20 20 20 0a 0a 20 20 20 20  dif.      ..    
5b70: 2f 2a 20 43 68 65 63 6b 20 74 6f 20 73 65 65 20  /* Check to see 
5b80: 69 66 20 77 65 20 6e 65 65 64 20 74 6f 20 73 69  if we need to si
5b90: 6d 75 6c 61 74 65 20 61 6e 20 69 6e 74 65 72 72  mulate an interr
5ba0: 75 70 74 2e 20 20 54 68 69 73 20 6f 6e 6c 79 20  upt.  This only 
5bb0: 68 61 70 70 65 6e 73 0a 20 20 20 20 2a 2a 20 69  happens.    ** i
5bc0: 66 20 77 65 20 68 61 76 65 20 61 20 73 70 65 63  f we have a spec
5bd0: 69 61 6c 20 74 65 73 74 20 62 75 69 6c 64 2e 0a  ial test build..
5be0: 20 20 20 20 2a 2f 0a 23 69 66 64 65 66 20 53 51      */.#ifdef SQ
5bf0: 4c 49 54 45 5f 54 45 53 54 0a 20 20 20 20 69 66  LITE_TEST.    if
5c00: 28 20 73 71 6c 69 74 65 33 5f 69 6e 74 65 72 72  ( sqlite3_interr
5c10: 75 70 74 5f 63 6f 75 6e 74 3e 30 20 29 7b 0a 20  upt_count>0 ){. 
5c20: 20 20 20 20 20 73 71 6c 69 74 65 33 5f 69 6e 74       sqlite3_int
5c30: 65 72 72 75 70 74 5f 63 6f 75 6e 74 2d 2d 3b 0a  errupt_count--;.
5c40: 20 20 20 20 20 20 69 66 28 20 73 71 6c 69 74 65        if( sqlite
5c50: 33 5f 69 6e 74 65 72 72 75 70 74 5f 63 6f 75 6e  3_interrupt_coun
5c60: 74 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20  t==0 ){.        
5c70: 73 71 6c 69 74 65 33 5f 69 6e 74 65 72 72 75 70  sqlite3_interrup
5c80: 74 28 64 62 29 3b 0a 20 20 20 20 20 20 7d 0a 20  t(db);.      }. 
5c90: 20 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 20 20 20     }.#endif..   
5ca0: 20 2f 2a 20 53 61 6e 69 74 79 20 63 68 65 63 6b   /* Sanity check
5cb0: 69 6e 67 20 6f 6e 20 6f 74 68 65 72 20 6f 70 65  ing on other ope
5cc0: 72 61 6e 64 73 20 2a 2f 0a 23 69 66 64 65 66 20  rands */.#ifdef 
5cd0: 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 20  SQLITE_DEBUG.   
5ce0: 20 7b 0a 20 20 20 20 20 20 75 38 20 6f 70 50 72   {.      u8 opPr
5cf0: 6f 70 65 72 74 79 20 3d 20 73 71 6c 69 74 65 33  operty = sqlite3
5d00: 4f 70 63 6f 64 65 50 72 6f 70 65 72 74 79 5b 70  OpcodeProperty[p
5d10: 4f 70 2d 3e 6f 70 63 6f 64 65 5d 3b 0a 20 20 20  Op->opcode];.   
5d20: 20 20 20 69 66 28 20 28 6f 70 50 72 6f 70 65 72     if( (opProper
5d30: 74 79 20 26 20 4f 50 46 4c 47 5f 49 4e 31 29 21  ty & OPFLG_IN1)!
5d40: 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 61 73  =0 ){.        as
5d50: 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 30 20  sert( pOp->p1>0 
5d60: 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72  );.        asser
5d70: 74 28 20 70 4f 70 2d 3e 70 31 3c 3d 28 70 2d 3e  t( pOp->p1<=(p->
5d80: 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72  nMem+1 - p->nCur
5d90: 73 6f 72 29 20 29 3b 0a 20 20 20 20 20 20 20 20  sor) );.        
5da0: 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c  assert( memIsVal
5db0: 69 64 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31  id(&aMem[pOp->p1
5dc0: 5d 29 20 29 3b 0a 20 20 20 20 20 20 20 20 61 73  ]) );.        as
5dd0: 73 65 72 74 28 20 73 71 6c 69 74 65 33 56 64 62  sert( sqlite3Vdb
5de0: 65 43 68 65 63 6b 4d 65 6d 49 6e 76 61 72 69 61  eCheckMemInvaria
5df0: 6e 74 73 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  nts(&aMem[pOp->p
5e00: 31 5d 29 20 29 3b 0a 20 20 20 20 20 20 20 20 52  1]) );.        R
5e10: 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f  EGISTER_TRACE(pO
5e20: 70 2d 3e 70 31 2c 20 26 61 4d 65 6d 5b 70 4f 70  p->p1, &aMem[pOp
5e30: 2d 3e 70 31 5d 29 3b 0a 20 20 20 20 20 20 7d 0a  ->p1]);.      }.
5e40: 20 20 20 20 20 20 69 66 28 20 28 6f 70 50 72 6f        if( (opPro
5e50: 70 65 72 74 79 20 26 20 4f 50 46 4c 47 5f 49 4e  perty & OPFLG_IN
5e60: 32 29 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 20  2)!=0 ){.       
5e70: 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32   assert( pOp->p2
5e80: 3e 30 20 29 3b 0a 20 20 20 20 20 20 20 20 61 73  >0 );.        as
5e90: 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3c 3d 28  sert( pOp->p2<=(
5ea0: 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e  p->nMem+1 - p->n
5eb0: 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 20 20 20  Cursor) );.     
5ec0: 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73     assert( memIs
5ed0: 56 61 6c 69 64 28 26 61 4d 65 6d 5b 70 4f 70 2d  Valid(&aMem[pOp-
5ee0: 3e 70 32 5d 29 20 29 3b 0a 20 20 20 20 20 20 20  >p2]) );.       
5ef0: 20 61 73 73 65 72 74 28 20 73 71 6c 69 74 65 33   assert( sqlite3
5f00: 56 64 62 65 43 68 65 63 6b 4d 65 6d 49 6e 76 61  VdbeCheckMemInva
5f10: 72 69 61 6e 74 73 28 26 61 4d 65 6d 5b 70 4f 70  riants(&aMem[pOp
5f20: 2d 3e 70 32 5d 29 20 29 3b 0a 20 20 20 20 20 20  ->p2]) );.      
5f30: 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45    REGISTER_TRACE
5f40: 28 70 4f 70 2d 3e 70 32 2c 20 26 61 4d 65 6d 5b  (pOp->p2, &aMem[
5f50: 70 4f 70 2d 3e 70 32 5d 29 3b 0a 20 20 20 20 20  pOp->p2]);.     
5f60: 20 7d 0a 20 20 20 20 20 20 69 66 28 20 28 6f 70   }.      if( (op
5f70: 50 72 6f 70 65 72 74 79 20 26 20 4f 50 46 4c 47  Property & OPFLG
5f80: 5f 49 4e 33 29 21 3d 30 20 29 7b 0a 20 20 20 20  _IN3)!=0 ){.    
5f90: 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d      assert( pOp-
5fa0: 3e 70 33 3e 30 20 29 3b 0a 20 20 20 20 20 20 20  >p3>0 );.       
5fb0: 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33   assert( pOp->p3
5fc0: 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70  <=(p->nMem+1 - p
5fd0: 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20  ->nCursor) );.  
5fe0: 20 20 20 20 20 20 61 73 73 65 72 74 28 20 6d 65        assert( me
5ff0: 6d 49 73 56 61 6c 69 64 28 26 61 4d 65 6d 5b 70  mIsValid(&aMem[p
6000: 4f 70 2d 3e 70 33 5d 29 20 29 3b 0a 20 20 20 20  Op->p3]) );.    
6010: 20 20 20 20 61 73 73 65 72 74 28 20 73 71 6c 69      assert( sqli
6020: 74 65 33 56 64 62 65 43 68 65 63 6b 4d 65 6d 49  te3VdbeCheckMemI
6030: 6e 76 61 72 69 61 6e 74 73 28 26 61 4d 65 6d 5b  nvariants(&aMem[
6040: 70 4f 70 2d 3e 70 33 5d 29 20 29 3b 0a 20 20 20  pOp->p3]) );.   
6050: 20 20 20 20 20 52 45 47 49 53 54 45 52 5f 54 52       REGISTER_TR
6060: 41 43 45 28 70 4f 70 2d 3e 70 33 2c 20 26 61 4d  ACE(pOp->p3, &aM
6070: 65 6d 5b 70 4f 70 2d 3e 70 33 5d 29 3b 0a 20 20  em[pOp->p3]);.  
6080: 20 20 20 20 7d 0a 20 20 20 20 20 20 69 66 28 20      }.      if( 
6090: 28 6f 70 50 72 6f 70 65 72 74 79 20 26 20 4f 50  (opProperty & OP
60a0: 46 4c 47 5f 4f 55 54 32 29 21 3d 30 20 29 7b 0a  FLG_OUT2)!=0 ){.
60b0: 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20          assert( 
60c0: 70 4f 70 2d 3e 70 32 3e 30 20 29 3b 0a 20 20 20  pOp->p2>0 );.   
60d0: 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70       assert( pOp
60e0: 2d 3e 70 32 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31  ->p2<=(p->nMem+1
60f0: 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29   - p->nCursor) )
6100: 3b 0a 20 20 20 20 20 20 20 20 6d 65 6d 41 62 6f  ;.        memAbo
6110: 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 26 61  utToChange(p, &a
6120: 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 29 3b 0a 20  Mem[pOp->p2]);. 
6130: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69 66 28       }.      if(
6140: 20 28 6f 70 50 72 6f 70 65 72 74 79 20 26 20 4f   (opProperty & O
6150: 50 46 4c 47 5f 4f 55 54 33 29 21 3d 30 20 29 7b  PFLG_OUT3)!=0 ){
6160: 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28  .        assert(
6170: 20 70 4f 70 2d 3e 70 33 3e 30 20 29 3b 0a 20 20   pOp->p3>0 );.  
6180: 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f        assert( pO
6190: 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b  p->p3<=(p->nMem+
61a0: 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29 20  1 - p->nCursor) 
61b0: 29 3b 0a 20 20 20 20 20 20 20 20 6d 65 6d 41 62  );.        memAb
61c0: 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 26  outToChange(p, &
61d0: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 29 3b 0a  aMem[pOp->p3]);.
61e0: 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 23 65        }.    }.#e
61f0: 6e 64 69 66 0a 23 69 66 20 64 65 66 69 6e 65 64  ndif.#if defined
6200: 28 53 51 4c 49 54 45 5f 44 45 42 55 47 29 20 7c  (SQLITE_DEBUG) |
6210: 7c 20 64 65 66 69 6e 65 64 28 56 44 42 45 5f 50  | defined(VDBE_P
6220: 52 4f 46 49 4c 45 29 0a 20 20 20 20 70 4f 72 69  ROFILE).    pOri
6230: 67 4f 70 20 3d 20 70 4f 70 3b 0a 23 65 6e 64 69  gOp = pOp;.#endi
6240: 66 0a 20 20 0a 20 20 20 20 73 77 69 74 63 68 28  f.  .    switch(
6250: 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 20 29 7b 0a   pOp->opcode ){.
6260: 0a 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ./**************
6270: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
6280: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
6290: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
62a0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a  ***************.
62b0: 2a 2a 20 57 68 61 74 20 66 6f 6c 6c 6f 77 73 20  ** What follows 
62c0: 69 73 20 61 20 6d 61 73 73 69 76 65 20 73 77 69  is a massive swi
62d0: 74 63 68 20 73 74 61 74 65 6d 65 6e 74 20 77 68  tch statement wh
62e0: 65 72 65 20 65 61 63 68 20 63 61 73 65 20 69 6d  ere each case im
62f0: 70 6c 65 6d 65 6e 74 73 20 61 0a 2a 2a 20 73 65  plements a.** se
6300: 70 61 72 61 74 65 20 69 6e 73 74 72 75 63 74 69  parate instructi
6310: 6f 6e 20 69 6e 20 74 68 65 20 76 69 72 74 75 61  on in the virtua
6320: 6c 20 6d 61 63 68 69 6e 65 2e 20 20 49 66 20 77  l machine.  If w
6330: 65 20 66 6f 6c 6c 6f 77 20 74 68 65 20 75 73 75  e follow the usu
6340: 61 6c 0a 2a 2a 20 69 6e 64 65 6e 74 61 74 69 6f  al.** indentatio
6350: 6e 20 63 6f 6e 76 65 6e 74 69 6f 6e 73 2c 20 65  n conventions, e
6360: 61 63 68 20 63 61 73 65 20 73 68 6f 75 6c 64 20  ach case should 
6370: 62 65 20 69 6e 64 65 6e 74 65 64 20 62 79 20 36  be indented by 6
6380: 20 73 70 61 63 65 73 2e 20 20 42 75 74 0a 2a 2a   spaces.  But.**
6390: 20 74 68 61 74 20 69 73 20 61 20 6c 6f 74 20 6f   that is a lot o
63a0: 66 20 77 61 73 74 65 64 20 73 70 61 63 65 20 6f  f wasted space o
63b0: 6e 20 74 68 65 20 6c 65 66 74 20 6d 61 72 67 69  n the left margi
63c0: 6e 2e 20 20 53 6f 20 74 68 65 20 63 6f 64 65 20  n.  So the code 
63d0: 77 69 74 68 69 6e 0a 2a 2a 20 74 68 65 20 73 77  within.** the sw
63e0: 69 74 63 68 20 73 74 61 74 65 6d 65 6e 74 20 77  itch statement w
63f0: 69 6c 6c 20 62 72 65 61 6b 20 77 69 74 68 20 63  ill break with c
6400: 6f 6e 76 65 6e 74 69 6f 6e 20 61 6e 64 20 62 65  onvention and be
6410: 20 66 6c 75 73 68 2d 6c 65 66 74 2e 20 41 6e 6f   flush-left. Ano
6420: 74 68 65 72 0a 2a 2a 20 62 69 67 20 63 6f 6d 6d  ther.** big comm
6430: 65 6e 74 20 28 73 69 6d 69 6c 61 72 20 74 6f 20  ent (similar to 
6440: 74 68 69 73 20 6f 6e 65 29 20 77 69 6c 6c 20 6d  this one) will m
6450: 61 72 6b 20 74 68 65 20 70 6f 69 6e 74 20 69 6e  ark the point in
6460: 20 74 68 65 20 63 6f 64 65 20 77 68 65 72 65 0a   the code where.
6470: 2a 2a 20 77 65 20 74 72 61 6e 73 69 74 69 6f 6e  ** we transition
6480: 20 62 61 63 6b 20 74 6f 20 6e 6f 72 6d 61 6c 20   back to normal 
6490: 69 6e 64 65 6e 74 61 74 69 6f 6e 2e 0a 2a 2a 0a  indentation..**.
64a0: 2a 2a 20 54 68 65 20 66 6f 72 6d 61 74 74 69 6e  ** The formattin
64b0: 67 20 6f 66 20 65 61 63 68 20 63 61 73 65 20 69  g of each case i
64c0: 73 20 69 6d 70 6f 72 74 61 6e 74 2e 20 20 54 68  s important.  Th
64d0: 65 20 6d 61 6b 65 66 69 6c 65 20 66 6f 72 20 53  e makefile for S
64e0: 51 4c 69 74 65 0a 2a 2a 20 67 65 6e 65 72 61 74  QLite.** generat
64f0: 65 73 20 74 77 6f 20 43 20 66 69 6c 65 73 20 22  es two C files "
6500: 6f 70 63 6f 64 65 73 2e 68 22 20 61 6e 64 20 22  opcodes.h" and "
6510: 6f 70 63 6f 64 65 73 2e 63 22 20 62 79 20 73 63  opcodes.c" by sc
6520: 61 6e 6e 69 6e 67 20 74 68 69 73 0a 2a 2a 20 66  anning this.** f
6530: 69 6c 65 20 6c 6f 6f 6b 69 6e 67 20 66 6f 72 20  ile looking for 
6540: 6c 69 6e 65 73 20 74 68 61 74 20 62 65 67 69 6e  lines that begin
6550: 20 77 69 74 68 20 22 63 61 73 65 20 4f 50 5f 22   with "case OP_"
6560: 2e 20 20 54 68 65 20 6f 70 63 6f 64 65 73 2e 68  .  The opcodes.h
6570: 20 66 69 6c 65 73 0a 2a 2a 20 77 69 6c 6c 20 62   files.** will b
6580: 65 20 66 69 6c 6c 65 64 20 77 69 74 68 20 23 64  e filled with #d
6590: 65 66 69 6e 65 73 20 74 68 61 74 20 67 69 76 65  efines that give
65a0: 20 75 6e 69 71 75 65 20 69 6e 74 65 67 65 72 20   unique integer 
65b0: 76 61 6c 75 65 73 20 74 6f 20 65 61 63 68 0a 2a  values to each.*
65c0: 2a 20 6f 70 63 6f 64 65 20 61 6e 64 20 74 68 65  * opcode and the
65d0: 20 6f 70 63 6f 64 65 73 2e 63 20 66 69 6c 65 20   opcodes.c file 
65e0: 69 73 20 66 69 6c 6c 65 64 20 77 69 74 68 20 61  is filled with a
65f0: 6e 20 61 72 72 61 79 20 6f 66 20 73 74 72 69 6e  n array of strin
6600: 67 73 20 77 68 65 72 65 0a 2a 2a 20 65 61 63 68  gs where.** each
6610: 20 73 74 72 69 6e 67 20 69 73 20 74 68 65 20 73   string is the s
6620: 79 6d 62 6f 6c 69 63 20 6e 61 6d 65 20 66 6f 72  ymbolic name for
6630: 20 74 68 65 20 63 6f 72 72 65 73 70 6f 6e 64 69   the correspondi
6640: 6e 67 20 6f 70 63 6f 64 65 2e 20 20 49 66 20 74  ng opcode.  If t
6650: 68 65 0a 2a 2a 20 63 61 73 65 20 73 74 61 74 65  he.** case state
6660: 6d 65 6e 74 20 69 73 20 66 6f 6c 6c 6f 77 65 64  ment is followed
6670: 20 62 79 20 61 20 63 6f 6d 6d 65 6e 74 20 6f 66   by a comment of
6680: 20 74 68 65 20 66 6f 72 6d 20 22 2f 23 20 73 61   the form "/# sa
6690: 6d 65 20 61 73 20 2e 2e 2e 20 23 2f 22 0a 2a 2a  me as ... #/".**
66a0: 20 74 68 61 74 20 63 6f 6d 6d 65 6e 74 20 69 73   that comment is
66b0: 20 75 73 65 64 20 74 6f 20 64 65 74 65 72 6d 69   used to determi
66c0: 6e 65 20 74 68 65 20 70 61 72 74 69 63 75 6c 61  ne the particula
66d0: 72 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 6f  r value of the o
66e0: 70 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 4f 74 68  pcode..**.** Oth
66f0: 65 72 20 6b 65 79 77 6f 72 64 73 20 69 6e 20 74  er keywords in t
6700: 68 65 20 63 6f 6d 6d 65 6e 74 20 74 68 61 74 20  he comment that 
6710: 66 6f 6c 6c 6f 77 73 20 65 61 63 68 20 63 61 73  follows each cas
6720: 65 20 61 72 65 20 75 73 65 64 20 74 6f 0a 2a 2a  e are used to.**
6730: 20 63 6f 6e 73 74 72 75 63 74 20 74 68 65 20 4f   construct the O
6740: 50 46 4c 47 5f 49 4e 49 54 49 41 4c 49 5a 45 52  PFLG_INITIALIZER
6750: 20 76 61 6c 75 65 20 74 68 61 74 20 69 6e 69 74   value that init
6760: 69 61 6c 69 7a 65 73 20 6f 70 63 6f 64 65 50 72  ializes opcodePr
6770: 6f 70 65 72 74 79 5b 5d 2e 0a 2a 2a 20 4b 65 79  operty[]..** Key
6780: 77 6f 72 64 73 20 69 6e 63 6c 75 64 65 3a 20 69  words include: i
6790: 6e 31 2c 20 69 6e 32 2c 20 69 6e 33 2c 20 6f 75  n1, in2, in3, ou
67a0: 74 32 2c 20 6f 75 74 33 2e 20 20 53 65 65 0a 2a  t2, out3.  See.*
67b0: 2a 20 74 68 65 20 6d 6b 6f 70 63 6f 64 65 68 2e  * the mkopcodeh.
67c0: 61 77 6b 20 73 63 72 69 70 74 20 66 6f 72 20 61  awk script for a
67d0: 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d  dditional inform
67e0: 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 44 6f 63  ation..**.** Doc
67f0: 75 6d 65 6e 74 61 74 69 6f 6e 20 61 62 6f 75 74  umentation about
6800: 20 56 44 42 45 20 6f 70 63 6f 64 65 73 20 69 73   VDBE opcodes is
6810: 20 67 65 6e 65 72 61 74 65 64 20 62 79 20 73 63   generated by sc
6820: 61 6e 6e 69 6e 67 20 74 68 69 73 20 66 69 6c 65  anning this file
6830: 0a 2a 2a 20 66 6f 72 20 6c 69 6e 65 73 20 6f 66  .** for lines of
6840: 20 74 68 61 74 20 63 6f 6e 74 61 69 6e 20 22 4f   that contain "O
6850: 70 63 6f 64 65 3a 22 2e 20 20 54 68 61 74 20 6c  pcode:".  That l
6860: 69 6e 65 20 61 6e 64 20 61 6c 6c 20 73 75 62 73  ine and all subs
6870: 65 71 75 65 6e 74 0a 2a 2a 20 63 6f 6d 6d 65 6e  equent.** commen
6880: 74 20 6c 69 6e 65 73 20 61 72 65 20 75 73 65 64  t lines are used
6890: 20 69 6e 20 74 68 65 20 67 65 6e 65 72 61 74 69   in the generati
68a0: 6f 6e 20 6f 66 20 74 68 65 20 6f 70 63 6f 64 65  on of the opcode
68b0: 2e 68 74 6d 6c 20 64 6f 63 75 6d 65 6e 74 61 74  .html documentat
68c0: 69 6f 6e 0a 2a 2a 20 66 69 6c 65 2e 0a 2a 2a 0a  ion.** file..**.
68d0: 2a 2a 20 53 55 4d 4d 41 52 59 3a 0a 2a 2a 0a 2a  ** SUMMARY:.**.*
68e0: 2a 20 20 20 20 20 46 6f 72 6d 61 74 74 69 6e 67  *     Formatting
68f0: 20 69 73 20 69 6d 70 6f 72 74 61 6e 74 20 74 6f   is important to
6900: 20 73 63 72 69 70 74 73 20 74 68 61 74 20 73 63   scripts that sc
6910: 61 6e 20 74 68 69 73 20 66 69 6c 65 2e 0a 2a 2a  an this file..**
6920: 20 20 20 20 20 44 6f 20 6e 6f 74 20 64 65 76 69       Do not devi
6930: 61 74 65 20 66 72 6f 6d 20 74 68 65 20 66 6f 72  ate from the for
6940: 6d 61 74 74 69 6e 67 20 73 74 79 6c 65 20 63 75  matting style cu
6950: 72 72 65 6e 74 6c 79 20 69 6e 20 75 73 65 2e 0a  rrently in use..
6960: 2a 2a 0a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  **.*************
6970: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
6980: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
6990: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
69a0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
69b0: 2f 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 20 47  /../* Opcode:  G
69c0: 6f 74 6f 20 2a 20 50 32 20 2a 20 2a 20 2a 0a 2a  oto * P2 * * *.*
69d0: 2a 0a 2a 2a 20 41 6e 20 75 6e 63 6f 6e 64 69 74  *.** An uncondit
69e0: 69 6f 6e 61 6c 20 6a 75 6d 70 20 74 6f 20 61 64  ional jump to ad
69f0: 64 72 65 73 73 20 50 32 2e 0a 2a 2a 20 54 68 65  dress P2..** The
6a00: 20 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f   next instructio
6a10: 6e 20 65 78 65 63 75 74 65 64 20 77 69 6c 6c 20  n executed will 
6a20: 62 65 20 0a 2a 2a 20 74 68 65 20 6f 6e 65 20 61  be .** the one a
6a30: 74 20 69 6e 64 65 78 20 50 32 20 66 72 6f 6d 20  t index P2 from 
6a40: 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 20 6f 66  the beginning of
6a50: 0a 2a 2a 20 74 68 65 20 70 72 6f 67 72 61 6d 2e  .** the program.
6a60: 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 31 20 70 61  .**.** The P1 pa
6a70: 72 61 6d 65 74 65 72 20 69 73 20 6e 6f 74 20 61  rameter is not a
6a80: 63 74 75 61 6c 6c 79 20 75 73 65 64 20 62 79 20  ctually used by 
6a90: 74 68 69 73 20 6f 70 63 6f 64 65 2e 20 20 48 6f  this opcode.  Ho
6aa0: 77 65 76 65 72 2c 20 69 74 0a 2a 2a 20 69 73 20  wever, it.** is 
6ab0: 73 6f 6d 65 74 69 6d 65 73 20 73 65 74 20 74 6f  sometimes set to
6ac0: 20 31 20 69 6e 73 74 65 61 64 20 6f 66 20 30 20   1 instead of 0 
6ad0: 61 73 20 61 20 68 69 6e 74 20 74 6f 20 74 68 65  as a hint to the
6ae0: 20 63 6f 6d 6d 61 6e 64 2d 6c 69 6e 65 20 73 68   command-line sh
6af0: 65 6c 6c 0a 2a 2a 20 74 68 61 74 20 74 68 69 73  ell.** that this
6b00: 20 47 6f 74 6f 20 69 73 20 74 68 65 20 62 6f 74   Goto is the bot
6b10: 74 6f 6d 20 6f 66 20 61 20 6c 6f 6f 70 20 61 6e  tom of a loop an
6b20: 64 20 74 68 61 74 20 74 68 65 20 6c 69 6e 65 73  d that the lines
6b30: 20 66 72 6f 6d 20 50 32 20 64 6f 77 6e 0a 2a 2a   from P2 down.**
6b40: 20 74 6f 20 74 68 65 20 63 75 72 72 65 6e 74 20   to the current 
6b50: 6c 69 6e 65 20 73 68 6f 75 6c 64 20 62 65 20 69  line should be i
6b60: 6e 64 65 6e 74 65 64 20 66 6f 72 20 45 58 50 4c  ndented for EXPL
6b70: 41 49 4e 20 6f 75 74 70 75 74 2e 0a 2a 2f 0a 63  AIN output..*/.c
6b80: 61 73 65 20 4f 50 5f 47 6f 74 6f 3a 20 7b 20 20  ase OP_Goto: {  
6b90: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75             /* ju
6ba0: 6d 70 20 2a 2f 0a 6a 75 6d 70 5f 74 6f 5f 70 32  mp */.jump_to_p2
6bb0: 5f 61 6e 64 5f 63 68 65 63 6b 5f 66 6f 72 5f 69  _and_check_for_i
6bc0: 6e 74 65 72 72 75 70 74 3a 0a 20 20 70 4f 70 20  nterrupt:.  pOp 
6bd0: 3d 20 26 61 4f 70 5b 70 4f 70 2d 3e 70 32 20 2d  = &aOp[pOp->p2 -
6be0: 20 31 5d 3b 0a 0a 20 20 2f 2a 20 4f 70 63 6f 64   1];..  /* Opcod
6bf0: 65 73 20 74 68 61 74 20 61 72 65 20 75 73 65 64  es that are used
6c00: 20 61 73 20 74 68 65 20 62 6f 74 74 6f 6d 20 6f   as the bottom o
6c10: 66 20 61 20 6c 6f 6f 70 20 28 4f 50 5f 4e 65 78  f a loop (OP_Nex
6c20: 74 2c 20 4f 50 5f 50 72 65 76 2c 0a 20 20 2a 2a  t, OP_Prev,.  **
6c30: 20 4f 50 5f 56 4e 65 78 74 2c 20 6f 72 20 4f 50   OP_VNext, or OP
6c40: 5f 53 6f 72 74 65 72 4e 65 78 74 29 20 61 6c 6c  _SorterNext) all
6c50: 20 6a 75 6d 70 20 68 65 72 65 20 75 70 6f 6e 0a   jump here upon.
6c60: 20 20 2a 2a 20 63 6f 6d 70 6c 65 74 69 6f 6e 2e    ** completion.
6c70: 20 20 43 68 65 63 6b 20 74 6f 20 73 65 65 20 69    Check to see i
6c80: 66 20 73 71 6c 69 74 65 33 5f 69 6e 74 65 72 72  f sqlite3_interr
6c90: 75 70 74 28 29 20 68 61 73 20 62 65 65 6e 20 63  upt() has been c
6ca0: 61 6c 6c 65 64 0a 20 20 2a 2a 20 6f 72 20 69 66  alled.  ** or if
6cb0: 20 74 68 65 20 70 72 6f 67 72 65 73 73 20 63 61   the progress ca
6cc0: 6c 6c 62 61 63 6b 20 6e 65 65 64 73 20 74 6f 20  llback needs to 
6cd0: 62 65 20 69 6e 76 6f 6b 65 64 2e 20 0a 20 20 2a  be invoked. .  *
6ce0: 2a 0a 20 20 2a 2a 20 54 68 69 73 20 63 6f 64 65  *.  ** This code
6cf0: 20 75 73 65 73 20 75 6e 73 74 72 75 63 74 75 72   uses unstructur
6d00: 65 64 20 22 67 6f 74 6f 22 20 73 74 61 74 65 6d  ed "goto" statem
6d10: 65 6e 74 73 20 61 6e 64 20 64 6f 65 73 20 6e 6f  ents and does no
6d20: 74 20 6c 6f 6f 6b 20 63 6c 65 61 6e 2e 0a 20 20  t look clean..  
6d30: 2a 2a 20 42 75 74 20 74 68 61 74 20 69 73 20 6e  ** But that is n
6d40: 6f 74 20 64 75 65 20 74 6f 20 73 6c 6f 70 70 79  ot due to sloppy
6d50: 20 63 6f 64 69 6e 67 20 68 61 62 69 74 73 2e 20   coding habits. 
6d60: 54 68 65 20 63 6f 64 65 20 69 73 20 77 72 69 74  The code is writ
6d70: 74 65 6e 20 74 68 69 73 0a 20 20 2a 2a 20 77 61  ten this.  ** wa
6d80: 79 20 66 6f 72 20 70 65 72 66 6f 72 6d 61 6e 63  y for performanc
6d90: 65 2c 20 74 6f 20 61 76 6f 69 64 20 68 61 76 69  e, to avoid havi
6da0: 6e 67 20 74 6f 20 72 75 6e 20 74 68 65 20 69 6e  ng to run the in
6db0: 74 65 72 72 75 70 74 20 61 6e 64 20 70 72 6f 67  terrupt and prog
6dc0: 72 65 73 73 0a 20 20 2a 2a 20 63 68 65 63 6b 73  ress.  ** checks
6dd0: 20 6f 6e 20 65 76 65 72 79 20 6f 70 63 6f 64 65   on every opcode
6de0: 2e 20 20 54 68 69 73 20 68 65 6c 70 73 20 73 71  .  This helps sq
6df0: 6c 69 74 65 33 5f 73 74 65 70 28 29 20 74 6f 20  lite3_step() to 
6e00: 72 75 6e 20 61 62 6f 75 74 20 31 2e 35 25 0a 20  run about 1.5%. 
6e10: 20 2a 2a 20 66 61 73 74 65 72 20 61 63 63 6f 72   ** faster accor
6e20: 64 69 6e 67 20 74 6f 20 22 76 61 6c 67 72 69 6e  ding to "valgrin
6e30: 64 20 2d 2d 74 6f 6f 6c 3d 63 61 63 68 65 67 72  d --tool=cachegr
6e40: 69 6e 64 22 20 2a 2f 0a 63 68 65 63 6b 5f 66 6f  ind" */.check_fo
6e50: 72 5f 69 6e 74 65 72 72 75 70 74 3a 0a 20 20 69  r_interrupt:.  i
6e60: 66 28 20 64 62 2d 3e 75 31 2e 69 73 49 6e 74 65  f( db->u1.isInte
6e70: 72 72 75 70 74 65 64 20 29 20 67 6f 74 6f 20 61  rrupted ) goto a
6e80: 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 69 6e 74 65  bort_due_to_inte
6e90: 72 72 75 70 74 3b 0a 23 69 66 6e 64 65 66 20 53  rrupt;.#ifndef S
6ea0: 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 52 4f 47 52  QLITE_OMIT_PROGR
6eb0: 45 53 53 5f 43 41 4c 4c 42 41 43 4b 0a 20 20 2f  ESS_CALLBACK.  /
6ec0: 2a 20 43 61 6c 6c 20 74 68 65 20 70 72 6f 67 72  * Call the progr
6ed0: 65 73 73 20 63 61 6c 6c 62 61 63 6b 20 69 66 20  ess callback if 
6ee0: 69 74 20 69 73 20 63 6f 6e 66 69 67 75 72 65 64  it is configured
6ef0: 20 61 6e 64 20 74 68 65 20 72 65 71 75 69 72 65   and the require
6f00: 64 20 6e 75 6d 62 65 72 0a 20 20 2a 2a 20 6f 66  d number.  ** of
6f10: 20 56 44 42 45 20 6f 70 73 20 68 61 76 65 20 62   VDBE ops have b
6f20: 65 65 6e 20 65 78 65 63 75 74 65 64 20 28 65 69  een executed (ei
6f30: 74 68 65 72 20 73 69 6e 63 65 20 74 68 69 73 20  ther since this 
6f40: 69 6e 76 6f 63 61 74 69 6f 6e 20 6f 66 0a 20 20  invocation of.  
6f50: 2a 2a 20 73 71 6c 69 74 65 33 56 64 62 65 45 78  ** sqlite3VdbeEx
6f60: 65 63 28 29 20 6f 72 20 73 69 6e 63 65 20 6c 61  ec() or since la
6f70: 73 74 20 74 69 6d 65 20 74 68 65 20 70 72 6f 67  st time the prog
6f80: 72 65 73 73 20 63 61 6c 6c 62 61 63 6b 20 77 61  ress callback wa
6f90: 73 20 63 61 6c 6c 65 64 29 2e 0a 20 20 2a 2a 20  s called)..  ** 
6fa0: 49 66 20 74 68 65 20 70 72 6f 67 72 65 73 73 20  If the progress 
6fb0: 63 61 6c 6c 62 61 63 6b 20 72 65 74 75 72 6e 73  callback returns
6fc0: 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 65 78 69 74 20   non-zero, exit 
6fd0: 74 68 65 20 76 69 72 74 75 61 6c 20 6d 61 63 68  the virtual mach
6fe0: 69 6e 65 20 77 69 74 68 0a 20 20 2a 2a 20 61 20  ine with.  ** a 
6ff0: 72 65 74 75 72 6e 20 63 6f 64 65 20 53 51 4c 49  return code SQLI
7000: 54 45 5f 41 42 4f 52 54 2e 0a 20 20 2a 2f 0a 20  TE_ABORT..  */. 
7010: 20 69 66 28 20 6e 56 6d 53 74 65 70 3e 3d 6e 50   if( nVmStep>=nP
7020: 72 6f 67 72 65 73 73 4c 69 6d 69 74 20 26 26 20  rogressLimit && 
7030: 64 62 2d 3e 78 50 72 6f 67 72 65 73 73 21 3d 30  db->xProgress!=0
7040: 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20   ){.    assert( 
7050: 64 62 2d 3e 6e 50 72 6f 67 72 65 73 73 4f 70 73  db->nProgressOps
7060: 21 3d 30 20 29 3b 0a 20 20 20 20 6e 50 72 6f 67  !=0 );.    nProg
7070: 72 65 73 73 4c 69 6d 69 74 20 3d 20 6e 56 6d 53  ressLimit = nVmS
7080: 74 65 70 20 2b 20 64 62 2d 3e 6e 50 72 6f 67 72  tep + db->nProgr
7090: 65 73 73 4f 70 73 20 2d 20 28 6e 56 6d 53 74 65  essOps - (nVmSte
70a0: 70 25 64 62 2d 3e 6e 50 72 6f 67 72 65 73 73 4f  p%db->nProgressO
70b0: 70 73 29 3b 0a 20 20 20 20 69 66 28 20 64 62 2d  ps);.    if( db-
70c0: 3e 78 50 72 6f 67 72 65 73 73 28 64 62 2d 3e 70  >xProgress(db->p
70d0: 50 72 6f 67 72 65 73 73 41 72 67 29 20 29 7b 0a  ProgressArg) ){.
70e0: 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54        rc = SQLIT
70f0: 45 5f 49 4e 54 45 52 52 55 50 54 3b 0a 20 20 20  E_INTERRUPT;.   
7100: 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75     goto abort_du
7110: 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20  e_to_error;.    
7120: 7d 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20 0a  }.  }.#endif.  .
7130: 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
7140: 70 63 6f 64 65 3a 20 20 47 6f 73 75 62 20 50 31  pcode:  Gosub P1
7150: 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20   P2 * * *.**.** 
7160: 57 72 69 74 65 20 74 68 65 20 63 75 72 72 65 6e  Write the curren
7170: 74 20 61 64 64 72 65 73 73 20 6f 6e 74 6f 20 72  t address onto r
7180: 65 67 69 73 74 65 72 20 50 31 0a 2a 2a 20 61 6e  egister P1.** an
7190: 64 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20 61  d then jump to a
71a0: 64 64 72 65 73 73 20 50 32 2e 0a 2a 2f 0a 63 61  ddress P2..*/.ca
71b0: 73 65 20 4f 50 5f 47 6f 73 75 62 3a 20 7b 20 20  se OP_Gosub: {  
71c0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d            /* jum
71d0: 70 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70  p */.  assert( p
71e0: 4f 70 2d 3e 70 31 3e 30 20 26 26 20 70 4f 70 2d  Op->p1>0 && pOp-
71f0: 3e 70 31 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20  >p1<=(p->nMem+1 
7200: 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b  - p->nCursor) );
7210: 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b  .  pIn1 = &aMem[
7220: 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65  pOp->p1];.  asse
7230: 72 74 28 20 56 64 62 65 4d 65 6d 44 79 6e 61 6d  rt( VdbeMemDynam
7240: 69 63 28 70 49 6e 31 29 3d 3d 30 20 29 3b 0a 20  ic(pIn1)==0 );. 
7250: 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67   memAboutToChang
7260: 65 28 70 2c 20 70 49 6e 31 29 3b 0a 20 20 70 49  e(p, pIn1);.  pI
7270: 6e 31 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f  n1->flags = MEM_
7280: 49 6e 74 3b 0a 20 20 70 49 6e 31 2d 3e 75 2e 69  Int;.  pIn1->u.i
7290: 20 3d 20 28 69 6e 74 29 28 70 4f 70 2d 61 4f 70   = (int)(pOp-aOp
72a0: 29 3b 0a 20 20 52 45 47 49 53 54 45 52 5f 54 52  );.  REGISTER_TR
72b0: 41 43 45 28 70 4f 70 2d 3e 70 31 2c 20 70 49 6e  ACE(pOp->p1, pIn
72c0: 31 29 3b 0a 0a 20 20 2f 2a 20 4d 6f 73 74 20 6a  1);..  /* Most j
72d0: 75 6d 70 20 6f 70 65 72 61 74 69 6f 6e 73 20 64  ump operations d
72e0: 6f 20 61 20 67 6f 74 6f 20 74 6f 20 74 68 69 73  o a goto to this
72f0: 20 73 70 6f 74 20 69 6e 20 6f 72 64 65 72 20 74   spot in order t
7300: 6f 20 75 70 64 61 74 65 0a 20 20 2a 2a 20 74 68  o update.  ** th
7310: 65 20 70 4f 70 20 70 6f 69 6e 74 65 72 2e 20 2a  e pOp pointer. *
7320: 2f 0a 6a 75 6d 70 5f 74 6f 5f 70 32 3a 0a 20 20  /.jump_to_p2:.  
7330: 70 4f 70 20 3d 20 26 61 4f 70 5b 70 4f 70 2d 3e  pOp = &aOp[pOp->
7340: 70 32 20 2d 20 31 5d 3b 0a 20 20 62 72 65 61 6b  p2 - 1];.  break
7350: 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
7360: 20 52 65 74 75 72 6e 20 50 31 20 2a 20 2a 20 2a   Return P1 * * *
7370: 20 2a 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70 20 74 6f   *.**.** Jump to
7380: 20 74 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75   the next instru
7390: 63 74 69 6f 6e 20 61 66 74 65 72 20 74 68 65 20  ction after the 
73a0: 61 64 64 72 65 73 73 20 69 6e 20 72 65 67 69 73  address in regis
73b0: 74 65 72 20 50 31 2e 20 20 41 66 74 65 72 0a 2a  ter P1.  After.*
73c0: 2a 20 74 68 65 20 6a 75 6d 70 2c 20 72 65 67 69  * the jump, regi
73d0: 73 74 65 72 20 50 31 20 62 65 63 6f 6d 65 73 20  ster P1 becomes 
73e0: 75 6e 64 65 66 69 6e 65 64 2e 0a 2a 2f 0a 63 61  undefined..*/.ca
73f0: 73 65 20 4f 50 5f 52 65 74 75 72 6e 3a 20 7b 20  se OP_Return: { 
7400: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 31            /* in1
7410: 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d   */.  pIn1 = &aM
7420: 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  em[pOp->p1];.  a
7430: 73 73 65 72 74 28 20 70 49 6e 31 2d 3e 66 6c 61  ssert( pIn1->fla
7440: 67 73 3d 3d 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20  gs==MEM_Int );. 
7450: 20 70 4f 70 20 3d 20 26 61 4f 70 5b 70 49 6e 31   pOp = &aOp[pIn1
7460: 2d 3e 75 2e 69 5d 3b 0a 20 20 70 49 6e 31 2d 3e  ->u.i];.  pIn1->
7470: 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 55 6e 64 65  flags = MEM_Unde
7480: 66 69 6e 65 64 3b 0a 20 20 62 72 65 61 6b 3b 0a  fined;.  break;.
7490: 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 6e  }../* Opcode: In
74a0: 69 74 43 6f 72 6f 75 74 69 6e 65 20 50 31 20 50  itCoroutine P1 P
74b0: 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 53  2 P3 * *.**.** S
74c0: 65 74 20 75 70 20 72 65 67 69 73 74 65 72 20 50  et up register P
74d0: 31 20 73 6f 20 74 68 61 74 20 69 74 20 77 69 6c  1 so that it wil
74e0: 6c 20 59 69 65 6c 64 20 74 6f 20 74 68 65 20 63  l Yield to the c
74f0: 6f 72 6f 75 74 69 6e 65 0a 2a 2a 20 6c 6f 63 61  oroutine.** loca
7500: 74 65 64 20 61 74 20 61 64 64 72 65 73 73 20 50  ted at address P
7510: 33 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 32 21 3d  3..**.** If P2!=
7520: 30 20 74 68 65 6e 20 74 68 65 20 63 6f 72 6f 75  0 then the corou
7530: 74 69 6e 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74  tine implementat
7540: 69 6f 6e 20 69 6d 6d 65 64 69 61 74 65 6c 79 20  ion immediately 
7550: 66 6f 6c 6c 6f 77 73 0a 2a 2a 20 74 68 69 73 20  follows.** this 
7560: 6f 70 63 6f 64 65 2e 20 20 53 6f 20 6a 75 6d 70  opcode.  So jump
7570: 20 6f 76 65 72 20 74 68 65 20 63 6f 72 6f 75 74   over the corout
7580: 69 6e 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69  ine implementati
7590: 6f 6e 20 74 6f 0a 2a 2a 20 61 64 64 72 65 73 73  on to.** address
75a0: 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61   P2..**.** See a
75b0: 6c 73 6f 3a 20 45 6e 64 43 6f 72 6f 75 74 69 6e  lso: EndCoroutin
75c0: 65 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 6e 69  e.*/.case OP_Ini
75d0: 74 43 6f 72 6f 75 74 69 6e 65 3a 20 7b 20 20 20  tCoroutine: {   
75e0: 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 61    /* jump */.  a
75f0: 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 30  ssert( pOp->p1>0
7600: 20 26 26 20 20 70 4f 70 2d 3e 70 31 3c 3d 28 70   &&  pOp->p1<=(p
7610: 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43  ->nMem+1 - p->nC
7620: 75 72 73 6f 72 29 20 29 3b 0a 20 20 61 73 73 65  ursor) );.  asse
7630: 72 74 28 20 70 4f 70 2d 3e 70 32 3e 3d 30 20 26  rt( pOp->p2>=0 &
7640: 26 20 70 4f 70 2d 3e 70 32 3c 70 2d 3e 6e 4f 70  & pOp->p2<p->nOp
7650: 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   );.  assert( pO
7660: 70 2d 3e 70 33 3e 3d 30 20 26 26 20 70 4f 70 2d  p->p3>=0 && pOp-
7670: 3e 70 33 3c 70 2d 3e 6e 4f 70 20 29 3b 0a 20 20  >p3<p->nOp );.  
7680: 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pOut = &aMem[pOp
7690: 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p1];.  assert(
76a0: 20 21 56 64 62 65 4d 65 6d 44 79 6e 61 6d 69 63   !VdbeMemDynamic
76b0: 28 70 4f 75 74 29 20 29 3b 0a 20 20 70 4f 75 74  (pOut) );.  pOut
76c0: 2d 3e 75 2e 69 20 3d 20 70 4f 70 2d 3e 70 33 20  ->u.i = pOp->p3 
76d0: 2d 20 31 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c 61  - 1;.  pOut->fla
76e0: 67 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20  gs = MEM_Int;.  
76f0: 69 66 28 20 70 4f 70 2d 3e 70 32 20 29 20 67 6f  if( pOp->p2 ) go
7700: 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20  to jump_to_p2;. 
7710: 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
7720: 63 6f 64 65 3a 20 20 45 6e 64 43 6f 72 6f 75 74  code:  EndCorout
7730: 69 6e 65 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a  ine P1 * * * *.*
7740: 2a 0a 2a 2a 20 54 68 65 20 69 6e 73 74 72 75 63  *.** The instruc
7750: 74 69 6f 6e 20 61 74 20 74 68 65 20 61 64 64 72  tion at the addr
7760: 65 73 73 20 69 6e 20 72 65 67 69 73 74 65 72 20  ess in register 
7770: 50 31 20 69 73 20 61 20 59 69 65 6c 64 2e 0a 2a  P1 is a Yield..*
7780: 2a 20 4a 75 6d 70 20 74 6f 20 74 68 65 20 50 32  * Jump to the P2
7790: 20 70 61 72 61 6d 65 74 65 72 20 6f 66 20 74 68   parameter of th
77a0: 61 74 20 59 69 65 6c 64 2e 0a 2a 2a 20 41 66 74  at Yield..** Aft
77b0: 65 72 20 74 68 65 20 6a 75 6d 70 2c 20 72 65 67  er the jump, reg
77c0: 69 73 74 65 72 20 50 31 20 62 65 63 6f 6d 65 73  ister P1 becomes
77d0: 20 75 6e 64 65 66 69 6e 65 64 2e 0a 2a 2a 0a 2a   undefined..**.*
77e0: 2a 20 53 65 65 20 61 6c 73 6f 3a 20 49 6e 69 74  * See also: Init
77f0: 43 6f 72 6f 75 74 69 6e 65 0a 2a 2f 0a 63 61 73  Coroutine.*/.cas
7800: 65 20 4f 50 5f 45 6e 64 43 6f 72 6f 75 74 69 6e  e OP_EndCoroutin
7810: 65 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 2f  e: {           /
7820: 2a 20 69 6e 31 20 2a 2f 0a 20 20 56 64 62 65 4f  * in1 */.  VdbeO
7830: 70 20 2a 70 43 61 6c 6c 65 72 3b 0a 20 20 70 49  p *pCaller;.  pI
7840: 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n1 = &aMem[pOp->
7850: 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p1];.  assert( p
7860: 49 6e 31 2d 3e 66 6c 61 67 73 3d 3d 4d 45 4d 5f  In1->flags==MEM_
7870: 49 6e 74 20 29 3b 0a 20 20 61 73 73 65 72 74 28  Int );.  assert(
7880: 20 70 49 6e 31 2d 3e 75 2e 69 3e 3d 30 20 26 26   pIn1->u.i>=0 &&
7890: 20 70 49 6e 31 2d 3e 75 2e 69 3c 70 2d 3e 6e 4f   pIn1->u.i<p->nO
78a0: 70 20 29 3b 0a 20 20 70 43 61 6c 6c 65 72 20 3d  p );.  pCaller =
78b0: 20 26 61 4f 70 5b 70 49 6e 31 2d 3e 75 2e 69 5d   &aOp[pIn1->u.i]
78c0: 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 61 6c  ;.  assert( pCal
78d0: 6c 65 72 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  ler->opcode==OP_
78e0: 59 69 65 6c 64 20 29 3b 0a 20 20 61 73 73 65 72  Yield );.  asser
78f0: 74 28 20 70 43 61 6c 6c 65 72 2d 3e 70 32 3e 3d  t( pCaller->p2>=
7900: 30 20 26 26 20 70 43 61 6c 6c 65 72 2d 3e 70 32  0 && pCaller->p2
7910: 3c 70 2d 3e 6e 4f 70 20 29 3b 0a 20 20 70 4f 70  <p->nOp );.  pOp
7920: 20 3d 20 26 61 4f 70 5b 70 43 61 6c 6c 65 72 2d   = &aOp[pCaller-
7930: 3e 70 32 20 2d 20 31 5d 3b 0a 20 20 70 49 6e 31  >p2 - 1];.  pIn1
7940: 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 55 6e  ->flags = MEM_Un
7950: 64 65 66 69 6e 65 64 3b 0a 20 20 62 72 65 61 6b  defined;.  break
7960: 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
7970: 20 59 69 65 6c 64 20 50 31 20 50 32 20 2a 20 2a   Yield P1 P2 * *
7980: 20 2a 0a 2a 2a 0a 2a 2a 20 53 77 61 70 20 74 68   *.**.** Swap th
7990: 65 20 70 72 6f 67 72 61 6d 20 63 6f 75 6e 74 65  e program counte
79a0: 72 20 77 69 74 68 20 74 68 65 20 76 61 6c 75 65  r with the value
79b0: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 2e   in register P1.
79c0: 20 20 54 68 69 73 0a 2a 2a 20 68 61 73 20 74 68    This.** has th
79d0: 65 20 65 66 66 65 63 74 20 6f 66 20 79 69 65 6c  e effect of yiel
79e0: 64 69 6e 67 20 74 6f 20 61 20 63 6f 72 6f 75 74  ding to a corout
79f0: 69 6e 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68  ine..**.** If th
7a00: 65 20 63 6f 72 6f 75 74 69 6e 65 20 74 68 61 74  e coroutine that
7a10: 20 69 73 20 6c 61 75 6e 63 68 65 64 20 62 79 20   is launched by 
7a20: 74 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e  this instruction
7a30: 20 65 6e 64 73 20 77 69 74 68 0a 2a 2a 20 59 69   ends with.** Yi
7a40: 65 6c 64 20 6f 72 20 52 65 74 75 72 6e 20 74 68  eld or Return th
7a50: 65 6e 20 63 6f 6e 74 69 6e 75 65 20 74 6f 20 74  en continue to t
7a60: 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63 74  he next instruct
7a70: 69 6f 6e 2e 20 20 42 75 74 20 69 66 0a 2a 2a 20  ion.  But if.** 
7a80: 74 68 65 20 63 6f 72 6f 75 74 69 6e 65 20 6c 61  the coroutine la
7a90: 75 6e 63 68 65 64 20 62 79 20 74 68 69 73 20 69  unched by this i
7aa0: 6e 73 74 72 75 63 74 69 6f 6e 20 65 6e 64 73 20  nstruction ends 
7ab0: 77 69 74 68 0a 2a 2a 20 45 6e 64 43 6f 72 6f 75  with.** EndCorou
7ac0: 74 69 6e 65 2c 20 74 68 65 6e 20 6a 75 6d 70 20  tine, then jump 
7ad0: 74 6f 20 50 32 20 72 61 74 68 65 72 20 74 68 61  to P2 rather tha
7ae0: 6e 20 63 6f 6e 74 69 6e 75 69 6e 67 20 77 69 74  n continuing wit
7af0: 68 20 74 68 65 0a 2a 2a 20 6e 65 78 74 20 69 6e  h the.** next in
7b00: 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a  struction..**.**
7b10: 20 53 65 65 20 61 6c 73 6f 3a 20 49 6e 69 74 43   See also: InitC
7b20: 6f 72 6f 75 74 69 6e 65 0a 2a 2f 0a 63 61 73 65  oroutine.*/.case
7b30: 20 4f 50 5f 59 69 65 6c 64 3a 20 7b 20 20 20 20   OP_Yield: {    
7b40: 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 31 2c 20          /* in1, 
7b50: 6a 75 6d 70 20 2a 2f 0a 20 20 69 6e 74 20 70 63  jump */.  int pc
7b60: 44 65 73 74 3b 0a 20 20 70 49 6e 31 20 3d 20 26  Dest;.  pIn1 = &
7b70: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  aMem[pOp->p1];. 
7b80: 20 61 73 73 65 72 74 28 20 56 64 62 65 4d 65 6d   assert( VdbeMem
7b90: 44 79 6e 61 6d 69 63 28 70 49 6e 31 29 3d 3d 30  Dynamic(pIn1)==0
7ba0: 20 29 3b 0a 20 20 70 49 6e 31 2d 3e 66 6c 61 67   );.  pIn1->flag
7bb0: 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20 70  s = MEM_Int;.  p
7bc0: 63 44 65 73 74 20 3d 20 28 69 6e 74 29 70 49 6e  cDest = (int)pIn
7bd0: 31 2d 3e 75 2e 69 3b 0a 20 20 70 49 6e 31 2d 3e  1->u.i;.  pIn1->
7be0: 75 2e 69 20 3d 20 28 69 6e 74 29 28 70 4f 70 20  u.i = (int)(pOp 
7bf0: 2d 20 61 4f 70 29 3b 0a 20 20 52 45 47 49 53 54  - aOp);.  REGIST
7c00: 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 31  ER_TRACE(pOp->p1
7c10: 2c 20 70 49 6e 31 29 3b 0a 20 20 70 4f 70 20 3d  , pIn1);.  pOp =
7c20: 20 26 61 4f 70 5b 70 63 44 65 73 74 5d 3b 0a 20   &aOp[pcDest];. 
7c30: 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
7c40: 63 6f 64 65 3a 20 20 48 61 6c 74 49 66 4e 75 6c  code:  HaltIfNul
7c50: 6c 20 20 50 31 20 50 32 20 50 33 20 50 34 20 50  l  P1 P2 P3 P4 P
7c60: 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69  5.** Synopsis: i
7c70: 66 20 72 5b 50 33 5d 3d 6e 75 6c 6c 20 68 61 6c  f r[P3]=null hal
7c80: 74 0a 2a 2a 0a 2a 2a 20 43 68 65 63 6b 20 74 68  t.**.** Check th
7c90: 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73  e value in regis
7ca0: 74 65 72 20 50 33 2e 20 20 49 66 20 69 74 20 69  ter P3.  If it i
7cb0: 73 20 4e 55 4c 4c 20 74 68 65 6e 20 48 61 6c 74  s NULL then Halt
7cc0: 20 75 73 69 6e 67 0a 2a 2a 20 70 61 72 61 6d 65   using.** parame
7cd0: 74 65 72 20 50 31 2c 20 50 32 2c 20 61 6e 64 20  ter P1, P2, and 
7ce0: 50 34 20 61 73 20 69 66 20 74 68 69 73 20 77 65  P4 as if this we
7cf0: 72 65 20 61 20 48 61 6c 74 20 69 6e 73 74 72 75  re a Halt instru
7d00: 63 74 69 6f 6e 2e 20 20 49 66 20 74 68 65 0a 2a  ction.  If the.*
7d10: 2a 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73  * value in regis
7d20: 74 65 72 20 50 33 20 69 73 20 6e 6f 74 20 4e 55  ter P3 is not NU
7d30: 4c 4c 2c 20 74 68 65 6e 20 74 68 69 73 20 72 6f  LL, then this ro
7d40: 75 74 69 6e 65 20 69 73 20 61 20 6e 6f 2d 6f 70  utine is a no-op
7d50: 2e 0a 2a 2a 20 54 68 65 20 50 35 20 70 61 72 61  ..** The P5 para
7d60: 6d 65 74 65 72 20 73 68 6f 75 6c 64 20 62 65 20  meter should be 
7d70: 31 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 48 61  1..*/.case OP_Ha
7d80: 6c 74 49 66 4e 75 6c 6c 3a 20 7b 20 20 20 20 20  ltIfNull: {     
7d90: 20 2f 2a 20 69 6e 33 20 2a 2f 0a 20 20 70 49 6e   /* in3 */.  pIn
7da0: 33 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  3 = &aMem[pOp->p
7db0: 33 5d 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54  3];.#ifdef SQLIT
7dc0: 45 5f 44 45 42 55 47 0a 20 20 69 66 28 20 70 4f  E_DEBUG.  if( pO
7dd0: 70 2d 3e 70 32 3d 3d 4f 45 5f 41 62 6f 72 74 20  p->p2==OE_Abort 
7de0: 29 7b 20 73 71 6c 69 74 65 33 56 64 62 65 41 73  ){ sqlite3VdbeAs
7df0: 73 65 72 74 41 62 6f 72 74 61 62 6c 65 28 70 29  sertAbortable(p)
7e00: 3b 20 7d 0a 23 65 6e 64 69 66 0a 20 20 69 66 28  ; }.#endif.  if(
7e10: 20 28 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20   (pIn3->flags & 
7e20: 4d 45 4d 5f 4e 75 6c 6c 29 3d 3d 30 20 29 20 62  MEM_Null)==0 ) b
7e30: 72 65 61 6b 3b 0a 20 20 2f 2a 20 46 61 6c 6c 20  reak;.  /* Fall 
7e40: 74 68 72 6f 75 67 68 20 69 6e 74 6f 20 4f 50 5f  through into OP_
7e50: 48 61 6c 74 20 2a 2f 0a 7d 0a 0a 2f 2a 20 4f 70  Halt */.}../* Op
7e60: 63 6f 64 65 3a 20 20 48 61 6c 74 20 50 31 20 50  code:  Halt P1 P
7e70: 32 20 2a 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20  2 * P4 P5.**.** 
7e80: 45 78 69 74 20 69 6d 6d 65 64 69 61 74 65 6c 79  Exit immediately
7e90: 2e 20 20 41 6c 6c 20 6f 70 65 6e 20 63 75 72 73  .  All open curs
7ea0: 6f 72 73 2c 20 65 74 63 20 61 72 65 20 63 6c 6f  ors, etc are clo
7eb0: 73 65 64 0a 2a 2a 20 61 75 74 6f 6d 61 74 69 63  sed.** automatic
7ec0: 61 6c 6c 79 2e 0a 2a 2a 0a 2a 2a 20 50 31 20 69  ally..**.** P1 i
7ed0: 73 20 74 68 65 20 72 65 73 75 6c 74 20 63 6f 64  s the result cod
7ee0: 65 20 72 65 74 75 72 6e 65 64 20 62 79 20 73 71  e returned by sq
7ef0: 6c 69 74 65 33 5f 65 78 65 63 28 29 2c 20 73 71  lite3_exec(), sq
7f00: 6c 69 74 65 33 5f 72 65 73 65 74 28 29 2c 0a 2a  lite3_reset(),.*
7f10: 2a 20 6f 72 20 73 71 6c 69 74 65 33 5f 66 69 6e  * or sqlite3_fin
7f20: 61 6c 69 7a 65 28 29 2e 20 20 46 6f 72 20 61 20  alize().  For a 
7f30: 6e 6f 72 6d 61 6c 20 68 61 6c 74 2c 20 74 68 69  normal halt, thi
7f40: 73 20 73 68 6f 75 6c 64 20 62 65 20 53 51 4c 49  s should be SQLI
7f50: 54 45 5f 4f 4b 20 28 30 29 2e 0a 2a 2a 20 46 6f  TE_OK (0)..** Fo
7f60: 72 20 65 72 72 6f 72 73 2c 20 69 74 20 63 61 6e  r errors, it can
7f70: 20 62 65 20 73 6f 6d 65 20 6f 74 68 65 72 20 76   be some other v
7f80: 61 6c 75 65 2e 20 20 49 66 20 50 31 21 3d 30 20  alue.  If P1!=0 
7f90: 74 68 65 6e 20 50 32 20 77 69 6c 6c 20 64 65 74  then P2 will det
7fa0: 65 72 6d 69 6e 65 0a 2a 2a 20 77 68 65 74 68 65  ermine.** whethe
7fb0: 72 20 6f 72 20 6e 6f 74 20 74 6f 20 72 6f 6c 6c  r or not to roll
7fc0: 62 61 63 6b 20 74 68 65 20 63 75 72 72 65 6e 74  back the current
7fd0: 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20 20 44   transaction.  D
7fe0: 6f 20 6e 6f 74 20 72 6f 6c 6c 62 61 63 6b 0a 2a  o not rollback.*
7ff0: 2a 20 69 66 20 50 32 3d 3d 4f 45 5f 46 61 69 6c  * if P2==OE_Fail
8000: 2e 20 44 6f 20 74 68 65 20 72 6f 6c 6c 62 61 63  . Do the rollbac
8010: 6b 20 69 66 20 50 32 3d 3d 4f 45 5f 52 6f 6c 6c  k if P2==OE_Roll
8020: 62 61 63 6b 2e 20 20 49 66 20 50 32 3d 3d 4f 45  back.  If P2==OE
8030: 5f 41 62 6f 72 74 2c 0a 2a 2a 20 74 68 65 6e 20  _Abort,.** then 
8040: 62 61 63 6b 20 6f 75 74 20 61 6c 6c 20 63 68 61  back out all cha
8050: 6e 67 65 73 20 74 68 61 74 20 68 61 76 65 20 6f  nges that have o
8060: 63 63 75 72 72 65 64 20 64 75 72 69 6e 67 20 74  ccurred during t
8070: 68 69 73 20 65 78 65 63 75 74 69 6f 6e 20 6f 66  his execution of
8080: 20 74 68 65 0a 2a 2a 20 56 44 42 45 2c 20 62 75   the.** VDBE, bu
8090: 74 20 64 6f 20 6e 6f 74 20 72 6f 6c 6c 62 61 63  t do not rollbac
80a0: 6b 20 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f  k the transactio
80b0: 6e 2e 20 0a 2a 2a 0a 2a 2a 20 49 66 20 50 34 20  n. .**.** If P4 
80c0: 69 73 20 6e 6f 74 20 6e 75 6c 6c 20 74 68 65 6e  is not null then
80d0: 20 69 74 20 69 73 20 61 6e 20 65 72 72 6f 72 20   it is an error 
80e0: 6d 65 73 73 61 67 65 20 73 74 72 69 6e 67 2e 0a  message string..
80f0: 2a 2a 0a 2a 2a 20 50 35 20 69 73 20 61 20 76 61  **.** P5 is a va
8100: 6c 75 65 20 62 65 74 77 65 65 6e 20 30 20 61 6e  lue between 0 an
8110: 64 20 34 2c 20 69 6e 63 6c 75 73 69 76 65 2c 20  d 4, inclusive, 
8120: 74 68 61 74 20 6d 6f 64 69 66 69 65 73 20 74 68  that modifies th
8130: 65 20 50 34 20 73 74 72 69 6e 67 2e 0a 2a 2a 0a  e P4 string..**.
8140: 2a 2a 20 20 20 20 30 3a 20 20 28 6e 6f 20 63 68  **    0:  (no ch
8150: 61 6e 67 65 29 0a 2a 2a 20 20 20 20 31 3a 20 20  ange).**    1:  
8160: 4e 4f 54 20 4e 55 4c 4c 20 63 6f 6e 74 72 61 69  NOT NULL contrai
8170: 6e 74 20 66 61 69 6c 65 64 3a 20 50 34 0a 2a 2a  nt failed: P4.**
8180: 20 20 20 20 32 3a 20 20 55 4e 49 51 55 45 20 63      2:  UNIQUE c
8190: 6f 6e 73 74 72 61 69 6e 74 20 66 61 69 6c 65 64  onstraint failed
81a0: 3a 20 50 34 0a 2a 2a 20 20 20 20 33 3a 20 20 43  : P4.**    3:  C
81b0: 48 45 43 4b 20 63 6f 6e 73 74 72 61 69 6e 74 20  HECK constraint 
81c0: 66 61 69 6c 65 64 3a 20 50 34 0a 2a 2a 20 20 20  failed: P4.**   
81d0: 20 34 3a 20 20 46 4f 52 45 49 47 4e 20 4b 45 59   4:  FOREIGN KEY
81e0: 20 63 6f 6e 73 74 72 61 69 6e 74 20 66 61 69 6c   constraint fail
81f0: 65 64 3a 20 50 34 0a 2a 2a 0a 2a 2a 20 49 66 20  ed: P4.**.** If 
8200: 50 35 20 69 73 20 6e 6f 74 20 7a 65 72 6f 20 61  P5 is not zero a
8210: 6e 64 20 50 34 20 69 73 20 4e 55 4c 4c 2c 20 74  nd P4 is NULL, t
8220: 68 65 6e 20 65 76 65 72 79 74 68 69 6e 67 20 61  hen everything a
8230: 66 74 65 72 20 74 68 65 20 22 3a 22 20 69 73 0a  fter the ":" is.
8240: 2a 2a 20 6f 6d 69 74 74 65 64 2e 0a 2a 2a 0a 2a  ** omitted..**.*
8250: 2a 20 54 68 65 72 65 20 69 73 20 61 6e 20 69 6d  * There is an im
8260: 70 6c 69 65 64 20 22 48 61 6c 74 20 30 20 30 20  plied "Halt 0 0 
8270: 30 22 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 69  0" instruction i
8280: 6e 73 65 72 74 65 64 20 61 74 20 74 68 65 20 76  nserted at the v
8290: 65 72 79 20 65 6e 64 20 6f 66 0a 2a 2a 20 65 76  ery end of.** ev
82a0: 65 72 79 20 70 72 6f 67 72 61 6d 2e 20 20 53 6f  ery program.  So
82b0: 20 61 20 6a 75 6d 70 20 70 61 73 74 20 74 68 65   a jump past the
82c0: 20 6c 61 73 74 20 69 6e 73 74 72 75 63 74 69 6f   last instructio
82d0: 6e 20 6f 66 20 74 68 65 20 70 72 6f 67 72 61 6d  n of the program
82e0: 0a 2a 2a 20 69 73 20 74 68 65 20 73 61 6d 65 20  .** is the same 
82f0: 61 73 20 65 78 65 63 75 74 69 6e 67 20 48 61 6c  as executing Hal
8300: 74 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 48 61  t..*/.case OP_Ha
8310: 6c 74 3a 20 7b 0a 20 20 56 64 62 65 46 72 61 6d  lt: {.  VdbeFram
8320: 65 20 2a 70 46 72 61 6d 65 3b 0a 20 20 69 6e 74  e *pFrame;.  int
8330: 20 70 63 78 3b 0a 0a 20 20 70 63 78 20 3d 20 28   pcx;..  pcx = (
8340: 69 6e 74 29 28 70 4f 70 20 2d 20 61 4f 70 29 3b  int)(pOp - aOp);
8350: 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44  .#ifdef SQLITE_D
8360: 45 42 55 47 0a 20 20 69 66 28 20 70 4f 70 2d 3e  EBUG.  if( pOp->
8370: 70 32 3d 3d 4f 45 5f 41 62 6f 72 74 20 29 7b 20  p2==OE_Abort ){ 
8380: 73 71 6c 69 74 65 33 56 64 62 65 41 73 73 65 72  sqlite3VdbeAsser
8390: 74 41 62 6f 72 74 61 62 6c 65 28 70 29 3b 20 7d  tAbortable(p); }
83a0: 0a 23 65 6e 64 69 66 0a 20 20 69 66 28 20 70 4f  .#endif.  if( pO
83b0: 70 2d 3e 70 31 3d 3d 53 51 4c 49 54 45 5f 4f 4b  p->p1==SQLITE_OK
83c0: 20 26 26 20 70 2d 3e 70 46 72 61 6d 65 20 29 7b   && p->pFrame ){
83d0: 0a 20 20 20 20 2f 2a 20 48 61 6c 74 20 74 68 65  .    /* Halt the
83e0: 20 73 75 62 2d 70 72 6f 67 72 61 6d 2e 20 52 65   sub-program. Re
83f0: 74 75 72 6e 20 63 6f 6e 74 72 6f 6c 20 74 6f 20  turn control to 
8400: 74 68 65 20 70 61 72 65 6e 74 20 66 72 61 6d 65  the parent frame
8410: 2e 20 2a 2f 0a 20 20 20 20 70 46 72 61 6d 65 20  . */.    pFrame 
8420: 3d 20 70 2d 3e 70 46 72 61 6d 65 3b 0a 20 20 20  = p->pFrame;.   
8430: 20 70 2d 3e 70 46 72 61 6d 65 20 3d 20 70 46 72   p->pFrame = pFr
8440: 61 6d 65 2d 3e 70 50 61 72 65 6e 74 3b 0a 20 20  ame->pParent;.  
8450: 20 20 70 2d 3e 6e 46 72 61 6d 65 2d 2d 3b 0a 20    p->nFrame--;. 
8460: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65     sqlite3VdbeSe
8470: 74 43 68 61 6e 67 65 73 28 64 62 2c 20 70 2d 3e  tChanges(db, p->
8480: 6e 43 68 61 6e 67 65 29 3b 0a 20 20 20 20 70 63  nChange);.    pc
8490: 78 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 46  x = sqlite3VdbeF
84a0: 72 61 6d 65 52 65 73 74 6f 72 65 28 70 46 72 61  rameRestore(pFra
84b0: 6d 65 29 3b 0a 20 20 20 20 69 66 28 20 70 4f 70  me);.    if( pOp
84c0: 2d 3e 70 32 3d 3d 4f 45 5f 49 67 6e 6f 72 65 20  ->p2==OE_Ignore 
84d0: 29 7b 0a 20 20 20 20 20 20 2f 2a 20 49 6e 73 74  ){.      /* Inst
84e0: 72 75 63 74 69 6f 6e 20 70 63 78 20 69 73 20 74  ruction pcx is t
84f0: 68 65 20 4f 50 5f 50 72 6f 67 72 61 6d 20 74 68  he OP_Program th
8500: 61 74 20 69 6e 76 6f 6b 65 64 20 74 68 65 20 73  at invoked the s
8510: 75 62 2d 70 72 6f 67 72 61 6d 20 0a 20 20 20 20  ub-program .    
8520: 20 20 2a 2a 20 63 75 72 72 65 6e 74 6c 79 20 62    ** currently b
8530: 65 69 6e 67 20 68 61 6c 74 65 64 2e 20 49 66 20  eing halted. If 
8540: 74 68 65 20 70 32 20 69 6e 73 74 72 75 63 74 69  the p2 instructi
8550: 6f 6e 20 6f 66 20 74 68 69 73 20 4f 50 5f 48 61  on of this OP_Ha
8560: 6c 74 0a 20 20 20 20 20 20 2a 2a 20 69 6e 73 74  lt.      ** inst
8570: 72 75 63 74 69 6f 6e 20 69 73 20 73 65 74 20 74  ruction is set t
8580: 6f 20 4f 45 5f 49 67 6e 6f 72 65 2c 20 74 68 65  o OE_Ignore, the
8590: 6e 20 74 68 65 20 73 75 62 2d 70 72 6f 67 72 61  n the sub-progra
85a0: 6d 20 69 73 20 74 68 72 6f 77 69 6e 67 0a 20 20  m is throwing.  
85b0: 20 20 20 20 2a 2a 20 61 6e 20 49 47 4e 4f 52 45      ** an IGNORE
85c0: 20 65 78 63 65 70 74 69 6f 6e 2e 20 49 6e 20 74   exception. In t
85d0: 68 69 73 20 63 61 73 65 20 6a 75 6d 70 20 74 6f  his case jump to
85e0: 20 74 68 65 20 61 64 64 72 65 73 73 20 73 70 65   the address spe
85f0: 63 69 66 69 65 64 0a 20 20 20 20 20 20 2a 2a 20  cified.      ** 
8600: 61 73 20 74 68 65 20 70 32 20 6f 66 20 74 68 65  as the p2 of the
8610: 20 63 61 6c 6c 69 6e 67 20 4f 50 5f 50 72 6f 67   calling OP_Prog
8620: 72 61 6d 2e 20 20 2a 2f 0a 20 20 20 20 20 20 70  ram.  */.      p
8630: 63 78 20 3d 20 70 2d 3e 61 4f 70 5b 70 63 78 5d  cx = p->aOp[pcx]
8640: 2e 70 32 2d 31 3b 0a 20 20 20 20 7d 0a 20 20 20  .p2-1;.    }.   
8650: 20 61 4f 70 20 3d 20 70 2d 3e 61 4f 70 3b 0a 20   aOp = p->aOp;. 
8660: 20 20 20 61 4d 65 6d 20 3d 20 70 2d 3e 61 4d 65     aMem = p->aMe
8670: 6d 3b 0a 20 20 20 20 70 4f 70 20 3d 20 26 61 4f  m;.    pOp = &aO
8680: 70 5b 70 63 78 5d 3b 0a 20 20 20 20 62 72 65 61  p[pcx];.    brea
8690: 6b 3b 0a 20 20 7d 0a 20 20 70 2d 3e 72 63 20 3d  k;.  }.  p->rc =
86a0: 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 70 2d 3e 65   pOp->p1;.  p->e
86b0: 72 72 6f 72 41 63 74 69 6f 6e 20 3d 20 28 75 38  rrorAction = (u8
86c0: 29 70 4f 70 2d 3e 70 32 3b 0a 20 20 70 2d 3e 70  )pOp->p2;.  p->p
86d0: 63 20 3d 20 70 63 78 3b 0a 20 20 61 73 73 65 72  c = pcx;.  asser
86e0: 74 28 20 70 4f 70 2d 3e 70 35 3c 3d 34 20 29 3b  t( pOp->p5<=4 );
86f0: 0a 20 20 69 66 28 20 70 2d 3e 72 63 20 29 7b 0a  .  if( p->rc ){.
8700: 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 20      if( pOp->p5 
8710: 29 7b 0a 20 20 20 20 20 20 73 74 61 74 69 63 20  ){.      static 
8720: 63 6f 6e 73 74 20 63 68 61 72 20 2a 20 63 6f 6e  const char * con
8730: 73 74 20 61 7a 54 79 70 65 5b 5d 20 3d 20 7b 20  st azType[] = { 
8740: 22 4e 4f 54 20 4e 55 4c 4c 22 2c 20 22 55 4e 49  "NOT NULL", "UNI
8750: 51 55 45 22 2c 20 22 43 48 45 43 4b 22 2c 0a 20  QUE", "CHECK",. 
8760: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8770: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8780: 20 20 20 20 20 20 20 20 20 20 20 20 22 46 4f 52              "FOR
8790: 45 49 47 4e 20 4b 45 59 22 20 7d 3b 0a 20 20 20  EIGN KEY" };.   
87a0: 20 20 20 74 65 73 74 63 61 73 65 28 20 70 4f 70     testcase( pOp
87b0: 2d 3e 70 35 3d 3d 31 20 29 3b 0a 20 20 20 20 20  ->p5==1 );.     
87c0: 20 74 65 73 74 63 61 73 65 28 20 70 4f 70 2d 3e   testcase( pOp->
87d0: 70 35 3d 3d 32 20 29 3b 0a 20 20 20 20 20 20 74  p5==2 );.      t
87e0: 65 73 74 63 61 73 65 28 20 70 4f 70 2d 3e 70 35  estcase( pOp->p5
87f0: 3d 3d 33 20 29 3b 0a 20 20 20 20 20 20 74 65 73  ==3 );.      tes
8800: 74 63 61 73 65 28 20 70 4f 70 2d 3e 70 35 3d 3d  tcase( pOp->p5==
8810: 34 20 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74  4 );.      sqlit
8820: 65 33 56 64 62 65 45 72 72 6f 72 28 70 2c 20 22  e3VdbeError(p, "
8830: 25 73 20 63 6f 6e 73 74 72 61 69 6e 74 20 66 61  %s constraint fa
8840: 69 6c 65 64 22 2c 20 61 7a 54 79 70 65 5b 70 4f  iled", azType[pO
8850: 70 2d 3e 70 35 2d 31 5d 29 3b 0a 20 20 20 20 20  p->p5-1]);.     
8860: 20 69 66 28 20 70 4f 70 2d 3e 70 34 2e 7a 20 29   if( pOp->p4.z )
8870: 7b 0a 20 20 20 20 20 20 20 20 70 2d 3e 7a 45 72  {.        p->zEr
8880: 72 4d 73 67 20 3d 20 73 71 6c 69 74 65 33 4d 50  rMsg = sqlite3MP
8890: 72 69 6e 74 66 28 64 62 2c 20 22 25 7a 3a 20 25  rintf(db, "%z: %
88a0: 73 22 2c 20 70 2d 3e 7a 45 72 72 4d 73 67 2c 20  s", p->zErrMsg, 
88b0: 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20 20 20  pOp->p4.z);.    
88c0: 20 20 7d 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20    }.    }else{. 
88d0: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
88e0: 45 72 72 6f 72 28 70 2c 20 22 25 73 22 2c 20 70  Error(p, "%s", p
88f0: 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20 20 20 7d  Op->p4.z);.    }
8900: 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 6c 6f 67  .    sqlite3_log
8910: 28 70 4f 70 2d 3e 70 31 2c 20 22 61 62 6f 72 74  (pOp->p1, "abort
8920: 20 61 74 20 25 64 20 69 6e 20 5b 25 73 5d 3a 20   at %d in [%s]: 
8930: 25 73 22 2c 20 70 63 78 2c 20 70 2d 3e 7a 53 71  %s", pcx, p->zSq
8940: 6c 2c 20 70 2d 3e 7a 45 72 72 4d 73 67 29 3b 0a  l, p->zErrMsg);.
8950: 20 20 7d 0a 20 20 72 63 20 3d 20 73 71 6c 69 74    }.  rc = sqlit
8960: 65 33 56 64 62 65 48 61 6c 74 28 70 29 3b 0a 20  e3VdbeHalt(p);. 
8970: 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53 51 4c   assert( rc==SQL
8980: 49 54 45 5f 42 55 53 59 20 7c 7c 20 72 63 3d 3d  ITE_BUSY || rc==
8990: 53 51 4c 49 54 45 5f 4f 4b 20 7c 7c 20 72 63 3d  SQLITE_OK || rc=
89a0: 3d 53 51 4c 49 54 45 5f 45 52 52 4f 52 20 29 3b  =SQLITE_ERROR );
89b0: 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54  .  if( rc==SQLIT
89c0: 45 5f 42 55 53 59 20 29 7b 0a 20 20 20 20 70 2d  E_BUSY ){.    p-
89d0: 3e 72 63 20 3d 20 53 51 4c 49 54 45 5f 42 55 53  >rc = SQLITE_BUS
89e0: 59 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  Y;.  }else{.    
89f0: 61 73 73 65 72 74 28 20 72 63 3d 3d 53 51 4c 49  assert( rc==SQLI
8a00: 54 45 5f 4f 4b 20 7c 7c 20 28 70 2d 3e 72 63 26  TE_OK || (p->rc&
8a10: 30 78 66 66 29 3d 3d 53 51 4c 49 54 45 5f 43 4f  0xff)==SQLITE_CO
8a20: 4e 53 54 52 41 49 4e 54 20 29 3b 0a 20 20 20 20  NSTRAINT );.    
8a30: 61 73 73 65 72 74 28 20 72 63 3d 3d 53 51 4c 49  assert( rc==SQLI
8a40: 54 45 5f 4f 4b 20 7c 7c 20 64 62 2d 3e 6e 44 65  TE_OK || db->nDe
8a50: 66 65 72 72 65 64 43 6f 6e 73 3e 30 20 7c 7c 20  ferredCons>0 || 
8a60: 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 49 6d 6d  db->nDeferredImm
8a70: 43 6f 6e 73 3e 30 20 29 3b 0a 20 20 20 20 72 63  Cons>0 );.    rc
8a80: 20 3d 20 70 2d 3e 72 63 20 3f 20 53 51 4c 49 54   = p->rc ? SQLIT
8a90: 45 5f 45 52 52 4f 52 20 3a 20 53 51 4c 49 54 45  E_ERROR : SQLITE
8aa0: 5f 44 4f 4e 45 3b 0a 20 20 7d 0a 20 20 67 6f 74  _DONE;.  }.  got
8ab0: 6f 20 76 64 62 65 5f 72 65 74 75 72 6e 3b 0a 7d  o vdbe_return;.}
8ac0: 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 6e 74  ../* Opcode: Int
8ad0: 65 67 65 72 20 50 31 20 50 32 20 2a 20 2a 20 2a  eger P1 P2 * * *
8ae0: 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b  .** Synopsis: r[
8af0: 50 32 5d 3d 50 31 0a 2a 2a 0a 2a 2a 20 54 68 65  P2]=P1.**.** The
8b00: 20 33 32 2d 62 69 74 20 69 6e 74 65 67 65 72 20   32-bit integer 
8b10: 76 61 6c 75 65 20 50 31 20 69 73 20 77 72 69 74  value P1 is writ
8b20: 74 65 6e 20 69 6e 74 6f 20 72 65 67 69 73 74 65  ten into registe
8b30: 72 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  r P2..*/.case OP
8b40: 5f 49 6e 74 65 67 65 72 3a 20 7b 20 20 20 20 20  _Integer: {     
8b50: 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20      /* out2 */. 
8b60: 20 70 4f 75 74 20 3d 20 6f 75 74 32 50 72 65 72   pOut = out2Prer
8b70: 65 6c 65 61 73 65 28 70 2c 20 70 4f 70 29 3b 0a  elease(p, pOp);.
8b80: 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 70 4f    pOut->u.i = pO
8b90: 70 2d 3e 70 31 3b 0a 20 20 62 72 65 61 6b 3b 0a  p->p1;.  break;.
8ba0: 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 6e  }../* Opcode: In
8bb0: 74 36 34 20 2a 20 50 32 20 2a 20 50 34 20 2a 0a  t64 * P2 * P4 *.
8bc0: 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50  ** Synopsis: r[P
8bd0: 32 5d 3d 50 34 0a 2a 2a 0a 2a 2a 20 50 34 20 69  2]=P4.**.** P4 i
8be0: 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61  s a pointer to a
8bf0: 20 36 34 2d 62 69 74 20 69 6e 74 65 67 65 72 20   64-bit integer 
8c00: 76 61 6c 75 65 2e 0a 2a 2a 20 57 72 69 74 65 20  value..** Write 
8c10: 74 68 61 74 20 76 61 6c 75 65 20 69 6e 74 6f 20  that value into 
8c20: 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2f 0a  register P2..*/.
8c30: 63 61 73 65 20 4f 50 5f 49 6e 74 36 34 3a 20 7b  case OP_Int64: {
8c40: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75             /* ou
8c50: 74 32 20 2a 2f 0a 20 20 70 4f 75 74 20 3d 20 6f  t2 */.  pOut = o
8c60: 75 74 32 50 72 65 72 65 6c 65 61 73 65 28 70 2c  ut2Prerelease(p,
8c70: 20 70 4f 70 29 3b 0a 20 20 61 73 73 65 72 74 28   pOp);.  assert(
8c80: 20 70 4f 70 2d 3e 70 34 2e 70 49 36 34 21 3d 30   pOp->p4.pI64!=0
8c90: 20 29 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20   );.  pOut->u.i 
8ca0: 3d 20 2a 70 4f 70 2d 3e 70 34 2e 70 49 36 34 3b  = *pOp->p4.pI64;
8cb0: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 23 69 66  .  break;.}..#if
8cc0: 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
8cd0: 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 0a  _FLOATING_POINT.
8ce0: 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65 61 6c 20  /* Opcode: Real 
8cf0: 2a 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 20 53  * P2 * P4 *.** S
8d00: 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 50  ynopsis: r[P2]=P
8d10: 34 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20  4.**.** P4 is a 
8d20: 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 36 34 2d  pointer to a 64-
8d30: 62 69 74 20 66 6c 6f 61 74 69 6e 67 20 70 6f 69  bit floating poi
8d40: 6e 74 20 76 61 6c 75 65 2e 0a 2a 2a 20 57 72 69  nt value..** Wri
8d50: 74 65 20 74 68 61 74 20 76 61 6c 75 65 20 69 6e  te that value in
8d60: 74 6f 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a  to register P2..
8d70: 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65 61 6c 3a  */.case OP_Real:
8d80: 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a   {            /*
8d90: 20 73 61 6d 65 20 61 73 20 54 4b 5f 46 4c 4f 41   same as TK_FLOA
8da0: 54 2c 20 6f 75 74 32 20 2a 2f 0a 20 20 70 4f 75  T, out2 */.  pOu
8db0: 74 20 3d 20 6f 75 74 32 50 72 65 72 65 6c 65 61  t = out2Prerelea
8dc0: 73 65 28 70 2c 20 70 4f 70 29 3b 0a 20 20 70 4f  se(p, pOp);.  pO
8dd0: 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f  ut->flags = MEM_
8de0: 52 65 61 6c 3b 0a 20 20 61 73 73 65 72 74 28 20  Real;.  assert( 
8df0: 21 73 71 6c 69 74 65 33 49 73 4e 61 4e 28 2a 70  !sqlite3IsNaN(*p
8e00: 4f 70 2d 3e 70 34 2e 70 52 65 61 6c 29 20 29 3b  Op->p4.pReal) );
8e10: 0a 20 20 70 4f 75 74 2d 3e 75 2e 72 20 3d 20 2a  .  pOut->u.r = *
8e20: 70 4f 70 2d 3e 70 34 2e 70 52 65 61 6c 3b 0a 20  pOp->p4.pReal;. 
8e30: 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66   break;.}.#endif
8e40: 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 74 72  ../* Opcode: Str
8e50: 69 6e 67 38 20 2a 20 50 32 20 2a 20 50 34 20 2a  ing8 * P2 * P4 *
8e60: 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b  .** Synopsis: r[
8e70: 50 32 5d 3d 27 50 34 27 0a 2a 2a 0a 2a 2a 20 50  P2]='P4'.**.** P
8e80: 34 20 70 6f 69 6e 74 73 20 74 6f 20 61 20 6e 75  4 points to a nu
8e90: 6c 20 74 65 72 6d 69 6e 61 74 65 64 20 55 54 46  l terminated UTF
8ea0: 2d 38 20 73 74 72 69 6e 67 2e 20 54 68 69 73 20  -8 string. This 
8eb0: 6f 70 63 6f 64 65 20 69 73 20 74 72 61 6e 73 66  opcode is transf
8ec0: 6f 72 6d 65 64 20 0a 2a 2a 20 69 6e 74 6f 20 61  ormed .** into a
8ed0: 20 53 74 72 69 6e 67 20 6f 70 63 6f 64 65 20 62   String opcode b
8ee0: 65 66 6f 72 65 20 69 74 20 69 73 20 65 78 65 63  efore it is exec
8ef0: 75 74 65 64 20 66 6f 72 20 74 68 65 20 66 69 72  uted for the fir
8f00: 73 74 20 74 69 6d 65 2e 20 20 44 75 72 69 6e 67  st time.  During
8f10: 0a 2a 2a 20 74 68 69 73 20 74 72 61 6e 73 66 6f  .** this transfo
8f20: 72 6d 61 74 69 6f 6e 2c 20 74 68 65 20 6c 65 6e  rmation, the len
8f30: 67 74 68 20 6f 66 20 73 74 72 69 6e 67 20 50 34  gth of string P4
8f40: 20 69 73 20 63 6f 6d 70 75 74 65 64 20 61 6e 64   is computed and
8f50: 20 73 74 6f 72 65 64 0a 2a 2a 20 61 73 20 74 68   stored.** as th
8f60: 65 20 50 31 20 70 61 72 61 6d 65 74 65 72 2e 0a  e P1 parameter..
8f70: 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 74 72 69 6e  */.case OP_Strin
8f80: 67 38 3a 20 7b 20 20 20 20 20 20 20 20 20 2f 2a  g8: {         /*
8f90: 20 73 61 6d 65 20 61 73 20 54 4b 5f 53 54 52 49   same as TK_STRI
8fa0: 4e 47 2c 20 6f 75 74 32 20 2a 2f 0a 20 20 61 73  NG, out2 */.  as
8fb0: 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 2e 7a 21  sert( pOp->p4.z!
8fc0: 3d 30 20 29 3b 0a 20 20 70 4f 75 74 20 3d 20 6f  =0 );.  pOut = o
8fd0: 75 74 32 50 72 65 72 65 6c 65 61 73 65 28 70 2c  ut2Prerelease(p,
8fe0: 20 70 4f 70 29 3b 0a 20 20 70 4f 70 2d 3e 6f 70   pOp);.  pOp->op
8ff0: 63 6f 64 65 20 3d 20 4f 50 5f 53 74 72 69 6e 67  code = OP_String
9000: 3b 0a 20 20 70 4f 70 2d 3e 70 31 20 3d 20 73 71  ;.  pOp->p1 = sq
9010: 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28 70 4f  lite3Strlen30(pO
9020: 70 2d 3e 70 34 2e 7a 29 3b 0a 0a 23 69 66 6e 64  p->p4.z);..#ifnd
9030: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55  ef SQLITE_OMIT_U
9040: 54 46 31 36 0a 20 20 69 66 28 20 65 6e 63 6f 64  TF16.  if( encod
9050: 69 6e 67 21 3d 53 51 4c 49 54 45 5f 55 54 46 38  ing!=SQLITE_UTF8
9060: 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c   ){.    rc = sql
9070: 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 53 74  ite3VdbeMemSetSt
9080: 72 28 70 4f 75 74 2c 20 70 4f 70 2d 3e 70 34 2e  r(pOut, pOp->p4.
9090: 7a 2c 20 2d 31 2c 20 53 51 4c 49 54 45 5f 55 54  z, -1, SQLITE_UT
90a0: 46 38 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49  F8, SQLITE_STATI
90b0: 43 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20  C);.    assert( 
90c0: 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 7c 7c  rc==SQLITE_OK ||
90d0: 20 72 63 3d 3d 53 51 4c 49 54 45 5f 54 4f 4f 42   rc==SQLITE_TOOB
90e0: 49 47 20 29 3b 0a 20 20 20 20 69 66 28 20 53 51  IG );.    if( SQ
90f0: 4c 49 54 45 5f 4f 4b 21 3d 73 71 6c 69 74 65 33  LITE_OK!=sqlite3
9100: 56 64 62 65 43 68 61 6e 67 65 45 6e 63 6f 64 69  VdbeChangeEncodi
9110: 6e 67 28 70 4f 75 74 2c 20 65 6e 63 6f 64 69 6e  ng(pOut, encodin
9120: 67 29 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d  g) ) goto no_mem
9130: 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4f  ;.    assert( pO
9140: 75 74 2d 3e 73 7a 4d 61 6c 6c 6f 63 3e 30 20 26  ut->szMalloc>0 &
9150: 26 20 70 4f 75 74 2d 3e 7a 4d 61 6c 6c 6f 63 3d  & pOut->zMalloc=
9160: 3d 70 4f 75 74 2d 3e 7a 20 29 3b 0a 20 20 20 20  =pOut->z );.    
9170: 61 73 73 65 72 74 28 20 56 64 62 65 4d 65 6d 44  assert( VdbeMemD
9180: 79 6e 61 6d 69 63 28 70 4f 75 74 29 3d 3d 30 20  ynamic(pOut)==0 
9190: 29 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 73 7a 4d  );.    pOut->szM
91a0: 61 6c 6c 6f 63 20 3d 20 30 3b 0a 20 20 20 20 70  alloc = 0;.    p
91b0: 4f 75 74 2d 3e 66 6c 61 67 73 20 7c 3d 20 4d 45  Out->flags |= ME
91c0: 4d 5f 53 74 61 74 69 63 3b 0a 20 20 20 20 69 66  M_Static;.    if
91d0: 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50  ( pOp->p4type==P
91e0: 34 5f 44 59 4e 41 4d 49 43 20 29 7b 0a 20 20 20  4_DYNAMIC ){.   
91f0: 20 20 20 73 71 6c 69 74 65 33 44 62 46 72 65 65     sqlite3DbFree
9200: 28 64 62 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b  (db, pOp->p4.z);
9210: 0a 20 20 20 20 7d 0a 20 20 20 20 70 4f 70 2d 3e  .    }.    pOp->
9220: 70 34 74 79 70 65 20 3d 20 50 34 5f 44 59 4e 41  p4type = P4_DYNA
9230: 4d 49 43 3b 0a 20 20 20 20 70 4f 70 2d 3e 70 34  MIC;.    pOp->p4
9240: 2e 7a 20 3d 20 70 4f 75 74 2d 3e 7a 3b 0a 20 20  .z = pOut->z;.  
9250: 20 20 70 4f 70 2d 3e 70 31 20 3d 20 70 4f 75 74    pOp->p1 = pOut
9260: 2d 3e 6e 3b 0a 20 20 7d 0a 20 20 74 65 73 74 63  ->n;.  }.  testc
9270: 61 73 65 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f  ase( rc==SQLITE_
9280: 54 4f 4f 42 49 47 20 29 3b 0a 23 65 6e 64 69 66  TOOBIG );.#endif
9290: 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 31 3e 64  .  if( pOp->p1>d
92a0: 62 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45  b->aLimit[SQLITE
92b0: 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54 48 5d 20 29  _LIMIT_LENGTH] )
92c0: 7b 0a 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62  {.    goto too_b
92d0: 69 67 3b 0a 20 20 7d 0a 20 20 61 73 73 65 72 74  ig;.  }.  assert
92e0: 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc==SQLITE_OK 
92f0: 29 3b 0a 20 20 2f 2a 20 46 61 6c 6c 20 74 68 72  );.  /* Fall thr
9300: 6f 75 67 68 20 74 6f 20 74 68 65 20 6e 65 78 74  ough to the next
9310: 20 63 61 73 65 2c 20 4f 50 5f 53 74 72 69 6e 67   case, OP_String
9320: 20 2a 2f 0a 7d 0a 20 20 0a 2f 2a 20 4f 70 63 6f   */.}.  ./* Opco
9330: 64 65 3a 20 53 74 72 69 6e 67 20 50 31 20 50 32  de: String P1 P2
9340: 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e   P3 P4 P5.** Syn
9350: 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 27 50 34  opsis: r[P2]='P4
9360: 27 20 28 6c 65 6e 3d 50 31 29 0a 2a 2a 0a 2a 2a  ' (len=P1).**.**
9370: 20 54 68 65 20 73 74 72 69 6e 67 20 76 61 6c 75   The string valu
9380: 65 20 50 34 20 6f 66 20 6c 65 6e 67 74 68 20 50  e P4 of length P
9390: 31 20 28 62 79 74 65 73 29 20 69 73 20 73 74 6f  1 (bytes) is sto
93a0: 72 65 64 20 69 6e 20 72 65 67 69 73 74 65 72 20  red in register 
93b0: 50 32 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 33 20  P2..**.** If P3 
93c0: 69 73 20 6e 6f 74 20 7a 65 72 6f 20 61 6e 64 20  is not zero and 
93d0: 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 72  the content of r
93e0: 65 67 69 73 74 65 72 20 50 33 20 69 73 20 65 71  egister P3 is eq
93f0: 75 61 6c 20 74 6f 20 50 35 2c 20 74 68 65 6e 0a  ual to P5, then.
9400: 2a 2a 20 74 68 65 20 64 61 74 61 74 79 70 65 20  ** the datatype 
9410: 6f 66 20 74 68 65 20 72 65 67 69 73 74 65 72 20  of the register 
9420: 50 32 20 69 73 20 63 6f 6e 76 65 72 74 65 64 20  P2 is converted 
9430: 74 6f 20 42 4c 4f 42 2e 20 20 54 68 65 20 63 6f  to BLOB.  The co
9440: 6e 74 65 6e 74 20 69 73 0a 2a 2a 20 74 68 65 20  ntent is.** the 
9450: 73 61 6d 65 20 73 65 71 75 65 6e 63 65 20 6f 66  same sequence of
9460: 20 62 79 74 65 73 2c 20 69 74 20 69 73 20 6d 65   bytes, it is me
9470: 72 65 6c 79 20 69 6e 74 65 72 70 72 65 74 65 64  rely interpreted
9480: 20 61 73 20 61 20 42 4c 4f 42 20 69 6e 73 74 65   as a BLOB inste
9490: 61 64 0a 2a 2a 20 6f 66 20 61 20 73 74 72 69 6e  ad.** of a strin
94a0: 67 2c 20 61 73 20 69 66 20 69 74 20 68 61 64 20  g, as if it had 
94b0: 62 65 65 6e 20 43 41 53 54 2e 20 20 49 6e 20 6f  been CAST.  In o
94c0: 74 68 65 72 20 77 6f 72 64 73 3a 0a 2a 2a 0a 2a  ther words:.**.*
94d0: 2a 20 69 66 28 20 50 33 21 3d 30 20 61 6e 64 20  * if( P3!=0 and 
94e0: 72 65 67 5b 50 33 5d 3d 3d 50 35 20 29 20 72 65  reg[P3]==P5 ) re
94f0: 67 5b 50 32 5d 20 3a 3d 20 43 41 53 54 28 72 65  g[P2] := CAST(re
9500: 67 5b 50 32 5d 20 61 73 20 42 4c 4f 42 29 0a 2a  g[P2] as BLOB).*
9510: 2f 0a 63 61 73 65 20 4f 50 5f 53 74 72 69 6e 67  /.case OP_String
9520: 3a 20 7b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  : {          /* 
9530: 6f 75 74 32 20 2a 2f 0a 20 20 61 73 73 65 72 74  out2 */.  assert
9540: 28 20 70 4f 70 2d 3e 70 34 2e 7a 21 3d 30 20 29  ( pOp->p4.z!=0 )
9550: 3b 0a 20 20 70 4f 75 74 20 3d 20 6f 75 74 32 50  ;.  pOut = out2P
9560: 72 65 72 65 6c 65 61 73 65 28 70 2c 20 70 4f 70  rerelease(p, pOp
9570: 29 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73  );.  pOut->flags
9580: 20 3d 20 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f 53   = MEM_Str|MEM_S
9590: 74 61 74 69 63 7c 4d 45 4d 5f 54 65 72 6d 3b 0a  tatic|MEM_Term;.
95a0: 20 20 70 4f 75 74 2d 3e 7a 20 3d 20 70 4f 70 2d    pOut->z = pOp-
95b0: 3e 70 34 2e 7a 3b 0a 20 20 70 4f 75 74 2d 3e 6e  >p4.z;.  pOut->n
95c0: 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 70 4f   = pOp->p1;.  pO
95d0: 75 74 2d 3e 65 6e 63 20 3d 20 65 6e 63 6f 64 69  ut->enc = encodi
95e0: 6e 67 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41 58  ng;.  UPDATE_MAX
95f0: 5f 42 4c 4f 42 53 49 5a 45 28 70 4f 75 74 29 3b  _BLOBSIZE(pOut);
9600: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
9610: 4c 49 4b 45 5f 44 4f 45 53 4e 54 5f 4d 41 54 43  LIKE_DOESNT_MATC
9620: 48 5f 42 4c 4f 42 53 0a 20 20 69 66 28 20 70 4f  H_BLOBS.  if( pO
9630: 70 2d 3e 70 33 3e 30 20 29 7b 0a 20 20 20 20 61  p->p3>0 ){.    a
9640: 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c 3d  ssert( pOp->p3<=
9650: 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e  (p->nMem+1 - p->
9660: 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 20 20  nCursor) );.    
9670: 70 49 6e 33 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn3 = &aMem[pOp
9680: 2d 3e 70 33 5d 3b 0a 20 20 20 20 61 73 73 65 72  ->p3];.    asser
9690: 74 28 20 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26  t( pIn3->flags &
96a0: 20 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 20 20   MEM_Int );.    
96b0: 69 66 28 20 70 49 6e 33 2d 3e 75 2e 69 3d 3d 70  if( pIn3->u.i==p
96c0: 4f 70 2d 3e 70 35 20 29 20 70 4f 75 74 2d 3e 66  Op->p5 ) pOut->f
96d0: 6c 61 67 73 20 3d 20 4d 45 4d 5f 42 6c 6f 62 7c  lags = MEM_Blob|
96e0: 4d 45 4d 5f 53 74 61 74 69 63 7c 4d 45 4d 5f 54  MEM_Static|MEM_T
96f0: 65 72 6d 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 0a  erm;.  }.#endif.
9700: 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
9710: 70 63 6f 64 65 3a 20 4e 75 6c 6c 20 50 31 20 50  pcode: Null P1 P
9720: 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f  2 P3 * *.** Syno
9730: 70 73 69 73 3a 20 72 5b 50 32 2e 2e 50 33 5d 3d  psis: r[P2..P3]=
9740: 4e 55 4c 4c 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65  NULL.**.** Write
9750: 20 61 20 4e 55 4c 4c 20 69 6e 74 6f 20 72 65 67   a NULL into reg
9760: 69 73 74 65 72 73 20 50 32 2e 20 20 49 66 20 50  isters P2.  If P
9770: 33 20 67 72 65 61 74 65 72 20 74 68 61 6e 20 50  3 greater than P
9780: 32 2c 20 74 68 65 6e 20 61 6c 73 6f 20 77 72 69  2, then also wri
9790: 74 65 0a 2a 2a 20 4e 55 4c 4c 20 69 6e 74 6f 20  te.** NULL into 
97a0: 72 65 67 69 73 74 65 72 20 50 33 20 61 6e 64 20  register P3 and 
97b0: 65 76 65 72 79 20 72 65 67 69 73 74 65 72 20 69  every register i
97c0: 6e 20 62 65 74 77 65 65 6e 20 50 32 20 61 6e 64  n between P2 and
97d0: 20 50 33 2e 20 20 49 66 20 50 33 0a 2a 2a 20 69   P3.  If P3.** i
97e0: 73 20 6c 65 73 73 20 74 68 61 6e 20 50 32 20 28  s less than P2 (
97f0: 74 79 70 69 63 61 6c 6c 79 20 50 33 20 69 73 20  typically P3 is 
9800: 7a 65 72 6f 29 20 74 68 65 6e 20 6f 6e 6c 79 20  zero) then only 
9810: 72 65 67 69 73 74 65 72 20 50 32 20 69 73 0a 2a  register P2 is.*
9820: 2a 20 73 65 74 20 74 6f 20 4e 55 4c 4c 2e 0a 2a  * set to NULL..*
9830: 2a 0a 2a 2a 20 49 66 20 74 68 65 20 50 31 20 76  *.** If the P1 v
9840: 61 6c 75 65 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f  alue is non-zero
9850: 2c 20 74 68 65 6e 20 61 6c 73 6f 20 73 65 74 20  , then also set 
9860: 74 68 65 20 4d 45 4d 5f 43 6c 65 61 72 65 64 20  the MEM_Cleared 
9870: 66 6c 61 67 20 73 6f 20 74 68 61 74 0a 2a 2a 20  flag so that.** 
9880: 4e 55 4c 4c 20 76 61 6c 75 65 73 20 77 69 6c 6c  NULL values will
9890: 20 6e 6f 74 20 63 6f 6d 70 61 72 65 20 65 71 75   not compare equ
98a0: 61 6c 20 65 76 65 6e 20 69 66 20 53 51 4c 49 54  al even if SQLIT
98b0: 45 5f 4e 55 4c 4c 45 51 20 69 73 20 73 65 74 20  E_NULLEQ is set 
98c0: 6f 6e 0a 2a 2a 20 4f 50 5f 4e 65 20 6f 72 20 4f  on.** OP_Ne or O
98d0: 50 5f 45 71 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  P_Eq..*/.case OP
98e0: 5f 4e 75 6c 6c 3a 20 7b 20 20 20 20 20 20 20 20  _Null: {        
98f0: 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20 20     /* out2 */.  
9900: 69 6e 74 20 63 6e 74 3b 0a 20 20 75 31 36 20 6e  int cnt;.  u16 n
9910: 75 6c 6c 46 6c 61 67 3b 0a 20 20 70 4f 75 74 20  ullFlag;.  pOut 
9920: 3d 20 6f 75 74 32 50 72 65 72 65 6c 65 61 73 65  = out2Prerelease
9930: 28 70 2c 20 70 4f 70 29 3b 0a 20 20 63 6e 74 20  (p, pOp);.  cnt 
9940: 3d 20 70 4f 70 2d 3e 70 33 2d 70 4f 70 2d 3e 70  = pOp->p3-pOp->p
9950: 32 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  2;.  assert( pOp
9960: 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31  ->p3<=(p->nMem+1
9970: 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29   - p->nCursor) )
9980: 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20  ;.  pOut->flags 
9990: 3d 20 6e 75 6c 6c 46 6c 61 67 20 3d 20 70 4f 70  = nullFlag = pOp
99a0: 2d 3e 70 31 20 3f 20 28 4d 45 4d 5f 4e 75 6c 6c  ->p1 ? (MEM_Null
99b0: 7c 4d 45 4d 5f 43 6c 65 61 72 65 64 29 20 3a 20  |MEM_Cleared) : 
99c0: 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20 20 70 4f 75 74  MEM_Null;.  pOut
99d0: 2d 3e 6e 20 3d 20 30 3b 0a 23 69 66 64 65 66 20  ->n = 0;.#ifdef 
99e0: 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 70  SQLITE_DEBUG.  p
99f0: 4f 75 74 2d 3e 75 54 65 6d 70 20 3d 20 30 3b 0a  Out->uTemp = 0;.
9a00: 23 65 6e 64 69 66 0a 20 20 77 68 69 6c 65 28 20  #endif.  while( 
9a10: 63 6e 74 3e 30 20 29 7b 0a 20 20 20 20 70 4f 75  cnt>0 ){.    pOu
9a20: 74 2b 2b 3b 0a 20 20 20 20 6d 65 6d 41 62 6f 75  t++;.    memAbou
9a30: 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 4f 75  tToChange(p, pOu
9a40: 74 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56  t);.    sqlite3V
9a50: 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 4f  dbeMemSetNull(pO
9a60: 75 74 29 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 66  ut);.    pOut->f
9a70: 6c 61 67 73 20 3d 20 6e 75 6c 6c 46 6c 61 67 3b  lags = nullFlag;
9a80: 0a 20 20 20 20 70 4f 75 74 2d 3e 6e 20 3d 20 30  .    pOut->n = 0
9a90: 3b 0a 20 20 20 20 63 6e 74 2d 2d 3b 0a 20 20 7d  ;.    cnt--;.  }
9aa0: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
9ab0: 4f 70 63 6f 64 65 3a 20 53 6f 66 74 4e 75 6c 6c  Opcode: SoftNull
9ac0: 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 20 53   P1 * * * *.** S
9ad0: 79 6e 6f 70 73 69 73 3a 20 72 5b 50 31 5d 3d 4e  ynopsis: r[P1]=N
9ae0: 55 4c 4c 0a 2a 2a 0a 2a 2a 20 53 65 74 20 72 65  ULL.**.** Set re
9af0: 67 69 73 74 65 72 20 50 31 20 74 6f 20 68 61 76  gister P1 to hav
9b00: 65 20 74 68 65 20 76 61 6c 75 65 20 4e 55 4c 4c  e the value NULL
9b10: 20 61 73 20 73 65 65 6e 20 62 79 20 74 68 65 20   as seen by the 
9b20: 4f 50 5f 4d 61 6b 65 52 65 63 6f 72 64 0a 2a 2a  OP_MakeRecord.**
9b30: 20 69 6e 73 74 72 75 63 74 69 6f 6e 2c 20 62 75   instruction, bu
9b40: 74 20 64 6f 20 6e 6f 74 20 66 72 65 65 20 61 6e  t do not free an
9b50: 79 20 73 74 72 69 6e 67 20 6f 72 20 62 6c 6f 62  y string or blob
9b60: 20 6d 65 6d 6f 72 79 20 61 73 73 6f 63 69 61 74   memory associat
9b70: 65 64 20 77 69 74 68 0a 2a 2a 20 74 68 65 20 72  ed with.** the r
9b80: 65 67 69 73 74 65 72 2c 20 73 6f 20 74 68 61 74  egister, so that
9b90: 20 69 66 20 74 68 65 20 76 61 6c 75 65 20 77 61   if the value wa
9ba0: 73 20 61 20 73 74 72 69 6e 67 20 6f 72 20 62 6c  s a string or bl
9bb0: 6f 62 20 74 68 61 74 20 77 61 73 0a 2a 2a 20 70  ob that was.** p
9bc0: 72 65 76 69 6f 75 73 6c 79 20 63 6f 70 69 65 64  reviously copied
9bd0: 20 75 73 69 6e 67 20 4f 50 5f 53 43 6f 70 79 2c   using OP_SCopy,
9be0: 20 74 68 65 20 63 6f 70 69 65 73 20 77 69 6c 6c   the copies will
9bf0: 20 63 6f 6e 74 69 6e 75 65 20 74 6f 20 62 65 20   continue to be 
9c00: 76 61 6c 69 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f  valid..*/.case O
9c10: 50 5f 53 6f 66 74 4e 75 6c 6c 3a 20 7b 0a 20 20  P_SoftNull: {.  
9c20: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
9c30: 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 3d 28 70  0 && pOp->p1<=(p
9c40: 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43  ->nMem+1 - p->nC
9c50: 75 72 73 6f 72 29 20 29 3b 0a 20 20 70 4f 75 74  ursor) );.  pOut
9c60: 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31   = &aMem[pOp->p1
9c70: 5d 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73  ];.  pOut->flags
9c80: 20 3d 20 28 70 4f 75 74 2d 3e 66 6c 61 67 73 26   = (pOut->flags&
9c90: 7e 28 4d 45 4d 5f 55 6e 64 65 66 69 6e 65 64 7c  ~(MEM_Undefined|
9ca0: 4d 45 4d 5f 41 66 66 4d 61 73 6b 29 29 7c 4d 45  MEM_AffMask))|ME
9cb0: 4d 5f 4e 75 6c 6c 3b 0a 20 20 62 72 65 61 6b 3b  M_Null;.  break;
9cc0: 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 42  .}../* Opcode: B
9cd0: 6c 6f 62 20 50 31 20 50 32 20 2a 20 50 34 20 2a  lob P1 P2 * P4 *
9ce0: 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b  .** Synopsis: r[
9cf0: 50 32 5d 3d 50 34 20 28 6c 65 6e 3d 50 31 29 0a  P2]=P4 (len=P1).
9d00: 2a 2a 0a 2a 2a 20 50 34 20 70 6f 69 6e 74 73 20  **.** P4 points 
9d10: 74 6f 20 61 20 62 6c 6f 62 20 6f 66 20 64 61 74  to a blob of dat
9d20: 61 20 50 31 20 62 79 74 65 73 20 6c 6f 6e 67 2e  a P1 bytes long.
9d30: 20 20 53 74 6f 72 65 20 74 68 69 73 0a 2a 2a 20    Store this.** 
9d40: 62 6c 6f 62 20 69 6e 20 72 65 67 69 73 74 65 72  blob in register
9d50: 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f   P2..*/.case OP_
9d60: 42 6c 6f 62 3a 20 7b 20 20 20 20 20 20 20 20 20  Blob: {         
9d70: 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a         /* out2 *
9d80: 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  /.  assert( pOp-
9d90: 3e 70 31 20 3c 3d 20 53 51 4c 49 54 45 5f 4d 41  >p1 <= SQLITE_MA
9da0: 58 5f 4c 45 4e 47 54 48 20 29 3b 0a 20 20 70 4f  X_LENGTH );.  pO
9db0: 75 74 20 3d 20 6f 75 74 32 50 72 65 72 65 6c 65  ut = out2Prerele
9dc0: 61 73 65 28 70 2c 20 70 4f 70 29 3b 0a 20 20 73  ase(p, pOp);.  s
9dd0: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74  qlite3VdbeMemSet
9de0: 53 74 72 28 70 4f 75 74 2c 20 70 4f 70 2d 3e 70  Str(pOut, pOp->p
9df0: 34 2e 7a 2c 20 70 4f 70 2d 3e 70 31 2c 20 30 2c  4.z, pOp->p1, 0,
9e00: 20 30 29 3b 0a 20 20 70 4f 75 74 2d 3e 65 6e 63   0);.  pOut->enc
9e10: 20 3d 20 65 6e 63 6f 64 69 6e 67 3b 0a 20 20 55   = encoding;.  U
9e20: 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49  PDATE_MAX_BLOBSI
9e30: 5a 45 28 70 4f 75 74 29 3b 0a 20 20 62 72 65 61  ZE(pOut);.  brea
9e40: 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
9e50: 20 56 61 72 69 61 62 6c 65 20 50 31 20 50 32 20   Variable P1 P2 
9e60: 2a 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73  * P4 *.** Synops
9e70: 69 73 3a 20 72 5b 50 32 5d 3d 70 61 72 61 6d 65  is: r[P2]=parame
9e80: 74 65 72 28 50 31 2c 50 34 29 0a 2a 2a 0a 2a 2a  ter(P1,P4).**.**
9e90: 20 54 72 61 6e 73 66 65 72 20 74 68 65 20 76 61   Transfer the va
9ea0: 6c 75 65 73 20 6f 66 20 62 6f 75 6e 64 20 70 61  lues of bound pa
9eb0: 72 61 6d 65 74 65 72 20 50 31 20 69 6e 74 6f 20  rameter P1 into 
9ec0: 72 65 67 69 73 74 65 72 20 50 32 0a 2a 2a 0a 2a  register P2.**.*
9ed0: 2a 20 49 66 20 74 68 65 20 70 61 72 61 6d 65 74  * If the paramet
9ee0: 65 72 20 69 73 20 6e 61 6d 65 64 2c 20 74 68 65  er is named, the
9ef0: 6e 20 69 74 73 20 6e 61 6d 65 20 61 70 70 65 61  n its name appea
9f00: 72 73 20 69 6e 20 50 34 2e 0a 2a 2a 20 54 68 65  rs in P4..** The
9f10: 20 50 34 20 76 61 6c 75 65 20 69 73 20 75 73 65   P4 value is use
9f20: 64 20 62 79 20 73 71 6c 69 74 65 33 5f 62 69 6e  d by sqlite3_bin
9f30: 64 5f 70 61 72 61 6d 65 74 65 72 5f 6e 61 6d 65  d_parameter_name
9f40: 28 29 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56  ()..*/.case OP_V
9f50: 61 72 69 61 62 6c 65 3a 20 7b 20 20 20 20 20 20  ariable: {      
9f60: 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f        /* out2 */
9f70: 0a 20 20 4d 65 6d 20 2a 70 56 61 72 3b 20 20 20  .  Mem *pVar;   
9f80: 20 20 20 20 2f 2a 20 56 61 6c 75 65 20 62 65 69      /* Value bei
9f90: 6e 67 20 74 72 61 6e 73 66 65 72 72 65 64 20 2a  ng transferred *
9fa0: 2f 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  /..  assert( pOp
9fb0: 2d 3e 70 31 3e 30 20 26 26 20 70 4f 70 2d 3e 70  ->p1>0 && pOp->p
9fc0: 31 3c 3d 70 2d 3e 6e 56 61 72 20 29 3b 0a 20 20  1<=p->nVar );.  
9fd0: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 2e  assert( pOp->p4.
9fe0: 7a 3d 3d 30 20 7c 7c 20 70 4f 70 2d 3e 70 34 2e  z==0 || pOp->p4.
9ff0: 7a 3d 3d 73 71 6c 69 74 65 33 56 4c 69 73 74 4e  z==sqlite3VListN
a000: 75 6d 54 6f 4e 61 6d 65 28 70 2d 3e 70 56 4c 69  umToName(p->pVLi
a010: 73 74 2c 70 4f 70 2d 3e 70 31 29 20 29 3b 0a 20  st,pOp->p1) );. 
a020: 20 70 56 61 72 20 3d 20 26 70 2d 3e 61 56 61 72   pVar = &p->aVar
a030: 5b 70 4f 70 2d 3e 70 31 20 2d 20 31 5d 3b 0a 20  [pOp->p1 - 1];. 
a040: 20 69 66 28 20 73 71 6c 69 74 65 33 56 64 62 65   if( sqlite3Vdbe
a050: 4d 65 6d 54 6f 6f 42 69 67 28 70 56 61 72 29 20  MemTooBig(pVar) 
a060: 29 7b 0a 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f  ){.    goto too_
a070: 62 69 67 3b 0a 20 20 7d 0a 20 20 70 4f 75 74 20  big;.  }.  pOut 
a080: 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d  = &aMem[pOp->p2]
a090: 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d  ;.  sqlite3VdbeM
a0a0: 65 6d 53 68 61 6c 6c 6f 77 43 6f 70 79 28 70 4f  emShallowCopy(pO
a0b0: 75 74 2c 20 70 56 61 72 2c 20 4d 45 4d 5f 53 74  ut, pVar, MEM_St
a0c0: 61 74 69 63 29 3b 0a 20 20 55 50 44 41 54 45 5f  atic);.  UPDATE_
a0d0: 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 4f 75  MAX_BLOBSIZE(pOu
a0e0: 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  t);.  break;.}..
a0f0: 2f 2a 20 4f 70 63 6f 64 65 3a 20 4d 6f 76 65 20  /* Opcode: Move 
a100: 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20  P1 P2 P3 * *.** 
a110: 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 40 50  Synopsis: r[P2@P
a120: 33 5d 3d 72 5b 50 31 40 50 33 5d 0a 2a 2a 0a 2a  3]=r[P1@P3].**.*
a130: 2a 20 4d 6f 76 65 20 74 68 65 20 50 33 20 76 61  * Move the P3 va
a140: 6c 75 65 73 20 69 6e 20 72 65 67 69 73 74 65 72  lues in register
a150: 20 50 31 2e 2e 50 31 2b 50 33 2d 31 20 6f 76 65   P1..P1+P3-1 ove
a160: 72 20 69 6e 74 6f 0a 2a 2a 20 72 65 67 69 73 74  r into.** regist
a170: 65 72 73 20 50 32 2e 2e 50 32 2b 50 33 2d 31 2e  ers P2..P2+P3-1.
a180: 20 20 52 65 67 69 73 74 65 72 73 20 50 31 2e 2e    Registers P1..
a190: 50 31 2b 50 33 2d 31 20 61 72 65 0a 2a 2a 20 6c  P1+P3-1 are.** l
a1a0: 65 66 74 20 68 6f 6c 64 69 6e 67 20 61 20 4e 55  eft holding a NU
a1b0: 4c 4c 2e 20 20 49 74 20 69 73 20 61 6e 20 65 72  LL.  It is an er
a1c0: 72 6f 72 20 66 6f 72 20 72 65 67 69 73 74 65 72  ror for register
a1d0: 20 72 61 6e 67 65 73 0a 2a 2a 20 50 31 2e 2e 50   ranges.** P1..P
a1e0: 31 2b 50 33 2d 31 20 61 6e 64 20 50 32 2e 2e 50  1+P3-1 and P2..P
a1f0: 32 2b 50 33 2d 31 20 74 6f 20 6f 76 65 72 6c 61  2+P3-1 to overla
a200: 70 2e 20 20 49 74 20 69 73 20 61 6e 20 65 72 72  p.  It is an err
a210: 6f 72 0a 2a 2a 20 66 6f 72 20 50 33 20 74 6f 20  or.** for P3 to 
a220: 62 65 20 6c 65 73 73 20 74 68 61 6e 20 31 2e 0a  be less than 1..
a230: 2a 2f 0a 63 61 73 65 20 4f 50 5f 4d 6f 76 65 3a  */.case OP_Move:
a240: 20 7b 0a 20 20 69 6e 74 20 6e 3b 20 20 20 20 20   {.  int n;     
a250: 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
a260: 6f 66 20 72 65 67 69 73 74 65 72 73 20 6c 65 66  of registers lef
a270: 74 20 74 6f 20 63 6f 70 79 20 2a 2f 0a 20 20 69  t to copy */.  i
a280: 6e 74 20 70 31 3b 20 20 20 20 20 20 20 20 20 20  nt p1;          
a290: 2f 2a 20 52 65 67 69 73 74 65 72 20 74 6f 20 63  /* Register to c
a2a0: 6f 70 79 20 66 72 6f 6d 20 2a 2f 0a 20 20 69 6e  opy from */.  in
a2b0: 74 20 70 32 3b 20 20 20 20 20 20 20 20 20 20 2f  t p2;          /
a2c0: 2a 20 52 65 67 69 73 74 65 72 20 74 6f 20 63 6f  * Register to co
a2d0: 70 79 20 74 6f 20 2a 2f 0a 0a 20 20 6e 20 3d 20  py to */..  n = 
a2e0: 70 4f 70 2d 3e 70 33 3b 0a 20 20 70 31 20 3d 20  pOp->p3;.  p1 = 
a2f0: 70 4f 70 2d 3e 70 31 3b 0a 20 20 70 32 20 3d 20  pOp->p1;.  p2 = 
a300: 70 4f 70 2d 3e 70 32 3b 0a 20 20 61 73 73 65 72  pOp->p2;.  asser
a310: 74 28 20 6e 3e 30 20 26 26 20 70 31 3e 30 20 26  t( n>0 && p1>0 &
a320: 26 20 70 32 3e 30 20 29 3b 0a 20 20 61 73 73 65  & p2>0 );.  asse
a330: 72 74 28 20 70 31 2b 6e 3c 3d 70 32 20 7c 7c 20  rt( p1+n<=p2 || 
a340: 70 32 2b 6e 3c 3d 70 31 20 29 3b 0a 0a 20 20 70  p2+n<=p1 );..  p
a350: 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 31 5d 3b  In1 = &aMem[p1];
a360: 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b  .  pOut = &aMem[
a370: 70 32 5d 3b 0a 20 20 64 6f 7b 0a 20 20 20 20 61  p2];.  do{.    a
a380: 73 73 65 72 74 28 20 70 4f 75 74 3c 3d 26 61 4d  ssert( pOut<=&aM
a390: 65 6d 5b 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20  em[(p->nMem+1 - 
a3a0: 70 2d 3e 6e 43 75 72 73 6f 72 29 5d 20 29 3b 0a  p->nCursor)] );.
a3b0: 20 20 20 20 61 73 73 65 72 74 28 20 70 49 6e 31      assert( pIn1
a3c0: 3c 3d 26 61 4d 65 6d 5b 28 70 2d 3e 6e 4d 65 6d  <=&aMem[(p->nMem
a3d0: 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29  +1 - p->nCursor)
a3e0: 5d 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  ] );.    assert(
a3f0: 20 6d 65 6d 49 73 56 61 6c 69 64 28 70 49 6e 31   memIsValid(pIn1
a400: 29 20 29 3b 0a 20 20 20 20 6d 65 6d 41 62 6f 75  ) );.    memAbou
a410: 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 4f 75  tToChange(p, pOu
a420: 74 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56  t);.    sqlite3V
a430: 64 62 65 4d 65 6d 4d 6f 76 65 28 70 4f 75 74 2c  dbeMemMove(pOut,
a440: 20 70 49 6e 31 29 3b 0a 23 69 66 64 65 66 20 53   pIn1);.#ifdef S
a450: 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 20 20  QLITE_DEBUG.    
a460: 69 66 28 20 70 4f 75 74 2d 3e 70 53 63 6f 70 79  if( pOut->pScopy
a470: 46 72 6f 6d 3e 3d 26 61 4d 65 6d 5b 70 31 5d 20  From>=&aMem[p1] 
a480: 26 26 20 70 4f 75 74 2d 3e 70 53 63 6f 70 79 46  && pOut->pScopyF
a490: 72 6f 6d 3c 70 4f 75 74 20 29 7b 0a 20 20 20 20  rom<pOut ){.    
a4a0: 20 20 70 4f 75 74 2d 3e 70 53 63 6f 70 79 46 72    pOut->pScopyFr
a4b0: 6f 6d 20 2b 3d 20 70 4f 70 2d 3e 70 32 20 2d 20  om += pOp->p2 - 
a4c0: 70 31 3b 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66  p1;.    }.#endif
a4d0: 0a 20 20 20 20 44 65 65 70 68 65 6d 65 72 61 6c  .    Deephemeral
a4e0: 69 7a 65 28 70 4f 75 74 29 3b 0a 20 20 20 20 52  ize(pOut);.    R
a4f0: 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 32  EGISTER_TRACE(p2
a500: 2b 2b 2c 20 70 4f 75 74 29 3b 0a 20 20 20 20 70  ++, pOut);.    p
a510: 49 6e 31 2b 2b 3b 0a 20 20 20 20 70 4f 75 74 2b  In1++;.    pOut+
a520: 2b 3b 0a 20 20 7d 77 68 69 6c 65 28 20 2d 2d 6e  +;.  }while( --n
a530: 20 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a   );.  break;.}..
a540: 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6f 70 79 20  /* Opcode: Copy 
a550: 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20  P1 P2 P3 * *.** 
a560: 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 40 50  Synopsis: r[P2@P
a570: 33 2b 31 5d 3d 72 5b 50 31 40 50 33 2b 31 5d 0a  3+1]=r[P1@P3+1].
a580: 2a 2a 0a 2a 2a 20 4d 61 6b 65 20 61 20 63 6f 70  **.** Make a cop
a590: 79 20 6f 66 20 72 65 67 69 73 74 65 72 73 20 50  y of registers P
a5a0: 31 2e 2e 50 31 2b 50 33 20 69 6e 74 6f 20 72 65  1..P1+P3 into re
a5b0: 67 69 73 74 65 72 73 20 50 32 2e 2e 50 32 2b 50  gisters P2..P2+P
a5c0: 33 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 6e  3..**.** This in
a5d0: 73 74 72 75 63 74 69 6f 6e 20 6d 61 6b 65 73 20  struction makes 
a5e0: 61 20 64 65 65 70 20 63 6f 70 79 20 6f 66 20 74  a deep copy of t
a5f0: 68 65 20 76 61 6c 75 65 2e 20 20 41 20 64 75 70  he value.  A dup
a600: 6c 69 63 61 74 65 0a 2a 2a 20 69 73 20 6d 61 64  licate.** is mad
a610: 65 20 6f 66 20 61 6e 79 20 73 74 72 69 6e 67 20  e of any string 
a620: 6f 72 20 62 6c 6f 62 20 63 6f 6e 73 74 61 6e 74  or blob constant
a630: 2e 20 20 53 65 65 20 61 6c 73 6f 20 4f 50 5f 53  .  See also OP_S
a640: 43 6f 70 79 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  Copy..*/.case OP
a650: 5f 43 6f 70 79 3a 20 7b 0a 20 20 69 6e 74 20 6e  _Copy: {.  int n
a660: 3b 0a 0a 20 20 6e 20 3d 20 70 4f 70 2d 3e 70 33  ;..  n = pOp->p3
a670: 3b 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d  ;.  pIn1 = &aMem
a680: 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 4f 75  [pOp->p1];.  pOu
a690: 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  t = &aMem[pOp->p
a6a0: 32 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f  2];.  assert( pO
a6b0: 75 74 21 3d 70 49 6e 31 20 29 3b 0a 20 20 77 68  ut!=pIn1 );.  wh
a6c0: 69 6c 65 28 20 31 20 29 7b 0a 20 20 20 20 6d 65  ile( 1 ){.    me
a6d0: 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70  mAboutToChange(p
a6e0: 2c 20 70 4f 75 74 29 3b 0a 20 20 20 20 73 71 6c  , pOut);.    sql
a6f0: 69 74 65 33 56 64 62 65 4d 65 6d 53 68 61 6c 6c  ite3VdbeMemShall
a700: 6f 77 43 6f 70 79 28 70 4f 75 74 2c 20 70 49 6e  owCopy(pOut, pIn
a710: 31 2c 20 4d 45 4d 5f 45 70 68 65 6d 29 3b 0a 20  1, MEM_Ephem);. 
a720: 20 20 20 44 65 65 70 68 65 6d 65 72 61 6c 69 7a     Deephemeraliz
a730: 65 28 70 4f 75 74 29 3b 0a 23 69 66 64 65 66 20  e(pOut);.#ifdef 
a740: 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 20  SQLITE_DEBUG.   
a750: 20 70 4f 75 74 2d 3e 70 53 63 6f 70 79 46 72 6f   pOut->pScopyFro
a760: 6d 20 3d 20 30 3b 0a 23 65 6e 64 69 66 0a 20 20  m = 0;.#endif.  
a770: 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45    REGISTER_TRACE
a780: 28 70 4f 70 2d 3e 70 32 2b 70 4f 70 2d 3e 70 33  (pOp->p2+pOp->p3
a790: 2d 6e 2c 20 70 4f 75 74 29 3b 0a 20 20 20 20 69  -n, pOut);.    i
a7a0: 66 28 20 28 6e 2d 2d 29 3d 3d 30 20 29 20 62 72  f( (n--)==0 ) br
a7b0: 65 61 6b 3b 0a 20 20 20 20 70 4f 75 74 2b 2b 3b  eak;.    pOut++;
a7c0: 0a 20 20 20 20 70 49 6e 31 2b 2b 3b 0a 20 20 7d  .    pIn1++;.  }
a7d0: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
a7e0: 4f 70 63 6f 64 65 3a 20 53 43 6f 70 79 20 50 31  Opcode: SCopy P1
a7f0: 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e   P2 * * *.** Syn
a800: 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 72 5b 50  opsis: r[P2]=r[P
a810: 31 5d 0a 2a 2a 0a 2a 2a 20 4d 61 6b 65 20 61 20  1].**.** Make a 
a820: 73 68 61 6c 6c 6f 77 20 63 6f 70 79 20 6f 66 20  shallow copy of 
a830: 72 65 67 69 73 74 65 72 20 50 31 20 69 6e 74 6f  register P1 into
a840: 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a   register P2..**
a850: 0a 2a 2a 20 54 68 69 73 20 69 6e 73 74 72 75 63  .** This instruc
a860: 74 69 6f 6e 20 6d 61 6b 65 73 20 61 20 73 68 61  tion makes a sha
a870: 6c 6c 6f 77 20 63 6f 70 79 20 6f 66 20 74 68 65  llow copy of the
a880: 20 76 61 6c 75 65 2e 20 20 49 66 20 74 68 65 20   value.  If the 
a890: 76 61 6c 75 65 0a 2a 2a 20 69 73 20 61 20 73 74  value.** is a st
a8a0: 72 69 6e 67 20 6f 72 20 62 6c 6f 62 2c 20 74 68  ring or blob, th
a8b0: 65 6e 20 74 68 65 20 63 6f 70 79 20 69 73 20 6f  en the copy is o
a8c0: 6e 6c 79 20 61 20 70 6f 69 6e 74 65 72 20 74 6f  nly a pointer to
a8d0: 20 74 68 65 0a 2a 2a 20 6f 72 69 67 69 6e 61 6c   the.** original
a8e0: 20 61 6e 64 20 68 65 6e 63 65 20 69 66 20 74 68   and hence if th
a8f0: 65 20 6f 72 69 67 69 6e 61 6c 20 63 68 61 6e 67  e original chang
a900: 65 73 20 73 6f 20 77 69 6c 6c 20 74 68 65 20 63  es so will the c
a910: 6f 70 79 2e 0a 2a 2a 20 57 6f 72 73 65 2c 20 69  opy..** Worse, i
a920: 66 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 20 69  f the original i
a930: 73 20 64 65 61 6c 6c 6f 63 61 74 65 64 2c 20 74  s deallocated, t
a940: 68 65 20 63 6f 70 79 20 62 65 63 6f 6d 65 73 20  he copy becomes 
a950: 69 6e 76 61 6c 69 64 2e 0a 2a 2a 20 54 68 75 73  invalid..** Thus
a960: 20 74 68 65 20 70 72 6f 67 72 61 6d 20 6d 75 73   the program mus
a970: 74 20 67 75 61 72 61 6e 74 65 65 20 74 68 61 74  t guarantee that
a980: 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 20 77 69   the original wi
a990: 6c 6c 20 6e 6f 74 20 63 68 61 6e 67 65 0a 2a 2a  ll not change.**
a9a0: 20 64 75 72 69 6e 67 20 74 68 65 20 6c 69 66 65   during the life
a9b0: 74 69 6d 65 20 6f 66 20 74 68 65 20 63 6f 70 79  time of the copy
a9c0: 2e 20 20 55 73 65 20 4f 50 5f 43 6f 70 79 20 74  .  Use OP_Copy t
a9d0: 6f 20 6d 61 6b 65 20 61 20 63 6f 6d 70 6c 65 74  o make a complet
a9e0: 65 0a 2a 2a 20 63 6f 70 79 2e 0a 2a 2f 0a 63 61  e.** copy..*/.ca
a9f0: 73 65 20 4f 50 5f 53 43 6f 70 79 3a 20 7b 20 20  se OP_SCopy: {  
aa00: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74            /* out
aa10: 32 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61  2 */.  pIn1 = &a
aa20: 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
aa30: 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pOut = &aMem[pOp
aa40: 2d 3e 70 32 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p2];.  assert(
aa50: 20 70 4f 75 74 21 3d 70 49 6e 31 20 29 3b 0a 20   pOut!=pIn1 );. 
aa60: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53   sqlite3VdbeMemS
aa70: 68 61 6c 6c 6f 77 43 6f 70 79 28 70 4f 75 74 2c  hallowCopy(pOut,
aa80: 20 70 49 6e 31 2c 20 4d 45 4d 5f 45 70 68 65 6d   pIn1, MEM_Ephem
aa90: 29 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  );.#ifdef SQLITE
aaa0: 5f 44 45 42 55 47 0a 20 20 70 4f 75 74 2d 3e 70  _DEBUG.  pOut->p
aab0: 53 63 6f 70 79 46 72 6f 6d 20 3d 20 70 49 6e 31  ScopyFrom = pIn1
aac0: 3b 0a 20 20 70 4f 75 74 2d 3e 6d 53 63 6f 70 79  ;.  pOut->mScopy
aad0: 46 6c 61 67 73 20 3d 20 70 49 6e 31 2d 3e 66 6c  Flags = pIn1->fl
aae0: 61 67 73 3b 0a 23 65 6e 64 69 66 0a 20 20 62 72  ags;.#endif.  br
aaf0: 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
ab00: 65 3a 20 49 6e 74 43 6f 70 79 20 50 31 20 50 32  e: IntCopy P1 P2
ab10: 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73   * * *.** Synops
ab20: 69 73 3a 20 72 5b 50 32 5d 3d 72 5b 50 31 5d 0a  is: r[P2]=r[P1].
ab30: 2a 2a 0a 2a 2a 20 54 72 61 6e 73 66 65 72 20 74  **.** Transfer t
ab40: 68 65 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65  he integer value
ab50: 20 68 65 6c 64 20 69 6e 20 72 65 67 69 73 74 65   held in registe
ab60: 72 20 50 31 20 69 6e 74 6f 20 72 65 67 69 73 74  r P1 into regist
ab70: 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54 68 69  er P2..**.** Thi
ab80: 73 20 69 73 20 61 6e 20 6f 70 74 69 6d 69 7a 65  s is an optimize
ab90: 64 20 76 65 72 73 69 6f 6e 20 6f 66 20 53 43 6f  d version of SCo
aba0: 70 79 20 74 68 61 74 20 77 6f 72 6b 73 20 6f 6e  py that works on
abb0: 6c 79 20 66 6f 72 20 69 6e 74 65 67 65 72 0a 2a  ly for integer.*
abc0: 2a 20 76 61 6c 75 65 73 2e 0a 2a 2f 0a 63 61 73  * values..*/.cas
abd0: 65 20 4f 50 5f 49 6e 74 43 6f 70 79 3a 20 7b 20  e OP_IntCopy: { 
abe0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75             /* ou
abf0: 74 32 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26  t2 */.  pIn1 = &
ac00: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  aMem[pOp->p1];. 
ac10: 20 61 73 73 65 72 74 28 20 28 70 49 6e 31 2d 3e   assert( (pIn1->
ac20: 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29  flags & MEM_Int)
ac30: 21 3d 30 20 29 3b 0a 20 20 70 4f 75 74 20 3d 20  !=0 );.  pOut = 
ac40: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a  &aMem[pOp->p2];.
ac50: 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
ac60: 53 65 74 49 6e 74 36 34 28 70 4f 75 74 2c 20 70  SetInt64(pOut, p
ac70: 49 6e 31 2d 3e 75 2e 69 29 3b 0a 20 20 62 72 65  In1->u.i);.  bre
ac80: 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
ac90: 3a 20 52 65 73 75 6c 74 52 6f 77 20 50 31 20 50  : ResultRow P1 P
aca0: 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70  2 * * *.** Synop
acb0: 73 69 73 3a 20 6f 75 74 70 75 74 3d 72 5b 50 31  sis: output=r[P1
acc0: 40 50 32 5d 0a 2a 2a 0a 2a 2a 20 54 68 65 20 72  @P2].**.** The r
acd0: 65 67 69 73 74 65 72 73 20 50 31 20 74 68 72 6f  egisters P1 thro
ace0: 75 67 68 20 50 31 2b 50 32 2d 31 20 63 6f 6e 74  ugh P1+P2-1 cont
acf0: 61 69 6e 20 61 20 73 69 6e 67 6c 65 20 72 6f 77  ain a single row
ad00: 20 6f 66 0a 2a 2a 20 72 65 73 75 6c 74 73 2e 20   of.** results. 
ad10: 54 68 69 73 20 6f 70 63 6f 64 65 20 63 61 75 73  This opcode caus
ad20: 65 73 20 74 68 65 20 73 71 6c 69 74 65 33 5f 73  es the sqlite3_s
ad30: 74 65 70 28 29 20 63 61 6c 6c 20 74 6f 20 74 65  tep() call to te
ad40: 72 6d 69 6e 61 74 65 0a 2a 2a 20 77 69 74 68 20  rminate.** with 
ad50: 61 6e 20 53 51 4c 49 54 45 5f 52 4f 57 20 72 65  an SQLITE_ROW re
ad60: 74 75 72 6e 20 63 6f 64 65 20 61 6e 64 20 69 74  turn code and it
ad70: 20 73 65 74 73 20 75 70 20 74 68 65 20 73 71 6c   sets up the sql
ad80: 69 74 65 33 5f 73 74 6d 74 0a 2a 2a 20 73 74 72  ite3_stmt.** str
ad90: 75 63 74 75 72 65 20 74 6f 20 70 72 6f 76 69 64  ucture to provid
ada0: 65 20 61 63 63 65 73 73 20 74 6f 20 74 68 65 20  e access to the 
adb0: 72 28 50 31 29 2e 2e 72 28 50 31 2b 50 32 2d 31  r(P1)..r(P1+P2-1
adc0: 29 20 76 61 6c 75 65 73 20 61 73 0a 2a 2a 20 74  ) values as.** t
add0: 68 65 20 72 65 73 75 6c 74 20 72 6f 77 2e 0a 2a  he result row..*
ade0: 2f 0a 63 61 73 65 20 4f 50 5f 52 65 73 75 6c 74  /.case OP_Result
adf0: 52 6f 77 3a 20 7b 0a 20 20 4d 65 6d 20 2a 70 4d  Row: {.  Mem *pM
ae00: 65 6d 3b 0a 20 20 69 6e 74 20 69 3b 0a 20 20 61  em;.  int i;.  a
ae10: 73 73 65 72 74 28 20 70 2d 3e 6e 52 65 73 43 6f  ssert( p->nResCo
ae20: 6c 75 6d 6e 3d 3d 70 4f 70 2d 3e 70 32 20 29 3b  lumn==pOp->p2 );
ae30: 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
ae40: 70 31 3e 30 20 29 3b 0a 20 20 61 73 73 65 72 74  p1>0 );.  assert
ae50: 28 20 70 4f 70 2d 3e 70 31 2b 70 4f 70 2d 3e 70  ( pOp->p1+pOp->p
ae60: 32 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20  2<=(p->nMem+1 - 
ae70: 70 2d 3e 6e 43 75 72 73 6f 72 29 2b 31 20 29 3b  p->nCursor)+1 );
ae80: 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
ae90: 5f 4f 4d 49 54 5f 50 52 4f 47 52 45 53 53 5f 43  _OMIT_PROGRESS_C
aea0: 41 4c 4c 42 41 43 4b 0a 20 20 2f 2a 20 52 75 6e  ALLBACK.  /* Run
aeb0: 20 74 68 65 20 70 72 6f 67 72 65 73 73 20 63 6f   the progress co
aec0: 75 6e 74 65 72 20 6a 75 73 74 20 62 65 66 6f 72  unter just befor
aed0: 65 20 72 65 74 75 72 6e 69 6e 67 2e 0a 20 20 2a  e returning..  *
aee0: 2f 0a 20 20 69 66 28 20 64 62 2d 3e 78 50 72 6f  /.  if( db->xPro
aef0: 67 72 65 73 73 21 3d 30 0a 20 20 20 26 26 20 6e  gress!=0.   && n
af00: 56 6d 53 74 65 70 3e 3d 6e 50 72 6f 67 72 65 73  VmStep>=nProgres
af10: 73 4c 69 6d 69 74 20 0a 20 20 20 26 26 20 64 62  sLimit .   && db
af20: 2d 3e 78 50 72 6f 67 72 65 73 73 28 64 62 2d 3e  ->xProgress(db->
af30: 70 50 72 6f 67 72 65 73 73 41 72 67 29 21 3d 30  pProgressArg)!=0
af40: 0a 20 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 53  .  ){.    rc = S
af50: 51 4c 49 54 45 5f 49 4e 54 45 52 52 55 50 54 3b  QLITE_INTERRUPT;
af60: 0a 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f  .    goto abort_
af70: 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
af80: 7d 0a 23 65 6e 64 69 66 0a 0a 20 20 2f 2a 20 49  }.#endif..  /* I
af90: 66 20 74 68 69 73 20 73 74 61 74 65 6d 65 6e 74  f this statement
afa0: 20 68 61 73 20 76 69 6f 6c 61 74 65 64 20 69 6d   has violated im
afb0: 6d 65 64 69 61 74 65 20 66 6f 72 65 69 67 6e 20  mediate foreign 
afc0: 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e 74 73 2c  key constraints,
afd0: 20 64 6f 0a 20 20 2a 2a 20 6e 6f 74 20 72 65 74   do.  ** not ret
afe0: 75 72 6e 20 74 68 65 20 6e 75 6d 62 65 72 20 6f  urn the number o
aff0: 66 20 72 6f 77 73 20 6d 6f 64 69 66 69 65 64 2e  f rows modified.
b000: 20 41 6e 64 20 64 6f 20 6e 6f 74 20 52 45 4c 45   And do not RELE
b010: 41 53 45 20 74 68 65 20 73 74 61 74 65 6d 65 6e  ASE the statemen
b020: 74 0a 20 20 2a 2a 20 74 72 61 6e 73 61 63 74 69  t.  ** transacti
b030: 6f 6e 2e 20 49 74 20 6e 65 65 64 73 20 74 6f 20  on. It needs to 
b040: 62 65 20 72 6f 6c 6c 65 64 20 62 61 63 6b 2e 20  be rolled back. 
b050: 20 2a 2f 0a 20 20 69 66 28 20 53 51 4c 49 54 45   */.  if( SQLITE
b060: 5f 4f 4b 21 3d 28 72 63 20 3d 20 73 71 6c 69 74  _OK!=(rc = sqlit
b070: 65 33 56 64 62 65 43 68 65 63 6b 46 6b 28 70 2c  e3VdbeCheckFk(p,
b080: 20 30 29 29 20 29 7b 0a 20 20 20 20 61 73 73 65   0)) ){.    asse
b090: 72 74 28 20 64 62 2d 3e 66 6c 61 67 73 26 53 51  rt( db->flags&SQ
b0a0: 4c 49 54 45 5f 43 6f 75 6e 74 52 6f 77 73 20 29  LITE_CountRows )
b0b0: 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 2d  ;.    assert( p-
b0c0: 3e 75 73 65 73 53 74 6d 74 4a 6f 75 72 6e 61 6c  >usesStmtJournal
b0d0: 20 29 3b 0a 20 20 20 20 67 6f 74 6f 20 61 62 6f   );.    goto abo
b0e0: 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
b0f0: 0a 20 20 7d 0a 0a 20 20 2f 2a 20 49 66 20 74 68  .  }..  /* If th
b100: 65 20 53 51 4c 49 54 45 5f 43 6f 75 6e 74 52 6f  e SQLITE_CountRo
b110: 77 73 20 66 6c 61 67 20 69 73 20 73 65 74 20 69  ws flag is set i
b120: 6e 20 73 71 6c 69 74 65 33 2e 66 6c 61 67 73 20  n sqlite3.flags 
b130: 6d 61 73 6b 2c 20 74 68 65 6e 20 0a 20 20 2a 2a  mask, then .  **
b140: 20 44 4d 4c 20 73 74 61 74 65 6d 65 6e 74 73 20   DML statements 
b150: 69 6e 76 6f 6b 65 20 74 68 69 73 20 6f 70 63 6f  invoke this opco
b160: 64 65 20 74 6f 20 72 65 74 75 72 6e 20 74 68 65  de to return the
b170: 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 20   number of rows 
b180: 0a 20 20 2a 2a 20 6d 6f 64 69 66 69 65 64 20 74  .  ** modified t
b190: 6f 20 74 68 65 20 75 73 65 72 2e 20 54 68 69 73  o the user. This
b1a0: 20 69 73 20 74 68 65 20 6f 6e 6c 79 20 77 61 79   is the only way
b1b0: 20 74 68 61 74 20 61 20 56 4d 20 74 68 61 74 0a   that a VM that.
b1c0: 20 20 2a 2a 20 6f 70 65 6e 73 20 61 20 73 74 61    ** opens a sta
b1d0: 74 65 6d 65 6e 74 20 74 72 61 6e 73 61 63 74 69  tement transacti
b1e0: 6f 6e 20 6d 61 79 20 69 6e 76 6f 6b 65 20 74 68  on may invoke th
b1f0: 69 73 20 6f 70 63 6f 64 65 2e 0a 20 20 2a 2a 0a  is opcode..  **.
b200: 20 20 2a 2a 20 49 6e 20 63 61 73 65 20 74 68 69    ** In case thi
b210: 73 20 69 73 20 73 75 63 68 20 61 20 73 74 61 74  s is such a stat
b220: 65 6d 65 6e 74 2c 20 63 6c 6f 73 65 20 61 6e 79  ement, close any
b230: 20 73 74 61 74 65 6d 65 6e 74 20 74 72 61 6e 73   statement trans
b240: 61 63 74 69 6f 6e 0a 20 20 2a 2a 20 6f 70 65 6e  action.  ** open
b250: 65 64 20 62 79 20 74 68 69 73 20 56 4d 20 62 65  ed by this VM be
b260: 66 6f 72 65 20 72 65 74 75 72 6e 69 6e 67 20 63  fore returning c
b270: 6f 6e 74 72 6f 6c 20 74 6f 20 74 68 65 20 75 73  ontrol to the us
b280: 65 72 2e 20 54 68 69 73 20 69 73 20 74 6f 0a 20  er. This is to. 
b290: 20 2a 2a 20 65 6e 73 75 72 65 20 74 68 61 74 20   ** ensure that 
b2a0: 73 74 61 74 65 6d 65 6e 74 2d 74 72 61 6e 73 61  statement-transa
b2b0: 63 74 69 6f 6e 73 20 61 72 65 20 61 6c 77 61 79  ctions are alway
b2c0: 73 20 6e 65 73 74 65 64 2c 20 6e 6f 74 20 6f 76  s nested, not ov
b2d0: 65 72 6c 61 70 70 69 6e 67 2e 0a 20 20 2a 2a 20  erlapping..  ** 
b2e0: 49 66 20 74 68 65 20 6f 70 65 6e 20 73 74 61 74  If the open stat
b2f0: 65 6d 65 6e 74 2d 74 72 61 6e 73 61 63 74 69 6f  ement-transactio
b300: 6e 20 69 73 20 6e 6f 74 20 63 6c 6f 73 65 64 20  n is not closed 
b310: 68 65 72 65 2c 20 74 68 65 6e 20 74 68 65 20 75  here, then the u
b320: 73 65 72 0a 20 20 2a 2a 20 6d 61 79 20 73 74 65  ser.  ** may ste
b330: 70 20 61 6e 6f 74 68 65 72 20 56 4d 20 74 68 61  p another VM tha
b340: 74 20 6f 70 65 6e 73 20 69 74 73 20 6f 77 6e 20  t opens its own 
b350: 73 74 61 74 65 6d 65 6e 74 20 74 72 61 6e 73 61  statement transa
b360: 63 74 69 6f 6e 2e 20 54 68 69 73 0a 20 20 2a 2a  ction. This.  **
b370: 20 6d 61 79 20 6c 65 61 64 20 74 6f 20 6f 76 65   may lead to ove
b380: 72 6c 61 70 70 69 6e 67 20 73 74 61 74 65 6d 65  rlapping stateme
b390: 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 73 2e  nt transactions.
b3a0: 0a 20 20 2a 2a 0a 20 20 2a 2a 20 54 68 65 20 73  .  **.  ** The s
b3b0: 74 61 74 65 6d 65 6e 74 20 74 72 61 6e 73 61 63  tatement transac
b3c0: 74 69 6f 6e 20 69 73 20 6e 65 76 65 72 20 61 20  tion is never a 
b3d0: 74 6f 70 2d 6c 65 76 65 6c 20 74 72 61 6e 73 61  top-level transa
b3e0: 63 74 69 6f 6e 2e 20 20 48 65 6e 63 65 0a 20 20  ction.  Hence.  
b3f0: 2a 2a 20 74 68 65 20 52 45 4c 45 41 53 45 20 63  ** the RELEASE c
b400: 61 6c 6c 20 62 65 6c 6f 77 20 63 61 6e 20 6e 65  all below can ne
b410: 76 65 72 20 66 61 69 6c 2e 0a 20 20 2a 2f 0a 20  ver fail..  */. 
b420: 20 61 73 73 65 72 74 28 20 70 2d 3e 69 53 74 61   assert( p->iSta
b430: 74 65 6d 65 6e 74 3d 3d 30 20 7c 7c 20 64 62 2d  tement==0 || db-
b440: 3e 66 6c 61 67 73 26 53 51 4c 49 54 45 5f 43 6f  >flags&SQLITE_Co
b450: 75 6e 74 52 6f 77 73 20 29 3b 0a 20 20 72 63 20  untRows );.  rc 
b460: 3d 20 73 71 6c 69 74 65 33 56 64 62 65 43 6c 6f  = sqlite3VdbeClo
b470: 73 65 53 74 61 74 65 6d 65 6e 74 28 70 2c 20 53  seStatement(p, S
b480: 41 56 45 50 4f 49 4e 54 5f 52 45 4c 45 41 53 45  AVEPOINT_RELEASE
b490: 29 3b 0a 20 20 61 73 73 65 72 74 28 20 72 63 3d  );.  assert( rc=
b4a0: 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 3b 0a 0a 20  =SQLITE_OK );.. 
b4b0: 20 2f 2a 20 49 6e 76 61 6c 69 64 61 74 65 20 61   /* Invalidate a
b4c0: 6c 6c 20 65 70 68 65 6d 65 72 61 6c 20 63 75 72  ll ephemeral cur
b4d0: 73 6f 72 20 72 6f 77 20 63 61 63 68 65 73 20 2a  sor row caches *
b4e0: 2f 0a 20 20 70 2d 3e 63 61 63 68 65 43 74 72 20  /.  p->cacheCtr 
b4f0: 3d 20 28 70 2d 3e 63 61 63 68 65 43 74 72 20 2b  = (p->cacheCtr +
b500: 20 32 29 7c 31 3b 0a 0a 20 20 2f 2a 20 4d 61 6b   2)|1;..  /* Mak
b510: 65 20 73 75 72 65 20 74 68 65 20 72 65 73 75 6c  e sure the resul
b520: 74 73 20 6f 66 20 74 68 65 20 63 75 72 72 65 6e  ts of the curren
b530: 74 20 72 6f 77 20 61 72 65 20 5c 30 30 30 20 74  t row are \000 t
b540: 65 72 6d 69 6e 61 74 65 64 0a 20 20 2a 2a 20 61  erminated.  ** a
b550: 6e 64 20 68 61 76 65 20 61 6e 20 61 73 73 69 67  nd have an assig
b560: 6e 65 64 20 74 79 70 65 2e 20 20 54 68 65 20 72  ned type.  The r
b570: 65 73 75 6c 74 73 20 61 72 65 20 64 65 2d 65 70  esults are de-ep
b580: 68 65 6d 65 72 61 6c 69 7a 65 64 20 61 73 0a 20  hemeralized as. 
b590: 20 2a 2a 20 61 20 73 69 64 65 20 65 66 66 65 63   ** a side effec
b5a0: 74 2e 0a 20 20 2a 2f 0a 20 20 70 4d 65 6d 20 3d  t..  */.  pMem =
b5b0: 20 70 2d 3e 70 52 65 73 75 6c 74 53 65 74 20 3d   p->pResultSet =
b5c0: 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b   &aMem[pOp->p1];
b5d0: 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 70 4f  .  for(i=0; i<pO
b5e0: 70 2d 3e 70 32 3b 20 69 2b 2b 29 7b 0a 20 20 20  p->p2; i++){.   
b5f0: 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61   assert( memIsVa
b600: 6c 69 64 28 26 70 4d 65 6d 5b 69 5d 29 20 29 3b  lid(&pMem[i]) );
b610: 0a 20 20 20 20 44 65 65 70 68 65 6d 65 72 61 6c  .    Deephemeral
b620: 69 7a 65 28 26 70 4d 65 6d 5b 69 5d 29 3b 0a 20  ize(&pMem[i]);. 
b630: 20 20 20 61 73 73 65 72 74 28 20 28 70 4d 65 6d     assert( (pMem
b640: 5b 69 5d 2e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  [i].flags & MEM_
b650: 45 70 68 65 6d 29 3d 3d 30 0a 20 20 20 20 20 20  Ephem)==0.      
b660: 20 20 20 20 20 20 7c 7c 20 28 70 4d 65 6d 5b 69        || (pMem[i
b670: 5d 2e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f 53  ].flags & (MEM_S
b680: 74 72 7c 4d 45 4d 5f 42 6c 6f 62 29 29 3d 3d 30  tr|MEM_Blob))==0
b690: 20 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56   );.    sqlite3V
b6a0: 64 62 65 4d 65 6d 4e 75 6c 54 65 72 6d 69 6e 61  dbeMemNulTermina
b6b0: 74 65 28 26 70 4d 65 6d 5b 69 5d 29 3b 0a 20 20  te(&pMem[i]);.  
b6c0: 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45    REGISTER_TRACE
b6d0: 28 70 4f 70 2d 3e 70 31 2b 69 2c 20 26 70 4d 65  (pOp->p1+i, &pMe
b6e0: 6d 5b 69 5d 29 3b 0a 20 20 7d 0a 20 20 69 66 28  m[i]);.  }.  if(
b6f0: 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65   db->mallocFaile
b700: 64 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b  d ) goto no_mem;
b710: 0a 0a 20 20 69 66 28 20 64 62 2d 3e 6d 54 72 61  ..  if( db->mTra
b720: 63 65 20 26 20 53 51 4c 49 54 45 5f 54 52 41 43  ce & SQLITE_TRAC
b730: 45 5f 52 4f 57 20 29 7b 0a 20 20 20 20 64 62 2d  E_ROW ){.    db-
b740: 3e 78 54 72 61 63 65 28 53 51 4c 49 54 45 5f 54  >xTrace(SQLITE_T
b750: 52 41 43 45 5f 52 4f 57 2c 20 64 62 2d 3e 70 54  RACE_ROW, db->pT
b760: 72 61 63 65 41 72 67 2c 20 70 2c 20 30 29 3b 0a  raceArg, p, 0);.
b770: 20 20 7d 0a 0a 20 20 2f 2a 20 52 65 74 75 72 6e    }..  /* Return
b780: 20 53 51 4c 49 54 45 5f 52 4f 57 0a 20 20 2a 2f   SQLITE_ROW.  */
b790: 0a 20 20 70 2d 3e 70 63 20 3d 20 28 69 6e 74 29  .  p->pc = (int)
b7a0: 28 70 4f 70 20 2d 20 61 4f 70 29 20 2b 20 31 3b  (pOp - aOp) + 1;
b7b0: 0a 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 52  .  rc = SQLITE_R
b7c0: 4f 57 3b 0a 20 20 67 6f 74 6f 20 76 64 62 65 5f  OW;.  goto vdbe_
b7d0: 72 65 74 75 72 6e 3b 0a 7d 0a 0a 2f 2a 20 4f 70  return;.}../* Op
b7e0: 63 6f 64 65 3a 20 43 6f 6e 63 61 74 20 50 31 20  code: Concat P1 
b7f0: 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e  P2 P3 * *.** Syn
b800: 6f 70 73 69 73 3a 20 72 5b 50 33 5d 3d 72 5b 50  opsis: r[P3]=r[P
b810: 32 5d 2b 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 41  2]+r[P1].**.** A
b820: 64 64 20 74 68 65 20 74 65 78 74 20 69 6e 20 72  dd the text in r
b830: 65 67 69 73 74 65 72 20 50 31 20 6f 6e 74 6f 20  egister P1 onto 
b840: 74 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20 74  the end of the t
b850: 65 78 74 20 69 6e 0a 2a 2a 20 72 65 67 69 73 74  ext in.** regist
b860: 65 72 20 50 32 20 61 6e 64 20 73 74 6f 72 65 20  er P2 and store 
b870: 74 68 65 20 72 65 73 75 6c 74 20 69 6e 20 72 65  the result in re
b880: 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a 20 49 66  gister P3..** If
b890: 20 65 69 74 68 65 72 20 74 68 65 20 50 31 20 6f   either the P1 o
b8a0: 72 20 50 32 20 74 65 78 74 20 61 72 65 20 4e 55  r P2 text are NU
b8b0: 4c 4c 20 74 68 65 6e 20 73 74 6f 72 65 20 4e 55  LL then store NU
b8c0: 4c 4c 20 69 6e 20 50 33 2e 0a 2a 2a 0a 2a 2a 20  LL in P3..**.** 
b8d0: 20 20 50 33 20 3d 20 50 32 20 7c 7c 20 50 31 0a    P3 = P2 || P1.
b8e0: 2a 2a 0a 2a 2a 20 49 74 20 69 73 20 69 6c 6c 65  **.** It is ille
b8f0: 67 61 6c 20 66 6f 72 20 50 31 20 61 6e 64 20 50  gal for P1 and P
b900: 33 20 74 6f 20 62 65 20 74 68 65 20 73 61 6d 65  3 to be the same
b910: 20 72 65 67 69 73 74 65 72 2e 20 53 6f 6d 65 74   register. Somet
b920: 69 6d 65 73 2c 0a 2a 2a 20 69 66 20 50 33 20 69  imes,.** if P3 i
b930: 73 20 74 68 65 20 73 61 6d 65 20 72 65 67 69 73  s the same regis
b940: 74 65 72 20 61 73 20 50 32 2c 20 74 68 65 20 69  ter as P2, the i
b950: 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 69 73  mplementation is
b960: 20 61 62 6c 65 0a 2a 2a 20 74 6f 20 61 76 6f 69   able.** to avoi
b970: 64 20 61 20 6d 65 6d 63 70 79 28 29 2e 0a 2a 2f  d a memcpy()..*/
b980: 0a 63 61 73 65 20 4f 50 5f 43 6f 6e 63 61 74 3a  .case OP_Concat:
b990: 20 7b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20   {           /* 
b9a0: 73 61 6d 65 20 61 73 20 54 4b 5f 43 4f 4e 43 41  same as TK_CONCA
b9b0: 54 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74  T, in1, in2, out
b9c0: 33 20 2a 2f 0a 20 20 69 36 34 20 6e 42 79 74 65  3 */.  i64 nByte
b9d0: 3b 0a 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65  ;..  pIn1 = &aMe
b9e0: 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 49  m[pOp->p1];.  pI
b9f0: 6e 32 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n2 = &aMem[pOp->
ba00: 70 32 5d 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61  p2];.  pOut = &a
ba10: 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20  Mem[pOp->p3];.  
ba20: 61 73 73 65 72 74 28 20 70 49 6e 31 21 3d 70 4f  assert( pIn1!=pO
ba30: 75 74 20 29 3b 0a 20 20 69 66 28 20 28 70 49 6e  ut );.  if( (pIn
ba40: 31 2d 3e 66 6c 61 67 73 20 7c 20 70 49 6e 32 2d  1->flags | pIn2-
ba50: 3e 66 6c 61 67 73 29 20 26 20 4d 45 4d 5f 4e 75  >flags) & MEM_Nu
ba60: 6c 6c 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  ll ){.    sqlite
ba70: 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28  3VdbeMemSetNull(
ba80: 70 4f 75 74 29 3b 0a 20 20 20 20 62 72 65 61 6b  pOut);.    break
ba90: 3b 0a 20 20 7d 0a 20 20 69 66 28 20 45 78 70 61  ;.  }.  if( Expa
baa0: 6e 64 42 6c 6f 62 28 70 49 6e 31 29 20 7c 7c 20  ndBlob(pIn1) || 
bab0: 45 78 70 61 6e 64 42 6c 6f 62 28 70 49 6e 32 29  ExpandBlob(pIn2)
bac0: 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a   ) goto no_mem;.
bad0: 20 20 53 74 72 69 6e 67 69 66 79 28 70 49 6e 31    Stringify(pIn1
bae0: 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 53  , encoding);.  S
baf0: 74 72 69 6e 67 69 66 79 28 70 49 6e 32 2c 20 65  tringify(pIn2, e
bb00: 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 6e 42 79 74  ncoding);.  nByt
bb10: 65 20 3d 20 70 49 6e 31 2d 3e 6e 20 2b 20 70 49  e = pIn1->n + pI
bb20: 6e 32 2d 3e 6e 3b 0a 20 20 69 66 28 20 6e 42 79  n2->n;.  if( nBy
bb30: 74 65 3e 64 62 2d 3e 61 4c 69 6d 69 74 5b 53 51  te>db->aLimit[SQ
bb40: 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54  LITE_LIMIT_LENGT
bb50: 48 5d 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 74  H] ){.    goto t
bb60: 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a 20 20 69 66  oo_big;.  }.  if
bb70: 28 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d  ( sqlite3VdbeMem
bb80: 47 72 6f 77 28 70 4f 75 74 2c 20 28 69 6e 74 29  Grow(pOut, (int)
bb90: 6e 42 79 74 65 2b 32 2c 20 70 4f 75 74 3d 3d 70  nByte+2, pOut==p
bba0: 49 6e 32 29 20 29 7b 0a 20 20 20 20 67 6f 74 6f  In2) ){.    goto
bbb0: 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 20 20 4d   no_mem;.  }.  M
bbc0: 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70 4f  emSetTypeFlag(pO
bbd0: 75 74 2c 20 4d 45 4d 5f 53 74 72 29 3b 0a 20 20  ut, MEM_Str);.  
bbe0: 69 66 28 20 70 4f 75 74 21 3d 70 49 6e 32 20 29  if( pOut!=pIn2 )
bbf0: 7b 0a 20 20 20 20 6d 65 6d 63 70 79 28 70 4f 75  {.    memcpy(pOu
bc00: 74 2d 3e 7a 2c 20 70 49 6e 32 2d 3e 7a 2c 20 70  t->z, pIn2->z, p
bc10: 49 6e 32 2d 3e 6e 29 3b 0a 20 20 7d 0a 20 20 6d  In2->n);.  }.  m
bc20: 65 6d 63 70 79 28 26 70 4f 75 74 2d 3e 7a 5b 70  emcpy(&pOut->z[p
bc30: 49 6e 32 2d 3e 6e 5d 2c 20 70 49 6e 31 2d 3e 7a  In2->n], pIn1->z
bc40: 2c 20 70 49 6e 31 2d 3e 6e 29 3b 0a 20 20 70 4f  , pIn1->n);.  pO
bc50: 75 74 2d 3e 7a 5b 6e 42 79 74 65 5d 3d 30 3b 0a  ut->z[nByte]=0;.
bc60: 20 20 70 4f 75 74 2d 3e 7a 5b 6e 42 79 74 65 2b    pOut->z[nByte+
bc70: 31 5d 20 3d 20 30 3b 0a 20 20 70 4f 75 74 2d 3e  1] = 0;.  pOut->
bc80: 66 6c 61 67 73 20 7c 3d 20 4d 45 4d 5f 54 65 72  flags |= MEM_Ter
bc90: 6d 3b 0a 20 20 70 4f 75 74 2d 3e 6e 20 3d 20 28  m;.  pOut->n = (
bca0: 69 6e 74 29 6e 42 79 74 65 3b 0a 20 20 70 4f 75  int)nByte;.  pOu
bcb0: 74 2d 3e 65 6e 63 20 3d 20 65 6e 63 6f 64 69 6e  t->enc = encodin
bcc0: 67 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f  g;.  UPDATE_MAX_
bcd0: 42 4c 4f 42 53 49 5a 45 28 70 4f 75 74 29 3b 0a  BLOBSIZE(pOut);.
bce0: 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
bcf0: 70 63 6f 64 65 3a 20 41 64 64 20 50 31 20 50 32  pcode: Add P1 P2
bd00: 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70   P3 * *.** Synop
bd10: 73 69 73 3a 20 72 5b 50 33 5d 3d 72 5b 50 31 5d  sis: r[P3]=r[P1]
bd20: 2b 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20 41 64 64  +r[P2].**.** Add
bd30: 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65   the value in re
bd40: 67 69 73 74 65 72 20 50 31 20 74 6f 20 74 68 65  gister P1 to the
bd50: 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
bd60: 65 72 20 50 32 0a 2a 2a 20 61 6e 64 20 73 74 6f  er P2.** and sto
bd70: 72 65 20 74 68 65 20 72 65 73 75 6c 74 20 69 6e  re the result in
bd80: 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a   register P3..**
bd90: 20 49 66 20 65 69 74 68 65 72 20 69 6e 70 75 74   If either input
bda0: 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65 20 72 65   is NULL, the re
bdb0: 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f  sult is NULL..*/
bdc0: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4d 75 6c 74  ./* Opcode: Mult
bdd0: 69 70 6c 79 20 50 31 20 50 32 20 50 33 20 2a 20  iply P1 P2 P3 * 
bde0: 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72  *.** Synopsis: r
bdf0: 5b 50 33 5d 3d 72 5b 50 31 5d 2a 72 5b 50 32 5d  [P3]=r[P1]*r[P2]
be00: 0a 2a 2a 0a 2a 2a 0a 2a 2a 20 4d 75 6c 74 69 70  .**.**.** Multip
be10: 6c 79 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20  ly the value in 
be20: 72 65 67 69 73 74 65 72 20 50 31 20 62 79 20 74  register P1 by t
be30: 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69  he value in regi
be40: 73 74 65 72 20 50 32 0a 2a 2a 20 61 6e 64 20 73  ster P2.** and s
be50: 74 6f 72 65 20 74 68 65 20 72 65 73 75 6c 74 20  tore the result 
be60: 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a  in register P3..
be70: 2a 2a 20 49 66 20 65 69 74 68 65 72 20 69 6e 70  ** If either inp
be80: 75 74 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65 20  ut is NULL, the 
be90: 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a  result is NULL..
bea0: 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 75  */./* Opcode: Su
beb0: 62 74 72 61 63 74 20 50 31 20 50 32 20 50 33 20  btract P1 P2 P3 
bec0: 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  * *.** Synopsis:
bed0: 20 72 5b 50 33 5d 3d 72 5b 50 32 5d 2d 72 5b 50   r[P3]=r[P2]-r[P
bee0: 31 5d 0a 2a 2a 0a 2a 2a 20 53 75 62 74 72 61 63  1].**.** Subtrac
bef0: 74 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72  t the value in r
bf00: 65 67 69 73 74 65 72 20 50 31 20 66 72 6f 6d 20  egister P1 from 
bf10: 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67  the value in reg
bf20: 69 73 74 65 72 20 50 32 0a 2a 2a 20 61 6e 64 20  ister P2.** and 
bf30: 73 74 6f 72 65 20 74 68 65 20 72 65 73 75 6c 74  store the result
bf40: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e   in register P3.
bf50: 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20 69 6e  .** If either in
bf60: 70 75 74 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65  put is NULL, the
bf70: 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e   result is NULL.
bf80: 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 44  .*/./* Opcode: D
bf90: 69 76 69 64 65 20 50 31 20 50 32 20 50 33 20 2a  ivide P1 P2 P3 *
bfa0: 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
bfb0: 72 5b 50 33 5d 3d 72 5b 50 32 5d 2f 72 5b 50 31  r[P3]=r[P2]/r[P1
bfc0: 5d 0a 2a 2a 0a 2a 2a 20 44 69 76 69 64 65 20 74  ].**.** Divide t
bfd0: 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69  he value in regi
bfe0: 73 74 65 72 20 50 31 20 62 79 20 74 68 65 20 76  ster P1 by the v
bff0: 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72  alue in register
c000: 20 50 32 0a 2a 2a 20 61 6e 64 20 73 74 6f 72 65   P2.** and store
c010: 20 74 68 65 20 72 65 73 75 6c 74 20 69 6e 20 72   the result in r
c020: 65 67 69 73 74 65 72 20 50 33 20 28 50 33 3d 50  egister P3 (P3=P
c030: 32 2f 50 31 29 2e 20 49 66 20 74 68 65 20 76 61  2/P1). If the va
c040: 6c 75 65 20 69 6e 20 0a 2a 2a 20 72 65 67 69 73  lue in .** regis
c050: 74 65 72 20 50 31 20 69 73 20 7a 65 72 6f 2c 20  ter P1 is zero, 
c060: 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c 74 20  then the result 
c070: 69 73 20 4e 55 4c 4c 2e 20 49 66 20 65 69 74 68  is NULL. If eith
c080: 65 72 20 69 6e 70 75 74 20 69 73 20 0a 2a 2a 20  er input is .** 
c090: 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c 74  NULL, the result
c0a0: 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20   is NULL..*/./* 
c0b0: 4f 70 63 6f 64 65 3a 20 52 65 6d 61 69 6e 64 65  Opcode: Remainde
c0c0: 72 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a  r P1 P2 P3 * *.*
c0d0: 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 33  * Synopsis: r[P3
c0e0: 5d 3d 72 5b 50 32 5d 25 72 5b 50 31 5d 0a 2a 2a  ]=r[P2]%r[P1].**
c0f0: 0a 2a 2a 20 43 6f 6d 70 75 74 65 20 74 68 65 20  .** Compute the 
c100: 72 65 6d 61 69 6e 64 65 72 20 61 66 74 65 72 20  remainder after 
c110: 69 6e 74 65 67 65 72 20 72 65 67 69 73 74 65 72  integer register
c120: 20 50 32 20 69 73 20 64 69 76 69 64 65 64 20 62   P2 is divided b
c130: 79 20 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 50  y .** register P
c140: 31 20 61 6e 64 20 73 74 6f 72 65 20 74 68 65 20  1 and store the 
c150: 72 65 73 75 6c 74 20 69 6e 20 72 65 67 69 73 74  result in regist
c160: 65 72 20 50 33 2e 20 0a 2a 2a 20 49 66 20 74 68  er P3. .** If th
c170: 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73  e value in regis
c180: 74 65 72 20 50 31 20 69 73 20 7a 65 72 6f 20 74  ter P1 is zero t
c190: 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c  he result is NUL
c1a0: 4c 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20  L..** If either 
c1b0: 6f 70 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c 2c  operand is NULL,
c1c0: 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e   the result is N
c1d0: 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ULL..*/.case OP_
c1e0: 41 64 64 3a 20 20 20 20 20 20 20 20 20 20 20 20  Add:            
c1f0: 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61         /* same a
c200: 73 20 54 4b 5f 50 4c 55 53 2c 20 69 6e 31 2c 20  s TK_PLUS, in1, 
c210: 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 63 61 73  in2, out3 */.cas
c220: 65 20 4f 50 5f 53 75 62 74 72 61 63 74 3a 20 20  e OP_Subtract:  
c230: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73              /* s
c240: 61 6d 65 20 61 73 20 54 4b 5f 4d 49 4e 55 53 2c  ame as TK_MINUS,
c250: 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20   in1, in2, out3 
c260: 2a 2f 0a 63 61 73 65 20 4f 50 5f 4d 75 6c 74 69  */.case OP_Multi
c270: 70 6c 79 3a 20 20 20 20 20 20 20 20 20 20 20 20  ply:            
c280: 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f    /* same as TK_
c290: 53 54 41 52 2c 20 69 6e 31 2c 20 69 6e 32 2c 20  STAR, in1, in2, 
c2a0: 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f  out3 */.case OP_
c2b0: 44 69 76 69 64 65 3a 20 20 20 20 20 20 20 20 20  Divide:         
c2c0: 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61         /* same a
c2d0: 73 20 54 4b 5f 53 4c 41 53 48 2c 20 69 6e 31 2c  s TK_SLASH, in1,
c2e0: 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 63 61   in2, out3 */.ca
c2f0: 73 65 20 4f 50 5f 52 65 6d 61 69 6e 64 65 72 3a  se OP_Remainder:
c300: 20 7b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20   {           /* 
c310: 73 61 6d 65 20 61 73 20 54 4b 5f 52 45 4d 2c 20  same as TK_REM, 
c320: 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a  in1, in2, out3 *
c330: 2f 0a 20 20 63 68 61 72 20 62 49 6e 74 69 6e 74  /.  char bIntint
c340: 3b 20 20 20 2f 2a 20 53 74 61 72 74 65 64 20 6f  ;   /* Started o
c350: 75 74 20 61 73 20 74 77 6f 20 69 6e 74 65 67 65  ut as two intege
c360: 72 20 6f 70 65 72 61 6e 64 73 20 2a 2f 0a 20 20  r operands */.  
c370: 75 31 36 20 66 6c 61 67 73 3b 20 20 20 20 20 20  u16 flags;      
c380: 2f 2a 20 43 6f 6d 62 69 6e 65 64 20 4d 45 4d 5f  /* Combined MEM_
c390: 2a 20 66 6c 61 67 73 20 66 72 6f 6d 20 62 6f 74  * flags from bot
c3a0: 68 20 69 6e 70 75 74 73 20 2a 2f 0a 20 20 75 31  h inputs */.  u1
c3b0: 36 20 74 79 70 65 31 3b 20 20 20 20 20 20 2f 2a  6 type1;      /*
c3c0: 20 4e 75 6d 65 72 69 63 20 74 79 70 65 20 6f 66   Numeric type of
c3d0: 20 6c 65 66 74 20 6f 70 65 72 61 6e 64 20 2a 2f   left operand */
c3e0: 0a 20 20 75 31 36 20 74 79 70 65 32 3b 20 20 20  .  u16 type2;   
c3f0: 20 20 20 2f 2a 20 4e 75 6d 65 72 69 63 20 74 79     /* Numeric ty
c400: 70 65 20 6f 66 20 72 69 67 68 74 20 6f 70 65 72  pe of right oper
c410: 61 6e 64 20 2a 2f 0a 20 20 69 36 34 20 69 41 3b  and */.  i64 iA;
c420: 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 74 65           /* Inte
c430: 67 65 72 20 76 61 6c 75 65 20 6f 66 20 6c 65 66  ger value of lef
c440: 74 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20 69  t operand */.  i
c450: 36 34 20 69 42 3b 20 20 20 20 20 20 20 20 20 2f  64 iB;         /
c460: 2a 20 49 6e 74 65 67 65 72 20 76 61 6c 75 65 20  * Integer value 
c470: 6f 66 20 72 69 67 68 74 20 6f 70 65 72 61 6e 64  of right operand
c480: 20 2a 2f 0a 20 20 64 6f 75 62 6c 65 20 72 41 3b   */.  double rA;
c490: 20 20 20 20 20 20 2f 2a 20 52 65 61 6c 20 76 61        /* Real va
c4a0: 6c 75 65 20 6f 66 20 6c 65 66 74 20 6f 70 65 72  lue of left oper
c4b0: 61 6e 64 20 2a 2f 0a 20 20 64 6f 75 62 6c 65 20  and */.  double 
c4c0: 72 42 3b 20 20 20 20 20 20 2f 2a 20 52 65 61 6c  rB;      /* Real
c4d0: 20 76 61 6c 75 65 20 6f 66 20 72 69 67 68 74 20   value of right 
c4e0: 6f 70 65 72 61 6e 64 20 2a 2f 0a 0a 20 20 70 49  operand */..  pI
c4f0: 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n1 = &aMem[pOp->
c500: 70 31 5d 3b 0a 20 20 74 79 70 65 31 20 3d 20 6e  p1];.  type1 = n
c510: 75 6d 65 72 69 63 54 79 70 65 28 70 49 6e 31 29  umericType(pIn1)
c520: 3b 0a 20 20 70 49 6e 32 20 3d 20 26 61 4d 65 6d  ;.  pIn2 = &aMem
c530: 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 74 79 70  [pOp->p2];.  typ
c540: 65 32 20 3d 20 6e 75 6d 65 72 69 63 54 79 70 65  e2 = numericType
c550: 28 70 49 6e 32 29 3b 0a 20 20 70 4f 75 74 20 3d  (pIn2);.  pOut =
c560: 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b   &aMem[pOp->p3];
c570: 0a 20 20 66 6c 61 67 73 20 3d 20 70 49 6e 31 2d  .  flags = pIn1-
c580: 3e 66 6c 61 67 73 20 7c 20 70 49 6e 32 2d 3e 66  >flags | pIn2->f
c590: 6c 61 67 73 3b 0a 20 20 69 66 28 20 28 74 79 70  lags;.  if( (typ
c5a0: 65 31 20 26 20 74 79 70 65 32 20 26 20 4d 45 4d  e1 & type2 & MEM
c5b0: 5f 49 6e 74 29 21 3d 30 20 29 7b 0a 20 20 20 20  _Int)!=0 ){.    
c5c0: 69 41 20 3d 20 70 49 6e 31 2d 3e 75 2e 69 3b 0a  iA = pIn1->u.i;.
c5d0: 20 20 20 20 69 42 20 3d 20 70 49 6e 32 2d 3e 75      iB = pIn2->u
c5e0: 2e 69 3b 0a 20 20 20 20 62 49 6e 74 69 6e 74 20  .i;.    bIntint 
c5f0: 3d 20 31 3b 0a 20 20 20 20 73 77 69 74 63 68 28  = 1;.    switch(
c600: 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 20 29 7b 0a   pOp->opcode ){.
c610: 20 20 20 20 20 20 63 61 73 65 20 4f 50 5f 41 64        case OP_Ad
c620: 64 3a 20 20 20 20 20 20 20 69 66 28 20 73 71 6c  d:       if( sql
c630: 69 74 65 33 41 64 64 49 6e 74 36 34 28 26 69 42  ite3AddInt64(&iB
c640: 2c 69 41 29 20 29 20 67 6f 74 6f 20 66 70 5f 6d  ,iA) ) goto fp_m
c650: 61 74 68 3b 20 20 62 72 65 61 6b 3b 0a 20 20 20  ath;  break;.   
c660: 20 20 20 63 61 73 65 20 4f 50 5f 53 75 62 74 72     case OP_Subtr
c670: 61 63 74 3a 20 20 69 66 28 20 73 71 6c 69 74 65  act:  if( sqlite
c680: 33 53 75 62 49 6e 74 36 34 28 26 69 42 2c 69 41  3SubInt64(&iB,iA
c690: 29 20 29 20 67 6f 74 6f 20 66 70 5f 6d 61 74 68  ) ) goto fp_math
c6a0: 3b 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20  ;  break;.      
c6b0: 63 61 73 65 20 4f 50 5f 4d 75 6c 74 69 70 6c 79  case OP_Multiply
c6c0: 3a 20 20 69 66 28 20 73 71 6c 69 74 65 33 4d 75  :  if( sqlite3Mu
c6d0: 6c 49 6e 74 36 34 28 26 69 42 2c 69 41 29 20 29  lInt64(&iB,iA) )
c6e0: 20 67 6f 74 6f 20 66 70 5f 6d 61 74 68 3b 20 20   goto fp_math;  
c6f0: 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 63 61 73  break;.      cas
c700: 65 20 4f 50 5f 44 69 76 69 64 65 3a 20 7b 0a 20  e OP_Divide: {. 
c710: 20 20 20 20 20 20 20 69 66 28 20 69 41 3d 3d 30         if( iA==0
c720: 20 29 20 67 6f 74 6f 20 61 72 69 74 68 6d 65 74   ) goto arithmet
c730: 69 63 5f 72 65 73 75 6c 74 5f 69 73 5f 6e 75 6c  ic_result_is_nul
c740: 6c 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 69  l;.        if( i
c750: 41 3d 3d 2d 31 20 26 26 20 69 42 3d 3d 53 4d 41  A==-1 && iB==SMA
c760: 4c 4c 45 53 54 5f 49 4e 54 36 34 20 29 20 67 6f  LLEST_INT64 ) go
c770: 74 6f 20 66 70 5f 6d 61 74 68 3b 0a 20 20 20 20  to fp_math;.    
c780: 20 20 20 20 69 42 20 2f 3d 20 69 41 3b 0a 20 20      iB /= iA;.  
c790: 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
c7a0: 20 20 20 7d 0a 20 20 20 20 20 20 64 65 66 61 75     }.      defau
c7b0: 6c 74 3a 20 7b 0a 20 20 20 20 20 20 20 20 69 66  lt: {.        if
c7c0: 28 20 69 41 3d 3d 30 20 29 20 67 6f 74 6f 20 61  ( iA==0 ) goto a
c7d0: 72 69 74 68 6d 65 74 69 63 5f 72 65 73 75 6c 74  rithmetic_result
c7e0: 5f 69 73 5f 6e 75 6c 6c 3b 0a 20 20 20 20 20 20  _is_null;.      
c7f0: 20 20 69 66 28 20 69 41 3d 3d 2d 31 20 29 20 69    if( iA==-1 ) i
c800: 41 20 3d 20 31 3b 0a 20 20 20 20 20 20 20 20 69  A = 1;.        i
c810: 42 20 25 3d 20 69 41 3b 0a 20 20 20 20 20 20 20  B %= iA;.       
c820: 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a   break;.      }.
c830: 20 20 20 20 7d 0a 20 20 20 20 70 4f 75 74 2d 3e      }.    pOut->
c840: 75 2e 69 20 3d 20 69 42 3b 0a 20 20 20 20 4d 65  u.i = iB;.    Me
c850: 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70 4f 75  mSetTypeFlag(pOu
c860: 74 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20 7d  t, MEM_Int);.  }
c870: 65 6c 73 65 20 69 66 28 20 28 66 6c 61 67 73 20  else if( (flags 
c880: 26 20 4d 45 4d 5f 4e 75 6c 6c 29 21 3d 30 20 29  & MEM_Null)!=0 )
c890: 7b 0a 20 20 20 20 67 6f 74 6f 20 61 72 69 74 68  {.    goto arith
c8a0: 6d 65 74 69 63 5f 72 65 73 75 6c 74 5f 69 73 5f  metic_result_is_
c8b0: 6e 75 6c 6c 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  null;.  }else{. 
c8c0: 20 20 20 62 49 6e 74 69 6e 74 20 3d 20 30 3b 0a     bIntint = 0;.
c8d0: 66 70 5f 6d 61 74 68 3a 0a 20 20 20 20 72 41 20  fp_math:.    rA 
c8e0: 3d 20 73 71 6c 69 74 65 33 56 64 62 65 52 65 61  = sqlite3VdbeRea
c8f0: 6c 56 61 6c 75 65 28 70 49 6e 31 29 3b 0a 20 20  lValue(pIn1);.  
c900: 20 20 72 42 20 3d 20 73 71 6c 69 74 65 33 56 64    rB = sqlite3Vd
c910: 62 65 52 65 61 6c 56 61 6c 75 65 28 70 49 6e 32  beRealValue(pIn2
c920: 29 3b 0a 20 20 20 20 73 77 69 74 63 68 28 20 70  );.    switch( p
c930: 4f 70 2d 3e 6f 70 63 6f 64 65 20 29 7b 0a 20 20  Op->opcode ){.  
c940: 20 20 20 20 63 61 73 65 20 4f 50 5f 41 64 64 3a      case OP_Add:
c950: 20 20 20 20 20 20 20 20 20 72 42 20 2b 3d 20 72           rB += r
c960: 41 3b 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a  A;       break;.
c970: 20 20 20 20 20 20 63 61 73 65 20 4f 50 5f 53 75        case OP_Su
c980: 62 74 72 61 63 74 3a 20 20 20 20 72 42 20 2d 3d  btract:    rB -=
c990: 20 72 41 3b 20 20 20 20 20 20 20 62 72 65 61 6b   rA;       break
c9a0: 3b 0a 20 20 20 20 20 20 63 61 73 65 20 4f 50 5f  ;.      case OP_
c9b0: 4d 75 6c 74 69 70 6c 79 3a 20 20 20 20 72 42 20  Multiply:    rB 
c9c0: 2a 3d 20 72 41 3b 20 20 20 20 20 20 20 62 72 65  *= rA;       bre
c9d0: 61 6b 3b 0a 20 20 20 20 20 20 63 61 73 65 20 4f  ak;.      case O
c9e0: 50 5f 44 69 76 69 64 65 3a 20 7b 0a 20 20 20 20  P_Divide: {.    
c9f0: 20 20 20 20 2f 2a 20 28 64 6f 75 62 6c 65 29 30      /* (double)0
ca00: 20 49 6e 20 63 61 73 65 20 6f 66 20 53 51 4c 49   In case of SQLI
ca10: 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47  TE_OMIT_FLOATING
ca20: 5f 50 4f 49 4e 54 2e 2e 2e 20 2a 2f 0a 20 20 20  _POINT... */.   
ca30: 20 20 20 20 20 69 66 28 20 72 41 3d 3d 28 64 6f       if( rA==(do
ca40: 75 62 6c 65 29 30 20 29 20 67 6f 74 6f 20 61 72  uble)0 ) goto ar
ca50: 69 74 68 6d 65 74 69 63 5f 72 65 73 75 6c 74 5f  ithmetic_result_
ca60: 69 73 5f 6e 75 6c 6c 3b 0a 20 20 20 20 20 20 20  is_null;.       
ca70: 20 72 42 20 2f 3d 20 72 41 3b 0a 20 20 20 20 20   rB /= rA;.     
ca80: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20     break;.      
ca90: 7d 0a 20 20 20 20 20 20 64 65 66 61 75 6c 74 3a  }.      default:
caa0: 20 7b 0a 20 20 20 20 20 20 20 20 69 41 20 3d 20   {.        iA = 
cab0: 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74 56 61  sqlite3VdbeIntVa
cac0: 6c 75 65 28 70 49 6e 31 29 3b 0a 20 20 20 20 20  lue(pIn1);.     
cad0: 20 20 20 69 42 20 3d 20 73 71 6c 69 74 65 33 56     iB = sqlite3V
cae0: 64 62 65 49 6e 74 56 61 6c 75 65 28 70 49 6e 32  dbeIntValue(pIn2
caf0: 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 69  );.        if( i
cb00: 41 3d 3d 30 20 29 20 67 6f 74 6f 20 61 72 69 74  A==0 ) goto arit
cb10: 68 6d 65 74 69 63 5f 72 65 73 75 6c 74 5f 69 73  hmetic_result_is
cb20: 5f 6e 75 6c 6c 3b 0a 20 20 20 20 20 20 20 20 69  _null;.        i
cb30: 66 28 20 69 41 3d 3d 2d 31 20 29 20 69 41 20 3d  f( iA==-1 ) iA =
cb40: 20 31 3b 0a 20 20 20 20 20 20 20 20 72 42 20 3d   1;.        rB =
cb50: 20 28 64 6f 75 62 6c 65 29 28 69 42 20 25 20 69   (double)(iB % i
cb60: 41 29 3b 0a 20 20 20 20 20 20 20 20 62 72 65 61  A);.        brea
cb70: 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  k;.      }.    }
cb80: 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f  .#ifdef SQLITE_O
cb90: 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49  MIT_FLOATING_POI
cba0: 4e 54 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e 69  NT.    pOut->u.i
cbb0: 20 3d 20 72 42 3b 0a 20 20 20 20 4d 65 6d 53 65   = rB;.    MemSe
cbc0: 74 54 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20  tTypeFlag(pOut, 
cbd0: 4d 45 4d 5f 49 6e 74 29 3b 0a 23 65 6c 73 65 0a  MEM_Int);.#else.
cbe0: 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 49      if( sqlite3I
cbf0: 73 4e 61 4e 28 72 42 29 20 29 7b 0a 20 20 20 20  sNaN(rB) ){.    
cc00: 20 20 67 6f 74 6f 20 61 72 69 74 68 6d 65 74 69    goto arithmeti
cc10: 63 5f 72 65 73 75 6c 74 5f 69 73 5f 6e 75 6c 6c  c_result_is_null
cc20: 3b 0a 20 20 20 20 7d 0a 20 20 20 20 70 4f 75 74  ;.    }.    pOut
cc30: 2d 3e 75 2e 72 20 3d 20 72 42 3b 0a 20 20 20 20  ->u.r = rB;.    
cc40: 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70  MemSetTypeFlag(p
cc50: 4f 75 74 2c 20 4d 45 4d 5f 52 65 61 6c 29 3b 0a  Out, MEM_Real);.
cc60: 20 20 20 20 69 66 28 20 28 28 74 79 70 65 31 7c      if( ((type1|
cc70: 74 79 70 65 32 29 26 4d 45 4d 5f 52 65 61 6c 29  type2)&MEM_Real)
cc80: 3d 3d 30 20 26 26 20 21 62 49 6e 74 69 6e 74 20  ==0 && !bIntint 
cc90: 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  ){.      sqlite3
cca0: 56 64 62 65 49 6e 74 65 67 65 72 41 66 66 69 6e  VdbeIntegerAffin
ccb0: 69 74 79 28 70 4f 75 74 29 3b 0a 20 20 20 20 7d  ity(pOut);.    }
ccc0: 0a 23 65 6e 64 69 66 0a 20 20 7d 0a 20 20 62 72  .#endif.  }.  br
ccd0: 65 61 6b 3b 0a 0a 61 72 69 74 68 6d 65 74 69 63  eak;..arithmetic
cce0: 5f 72 65 73 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3a  _result_is_null:
ccf0: 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65  .  sqlite3VdbeMe
cd00: 6d 53 65 74 4e 75 6c 6c 28 70 4f 75 74 29 3b 0a  mSetNull(pOut);.
cd10: 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
cd20: 70 63 6f 64 65 3a 20 43 6f 6c 6c 53 65 71 20 50  pcode: CollSeq P
cd30: 31 20 2a 20 2a 20 50 34 0a 2a 2a 0a 2a 2a 20 50  1 * * P4.**.** P
cd40: 34 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74  4 is a pointer t
cd50: 6f 20 61 20 43 6f 6c 6c 53 65 71 20 6f 62 6a 65  o a CollSeq obje
cd60: 63 74 2e 20 49 66 20 74 68 65 20 6e 65 78 74 20  ct. If the next 
cd70: 63 61 6c 6c 20 74 6f 20 61 20 75 73 65 72 20 66  call to a user f
cd80: 75 6e 63 74 69 6f 6e 0a 2a 2a 20 6f 72 20 61 67  unction.** or ag
cd90: 67 72 65 67 61 74 65 20 63 61 6c 6c 73 20 73 71  gregate calls sq
cda0: 6c 69 74 65 33 47 65 74 46 75 6e 63 43 6f 6c 6c  lite3GetFuncColl
cdb0: 53 65 71 28 29 2c 20 74 68 69 73 20 63 6f 6c 6c  Seq(), this coll
cdc0: 61 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 20 77  ation sequence w
cdd0: 69 6c 6c 0a 2a 2a 20 62 65 20 72 65 74 75 72 6e  ill.** be return
cde0: 65 64 2e 20 54 68 69 73 20 69 73 20 75 73 65 64  ed. This is used
cdf0: 20 62 79 20 74 68 65 20 62 75 69 6c 74 2d 69 6e   by the built-in
ce00: 20 6d 69 6e 28 29 2c 20 6d 61 78 28 29 20 61 6e   min(), max() an
ce10: 64 20 6e 75 6c 6c 69 66 28 29 0a 2a 2a 20 66 75  d nullif().** fu
ce20: 6e 63 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20 49  nctions..**.** I
ce30: 66 20 50 31 20 69 73 20 6e 6f 74 20 7a 65 72 6f  f P1 is not zero
ce40: 2c 20 74 68 65 6e 20 69 74 20 69 73 20 61 20 72  , then it is a r
ce50: 65 67 69 73 74 65 72 20 74 68 61 74 20 61 20 73  egister that a s
ce60: 75 62 73 65 71 75 65 6e 74 20 6d 69 6e 28 29 20  ubsequent min() 
ce70: 6f 72 0a 2a 2a 20 6d 61 78 28 29 20 61 67 67 72  or.** max() aggr
ce80: 65 67 61 74 65 20 77 69 6c 6c 20 73 65 74 20 74  egate will set t
ce90: 6f 20 31 20 69 66 20 74 68 65 20 63 75 72 72 65  o 1 if the curre
cea0: 6e 74 20 72 6f 77 20 69 73 20 6e 6f 74 20 74 68  nt row is not th
ceb0: 65 20 6d 69 6e 69 6d 75 6d 20 6f 72 0a 2a 2a 20  e minimum or.** 
cec0: 6d 61 78 69 6d 75 6d 2e 20 20 54 68 65 20 50 31  maximum.  The P1
ced0: 20 72 65 67 69 73 74 65 72 20 69 73 20 69 6e 69   register is ini
cee0: 74 69 61 6c 69 7a 65 64 20 74 6f 20 30 20 62 79  tialized to 0 by
cef0: 20 74 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f   this instructio
cf00: 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 69 6e 74  n..**.** The int
cf10: 65 72 66 61 63 65 20 75 73 65 64 20 62 79 20 74  erface used by t
cf20: 68 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f  he implementatio
cf30: 6e 20 6f 66 20 74 68 65 20 61 66 6f 72 65 6d 65  n of the aforeme
cf40: 6e 74 69 6f 6e 65 64 20 66 75 6e 63 74 69 6f 6e  ntioned function
cf50: 73 0a 2a 2a 20 74 6f 20 72 65 74 72 69 65 76 65  s.** to retrieve
cf60: 20 74 68 65 20 63 6f 6c 6c 61 74 69 6f 6e 20 73   the collation s
cf70: 65 71 75 65 6e 63 65 20 73 65 74 20 62 79 20 74  equence set by t
cf80: 68 69 73 20 6f 70 63 6f 64 65 20 69 73 20 6e 6f  his opcode is no
cf90: 74 20 61 76 61 69 6c 61 62 6c 65 0a 2a 2a 20 70  t available.** p
cfa0: 75 62 6c 69 63 6c 79 2e 20 20 4f 6e 6c 79 20 62  ublicly.  Only b
cfb0: 75 69 6c 74 2d 69 6e 20 66 75 6e 63 74 69 6f 6e  uilt-in function
cfc0: 73 20 68 61 76 65 20 61 63 63 65 73 73 20 74 6f  s have access to
cfd0: 20 74 68 69 73 20 66 65 61 74 75 72 65 2e 0a 2a   this feature..*
cfe0: 2f 0a 63 61 73 65 20 4f 50 5f 43 6f 6c 6c 53 65  /.case OP_CollSe
cff0: 71 3a 20 7b 0a 20 20 61 73 73 65 72 74 28 20 70  q: {.  assert( p
d000: 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 43  Op->p4type==P4_C
d010: 4f 4c 4c 53 45 51 20 29 3b 0a 20 20 69 66 28 20  OLLSEQ );.  if( 
d020: 70 4f 70 2d 3e 70 31 20 29 7b 0a 20 20 20 20 73  pOp->p1 ){.    s
d030: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74  qlite3VdbeMemSet
d040: 49 6e 74 36 34 28 26 61 4d 65 6d 5b 70 4f 70 2d  Int64(&aMem[pOp-
d050: 3e 70 31 5d 2c 20 30 29 3b 0a 20 20 7d 0a 20 20  >p1], 0);.  }.  
d060: 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
d070: 6f 64 65 3a 20 42 69 74 41 6e 64 20 50 31 20 50  ode: BitAnd P1 P
d080: 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f  2 P3 * *.** Syno
d090: 70 73 69 73 3a 20 72 5b 50 33 5d 3d 72 5b 50 31  psis: r[P3]=r[P1
d0a0: 5d 26 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20 54 61  ]&r[P2].**.** Ta
d0b0: 6b 65 20 74 68 65 20 62 69 74 2d 77 69 73 65 20  ke the bit-wise 
d0c0: 41 4e 44 20 6f 66 20 74 68 65 20 76 61 6c 75 65  AND of the value
d0d0: 73 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31  s in register P1
d0e0: 20 61 6e 64 20 50 32 20 61 6e 64 0a 2a 2a 20 73   and P2 and.** s
d0f0: 74 6f 72 65 20 74 68 65 20 72 65 73 75 6c 74 20  tore the result 
d100: 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a  in register P3..
d110: 2a 2a 20 49 66 20 65 69 74 68 65 72 20 69 6e 70  ** If either inp
d120: 75 74 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65 20  ut is NULL, the 
d130: 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a  result is NULL..
d140: 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 42 69  */./* Opcode: Bi
d150: 74 4f 72 20 50 31 20 50 32 20 50 33 20 2a 20 2a  tOr P1 P2 P3 * *
d160: 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b  .** Synopsis: r[
d170: 50 33 5d 3d 72 5b 50 31 5d 7c 72 5b 50 32 5d 0a  P3]=r[P1]|r[P2].
d180: 2a 2a 0a 2a 2a 20 54 61 6b 65 20 74 68 65 20 62  **.** Take the b
d190: 69 74 2d 77 69 73 65 20 4f 52 20 6f 66 20 74 68  it-wise OR of th
d1a0: 65 20 76 61 6c 75 65 73 20 69 6e 20 72 65 67 69  e values in regi
d1b0: 73 74 65 72 20 50 31 20 61 6e 64 20 50 32 20 61  ster P1 and P2 a
d1c0: 6e 64 0a 2a 2a 20 73 74 6f 72 65 20 74 68 65 20  nd.** store the 
d1d0: 72 65 73 75 6c 74 20 69 6e 20 72 65 67 69 73 74  result in regist
d1e0: 65 72 20 50 33 2e 0a 2a 2a 20 49 66 20 65 69 74  er P3..** If eit
d1f0: 68 65 72 20 69 6e 70 75 74 20 69 73 20 4e 55 4c  her input is NUL
d200: 4c 2c 20 74 68 65 20 72 65 73 75 6c 74 20 69 73  L, the result is
d210: 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63   NULL..*/./* Opc
d220: 6f 64 65 3a 20 53 68 69 66 74 4c 65 66 74 20 50  ode: ShiftLeft P
d230: 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53  1 P2 P3 * *.** S
d240: 79 6e 6f 70 73 69 73 3a 20 72 5b 50 33 5d 3d 72  ynopsis: r[P3]=r
d250: 5b 50 32 5d 3c 3c 72 5b 50 31 5d 0a 2a 2a 0a 2a  [P2]<<r[P1].**.*
d260: 2a 20 53 68 69 66 74 20 74 68 65 20 69 6e 74 65  * Shift the inte
d270: 67 65 72 20 76 61 6c 75 65 20 69 6e 20 72 65 67  ger value in reg
d280: 69 73 74 65 72 20 50 32 20 74 6f 20 74 68 65 20  ister P2 to the 
d290: 6c 65 66 74 20 62 79 20 74 68 65 0a 2a 2a 20 6e  left by the.** n
d2a0: 75 6d 62 65 72 20 6f 66 20 62 69 74 73 20 73 70  umber of bits sp
d2b0: 65 63 69 66 69 65 64 20 62 79 20 74 68 65 20 69  ecified by the i
d2c0: 6e 74 65 67 65 72 20 69 6e 20 72 65 67 69 73 74  nteger in regist
d2d0: 65 72 20 50 31 2e 0a 2a 2a 20 53 74 6f 72 65 20  er P1..** Store 
d2e0: 74 68 65 20 72 65 73 75 6c 74 20 69 6e 20 72 65  the result in re
d2f0: 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a 20 49 66  gister P3..** If
d300: 20 65 69 74 68 65 72 20 69 6e 70 75 74 20 69 73   either input is
d310: 20 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c   NULL, the resul
d320: 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a  t is NULL..*/./*
d330: 20 4f 70 63 6f 64 65 3a 20 53 68 69 66 74 52 69   Opcode: ShiftRi
d340: 67 68 74 20 50 31 20 50 32 20 50 33 20 2a 20 2a  ght P1 P2 P3 * *
d350: 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b  .** Synopsis: r[
d360: 50 33 5d 3d 72 5b 50 32 5d 3e 3e 72 5b 50 31 5d  P3]=r[P2]>>r[P1]
d370: 0a 2a 2a 0a 2a 2a 20 53 68 69 66 74 20 74 68 65  .**.** Shift the
d380: 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65 20 69   integer value i
d390: 6e 20 72 65 67 69 73 74 65 72 20 50 32 20 74 6f  n register P2 to
d3a0: 20 74 68 65 20 72 69 67 68 74 20 62 79 20 74 68   the right by th
d3b0: 65 0a 2a 2a 20 6e 75 6d 62 65 72 20 6f 66 20 62  e.** number of b
d3c0: 69 74 73 20 73 70 65 63 69 66 69 65 64 20 62 79  its specified by
d3d0: 20 74 68 65 20 69 6e 74 65 67 65 72 20 69 6e 20   the integer in 
d3e0: 72 65 67 69 73 74 65 72 20 50 31 2e 0a 2a 2a 20  register P1..** 
d3f0: 53 74 6f 72 65 20 74 68 65 20 72 65 73 75 6c 74  Store the result
d400: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e   in register P3.
d410: 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20 69 6e  .** If either in
d420: 70 75 74 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65  put is NULL, the
d430: 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e   result is NULL.
d440: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 42 69 74 41  .*/.case OP_BitA
d450: 6e 64 3a 20 20 20 20 20 20 20 20 20 20 20 20 20  nd:             
d460: 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54      /* same as T
d470: 4b 5f 42 49 54 41 4e 44 2c 20 69 6e 31 2c 20 69  K_BITAND, in1, i
d480: 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65  n2, out3 */.case
d490: 20 4f 50 5f 42 69 74 4f 72 3a 20 20 20 20 20 20   OP_BitOr:      
d4a0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73              /* s
d4b0: 61 6d 65 20 61 73 20 54 4b 5f 42 49 54 4f 52 2c  ame as TK_BITOR,
d4c0: 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20   in1, in2, out3 
d4d0: 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 68 69 66 74  */.case OP_Shift
d4e0: 4c 65 66 74 3a 20 20 20 20 20 20 20 20 20 20 20  Left:           
d4f0: 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b     /* same as TK
d500: 5f 4c 53 48 49 46 54 2c 20 69 6e 31 2c 20 69 6e  _LSHIFT, in1, in
d510: 32 2c 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20  2, out3 */.case 
d520: 4f 50 5f 53 68 69 66 74 52 69 67 68 74 3a 20 7b  OP_ShiftRight: {
d530: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61             /* sa
d540: 6d 65 20 61 73 20 54 4b 5f 52 53 48 49 46 54 2c  me as TK_RSHIFT,
d550: 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20   in1, in2, out3 
d560: 2a 2f 0a 20 20 69 36 34 20 69 41 3b 0a 20 20 75  */.  i64 iA;.  u
d570: 36 34 20 75 41 3b 0a 20 20 69 36 34 20 69 42 3b  64 uA;.  i64 iB;
d580: 0a 20 20 75 38 20 6f 70 3b 0a 0a 20 20 70 49 6e  .  u8 op;..  pIn
d590: 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  1 = &aMem[pOp->p
d5a0: 31 5d 3b 0a 20 20 70 49 6e 32 20 3d 20 26 61 4d  1];.  pIn2 = &aM
d5b0: 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 70  em[pOp->p2];.  p
d5c0: 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  Out = &aMem[pOp-
d5d0: 3e 70 33 5d 3b 0a 20 20 69 66 28 20 28 70 49 6e  >p3];.  if( (pIn
d5e0: 31 2d 3e 66 6c 61 67 73 20 7c 20 70 49 6e 32 2d  1->flags | pIn2-
d5f0: 3e 66 6c 61 67 73 29 20 26 20 4d 45 4d 5f 4e 75  >flags) & MEM_Nu
d600: 6c 6c 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  ll ){.    sqlite
d610: 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28  3VdbeMemSetNull(
d620: 70 4f 75 74 29 3b 0a 20 20 20 20 62 72 65 61 6b  pOut);.    break
d630: 3b 0a 20 20 7d 0a 20 20 69 41 20 3d 20 73 71 6c  ;.  }.  iA = sql
d640: 69 74 65 33 56 64 62 65 49 6e 74 56 61 6c 75 65  ite3VdbeIntValue
d650: 28 70 49 6e 32 29 3b 0a 20 20 69 42 20 3d 20 73  (pIn2);.  iB = s
d660: 71 6c 69 74 65 33 56 64 62 65 49 6e 74 56 61 6c  qlite3VdbeIntVal
d670: 75 65 28 70 49 6e 31 29 3b 0a 20 20 6f 70 20 3d  ue(pIn1);.  op =
d680: 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3b 0a 20 20   pOp->opcode;.  
d690: 69 66 28 20 6f 70 3d 3d 4f 50 5f 42 69 74 41 6e  if( op==OP_BitAn
d6a0: 64 20 29 7b 0a 20 20 20 20 69 41 20 26 3d 20 69  d ){.    iA &= i
d6b0: 42 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 6f  B;.  }else if( o
d6c0: 70 3d 3d 4f 50 5f 42 69 74 4f 72 20 29 7b 0a 20  p==OP_BitOr ){. 
d6d0: 20 20 20 69 41 20 7c 3d 20 69 42 3b 0a 20 20 7d     iA |= iB;.  }
d6e0: 65 6c 73 65 20 69 66 28 20 69 42 21 3d 30 20 29  else if( iB!=0 )
d6f0: 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 6f 70  {.    assert( op
d700: 3d 3d 4f 50 5f 53 68 69 66 74 52 69 67 68 74 20  ==OP_ShiftRight 
d710: 7c 7c 20 6f 70 3d 3d 4f 50 5f 53 68 69 66 74 4c  || op==OP_ShiftL
d720: 65 66 74 20 29 3b 0a 0a 20 20 20 20 2f 2a 20 49  eft );..    /* I
d730: 66 20 73 68 69 66 74 69 6e 67 20 62 79 20 61 20  f shifting by a 
d740: 6e 65 67 61 74 69 76 65 20 61 6d 6f 75 6e 74 2c  negative amount,
d750: 20 73 68 69 66 74 20 69 6e 20 74 68 65 20 6f 74   shift in the ot
d760: 68 65 72 20 64 69 72 65 63 74 69 6f 6e 20 2a 2f  her direction */
d770: 0a 20 20 20 20 69 66 28 20 69 42 3c 30 20 29 7b  .    if( iB<0 ){
d780: 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 4f  .      assert( O
d790: 50 5f 53 68 69 66 74 52 69 67 68 74 3d 3d 4f 50  P_ShiftRight==OP
d7a0: 5f 53 68 69 66 74 4c 65 66 74 2b 31 20 29 3b 0a  _ShiftLeft+1 );.
d7b0: 20 20 20 20 20 20 6f 70 20 3d 20 32 2a 4f 50 5f        op = 2*OP_
d7c0: 53 68 69 66 74 4c 65 66 74 20 2b 20 31 20 2d 20  ShiftLeft + 1 - 
d7d0: 6f 70 3b 0a 20 20 20 20 20 20 69 42 20 3d 20 69  op;.      iB = i
d7e0: 42 3e 28 2d 36 34 29 20 3f 20 2d 69 42 20 3a 20  B>(-64) ? -iB : 
d7f0: 36 34 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 69  64;.    }..    i
d800: 66 28 20 69 42 3e 3d 36 34 20 29 7b 0a 20 20 20  f( iB>=64 ){.   
d810: 20 20 20 69 41 20 3d 20 28 69 41 3e 3d 30 20 7c     iA = (iA>=0 |
d820: 7c 20 6f 70 3d 3d 4f 50 5f 53 68 69 66 74 4c 65  | op==OP_ShiftLe
d830: 66 74 29 20 3f 20 30 20 3a 20 2d 31 3b 0a 20 20  ft) ? 0 : -1;.  
d840: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 6d    }else{.      m
d850: 65 6d 63 70 79 28 26 75 41 2c 20 26 69 41 2c 20  emcpy(&uA, &iA, 
d860: 73 69 7a 65 6f 66 28 75 41 29 29 3b 0a 20 20 20  sizeof(uA));.   
d870: 20 20 20 69 66 28 20 6f 70 3d 3d 4f 50 5f 53 68     if( op==OP_Sh
d880: 69 66 74 4c 65 66 74 20 29 7b 0a 20 20 20 20 20  iftLeft ){.     
d890: 20 20 20 75 41 20 3c 3c 3d 20 69 42 3b 0a 20 20     uA <<= iB;.  
d8a0: 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
d8b0: 20 20 20 75 41 20 3e 3e 3d 20 69 42 3b 0a 20 20     uA >>= iB;.  
d8c0: 20 20 20 20 20 20 2f 2a 20 53 69 67 6e 2d 65 78        /* Sign-ex
d8d0: 74 65 6e 64 20 6f 6e 20 61 20 72 69 67 68 74 20  tend on a right 
d8e0: 73 68 69 66 74 20 6f 66 20 61 20 6e 65 67 61 74  shift of a negat
d8f0: 69 76 65 20 6e 75 6d 62 65 72 20 2a 2f 0a 20 20  ive number */.  
d900: 20 20 20 20 20 20 69 66 28 20 69 41 3c 30 20 29        if( iA<0 )
d910: 20 75 41 20 7c 3d 20 28 28 28 28 75 36 34 29 30   uA |= ((((u64)0
d920: 78 66 66 66 66 66 66 66 66 29 3c 3c 33 32 29 7c  xffffffff)<<32)|
d930: 30 78 66 66 66 66 66 66 66 66 29 20 3c 3c 20 28  0xffffffff) << (
d940: 36 34 2d 69 42 29 3b 0a 20 20 20 20 20 20 7d 0a  64-iB);.      }.
d950: 20 20 20 20 20 20 6d 65 6d 63 70 79 28 26 69 41        memcpy(&iA
d960: 2c 20 26 75 41 2c 20 73 69 7a 65 6f 66 28 69 41  , &uA, sizeof(iA
d970: 29 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20  ));.    }.  }.  
d980: 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 69 41 3b 0a  pOut->u.i = iA;.
d990: 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67    MemSetTypeFlag
d9a0: 28 70 4f 75 74 2c 20 4d 45 4d 5f 49 6e 74 29 3b  (pOut, MEM_Int);
d9b0: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
d9c0: 4f 70 63 6f 64 65 3a 20 41 64 64 49 6d 6d 20 20  Opcode: AddImm  
d9d0: 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53  P1 P2 * * *.** S
d9e0: 79 6e 6f 70 73 69 73 3a 20 72 5b 50 31 5d 3d 72  ynopsis: r[P1]=r
d9f0: 5b 50 31 5d 2b 50 32 0a 2a 2a 20 0a 2a 2a 20 41  [P1]+P2.** .** A
da00: 64 64 20 74 68 65 20 63 6f 6e 73 74 61 6e 74 20  dd the constant 
da10: 50 32 20 74 6f 20 74 68 65 20 76 61 6c 75 65 20  P2 to the value 
da20: 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 2e 0a  in register P1..
da30: 2a 2a 20 54 68 65 20 72 65 73 75 6c 74 20 69 73  ** The result is
da40: 20 61 6c 77 61 79 73 20 61 6e 20 69 6e 74 65 67   always an integ
da50: 65 72 2e 0a 2a 2a 0a 2a 2a 20 54 6f 20 66 6f 72  er..**.** To for
da60: 63 65 20 61 6e 79 20 72 65 67 69 73 74 65 72 20  ce any register 
da70: 74 6f 20 62 65 20 61 6e 20 69 6e 74 65 67 65 72  to be an integer
da80: 2c 20 6a 75 73 74 20 61 64 64 20 30 2e 0a 2a 2f  , just add 0..*/
da90: 0a 63 61 73 65 20 4f 50 5f 41 64 64 49 6d 6d 3a  .case OP_AddImm:
daa0: 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a   {            /*
dab0: 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d   in1 */.  pIn1 =
dac0: 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b   &aMem[pOp->p1];
dad0: 0a 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61  .  memAboutToCha
dae0: 6e 67 65 28 70 2c 20 70 49 6e 31 29 3b 0a 20 20  nge(p, pIn1);.  
daf0: 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 49 6e  sqlite3VdbeMemIn
db00: 74 65 67 65 72 69 66 79 28 70 49 6e 31 29 3b 0a  tegerify(pIn1);.
db10: 20 20 70 49 6e 31 2d 3e 75 2e 69 20 2b 3d 20 70    pIn1->u.i += p
db20: 4f 70 2d 3e 70 32 3b 0a 20 20 62 72 65 61 6b 3b  Op->p2;.  break;
db30: 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4d  .}../* Opcode: M
db40: 75 73 74 42 65 49 6e 74 20 50 31 20 50 32 20 2a  ustBeInt P1 P2 *
db50: 20 2a 20 2a 0a 2a 2a 20 0a 2a 2a 20 46 6f 72 63   * *.** .** Forc
db60: 65 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72  e the value in r
db70: 65 67 69 73 74 65 72 20 50 31 20 74 6f 20 62 65  egister P1 to be
db80: 20 61 6e 20 69 6e 74 65 67 65 72 2e 20 20 49 66   an integer.  If
db90: 20 74 68 65 20 76 61 6c 75 65 0a 2a 2a 20 69 6e   the value.** in
dba0: 20 50 31 20 69 73 20 6e 6f 74 20 61 6e 20 69 6e   P1 is not an in
dbb0: 74 65 67 65 72 20 61 6e 64 20 63 61 6e 6e 6f 74  teger and cannot
dbc0: 20 62 65 20 63 6f 6e 76 65 72 74 65 64 20 69 6e   be converted in
dbd0: 74 6f 20 61 6e 20 69 6e 74 65 67 65 72 0a 2a 2a  to an integer.**
dbe0: 20 77 69 74 68 6f 75 74 20 64 61 74 61 20 6c 6f   without data lo
dbf0: 73 73 2c 20 74 68 65 6e 20 6a 75 6d 70 20 69 6d  ss, then jump im
dc00: 6d 65 64 69 61 74 65 6c 79 20 74 6f 20 50 32 2c  mediately to P2,
dc10: 20 6f 72 20 69 66 20 50 32 3d 3d 30 0a 2a 2a 20   or if P2==0.** 
dc20: 72 61 69 73 65 20 61 6e 20 53 51 4c 49 54 45 5f  raise an SQLITE_
dc30: 4d 49 53 4d 41 54 43 48 20 65 78 63 65 70 74 69  MISMATCH excepti
dc40: 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4d  on..*/.case OP_M
dc50: 75 73 74 42 65 49 6e 74 3a 20 7b 20 20 20 20 20  ustBeInt: {     
dc60: 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20         /* jump, 
dc70: 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20  in1 */.  pIn1 = 
dc80: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  &aMem[pOp->p1];.
dc90: 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61    if( (pIn1->fla
dca0: 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29 3d 3d 30  gs & MEM_Int)==0
dcb0: 20 29 7b 0a 20 20 20 20 61 70 70 6c 79 41 66 66   ){.    applyAff
dcc0: 69 6e 69 74 79 28 70 49 6e 31 2c 20 53 51 4c 49  inity(pIn1, SQLI
dcd0: 54 45 5f 41 46 46 5f 4e 55 4d 45 52 49 43 2c 20  TE_AFF_NUMERIC, 
dce0: 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 20 20 56  encoding);.    V
dcf0: 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 28  dbeBranchTaken((
dd00: 70 49 6e 31 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f  pIn1->flags&MEM_
dd10: 49 6e 74 29 3d 3d 30 2c 20 32 29 3b 0a 20 20 20  Int)==0, 2);.   
dd20: 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67   if( (pIn1->flag
dd30: 73 20 26 20 4d 45 4d 5f 49 6e 74 29 3d 3d 30 20  s & MEM_Int)==0 
dd40: 29 7b 0a 20 20 20 20 20 20 69 66 28 20 70 4f 70  ){.      if( pOp
dd50: 2d 3e 70 32 3d 3d 30 20 29 7b 0a 20 20 20 20 20  ->p2==0 ){.     
dd60: 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4d     rc = SQLITE_M
dd70: 49 53 4d 41 54 43 48 3b 0a 20 20 20 20 20 20 20  ISMATCH;.       
dd80: 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
dd90: 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20  to_error;.      
dda0: 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 67  }else{.        g
ddb0: 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a  oto jump_to_p2;.
ddc0: 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20        }.    }.  
ddd0: 7d 0a 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c  }.  MemSetTypeFl
dde0: 61 67 28 70 49 6e 31 2c 20 4d 45 4d 5f 49 6e 74  ag(pIn1, MEM_Int
ddf0: 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 23  );.  break;.}..#
de00: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
de10: 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e  IT_FLOATING_POIN
de20: 54 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65 61  T./* Opcode: Rea
de30: 6c 41 66 66 69 6e 69 74 79 20 50 31 20 2a 20 2a  lAffinity P1 * *
de40: 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 49 66 20 72 65   * *.**.** If re
de50: 67 69 73 74 65 72 20 50 31 20 68 6f 6c 64 73 20  gister P1 holds 
de60: 61 6e 20 69 6e 74 65 67 65 72 20 63 6f 6e 76 65  an integer conve
de70: 72 74 20 69 74 20 74 6f 20 61 20 72 65 61 6c 20  rt it to a real 
de80: 76 61 6c 75 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 69  value..**.** Thi
de90: 73 20 6f 70 63 6f 64 65 20 69 73 20 75 73 65 64  s opcode is used
dea0: 20 77 68 65 6e 20 65 78 74 72 61 63 74 69 6e 67   when extracting
deb0: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 66 72 6f   information fro
dec0: 6d 20 61 20 63 6f 6c 75 6d 6e 20 74 68 61 74 0a  m a column that.
ded0: 2a 2a 20 68 61 73 20 52 45 41 4c 20 61 66 66 69  ** has REAL affi
dee0: 6e 69 74 79 2e 20 20 53 75 63 68 20 63 6f 6c 75  nity.  Such colu
def0: 6d 6e 20 76 61 6c 75 65 73 20 6d 61 79 20 73 74  mn values may st
df00: 69 6c 6c 20 62 65 20 73 74 6f 72 65 64 20 61 73  ill be stored as
df10: 0a 2a 2a 20 69 6e 74 65 67 65 72 73 2c 20 66 6f  .** integers, fo
df20: 72 20 73 70 61 63 65 20 65 66 66 69 63 69 65 6e  r space efficien
df30: 63 79 2c 20 62 75 74 20 61 66 74 65 72 20 65 78  cy, but after ex
df40: 74 72 61 63 74 69 6f 6e 20 77 65 20 77 61 6e 74  traction we want
df50: 20 74 68 65 6d 0a 2a 2a 20 74 6f 20 68 61 76 65   them.** to have
df60: 20 6f 6e 6c 79 20 61 20 72 65 61 6c 20 76 61 6c   only a real val
df70: 75 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52  ue..*/.case OP_R
df80: 65 61 6c 41 66 66 69 6e 69 74 79 3a 20 7b 20 20  ealAffinity: {  
df90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dfa0: 2f 2a 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31  /* in1 */.  pIn1
dfb0: 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31   = &aMem[pOp->p1
dfc0: 5d 3b 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e 66  ];.  if( pIn1->f
dfd0: 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 20 29  lags & MEM_Int )
dfe0: 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  {.    sqlite3Vdb
dff0: 65 4d 65 6d 52 65 61 6c 69 66 79 28 70 49 6e 31  eMemRealify(pIn1
e000: 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  );.  }.  break;.
e010: 7d 0a 23 65 6e 64 69 66 0a 0a 23 69 66 6e 64 65  }.#endif..#ifnde
e020: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 43 41  f SQLITE_OMIT_CA
e030: 53 54 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 61  ST./* Opcode: Ca
e040: 73 74 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  st P1 P2 * * *.*
e050: 2a 20 53 79 6e 6f 70 73 69 73 3a 20 61 66 66 69  * Synopsis: affi
e060: 6e 69 74 79 28 72 5b 50 31 5d 29 0a 2a 2a 0a 2a  nity(r[P1]).**.*
e070: 2a 20 46 6f 72 63 65 20 74 68 65 20 76 61 6c 75  * Force the valu
e080: 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31  e in register P1
e090: 20 74 6f 20 62 65 20 74 68 65 20 74 79 70 65 20   to be the type 
e0a0: 64 65 66 69 6e 65 64 20 62 79 20 50 32 2e 0a 2a  defined by P2..*
e0b0: 2a 20 0a 2a 2a 20 3c 75 6c 3e 0a 2a 2a 20 3c 6c  * .** <ul>.** <l
e0c0: 69 3e 20 50 32 3d 3d 27 41 27 20 26 72 61 72 72  i> P2=='A' &rarr
e0d0: 3b 20 42 4c 4f 42 0a 2a 2a 20 3c 6c 69 3e 20 50  ; BLOB.** <li> P
e0e0: 32 3d 3d 27 42 27 20 26 72 61 72 72 3b 20 54 45  2=='B' &rarr; TE
e0f0: 58 54 0a 2a 2a 20 3c 6c 69 3e 20 50 32 3d 3d 27  XT.** <li> P2=='
e100: 43 27 20 26 72 61 72 72 3b 20 4e 55 4d 45 52 49  C' &rarr; NUMERI
e110: 43 0a 2a 2a 20 3c 6c 69 3e 20 50 32 3d 3d 27 44  C.** <li> P2=='D
e120: 27 20 26 72 61 72 72 3b 20 49 4e 54 45 47 45 52  ' &rarr; INTEGER
e130: 0a 2a 2a 20 3c 6c 69 3e 20 50 32 3d 3d 27 45 27  .** <li> P2=='E'
e140: 20 26 72 61 72 72 3b 20 52 45 41 4c 0a 2a 2a 20   &rarr; REAL.** 
e150: 3c 2f 75 6c 3e 0a 2a 2a 0a 2a 2a 20 41 20 4e 55  </ul>.**.** A NU
e160: 4c 4c 20 76 61 6c 75 65 20 69 73 20 6e 6f 74 20  LL value is not 
e170: 63 68 61 6e 67 65 64 20 62 79 20 74 68 69 73 20  changed by this 
e180: 72 6f 75 74 69 6e 65 2e 20 20 49 74 20 72 65 6d  routine.  It rem
e190: 61 69 6e 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61  ains NULL..*/.ca
e1a0: 73 65 20 4f 50 5f 43 61 73 74 3a 20 7b 20 20 20  se OP_Cast: {   
e1b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
e1c0: 2a 20 69 6e 31 20 2a 2f 0a 20 20 61 73 73 65 72  * in1 */.  asser
e1d0: 74 28 20 70 4f 70 2d 3e 70 32 3e 3d 53 51 4c 49  t( pOp->p2>=SQLI
e1e0: 54 45 5f 41 46 46 5f 42 4c 4f 42 20 26 26 20 70  TE_AFF_BLOB && p
e1f0: 4f 70 2d 3e 70 32 3c 3d 53 51 4c 49 54 45 5f 41  Op->p2<=SQLITE_A
e200: 46 46 5f 52 45 41 4c 20 29 3b 0a 20 20 74 65 73  FF_REAL );.  tes
e210: 74 63 61 73 65 28 20 70 4f 70 2d 3e 70 32 3d 3d  tcase( pOp->p2==
e220: 53 51 4c 49 54 45 5f 41 46 46 5f 54 45 58 54 20  SQLITE_AFF_TEXT 
e230: 29 3b 0a 20 20 74 65 73 74 63 61 73 65 28 20 70  );.  testcase( p
e240: 4f 70 2d 3e 70 32 3d 3d 53 51 4c 49 54 45 5f 41  Op->p2==SQLITE_A
e250: 46 46 5f 42 4c 4f 42 20 29 3b 0a 20 20 74 65 73  FF_BLOB );.  tes
e260: 74 63 61 73 65 28 20 70 4f 70 2d 3e 70 32 3d 3d  tcase( pOp->p2==
e270: 53 51 4c 49 54 45 5f 41 46 46 5f 4e 55 4d 45 52  SQLITE_AFF_NUMER
e280: 49 43 20 29 3b 0a 20 20 74 65 73 74 63 61 73 65  IC );.  testcase
e290: 28 20 70 4f 70 2d 3e 70 32 3d 3d 53 51 4c 49 54  ( pOp->p2==SQLIT
e2a0: 45 5f 41 46 46 5f 49 4e 54 45 47 45 52 20 29 3b  E_AFF_INTEGER );
e2b0: 0a 20 20 74 65 73 74 63 61 73 65 28 20 70 4f 70  .  testcase( pOp
e2c0: 2d 3e 70 32 3d 3d 53 51 4c 49 54 45 5f 41 46 46  ->p2==SQLITE_AFF
e2d0: 5f 52 45 41 4c 20 29 3b 0a 20 20 70 49 6e 31 20  _REAL );.  pIn1 
e2e0: 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  = &aMem[pOp->p1]
e2f0: 3b 0a 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68  ;.  memAboutToCh
e300: 61 6e 67 65 28 70 2c 20 70 49 6e 31 29 3b 0a 20  ange(p, pIn1);. 
e310: 20 72 63 20 3d 20 45 78 70 61 6e 64 42 6c 6f 62   rc = ExpandBlob
e320: 28 70 49 6e 31 29 3b 0a 20 20 73 71 6c 69 74 65  (pIn1);.  sqlite
e330: 33 56 64 62 65 4d 65 6d 43 61 73 74 28 70 49 6e  3VdbeMemCast(pIn
e340: 31 2c 20 70 4f 70 2d 3e 70 32 2c 20 65 6e 63 6f  1, pOp->p2, enco
e350: 64 69 6e 67 29 3b 0a 20 20 55 50 44 41 54 45 5f  ding);.  UPDATE_
e360: 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 49 6e  MAX_BLOBSIZE(pIn
e370: 31 29 3b 0a 20 20 69 66 28 20 72 63 20 29 20 67  1);.  if( rc ) g
e380: 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
e390: 5f 65 72 72 6f 72 3b 0a 20 20 62 72 65 61 6b 3b  _error;.  break;
e3a0: 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c  .}.#endif /* SQL
e3b0: 49 54 45 5f 4f 4d 49 54 5f 43 41 53 54 20 2a 2f  ITE_OMIT_CAST */
e3c0: 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 45 71 20  ../* Opcode: Eq 
e3d0: 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a  P1 P2 P3 P4 P5.*
e3e0: 2a 20 53 79 6e 6f 70 73 69 73 3a 20 49 46 20 72  * Synopsis: IF r
e3f0: 5b 50 33 5d 3d 3d 72 5b 50 31 5d 0a 2a 2a 0a 2a  [P3]==r[P1].**.*
e400: 2a 20 43 6f 6d 70 61 72 65 20 74 68 65 20 76 61  * Compare the va
e410: 6c 75 65 73 20 69 6e 20 72 65 67 69 73 74 65 72  lues in register
e420: 20 50 31 20 61 6e 64 20 50 33 2e 20 20 49 66 20   P1 and P3.  If 
e430: 72 65 67 28 50 33 29 3d 3d 72 65 67 28 50 31 29  reg(P3)==reg(P1)
e440: 20 74 68 65 6e 0a 2a 2a 20 6a 75 6d 70 20 74 6f   then.** jump to
e450: 20 61 64 64 72 65 73 73 20 50 32 2e 20 20 4f 72   address P2.  Or
e460: 20 69 66 20 74 68 65 20 53 51 4c 49 54 45 5f 53   if the SQLITE_S
e470: 54 4f 52 45 50 32 20 66 6c 61 67 20 69 73 20 73  TOREP2 flag is s
e480: 65 74 20 69 6e 20 50 35 2c 20 74 68 65 6e 0a 2a  et in P5, then.*
e490: 2a 20 73 74 6f 72 65 20 74 68 65 20 72 65 73 75  * store the resu
e4a0: 6c 74 20 6f 66 20 63 6f 6d 70 61 72 69 73 6f 6e  lt of comparison
e4b0: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 2e   in register P2.
e4c0: 0a 2a 2a 0a 2a 2a 20 54 68 65 20 53 51 4c 49 54  .**.** The SQLIT
e4d0: 45 5f 41 46 46 5f 4d 41 53 4b 20 70 6f 72 74 69  E_AFF_MASK porti
e4e0: 6f 6e 20 6f 66 20 50 35 20 6d 75 73 74 20 62 65  on of P5 must be
e4f0: 20 61 6e 20 61 66 66 69 6e 69 74 79 20 63 68 61   an affinity cha
e500: 72 61 63 74 65 72 20 2d 0a 2a 2a 20 53 51 4c 49  racter -.** SQLI
e510: 54 45 5f 41 46 46 5f 54 45 58 54 2c 20 53 51 4c  TE_AFF_TEXT, SQL
e520: 49 54 45 5f 41 46 46 5f 49 4e 54 45 47 45 52 2c  ITE_AFF_INTEGER,
e530: 20 61 6e 64 20 73 6f 20 66 6f 72 74 68 2e 20 41   and so forth. A
e540: 6e 20 61 74 74 65 6d 70 74 20 69 73 20 6d 61 64  n attempt is mad
e550: 65 20 0a 2a 2a 20 74 6f 20 63 6f 65 72 63 65 20  e .** to coerce 
e560: 62 6f 74 68 20 69 6e 70 75 74 73 20 61 63 63 6f  both inputs acco
e570: 72 64 69 6e 67 20 74 6f 20 74 68 69 73 20 61 66  rding to this af
e580: 66 69 6e 69 74 79 20 62 65 66 6f 72 65 20 74 68  finity before th
e590: 65 0a 2a 2a 20 63 6f 6d 70 61 72 69 73 6f 6e 20  e.** comparison 
e5a0: 69 73 20 6d 61 64 65 2e 20 49 66 20 74 68 65 20  is made. If the 
e5b0: 53 51 4c 49 54 45 5f 41 46 46 5f 4d 41 53 4b 20  SQLITE_AFF_MASK 
e5c0: 69 73 20 30 78 30 30 2c 20 74 68 65 6e 20 6e 75  is 0x00, then nu
e5d0: 6d 65 72 69 63 0a 2a 2a 20 61 66 66 69 6e 69 74  meric.** affinit
e5e0: 79 20 69 73 20 75 73 65 64 2e 20 4e 6f 74 65 20  y is used. Note 
e5f0: 74 68 61 74 20 74 68 65 20 61 66 66 69 6e 69 74  that the affinit
e600: 79 20 63 6f 6e 76 65 72 73 69 6f 6e 73 20 61 72  y conversions ar
e610: 65 20 73 74 6f 72 65 64 0a 2a 2a 20 62 61 63 6b  e stored.** back
e620: 20 69 6e 74 6f 20 74 68 65 20 69 6e 70 75 74 20   into the input 
e630: 72 65 67 69 73 74 65 72 73 20 50 31 20 61 6e 64  registers P1 and
e640: 20 50 33 2e 20 20 53 6f 20 74 68 69 73 20 6f 70   P3.  So this op
e650: 63 6f 64 65 20 63 61 6e 20 63 61 75 73 65 0a 2a  code can cause.*
e660: 2a 20 70 65 72 73 69 73 74 65 6e 74 20 63 68 61  * persistent cha
e670: 6e 67 65 73 20 74 6f 20 72 65 67 69 73 74 65 72  nges to register
e680: 73 20 50 31 20 61 6e 64 20 50 33 2e 0a 2a 2a 0a  s P1 and P3..**.
e690: 2a 2a 20 4f 6e 63 65 20 61 6e 79 20 63 6f 6e 76  ** Once any conv
e6a0: 65 72 73 69 6f 6e 73 20 68 61 76 65 20 74 61 6b  ersions have tak
e6b0: 65 6e 20 70 6c 61 63 65 2c 20 61 6e 64 20 6e 65  en place, and ne
e6c0: 69 74 68 65 72 20 76 61 6c 75 65 20 69 73 20 4e  ither value is N
e6d0: 55 4c 4c 2c 20 0a 2a 2a 20 74 68 65 20 76 61 6c  ULL, .** the val
e6e0: 75 65 73 20 61 72 65 20 63 6f 6d 70 61 72 65 64  ues are compared
e6f0: 2e 20 49 66 20 62 6f 74 68 20 76 61 6c 75 65 73  . If both values
e700: 20 61 72 65 20 62 6c 6f 62 73 20 74 68 65 6e 20   are blobs then 
e710: 6d 65 6d 63 6d 70 28 29 20 69 73 0a 2a 2a 20 75  memcmp() is.** u
e720: 73 65 64 20 74 6f 20 64 65 74 65 72 6d 69 6e 65  sed to determine
e730: 20 74 68 65 20 72 65 73 75 6c 74 73 20 6f 66 20   the results of 
e740: 74 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 20  the comparison. 
e750: 20 49 66 20 62 6f 74 68 20 76 61 6c 75 65 73 0a   If both values.
e760: 2a 2a 20 61 72 65 20 74 65 78 74 2c 20 74 68 65  ** are text, the
e770: 6e 20 74 68 65 20 61 70 70 72 6f 70 72 69 61 74  n the appropriat
e780: 65 20 63 6f 6c 6c 61 74 69 6e 67 20 66 75 6e 63  e collating func
e790: 74 69 6f 6e 20 73 70 65 63 69 66 69 65 64 20 69  tion specified i
e7a0: 6e 0a 2a 2a 20 50 34 20 69 73 20 75 73 65 64 20  n.** P4 is used 
e7b0: 74 6f 20 64 6f 20 74 68 65 20 63 6f 6d 70 61 72  to do the compar
e7c0: 69 73 6f 6e 2e 20 20 49 66 20 50 34 20 69 73 20  ison.  If P4 is 
e7d0: 6e 6f 74 20 73 70 65 63 69 66 69 65 64 20 74 68  not specified th
e7e0: 65 6e 0a 2a 2a 20 6d 65 6d 63 6d 70 28 29 20 69  en.** memcmp() i
e7f0: 73 20 75 73 65 64 20 74 6f 20 63 6f 6d 70 61 72  s used to compar
e800: 65 20 74 65 78 74 20 73 74 72 69 6e 67 2e 20 20  e text string.  
e810: 49 66 20 62 6f 74 68 20 76 61 6c 75 65 73 20 61  If both values a
e820: 72 65 0a 2a 2a 20 6e 75 6d 65 72 69 63 2c 20 74  re.** numeric, t
e830: 68 65 6e 20 61 20 6e 75 6d 65 72 69 63 20 63 6f  hen a numeric co
e840: 6d 70 61 72 69 73 6f 6e 20 69 73 20 75 73 65 64  mparison is used
e850: 2e 20 49 66 20 74 68 65 20 74 77 6f 20 76 61 6c  . If the two val
e860: 75 65 73 0a 2a 2a 20 61 72 65 20 6f 66 20 64 69  ues.** are of di
e870: 66 66 65 72 65 6e 74 20 74 79 70 65 73 2c 20 74  fferent types, t
e880: 68 65 6e 20 6e 75 6d 62 65 72 73 20 61 72 65 20  hen numbers are 
e890: 63 6f 6e 73 69 64 65 72 65 64 20 6c 65 73 73 20  considered less 
e8a0: 74 68 61 6e 0a 2a 2a 20 73 74 72 69 6e 67 73 20  than.** strings 
e8b0: 61 6e 64 20 73 74 72 69 6e 67 73 20 61 72 65 20  and strings are 
e8c0: 63 6f 6e 73 69 64 65 72 65 64 20 6c 65 73 73 20  considered less 
e8d0: 74 68 61 6e 20 62 6c 6f 62 73 2e 0a 2a 2a 0a 2a  than blobs..**.*
e8e0: 2a 20 49 66 20 53 51 4c 49 54 45 5f 4e 55 4c 4c  * If SQLITE_NULL
e8f0: 45 51 20 69 73 20 73 65 74 20 69 6e 20 50 35 20  EQ is set in P5 
e900: 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c 74 20  then the result 
e910: 6f 66 20 63 6f 6d 70 61 72 69 73 6f 6e 20 69 73  of comparison is
e920: 20 61 6c 77 61 79 73 20 65 69 74 68 65 72 0a 2a   always either.*
e930: 2a 20 74 72 75 65 20 6f 72 20 66 61 6c 73 65 20  * true or false 
e940: 61 6e 64 20 69 73 20 6e 65 76 65 72 20 4e 55 4c  and is never NUL
e950: 4c 2e 20 20 49 66 20 62 6f 74 68 20 6f 70 65 72  L.  If both oper
e960: 61 6e 64 73 20 61 72 65 20 4e 55 4c 4c 20 74 68  ands are NULL th
e970: 65 6e 20 74 68 65 20 72 65 73 75 6c 74 0a 2a 2a  en the result.**
e980: 20 6f 66 20 63 6f 6d 70 61 72 69 73 6f 6e 20 69   of comparison i
e990: 73 20 74 72 75 65 2e 20 20 49 66 20 65 69 74 68  s true.  If eith
e9a0: 65 72 20 6f 70 65 72 61 6e 64 20 69 73 20 4e 55  er operand is NU
e9b0: 4c 4c 20 74 68 65 6e 20 74 68 65 20 72 65 73 75  LL then the resu
e9c0: 6c 74 20 69 73 20 66 61 6c 73 65 2e 0a 2a 2a 20  lt is false..** 
e9d0: 49 66 20 6e 65 69 74 68 65 72 20 6f 70 65 72 61  If neither opera
e9e0: 6e 64 20 69 73 20 4e 55 4c 4c 20 74 68 65 20 72  nd is NULL the r
e9f0: 65 73 75 6c 74 20 69 73 20 74 68 65 20 73 61 6d  esult is the sam
ea00: 65 20 61 73 20 69 74 20 77 6f 75 6c 64 20 62 65  e as it would be
ea10: 20 69 66 0a 2a 2a 20 74 68 65 20 53 51 4c 49 54   if.** the SQLIT
ea20: 45 5f 4e 55 4c 4c 45 51 20 66 6c 61 67 20 77 65  E_NULLEQ flag we
ea30: 72 65 20 6f 6d 69 74 74 65 64 20 66 72 6f 6d 20  re omitted from 
ea40: 50 35 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 62 6f 74  P5..**.** If bot
ea50: 68 20 53 51 4c 49 54 45 5f 53 54 4f 52 45 50 32  h SQLITE_STOREP2
ea60: 20 61 6e 64 20 53 51 4c 49 54 45 5f 4b 45 45 50   and SQLITE_KEEP
ea70: 4e 55 4c 4c 20 66 6c 61 67 73 20 61 72 65 20 73  NULL flags are s
ea80: 65 74 20 74 68 65 6e 20 74 68 65 0a 2a 2a 20 63  et then the.** c
ea90: 6f 6e 74 65 6e 74 20 6f 66 20 72 5b 50 32 5d 20  ontent of r[P2] 
eaa0: 69 73 20 6f 6e 6c 79 20 63 68 61 6e 67 65 64 20  is only changed 
eab0: 69 66 20 74 68 65 20 6e 65 77 20 76 61 6c 75 65  if the new value
eac0: 20 69 73 20 4e 55 4c 4c 20 6f 72 20 30 20 28 66   is NULL or 0 (f
ead0: 61 6c 73 65 29 2e 0a 2a 2a 20 49 6e 20 6f 74 68  alse)..** In oth
eae0: 65 72 20 77 6f 72 64 73 2c 20 61 20 70 72 69 6f  er words, a prio
eaf0: 72 20 72 5b 50 32 5d 20 76 61 6c 75 65 20 77 69  r r[P2] value wi
eb00: 6c 6c 20 6e 6f 74 20 62 65 20 6f 76 65 72 77 72  ll not be overwr
eb10: 69 74 74 65 6e 20 62 79 20 31 20 28 74 72 75 65  itten by 1 (true
eb20: 29 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a  )..*/./* Opcode:
eb30: 20 4e 65 20 50 31 20 50 32 20 50 33 20 50 34 20   Ne P1 P2 P3 P4 
eb40: 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20  P5.** Synopsis: 
eb50: 49 46 20 72 5b 50 33 5d 21 3d 72 5b 50 31 5d 0a  IF r[P3]!=r[P1].
eb60: 2a 2a 0a 2a 2a 20 54 68 69 73 20 77 6f 72 6b 73  **.** This works
eb70: 20 6a 75 73 74 20 6c 69 6b 65 20 74 68 65 20 45   just like the E
eb80: 71 20 6f 70 63 6f 64 65 20 65 78 63 65 70 74 20  q opcode except 
eb90: 74 68 61 74 20 74 68 65 20 6a 75 6d 70 20 69 73  that the jump is
eba0: 20 74 61 6b 65 6e 20 69 66 0a 2a 2a 20 74 68 65   taken if.** the
ebb0: 20 6f 70 65 72 61 6e 64 73 20 69 6e 20 72 65 67   operands in reg
ebc0: 69 73 74 65 72 73 20 50 31 20 61 6e 64 20 50 33  isters P1 and P3
ebd0: 20 61 72 65 20 6e 6f 74 20 65 71 75 61 6c 2e 20   are not equal. 
ebe0: 20 53 65 65 20 74 68 65 20 45 71 20 6f 70 63 6f   See the Eq opco
ebf0: 64 65 20 66 6f 72 0a 2a 2a 20 61 64 64 69 74 69  de for.** additi
ec00: 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  onal information
ec10: 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 62 6f 74 68 20  ..**.** If both 
ec20: 53 51 4c 49 54 45 5f 53 54 4f 52 45 50 32 20 61  SQLITE_STOREP2 a
ec30: 6e 64 20 53 51 4c 49 54 45 5f 4b 45 45 50 4e 55  nd SQLITE_KEEPNU
ec40: 4c 4c 20 66 6c 61 67 73 20 61 72 65 20 73 65 74  LL flags are set
ec50: 20 74 68 65 6e 20 74 68 65 0a 2a 2a 20 63 6f 6e   then the.** con
ec60: 74 65 6e 74 20 6f 66 20 72 5b 50 32 5d 20 69 73  tent of r[P2] is
ec70: 20 6f 6e 6c 79 20 63 68 61 6e 67 65 64 20 69 66   only changed if
ec80: 20 74 68 65 20 6e 65 77 20 76 61 6c 75 65 20 69   the new value i
ec90: 73 20 4e 55 4c 4c 20 6f 72 20 31 20 28 74 72 75  s NULL or 1 (tru
eca0: 65 29 2e 0a 2a 2a 20 49 6e 20 6f 74 68 65 72 20  e)..** In other 
ecb0: 77 6f 72 64 73 2c 20 61 20 70 72 69 6f 72 20 72  words, a prior r
ecc0: 5b 50 32 5d 20 76 61 6c 75 65 20 77 69 6c 6c 20  [P2] value will 
ecd0: 6e 6f 74 20 62 65 20 6f 76 65 72 77 72 69 74 74  not be overwritt
ece0: 65 6e 20 62 79 20 30 20 28 66 61 6c 73 65 29 2e  en by 0 (false).
ecf0: 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4c  .*/./* Opcode: L
ed00: 74 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35  t P1 P2 P3 P4 P5
ed10: 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 49 46  .** Synopsis: IF
ed20: 20 72 5b 50 33 5d 3c 72 5b 50 31 5d 0a 2a 2a 0a   r[P3]<r[P1].**.
ed30: 2a 2a 20 43 6f 6d 70 61 72 65 20 74 68 65 20 76  ** Compare the v
ed40: 61 6c 75 65 73 20 69 6e 20 72 65 67 69 73 74 65  alues in registe
ed50: 72 20 50 31 20 61 6e 64 20 50 33 2e 20 20 49 66  r P1 and P3.  If
ed60: 20 72 65 67 28 50 33 29 3c 72 65 67 28 50 31 29   reg(P3)<reg(P1)
ed70: 20 74 68 65 6e 0a 2a 2a 20 6a 75 6d 70 20 74 6f   then.** jump to
ed80: 20 61 64 64 72 65 73 73 20 50 32 2e 20 20 4f 72   address P2.  Or
ed90: 20 69 66 20 74 68 65 20 53 51 4c 49 54 45 5f 53   if the SQLITE_S
eda0: 54 4f 52 45 50 32 20 66 6c 61 67 20 69 73 20 73  TOREP2 flag is s
edb0: 65 74 20 69 6e 20 50 35 20 73 74 6f 72 65 0a 2a  et in P5 store.*
edc0: 2a 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66 20  * the result of 
edd0: 63 6f 6d 70 61 72 69 73 6f 6e 20 28 30 20 6f 72  comparison (0 or
ede0: 20 31 20 6f 72 20 4e 55 4c 4c 29 20 69 6e 74 6f   1 or NULL) into
edf0: 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a   register P2..**
ee00: 0a 2a 2a 20 49 66 20 74 68 65 20 53 51 4c 49 54  .** If the SQLIT
ee10: 45 5f 4a 55 4d 50 49 46 4e 55 4c 4c 20 62 69 74  E_JUMPIFNULL bit
ee20: 20 6f 66 20 50 35 20 69 73 20 73 65 74 20 61 6e   of P5 is set an
ee30: 64 20 65 69 74 68 65 72 20 72 65 67 28 50 31 29  d either reg(P1)
ee40: 20 6f 72 0a 2a 2a 20 72 65 67 28 50 33 29 20 69   or.** reg(P3) i
ee50: 73 20 4e 55 4c 4c 20 74 68 65 6e 20 74 68 65 20  s NULL then the 
ee60: 74 61 6b 65 20 74 68 65 20 6a 75 6d 70 2e 20 20  take the jump.  
ee70: 49 66 20 74 68 65 20 53 51 4c 49 54 45 5f 4a 55  If the SQLITE_JU
ee80: 4d 50 49 46 4e 55 4c 4c 20 0a 2a 2a 20 62 69 74  MPIFNULL .** bit
ee90: 20 69 73 20 63 6c 65 61 72 20 74 68 65 6e 20 66   is clear then f
eea0: 61 6c 6c 20 74 68 72 6f 75 67 68 20 69 66 20 65  all through if e
eeb0: 69 74 68 65 72 20 6f 70 65 72 61 6e 64 20 69 73  ither operand is
eec0: 20 4e 55 4c 4c 2e 0a 2a 2a 0a 2a 2a 20 54 68 65   NULL..**.** The
eed0: 20 53 51 4c 49 54 45 5f 41 46 46 5f 4d 41 53 4b   SQLITE_AFF_MASK
eee0: 20 70 6f 72 74 69 6f 6e 20 6f 66 20 50 35 20 6d   portion of P5 m
eef0: 75 73 74 20 62 65 20 61 6e 20 61 66 66 69 6e 69  ust be an affini
ef00: 74 79 20 63 68 61 72 61 63 74 65 72 20 2d 0a 2a  ty character -.*
ef10: 2a 20 53 51 4c 49 54 45 5f 41 46 46 5f 54 45 58  * SQLITE_AFF_TEX
ef20: 54 2c 20 53 51 4c 49 54 45 5f 41 46 46 5f 49 4e  T, SQLITE_AFF_IN
ef30: 54 45 47 45 52 2c 20 61 6e 64 20 73 6f 20 66 6f  TEGER, and so fo
ef40: 72 74 68 2e 20 41 6e 20 61 74 74 65 6d 70 74 20  rth. An attempt 
ef50: 69 73 20 6d 61 64 65 20 0a 2a 2a 20 74 6f 20 63  is made .** to c
ef60: 6f 65 72 63 65 20 62 6f 74 68 20 69 6e 70 75 74  oerce both input
ef70: 73 20 61 63 63 6f 72 64 69 6e 67 20 74 6f 20 74  s according to t
ef80: 68 69 73 20 61 66 66 69 6e 69 74 79 20 62 65 66  his affinity bef
ef90: 6f 72 65 20 74 68 65 0a 2a 2a 20 63 6f 6d 70 61  ore the.** compa
efa0: 72 69 73 6f 6e 20 69 73 20 6d 61 64 65 2e 20 49  rison is made. I
efb0: 66 20 74 68 65 20 53 51 4c 49 54 45 5f 41 46 46  f the SQLITE_AFF
efc0: 5f 4d 41 53 4b 20 69 73 20 30 78 30 30 2c 20 74  _MASK is 0x00, t
efd0: 68 65 6e 20 6e 75 6d 65 72 69 63 0a 2a 2a 20 61  hen numeric.** a
efe0: 66 66 69 6e 69 74 79 20 69 73 20 75 73 65 64 2e  ffinity is used.
eff0: 20 4e 6f 74 65 20 74 68 61 74 20 74 68 65 20 61   Note that the a
f000: 66 66 69 6e 69 74 79 20 63 6f 6e 76 65 72 73 69  ffinity conversi
f010: 6f 6e 73 20 61 72 65 20 73 74 6f 72 65 64 0a 2a  ons are stored.*
f020: 2a 20 62 61 63 6b 20 69 6e 74 6f 20 74 68 65 20  * back into the 
f030: 69 6e 70 75 74 20 72 65 67 69 73 74 65 72 73 20  input registers 
f040: 50 31 20 61 6e 64 20 50 33 2e 20 20 53 6f 20 74  P1 and P3.  So t
f050: 68 69 73 20 6f 70 63 6f 64 65 20 63 61 6e 20 63  his opcode can c
f060: 61 75 73 65 0a 2a 2a 20 70 65 72 73 69 73 74 65  ause.** persiste
f070: 6e 74 20 63 68 61 6e 67 65 73 20 74 6f 20 72 65  nt changes to re
f080: 67 69 73 74 65 72 73 20 50 31 20 61 6e 64 20 50  gisters P1 and P
f090: 33 2e 0a 2a 2a 0a 2a 2a 20 4f 6e 63 65 20 61 6e  3..**.** Once an
f0a0: 79 20 63 6f 6e 76 65 72 73 69 6f 6e 73 20 68 61  y conversions ha
f0b0: 76 65 20 74 61 6b 65 6e 20 70 6c 61 63 65 2c 20  ve taken place, 
f0c0: 61 6e 64 20 6e 65 69 74 68 65 72 20 76 61 6c 75  and neither valu
f0d0: 65 20 69 73 20 4e 55 4c 4c 2c 20 0a 2a 2a 20 74  e is NULL, .** t
f0e0: 68 65 20 76 61 6c 75 65 73 20 61 72 65 20 63 6f  he values are co
f0f0: 6d 70 61 72 65 64 2e 20 49 66 20 62 6f 74 68 20  mpared. If both 
f100: 76 61 6c 75 65 73 20 61 72 65 20 62 6c 6f 62 73  values are blobs
f110: 20 74 68 65 6e 20 6d 65 6d 63 6d 70 28 29 20 69   then memcmp() i
f120: 73 0a 2a 2a 20 75 73 65 64 20 74 6f 20 64 65 74  s.** used to det
f130: 65 72 6d 69 6e 65 20 74 68 65 20 72 65 73 75 6c  ermine the resul
f140: 74 73 20 6f 66 20 74 68 65 20 63 6f 6d 70 61 72  ts of the compar
f150: 69 73 6f 6e 2e 20 20 49 66 20 62 6f 74 68 20 76  ison.  If both v
f160: 61 6c 75 65 73 0a 2a 2a 20 61 72 65 20 74 65 78  alues.** are tex
f170: 74 2c 20 74 68 65 6e 20 74 68 65 20 61 70 70 72  t, then the appr
f180: 6f 70 72 69 61 74 65 20 63 6f 6c 6c 61 74 69 6e  opriate collatin
f190: 67 20 66 75 6e 63 74 69 6f 6e 20 73 70 65 63 69  g function speci
f1a0: 66 69 65 64 20 69 6e 0a 2a 2a 20 50 34 20 69 73  fied in.** P4 is
f1b0: 20 20 75 73 65 64 20 74 6f 20 64 6f 20 74 68 65    used to do the
f1c0: 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 20 20 49 66   comparison.  If
f1d0: 20 50 34 20 69 73 20 6e 6f 74 20 73 70 65 63 69   P4 is not speci
f1e0: 66 69 65 64 20 74 68 65 6e 0a 2a 2a 20 6d 65 6d  fied then.** mem
f1f0: 63 6d 70 28 29 20 69 73 20 75 73 65 64 20 74 6f  cmp() is used to
f200: 20 63 6f 6d 70 61 72 65 20 74 65 78 74 20 73 74   compare text st
f210: 72 69 6e 67 2e 20 20 49 66 20 62 6f 74 68 20 76  ring.  If both v
f220: 61 6c 75 65 73 20 61 72 65 0a 2a 2a 20 6e 75 6d  alues are.** num
f230: 65 72 69 63 2c 20 74 68 65 6e 20 61 20 6e 75 6d  eric, then a num
f240: 65 72 69 63 20 63 6f 6d 70 61 72 69 73 6f 6e 20  eric comparison 
f250: 69 73 20 75 73 65 64 2e 20 49 66 20 74 68 65 20  is used. If the 
f260: 74 77 6f 20 76 61 6c 75 65 73 0a 2a 2a 20 61 72  two values.** ar
f270: 65 20 6f 66 20 64 69 66 66 65 72 65 6e 74 20 74  e of different t
f280: 79 70 65 73 2c 20 74 68 65 6e 20 6e 75 6d 62 65  ypes, then numbe
f290: 72 73 20 61 72 65 20 63 6f 6e 73 69 64 65 72 65  rs are considere
f2a0: 64 20 6c 65 73 73 20 74 68 61 6e 0a 2a 2a 20 73  d less than.** s
f2b0: 74 72 69 6e 67 73 20 61 6e 64 20 73 74 72 69 6e  trings and strin
f2c0: 67 73 20 61 72 65 20 63 6f 6e 73 69 64 65 72 65  gs are considere
f2d0: 64 20 6c 65 73 73 20 74 68 61 6e 20 62 6c 6f 62  d less than blob
f2e0: 73 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a  s..*/./* Opcode:
f2f0: 20 4c 65 20 50 31 20 50 32 20 50 33 20 50 34 20   Le P1 P2 P3 P4 
f300: 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20  P5.** Synopsis: 
f310: 49 46 20 72 5b 50 33 5d 3c 3d 72 5b 50 31 5d 0a  IF r[P3]<=r[P1].
f320: 2a 2a 0a 2a 2a 20 54 68 69 73 20 77 6f 72 6b 73  **.** This works
f330: 20 6a 75 73 74 20 6c 69 6b 65 20 74 68 65 20 4c   just like the L
f340: 74 20 6f 70 63 6f 64 65 20 65 78 63 65 70 74 20  t opcode except 
f350: 74 68 61 74 20 74 68 65 20 6a 75 6d 70 20 69 73  that the jump is
f360: 20 74 61 6b 65 6e 20 69 66 0a 2a 2a 20 74 68 65   taken if.** the
f370: 20 63 6f 6e 74 65 6e 74 20 6f 66 20 72 65 67 69   content of regi
f380: 73 74 65 72 20 50 33 20 69 73 20 6c 65 73 73 20  ster P3 is less 
f390: 74 68 61 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f  than or equal to
f3a0: 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 0a   the content of.
f3b0: 2a 2a 20 72 65 67 69 73 74 65 72 20 50 31 2e 20  ** register P1. 
f3c0: 20 53 65 65 20 74 68 65 20 4c 74 20 6f 70 63 6f   See the Lt opco
f3d0: 64 65 20 66 6f 72 20 61 64 64 69 74 69 6f 6e 61  de for additiona
f3e0: 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a  l information..*
f3f0: 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 47 74 20  /./* Opcode: Gt 
f400: 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a  P1 P2 P3 P4 P5.*
f410: 2a 20 53 79 6e 6f 70 73 69 73 3a 20 49 46 20 72  * Synopsis: IF r
f420: 5b 50 33 5d 3e 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a  [P3]>r[P1].**.**
f430: 20 54 68 69 73 20 77 6f 72 6b 73 20 6a 75 73 74   This works just
f440: 20 6c 69 6b 65 20 74 68 65 20 4c 74 20 6f 70 63   like the Lt opc
f450: 6f 64 65 20 65 78 63 65 70 74 20 74 68 61 74 20  ode except that 
f460: 74 68 65 20 6a 75 6d 70 20 69 73 20 74 61 6b 65  the jump is take
f470: 6e 20 69 66 0a 2a 2a 20 74 68 65 20 63 6f 6e 74  n if.** the cont
f480: 65 6e 74 20 6f 66 20 72 65 67 69 73 74 65 72 20  ent of register 
f490: 50 33 20 69 73 20 67 72 65 61 74 65 72 20 74 68  P3 is greater th
f4a0: 61 6e 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f  an the content o
f4b0: 66 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 50 31  f.** register P1
f4c0: 2e 20 20 53 65 65 20 74 68 65 20 4c 74 20 6f 70  .  See the Lt op
f4d0: 63 6f 64 65 20 66 6f 72 20 61 64 64 69 74 69 6f  code for additio
f4e0: 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e  nal information.
f4f0: 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 47  .*/./* Opcode: G
f500: 65 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35  e P1 P2 P3 P4 P5
f510: 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 49 46  .** Synopsis: IF
f520: 20 72 5b 50 33 5d 3e 3d 72 5b 50 31 5d 0a 2a 2a   r[P3]>=r[P1].**
f530: 0a 2a 2a 20 54 68 69 73 20 77 6f 72 6b 73 20 6a  .** This works j
f540: 75 73 74 20 6c 69 6b 65 20 74 68 65 20 4c 74 20  ust like the Lt 
f550: 6f 70 63 6f 64 65 20 65 78 63 65 70 74 20 74 68  opcode except th
f560: 61 74 20 74 68 65 20 6a 75 6d 70 20 69 73 20 74  at the jump is t
f570: 61 6b 65 6e 20 69 66 0a 2a 2a 20 74 68 65 20 63  aken if.** the c
f580: 6f 6e 74 65 6e 74 20 6f 66 20 72 65 67 69 73 74  ontent of regist
f590: 65 72 20 50 33 20 69 73 20 67 72 65 61 74 65 72  er P3 is greater
f5a0: 20 74 68 61 6e 20 6f 72 20 65 71 75 61 6c 20 74   than or equal t
f5b0: 6f 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66  o the content of
f5c0: 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 50 31 2e  .** register P1.
f5d0: 20 20 53 65 65 20 74 68 65 20 4c 74 20 6f 70 63    See the Lt opc
f5e0: 6f 64 65 20 66 6f 72 20 61 64 64 69 74 69 6f 6e  ode for addition
f5f0: 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a  al information..
f600: 2a 2f 0a 63 61 73 65 20 4f 50 5f 45 71 3a 20 20  */.case OP_Eq:  
f610: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
f620: 73 61 6d 65 20 61 73 20 54 4b 5f 45 51 2c 20 6a  same as TK_EQ, j
f630: 75 6d 70 2c 20 69 6e 31 2c 20 69 6e 33 20 2a 2f  ump, in1, in3 */
f640: 0a 63 61 73 65 20 4f 50 5f 4e 65 3a 20 20 20 20  .case OP_Ne:    
f650: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61             /* sa
f660: 6d 65 20 61 73 20 54 4b 5f 4e 45 2c 20 6a 75 6d  me as TK_NE, jum
f670: 70 2c 20 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a 63  p, in1, in3 */.c
f680: 61 73 65 20 4f 50 5f 4c 74 3a 20 20 20 20 20 20  ase OP_Lt:      
f690: 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65           /* same
f6a0: 20 61 73 20 54 4b 5f 4c 54 2c 20 6a 75 6d 70 2c   as TK_LT, jump,
f6b0: 20 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a 63 61 73   in1, in3 */.cas
f6c0: 65 20 4f 50 5f 4c 65 3a 20 20 20 20 20 20 20 20  e OP_Le:        
f6d0: 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61         /* same a
f6e0: 73 20 54 4b 5f 4c 45 2c 20 6a 75 6d 70 2c 20 69  s TK_LE, jump, i
f6f0: 6e 31 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20  n1, in3 */.case 
f700: 4f 50 5f 47 74 3a 20 20 20 20 20 20 20 20 20 20  OP_Gt:          
f710: 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20       /* same as 
f720: 54 4b 5f 47 54 2c 20 6a 75 6d 70 2c 20 69 6e 31  TK_GT, jump, in1
f730: 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50  , in3 */.case OP
f740: 5f 47 65 3a 20 7b 20 20 20 20 20 20 20 20 20 20  _Ge: {          
f750: 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b     /* same as TK
f760: 5f 47 45 2c 20 6a 75 6d 70 2c 20 69 6e 31 2c 20  _GE, jump, in1, 
f770: 69 6e 33 20 2a 2f 0a 20 20 69 6e 74 20 72 65 73  in3 */.  int res
f780: 2c 20 72 65 73 32 3b 20 20 20 20 20 20 2f 2a 20  , res2;      /* 
f790: 52 65 73 75 6c 74 20 6f 66 20 74 68 65 20 63 6f  Result of the co
f7a0: 6d 70 61 72 69 73 6f 6e 20 6f 66 20 70 49 6e 31  mparison of pIn1
f7b0: 20 61 67 61 69 6e 73 74 20 70 49 6e 33 20 2a 2f   against pIn3 */
f7c0: 0a 20 20 63 68 61 72 20 61 66 66 69 6e 69 74 79  .  char affinity
f7d0: 3b 20 20 20 20 20 20 2f 2a 20 41 66 66 69 6e 69  ;      /* Affini
f7e0: 74 79 20 74 6f 20 75 73 65 20 66 6f 72 20 63 6f  ty to use for co
f7f0: 6d 70 61 72 69 73 6f 6e 20 2a 2f 0a 20 20 75 31  mparison */.  u1
f800: 36 20 66 6c 61 67 73 31 3b 20 20 20 20 20 20 20  6 flags1;       
f810: 20 20 2f 2a 20 43 6f 70 79 20 6f 66 20 69 6e 69    /* Copy of ini
f820: 74 69 61 6c 20 76 61 6c 75 65 20 6f 66 20 70 49  tial value of pI
f830: 6e 31 2d 3e 66 6c 61 67 73 20 2a 2f 0a 20 20 75  n1->flags */.  u
f840: 31 36 20 66 6c 61 67 73 33 3b 20 20 20 20 20 20  16 flags3;      
f850: 20 20 20 2f 2a 20 43 6f 70 79 20 6f 66 20 69 6e     /* Copy of in
f860: 69 74 69 61 6c 20 76 61 6c 75 65 20 6f 66 20 70  itial value of p
f870: 49 6e 33 2d 3e 66 6c 61 67 73 20 2a 2f 0a 0a 20  In3->flags */.. 
f880: 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn1 = &aMem[pO
f890: 70 2d 3e 70 31 5d 3b 0a 20 20 70 49 6e 33 20 3d  p->p1];.  pIn3 =
f8a0: 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b   &aMem[pOp->p3];
f8b0: 0a 20 20 66 6c 61 67 73 31 20 3d 20 70 49 6e 31  .  flags1 = pIn1
f8c0: 2d 3e 66 6c 61 67 73 3b 0a 20 20 66 6c 61 67 73  ->flags;.  flags
f8d0: 33 20 3d 20 70 49 6e 33 2d 3e 66 6c 61 67 73 3b  3 = pIn3->flags;
f8e0: 0a 20 20 69 66 28 20 28 66 6c 61 67 73 31 20 7c  .  if( (flags1 |
f8f0: 20 66 6c 61 67 73 33 29 26 4d 45 4d 5f 4e 75 6c   flags3)&MEM_Nul
f900: 6c 20 29 7b 0a 20 20 20 20 2f 2a 20 4f 6e 65 20  l ){.    /* One 
f910: 6f 72 20 62 6f 74 68 20 6f 70 65 72 61 6e 64 73  or both operands
f920: 20 61 72 65 20 4e 55 4c 4c 20 2a 2f 0a 20 20 20   are NULL */.   
f930: 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 26 20 53   if( pOp->p5 & S
f940: 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 20 29 7b 0a  QLITE_NULLEQ ){.
f950: 20 20 20 20 20 20 2f 2a 20 49 66 20 53 51 4c 49        /* If SQLI
f960: 54 45 5f 4e 55 4c 4c 45 51 20 69 73 20 73 65 74  TE_NULLEQ is set
f970: 20 28 77 68 69 63 68 20 77 69 6c 6c 20 6f 6e 6c   (which will onl
f980: 79 20 68 61 70 70 65 6e 20 69 66 20 74 68 65 20  y happen if the 
f990: 6f 70 65 72 61 74 6f 72 20 69 73 0a 20 20 20 20  operator is.    
f9a0: 20 20 2a 2a 20 4f 50 5f 45 71 20 6f 72 20 4f 50    ** OP_Eq or OP
f9b0: 5f 4e 65 29 20 74 68 65 6e 20 74 61 6b 65 20 74  _Ne) then take t
f9c0: 68 65 20 6a 75 6d 70 20 6f 72 20 6e 6f 74 20 64  he jump or not d
f9d0: 65 70 65 6e 64 69 6e 67 20 6f 6e 20 77 68 65 74  epending on whet
f9e0: 68 65 72 0a 20 20 20 20 20 20 2a 2a 20 6f 72 20  her.      ** or 
f9f0: 6e 6f 74 20 62 6f 74 68 20 6f 70 65 72 61 6e 64  not both operand
fa00: 73 20 61 72 65 20 6e 75 6c 6c 2e 0a 20 20 20 20  s are null..    
fa10: 20 20 2a 2f 0a 20 20 20 20 20 20 61 73 73 65 72    */.      asser
fa20: 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d  t( pOp->opcode==
fa30: 4f 50 5f 45 71 20 7c 7c 20 70 4f 70 2d 3e 6f 70  OP_Eq || pOp->op
fa40: 63 6f 64 65 3d 3d 4f 50 5f 4e 65 20 29 3b 0a 20  code==OP_Ne );. 
fa50: 20 20 20 20 20 61 73 73 65 72 74 28 20 28 66 6c       assert( (fl
fa60: 61 67 73 31 20 26 20 4d 45 4d 5f 43 6c 65 61 72  ags1 & MEM_Clear
fa70: 65 64 29 3d 3d 30 20 29 3b 0a 20 20 20 20 20 20  ed)==0 );.      
fa80: 61 73 73 65 72 74 28 20 28 70 4f 70 2d 3e 70 35  assert( (pOp->p5
fa90: 20 26 20 53 51 4c 49 54 45 5f 4a 55 4d 50 49 46   & SQLITE_JUMPIF
faa0: 4e 55 4c 4c 29 3d 3d 30 20 7c 7c 20 43 4f 52 52  NULL)==0 || CORR
fab0: 55 50 54 5f 44 42 20 29 3b 0a 20 20 20 20 20 20  UPT_DB );.      
fac0: 74 65 73 74 63 61 73 65 28 20 28 70 4f 70 2d 3e  testcase( (pOp->
fad0: 70 35 20 26 20 53 51 4c 49 54 45 5f 4a 55 4d 50  p5 & SQLITE_JUMP
fae0: 49 46 4e 55 4c 4c 29 21 3d 30 20 29 3b 0a 20 20  IFNULL)!=0 );.  
faf0: 20 20 20 20 69 66 28 20 28 66 6c 61 67 73 31 26      if( (flags1&
fb00: 66 6c 61 67 73 33 26 4d 45 4d 5f 4e 75 6c 6c 29  flags3&MEM_Null)
fb10: 21 3d 30 0a 20 20 20 20 20 20 20 26 26 20 28 66  !=0.       && (f
fb20: 6c 61 67 73 33 26 4d 45 4d 5f 43 6c 65 61 72 65  lags3&MEM_Cleare
fb30: 64 29 3d 3d 30 0a 20 20 20 20 20 20 29 7b 0a 20  d)==0.      ){. 
fb40: 20 20 20 20 20 20 20 72 65 73 20 3d 20 30 3b 20         res = 0; 
fb50: 20 2f 2a 20 4f 70 65 72 61 6e 64 73 20 61 72 65   /* Operands are
fb60: 20 65 71 75 61 6c 20 2a 2f 0a 20 20 20 20 20 20   equal */.      
fb70: 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 72  }else{.        r
fb80: 65 73 20 3d 20 31 3b 20 20 2f 2a 20 4f 70 65 72  es = 1;  /* Oper
fb90: 61 6e 64 73 20 61 72 65 20 6e 6f 74 20 65 71 75  ands are not equ
fba0: 61 6c 20 2a 2f 0a 20 20 20 20 20 20 7d 0a 20 20  al */.      }.  
fbb0: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 2f    }else{.      /
fbc0: 2a 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 20  * SQLITE_NULLEQ 
fbd0: 69 73 20 63 6c 65 61 72 20 61 6e 64 20 61 74 20  is clear and at 
fbe0: 6c 65 61 73 74 20 6f 6e 65 20 6f 70 65 72 61 6e  least one operan
fbf0: 64 20 69 73 20 4e 55 4c 4c 2c 0a 20 20 20 20 20  d is NULL,.     
fc00: 20 2a 2a 20 74 68 65 6e 20 74 68 65 20 72 65 73   ** then the res
fc10: 75 6c 74 20 69 73 20 61 6c 77 61 79 73 20 4e 55  ult is always NU
fc20: 4c 4c 2e 0a 20 20 20 20 20 20 2a 2a 20 54 68 65  LL..      ** The
fc30: 20 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e 20 69   jump is taken i
fc40: 66 20 74 68 65 20 53 51 4c 49 54 45 5f 4a 55 4d  f the SQLITE_JUM
fc50: 50 49 46 4e 55 4c 4c 20 62 69 74 20 69 73 20 73  PIFNULL bit is s
fc60: 65 74 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20  et..      */.   
fc70: 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 26     if( pOp->p5 &
fc80: 20 53 51 4c 49 54 45 5f 53 54 4f 52 45 50 32 20   SQLITE_STOREP2 
fc90: 29 7b 0a 20 20 20 20 20 20 20 20 70 4f 75 74 20  ){.        pOut 
fca0: 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d  = &aMem[pOp->p2]
fcb0: 3b 0a 20 20 20 20 20 20 20 20 69 43 6f 6d 70 61  ;.        iCompa
fcc0: 72 65 20 3d 20 31 3b 20 20 20 20 2f 2a 20 4f 70  re = 1;    /* Op
fcd0: 65 72 61 6e 64 73 20 61 72 65 20 6e 6f 74 20 65  erands are not e
fce0: 71 75 61 6c 20 2a 2f 0a 20 20 20 20 20 20 20 20  qual */.        
fcf0: 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65  memAboutToChange
fd00: 28 70 2c 20 70 4f 75 74 29 3b 0a 20 20 20 20 20  (p, pOut);.     
fd10: 20 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61     MemSetTypeFla
fd20: 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 4e 75 6c 6c  g(pOut, MEM_Null
fd30: 29 3b 0a 20 20 20 20 20 20 20 20 52 45 47 49 53  );.        REGIS
fd40: 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70  TER_TRACE(pOp->p
fd50: 32 2c 20 70 4f 75 74 29 3b 0a 20 20 20 20 20 20  2, pOut);.      
fd60: 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 56  }else{.        V
fd70: 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 32  dbeBranchTaken(2
fd80: 2c 33 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28  ,3);.        if(
fd90: 20 70 4f 70 2d 3e 70 35 20 26 20 53 51 4c 49 54   pOp->p5 & SQLIT
fda0: 45 5f 4a 55 4d 50 49 46 4e 55 4c 4c 20 29 7b 0a  E_JUMPIFNULL ){.
fdb0: 20 20 20 20 20 20 20 20 20 20 67 6f 74 6f 20 6a            goto j
fdc0: 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 20 20 20  ump_to_p2;.     
fdd0: 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20     }.      }.   
fde0: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a     break;.    }.
fdf0: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 2f 2a 20    }else{.    /* 
fe00: 4e 65 69 74 68 65 72 20 6f 70 65 72 61 6e 64 20  Neither operand 
fe10: 69 73 20 4e 55 4c 4c 2e 20 20 44 6f 20 61 20 63  is NULL.  Do a c
fe20: 6f 6d 70 61 72 69 73 6f 6e 2e 20 2a 2f 0a 20 20  omparison. */.  
fe30: 20 20 61 66 66 69 6e 69 74 79 20 3d 20 70 4f 70    affinity = pOp
fe40: 2d 3e 70 35 20 26 20 53 51 4c 49 54 45 5f 41 46  ->p5 & SQLITE_AF
fe50: 46 5f 4d 41 53 4b 3b 0a 20 20 20 20 69 66 28 20  F_MASK;.    if( 
fe60: 61 66 66 69 6e 69 74 79 3e 3d 53 51 4c 49 54 45  affinity>=SQLITE
fe70: 5f 41 46 46 5f 4e 55 4d 45 52 49 43 20 29 7b 0a  _AFF_NUMERIC ){.
fe80: 20 20 20 20 20 20 69 66 28 20 28 66 6c 61 67 73        if( (flags
fe90: 31 20 7c 20 66 6c 61 67 73 33 29 26 4d 45 4d 5f  1 | flags3)&MEM_
fea0: 53 74 72 20 29 7b 0a 20 20 20 20 20 20 20 20 69  Str ){.        i
feb0: 66 28 20 28 66 6c 61 67 73 31 20 26 20 28 4d 45  f( (flags1 & (ME
fec0: 4d 5f 49 6e 74 7c 4d 45 4d 5f 52 65 61 6c 7c 4d  M_Int|MEM_Real|M
fed0: 45 4d 5f 53 74 72 29 29 3d 3d 4d 45 4d 5f 53 74  EM_Str))==MEM_St
fee0: 72 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 61  r ){.          a
fef0: 70 70 6c 79 4e 75 6d 65 72 69 63 41 66 66 69 6e  pplyNumericAffin
ff00: 69 74 79 28 70 49 6e 31 2c 30 29 3b 0a 20 20 20  ity(pIn1,0);.   
ff10: 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20 66         assert( f
ff20: 6c 61 67 73 33 3d 3d 70 49 6e 33 2d 3e 66 6c 61  lags3==pIn3->fla
ff30: 67 73 20 29 3b 0a 20 20 20 20 20 20 20 20 20 20  gs );.          
ff40: 2f 2a 20 74 65 73 74 63 61 73 65 28 20 66 6c 61  /* testcase( fla
ff50: 67 73 33 21 3d 70 49 6e 33 2d 3e 66 6c 61 67 73  gs3!=pIn3->flags
ff60: 20 29 3b 0a 20 20 20 20 20 20 20 20 20 20 2a 2a   );.          **
ff70: 20 74 68 69 73 20 75 73 65 64 20 74 6f 20 62 65   this used to be
ff80: 20 70 6f 73 73 69 62 6c 65 20 77 69 74 68 20 70   possible with p
ff90: 49 6e 31 3d 3d 70 49 6e 33 2c 20 62 75 74 20 6e  In1==pIn3, but n
ffa0: 6f 74 20 73 69 6e 63 65 0a 20 20 20 20 20 20 20  ot since.       
ffb0: 20 20 20 2a 2a 20 74 68 65 20 63 6f 6c 75 6d 6e     ** the column
ffc0: 20 63 61 63 68 65 20 77 61 73 20 72 65 6d 6f 76   cache was remov
ffd0: 65 64 2e 20 20 54 68 65 20 66 6f 6c 6c 6f 77 69  ed.  The followi
ffe0: 6e 67 20 61 73 73 69 67 6e 6d 65 6e 74 0a 20 20  ng assignment.  
fff0: 20 20 20 20 20 20 20 20 2a 2a 20 69 73 20 65 73          ** is es
10000 73 65 6e 74 69 61 6c 6c 79 20 61 20 6e 6f 2d 6f  sentially a no-o
10010 70 2e 20 20 42 75 74 2c 20 69 74 20 70 72 6f 76  p.  But, it prov
10020 69 64 65 73 20 64 65 66 65 6e 73 65 2d 69 6e 2d  ides defense-in-
10030 64 65 70 74 68 0a 20 20 20 20 20 20 20 20 20 20  depth.          
10040 2a 2a 20 69 6e 20 63 61 73 65 20 6f 75 72 20 61  ** in case our a
10050 6e 61 6c 79 73 69 73 20 69 73 20 69 6e 63 6f 72  nalysis is incor
10060 72 65 63 74 2c 20 73 6f 20 69 74 20 69 73 20 6c  rect, so it is l
10070 65 66 74 20 69 6e 2e 20 2a 2f 0a 20 20 20 20 20  eft in. */.     
10080 20 20 20 20 20 66 6c 61 67 73 33 20 3d 20 70 49       flags3 = pI
10090 6e 33 2d 3e 66 6c 61 67 73 3b 0a 20 20 20 20 20  n3->flags;.     
100a0 20 20 20 7d 0a 20 20 20 20 20 20 20 20 69 66 28     }.        if(
100b0 20 28 66 6c 61 67 73 33 20 26 20 28 4d 45 4d 5f   (flags3 & (MEM_
100c0 49 6e 74 7c 4d 45 4d 5f 52 65 61 6c 7c 4d 45 4d  Int|MEM_Real|MEM
100d0 5f 53 74 72 29 29 3d 3d 4d 45 4d 5f 53 74 72 20  _Str))==MEM_Str 
100e0 29 7b 0a 20 20 20 20 20 20 20 20 20 20 61 70 70  ){.          app
100f0 6c 79 4e 75 6d 65 72 69 63 41 66 66 69 6e 69 74  lyNumericAffinit
10100 79 28 70 49 6e 33 2c 30 29 3b 0a 20 20 20 20 20  y(pIn3,0);.     
10110 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20     }.      }.   
10120 20 20 20 2f 2a 20 48 61 6e 64 6c 65 20 74 68 65     /* Handle the
10130 20 63 6f 6d 6d 6f 6e 20 63 61 73 65 20 6f 66 20   common case of 
10140 69 6e 74 65 67 65 72 20 63 6f 6d 70 61 72 69 73  integer comparis
10150 6f 6e 20 68 65 72 65 2c 20 61 73 20 61 6e 0a 20  on here, as an. 
10160 20 20 20 20 20 2a 2a 20 6f 70 74 69 6d 69 7a 61       ** optimiza
10170 74 69 6f 6e 2c 20 74 6f 20 61 76 6f 69 64 20 61  tion, to avoid a
10180 20 63 61 6c 6c 20 74 6f 20 73 71 6c 69 74 65 33   call to sqlite3
10190 4d 65 6d 43 6f 6d 70 61 72 65 28 29 20 2a 2f 0a  MemCompare() */.
101a0 20 20 20 20 20 20 69 66 28 20 28 70 49 6e 31 2d        if( (pIn1-
101b0 3e 66 6c 61 67 73 20 26 20 70 49 6e 33 2d 3e 66  >flags & pIn3->f
101c0 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29 21  lags & MEM_Int)!
101d0 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 69 66  =0 ){.        if
101e0 28 20 70 49 6e 33 2d 3e 75 2e 69 20 3e 20 70 49  ( pIn3->u.i > pI
101f0 6e 31 2d 3e 75 2e 69 20 29 7b 20 72 65 73 20 3d  n1->u.i ){ res =
10200 20 2b 31 3b 20 67 6f 74 6f 20 63 6f 6d 70 61 72   +1; goto compar
10210 65 5f 6f 70 3b 20 7d 0a 20 20 20 20 20 20 20 20  e_op; }.        
10220 69 66 28 20 70 49 6e 33 2d 3e 75 2e 69 20 3c 20  if( pIn3->u.i < 
10230 70 49 6e 31 2d 3e 75 2e 69 20 29 7b 20 72 65 73  pIn1->u.i ){ res
10240 20 3d 20 2d 31 3b 20 67 6f 74 6f 20 63 6f 6d 70   = -1; goto comp
10250 61 72 65 5f 6f 70 3b 20 7d 0a 20 20 20 20 20 20  are_op; }.      
10260 20 20 72 65 73 20 3d 20 30 3b 0a 20 20 20 20 20    res = 0;.     
10270 20 20 20 67 6f 74 6f 20 63 6f 6d 70 61 72 65 5f     goto compare_
10280 6f 70 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  op;.      }.    
10290 7d 65 6c 73 65 20 69 66 28 20 61 66 66 69 6e 69  }else if( affini
102a0 74 79 3d 3d 53 51 4c 49 54 45 5f 41 46 46 5f 54  ty==SQLITE_AFF_T
102b0 45 58 54 20 29 7b 0a 20 20 20 20 20 20 69 66 28  EXT ){.      if(
102c0 20 28 66 6c 61 67 73 31 20 26 20 4d 45 4d 5f 53   (flags1 & MEM_S
102d0 74 72 29 3d 3d 30 20 26 26 20 28 66 6c 61 67 73  tr)==0 && (flags
102e0 31 20 26 20 28 4d 45 4d 5f 49 6e 74 7c 4d 45 4d  1 & (MEM_Int|MEM
102f0 5f 52 65 61 6c 29 29 21 3d 30 20 29 7b 0a 20 20  _Real))!=0 ){.  
10300 20 20 20 20 20 20 74 65 73 74 63 61 73 65 28 20        testcase( 
10310 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn1->flags & ME
10320 4d 5f 49 6e 74 20 29 3b 0a 20 20 20 20 20 20 20  M_Int );.       
10330 20 74 65 73 74 63 61 73 65 28 20 70 49 6e 31 2d   testcase( pIn1-
10340 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52 65 61  >flags & MEM_Rea
10350 6c 20 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c  l );.        sql
10360 69 74 65 33 56 64 62 65 4d 65 6d 53 74 72 69 6e  ite3VdbeMemStrin
10370 67 69 66 79 28 70 49 6e 31 2c 20 65 6e 63 6f 64  gify(pIn1, encod
10380 69 6e 67 2c 20 31 29 3b 0a 20 20 20 20 20 20 20  ing, 1);.       
10390 20 74 65 73 74 63 61 73 65 28 20 28 66 6c 61 67   testcase( (flag
103a0 73 31 26 4d 45 4d 5f 44 79 6e 29 20 21 3d 20 28  s1&MEM_Dyn) != (
103b0 70 49 6e 31 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f  pIn1->flags&MEM_
103c0 44 79 6e 29 20 29 3b 0a 20 20 20 20 20 20 20 20  Dyn) );.        
103d0 66 6c 61 67 73 31 20 3d 20 28 70 49 6e 31 2d 3e  flags1 = (pIn1->
103e0 66 6c 61 67 73 20 26 20 7e 4d 45 4d 5f 54 79 70  flags & ~MEM_Typ
103f0 65 4d 61 73 6b 29 20 7c 20 28 66 6c 61 67 73 31  eMask) | (flags1
10400 20 26 20 4d 45 4d 5f 54 79 70 65 4d 61 73 6b 29   & MEM_TypeMask)
10410 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74  ;.        assert
10420 28 20 70 49 6e 31 21 3d 70 49 6e 33 20 29 3b 0a  ( pIn1!=pIn3 );.
10430 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69 66        }.      if
10440 28 20 28 66 6c 61 67 73 33 20 26 20 4d 45 4d 5f  ( (flags3 & MEM_
10450 53 74 72 29 3d 3d 30 20 26 26 20 28 66 6c 61 67  Str)==0 && (flag
10460 73 33 20 26 20 28 4d 45 4d 5f 49 6e 74 7c 4d 45  s3 & (MEM_Int|ME
10470 4d 5f 52 65 61 6c 29 29 21 3d 30 20 29 7b 0a 20  M_Real))!=0 ){. 
10480 20 20 20 20 20 20 20 74 65 73 74 63 61 73 65 28         testcase(
10490 20 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d   pIn3->flags & M
104a0 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 20 20 20 20  EM_Int );.      
104b0 20 20 74 65 73 74 63 61 73 65 28 20 70 49 6e 33    testcase( pIn3
104c0 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52 65  ->flags & MEM_Re
104d0 61 6c 20 29 3b 0a 20 20 20 20 20 20 20 20 73 71  al );.        sq
104e0 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 74 72 69  lite3VdbeMemStri
104f0 6e 67 69 66 79 28 70 49 6e 33 2c 20 65 6e 63 6f  ngify(pIn3, enco
10500 64 69 6e 67 2c 20 31 29 3b 0a 20 20 20 20 20 20  ding, 1);.      
10510 20 20 74 65 73 74 63 61 73 65 28 20 28 66 6c 61    testcase( (fla
10520 67 73 33 26 4d 45 4d 5f 44 79 6e 29 20 21 3d 20  gs3&MEM_Dyn) != 
10530 28 70 49 6e 33 2d 3e 66 6c 61 67 73 26 4d 45 4d  (pIn3->flags&MEM
10540 5f 44 79 6e 29 20 29 3b 0a 20 20 20 20 20 20 20  _Dyn) );.       
10550 20 66 6c 61 67 73 33 20 3d 20 28 70 49 6e 33 2d   flags3 = (pIn3-
10560 3e 66 6c 61 67 73 20 26 20 7e 4d 45 4d 5f 54 79  >flags & ~MEM_Ty
10570 70 65 4d 61 73 6b 29 20 7c 20 28 66 6c 61 67 73  peMask) | (flags
10580 33 20 26 20 4d 45 4d 5f 54 79 70 65 4d 61 73 6b  3 & MEM_TypeMask
10590 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  );.      }.    }
105a0 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70  .    assert( pOp
105b0 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 43 4f 4c  ->p4type==P4_COL
105c0 4c 53 45 51 20 7c 7c 20 70 4f 70 2d 3e 70 34 2e  LSEQ || pOp->p4.
105d0 70 43 6f 6c 6c 3d 3d 30 20 29 3b 0a 20 20 20 20  pColl==0 );.    
105e0 72 65 73 20 3d 20 73 71 6c 69 74 65 33 4d 65 6d  res = sqlite3Mem
105f0 43 6f 6d 70 61 72 65 28 70 49 6e 33 2c 20 70 49  Compare(pIn3, pI
10600 6e 31 2c 20 70 4f 70 2d 3e 70 34 2e 70 43 6f 6c  n1, pOp->p4.pCol
10610 6c 29 3b 0a 20 20 7d 0a 63 6f 6d 70 61 72 65 5f  l);.  }.compare_
10620 6f 70 3a 0a 20 20 2f 2a 20 41 74 20 74 68 69 73  op:.  /* At this
10630 20 70 6f 69 6e 74 2c 20 72 65 73 20 69 73 20 6e   point, res is n
10640 65 67 61 74 69 76 65 2c 20 7a 65 72 6f 2c 20 6f  egative, zero, o
10650 72 20 70 6f 73 69 74 69 76 65 20 69 66 20 72 65  r positive if re
10660 67 5b 50 31 5d 20 69 73 0a 20 20 2a 2a 20 6c 65  g[P1] is.  ** le
10670 73 73 20 74 68 61 6e 2c 20 65 71 75 61 6c 20 74  ss than, equal t
10680 6f 2c 20 6f 72 20 67 72 65 61 74 65 72 20 74 68  o, or greater th
10690 61 6e 20 72 65 67 5b 50 33 5d 2c 20 72 65 73 70  an reg[P3], resp
106a0 65 63 74 69 76 65 6c 79 2e 20 20 43 6f 6d 70 75  ectively.  Compu
106b0 74 65 0a 20 20 2a 2a 20 74 68 65 20 61 6e 73 77  te.  ** the answ
106c0 65 72 20 74 6f 20 74 68 69 73 20 6f 70 65 72 61  er to this opera
106d0 74 6f 72 20 69 6e 20 72 65 73 32 2c 20 64 65 70  tor in res2, dep
106e0 65 6e 64 69 6e 67 20 6f 6e 20 77 68 61 74 20 74  ending on what t
106f0 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e 0a 20 20  he comparison.  
10700 2a 2a 20 6f 70 65 72 61 74 6f 72 20 61 63 74 75  ** operator actu
10710 61 6c 6c 79 20 69 73 2e 20 20 54 68 65 20 6e 65  ally is.  The ne
10720 78 74 20 62 6c 6f 63 6b 20 6f 66 20 63 6f 64 65  xt block of code
10730 20 64 65 70 65 6e 64 73 20 6f 6e 20 74 68 65 20   depends on the 
10740 66 61 63 74 0a 20 20 2a 2a 20 74 68 61 74 20 74  fact.  ** that t
10750 68 65 20 36 20 63 6f 6d 70 61 72 69 73 6f 6e 20  he 6 comparison 
10760 6f 70 65 72 61 74 6f 72 73 20 61 72 65 20 63 6f  operators are co
10770 6e 73 65 63 75 74 69 76 65 20 69 6e 74 65 67 65  nsecutive intege
10780 72 73 20 69 6e 20 74 68 69 73 0a 20 20 2a 2a 20  rs in this.  ** 
10790 6f 72 64 65 72 3a 20 20 4e 45 2c 20 45 51 2c 20  order:  NE, EQ, 
107a0 47 54 2c 20 4c 45 2c 20 4c 54 2c 20 47 45 20 2a  GT, LE, LT, GE *
107b0 2f 0a 20 20 61 73 73 65 72 74 28 20 4f 50 5f 45  /.  assert( OP_E
107c0 71 3d 3d 4f 50 5f 4e 65 2b 31 20 29 3b 20 61 73  q==OP_Ne+1 ); as
107d0 73 65 72 74 28 20 4f 50 5f 47 74 3d 3d 4f 50 5f  sert( OP_Gt==OP_
107e0 4e 65 2b 32 20 29 3b 20 61 73 73 65 72 74 28 20  Ne+2 ); assert( 
107f0 4f 50 5f 4c 65 3d 3d 4f 50 5f 4e 65 2b 33 20 29  OP_Le==OP_Ne+3 )
10800 3b 0a 20 20 61 73 73 65 72 74 28 20 4f 50 5f 4c  ;.  assert( OP_L
10810 74 3d 3d 4f 50 5f 4e 65 2b 34 20 29 3b 20 61 73  t==OP_Ne+4 ); as
10820 73 65 72 74 28 20 4f 50 5f 47 65 3d 3d 4f 50 5f  sert( OP_Ge==OP_
10830 4e 65 2b 35 20 29 3b 0a 20 20 69 66 28 20 72 65  Ne+5 );.  if( re
10840 73 3c 30 20 29 7b 20 20 20 20 20 20 20 20 20 20  s<0 ){          
10850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
10860 20 6e 65 2c 20 65 71 2c 20 67 74 2c 20 6c 65 2c   ne, eq, gt, le,
10870 20 6c 74 2c 20 67 65 20 2a 2f 0a 20 20 20 20 73   lt, ge */.    s
10880 74 61 74 69 63 20 63 6f 6e 73 74 20 75 6e 73 69  tatic const unsi
10890 67 6e 65 64 20 63 68 61 72 20 61 4c 54 62 5b 5d  gned char aLTb[]
108a0 20 3d 20 7b 20 31 2c 20 20 30 2c 20 20 30 2c 20   = { 1,  0,  0, 
108b0 20 31 2c 20 20 31 2c 20 20 30 20 7d 3b 0a 20 20   1,  1,  0 };.  
108c0 20 20 72 65 73 32 20 3d 20 61 4c 54 62 5b 70 4f    res2 = aLTb[pO
108d0 70 2d 3e 6f 70 63 6f 64 65 20 2d 20 4f 50 5f 4e  p->opcode - OP_N
108e0 65 5d 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20  e];.  }else if( 
108f0 72 65 73 3d 3d 30 20 29 7b 0a 20 20 20 20 73 74  res==0 ){.    st
10900 61 74 69 63 20 63 6f 6e 73 74 20 75 6e 73 69 67  atic const unsig
10910 6e 65 64 20 63 68 61 72 20 61 45 51 62 5b 5d 20  ned char aEQb[] 
10920 3d 20 7b 20 30 2c 20 20 31 2c 20 20 30 2c 20 20  = { 0,  1,  0,  
10930 31 2c 20 20 30 2c 20 20 31 20 7d 3b 0a 20 20 20  1,  0,  1 };.   
10940 20 72 65 73 32 20 3d 20 61 45 51 62 5b 70 4f 70   res2 = aEQb[pOp
10950 2d 3e 6f 70 63 6f 64 65 20 2d 20 4f 50 5f 4e 65  ->opcode - OP_Ne
10960 5d 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  ];.  }else{.    
10970 73 74 61 74 69 63 20 63 6f 6e 73 74 20 75 6e 73  static const uns
10980 69 67 6e 65 64 20 63 68 61 72 20 61 47 54 62 5b  igned char aGTb[
10990 5d 20 3d 20 7b 20 31 2c 20 20 30 2c 20 20 31 2c  ] = { 1,  0,  1,
109a0 20 20 30 2c 20 20 30 2c 20 20 31 20 7d 3b 0a 20    0,  0,  1 };. 
109b0 20 20 20 72 65 73 32 20 3d 20 61 47 54 62 5b 70     res2 = aGTb[p
109c0 4f 70 2d 3e 6f 70 63 6f 64 65 20 2d 20 4f 50 5f  Op->opcode - OP_
109d0 4e 65 5d 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 55  Ne];.  }..  /* U
109e0 6e 64 6f 20 61 6e 79 20 63 68 61 6e 67 65 73 20  ndo any changes 
109f0 6d 61 64 65 20 62 79 20 61 70 70 6c 79 41 66 66  made by applyAff
10a00 69 6e 69 74 79 28 29 20 74 6f 20 74 68 65 20 69  inity() to the i
10a10 6e 70 75 74 20 72 65 67 69 73 74 65 72 73 2e 20  nput registers. 
10a20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 28 70 49  */.  assert( (pI
10a30 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  n1->flags & MEM_
10a40 44 79 6e 29 20 3d 3d 20 28 66 6c 61 67 73 31 20  Dyn) == (flags1 
10a50 26 20 4d 45 4d 5f 44 79 6e 29 20 29 3b 0a 20 20  & MEM_Dyn) );.  
10a60 70 49 6e 31 2d 3e 66 6c 61 67 73 20 3d 20 66 6c  pIn1->flags = fl
10a70 61 67 73 31 3b 0a 20 20 61 73 73 65 72 74 28 20  ags1;.  assert( 
10a80 28 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d  (pIn3->flags & M
10a90 45 4d 5f 44 79 6e 29 20 3d 3d 20 28 66 6c 61 67  EM_Dyn) == (flag
10aa0 73 33 20 26 20 4d 45 4d 5f 44 79 6e 29 20 29 3b  s3 & MEM_Dyn) );
10ab0 0a 20 20 70 49 6e 33 2d 3e 66 6c 61 67 73 20 3d  .  pIn3->flags =
10ac0 20 66 6c 61 67 73 33 3b 0a 0a 20 20 69 66 28 20   flags3;..  if( 
10ad0 70 4f 70 2d 3e 70 35 20 26 20 53 51 4c 49 54 45  pOp->p5 & SQLITE
10ae0 5f 53 54 4f 52 45 50 32 20 29 7b 0a 20 20 20 20  _STOREP2 ){.    
10af0 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pOut = &aMem[pOp
10b00 2d 3e 70 32 5d 3b 0a 20 20 20 20 69 43 6f 6d 70  ->p2];.    iComp
10b10 61 72 65 20 3d 20 72 65 73 3b 0a 20 20 20 20 69  are = res;.    i
10b20 66 28 20 28 70 4f 70 2d 3e 70 35 20 26 20 53 51  f( (pOp->p5 & SQ
10b30 4c 49 54 45 5f 4b 45 45 50 4e 55 4c 4c 29 21 3d  LITE_KEEPNULL)!=
10b40 30 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 54 68  0 ){.      /* Th
10b50 65 20 4b 45 45 50 4e 55 4c 4c 20 66 6c 61 67 20  e KEEPNULL flag 
10b60 70 72 65 76 65 6e 74 73 20 4f 50 5f 45 71 20 66  prevents OP_Eq f
10b70 72 6f 6d 20 6f 76 65 72 77 72 69 74 69 6e 67 20  rom overwriting 
10b80 61 20 4e 55 4c 4c 20 77 69 74 68 20 31 0a 20 20  a NULL with 1.  
10b90 20 20 20 20 2a 2a 20 61 6e 64 20 70 72 65 76 65      ** and preve
10ba0 6e 74 73 20 4f 50 5f 4e 65 20 66 72 6f 6d 20 6f  nts OP_Ne from o
10bb0 76 65 72 77 72 69 74 69 6e 67 20 4e 55 4c 4c 20  verwriting NULL 
10bc0 77 69 74 68 20 30 2e 20 20 54 68 69 73 20 66 6c  with 0.  This fl
10bd0 61 67 0a 20 20 20 20 20 20 2a 2a 20 69 73 20 6f  ag.      ** is o
10be0 6e 6c 79 20 75 73 65 64 20 69 6e 20 63 6f 6e 74  nly used in cont
10bf0 65 78 74 73 20 77 68 65 72 65 20 65 69 74 68 65  exts where eithe
10c00 72 3a 0a 20 20 20 20 20 20 2a 2a 20 20 20 28 31  r:.      **   (1
10c10 29 20 6f 70 3d 3d 4f 50 5f 45 71 20 26 26 20 28  ) op==OP_Eq && (
10c20 72 5b 50 32 5d 3d 3d 4e 55 4c 4c 20 7c 7c 20 72  r[P2]==NULL || r
10c30 5b 50 32 5d 3d 3d 30 29 0a 20 20 20 20 20 20 2a  [P2]==0).      *
10c40 2a 20 20 20 28 32 29 20 6f 70 3d 3d 4f 50 5f 4e  *   (2) op==OP_N
10c50 65 20 26 26 20 28 72 5b 50 32 5d 3d 3d 4e 55 4c  e && (r[P2]==NUL
10c60 4c 20 7c 7c 20 72 5b 50 32 5d 3d 3d 31 29 0a 20  L || r[P2]==1). 
10c70 20 20 20 20 20 2a 2a 20 54 68 65 72 65 66 6f 72       ** Therefor
10c80 65 20 69 74 20 69 73 20 6e 6f 74 20 6e 65 63 65  e it is not nece
10c90 73 73 61 72 79 20 74 6f 20 63 68 65 63 6b 20 74  ssary to check t
10ca0 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 72 5b  he content of r[
10cb0 50 32 5d 20 66 6f 72 0a 20 20 20 20 20 20 2a 2a  P2] for.      **
10cc0 20 4e 55 4c 4c 2e 20 2a 2f 0a 20 20 20 20 20 20   NULL. */.      
10cd0 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63  assert( pOp->opc
10ce0 6f 64 65 3d 3d 4f 50 5f 4e 65 20 7c 7c 20 70 4f  ode==OP_Ne || pO
10cf0 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 45 71  p->opcode==OP_Eq
10d00 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74   );.      assert
10d10 28 20 72 65 73 32 3d 3d 30 20 7c 7c 20 72 65 73  ( res2==0 || res
10d20 32 3d 3d 31 20 29 3b 0a 20 20 20 20 20 20 74 65  2==1 );.      te
10d30 73 74 63 61 73 65 28 20 72 65 73 32 3d 3d 30 20  stcase( res2==0 
10d40 26 26 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d  && pOp->opcode==
10d50 4f 50 5f 45 71 20 29 3b 0a 20 20 20 20 20 20 74  OP_Eq );.      t
10d60 65 73 74 63 61 73 65 28 20 72 65 73 32 3d 3d 31  estcase( res2==1
10d70 20 26 26 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d   && pOp->opcode=
10d80 3d 4f 50 5f 45 71 20 29 3b 0a 20 20 20 20 20 20  =OP_Eq );.      
10d90 74 65 73 74 63 61 73 65 28 20 72 65 73 32 3d 3d  testcase( res2==
10da0 30 20 26 26 20 70 4f 70 2d 3e 6f 70 63 6f 64 65  0 && pOp->opcode
10db0 3d 3d 4f 50 5f 4e 65 20 29 3b 0a 20 20 20 20 20  ==OP_Ne );.     
10dc0 20 74 65 73 74 63 61 73 65 28 20 72 65 73 32 3d   testcase( res2=
10dd0 3d 31 20 26 26 20 70 4f 70 2d 3e 6f 70 63 6f 64  =1 && pOp->opcod
10de0 65 3d 3d 4f 50 5f 4e 65 20 29 3b 0a 20 20 20 20  e==OP_Ne );.    
10df0 20 20 69 66 28 20 28 70 4f 70 2d 3e 6f 70 63 6f    if( (pOp->opco
10e00 64 65 3d 3d 4f 50 5f 45 71 29 3d 3d 72 65 73 32  de==OP_Eq)==res2
10e10 20 29 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a   ) break;.    }.
10e20 20 20 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68      memAboutToCh
10e30 61 6e 67 65 28 70 2c 20 70 4f 75 74 29 3b 0a 20  ange(p, pOut);. 
10e40 20 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61     MemSetTypeFla
10e50 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 49 6e 74 29  g(pOut, MEM_Int)
10e60 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e 69 20  ;.    pOut->u.i 
10e70 3d 20 72 65 73 32 3b 0a 20 20 20 20 52 45 47 49  = res2;.    REGI
10e80 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e  STER_TRACE(pOp->
10e90 70 32 2c 20 70 4f 75 74 29 3b 0a 20 20 7d 65 6c  p2, pOut);.  }el
10ea0 73 65 7b 0a 20 20 20 20 56 64 62 65 42 72 61 6e  se{.    VdbeBran
10eb0 63 68 54 61 6b 65 6e 28 72 65 73 21 3d 30 2c 20  chTaken(res!=0, 
10ec0 28 70 4f 70 2d 3e 70 35 20 26 20 53 51 4c 49 54  (pOp->p5 & SQLIT
10ed0 45 5f 4e 55 4c 4c 45 51 29 3f 32 3a 33 29 3b 0a  E_NULLEQ)?2:3);.
10ee0 20 20 20 20 69 66 28 20 72 65 73 32 20 29 7b 0a      if( res2 ){.
10ef0 20 20 20 20 20 20 67 6f 74 6f 20 6a 75 6d 70 5f        goto jump_
10f00 74 6f 5f 70 32 3b 0a 20 20 20 20 7d 0a 20 20 7d  to_p2;.    }.  }
10f10 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
10f20 4f 70 63 6f 64 65 3a 20 45 6c 73 65 4e 6f 74 45  Opcode: ElseNotE
10f30 71 20 2a 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a  q * P2 * * *.**.
10f40 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 6d  ** This opcode m
10f50 75 73 74 20 69 6d 6d 65 64 69 61 74 65 6c 79 20  ust immediately 
10f60 66 6f 6c 6c 6f 77 20 61 6e 20 4f 50 5f 4c 74 20  follow an OP_Lt 
10f70 6f 72 20 4f 50 5f 47 74 20 63 6f 6d 70 61 72 69  or OP_Gt compari
10f80 73 6f 6e 20 6f 70 65 72 61 74 6f 72 2e 0a 2a 2a  son operator..**
10f90 20 49 66 20 72 65 73 75 6c 74 20 6f 66 20 61 6e   If result of an
10fa0 20 4f 50 5f 45 71 20 63 6f 6d 70 61 72 69 73 6f   OP_Eq compariso
10fb0 6e 20 6f 6e 20 74 68 65 20 73 61 6d 65 20 74 77  n on the same tw
10fc0 6f 20 6f 70 65 72 61 6e 64 73 0a 2a 2a 20 77 6f  o operands.** wo
10fd0 75 6c 64 20 68 61 76 65 20 62 65 20 4e 55 4c 4c  uld have be NULL
10fe0 20 6f 72 20 66 61 6c 73 65 20 28 30 29 2c 20 74   or false (0), t
10ff0 68 65 6e 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f  hen then jump to
11000 20 50 32 2e 20 0a 2a 2a 20 49 66 20 74 68 65 20   P2. .** If the 
11010 72 65 73 75 6c 74 20 6f 66 20 61 6e 20 4f 50 5f  result of an OP_
11020 45 71 20 63 6f 6d 70 61 72 69 73 6f 6e 20 6f 6e  Eq comparison on
11030 20 74 68 65 20 74 77 6f 20 70 72 65 76 69 6f 75   the two previou
11040 73 20 6f 70 65 72 61 6e 64 73 0a 2a 2a 20 77 6f  s operands.** wo
11050 75 6c 64 20 68 61 76 65 20 62 65 65 6e 20 74 72  uld have been tr
11060 75 65 20 28 31 29 2c 20 74 68 65 6e 20 66 61 6c  ue (1), then fal
11070 6c 20 74 68 72 6f 75 67 68 2e 0a 2a 2f 0a 63 61  l through..*/.ca
11080 73 65 20 4f 50 5f 45 6c 73 65 4e 6f 74 45 71 3a  se OP_ElseNotEq:
11090 20 7b 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65   {       /* same
110a0 20 61 73 20 54 4b 5f 45 53 43 41 50 45 2c 20 6a   as TK_ESCAPE, j
110b0 75 6d 70 20 2a 2f 0a 20 20 61 73 73 65 72 74 28  ump */.  assert(
110c0 20 70 4f 70 3e 61 4f 70 20 29 3b 0a 20 20 61 73   pOp>aOp );.  as
110d0 73 65 72 74 28 20 70 4f 70 5b 2d 31 5d 2e 6f 70  sert( pOp[-1].op
110e0 63 6f 64 65 3d 3d 4f 50 5f 4c 74 20 7c 7c 20 70  code==OP_Lt || p
110f0 4f 70 5b 2d 31 5d 2e 6f 70 63 6f 64 65 3d 3d 4f  Op[-1].opcode==O
11100 50 5f 47 74 20 29 3b 0a 20 20 61 73 73 65 72 74  P_Gt );.  assert
11110 28 20 70 4f 70 5b 2d 31 5d 2e 70 35 20 26 20 53  ( pOp[-1].p5 & S
11120 51 4c 49 54 45 5f 53 54 4f 52 45 50 32 20 29 3b  QLITE_STOREP2 );
11130 0a 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b  .  VdbeBranchTak
11140 65 6e 28 69 43 6f 6d 70 61 72 65 21 3d 30 2c 20  en(iCompare!=0, 
11150 32 29 3b 0a 20 20 69 66 28 20 69 43 6f 6d 70 61  2);.  if( iCompa
11160 72 65 21 3d 30 20 29 20 67 6f 74 6f 20 6a 75 6d  re!=0 ) goto jum
11170 70 5f 74 6f 5f 70 32 3b 0a 20 20 62 72 65 61 6b  p_to_p2;.  break
11180 3b 0a 7d 0a 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  ;.}.../* Opcode:
11190 20 50 65 72 6d 75 74 61 74 69 6f 6e 20 2a 20 2a   Permutation * *
111a0 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 53 65   * P4 *.**.** Se
111b0 74 20 74 68 65 20 70 65 72 6d 75 74 61 74 69 6f  t the permutatio
111c0 6e 20 75 73 65 64 20 62 79 20 74 68 65 20 4f 50  n used by the OP
111d0 5f 43 6f 6d 70 61 72 65 20 6f 70 65 72 61 74 6f  _Compare operato
111e0 72 20 69 6e 20 74 68 65 20 6e 65 78 74 0a 2a 2a  r in the next.**
111f0 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20 20 54   instruction.  T
11200 68 65 20 70 65 72 6d 75 74 61 74 69 6f 6e 20 69  he permutation i
11210 73 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20  s stored in the 
11220 50 34 20 6f 70 65 72 61 6e 64 2e 0a 2a 2a 0a 2a  P4 operand..**.*
11230 2a 20 54 68 65 20 70 65 72 6d 75 74 61 74 69 6f  * The permutatio
11240 6e 20 69 73 20 6f 6e 6c 79 20 76 61 6c 69 64 20  n is only valid 
11250 75 6e 74 69 6c 20 74 68 65 20 6e 65 78 74 20 4f  until the next O
11260 50 5f 43 6f 6d 70 61 72 65 20 74 68 61 74 20 68  P_Compare that h
11270 61 73 0a 2a 2a 20 74 68 65 20 4f 50 46 4c 41 47  as.** the OPFLAG
11280 5f 50 45 52 4d 55 54 45 20 62 69 74 20 73 65 74  _PERMUTE bit set
11290 20 69 6e 20 50 35 2e 20 54 79 70 69 63 61 6c 6c   in P5. Typicall
112a0 79 20 74 68 65 20 4f 50 5f 50 65 72 6d 75 74 61  y the OP_Permuta
112b0 74 69 6f 6e 20 73 68 6f 75 6c 64 20 0a 2a 2a 20  tion should .** 
112c0 6f 63 63 75 72 20 69 6d 6d 65 64 69 61 74 65 6c  occur immediatel
112d0 79 20 70 72 69 6f 72 20 74 6f 20 74 68 65 20 4f  y prior to the O
112e0 50 5f 43 6f 6d 70 61 72 65 2e 0a 2a 2a 0a 2a 2a  P_Compare..**.**
112f0 20 54 68 65 20 66 69 72 73 74 20 69 6e 74 65 67   The first integ
11300 65 72 20 69 6e 20 74 68 65 20 50 34 20 69 6e 74  er in the P4 int
11310 65 67 65 72 20 61 72 72 61 79 20 69 73 20 74 68  eger array is th
11320 65 20 6c 65 6e 67 74 68 20 6f 66 20 74 68 65 20  e length of the 
11330 61 72 72 61 79 0a 2a 2a 20 61 6e 64 20 64 6f 65  array.** and doe
11340 73 20 6e 6f 74 20 62 65 63 6f 6d 65 20 70 61 72  s not become par
11350 74 20 6f 66 20 74 68 65 20 70 65 72 6d 75 74 61  t of the permuta
11360 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  tion..*/.case OP
11370 5f 50 65 72 6d 75 74 61 74 69 6f 6e 3a 20 7b 0a  _Permutation: {.
11380 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
11390 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54 41 52 52  4type==P4_INTARR
113a0 41 59 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  AY );.  assert( 
113b0 70 4f 70 2d 3e 70 34 2e 61 69 20 29 3b 0a 20 20  pOp->p4.ai );.  
113c0 61 73 73 65 72 74 28 20 70 4f 70 5b 31 5d 2e 6f  assert( pOp[1].o
113d0 70 63 6f 64 65 3d 3d 4f 50 5f 43 6f 6d 70 61 72  pcode==OP_Compar
113e0 65 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  e );.  assert( p
113f0 4f 70 5b 31 5d 2e 70 35 20 26 20 4f 50 46 4c 41  Op[1].p5 & OPFLA
11400 47 5f 50 45 52 4d 55 54 45 20 29 3b 0a 20 20 62  G_PERMUTE );.  b
11410 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
11420 64 65 3a 20 43 6f 6d 70 61 72 65 20 50 31 20 50  de: Compare P1 P
11430 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79  2 P3 P4 P5.** Sy
11440 6e 6f 70 73 69 73 3a 20 72 5b 50 31 40 50 33 5d  nopsis: r[P1@P3]
11450 20 3c 2d 3e 20 72 5b 50 32 40 50 33 5d 0a 2a 2a   <-> r[P2@P3].**
11460 0a 2a 2a 20 43 6f 6d 70 61 72 65 20 74 77 6f 20  .** Compare two 
11470 76 65 63 74 6f 72 73 20 6f 66 20 72 65 67 69 73  vectors of regis
11480 74 65 72 73 20 69 6e 20 72 65 67 28 50 31 29 2e  ters in reg(P1).
11490 2e 72 65 67 28 50 31 2b 50 33 2d 31 29 20 28 63  .reg(P1+P3-1) (c
114a0 61 6c 6c 20 74 68 69 73 0a 2a 2a 20 76 65 63 74  all this.** vect
114b0 6f 72 20 22 41 22 29 20 61 6e 64 20 69 6e 20 72  or "A") and in r
114c0 65 67 28 50 32 29 2e 2e 72 65 67 28 50 32 2b 50  eg(P2)..reg(P2+P
114d0 33 2d 31 29 20 28 22 42 22 29 2e 20 20 53 61 76  3-1) ("B").  Sav
114e0 65 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66 0a  e the result of.
114f0 2a 2a 20 74 68 65 20 63 6f 6d 70 61 72 69 73 6f  ** the compariso
11500 6e 20 66 6f 72 20 75 73 65 20 62 79 20 74 68 65  n for use by the
11510 20 6e 65 78 74 20 4f 50 5f 4a 75 6d 70 20 69 6e   next OP_Jump in
11520 73 74 72 75 63 74 2e 0a 2a 2a 0a 2a 2a 20 49 66  struct..**.** If
11530 20 50 35 20 68 61 73 20 74 68 65 20 4f 50 46 4c   P5 has the OPFL
11540 41 47 5f 50 45 52 4d 55 54 45 20 62 69 74 20 73  AG_PERMUTE bit s
11550 65 74 2c 20 74 68 65 6e 20 74 68 65 20 6f 72 64  et, then the ord
11560 65 72 20 6f 66 20 63 6f 6d 70 61 72 69 73 6f 6e  er of comparison
11570 20 69 73 0a 2a 2a 20 64 65 74 65 72 6d 69 6e 65   is.** determine
11580 64 20 62 79 20 74 68 65 20 6d 6f 73 74 20 72 65  d by the most re
11590 63 65 6e 74 20 4f 50 5f 50 65 72 6d 75 74 61 74  cent OP_Permutat
115a0 69 6f 6e 20 6f 70 65 72 61 74 6f 72 2e 20 20 49  ion operator.  I
115b0 66 20 74 68 65 0a 2a 2a 20 4f 50 46 4c 41 47 5f  f the.** OPFLAG_
115c0 50 45 52 4d 55 54 45 20 62 69 74 20 69 73 20 63  PERMUTE bit is c
115d0 6c 65 61 72 2c 20 74 68 65 6e 20 72 65 67 69 73  lear, then regis
115e0 74 65 72 20 61 72 65 20 63 6f 6d 70 61 72 65 64  ter are compared
115f0 20 69 6e 20 73 65 71 75 65 6e 74 69 61 6c 0a 2a   in sequential.*
11600 2a 20 6f 72 64 65 72 2e 0a 2a 2a 0a 2a 2a 20 50  * order..**.** P
11610 34 20 69 73 20 61 20 4b 65 79 49 6e 66 6f 20 73  4 is a KeyInfo s
11620 74 72 75 63 74 75 72 65 20 74 68 61 74 20 64 65  tructure that de
11630 66 69 6e 65 73 20 63 6f 6c 6c 61 74 69 6e 67 20  fines collating 
11640 73 65 71 75 65 6e 63 65 73 20 61 6e 64 20 73 6f  sequences and so
11650 72 74 0a 2a 2a 20 6f 72 64 65 72 73 20 66 6f 72  rt.** orders for
11660 20 74 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e 2e   the comparison.
11670 20 20 54 68 65 20 70 65 72 6d 75 74 61 74 69 6f    The permutatio
11680 6e 20 61 70 70 6c 69 65 73 20 74 6f 20 72 65 67  n applies to reg
11690 69 73 74 65 72 73 0a 2a 2a 20 6f 6e 6c 79 2e 20  isters.** only. 
116a0 20 54 68 65 20 4b 65 79 49 6e 66 6f 20 65 6c 65   The KeyInfo ele
116b0 6d 65 6e 74 73 20 61 72 65 20 75 73 65 64 20 73  ments are used s
116c0 65 71 75 65 6e 74 69 61 6c 6c 79 2e 0a 2a 2a 0a  equentially..**.
116d0 2a 2a 20 54 68 65 20 63 6f 6d 70 61 72 69 73 6f  ** The compariso
116e0 6e 20 69 73 20 61 20 73 6f 72 74 20 63 6f 6d 70  n is a sort comp
116f0 61 72 69 73 6f 6e 2c 20 73 6f 20 4e 55 4c 4c 73  arison, so NULLs
11700 20 63 6f 6d 70 61 72 65 20 65 71 75 61 6c 2c 0a   compare equal,.
11710 2a 2a 20 4e 55 4c 4c 73 20 61 72 65 20 6c 65 73  ** NULLs are les
11720 73 20 74 68 61 6e 20 6e 75 6d 62 65 72 73 2c 20  s than numbers, 
11730 6e 75 6d 62 65 72 73 20 61 72 65 20 6c 65 73 73  numbers are less
11740 20 74 68 61 6e 20 73 74 72 69 6e 67 73 2c 0a 2a   than strings,.*
11750 2a 20 61 6e 64 20 73 74 72 69 6e 67 73 20 61 72  * and strings ar
11760 65 20 6c 65 73 73 20 74 68 61 6e 20 62 6c 6f 62  e less than blob
11770 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 6f  s..*/.case OP_Co
11780 6d 70 61 72 65 3a 20 7b 0a 20 20 69 6e 74 20 6e  mpare: {.  int n
11790 3b 0a 20 20 69 6e 74 20 69 3b 0a 20 20 69 6e 74  ;.  int i;.  int
117a0 20 70 31 3b 0a 20 20 69 6e 74 20 70 32 3b 0a 20   p1;.  int p2;. 
117b0 20 63 6f 6e 73 74 20 4b 65 79 49 6e 66 6f 20 2a   const KeyInfo *
117c0 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 69 6e 74 20  pKeyInfo;.  int 
117d0 69 64 78 3b 0a 20 20 43 6f 6c 6c 53 65 71 20 2a  idx;.  CollSeq *
117e0 70 43 6f 6c 6c 3b 20 20 20 20 2f 2a 20 43 6f 6c  pColl;    /* Col
117f0 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 20  lating sequence 
11800 74 6f 20 75 73 65 20 6f 6e 20 74 68 69 73 20 74  to use on this t
11810 65 72 6d 20 2a 2f 0a 20 20 69 6e 74 20 62 52 65  erm */.  int bRe
11820 76 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54  v;          /* T
11830 72 75 65 20 66 6f 72 20 44 45 53 43 45 4e 44 49  rue for DESCENDI
11840 4e 47 20 73 6f 72 74 20 6f 72 64 65 72 20 2a 2f  NG sort order */
11850 0a 20 20 69 6e 74 20 2a 61 50 65 72 6d 75 74 65  .  int *aPermute
11860 3b 20 20 20 20 20 2f 2a 20 54 68 65 20 70 65 72  ;     /* The per
11870 6d 75 74 61 74 69 6f 6e 20 2a 2f 0a 0a 20 20 69  mutation */..  i
11880 66 28 20 28 70 4f 70 2d 3e 70 35 20 26 20 4f 50  f( (pOp->p5 & OP
11890 46 4c 41 47 5f 50 45 52 4d 55 54 45 29 3d 3d 30  FLAG_PERMUTE)==0
118a0 20 29 7b 0a 20 20 20 20 61 50 65 72 6d 75 74 65   ){.    aPermute
118b0 20 3d 20 30 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20   = 0;.  }else{. 
118c0 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 3e 61     assert( pOp>a
118d0 4f 70 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74  Op );.    assert
118e0 28 20 70 4f 70 5b 2d 31 5d 2e 6f 70 63 6f 64 65  ( pOp[-1].opcode
118f0 3d 3d 4f 50 5f 50 65 72 6d 75 74 61 74 69 6f 6e  ==OP_Permutation
11900 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20   );.    assert( 
11910 70 4f 70 5b 2d 31 5d 2e 70 34 74 79 70 65 3d 3d  pOp[-1].p4type==
11920 50 34 5f 49 4e 54 41 52 52 41 59 20 29 3b 0a 20  P4_INTARRAY );. 
11930 20 20 20 61 50 65 72 6d 75 74 65 20 3d 20 70 4f     aPermute = pO
11940 70 5b 2d 31 5d 2e 70 34 2e 61 69 20 2b 20 31 3b  p[-1].p4.ai + 1;
11950 0a 20 20 20 20 61 73 73 65 72 74 28 20 61 50 65  .    assert( aPe
11960 72 6d 75 74 65 21 3d 30 20 29 3b 0a 20 20 7d 0a  rmute!=0 );.  }.
11970 20 20 6e 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20    n = pOp->p3;. 
11980 20 70 4b 65 79 49 6e 66 6f 20 3d 20 70 4f 70 2d   pKeyInfo = pOp-
11990 3e 70 34 2e 70 4b 65 79 49 6e 66 6f 3b 0a 20 20  >p4.pKeyInfo;.  
119a0 61 73 73 65 72 74 28 20 6e 3e 30 20 29 3b 0a 20  assert( n>0 );. 
119b0 20 61 73 73 65 72 74 28 20 70 4b 65 79 49 6e 66   assert( pKeyInf
119c0 6f 21 3d 30 20 29 3b 0a 20 20 70 31 20 3d 20 70  o!=0 );.  p1 = p
119d0 4f 70 2d 3e 70 31 3b 0a 20 20 70 32 20 3d 20 70  Op->p1;.  p2 = p
119e0 4f 70 2d 3e 70 32 3b 0a 23 69 66 64 65 66 20 53  Op->p2;.#ifdef S
119f0 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 69 66  QLITE_DEBUG.  if
11a00 28 20 61 50 65 72 6d 75 74 65 20 29 7b 0a 20 20  ( aPermute ){.  
11a10 20 20 69 6e 74 20 6b 2c 20 6d 78 20 3d 20 30 3b    int k, mx = 0;
11a20 0a 20 20 20 20 66 6f 72 28 6b 3d 30 3b 20 6b 3c  .    for(k=0; k<
11a30 6e 3b 20 6b 2b 2b 29 20 69 66 28 20 61 50 65 72  n; k++) if( aPer
11a40 6d 75 74 65 5b 6b 5d 3e 6d 78 20 29 20 6d 78 20  mute[k]>mx ) mx 
11a50 3d 20 61 50 65 72 6d 75 74 65 5b 6b 5d 3b 0a 20  = aPermute[k];. 
11a60 20 20 20 61 73 73 65 72 74 28 20 70 31 3e 30 20     assert( p1>0 
11a70 26 26 20 70 31 2b 6d 78 3c 3d 28 70 2d 3e 6e 4d  && p1+mx<=(p->nM
11a80 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f  em+1 - p->nCurso
11a90 72 29 2b 31 20 29 3b 0a 20 20 20 20 61 73 73 65  r)+1 );.    asse
11aa0 72 74 28 20 70 32 3e 30 20 26 26 20 70 32 2b 6d  rt( p2>0 && p2+m
11ab0 78 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20  x<=(p->nMem+1 - 
11ac0 70 2d 3e 6e 43 75 72 73 6f 72 29 2b 31 20 29 3b  p->nCursor)+1 );
11ad0 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73  .  }else{.    as
11ae0 73 65 72 74 28 20 70 31 3e 30 20 26 26 20 70 31  sert( p1>0 && p1
11af0 2b 6e 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d  +n<=(p->nMem+1 -
11b00 20 70 2d 3e 6e 43 75 72 73 6f 72 29 2b 31 20 29   p->nCursor)+1 )
11b10 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 32  ;.    assert( p2
11b20 3e 30 20 26 26 20 70 32 2b 6e 3c 3d 28 70 2d 3e  >0 && p2+n<=(p->
11b30 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72  nMem+1 - p->nCur
11b40 73 6f 72 29 2b 31 20 29 3b 0a 20 20 7d 0a 23 65  sor)+1 );.  }.#e
11b50 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 44  ndif /* SQLITE_D
11b60 45 42 55 47 20 2a 2f 0a 20 20 66 6f 72 28 69 3d  EBUG */.  for(i=
11b70 30 3b 20 69 3c 6e 3b 20 69 2b 2b 29 7b 0a 20 20  0; i<n; i++){.  
11b80 20 20 69 64 78 20 3d 20 61 50 65 72 6d 75 74 65    idx = aPermute
11b90 20 3f 20 61 50 65 72 6d 75 74 65 5b 69 5d 20 3a   ? aPermute[i] :
11ba0 20 69 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20   i;.    assert( 
11bb0 6d 65 6d 49 73 56 61 6c 69 64 28 26 61 4d 65 6d  memIsValid(&aMem
11bc0 5b 70 31 2b 69 64 78 5d 29 20 29 3b 0a 20 20 20  [p1+idx]) );.   
11bd0 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61   assert( memIsVa
11be0 6c 69 64 28 26 61 4d 65 6d 5b 70 32 2b 69 64 78  lid(&aMem[p2+idx
11bf0 5d 29 20 29 3b 0a 20 20 20 20 52 45 47 49 53 54  ]) );.    REGIST
11c00 45 52 5f 54 52 41 43 45 28 70 31 2b 69 64 78 2c  ER_TRACE(p1+idx,
11c10 20 26 61 4d 65 6d 5b 70 31 2b 69 64 78 5d 29 3b   &aMem[p1+idx]);
11c20 0a 20 20 20 20 52 45 47 49 53 54 45 52 5f 54 52  .    REGISTER_TR
11c30 41 43 45 28 70 32 2b 69 64 78 2c 20 26 61 4d 65  ACE(p2+idx, &aMe
11c40 6d 5b 70 32 2b 69 64 78 5d 29 3b 0a 20 20 20 20  m[p2+idx]);.    
11c50 61 73 73 65 72 74 28 20 69 3c 70 4b 65 79 49 6e  assert( i<pKeyIn
11c60 66 6f 2d 3e 6e 4b 65 79 46 69 65 6c 64 20 29 3b  fo->nKeyField );
11c70 0a 20 20 20 20 70 43 6f 6c 6c 20 3d 20 70 4b 65  .    pColl = pKe
11c80 79 49 6e 66 6f 2d 3e 61 43 6f 6c 6c 5b 69 5d 3b  yInfo->aColl[i];
11c90 0a 20 20 20 20 62 52 65 76 20 3d 20 70 4b 65 79  .    bRev = pKey
11ca0 49 6e 66 6f 2d 3e 61 53 6f 72 74 4f 72 64 65 72  Info->aSortOrder
11cb0 5b 69 5d 3b 0a 20 20 20 20 69 43 6f 6d 70 61 72  [i];.    iCompar
11cc0 65 20 3d 20 73 71 6c 69 74 65 33 4d 65 6d 43 6f  e = sqlite3MemCo
11cd0 6d 70 61 72 65 28 26 61 4d 65 6d 5b 70 31 2b 69  mpare(&aMem[p1+i
11ce0 64 78 5d 2c 20 26 61 4d 65 6d 5b 70 32 2b 69 64  dx], &aMem[p2+id
11cf0 78 5d 2c 20 70 43 6f 6c 6c 29 3b 0a 20 20 20 20  x], pColl);.    
11d00 69 66 28 20 69 43 6f 6d 70 61 72 65 20 29 7b 0a  if( iCompare ){.
11d10 20 20 20 20 20 20 69 66 28 20 62 52 65 76 20 29        if( bRev )
11d20 20 69 43 6f 6d 70 61 72 65 20 3d 20 2d 69 43 6f   iCompare = -iCo
11d30 6d 70 61 72 65 3b 0a 20 20 20 20 20 20 62 72 65  mpare;.      bre
11d40 61 6b 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20  ak;.    }.  }.  
11d50 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
11d60 6f 64 65 3a 20 4a 75 6d 70 20 50 31 20 50 32 20  ode: Jump P1 P2 
11d70 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4a 75 6d  P3 * *.**.** Jum
11d80 70 20 74 6f 20 74 68 65 20 69 6e 73 74 72 75 63  p to the instruc
11d90 74 69 6f 6e 20 61 74 20 61 64 64 72 65 73 73 20  tion at address 
11da0 50 31 2c 20 50 32 2c 20 6f 72 20 50 33 20 64 65  P1, P2, or P3 de
11db0 70 65 6e 64 69 6e 67 20 6f 6e 20 77 68 65 74 68  pending on wheth
11dc0 65 72 0a 2a 2a 20 69 6e 20 74 68 65 20 6d 6f 73  er.** in the mos
11dd0 74 20 72 65 63 65 6e 74 20 4f 50 5f 43 6f 6d 70  t recent OP_Comp
11de0 61 72 65 20 69 6e 73 74 72 75 63 74 69 6f 6e 20  are instruction 
11df0 74 68 65 20 50 31 20 76 65 63 74 6f 72 20 77 61  the P1 vector wa
11e00 73 20 6c 65 73 73 20 74 68 61 6e 0a 2a 2a 20 65  s less than.** e
11e10 71 75 61 6c 20 74 6f 2c 20 6f 72 20 67 72 65 61  qual to, or grea
11e20 74 65 72 20 74 68 61 6e 20 74 68 65 20 50 32 20  ter than the P2 
11e30 76 65 63 74 6f 72 2c 20 72 65 73 70 65 63 74 69  vector, respecti
11e40 76 65 6c 79 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  vely..*/.case OP
11e50 5f 4a 75 6d 70 3a 20 7b 20 20 20 20 20 20 20 20  _Jump: {        
11e60 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a       /* jump */.
11e70 20 20 69 66 28 20 69 43 6f 6d 70 61 72 65 3c 30    if( iCompare<0
11e80 20 29 7b 0a 20 20 20 20 56 64 62 65 42 72 61 6e   ){.    VdbeBran
11e90 63 68 54 61 6b 65 6e 28 30 2c 34 29 3b 20 70 4f  chTaken(0,4); pO
11ea0 70 20 3d 20 26 61 4f 70 5b 70 4f 70 2d 3e 70 31  p = &aOp[pOp->p1
11eb0 20 2d 20 31 5d 3b 0a 20 20 7d 65 6c 73 65 20 69   - 1];.  }else i
11ec0 66 28 20 69 43 6f 6d 70 61 72 65 3d 3d 30 20 29  f( iCompare==0 )
11ed0 7b 0a 20 20 20 20 56 64 62 65 42 72 61 6e 63 68  {.    VdbeBranch
11ee0 54 61 6b 65 6e 28 31 2c 34 29 3b 20 70 4f 70 20  Taken(1,4); pOp 
11ef0 3d 20 26 61 4f 70 5b 70 4f 70 2d 3e 70 32 20 2d  = &aOp[pOp->p2 -
11f00 20 31 5d 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20   1];.  }else{.  
11f10 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65    VdbeBranchTake
11f20 6e 28 32 2c 34 29 3b 20 70 4f 70 20 3d 20 26 61  n(2,4); pOp = &a
11f30 4f 70 5b 70 4f 70 2d 3e 70 33 20 2d 20 31 5d 3b  Op[pOp->p3 - 1];
11f40 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
11f50 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 41 6e 64 20  ./* Opcode: And 
11f60 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20  P1 P2 P3 * *.** 
11f70 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 33 5d 3d  Synopsis: r[P3]=
11f80 28 72 5b 50 31 5d 20 26 26 20 72 5b 50 32 5d 29  (r[P1] && r[P2])
11f90 0a 2a 2a 0a 2a 2a 20 54 61 6b 65 20 74 68 65 20  .**.** Take the 
11fa0 6c 6f 67 69 63 61 6c 20 41 4e 44 20 6f 66 20 74  logical AND of t
11fb0 68 65 20 76 61 6c 75 65 73 20 69 6e 20 72 65 67  he values in reg
11fc0 69 73 74 65 72 73 20 50 31 20 61 6e 64 20 50 32  isters P1 and P2
11fd0 20 61 6e 64 0a 2a 2a 20 77 72 69 74 65 20 74 68   and.** write th
11fe0 65 20 72 65 73 75 6c 74 20 69 6e 74 6f 20 72 65  e result into re
11ff0 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a 0a 2a 2a  gister P3..**.**
12000 20 49 66 20 65 69 74 68 65 72 20 50 31 20 6f 72   If either P1 or
12010 20 50 32 20 69 73 20 30 20 28 66 61 6c 73 65 29   P2 is 0 (false)
12020 20 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c 74   then the result
12030 20 69 73 20 30 20 65 76 65 6e 20 69 66 0a 2a 2a   is 0 even if.**
12040 20 74 68 65 20 6f 74 68 65 72 20 69 6e 70 75 74   the other input
12050 20 69 73 20 4e 55 4c 4c 2e 20 20 41 20 4e 55 4c   is NULL.  A NUL
12060 4c 20 61 6e 64 20 74 72 75 65 20 6f 72 20 74 77  L and true or tw
12070 6f 20 4e 55 4c 4c 73 20 67 69 76 65 0a 2a 2a 20  o NULLs give.** 
12080 61 20 4e 55 4c 4c 20 6f 75 74 70 75 74 2e 0a 2a  a NULL output..*
12090 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f 72 20  /./* Opcode: Or 
120a0 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20  P1 P2 P3 * *.** 
120b0 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 33 5d 3d  Synopsis: r[P3]=
120c0 28 72 5b 50 31 5d 20 7c 7c 20 72 5b 50 32 5d 29  (r[P1] || r[P2])
120d0 0a 2a 2a 0a 2a 2a 20 54 61 6b 65 20 74 68 65 20  .**.** Take the 
120e0 6c 6f 67 69 63 61 6c 20 4f 52 20 6f 66 20 74 68  logical OR of th
120f0 65 20 76 61 6c 75 65 73 20 69 6e 20 72 65 67 69  e values in regi
12100 73 74 65 72 20 50 31 20 61 6e 64 20 50 32 20 61  ster P1 and P2 a
12110 6e 64 0a 2a 2a 20 73 74 6f 72 65 20 74 68 65 20  nd.** store the 
12120 61 6e 73 77 65 72 20 69 6e 20 72 65 67 69 73 74  answer in regist
12130 65 72 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  er P3..**.** If 
12140 65 69 74 68 65 72 20 50 31 20 6f 72 20 50 32 20  either P1 or P2 
12150 69 73 20 6e 6f 6e 7a 65 72 6f 20 28 74 72 75 65  is nonzero (true
12160 29 20 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c  ) then the resul
12170 74 20 69 73 20 31 20 28 74 72 75 65 29 0a 2a 2a  t is 1 (true).**
12180 20 65 76 65 6e 20 69 66 20 74 68 65 20 6f 74 68   even if the oth
12190 65 72 20 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c  er input is NULL
121a0 2e 20 20 41 20 4e 55 4c 4c 20 61 6e 64 20 66 61  .  A NULL and fa
121b0 6c 73 65 20 6f 72 20 74 77 6f 20 4e 55 4c 4c 73  lse or two NULLs
121c0 0a 2a 2a 20 67 69 76 65 20 61 20 4e 55 4c 4c 20  .** give a NULL 
121d0 6f 75 74 70 75 74 2e 0a 2a 2f 0a 63 61 73 65 20  output..*/.case 
121e0 4f 50 5f 41 6e 64 3a 20 20 20 20 20 20 20 20 20  OP_And:         
121f0 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20       /* same as 
12200 54 4b 5f 41 4e 44 2c 20 69 6e 31 2c 20 69 6e 32  TK_AND, in1, in2
12210 2c 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20 4f  , out3 */.case O
12220 50 5f 4f 72 3a 20 7b 20 20 20 20 20 20 20 20 20  P_Or: {         
12230 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54      /* same as T
12240 4b 5f 4f 52 2c 20 69 6e 31 2c 20 69 6e 32 2c 20  K_OR, in1, in2, 
12250 6f 75 74 33 20 2a 2f 0a 20 20 69 6e 74 20 76 31  out3 */.  int v1
12260 3b 20 20 20 20 2f 2a 20 4c 65 66 74 20 6f 70 65  ;    /* Left ope
12270 72 61 6e 64 3a 20 20 30 3d 3d 46 41 4c 53 45 2c  rand:  0==FALSE,
12280 20 31 3d 3d 54 52 55 45 2c 20 32 3d 3d 55 4e 4b   1==TRUE, 2==UNK
12290 4e 4f 57 4e 20 6f 72 20 4e 55 4c 4c 20 2a 2f 0a  NOWN or NULL */.
122a0 20 20 69 6e 74 20 76 32 3b 20 20 20 20 2f 2a 20    int v2;    /* 
122b0 52 69 67 68 74 20 6f 70 65 72 61 6e 64 3a 20 30  Right operand: 0
122c0 3d 3d 46 41 4c 53 45 2c 20 31 3d 3d 54 52 55 45  ==FALSE, 1==TRUE
122d0 2c 20 32 3d 3d 55 4e 4b 4e 4f 57 4e 20 6f 72 20  , 2==UNKNOWN or 
122e0 4e 55 4c 4c 20 2a 2f 0a 0a 20 20 76 31 20 3d 20  NULL */..  v1 = 
122f0 73 71 6c 69 74 65 33 56 64 62 65 42 6f 6f 6c 65  sqlite3VdbeBoole
12300 61 6e 56 61 6c 75 65 28 26 61 4d 65 6d 5b 70 4f  anValue(&aMem[pO
12310 70 2d 3e 70 31 5d 2c 20 32 29 3b 0a 20 20 76 32  p->p1], 2);.  v2
12320 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 42 6f   = sqlite3VdbeBo
12330 6f 6c 65 61 6e 56 61 6c 75 65 28 26 61 4d 65 6d  oleanValue(&aMem
12340 5b 70 4f 70 2d 3e 70 32 5d 2c 20 32 29 3b 0a 20  [pOp->p2], 2);. 
12350 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65   if( pOp->opcode
12360 3d 3d 4f 50 5f 41 6e 64 20 29 7b 0a 20 20 20 20  ==OP_And ){.    
12370 73 74 61 74 69 63 20 63 6f 6e 73 74 20 75 6e 73  static const uns
12380 69 67 6e 65 64 20 63 68 61 72 20 61 6e 64 5f 6c  igned char and_l
12390 6f 67 69 63 5b 5d 20 3d 20 7b 20 30 2c 20 30 2c  ogic[] = { 0, 0,
123a0 20 30 2c 20 30 2c 20 31 2c 20 32 2c 20 30 2c 20   0, 0, 1, 2, 0, 
123b0 32 2c 20 32 20 7d 3b 0a 20 20 20 20 76 31 20 3d  2, 2 };.    v1 =
123c0 20 61 6e 64 5f 6c 6f 67 69 63 5b 76 31 2a 33 2b   and_logic[v1*3+
123d0 76 32 5d 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  v2];.  }else{.  
123e0 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20 75    static const u
123f0 6e 73 69 67 6e 65 64 20 63 68 61 72 20 6f 72 5f  nsigned char or_
12400 6c 6f 67 69 63 5b 5d 20 3d 20 7b 20 30 2c 20 31  logic[] = { 0, 1
12410 2c 20 32 2c 20 31 2c 20 31 2c 20 31 2c 20 32 2c  , 2, 1, 1, 1, 2,
12420 20 31 2c 20 32 20 7d 3b 0a 20 20 20 20 76 31 20   1, 2 };.    v1 
12430 3d 20 6f 72 5f 6c 6f 67 69 63 5b 76 31 2a 33 2b  = or_logic[v1*3+
12440 76 32 5d 3b 0a 20 20 7d 0a 20 20 70 4f 75 74 20  v2];.  }.  pOut 
12450 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  = &aMem[pOp->p3]
12460 3b 0a 20 20 69 66 28 20 76 31 3d 3d 32 20 29 7b  ;.  if( v1==2 ){
12470 0a 20 20 20 20 4d 65 6d 53 65 74 54 79 70 65 46  .    MemSetTypeF
12480 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 4e 75  lag(pOut, MEM_Nu
12490 6c 6c 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  ll);.  }else{.  
124a0 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 76 31    pOut->u.i = v1
124b0 3b 0a 20 20 20 20 4d 65 6d 53 65 74 54 79 70 65  ;.    MemSetType
124c0 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 49  Flag(pOut, MEM_I
124d0 6e 74 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  nt);.  }.  break
124e0 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
124f0 49 73 54 72 75 65 20 50 31 20 50 32 20 50 33 20  IsTrue P1 P2 P3 
12500 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73  P4 *.** Synopsis
12510 3a 20 72 5b 50 32 5d 20 3d 20 63 6f 61 6c 65 73  : r[P2] = coales
12520 63 65 28 72 5b 50 31 5d 3d 3d 54 52 55 45 2c 50  ce(r[P1]==TRUE,P
12530 33 29 20 5e 20 50 34 0a 2a 2a 0a 2a 2a 20 54 68  3) ^ P4.**.** Th
12540 69 73 20 6f 70 63 6f 64 65 20 69 6d 70 6c 65 6d  is opcode implem
12550 65 6e 74 73 20 74 68 65 20 49 53 20 54 52 55 45  ents the IS TRUE
12560 2c 20 49 53 20 46 41 4c 53 45 2c 20 49 53 20 4e  , IS FALSE, IS N
12570 4f 54 20 54 52 55 45 2c 20 61 6e 64 0a 2a 2a 20  OT TRUE, and.** 
12580 49 53 20 4e 4f 54 20 46 41 4c 53 45 20 6f 70 65  IS NOT FALSE ope
12590 72 61 74 6f 72 73 2e 0a 2a 2a 0a 2a 2a 20 49 6e  rators..**.** In
125a0 74 65 72 70 72 65 74 20 74 68 65 20 76 61 6c 75  terpret the valu
125b0 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31  e in register P1
125c0 20 61 73 20 61 20 62 6f 6f 6c 65 61 6e 20 76 61   as a boolean va
125d0 6c 75 65 2e 20 20 53 74 6f 72 65 20 74 68 61 74  lue.  Store that
125e0 0a 2a 2a 20 62 6f 6f 6c 65 61 6e 20 28 61 20 30  .** boolean (a 0
125f0 20 6f 72 20 31 29 20 69 6e 20 72 65 67 69 73 74   or 1) in regist
12600 65 72 20 50 32 2e 20 20 4f 72 20 69 66 20 74 68  er P2.  Or if th
12610 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73  e value in regis
12620 74 65 72 20 50 31 20 69 73 20 0a 2a 2a 20 4e 55  ter P1 is .** NU
12630 4c 4c 2c 20 74 68 65 6e 20 74 68 65 20 50 33 20  LL, then the P3 
12640 69 73 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67  is stored in reg
12650 69 73 74 65 72 20 50 32 2e 20 20 49 6e 76 65 72  ister P2.  Inver
12660 74 20 74 68 65 20 61 6e 73 77 65 72 20 69 66 20  t the answer if 
12670 50 34 0a 2a 2a 20 69 73 20 31 2e 0a 2a 2a 0a 2a  P4.** is 1..**.*
12680 2a 20 54 68 65 20 6c 6f 67 69 63 20 69 73 20 73  * The logic is s
12690 75 6d 6d 61 72 69 7a 65 64 20 6c 69 6b 65 20 74  ummarized like t
126a0 68 69 73 3a 0a 2a 2a 0a 2a 2a 20 3c 75 6c 3e 20  his:.**.** <ul> 
126b0 0a 2a 2a 20 3c 6c 69 3e 20 49 66 20 50 33 3d 3d  .** <li> If P3==
126c0 30 20 61 6e 64 20 50 34 3d 3d 30 20 20 74 68 65  0 and P4==0  the
126d0 6e 20 20 72 5b 50 32 5d 20 3a 3d 20 72 5b 50 31  n  r[P2] := r[P1
126e0 5d 20 49 53 20 54 52 55 45 0a 2a 2a 20 3c 6c 69  ] IS TRUE.** <li
126f0 3e 20 49 66 20 50 33 3d 3d 31 20 61 6e 64 20 50  > If P3==1 and P
12700 34 3d 3d 31 20 20 74 68 65 6e 20 20 72 5b 50 32  4==1  then  r[P2
12710 5d 20 3a 3d 20 72 5b 50 31 5d 20 49 53 20 46 41  ] := r[P1] IS FA
12720 4c 53 45 0a 2a 2a 20 3c 6c 69 3e 20 49 66 20 50  LSE.** <li> If P
12730 33 3d 3d 30 20 61 6e 64 20 50 34 3d 3d 31 20 20  3==0 and P4==1  
12740 74 68 65 6e 20 20 72 5b 50 32 5d 20 3a 3d 20 72  then  r[P2] := r
12750 5b 50 31 5d 20 49 53 20 4e 4f 54 20 54 52 55 45  [P1] IS NOT TRUE
12760 0a 2a 2a 20 3c 6c 69 3e 20 49 66 20 50 33 3d 3d  .** <li> If P3==
12770 31 20 61 6e 64 20 50 34 3d 3d 30 20 20 74 68 65  1 and P4==0  the
12780 6e 20 20 72 5b 50 32 5d 20 3a 3d 20 72 5b 50 31  n  r[P2] := r[P1
12790 5d 20 49 53 20 4e 4f 54 20 46 41 4c 53 45 0a 2a  ] IS NOT FALSE.*
127a0 2a 20 3c 2f 75 6c 3e 0a 2a 2f 0a 63 61 73 65 20  * </ul>.*/.case 
127b0 4f 50 5f 49 73 54 72 75 65 3a 20 7b 20 20 20 20  OP_IsTrue: {    
127c0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e             /* in
127d0 31 2c 20 6f 75 74 32 20 2a 2f 0a 20 20 61 73 73  1, out2 */.  ass
127e0 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65  ert( pOp->p4type
127f0 3d 3d 50 34 5f 49 4e 54 33 32 20 29 3b 0a 20 20  ==P4_INT32 );.  
12800 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 2e  assert( pOp->p4.
12810 69 3d 3d 30 20 7c 7c 20 70 4f 70 2d 3e 70 34 2e  i==0 || pOp->p4.
12820 69 3d 3d 31 20 29 3b 0a 20 20 61 73 73 65 72 74  i==1 );.  assert
12830 28 20 70 4f 70 2d 3e 70 33 3d 3d 30 20 7c 7c 20  ( pOp->p3==0 || 
12840 70 4f 70 2d 3e 70 33 3d 3d 31 20 29 3b 0a 20 20  pOp->p3==1 );.  
12850 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65  sqlite3VdbeMemSe
12860 74 49 6e 74 36 34 28 26 61 4d 65 6d 5b 70 4f 70  tInt64(&aMem[pOp
12870 2d 3e 70 32 5d 2c 0a 20 20 20 20 20 20 73 71 6c  ->p2],.      sql
12880 69 74 65 33 56 64 62 65 42 6f 6f 6c 65 61 6e 56  ite3VdbeBooleanV
12890 61 6c 75 65 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e  alue(&aMem[pOp->
128a0 70 31 5d 2c 20 70 4f 70 2d 3e 70 33 29 20 5e 20  p1], pOp->p3) ^ 
128b0 70 4f 70 2d 3e 70 34 2e 69 29 3b 0a 20 20 62 72  pOp->p4.i);.  br
128c0 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
128d0 65 3a 20 4e 6f 74 20 50 31 20 50 32 20 2a 20 2a  e: Not P1 P2 * *
128e0 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
128f0 72 5b 50 32 5d 3d 20 21 72 5b 50 31 5d 0a 2a 2a  r[P2]= !r[P1].**
12900 0a 2a 2a 20 49 6e 74 65 72 70 72 65 74 20 74 68  .** Interpret th
12910 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73  e value in regis
12920 74 65 72 20 50 31 20 61 73 20 61 20 62 6f 6f 6c  ter P1 as a bool
12930 65 61 6e 20 76 61 6c 75 65 2e 20 20 53 74 6f 72  ean value.  Stor
12940 65 20 74 68 65 0a 2a 2a 20 62 6f 6f 6c 65 61 6e  e the.** boolean
12950 20 63 6f 6d 70 6c 65 6d 65 6e 74 20 69 6e 20 72   complement in r
12960 65 67 69 73 74 65 72 20 50 32 2e 20 20 49 66 20  egister P2.  If 
12970 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67  the value in reg
12980 69 73 74 65 72 20 50 31 20 69 73 20 0a 2a 2a 20  ister P1 is .** 
12990 4e 55 4c 4c 2c 20 74 68 65 6e 20 61 20 4e 55 4c  NULL, then a NUL
129a0 4c 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 50  L is stored in P
129b0 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 6f  2..*/.case OP_No
129c0 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20  t: {            
129d0 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54      /* same as T
129e0 4b 5f 4e 4f 54 2c 20 69 6e 31 2c 20 6f 75 74 32  K_NOT, in1, out2
129f0 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d   */.  pIn1 = &aM
12a00 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70  em[pOp->p1];.  p
12a10 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  Out = &aMem[pOp-
12a20 3e 70 32 5d 3b 0a 20 20 69 66 28 20 28 70 49 6e  >p2];.  if( (pIn
12a30 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e  1->flags & MEM_N
12a40 75 6c 6c 29 3d 3d 30 20 29 7b 0a 20 20 20 20 73  ull)==0 ){.    s
12a50 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74  qlite3VdbeMemSet
12a60 49 6e 74 36 34 28 70 4f 75 74 2c 20 21 73 71 6c  Int64(pOut, !sql
12a70 69 74 65 33 56 64 62 65 42 6f 6f 6c 65 61 6e 56  ite3VdbeBooleanV
12a80 61 6c 75 65 28 70 49 6e 31 2c 30 29 29 3b 0a 20  alue(pIn1,0));. 
12a90 20 7d 65 6c 73 65 7b 0a 20 20 20 20 73 71 6c 69   }else{.    sqli
12aa0 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c  te3VdbeMemSetNul
12ab0 6c 28 70 4f 75 74 29 3b 0a 20 20 7d 0a 20 20 62  l(pOut);.  }.  b
12ac0 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
12ad0 64 65 3a 20 42 69 74 4e 6f 74 20 50 31 20 50 32  de: BitNot P1 P2
12ae0 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73   * * *.** Synops
12af0 69 73 3a 20 72 5b 50 32 5d 3d 20 7e 72 5b 50 31  is: r[P2]= ~r[P1
12b00 5d 0a 2a 2a 0a 2a 2a 20 49 6e 74 65 72 70 72 65  ].**.** Interpre
12b10 74 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66  t the content of
12b20 20 72 65 67 69 73 74 65 72 20 50 31 20 61 73 20   register P1 as 
12b30 61 6e 20 69 6e 74 65 67 65 72 2e 20 20 53 74 6f  an integer.  Sto
12b40 72 65 20 74 68 65 0a 2a 2a 20 6f 6e 65 73 2d 63  re the.** ones-c
12b50 6f 6d 70 6c 65 6d 65 6e 74 20 6f 66 20 74 68 65  omplement of the
12b60 20 50 31 20 76 61 6c 75 65 20 69 6e 74 6f 20 72   P1 value into r
12b70 65 67 69 73 74 65 72 20 50 32 2e 20 20 49 66 20  egister P2.  If 
12b80 50 31 20 68 6f 6c 64 73 0a 2a 2a 20 61 20 4e 55  P1 holds.** a NU
12b90 4c 4c 20 74 68 65 6e 20 73 74 6f 72 65 20 61 20  LL then store a 
12ba0 4e 55 4c 4c 20 69 6e 20 50 32 2e 0a 2a 2f 0a 63  NULL in P2..*/.c
12bb0 61 73 65 20 4f 50 5f 42 69 74 4e 6f 74 3a 20 7b  ase OP_BitNot: {
12bc0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
12bd0 73 61 6d 65 20 61 73 20 54 4b 5f 42 49 54 4e 4f  same as TK_BITNO
12be0 54 2c 20 69 6e 31 2c 20 6f 75 74 32 20 2a 2f 0a  T, in1, out2 */.
12bf0 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70    pIn1 = &aMem[p
12c00 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 4f 75 74 20  Op->p1];.  pOut 
12c10 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d  = &aMem[pOp->p2]
12c20 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d  ;.  sqlite3VdbeM
12c30 65 6d 53 65 74 4e 75 6c 6c 28 70 4f 75 74 29 3b  emSetNull(pOut);
12c40 0a 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c  .  if( (pIn1->fl
12c50 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29 3d  ags & MEM_Null)=
12c60 3d 30 20 29 7b 0a 20 20 20 20 70 4f 75 74 2d 3e  =0 ){.    pOut->
12c70 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b  flags = MEM_Int;
12c80 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d  .    pOut->u.i =
12c90 20 7e 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74   ~sqlite3VdbeInt
12ca0 56 61 6c 75 65 28 70 49 6e 31 29 3b 0a 20 20 7d  Value(pIn1);.  }
12cb0 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
12cc0 4f 70 63 6f 64 65 3a 20 4f 6e 63 65 20 50 31 20  Opcode: Once P1 
12cd0 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 46  P2 * * *.**.** F
12ce0 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20 74  all through to t
12cf0 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63 74  he next instruct
12d00 69 6f 6e 20 74 68 65 20 66 69 72 73 74 20 74 69  ion the first ti
12d10 6d 65 20 74 68 69 73 20 6f 70 63 6f 64 65 20 69  me this opcode i
12d20 73 0a 2a 2a 20 65 6e 63 6f 75 6e 74 65 72 65 64  s.** encountered
12d30 20 6f 6e 20 65 61 63 68 20 69 6e 76 6f 63 61 74   on each invocat
12d40 69 6f 6e 20 6f 66 20 74 68 65 20 62 79 74 65 2d  ion of the byte-
12d50 63 6f 64 65 20 70 72 6f 67 72 61 6d 2e 20 20 4a  code program.  J
12d60 75 6d 70 20 74 6f 20 50 32 0a 2a 2a 20 6f 6e 20  ump to P2.** on 
12d70 74 68 65 20 73 65 63 6f 6e 64 20 61 6e 64 20 61  the second and a
12d80 6c 6c 20 73 75 62 73 65 71 75 65 6e 74 20 65 6e  ll subsequent en
12d90 63 6f 75 6e 74 65 72 73 20 64 75 72 69 6e 67 20  counters during 
12da0 74 68 65 20 73 61 6d 65 20 69 6e 76 6f 63 61 74  the same invocat
12db0 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 6f 70 2d 6c  ion..**.** Top-l
12dc0 65 76 65 6c 20 70 72 6f 67 72 61 6d 73 20 64 65  evel programs de
12dd0 74 65 72 6d 69 6e 65 20 66 69 72 73 74 20 69 6e  termine first in
12de0 76 6f 63 61 74 69 6f 6e 20 62 79 20 63 6f 6d 70  vocation by comp
12df0 61 72 69 6e 67 20 74 68 65 20 50 31 0a 2a 2a 20  aring the P1.** 
12e00 6f 70 65 72 61 6e 64 20 61 67 61 69 6e 73 74 20  operand against 
12e10 74 68 65 20 50 31 20 6f 70 65 72 61 6e 64 20 6f  the P1 operand o
12e20 6e 20 74 68 65 20 4f 50 5f 49 6e 69 74 20 6f 70  n the OP_Init op
12e30 63 6f 64 65 20 61 74 20 74 68 65 20 62 65 67 69  code at the begi
12e40 6e 6e 69 6e 67 0a 2a 2a 20 6f 66 20 74 68 65 20  nning.** of the 
12e50 70 72 6f 67 72 61 6d 2e 20 20 49 66 20 74 68 65  program.  If the
12e60 20 50 31 20 76 61 6c 75 65 73 20 64 69 66 66 65   P1 values diffe
12e70 72 2c 20 74 68 65 6e 20 66 61 6c 6c 20 74 68 72  r, then fall thr
12e80 6f 75 67 68 20 61 6e 64 20 6d 61 6b 65 0a 2a 2a  ough and make.**
12e90 20 74 68 65 20 50 31 20 6f 66 20 74 68 69 73 20   the P1 of this 
12ea0 6f 70 63 6f 64 65 20 65 71 75 61 6c 20 74 6f 20  opcode equal to 
12eb0 74 68 65 20 50 31 20 6f 66 20 4f 50 5f 49 6e 69  the P1 of OP_Ini
12ec0 74 2e 20 20 49 66 20 50 31 20 76 61 6c 75 65 73  t.  If P1 values
12ed0 20 61 72 65 0a 2a 2a 20 74 68 65 20 73 61 6d 65   are.** the same
12ee0 20 74 68 65 6e 20 74 61 6b 65 20 74 68 65 20 6a   then take the j
12ef0 75 6d 70 2e 0a 2a 2a 0a 2a 2a 20 46 6f 72 20 73  ump..**.** For s
12f00 75 62 70 72 6f 67 72 61 6d 73 2c 20 74 68 65 72  ubprograms, ther
12f10 65 20 69 73 20 61 20 62 69 74 6d 61 73 6b 20 69  e is a bitmask i
12f20 6e 20 74 68 65 20 56 64 62 65 46 72 61 6d 65 20  n the VdbeFrame 
12f30 74 68 61 74 20 64 65 74 65 72 6d 69 6e 65 73 0a  that determines.
12f40 2a 2a 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f  ** whether or no
12f50 74 20 74 68 65 20 6a 75 6d 70 20 73 68 6f 75 6c  t the jump shoul
12f60 64 20 62 65 20 74 61 6b 65 6e 2e 20 20 54 68 65  d be taken.  The
12f70 20 62 69 74 6d 61 73 6b 20 69 73 20 6e 65 63 65   bitmask is nece
12f80 73 73 61 72 79 0a 2a 2a 20 62 65 63 61 75 73 65  ssary.** because
12f90 20 74 68 65 20 73 65 6c 66 2d 61 6c 74 65 72 69   the self-alteri
12fa0 6e 67 20 63 6f 64 65 20 74 72 69 63 6b 20 64 6f  ng code trick do
12fb0 65 73 20 6e 6f 74 20 77 6f 72 6b 20 66 6f 72 20  es not work for 
12fc0 72 65 63 75 72 73 69 76 65 0a 2a 2a 20 74 72 69  recursive.** tri
12fd0 67 67 65 72 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f  ggers..*/.case O
12fe0 50 5f 4f 6e 63 65 3a 20 7b 20 20 20 20 20 20 20  P_Once: {       
12ff0 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f        /* jump */
13000 0a 20 20 75 33 32 20 69 41 64 64 72 3b 20 20 20  .  u32 iAddr;   
13010 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
13020 41 64 64 72 65 73 73 20 6f 66 20 74 68 69 73 20  Address of this 
13030 69 6e 73 74 72 75 63 74 69 6f 6e 20 2a 2f 0a 20  instruction */. 
13040 20 61 73 73 65 72 74 28 20 70 2d 3e 61 4f 70 5b   assert( p->aOp[
13050 30 5d 2e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 6e  0].opcode==OP_In
13060 69 74 20 29 3b 0a 20 20 69 66 28 20 70 2d 3e 70  it );.  if( p->p
13070 46 72 61 6d 65 20 29 7b 0a 20 20 20 20 69 41 64  Frame ){.    iAd
13080 64 72 20 3d 20 28 69 6e 74 29 28 70 4f 70 20 2d  dr = (int)(pOp -
13090 20 70 2d 3e 61 4f 70 29 3b 0a 20 20 20 20 69 66   p->aOp);.    if
130a0 28 20 28 70 2d 3e 70 46 72 61 6d 65 2d 3e 61 4f  ( (p->pFrame->aO
130b0 6e 63 65 5b 69 41 64 64 72 2f 38 5d 20 26 20 28  nce[iAddr/8] & (
130c0 31 3c 3c 28 69 41 64 64 72 20 26 20 37 29 29 29  1<<(iAddr & 7)))
130d0 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 56 64 62  !=0 ){.      Vdb
130e0 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 31 2c 20  eBranchTaken(1, 
130f0 32 29 3b 0a 20 20 20 20 20 20 67 6f 74 6f 20 6a  2);.      goto j
13100 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 20 20 7d  ump_to_p2;.    }
13110 0a 20 20 20 20 70 2d 3e 70 46 72 61 6d 65 2d 3e  .    p->pFrame->
13120 61 4f 6e 63 65 5b 69 41 64 64 72 2f 38 5d 20 7c  aOnce[iAddr/8] |
13130 3d 20 31 3c 3c 28 69 41 64 64 72 20 26 20 37 29  = 1<<(iAddr & 7)
13140 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 69  ;.  }else{.    i
13150 66 28 20 70 2d 3e 61 4f 70 5b 30 5d 2e 70 31 3d  f( p->aOp[0].p1=
13160 3d 70 4f 70 2d 3e 70 31 20 29 7b 0a 20 20 20 20  =pOp->p1 ){.    
13170 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65    VdbeBranchTake
13180 6e 28 31 2c 20 32 29 3b 0a 20 20 20 20 20 20 67  n(1, 2);.      g
13190 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a  oto jump_to_p2;.
131a0 20 20 20 20 7d 0a 20 20 7d 0a 20 20 56 64 62 65      }.  }.  Vdbe
131b0 42 72 61 6e 63 68 54 61 6b 65 6e 28 30 2c 20 32  BranchTaken(0, 2
131c0 29 3b 0a 20 20 70 4f 70 2d 3e 70 31 20 3d 20 70  );.  pOp->p1 = p
131d0 2d 3e 61 4f 70 5b 30 5d 2e 70 31 3b 0a 20 20 62  ->aOp[0].p1;.  b
131e0 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
131f0 64 65 3a 20 49 66 20 50 31 20 50 32 20 50 33 20  de: If P1 P2 P3 
13200 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70 20 74  * *.**.** Jump t
13210 6f 20 50 32 20 69 66 20 74 68 65 20 76 61 6c 75  o P2 if the valu
13220 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31  e in register P1
13230 20 69 73 20 74 72 75 65 2e 20 20 54 68 65 20 76   is true.  The v
13240 61 6c 75 65 0a 2a 2a 20 69 73 20 63 6f 6e 73 69  alue.** is consi
13250 64 65 72 65 64 20 74 72 75 65 20 69 66 20 69 74  dered true if it
13260 20 69 73 20 6e 75 6d 65 72 69 63 20 61 6e 64 20   is numeric and 
13270 6e 6f 6e 2d 7a 65 72 6f 2e 20 20 49 66 20 74 68  non-zero.  If th
13280 65 20 76 61 6c 75 65 0a 2a 2a 20 69 6e 20 50 31  e value.** in P1
13290 20 69 73 20 4e 55 4c 4c 20 74 68 65 6e 20 74 61   is NULL then ta
132a0 6b 65 20 74 68 65 20 6a 75 6d 70 20 69 66 20 61  ke the jump if a
132b0 6e 64 20 6f 6e 6c 79 20 69 66 20 50 33 20 69 73  nd only if P3 is
132c0 20 6e 6f 6e 2d 7a 65 72 6f 2e 0a 2a 2f 0a 63 61   non-zero..*/.ca
132d0 73 65 20 4f 50 5f 49 66 3a 20 20 7b 20 20 20 20  se OP_If:  {    
132e0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75             /* ju
132f0 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20 69 6e 74  mp, in1 */.  int
13300 20 63 3b 0a 20 20 63 20 3d 20 73 71 6c 69 74 65   c;.  c = sqlite
13310 33 56 64 62 65 42 6f 6f 6c 65 61 6e 56 61 6c 75  3VdbeBooleanValu
13320 65 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  e(&aMem[pOp->p1]
13330 2c 20 70 4f 70 2d 3e 70 33 29 3b 0a 20 20 56 64  , pOp->p3);.  Vd
13340 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 63 21  beBranchTaken(c!
13350 3d 30 2c 20 32 29 3b 0a 20 20 69 66 28 20 63 20  =0, 2);.  if( c 
13360 29 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70  ) goto jump_to_p
13370 32 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  2;.  break;.}../
13380 2a 20 4f 70 63 6f 64 65 3a 20 49 66 4e 6f 74 20  * Opcode: IfNot 
13390 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a  P1 P2 P3 * *.**.
133a0 2a 2a 20 4a 75 6d 70 20 74 6f 20 50 32 20 69 66  ** Jump to P2 if
133b0 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65   the value in re
133c0 67 69 73 74 65 72 20 50 31 20 69 73 20 46 61 6c  gister P1 is Fal
133d0 73 65 2e 20 20 54 68 65 20 76 61 6c 75 65 0a 2a  se.  The value.*
133e0 2a 20 69 73 20 63 6f 6e 73 69 64 65 72 65 64 20  * is considered 
133f0 66 61 6c 73 65 20 69 66 20 69 74 20 68 61 73 20  false if it has 
13400 61 20 6e 75 6d 65 72 69 63 20 76 61 6c 75 65 20  a numeric value 
13410 6f 66 20 7a 65 72 6f 2e 20 20 49 66 20 74 68 65  of zero.  If the
13420 20 76 61 6c 75 65 0a 2a 2a 20 69 6e 20 50 31 20   value.** in P1 
13430 69 73 20 4e 55 4c 4c 20 74 68 65 6e 20 74 61 6b  is NULL then tak
13440 65 20 74 68 65 20 6a 75 6d 70 20 69 66 20 61 6e  e the jump if an
13450 64 20 6f 6e 6c 79 20 69 66 20 50 33 20 69 73 20  d only if P3 is 
13460 6e 6f 6e 2d 7a 65 72 6f 2e 0a 2a 2f 0a 63 61 73  non-zero..*/.cas
13470 65 20 4f 50 5f 49 66 4e 6f 74 3a 20 7b 20 20 20  e OP_IfNot: {   
13480 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70           /* jump
13490 2c 20 69 6e 31 20 2a 2f 0a 20 20 69 6e 74 20 63  , in1 */.  int c
134a0 3b 0a 20 20 63 20 3d 20 21 73 71 6c 69 74 65 33  ;.  c = !sqlite3
134b0 56 64 62 65 42 6f 6f 6c 65 61 6e 56 61 6c 75 65  VdbeBooleanValue
134c0 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 2c  (&aMem[pOp->p1],
134d0 20 21 70 4f 70 2d 3e 70 33 29 3b 0a 20 20 56 64   !pOp->p3);.  Vd
134e0 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 63 21  beBranchTaken(c!
134f0 3d 30 2c 20 32 29 3b 0a 20 20 69 66 28 20 63 20  =0, 2);.  if( c 
13500 29 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70  ) goto jump_to_p
13510 32 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  2;.  break;.}../
13520 2a 20 4f 70 63 6f 64 65 3a 20 49 73 4e 75 6c 6c  * Opcode: IsNull
13530 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20   P1 P2 * * *.** 
13540 53 79 6e 6f 70 73 69 73 3a 20 69 66 20 72 5b 50  Synopsis: if r[P
13550 31 5d 3d 3d 4e 55 4c 4c 20 67 6f 74 6f 20 50 32  1]==NULL goto P2
13560 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70 20 74 6f 20 50  .**.** Jump to P
13570 32 20 69 66 20 74 68 65 20 76 61 6c 75 65 20 69  2 if the value i
13580 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 69 73  n register P1 is
13590 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20 4f   NULL..*/.case O
135a0 50 5f 49 73 4e 75 6c 6c 3a 20 7b 20 20 20 20 20  P_IsNull: {     
135b0 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61         /* same a
135c0 73 20 54 4b 5f 49 53 4e 55 4c 4c 2c 20 6a 75 6d  s TK_ISNULL, jum
135d0 70 2c 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31  p, in1 */.  pIn1
135e0 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31   = &aMem[pOp->p1
135f0 5d 3b 0a 20 20 56 64 62 65 42 72 61 6e 63 68 54  ];.  VdbeBranchT
13600 61 6b 65 6e 28 20 28 70 49 6e 31 2d 3e 66 6c 61  aken( (pIn1->fla
13610 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29 21 3d  gs & MEM_Null)!=
13620 30 2c 20 32 29 3b 0a 20 20 69 66 28 20 28 70 49  0, 2);.  if( (pI
13630 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  n1->flags & MEM_
13640 4e 75 6c 6c 29 21 3d 30 20 29 7b 0a 20 20 20 20  Null)!=0 ){.    
13650 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b  goto jump_to_p2;
13660 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
13670 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 6f 74 4e  ./* Opcode: NotN
13680 75 6c 6c 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  ull P1 P2 * * *.
13690 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 66 20  ** Synopsis: if 
136a0 72 5b 50 31 5d 21 3d 4e 55 4c 4c 20 67 6f 74 6f  r[P1]!=NULL goto
136b0 20 50 32 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70 20 74   P2.**.** Jump t
136c0 6f 20 50 32 20 69 66 20 74 68 65 20 76 61 6c 75  o P2 if the valu
136d0 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31  e in register P1
136e0 20 69 73 20 6e 6f 74 20 4e 55 4c 4c 2e 20 20 0a   is not NULL.  .
136f0 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 6f 74 4e 75  */.case OP_NotNu
13700 6c 6c 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  ll: {           
13710 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 4e   /* same as TK_N
13720 4f 54 4e 55 4c 4c 2c 20 6a 75 6d 70 2c 20 69 6e  OTNULL, jump, in
13730 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61  1 */.  pIn1 = &a
13740 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
13750 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28  VdbeBranchTaken(
13760 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20   (pIn1->flags & 
13770 4d 45 4d 5f 4e 75 6c 6c 29 3d 3d 30 2c 20 32 29  MEM_Null)==0, 2)
13780 3b 0a 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66  ;.  if( (pIn1->f
13790 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29  lags & MEM_Null)
137a0 3d 3d 30 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20  ==0 ){.    goto 
137b0 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 7d 0a  jump_to_p2;.  }.
137c0 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
137d0 70 63 6f 64 65 3a 20 49 66 4e 75 6c 6c 52 6f 77  pcode: IfNullRow
137e0 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a   P1 P2 P3 * *.**
137f0 20 53 79 6e 6f 70 73 69 73 3a 20 69 66 20 50 31   Synopsis: if P1
13800 2e 6e 75 6c 6c 52 6f 77 20 74 68 65 6e 20 72 5b  .nullRow then r[
13810 50 33 5d 3d 4e 55 4c 4c 2c 20 67 6f 74 6f 20 50  P3]=NULL, goto P
13820 32 0a 2a 2a 0a 2a 2a 20 43 68 65 63 6b 20 74 68  2.**.** Check th
13830 65 20 63 75 72 73 6f 72 20 50 31 20 74 6f 20 73  e cursor P1 to s
13840 65 65 20 69 66 20 69 74 20 69 73 20 63 75 72 72  ee if it is curr
13850 65 6e 74 6c 79 20 70 6f 69 6e 74 69 6e 67 20 61  ently pointing a
13860 74 20 61 20 4e 55 4c 4c 20 72 6f 77 2e 0a 2a 2a  t a NULL row..**
13870 20 49 66 20 69 74 20 69 73 2c 20 74 68 65 6e 20   If it is, then 
13880 73 65 74 20 72 65 67 69 73 74 65 72 20 50 33 20  set register P3 
13890 74 6f 20 4e 55 4c 4c 20 61 6e 64 20 6a 75 6d 70  to NULL and jump
138a0 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f 20   immediately to 
138b0 50 32 2e 0a 2a 2a 20 49 66 20 50 31 20 69 73 20  P2..** If P1 is 
138c0 6e 6f 74 20 6f 6e 20 61 20 4e 55 4c 4c 20 72 6f  not on a NULL ro
138d0 77 2c 20 74 68 65 6e 20 66 61 6c 6c 20 74 68 72  w, then fall thr
138e0 6f 75 67 68 20 77 69 74 68 6f 75 74 20 6d 61 6b  ough without mak
138f0 69 6e 67 20 61 6e 79 0a 2a 2a 20 63 68 61 6e 67  ing any.** chang
13900 65 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49  es..*/.case OP_I
13910 66 4e 75 6c 6c 52 6f 77 3a 20 7b 20 20 20 20 20  fNullRow: {     
13920 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20      /* jump */. 
13930 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
13940 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70  >=0 && pOp->p1<p
13950 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 61  ->nCursor );.  a
13960 73 73 65 72 74 28 20 70 2d 3e 61 70 43 73 72 5b  ssert( p->apCsr[
13970 70 4f 70 2d 3e 70 31 5d 21 3d 30 20 29 3b 0a 20  pOp->p1]!=0 );. 
13980 20 69 66 28 20 70 2d 3e 61 70 43 73 72 5b 70 4f   if( p->apCsr[pO
13990 70 2d 3e 70 31 5d 2d 3e 6e 75 6c 6c 52 6f 77 20  p->p1]->nullRow 
139a0 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  ){.    sqlite3Vd
139b0 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 61 4d 65  beMemSetNull(aMe
139c0 6d 20 2b 20 70 4f 70 2d 3e 70 33 29 3b 0a 20 20  m + pOp->p3);.  
139d0 20 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70    goto jump_to_p
139e0 32 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  2;.  }.  break;.
139f0 7d 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  }..#ifdef SQLITE
13a00 5f 45 4e 41 42 4c 45 5f 4f 46 46 53 45 54 5f 53  _ENABLE_OFFSET_S
13a10 51 4c 5f 46 55 4e 43 0a 2f 2a 20 4f 70 63 6f 64  QL_FUNC./* Opcod
13a20 65 3a 20 4f 66 66 73 65 74 20 50 31 20 50 32 20  e: Offset P1 P2 
13a30 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73  P3 * *.** Synops
13a40 69 73 3a 20 72 5b 50 33 5d 20 3d 20 73 71 6c 69  is: r[P3] = sqli
13a50 74 65 5f 6f 66 66 73 65 74 28 50 31 29 0a 2a 2a  te_offset(P1).**
13a60 0a 2a 2a 20 53 74 6f 72 65 20 69 6e 20 72 65 67  .** Store in reg
13a70 69 73 74 65 72 20 72 5b 50 33 5d 20 74 68 65 20  ister r[P3] the 
13a80 62 79 74 65 20 6f 66 66 73 65 74 20 69 6e 74 6f  byte offset into
13a90 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69   the database fi
13aa0 6c 65 20 74 68 61 74 20 69 73 20 74 68 65 0a 2a  le that is the.*
13ab0 2a 20 73 74 61 72 74 20 6f 66 20 74 68 65 20 70  * start of the p
13ac0 61 79 6c 6f 61 64 20 66 6f 72 20 74 68 65 20 72  ayload for the r
13ad0 65 63 6f 72 64 20 61 74 20 77 68 69 63 68 20 74  ecord at which t
13ae0 68 61 74 20 63 75 72 73 6f 72 20 50 31 20 69 73  hat cursor P1 is
13af0 20 63 75 72 72 65 6e 74 6c 79 0a 2a 2a 20 70 6f   currently.** po
13b00 69 6e 74 69 6e 67 2e 0a 2a 2a 0a 2a 2a 20 50 32  inting..**.** P2
13b10 20 69 73 20 74 68 65 20 63 6f 6c 75 6d 6e 20 6e   is the column n
13b20 75 6d 62 65 72 20 66 6f 72 20 74 68 65 20 61 72  umber for the ar
13b30 67 75 6d 65 6e 74 20 74 6f 20 74 68 65 20 73 71  gument to the sq
13b40 6c 69 74 65 5f 6f 66 66 73 65 74 28 29 20 66 75  lite_offset() fu
13b50 6e 63 74 69 6f 6e 2e 0a 2a 2a 20 54 68 69 73 20  nction..** This 
13b60 6f 70 63 6f 64 65 20 64 6f 65 73 20 6e 6f 74 20  opcode does not 
13b70 75 73 65 20 50 32 20 69 74 73 65 6c 66 2c 20 62  use P2 itself, b
13b80 75 74 20 74 68 65 20 50 32 20 76 61 6c 75 65 20  ut the P2 value 
13b90 69 73 20 75 73 65 64 20 62 79 20 74 68 65 0a 2a  is used by the.*
13ba0 2a 20 63 6f 64 65 20 67 65 6e 65 72 61 74 6f 72  * code generator
13bb0 2e 20 20 54 68 65 20 50 31 2c 20 50 32 2c 20 61  .  The P1, P2, a
13bc0 6e 64 20 50 33 20 6f 70 65 72 61 6e 64 73 20 74  nd P3 operands t
13bd0 6f 20 74 68 69 73 20 6f 70 63 6f 64 65 20 61 72  o this opcode ar
13be0 65 20 74 68 65 0a 2a 2a 20 73 61 6d 65 20 61 73  e the.** same as
13bf0 20 66 6f 72 20 4f 50 5f 43 6f 6c 75 6d 6e 2e 0a   for OP_Column..
13c00 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64  **.** This opcod
13c10 65 20 69 73 20 6f 6e 6c 79 20 61 76 61 69 6c 61  e is only availa
13c20 62 6c 65 20 69 66 20 53 51 4c 69 74 65 20 69 73  ble if SQLite is
13c30 20 63 6f 6d 70 69 6c 65 64 20 77 69 74 68 20 74   compiled with t
13c40 68 65 0a 2a 2a 20 2d 44 53 51 4c 49 54 45 5f 45  he.** -DSQLITE_E
13c50 4e 41 42 4c 45 5f 4f 46 46 53 45 54 5f 53 51 4c  NABLE_OFFSET_SQL
13c60 5f 46 55 4e 43 20 6f 70 74 69 6f 6e 2e 0a 2a 2f  _FUNC option..*/
13c70 0a 63 61 73 65 20 4f 50 5f 4f 66 66 73 65 74 3a  .case OP_Offset:
13c80 20 7b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f   {          /* o
13c90 75 74 33 20 2a 2f 0a 20 20 56 64 62 65 43 75 72  ut3 */.  VdbeCur
13ca0 73 6f 72 20 2a 70 43 3b 20 20 20 20 2f 2a 20 54  sor *pC;    /* T
13cb0 68 65 20 56 44 42 45 20 63 75 72 73 6f 72 20 2a  he VDBE cursor *
13cc0 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  /.  assert( pOp-
13cd0 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70  >p1>=0 && pOp->p
13ce0 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a  1<p->nCursor );.
13cf0 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b    pC = p->apCsr[
13d00 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 4f 75 74  pOp->p1];.  pOut
13d10 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d   = &p->aMem[pOp-
13d20 3e 70 33 5d 3b 0a 20 20 69 66 28 20 4e 45 56 45  >p3];.  if( NEVE
13d30 52 28 70 43 3d 3d 30 29 20 7c 7c 20 70 43 2d 3e  R(pC==0) || pC->
13d40 65 43 75 72 54 79 70 65 21 3d 43 55 52 54 59 50  eCurType!=CURTYP
13d50 45 5f 42 54 52 45 45 20 29 7b 0a 20 20 20 20 73  E_BTREE ){.    s
13d60 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74  qlite3VdbeMemSet
13d70 4e 75 6c 6c 28 70 4f 75 74 29 3b 0a 20 20 7d 65  Null(pOut);.  }e
13d80 6c 73 65 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  lse{.    sqlite3
13d90 56 64 62 65 4d 65 6d 53 65 74 49 6e 74 36 34 28  VdbeMemSetInt64(
13da0 70 4f 75 74 2c 20 73 71 6c 69 74 65 33 42 74 72  pOut, sqlite3Btr
13db0 65 65 4f 66 66 73 65 74 28 70 43 2d 3e 75 63 2e  eeOffset(pC->uc.
13dc0 70 43 75 72 73 6f 72 29 29 3b 0a 20 20 7d 0a 20  pCursor));.  }. 
13dd0 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66   break;.}.#endif
13de0 20 2f 2a 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c   /* SQLITE_ENABL
13df0 45 5f 4f 46 46 53 45 54 5f 53 51 4c 5f 46 55 4e  E_OFFSET_SQL_FUN
13e00 43 20 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  C */../* Opcode:
13e10 20 43 6f 6c 75 6d 6e 20 50 31 20 50 32 20 50 33   Column P1 P2 P3
13e20 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73   P4 P5.** Synops
13e30 69 73 3a 20 72 5b 50 33 5d 3d 50 58 0a 2a 2a 0a  is: r[P3]=PX.**.
13e40 2a 2a 20 49 6e 74 65 72 70 72 65 74 20 74 68 65  ** Interpret the
13e50 20 64 61 74 61 20 74 68 61 74 20 63 75 72 73 6f   data that curso
13e60 72 20 50 31 20 70 6f 69 6e 74 73 20 74 6f 20 61  r P1 points to a
13e70 73 20 61 20 73 74 72 75 63 74 75 72 65 20 62 75  s a structure bu
13e80 69 6c 74 20 75 73 69 6e 67 0a 2a 2a 20 74 68 65  ilt using.** the
13e90 20 4d 61 6b 65 52 65 63 6f 72 64 20 69 6e 73 74   MakeRecord inst
13ea0 72 75 63 74 69 6f 6e 2e 20 20 28 53 65 65 20 74  ruction.  (See t
13eb0 68 65 20 4d 61 6b 65 52 65 63 6f 72 64 20 6f 70  he MakeRecord op
13ec0 63 6f 64 65 20 66 6f 72 20 61 64 64 69 74 69 6f  code for additio
13ed0 6e 61 6c 0a 2a 2a 20 69 6e 66 6f 72 6d 61 74 69  nal.** informati
13ee0 6f 6e 20 61 62 6f 75 74 20 74 68 65 20 66 6f 72  on about the for
13ef0 6d 61 74 20 6f 66 20 74 68 65 20 64 61 74 61 2e  mat of the data.
13f00 29 20 20 45 78 74 72 61 63 74 20 74 68 65 20 50  )  Extract the P
13f10 32 2d 74 68 20 63 6f 6c 75 6d 6e 0a 2a 2a 20 66  2-th column.** f
13f20 72 6f 6d 20 74 68 69 73 20 72 65 63 6f 72 64 2e  rom this record.
13f30 20 20 49 66 20 74 68 65 72 65 20 61 72 65 20 6c    If there are l
13f40 65 73 73 20 74 68 61 74 20 28 50 32 2b 31 29 20  ess that (P2+1) 
13f50 0a 2a 2a 20 76 61 6c 75 65 73 20 69 6e 20 74 68  .** values in th
13f60 65 20 72 65 63 6f 72 64 2c 20 65 78 74 72 61 63  e record, extrac
13f70 74 20 61 20 4e 55 4c 4c 2e 0a 2a 2a 0a 2a 2a 20  t a NULL..**.** 
13f80 54 68 65 20 76 61 6c 75 65 20 65 78 74 72 61 63  The value extrac
13f90 74 65 64 20 69 73 20 73 74 6f 72 65 64 20 69 6e  ted is stored in
13fa0 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a   register P3..**
13fb0 0a 2a 2a 20 49 66 20 74 68 65 20 72 65 63 6f 72  .** If the recor
13fc0 64 20 63 6f 6e 74 61 69 6e 73 20 66 65 77 65 72  d contains fewer
13fd0 20 74 68 61 6e 20 50 32 20 66 69 65 6c 64 73 2c   than P2 fields,
13fe0 20 74 68 65 6e 20 65 78 74 72 61 63 74 20 61 20   then extract a 
13ff0 4e 55 4c 4c 2e 20 20 4f 72 2c 0a 2a 2a 20 69 66  NULL.  Or,.** if
14000 20 74 68 65 20 50 34 20 61 72 67 75 6d 65 6e 74   the P4 argument
14010 20 69 73 20 61 20 50 34 5f 4d 45 4d 20 75 73 65   is a P4_MEM use
14020 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68   the value of th
14030 65 20 50 34 20 61 72 67 75 6d 65 6e 74 20 61 73  e P4 argument as
14040 0a 2a 2a 20 74 68 65 20 72 65 73 75 6c 74 2e 0a  .** the result..
14050 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 4f 50 46  **.** If the OPF
14060 4c 41 47 5f 43 4c 45 41 52 43 41 43 48 45 20 62  LAG_CLEARCACHE b
14070 69 74 20 69 73 20 73 65 74 20 6f 6e 20 50 35 20  it is set on P5 
14080 61 6e 64 20 50 31 20 69 73 20 61 20 70 73 65 75  and P1 is a pseu
14090 64 6f 2d 74 61 62 6c 65 20 63 75 72 73 6f 72 2c  do-table cursor,
140a0 0a 2a 2a 20 74 68 65 6e 20 74 68 65 20 63 61 63  .** then the cac
140b0 68 65 20 6f 66 20 74 68 65 20 63 75 72 73 6f 72  he of the cursor
140c0 20 69 73 20 72 65 73 65 74 20 70 72 69 6f 72 20   is reset prior 
140d0 74 6f 20 65 78 74 72 61 63 74 69 6e 67 20 74 68  to extracting th
140e0 65 20 63 6f 6c 75 6d 6e 2e 0a 2a 2a 20 54 68 65  e column..** The
140f0 20 66 69 72 73 74 20 4f 50 5f 43 6f 6c 75 6d 6e   first OP_Column
14100 20 61 67 61 69 6e 73 74 20 61 20 70 73 65 75 64   against a pseud
14110 6f 2d 74 61 62 6c 65 20 61 66 74 65 72 20 74 68  o-table after th
14120 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 63  e value of the c
14130 6f 6e 74 65 6e 74 0a 2a 2a 20 72 65 67 69 73 74  ontent.** regist
14140 65 72 20 68 61 73 20 63 68 61 6e 67 65 64 20 73  er has changed s
14150 68 6f 75 6c 64 20 68 61 76 65 20 74 68 69 73 20  hould have this 
14160 62 69 74 20 73 65 74 2e 0a 2a 2a 0a 2a 2a 20 49  bit set..**.** I
14170 66 20 74 68 65 20 4f 50 46 4c 41 47 5f 4c 45 4e  f the OPFLAG_LEN
14180 47 54 48 41 52 47 20 61 6e 64 20 4f 50 46 4c 41  GTHARG and OPFLA
14190 47 5f 54 59 50 45 4f 46 41 52 47 20 62 69 74 73  G_TYPEOFARG bits
141a0 20 61 72 65 20 73 65 74 20 6f 6e 20 50 35 20 74   are set on P5 t
141b0 68 65 6e 0a 2a 2a 20 74 68 65 20 72 65 73 75 6c  hen.** the resul
141c0 74 20 69 73 20 67 75 61 72 61 6e 74 65 65 64 20  t is guaranteed 
141d0 74 6f 20 6f 6e 6c 79 20 62 65 20 75 73 65 64 20  to only be used 
141e0 61 73 20 74 68 65 20 61 72 67 75 6d 65 6e 74 20  as the argument 
141f0 6f 66 20 61 20 6c 65 6e 67 74 68 28 29 0a 2a 2a  of a length().**
14200 20 6f 72 20 74 79 70 65 6f 66 28 29 20 66 75 6e   or typeof() fun
14210 63 74 69 6f 6e 2c 20 72 65 73 70 65 63 74 69 76  ction, respectiv
14220 65 6c 79 2e 20 20 54 68 65 20 6c 6f 61 64 69 6e  ely.  The loadin
14230 67 20 6f 66 20 6c 61 72 67 65 20 62 6c 6f 62 73  g of large blobs
14240 20 63 61 6e 20 62 65 0a 2a 2a 20 73 6b 69 70 70   can be.** skipp
14250 65 64 20 66 6f 72 20 6c 65 6e 67 74 68 28 29 20  ed for length() 
14260 61 6e 64 20 61 6c 6c 20 63 6f 6e 74 65 6e 74 20  and all content 
14270 6c 6f 61 64 69 6e 67 20 63 61 6e 20 62 65 20 73  loading can be s
14280 6b 69 70 70 65 64 20 66 6f 72 20 74 79 70 65 6f  kipped for typeo
14290 66 28 29 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  f()..*/.case OP_
142a0 43 6f 6c 75 6d 6e 3a 20 7b 0a 20 20 69 6e 74 20  Column: {.  int 
142b0 70 32 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  p2;            /
142c0 2a 20 63 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72 20  * column number 
142d0 74 6f 20 72 65 74 72 69 65 76 65 20 2a 2f 0a 20  to retrieve */. 
142e0 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b   VdbeCursor *pC;
142f0 20 20 20 20 2f 2a 20 54 68 65 20 56 44 42 45 20      /* The VDBE 
14300 63 75 72 73 6f 72 20 2a 2f 0a 20 20 42 74 43 75  cursor */.  BtCu
14310 72 73 6f 72 20 2a 70 43 72 73 72 3b 20 20 20 2f  rsor *pCrsr;   /
14320 2a 20 54 68 65 20 42 54 72 65 65 20 63 75 72 73  * The BTree curs
14330 6f 72 20 2a 2f 0a 20 20 75 33 32 20 2a 61 4f 66  or */.  u32 *aOf
14340 66 73 65 74 3b 20 20 20 20 20 20 2f 2a 20 61 4f  fset;      /* aO
14350 66 66 73 65 74 5b 69 5d 20 69 73 20 6f 66 66 73  ffset[i] is offs
14360 65 74 20 74 6f 20 73 74 61 72 74 20 6f 66 20 64  et to start of d
14370 61 74 61 20 66 6f 72 20 69 2d 74 68 20 63 6f 6c  ata for i-th col
14380 75 6d 6e 20 2a 2f 0a 20 20 69 6e 74 20 6c 65 6e  umn */.  int len
14390 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54  ;           /* T
143a0 68 65 20 6c 65 6e 67 74 68 20 6f 66 20 74 68 65  he length of the
143b0 20 73 65 72 69 61 6c 69 7a 65 64 20 64 61 74 61   serialized data
143c0 20 66 6f 72 20 74 68 65 20 63 6f 6c 75 6d 6e 20   for the column 
143d0 2a 2f 0a 20 20 69 6e 74 20 69 3b 20 20 20 20 20  */.  int i;     
143e0 20 20 20 20 20 20 20 20 2f 2a 20 4c 6f 6f 70 20          /* Loop 
143f0 63 6f 75 6e 74 65 72 20 2a 2f 0a 20 20 4d 65 6d  counter */.  Mem
14400 20 2a 70 44 65 73 74 3b 20 20 20 20 20 20 20 20   *pDest;        
14410 2f 2a 20 57 68 65 72 65 20 74 6f 20 77 72 69 74  /* Where to writ
14420 65 20 74 68 65 20 65 78 74 72 61 63 74 65 64 20  e the extracted 
14430 76 61 6c 75 65 20 2a 2f 0a 20 20 4d 65 6d 20 73  value */.  Mem s
14440 4d 65 6d 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  Mem;          /*
14450 20 46 6f 72 20 73 74 6f 72 69 6e 67 20 74 68 65   For storing the
14460 20 72 65 63 6f 72 64 20 62 65 69 6e 67 20 64 65   record being de
14470 63 6f 64 65 64 20 2a 2f 0a 20 20 63 6f 6e 73 74  coded */.  const
14480 20 75 38 20 2a 7a 44 61 74 61 3b 20 20 20 2f 2a   u8 *zData;   /*
14490 20 50 61 72 74 20 6f 66 20 74 68 65 20 72 65 63   Part of the rec
144a0 6f 72 64 20 62 65 69 6e 67 20 64 65 63 6f 64 65  ord being decode
144b0 64 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 75 38 20  d */.  const u8 
144c0 2a 7a 48 64 72 3b 20 20 20 20 2f 2a 20 4e 65 78  *zHdr;    /* Nex
144d0 74 20 75 6e 70 61 72 73 65 64 20 62 79 74 65 20  t unparsed byte 
144e0 6f 66 20 74 68 65 20 68 65 61 64 65 72 20 2a 2f  of the header */
144f0 0a 20 20 63 6f 6e 73 74 20 75 38 20 2a 7a 45 6e  .  const u8 *zEn
14500 64 48 64 72 3b 20 2f 2a 20 50 6f 69 6e 74 65 72  dHdr; /* Pointer
14510 20 74 6f 20 66 69 72 73 74 20 62 79 74 65 20 61   to first byte a
14520 66 74 65 72 20 74 68 65 20 68 65 61 64 65 72 20  fter the header 
14530 2a 2f 0a 20 20 75 36 34 20 6f 66 66 73 65 74 36  */.  u64 offset6
14540 34 3b 20 20 20 20 20 20 2f 2a 20 36 34 2d 62 69  4;      /* 64-bi
14550 74 20 6f 66 66 73 65 74 20 2a 2f 0a 20 20 75 33  t offset */.  u3
14560 32 20 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  2 t;            
14570 20 2f 2a 20 41 20 74 79 70 65 20 63 6f 64 65 20   /* A type code 
14580 66 72 6f 6d 20 74 68 65 20 72 65 63 6f 72 64 20  from the record 
14590 68 65 61 64 65 72 20 2a 2f 0a 20 20 4d 65 6d 20  header */.  Mem 
145a0 2a 70 52 65 67 3b 20 20 20 20 20 20 20 20 20 2f  *pReg;         /
145b0 2a 20 50 73 65 75 64 6f 54 61 62 6c 65 20 69 6e  * PseudoTable in
145c0 70 75 74 20 72 65 67 69 73 74 65 72 20 2a 2f 0a  put register */.
145d0 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72  .  pC = p->apCsr
145e0 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 32 20  [pOp->p1];.  p2 
145f0 3d 20 70 4f 70 2d 3e 70 32 3b 0a 0a 20 20 2f 2a  = pOp->p2;..  /*
14600 20 49 66 20 74 68 65 20 63 75 72 73 6f 72 20 63   If the cursor c
14610 61 63 68 65 20 69 73 20 73 74 61 6c 65 20 28 6d  ache is stale (m
14620 65 61 6e 69 6e 67 20 69 74 20 69 73 20 6e 6f 74  eaning it is not
14630 20 63 75 72 72 65 6e 74 6c 79 20 70 6f 69 6e 74   currently point
14640 20 61 74 0a 20 20 2a 2a 20 74 68 65 20 63 6f 72   at.  ** the cor
14650 72 65 63 74 20 72 6f 77 29 20 74 68 65 6e 20 62  rect row) then b
14660 72 69 6e 67 20 69 74 20 75 70 2d 74 6f 2d 64 61  ring it up-to-da
14670 74 65 20 62 79 20 64 6f 69 6e 67 20 74 68 65 20  te by doing the 
14680 6e 65 63 65 73 73 61 72 79 20 0a 20 20 2a 2a 20  necessary .  ** 
14690 42 2d 54 72 65 65 20 73 65 65 6b 2e 20 2a 2f 0a  B-Tree seek. */.
146a0 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64    rc = sqlite3Vd
146b0 62 65 43 75 72 73 6f 72 4d 6f 76 65 74 6f 28 26  beCursorMoveto(&
146c0 70 43 2c 20 26 70 32 29 3b 0a 20 20 69 66 28 20  pC, &p2);.  if( 
146d0 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f  rc ) goto abort_
146e0 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 0a 20  due_to_error;.. 
146f0 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33   assert( pOp->p3
14700 3e 30 20 26 26 20 70 4f 70 2d 3e 70 33 3c 3d 28  >0 && pOp->p3<=(
14710 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e  p->nMem+1 - p->n
14720 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 70 44 65  Cursor) );.  pDe
14730 73 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  st = &aMem[pOp->
14740 70 33 5d 3b 0a 20 20 6d 65 6d 41 62 6f 75 74 54  p3];.  memAboutT
14750 6f 43 68 61 6e 67 65 28 70 2c 20 70 44 65 73 74  oChange(p, pDest
14760 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  );.  assert( pOp
14770 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e  ->p1>=0 && pOp->
14780 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b  p1<p->nCursor );
14790 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30  .  assert( pC!=0
147a0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 32   );.  assert( p2
147b0 3c 70 43 2d 3e 6e 46 69 65 6c 64 20 29 3b 0a 20  <pC->nField );. 
147c0 20 61 4f 66 66 73 65 74 20 3d 20 70 43 2d 3e 61   aOffset = pC->a
147d0 4f 66 66 73 65 74 3b 0a 20 20 61 73 73 65 72 74  Offset;.  assert
147e0 28 20 70 43 2d 3e 65 43 75 72 54 79 70 65 21 3d  ( pC->eCurType!=
147f0 43 55 52 54 59 50 45 5f 56 54 41 42 20 29 3b 0a  CURTYPE_VTAB );.
14800 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 65 43    assert( pC->eC
14810 75 72 54 79 70 65 21 3d 43 55 52 54 59 50 45 5f  urType!=CURTYPE_
14820 50 53 45 55 44 4f 20 7c 7c 20 70 43 2d 3e 6e 75  PSEUDO || pC->nu
14830 6c 6c 52 6f 77 20 29 3b 0a 20 20 61 73 73 65 72  llRow );.  asser
14840 74 28 20 70 43 2d 3e 65 43 75 72 54 79 70 65 21  t( pC->eCurType!
14850 3d 43 55 52 54 59 50 45 5f 53 4f 52 54 45 52 20  =CURTYPE_SORTER 
14860 29 3b 0a 0a 20 20 69 66 28 20 70 43 2d 3e 63 61  );..  if( pC->ca
14870 63 68 65 53 74 61 74 75 73 21 3d 70 2d 3e 63 61  cheStatus!=p->ca
14880 63 68 65 43 74 72 20 29 7b 20 20 20 20 20 20 20  cheCtr ){       
14890 20 20 20 20 20 20 20 20 20 2f 2a 4f 50 54 49 4d           /*OPTIM
148a0 49 5a 41 54 49 4f 4e 2d 49 46 2d 46 41 4c 53 45  IZATION-IF-FALSE
148b0 2a 2f 0a 20 20 20 20 69 66 28 20 70 43 2d 3e 6e  */.    if( pC->n
148c0 75 6c 6c 52 6f 77 20 29 7b 0a 20 20 20 20 20 20  ullRow ){.      
148d0 69 66 28 20 70 43 2d 3e 65 43 75 72 54 79 70 65  if( pC->eCurType
148e0 3d 3d 43 55 52 54 59 50 45 5f 50 53 45 55 44 4f  ==CURTYPE_PSEUDO
148f0 20 29 7b 0a 20 20 20 20 20 20 20 20 2f 2a 20 46   ){.        /* F
14900 6f 72 20 74 68 65 20 73 70 65 63 69 61 6c 20 63  or the special c
14910 61 73 65 20 6f 66 20 61 73 20 70 73 65 75 64 6f  ase of as pseudo
14920 2d 63 75 72 73 6f 72 2c 20 74 68 65 20 73 65 65  -cursor, the see
14930 6b 52 65 73 75 6c 74 20 66 69 65 6c 64 0a 20 20  kResult field.  
14940 20 20 20 20 20 20 2a 2a 20 69 64 65 6e 74 69 66        ** identif
14950 69 65 73 20 74 68 65 20 72 65 67 69 73 74 65 72  ies the register
14960 20 74 68 61 74 20 68 6f 6c 64 73 20 74 68 65 20   that holds the 
14970 72 65 63 6f 72 64 20 2a 2f 0a 20 20 20 20 20 20  record */.      
14980 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 73 65    assert( pC->se
14990 65 6b 52 65 73 75 6c 74 3e 30 20 29 3b 0a 20 20  ekResult>0 );.  
149a0 20 20 20 20 20 20 70 52 65 67 20 3d 20 26 61 4d        pReg = &aM
149b0 65 6d 5b 70 43 2d 3e 73 65 65 6b 52 65 73 75 6c  em[pC->seekResul
149c0 74 5d 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65  t];.        asse
149d0 72 74 28 20 70 52 65 67 2d 3e 66 6c 61 67 73 20  rt( pReg->flags 
149e0 26 20 4d 45 4d 5f 42 6c 6f 62 20 29 3b 0a 20 20  & MEM_Blob );.  
149f0 20 20 20 20 20 20 61 73 73 65 72 74 28 20 6d 65        assert( me
14a00 6d 49 73 56 61 6c 69 64 28 70 52 65 67 29 20 29  mIsValid(pReg) )
14a10 3b 0a 20 20 20 20 20 20 20 20 70 43 2d 3e 70 61  ;.        pC->pa
14a20 79 6c 6f 61 64 53 69 7a 65 20 3d 20 70 43 2d 3e  yloadSize = pC->
14a30 73 7a 52 6f 77 20 3d 20 70 52 65 67 2d 3e 6e 3b  szRow = pReg->n;
14a40 0a 20 20 20 20 20 20 20 20 70 43 2d 3e 61 52 6f  .        pC->aRo
14a50 77 20 3d 20 28 75 38 2a 29 70 52 65 67 2d 3e 7a  w = (u8*)pReg->z
14a60 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20  ;.      }else{. 
14a70 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
14a80 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 44 65  beMemSetNull(pDe
14a90 73 74 29 3b 0a 20 20 20 20 20 20 20 20 67 6f 74  st);.        got
14aa0 6f 20 6f 70 5f 63 6f 6c 75 6d 6e 5f 6f 75 74 3b  o op_column_out;
14ab0 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 65 6c  .      }.    }el
14ac0 73 65 7b 0a 20 20 20 20 20 20 70 43 72 73 72 20  se{.      pCrsr 
14ad0 3d 20 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72  = pC->uc.pCursor
14ae0 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  ;.      assert( 
14af0 70 43 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43 55  pC->eCurType==CU
14b00 52 54 59 50 45 5f 42 54 52 45 45 20 29 3b 0a 20  RTYPE_BTREE );. 
14b10 20 20 20 20 20 61 73 73 65 72 74 28 20 70 43 72       assert( pCr
14b20 73 72 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65  sr );.      asse
14b30 72 74 28 20 73 71 6c 69 74 65 33 42 74 72 65 65  rt( sqlite3Btree
14b40 43 75 72 73 6f 72 49 73 56 61 6c 69 64 28 70 43  CursorIsValid(pC
14b50 72 73 72 29 20 29 3b 0a 20 20 20 20 20 20 70 43  rsr) );.      pC
14b60 2d 3e 70 61 79 6c 6f 61 64 53 69 7a 65 20 3d 20  ->payloadSize = 
14b70 73 71 6c 69 74 65 33 42 74 72 65 65 50 61 79 6c  sqlite3BtreePayl
14b80 6f 61 64 53 69 7a 65 28 70 43 72 73 72 29 3b 0a  oadSize(pCrsr);.
14b90 20 20 20 20 20 20 70 43 2d 3e 61 52 6f 77 20 3d        pC->aRow =
14ba0 20 73 71 6c 69 74 65 33 42 74 72 65 65 50 61 79   sqlite3BtreePay
14bb0 6c 6f 61 64 46 65 74 63 68 28 70 43 72 73 72 2c  loadFetch(pCrsr,
14bc0 20 26 70 43 2d 3e 73 7a 52 6f 77 29 3b 0a 20 20   &pC->szRow);.  
14bd0 20 20 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e      assert( pC->
14be0 73 7a 52 6f 77 3c 3d 70 43 2d 3e 70 61 79 6c 6f  szRow<=pC->paylo
14bf0 61 64 53 69 7a 65 20 29 3b 0a 20 20 20 20 20 20  adSize );.      
14c00 61 73 73 65 72 74 28 20 70 43 2d 3e 73 7a 52 6f  assert( pC->szRo
14c10 77 3c 3d 36 35 35 33 36 20 29 3b 20 20 2f 2a 20  w<=65536 );  /* 
14c20 4d 61 78 69 6d 75 6d 20 70 61 67 65 20 73 69 7a  Maximum page siz
14c30 65 20 69 73 20 36 34 4b 69 42 20 2a 2f 0a 20 20  e is 64KiB */.  
14c40 20 20 20 20 69 66 28 20 70 43 2d 3e 70 61 79 6c      if( pC->payl
14c50 6f 61 64 53 69 7a 65 20 3e 20 28 75 33 32 29 64  oadSize > (u32)d
14c60 62 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45  b->aLimit[SQLITE
14c70 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54 48 5d 20 29  _LIMIT_LENGTH] )
14c80 7b 0a 20 20 20 20 20 20 20 20 67 6f 74 6f 20 74  {.        goto t
14c90 6f 6f 5f 62 69 67 3b 0a 20 20 20 20 20 20 7d 0a  oo_big;.      }.
14ca0 20 20 20 20 7d 0a 20 20 20 20 70 43 2d 3e 63 61      }.    pC->ca
14cb0 63 68 65 53 74 61 74 75 73 20 3d 20 70 2d 3e 63  cheStatus = p->c
14cc0 61 63 68 65 43 74 72 3b 0a 20 20 20 20 70 43 2d  acheCtr;.    pC-
14cd0 3e 69 48 64 72 4f 66 66 73 65 74 20 3d 20 67 65  >iHdrOffset = ge
14ce0 74 56 61 72 69 6e 74 33 32 28 70 43 2d 3e 61 52  tVarint32(pC->aR
14cf0 6f 77 2c 20 61 4f 66 66 73 65 74 5b 30 5d 29 3b  ow, aOffset[0]);
14d00 0a 20 20 20 20 70 43 2d 3e 6e 48 64 72 50 61 72  .    pC->nHdrPar
14d10 73 65 64 20 3d 20 30 3b 0a 0a 0a 20 20 20 20 69  sed = 0;...    i
14d20 66 28 20 70 43 2d 3e 73 7a 52 6f 77 3c 61 4f 66  f( pC->szRow<aOf
14d30 66 73 65 74 5b 30 5d 20 29 7b 20 20 20 20 20 20  fset[0] ){      
14d40 2f 2a 4f 50 54 49 4d 49 5a 41 54 49 4f 4e 2d 49  /*OPTIMIZATION-I
14d50 46 2d 46 41 4c 53 45 2a 2f 0a 20 20 20 20 20 20  F-FALSE*/.      
14d60 2f 2a 20 70 43 2d 3e 61 52 6f 77 20 64 6f 65 73  /* pC->aRow does
14d70 20 6e 6f 74 20 68 61 76 65 20 74 6f 20 68 6f 6c   not have to hol
14d80 64 20 74 68 65 20 65 6e 74 69 72 65 20 72 6f 77  d the entire row
14d90 2c 20 62 75 74 20 69 74 20 64 6f 65 73 20 61 74  , but it does at
14da0 20 6c 65 61 73 74 0a 20 20 20 20 20 20 2a 2a 20   least.      ** 
14db0 6e 65 65 64 20 74 6f 20 63 6f 76 65 72 20 74 68  need to cover th
14dc0 65 20 68 65 61 64 65 72 20 6f 66 20 74 68 65 20  e header of the 
14dd0 72 65 63 6f 72 64 2e 20 20 49 66 20 70 43 2d 3e  record.  If pC->
14de0 61 52 6f 77 20 64 6f 65 73 20 6e 6f 74 20 63 6f  aRow does not co
14df0 6e 74 61 69 6e 0a 20 20 20 20 20 20 2a 2a 20 74  ntain.      ** t
14e00 68 65 20 63 6f 6d 70 6c 65 74 65 20 68 65 61 64  he complete head
14e10 65 72 2c 20 74 68 65 6e 20 73 65 74 20 69 74 20  er, then set it 
14e20 74 6f 20 7a 65 72 6f 2c 20 66 6f 72 63 69 6e 67  to zero, forcing
14e30 20 74 68 65 20 68 65 61 64 65 72 20 74 6f 20 62   the header to b
14e40 65 0a 20 20 20 20 20 20 2a 2a 20 64 79 6e 61 6d  e.      ** dynam
14e50 69 63 61 6c 6c 79 20 61 6c 6c 6f 63 61 74 65 64  ically allocated
14e60 2e 20 2a 2f 0a 20 20 20 20 20 20 70 43 2d 3e 61  . */.      pC->a
14e70 52 6f 77 20 3d 20 30 3b 0a 20 20 20 20 20 20 70  Row = 0;.      p
14e80 43 2d 3e 73 7a 52 6f 77 20 3d 20 30 3b 0a 0a 20  C->szRow = 0;.. 
14e90 20 20 20 20 20 2f 2a 20 4d 61 6b 65 20 73 75 72       /* Make sur
14ea0 65 20 61 20 63 6f 72 72 75 70 74 20 64 61 74 61  e a corrupt data
14eb0 62 61 73 65 20 68 61 73 20 6e 6f 74 20 67 69 76  base has not giv
14ec0 65 6e 20 75 73 20 61 6e 20 6f 76 65 72 73 69 7a  en us an oversiz
14ed0 65 20 68 65 61 64 65 72 2e 0a 20 20 20 20 20 20  e header..      
14ee0 2a 2a 20 44 6f 20 74 68 69 73 20 6e 6f 77 20 74  ** Do this now t
14ef0 6f 20 61 76 6f 69 64 20 61 6e 20 6f 76 65 72 73  o avoid an overs
14f00 69 7a 65 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63  ize memory alloc
14f10 61 74 69 6f 6e 2e 0a 20 20 20 20 20 20 2a 2a 0a  ation..      **.
14f20 20 20 20 20 20 20 2a 2a 20 54 79 70 65 20 65 6e        ** Type en
14f30 74 72 69 65 73 20 63 61 6e 20 62 65 20 62 65 74  tries can be bet
14f40 77 65 65 6e 20 31 20 61 6e 64 20 35 20 62 79 74  ween 1 and 5 byt
14f50 65 73 20 65 61 63 68 2e 20 20 42 75 74 20 34 20  es each.  But 4 
14f60 61 6e 64 20 35 20 62 79 74 65 0a 20 20 20 20 20  and 5 byte.     
14f70 20 2a 2a 20 74 79 70 65 73 20 75 73 65 20 73 6f   ** types use so
14f80 20 6d 75 63 68 20 64 61 74 61 20 73 70 61 63 65   much data space
14f90 20 74 68 61 74 20 74 68 65 72 65 20 63 61 6e 20   that there can 
14fa0 6f 6e 6c 79 20 62 65 20 34 30 39 36 20 61 6e 64  only be 4096 and
14fb0 20 33 32 20 6f 66 0a 20 20 20 20 20 20 2a 2a 20   32 of.      ** 
14fc0 74 68 65 6d 2c 20 72 65 73 70 65 63 74 69 76 65  them, respective
14fd0 6c 79 2e 20 20 53 6f 20 74 68 65 20 6d 61 78 69  ly.  So the maxi
14fe0 6d 75 6d 20 68 65 61 64 65 72 20 6c 65 6e 67 74  mum header lengt
14ff0 68 20 72 65 73 75 6c 74 73 20 66 72 6f 6d 20 61  h results from a
15000 0a 20 20 20 20 20 20 2a 2a 20 33 2d 62 79 74 65  .      ** 3-byte
15010 20 74 79 70 65 20 66 6f 72 20 65 61 63 68 20 6f   type for each o
15020 66 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 6f 66  f the maximum of
15030 20 33 32 37 36 38 20 63 6f 6c 75 6d 6e 73 20 70   32768 columns p
15040 6c 75 73 20 74 68 72 65 65 0a 20 20 20 20 20 20  lus three.      
15050 2a 2a 20 65 78 74 72 61 20 62 79 74 65 73 20 66  ** extra bytes f
15060 6f 72 20 74 68 65 20 68 65 61 64 65 72 20 6c 65  or the header le
15070 6e 67 74 68 20 69 74 73 65 6c 66 2e 20 20 33 32  ngth itself.  32
15080 37 36 38 2a 33 20 2b 20 33 20 3d 20 39 38 33 30  768*3 + 3 = 9830
15090 37 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20  7..      */.    
150a0 20 20 69 66 28 20 61 4f 66 66 73 65 74 5b 30 5d    if( aOffset[0]
150b0 20 3e 20 39 38 33 30 37 20 7c 7c 20 61 4f 66 66   > 98307 || aOff
150c0 73 65 74 5b 30 5d 20 3e 20 70 43 2d 3e 70 61 79  set[0] > pC->pay
150d0 6c 6f 61 64 53 69 7a 65 20 29 7b 0a 20 20 20 20  loadSize ){.    
150e0 20 20 20 20 67 6f 74 6f 20 6f 70 5f 63 6f 6c 75      goto op_colu
150f0 6d 6e 5f 63 6f 72 72 75 70 74 3b 0a 20 20 20 20  mn_corrupt;.    
15100 20 20 7d 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20    }.    }else{. 
15110 20 20 20 20 20 2f 2a 20 54 68 69 73 20 69 73 20       /* This is 
15120 61 6e 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 2e  an optimization.
15130 20 20 42 79 20 73 6b 69 70 70 69 6e 67 20 6f 76    By skipping ov
15140 65 72 20 74 68 65 20 66 69 72 73 74 20 66 65 77  er the first few
15150 20 74 65 73 74 73 0a 20 20 20 20 20 20 2a 2a 20   tests.      ** 
15160 28 65 78 3a 20 70 43 2d 3e 6e 48 64 72 50 61 72  (ex: pC->nHdrPar
15170 73 65 64 3c 3d 70 32 29 20 69 6e 20 74 68 65 20  sed<=p2) in the 
15180 6e 65 78 74 20 73 65 63 74 69 6f 6e 2c 20 77 65  next section, we
15190 20 61 63 68 69 65 76 65 20 61 0a 20 20 20 20 20   achieve a.     
151a0 20 2a 2a 20 6d 65 61 73 75 72 61 62 6c 65 20 70   ** measurable p
151b0 65 72 66 6f 72 6d 61 6e 63 65 20 67 61 69 6e 2e  erformance gain.
151c0 0a 20 20 20 20 20 20 2a 2a 0a 20 20 20 20 20 20  .      **.      
151d0 2a 2a 20 54 68 69 73 20 62 72 61 6e 63 68 20 69  ** This branch i
151e0 73 20 74 61 6b 65 6e 20 65 76 65 6e 20 69 66 20  s taken even if 
151f0 61 4f 66 66 73 65 74 5b 30 5d 3d 3d 30 2e 20 20  aOffset[0]==0.  
15200 53 75 63 68 20 61 20 72 65 63 6f 72 64 20 69 73  Such a record is
15210 20 6e 65 76 65 72 0a 20 20 20 20 20 20 2a 2a 20   never.      ** 
15220 67 65 6e 65 72 61 74 65 64 20 62 79 20 53 51 4c  generated by SQL
15230 69 74 65 2c 20 61 6e 64 20 63 6f 75 6c 64 20 62  ite, and could b
15240 65 20 63 6f 6e 73 69 64 65 72 65 64 20 63 6f 72  e considered cor
15250 72 75 70 74 69 6f 6e 2c 20 62 75 74 20 77 65 0a  ruption, but we.
15260 20 20 20 20 20 20 2a 2a 20 61 63 63 65 70 74 20        ** accept 
15270 69 74 20 66 6f 72 20 68 69 73 74 6f 72 69 63 61  it for historica
15280 6c 20 72 65 61 73 6f 6e 73 2e 20 20 57 68 65 6e  l reasons.  When
15290 20 61 4f 66 66 73 65 74 5b 30 5d 3d 3d 30 2c 20   aOffset[0]==0, 
152a0 74 68 65 20 63 6f 64 65 20 74 68 69 73 0a 20 20  the code this.  
152b0 20 20 20 20 2a 2a 20 62 72 61 6e 63 68 20 6a 75      ** branch ju
152c0 6d 70 73 20 74 6f 20 72 65 61 64 73 20 70 61 73  mps to reads pas
152d0 74 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68 65  t the end of the
152e0 20 72 65 63 6f 72 64 2c 20 62 75 74 20 6e 65 76   record, but nev
152f0 65 72 20 6d 6f 72 65 0a 20 20 20 20 20 20 2a 2a  er more.      **
15300 20 74 68 61 6e 20 61 20 66 65 77 20 62 79 74 65   than a few byte
15310 73 2e 20 20 45 76 65 6e 20 69 66 20 74 68 65 20  s.  Even if the 
15320 72 65 63 6f 72 64 20 6f 63 63 75 72 73 20 61 74  record occurs at
15330 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20   the end of the 
15340 70 61 67 65 0a 20 20 20 20 20 20 2a 2a 20 63 6f  page.      ** co
15350 6e 74 65 6e 74 20 61 72 65 61 2c 20 74 68 65 20  ntent area, the 
15360 22 70 61 67 65 20 68 65 61 64 65 72 22 20 63 6f  "page header" co
15370 6d 65 73 20 61 66 74 65 72 20 74 68 65 20 70 61  mes after the pa
15380 67 65 20 63 6f 6e 74 65 6e 74 20 61 6e 64 20 73  ge content and s
15390 6f 0a 20 20 20 20 20 20 2a 2a 20 74 68 69 73 20  o.      ** this 
153a0 6f 76 65 72 72 65 61 64 20 69 73 20 68 61 72 6d  overread is harm
153b0 6c 65 73 73 2e 20 20 53 69 6d 69 6c 61 72 20 6f  less.  Similar o
153c0 76 65 72 72 65 61 64 73 20 63 61 6e 20 6f 63 63  verreads can occ
153d0 75 72 20 66 6f 72 20 61 20 63 6f 72 72 75 70 74  ur for a corrupt
153e0 0a 20 20 20 20 20 20 2a 2a 20 64 61 74 61 62 61  .      ** databa
153f0 73 65 20 66 69 6c 65 2e 0a 20 20 20 20 20 20 2a  se file..      *
15400 2f 0a 20 20 20 20 20 20 7a 44 61 74 61 20 3d 20  /.      zData = 
15410 70 43 2d 3e 61 52 6f 77 3b 0a 20 20 20 20 20 20  pC->aRow;.      
15420 61 73 73 65 72 74 28 20 70 43 2d 3e 6e 48 64 72  assert( pC->nHdr
15430 50 61 72 73 65 64 3c 3d 70 32 20 29 3b 20 20 20  Parsed<=p2 );   
15440 20 20 20 20 20 20 2f 2a 20 43 6f 6e 64 69 74 69        /* Conditi
15450 6f 6e 61 6c 20 73 6b 69 70 70 65 64 20 2a 2f 0a  onal skipped */.
15460 20 20 20 20 20 20 74 65 73 74 63 61 73 65 28 20        testcase( 
15470 61 4f 66 66 73 65 74 5b 30 5d 3d 3d 30 20 29 3b  aOffset[0]==0 );
15480 0a 20 20 20 20 20 20 67 6f 74 6f 20 6f 70 5f 63  .      goto op_c
15490 6f 6c 75 6d 6e 5f 72 65 61 64 5f 68 65 61 64 65  olumn_read_heade
154a0 72 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 0a 20 20  r;.    }.  }..  
154b0 2f 2a 20 4d 61 6b 65 20 73 75 72 65 20 61 74 20  /* Make sure at 
154c0 6c 65 61 73 74 20 74 68 65 20 66 69 72 73 74 20  least the first 
154d0 70 32 2b 31 20 65 6e 74 72 69 65 73 20 6f 66 20  p2+1 entries of 
154e0 74 68 65 20 68 65 61 64 65 72 20 68 61 76 65 20  the header have 
154f0 62 65 65 6e 0a 20 20 2a 2a 20 70 61 72 73 65 64  been.  ** parsed
15500 20 61 6e 64 20 76 61 6c 69 64 20 69 6e 66 6f 72   and valid infor
15510 6d 61 74 69 6f 6e 20 69 73 20 69 6e 20 61 4f 66  mation is in aOf
15520 66 73 65 74 5b 5d 20 61 6e 64 20 70 43 2d 3e 61  fset[] and pC->a
15530 54 79 70 65 5b 5d 2e 0a 20 20 2a 2f 0a 20 20 69  Type[]..  */.  i
15540 66 28 20 70 43 2d 3e 6e 48 64 72 50 61 72 73 65  f( pC->nHdrParse
15550 64 3c 3d 70 32 20 29 7b 0a 20 20 20 20 2f 2a 20  d<=p2 ){.    /* 
15560 49 66 20 74 68 65 72 65 20 69 73 20 6d 6f 72 65  If there is more
15570 20 68 65 61 64 65 72 20 61 76 61 69 6c 61 62 6c   header availabl
15580 65 20 66 6f 72 20 70 61 72 73 69 6e 67 20 69 6e  e for parsing in
15590 20 74 68 65 20 72 65 63 6f 72 64 2c 20 74 72 79   the record, try
155a0 0a 20 20 20 20 2a 2a 20 74 6f 20 65 78 74 72 61  .    ** to extra
155b0 63 74 20 61 64 64 69 74 69 6f 6e 61 6c 20 66 69  ct additional fi
155c0 65 6c 64 73 20 75 70 20 74 68 72 6f 75 67 68 20  elds up through 
155d0 74 68 65 20 70 32 2b 31 2d 74 68 20 66 69 65 6c  the p2+1-th fiel
155e0 64 20 0a 20 20 20 20 2a 2f 0a 20 20 20 20 69 66  d .    */.    if
155f0 28 20 70 43 2d 3e 69 48 64 72 4f 66 66 73 65 74  ( pC->iHdrOffset
15600 3c 61 4f 66 66 73 65 74 5b 30 5d 20 29 7b 0a 20  <aOffset[0] ){. 
15610 20 20 20 20 20 2f 2a 20 4d 61 6b 65 20 73 75 72       /* Make sur
15620 65 20 7a 44 61 74 61 20 70 6f 69 6e 74 73 20 74  e zData points t
15630 6f 20 65 6e 6f 75 67 68 20 6f 66 20 74 68 65 20  o enough of the 
15640 72 65 63 6f 72 64 20 74 6f 20 63 6f 76 65 72 20  record to cover 
15650 74 68 65 20 68 65 61 64 65 72 2e 20 2a 2f 0a 20  the header. */. 
15660 20 20 20 20 20 69 66 28 20 70 43 2d 3e 61 52 6f       if( pC->aRo
15670 77 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20  w==0 ){.        
15680 6d 65 6d 73 65 74 28 26 73 4d 65 6d 2c 20 30 2c  memset(&sMem, 0,
15690 20 73 69 7a 65 6f 66 28 73 4d 65 6d 29 29 3b 0a   sizeof(sMem));.
156a0 20 20 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c          rc = sql
156b0 69 74 65 33 56 64 62 65 4d 65 6d 46 72 6f 6d 42  ite3VdbeMemFromB
156c0 74 72 65 65 28 70 43 2d 3e 75 63 2e 70 43 75 72  tree(pC->uc.pCur
156d0 73 6f 72 2c 20 30 2c 20 61 4f 66 66 73 65 74 5b  sor, 0, aOffset[
156e0 30 5d 2c 20 26 73 4d 65 6d 29 3b 0a 20 20 20 20  0], &sMem);.    
156f0 20 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49      if( rc!=SQLI
15700 54 45 5f 4f 4b 20 29 20 67 6f 74 6f 20 61 62 6f  TE_OK ) goto abo
15710 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
15720 0a 20 20 20 20 20 20 20 20 7a 44 61 74 61 20 3d  .        zData =
15730 20 28 75 38 2a 29 73 4d 65 6d 2e 7a 3b 0a 20 20   (u8*)sMem.z;.  
15740 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
15750 20 20 20 7a 44 61 74 61 20 3d 20 70 43 2d 3e 61     zData = pC->a
15760 52 6f 77 3b 0a 20 20 20 20 20 20 7d 0a 20 20 0a  Row;.      }.  .
15770 20 20 20 20 20 20 2f 2a 20 46 69 6c 6c 20 69 6e        /* Fill in
15780 20 70 43 2d 3e 61 54 79 70 65 5b 69 5d 20 61 6e   pC->aType[i] an
15790 64 20 61 4f 66 66 73 65 74 5b 69 5d 20 76 61 6c  d aOffset[i] val
157a0 75 65 73 20 74 68 72 6f 75 67 68 20 74 68 65 20  ues through the 
157b0 70 32 2d 74 68 20 66 69 65 6c 64 2e 20 2a 2f 0a  p2-th field. */.
157c0 20 20 20 20 6f 70 5f 63 6f 6c 75 6d 6e 5f 72 65      op_column_re
157d0 61 64 5f 68 65 61 64 65 72 3a 0a 20 20 20 20 20  ad_header:.     
157e0 20 69 20 3d 20 70 43 2d 3e 6e 48 64 72 50 61 72   i = pC->nHdrPar
157f0 73 65 64 3b 0a 20 20 20 20 20 20 6f 66 66 73 65  sed;.      offse
15800 74 36 34 20 3d 20 61 4f 66 66 73 65 74 5b 69 5d  t64 = aOffset[i]
15810 3b 0a 20 20 20 20 20 20 7a 48 64 72 20 3d 20 7a  ;.      zHdr = z
15820 44 61 74 61 20 2b 20 70 43 2d 3e 69 48 64 72 4f  Data + pC->iHdrO
15830 66 66 73 65 74 3b 0a 20 20 20 20 20 20 7a 45 6e  ffset;.      zEn
15840 64 48 64 72 20 3d 20 7a 44 61 74 61 20 2b 20 61  dHdr = zData + a
15850 4f 66 66 73 65 74 5b 30 5d 3b 0a 20 20 20 20 20  Offset[0];.     
15860 20 74 65 73 74 63 61 73 65 28 20 7a 48 64 72 3e   testcase( zHdr>
15870 3d 7a 45 6e 64 48 64 72 20 29 3b 0a 20 20 20 20  =zEndHdr );.    
15880 20 20 64 6f 7b 0a 20 20 20 20 20 20 20 20 69 66    do{.        if
15890 28 20 28 74 20 3d 20 7a 48 64 72 5b 30 5d 29 3c  ( (t = zHdr[0])<
158a0 30 78 38 30 20 29 7b 0a 20 20 20 20 20 20 20 20  0x80 ){.        
158b0 20 20 7a 48 64 72 2b 2b 3b 0a 20 20 20 20 20 20    zHdr++;.      
158c0 20 20 20 20 6f 66 66 73 65 74 36 34 20 2b 3d 20      offset64 += 
158d0 73 71 6c 69 74 65 33 56 64 62 65 4f 6e 65 42 79  sqlite3VdbeOneBy
158e0 74 65 53 65 72 69 61 6c 54 79 70 65 4c 65 6e 28  teSerialTypeLen(
158f0 74 29 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c 73  t);.        }els
15900 65 7b 0a 20 20 20 20 20 20 20 20 20 20 7a 48 64  e{.          zHd
15910 72 20 2b 3d 20 73 71 6c 69 74 65 33 47 65 74 56  r += sqlite3GetV
15920 61 72 69 6e 74 33 32 28 7a 48 64 72 2c 20 26 74  arint32(zHdr, &t
15930 29 3b 0a 20 20 20 20 20 20 20 20 20 20 6f 66 66  );.          off
15940 73 65 74 36 34 20 2b 3d 20 73 71 6c 69 74 65 33  set64 += sqlite3
15950 56 64 62 65 53 65 72 69 61 6c 54 79 70 65 4c 65  VdbeSerialTypeLe
15960 6e 28 74 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a  n(t);.        }.
15970 20 20 20 20 20 20 20 20 70 43 2d 3e 61 54 79 70          pC->aTyp
15980 65 5b 69 2b 2b 5d 20 3d 20 74 3b 0a 20 20 20 20  e[i++] = t;.    
15990 20 20 20 20 61 4f 66 66 73 65 74 5b 69 5d 20 3d      aOffset[i] =
159a0 20 28 75 33 32 29 28 6f 66 66 73 65 74 36 34 20   (u32)(offset64 
159b0 26 20 30 78 66 66 66 66 66 66 66 66 29 3b 0a 20  & 0xffffffff);. 
159c0 20 20 20 20 20 7d 77 68 69 6c 65 28 20 69 3c 3d       }while( i<=
159d0 70 32 20 26 26 20 7a 48 64 72 3c 7a 45 6e 64 48  p2 && zHdr<zEndH
159e0 64 72 20 29 3b 0a 0a 20 20 20 20 20 20 2f 2a 20  dr );..      /* 
159f0 54 68 65 20 72 65 63 6f 72 64 20 69 73 20 63 6f  The record is co
15a00 72 72 75 70 74 20 69 66 20 61 6e 79 20 6f 66 20  rrupt if any of 
15a10 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 72  the following ar
15a20 65 20 74 72 75 65 3a 0a 20 20 20 20 20 20 2a 2a  e true:.      **
15a30 20 28 31 29 20 74 68 65 20 62 79 74 65 73 20 6f   (1) the bytes o
15a40 66 20 74 68 65 20 68 65 61 64 65 72 20 65 78 74  f the header ext
15a50 65 6e 64 20 70 61 73 74 20 74 68 65 20 64 65 63  end past the dec
15a60 6c 61 72 65 64 20 68 65 61 64 65 72 20 73 69 7a  lared header siz
15a70 65 0a 20 20 20 20 20 20 2a 2a 20 28 32 29 20 74  e.      ** (2) t
15a80 68 65 20 65 6e 74 69 72 65 20 68 65 61 64 65 72  he entire header
15a90 20 77 61 73 20 75 73 65 64 20 62 75 74 20 6e 6f   was used but no
15aa0 74 20 61 6c 6c 20 64 61 74 61 20 77 61 73 20 75  t all data was u
15ab0 73 65 64 0a 20 20 20 20 20 20 2a 2a 20 28 33 29  sed.      ** (3)
15ac0 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20   the end of the 
15ad0 64 61 74 61 20 65 78 74 65 6e 64 73 20 62 65 79  data extends bey
15ae0 6f 6e 64 20 74 68 65 20 65 6e 64 20 6f 66 20 74  ond the end of t
15af0 68 65 20 72 65 63 6f 72 64 2e 0a 20 20 20 20 20  he record..     
15b00 20 2a 2f 0a 20 20 20 20 20 20 69 66 28 20 28 7a   */.      if( (z
15b10 48 64 72 3e 3d 7a 45 6e 64 48 64 72 20 26 26 20  Hdr>=zEndHdr && 
15b20 28 7a 48 64 72 3e 7a 45 6e 64 48 64 72 20 7c 7c  (zHdr>zEndHdr ||
15b30 20 6f 66 66 73 65 74 36 34 21 3d 70 43 2d 3e 70   offset64!=pC->p
15b40 61 79 6c 6f 61 64 53 69 7a 65 29 29 0a 20 20 20  ayloadSize)).   
15b50 20 20 20 20 7c 7c 20 28 6f 66 66 73 65 74 36 34      || (offset64
15b60 20 3e 20 70 43 2d 3e 70 61 79 6c 6f 61 64 53 69   > pC->payloadSi
15b70 7a 65 29 0a 20 20 20 20 20 20 29 7b 0a 20 20 20  ze).      ){.   
15b80 20 20 20 20 20 69 66 28 20 61 4f 66 66 73 65 74       if( aOffset
15b90 5b 30 5d 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  [0]==0 ){.      
15ba0 20 20 20 20 69 20 3d 20 30 3b 0a 20 20 20 20 20      i = 0;.     
15bb0 20 20 20 20 20 7a 48 64 72 20 3d 20 7a 45 6e 64       zHdr = zEnd
15bc0 48 64 72 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c  Hdr;.        }el
15bd0 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20 69 66  se{.          if
15be0 28 20 70 43 2d 3e 61 52 6f 77 3d 3d 30 20 29 20  ( pC->aRow==0 ) 
15bf0 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 52 65  sqlite3VdbeMemRe
15c00 6c 65 61 73 65 28 26 73 4d 65 6d 29 3b 0a 20 20  lease(&sMem);.  
15c10 20 20 20 20 20 20 20 20 67 6f 74 6f 20 6f 70 5f          goto op_
15c20 63 6f 6c 75 6d 6e 5f 63 6f 72 72 75 70 74 3b 0a  column_corrupt;.
15c30 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
15c40 7d 0a 0a 20 20 20 20 20 20 70 43 2d 3e 6e 48 64  }..      pC->nHd
15c50 72 50 61 72 73 65 64 20 3d 20 69 3b 0a 20 20 20  rParsed = i;.   
15c60 20 20 20 70 43 2d 3e 69 48 64 72 4f 66 66 73 65     pC->iHdrOffse
15c70 74 20 3d 20 28 75 33 32 29 28 7a 48 64 72 20 2d  t = (u32)(zHdr -
15c80 20 7a 44 61 74 61 29 3b 0a 20 20 20 20 20 20 69   zData);.      i
15c90 66 28 20 70 43 2d 3e 61 52 6f 77 3d 3d 30 20 29  f( pC->aRow==0 )
15ca0 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 52   sqlite3VdbeMemR
15cb0 65 6c 65 61 73 65 28 26 73 4d 65 6d 29 3b 0a 20  elease(&sMem);. 
15cc0 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
15cd0 74 20 3d 20 30 3b 0a 20 20 20 20 7d 0a 0a 20 20  t = 0;.    }..  
15ce0 20 20 2f 2a 20 49 66 20 61 66 74 65 72 20 74 72    /* If after tr
15cf0 79 69 6e 67 20 74 6f 20 65 78 74 72 61 63 74 20  ying to extract 
15d00 6e 65 77 20 65 6e 74 72 69 65 73 20 66 72 6f 6d  new entries from
15d10 20 74 68 65 20 68 65 61 64 65 72 2c 20 6e 48 64   the header, nHd
15d20 72 50 61 72 73 65 64 20 69 73 0a 20 20 20 20 2a  rParsed is.    *
15d30 2a 20 73 74 69 6c 6c 20 6e 6f 74 20 75 70 20 74  * still not up t
15d40 6f 20 70 32 2c 20 74 68 61 74 20 6d 65 61 6e 73  o p2, that means
15d50 20 74 68 61 74 20 74 68 65 20 72 65 63 6f 72 64   that the record
15d60 20 68 61 73 20 66 65 77 65 72 20 74 68 61 6e 20   has fewer than 
15d70 70 32 0a 20 20 20 20 2a 2a 20 63 6f 6c 75 6d 6e  p2.    ** column
15d80 73 2e 20 20 53 6f 20 74 68 65 20 72 65 73 75 6c  s.  So the resul
15d90 74 20 77 69 6c 6c 20 62 65 20 65 69 74 68 65 72  t will be either
15da0 20 74 68 65 20 64 65 66 61 75 6c 74 20 76 61 6c   the default val
15db0 75 65 20 6f 72 20 61 20 4e 55 4c 4c 2e 0a 20 20  ue or a NULL..  
15dc0 20 20 2a 2f 0a 20 20 20 20 69 66 28 20 70 43 2d    */.    if( pC-
15dd0 3e 6e 48 64 72 50 61 72 73 65 64 3c 3d 70 32 20  >nHdrParsed<=p2 
15de0 29 7b 0a 20 20 20 20 20 20 69 66 28 20 70 4f 70  ){.      if( pOp
15df0 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 4d 45 4d  ->p4type==P4_MEM
15e00 20 29 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69   ){.        sqli
15e10 74 65 33 56 64 62 65 4d 65 6d 53 68 61 6c 6c 6f  te3VdbeMemShallo
15e20 77 43 6f 70 79 28 70 44 65 73 74 2c 20 70 4f 70  wCopy(pDest, pOp
15e30 2d 3e 70 34 2e 70 4d 65 6d 2c 20 4d 45 4d 5f 53  ->p4.pMem, MEM_S
15e40 74 61 74 69 63 29 3b 0a 20 20 20 20 20 20 7d 65  tatic);.      }e
15e50 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 73 71 6c  lse{.        sql
15e60 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75  ite3VdbeMemSetNu
15e70 6c 6c 28 70 44 65 73 74 29 3b 0a 20 20 20 20 20  ll(pDest);.     
15e80 20 7d 0a 20 20 20 20 20 20 67 6f 74 6f 20 6f 70   }.      goto op
15e90 5f 63 6f 6c 75 6d 6e 5f 6f 75 74 3b 0a 20 20 20  _column_out;.   
15ea0 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20   }.  }else{.    
15eb0 74 20 3d 20 70 43 2d 3e 61 54 79 70 65 5b 70 32  t = pC->aType[p2
15ec0 5d 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 45 78 74  ];.  }..  /* Ext
15ed0 72 61 63 74 20 74 68 65 20 63 6f 6e 74 65 6e 74  ract the content
15ee0 20 66 6f 72 20 74 68 65 20 70 32 2b 31 2d 74 68   for the p2+1-th
15ef0 20 63 6f 6c 75 6d 6e 2e 20 20 43 6f 6e 74 72 6f   column.  Contro
15f00 6c 20 63 61 6e 20 6f 6e 6c 79 0a 20 20 2a 2a 20  l can only.  ** 
15f10 72 65 61 63 68 20 74 68 69 73 20 70 6f 69 6e 74  reach this point
15f20 20 69 66 20 61 4f 66 66 73 65 74 5b 70 32 5d 2c   if aOffset[p2],
15f30 20 61 4f 66 66 73 65 74 5b 70 32 2b 31 5d 2c 20   aOffset[p2+1], 
15f40 61 6e 64 20 70 43 2d 3e 61 54 79 70 65 5b 70 32  and pC->aType[p2
15f50 5d 20 61 72 65 0a 20 20 2a 2a 20 61 6c 6c 20 76  ] are.  ** all v
15f60 61 6c 69 64 2e 0a 20 20 2a 2f 0a 20 20 61 73 73  alid..  */.  ass
15f70 65 72 74 28 20 70 32 3c 70 43 2d 3e 6e 48 64 72  ert( p2<pC->nHdr
15f80 50 61 72 73 65 64 20 29 3b 0a 20 20 61 73 73 65  Parsed );.  asse
15f90 72 74 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f  rt( rc==SQLITE_O
15fa0 4b 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 73  K );.  assert( s
15fb0 71 6c 69 74 65 33 56 64 62 65 43 68 65 63 6b 4d  qlite3VdbeCheckM
15fc0 65 6d 49 6e 76 61 72 69 61 6e 74 73 28 70 44 65  emInvariants(pDe
15fd0 73 74 29 20 29 3b 0a 20 20 69 66 28 20 56 64 62  st) );.  if( Vdb
15fe0 65 4d 65 6d 44 79 6e 61 6d 69 63 28 70 44 65 73  eMemDynamic(pDes
15ff0 74 29 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  t) ){.    sqlite
16000 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28  3VdbeMemSetNull(
16010 70 44 65 73 74 29 3b 0a 20 20 7d 0a 20 20 61 73  pDest);.  }.  as
16020 73 65 72 74 28 20 74 3d 3d 70 43 2d 3e 61 54 79  sert( t==pC->aTy
16030 70 65 5b 70 32 5d 20 29 3b 0a 20 20 69 66 28 20  pe[p2] );.  if( 
16040 70 43 2d 3e 73 7a 52 6f 77 3e 3d 61 4f 66 66 73  pC->szRow>=aOffs
16050 65 74 5b 70 32 2b 31 5d 20 29 7b 0a 20 20 20 20  et[p2+1] ){.    
16060 2f 2a 20 54 68 69 73 20 69 73 20 74 68 65 20 63  /* This is the c
16070 6f 6d 6d 6f 6e 20 63 61 73 65 20 77 68 65 72 65  ommon case where
16080 20 74 68 65 20 64 65 73 69 72 65 64 20 63 6f 6e   the desired con
16090 74 65 6e 74 20 66 69 74 73 20 6f 6e 20 74 68 65  tent fits on the
160a0 20 6f 72 69 67 69 6e 61 6c 0a 20 20 20 20 2a 2a   original.    **
160b0 20 70 61 67 65 20 2d 20 77 68 65 72 65 20 74 68   page - where th
160c0 65 20 63 6f 6e 74 65 6e 74 20 69 73 20 6e 6f 74  e content is not
160d0 20 6f 6e 20 61 6e 20 6f 76 65 72 66 6c 6f 77 20   on an overflow 
160e0 70 61 67 65 20 2a 2f 0a 20 20 20 20 7a 44 61 74  page */.    zDat
160f0 61 20 3d 20 70 43 2d 3e 61 52 6f 77 20 2b 20 61  a = pC->aRow + a
16100 4f 66 66 73 65 74 5b 70 32 5d 3b 0a 20 20 20 20  Offset[p2];.    
16110 69 66 28 20 74 3c 31 32 20 29 7b 0a 20 20 20 20  if( t<12 ){.    
16120 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 72    sqlite3VdbeSer
16130 69 61 6c 47 65 74 28 7a 44 61 74 61 2c 20 74 2c  ialGet(zData, t,
16140 20 70 44 65 73 74 29 3b 0a 20 20 20 20 7d 65 6c   pDest);.    }el
16150 73 65 7b 0a 20 20 20 20 20 20 2f 2a 20 49 66 20  se{.      /* If 
16160 74 68 65 20 63 6f 6c 75 6d 6e 20 76 61 6c 75 65  the column value
16170 20 69 73 20 61 20 73 74 72 69 6e 67 2c 20 77 65   is a string, we
16180 20 6e 65 65 64 20 61 20 70 65 72 73 69 73 74 65   need a persiste
16190 6e 74 20 76 61 6c 75 65 2c 20 6e 6f 74 0a 20 20  nt value, not.  
161a0 20 20 20 20 2a 2a 20 61 20 4d 45 4d 5f 45 70 68      ** a MEM_Eph
161b0 65 6d 20 76 61 6c 75 65 2e 20 20 54 68 69 73 20  em value.  This 
161c0 62 72 61 6e 63 68 20 69 73 20 61 20 66 61 73 74  branch is a fast
161d0 20 73 68 6f 72 74 2d 63 75 74 20 74 68 61 74 20   short-cut that 
161e0 69 73 20 65 71 75 69 76 61 6c 65 6e 74 0a 20 20  is equivalent.  
161f0 20 20 20 20 2a 2a 20 74 6f 20 63 61 6c 6c 69 6e      ** to callin
16200 67 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 72  g sqlite3VdbeSer
16210 69 61 6c 47 65 74 28 29 20 61 6e 64 20 73 71 6c  ialGet() and sql
16220 69 74 65 33 56 64 62 65 44 65 65 70 68 65 6d 65  ite3VdbeDeepheme
16230 72 61 6c 69 7a 65 28 29 2e 0a 20 20 20 20 20 20  ralize()..      
16240 2a 2f 0a 20 20 20 20 20 20 73 74 61 74 69 63 20  */.      static 
16250 63 6f 6e 73 74 20 75 31 36 20 61 46 6c 61 67 5b  const u16 aFlag[
16260 5d 20 3d 20 7b 20 4d 45 4d 5f 42 6c 6f 62 2c 20  ] = { MEM_Blob, 
16270 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f 54 65 72 6d  MEM_Str|MEM_Term
16280 20 7d 3b 0a 20 20 20 20 20 20 70 44 65 73 74 2d   };.      pDest-
16290 3e 6e 20 3d 20 6c 65 6e 20 3d 20 28 74 2d 31 32  >n = len = (t-12
162a0 29 2f 32 3b 0a 20 20 20 20 20 20 70 44 65 73 74  )/2;.      pDest
162b0 2d 3e 65 6e 63 20 3d 20 65 6e 63 6f 64 69 6e 67  ->enc = encoding
162c0 3b 0a 20 20 20 20 20 20 69 66 28 20 70 44 65 73  ;.      if( pDes
162d0 74 2d 3e 73 7a 4d 61 6c 6c 6f 63 20 3c 20 6c 65  t->szMalloc < le
162e0 6e 2b 32 20 29 7b 0a 20 20 20 20 20 20 20 20 70  n+2 ){.        p
162f0 44 65 73 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45  Dest->flags = ME
16300 4d 5f 4e 75 6c 6c 3b 0a 20 20 20 20 20 20 20 20  M_Null;.        
16310 69 66 28 20 73 71 6c 69 74 65 33 56 64 62 65 4d  if( sqlite3VdbeM
16320 65 6d 47 72 6f 77 28 70 44 65 73 74 2c 20 6c 65  emGrow(pDest, le
16330 6e 2b 32 2c 20 30 29 20 29 20 67 6f 74 6f 20 6e  n+2, 0) ) goto n
16340 6f 5f 6d 65 6d 3b 0a 20 20 20 20 20 20 7d 65 6c  o_mem;.      }el
16350 73 65 7b 0a 20 20 20 20 20 20 20 20 70 44 65 73  se{.        pDes
16360 74 2d 3e 7a 20 3d 20 70 44 65 73 74 2d 3e 7a 4d  t->z = pDest->zM
16370 61 6c 6c 6f 63 3b 0a 20 20 20 20 20 20 7d 0a 20  alloc;.      }. 
16380 20 20 20 20 20 6d 65 6d 63 70 79 28 70 44 65 73       memcpy(pDes
16390 74 2d 3e 7a 2c 20 7a 44 61 74 61 2c 20 6c 65 6e  t->z, zData, len
163a0 29 3b 0a 20 20 20 20 20 20 70 44 65 73 74 2d 3e  );.      pDest->
163b0 7a 5b 6c 65 6e 5d 20 3d 20 30 3b 0a 20 20 20 20  z[len] = 0;.    
163c0 20 20 70 44 65 73 74 2d 3e 7a 5b 6c 65 6e 2b 31    pDest->z[len+1
163d0 5d 20 3d 20 30 3b 0a 20 20 20 20 20 20 70 44 65  ] = 0;.      pDe
163e0 73 74 2d 3e 66 6c 61 67 73 20 3d 20 61 46 6c 61  st->flags = aFla
163f0 67 5b 74 26 31 5d 3b 0a 20 20 20 20 7d 0a 20 20  g[t&1];.    }.  
16400 7d 65 6c 73 65 7b 0a 20 20 20 20 70 44 65 73 74  }else{.    pDest
16410 2d 3e 65 6e 63 20 3d 20 65 6e 63 6f 64 69 6e 67  ->enc = encoding
16420 3b 0a 20 20 20 20 2f 2a 20 54 68 69 73 20 62 72  ;.    /* This br
16430 61 6e 63 68 20 68 61 70 70 65 6e 73 20 6f 6e 6c  anch happens onl
16440 79 20 77 68 65 6e 20 63 6f 6e 74 65 6e 74 20 69  y when content i
16450 73 20 6f 6e 20 6f 76 65 72 66 6c 6f 77 20 70 61  s on overflow pa
16460 67 65 73 20 2a 2f 0a 20 20 20 20 69 66 28 20 28  ges */.    if( (
16470 28 70 4f 70 2d 3e 70 35 20 26 20 28 4f 50 46 4c  (pOp->p5 & (OPFL
16480 41 47 5f 4c 45 4e 47 54 48 41 52 47 7c 4f 50 46  AG_LENGTHARG|OPF
16490 4c 41 47 5f 54 59 50 45 4f 46 41 52 47 29 29 21  LAG_TYPEOFARG))!
164a0 3d 30 0a 20 20 20 20 20 20 20 20 20 20 26 26 20  =0.          && 
164b0 28 28 74 3e 3d 31 32 20 26 26 20 28 74 26 31 29  ((t>=12 && (t&1)
164c0 3d 3d 30 29 20 7c 7c 20 28 70 4f 70 2d 3e 70 35  ==0) || (pOp->p5
164d0 20 26 20 4f 50 46 4c 41 47 5f 54 59 50 45 4f 46   & OPFLAG_TYPEOF
164e0 41 52 47 29 21 3d 30 29 29 0a 20 20 20 20 20 7c  ARG)!=0)).     |
164f0 7c 20 28 6c 65 6e 20 3d 20 73 71 6c 69 74 65 33  | (len = sqlite3
16500 56 64 62 65 53 65 72 69 61 6c 54 79 70 65 4c 65  VdbeSerialTypeLe
16510 6e 28 74 29 29 3d 3d 30 0a 20 20 20 20 29 7b 0a  n(t))==0.    ){.
16520 20 20 20 20 20 20 2f 2a 20 43 6f 6e 74 65 6e 74        /* Content
16530 20 69 73 20 69 72 72 65 6c 65 76 61 6e 74 20 66   is irrelevant f
16540 6f 72 0a 20 20 20 20 20 20 2a 2a 20 20 20 20 31  or.      **    1
16550 2e 20 74 68 65 20 74 79 70 65 6f 66 28 29 20 66  . the typeof() f
16560 75 6e 63 74 69 6f 6e 2c 0a 20 20 20 20 20 20 2a  unction,.      *
16570 2a 20 20 20 20 32 2e 20 74 68 65 20 6c 65 6e 67  *    2. the leng
16580 74 68 28 58 29 20 66 75 6e 63 74 69 6f 6e 20 69  th(X) function i
16590 66 20 58 20 69 73 20 61 20 62 6c 6f 62 2c 20 61  f X is a blob, a
165a0 6e 64 0a 20 20 20 20 20 20 2a 2a 20 20 20 20 33  nd.      **    3
165b0 2e 20 69 66 20 74 68 65 20 63 6f 6e 74 65 6e 74  . if the content
165c0 20 6c 65 6e 67 74 68 20 69 73 20 7a 65 72 6f 2e   length is zero.
165d0 0a 20 20 20 20 20 20 2a 2a 20 53 6f 20 77 65 20  .      ** So we 
165e0 6d 69 67 68 74 20 61 73 20 77 65 6c 6c 20 75 73  might as well us
165f0 65 20 62 6f 67 75 73 20 63 6f 6e 74 65 6e 74 20  e bogus content 
16600 72 61 74 68 65 72 20 74 68 61 6e 20 72 65 61 64  rather than read
16610 69 6e 67 0a 20 20 20 20 20 20 2a 2a 20 63 6f 6e  ing.      ** con
16620 74 65 6e 74 20 66 72 6f 6d 20 64 69 73 6b 2e 20  tent from disk. 
16630 0a 20 20 20 20 20 20 2a 2a 0a 20 20 20 20 20 20  .      **.      
16640 2a 2a 20 41 6c 74 68 6f 75 67 68 20 73 71 6c 69  ** Although sqli
16650 74 65 33 56 64 62 65 53 65 72 69 61 6c 47 65 74  te3VdbeSerialGet
16660 28 29 20 6d 61 79 20 72 65 61 64 20 61 74 20 6d  () may read at m
16670 6f 73 74 20 38 20 62 79 74 65 73 20 66 72 6f 6d  ost 8 bytes from
16680 20 74 68 65 0a 20 20 20 20 20 20 2a 2a 20 62 75   the.      ** bu
16690 66 66 65 72 20 70 61 73 73 65 64 20 74 6f 20 69  ffer passed to i
166a0 74 2c 20 64 65 62 75 67 67 69 6e 67 20 66 75 6e  t, debugging fun
166b0 63 74 69 6f 6e 20 56 64 62 65 4d 65 6d 50 72 65  ction VdbeMemPre
166c0 74 74 79 50 72 69 6e 74 28 29 20 6d 61 79 0a 20  ttyPrint() may. 
166d0 20 20 20 20 20 2a 2a 20 72 65 61 64 20 75 70 20       ** read up 
166e0 74 6f 20 31 36 2e 20 53 6f 20 31 36 20 62 79 74  to 16. So 16 byt
166f0 65 73 20 6f 66 20 62 6f 67 75 73 20 63 6f 6e 74  es of bogus cont
16700 65 6e 74 20 69 73 20 73 75 70 70 6c 69 65 64 2e  ent is supplied.
16710 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20  .      */.      
16720 73 74 61 74 69 63 20 75 38 20 61 5a 65 72 6f 5b  static u8 aZero[
16730 31 36 5d 3b 20 20 2f 2a 20 54 68 69 73 20 69 73  16];  /* This is
16740 20 74 68 65 20 62 6f 67 75 73 20 63 6f 6e 74 65   the bogus conte
16750 6e 74 20 2a 2f 0a 20 20 20 20 20 20 73 71 6c 69  nt */.      sqli
16760 74 65 33 56 64 62 65 53 65 72 69 61 6c 47 65 74  te3VdbeSerialGet
16770 28 61 5a 65 72 6f 2c 20 74 2c 20 70 44 65 73 74  (aZero, t, pDest
16780 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  );.    }else{.  
16790 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
167a0 56 64 62 65 4d 65 6d 46 72 6f 6d 42 74 72 65 65  VdbeMemFromBtree
167b0 28 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 2c  (pC->uc.pCursor,
167c0 20 61 4f 66 66 73 65 74 5b 70 32 5d 2c 20 6c 65   aOffset[p2], le
167d0 6e 2c 20 70 44 65 73 74 29 3b 0a 20 20 20 20 20  n, pDest);.     
167e0 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f   if( rc!=SQLITE_
167f0 4f 4b 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f  OK ) goto abort_
16800 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
16810 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53      sqlite3VdbeS
16820 65 72 69 61 6c 47 65 74 28 28 63 6f 6e 73 74 20  erialGet((const 
16830 75 38 2a 29 70 44 65 73 74 2d 3e 7a 2c 20 74 2c  u8*)pDest->z, t,
16840 20 70 44 65 73 74 29 3b 0a 20 20 20 20 20 20 70   pDest);.      p
16850 44 65 73 74 2d 3e 66 6c 61 67 73 20 26 3d 20 7e  Dest->flags &= ~
16860 4d 45 4d 5f 45 70 68 65 6d 3b 0a 20 20 20 20 7d  MEM_Ephem;.    }
16870 0a 20 20 7d 0a 0a 6f 70 5f 63 6f 6c 75 6d 6e 5f  .  }..op_column_
16880 6f 75 74 3a 0a 20 20 55 50 44 41 54 45 5f 4d 41  out:.  UPDATE_MA
16890 58 5f 42 4c 4f 42 53 49 5a 45 28 70 44 65 73 74  X_BLOBSIZE(pDest
168a0 29 3b 0a 20 20 52 45 47 49 53 54 45 52 5f 54 52  );.  REGISTER_TR
168b0 41 43 45 28 70 4f 70 2d 3e 70 33 2c 20 70 44 65  ACE(pOp->p3, pDe
168c0 73 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 0a 6f  st);.  break;..o
168d0 70 5f 63 6f 6c 75 6d 6e 5f 63 6f 72 72 75 70 74  p_column_corrupt
168e0 3a 0a 20 20 69 66 28 20 61 4f 70 5b 30 5d 2e 70  :.  if( aOp[0].p
168f0 33 3e 30 20 29 7b 0a 20 20 20 20 70 4f 70 20 3d  3>0 ){.    pOp =
16900 20 26 61 4f 70 5b 61 4f 70 5b 30 5d 2e 70 33 2d   &aOp[aOp[0].p3-
16910 31 5d 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20  1];.    break;. 
16920 20 7d 65 6c 73 65 7b 0a 20 20 20 20 72 63 20 3d   }else{.    rc =
16930 20 53 51 4c 49 54 45 5f 43 4f 52 52 55 50 54 5f   SQLITE_CORRUPT_
16940 42 4b 50 54 3b 0a 20 20 20 20 67 6f 74 6f 20 61  BKPT;.    goto a
16950 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
16960 72 3b 0a 20 20 7d 0a 7d 0a 0a 2f 2a 20 4f 70 63  r;.  }.}../* Opc
16970 6f 64 65 3a 20 41 66 66 69 6e 69 74 79 20 50 31  ode: Affinity P1
16980 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 20 53 79   P2 * P4 *.** Sy
16990 6e 6f 70 73 69 73 3a 20 61 66 66 69 6e 69 74 79  nopsis: affinity
169a0 28 72 5b 50 31 40 50 32 5d 29 0a 2a 2a 0a 2a 2a  (r[P1@P2]).**.**
169b0 20 41 70 70 6c 79 20 61 66 66 69 6e 69 74 69 65   Apply affinitie
169c0 73 20 74 6f 20 61 20 72 61 6e 67 65 20 6f 66 20  s to a range of 
169d0 50 32 20 72 65 67 69 73 74 65 72 73 20 73 74 61  P2 registers sta
169e0 72 74 69 6e 67 20 77 69 74 68 20 50 31 2e 0a 2a  rting with P1..*
169f0 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20 73 74 72  *.** P4 is a str
16a00 69 6e 67 20 74 68 61 74 20 69 73 20 50 32 20 63  ing that is P2 c
16a10 68 61 72 61 63 74 65 72 73 20 6c 6f 6e 67 2e 20  haracters long. 
16a20 54 68 65 20 4e 2d 74 68 20 63 68 61 72 61 63 74  The N-th charact
16a30 65 72 20 6f 66 20 74 68 65 0a 2a 2a 20 73 74 72  er of the.** str
16a40 69 6e 67 20 69 6e 64 69 63 61 74 65 73 20 74 68  ing indicates th
16a50 65 20 63 6f 6c 75 6d 6e 20 61 66 66 69 6e 69 74  e column affinit
16a60 79 20 74 68 61 74 20 73 68 6f 75 6c 64 20 62 65  y that should be
16a70 20 75 73 65 64 20 66 6f 72 20 74 68 65 20 4e 2d   used for the N-
16a80 74 68 0a 2a 2a 20 6d 65 6d 6f 72 79 20 63 65 6c  th.** memory cel
16a90 6c 20 69 6e 20 74 68 65 20 72 61 6e 67 65 2e 0a  l in the range..
16aa0 2a 2f 0a 63 61 73 65 20 4f 50 5f 41 66 66 69 6e  */.case OP_Affin
16ab0 69 74 79 3a 20 7b 0a 20 20 63 6f 6e 73 74 20 63  ity: {.  const c
16ac0 68 61 72 20 2a 7a 41 66 66 69 6e 69 74 79 3b 20  har *zAffinity; 
16ad0 20 20 2f 2a 20 54 68 65 20 61 66 66 69 6e 69 74    /* The affinit
16ae0 79 20 74 6f 20 62 65 20 61 70 70 6c 69 65 64 20  y to be applied 
16af0 2a 2f 0a 0a 20 20 7a 41 66 66 69 6e 69 74 79 20  */..  zAffinity 
16b00 3d 20 70 4f 70 2d 3e 70 34 2e 7a 3b 0a 20 20 61  = pOp->p4.z;.  a
16b10 73 73 65 72 74 28 20 7a 41 66 66 69 6e 69 74 79  ssert( zAffinity
16b20 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  !=0 );.  assert(
16b30 20 70 4f 70 2d 3e 70 32 3e 30 20 29 3b 0a 20 20   pOp->p2>0 );.  
16b40 61 73 73 65 72 74 28 20 7a 41 66 66 69 6e 69 74  assert( zAffinit
16b50 79 5b 70 4f 70 2d 3e 70 32 5d 3d 3d 30 20 29 3b  y[pOp->p2]==0 );
16b60 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b  .  pIn1 = &aMem[
16b70 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 64 6f 7b 0a  pOp->p1];.  do{.
16b80 20 20 20 20 61 73 73 65 72 74 28 20 70 49 6e 31      assert( pIn1
16b90 20 3c 3d 20 26 70 2d 3e 61 4d 65 6d 5b 28 70 2d   <= &p->aMem[(p-
16ba0 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75  >nMem+1 - p->nCu
16bb0 72 73 6f 72 29 5d 20 29 3b 0a 20 20 20 20 61 73  rsor)] );.    as
16bc0 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64  sert( memIsValid
16bd0 28 70 49 6e 31 29 20 29 3b 0a 20 20 20 20 61 70  (pIn1) );.    ap
16be0 70 6c 79 41 66 66 69 6e 69 74 79 28 70 49 6e 31  plyAffinity(pIn1
16bf0 2c 20 2a 28 7a 41 66 66 69 6e 69 74 79 2b 2b 29  , *(zAffinity++)
16c00 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 20  , encoding);.   
16c10 20 70 49 6e 31 2b 2b 3b 0a 20 20 7d 77 68 69 6c   pIn1++;.  }whil
16c20 65 28 20 7a 41 66 66 69 6e 69 74 79 5b 30 5d 20  e( zAffinity[0] 
16c30 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  );.  break;.}../
16c40 2a 20 4f 70 63 6f 64 65 3a 20 4d 61 6b 65 52 65  * Opcode: MakeRe
16c50 63 6f 72 64 20 50 31 20 50 32 20 50 33 20 50 34  cord P1 P2 P3 P4
16c60 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
16c70 72 5b 50 33 5d 3d 6d 6b 72 65 63 28 72 5b 50 31  r[P3]=mkrec(r[P1
16c80 40 50 32 5d 29 0a 2a 2a 0a 2a 2a 20 43 6f 6e 76  @P2]).**.** Conv
16c90 65 72 74 20 50 32 20 72 65 67 69 73 74 65 72 73  ert P2 registers
16ca0 20 62 65 67 69 6e 6e 69 6e 67 20 77 69 74 68 20   beginning with 
16cb0 50 31 20 69 6e 74 6f 20 74 68 65 20 5b 72 65 63  P1 into the [rec
16cc0 6f 72 64 20 66 6f 72 6d 61 74 5d 0a 2a 2a 20 75  ord format].** u
16cd0 73 65 20 61 73 20 61 20 64 61 74 61 20 72 65 63  se as a data rec
16ce0 6f 72 64 20 69 6e 20 61 20 64 61 74 61 62 61 73  ord in a databas
16cf0 65 20 74 61 62 6c 65 20 6f 72 20 61 73 20 61 20  e table or as a 
16d00 6b 65 79 0a 2a 2a 20 69 6e 20 61 6e 20 69 6e 64  key.** in an ind
16d10 65 78 2e 20 20 54 68 65 20 4f 50 5f 43 6f 6c 75  ex.  The OP_Colu
16d20 6d 6e 20 6f 70 63 6f 64 65 20 63 61 6e 20 64 65  mn opcode can de
16d30 63 6f 64 65 20 74 68 65 20 72 65 63 6f 72 64 20  code the record 
16d40 6c 61 74 65 72 2e 0a 2a 2a 0a 2a 2a 20 50 34 20  later..**.** P4 
16d50 6d 61 79 20 62 65 20 61 20 73 74 72 69 6e 67 20  may be a string 
16d60 74 68 61 74 20 69 73 20 50 32 20 63 68 61 72 61  that is P2 chara
16d70 63 74 65 72 73 20 6c 6f 6e 67 2e 20 20 54 68 65  cters long.  The
16d80 20 4e 2d 74 68 20 63 68 61 72 61 63 74 65 72 20   N-th character 
16d90 6f 66 20 74 68 65 0a 2a 2a 20 73 74 72 69 6e 67  of the.** string
16da0 20 69 6e 64 69 63 61 74 65 73 20 74 68 65 20 63   indicates the c
16db0 6f 6c 75 6d 6e 20 61 66 66 69 6e 69 74 79 20 74  olumn affinity t
16dc0 68 61 74 20 73 68 6f 75 6c 64 20 62 65 20 75 73  hat should be us
16dd0 65 64 20 66 6f 72 20 74 68 65 20 4e 2d 74 68 0a  ed for the N-th.
16de0 2a 2a 20 66 69 65 6c 64 20 6f 66 20 74 68 65 20  ** field of the 
16df0 69 6e 64 65 78 20 6b 65 79 2e 0a 2a 2a 0a 2a 2a  index key..**.**
16e00 20 54 68 65 20 6d 61 70 70 69 6e 67 20 66 72 6f   The mapping fro
16e10 6d 20 63 68 61 72 61 63 74 65 72 20 74 6f 20 61  m character to a
16e20 66 66 69 6e 69 74 79 20 69 73 20 67 69 76 65 6e  ffinity is given
16e30 20 62 79 20 74 68 65 20 53 51 4c 49 54 45 5f 41   by the SQLITE_A
16e40 46 46 5f 0a 2a 2a 20 6d 61 63 72 6f 73 20 64 65  FF_.** macros de
16e50 66 69 6e 65 64 20 69 6e 20 73 71 6c 69 74 65 49  fined in sqliteI
16e60 6e 74 2e 68 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50  nt.h..**.** If P
16e70 34 20 69 73 20 4e 55 4c 4c 20 74 68 65 6e 20 61  4 is NULL then a
16e80 6c 6c 20 69 6e 64 65 78 20 66 69 65 6c 64 73 20  ll index fields 
16e90 68 61 76 65 20 74 68 65 20 61 66 66 69 6e 69 74  have the affinit
16ea0 79 20 42 4c 4f 42 2e 0a 2a 2f 0a 63 61 73 65 20  y BLOB..*/.case 
16eb0 4f 50 5f 4d 61 6b 65 52 65 63 6f 72 64 3a 20 7b  OP_MakeRecord: {
16ec0 0a 20 20 75 38 20 2a 7a 4e 65 77 52 65 63 6f 72  .  u8 *zNewRecor
16ed0 64 3b 20 20 20 20 20 20 20 20 2f 2a 20 41 20 62  d;        /* A b
16ee0 75 66 66 65 72 20 74 6f 20 68 6f 6c 64 20 74 68  uffer to hold th
16ef0 65 20 64 61 74 61 20 66 6f 72 20 74 68 65 20 6e  e data for the n
16f00 65 77 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 4d  ew record */.  M
16f10 65 6d 20 2a 70 52 65 63 3b 20 20 20 20 20 20 20  em *pRec;       
16f20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6e 65 77        /* The new
16f30 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 75 36 34   record */.  u64
16f40 20 6e 44 61 74 61 3b 20 20 20 20 20 20 20 20 20   nData;         
16f50 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
16f60 20 62 79 74 65 73 20 6f 66 20 64 61 74 61 20 73   bytes of data s
16f70 70 61 63 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 48  pace */.  int nH
16f80 64 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  dr;             
16f90 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62 79   /* Number of by
16fa0 74 65 73 20 6f 66 20 68 65 61 64 65 72 20 73 70  tes of header sp
16fb0 61 63 65 20 2a 2f 0a 20 20 69 36 34 20 6e 42 79  ace */.  i64 nBy
16fc0 74 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  te;             
16fd0 2f 2a 20 44 61 74 61 20 73 70 61 63 65 20 72 65  /* Data space re
16fe0 71 75 69 72 65 64 20 66 6f 72 20 74 68 69 73 20  quired for this 
16ff0 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69 36 34 20  record */.  i64 
17000 6e 5a 65 72 6f 3b 20 20 20 20 20 20 20 20 20 20  nZero;          
17010 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
17020 7a 65 72 6f 20 62 79 74 65 73 20 61 74 20 74 68  zero bytes at th
17030 65 20 65 6e 64 20 6f 66 20 74 68 65 20 72 65 63  e end of the rec
17040 6f 72 64 20 2a 2f 0a 20 20 69 6e 74 20 6e 56 61  ord */.  int nVa
17050 72 69 6e 74 3b 20 20 20 20 20 20 20 20 20 20 20  rint;           
17060 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62 79 74  /* Number of byt
17070 65 73 20 69 6e 20 61 20 76 61 72 69 6e 74 20 2a  es in a varint *
17080 2f 0a 20 20 75 33 32 20 73 65 72 69 61 6c 5f 74  /.  u32 serial_t
17090 79 70 65 3b 20 20 20 20 20 20 20 2f 2a 20 54 79  ype;       /* Ty
170a0 70 65 20 66 69 65 6c 64 20 2a 2f 0a 20 20 4d 65  pe field */.  Me
170b0 6d 20 2a 70 44 61 74 61 30 3b 20 20 20 20 20 20  m *pData0;      
170c0 20 20 20 20 20 2f 2a 20 46 69 72 73 74 20 66 69       /* First fi
170d0 65 6c 64 20 74 6f 20 62 65 20 63 6f 6d 62 69 6e  eld to be combin
170e0 65 64 20 69 6e 74 6f 20 74 68 65 20 72 65 63 6f  ed into the reco
170f0 72 64 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 4c 61  rd */.  Mem *pLa
17100 73 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  st;            /
17110 2a 20 4c 61 73 74 20 66 69 65 6c 64 20 6f 66 20  * Last field of 
17120 74 68 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20  the record */.  
17130 69 6e 74 20 6e 46 69 65 6c 64 3b 20 20 20 20 20  int nField;     
17140 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
17150 20 6f 66 20 66 69 65 6c 64 73 20 69 6e 20 74 68   of fields in th
17160 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 63 68  e record */.  ch
17170 61 72 20 2a 7a 41 66 66 69 6e 69 74 79 3b 20 20  ar *zAffinity;  
17180 20 20 20 20 20 2f 2a 20 54 68 65 20 61 66 66 69       /* The affi
17190 6e 69 74 79 20 73 74 72 69 6e 67 20 66 6f 72 20  nity string for 
171a0 74 68 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20  the record */.  
171b0 69 6e 74 20 66 69 6c 65 5f 66 6f 72 6d 61 74 3b  int file_format;
171c0 20 20 20 20 20 20 20 2f 2a 20 46 69 6c 65 20 66         /* File f
171d0 6f 72 6d 61 74 20 74 6f 20 75 73 65 20 66 6f 72  ormat to use for
171e0 20 65 6e 63 6f 64 69 6e 67 20 2a 2f 0a 20 20 69   encoding */.  i
171f0 6e 74 20 69 3b 20 20 20 20 20 20 20 20 20 20 20  nt i;           
17200 20 20 20 20 20 20 2f 2a 20 53 70 61 63 65 20 75        /* Space u
17210 73 65 64 20 69 6e 20 7a 4e 65 77 52 65 63 6f 72  sed in zNewRecor
17220 64 5b 5d 20 68 65 61 64 65 72 20 2a 2f 0a 20 20  d[] header */.  
17230 69 6e 74 20 6a 3b 20 20 20 20 20 20 20 20 20 20  int j;          
17240 20 20 20 20 20 20 20 2f 2a 20 53 70 61 63 65 20         /* Space 
17250 75 73 65 64 20 69 6e 20 7a 4e 65 77 52 65 63 6f  used in zNewReco
17260 72 64 5b 5d 20 63 6f 6e 74 65 6e 74 20 2a 2f 0a  rd[] content */.
17270 20 20 75 33 32 20 6c 65 6e 3b 20 20 20 20 20 20    u32 len;      
17280 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 65 6e 67           /* Leng
17290 74 68 20 6f 66 20 61 20 66 69 65 6c 64 20 2a 2f  th of a field */
172a0 0a 0a 20 20 2f 2a 20 41 73 73 75 6d 69 6e 67 20  ..  /* Assuming 
172b0 74 68 65 20 72 65 63 6f 72 64 20 63 6f 6e 74 61  the record conta
172c0 69 6e 73 20 4e 20 66 69 65 6c 64 73 2c 20 74 68  ins N fields, th
172d0 65 20 72 65 63 6f 72 64 20 66 6f 72 6d 61 74 20  e record format 
172e0 6c 6f 6f 6b 73 0a 20 20 2a 2a 20 6c 69 6b 65 20  looks.  ** like 
172f0 74 68 69 73 3a 0a 20 20 2a 2a 0a 20 20 2a 2a 20  this:.  **.  ** 
17300 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
17310 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
17320 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
17330 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
17340 2d 2d 2d 2d 2d 2d 2d 2d 0a 20 20 2a 2a 20 7c 20  --------.  ** | 
17350 68 64 72 2d 73 69 7a 65 20 7c 20 74 79 70 65 20  hdr-size | type 
17360 30 20 7c 20 74 79 70 65 20 31 20 7c 20 2e 2e 2e  0 | type 1 | ...
17370 20 7c 20 74 79 70 65 20 4e 2d 31 20 7c 20 64 61   | type N-1 | da
17380 74 61 30 20 7c 20 2e 2e 2e 20 7c 20 64 61 74 61  ta0 | ... | data
17390 20 4e 2d 31 20 7c 20 0a 20 20 2a 2a 20 2d 2d 2d   N-1 | .  ** ---
173a0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
173b0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
173c0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
173d0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
173e0 2d 2d 2d 2d 2d 0a 20 20 2a 2a 0a 20 20 2a 2a 20  -----.  **.  ** 
173f0 44 61 74 61 28 30 29 20 69 73 20 74 61 6b 65 6e  Data(0) is taken
17400 20 66 72 6f 6d 20 72 65 67 69 73 74 65 72 20 50   from register P
17410 31 2e 20 20 44 61 74 61 28 31 29 20 63 6f 6d 65  1.  Data(1) come
17420 73 20 66 72 6f 6d 20 72 65 67 69 73 74 65 72 20  s from register 
17430 50 31 2b 31 0a 20 20 2a 2a 20 61 6e 64 20 73 6f  P1+1.  ** and so
17440 20 66 6f 72 74 68 2e 0a 20 20 2a 2a 0a 20 20 2a   forth..  **.  *
17450 2a 20 45 61 63 68 20 74 79 70 65 20 66 69 65 6c  * Each type fiel
17460 64 20 69 73 20 61 20 76 61 72 69 6e 74 20 72 65  d is a varint re
17470 70 72 65 73 65 6e 74 69 6e 67 20 74 68 65 20 73  presenting the s
17480 65 72 69 61 6c 20 74 79 70 65 20 6f 66 20 74 68  erial type of th
17490 65 20 0a 20 20 2a 2a 20 63 6f 72 72 65 73 70 6f  e .  ** correspo
174a0 6e 64 69 6e 67 20 64 61 74 61 20 65 6c 65 6d 65  nding data eleme
174b0 6e 74 20 28 73 65 65 20 73 71 6c 69 74 65 33 56  nt (see sqlite3V
174c0 64 62 65 53 65 72 69 61 6c 54 79 70 65 28 29 29  dbeSerialType())
174d0 2e 20 54 68 65 0a 20 20 2a 2a 20 68 64 72 2d 73  . The.  ** hdr-s
174e0 69 7a 65 20 66 69 65 6c 64 20 69 73 20 61 6c 73  ize field is als
174f0 6f 20 61 20 76 61 72 69 6e 74 20 77 68 69 63 68  o a varint which
17500 20 69 73 20 74 68 65 20 6f 66 66 73 65 74 20 66   is the offset f
17510 72 6f 6d 20 74 68 65 20 62 65 67 69 6e 6e 69 6e  rom the beginnin
17520 67 0a 20 20 2a 2a 20 6f 66 20 74 68 65 20 72 65  g.  ** of the re
17530 63 6f 72 64 20 74 6f 20 64 61 74 61 30 2e 0a 20  cord to data0.. 
17540 20 2a 2f 0a 20 20 6e 44 61 74 61 20 3d 20 30 3b   */.  nData = 0;
17550 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
17560 65 72 20 6f 66 20 62 79 74 65 73 20 6f 66 20 64  er of bytes of d
17570 61 74 61 20 73 70 61 63 65 20 2a 2f 0a 20 20 6e  ata space */.  n
17580 48 64 72 20 3d 20 30 3b 20 20 20 20 20 20 20 20  Hdr = 0;        
17590 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62    /* Number of b
175a0 79 74 65 73 20 6f 66 20 68 65 61 64 65 72 20 73  ytes of header s
175b0 70 61 63 65 20 2a 2f 0a 20 20 6e 5a 65 72 6f 20  pace */.  nZero 
175c0 3d 20 30 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  = 0;         /* 
175d0 4e 75 6d 62 65 72 20 6f 66 20 7a 65 72 6f 20 62  Number of zero b
175e0 79 74 65 73 20 61 74 20 74 68 65 20 65 6e 64 20  ytes at the end 
175f0 6f 66 20 74 68 65 20 72 65 63 6f 72 64 20 2a 2f  of the record */
17600 0a 20 20 6e 46 69 65 6c 64 20 3d 20 70 4f 70 2d  .  nField = pOp-
17610 3e 70 31 3b 0a 20 20 7a 41 66 66 69 6e 69 74 79  >p1;.  zAffinity
17620 20 3d 20 70 4f 70 2d 3e 70 34 2e 7a 3b 0a 20 20   = pOp->p4.z;.  
17630 61 73 73 65 72 74 28 20 6e 46 69 65 6c 64 3e 30  assert( nField>0
17640 20 26 26 20 70 4f 70 2d 3e 70 32 3e 30 20 26 26   && pOp->p2>0 &&
17650 20 70 4f 70 2d 3e 70 32 2b 6e 46 69 65 6c 64 3c   pOp->p2+nField<
17660 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d  =(p->nMem+1 - p-
17670 3e 6e 43 75 72 73 6f 72 29 2b 31 20 29 3b 0a 20  >nCursor)+1 );. 
17680 20 70 44 61 74 61 30 20 3d 20 26 61 4d 65 6d 5b   pData0 = &aMem[
17690 6e 46 69 65 6c 64 5d 3b 0a 20 20 6e 46 69 65 6c  nField];.  nFiel
176a0 64 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 70  d = pOp->p2;.  p
176b0 4c 61 73 74 20 3d 20 26 70 44 61 74 61 30 5b 6e  Last = &pData0[n
176c0 46 69 65 6c 64 2d 31 5d 3b 0a 20 20 66 69 6c 65  Field-1];.  file
176d0 5f 66 6f 72 6d 61 74 20 3d 20 70 2d 3e 6d 69 6e  _format = p->min
176e0 57 72 69 74 65 46 69 6c 65 46 6f 72 6d 61 74 3b  WriteFileFormat;
176f0 0a 0a 20 20 2f 2a 20 49 64 65 6e 74 69 66 79 20  ..  /* Identify 
17700 74 68 65 20 6f 75 74 70 75 74 20 72 65 67 69 73  the output regis
17710 74 65 72 20 2a 2f 0a 20 20 61 73 73 65 72 74 28  ter */.  assert(
17720 20 70 4f 70 2d 3e 70 33 3c 70 4f 70 2d 3e 70 31   pOp->p3<pOp->p1
17730 20 7c 7c 20 70 4f 70 2d 3e 70 33 3e 3d 70 4f 70   || pOp->p3>=pOp
17740 2d 3e 70 31 2b 70 4f 70 2d 3e 70 32 20 29 3b 0a  ->p1+pOp->p2 );.
17750 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70    pOut = &aMem[p
17760 4f 70 2d 3e 70 33 5d 3b 0a 20 20 6d 65 6d 41 62  Op->p3];.  memAb
17770 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70  outToChange(p, p
17780 4f 75 74 29 3b 0a 0a 20 20 2f 2a 20 41 70 70 6c  Out);..  /* Appl
17790 79 20 74 68 65 20 72 65 71 75 65 73 74 65 64 20  y the requested 
177a0 61 66 66 69 6e 69 74 79 20 74 6f 20 61 6c 6c 20  affinity to all 
177b0 69 6e 70 75 74 73 0a 20 20 2a 2f 0a 20 20 61 73  inputs.  */.  as
177c0 73 65 72 74 28 20 70 44 61 74 61 30 3c 3d 70 4c  sert( pData0<=pL
177d0 61 73 74 20 29 3b 0a 20 20 69 66 28 20 7a 41 66  ast );.  if( zAf
177e0 66 69 6e 69 74 79 20 29 7b 0a 20 20 20 20 70 52  finity ){.    pR
177f0 65 63 20 3d 20 70 44 61 74 61 30 3b 0a 20 20 20  ec = pData0;.   
17800 20 64 6f 7b 0a 20 20 20 20 20 20 61 70 70 6c 79   do{.      apply
17810 41 66 66 69 6e 69 74 79 28 70 52 65 63 2b 2b 2c  Affinity(pRec++,
17820 20 2a 28 7a 41 66 66 69 6e 69 74 79 2b 2b 29 2c   *(zAffinity++),
17830 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 20 20   encoding);.    
17840 20 20 61 73 73 65 72 74 28 20 7a 41 66 66 69 6e    assert( zAffin
17850 69 74 79 5b 30 5d 3d 3d 30 20 7c 7c 20 70 52 65  ity[0]==0 || pRe
17860 63 3c 3d 70 4c 61 73 74 20 29 3b 0a 20 20 20 20  c<=pLast );.    
17870 7d 77 68 69 6c 65 28 20 7a 41 66 66 69 6e 69 74  }while( zAffinit
17880 79 5b 30 5d 20 29 3b 0a 20 20 7d 0a 0a 23 69 66  y[0] );.  }..#if
17890 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  def SQLITE_ENABL
178a0 45 5f 4e 55 4c 4c 5f 54 52 49 4d 0a 20 20 2f 2a  E_NULL_TRIM.  /*
178b0 20 4e 55 4c 4c 73 20 63 61 6e 20 62 65 20 73 61   NULLs can be sa
178c0 66 65 6c 79 20 74 72 69 6d 6d 65 64 20 66 72 6f  fely trimmed fro
178d0 6d 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68 65  m the end of the
178e0 20 72 65 63 6f 72 64 2c 20 61 73 20 6c 6f 6e 67   record, as long
178f0 20 61 73 0a 20 20 2a 2a 20 61 73 20 74 68 65 20   as.  ** as the 
17900 73 63 68 65 6d 61 20 66 6f 72 6d 61 74 20 69 73  schema format is
17910 20 32 20 6f 72 20 6d 6f 72 65 20 61 6e 64 20 6e   2 or more and n
17920 6f 6e 65 20 6f 66 20 74 68 65 20 6f 6d 69 74 74  one of the omitt
17930 65 64 20 63 6f 6c 75 6d 6e 73 0a 20 20 2a 2a 20  ed columns.  ** 
17940 68 61 76 65 20 61 20 6e 6f 6e 2d 4e 55 4c 4c 20  have a non-NULL 
17950 64 65 66 61 75 6c 74 20 76 61 6c 75 65 2e 20 20  default value.  
17960 41 6c 73 6f 2c 20 74 68 65 20 72 65 63 6f 72 64  Also, the record
17970 20 6d 75 73 74 20 62 65 20 6c 65 66 74 20 77 69   must be left wi
17980 74 68 0a 20 20 2a 2a 20 61 74 20 6c 65 61 73 74  th.  ** at least
17990 20 6f 6e 65 20 66 69 65 6c 64 2e 20 20 49 66 20   one field.  If 
179a0 50 35 3e 30 20 74 68 65 6e 20 69 74 20 77 69 6c  P5>0 then it wil
179b0 6c 20 62 65 20 6f 6e 65 20 6d 6f 72 65 20 74 68  l be one more th
179c0 61 6e 20 74 68 65 0a 20 20 2a 2a 20 69 6e 64 65  an the.  ** inde
179d0 78 20 6f 66 20 74 68 65 20 72 69 67 68 74 2d 6d  x of the right-m
179e0 6f 73 74 20 63 6f 6c 75 6d 6e 20 77 69 74 68 20  ost column with 
179f0 61 20 6e 6f 6e 2d 4e 55 4c 4c 20 64 65 66 61 75  a non-NULL defau
17a00 6c 74 20 76 61 6c 75 65 20 2a 2f 0a 20 20 69 66  lt value */.  if
17a10 28 20 70 4f 70 2d 3e 70 35 20 29 7b 0a 20 20 20  ( pOp->p5 ){.   
17a20 20 77 68 69 6c 65 28 20 28 70 4c 61 73 74 2d 3e   while( (pLast->
17a30 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c  flags & MEM_Null
17a40 29 21 3d 30 20 26 26 20 6e 46 69 65 6c 64 3e 70  )!=0 && nField>p
17a50 4f 70 2d 3e 70 35 20 29 7b 0a 20 20 20 20 20 20  Op->p5 ){.      
17a60 70 4c 61 73 74 2d 2d 3b 0a 20 20 20 20 20 20 6e  pLast--;.      n
17a70 46 69 65 6c 64 2d 2d 3b 0a 20 20 20 20 7d 0a 20  Field--;.    }. 
17a80 20 7d 0a 23 65 6e 64 69 66 0a 0a 20 20 2f 2a 20   }.#endif..  /* 
17a90 4c 6f 6f 70 20 74 68 72 6f 75 67 68 20 74 68 65  Loop through the
17aa0 20 65 6c 65 6d 65 6e 74 73 20 74 68 61 74 20 77   elements that w
17ab0 69 6c 6c 20 6d 61 6b 65 20 75 70 20 74 68 65 20  ill make up the 
17ac0 72 65 63 6f 72 64 20 74 6f 20 66 69 67 75 72 65  record to figure
17ad0 0a 20 20 2a 2a 20 6f 75 74 20 68 6f 77 20 6d 75  .  ** out how mu
17ae0 63 68 20 73 70 61 63 65 20 69 73 20 72 65 71 75  ch space is requ
17af0 69 72 65 64 20 66 6f 72 20 74 68 65 20 6e 65 77  ired for the new
17b00 20 72 65 63 6f 72 64 2e 0a 20 20 2a 2f 0a 20 20   record..  */.  
17b10 70 52 65 63 20 3d 20 70 4c 61 73 74 3b 0a 20 20  pRec = pLast;.  
17b20 64 6f 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20  do{.    assert( 
17b30 6d 65 6d 49 73 56 61 6c 69 64 28 70 52 65 63 29  memIsValid(pRec)
17b40 20 29 3b 0a 20 20 20 20 73 65 72 69 61 6c 5f 74   );.    serial_t
17b50 79 70 65 20 3d 20 73 71 6c 69 74 65 33 56 64 62  ype = sqlite3Vdb
17b60 65 53 65 72 69 61 6c 54 79 70 65 28 70 52 65 63  eSerialType(pRec
17b70 2c 20 66 69 6c 65 5f 66 6f 72 6d 61 74 2c 20 26  , file_format, &
17b80 6c 65 6e 29 3b 0a 20 20 20 20 69 66 28 20 70 52  len);.    if( pR
17b90 65 63 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  ec->flags & MEM_
17ba0 5a 65 72 6f 20 29 7b 0a 20 20 20 20 20 20 69 66  Zero ){.      if
17bb0 28 20 73 65 72 69 61 6c 5f 74 79 70 65 3d 3d 30  ( serial_type==0
17bc0 20 29 7b 0a 20 20 20 20 20 20 20 20 2f 2a 20 56   ){.        /* V
17bd0 61 6c 75 65 73 20 77 69 74 68 20 4d 45 4d 5f 4e  alues with MEM_N
17be0 75 6c 6c 20 61 6e 64 20 4d 45 4d 5f 5a 65 72 6f  ull and MEM_Zero
17bf0 20 61 72 65 20 63 72 65 61 74 65 64 20 62 79 20   are created by 
17c00 78 43 6f 6c 75 6d 6e 20 76 69 72 74 75 61 6c 0a  xColumn virtual.
17c10 20 20 20 20 20 20 20 20 2a 2a 20 74 61 62 6c 65          ** table
17c20 20 6d 65 74 68 6f 64 73 20 74 68 61 74 20 6e 65   methods that ne
17c30 76 65 72 20 69 6e 76 6f 6b 65 20 73 71 6c 69 74  ver invoke sqlit
17c40 65 33 5f 72 65 73 75 6c 74 5f 78 78 78 78 78 28  e3_result_xxxxx(
17c50 29 20 77 68 69 6c 65 0a 20 20 20 20 20 20 20 20  ) while.        
17c60 2a 2a 20 63 6f 6d 70 75 74 69 6e 67 20 61 6e 20  ** computing an 
17c70 75 6e 63 68 61 6e 67 69 6e 67 20 63 6f 6c 75 6d  unchanging colum
17c80 6e 20 76 61 6c 75 65 20 69 6e 20 61 6e 20 55 50  n value in an UP
17c90 44 41 54 45 20 73 74 61 74 65 6d 65 6e 74 2e 0a  DATE statement..
17ca0 20 20 20 20 20 20 20 20 2a 2a 20 47 69 76 65 20          ** Give 
17cb0 73 75 63 68 20 76 61 6c 75 65 73 20 61 20 73 70  such values a sp
17cc0 65 63 69 61 6c 20 69 6e 74 65 72 6e 61 6c 2d 75  ecial internal-u
17cd0 73 65 2d 6f 6e 6c 79 20 73 65 72 69 61 6c 2d 74  se-only serial-t
17ce0 79 70 65 20 6f 66 20 31 30 0a 20 20 20 20 20 20  ype of 10.      
17cf0 20 20 2a 2a 20 73 6f 20 74 68 61 74 20 74 68 65    ** so that the
17d00 79 20 63 61 6e 20 62 65 20 70 61 73 73 65 64 20  y can be passed 
17d10 74 68 72 6f 75 67 68 20 74 6f 20 78 55 70 64 61  through to xUpda
17d20 74 65 20 61 6e 64 20 68 61 76 65 0a 20 20 20 20  te and have.    
17d30 20 20 20 20 2a 2a 20 61 20 74 72 75 65 20 73 71      ** a true sq
17d40 6c 69 74 65 33 5f 76 61 6c 75 65 5f 6e 6f 63 68  lite3_value_noch
17d50 61 6e 67 65 28 29 2e 20 2a 2f 0a 20 20 20 20 20  ange(). */.     
17d60 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e     assert( pOp->
17d70 70 35 3d 3d 4f 50 46 4c 41 47 5f 4e 4f 43 48 4e  p5==OPFLAG_NOCHN
17d80 47 5f 4d 41 47 49 43 20 7c 7c 20 43 4f 52 52 55  G_MAGIC || CORRU
17d90 50 54 5f 44 42 20 29 3b 0a 20 20 20 20 20 20 20  PT_DB );.       
17da0 20 73 65 72 69 61 6c 5f 74 79 70 65 20 3d 20 31   serial_type = 1
17db0 30 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 20 69  0;.      }else i
17dc0 66 28 20 6e 44 61 74 61 20 29 7b 0a 20 20 20 20  f( nData ){.    
17dd0 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 56      if( sqlite3V
17de0 64 62 65 4d 65 6d 45 78 70 61 6e 64 42 6c 6f 62  dbeMemExpandBlob
17df0 28 70 52 65 63 29 20 29 20 67 6f 74 6f 20 6e 6f  (pRec) ) goto no
17e00 5f 6d 65 6d 3b 0a 20 20 20 20 20 20 7d 65 6c 73  _mem;.      }els
17e10 65 7b 0a 20 20 20 20 20 20 20 20 6e 5a 65 72 6f  e{.        nZero
17e20 20 2b 3d 20 70 52 65 63 2d 3e 75 2e 6e 5a 65 72   += pRec->u.nZer
17e30 6f 3b 0a 20 20 20 20 20 20 20 20 6c 65 6e 20 2d  o;.        len -
17e40 3d 20 70 52 65 63 2d 3e 75 2e 6e 5a 65 72 6f 3b  = pRec->u.nZero;
17e50 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20  .      }.    }. 
17e60 20 20 20 6e 44 61 74 61 20 2b 3d 20 6c 65 6e 3b     nData += len;
17e70 0a 20 20 20 20 74 65 73 74 63 61 73 65 28 20 73  .    testcase( s
17e80 65 72 69 61 6c 5f 74 79 70 65 3d 3d 31 32 37 20  erial_type==127 
17e90 29 3b 0a 20 20 20 20 74 65 73 74 63 61 73 65 28  );.    testcase(
17ea0 20 73 65 72 69 61 6c 5f 74 79 70 65 3d 3d 31 32   serial_type==12
17eb0 38 20 29 3b 0a 20 20 20 20 6e 48 64 72 20 2b 3d  8 );.    nHdr +=
17ec0 20 73 65 72 69 61 6c 5f 74 79 70 65 3c 3d 31 32   serial_type<=12
17ed0 37 20 3f 20 31 20 3a 20 73 71 6c 69 74 65 33 56  7 ? 1 : sqlite3V
17ee0 61 72 69 6e 74 4c 65 6e 28 73 65 72 69 61 6c 5f  arintLen(serial_
17ef0 74 79 70 65 29 3b 0a 20 20 20 20 70 52 65 63 2d  type);.    pRec-
17f00 3e 75 54 65 6d 70 20 3d 20 73 65 72 69 61 6c 5f  >uTemp = serial_
17f10 74 79 70 65 3b 0a 20 20 20 20 69 66 28 20 70 52  type;.    if( pR
17f20 65 63 3d 3d 70 44 61 74 61 30 20 29 20 62 72 65  ec==pData0 ) bre
17f30 61 6b 3b 0a 20 20 20 20 70 52 65 63 2d 2d 3b 0a  ak;.    pRec--;.
17f40 20 20 7d 77 68 69 6c 65 28 31 29 3b 0a 0a 20 20    }while(1);..  
17f50 2f 2a 20 45 56 49 44 45 4e 43 45 2d 4f 46 3a 20  /* EVIDENCE-OF: 
17f60 52 2d 32 32 35 36 34 2d 31 31 36 34 37 20 54 68  R-22564-11647 Th
17f70 65 20 68 65 61 64 65 72 20 62 65 67 69 6e 73 20  e header begins 
17f80 77 69 74 68 20 61 20 73 69 6e 67 6c 65 20 76 61  with a single va
17f90 72 69 6e 74 0a 20 20 2a 2a 20 77 68 69 63 68 20  rint.  ** which 
17fa0 64 65 74 65 72 6d 69 6e 65 73 20 74 68 65 20 74  determines the t
17fb0 6f 74 61 6c 20 6e 75 6d 62 65 72 20 6f 66 20 62  otal number of b
17fc0 79 74 65 73 20 69 6e 20 74 68 65 20 68 65 61 64  ytes in the head
17fd0 65 72 2e 20 54 68 65 20 76 61 72 69 6e 74 0a 20  er. The varint. 
17fe0 20 2a 2a 20 76 61 6c 75 65 20 69 73 20 74 68 65   ** value is the
17ff0 20 73 69 7a 65 20 6f 66 20 74 68 65 20 68 65 61   size of the hea
18000 64 65 72 20 69 6e 20 62 79 74 65 73 20 69 6e 63  der in bytes inc
18010 6c 75 64 69 6e 67 20 74 68 65 20 73 69 7a 65 20  luding the size 
18020 76 61 72 69 6e 74 0a 20 20 2a 2a 20 69 74 73 65  varint.  ** itse
18030 6c 66 2e 20 2a 2f 0a 20 20 74 65 73 74 63 61 73  lf. */.  testcas
18040 65 28 20 6e 48 64 72 3d 3d 31 32 36 20 29 3b 0a  e( nHdr==126 );.
18050 20 20 74 65 73 74 63 61 73 65 28 20 6e 48 64 72    testcase( nHdr
18060 3d 3d 31 32 37 20 29 3b 0a 20 20 69 66 28 20 6e  ==127 );.  if( n
18070 48 64 72 3c 3d 31 32 36 20 29 7b 0a 20 20 20 20  Hdr<=126 ){.    
18080 2f 2a 20 54 68 65 20 63 6f 6d 6d 6f 6e 20 63 61  /* The common ca
18090 73 65 20 2a 2f 0a 20 20 20 20 6e 48 64 72 20 2b  se */.    nHdr +
180a0 3d 20 31 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  = 1;.  }else{.  
180b0 20 20 2f 2a 20 52 61 72 65 20 63 61 73 65 20 6f    /* Rare case o
180c0 66 20 61 20 72 65 61 6c 6c 79 20 6c 61 72 67 65  f a really large
180d0 20 68 65 61 64 65 72 20 2a 2f 0a 20 20 20 20 6e   header */.    n
180e0 56 61 72 69 6e 74 20 3d 20 73 71 6c 69 74 65 33  Varint = sqlite3
180f0 56 61 72 69 6e 74 4c 65 6e 28 6e 48 64 72 29 3b  VarintLen(nHdr);
18100 0a 20 20 20 20 6e 48 64 72 20 2b 3d 20 6e 56 61  .    nHdr += nVa
18110 72 69 6e 74 3b 0a 20 20 20 20 69 66 28 20 6e 56  rint;.    if( nV
18120 61 72 69 6e 74 3c 73 71 6c 69 74 65 33 56 61 72  arint<sqlite3Var
18130 69 6e 74 4c 65 6e 28 6e 48 64 72 29 20 29 20 6e  intLen(nHdr) ) n
18140 48 64 72 2b 2b 3b 0a 20 20 7d 0a 20 20 6e 42 79  Hdr++;.  }.  nBy
18150 74 65 20 3d 20 6e 48 64 72 2b 6e 44 61 74 61 3b  te = nHdr+nData;
18160 0a 0a 20 20 2f 2a 20 4d 61 6b 65 20 73 75 72 65  ..  /* Make sure
18170 20 74 68 65 20 6f 75 74 70 75 74 20 72 65 67 69   the output regi
18180 73 74 65 72 20 68 61 73 20 61 20 62 75 66 66 65  ster has a buffe
18190 72 20 6c 61 72 67 65 20 65 6e 6f 75 67 68 20 74  r large enough t
181a0 6f 20 73 74 6f 72 65 20 0a 20 20 2a 2a 20 74 68  o store .  ** th
181b0 65 20 6e 65 77 20 72 65 63 6f 72 64 2e 20 54 68  e new record. Th
181c0 65 20 6f 75 74 70 75 74 20 72 65 67 69 73 74 65  e output registe
181d0 72 20 28 70 4f 70 2d 3e 70 33 29 20 69 73 20 6e  r (pOp->p3) is n
181e0 6f 74 20 61 6c 6c 6f 77 65 64 20 74 6f 0a 20 20  ot allowed to.  
181f0 2a 2a 20 62 65 20 6f 6e 65 20 6f 66 20 74 68 65  ** be one of the
18200 20 69 6e 70 75 74 20 72 65 67 69 73 74 65 72 73   input registers
18210 20 28 62 65 63 61 75 73 65 20 74 68 65 20 66 6f   (because the fo
18220 6c 6c 6f 77 69 6e 67 20 63 61 6c 6c 20 74 6f 0a  llowing call to.
18230 20 20 2a 2a 20 73 71 6c 69 74 65 33 56 64 62 65    ** sqlite3Vdbe
18240 4d 65 6d 43 6c 65 61 72 41 6e 64 52 65 73 69 7a  MemClearAndResiz
18250 65 28 29 20 63 6f 75 6c 64 20 63 6c 6f 62 62 65  e() could clobbe
18260 72 20 74 68 65 20 76 61 6c 75 65 20 62 65 66 6f  r the value befo
18270 72 65 20 69 74 20 69 73 20 75 73 65 64 29 2e 0a  re it is used)..
18280 20 20 2a 2f 0a 20 20 69 66 28 20 6e 42 79 74 65    */.  if( nByte
18290 2b 6e 5a 65 72 6f 3c 3d 70 4f 75 74 2d 3e 73 7a  +nZero<=pOut->sz
182a0 4d 61 6c 6c 6f 63 20 29 7b 0a 20 20 20 20 2f 2a  Malloc ){.    /*
182b0 20 54 68 65 20 6f 75 74 70 75 74 20 72 65 67 69   The output regi
182c0 73 74 65 72 20 69 73 20 61 6c 72 65 61 64 79 20  ster is already 
182d0 6c 61 72 67 65 20 65 6e 6f 75 67 68 20 74 6f 20  large enough to 
182e0 68 6f 6c 64 20 74 68 65 20 72 65 63 6f 72 64 2e  hold the record.
182f0 0a 20 20 20 20 2a 2a 20 4e 6f 20 65 72 72 6f 72  .    ** No error
18300 20 63 68 65 63 6b 73 20 6f 72 20 62 75 66 66 65   checks or buffe
18310 72 20 65 6e 6c 61 72 67 65 6d 65 6e 74 20 69 73  r enlargement is
18320 20 72 65 71 75 69 72 65 64 20 2a 2f 0a 20 20 20   required */.   
18330 20 70 4f 75 74 2d 3e 7a 20 3d 20 70 4f 75 74 2d   pOut->z = pOut-
18340 3e 7a 4d 61 6c 6c 6f 63 3b 0a 20 20 7d 65 6c 73  >zMalloc;.  }els
18350 65 7b 0a 20 20 20 20 2f 2a 20 4e 65 65 64 20 74  e{.    /* Need t
18360 6f 20 6d 61 6b 65 20 73 75 72 65 20 74 68 61 74  o make sure that
18370 20 74 68 65 20 6f 75 74 70 75 74 20 69 73 20 6e   the output is n
18380 6f 74 20 74 6f 6f 20 62 69 67 20 61 6e 64 20 74  ot too big and t
18390 68 65 6e 20 65 6e 6c 61 72 67 65 0a 20 20 20 20  hen enlarge.    
183a0 2a 2a 20 74 68 65 20 6f 75 74 70 75 74 20 72 65  ** the output re
183b0 67 69 73 74 65 72 20 74 6f 20 68 6f 6c 64 20 74  gister to hold t
183c0 68 65 20 66 75 6c 6c 20 72 65 73 75 6c 74 20 2a  he full result *
183d0 2f 0a 20 20 20 20 69 66 28 20 6e 42 79 74 65 2b  /.    if( nByte+
183e0 6e 5a 65 72 6f 3e 64 62 2d 3e 61 4c 69 6d 69 74  nZero>db->aLimit
183f0 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c 45  [SQLITE_LIMIT_LE
18400 4e 47 54 48 5d 20 29 7b 0a 20 20 20 20 20 20 67  NGTH] ){.      g
18410 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 20  oto too_big;.   
18420 20 7d 0a 20 20 20 20 69 66 28 20 73 71 6c 69 74   }.    if( sqlit
18430 65 33 56 64 62 65 4d 65 6d 43 6c 65 61 72 41 6e  e3VdbeMemClearAn
18440 64 52 65 73 69 7a 65 28 70 4f 75 74 2c 20 28 69  dResize(pOut, (i
18450 6e 74 29 6e 42 79 74 65 29 20 29 7b 0a 20 20 20  nt)nByte) ){.   
18460 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a     goto no_mem;.
18470 20 20 20 20 7d 0a 20 20 7d 0a 20 20 7a 4e 65 77      }.  }.  zNew
18480 52 65 63 6f 72 64 20 3d 20 28 75 38 20 2a 29 70  Record = (u8 *)p
18490 4f 75 74 2d 3e 7a 3b 0a 0a 20 20 2f 2a 20 57 72  Out->z;..  /* Wr
184a0 69 74 65 20 74 68 65 20 72 65 63 6f 72 64 20 2a  ite the record *
184b0 2f 0a 20 20 69 20 3d 20 70 75 74 56 61 72 69 6e  /.  i = putVarin
184c0 74 33 32 28 7a 4e 65 77 52 65 63 6f 72 64 2c 20  t32(zNewRecord, 
184d0 6e 48 64 72 29 3b 0a 20 20 6a 20 3d 20 6e 48 64  nHdr);.  j = nHd
184e0 72 3b 0a 20 20 61 73 73 65 72 74 28 20 70 44 61  r;.  assert( pDa
184f0 74 61 30 3c 3d 70 4c 61 73 74 20 29 3b 0a 20 20  ta0<=pLast );.  
18500 70 52 65 63 20 3d 20 70 44 61 74 61 30 3b 0a 20  pRec = pData0;. 
18510 20 64 6f 7b 0a 20 20 20 20 73 65 72 69 61 6c 5f   do{.    serial_
18520 74 79 70 65 20 3d 20 70 52 65 63 2d 3e 75 54 65  type = pRec->uTe
18530 6d 70 3b 0a 20 20 20 20 2f 2a 20 45 56 49 44 45  mp;.    /* EVIDE
18540 4e 43 45 2d 4f 46 3a 20 52 2d 30 36 35 32 39 2d  NCE-OF: R-06529-
18550 34 37 33 36 32 20 46 6f 6c 6c 6f 77 69 6e 67 20  47362 Following 
18560 74 68 65 20 73 69 7a 65 20 76 61 72 69 6e 74 20  the size varint 
18570 61 72 65 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 0a  are one or more.
18580 20 20 20 20 2a 2a 20 61 64 64 69 74 69 6f 6e 61      ** additiona
18590 6c 20 76 61 72 69 6e 74 73 2c 20 6f 6e 65 20 70  l varints, one p
185a0 65 72 20 63 6f 6c 75 6d 6e 2e 20 2a 2f 0a 20 20  er column. */.  
185b0 20 20 69 20 2b 3d 20 70 75 74 56 61 72 69 6e 74    i += putVarint
185c0 33 32 28 26 7a 4e 65 77 52 65 63 6f 72 64 5b 69  32(&zNewRecord[i
185d0 5d 2c 20 73 65 72 69 61 6c 5f 74 79 70 65 29 3b  ], serial_type);
185e0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73              /* s
185f0 65 72 69 61 6c 20 74 79 70 65 20 2a 2f 0a 20 20  erial type */.  
18600 20 20 2f 2a 20 45 56 49 44 45 4e 43 45 2d 4f 46    /* EVIDENCE-OF
18610 3a 20 52 2d 36 34 35 33 36 2d 35 31 37 32 38 20  : R-64536-51728 
18620 54 68 65 20 76 61 6c 75 65 73 20 66 6f 72 20 65  The values for e
18630 61 63 68 20 63 6f 6c 75 6d 6e 20 69 6e 20 74 68  ach column in th
18640 65 20 72 65 63 6f 72 64 0a 20 20 20 20 2a 2a 20  e record.    ** 
18650 69 6d 6d 65 64 69 61 74 65 6c 79 20 66 6f 6c 6c  immediately foll
18660 6f 77 20 74 68 65 20 68 65 61 64 65 72 2e 20 2a  ow the header. *
18670 2f 0a 20 20 20 20 6a 20 2b 3d 20 73 71 6c 69 74  /.    j += sqlit
18680 65 33 56 64 62 65 53 65 72 69 61 6c 50 75 74 28  e3VdbeSerialPut(
18690 26 7a 4e 65 77 52 65 63 6f 72 64 5b 6a 5d 2c 20  &zNewRecord[j], 
186a0 70 52 65 63 2c 20 73 65 72 69 61 6c 5f 74 79 70  pRec, serial_typ
186b0 65 29 3b 20 2f 2a 20 63 6f 6e 74 65 6e 74 20 2a  e); /* content *
186c0 2f 0a 20 20 7d 77 68 69 6c 65 28 20 28 2b 2b 70  /.  }while( (++p
186d0 52 65 63 29 3c 3d 70 4c 61 73 74 20 29 3b 0a 20  Rec)<=pLast );. 
186e0 20 61 73 73 65 72 74 28 20 69 3d 3d 6e 48 64 72   assert( i==nHdr
186f0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 6a 3d   );.  assert( j=
18700 3d 6e 42 79 74 65 20 29 3b 0a 0a 20 20 61 73 73  =nByte );..  ass
18710 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20 26  ert( pOp->p3>0 &
18720 26 20 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e  & pOp->p3<=(p->n
18730 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73  Mem+1 - p->nCurs
18740 6f 72 29 20 29 3b 0a 20 20 70 4f 75 74 2d 3e 6e  or) );.  pOut->n
18750 20 3d 20 28 69 6e 74 29 6e 42 79 74 65 3b 0a 20   = (int)nByte;. 
18760 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d   pOut->flags = M
18770 45 4d 5f 42 6c 6f 62 3b 0a 20 20 69 66 28 20 6e  EM_Blob;.  if( n
18780 5a 65 72 6f 20 29 7b 0a 20 20 20 20 70 4f 75 74  Zero ){.    pOut
18790 2d 3e 75 2e 6e 5a 65 72 6f 20 3d 20 6e 5a 65 72  ->u.nZero = nZer
187a0 6f 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 66 6c 61  o;.    pOut->fla
187b0 67 73 20 7c 3d 20 4d 45 4d 5f 5a 65 72 6f 3b 0a  gs |= MEM_Zero;.
187c0 20 20 7d 0a 20 20 52 45 47 49 53 54 45 52 5f 54    }.  REGISTER_T
187d0 52 41 43 45 28 70 4f 70 2d 3e 70 33 2c 20 70 4f  RACE(pOp->p3, pO
187e0 75 74 29 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41  ut);.  UPDATE_MA
187f0 58 5f 42 4c 4f 42 53 49 5a 45 28 70 4f 75 74 29  X_BLOBSIZE(pOut)
18800 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
18810 20 4f 70 63 6f 64 65 3a 20 43 6f 75 6e 74 20 50   Opcode: Count P
18820 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79  1 P2 * * *.** Sy
18830 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 63 6f  nopsis: r[P2]=co
18840 75 6e 74 28 29 0a 2a 2a 0a 2a 2a 20 53 74 6f 72  unt().**.** Stor
18850 65 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  e the number of 
18860 65 6e 74 72 69 65 73 20 28 61 6e 20 69 6e 74 65  entries (an inte
18870 67 65 72 20 76 61 6c 75 65 29 20 69 6e 20 74 68  ger value) in th
18880 65 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78  e table or index
18890 20 0a 2a 2a 20 6f 70 65 6e 65 64 20 62 79 20 63   .** opened by c
188a0 75 72 73 6f 72 20 50 31 20 69 6e 20 72 65 67 69  ursor P1 in regi
188b0 73 74 65 72 20 50 32 0a 2a 2f 0a 23 69 66 6e 64  ster P2.*/.#ifnd
188c0 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 42  ef SQLITE_OMIT_B
188d0 54 52 45 45 43 4f 55 4e 54 0a 63 61 73 65 20 4f  TREECOUNT.case O
188e0 50 5f 43 6f 75 6e 74 3a 20 7b 20 20 20 20 20 20  P_Count: {      
188f0 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20 20     /* out2 */.  
18900 69 36 34 20 6e 45 6e 74 72 79 3b 0a 20 20 42 74  i64 nEntry;.  Bt
18910 43 75 72 73 6f 72 20 2a 70 43 72 73 72 3b 0a 0a  Cursor *pCrsr;..
18920 20 20 61 73 73 65 72 74 28 20 70 2d 3e 61 70 43    assert( p->apC
18930 73 72 5b 70 4f 70 2d 3e 70 31 5d 2d 3e 65 43 75  sr[pOp->p1]->eCu
18940 72 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f 42  rType==CURTYPE_B
18950 54 52 45 45 20 29 3b 0a 20 20 70 43 72 73 72 20  TREE );.  pCrsr 
18960 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e  = p->apCsr[pOp->
18970 70 31 5d 2d 3e 75 63 2e 70 43 75 72 73 6f 72 3b  p1]->uc.pCursor;
18980 0a 20 20 61 73 73 65 72 74 28 20 70 43 72 73 72  .  assert( pCrsr
18990 20 29 3b 0a 20 20 6e 45 6e 74 72 79 20 3d 20 30   );.  nEntry = 0
189a0 3b 20 20 2f 2a 20 4e 6f 74 20 6e 65 65 64 65 64  ;  /* Not needed
189b0 2e 20 20 4f 6e 6c 79 20 75 73 65 64 20 74 6f 20  .  Only used to 
189c0 73 69 6c 65 6e 63 65 20 61 20 77 61 72 6e 69 6e  silence a warnin
189d0 67 2e 20 2a 2f 0a 20 20 72 63 20 3d 20 73 71 6c  g. */.  rc = sql
189e0 69 74 65 33 42 74 72 65 65 43 6f 75 6e 74 28 70  ite3BtreeCount(p
189f0 43 72 73 72 2c 20 26 6e 45 6e 74 72 79 29 3b 0a  Crsr, &nEntry);.
18a00 20 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20    if( rc ) goto 
18a10 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
18a20 6f 72 3b 0a 20 20 70 4f 75 74 20 3d 20 6f 75 74  or;.  pOut = out
18a30 32 50 72 65 72 65 6c 65 61 73 65 28 70 2c 20 70  2Prerelease(p, p
18a40 4f 70 29 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e 69  Op);.  pOut->u.i
18a50 20 3d 20 6e 45 6e 74 72 79 3b 0a 20 20 62 72 65   = nEntry;.  bre
18a60 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a  ak;.}.#endif../*
18a70 20 4f 70 63 6f 64 65 3a 20 53 61 76 65 70 6f 69   Opcode: Savepoi
18a80 6e 74 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a  nt P1 * * P4 *.*
18a90 2a 0a 2a 2a 20 4f 70 65 6e 2c 20 72 65 6c 65 61  *.** Open, relea
18aa0 73 65 20 6f 72 20 72 6f 6c 6c 62 61 63 6b 20 74  se or rollback t
18ab0 68 65 20 73 61 76 65 70 6f 69 6e 74 20 6e 61 6d  he savepoint nam
18ac0 65 64 20 62 79 20 70 61 72 61 6d 65 74 65 72 20  ed by parameter 
18ad0 50 34 2c 20 64 65 70 65 6e 64 69 6e 67 0a 2a 2a  P4, depending.**
18ae0 20 6f 6e 20 74 68 65 20 76 61 6c 75 65 20 6f 66   on the value of
18af0 20 50 31 2e 20 54 6f 20 6f 70 65 6e 20 61 20 6e   P1. To open a n
18b00 65 77 20 73 61 76 65 70 6f 69 6e 74 2c 20 50 31  ew savepoint, P1
18b10 3d 3d 30 2e 20 54 6f 20 72 65 6c 65 61 73 65 20  ==0. To release 
18b20 28 63 6f 6d 6d 69 74 29 20 61 6e 0a 2a 2a 20 65  (commit) an.** e
18b30 78 69 73 74 69 6e 67 20 73 61 76 65 70 6f 69 6e  xisting savepoin
18b40 74 2c 20 50 31 3d 3d 31 2c 20 6f 72 20 74 6f 20  t, P1==1, or to 
18b50 72 6f 6c 6c 62 61 63 6b 20 61 6e 20 65 78 69 73  rollback an exis
18b60 74 69 6e 67 20 73 61 76 65 70 6f 69 6e 74 20 50  ting savepoint P
18b70 31 3d 3d 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  1==2..*/.case OP
18b80 5f 53 61 76 65 70 6f 69 6e 74 3a 20 7b 0a 20 20  _Savepoint: {.  
18b90 69 6e 74 20 70 31 3b 20 20 20 20 20 20 20 20 20  int p1;         
18ba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18bb0 2f 2a 20 56 61 6c 75 65 20 6f 66 20 50 31 20 6f  /* Value of P1 o
18bc0 70 65 72 61 6e 64 20 2a 2f 0a 20 20 63 68 61 72  perand */.  char
18bd0 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20   *zName;        
18be0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
18bf0 61 6d 65 20 6f 66 20 73 61 76 65 70 6f 69 6e 74  ame of savepoint
18c00 20 2a 2f 0a 20 20 69 6e 74 20 6e 4e 61 6d 65 3b   */.  int nName;
18c10 0a 20 20 53 61 76 65 70 6f 69 6e 74 20 2a 70 4e  .  Savepoint *pN
18c20 65 77 3b 0a 20 20 53 61 76 65 70 6f 69 6e 74 20  ew;.  Savepoint 
18c30 2a 70 53 61 76 65 70 6f 69 6e 74 3b 0a 20 20 53  *pSavepoint;.  S
18c40 61 76 65 70 6f 69 6e 74 20 2a 70 54 6d 70 3b 0a  avepoint *pTmp;.
18c50 20 20 69 6e 74 20 69 53 61 76 65 70 6f 69 6e 74    int iSavepoint
18c60 3b 0a 20 20 69 6e 74 20 69 69 3b 0a 0a 20 20 70  ;.  int ii;..  p
18c70 31 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 7a  1 = pOp->p1;.  z
18c80 4e 61 6d 65 20 3d 20 70 4f 70 2d 3e 70 34 2e 7a  Name = pOp->p4.z
18c90 3b 0a 0a 20 20 2f 2a 20 41 73 73 65 72 74 20 74  ;..  /* Assert t
18ca0 68 61 74 20 74 68 65 20 70 31 20 70 61 72 61 6d  hat the p1 param
18cb0 65 74 65 72 20 69 73 20 76 61 6c 69 64 2e 20 41  eter is valid. A
18cc0 6c 73 6f 20 74 68 61 74 20 69 66 20 74 68 65 72  lso that if ther
18cd0 65 20 69 73 20 6e 6f 20 6f 70 65 6e 0a 20 20 2a  e is no open.  *
18ce0 2a 20 74 72 61 6e 73 61 63 74 69 6f 6e 2c 20 74  * transaction, t
18cf0 68 65 6e 20 74 68 65 72 65 20 63 61 6e 6e 6f 74  hen there cannot
18d00 20 62 65 20 61 6e 79 20 73 61 76 65 70 6f 69 6e   be any savepoin
18d10 74 73 2e 20 0a 20 20 2a 2f 0a 20 20 61 73 73 65  ts. .  */.  asse
18d20 72 74 28 20 64 62 2d 3e 70 53 61 76 65 70 6f 69  rt( db->pSavepoi
18d30 6e 74 3d 3d 30 20 7c 7c 20 64 62 2d 3e 61 75 74  nt==0 || db->aut
18d40 6f 43 6f 6d 6d 69 74 3d 3d 30 20 29 3b 0a 20 20  oCommit==0 );.  
18d50 61 73 73 65 72 74 28 20 70 31 3d 3d 53 41 56 45  assert( p1==SAVE
18d60 50 4f 49 4e 54 5f 42 45 47 49 4e 7c 7c 70 31 3d  POINT_BEGIN||p1=
18d70 3d 53 41 56 45 50 4f 49 4e 54 5f 52 45 4c 45 41  =SAVEPOINT_RELEA
18d80 53 45 7c 7c 70 31 3d 3d 53 41 56 45 50 4f 49 4e  SE||p1==SAVEPOIN
18d90 54 5f 52 4f 4c 4c 42 41 43 4b 20 29 3b 0a 20 20  T_ROLLBACK );.  
18da0 61 73 73 65 72 74 28 20 64 62 2d 3e 70 53 61 76  assert( db->pSav
18db0 65 70 6f 69 6e 74 20 7c 7c 20 64 62 2d 3e 69 73  epoint || db->is
18dc0 54 72 61 6e 73 61 63 74 69 6f 6e 53 61 76 65 70  TransactionSavep
18dd0 6f 69 6e 74 3d 3d 30 20 29 3b 0a 20 20 61 73 73  oint==0 );.  ass
18de0 65 72 74 28 20 63 68 65 63 6b 53 61 76 65 70 6f  ert( checkSavepo
18df0 69 6e 74 43 6f 75 6e 74 28 64 62 29 20 29 3b 0a  intCount(db) );.
18e00 20 20 61 73 73 65 72 74 28 20 70 2d 3e 62 49 73    assert( p->bIs
18e10 52 65 61 64 65 72 20 29 3b 0a 0a 20 20 69 66 28  Reader );..  if(
18e20 20 70 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 42   p1==SAVEPOINT_B
18e30 45 47 49 4e 20 29 7b 0a 20 20 20 20 69 66 28 20  EGIN ){.    if( 
18e40 64 62 2d 3e 6e 56 64 62 65 57 72 69 74 65 3e 30  db->nVdbeWrite>0
18e50 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 41 20 6e   ){.      /* A n
18e60 65 77 20 73 61 76 65 70 6f 69 6e 74 20 63 61 6e  ew savepoint can
18e70 6e 6f 74 20 62 65 20 63 72 65 61 74 65 64 20 69  not be created i
18e80 66 20 74 68 65 72 65 20 61 72 65 20 61 63 74 69  f there are acti
18e90 76 65 20 77 72 69 74 65 20 0a 20 20 20 20 20 20  ve write .      
18ea0 2a 2a 20 73 74 61 74 65 6d 65 6e 74 73 20 28 69  ** statements (i
18eb0 2e 65 2e 20 6f 70 65 6e 20 72 65 61 64 2f 77 72  .e. open read/wr
18ec0 69 74 65 20 69 6e 63 72 65 6d 65 6e 74 61 6c 20  ite incremental 
18ed0 62 6c 6f 62 20 68 61 6e 64 6c 65 73 29 2e 0a 20  blob handles).. 
18ee0 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 73 71       */.      sq
18ef0 6c 69 74 65 33 56 64 62 65 45 72 72 6f 72 28 70  lite3VdbeError(p
18f00 2c 20 22 63 61 6e 6e 6f 74 20 6f 70 65 6e 20 73  , "cannot open s
18f10 61 76 65 70 6f 69 6e 74 20 2d 20 53 51 4c 20 73  avepoint - SQL s
18f20 74 61 74 65 6d 65 6e 74 73 20 69 6e 20 70 72 6f  tatements in pro
18f30 67 72 65 73 73 22 29 3b 0a 20 20 20 20 20 20 72  gress");.      r
18f40 63 20 3d 20 53 51 4c 49 54 45 5f 42 55 53 59 3b  c = SQLITE_BUSY;
18f50 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  .    }else{.    
18f60 20 20 6e 4e 61 6d 65 20 3d 20 73 71 6c 69 74 65    nName = sqlite
18f70 33 53 74 72 6c 65 6e 33 30 28 7a 4e 61 6d 65 29  3Strlen30(zName)
18f80 3b 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  ;..#ifndef SQLIT
18f90 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41  E_OMIT_VIRTUALTA
18fa0 42 4c 45 0a 20 20 20 20 20 20 2f 2a 20 54 68 69  BLE.      /* Thi
18fb0 73 20 63 61 6c 6c 20 69 73 20 4f 6b 20 65 76 65  s call is Ok eve
18fc0 6e 20 69 66 20 74 68 69 73 20 73 61 76 65 70 6f  n if this savepo
18fd0 69 6e 74 20 69 73 20 61 63 74 75 61 6c 6c 79 20  int is actually 
18fe0 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 0a 20 20  a transaction.  
18ff0 20 20 20 20 2a 2a 20 73 61 76 65 70 6f 69 6e 74      ** savepoint
19000 20 28 61 6e 64 20 74 68 65 72 65 66 6f 72 65 20   (and therefore 
19010 73 68 6f 75 6c 64 20 6e 6f 74 20 70 72 6f 6d 70  should not promp
19020 74 20 78 53 61 76 65 70 6f 69 6e 74 28 29 29 20  t xSavepoint()) 
19030 63 61 6c 6c 62 61 63 6b 73 2e 0a 20 20 20 20 20  callbacks..     
19040 20 2a 2a 20 49 66 20 74 68 69 73 20 69 73 20 61   ** If this is a
19050 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 73 61 76   transaction sav
19060 65 70 6f 69 6e 74 20 62 65 69 6e 67 20 6f 70 65  epoint being ope
19070 6e 65 64 2c 20 69 74 20 69 73 20 67 75 61 72 61  ned, it is guara
19080 6e 74 65 65 64 0a 20 20 20 20 20 20 2a 2a 20 74  nteed.      ** t
19090 68 61 74 20 74 68 65 20 64 62 2d 3e 61 56 54 72  hat the db->aVTr
190a0 61 6e 73 5b 5d 20 61 72 72 61 79 20 69 73 20 65  ans[] array is e
190b0 6d 70 74 79 2e 20 20 2a 2f 0a 20 20 20 20 20 20  mpty.  */.      
190c0 61 73 73 65 72 74 28 20 64 62 2d 3e 61 75 74 6f  assert( db->auto
190d0 43 6f 6d 6d 69 74 3d 3d 30 20 7c 7c 20 64 62 2d  Commit==0 || db-
190e0 3e 6e 56 54 72 61 6e 73 3d 3d 30 20 29 3b 0a 20  >nVTrans==0 );. 
190f0 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65       rc = sqlite
19100 33 56 74 61 62 53 61 76 65 70 6f 69 6e 74 28 64  3VtabSavepoint(d
19110 62 2c 20 53 41 56 45 50 4f 49 4e 54 5f 42 45 47  b, SAVEPOINT_BEG
19120 49 4e 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  IN,.            
19130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19140 20 20 20 20 64 62 2d 3e 6e 53 74 61 74 65 6d 65      db->nStateme
19150 6e 74 2b 64 62 2d 3e 6e 53 61 76 65 70 6f 69 6e  nt+db->nSavepoin
19160 74 29 3b 0a 20 20 20 20 20 20 69 66 28 20 72 63  t);.      if( rc
19170 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 20 67 6f  !=SQLITE_OK ) go
19180 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
19190 65 72 72 6f 72 3b 0a 23 65 6e 64 69 66 0a 0a 20  error;.#endif.. 
191a0 20 20 20 20 20 2f 2a 20 43 72 65 61 74 65 20 61       /* Create a
191b0 20 6e 65 77 20 73 61 76 65 70 6f 69 6e 74 20 73   new savepoint s
191c0 74 72 75 63 74 75 72 65 2e 20 2a 2f 0a 20 20 20  tructure. */.   
191d0 20 20 20 70 4e 65 77 20 3d 20 73 71 6c 69 74 65     pNew = sqlite
191e0 33 44 62 4d 61 6c 6c 6f 63 52 61 77 4e 4e 28 64  3DbMallocRawNN(d
191f0 62 2c 20 73 69 7a 65 6f 66 28 53 61 76 65 70 6f  b, sizeof(Savepo
19200 69 6e 74 29 2b 6e 4e 61 6d 65 2b 31 29 3b 0a 20  int)+nName+1);. 
19210 20 20 20 20 20 69 66 28 20 70 4e 65 77 20 29 7b       if( pNew ){
19220 0a 20 20 20 20 20 20 20 20 70 4e 65 77 2d 3e 7a  .        pNew->z
19230 4e 61 6d 65 20 3d 20 28 63 68 61 72 20 2a 29 26  Name = (char *)&
19240 70 4e 65 77 5b 31 5d 3b 0a 20 20 20 20 20 20 20  pNew[1];.       
19250 20 6d 65 6d 63 70 79 28 70 4e 65 77 2d 3e 7a 4e   memcpy(pNew->zN
19260 61 6d 65 2c 20 7a 4e 61 6d 65 2c 20 6e 4e 61 6d  ame, zName, nNam
19270 65 2b 31 29 3b 0a 20 20 20 20 0a 20 20 20 20 20  e+1);.    .     
19280 20 20 20 2f 2a 20 49 66 20 74 68 65 72 65 20 69     /* If there i
19290 73 20 6e 6f 20 6f 70 65 6e 20 74 72 61 6e 73 61  s no open transa
192a0 63 74 69 6f 6e 2c 20 74 68 65 6e 20 6d 61 72 6b  ction, then mark
192b0 20 74 68 69 73 20 61 73 20 61 20 73 70 65 63 69   this as a speci
192c0 61 6c 0a 20 20 20 20 20 20 20 20 2a 2a 20 22 74  al.        ** "t
192d0 72 61 6e 73 61 63 74 69 6f 6e 20 73 61 76 65 70  ransaction savep
192e0 6f 69 6e 74 22 2e 20 2a 2f 0a 20 20 20 20 20 20  oint". */.      
192f0 20 20 69 66 28 20 64 62 2d 3e 61 75 74 6f 43 6f    if( db->autoCo
19300 6d 6d 69 74 20 29 7b 0a 20 20 20 20 20 20 20 20  mmit ){.        
19310 20 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74    db->autoCommit
19320 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 20 20   = 0;.          
19330 64 62 2d 3e 69 73 54 72 61 6e 73 61 63 74 69 6f  db->isTransactio
19340 6e 53 61 76 65 70 6f 69 6e 74 20 3d 20 31 3b 0a  nSavepoint = 1;.
19350 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20          }else{. 
19360 20 20 20 20 20 20 20 20 20 64 62 2d 3e 6e 53 61           db->nSa
19370 76 65 70 6f 69 6e 74 2b 2b 3b 0a 20 20 20 20 20  vepoint++;.     
19380 20 20 20 7d 0a 0a 20 20 20 20 20 20 20 20 2f 2a     }..        /*
19390 20 4c 69 6e 6b 20 74 68 65 20 6e 65 77 20 73 61   Link the new sa
193a0 76 65 70 6f 69 6e 74 20 69 6e 74 6f 20 74 68 65  vepoint into the
193b0 20 64 61 74 61 62 61 73 65 20 68 61 6e 64 6c 65   database handle
193c0 27 73 20 6c 69 73 74 2e 20 2a 2f 0a 20 20 20 20  's list. */.    
193d0 20 20 20 20 70 4e 65 77 2d 3e 70 4e 65 78 74 20      pNew->pNext 
193e0 3d 20 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74  = db->pSavepoint
193f0 3b 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 70 53  ;.        db->pS
19400 61 76 65 70 6f 69 6e 74 20 3d 20 70 4e 65 77 3b  avepoint = pNew;
19410 0a 20 20 20 20 20 20 20 20 70 4e 65 77 2d 3e 6e  .        pNew->n
19420 44 65 66 65 72 72 65 64 43 6f 6e 73 20 3d 20 64  DeferredCons = d
19430 62 2d 3e 6e 44 65 66 65 72 72 65 64 43 6f 6e 73  b->nDeferredCons
19440 3b 0a 20 20 20 20 20 20 20 20 70 4e 65 77 2d 3e  ;.        pNew->
19450 6e 44 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73  nDeferredImmCons
19460 20 3d 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64   = db->nDeferred
19470 49 6d 6d 43 6f 6e 73 3b 0a 20 20 20 20 20 20 7d  ImmCons;.      }
19480 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a  .    }.  }else{.
19490 20 20 20 20 69 53 61 76 65 70 6f 69 6e 74 20 3d      iSavepoint =
194a0 20 30 3b 0a 0a 20 20 20 20 2f 2a 20 46 69 6e 64   0;..    /* Find
194b0 20 74 68 65 20 6e 61 6d 65 64 20 73 61 76 65 70   the named savep
194c0 6f 69 6e 74 2e 20 49 66 20 74 68 65 72 65 20 69  oint. If there i
194d0 73 20 6e 6f 20 73 75 63 68 20 73 61 76 65 70 6f  s no such savepo
194e0 69 6e 74 2c 20 74 68 65 6e 20 61 6e 0a 20 20 20  int, then an.   
194f0 20 2a 2a 20 61 6e 20 65 72 72 6f 72 20 69 73 20   ** an error is 
19500 72 65 74 75 72 6e 65 64 20 74 6f 20 74 68 65 20  returned to the 
19510 75 73 65 72 2e 20 20 2a 2f 0a 20 20 20 20 66 6f  user.  */.    fo
19520 72 28 0a 20 20 20 20 20 20 70 53 61 76 65 70 6f  r(.      pSavepo
19530 69 6e 74 20 3d 20 64 62 2d 3e 70 53 61 76 65 70  int = db->pSavep
19540 6f 69 6e 74 3b 20 0a 20 20 20 20 20 20 70 53 61  oint; .      pSa
19550 76 65 70 6f 69 6e 74 20 26 26 20 73 71 6c 69 74  vepoint && sqlit
19560 65 33 53 74 72 49 43 6d 70 28 70 53 61 76 65 70  e3StrICmp(pSavep
19570 6f 69 6e 74 2d 3e 7a 4e 61 6d 65 2c 20 7a 4e 61  oint->zName, zNa
19580 6d 65 29 3b 0a 20 20 20 20 20 20 70 53 61 76 65  me);.      pSave
19590 70 6f 69 6e 74 20 3d 20 70 53 61 76 65 70 6f 69  point = pSavepoi
195a0 6e 74 2d 3e 70 4e 65 78 74 0a 20 20 20 20 29 7b  nt->pNext.    ){
195b0 0a 20 20 20 20 20 20 69 53 61 76 65 70 6f 69 6e  .      iSavepoin
195c0 74 2b 2b 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69  t++;.    }.    i
195d0 66 28 20 21 70 53 61 76 65 70 6f 69 6e 74 20 29  f( !pSavepoint )
195e0 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  {.      sqlite3V
195f0 64 62 65 45 72 72 6f 72 28 70 2c 20 22 6e 6f 20  dbeError(p, "no 
19600 73 75 63 68 20 73 61 76 65 70 6f 69 6e 74 3a 20  such savepoint: 
19610 25 73 22 2c 20 7a 4e 61 6d 65 29 3b 0a 20 20 20  %s", zName);.   
19620 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 45     rc = SQLITE_E
19630 52 52 4f 52 3b 0a 20 20 20 20 7d 65 6c 73 65 20  RROR;.    }else 
19640 69 66 28 20 64 62 2d 3e 6e 56 64 62 65 57 72 69  if( db->nVdbeWri
19650 74 65 3e 30 20 26 26 20 70 31 3d 3d 53 41 56 45  te>0 && p1==SAVE
19660 50 4f 49 4e 54 5f 52 45 4c 45 41 53 45 20 29 7b  POINT_RELEASE ){
19670 0a 20 20 20 20 20 20 2f 2a 20 49 74 20 69 73 20  .      /* It is 
19680 6e 6f 74 20 70 6f 73 73 69 62 6c 65 20 74 6f 20  not possible to 
19690 72 65 6c 65 61 73 65 20 28 63 6f 6d 6d 69 74 29  release (commit)
196a0 20 61 20 73 61 76 65 70 6f 69 6e 74 20 69 66 20   a savepoint if 
196b0 74 68 65 72 65 20 61 72 65 20 0a 20 20 20 20 20  there are .     
196c0 20 2a 2a 20 61 63 74 69 76 65 20 77 72 69 74 65   ** active write
196d0 20 73 74 61 74 65 6d 65 6e 74 73 2e 0a 20 20 20   statements..   
196e0 20 20 20 2a 2f 0a 20 20 20 20 20 20 73 71 6c 69     */.      sqli
196f0 74 65 33 56 64 62 65 45 72 72 6f 72 28 70 2c 20  te3VdbeError(p, 
19700 22 63 61 6e 6e 6f 74 20 72 65 6c 65 61 73 65 20  "cannot release 
19710 73 61 76 65 70 6f 69 6e 74 20 2d 20 22 0a 20 20  savepoint - ".  
19720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19730 20 20 20 20 20 20 20 20 22 53 51 4c 20 73 74 61          "SQL sta
19740 74 65 6d 65 6e 74 73 20 69 6e 20 70 72 6f 67 72  tements in progr
19750 65 73 73 22 29 3b 0a 20 20 20 20 20 20 72 63 20  ess");.      rc 
19760 3d 20 53 51 4c 49 54 45 5f 42 55 53 59 3b 0a 20  = SQLITE_BUSY;. 
19770 20 20 20 7d 65 6c 73 65 7b 0a 0a 20 20 20 20 20     }else{..     
19780 20 2f 2a 20 44 65 74 65 72 6d 69 6e 65 20 77 68   /* Determine wh
19790 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 74 68 69  ether or not thi
197a0 73 20 69 73 20 61 20 74 72 61 6e 73 61 63 74 69  s is a transacti
197b0 6f 6e 20 73 61 76 65 70 6f 69 6e 74 2e 20 49 66  on savepoint. If
197c0 20 73 6f 2c 0a 20 20 20 20 20 20 2a 2a 20 61 6e   so,.      ** an
197d0 64 20 74 68 69 73 20 69 73 20 61 20 52 45 4c 45  d this is a RELE
197e0 41 53 45 20 63 6f 6d 6d 61 6e 64 2c 20 74 68 65  ASE command, the
197f0 6e 20 74 68 65 20 63 75 72 72 65 6e 74 20 74 72  n the current tr
19800 61 6e 73 61 63 74 69 6f 6e 20 0a 20 20 20 20 20  ansaction .     
19810 20 2a 2a 20 69 73 20 63 6f 6d 6d 69 74 74 65 64   ** is committed
19820 2e 20 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20  . .      */.    
19830 20 20 69 6e 74 20 69 73 54 72 61 6e 73 61 63 74    int isTransact
19840 69 6f 6e 20 3d 20 70 53 61 76 65 70 6f 69 6e 74  ion = pSavepoint
19850 2d 3e 70 4e 65 78 74 3d 3d 30 20 26 26 20 64 62  ->pNext==0 && db
19860 2d 3e 69 73 54 72 61 6e 73 61 63 74 69 6f 6e 53  ->isTransactionS
19870 61 76 65 70 6f 69 6e 74 3b 0a 20 20 20 20 20 20  avepoint;.      
19880 69 66 28 20 69 73 54 72 61 6e 73 61 63 74 69 6f  if( isTransactio
19890 6e 20 26 26 20 70 31 3d 3d 53 41 56 45 50 4f 49  n && p1==SAVEPOI
198a0 4e 54 5f 52 45 4c 45 41 53 45 20 29 7b 0a 20 20  NT_RELEASE ){.  
198b0 20 20 20 20 20 20 69 66 28 20 28 72 63 20 3d 20        if( (rc = 
198c0 73 71 6c 69 74 65 33 56 64 62 65 43 68 65 63 6b  sqlite3VdbeCheck
198d0 46 6b 28 70 2c 20 31 29 29 21 3d 53 51 4c 49 54  Fk(p, 1))!=SQLIT
198e0 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20 20  E_OK ){.        
198f0 20 20 67 6f 74 6f 20 76 64 62 65 5f 72 65 74 75    goto vdbe_retu
19900 72 6e 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20  rn;.        }.  
19910 20 20 20 20 20 20 64 62 2d 3e 61 75 74 6f 43 6f        db->autoCo
19920 6d 6d 69 74 20 3d 20 31 3b 0a 20 20 20 20 20 20  mmit = 1;.      
19930 20 20 69 66 28 20 73 71 6c 69 74 65 33 56 64 62    if( sqlite3Vdb
19940 65 48 61 6c 74 28 70 29 3d 3d 53 51 4c 49 54 45  eHalt(p)==SQLITE
19950 5f 42 55 53 59 20 29 7b 0a 20 20 20 20 20 20 20  _BUSY ){.       
19960 20 20 20 70 2d 3e 70 63 20 3d 20 28 69 6e 74 29     p->pc = (int)
19970 28 70 4f 70 20 2d 20 61 4f 70 29 3b 0a 20 20 20  (pOp - aOp);.   
19980 20 20 20 20 20 20 20 64 62 2d 3e 61 75 74 6f 43         db->autoC
19990 6f 6d 6d 69 74 20 3d 20 30 3b 0a 20 20 20 20 20  ommit = 0;.     
199a0 20 20 20 20 20 70 2d 3e 72 63 20 3d 20 72 63 20       p->rc = rc 
199b0 3d 20 53 51 4c 49 54 45 5f 42 55 53 59 3b 0a 20  = SQLITE_BUSY;. 
199c0 20 20 20 20 20 20 20 20 20 67 6f 74 6f 20 76 64           goto vd
199d0 62 65 5f 72 65 74 75 72 6e 3b 0a 20 20 20 20 20  be_return;.     
199e0 20 20 20 7d 0a 20 20 20 20 20 20 20 20 64 62 2d     }.        db-
199f0 3e 69 73 54 72 61 6e 73 61 63 74 69 6f 6e 53 61  >isTransactionSa
19a00 76 65 70 6f 69 6e 74 20 3d 20 30 3b 0a 20 20 20  vepoint = 0;.   
19a10 20 20 20 20 20 72 63 20 3d 20 70 2d 3e 72 63 3b       rc = p->rc;
19a20 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  .      }else{.  
19a30 20 20 20 20 20 20 69 6e 74 20 69 73 53 63 68 65        int isSche
19a40 6d 61 43 68 61 6e 67 65 3b 0a 20 20 20 20 20 20  maChange;.      
19a50 20 20 69 53 61 76 65 70 6f 69 6e 74 20 3d 20 64    iSavepoint = d
19a60 62 2d 3e 6e 53 61 76 65 70 6f 69 6e 74 20 2d 20  b->nSavepoint - 
19a70 69 53 61 76 65 70 6f 69 6e 74 20 2d 20 31 3b 0a  iSavepoint - 1;.
19a80 20 20 20 20 20 20 20 20 69 66 28 20 70 31 3d 3d          if( p1==
19a90 53 41 56 45 50 4f 49 4e 54 5f 52 4f 4c 4c 42 41  SAVEPOINT_ROLLBA
19aa0 43 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  CK ){.          
19ab0 69 73 53 63 68 65 6d 61 43 68 61 6e 67 65 20 3d  isSchemaChange =
19ac0 20 28 64 62 2d 3e 6d 44 62 46 6c 61 67 73 20 26   (db->mDbFlags &
19ad0 20 44 42 46 4c 41 47 5f 53 63 68 65 6d 61 43 68   DBFLAG_SchemaCh
19ae0 61 6e 67 65 29 21 3d 30 3b 0a 20 20 20 20 20 20  ange)!=0;.      
19af0 20 20 20 20 66 6f 72 28 69 69 3d 30 3b 20 69 69      for(ii=0; ii
19b00 3c 64 62 2d 3e 6e 44 62 3b 20 69 69 2b 2b 29 7b  <db->nDb; ii++){
19b10 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 63 20  .            rc 
19b20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 54 72  = sqlite3BtreeTr
19b30 69 70 41 6c 6c 43 75 72 73 6f 72 73 28 64 62 2d  ipAllCursors(db-
19b40 3e 61 44 62 5b 69 69 5d 2e 70 42 74 2c 0a 20 20  >aDb[ii].pBt,.  
19b50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19b60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19b70 20 20 20 20 20 53 51 4c 49 54 45 5f 41 42 4f 52       SQLITE_ABOR
19b80 54 5f 52 4f 4c 4c 42 41 43 4b 2c 0a 20 20 20 20  T_ROLLBACK,.    
19b90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19ba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19bb0 20 20 20 69 73 53 63 68 65 6d 61 43 68 61 6e 67     isSchemaChang
19bc0 65 3d 3d 30 29 3b 0a 20 20 20 20 20 20 20 20 20  e==0);.         
19bd0 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54     if( rc!=SQLIT
19be0 45 5f 4f 4b 20 29 20 67 6f 74 6f 20 61 62 6f 72  E_OK ) goto abor
19bf0 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
19c00 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20            }.    
19c10 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
19c20 20 20 20 20 20 69 73 53 63 68 65 6d 61 43 68 61       isSchemaCha
19c30 6e 67 65 20 3d 20 30 3b 0a 20 20 20 20 20 20 20  nge = 0;.       
19c40 20 7d 0a 20 20 20 20 20 20 20 20 66 6f 72 28 69   }.        for(i
19c50 69 3d 30 3b 20 69 69 3c 64 62 2d 3e 6e 44 62 3b  i=0; ii<db->nDb;
19c60 20 69 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20   ii++){.        
19c70 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
19c80 72 65 65 53 61 76 65 70 6f 69 6e 74 28 64 62 2d  reeSavepoint(db-
19c90 3e 61 44 62 5b 69 69 5d 2e 70 42 74 2c 20 70 31  >aDb[ii].pBt, p1
19ca0 2c 20 69 53 61 76 65 70 6f 69 6e 74 29 3b 0a 20  , iSavepoint);. 
19cb0 20 20 20 20 20 20 20 20 20 69 66 28 20 72 63 21           if( rc!
19cc0 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20  =SQLITE_OK ){.  
19cd0 20 20 20 20 20 20 20 20 20 20 67 6f 74 6f 20 61            goto a
19ce0 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
19cf0 72 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 20  r;.          }. 
19d00 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
19d10 20 69 66 28 20 69 73 53 63 68 65 6d 61 43 68 61   if( isSchemaCha
19d20 6e 67 65 20 29 7b 0a 20 20 20 20 20 20 20 20 20  nge ){.         
19d30 20 73 71 6c 69 74 65 33 45 78 70 69 72 65 50 72   sqlite3ExpirePr
19d40 65 70 61 72 65 64 53 74 61 74 65 6d 65 6e 74 73  eparedStatements
19d50 28 64 62 2c 20 30 29 3b 0a 20 20 20 20 20 20 20  (db, 0);.       
19d60 20 20 20 73 71 6c 69 74 65 33 52 65 73 65 74 41     sqlite3ResetA
19d70 6c 6c 53 63 68 65 6d 61 73 4f 66 43 6f 6e 6e 65  llSchemasOfConne
19d80 63 74 69 6f 6e 28 64 62 29 3b 0a 20 20 20 20 20  ction(db);.     
19d90 20 20 20 20 20 64 62 2d 3e 6d 44 62 46 6c 61 67       db->mDbFlag
19da0 73 20 7c 3d 20 44 42 46 4c 41 47 5f 53 63 68 65  s |= DBFLAG_Sche
19db0 6d 61 43 68 61 6e 67 65 3b 0a 20 20 20 20 20 20  maChange;.      
19dc0 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20 0a 20    }.      }.  . 
19dd0 20 20 20 20 20 2f 2a 20 52 65 67 61 72 64 6c 65       /* Regardle
19de0 73 73 20 6f 66 20 77 68 65 74 68 65 72 20 74 68  ss of whether th
19df0 69 73 20 69 73 20 61 20 52 45 4c 45 41 53 45 20  is is a RELEASE 
19e00 6f 72 20 52 4f 4c 4c 42 41 43 4b 2c 20 64 65 73  or ROLLBACK, des
19e10 74 72 6f 79 20 61 6c 6c 20 0a 20 20 20 20 20 20  troy all .      
19e20 2a 2a 20 73 61 76 65 70 6f 69 6e 74 73 20 6e 65  ** savepoints ne
19e30 73 74 65 64 20 69 6e 73 69 64 65 20 6f 66 20 74  sted inside of t
19e40 68 65 20 73 61 76 65 70 6f 69 6e 74 20 62 65 69  he savepoint bei
19e50 6e 67 20 6f 70 65 72 61 74 65 64 20 6f 6e 2e 20  ng operated on. 
19e60 2a 2f 0a 20 20 20 20 20 20 77 68 69 6c 65 28 20  */.      while( 
19e70 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74 21 3d  db->pSavepoint!=
19e80 70 53 61 76 65 70 6f 69 6e 74 20 29 7b 0a 20 20  pSavepoint ){.  
19e90 20 20 20 20 20 20 70 54 6d 70 20 3d 20 64 62 2d        pTmp = db-
19ea0 3e 70 53 61 76 65 70 6f 69 6e 74 3b 0a 20 20 20  >pSavepoint;.   
19eb0 20 20 20 20 20 64 62 2d 3e 70 53 61 76 65 70 6f       db->pSavepo
19ec0 69 6e 74 20 3d 20 70 54 6d 70 2d 3e 70 4e 65 78  int = pTmp->pNex
19ed0 74 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  t;.        sqlit
19ee0 65 33 44 62 46 72 65 65 28 64 62 2c 20 70 54 6d  e3DbFree(db, pTm
19ef0 70 29 3b 0a 20 20 20 20 20 20 20 20 64 62 2d 3e  p);.        db->
19f00 6e 53 61 76 65 70 6f 69 6e 74 2d 2d 3b 0a 20 20  nSavepoint--;.  
19f10 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 2f 2a 20      }..      /* 
19f20 49 66 20 69 74 20 69 73 20 61 20 52 45 4c 45 41  If it is a RELEA
19f30 53 45 2c 20 74 68 65 6e 20 64 65 73 74 72 6f 79  SE, then destroy
19f40 20 74 68 65 20 73 61 76 65 70 6f 69 6e 74 20 62   the savepoint b
19f50 65 69 6e 67 20 6f 70 65 72 61 74 65 64 20 6f 6e  eing operated on
19f60 20 0a 20 20 20 20 20 20 2a 2a 20 74 6f 6f 2e 20   .      ** too. 
19f70 49 66 20 69 74 20 69 73 20 61 20 52 4f 4c 4c 42  If it is a ROLLB
19f80 41 43 4b 20 54 4f 2c 20 74 68 65 6e 20 73 65 74  ACK TO, then set
19f90 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 64   the number of d
19fa0 65 66 65 72 72 65 64 20 0a 20 20 20 20 20 20 2a  eferred .      *
19fb0 2a 20 63 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f  * constraint vio
19fc0 6c 61 74 69 6f 6e 73 20 70 72 65 73 65 6e 74 20  lations present 
19fd0 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20  in the database 
19fe0 74 6f 20 74 68 65 20 76 61 6c 75 65 20 73 74 6f  to the value sto
19ff0 72 65 64 0a 20 20 20 20 20 20 2a 2a 20 77 68 65  red.      ** whe
1a000 6e 20 74 68 65 20 73 61 76 65 70 6f 69 6e 74 20  n the savepoint 
1a010 77 61 73 20 63 72 65 61 74 65 64 2e 20 20 2a 2f  was created.  */
1a020 0a 20 20 20 20 20 20 69 66 28 20 70 31 3d 3d 53  .      if( p1==S
1a030 41 56 45 50 4f 49 4e 54 5f 52 45 4c 45 41 53 45  AVEPOINT_RELEASE
1a040 20 29 7b 0a 20 20 20 20 20 20 20 20 61 73 73 65   ){.        asse
1a050 72 74 28 20 70 53 61 76 65 70 6f 69 6e 74 3d 3d  rt( pSavepoint==
1a060 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74 20 29  db->pSavepoint )
1a070 3b 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 70 53  ;.        db->pS
1a080 61 76 65 70 6f 69 6e 74 20 3d 20 70 53 61 76 65  avepoint = pSave
1a090 70 6f 69 6e 74 2d 3e 70 4e 65 78 74 3b 0a 20 20  point->pNext;.  
1a0a0 20 20 20 20 20 20 73 71 6c 69 74 65 33 44 62 46        sqlite3DbF
1a0b0 72 65 65 28 64 62 2c 20 70 53 61 76 65 70 6f 69  ree(db, pSavepoi
1a0c0 6e 74 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28  nt);.        if(
1a0d0 20 21 69 73 54 72 61 6e 73 61 63 74 69 6f 6e 20   !isTransaction 
1a0e0 29 7b 0a 20 20 20 20 20 20 20 20 20 20 64 62 2d  ){.          db-
1a0f0 3e 6e 53 61 76 65 70 6f 69 6e 74 2d 2d 3b 0a 20  >nSavepoint--;. 
1a100 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d         }.      }
1a110 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 64 62  else{.        db
1a120 2d 3e 6e 44 65 66 65 72 72 65 64 43 6f 6e 73 20  ->nDeferredCons 
1a130 3d 20 70 53 61 76 65 70 6f 69 6e 74 2d 3e 6e 44  = pSavepoint->nD
1a140 65 66 65 72 72 65 64 43 6f 6e 73 3b 0a 20 20 20  eferredCons;.   
1a150 20 20 20 20 20 64 62 2d 3e 6e 44 65 66 65 72 72       db->nDeferr
1a160 65 64 49 6d 6d 43 6f 6e 73 20 3d 20 70 53 61 76  edImmCons = pSav
1a170 65 70 6f 69 6e 74 2d 3e 6e 44 65 66 65 72 72 65  epoint->nDeferre
1a180 64 49 6d 6d 43 6f 6e 73 3b 0a 20 20 20 20 20 20  dImmCons;.      
1a190 7d 0a 0a 20 20 20 20 20 20 69 66 28 20 21 69 73  }..      if( !is
1a1a0 54 72 61 6e 73 61 63 74 69 6f 6e 20 7c 7c 20 70  Transaction || p
1a1b0 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 52 4f 4c  1==SAVEPOINT_ROL
1a1c0 4c 42 41 43 4b 20 29 7b 0a 20 20 20 20 20 20 20  LBACK ){.       
1a1d0 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 74 61   rc = sqlite3Vta
1a1e0 62 53 61 76 65 70 6f 69 6e 74 28 64 62 2c 20 70  bSavepoint(db, p
1a1f0 31 2c 20 69 53 61 76 65 70 6f 69 6e 74 29 3b 0a  1, iSavepoint);.
1a200 20 20 20 20 20 20 20 20 69 66 28 20 72 63 21 3d          if( rc!=
1a210 53 51 4c 49 54 45 5f 4f 4b 20 29 20 67 6f 74 6f  SQLITE_OK ) goto
1a220 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
1a230 72 6f 72 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  ror;.      }.   
1a240 20 7d 0a 20 20 7d 0a 20 20 69 66 28 20 72 63 20   }.  }.  if( rc 
1a250 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65  ) goto abort_due
1a260 5f 74 6f 5f 65 72 72 6f 72 3b 0a 0a 20 20 62 72  _to_error;..  br
1a270 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
1a280 65 3a 20 41 75 74 6f 43 6f 6d 6d 69 74 20 50 31  e: AutoCommit P1
1a290 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20   P2 * * *.**.** 
1a2a0 53 65 74 20 74 68 65 20 64 61 74 61 62 61 73 65  Set the database
1a2b0 20 61 75 74 6f 2d 63 6f 6d 6d 69 74 20 66 6c 61   auto-commit fla
1a2c0 67 20 74 6f 20 50 31 20 28 31 20 6f 72 20 30 29  g to P1 (1 or 0)
1a2d0 2e 20 49 66 20 50 32 20 69 73 20 74 72 75 65 2c  . If P2 is true,
1a2e0 20 72 6f 6c 6c 0a 2a 2a 20 62 61 63 6b 20 61 6e   roll.** back an
1a2f0 79 20 63 75 72 72 65 6e 74 6c 79 20 61 63 74 69  y currently acti
1a300 76 65 20 62 74 72 65 65 20 74 72 61 6e 73 61 63  ve btree transac
1a310 74 69 6f 6e 73 2e 20 49 66 20 74 68 65 72 65 20  tions. If there 
1a320 61 72 65 20 61 6e 79 20 61 63 74 69 76 65 0a 2a  are any active.*
1a330 2a 20 56 4d 73 20 28 61 70 61 72 74 20 66 72 6f  * VMs (apart fro
1a340 6d 20 74 68 69 73 20 6f 6e 65 29 2c 20 74 68 65  m this one), the
1a350 6e 20 61 20 52 4f 4c 4c 42 41 43 4b 20 66 61 69  n a ROLLBACK fai
1a360 6c 73 2e 20 20 41 20 43 4f 4d 4d 49 54 20 66 61  ls.  A COMMIT fa
1a370 69 6c 73 20 69 66 0a 2a 2a 20 74 68 65 72 65 20  ils if.** there 
1a380 61 72 65 20 61 63 74 69 76 65 20 77 72 69 74 69  are active writi
1a390 6e 67 20 56 4d 73 20 6f 72 20 61 63 74 69 76 65  ng VMs or active
1a3a0 20 56 4d 73 20 74 68 61 74 20 75 73 65 20 73 68   VMs that use sh
1a3b0 61 72 65 64 20 63 61 63 68 65 2e 0a 2a 2a 0a 2a  ared cache..**.*
1a3c0 2a 20 54 68 69 73 20 69 6e 73 74 72 75 63 74 69  * This instructi
1a3d0 6f 6e 20 63 61 75 73 65 73 20 74 68 65 20 56 4d  on causes the VM
1a3e0 20 74 6f 20 68 61 6c 74 2e 0a 2a 2f 0a 63 61 73   to halt..*/.cas
1a3f0 65 20 4f 50 5f 41 75 74 6f 43 6f 6d 6d 69 74 3a  e OP_AutoCommit:
1a400 20 7b 0a 20 20 69 6e 74 20 64 65 73 69 72 65 64   {.  int desired
1a410 41 75 74 6f 43 6f 6d 6d 69 74 3b 0a 20 20 69 6e  AutoCommit;.  in
1a420 74 20 69 52 6f 6c 6c 62 61 63 6b 3b 0a 0a 20 20  t iRollback;..  
1a430 64 65 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69  desiredAutoCommi
1a440 74 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 69  t = pOp->p1;.  i
1a450 52 6f 6c 6c 62 61 63 6b 20 3d 20 70 4f 70 2d 3e  Rollback = pOp->
1a460 70 32 3b 0a 20 20 61 73 73 65 72 74 28 20 64 65  p2;.  assert( de
1a470 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74 3d  siredAutoCommit=
1a480 3d 31 20 7c 7c 20 64 65 73 69 72 65 64 41 75 74  =1 || desiredAut
1a490 6f 43 6f 6d 6d 69 74 3d 3d 30 20 29 3b 0a 20 20  oCommit==0 );.  
1a4a0 61 73 73 65 72 74 28 20 64 65 73 69 72 65 64 41  assert( desiredA
1a4b0 75 74 6f 43 6f 6d 6d 69 74 3d 3d 31 20 7c 7c 20  utoCommit==1 || 
1a4c0 69 52 6f 6c 6c 62 61 63 6b 3d 3d 30 20 29 3b 0a  iRollback==0 );.
1a4d0 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e 6e 56    assert( db->nV
1a4e0 64 62 65 41 63 74 69 76 65 3e 30 20 29 3b 20 20  dbeActive>0 );  
1a4f0 2f 2a 20 41 74 20 6c 65 61 73 74 20 74 68 69 73  /* At least this
1a500 20 6f 6e 65 20 56 4d 20 69 73 20 61 63 74 69 76   one VM is activ
1a510 65 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70  e */.  assert( p
1a520 2d 3e 62 49 73 52 65 61 64 65 72 20 29 3b 0a 0a  ->bIsReader );..
1a530 20 20 69 66 28 20 64 65 73 69 72 65 64 41 75 74    if( desiredAut
1a540 6f 43 6f 6d 6d 69 74 21 3d 64 62 2d 3e 61 75 74  oCommit!=db->aut
1a550 6f 43 6f 6d 6d 69 74 20 29 7b 0a 20 20 20 20 69  oCommit ){.    i
1a560 66 28 20 69 52 6f 6c 6c 62 61 63 6b 20 29 7b 0a  f( iRollback ){.
1a570 20 20 20 20 20 20 61 73 73 65 72 74 28 20 64 65        assert( de
1a580 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74 3d  siredAutoCommit=
1a590 3d 31 20 29 3b 0a 20 20 20 20 20 20 73 71 6c 69  =1 );.      sqli
1a5a0 74 65 33 52 6f 6c 6c 62 61 63 6b 41 6c 6c 28 64  te3RollbackAll(d
1a5b0 62 2c 20 53 51 4c 49 54 45 5f 41 42 4f 52 54 5f  b, SQLITE_ABORT_
1a5c0 52 4f 4c 4c 42 41 43 4b 29 3b 0a 20 20 20 20 20  ROLLBACK);.     
1a5d0 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20   db->autoCommit 
1a5e0 3d 20 31 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69  = 1;.    }else i
1a5f0 66 28 20 64 65 73 69 72 65 64 41 75 74 6f 43 6f  f( desiredAutoCo
1a600 6d 6d 69 74 20 26 26 20 64 62 2d 3e 6e 56 64 62  mmit && db->nVdb
1a610 65 57 72 69 74 65 3e 30 20 29 7b 0a 20 20 20 20  eWrite>0 ){.    
1a620 20 20 2f 2a 20 49 66 20 74 68 69 73 20 69 6e 73    /* If this ins
1a630 74 72 75 63 74 69 6f 6e 20 69 6d 70 6c 65 6d 65  truction impleme
1a640 6e 74 73 20 61 20 43 4f 4d 4d 49 54 20 61 6e 64  nts a COMMIT and
1a650 20 6f 74 68 65 72 20 56 4d 73 20 61 72 65 20 77   other VMs are w
1a660 72 69 74 69 6e 67 0a 20 20 20 20 20 20 2a 2a 20  riting.      ** 
1a670 72 65 74 75 72 6e 20 61 6e 20 65 72 72 6f 72 20  return an error 
1a680 69 6e 64 69 63 61 74 69 6e 67 20 74 68 61 74 20  indicating that 
1a690 74 68 65 20 6f 74 68 65 72 20 56 4d 73 20 6d 75  the other VMs mu
1a6a0 73 74 20 63 6f 6d 70 6c 65 74 65 20 66 69 72 73  st complete firs
1a6b0 74 2e 20 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20  t. .      */.   
1a6c0 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 45 72     sqlite3VdbeEr
1a6d0 72 6f 72 28 70 2c 20 22 63 61 6e 6e 6f 74 20 63  ror(p, "cannot c
1a6e0 6f 6d 6d 69 74 20 74 72 61 6e 73 61 63 74 69 6f  ommit transactio
1a6f0 6e 20 2d 20 22 0a 20 20 20 20 20 20 20 20 20 20  n - ".          
1a700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a710 22 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 73 20  "SQL statements 
1a720 69 6e 20 70 72 6f 67 72 65 73 73 22 29 3b 0a 20  in progress");. 
1a730 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45       rc = SQLITE
1a740 5f 42 55 53 59 3b 0a 20 20 20 20 20 20 67 6f 74  _BUSY;.      got
1a750 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
1a760 72 72 6f 72 3b 0a 20 20 20 20 7d 65 6c 73 65 20  rror;.    }else 
1a770 69 66 28 20 28 72 63 20 3d 20 73 71 6c 69 74 65  if( (rc = sqlite
1a780 33 56 64 62 65 43 68 65 63 6b 46 6b 28 70 2c 20  3VdbeCheckFk(p, 
1a790 31 29 29 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29  1))!=SQLITE_OK )
1a7a0 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20 76 64 62  {.      goto vdb
1a7b0 65 5f 72 65 74 75 72 6e 3b 0a 20 20 20 20 7d 65  e_return;.    }e
1a7c0 6c 73 65 7b 0a 20 20 20 20 20 20 64 62 2d 3e 61  lse{.      db->a
1a7d0 75 74 6f 43 6f 6d 6d 69 74 20 3d 20 28 75 38 29  utoCommit = (u8)
1a7e0 64 65 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69  desiredAutoCommi
1a7f0 74 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28  t;.    }.    if(
1a800 20 73 71 6c 69 74 65 33 56 64 62 65 48 61 6c 74   sqlite3VdbeHalt
1a810 28 70 29 3d 3d 53 51 4c 49 54 45 5f 42 55 53 59  (p)==SQLITE_BUSY
1a820 20 29 7b 0a 20 20 20 20 20 20 70 2d 3e 70 63 20   ){.      p->pc 
1a830 3d 20 28 69 6e 74 29 28 70 4f 70 20 2d 20 61 4f  = (int)(pOp - aO
1a840 70 29 3b 0a 20 20 20 20 20 20 64 62 2d 3e 61 75  p);.      db->au
1a850 74 6f 43 6f 6d 6d 69 74 20 3d 20 28 75 38 29 28  toCommit = (u8)(
1a860 31 2d 64 65 73 69 72 65 64 41 75 74 6f 43 6f 6d  1-desiredAutoCom
1a870 6d 69 74 29 3b 0a 20 20 20 20 20 20 70 2d 3e 72  mit);.      p->r
1a880 63 20 3d 20 72 63 20 3d 20 53 51 4c 49 54 45 5f  c = rc = SQLITE_
1a890 42 55 53 59 3b 0a 20 20 20 20 20 20 67 6f 74 6f  BUSY;.      goto
1a8a0 20 76 64 62 65 5f 72 65 74 75 72 6e 3b 0a 20 20   vdbe_return;.  
1a8b0 20 20 7d 0a 20 20 20 20 61 73 73 65 72 74 28 20    }.    assert( 
1a8c0 64 62 2d 3e 6e 53 74 61 74 65 6d 65 6e 74 3d 3d  db->nStatement==
1a8d0 30 20 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33  0 );.    sqlite3
1a8e0 43 6c 6f 73 65 53 61 76 65 70 6f 69 6e 74 73 28  CloseSavepoints(
1a8f0 64 62 29 3b 0a 20 20 20 20 69 66 28 20 70 2d 3e  db);.    if( p->
1a900 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b  rc==SQLITE_OK ){
1a910 0a 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49  .      rc = SQLI
1a920 54 45 5f 44 4f 4e 45 3b 0a 20 20 20 20 7d 65 6c  TE_DONE;.    }el
1a930 73 65 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 53  se{.      rc = S
1a940 51 4c 49 54 45 5f 45 52 52 4f 52 3b 0a 20 20 20  QLITE_ERROR;.   
1a950 20 7d 0a 20 20 20 20 67 6f 74 6f 20 76 64 62 65   }.    goto vdbe
1a960 5f 72 65 74 75 72 6e 3b 0a 20 20 7d 65 6c 73 65  _return;.  }else
1a970 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  {.    sqlite3Vdb
1a980 65 45 72 72 6f 72 28 70 2c 0a 20 20 20 20 20 20  eError(p,.      
1a990 20 20 28 21 64 65 73 69 72 65 64 41 75 74 6f 43    (!desiredAutoC
1a9a0 6f 6d 6d 69 74 29 3f 22 63 61 6e 6e 6f 74 20 73  ommit)?"cannot s
1a9b0 74 61 72 74 20 61 20 74 72 61 6e 73 61 63 74 69  tart a transacti
1a9c0 6f 6e 20 77 69 74 68 69 6e 20 61 20 74 72 61 6e  on within a tran
1a9d0 73 61 63 74 69 6f 6e 22 3a 28 0a 20 20 20 20 20  saction":(.     
1a9e0 20 20 20 28 69 52 6f 6c 6c 62 61 63 6b 29 3f 22     (iRollback)?"
1a9f0 63 61 6e 6e 6f 74 20 72 6f 6c 6c 62 61 63 6b 20  cannot rollback 
1aa00 2d 20 6e 6f 20 74 72 61 6e 73 61 63 74 69 6f 6e  - no transaction
1aa10 20 69 73 20 61 63 74 69 76 65 22 3a 0a 20 20 20   is active":.   
1aa20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1aa30 22 63 61 6e 6e 6f 74 20 63 6f 6d 6d 69 74 20 2d  "cannot commit -
1aa40 20 6e 6f 20 74 72 61 6e 73 61 63 74 69 6f 6e 20   no transaction 
1aa50 69 73 20 61 63 74 69 76 65 22 29 29 3b 0a 20 20  is active"));.  
1aa60 20 20 20 20 20 20 20 0a 20 20 20 20 72 63 20 3d         .    rc =
1aa70 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 3b 0a 20   SQLITE_ERROR;. 
1aa80 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75     goto abort_du
1aa90 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 7d 0a  e_to_error;.  }.
1aaa0 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
1aab0 70 63 6f 64 65 3a 20 54 72 61 6e 73 61 63 74 69  pcode: Transacti
1aac0 6f 6e 20 50 31 20 50 32 20 50 33 20 50 34 20 50  on P1 P2 P3 P4 P
1aad0 35 0a 2a 2a 0a 2a 2a 20 42 65 67 69 6e 20 61 20  5.**.** Begin a 
1aae0 74 72 61 6e 73 61 63 74 69 6f 6e 20 6f 6e 20 64  transaction on d
1aaf0 61 74 61 62 61 73 65 20 50 31 20 69 66 20 61 20  atabase P1 if a 
1ab00 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 6e  transaction is n
1ab10 6f 74 20 61 6c 72 65 61 64 79 0a 2a 2a 20 61 63  ot already.** ac
1ab20 74 69 76 65 2e 0a 2a 2a 20 49 66 20 50 32 20 69  tive..** If P2 i
1ab30 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65 6e  s non-zero, then
1ab40 20 61 20 77 72 69 74 65 2d 74 72 61 6e 73 61 63   a write-transac
1ab50 74 69 6f 6e 20 69 73 20 73 74 61 72 74 65 64 2c  tion is started,
1ab60 20 6f 72 20 69 66 20 61 20 0a 2a 2a 20 72 65 61   or if a .** rea
1ab70 64 2d 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73  d-transaction is
1ab80 20 61 6c 72 65 61 64 79 20 61 63 74 69 76 65 2c   already active,
1ab90 20 69 74 20 69 73 20 75 70 67 72 61 64 65 64 20   it is upgraded 
1aba0 74 6f 20 61 20 77 72 69 74 65 2d 74 72 61 6e 73  to a write-trans
1abb0 61 63 74 69 6f 6e 2e 0a 2a 2a 20 49 66 20 50 32  action..** If P2
1abc0 20 69 73 20 7a 65 72 6f 2c 20 74 68 65 6e 20 61   is zero, then a
1abd0 20 72 65 61 64 2d 74 72 61 6e 73 61 63 74 69 6f   read-transactio
1abe0 6e 20 69 73 20 73 74 61 72 74 65 64 2e 0a 2a 2a  n is started..**
1abf0 0a 2a 2a 20 50 31 20 69 73 20 74 68 65 20 69 6e  .** P1 is the in
1ac00 64 65 78 20 6f 66 20 74 68 65 20 64 61 74 61 62  dex of the datab
1ac10 61 73 65 20 66 69 6c 65 20 6f 6e 20 77 68 69 63  ase file on whic
1ac20 68 20 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f  h the transactio
1ac30 6e 20 69 73 0a 2a 2a 20 73 74 61 72 74 65 64 2e  n is.** started.
1ac40 20 20 49 6e 64 65 78 20 30 20 69 73 20 74 68 65    Index 0 is the
1ac50 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 66   main database f
1ac60 69 6c 65 20 61 6e 64 20 69 6e 64 65 78 20 31 20  ile and index 1 
1ac70 69 73 20 74 68 65 0a 2a 2a 20 66 69 6c 65 20 75  is the.** file u
1ac80 73 65 64 20 66 6f 72 20 74 65 6d 70 6f 72 61 72  sed for temporar
1ac90 79 20 74 61 62 6c 65 73 2e 20 20 49 6e 64 69 63  y tables.  Indic
1aca0 65 73 20 6f 66 20 32 20 6f 72 20 6d 6f 72 65 20  es of 2 or more 
1acb0 61 72 65 20 75 73 65 64 20 66 6f 72 0a 2a 2a 20  are used for.** 
1acc0 61 74 74 61 63 68 65 64 20 64 61 74 61 62 61 73  attached databas
1acd0 65 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 61 20 77  es..**.** If a w
1ace0 72 69 74 65 2d 74 72 61 6e 73 61 63 74 69 6f 6e  rite-transaction
1acf0 20 69 73 20 73 74 61 72 74 65 64 20 61 6e 64 20   is started and 
1ad00 74 68 65 20 56 64 62 65 2e 75 73 65 73 53 74 6d  the Vdbe.usesStm
1ad10 74 4a 6f 75 72 6e 61 6c 20 66 6c 61 67 20 69 73  tJournal flag is
1ad20 0a 2a 2a 20 74 72 75 65 20 28 74 68 69 73 20 66  .** true (this f
1ad30 6c 61 67 20 69 73 20 73 65 74 20 69 66 20 74 68  lag is set if th
1ad40 65 20 56 64 62 65 20 6d 61 79 20 6d 6f 64 69 66  e Vdbe may modif
1ad50 79 20 6d 6f 72 65 20 74 68 61 6e 20 6f 6e 65 20  y more than one 
1ad60 72 6f 77 20 61 6e 64 20 6d 61 79 0a 2a 2a 20 74  row and may.** t
1ad70 68 72 6f 77 20 61 6e 20 41 42 4f 52 54 20 65 78  hrow an ABORT ex
1ad80 63 65 70 74 69 6f 6e 29 2c 20 61 20 73 74 61 74  ception), a stat
1ad90 65 6d 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f  ement transactio
1ada0 6e 20 6d 61 79 20 61 6c 73 6f 20 62 65 20 6f 70  n may also be op
1adb0 65 6e 65 64 2e 0a 2a 2a 20 4d 6f 72 65 20 73 70  ened..** More sp
1adc0 65 63 69 66 69 63 61 6c 6c 79 2c 20 61 20 73 74  ecifically, a st
1add0 61 74 65 6d 65 6e 74 20 74 72 61 6e 73 61 63 74  atement transact
1ade0 69 6f 6e 20 69 73 20 6f 70 65 6e 65 64 20 69 66  ion is opened if
1adf0 66 20 74 68 65 20 64 61 74 61 62 61 73 65 0a 2a  f the database.*
1ae00 2a 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 69 73 20  * connection is 
1ae10 63 75 72 72 65 6e 74 6c 79 20 6e 6f 74 20 69 6e  currently not in
1ae20 20 61 75 74 6f 63 6f 6d 6d 69 74 20 6d 6f 64 65   autocommit mode
1ae30 2c 20 6f 72 20 69 66 20 74 68 65 72 65 20 61 72  , or if there ar
1ae40 65 20 6f 74 68 65 72 0a 2a 2a 20 61 63 74 69 76  e other.** activ
1ae50 65 20 73 74 61 74 65 6d 65 6e 74 73 2e 20 41 20  e statements. A 
1ae60 73 74 61 74 65 6d 65 6e 74 20 74 72 61 6e 73 61  statement transa
1ae70 63 74 69 6f 6e 20 61 6c 6c 6f 77 73 20 74 68 65  ction allows the
1ae80 20 63 68 61 6e 67 65 73 20 6d 61 64 65 20 62 79   changes made by
1ae90 20 74 68 69 73 0a 2a 2a 20 56 44 42 45 20 74 6f   this.** VDBE to
1aea0 20 62 65 20 72 6f 6c 6c 65 64 20 62 61 63 6b 20   be rolled back 
1aeb0 61 66 74 65 72 20 61 6e 20 65 72 72 6f 72 20 77  after an error w
1aec0 69 74 68 6f 75 74 20 68 61 76 69 6e 67 20 74 6f  ithout having to
1aed0 20 72 6f 6c 6c 20 62 61 63 6b 20 74 68 65 0a 2a   roll back the.*
1aee0 2a 20 65 6e 74 69 72 65 20 74 72 61 6e 73 61 63  * entire transac
1aef0 74 69 6f 6e 2e 20 49 66 20 6e 6f 20 65 72 72 6f  tion. If no erro
1af00 72 20 69 73 20 65 6e 63 6f 75 6e 74 65 72 65 64  r is encountered
1af10 2c 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74 20  , the statement 
1af20 74 72 61 6e 73 61 63 74 69 6f 6e 0a 2a 2a 20 77  transaction.** w
1af30 69 6c 6c 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c  ill automaticall
1af40 79 20 63 6f 6d 6d 69 74 20 77 68 65 6e 20 74 68  y commit when th
1af50 65 20 56 44 42 45 20 68 61 6c 74 73 2e 0a 2a 2a  e VDBE halts..**
1af60 0a 2a 2a 20 49 66 20 50 35 21 3d 30 20 74 68 65  .** If P5!=0 the
1af70 6e 20 74 68 69 73 20 6f 70 63 6f 64 65 20 61 6c  n this opcode al
1af80 73 6f 20 63 68 65 63 6b 73 20 74 68 65 20 73 63  so checks the sc
1af90 68 65 6d 61 20 63 6f 6f 6b 69 65 20 61 67 61 69  hema cookie agai
1afa0 6e 73 74 20 50 33 0a 2a 2a 20 61 6e 64 20 74 68  nst P3.** and th
1afb0 65 20 73 63 68 65 6d 61 20 67 65 6e 65 72 61 74  e schema generat
1afc0 69 6f 6e 20 63 6f 75 6e 74 65 72 20 61 67 61 69  ion counter agai
1afd0 6e 73 74 20 50 34 2e 0a 2a 2a 20 54 68 65 20 63  nst P4..** The c
1afe0 6f 6f 6b 69 65 20 63 68 61 6e 67 65 73 20 69 74  ookie changes it
1aff0 73 20 76 61 6c 75 65 20 77 68 65 6e 65 76 65 72  s value whenever
1b000 20 74 68 65 20 64 61 74 61 62 61 73 65 20 73 63   the database sc
1b010 68 65 6d 61 20 63 68 61 6e 67 65 73 2e 0a 2a 2a  hema changes..**
1b020 20 54 68 69 73 20 6f 70 65 72 61 74 69 6f 6e 20   This operation 
1b030 69 73 20 75 73 65 64 20 74 6f 20 64 65 74 65 63  is used to detec
1b040 74 20 77 68 65 6e 20 74 68 61 74 20 74 68 65 20  t when that the 
1b050 63 6f 6f 6b 69 65 20 68 61 73 20 63 68 61 6e 67  cookie has chang
1b060 65 64 0a 2a 2a 20 61 6e 64 20 74 68 61 74 20 74  ed.** and that t
1b070 68 65 20 63 75 72 72 65 6e 74 20 70 72 6f 63 65  he current proce
1b080 73 73 20 6e 65 65 64 73 20 74 6f 20 72 65 72 65  ss needs to rere
1b090 61 64 20 74 68 65 20 73 63 68 65 6d 61 2e 20 20  ad the schema.  
1b0a0 49 66 20 74 68 65 20 73 63 68 65 6d 61 0a 2a 2a  If the schema.**
1b0b0 20 63 6f 6f 6b 69 65 20 69 6e 20 50 33 20 64 69   cookie in P3 di
1b0c0 66 66 65 72 73 20 66 72 6f 6d 20 74 68 65 20 73  ffers from the s
1b0d0 63 68 65 6d 61 20 63 6f 6f 6b 69 65 20 69 6e 20  chema cookie in 
1b0e0 74 68 65 20 64 61 74 61 62 61 73 65 20 68 65 61  the database hea
1b0f0 64 65 72 20 6f 72 0a 2a 2a 20 69 66 20 74 68 65  der or.** if the
1b100 20 73 63 68 65 6d 61 20 67 65 6e 65 72 61 74 69   schema generati
1b110 6f 6e 20 63 6f 75 6e 74 65 72 20 69 6e 20 50 34  on counter in P4
1b120 20 64 69 66 66 65 72 73 20 66 72 6f 6d 20 74 68   differs from th
1b130 65 20 63 75 72 72 65 6e 74 0a 2a 2a 20 67 65 6e  e current.** gen
1b140 65 72 61 74 69 6f 6e 20 63 6f 75 6e 74 65 72 2c  eration counter,
1b150 20 74 68 65 6e 20 61 6e 20 53 51 4c 49 54 45 5f   then an SQLITE_
1b160 53 43 48 45 4d 41 20 65 72 72 6f 72 20 69 73 20  SCHEMA error is 
1b170 72 61 69 73 65 64 20 61 6e 64 20 65 78 65 63 75  raised and execu
1b180 74 69 6f 6e 0a 2a 2a 20 68 61 6c 74 73 2e 20 20  tion.** halts.  
1b190 54 68 65 20 73 71 6c 69 74 65 33 5f 73 74 65 70  The sqlite3_step
1b1a0 28 29 20 77 72 61 70 70 65 72 20 66 75 6e 63 74  () wrapper funct
1b1b0 69 6f 6e 20 6d 69 67 68 74 20 74 68 65 6e 20 72  ion might then r
1b1c0 65 70 72 65 70 61 72 65 20 74 68 65 0a 2a 2a 20  eprepare the.** 
1b1d0 73 74 61 74 65 6d 65 6e 74 20 61 6e 64 20 72 65  statement and re
1b1e0 72 75 6e 20 69 74 20 66 72 6f 6d 20 74 68 65 20  run it from the 
1b1f0 62 65 67 69 6e 6e 69 6e 67 2e 0a 2a 2f 0a 63 61  beginning..*/.ca
1b200 73 65 20 4f 50 5f 54 72 61 6e 73 61 63 74 69 6f  se OP_Transactio
1b210 6e 3a 20 7b 0a 20 20 42 74 72 65 65 20 2a 70 42  n: {.  Btree *pB
1b220 74 3b 0a 20 20 69 6e 74 20 69 4d 65 74 61 20 3d  t;.  int iMeta =
1b230 20 30 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70   0;..  assert( p
1b240 2d 3e 62 49 73 52 65 61 64 65 72 20 29 3b 0a 20  ->bIsReader );. 
1b250 20 61 73 73 65 72 74 28 20 70 2d 3e 72 65 61 64   assert( p->read
1b260 4f 6e 6c 79 3d 3d 30 20 7c 7c 20 70 4f 70 2d 3e  Only==0 || pOp->
1b270 70 32 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  p2==0 );.  asser
1b280 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26  t( pOp->p1>=0 &&
1b290 20 70 4f 70 2d 3e 70 31 3c 64 62 2d 3e 6e 44 62   pOp->p1<db->nDb
1b2a0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 44 62   );.  assert( Db
1b2b0 4d 61 73 6b 54 65 73 74 28 70 2d 3e 62 74 72 65  MaskTest(p->btre
1b2c0 65 4d 61 73 6b 2c 20 70 4f 70 2d 3e 70 31 29 20  eMask, pOp->p1) 
1b2d0 29 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 32  );.  if( pOp->p2
1b2e0 20 26 26 20 28 64 62 2d 3e 66 6c 61 67 73 20 26   && (db->flags &
1b2f0 20 53 51 4c 49 54 45 5f 51 75 65 72 79 4f 6e 6c   SQLITE_QueryOnl
1b300 79 29 21 3d 30 20 29 7b 0a 20 20 20 20 72 63 20  y)!=0 ){.    rc 
1b310 3d 20 53 51 4c 49 54 45 5f 52 45 41 44 4f 4e 4c  = SQLITE_READONL
1b320 59 3b 0a 20 20 20 20 67 6f 74 6f 20 61 62 6f 72  Y;.    goto abor
1b330 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
1b340 20 20 7d 0a 20 20 70 42 74 20 3d 20 64 62 2d 3e    }.  pBt = db->
1b350 61 44 62 5b 70 4f 70 2d 3e 70 31 5d 2e 70 42 74  aDb[pOp->p1].pBt
1b360 3b 0a 0a 20 20 69 66 28 20 70 42 74 20 29 7b 0a  ;..  if( pBt ){.
1b370 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
1b380 42 74 72 65 65 42 65 67 69 6e 54 72 61 6e 73 28  BtreeBeginTrans(
1b390 70 42 74 2c 20 70 4f 70 2d 3e 70 32 2c 20 26 69  pBt, pOp->p2, &i
1b3a0 4d 65 74 61 29 3b 0a 20 20 20 20 74 65 73 74 63  Meta);.    testc
1b3b0 61 73 65 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f  ase( rc==SQLITE_
1b3c0 42 55 53 59 5f 53 4e 41 50 53 48 4f 54 20 29 3b  BUSY_SNAPSHOT );
1b3d0 0a 20 20 20 20 74 65 73 74 63 61 73 65 28 20 72  .    testcase( r
1b3e0 63 3d 3d 53 51 4c 49 54 45 5f 42 55 53 59 5f 52  c==SQLITE_BUSY_R
1b3f0 45 43 4f 56 45 52 59 20 29 3b 0a 20 20 20 20 69  ECOVERY );.    i
1b400 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc!=SQLITE_OK
1b410 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20 28 72   ){.      if( (r
1b420 63 26 30 78 66 66 29 3d 3d 53 51 4c 49 54 45 5f  c&0xff)==SQLITE_
1b430 42 55 53 59 20 29 7b 0a 20 20 20 20 20 20 20 20  BUSY ){.        
1b440 70 2d 3e 70 63 20 3d 20 28 69 6e 74 29 28 70 4f  p->pc = (int)(pO
1b450 70 20 2d 20 61 4f 70 29 3b 0a 20 20 20 20 20 20  p - aOp);.      
1b460 20 20 70 2d 3e 72 63 20 3d 20 72 63 3b 0a 20 20    p->rc = rc;.  
1b470 20 20 20 20 20 20 67 6f 74 6f 20 76 64 62 65 5f        goto vdbe_
1b480 72 65 74 75 72 6e 3b 0a 20 20 20 20 20 20 7d 0a  return;.      }.
1b490 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74        goto abort
1b4a0 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20  _due_to_error;. 
1b4b0 20 20 20 7d 0a 0a 20 20 20 20 69 66 28 20 70 4f     }..    if( pO
1b4c0 70 2d 3e 70 32 20 26 26 20 70 2d 3e 75 73 65 73  p->p2 && p->uses
1b4d0 53 74 6d 74 4a 6f 75 72 6e 61 6c 20 0a 20 20 20  StmtJournal .   
1b4e0 20 20 26 26 20 28 64 62 2d 3e 61 75 74 6f 43 6f    && (db->autoCo
1b4f0 6d 6d 69 74 3d 3d 30 20 7c 7c 20 64 62 2d 3e 6e  mmit==0 || db->n
1b500 56 64 62 65 52 65 61 64 3e 31 29 20 0a 20 20 20  VdbeRead>1) .   
1b510 20 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74   ){.      assert
1b520 28 20 73 71 6c 69 74 65 33 42 74 72 65 65 49 73  ( sqlite3BtreeIs
1b530 49 6e 54 72 61 6e 73 28 70 42 74 29 20 29 3b 0a  InTrans(pBt) );.
1b540 20 20 20 20 20 20 69 66 28 20 70 2d 3e 69 53 74        if( p->iSt
1b550 61 74 65 6d 65 6e 74 3d 3d 30 20 29 7b 0a 20 20  atement==0 ){.  
1b560 20 20 20 20 20 20 61 73 73 65 72 74 28 20 64 62        assert( db
1b570 2d 3e 6e 53 74 61 74 65 6d 65 6e 74 3e 3d 30 20  ->nStatement>=0 
1b580 26 26 20 64 62 2d 3e 6e 53 61 76 65 70 6f 69 6e  && db->nSavepoin
1b590 74 3e 3d 30 20 29 3b 0a 20 20 20 20 20 20 20 20  t>=0 );.        
1b5a0 64 62 2d 3e 6e 53 74 61 74 65 6d 65 6e 74 2b 2b  db->nStatement++
1b5b0 3b 20 0a 20 20 20 20 20 20 20 20 70 2d 3e 69 53  ; .        p->iS
1b5c0 74 61 74 65 6d 65 6e 74 20 3d 20 64 62 2d 3e 6e  tatement = db->n
1b5d0 53 61 76 65 70 6f 69 6e 74 20 2b 20 64 62 2d 3e  Savepoint + db->
1b5e0 6e 53 74 61 74 65 6d 65 6e 74 3b 0a 20 20 20 20  nStatement;.    
1b5f0 20 20 7d 0a 0a 20 20 20 20 20 20 72 63 20 3d 20    }..      rc = 
1b600 73 71 6c 69 74 65 33 56 74 61 62 53 61 76 65 70  sqlite3VtabSavep
1b610 6f 69 6e 74 28 64 62 2c 20 53 41 56 45 50 4f 49  oint(db, SAVEPOI
1b620 4e 54 5f 42 45 47 49 4e 2c 20 70 2d 3e 69 53 74  NT_BEGIN, p->iSt
1b630 61 74 65 6d 65 6e 74 2d 31 29 3b 0a 20 20 20 20  atement-1);.    
1b640 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45    if( rc==SQLITE
1b650 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 72  _OK ){.        r
1b660 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
1b670 42 65 67 69 6e 53 74 6d 74 28 70 42 74 2c 20 70  BeginStmt(pBt, p
1b680 2d 3e 69 53 74 61 74 65 6d 65 6e 74 29 3b 0a 20  ->iStatement);. 
1b690 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 2f 2a       }..      /*
1b6a0 20 53 74 6f 72 65 20 74 68 65 20 63 75 72 72 65   Store the curre
1b6b0 6e 74 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20  nt value of the 
1b6c0 64 61 74 61 62 61 73 65 20 68 61 6e 64 6c 65 73  database handles
1b6d0 20 64 65 66 65 72 72 65 64 20 63 6f 6e 73 74 72   deferred constr
1b6e0 61 69 6e 74 0a 20 20 20 20 20 20 2a 2a 20 63 6f  aint.      ** co
1b6f0 75 6e 74 65 72 2e 20 49 66 20 74 68 65 20 73 74  unter. If the st
1b700 61 74 65 6d 65 6e 74 20 74 72 61 6e 73 61 63 74  atement transact
1b710 69 6f 6e 20 6e 65 65 64 73 20 74 6f 20 62 65 20  ion needs to be 
1b720 72 6f 6c 6c 65 64 20 62 61 63 6b 2c 0a 20 20 20  rolled back,.   
1b730 20 20 20 2a 2a 20 74 68 65 20 76 61 6c 75 65 20     ** the value 
1b740 6f 66 20 74 68 69 73 20 63 6f 75 6e 74 65 72 20  of this counter 
1b750 6e 65 65 64 73 20 74 6f 20 62 65 20 72 65 73 74  needs to be rest
1b760 6f 72 65 64 20 74 6f 6f 2e 20 20 2a 2f 0a 20 20  ored too.  */.  
1b770 20 20 20 20 70 2d 3e 6e 53 74 6d 74 44 65 66 43      p->nStmtDefC
1b780 6f 6e 73 20 3d 20 64 62 2d 3e 6e 44 65 66 65 72  ons = db->nDefer
1b790 72 65 64 43 6f 6e 73 3b 0a 20 20 20 20 20 20 70  redCons;.      p
1b7a0 2d 3e 6e 53 74 6d 74 44 65 66 49 6d 6d 43 6f 6e  ->nStmtDefImmCon
1b7b0 73 20 3d 20 64 62 2d 3e 6e 44 65 66 65 72 72 65  s = db->nDeferre
1b7c0 64 49 6d 6d 43 6f 6e 73 3b 0a 20 20 20 20 7d 0a  dImmCons;.    }.
1b7d0 20 20 7d 0a 20 20 61 73 73 65 72 74 28 20 70 4f    }.  assert( pO
1b7e0 70 2d 3e 70 35 3d 3d 30 20 7c 7c 20 70 4f 70 2d  p->p5==0 || pOp-
1b7f0 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54 33  >p4type==P4_INT3
1b800 32 20 29 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e  2 );.  if( pOp->
1b810 70 35 0a 20 20 20 26 26 20 28 69 4d 65 74 61 21  p5.   && (iMeta!
1b820 3d 70 4f 70 2d 3e 70 33 0a 20 20 20 20 20 20 7c  =pOp->p3.      |
1b830 7c 20 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70  | db->aDb[pOp->p
1b840 31 5d 2e 70 53 63 68 65 6d 61 2d 3e 69 47 65 6e  1].pSchema->iGen
1b850 65 72 61 74 69 6f 6e 21 3d 70 4f 70 2d 3e 70 34  eration!=pOp->p4
1b860 2e 69 29 0a 20 20 29 7b 0a 20 20 20 20 2f 2a 0a  .i).  ){.    /*.
1b870 20 20 20 20 2a 2a 20 49 4d 50 4c 45 4d 45 4e 54      ** IMPLEMENT
1b880 41 54 49 4f 4e 2d 4f 46 3a 20 52 2d 30 33 31 38  ATION-OF: R-0318
1b890 39 2d 35 31 31 33 35 20 41 73 20 65 61 63 68 20  9-51135 As each 
1b8a0 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 20 72 75  SQL statement ru
1b8b0 6e 73 2c 20 74 68 65 20 73 63 68 65 6d 61 0a 20  ns, the schema. 
1b8c0 20 20 20 2a 2a 20 76 65 72 73 69 6f 6e 20 69 73     ** version is
1b8d0 20 63 68 65 63 6b 65 64 20 74 6f 20 65 6e 73 75   checked to ensu
1b8e0 72 65 20 74 68 61 74 20 74 68 65 20 73 63 68 65  re that the sche
1b8f0 6d 61 20 68 61 73 20 6e 6f 74 20 63 68 61 6e 67  ma has not chang
1b900 65 64 20 73 69 6e 63 65 20 74 68 65 0a 20 20 20  ed since the.   
1b910 20 2a 2a 20 53 51 4c 20 73 74 61 74 65 6d 65 6e   ** SQL statemen
1b920 74 20 77 61 73 20 70 72 65 70 61 72 65 64 2e 0a  t was prepared..
1b930 20 20 20 20 2a 2f 0a 20 20 20 20 73 71 6c 69 74      */.    sqlit
1b940 65 33 44 62 46 72 65 65 28 64 62 2c 20 70 2d 3e  e3DbFree(db, p->
1b950 7a 45 72 72 4d 73 67 29 3b 0a 20 20 20 20 70 2d  zErrMsg);.    p-
1b960 3e 7a 45 72 72 4d 73 67 20 3d 20 73 71 6c 69 74  >zErrMsg = sqlit
1b970 65 33 44 62 53 74 72 44 75 70 28 64 62 2c 20 22  e3DbStrDup(db, "
1b980 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 20  database schema 
1b990 68 61 73 20 63 68 61 6e 67 65 64 22 29 3b 0a 20  has changed");. 
1b9a0 20 20 20 2f 2a 20 49 66 20 74 68 65 20 73 63 68     /* If the sch
1b9b0 65 6d 61 2d 63 6f 6f 6b 69 65 20 66 72 6f 6d 20  ema-cookie from 
1b9c0 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c  the database fil
1b9d0 65 20 6d 61 74 63 68 65 73 20 74 68 65 20 63 6f  e matches the co
1b9e0 6f 6b 69 65 20 0a 20 20 20 20 2a 2a 20 73 74 6f  okie .    ** sto
1b9f0 72 65 64 20 77 69 74 68 20 74 68 65 20 69 6e 2d  red with the in-
1ba00 6d 65 6d 6f 72 79 20 72 65 70 72 65 73 65 6e 74  memory represent
1ba10 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 73 63 68  ation of the sch
1ba20 65 6d 61 2c 20 64 6f 0a 20 20 20 20 2a 2a 20 6e  ema, do.    ** n
1ba30 6f 74 20 72 65 6c 6f 61 64 20 74 68 65 20 73 63  ot reload the sc
1ba40 68 65 6d 61 20 66 72 6f 6d 20 74 68 65 20 64 61  hema from the da
1ba50 74 61 62 61 73 65 20 66 69 6c 65 2e 0a 20 20 20  tabase file..   
1ba60 20 2a 2a 0a 20 20 20 20 2a 2a 20 49 66 20 76 69   **.    ** If vi
1ba70 72 74 75 61 6c 2d 74 61 62 6c 65 73 20 61 72 65  rtual-tables are
1ba80 20 69 6e 20 75 73 65 2c 20 74 68 69 73 20 69 73   in use, this is
1ba90 20 6e 6f 74 20 6a 75 73 74 20 61 6e 20 6f 70 74   not just an opt
1baa0 69 6d 69 7a 61 74 69 6f 6e 2e 0a 20 20 20 20 2a  imization..    *
1bab0 2a 20 4f 66 74 65 6e 2c 20 76 2d 74 61 62 6c 65  * Often, v-table
1bac0 73 20 73 74 6f 72 65 20 74 68 65 69 72 20 64 61  s store their da
1bad0 74 61 20 69 6e 20 6f 74 68 65 72 20 53 51 4c 69  ta in other SQLi
1bae0 74 65 20 74 61 62 6c 65 73 2c 20 77 68 69 63 68  te tables, which
1baf0 0a 20 20 20 20 2a 2a 20 61 72 65 20 71 75 65 72  .    ** are quer
1bb00 69 65 64 20 66 72 6f 6d 20 77 69 74 68 69 6e 20  ied from within 
1bb10 78 4e 65 78 74 28 29 20 61 6e 64 20 6f 74 68 65  xNext() and othe
1bb20 72 20 76 2d 74 61 62 6c 65 20 6d 65 74 68 6f 64  r v-table method
1bb30 73 20 75 73 69 6e 67 0a 20 20 20 20 2a 2a 20 70  s using.    ** p
1bb40 72 65 70 61 72 65 64 20 71 75 65 72 69 65 73 2e  repared queries.
1bb50 20 49 66 20 73 75 63 68 20 61 20 71 75 65 72 79   If such a query
1bb60 20 69 73 20 6f 75 74 2d 6f 66 2d 64 61 74 65 2c   is out-of-date,
1bb70 20 77 65 20 64 6f 20 6e 6f 74 20 77 61 6e 74 20   we do not want 
1bb80 74 6f 0a 20 20 20 20 2a 2a 20 64 69 73 63 61 72  to.    ** discar
1bb90 64 20 74 68 65 20 64 61 74 61 62 61 73 65 20 73  d the database s
1bba0 63 68 65 6d 61 2c 20 61 73 20 74 68 65 20 75 73  chema, as the us
1bbb0 65 72 20 63 6f 64 65 20 69 6d 70 6c 65 6d 65 6e  er code implemen
1bbc0 74 69 6e 67 20 74 68 65 0a 20 20 20 20 2a 2a 20  ting the.    ** 
1bbd0 76 2d 74 61 62 6c 65 20 77 6f 75 6c 64 20 68 61  v-table would ha
1bbe0 76 65 20 74 6f 20 62 65 20 72 65 61 64 79 20 66  ve to be ready f
1bbf0 6f 72 20 74 68 65 20 73 71 6c 69 74 65 33 5f 76  or the sqlite3_v
1bc00 74 61 62 20 73 74 72 75 63 74 75 72 65 20 69 74  tab structure it
1bc10 73 65 6c 66 0a 20 20 20 20 2a 2a 20 74 6f 20 62  self.    ** to b
1bc20 65 20 69 6e 76 61 6c 69 64 61 74 65 64 20 77 68  e invalidated wh
1bc30 65 6e 65 76 65 72 20 73 71 6c 69 74 65 33 5f 73  enever sqlite3_s
1bc40 74 65 70 28 29 20 69 73 20 63 61 6c 6c 65 64 20  tep() is called 
1bc50 66 72 6f 6d 20 77 69 74 68 69 6e 20 0a 20 20 20  from within .   
1bc60 20 2a 2a 20 61 20 76 2d 74 61 62 6c 65 20 6d 65   ** a v-table me
1bc70 74 68 6f 64 2e 0a 20 20 20 20 2a 2f 0a 20 20 20  thod..    */.   
1bc80 20 69 66 28 20 64 62 2d 3e 61 44 62 5b 70 4f 70   if( db->aDb[pOp
1bc90 2d 3e 70 31 5d 2e 70 53 63 68 65 6d 61 2d 3e 73  ->p1].pSchema->s
1bca0 63 68 65 6d 61 5f 63 6f 6f 6b 69 65 21 3d 69 4d  chema_cookie!=iM
1bcb0 65 74 61 20 29 7b 0a 20 20 20 20 20 20 73 71 6c  eta ){.      sql
1bcc0 69 74 65 33 52 65 73 65 74 4f 6e 65 53 63 68 65  ite3ResetOneSche
1bcd0 6d 61 28 64 62 2c 20 70 4f 70 2d 3e 70 31 29 3b  ma(db, pOp->p1);
1bce0 0a 20 20 20 20 7d 0a 20 20 20 20 70 2d 3e 65 78  .    }.    p->ex
1bcf0 70 69 72 65 64 20 3d 20 31 3b 0a 20 20 20 20 72  pired = 1;.    r
1bd00 63 20 3d 20 53 51 4c 49 54 45 5f 53 43 48 45 4d  c = SQLITE_SCHEM
1bd10 41 3b 0a 20 20 7d 0a 20 20 69 66 28 20 72 63 20  A;.  }.  if( rc 
1bd20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65  ) goto abort_due
1bd30 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 62 72 65  _to_error;.  bre
1bd40 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
1bd50 3a 20 52 65 61 64 43 6f 6f 6b 69 65 20 50 31 20  : ReadCookie P1 
1bd60 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20  P2 P3 * *.**.** 
1bd70 52 65 61 64 20 63 6f 6f 6b 69 65 20 6e 75 6d 62  Read cookie numb
1bd80 65 72 20 50 33 20 66 72 6f 6d 20 64 61 74 61 62  er P3 from datab
1bd90 61 73 65 20 50 31 20 61 6e 64 20 77 72 69 74 65  ase P1 and write
1bda0 20 69 74 20 69 6e 74 6f 20 72 65 67 69 73 74 65   it into registe
1bdb0 72 20 50 32 2e 0a 2a 2a 20 50 33 3d 3d 31 20 69  r P2..** P3==1 i
1bdc0 73 20 74 68 65 20 73 63 68 65 6d 61 20 76 65 72  s the schema ver
1bdd0 73 69 6f 6e 2e 20 20 50 33 3d 3d 32 20 69 73 20  sion.  P3==2 is 
1bde0 74 68 65 20 64 61 74 61 62 61 73 65 20 66 6f 72  the database for
1bdf0 6d 61 74 2e 0a 2a 2a 20 50 33 3d 3d 33 20 69 73  mat..** P3==3 is
1be00 20 74 68 65 20 72 65 63 6f 6d 6d 65 6e 64 65 64   the recommended
1be10 20 70 61 67 65 72 20 63 61 63 68 65 20 73 69 7a   pager cache siz
1be20 65 2c 20 61 6e 64 20 73 6f 20 66 6f 72 74 68 2e  e, and so forth.
1be30 20 20 50 31 3d 3d 30 20 69 73 0a 2a 2a 20 74 68    P1==0 is.** th
1be40 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20  e main database 
1be50 66 69 6c 65 20 61 6e 64 20 50 31 3d 3d 31 20 69  file and P1==1 i
1be60 73 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66  s the database f
1be70 69 6c 65 20 75 73 65 64 20 74 6f 20 73 74 6f 72  ile used to stor
1be80 65 0a 2a 2a 20 74 65 6d 70 6f 72 61 72 79 20 74  e.** temporary t
1be90 61 62 6c 65 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  ables..**.** The
1bea0 72 65 20 6d 75 73 74 20 62 65 20 61 20 72 65 61  re must be a rea
1beb0 64 2d 6c 6f 63 6b 20 6f 6e 20 74 68 65 20 64 61  d-lock on the da
1bec0 74 61 62 61 73 65 20 28 65 69 74 68 65 72 20 61  tabase (either a
1bed0 20 74 72 61 6e 73 61 63 74 69 6f 6e 0a 2a 2a 20   transaction.** 
1bee0 6d 75 73 74 20 62 65 20 73 74 61 72 74 65 64 20  must be started 
1bef0 6f 72 20 74 68 65 72 65 20 6d 75 73 74 20 62 65  or there must be
1bf00 20 61 6e 20 6f 70 65 6e 20 63 75 72 73 6f 72 29   an open cursor)
1bf10 20 62 65 66 6f 72 65 0a 2a 2a 20 65 78 65 63 75   before.** execu
1bf20 74 69 6e 67 20 74 68 69 73 20 69 6e 73 74 72 75  ting this instru
1bf30 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f  ction..*/.case O
1bf40 50 5f 52 65 61 64 43 6f 6f 6b 69 65 3a 20 7b 20  P_ReadCookie: { 
1bf50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1bf60 20 6f 75 74 32 20 2a 2f 0a 20 20 69 6e 74 20 69   out2 */.  int i
1bf70 4d 65 74 61 3b 0a 20 20 69 6e 74 20 69 44 62 3b  Meta;.  int iDb;
1bf80 0a 20 20 69 6e 74 20 69 43 6f 6f 6b 69 65 3b 0a  .  int iCookie;.
1bf90 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 62 49  .  assert( p->bI
1bfa0 73 52 65 61 64 65 72 20 29 3b 0a 20 20 69 44 62  sReader );.  iDb
1bfb0 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 69 43   = pOp->p1;.  iC
1bfc0 6f 6f 6b 69 65 20 3d 20 70 4f 70 2d 3e 70 33 3b  ookie = pOp->p3;
1bfd0 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
1bfe0 70 33 3c 53 51 4c 49 54 45 5f 4e 5f 42 54 52 45  p3<SQLITE_N_BTRE
1bff0 45 5f 4d 45 54 41 20 29 3b 0a 20 20 61 73 73 65  E_META );.  asse
1c000 72 74 28 20 69 44 62 3e 3d 30 20 26 26 20 69 44  rt( iDb>=0 && iD
1c010 62 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61  b<db->nDb );.  a
1c020 73 73 65 72 74 28 20 64 62 2d 3e 61 44 62 5b 69  ssert( db->aDb[i
1c030 44 62 5d 2e 70 42 74 21 3d 30 20 29 3b 0a 20 20  Db].pBt!=0 );.  
1c040 61 73 73 65 72 74 28 20 44 62 4d 61 73 6b 54 65  assert( DbMaskTe
1c050 73 74 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b 2c  st(p->btreeMask,
1c060 20 69 44 62 29 20 29 3b 0a 0a 20 20 73 71 6c 69   iDb) );..  sqli
1c070 74 65 33 42 74 72 65 65 47 65 74 4d 65 74 61 28  te3BtreeGetMeta(
1c080 64 62 2d 3e 61 44 62 5b 69 44 62 5d 2e 70 42 74  db->aDb[iDb].pBt
1c090 2c 20 69 43 6f 6f 6b 69 65 2c 20 28 75 33 32 20  , iCookie, (u32 
1c0a0 2a 29 26 69 4d 65 74 61 29 3b 0a 20 20 70 4f 75  *)&iMeta);.  pOu
1c0b0 74 20 3d 20 6f 75 74 32 50 72 65 72 65 6c 65 61  t = out2Prerelea
1c0c0 73 65 28 70 2c 20 70 4f 70 29 3b 0a 20 20 70 4f  se(p, pOp);.  pO
1c0d0 75 74 2d 3e 75 2e 69 20 3d 20 69 4d 65 74 61 3b  ut->u.i = iMeta;
1c0e0 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
1c0f0 4f 70 63 6f 64 65 3a 20 53 65 74 43 6f 6f 6b 69  Opcode: SetCooki
1c100 65 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a  e P1 P2 P3 * *.*
1c110 2a 0a 2a 2a 20 57 72 69 74 65 20 74 68 65 20 69  *.** Write the i
1c120 6e 74 65 67 65 72 20 76 61 6c 75 65 20 50 33 20  nteger value P3 
1c130 69 6e 74 6f 20 63 6f 6f 6b 69 65 20 6e 75 6d 62  into cookie numb
1c140 65 72 20 50 32 20 6f 66 20 64 61 74 61 62 61 73  er P2 of databas
1c150 65 20 50 31 2e 0a 2a 2a 20 50 32 3d 3d 31 20 69  e P1..** P2==1 i
1c160 73 20 74 68 65 20 73 63 68 65 6d 61 20 76 65 72  s the schema ver
1c170 73 69 6f 6e 2e 20 20 50 32 3d 3d 32 20 69 73 20  sion.  P2==2 is 
1c180 74 68 65 20 64 61 74 61 62 61 73 65 20 66 6f 72  the database for
1c190 6d 61 74 2e 0a 2a 2a 20 50 32 3d 3d 33 20 69 73  mat..** P2==3 is
1c1a0 20 74 68 65 20 72 65 63 6f 6d 6d 65 6e 64 65 64   the recommended
1c1b0 20 70 61 67 65 72 20 63 61 63 68 65 20 0a 2a 2a   pager cache .**
1c1c0 20 73 69 7a 65 2c 20 61 6e 64 20 73 6f 20 66 6f   size, and so fo
1c1d0 72 74 68 2e 20 20 50 31 3d 3d 30 20 69 73 20 74  rth.  P1==0 is t
1c1e0 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65  he main database
1c1f0 20 66 69 6c 65 20 61 6e 64 20 50 31 3d 3d 31 20   file and P1==1 
1c200 69 73 20 74 68 65 20 0a 2a 2a 20 64 61 74 61 62  is the .** datab
1c210 61 73 65 20 66 69 6c 65 20 75 73 65 64 20 74 6f  ase file used to
1c220 20 73 74 6f 72 65 20 74 65 6d 70 6f 72 61 72 79   store temporary
1c230 20 74 61 62 6c 65 73 2e 0a 2a 2a 0a 2a 2a 20 41   tables..**.** A
1c240 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 6d 75 73   transaction mus
1c250 74 20 62 65 20 73 74 61 72 74 65 64 20 62 65 66  t be started bef
1c260 6f 72 65 20 65 78 65 63 75 74 69 6e 67 20 74 68  ore executing th
1c270 69 73 20 6f 70 63 6f 64 65 2e 0a 2a 2f 0a 63 61  is opcode..*/.ca
1c280 73 65 20 4f 50 5f 53 65 74 43 6f 6f 6b 69 65 3a  se OP_SetCookie:
1c290 20 7b 0a 20 20 44 62 20 2a 70 44 62 3b 0a 0a 20   {.  Db *pDb;.. 
1c2a0 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e 63 72   sqlite3VdbeIncr
1c2b0 57 72 69 74 65 43 6f 75 6e 74 65 72 28 70 2c 20  WriteCounter(p, 
1c2c0 30 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f  0);.  assert( pO
1c2d0 70 2d 3e 70 32 3c 53 51 4c 49 54 45 5f 4e 5f 42  p->p2<SQLITE_N_B
1c2e0 54 52 45 45 5f 4d 45 54 41 20 29 3b 0a 20 20 61  TREE_META );.  a
1c2f0 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d  ssert( pOp->p1>=
1c300 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 64 62 2d  0 && pOp->p1<db-
1c310 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73 65 72 74  >nDb );.  assert
1c320 28 20 44 62 4d 61 73 6b 54 65 73 74 28 70 2d 3e  ( DbMaskTest(p->
1c330 62 74 72 65 65 4d 61 73 6b 2c 20 70 4f 70 2d 3e  btreeMask, pOp->
1c340 70 31 29 20 29 3b 0a 20 20 61 73 73 65 72 74 28  p1) );.  assert(
1c350 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30 20   p->readOnly==0 
1c360 29 3b 0a 20 20 70 44 62 20 3d 20 26 64 62 2d 3e  );.  pDb = &db->
1c370 61 44 62 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  aDb[pOp->p1];.  
1c380 61 73 73 65 72 74 28 20 70 44 62 2d 3e 70 42 74  assert( pDb->pBt
1c390 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  !=0 );.  assert(
1c3a0 20 73 71 6c 69 74 65 33 53 63 68 65 6d 61 4d 75   sqlite3SchemaMu
1c3b0 74 65 78 48 65 6c 64 28 64 62 2c 20 70 4f 70 2d  texHeld(db, pOp-
1c3c0 3e 70 31 2c 20 30 29 20 29 3b 0a 20 20 2f 2a 20  >p1, 0) );.  /* 
1c3d0 53 65 65 20 6e 6f 74 65 20 61 62 6f 75 74 20 69  See note about i
1c3e0 6e 64 65 78 20 73 68 69 66 74 69 6e 67 20 6f 6e  ndex shifting on
1c3f0 20 4f 50 5f 52 65 61 64 43 6f 6f 6b 69 65 20 2a   OP_ReadCookie *
1c400 2f 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  /.  rc = sqlite3
1c410 42 74 72 65 65 55 70 64 61 74 65 4d 65 74 61 28  BtreeUpdateMeta(
1c420 70 44 62 2d 3e 70 42 74 2c 20 70 4f 70 2d 3e 70  pDb->pBt, pOp->p
1c430 32 2c 20 70 4f 70 2d 3e 70 33 29 3b 0a 20 20 69  2, pOp->p3);.  i
1c440 66 28 20 70 4f 70 2d 3e 70 32 3d 3d 42 54 52 45  f( pOp->p2==BTRE
1c450 45 5f 53 43 48 45 4d 41 5f 56 45 52 53 49 4f 4e  E_SCHEMA_VERSION
1c460 20 29 7b 0a 20 20 20 20 2f 2a 20 57 68 65 6e 20   ){.    /* When 
1c470 74 68 65 20 73 63 68 65 6d 61 20 63 6f 6f 6b 69  the schema cooki
1c480 65 20 63 68 61 6e 67 65 73 2c 20 72 65 63 6f 72  e changes, recor
1c490 64 20 74 68 65 20 6e 65 77 20 63 6f 6f 6b 69 65  d the new cookie
1c4a0 20 69 6e 74 65 72 6e 61 6c 6c 79 20 2a 2f 0a 20   internally */. 
1c4b0 20 20 20 70 44 62 2d 3e 70 53 63 68 65 6d 61 2d     pDb->pSchema-
1c4c0 3e 73 63 68 65 6d 61 5f 63 6f 6f 6b 69 65 20 3d  >schema_cookie =
1c4d0 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 20 20 64 62   pOp->p3;.    db
1c4e0 2d 3e 6d 44 62 46 6c 61 67 73 20 7c 3d 20 44 42  ->mDbFlags |= DB
1c4f0 46 4c 41 47 5f 53 63 68 65 6d 61 43 68 61 6e 67  FLAG_SchemaChang
1c500 65 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 70  e;.  }else if( p
1c510 4f 70 2d 3e 70 32 3d 3d 42 54 52 45 45 5f 46 49  Op->p2==BTREE_FI
1c520 4c 45 5f 46 4f 52 4d 41 54 20 29 7b 0a 20 20 20  LE_FORMAT ){.   
1c530 20 2f 2a 20 52 65 63 6f 72 64 20 63 68 61 6e 67   /* Record chang
1c540 65 73 20 69 6e 20 74 68 65 20 66 69 6c 65 20 66  es in the file f
1c550 6f 72 6d 61 74 20 2a 2f 0a 20 20 20 20 70 44 62  ormat */.    pDb
1c560 2d 3e 70 53 63 68 65 6d 61 2d 3e 66 69 6c 65 5f  ->pSchema->file_
1c570 66 6f 72 6d 61 74 20 3d 20 70 4f 70 2d 3e 70 33  format = pOp->p3
1c580 3b 0a 20 20 7d 0a 20 20 69 66 28 20 70 4f 70 2d  ;.  }.  if( pOp-
1c590 3e 70 31 3d 3d 31 20 29 7b 0a 20 20 20 20 2f 2a  >p1==1 ){.    /*
1c5a0 20 49 6e 76 61 6c 69 64 61 74 65 20 61 6c 6c 20   Invalidate all 
1c5b0 70 72 65 70 61 72 65 64 20 73 74 61 74 65 6d 65  prepared stateme
1c5c0 6e 74 73 20 77 68 65 6e 65 76 65 72 20 74 68 65  nts whenever the
1c5d0 20 54 45 4d 50 20 64 61 74 61 62 61 73 65 0a 20   TEMP database. 
1c5e0 20 20 20 2a 2a 20 73 63 68 65 6d 61 20 69 73 20     ** schema is 
1c5f0 63 68 61 6e 67 65 64 2e 20 20 54 69 63 6b 65 74  changed.  Ticket
1c600 20 23 31 36 34 34 20 2a 2f 0a 20 20 20 20 73 71   #1644 */.    sq
1c610 6c 69 74 65 33 45 78 70 69 72 65 50 72 65 70 61  lite3ExpirePrepa
1c620 72 65 64 53 74 61 74 65 6d 65 6e 74 73 28 64 62  redStatements(db
1c630 2c 20 30 29 3b 0a 20 20 20 20 70 2d 3e 65 78 70  , 0);.    p->exp
1c640 69 72 65 64 20 3d 20 30 3b 0a 20 20 7d 0a 20 20  ired = 0;.  }.  
1c650 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62  if( rc ) goto ab
1c660 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
1c670 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
1c680 20 4f 70 63 6f 64 65 3a 20 4f 70 65 6e 52 65 61   Opcode: OpenRea
1c690 64 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35  d P1 P2 P3 P4 P5
1c6a0 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 6f  .** Synopsis: ro
1c6b0 6f 74 3d 50 32 20 69 44 62 3d 50 33 0a 2a 2a 0a  ot=P2 iDb=P3.**.
1c6c0 2a 2a 20 4f 70 65 6e 20 61 20 72 65 61 64 2d 6f  ** Open a read-o
1c6d0 6e 6c 79 20 63 75 72 73 6f 72 20 66 6f 72 20 74  nly cursor for t
1c6e0 68 65 20 64 61 74 61 62 61 73 65 20 74 61 62 6c  he database tabl
1c6f0 65 20 77 68 6f 73 65 20 72 6f 6f 74 20 70 61 67  e whose root pag
1c700 65 20 69 73 0a 2a 2a 20 50 32 20 69 6e 20 61 20  e is.** P2 in a 
1c710 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e 20 20  database file.  
1c720 54 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c  The database fil
1c730 65 20 69 73 20 64 65 74 65 72 6d 69 6e 65 64 20  e is determined 
1c740 62 79 20 50 33 2e 20 0a 2a 2a 20 50 33 3d 3d 30  by P3. .** P3==0
1c750 20 6d 65 61 6e 73 20 74 68 65 20 6d 61 69 6e 20   means the main 
1c760 64 61 74 61 62 61 73 65 2c 20 50 33 3d 3d 31 20  database, P3==1 
1c770 6d 65 61 6e 73 20 74 68 65 20 64 61 74 61 62 61  means the databa
1c780 73 65 20 75 73 65 64 20 66 6f 72 20 0a 2a 2a 20  se used for .** 
1c790 74 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 73  temporary tables
1c7a0 2c 20 61 6e 64 20 50 33 3e 31 20 6d 65 61 6e 73  , and P3>1 means
1c7b0 20 75 73 65 64 20 74 68 65 20 63 6f 72 72 65 73   used the corres
1c7c0 70 6f 6e 64 69 6e 67 20 61 74 74 61 63 68 65 64  ponding attached
1c7d0 0a 2a 2a 20 64 61 74 61 62 61 73 65 2e 20 20 47  .** database.  G
1c7e0 69 76 65 20 74 68 65 20 6e 65 77 20 63 75 72 73  ive the new curs
1c7f0 6f 72 20 61 6e 20 69 64 65 6e 74 69 66 69 65 72  or an identifier
1c800 20 6f 66 20 50 31 2e 20 20 54 68 65 20 50 31 0a   of P1.  The P1.
1c810 2a 2a 20 76 61 6c 75 65 73 20 6e 65 65 64 20 6e  ** values need n
1c820 6f 74 20 62 65 20 63 6f 6e 74 69 67 75 6f 75 73  ot be contiguous
1c830 20 62 75 74 20 61 6c 6c 20 50 31 20 76 61 6c 75   but all P1 valu
1c840 65 73 20 73 68 6f 75 6c 64 20 62 65 20 73 6d 61  es should be sma
1c850 6c 6c 20 69 6e 74 65 67 65 72 73 2e 0a 2a 2a 20  ll integers..** 
1c860 49 74 20 69 73 20 61 6e 20 65 72 72 6f 72 20 66  It is an error f
1c870 6f 72 20 50 31 20 74 6f 20 62 65 20 6e 65 67 61  or P1 to be nega
1c880 74 69 76 65 2e 0a 2a 2a 0a 2a 2a 20 41 6c 6c 6f  tive..**.** Allo
1c890 77 65 64 20 50 35 20 62 69 74 73 3a 0a 2a 2a 20  wed P5 bits:.** 
1c8a0 3c 75 6c 3e 0a 2a 2a 20 3c 6c 69 3e 20 20 3c 62  <ul>.** <li>  <b
1c8b0 3e 30 78 30 32 20 4f 50 46 4c 41 47 5f 53 45 45  >0x02 OPFLAG_SEE
1c8c0 4b 45 51 3c 2f 62 3e 3a 20 54 68 69 73 20 63 75  KEQ</b>: This cu
1c8d0 72 73 6f 72 20 77 69 6c 6c 20 6f 6e 6c 79 20 62  rsor will only b
1c8e0 65 20 75 73 65 64 20 66 6f 72 0a 2a 2a 20 20 20  e used for.**   
1c8f0 20 20 20 20 65 71 75 61 6c 69 74 79 20 6c 6f 6f      equality loo
1c900 6b 75 70 73 20 28 69 6d 70 6c 65 6d 65 6e 74 65  kups (implemente
1c910 64 20 61 73 20 61 20 70 61 69 72 20 6f 66 20 6f  d as a pair of o
1c920 70 63 6f 64 65 73 20 4f 50 5f 53 65 65 6b 47 45  pcodes OP_SeekGE
1c930 2f 4f 50 5f 49 64 78 47 54 0a 2a 2a 20 20 20 20  /OP_IdxGT.**    
1c940 20 20 20 6f 66 20 4f 50 5f 53 65 65 6b 4c 45 2f     of OP_SeekLE/
1c950 4f 50 5f 49 64 78 47 54 29 0a 2a 2a 20 3c 2f 75  OP_IdxGT).** </u
1c960 6c 3e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 34 20  l>.**.** The P4 
1c970 76 61 6c 75 65 20 6d 61 79 20 62 65 20 65 69 74  value may be eit
1c980 68 65 72 20 61 6e 20 69 6e 74 65 67 65 72 20 28  her an integer (
1c990 50 34 5f 49 4e 54 33 32 29 20 6f 72 20 61 20 70  P4_INT32) or a p
1c9a0 6f 69 6e 74 65 72 20 74 6f 0a 2a 2a 20 61 20 4b  ointer to.** a K
1c9b0 65 79 49 6e 66 6f 20 73 74 72 75 63 74 75 72 65  eyInfo structure
1c9c0 20 28 50 34 5f 4b 45 59 49 4e 46 4f 29 2e 20 49   (P4_KEYINFO). I
1c9d0 66 20 69 74 20 69 73 20 61 20 70 6f 69 6e 74 65  f it is a pointe
1c9e0 72 20 74 6f 20 61 20 4b 65 79 49 6e 66 6f 20 0a  r to a KeyInfo .
1c9f0 2a 2a 20 6f 62 6a 65 63 74 2c 20 74 68 65 6e 20  ** object, then 
1ca00 74 61 62 6c 65 20 62 65 69 6e 67 20 6f 70 65 6e  table being open
1ca10 65 64 20 6d 75 73 74 20 62 65 20 61 6e 20 5b 69  ed must be an [i
1ca20 6e 64 65 78 20 62 2d 74 72 65 65 5d 20 77 68 65  ndex b-tree] whe
1ca30 72 65 20 74 68 65 0a 2a 2a 20 4b 65 79 49 6e 66  re the.** KeyInf
1ca40 6f 20 6f 62 6a 65 63 74 20 64 65 66 69 6e 65 73  o object defines
1ca50 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 61 6e 64   the content and
1ca60 20 63 6f 6c 6c 61 74 69 6e 67 20 0a 2a 2a 20 73   collating .** s
1ca70 65 71 75 65 6e 63 65 20 6f 66 20 74 68 61 74 20  equence of that 
1ca80 69 6e 64 65 78 20 62 2d 74 72 65 65 2e 20 4f 74  index b-tree. Ot
1ca90 68 65 72 77 69 73 65 2c 20 69 66 20 50 34 20 69  herwise, if P4 i
1caa0 73 20 61 6e 20 69 6e 74 65 67 65 72 20 0a 2a 2a  s an integer .**
1cab0 20 76 61 6c 75 65 2c 20 74 68 65 6e 20 74 68 65   value, then the
1cac0 20 74 61 62 6c 65 20 62 65 69 6e 67 20 6f 70 65   table being ope
1cad0 6e 65 64 20 6d 75 73 74 20 62 65 20 61 20 5b 74  ned must be a [t
1cae0 61 62 6c 65 20 62 2d 74 72 65 65 5d 20 77 69 74  able b-tree] wit
1caf0 68 20 61 0a 2a 2a 20 6e 75 6d 62 65 72 20 6f 66  h a.** number of
1cb00 20 63 6f 6c 75 6d 6e 73 20 6e 6f 20 6c 65 73 73   columns no less
1cb10 20 74 68 61 6e 20 74 68 65 20 76 61 6c 75 65 20   than the value 
1cb20 6f 66 20 50 34 2e 0a 2a 2a 0a 2a 2a 20 53 65 65  of P4..**.** See
1cb30 20 61 6c 73 6f 3a 20 4f 70 65 6e 57 72 69 74 65   also: OpenWrite
1cb40 2c 20 52 65 6f 70 65 6e 49 64 78 0a 2a 2f 0a 2f  , ReopenIdx.*/./
1cb50 2a 20 4f 70 63 6f 64 65 3a 20 52 65 6f 70 65 6e  * Opcode: Reopen
1cb60 49 64 78 20 50 31 20 50 32 20 50 33 20 50 34 20  Idx P1 P2 P3 P4 
1cb70 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20  P5.** Synopsis: 
1cb80 72 6f 6f 74 3d 50 32 20 69 44 62 3d 50 33 0a 2a  root=P2 iDb=P3.*
1cb90 2a 0a 2a 2a 20 54 68 65 20 52 65 6f 70 65 6e 49  *.** The ReopenI
1cba0 64 78 20 6f 70 63 6f 64 65 20 77 6f 72 6b 73 20  dx opcode works 
1cbb0 6c 69 6b 65 20 4f 50 5f 4f 70 65 6e 52 65 61 64  like OP_OpenRead
1cbc0 20 65 78 63 65 70 74 20 74 68 61 74 20 69 74 20   except that it 
1cbd0 66 69 72 73 74 0a 2a 2a 20 63 68 65 63 6b 73 20  first.** checks 
1cbe0 74 6f 20 73 65 65 20 69 66 20 74 68 65 20 63 75  to see if the cu
1cbf0 72 73 6f 72 20 6f 6e 20 50 31 20 69 73 20 61 6c  rsor on P1 is al
1cc00 72 65 61 64 79 20 6f 70 65 6e 20 6f 6e 20 74 68  ready open on th
1cc10 65 20 73 61 6d 65 0a 2a 2a 20 62 2d 74 72 65 65  e same.** b-tree
1cc20 20 61 6e 64 20 69 66 20 69 74 20 69 73 20 74 68   and if it is th
1cc30 69 73 20 6f 70 63 6f 64 65 20 62 65 63 6f 6d 65  is opcode become
1cc40 73 20 61 20 6e 6f 2d 6f 70 2e 20 20 49 6e 20 6f  s a no-op.  In o
1cc50 74 68 65 72 20 77 6f 72 64 73 2c 0a 2a 2a 20 69  ther words,.** i
1cc60 66 20 74 68 65 20 63 75 72 73 6f 72 20 69 73 20  f the cursor is 
1cc70 61 6c 72 65 61 64 79 20 6f 70 65 6e 2c 20 64 6f  already open, do
1cc80 20 6e 6f 74 20 72 65 6f 70 65 6e 20 69 74 2e 0a   not reopen it..
1cc90 2a 2a 0a 2a 2a 20 54 68 65 20 52 65 6f 70 65 6e  **.** The Reopen
1cca0 49 64 78 20 6f 70 63 6f 64 65 20 6d 61 79 20 6f  Idx opcode may o
1ccb0 6e 6c 79 20 62 65 20 75 73 65 64 20 77 69 74 68  nly be used with
1ccc0 20 50 35 3d 3d 30 20 6f 72 20 50 35 3d 3d 4f 50   P5==0 or P5==OP
1ccd0 46 4c 41 47 5f 53 45 45 4b 45 51 0a 2a 2a 20 61  FLAG_SEEKEQ.** a
1cce0 6e 64 20 77 69 74 68 20 50 34 20 62 65 69 6e 67  nd with P4 being
1ccf0 20 61 20 50 34 5f 4b 45 59 49 4e 46 4f 20 6f 62   a P4_KEYINFO ob
1cd00 6a 65 63 74 2e 20 20 46 75 72 74 68 65 72 6d 6f  ject.  Furthermo
1cd10 72 65 2c 20 74 68 65 20 50 33 20 76 61 6c 75 65  re, the P3 value
1cd20 20 6d 75 73 74 0a 2a 2a 20 62 65 20 74 68 65 20   must.** be the 
1cd30 73 61 6d 65 20 61 73 20 65 76 65 72 79 20 6f 74  same as every ot
1cd40 68 65 72 20 52 65 6f 70 65 6e 49 64 78 20 6f 72  her ReopenIdx or
1cd50 20 4f 70 65 6e 52 65 61 64 20 66 6f 72 20 74 68   OpenRead for th
1cd60 65 20 73 61 6d 65 20 63 75 72 73 6f 72 0a 2a 2a  e same cursor.**
1cd70 20 6e 75 6d 62 65 72 2e 0a 2a 2a 0a 2a 2a 20 41   number..**.** A
1cd80 6c 6c 6f 77 65 64 20 50 35 20 62 69 74 73 3a 0a  llowed P5 bits:.
1cd90 2a 2a 20 3c 75 6c 3e 0a 2a 2a 20 3c 6c 69 3e 20  ** <ul>.** <li> 
1cda0 20 3c 62 3e 30 78 30 32 20 4f 50 46 4c 41 47 5f   <b>0x02 OPFLAG_
1cdb0 53 45 45 4b 45 51 3c 2f 62 3e 3a 20 54 68 69 73  SEEKEQ</b>: This
1cdc0 20 63 75 72 73 6f 72 20 77 69 6c 6c 20 6f 6e 6c   cursor will onl
1cdd0 79 20 62 65 20 75 73 65 64 20 66 6f 72 0a 2a 2a  y be used for.**
1cde0 20 20 20 20 20 20 20 65 71 75 61 6c 69 74 79 20         equality 
1cdf0 6c 6f 6f 6b 75 70 73 20 28 69 6d 70 6c 65 6d 65  lookups (impleme
1ce00 6e 74 65 64 20 61 73 20 61 20 70 61 69 72 20 6f  nted as a pair o
1ce10 66 20 6f 70 63 6f 64 65 73 20 4f 50 5f 53 65 65  f opcodes OP_See
1ce20 6b 47 45 2f 4f 50 5f 49 64 78 47 54 0a 2a 2a 20  kGE/OP_IdxGT.** 
1ce30 20 20 20 20 20 20 6f 66 20 4f 50 5f 53 65 65 6b        of OP_Seek
1ce40 4c 45 2f 4f 50 5f 49 64 78 47 54 29 0a 2a 2a 20  LE/OP_IdxGT).** 
1ce50 3c 2f 75 6c 3e 0a 2a 2a 0a 2a 2a 20 53 65 65 20  </ul>.**.** See 
1ce60 61 6c 73 6f 3a 20 4f 50 5f 4f 70 65 6e 52 65 61  also: OP_OpenRea
1ce70 64 2c 20 4f 50 5f 4f 70 65 6e 57 72 69 74 65 0a  d, OP_OpenWrite.
1ce80 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f 70  */./* Opcode: Op
1ce90 65 6e 57 72 69 74 65 20 50 31 20 50 32 20 50 33  enWrite P1 P2 P3
1cea0 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73   P4 P5.** Synops
1ceb0 69 73 3a 20 72 6f 6f 74 3d 50 32 20 69 44 62 3d  is: root=P2 iDb=
1cec0 50 33 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e 20 61 20  P3.**.** Open a 
1ced0 72 65 61 64 2f 77 72 69 74 65 20 63 75 72 73 6f  read/write curso
1cee0 72 20 6e 61 6d 65 64 20 50 31 20 6f 6e 20 74 68  r named P1 on th
1cef0 65 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78  e table or index
1cf00 20 77 68 6f 73 65 20 72 6f 6f 74 0a 2a 2a 20 70   whose root.** p
1cf10 61 67 65 20 69 73 20 50 32 20 28 6f 72 20 77 68  age is P2 (or wh
1cf20 6f 73 65 20 72 6f 6f 74 20 70 61 67 65 20 69 73  ose root page is
1cf30 20 68 65 6c 64 20 69 6e 20 72 65 67 69 73 74 65   held in registe
1cf40 72 20 50 32 20 69 66 20 74 68 65 0a 2a 2a 20 4f  r P2 if the.** O
1cf50 50 46 4c 41 47 5f 50 32 49 53 52 45 47 20 62 69  PFLAG_P2ISREG bi
1cf60 74 20 69 73 20 73 65 74 20 69 6e 20 50 35 20 2d  t is set in P5 -
1cf70 20 73 65 65 20 62 65 6c 6f 77 29 2e 0a 2a 2a 0a   see below)..**.
1cf80 2a 2a 20 54 68 65 20 50 34 20 76 61 6c 75 65 20  ** The P4 value 
1cf90 6d 61 79 20 62 65 20 65 69 74 68 65 72 20 61 6e  may be either an
1cfa0 20 69 6e 74 65 67 65 72 20 28 50 34 5f 49 4e 54   integer (P4_INT
1cfb0 33 32 29 20 6f 72 20 61 20 70 6f 69 6e 74 65 72  32) or a pointer
1cfc0 20 74 6f 0a 2a 2a 20 61 20 4b 65 79 49 6e 66 6f   to.** a KeyInfo
1cfd0 20 73 74 72 75 63 74 75 72 65 20 28 50 34 5f 4b   structure (P4_K
1cfe0 45 59 49 4e 46 4f 29 2e 20 49 66 20 69 74 20 69  EYINFO). If it i
1cff0 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61  s a pointer to a
1d000 20 4b 65 79 49 6e 66 6f 20 0a 2a 2a 20 6f 62 6a   KeyInfo .** obj
1d010 65 63 74 2c 20 74 68 65 6e 20 74 61 62 6c 65 20  ect, then table 
1d020 62 65 69 6e 67 20 6f 70 65 6e 65 64 20 6d 75 73  being opened mus
1d030 74 20 62 65 20 61 6e 20 5b 69 6e 64 65 78 20 62  t be an [index b
1d040 2d 74 72 65 65 5d 20 77 68 65 72 65 20 74 68 65  -tree] where the
1d050 0a 2a 2a 20 4b 65 79 49 6e 66 6f 20 6f 62 6a 65  .** KeyInfo obje
1d060 63 74 20 64 65 66 69 6e 65 73 20 74 68 65 20 63  ct defines the c
1d070 6f 6e 74 65 6e 74 20 61 6e 64 20 63 6f 6c 6c 61  ontent and colla
1d080 74 69 6e 67 20 0a 2a 2a 20 73 65 71 75 65 6e 63  ting .** sequenc
1d090 65 20 6f 66 20 74 68 61 74 20 69 6e 64 65 78 20  e of that index 
1d0a0 62 2d 74 72 65 65 2e 20 4f 74 68 65 72 77 69 73  b-tree. Otherwis
1d0b0 65 2c 20 69 66 20 50 34 20 69 73 20 61 6e 20 69  e, if P4 is an i
1d0c0 6e 74 65 67 65 72 20 0a 2a 2a 20 76 61 6c 75 65  nteger .** value
1d0d0 2c 20 74 68 65 6e 20 74 68 65 20 74 61 62 6c 65  , then the table
1d0e0 20 62 65 69 6e 67 20 6f 70 65 6e 65 64 20 6d 75   being opened mu
1d0f0 73 74 20 62 65 20 61 20 5b 74 61 62 6c 65 20 62  st be a [table b
1d100 2d 74 72 65 65 5d 20 77 69 74 68 20 61 0a 2a 2a  -tree] with a.**
1d110 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d   number of colum
1d120 6e 73 20 6e 6f 20 6c 65 73 73 20 74 68 61 6e 20  ns no less than 
1d130 74 68 65 20 76 61 6c 75 65 20 6f 66 20 50 34 2e  the value of P4.
1d140 0a 2a 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 50  .**.** Allowed P
1d150 35 20 62 69 74 73 3a 0a 2a 2a 20 3c 75 6c 3e 0a  5 bits:.** <ul>.
1d160 2a 2a 20 3c 6c 69 3e 20 20 3c 62 3e 30 78 30 32  ** <li>  <b>0x02
1d170 20 4f 50 46 4c 41 47 5f 53 45 45 4b 45 51 3c 2f   OPFLAG_SEEKEQ</
1d180 62 3e 3a 20 54 68 69 73 20 63 75 72 73 6f 72 20  b>: This cursor 
1d190 77 69 6c 6c 20 6f 6e 6c 79 20 62 65 20 75 73 65  will only be use
1d1a0 64 20 66 6f 72 0a 2a 2a 20 20 20 20 20 20 20 65  d for.**       e
1d1b0 71 75 61 6c 69 74 79 20 6c 6f 6f 6b 75 70 73 20  quality lookups 
1d1c0 28 69 6d 70 6c 65 6d 65 6e 74 65 64 20 61 73 20  (implemented as 
1d1d0 61 20 70 61 69 72 20 6f 66 20 6f 70 63 6f 64 65  a pair of opcode
1d1e0 73 20 4f 50 5f 53 65 65 6b 47 45 2f 4f 50 5f 49  s OP_SeekGE/OP_I
1d1f0 64 78 47 54 0a 2a 2a 20 20 20 20 20 20 20 6f 66  dxGT.**       of
1d200 20 4f 50 5f 53 65 65 6b 4c 45 2f 4f 50 5f 49 64   OP_SeekLE/OP_Id
1d210 78 47 54 29 0a 2a 2a 20 3c 6c 69 3e 20 20 3c 62  xGT).** <li>  <b
1d220 3e 30 78 30 38 20 4f 50 46 4c 41 47 5f 46 4f 52  >0x08 OPFLAG_FOR
1d230 44 45 4c 45 54 45 3c 2f 62 3e 3a 20 54 68 69 73  DELETE</b>: This
1d240 20 63 75 72 73 6f 72 20 69 73 20 75 73 65 64 20   cursor is used 
1d250 6f 6e 6c 79 20 74 6f 20 73 65 65 6b 0a 2a 2a 20  only to seek.** 
1d260 20 20 20 20 20 20 61 6e 64 20 73 75 62 73 65 71        and subseq
1d270 75 65 6e 74 6c 79 20 64 65 6c 65 74 65 20 65 6e  uently delete en
1d280 74 72 69 65 73 20 69 6e 20 61 6e 20 69 6e 64 65  tries in an inde
1d290 78 20 62 74 72 65 65 2e 20 20 54 68 69 73 20 69  x btree.  This i
1d2a0 73 20 61 0a 2a 2a 20 20 20 20 20 20 20 68 69 6e  s a.**       hin
1d2b0 74 20 74 6f 20 74 68 65 20 73 74 6f 72 61 67 65  t to the storage
1d2c0 20 65 6e 67 69 6e 65 20 74 68 61 74 20 74 68 65   engine that the
1d2d0 20 73 74 6f 72 61 67 65 20 65 6e 67 69 6e 65 20   storage engine 
1d2e0 69 73 20 61 6c 6c 6f 77 65 64 20 74 6f 0a 2a 2a  is allowed to.**
1d2f0 20 20 20 20 20 20 20 69 67 6e 6f 72 65 2e 20 20         ignore.  
1d300 54 68 65 20 68 69 6e 74 20 69 73 20 6e 6f 74 20  The hint is not 
1d310 75 73 65 64 20 62 79 20 74 68 65 20 6f 66 66 69  used by the offi
1d320 63 69 61 6c 20 53 51 4c 69 74 65 20 62 2a 74 72  cial SQLite b*tr
1d330 65 65 20 73 74 6f 72 61 67 65 0a 2a 2a 20 20 20  ee storage.**   
1d340 20 20 20 20 65 6e 67 69 6e 65 2c 20 62 75 74 20      engine, but 
1d350 69 73 20 75 73 65 64 20 62 79 20 43 4f 4d 44 42  is used by COMDB
1d360 32 2e 0a 2a 2a 20 3c 6c 69 3e 20 20 3c 62 3e 30  2..** <li>  <b>0
1d370 78 31 30 20 4f 50 46 4c 41 47 5f 50 32 49 53 52  x10 OPFLAG_P2ISR
1d380 45 47 3c 2f 62 3e 3a 20 55 73 65 20 74 68 65 20  EG</b>: Use the 
1d390 63 6f 6e 74 65 6e 74 20 6f 66 20 72 65 67 69 73  content of regis
1d3a0 74 65 72 20 50 32 0a 2a 2a 20 20 20 20 20 20 20  ter P2.**       
1d3b0 61 73 20 74 68 65 20 72 6f 6f 74 20 70 61 67 65  as the root page
1d3c0 2c 20 6e 6f 74 20 74 68 65 20 76 61 6c 75 65 20  , not the value 
1d3d0 6f 66 20 50 32 20 69 74 73 65 6c 66 2e 0a 2a 2a  of P2 itself..**
1d3e0 20 3c 2f 75 6c 3e 0a 2a 2a 0a 2a 2a 20 54 68 69   </ul>.**.** Thi
1d3f0 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 77 6f  s instruction wo
1d400 72 6b 73 20 6c 69 6b 65 20 4f 70 65 6e 52 65 61  rks like OpenRea
1d410 64 20 65 78 63 65 70 74 20 74 68 61 74 20 69 74  d except that it
1d420 20 6f 70 65 6e 73 20 74 68 65 20 63 75 72 73 6f   opens the curso
1d430 72 0a 2a 2a 20 69 6e 20 72 65 61 64 2f 77 72 69  r.** in read/wri
1d440 74 65 20 6d 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 53  te mode..**.** S
1d450 65 65 20 61 6c 73 6f 3a 20 4f 50 5f 4f 70 65 6e  ee also: OP_Open
1d460 52 65 61 64 2c 20 4f 50 5f 52 65 6f 70 65 6e 49  Read, OP_ReopenI
1d470 64 78 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65  dx.*/.case OP_Re
1d480 6f 70 65 6e 49 64 78 3a 20 7b 0a 20 20 69 6e 74  openIdx: {.  int
1d490 20 6e 46 69 65 6c 64 3b 0a 20 20 4b 65 79 49 6e   nField;.  KeyIn
1d4a0 66 6f 20 2a 70 4b 65 79 49 6e 66 6f 3b 0a 20 20  fo *pKeyInfo;.  
1d4b0 69 6e 74 20 70 32 3b 0a 20 20 69 6e 74 20 69 44  int p2;.  int iD
1d4c0 62 3b 0a 20 20 69 6e 74 20 77 72 46 6c 61 67 3b  b;.  int wrFlag;
1d4d0 0a 20 20 42 74 72 65 65 20 2a 70 58 3b 0a 20 20  .  Btree *pX;.  
1d4e0 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 75 72  VdbeCursor *pCur
1d4f0 3b 0a 20 20 44 62 20 2a 70 44 62 3b 0a 0a 20 20  ;.  Db *pDb;..  
1d500 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 35 3d  assert( pOp->p5=
1d510 3d 30 20 7c 7c 20 70 4f 70 2d 3e 70 35 3d 3d 4f  =0 || pOp->p5==O
1d520 50 46 4c 41 47 5f 53 45 45 4b 45 51 20 29 3b 0a  PFLAG_SEEKEQ );.
1d530 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
1d540 34 74 79 70 65 3d 3d 50 34 5f 4b 45 59 49 4e 46  4type==P4_KEYINF
1d550 4f 20 29 3b 0a 20 20 70 43 75 72 20 3d 20 70 2d  O );.  pCur = p-
1d560 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b  >apCsr[pOp->p1];
1d570 0a 20 20 69 66 28 20 70 43 75 72 20 26 26 20 70  .  if( pCur && p
1d580 43 75 72 2d 3e 70 67 6e 6f 52 6f 6f 74 3d 3d 28  Cur->pgnoRoot==(
1d590 75 33 32 29 70 4f 70 2d 3e 70 32 20 29 7b 0a 20  u32)pOp->p2 ){. 
1d5a0 20 20 20 61 73 73 65 72 74 28 20 70 43 75 72 2d     assert( pCur-
1d5b0 3e 69 44 62 3d 3d 70 4f 70 2d 3e 70 33 20 29 3b  >iDb==pOp->p3 );
1d5c0 20 20 20 20 20 20 2f 2a 20 47 75 61 72 61 6e 74        /* Guarant
1d5d0 65 65 64 20 62 79 20 74 68 65 20 63 6f 64 65 20  eed by the code 
1d5e0 67 65 6e 65 72 61 74 6f 72 20 2a 2f 0a 20 20 20  generator */.   
1d5f0 20 67 6f 74 6f 20 6f 70 65 6e 5f 63 75 72 73 6f   goto open_curso
1d600 72 5f 73 65 74 5f 68 69 6e 74 73 3b 0a 20 20 7d  r_set_hints;.  }
1d610 0a 20 20 2f 2a 20 49 66 20 74 68 65 20 63 75 72  .  /* If the cur
1d620 73 6f 72 20 69 73 20 6e 6f 74 20 63 75 72 72 65  sor is not curre
1d630 6e 74 6c 79 20 6f 70 65 6e 20 6f 72 20 69 73 20  ntly open or is 
1d640 6f 70 65 6e 20 6f 6e 20 61 20 64 69 66 66 65 72  open on a differ
1d650 65 6e 74 0a 20 20 2a 2a 20 69 6e 64 65 78 2c 20  ent.  ** index, 
1d660 74 68 65 6e 20 66 61 6c 6c 20 74 68 72 6f 75 67  then fall throug
1d670 68 20 69 6e 74 6f 20 4f 50 5f 4f 70 65 6e 52 65  h into OP_OpenRe
1d680 61 64 20 74 6f 20 66 6f 72 63 65 20 61 20 72 65  ad to force a re
1d690 6f 70 65 6e 20 2a 2f 0a 63 61 73 65 20 4f 50 5f  open */.case OP_
1d6a0 4f 70 65 6e 52 65 61 64 3a 0a 63 61 73 65 20 4f  OpenRead:.case O
1d6b0 50 5f 4f 70 65 6e 57 72 69 74 65 3a 0a 0a 20 20  P_OpenWrite:..  
1d6c0 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63  assert( pOp->opc
1d6d0 6f 64 65 3d 3d 4f 50 5f 4f 70 65 6e 57 72 69 74  ode==OP_OpenWrit
1d6e0 65 20 7c 7c 20 70 4f 70 2d 3e 70 35 3d 3d 30 20  e || pOp->p5==0 
1d6f0 7c 7c 20 70 4f 70 2d 3e 70 35 3d 3d 4f 50 46 4c  || pOp->p5==OPFL
1d700 41 47 5f 53 45 45 4b 45 51 20 29 3b 0a 20 20 61  AG_SEEKEQ );.  a
1d710 73 73 65 72 74 28 20 70 2d 3e 62 49 73 52 65 61  ssert( p->bIsRea
1d720 64 65 72 20 29 3b 0a 20 20 61 73 73 65 72 74 28  der );.  assert(
1d730 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50   pOp->opcode==OP
1d740 5f 4f 70 65 6e 52 65 61 64 20 7c 7c 20 70 4f 70  _OpenRead || pOp
1d750 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 52 65 6f  ->opcode==OP_Reo
1d760 70 65 6e 49 64 78 0a 20 20 20 20 20 20 20 20 20  penIdx.         
1d770 20 7c 7c 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d   || p->readOnly=
1d780 3d 30 20 29 3b 0a 0a 20 20 69 66 28 20 70 2d 3e  =0 );..  if( p->
1d790 65 78 70 69 72 65 64 3d 3d 31 20 29 7b 0a 20 20  expired==1 ){.  
1d7a0 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 41 42    rc = SQLITE_AB
1d7b0 4f 52 54 5f 52 4f 4c 4c 42 41 43 4b 3b 0a 20 20  ORT_ROLLBACK;.  
1d7c0 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65    goto abort_due
1d7d0 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 7d 0a 0a  _to_error;.  }..
1d7e0 20 20 6e 46 69 65 6c 64 20 3d 20 30 3b 0a 20 20    nField = 0;.  
1d7f0 70 4b 65 79 49 6e 66 6f 20 3d 20 30 3b 0a 20 20  pKeyInfo = 0;.  
1d800 70 32 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20  p2 = pOp->p2;.  
1d810 69 44 62 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20  iDb = pOp->p3;. 
1d820 20 61 73 73 65 72 74 28 20 69 44 62 3e 3d 30 20   assert( iDb>=0 
1d830 26 26 20 69 44 62 3c 64 62 2d 3e 6e 44 62 20 29  && iDb<db->nDb )
1d840 3b 0a 20 20 61 73 73 65 72 74 28 20 44 62 4d 61  ;.  assert( DbMa
1d850 73 6b 54 65 73 74 28 70 2d 3e 62 74 72 65 65 4d  skTest(p->btreeM
1d860 61 73 6b 2c 20 69 44 62 29 20 29 3b 0a 20 20 70  ask, iDb) );.  p
1d870 44 62 20 3d 20 26 64 62 2d 3e 61 44 62 5b 69 44  Db = &db->aDb[iD
1d880 62 5d 3b 0a 20 20 70 58 20 3d 20 70 44 62 2d 3e  b];.  pX = pDb->
1d890 70 42 74 3b 0a 20 20 61 73 73 65 72 74 28 20 70  pBt;.  assert( p
1d8a0 58 21 3d 30 20 29 3b 0a 20 20 69 66 28 20 70 4f  X!=0 );.  if( pO
1d8b0 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4f 70  p->opcode==OP_Op
1d8c0 65 6e 57 72 69 74 65 20 29 7b 0a 20 20 20 20 61  enWrite ){.    a
1d8d0 73 73 65 72 74 28 20 4f 50 46 4c 41 47 5f 46 4f  ssert( OPFLAG_FO
1d8e0 52 44 45 4c 45 54 45 3d 3d 42 54 52 45 45 5f 46  RDELETE==BTREE_F
1d8f0 4f 52 44 45 4c 45 54 45 20 29 3b 0a 20 20 20 20  ORDELETE );.    
1d900 77 72 46 6c 61 67 20 3d 20 42 54 52 45 45 5f 57  wrFlag = BTREE_W
1d910 52 43 53 52 20 7c 20 28 70 4f 70 2d 3e 70 35 20  RCSR | (pOp->p5 
1d920 26 20 4f 50 46 4c 41 47 5f 46 4f 52 44 45 4c 45  & OPFLAG_FORDELE
1d930 54 45 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  TE);.    assert(
1d940 20 73 71 6c 69 74 65 33 53 63 68 65 6d 61 4d 75   sqlite3SchemaMu
1d950 74 65 78 48 65 6c 64 28 64 62 2c 20 69 44 62 2c  texHeld(db, iDb,
1d960 20 30 29 20 29 3b 0a 20 20 20 20 69 66 28 20 70   0) );.    if( p
1d970 44 62 2d 3e 70 53 63 68 65 6d 61 2d 3e 66 69 6c  Db->pSchema->fil
1d980 65 5f 66 6f 72 6d 61 74 20 3c 20 70 2d 3e 6d 69  e_format < p->mi
1d990 6e 57 72 69 74 65 46 69 6c 65 46 6f 72 6d 61 74  nWriteFileFormat
1d9a0 20 29 7b 0a 20 20 20 20 20 20 70 2d 3e 6d 69 6e   ){.      p->min
1d9b0 57 72 69 74 65 46 69 6c 65 46 6f 72 6d 61 74 20  WriteFileFormat 
1d9c0 3d 20 70 44 62 2d 3e 70 53 63 68 65 6d 61 2d 3e  = pDb->pSchema->
1d9d0 66 69 6c 65 5f 66 6f 72 6d 61 74 3b 0a 20 20 20  file_format;.   
1d9e0 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20   }.  }else{.    
1d9f0 77 72 46 6c 61 67 20 3d 20 30 3b 0a 20 20 7d 0a  wrFlag = 0;.  }.
1da00 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 26 20    if( pOp->p5 & 
1da10 4f 50 46 4c 41 47 5f 50 32 49 53 52 45 47 20 29  OPFLAG_P2ISREG )
1da20 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 32  {.    assert( p2
1da30 3e 30 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74  >0 );.    assert
1da40 28 20 70 32 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31  ( p2<=(p->nMem+1
1da50 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29   - p->nCursor) )
1da60 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4f  ;.    assert( pO
1da70 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4f 70  p->opcode==OP_Op
1da80 65 6e 57 72 69 74 65 20 29 3b 0a 20 20 20 20 70  enWrite );.    p
1da90 49 6e 32 20 3d 20 26 61 4d 65 6d 5b 70 32 5d 3b  In2 = &aMem[p2];
1daa0 0a 20 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d  .    assert( mem
1dab0 49 73 56 61 6c 69 64 28 70 49 6e 32 29 20 29 3b  IsValid(pIn2) );
1dac0 0a 20 20 20 20 61 73 73 65 72 74 28 20 28 70 49  .    assert( (pI
1dad0 6e 32 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  n2->flags & MEM_
1dae0 49 6e 74 29 21 3d 30 20 29 3b 0a 20 20 20 20 73  Int)!=0 );.    s
1daf0 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 49 6e 74  qlite3VdbeMemInt
1db00 65 67 65 72 69 66 79 28 70 49 6e 32 29 3b 0a 20  egerify(pIn2);. 
1db10 20 20 20 70 32 20 3d 20 28 69 6e 74 29 70 49 6e     p2 = (int)pIn
1db20 32 2d 3e 75 2e 69 3b 0a 20 20 20 20 2f 2a 20 54  2->u.i;.    /* T
1db30 68 65 20 70 32 20 76 61 6c 75 65 20 61 6c 77 61  he p2 value alwa
1db40 79 73 20 63 6f 6d 65 73 20 66 72 6f 6d 20 61 20  ys comes from a 
1db50 70 72 69 6f 72 20 4f 50 5f 43 72 65 61 74 65 42  prior OP_CreateB
1db60 74 72 65 65 20 6f 70 63 6f 64 65 20 61 6e 64 0a  tree opcode and.
1db70 20 20 20 20 2a 2a 20 74 68 61 74 20 6f 70 63 6f      ** that opco
1db80 64 65 20 77 69 6c 6c 20 61 6c 77 61 79 73 20 73  de will always s
1db90 65 74 20 74 68 65 20 70 32 20 76 61 6c 75 65 20  et the p2 value 
1dba0 74 6f 20 32 20 6f 72 20 6d 6f 72 65 20 6f 72 20  to 2 or more or 
1dbb0 65 6c 73 65 20 66 61 69 6c 2e 0a 20 20 20 20 2a  else fail..    *
1dbc0 2a 20 49 66 20 74 68 65 72 65 20 77 65 72 65 20  * If there were 
1dbd0 61 20 66 61 69 6c 75 72 65 2c 20 74 68 65 20 70  a failure, the p
1dbe0 72 65 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e  repared statemen
1dbf0 74 20 77 6f 75 6c 64 20 68 61 76 65 20 68 61 6c  t would have hal
1dc00 74 65 64 0a 20 20 20 20 2a 2a 20 62 65 66 6f 72  ted.    ** befor
1dc10 65 20 72 65 61 63 68 69 6e 67 20 74 68 69 73 20  e reaching this 
1dc20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20 2a 2f 0a  instruction. */.
1dc30 20 20 20 20 61 73 73 65 72 74 28 20 70 32 3e 3d      assert( p2>=
1dc40 32 20 29 3b 0a 20 20 7d 0a 20 20 69 66 28 20 70  2 );.  }.  if( p
1dc50 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 4b  Op->p4type==P4_K
1dc60 45 59 49 4e 46 4f 20 29 7b 0a 20 20 20 20 70 4b  EYINFO ){.    pK
1dc70 65 79 49 6e 66 6f 20 3d 20 70 4f 70 2d 3e 70 34  eyInfo = pOp->p4
1dc80 2e 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 20 20 61  .pKeyInfo;.    a
1dc90 73 73 65 72 74 28 20 70 4b 65 79 49 6e 66 6f 2d  ssert( pKeyInfo-
1dca0 3e 65 6e 63 3d 3d 45 4e 43 28 64 62 29 20 29 3b  >enc==ENC(db) );
1dcb0 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4b 65  .    assert( pKe
1dcc0 79 49 6e 66 6f 2d 3e 64 62 3d 3d 64 62 20 29 3b  yInfo->db==db );
1dcd0 0a 20 20 20 20 6e 46 69 65 6c 64 20 3d 20 70 4b  .    nField = pK
1dce0 65 79 49 6e 66 6f 2d 3e 6e 41 6c 6c 46 69 65 6c  eyInfo->nAllFiel
1dcf0 64 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 70  d;.  }else if( p
1dd00 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49  Op->p4type==P4_I
1dd10 4e 54 33 32 20 29 7b 0a 20 20 20 20 6e 46 69 65  NT32 ){.    nFie
1dd20 6c 64 20 3d 20 70 4f 70 2d 3e 70 34 2e 69 3b 0a  ld = pOp->p4.i;.
1dd30 20 20 7d 0a 20 20 61 73 73 65 72 74 28 20 70 4f    }.  assert( pO
1dd40 70 2d 3e 70 31 3e 3d 30 20 29 3b 0a 20 20 61 73  p->p1>=0 );.  as
1dd50 73 65 72 74 28 20 6e 46 69 65 6c 64 3e 3d 30 20  sert( nField>=0 
1dd60 29 3b 0a 20 20 74 65 73 74 63 61 73 65 28 20 6e  );.  testcase( n
1dd70 46 69 65 6c 64 3d 3d 30 20 29 3b 20 20 2f 2a 20  Field==0 );  /* 
1dd80 54 61 62 6c 65 20 77 69 74 68 20 49 4e 54 45 47  Table with INTEG
1dd90 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59 20 61  ER PRIMARY KEY a
1dda0 6e 64 20 6e 6f 74 68 69 6e 67 20 65 6c 73 65 20  nd nothing else 
1ddb0 2a 2f 0a 20 20 70 43 75 72 20 3d 20 61 6c 6c 6f  */.  pCur = allo
1ddc0 63 61 74 65 43 75 72 73 6f 72 28 70 2c 20 70 4f  cateCursor(p, pO
1ddd0 70 2d 3e 70 31 2c 20 6e 46 69 65 6c 64 2c 20 69  p->p1, nField, i
1dde0 44 62 2c 20 43 55 52 54 59 50 45 5f 42 54 52 45  Db, CURTYPE_BTRE
1ddf0 45 29 3b 0a 20 20 69 66 28 20 70 43 75 72 3d 3d  E);.  if( pCur==
1de00 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b  0 ) goto no_mem;
1de10 0a 20 20 70 43 75 72 2d 3e 6e 75 6c 6c 52 6f 77  .  pCur->nullRow
1de20 20 3d 20 31 3b 0a 20 20 70 43 75 72 2d 3e 69 73   = 1;.  pCur->is
1de30 4f 72 64 65 72 65 64 20 3d 20 31 3b 0a 20 20 70  Ordered = 1;.  p
1de40 43 75 72 2d 3e 70 67 6e 6f 52 6f 6f 74 20 3d 20  Cur->pgnoRoot = 
1de50 70 32 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54  p2;.#ifdef SQLIT
1de60 45 5f 44 45 42 55 47 0a 20 20 70 43 75 72 2d 3e  E_DEBUG.  pCur->
1de70 77 72 46 6c 61 67 20 3d 20 77 72 46 6c 61 67 3b  wrFlag = wrFlag;
1de80 0a 23 65 6e 64 69 66 0a 20 20 72 63 20 3d 20 73  .#endif.  rc = s
1de90 71 6c 69 74 65 33 42 74 72 65 65 43 75 72 73 6f  qlite3BtreeCurso
1dea0 72 28 70 58 2c 20 70 32 2c 20 77 72 46 6c 61 67  r(pX, p2, wrFlag
1deb0 2c 20 70 4b 65 79 49 6e 66 6f 2c 20 70 43 75 72  , pKeyInfo, pCur
1dec0 2d 3e 75 63 2e 70 43 75 72 73 6f 72 29 3b 0a 20  ->uc.pCursor);. 
1ded0 20 70 43 75 72 2d 3e 70 4b 65 79 49 6e 66 6f 20   pCur->pKeyInfo 
1dee0 3d 20 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 2f 2a  = pKeyInfo;.  /*
1def0 20 53 65 74 20 74 68 65 20 56 64 62 65 43 75 72   Set the VdbeCur
1df00 73 6f 72 2e 69 73 54 61 62 6c 65 20 76 61 72 69  sor.isTable vari
1df10 61 62 6c 65 2e 20 50 72 65 76 69 6f 75 73 20 76  able. Previous v
1df20 65 72 73 69 6f 6e 73 20 6f 66 0a 20 20 2a 2a 20  ersions of.  ** 
1df30 53 51 4c 69 74 65 20 75 73 65 64 20 74 6f 20 63  SQLite used to c
1df40 68 65 63 6b 20 69 66 20 74 68 65 20 72 6f 6f 74  heck if the root
1df50 2d 70 61 67 65 20 66 6c 61 67 73 20 77 65 72 65  -page flags were
1df60 20 73 61 6e 65 20 61 74 20 74 68 69 73 20 70 6f   sane at this po
1df70 69 6e 74 0a 20 20 2a 2a 20 61 6e 64 20 72 65 70  int.  ** and rep
1df80 6f 72 74 20 64 61 74 61 62 61 73 65 20 63 6f 72  ort database cor
1df90 72 75 70 74 69 6f 6e 20 69 66 20 74 68 65 79 20  ruption if they 
1dfa0 77 65 72 65 20 6e 6f 74 2c 20 62 75 74 20 74 68  were not, but th
1dfb0 69 73 20 63 68 65 63 6b 20 68 61 73 0a 20 20 2a  is check has.  *
1dfc0 2a 20 73 69 6e 63 65 20 6d 6f 76 65 64 20 69 6e  * since moved in
1dfd0 74 6f 20 74 68 65 20 62 74 72 65 65 20 6c 61 79  to the btree lay
1dfe0 65 72 2e 20 20 2a 2f 20 20 0a 20 20 70 43 75 72  er.  */  .  pCur
1dff0 2d 3e 69 73 54 61 62 6c 65 20 3d 20 70 4f 70 2d  ->isTable = pOp-
1e000 3e 70 34 74 79 70 65 21 3d 50 34 5f 4b 45 59 49  >p4type!=P4_KEYI
1e010 4e 46 4f 3b 0a 0a 6f 70 65 6e 5f 63 75 72 73 6f  NFO;..open_curso
1e020 72 5f 73 65 74 5f 68 69 6e 74 73 3a 0a 20 20 61  r_set_hints:.  a
1e030 73 73 65 72 74 28 20 4f 50 46 4c 41 47 5f 42 55  ssert( OPFLAG_BU
1e040 4c 4b 43 53 52 3d 3d 42 54 52 45 45 5f 42 55 4c  LKCSR==BTREE_BUL
1e050 4b 4c 4f 41 44 20 29 3b 0a 20 20 61 73 73 65 72  KLOAD );.  asser
1e060 74 28 20 4f 50 46 4c 41 47 5f 53 45 45 4b 45 51  t( OPFLAG_SEEKEQ
1e070 3d 3d 42 54 52 45 45 5f 53 45 45 4b 5f 45 51 20  ==BTREE_SEEK_EQ 
1e080 29 3b 0a 20 20 74 65 73 74 63 61 73 65 28 20 70  );.  testcase( p
1e090 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f  Op->p5 & OPFLAG_
1e0a0 42 55 4c 4b 43 53 52 20 29 3b 0a 23 69 66 64 65  BULKCSR );.#ifde
1e0b0 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  f SQLITE_ENABLE_
1e0c0 43 55 52 53 4f 52 5f 48 49 4e 54 53 0a 20 20 74  CURSOR_HINTS.  t
1e0d0 65 73 74 63 61 73 65 28 20 70 4f 70 2d 3e 70 32  estcase( pOp->p2
1e0e0 20 26 20 4f 50 46 4c 41 47 5f 53 45 45 4b 45 51   & OPFLAG_SEEKEQ
1e0f0 20 29 3b 0a 23 65 6e 64 69 66 0a 20 20 73 71 6c   );.#endif.  sql
1e100 69 74 65 33 42 74 72 65 65 43 75 72 73 6f 72 48  ite3BtreeCursorH
1e110 69 6e 74 46 6c 61 67 73 28 70 43 75 72 2d 3e 75  intFlags(pCur->u
1e120 63 2e 70 43 75 72 73 6f 72 2c 0a 20 20 20 20 20  c.pCursor,.     
1e130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e140 20 20 20 20 20 20 20 20 20 20 28 70 4f 70 2d 3e            (pOp->
1e150 70 35 20 26 20 28 4f 50 46 4c 41 47 5f 42 55 4c  p5 & (OPFLAG_BUL
1e160 4b 43 53 52 7c 4f 50 46 4c 41 47 5f 53 45 45 4b  KCSR|OPFLAG_SEEK
1e170 45 51 29 29 29 3b 0a 20 20 69 66 28 20 72 63 20  EQ)));.  if( rc 
1e180 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65  ) goto abort_due
1e190 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 62 72 65  _to_error;.  bre
1e1a0 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
1e1b0 3a 20 4f 70 65 6e 44 75 70 20 50 31 20 50 32 20  : OpenDup P1 P2 
1e1c0 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e  * * *.**.** Open
1e1d0 20 61 20 6e 65 77 20 63 75 72 73 6f 72 20 50 31   a new cursor P1
1e1e0 20 74 68 61 74 20 70 6f 69 6e 74 73 20 74 6f 20   that points to 
1e1f0 74 68 65 20 73 61 6d 65 20 65 70 68 65 6d 65 72  the same ephemer
1e200 61 6c 20 74 61 62 6c 65 20 61 73 0a 2a 2a 20 63  al table as.** c
1e210 75 72 73 6f 72 20 50 32 2e 20 20 54 68 65 20 50  ursor P2.  The P
1e220 32 20 63 75 72 73 6f 72 20 6d 75 73 74 20 68 61  2 cursor must ha
1e230 76 65 20 62 65 65 6e 20 6f 70 65 6e 65 64 20 62  ve been opened b
1e240 79 20 61 20 70 72 69 6f 72 20 4f 50 5f 4f 70 65  y a prior OP_Ope
1e250 6e 45 70 68 65 6d 65 72 61 6c 0a 2a 2a 20 6f 70  nEphemeral.** op
1e260 63 6f 64 65 2e 20 20 4f 6e 6c 79 20 65 70 68 65  code.  Only ephe
1e270 6d 65 72 61 6c 20 63 75 72 73 6f 72 73 20 6d 61  meral cursors ma
1e280 79 20 62 65 20 64 75 70 6c 69 63 61 74 65 64 2e  y be duplicated.
1e290 0a 2a 2a 0a 2a 2a 20 44 75 70 6c 69 63 61 74 65  .**.** Duplicate
1e2a0 20 65 70 68 65 6d 65 72 61 6c 20 63 75 72 73 6f   ephemeral curso
1e2b0 72 73 20 61 72 65 20 75 73 65 64 20 66 6f 72 20  rs are used for 
1e2c0 73 65 6c 66 2d 6a 6f 69 6e 73 20 6f 66 20 6d 61  self-joins of ma
1e2d0 74 65 72 69 61 6c 69 7a 65 64 20 76 69 65 77 73  terialized views
1e2e0 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4f 70 65  ..*/.case OP_Ope
1e2f0 6e 44 75 70 3a 20 7b 0a 20 20 56 64 62 65 43 75  nDup: {.  VdbeCu
1e300 72 73 6f 72 20 2a 70 4f 72 69 67 3b 20 20 20 20  rsor *pOrig;    
1e310 2f 2a 20 54 68 65 20 6f 72 69 67 69 6e 61 6c 20  /* The original 
1e320 63 75 72 73 6f 72 20 74 6f 20 62 65 20 64 75 70  cursor to be dup
1e330 6c 69 63 61 74 65 64 20 2a 2f 0a 20 20 56 64 62  licated */.  Vdb
1e340 65 43 75 72 73 6f 72 20 2a 70 43 78 3b 20 20 20  eCursor *pCx;   
1e350 20 20 20 2f 2a 20 54 68 65 20 6e 65 77 20 63 75     /* The new cu
1e360 72 73 6f 72 20 2a 2f 0a 0a 20 20 70 4f 72 69 67  rsor */..  pOrig
1e370 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d   = p->apCsr[pOp-
1e380 3e 70 32 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p2];.  assert( 
1e390 70 4f 72 69 67 2d 3e 70 42 74 78 21 3d 30 20 29  pOrig->pBtx!=0 )
1e3a0 3b 20 20 2f 2a 20 4f 6e 6c 79 20 65 70 68 65 6d  ;  /* Only ephem
1e3b0 65 72 61 6c 20 63 75 72 73 6f 72 73 20 63 61 6e  eral cursors can
1e3c0 20 62 65 20 64 75 70 6c 69 63 61 74 65 64 20 2a   be duplicated *
1e3d0 2f 0a 0a 20 20 70 43 78 20 3d 20 61 6c 6c 6f 63  /..  pCx = alloc
1e3e0 61 74 65 43 75 72 73 6f 72 28 70 2c 20 70 4f 70  ateCursor(p, pOp
1e3f0 2d 3e 70 31 2c 20 70 4f 72 69 67 2d 3e 6e 46 69  ->p1, pOrig->nFi
1e400 65 6c 64 2c 20 2d 31 2c 20 43 55 52 54 59 50 45  eld, -1, CURTYPE
1e410 5f 42 54 52 45 45 29 3b 0a 20 20 69 66 28 20 70  _BTREE);.  if( p
1e420 43 78 3d 3d 30 20 29 20 67 6f 74 6f 20 6e 6f 5f  Cx==0 ) goto no_
1e430 6d 65 6d 3b 0a 20 20 70 43 78 2d 3e 6e 75 6c 6c  mem;.  pCx->null
1e440 52 6f 77 20 3d 20 31 3b 0a 20 20 70 43 78 2d 3e  Row = 1;.  pCx->
1e450 69 73 45 70 68 65 6d 65 72 61 6c 20 3d 20 31 3b  isEphemeral = 1;
1e460 0a 20 20 70 43 78 2d 3e 70 4b 65 79 49 6e 66 6f  .  pCx->pKeyInfo
1e470 20 3d 20 70 4f 72 69 67 2d 3e 70 4b 65 79 49 6e   = pOrig->pKeyIn
1e480 66 6f 3b 0a 20 20 70 43 78 2d 3e 69 73 54 61 62  fo;.  pCx->isTab
1e490 6c 65 20 3d 20 70 4f 72 69 67 2d 3e 69 73 54 61  le = pOrig->isTa
1e4a0 62 6c 65 3b 0a 20 20 70 43 78 2d 3e 70 67 6e 6f  ble;.  pCx->pgno
1e4b0 52 6f 6f 74 20 3d 20 70 4f 72 69 67 2d 3e 70 67  Root = pOrig->pg
1e4c0 6e 6f 52 6f 6f 74 3b 0a 20 20 72 63 20 3d 20 73  noRoot;.  rc = s
1e4d0 71 6c 69 74 65 33 42 74 72 65 65 43 75 72 73 6f  qlite3BtreeCurso
1e4e0 72 28 70 4f 72 69 67 2d 3e 70 42 74 78 2c 20 70  r(pOrig->pBtx, p
1e4f0 43 78 2d 3e 70 67 6e 6f 52 6f 6f 74 2c 20 42 54  Cx->pgnoRoot, BT
1e500 52 45 45 5f 57 52 43 53 52 2c 0a 20 20 20 20 20  REE_WRCSR,.     
1e510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e520 20 20 20 20 20 70 43 78 2d 3e 70 4b 65 79 49 6e       pCx->pKeyIn
1e530 66 6f 2c 20 70 43 78 2d 3e 75 63 2e 70 43 75 72  fo, pCx->uc.pCur
1e540 73 6f 72 29 3b 0a 20 20 2f 2a 20 54 68 65 20 73  sor);.  /* The s
1e550 71 6c 69 74 65 33 42 74 72 65 65 43 75 72 73 6f  qlite3BtreeCurso
1e560 72 28 29 20 72 6f 75 74 69 6e 65 20 63 61 6e 20  r() routine can 
1e570 6f 6e 6c 79 20 66 61 69 6c 20 66 6f 72 20 74 68  only fail for th
1e580 65 20 66 69 72 73 74 20 63 75 72 73 6f 72 0a 20  e first cursor. 
1e590 20 2a 2a 20 6f 70 65 6e 65 64 20 66 6f 72 20 61   ** opened for a
1e5a0 20 64 61 74 61 62 61 73 65 2e 20 20 53 69 6e 63   database.  Sinc
1e5b0 65 20 74 68 65 72 65 20 69 73 20 61 6c 72 65 61  e there is alrea
1e5c0 64 79 20 61 6e 20 6f 70 65 6e 20 63 75 72 73 6f  dy an open curso
1e5d0 72 20 77 68 65 6e 20 74 68 69 73 0a 20 20 2a 2a  r when this.  **
1e5e0 20 6f 70 63 6f 64 65 20 69 73 20 72 75 6e 2c 20   opcode is run, 
1e5f0 74 68 65 20 73 71 6c 69 74 65 33 42 74 72 65 65  the sqlite3Btree
1e600 43 75 72 73 6f 72 28 29 20 63 61 6e 6e 6f 74 20  Cursor() cannot 
1e610 66 61 69 6c 20 2a 2f 0a 20 20 61 73 73 65 72 74  fail */.  assert
1e620 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc==SQLITE_OK 
1e630 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 0a  );.  break;.}...
1e640 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f 70 65 6e 45  /* Opcode: OpenE
1e650 70 68 65 6d 65 72 61 6c 20 50 31 20 50 32 20 2a  phemeral P1 P2 *
1e660 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73   P4 P5.** Synops
1e670 69 73 3a 20 6e 43 6f 6c 75 6d 6e 3d 50 32 0a 2a  is: nColumn=P2.*
1e680 2a 0a 2a 2a 20 4f 70 65 6e 20 61 20 6e 65 77 20  *.** Open a new 
1e690 63 75 72 73 6f 72 20 50 31 20 74 6f 20 61 20 74  cursor P1 to a t
1e6a0 72 61 6e 73 69 65 6e 74 20 74 61 62 6c 65 2e 0a  ransient table..
1e6b0 2a 2a 20 54 68 65 20 63 75 72 73 6f 72 20 69 73  ** The cursor is
1e6c0 20 61 6c 77 61 79 73 20 6f 70 65 6e 65 64 20 72   always opened r
1e6d0 65 61 64 2f 77 72 69 74 65 20 65 76 65 6e 20 69  ead/write even i
1e6e0 66 20 0a 2a 2a 20 74 68 65 20 6d 61 69 6e 20 64  f .** the main d
1e6f0 61 74 61 62 61 73 65 20 69 73 20 72 65 61 64 2d  atabase is read-
1e700 6f 6e 6c 79 2e 20 20 54 68 65 20 65 70 68 65 6d  only.  The ephem
1e710 65 72 61 6c 0a 2a 2a 20 74 61 62 6c 65 20 69 73  eral.** table is
1e720 20 64 65 6c 65 74 65 64 20 61 75 74 6f 6d 61 74   deleted automat
1e730 69 63 61 6c 6c 79 20 77 68 65 6e 20 74 68 65 20  ically when the 
1e740 63 75 72 73 6f 72 20 69 73 20 63 6c 6f 73 65 64  cursor is closed
1e750 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 63  ..**.** If the c
1e760 75 72 73 6f 72 20 50 31 20 69 73 20 61 6c 72 65  ursor P1 is alre
1e770 61 64 79 20 6f 70 65 6e 65 64 20 6f 6e 20 61 6e  ady opened on an
1e780 20 65 70 68 65 6d 65 72 61 6c 20 74 61 62 6c 65   ephemeral table
1e790 2c 20 74 68 65 20 74 61 62 6c 65 0a 2a 2a 20 69  , the table.** i
1e7a0 73 20 63 6c 65 61 72 65 64 20 28 61 6c 6c 20 63  s cleared (all c
1e7b0 6f 6e 74 65 6e 74 20 69 73 20 65 72 61 73 65 64  ontent is erased
1e7c0 29 2e 0a 2a 2a 0a 2a 2a 20 50 32 20 69 73 20 74  )..**.** P2 is t
1e7d0 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c  he number of col
1e7e0 75 6d 6e 73 20 69 6e 20 74 68 65 20 65 70 68 65  umns in the ephe
1e7f0 6d 65 72 61 6c 20 74 61 62 6c 65 2e 0a 2a 2a 20  meral table..** 
1e800 54 68 65 20 63 75 72 73 6f 72 20 70 6f 69 6e 74  The cursor point
1e810 73 20 74 6f 20 61 20 42 54 72 65 65 20 74 61 62  s to a BTree tab
1e820 6c 65 20 69 66 20 50 34 3d 3d 30 20 61 6e 64 20  le if P4==0 and 
1e830 74 6f 20 61 20 42 54 72 65 65 20 69 6e 64 65 78  to a BTree index
1e840 0a 2a 2a 20 69 66 20 50 34 20 69 73 20 6e 6f 74  .** if P4 is not
1e850 20 30 2e 20 20 49 66 20 50 34 20 69 73 20 6e 6f   0.  If P4 is no
1e860 74 20 4e 55 4c 4c 2c 20 69 74 20 70 6f 69 6e 74  t NULL, it point
1e870 73 20 74 6f 20 61 20 4b 65 79 49 6e 66 6f 20 73  s to a KeyInfo s
1e880 74 72 75 63 74 75 72 65 0a 2a 2a 20 74 68 61 74  tructure.** that
1e890 20 64 65 66 69 6e 65 73 20 74 68 65 20 66 6f 72   defines the for
1e8a0 6d 61 74 20 6f 66 20 6b 65 79 73 20 69 6e 20 74  mat of keys in t
1e8b0 68 65 20 69 6e 64 65 78 2e 0a 2a 2a 0a 2a 2a 20  he index..**.** 
1e8c0 54 68 65 20 50 35 20 70 61 72 61 6d 65 74 65 72  The P5 parameter
1e8d0 20 63 61 6e 20 62 65 20 61 20 6d 61 73 6b 20 6f   can be a mask o
1e8e0 66 20 74 68 65 20 42 54 52 45 45 5f 2a 20 66 6c  f the BTREE_* fl
1e8f0 61 67 73 20 64 65 66 69 6e 65 64 0a 2a 2a 20 69  ags defined.** i
1e900 6e 20 62 74 72 65 65 2e 68 2e 20 20 54 68 65 73  n btree.h.  Thes
1e910 65 20 66 6c 61 67 73 20 63 6f 6e 74 72 6f 6c 20  e flags control 
1e920 61 73 70 65 63 74 73 20 6f 66 20 74 68 65 20 6f  aspects of the o
1e930 70 65 72 61 74 69 6f 6e 20 6f 66 0a 2a 2a 20 74  peration of.** t
1e940 68 65 20 62 74 72 65 65 2e 20 20 54 68 65 20 42  he btree.  The B
1e950 54 52 45 45 5f 4f 4d 49 54 5f 4a 4f 55 52 4e 41  TREE_OMIT_JOURNA
1e960 4c 20 61 6e 64 20 42 54 52 45 45 5f 53 49 4e 47  L and BTREE_SING
1e970 4c 45 20 66 6c 61 67 73 20 61 72 65 0a 2a 2a 20  LE flags are.** 
1e980 61 64 64 65 64 20 61 75 74 6f 6d 61 74 69 63 61  added automatica
1e990 6c 6c 79 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64  lly..*/./* Opcod
1e9a0 65 3a 20 4f 70 65 6e 41 75 74 6f 69 6e 64 65 78  e: OpenAutoindex
1e9b0 20 50 31 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a   P1 P2 * P4 *.**
1e9c0 20 53 79 6e 6f 70 73 69 73 3a 20 6e 43 6f 6c 75   Synopsis: nColu
1e9d0 6d 6e 3d 50 32 0a 2a 2a 0a 2a 2a 20 54 68 69 73  mn=P2.**.** This
1e9e0 20 6f 70 63 6f 64 65 20 77 6f 72 6b 73 20 74 68   opcode works th
1e9f0 65 20 73 61 6d 65 20 61 73 20 4f 50 5f 4f 70 65  e same as OP_Ope
1ea00 6e 45 70 68 65 6d 65 72 61 6c 2e 20 20 49 74 20  nEphemeral.  It 
1ea10 68 61 73 20 61 0a 2a 2a 20 64 69 66 66 65 72 65  has a.** differe
1ea20 6e 74 20 6e 61 6d 65 20 74 6f 20 64 69 73 74 69  nt name to disti
1ea30 6e 67 75 69 73 68 20 69 74 73 20 75 73 65 2e 20  nguish its use. 
1ea40 20 54 61 62 6c 65 73 20 63 72 65 61 74 65 64 20   Tables created 
1ea50 75 73 69 6e 67 0a 2a 2a 20 62 79 20 74 68 69 73  using.** by this
1ea60 20 6f 70 63 6f 64 65 20 77 69 6c 6c 20 62 65 20   opcode will be 
1ea70 75 73 65 64 20 66 6f 72 20 61 75 74 6f 6d 61 74  used for automat
1ea80 69 63 61 6c 6c 79 20 63 72 65 61 74 65 64 20 74  ically created t
1ea90 72 61 6e 73 69 65 6e 74 0a 2a 2a 20 69 6e 64 69  ransient.** indi
1eaa0 63 65 73 20 69 6e 20 6a 6f 69 6e 73 2e 0a 2a 2f  ces in joins..*/
1eab0 0a 63 61 73 65 20 4f 50 5f 4f 70 65 6e 41 75 74  .case OP_OpenAut
1eac0 6f 69 6e 64 65 78 3a 20 0a 63 61 73 65 20 4f 50  oindex: .case OP
1ead0 5f 4f 70 65 6e 45 70 68 65 6d 65 72 61 6c 3a 20  _OpenEphemeral: 
1eae0 7b 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a  {.  VdbeCursor *
1eaf0 70 43 78 3b 0a 20 20 4b 65 79 49 6e 66 6f 20 2a  pCx;.  KeyInfo *
1eb00 70 4b 65 79 49 6e 66 6f 3b 0a 0a 20 20 73 74 61  pKeyInfo;..  sta
1eb10 74 69 63 20 63 6f 6e 73 74 20 69 6e 74 20 76 66  tic const int vf
1eb20 73 46 6c 61 67 73 20 3d 20 0a 20 20 20 20 20 20  sFlags = .      
1eb30 53 51 4c 49 54 45 5f 4f 50 45 4e 5f 52 45 41 44  SQLITE_OPEN_READ
1eb40 57 52 49 54 45 20 7c 0a 20 20 20 20 20 20 53 51  WRITE |.      SQ
1eb50 4c 49 54 45 5f 4f 50 45 4e 5f 43 52 45 41 54 45  LITE_OPEN_CREATE
1eb60 20 7c 0a 20 20 20 20 20 20 53 51 4c 49 54 45 5f   |.      SQLITE_
1eb70 4f 50 45 4e 5f 45 58 43 4c 55 53 49 56 45 20 7c  OPEN_EXCLUSIVE |
1eb80 0a 20 20 20 20 20 20 53 51 4c 49 54 45 5f 4f 50  .      SQLITE_OP
1eb90 45 4e 5f 44 45 4c 45 54 45 4f 4e 43 4c 4f 53 45  EN_DELETEONCLOSE
1eba0 20 7c 0a 20 20 20 20 20 20 53 51 4c 49 54 45 5f   |.      SQLITE_
1ebb0 4f 50 45 4e 5f 54 52 41 4e 53 49 45 4e 54 5f 44  OPEN_TRANSIENT_D
1ebc0 42 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  B;.  assert( pOp
1ebd0 2d 3e 70 31 3e 3d 30 20 29 3b 0a 20 20 61 73 73  ->p1>=0 );.  ass
1ebe0 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e 3d 30 20  ert( pOp->p2>=0 
1ebf0 29 3b 0a 20 20 70 43 78 20 3d 20 70 2d 3e 61 70  );.  pCx = p->ap
1ec00 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Csr[pOp->p1];.  
1ec10 69 66 28 20 70 43 78 20 29 7b 0a 20 20 20 20 2f  if( pCx ){.    /
1ec20 2a 20 49 66 20 74 68 65 20 65 70 68 65 72 6d 65  * If the epherme
1ec30 72 61 6c 20 74 61 62 6c 65 20 69 73 20 61 6c 72  ral table is alr
1ec40 65 61 64 79 20 6f 70 65 6e 2c 20 65 72 61 73 65  eady open, erase
1ec50 20 61 6c 6c 20 65 78 69 73 74 69 6e 67 20 63 6f   all existing co
1ec60 6e 74 65 6e 74 0a 20 20 20 20 2a 2a 20 73 6f 20  ntent.    ** so 
1ec70 74 68 61 74 20 74 68 65 20 74 61 62 6c 65 20 69  that the table i
1ec80 73 20 65 6d 70 74 79 20 61 67 61 69 6e 2c 20 72  s empty again, r
1ec90 61 74 68 65 72 20 74 68 61 6e 20 63 72 65 61 74  ather than creat
1eca0 69 6e 67 20 61 20 6e 65 77 20 74 61 62 6c 65 2e  ing a new table.
1ecb0 20 2a 2f 0a 20 20 20 20 72 63 20 3d 20 73 71 6c   */.    rc = sql
1ecc0 69 74 65 33 42 74 72 65 65 43 6c 65 61 72 54 61  ite3BtreeClearTa
1ecd0 62 6c 65 28 70 43 78 2d 3e 70 42 74 78 2c 20 70  ble(pCx->pBtx, p
1ece0 43 78 2d 3e 70 67 6e 6f 52 6f 6f 74 2c 20 30 29  Cx->pgnoRoot, 0)
1ecf0 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70  ;.  }else{.    p
1ed00 43 78 20 3d 20 61 6c 6c 6f 63 61 74 65 43 75 72  Cx = allocateCur
1ed10 73 6f 72 28 70 2c 20 70 4f 70 2d 3e 70 31 2c 20  sor(p, pOp->p1, 
1ed20 70 4f 70 2d 3e 70 32 2c 20 2d 31 2c 20 43 55 52  pOp->p2, -1, CUR
1ed30 54 59 50 45 5f 42 54 52 45 45 29 3b 0a 20 20 20  TYPE_BTREE);.   
1ed40 20 69 66 28 20 70 43 78 3d 3d 30 20 29 20 67 6f   if( pCx==0 ) go
1ed50 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 20 20 70  to no_mem;.    p
1ed60 43 78 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 31 3b  Cx->nullRow = 1;
1ed70 0a 20 20 20 20 70 43 78 2d 3e 69 73 45 70 68 65  .    pCx->isEphe
1ed80 6d 65 72 61 6c 20 3d 20 31 3b 0a 20 20 20 20 72  meral = 1;.    r
1ed90 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
1eda0 4f 70 65 6e 28 64 62 2d 3e 70 56 66 73 2c 20 30  Open(db->pVfs, 0
1edb0 2c 20 64 62 2c 20 26 70 43 78 2d 3e 70 42 74 78  , db, &pCx->pBtx
1edc0 2c 20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  , .             
1edd0 20 20 20 20 20 20 20 20 20 20 20 20 20 42 54 52               BTR
1ede0 45 45 5f 4f 4d 49 54 5f 4a 4f 55 52 4e 41 4c 20  EE_OMIT_JOURNAL 
1edf0 7c 20 42 54 52 45 45 5f 53 49 4e 47 4c 45 20 7c  | BTREE_SINGLE |
1ee00 20 70 4f 70 2d 3e 70 35 2c 0a 20 20 20 20 20 20   pOp->p5,.      
1ee10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ee20 20 20 20 20 76 66 73 46 6c 61 67 73 29 3b 0a 20      vfsFlags);. 
1ee30 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54     if( rc==SQLIT
1ee40 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 72 63  E_OK ){.      rc
1ee50 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 42   = sqlite3BtreeB
1ee60 65 67 69 6e 54 72 61 6e 73 28 70 43 78 2d 3e 70  eginTrans(pCx->p
1ee70 42 74 78 2c 20 31 2c 20 30 29 3b 0a 20 20 20 20  Btx, 1, 0);.    
1ee80 7d 0a 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51  }.    if( rc==SQ
1ee90 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20  LITE_OK ){.     
1eea0 20 2f 2a 20 49 66 20 61 20 74 72 61 6e 73 69 65   /* If a transie
1eeb0 6e 74 20 69 6e 64 65 78 20 69 73 20 72 65 71 75  nt index is requ
1eec0 69 72 65 64 2c 20 63 72 65 61 74 65 20 69 74 20  ired, create it 
1eed0 62 79 20 63 61 6c 6c 69 6e 67 0a 20 20 20 20 20  by calling.     
1eee0 20 2a 2a 20 73 71 6c 69 74 65 33 42 74 72 65 65   ** sqlite3Btree
1eef0 43 72 65 61 74 65 54 61 62 6c 65 28 29 20 77 69  CreateTable() wi
1ef00 74 68 20 74 68 65 20 42 54 52 45 45 5f 42 4c 4f  th the BTREE_BLO
1ef10 42 4b 45 59 20 66 6c 61 67 20 62 65 66 6f 72 65  BKEY flag before
1ef20 0a 20 20 20 20 20 20 2a 2a 20 6f 70 65 6e 69 6e  .      ** openin
1ef30 67 20 69 74 2e 20 49 66 20 61 20 74 72 61 6e 73  g it. If a trans
1ef40 69 65 6e 74 20 74 61 62 6c 65 20 69 73 20 72 65  ient table is re
1ef50 71 75 69 72 65 64 2c 20 6a 75 73 74 20 75 73 65  quired, just use
1ef60 20 74 68 65 0a 20 20 20 20 20 20 2a 2a 20 61 75   the.      ** au
1ef70 74 6f 6d 61 74 69 63 61 6c 6c 79 20 63 72 65 61  tomatically crea
1ef80 74 65 64 20 74 61 62 6c 65 20 77 69 74 68 20 72  ted table with r
1ef90 6f 6f 74 2d 70 61 67 65 20 31 20 28 61 6e 20 42  oot-page 1 (an B
1efa0 4c 4f 42 5f 49 4e 54 4b 45 59 20 74 61 62 6c 65  LOB_INTKEY table
1efb0 29 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20  )..      */.    
1efc0 20 20 69 66 28 20 28 70 43 78 2d 3e 70 4b 65 79    if( (pCx->pKey
1efd0 49 6e 66 6f 20 3d 20 70 4b 65 79 49 6e 66 6f 20  Info = pKeyInfo 
1efe0 3d 20 70 4f 70 2d 3e 70 34 2e 70 4b 65 79 49 6e  = pOp->p4.pKeyIn
1eff0 66 6f 29 21 3d 30 20 29 7b 0a 20 20 20 20 20 20  fo)!=0 ){.      
1f000 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
1f010 34 74 79 70 65 3d 3d 50 34 5f 4b 45 59 49 4e 46  4type==P4_KEYINF
1f020 4f 20 29 3b 0a 20 20 20 20 20 20 20 20 72 63 20  O );.        rc 
1f030 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 72  = sqlite3BtreeCr
1f040 65 61 74 65 54 61 62 6c 65 28 70 43 78 2d 3e 70  eateTable(pCx->p
1f050 42 74 78 2c 20 28 69 6e 74 2a 29 26 70 43 78 2d  Btx, (int*)&pCx-
1f060 3e 70 67 6e 6f 52 6f 6f 74 2c 0a 20 20 20 20 20  >pgnoRoot,.     
1f070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f090 42 54 52 45 45 5f 42 4c 4f 42 4b 45 59 20 7c 20  BTREE_BLOBKEY | 
1f0a0 70 4f 70 2d 3e 70 35 29 3b 20 0a 20 20 20 20 20  pOp->p5); .     
1f0b0 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54     if( rc==SQLIT
1f0c0 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20 20  E_OK ){.        
1f0d0 20 20 61 73 73 65 72 74 28 20 70 43 78 2d 3e 70    assert( pCx->p
1f0e0 67 6e 6f 52 6f 6f 74 3d 3d 4d 41 53 54 45 52 5f  gnoRoot==MASTER_
1f0f0 52 4f 4f 54 2b 31 20 29 3b 0a 20 20 20 20 20 20  ROOT+1 );.      
1f100 20 20 20 20 61 73 73 65 72 74 28 20 70 4b 65 79      assert( pKey
1f110 49 6e 66 6f 2d 3e 64 62 3d 3d 64 62 20 29 3b 0a  Info->db==db );.
1f120 20 20 20 20 20 20 20 20 20 20 61 73 73 65 72 74            assert
1f130 28 20 70 4b 65 79 49 6e 66 6f 2d 3e 65 6e 63 3d  ( pKeyInfo->enc=
1f140 3d 45 4e 43 28 64 62 29 20 29 3b 0a 20 20 20 20  =ENC(db) );.    
1f150 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74        rc = sqlit
1f160 65 33 42 74 72 65 65 43 75 72 73 6f 72 28 70 43  e3BtreeCursor(pC
1f170 78 2d 3e 70 42 74 78 2c 20 70 43 78 2d 3e 70 67  x->pBtx, pCx->pg
1f180 6e 6f 52 6f 6f 74 2c 20 42 54 52 45 45 5f 57 52  noRoot, BTREE_WR
1f190 43 53 52 2c 0a 20 20 20 20 20 20 20 20 20 20 20  CSR,.           
1f1a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f1b0 20 20 20 20 20 20 20 70 4b 65 79 49 6e 66 6f 2c         pKeyInfo,
1f1c0 20 70 43 78 2d 3e 75 63 2e 70 43 75 72 73 6f 72   pCx->uc.pCursor
1f1d0 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20  );.        }.   
1f1e0 20 20 20 20 20 70 43 78 2d 3e 69 73 54 61 62 6c       pCx->isTabl
1f1f0 65 20 3d 20 30 3b 0a 20 20 20 20 20 20 7d 65 6c  e = 0;.      }el
1f200 73 65 7b 0a 20 20 20 20 20 20 20 20 70 43 78 2d  se{.        pCx-
1f210 3e 70 67 6e 6f 52 6f 6f 74 20 3d 20 4d 41 53 54  >pgnoRoot = MAST
1f220 45 52 5f 52 4f 4f 54 3b 0a 20 20 20 20 20 20 20  ER_ROOT;.       
1f230 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
1f240 65 65 43 75 72 73 6f 72 28 70 43 78 2d 3e 70 42  eeCursor(pCx->pB
1f250 74 78 2c 20 4d 41 53 54 45 52 5f 52 4f 4f 54 2c  tx, MASTER_ROOT,
1f260 20 42 54 52 45 45 5f 57 52 43 53 52 2c 0a 20 20   BTREE_WRCSR,.  
1f270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 30 2c                0,
1f290 20 70 43 78 2d 3e 75 63 2e 70 43 75 72 73 6f 72   pCx->uc.pCursor
1f2a0 29 3b 0a 20 20 20 20 20 20 20 20 70 43 78 2d 3e  );.        pCx->
1f2b0 69 73 54 61 62 6c 65 20 3d 20 31 3b 0a 20 20 20  isTable = 1;.   
1f2c0 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 70     }.    }.    p
1f2d0 43 78 2d 3e 69 73 4f 72 64 65 72 65 64 20 3d 20  Cx->isOrdered = 
1f2e0 28 70 4f 70 2d 3e 70 35 21 3d 42 54 52 45 45 5f  (pOp->p5!=BTREE_
1f2f0 55 4e 4f 52 44 45 52 45 44 29 3b 0a 20 20 7d 0a  UNORDERED);.  }.
1f300 20 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20    if( rc ) goto 
1f310 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
1f320 6f 72 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  or;.  break;.}..
1f330 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 6f 72 74 65  /* Opcode: Sorte
1f340 72 4f 70 65 6e 20 50 31 20 50 32 20 50 33 20 50  rOpen P1 P2 P3 P
1f350 34 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f  4 *.**.** This o
1f360 70 63 6f 64 65 20 77 6f 72 6b 73 20 6c 69 6b 65  pcode works like
1f370 20 4f 50 5f 4f 70 65 6e 45 70 68 65 6d 65 72 61   OP_OpenEphemera
1f380 6c 20 65 78 63 65 70 74 20 74 68 61 74 20 69 74  l except that it
1f390 20 6f 70 65 6e 73 0a 2a 2a 20 61 20 74 72 61 6e   opens.** a tran
1f3a0 73 69 65 6e 74 20 69 6e 64 65 78 20 74 68 61 74  sient index that
1f3b0 20 69 73 20 73 70 65 63 69 66 69 63 61 6c 6c 79   is specifically
1f3c0 20 64 65 73 69 67 6e 65 64 20 74 6f 20 73 6f 72   designed to sor
1f3d0 74 20 6c 61 72 67 65 0a 2a 2a 20 74 61 62 6c 65  t large.** table
1f3e0 73 20 75 73 69 6e 67 20 61 6e 20 65 78 74 65 72  s using an exter
1f3f0 6e 61 6c 20 6d 65 72 67 65 2d 73 6f 72 74 20 61  nal merge-sort a
1f400 6c 67 6f 72 69 74 68 6d 2e 0a 2a 2a 0a 2a 2a 20  lgorithm..**.** 
1f410 49 66 20 61 72 67 75 6d 65 6e 74 20 50 33 20 69  If argument P3 i
1f420 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65 6e  s non-zero, then
1f430 20 69 74 20 69 6e 64 69 63 61 74 65 73 20 74 68   it indicates th
1f440 61 74 20 74 68 65 20 73 6f 72 74 65 72 20 6d 61  at the sorter ma
1f450 79 0a 2a 2a 20 61 73 73 75 6d 65 20 74 68 61 74  y.** assume that
1f460 20 61 20 73 74 61 62 6c 65 20 73 6f 72 74 20 63   a stable sort c
1f470 6f 6e 73 69 64 65 72 69 6e 67 20 74 68 65 20 66  onsidering the f
1f480 69 72 73 74 20 50 33 20 66 69 65 6c 64 73 20 6f  irst P3 fields o
1f490 66 20 65 61 63 68 0a 2a 2a 20 6b 65 79 20 69 73  f each.** key is
1f4a0 20 73 75 66 66 69 63 69 65 6e 74 20 74 6f 20 70   sufficient to p
1f4b0 72 6f 64 75 63 65 20 74 68 65 20 72 65 71 75 69  roduce the requi
1f4c0 72 65 64 20 72 65 73 75 6c 74 73 2e 0a 2a 2f 0a  red results..*/.
1f4d0 63 61 73 65 20 4f 50 5f 53 6f 72 74 65 72 4f 70  case OP_SorterOp
1f4e0 65 6e 3a 20 7b 0a 20 20 56 64 62 65 43 75 72 73  en: {.  VdbeCurs
1f4f0 6f 72 20 2a 70 43 78 3b 0a 0a 20 20 61 73 73 65  or *pCx;..  asse
1f500 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 29  rt( pOp->p1>=0 )
1f510 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
1f520 3e 70 32 3e 3d 30 20 29 3b 0a 20 20 70 43 78 20  >p2>=0 );.  pCx 
1f530 3d 20 61 6c 6c 6f 63 61 74 65 43 75 72 73 6f 72  = allocateCursor
1f540 28 70 2c 20 70 4f 70 2d 3e 70 31 2c 20 70 4f 70  (p, pOp->p1, pOp
1f550 2d 3e 70 32 2c 20 2d 31 2c 20 43 55 52 54 59 50  ->p2, -1, CURTYP
1f560 45 5f 53 4f 52 54 45 52 29 3b 0a 20 20 69 66 28  E_SORTER);.  if(
1f570 20 70 43 78 3d 3d 30 20 29 20 67 6f 74 6f 20 6e   pCx==0 ) goto n
1f580 6f 5f 6d 65 6d 3b 0a 20 20 70 43 78 2d 3e 70 4b  o_mem;.  pCx->pK
1f590 65 79 49 6e 66 6f 20 3d 20 70 4f 70 2d 3e 70 34  eyInfo = pOp->p4
1f5a0 2e 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 61 73 73  .pKeyInfo;.  ass
1f5b0 65 72 74 28 20 70 43 78 2d 3e 70 4b 65 79 49 6e  ert( pCx->pKeyIn
1f5c0 66 6f 2d 3e 64 62 3d 3d 64 62 20 29 3b 0a 20 20  fo->db==db );.  
1f5d0 61 73 73 65 72 74 28 20 70 43 78 2d 3e 70 4b 65  assert( pCx->pKe
1f5e0 79 49 6e 66 6f 2d 3e 65 6e 63 3d 3d 45 4e 43 28  yInfo->enc==ENC(
1f5f0 64 62 29 20 29 3b 0a 20 20 72 63 20 3d 20 73 71  db) );.  rc = sq
1f600 6c 69 74 65 33 56 64 62 65 53 6f 72 74 65 72 49  lite3VdbeSorterI
1f610 6e 69 74 28 64 62 2c 20 70 4f 70 2d 3e 70 33 2c  nit(db, pOp->p3,
1f620 20 70 43 78 29 3b 0a 20 20 69 66 28 20 72 63 20   pCx);.  if( rc 
1f630 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65  ) goto abort_due
1f640 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 62 72 65  _to_error;.  bre
1f650 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
1f660 3a 20 53 65 71 75 65 6e 63 65 54 65 73 74 20 50  : SequenceTest P
1f670 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79  1 P2 * * *.** Sy
1f680 6e 6f 70 73 69 73 3a 20 69 66 28 20 63 75 72 73  nopsis: if( curs
1f690 6f 72 5b 50 31 5d 2e 63 74 72 2b 2b 20 29 20 70  or[P1].ctr++ ) p
1f6a0 63 20 3d 20 50 32 0a 2a 2a 0a 2a 2a 20 50 31 20  c = P2.**.** P1 
1f6b0 69 73 20 61 20 73 6f 72 74 65 72 20 63 75 72 73  is a sorter curs
1f6c0 6f 72 2e 20 49 66 20 74 68 65 20 73 65 71 75 65  or. If the seque
1f6d0 6e 63 65 20 63 6f 75 6e 74 65 72 20 69 73 20 63  nce counter is c
1f6e0 75 72 72 65 6e 74 6c 79 20 7a 65 72 6f 2c 20 6a  urrently zero, j
1f6f0 75 6d 70 0a 2a 2a 20 74 6f 20 50 32 2e 20 52 65  ump.** to P2. Re
1f700 67 61 72 64 6c 65 73 73 20 6f 66 20 77 68 65 74  gardless of whet
1f710 68 65 72 20 6f 72 20 6e 6f 74 20 74 68 65 20 6a  her or not the j
1f720 75 6d 70 20 69 73 20 74 61 6b 65 6e 2c 20 69 6e  ump is taken, in
1f730 63 72 65 6d 65 6e 74 20 74 68 65 0a 2a 2a 20 74  crement the.** t
1f740 68 65 20 73 65 71 75 65 6e 63 65 20 76 61 6c 75  he sequence valu
1f750 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 65  e..*/.case OP_Se
1f760 71 75 65 6e 63 65 54 65 73 74 3a 20 7b 0a 20 20  quenceTest: {.  
1f770 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a  VdbeCursor *pC;.
1f780 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
1f790 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c  1>=0 && pOp->p1<
1f7a0 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20  p->nCursor );.  
1f7b0 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f  pC = p->apCsr[pO
1f7c0 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74  p->p1];.  assert
1f7d0 28 20 69 73 53 6f 72 74 65 72 28 70 43 29 20 29  ( isSorter(pC) )
1f7e0 3b 0a 20 20 69 66 28 20 28 70 43 2d 3e 73 65 71  ;.  if( (pC->seq
1f7f0 43 6f 75 6e 74 2b 2b 29 3d 3d 30 20 29 7b 0a 20  Count++)==0 ){. 
1f800 20 20 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f     goto jump_to_
1f810 70 32 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  p2;.  }.  break;
1f820 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f  .}../* Opcode: O
1f830 70 65 6e 50 73 65 75 64 6f 20 50 31 20 50 32 20  penPseudo P1 P2 
1f840 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73  P3 * *.** Synops
1f850 69 73 3a 20 50 33 20 63 6f 6c 75 6d 6e 73 20 69  is: P3 columns i
1f860 6e 20 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20 4f 70  n r[P2].**.** Op
1f870 65 6e 20 61 20 6e 65 77 20 63 75 72 73 6f 72 20  en a new cursor 
1f880 74 68 61 74 20 70 6f 69 6e 74 73 20 74 6f 20 61  that points to a
1f890 20 66 61 6b 65 20 74 61 62 6c 65 20 74 68 61 74   fake table that
1f8a0 20 63 6f 6e 74 61 69 6e 73 20 61 20 73 69 6e 67   contains a sing
1f8b0 6c 65 0a 2a 2a 20 72 6f 77 20 6f 66 20 64 61 74  le.** row of dat
1f8c0 61 2e 20 20 54 68 65 20 63 6f 6e 74 65 6e 74 20  a.  The content 
1f8d0 6f 66 20 74 68 61 74 20 6f 6e 65 20 72 6f 77 20  of that one row 
1f8e0 69 73 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f  is the content o
1f8f0 66 20 6d 65 6d 6f 72 79 0a 2a 2a 20 72 65 67 69  f memory.** regi
1f900 73 74 65 72 20 50 32 2e 20 20 49 6e 20 6f 74 68  ster P2.  In oth
1f910 65 72 20 77 6f 72 64 73 2c 20 63 75 72 73 6f 72  er words, cursor
1f920 20 50 31 20 62 65 63 6f 6d 65 73 20 61 6e 20 61   P1 becomes an a
1f930 6c 69 61 73 20 66 6f 72 20 74 68 65 20 0a 2a 2a  lias for the .**
1f940 20 4d 45 4d 5f 42 6c 6f 62 20 63 6f 6e 74 65 6e   MEM_Blob conten
1f950 74 20 63 6f 6e 74 61 69 6e 65 64 20 69 6e 20 72  t contained in r
1f960 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a  egister P2..**.*
1f970 2a 20 41 20 70 73 65 75 64 6f 2d 74 61 62 6c 65  * A pseudo-table
1f980 20 63 72 65 61 74 65 64 20 62 79 20 74 68 69 73   created by this
1f990 20 6f 70 63 6f 64 65 20 69 73 20 75 73 65 64 20   opcode is used 
1f9a0 74 6f 20 68 6f 6c 64 20 61 20 73 69 6e 67 6c 65  to hold a single
1f9b0 0a 2a 2a 20 72 6f 77 20 6f 75 74 70 75 74 20 66  .** row output f
1f9c0 72 6f 6d 20 74 68 65 20 73 6f 72 74 65 72 20 73  rom the sorter s
1f9d0 6f 20 74 68 61 74 20 74 68 65 20 72 6f 77 20 63  o that the row c
1f9e0 61 6e 20 62 65 20 64 65 63 6f 6d 70 6f 73 65 64  an be decomposed
1f9f0 20 69 6e 74 6f 0a 2a 2a 20 69 6e 64 69 76 69 64   into.** individ
1fa00 75 61 6c 20 63 6f 6c 75 6d 6e 73 20 75 73 69 6e  ual columns usin
1fa10 67 20 74 68 65 20 4f 50 5f 43 6f 6c 75 6d 6e 20  g the OP_Column 
1fa20 6f 70 63 6f 64 65 2e 20 20 54 68 65 20 4f 50 5f  opcode.  The OP_
1fa30 43 6f 6c 75 6d 6e 20 6f 70 63 6f 64 65 0a 2a 2a  Column opcode.**
1fa40 20 69 73 20 74 68 65 20 6f 6e 6c 79 20 63 75 72   is the only cur
1fa50 73 6f 72 20 6f 70 63 6f 64 65 20 74 68 61 74 20  sor opcode that 
1fa60 77 6f 72 6b 73 20 77 69 74 68 20 61 20 70 73 65  works with a pse
1fa70 75 64 6f 2d 74 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a  udo-table..**.**
1fa80 20 50 33 20 69 73 20 74 68 65 20 6e 75 6d 62 65   P3 is the numbe
1fa90 72 20 6f 66 20 66 69 65 6c 64 73 20 69 6e 20 74  r of fields in t
1faa0 68 65 20 72 65 63 6f 72 64 73 20 74 68 61 74 20  he records that 
1fab0 77 69 6c 6c 20 62 65 20 73 74 6f 72 65 64 20 62  will be stored b
1fac0 79 0a 2a 2a 20 74 68 65 20 70 73 65 75 64 6f 2d  y.** the pseudo-
1fad0 74 61 62 6c 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f  table..*/.case O
1fae0 50 5f 4f 70 65 6e 50 73 65 75 64 6f 3a 20 7b 0a  P_OpenPseudo: {.
1faf0 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43    VdbeCursor *pC
1fb00 78 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f  x;..  assert( pO
1fb10 70 2d 3e 70 31 3e 3d 30 20 29 3b 0a 20 20 61 73  p->p1>=0 );.  as
1fb20 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 3d 30  sert( pOp->p3>=0
1fb30 20 29 3b 0a 20 20 70 43 78 20 3d 20 61 6c 6c 6f   );.  pCx = allo
1fb40 63 61 74 65 43 75 72 73 6f 72 28 70 2c 20 70 4f  cateCursor(p, pO
1fb50 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70 33 2c 20  p->p1, pOp->p3, 
1fb60 2d 31 2c 20 43 55 52 54 59 50 45 5f 50 53 45 55  -1, CURTYPE_PSEU
1fb70 44 4f 29 3b 0a 20 20 69 66 28 20 70 43 78 3d 3d  DO);.  if( pCx==
1fb80 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b  0 ) goto no_mem;
1fb90 0a 20 20 70 43 78 2d 3e 6e 75 6c 6c 52 6f 77 20  .  pCx->nullRow 
1fba0 3d 20 31 3b 0a 20 20 70 43 78 2d 3e 73 65 65 6b  = 1;.  pCx->seek
1fbb0 52 65 73 75 6c 74 20 3d 20 70 4f 70 2d 3e 70 32  Result = pOp->p2
1fbc0 3b 0a 20 20 70 43 78 2d 3e 69 73 54 61 62 6c 65  ;.  pCx->isTable
1fbd0 20 3d 20 31 3b 0a 20 20 2f 2a 20 47 69 76 65 20   = 1;.  /* Give 
1fbe0 74 68 69 73 20 70 73 65 75 64 6f 2d 63 75 72 73  this pseudo-curs
1fbf0 6f 72 20 61 20 66 61 6b 65 20 42 74 43 75 72 73  or a fake BtCurs
1fc00 6f 72 20 70 6f 69 6e 74 65 72 20 73 6f 20 74 68  or pointer so th
1fc10 61 74 20 70 43 78 0a 20 20 2a 2a 20 63 61 6e 20  at pCx.  ** can 
1fc20 62 65 20 73 61 66 65 6c 79 20 70 61 73 73 65 64  be safely passed
1fc30 20 74 6f 20 73 71 6c 69 74 65 33 56 64 62 65 43   to sqlite3VdbeC
1fc40 75 72 73 6f 72 4d 6f 76 65 74 6f 28 29 2e 20 20  ursorMoveto().  
1fc50 54 68 69 73 20 61 76 6f 69 64 73 20 61 20 74 65  This avoids a te
1fc60 73 74 0a 20 20 2a 2a 20 66 6f 72 20 70 43 78 2d  st.  ** for pCx-
1fc70 3e 65 43 75 72 54 79 70 65 3d 3d 43 55 52 54 59  >eCurType==CURTY
1fc80 50 45 5f 42 54 52 45 45 20 69 6e 73 69 64 65 20  PE_BTREE inside 
1fc90 6f 66 20 73 71 6c 69 74 65 33 56 64 62 65 43 75  of sqlite3VdbeCu
1fca0 72 73 6f 72 4d 6f 76 65 74 6f 28 29 0a 20 20 2a  rsorMoveto().  *
1fcb0 2a 20 77 68 69 63 68 20 69 73 20 61 20 70 65 72  * which is a per
1fcc0 66 6f 72 6d 61 6e 63 65 20 6f 70 74 69 6d 69 7a  formance optimiz
1fcd0 61 74 69 6f 6e 20 2a 2f 0a 20 20 70 43 78 2d 3e  ation */.  pCx->
1fce0 75 63 2e 70 43 75 72 73 6f 72 20 3d 20 73 71 6c  uc.pCursor = sql
1fcf0 69 74 65 33 42 74 72 65 65 46 61 6b 65 56 61 6c  ite3BtreeFakeVal
1fd00 69 64 43 75 72 73 6f 72 28 29 3b 0a 20 20 61 73  idCursor();.  as
1fd10 73 65 72 74 28 20 70 4f 70 2d 3e 70 35 3d 3d 30  sert( pOp->p5==0
1fd20 20 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a   );.  break;.}..
1fd30 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6c 6f 73 65  /* Opcode: Close
1fd40 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a   P1 * * * *.**.*
1fd50 2a 20 43 6c 6f 73 65 20 61 20 63 75 72 73 6f 72  * Close a cursor
1fd60 20 70 72 65 76 69 6f 75 73 6c 79 20 6f 70 65 6e   previously open
1fd70 65 64 20 61 73 20 50 31 2e 20 20 49 66 20 50 31  ed as P1.  If P1
1fd80 20 69 73 20 6e 6f 74 0a 2a 2a 20 63 75 72 72 65   is not.** curre
1fd90 6e 74 6c 79 20 6f 70 65 6e 2c 20 74 68 69 73 20  ntly open, this 
1fda0 69 6e 73 74 72 75 63 74 69 6f 6e 20 69 73 20 61  instruction is a
1fdb0 20 6e 6f 2d 6f 70 2e 0a 2a 2f 0a 63 61 73 65 20   no-op..*/.case 
1fdc0 4f 50 5f 43 6c 6f 73 65 3a 20 7b 0a 20 20 61 73  OP_Close: {.  as
1fdd0 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30  sert( pOp->p1>=0
1fde0 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e   && pOp->p1<p->n
1fdf0 43 75 72 73 6f 72 20 29 3b 0a 20 20 73 71 6c 69  Cursor );.  sqli
1fe00 74 65 33 56 64 62 65 46 72 65 65 43 75 72 73 6f  te3VdbeFreeCurso
1fe10 72 28 70 2c 20 70 2d 3e 61 70 43 73 72 5b 70 4f  r(p, p->apCsr[pO
1fe20 70 2d 3e 70 31 5d 29 3b 0a 20 20 70 2d 3e 61 70  p->p1]);.  p->ap
1fe30 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 20 3d 20 30  Csr[pOp->p1] = 0
1fe40 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 23 69  ;.  break;.}..#i
1fe50 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42  fdef SQLITE_ENAB
1fe60 4c 45 5f 43 4f 4c 55 4d 4e 5f 55 53 45 44 5f 4d  LE_COLUMN_USED_M
1fe70 41 53 4b 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43  ASK./* Opcode: C
1fe80 6f 6c 75 6d 6e 73 55 73 65 64 20 50 31 20 2a 20  olumnsUsed P1 * 
1fe90 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 69  * P4 *.**.** Thi
1fea0 73 20 6f 70 63 6f 64 65 20 28 77 68 69 63 68 20  s opcode (which 
1feb0 6f 6e 6c 79 20 65 78 69 73 74 73 20 69 66 20 53  only exists if S
1fec0 51 4c 69 74 65 20 77 61 73 20 63 6f 6d 70 69 6c  QLite was compil
1fed0 65 64 20 77 69 74 68 0a 2a 2a 20 53 51 4c 49 54  ed with.** SQLIT
1fee0 45 5f 45 4e 41 42 4c 45 5f 43 4f 4c 55 4d 4e 5f  E_ENABLE_COLUMN_
1fef0 55 53 45 44 5f 4d 41 53 4b 29 20 69 64 65 6e 74  USED_MASK) ident
1ff00 69 66 69 65 73 20 77 68 69 63 68 20 63 6f 6c 75  ifies which colu
1ff10 6d 6e 73 20 6f 66 20 74 68 65 0a 2a 2a 20 74 61  mns of the.** ta
1ff20 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 66 6f 72  ble or index for
1ff30 20 63 75 72 73 6f 72 20 50 31 20 61 72 65 20 75   cursor P1 are u
1ff40 73 65 64 2e 20 20 50 34 20 69 73 20 61 20 36 34  sed.  P4 is a 64
1ff50 2d 62 69 74 20 69 6e 74 65 67 65 72 0a 2a 2a 20  -bit integer.** 
1ff60 28 50 34 5f 49 4e 54 36 34 29 20 69 6e 20 77 68  (P4_INT64) in wh
1ff70 69 63 68 20 74 68 65 20 66 69 72 73 74 20 36 33  ich the first 63
1ff80 20 62 69 74 73 20 61 72 65 20 6f 6e 65 20 66 6f   bits are one fo
1ff90 72 20 65 61 63 68 20 6f 66 20 74 68 65 0a 2a 2a  r each of the.**
1ffa0 20 66 69 72 73 74 20 36 33 20 63 6f 6c 75 6d 6e   first 63 column
1ffb0 73 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 6f  s of the table o
1ffc0 72 20 69 6e 64 65 78 20 74 68 61 74 20 61 72 65  r index that are
1ffd0 20 61 63 74 75 61 6c 6c 79 20 75 73 65 64 0a 2a   actually used.*
1ffe0 2a 20 62 79 20 74 68 65 20 63 75 72 73 6f 72 2e  * by the cursor.
1fff0 20 20 54 68 65 20 68 69 67 68 2d 6f 72 64 65 72    The high-order
20000 20 62 69 74 20 69 73 20 73 65 74 20 69 66 20 61   bit is set if a
20010 6e 79 20 63 6f 6c 75 6d 6e 20 61 66 74 65 72 0a  ny column after.
20020 2a 2a 20 74 68 65 20 36 34 74 68 20 69 73 20 75  ** the 64th is u
20030 73 65 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  sed..*/.case OP_
20040 43 6f 6c 75 6d 6e 73 55 73 65 64 3a 20 7b 0a 20  ColumnsUsed: {. 
20050 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b   VdbeCursor *pC;
20060 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72  .  pC = p->apCsr
20070 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
20080 65 72 74 28 20 70 43 2d 3e 65 43 75 72 54 79 70  ert( pC->eCurTyp
20090 65 3d 3d 43 55 52 54 59 50 45 5f 42 54 52 45 45  e==CURTYPE_BTREE
200a0 20 29 3b 0a 20 20 70 43 2d 3e 6d 61 73 6b 55 73   );.  pC->maskUs
200b0 65 64 20 3d 20 2a 28 75 36 34 2a 29 70 4f 70 2d  ed = *(u64*)pOp-
200c0 3e 70 34 2e 70 49 36 34 3b 0a 20 20 62 72 65 61  >p4.pI64;.  brea
200d0 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20  k;.}.#endif../* 
200e0 4f 70 63 6f 64 65 3a 20 53 65 65 6b 47 45 20 50  Opcode: SeekGE P
200f0 31 20 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a 20  1 P2 P3 P4 *.** 
20100 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b  Synopsis: key=r[
20110 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 49 66 20  P3@P4].**.** If 
20120 63 75 72 73 6f 72 20 50 31 20 72 65 66 65 72 73  cursor P1 refers
20130 20 74 6f 20 61 6e 20 53 51 4c 20 74 61 62 6c 65   to an SQL table
20140 20 28 42 2d 54 72 65 65 20 74 68 61 74 20 75 73   (B-Tree that us
20150 65 73 20 69 6e 74 65 67 65 72 20 6b 65 79 73 29  es integer keys)
20160 2c 20 0a 2a 2a 20 75 73 65 20 74 68 65 20 76 61  , .** use the va
20170 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  lue in register 
20180 50 33 20 61 73 20 74 68 65 20 6b 65 79 2e 20 20  P3 as the key.  
20190 49 66 20 63 75 72 73 6f 72 20 50 31 20 72 65 66  If cursor P1 ref
201a0 65 72 73 20 0a 2a 2a 20 74 6f 20 61 6e 20 53 51  ers .** to an SQ
201b0 4c 20 69 6e 64 65 78 2c 20 74 68 65 6e 20 50 33  L index, then P3
201c0 20 69 73 20 74 68 65 20 66 69 72 73 74 20 69 6e   is the first in
201d0 20 61 6e 20 61 72 72 61 79 20 6f 66 20 50 34 20   an array of P4 
201e0 72 65 67 69 73 74 65 72 73 20 0a 2a 2a 20 74 68  registers .** th
201f0 61 74 20 61 72 65 20 75 73 65 64 20 61 73 20 61  at are used as a
20200 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e 64 65 78  n unpacked index
20210 20 6b 65 79 2e 20 0a 2a 2a 0a 2a 2a 20 52 65 70   key. .**.** Rep
20220 6f 73 69 74 69 6f 6e 20 63 75 72 73 6f 72 20 50  osition cursor P
20230 31 20 73 6f 20 74 68 61 74 20 20 69 74 20 70 6f  1 so that  it po
20240 69 6e 74 73 20 74 6f 20 74 68 65 20 73 6d 61 6c  ints to the smal
20250 6c 65 73 74 20 65 6e 74 72 79 20 74 68 61 74 20  lest entry that 
20260 0a 2a 2a 20 69 73 20 67 72 65 61 74 65 72 20 74  .** is greater t
20270 68 61 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f 20  han or equal to 
20280 74 68 65 20 6b 65 79 20 76 61 6c 75 65 2e 20 49  the key value. I
20290 66 20 74 68 65 72 65 20 61 72 65 20 6e 6f 20 72  f there are no r
202a0 65 63 6f 72 64 73 20 0a 2a 2a 20 67 72 65 61 74  ecords .** great
202b0 65 72 20 74 68 61 6e 20 6f 72 20 65 71 75 61 6c  er than or equal
202c0 20 74 6f 20 74 68 65 20 6b 65 79 20 61 6e 64 20   to the key and 
202d0 50 32 20 69 73 20 6e 6f 74 20 7a 65 72 6f 2c 20  P2 is not zero, 
202e0 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20 50 32 2e  then jump to P2.
202f0 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 63 75  .**.** If the cu
20300 72 73 6f 72 20 50 31 20 77 61 73 20 6f 70 65 6e  rsor P1 was open
20310 65 64 20 75 73 69 6e 67 20 74 68 65 20 4f 50 46  ed using the OPF
20320 4c 41 47 5f 53 45 45 4b 45 51 20 66 6c 61 67 2c  LAG_SEEKEQ flag,
20330 20 74 68 65 6e 20 74 68 69 73 0a 2a 2a 20 6f 70   then this.** op
20340 63 6f 64 65 20 77 69 6c 6c 20 61 6c 77 61 79 73  code will always
20350 20 6c 61 6e 64 20 6f 6e 20 61 20 72 65 63 6f 72   land on a recor
20360 64 20 74 68 61 74 20 65 71 75 61 6c 6c 79 20 65  d that equally e
20370 71 75 61 6c 73 20 74 68 65 20 6b 65 79 2c 20 6f  quals the key, o
20380 72 0a 2a 2a 20 65 6c 73 65 20 6a 75 6d 70 20 69  r.** else jump i
20390 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f 20 50 32  mmediately to P2
203a0 2e 20 20 57 68 65 6e 20 74 68 65 20 63 75 72 73  .  When the curs
203b0 6f 72 20 69 73 20 4f 50 46 4c 41 47 5f 53 45 45  or is OPFLAG_SEE
203c0 4b 45 51 2c 20 74 68 69 73 0a 2a 2a 20 6f 70 63  KEQ, this.** opc
203d0 6f 64 65 20 6d 75 73 74 20 62 65 20 66 6f 6c 6c  ode must be foll
203e0 6f 77 65 64 20 62 79 20 61 6e 20 49 64 78 4c 45  owed by an IdxLE
203f0 20 6f 70 63 6f 64 65 20 77 69 74 68 20 74 68 65   opcode with the
20400 20 73 61 6d 65 20 61 72 67 75 6d 65 6e 74 73 2e   same arguments.
20410 0a 2a 2a 20 54 68 65 20 49 64 78 4c 45 20 6f 70  .** The IdxLE op
20420 63 6f 64 65 20 77 69 6c 6c 20 62 65 20 73 6b 69  code will be ski
20430 70 70 65 64 20 69 66 20 74 68 69 73 20 6f 70 63  pped if this opc
20440 6f 64 65 20 73 75 63 63 65 65 64 73 2c 20 62 75  ode succeeds, bu
20450 74 20 74 68 65 0a 2a 2a 20 49 64 78 4c 45 20 6f  t the.** IdxLE o
20460 70 63 6f 64 65 20 77 69 6c 6c 20 62 65 20 75 73  pcode will be us
20470 65 64 20 6f 6e 20 73 75 62 73 65 71 75 65 6e 74  ed on subsequent
20480 20 6c 6f 6f 70 20 69 74 65 72 61 74 69 6f 6e 73   loop iterations
20490 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63  ..**.** This opc
204a0 6f 64 65 20 6c 65 61 76 65 73 20 74 68 65 20 63  ode leaves the c
204b0 75 72 73 6f 72 20 63 6f 6e 66 69 67 75 72 65 64  ursor configured
204c0 20 74 6f 20 6d 6f 76 65 20 69 6e 20 66 6f 72 77   to move in forw
204d0 61 72 64 20 6f 72 64 65 72 2c 0a 2a 2a 20 66 72  ard order,.** fr
204e0 6f 6d 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67  om the beginning
204f0 20 74 6f 77 61 72 64 20 74 68 65 20 65 6e 64 2e   toward the end.
20500 20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73    In other words
20510 2c 20 74 68 65 20 63 75 72 73 6f 72 20 69 73 0a  , the cursor is.
20520 2a 2a 20 63 6f 6e 66 69 67 75 72 65 64 20 74 6f  ** configured to
20530 20 75 73 65 20 4e 65 78 74 2c 20 6e 6f 74 20 50   use Next, not P
20540 72 65 76 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61  rev..**.** See a
20550 6c 73 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f 74 46  lso: Found, NotF
20560 6f 75 6e 64 2c 20 53 65 65 6b 4c 74 2c 20 53 65  ound, SeekLt, Se
20570 65 6b 47 74 2c 20 53 65 65 6b 4c 65 0a 2a 2f 0a  ekGt, SeekLe.*/.
20580 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 65 65 6b 47  /* Opcode: SeekG
20590 54 20 50 31 20 50 32 20 50 33 20 50 34 20 2a 0a  T P1 P2 P3 P4 *.
205a0 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79  ** Synopsis: key
205b0 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20  =r[P3@P4].**.** 
205c0 49 66 20 63 75 72 73 6f 72 20 50 31 20 72 65 66  If cursor P1 ref
205d0 65 72 73 20 74 6f 20 61 6e 20 53 51 4c 20 74 61  ers to an SQL ta
205e0 62 6c 65 20 28 42 2d 54 72 65 65 20 74 68 61 74  ble (B-Tree that
205f0 20 75 73 65 73 20 69 6e 74 65 67 65 72 20 6b 65   uses integer ke
20600 79 73 29 2c 20 0a 2a 2a 20 75 73 65 20 74 68 65  ys), .** use the
20610 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
20620 65 72 20 50 33 20 61 73 20 61 20 6b 65 79 2e 20  er P3 as a key. 
20630 49 66 20 63 75 72 73 6f 72 20 50 31 20 72 65 66  If cursor P1 ref
20640 65 72 73 20 0a 2a 2a 20 74 6f 20 61 6e 20 53 51  ers .** to an SQ
20650 4c 20 69 6e 64 65 78 2c 20 74 68 65 6e 20 50 33  L index, then P3
20660 20 69 73 20 74 68 65 20 66 69 72 73 74 20 69 6e   is the first in
20670 20 61 6e 20 61 72 72 61 79 20 6f 66 20 50 34 20   an array of P4 
20680 72 65 67 69 73 74 65 72 73 20 0a 2a 2a 20 74 68  registers .** th
20690 61 74 20 61 72 65 20 75 73 65 64 20 61 73 20 61  at are used as a
206a0 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e 64 65 78  n unpacked index
206b0 20 6b 65 79 2e 20 0a 2a 2a 0a 2a 2a 20 52 65 70   key. .**.** Rep
206c0 6f 73 69 74 69 6f 6e 20 63 75 72 73 6f 72 20 50  osition cursor P
206d0 31 20 73 6f 20 74 68 61 74 20 20 69 74 20 70 6f  1 so that  it po
206e0 69 6e 74 73 20 74 6f 20 74 68 65 20 73 6d 61 6c  ints to the smal
206f0 6c 65 73 74 20 65 6e 74 72 79 20 74 68 61 74 20  lest entry that 
20700 0a 2a 2a 20 69 73 20 67 72 65 61 74 65 72 20 74  .** is greater t
20710 68 61 6e 20 74 68 65 20 6b 65 79 20 76 61 6c 75  han the key valu
20720 65 2e 20 49 66 20 74 68 65 72 65 20 61 72 65 20  e. If there are 
20730 6e 6f 20 72 65 63 6f 72 64 73 20 67 72 65 61 74  no records great
20740 65 72 20 74 68 61 6e 20 0a 2a 2a 20 74 68 65 20  er than .** the 
20750 6b 65 79 20 61 6e 64 20 50 32 20 69 73 20 6e 6f  key and P2 is no
20760 74 20 7a 65 72 6f 2c 20 74 68 65 6e 20 6a 75 6d  t zero, then jum
20770 70 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54  p to P2..**.** T
20780 68 69 73 20 6f 70 63 6f 64 65 20 6c 65 61 76 65  his opcode leave
20790 73 20 74 68 65 20 63 75 72 73 6f 72 20 63 6f 6e  s the cursor con
207a0 66 69 67 75 72 65 64 20 74 6f 20 6d 6f 76 65 20  figured to move 
207b0 69 6e 20 66 6f 72 77 61 72 64 20 6f 72 64 65 72  in forward order
207c0 2c 0a 2a 2a 20 66 72 6f 6d 20 74 68 65 20 62 65  ,.** from the be
207d0 67 69 6e 6e 69 6e 67 20 74 6f 77 61 72 64 20 74  ginning toward t
207e0 68 65 20 65 6e 64 2e 20 20 49 6e 20 6f 74 68 65  he end.  In othe
207f0 72 20 77 6f 72 64 73 2c 20 74 68 65 20 63 75 72  r words, the cur
20800 73 6f 72 20 69 73 0a 2a 2a 20 63 6f 6e 66 69 67  sor is.** config
20810 75 72 65 64 20 74 6f 20 75 73 65 20 4e 65 78 74  ured to use Next
20820 2c 20 6e 6f 74 20 50 72 65 76 2e 0a 2a 2a 0a 2a  , not Prev..**.*
20830 2a 20 53 65 65 20 61 6c 73 6f 3a 20 46 6f 75 6e  * See also: Foun
20840 64 2c 20 4e 6f 74 46 6f 75 6e 64 2c 20 53 65 65  d, NotFound, See
20850 6b 4c 74 2c 20 53 65 65 6b 47 65 2c 20 53 65 65  kLt, SeekGe, See
20860 6b 4c 65 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65  kLe.*/./* Opcode
20870 3a 20 53 65 65 6b 4c 54 20 50 31 20 50 32 20 50  : SeekLT P1 P2 P
20880 33 20 50 34 20 2a 20 0a 2a 2a 20 53 79 6e 6f 70  3 P4 * .** Synop
20890 73 69 73 3a 20 6b 65 79 3d 72 5b 50 33 40 50 34  sis: key=r[P3@P4
208a0 5d 0a 2a 2a 0a 2a 2a 20 49 66 20 63 75 72 73 6f  ].**.** If curso
208b0 72 20 50 31 20 72 65 66 65 72 73 20 74 6f 20 61  r P1 refers to a
208c0 6e 20 53 51 4c 20 74 61 62 6c 65 20 28 42 2d 54  n SQL table (B-T
208d0 72 65 65 20 74 68 61 74 20 75 73 65 73 20 69 6e  ree that uses in
208e0 74 65 67 65 72 20 6b 65 79 73 29 2c 20 0a 2a 2a  teger keys), .**
208f0 20 75 73 65 20 74 68 65 20 76 61 6c 75 65 20 69   use the value i
20900 6e 20 72 65 67 69 73 74 65 72 20 50 33 20 61 73  n register P3 as
20910 20 61 20 6b 65 79 2e 20 49 66 20 63 75 72 73 6f   a key. If curso
20920 72 20 50 31 20 72 65 66 65 72 73 20 0a 2a 2a 20  r P1 refers .** 
20930 74 6f 20 61 6e 20 53 51 4c 20 69 6e 64 65 78 2c  to an SQL index,
20940 20 74 68 65 6e 20 50 33 20 69 73 20 74 68 65 20   then P3 is the 
20950 66 69 72 73 74 20 69 6e 20 61 6e 20 61 72 72 61  first in an arra
20960 79 20 6f 66 20 50 34 20 72 65 67 69 73 74 65 72  y of P4 register
20970 73 20 0a 2a 2a 20 74 68 61 74 20 61 72 65 20 75  s .** that are u
20980 73 65 64 20 61 73 20 61 6e 20 75 6e 70 61 63 6b  sed as an unpack
20990 65 64 20 69 6e 64 65 78 20 6b 65 79 2e 20 0a 2a  ed index key. .*
209a0 2a 0a 2a 2a 20 52 65 70 6f 73 69 74 69 6f 6e 20  *.** Reposition 
209b0 63 75 72 73 6f 72 20 50 31 20 73 6f 20 74 68 61  cursor P1 so tha
209c0 74 20 20 69 74 20 70 6f 69 6e 74 73 20 74 6f 20  t  it points to 
209d0 74 68 65 20 6c 61 72 67 65 73 74 20 65 6e 74 72  the largest entr
209e0 79 20 74 68 61 74 20 0a 2a 2a 20 69 73 20 6c 65  y that .** is le
209f0 73 73 20 74 68 61 6e 20 74 68 65 20 6b 65 79 20  ss than the key 
20a00 76 61 6c 75 65 2e 20 49 66 20 74 68 65 72 65 20  value. If there 
20a10 61 72 65 20 6e 6f 20 72 65 63 6f 72 64 73 20 6c  are no records l
20a20 65 73 73 20 74 68 61 6e 20 0a 2a 2a 20 74 68 65  ess than .** the
20a30 20 6b 65 79 20 61 6e 64 20 50 32 20 69 73 20 6e   key and P2 is n
20a40 6f 74 20 7a 65 72 6f 2c 20 74 68 65 6e 20 6a 75  ot zero, then ju
20a50 6d 70 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20  mp to P2..**.** 
20a60 54 68 69 73 20 6f 70 63 6f 64 65 20 6c 65 61 76  This opcode leav
20a70 65 73 20 74 68 65 20 63 75 72 73 6f 72 20 63 6f  es the cursor co
20a80 6e 66 69 67 75 72 65 64 20 74 6f 20 6d 6f 76 65  nfigured to move
20a90 20 69 6e 20 72 65 76 65 72 73 65 20 6f 72 64 65   in reverse orde
20aa0 72 2c 0a 2a 2a 20 66 72 6f 6d 20 74 68 65 20 65  r,.** from the e
20ab0 6e 64 20 74 6f 77 61 72 64 20 74 68 65 20 62 65  nd toward the be
20ac0 67 69 6e 6e 69 6e 67 2e 20 20 49 6e 20 6f 74 68  ginning.  In oth
20ad0 65 72 20 77 6f 72 64 73 2c 20 74 68 65 20 63 75  er words, the cu
20ae0 72 73 6f 72 20 69 73 0a 2a 2a 20 63 6f 6e 66 69  rsor is.** confi
20af0 67 75 72 65 64 20 74 6f 20 75 73 65 20 50 72 65  gured to use Pre
20b00 76 2c 20 6e 6f 74 20 4e 65 78 74 2e 0a 2a 2a 0a  v, not Next..**.
20b10 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 46 6f 75  ** See also: Fou
20b20 6e 64 2c 20 4e 6f 74 46 6f 75 6e 64 2c 20 53 65  nd, NotFound, Se
20b30 65 6b 47 74 2c 20 53 65 65 6b 47 65 2c 20 53 65  ekGt, SeekGe, Se
20b40 65 6b 4c 65 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64  ekLe.*/./* Opcod
20b50 65 3a 20 53 65 65 6b 4c 45 20 50 31 20 50 32 20  e: SeekLE P1 P2 
20b60 50 33 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70  P3 P4 *.** Synop
20b70 73 69 73 3a 20 6b 65 79 3d 72 5b 50 33 40 50 34  sis: key=r[P3@P4
20b80 5d 0a 2a 2a 0a 2a 2a 20 49 66 20 63 75 72 73 6f  ].**.** If curso
20b90 72 20 50 31 20 72 65 66 65 72 73 20 74 6f 20 61  r P1 refers to a
20ba0 6e 20 53 51 4c 20 74 61 62 6c 65 20 28 42 2d 54  n SQL table (B-T
20bb0 72 65 65 20 74 68 61 74 20 75 73 65 73 20 69 6e  ree that uses in
20bc0 74 65 67 65 72 20 6b 65 79 73 29 2c 20 0a 2a 2a  teger keys), .**
20bd0 20 75 73 65 20 74 68 65 20 76 61 6c 75 65 20 69   use the value i
20be0 6e 20 72 65 67 69 73 74 65 72 20 50 33 20 61 73  n register P3 as
20bf0 20 61 20 6b 65 79 2e 20 49 66 20 63 75 72 73 6f   a key. If curso
20c00 72 20 50 31 20 72 65 66 65 72 73 20 0a 2a 2a 20  r P1 refers .** 
20c10 74 6f 20 61 6e 20 53 51 4c 20 69 6e 64 65 78 2c  to an SQL index,
20c20 20 74 68 65 6e 20 50 33 20 69 73 20 74 68 65 20   then P3 is the 
20c30 66 69 72 73 74 20 69 6e 20 61 6e 20 61 72 72 61  first in an arra
20c40 79 20 6f 66 20 50 34 20 72 65 67 69 73 74 65 72  y of P4 register
20c50 73 20 0a 2a 2a 20 74 68 61 74 20 61 72 65 20 75  s .** that are u
20c60 73 65 64 20 61 73 20 61 6e 20 75 6e 70 61 63 6b  sed as an unpack
20c70 65 64 20 69 6e 64 65 78 20 6b 65 79 2e 20 0a 2a  ed index key. .*
20c80 2a 0a 2a 2a 20 52 65 70 6f 73 69 74 69 6f 6e 20  *.** Reposition 
20c90 63 75 72 73 6f 72 20 50 31 20 73 6f 20 74 68 61  cursor P1 so tha
20ca0 74 20 69 74 20 70 6f 69 6e 74 73 20 74 6f 20 74  t it points to t
20cb0 68 65 20 6c 61 72 67 65 73 74 20 65 6e 74 72 79  he largest entry
20cc0 20 74 68 61 74 20 0a 2a 2a 20 69 73 20 6c 65 73   that .** is les
20cd0 73 20 74 68 61 6e 20 6f 72 20 65 71 75 61 6c 20  s than or equal 
20ce0 74 6f 20 74 68 65 20 6b 65 79 20 76 61 6c 75 65  to the key value
20cf0 2e 20 49 66 20 74 68 65 72 65 20 61 72 65 20 6e  . If there are n
20d00 6f 20 72 65 63 6f 72 64 73 20 0a 2a 2a 20 6c 65  o records .** le
20d10 73 73 20 74 68 61 6e 20 6f 72 20 65 71 75 61 6c  ss than or equal
20d20 20 74 6f 20 74 68 65 20 6b 65 79 20 61 6e 64 20   to the key and 
20d30 50 32 20 69 73 20 6e 6f 74 20 7a 65 72 6f 2c 20  P2 is not zero, 
20d40 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20 50 32 2e  then jump to P2.
20d50 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f  .**.** This opco
20d60 64 65 20 6c 65 61 76 65 73 20 74 68 65 20 63 75  de leaves the cu
20d70 72 73 6f 72 20 63 6f 6e 66 69 67 75 72 65 64 20  rsor configured 
20d80 74 6f 20 6d 6f 76 65 20 69 6e 20 72 65 76 65 72  to move in rever
20d90 73 65 20 6f 72 64 65 72 2c 0a 2a 2a 20 66 72 6f  se order,.** fro
20da0 6d 20 74 68 65 20 65 6e 64 20 74 6f 77 61 72 64  m the end toward
20db0 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 2e 20   the beginning. 
20dc0 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c   In other words,
20dd0 20 74 68 65 20 63 75 72 73 6f 72 20 69 73 0a 2a   the cursor is.*
20de0 2a 20 63 6f 6e 66 69 67 75 72 65 64 20 74 6f 20  * configured to 
20df0 75 73 65 20 50 72 65 76 2c 20 6e 6f 74 20 4e 65  use Prev, not Ne
20e00 78 74 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65  xt..**.** If the
20e10 20 63 75 72 73 6f 72 20 50 31 20 77 61 73 20 6f   cursor P1 was o
20e20 70 65 6e 65 64 20 75 73 69 6e 67 20 74 68 65 20  pened using the 
20e30 4f 50 46 4c 41 47 5f 53 45 45 4b 45 51 20 66 6c  OPFLAG_SEEKEQ fl
20e40 61 67 2c 20 74 68 65 6e 20 74 68 69 73 0a 2a 2a  ag, then this.**
20e50 20 6f 70 63 6f 64 65 20 77 69 6c 6c 20 61 6c 77   opcode will alw
20e60 61 79 73 20 6c 61 6e 64 20 6f 6e 20 61 20 72 65  ays land on a re
20e70 63 6f 72 64 20 74 68 61 74 20 65 71 75 61 6c 6c  cord that equall
20e80 79 20 65 71 75 61 6c 73 20 74 68 65 20 6b 65 79  y equals the key
20e90 2c 20 6f 72 0a 2a 2a 20 65 6c 73 65 20 6a 75 6d  , or.** else jum
20ea0 70 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f  p immediately to
20eb0 20 50 32 2e 20 20 57 68 65 6e 20 74 68 65 20 63   P2.  When the c
20ec0 75 72 73 6f 72 20 69 73 20 4f 50 46 4c 41 47 5f  ursor is OPFLAG_
20ed0 53 45 45 4b 45 51 2c 20 74 68 69 73 0a 2a 2a 20  SEEKEQ, this.** 
20ee0 6f 70 63 6f 64 65 20 6d 75 73 74 20 62 65 20 66  opcode must be f
20ef0 6f 6c 6c 6f 77 65 64 20 62 79 20 61 6e 20 49 64  ollowed by an Id
20f00 78 47 45 20 6f 70 63 6f 64 65 20 77 69 74 68 20  xGE opcode with 
20f10 74 68 65 20 73 61 6d 65 20 61 72 67 75 6d 65 6e  the same argumen
20f20 74 73 2e 0a 2a 2a 20 54 68 65 20 49 64 78 47 45  ts..** The IdxGE
20f30 20 6f 70 63 6f 64 65 20 77 69 6c 6c 20 62 65 20   opcode will be 
20f40 73 6b 69 70 70 65 64 20 69 66 20 74 68 69 73 20  skipped if this 
20f50 6f 70 63 6f 64 65 20 73 75 63 63 65 65 64 73 2c  opcode succeeds,
20f60 20 62 75 74 20 74 68 65 0a 2a 2a 20 49 64 78 47   but the.** IdxG
20f70 45 20 6f 70 63 6f 64 65 20 77 69 6c 6c 20 62 65  E opcode will be
20f80 20 75 73 65 64 20 6f 6e 20 73 75 62 73 65 71 75   used on subsequ
20f90 65 6e 74 20 6c 6f 6f 70 20 69 74 65 72 61 74 69  ent loop iterati
20fa0 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61  ons..**.** See a
20fb0 6c 73 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f 74 46  lso: Found, NotF
20fc0 6f 75 6e 64 2c 20 53 65 65 6b 47 74 2c 20 53 65  ound, SeekGt, Se
20fd0 65 6b 47 65 2c 20 53 65 65 6b 4c 74 0a 2a 2f 0a  ekGe, SeekLt.*/.
20fe0 63 61 73 65 20 4f 50 5f 53 65 65 6b 4c 54 3a 20  case OP_SeekLT: 
20ff0 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c          /* jump,
21000 20 69 6e 33 2c 20 67 72 6f 75 70 20 2a 2f 0a 63   in3, group */.c
21010 61 73 65 20 4f 50 5f 53 65 65 6b 4c 45 3a 20 20  ase OP_SeekLE:  
21020 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20         /* jump, 
21030 69 6e 33 2c 20 67 72 6f 75 70 20 2a 2f 0a 63 61  in3, group */.ca
21040 73 65 20 4f 50 5f 53 65 65 6b 47 45 3a 20 20 20  se OP_SeekGE:   
21050 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69        /* jump, i
21060 6e 33 2c 20 67 72 6f 75 70 20 2a 2f 0a 63 61 73  n3, group */.cas
21070 65 20 4f 50 5f 53 65 65 6b 47 54 3a 20 7b 20 20  e OP_SeekGT: {  
21080 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e       /* jump, in
21090 33 2c 20 67 72 6f 75 70 20 2a 2f 0a 20 20 69 6e  3, group */.  in
210a0 74 20 72 65 73 3b 20 20 20 20 20 20 20 20 20 20  t res;          
210b0 20 2f 2a 20 43 6f 6d 70 61 72 69 73 6f 6e 20 72   /* Comparison r
210c0 65 73 75 6c 74 20 2a 2f 0a 20 20 69 6e 74 20 6f  esult */.  int o
210d0 63 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  c;            /*
210e0 20 4f 70 63 6f 64 65 20 2a 2f 0a 20 20 56 64 62   Opcode */.  Vdb
210f0 65 43 75 72 73 6f 72 20 2a 70 43 3b 20 20 20 20  eCursor *pC;    
21100 2f 2a 20 54 68 65 20 63 75 72 73 6f 72 20 74 6f  /* The cursor to
21110 20 73 65 65 6b 20 2a 2f 0a 20 20 55 6e 70 61 63   seek */.  Unpac
21120 6b 65 64 52 65 63 6f 72 64 20 72 3b 20 20 2f 2a  kedRecord r;  /*
21130 20 54 68 65 20 6b 65 79 20 74 6f 20 73 65 65 6b   The key to seek
21140 20 66 6f 72 20 2a 2f 0a 20 20 69 6e 74 20 6e 46   for */.  int nF
21150 69 65 6c 64 3b 20 20 20 20 20 20 20 20 2f 2a 20  ield;        /* 
21160 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e  Number of column
21170 73 20 6f 72 20 66 69 65 6c 64 73 20 69 6e 20 74  s or fields in t
21180 68 65 20 6b 65 79 20 2a 2f 0a 20 20 69 36 34 20  he key */.  i64 
21190 69 4b 65 79 3b 20 20 20 20 20 20 20 20 20 20 2f  iKey;          /
211a0 2a 20 54 68 65 20 72 6f 77 69 64 20 77 65 20 61  * The rowid we a
211b0 72 65 20 74 6f 20 73 65 65 6b 20 74 6f 20 2a 2f  re to seek to */
211c0 0a 20 20 69 6e 74 20 65 71 4f 6e 6c 79 3b 20 20  .  int eqOnly;  
211d0 20 20 20 20 20 20 2f 2a 20 4f 6e 6c 79 20 69 6e        /* Only in
211e0 74 65 72 65 73 74 65 64 20 69 6e 20 3d 3d 20 72  terested in == r
211f0 65 73 75 6c 74 73 20 2a 2f 0a 0a 20 20 61 73 73  esults */..  ass
21200 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20  ert( pOp->p1>=0 
21210 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43  && pOp->p1<p->nC
21220 75 72 73 6f 72 20 29 3b 0a 20 20 61 73 73 65 72  ursor );.  asser
21230 74 28 20 70 4f 70 2d 3e 70 32 21 3d 30 20 29 3b  t( pOp->p2!=0 );
21240 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72  .  pC = p->apCsr
21250 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
21260 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20  ert( pC!=0 );.  
21270 61 73 73 65 72 74 28 20 70 43 2d 3e 65 43 75 72  assert( pC->eCur
21280 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f 42 54  Type==CURTYPE_BT
21290 52 45 45 20 29 3b 0a 20 20 61 73 73 65 72 74 28  REE );.  assert(
212a0 20 4f 50 5f 53 65 65 6b 4c 45 20 3d 3d 20 4f 50   OP_SeekLE == OP
212b0 5f 53 65 65 6b 4c 54 2b 31 20 29 3b 0a 20 20 61  _SeekLT+1 );.  a
212c0 73 73 65 72 74 28 20 4f 50 5f 53 65 65 6b 47 45  ssert( OP_SeekGE
212d0 20 3d 3d 20 4f 50 5f 53 65 65 6b 4c 54 2b 32 20   == OP_SeekLT+2 
212e0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 4f 50 5f  );.  assert( OP_
212f0 53 65 65 6b 47 54 20 3d 3d 20 4f 50 5f 53 65 65  SeekGT == OP_See
21300 6b 4c 54 2b 33 20 29 3b 0a 20 20 61 73 73 65 72  kLT+3 );.  asser
21310 74 28 20 70 43 2d 3e 69 73 4f 72 64 65 72 65 64  t( pC->isOrdered
21320 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43   );.  assert( pC
21330 2d 3e 75 63 2e 70 43 75 72 73 6f 72 21 3d 30 20  ->uc.pCursor!=0 
21340 29 3b 0a 20 20 6f 63 20 3d 20 70 4f 70 2d 3e 6f  );.  oc = pOp->o
21350 70 63 6f 64 65 3b 0a 20 20 65 71 4f 6e 6c 79 20  pcode;.  eqOnly 
21360 3d 20 30 3b 0a 20 20 70 43 2d 3e 6e 75 6c 6c 52  = 0;.  pC->nullR
21370 6f 77 20 3d 20 30 3b 0a 23 69 66 64 65 66 20 53  ow = 0;.#ifdef S
21380 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 70 43  QLITE_DEBUG.  pC
21390 2d 3e 73 65 65 6b 4f 70 20 3d 20 70 4f 70 2d 3e  ->seekOp = pOp->
213a0 6f 70 63 6f 64 65 3b 0a 23 65 6e 64 69 66 0a 0a  opcode;.#endif..
213b0 20 20 69 66 28 20 70 43 2d 3e 69 73 54 61 62 6c    if( pC->isTabl
213c0 65 20 29 7b 0a 20 20 20 20 2f 2a 20 54 68 65 20  e ){.    /* The 
213d0 42 54 52 45 45 5f 53 45 45 4b 5f 45 51 20 66 6c  BTREE_SEEK_EQ fl
213e0 61 67 20 69 73 20 6f 6e 6c 79 20 73 65 74 20 6f  ag is only set o
213f0 6e 20 69 6e 64 65 78 20 63 75 72 73 6f 72 73 20  n index cursors 
21400 2a 2f 0a 20 20 20 20 61 73 73 65 72 74 28 20 73  */.    assert( s
21410 71 6c 69 74 65 33 42 74 72 65 65 43 75 72 73 6f  qlite3BtreeCurso
21420 72 48 61 73 48 69 6e 74 28 70 43 2d 3e 75 63 2e  rHasHint(pC->uc.
21430 70 43 75 72 73 6f 72 2c 20 42 54 52 45 45 5f 53  pCursor, BTREE_S
21440 45 45 4b 5f 45 51 29 3d 3d 30 0a 20 20 20 20 20  EEK_EQ)==0.     
21450 20 20 20 20 20 20 20 20 20 7c 7c 20 43 4f 52 52           || CORR
21460 55 50 54 5f 44 42 20 29 3b 0a 0a 20 20 20 20 2f  UPT_DB );..    /
21470 2a 20 54 68 65 20 69 6e 70 75 74 20 76 61 6c 75  * The input valu
21480 65 20 69 6e 20 50 33 20 6d 69 67 68 74 20 62 65  e in P3 might be
21490 20 6f 66 20 61 6e 79 20 74 79 70 65 3a 20 69 6e   of any type: in
214a0 74 65 67 65 72 2c 20 72 65 61 6c 2c 20 73 74 72  teger, real, str
214b0 69 6e 67 2c 0a 20 20 20 20 2a 2a 20 62 6c 6f 62  ing,.    ** blob
214c0 2c 20 6f 72 20 4e 55 4c 4c 2e 20 20 42 75 74 20  , or NULL.  But 
214d0 69 74 20 6e 65 65 64 73 20 74 6f 20 62 65 20 61  it needs to be a
214e0 6e 20 69 6e 74 65 67 65 72 20 62 65 66 6f 72 65  n integer before
214f0 20 77 65 20 63 61 6e 20 64 6f 0a 20 20 20 20 2a   we can do.    *
21500 2a 20 74 68 65 20 73 65 65 6b 2c 20 73 6f 20 63  * the seek, so c
21510 6f 6e 76 65 72 74 20 69 74 2e 20 2a 2f 0a 20 20  onvert it. */.  
21520 20 20 70 49 6e 33 20 3d 20 26 61 4d 65 6d 5b 70    pIn3 = &aMem[p
21530 4f 70 2d 3e 70 33 5d 3b 0a 20 20 20 20 69 66 28  Op->p3];.    if(
21540 20 28 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20   (pIn3->flags & 
21550 28 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 52 65 61  (MEM_Int|MEM_Rea
21560 6c 7c 4d 45 4d 5f 53 74 72 29 29 3d 3d 4d 45 4d  l|MEM_Str))==MEM
21570 5f 53 74 72 20 29 7b 0a 20 20 20 20 20 20 61 70  _Str ){.      ap
21580 70 6c 79 4e 75 6d 65 72 69 63 41 66 66 69 6e 69  plyNumericAffini
21590 74 79 28 70 49 6e 33 2c 20 30 29 3b 0a 20 20 20  ty(pIn3, 0);.   
215a0 20 7d 0a 20 20 20 20 69 4b 65 79 20 3d 20 73 71   }.    iKey = sq
215b0 6c 69 74 65 33 56 64 62 65 49 6e 74 56 61 6c 75  lite3VdbeIntValu
215c0 65 28 70 49 6e 33 29 3b 0a 0a 20 20 20 20 2f 2a  e(pIn3);..    /*
215d0 20 49 66 20 74 68 65 20 50 33 20 76 61 6c 75 65   If the P3 value
215e0 20 63 6f 75 6c 64 20 6e 6f 74 20 62 65 20 63 6f   could not be co
215f0 6e 76 65 72 74 65 64 20 69 6e 74 6f 20 61 6e 20  nverted into an 
21600 69 6e 74 65 67 65 72 20 77 69 74 68 6f 75 74 0a  integer without.
21610 20 20 20 20 2a 2a 20 6c 6f 73 73 20 6f 66 20 69      ** loss of i
21620 6e 66 6f 72 6d 61 74 69 6f 6e 2c 20 74 68 65 6e  nformation, then
21630 20 73 70 65 63 69 61 6c 20 70 72 6f 63 65 73 73   special process
21640 69 6e 67 20 69 73 20 72 65 71 75 69 72 65 64 2e  ing is required.
21650 2e 2e 20 2a 2f 0a 20 20 20 20 69 66 28 20 28 70  .. */.    if( (p
21660 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  In3->flags & MEM
21670 5f 49 6e 74 29 3d 3d 30 20 29 7b 0a 20 20 20 20  _Int)==0 ){.    
21680 20 20 69 66 28 20 28 70 49 6e 33 2d 3e 66 6c 61    if( (pIn3->fla
21690 67 73 20 26 20 4d 45 4d 5f 52 65 61 6c 29 3d 3d  gs & MEM_Real)==
216a0 30 20 29 7b 0a 20 20 20 20 20 20 20 20 2f 2a 20  0 ){.        /* 
216b0 49 66 20 74 68 65 20 50 33 20 76 61 6c 75 65 20  If the P3 value 
216c0 63 61 6e 6e 6f 74 20 62 65 20 63 6f 6e 76 65 72  cannot be conver
216d0 74 65 64 20 69 6e 74 6f 20 61 6e 79 20 6b 69 6e  ted into any kin
216e0 64 20 6f 66 20 61 20 6e 75 6d 62 65 72 2c 0a 20  d of a number,. 
216f0 20 20 20 20 20 20 20 2a 2a 20 74 68 65 6e 20 74         ** then t
21700 68 65 20 73 65 65 6b 20 69 73 20 6e 6f 74 20 70  he seek is not p
21710 6f 73 73 69 62 6c 65 2c 20 73 6f 20 6a 75 6d 70  ossible, so jump
21720 20 74 6f 20 50 32 20 2a 2f 0a 20 20 20 20 20 20   to P2 */.      
21730 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65    VdbeBranchTake
21740 6e 28 31 2c 32 29 3b 20 67 6f 74 6f 20 6a 75 6d  n(1,2); goto jum
21750 70 5f 74 6f 5f 70 32 3b 0a 20 20 20 20 20 20 20  p_to_p2;.       
21760 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a   break;.      }.
21770 0a 20 20 20 20 20 20 2f 2a 20 49 66 20 74 68 65  .      /* If the
21780 20 61 70 70 72 6f 78 69 6d 61 74 69 6f 6e 20 69   approximation i
21790 4b 65 79 20 69 73 20 6c 61 72 67 65 72 20 74 68  Key is larger th
217a0 61 6e 20 74 68 65 20 61 63 74 75 61 6c 20 72 65  an the actual re
217b0 61 6c 20 73 65 61 72 63 68 0a 20 20 20 20 20 20  al search.      
217c0 2a 2a 20 74 65 72 6d 2c 20 73 75 62 73 74 69 74  ** term, substit
217d0 75 74 65 20 3e 3d 20 66 6f 72 20 3e 20 61 6e 64  ute >= for > and
217e0 20 3c 20 66 6f 72 20 3c 3d 2e 20 65 2e 67 2e 20   < for <=. e.g. 
217f0 69 66 20 74 68 65 20 73 65 61 72 63 68 20 74 65  if the search te
21800 72 6d 0a 20 20 20 20 20 20 2a 2a 20 69 73 20 34  rm.      ** is 4
21810 2e 39 20 61 6e 64 20 74 68 65 20 69 6e 74 65 67  .9 and the integ
21820 65 72 20 61 70 70 72 6f 78 69 6d 61 74 69 6f 6e  er approximation
21830 20 35 3a 0a 20 20 20 20 20 20 2a 2a 0a 20 20 20   5:.      **.   
21840 20 20 20 2a 2a 20 20 20 20 20 20 20 20 28 78 20     **        (x 
21850 3e 20 20 34 2e 39 29 20 20 20 20 2d 3e 20 20 20  >  4.9)    ->   
21860 20 20 28 78 20 3e 3d 20 35 29 0a 20 20 20 20 20    (x >= 5).     
21870 20 2a 2a 20 20 20 20 20 20 20 20 28 78 20 3c 3d   **        (x <=
21880 20 34 2e 39 29 20 20 20 20 2d 3e 20 20 20 20 20   4.9)    ->     
21890 28 78 20 3c 20 20 35 29 0a 20 20 20 20 20 20 2a  (x <  5).      *
218a0 2f 0a 20 20 20 20 20 20 69 66 28 20 70 49 6e 33  /.      if( pIn3
218b0 2d 3e 75 2e 72 3c 28 64 6f 75 62 6c 65 29 69 4b  ->u.r<(double)iK
218c0 65 79 20 29 7b 0a 20 20 20 20 20 20 20 20 61 73  ey ){.        as
218d0 73 65 72 74 28 20 4f 50 5f 53 65 65 6b 47 45 3d  sert( OP_SeekGE=
218e0 3d 28 4f 50 5f 53 65 65 6b 47 54 2d 31 29 20 29  =(OP_SeekGT-1) )
218f0 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74  ;.        assert
21900 28 20 4f 50 5f 53 65 65 6b 4c 54 3d 3d 28 4f 50  ( OP_SeekLT==(OP
21910 5f 53 65 65 6b 4c 45 2d 31 29 20 29 3b 0a 20 20  _SeekLE-1) );.  
21920 20 20 20 20 20 20 61 73 73 65 72 74 28 20 28 4f        assert( (O
21930 50 5f 53 65 65 6b 4c 45 20 26 20 30 78 30 30 30  P_SeekLE & 0x000
21940 31 29 3d 3d 28 4f 50 5f 53 65 65 6b 47 54 20 26  1)==(OP_SeekGT &
21950 20 30 78 30 30 30 31 29 20 29 3b 0a 20 20 20 20   0x0001) );.    
21960 20 20 20 20 69 66 28 20 28 6f 63 20 26 20 30 78      if( (oc & 0x
21970 30 30 30 31 29 3d 3d 28 4f 50 5f 53 65 65 6b 47  0001)==(OP_SeekG
21980 54 20 26 20 30 78 30 30 30 31 29 20 29 20 6f 63  T & 0x0001) ) oc
21990 2d 2d 3b 0a 20 20 20 20 20 20 7d 0a 0a 20 20 20  --;.      }..   
219a0 20 20 20 2f 2a 20 49 66 20 74 68 65 20 61 70 70     /* If the app
219b0 72 6f 78 69 6d 61 74 69 6f 6e 20 69 4b 65 79 20  roximation iKey 
219c0 69 73 20 73 6d 61 6c 6c 65 72 20 74 68 61 6e 20  is smaller than 
219d0 74 68 65 20 61 63 74 75 61 6c 20 72 65 61 6c 20  the actual real 
219e0 73 65 61 72 63 68 0a 20 20 20 20 20 20 2a 2a 20  search.      ** 
219f0 74 65 72 6d 2c 20 73 75 62 73 74 69 74 75 74 65  term, substitute
21a00 20 3c 3d 20 66 6f 72 20 3c 20 61 6e 64 20 3e 20   <= for < and > 
21a10 66 6f 72 20 3e 3d 2e 20 20 2a 2f 0a 20 20 20 20  for >=.  */.    
21a20 20 20 65 6c 73 65 20 69 66 28 20 70 49 6e 33 2d    else if( pIn3-
21a30 3e 75 2e 72 3e 28 64 6f 75 62 6c 65 29 69 4b 65  >u.r>(double)iKe
21a40 79 20 29 7b 0a 20 20 20 20 20 20 20 20 61 73 73  y ){.        ass
21a50 65 72 74 28 20 4f 50 5f 53 65 65 6b 4c 45 3d 3d  ert( OP_SeekLE==
21a60 28 4f 50 5f 53 65 65 6b 4c 54 2b 31 29 20 29 3b  (OP_SeekLT+1) );
21a70 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28  .        assert(
21a80 20 4f 50 5f 53 65 65 6b 47 54 3d 3d 28 4f 50 5f   OP_SeekGT==(OP_
21a90 53 65 65 6b 47 45 2b 31 29 20 29 3b 0a 20 20 20  SeekGE+1) );.   
21aa0 20 20 20 20 20 61 73 73 65 72 74 28 20 28 4f 50       assert( (OP
21ab0 5f 53 65 65 6b 4c 54 20 26 20 30 78 30 30 30 31  _SeekLT & 0x0001
21ac0 29 3d 3d 28 4f 50 5f 53 65 65 6b 47 45 20 26 20  )==(OP_SeekGE & 
21ad0 30 78 30 30 30 31 29 20 29 3b 0a 20 20 20 20 20  0x0001) );.     
21ae0 20 20 20 69 66 28 20 28 6f 63 20 26 20 30 78 30     if( (oc & 0x0
21af0 30 30 31 29 3d 3d 28 4f 50 5f 53 65 65 6b 4c 54  001)==(OP_SeekLT
21b00 20 26 20 30 78 30 30 30 31 29 20 29 20 6f 63 2b   & 0x0001) ) oc+
21b10 2b 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  +;.      }.    }
21b20 20 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74   .    rc = sqlit
21b30 65 33 42 74 72 65 65 4d 6f 76 65 74 6f 55 6e 70  e3BtreeMovetoUnp
21b40 61 63 6b 65 64 28 70 43 2d 3e 75 63 2e 70 43 75  acked(pC->uc.pCu
21b50 72 73 6f 72 2c 20 30 2c 20 28 75 36 34 29 69 4b  rsor, 0, (u64)iK
21b60 65 79 2c 20 30 2c 20 26 72 65 73 29 3b 0a 20 20  ey, 0, &res);.  
21b70 20 20 70 43 2d 3e 6d 6f 76 65 74 6f 54 61 72 67    pC->movetoTarg
21b80 65 74 20 3d 20 69 4b 65 79 3b 20 20 2f 2a 20 55  et = iKey;  /* U
21b90 73 65 64 20 62 79 20 4f 50 5f 44 65 6c 65 74 65  sed by OP_Delete
21ba0 20 2a 2f 0a 20 20 20 20 69 66 28 20 72 63 21 3d   */.    if( rc!=
21bb0 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20  SQLITE_OK ){.   
21bc0 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75     goto abort_du
21bd0 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20  e_to_error;.    
21be0 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 2f  }.  }else{.    /
21bf0 2a 20 46 6f 72 20 61 20 63 75 72 73 6f 72 20 77  * For a cursor w
21c00 69 74 68 20 74 68 65 20 42 54 52 45 45 5f 53 45  ith the BTREE_SE
21c10 45 4b 5f 45 51 20 68 69 6e 74 2c 20 6f 6e 6c 79  EK_EQ hint, only
21c20 20 74 68 65 20 4f 50 5f 53 65 65 6b 47 45 20 61   the OP_SeekGE a
21c30 6e 64 0a 20 20 20 20 2a 2a 20 4f 50 5f 53 65 65  nd.    ** OP_See
21c40 6b 4c 45 20 6f 70 63 6f 64 65 73 20 61 72 65 20  kLE opcodes are 
21c50 61 6c 6c 6f 77 65 64 2c 20 61 6e 64 20 74 68 65  allowed, and the
21c60 73 65 20 6d 75 73 74 20 62 65 20 69 6d 6d 65 64  se must be immed
21c70 69 61 74 65 6c 79 20 66 6f 6c 6c 6f 77 65 64 0a  iately followed.
21c80 20 20 20 20 2a 2a 20 62 79 20 61 6e 20 4f 50 5f      ** by an OP_
21c90 49 64 78 47 54 20 6f 72 20 4f 50 5f 49 64 78 4c  IdxGT or OP_IdxL
21ca0 54 20 6f 70 63 6f 64 65 2c 20 72 65 73 70 65 63  T opcode, respec
21cb0 74 69 76 65 6c 79 2c 20 77 69 74 68 20 74 68 65  tively, with the
21cc0 20 73 61 6d 65 20 6b 65 79 2e 0a 20 20 20 20 2a   same key..    *
21cd0 2f 0a 20 20 20 20 69 66 28 20 73 71 6c 69 74 65  /.    if( sqlite
21ce0 33 42 74 72 65 65 43 75 72 73 6f 72 48 61 73 48  3BtreeCursorHasH
21cf0 69 6e 74 28 70 43 2d 3e 75 63 2e 70 43 75 72 73  int(pC->uc.pCurs
21d00 6f 72 2c 20 42 54 52 45 45 5f 53 45 45 4b 5f 45  or, BTREE_SEEK_E
21d10 51 29 20 29 7b 0a 20 20 20 20 20 20 65 71 4f 6e  Q) ){.      eqOn
21d20 6c 79 20 3d 20 31 3b 0a 20 20 20 20 20 20 61 73  ly = 1;.      as
21d30 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64  sert( pOp->opcod
21d40 65 3d 3d 4f 50 5f 53 65 65 6b 47 45 20 7c 7c 20  e==OP_SeekGE || 
21d50 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  pOp->opcode==OP_
21d60 53 65 65 6b 4c 45 20 29 3b 0a 20 20 20 20 20 20  SeekLE );.      
21d70 61 73 73 65 72 74 28 20 70 4f 70 5b 31 5d 2e 6f  assert( pOp[1].o
21d80 70 63 6f 64 65 3d 3d 4f 50 5f 49 64 78 4c 54 20  pcode==OP_IdxLT 
21d90 7c 7c 20 70 4f 70 5b 31 5d 2e 6f 70 63 6f 64 65  || pOp[1].opcode
21da0 3d 3d 4f 50 5f 49 64 78 47 54 20 29 3b 0a 20 20  ==OP_IdxGT );.  
21db0 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 5b      assert( pOp[
21dc0 31 5d 2e 70 31 3d 3d 70 4f 70 5b 30 5d 2e 70 31  1].p1==pOp[0].p1
21dd0 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74   );.      assert
21de0 28 20 70 4f 70 5b 31 5d 2e 70 32 3d 3d 70 4f 70  ( pOp[1].p2==pOp
21df0 5b 30 5d 2e 70 32 20 29 3b 0a 20 20 20 20 20 20  [0].p2 );.      
21e00 61 73 73 65 72 74 28 20 70 4f 70 5b 31 5d 2e 70  assert( pOp[1].p
21e10 33 3d 3d 70 4f 70 5b 30 5d 2e 70 33 20 29 3b 0a  3==pOp[0].p3 );.
21e20 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f        assert( pO
21e30 70 5b 31 5d 2e 70 34 2e 69 3d 3d 70 4f 70 5b 30  p[1].p4.i==pOp[0
21e40 5d 2e 70 34 2e 69 20 29 3b 0a 20 20 20 20 7d 0a  ].p4.i );.    }.
21e50 0a 20 20 20 20 6e 46 69 65 6c 64 20 3d 20 70 4f  .    nField = pO
21e60 70 2d 3e 70 34 2e 69 3b 0a 20 20 20 20 61 73 73  p->p4.i;.    ass
21e70 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65  ert( pOp->p4type
21e80 3d 3d 50 34 5f 49 4e 54 33 32 20 29 3b 0a 20 20  ==P4_INT32 );.  
21e90 20 20 61 73 73 65 72 74 28 20 6e 46 69 65 6c 64    assert( nField
21ea0 3e 30 20 29 3b 0a 20 20 20 20 72 2e 70 4b 65 79  >0 );.    r.pKey
21eb0 49 6e 66 6f 20 3d 20 70 43 2d 3e 70 4b 65 79 49  Info = pC->pKeyI
21ec0 6e 66 6f 3b 0a 20 20 20 20 72 2e 6e 46 69 65 6c  nfo;.    r.nFiel
21ed0 64 20 3d 20 28 75 31 36 29 6e 46 69 65 6c 64 3b  d = (u16)nField;
21ee0 0a 0a 20 20 20 20 2f 2a 20 54 68 65 20 6e 65 78  ..    /* The nex
21ef0 74 20 6c 69 6e 65 20 6f 66 20 63 6f 64 65 20 63  t line of code c
21f00 6f 6d 70 75 74 65 73 20 61 73 20 66 6f 6c 6c 6f  omputes as follo
21f10 77 73 2c 20 6f 6e 6c 79 20 66 61 73 74 65 72 3a  ws, only faster:
21f20 0a 20 20 20 20 2a 2a 20 20 20 69 66 28 20 6f 63  .    **   if( oc
21f30 3d 3d 4f 50 5f 53 65 65 6b 47 54 20 7c 7c 20 6f  ==OP_SeekGT || o
21f40 63 3d 3d 4f 50 5f 53 65 65 6b 4c 45 20 29 7b 0a  c==OP_SeekLE ){.
21f50 20 20 20 20 2a 2a 20 20 20 20 20 72 2e 64 65 66      **     r.def
21f60 61 75 6c 74 5f 72 63 20 3d 20 2d 31 3b 0a 20 20  ault_rc = -1;.  
21f70 20 20 2a 2a 20 20 20 7d 65 6c 73 65 7b 0a 20 20    **   }else{.  
21f80 20 20 2a 2a 20 20 20 20 20 72 2e 64 65 66 61 75    **     r.defau
21f90 6c 74 5f 72 63 20 3d 20 2b 31 3b 0a 20 20 20 20  lt_rc = +1;.    
21fa0 2a 2a 20 20 20 7d 0a 20 20 20 20 2a 2f 0a 20 20  **   }.    */.  
21fb0 20 20 72 2e 64 65 66 61 75 6c 74 5f 72 63 20 3d    r.default_rc =
21fc0 20 28 28 31 20 26 20 28 6f 63 20 2d 20 4f 50 5f   ((1 & (oc - OP_
21fd0 53 65 65 6b 4c 54 29 29 20 3f 20 2d 31 20 3a 20  SeekLT)) ? -1 : 
21fe0 2b 31 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  +1);.    assert(
21ff0 20 6f 63 21 3d 4f 50 5f 53 65 65 6b 47 54 20 7c   oc!=OP_SeekGT |
22000 7c 20 72 2e 64 65 66 61 75 6c 74 5f 72 63 3d 3d  | r.default_rc==
22010 2d 31 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74  -1 );.    assert
22020 28 20 6f 63 21 3d 4f 50 5f 53 65 65 6b 4c 45 20  ( oc!=OP_SeekLE 
22030 7c 7c 20 72 2e 64 65 66 61 75 6c 74 5f 72 63 3d  || r.default_rc=
22040 3d 2d 31 20 29 3b 0a 20 20 20 20 61 73 73 65 72  =-1 );.    asser
22050 74 28 20 6f 63 21 3d 4f 50 5f 53 65 65 6b 47 45  t( oc!=OP_SeekGE
22060 20 7c 7c 20 72 2e 64 65 66 61 75 6c 74 5f 72 63   || r.default_rc
22070 3d 3d 2b 31 20 29 3b 0a 20 20 20 20 61 73 73 65  ==+1 );.    asse
22080 72 74 28 20 6f 63 21 3d 4f 50 5f 53 65 65 6b 4c  rt( oc!=OP_SeekL
22090 54 20 7c 7c 20 72 2e 64 65 66 61 75 6c 74 5f 72  T || r.default_r
220a0 63 3d 3d 2b 31 20 29 3b 0a 0a 20 20 20 20 72 2e  c==+1 );..    r.
220b0 61 4d 65 6d 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  aMem = &aMem[pOp
220c0 2d 3e 70 33 5d 3b 0a 23 69 66 64 65 66 20 53 51  ->p3];.#ifdef SQ
220d0 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 20 20 7b  LITE_DEBUG.    {
220e0 20 69 6e 74 20 69 3b 20 66 6f 72 28 69 3d 30 3b   int i; for(i=0;
220f0 20 69 3c 72 2e 6e 46 69 65 6c 64 3b 20 69 2b 2b   i<r.nField; i++
22100 29 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56  ) assert( memIsV
22110 61 6c 69 64 28 26 72 2e 61 4d 65 6d 5b 69 5d 29  alid(&r.aMem[i])
22120 20 29 3b 20 7d 0a 23 65 6e 64 69 66 0a 20 20 20   ); }.#endif.   
22130 20 72 2e 65 71 53 65 65 6e 20 3d 20 30 3b 0a 20   r.eqSeen = 0;. 
22140 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42     rc = sqlite3B
22150 74 72 65 65 4d 6f 76 65 74 6f 55 6e 70 61 63 6b  treeMovetoUnpack
22160 65 64 28 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f  ed(pC->uc.pCurso
22170 72 2c 20 26 72 2c 20 30 2c 20 30 2c 20 26 72 65  r, &r, 0, 0, &re
22180 73 29 3b 0a 20 20 20 20 69 66 28 20 72 63 21 3d  s);.    if( rc!=
22190 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20  SQLITE_OK ){.   
221a0 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75     goto abort_du
221b0 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20  e_to_error;.    
221c0 7d 0a 20 20 20 20 69 66 28 20 65 71 4f 6e 6c 79  }.    if( eqOnly
221d0 20 26 26 20 72 2e 65 71 53 65 65 6e 3d 3d 30 20   && r.eqSeen==0 
221e0 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  ){.      assert(
221f0 20 72 65 73 21 3d 30 20 29 3b 0a 20 20 20 20 20   res!=0 );.     
22200 20 67 6f 74 6f 20 73 65 65 6b 5f 6e 6f 74 5f 66   goto seek_not_f
22210 6f 75 6e 64 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a  ound;.    }.  }.
22220 20 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f    pC->deferredMo
22230 76 65 74 6f 20 3d 20 30 3b 0a 20 20 70 43 2d 3e  veto = 0;.  pC->
22240 63 61 63 68 65 53 74 61 74 75 73 20 3d 20 43 41  cacheStatus = CA
22250 43 48 45 5f 53 54 41 4c 45 3b 0a 23 69 66 64 65  CHE_STALE;.#ifde
22260 66 20 53 51 4c 49 54 45 5f 54 45 53 54 0a 20 20  f SQLITE_TEST.  
22270 73 71 6c 69 74 65 33 5f 73 65 61 72 63 68 5f 63  sqlite3_search_c
22280 6f 75 6e 74 2b 2b 3b 0a 23 65 6e 64 69 66 0a 20  ount++;.#endif. 
22290 20 69 66 28 20 6f 63 3e 3d 4f 50 5f 53 65 65 6b   if( oc>=OP_Seek
222a0 47 45 20 29 7b 20 20 61 73 73 65 72 74 28 20 6f  GE ){  assert( o
222b0 63 3d 3d 4f 50 5f 53 65 65 6b 47 45 20 7c 7c 20  c==OP_SeekGE || 
222c0 6f 63 3d 3d 4f 50 5f 53 65 65 6b 47 54 20 29 3b  oc==OP_SeekGT );
222d0 0a 20 20 20 20 69 66 28 20 72 65 73 3c 30 20 7c  .    if( res<0 |
222e0 7c 20 28 72 65 73 3d 3d 30 20 26 26 20 6f 63 3d  | (res==0 && oc=
222f0 3d 4f 50 5f 53 65 65 6b 47 54 29 20 29 7b 0a 20  =OP_SeekGT) ){. 
22300 20 20 20 20 20 72 65 73 20 3d 20 30 3b 0a 20 20       res = 0;.  
22310 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
22320 42 74 72 65 65 4e 65 78 74 28 70 43 2d 3e 75 63  BtreeNext(pC->uc
22330 2e 70 43 75 72 73 6f 72 2c 20 30 29 3b 0a 20 20  .pCursor, 0);.  
22340 20 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49      if( rc!=SQLI
22350 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20  TE_OK ){.       
22360 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f   if( rc==SQLITE_
22370 44 4f 4e 45 20 29 7b 0a 20 20 20 20 20 20 20 20  DONE ){.        
22380 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b    rc = SQLITE_OK
22390 3b 0a 20 20 20 20 20 20 20 20 20 20 72 65 73 20  ;.          res 
223a0 3d 20 31 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c  = 1;.        }el
223b0 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20 67 6f  se{.          go
223c0 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
223d0 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 20 20 7d  error;.        }
223e0 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 65 6c  .      }.    }el
223f0 73 65 7b 0a 20 20 20 20 20 20 72 65 73 20 3d 20  se{.      res = 
22400 30 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65  0;.    }.  }else
22410 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 6f 63  {.    assert( oc
22420 3d 3d 4f 50 5f 53 65 65 6b 4c 54 20 7c 7c 20 6f  ==OP_SeekLT || o
22430 63 3d 3d 4f 50 5f 53 65 65 6b 4c 45 20 29 3b 0a  c==OP_SeekLE );.
22440 20 20 20 20 69 66 28 20 72 65 73 3e 30 20 7c 7c      if( res>0 ||
22450 20 28 72 65 73 3d 3d 30 20 26 26 20 6f 63 3d 3d   (res==0 && oc==
22460 4f 50 5f 53 65 65 6b 4c 54 29 20 29 7b 0a 20 20  OP_SeekLT) ){.  
22470 20 20 20 20 72 65 73 20 3d 20 30 3b 0a 20 20 20      res = 0;.   
22480 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42     rc = sqlite3B
22490 74 72 65 65 50 72 65 76 69 6f 75 73 28 70 43 2d  treePrevious(pC-
224a0 3e 75 63 2e 70 43 75 72 73 6f 72 2c 20 30 29 3b  >uc.pCursor, 0);
224b0 0a 20 20 20 20 20 20 69 66 28 20 72 63 21 3d 53  .      if( rc!=S
224c0 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20  QLITE_OK ){.    
224d0 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49      if( rc==SQLI
224e0 54 45 5f 44 4f 4e 45 20 29 7b 0a 20 20 20 20 20  TE_DONE ){.     
224f0 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45       rc = SQLITE
22500 5f 4f 4b 3b 0a 20 20 20 20 20 20 20 20 20 20 72  _OK;.          r
22510 65 73 20 3d 20 31 3b 0a 20 20 20 20 20 20 20 20  es = 1;.        
22520 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20  }else{.         
22530 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
22540 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20  to_error;.      
22550 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20 20    }.      }.    
22560 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 2f 2a 20  }else{.      /* 
22570 72 65 73 20 6d 69 67 68 74 20 62 65 20 6e 65 67  res might be neg
22580 61 74 69 76 65 20 62 65 63 61 75 73 65 20 74 68  ative because th
22590 65 20 74 61 62 6c 65 20 69 73 20 65 6d 70 74 79  e table is empty
225a0 2e 20 20 43 68 65 63 6b 20 74 6f 0a 20 20 20 20  .  Check to.    
225b0 20 20 2a 2a 20 73 65 65 20 69 66 20 74 68 69 73    ** see if this
225c0 20 69 73 20 74 68 65 20 63 61 73 65 2e 0a 20 20   is the case..  
225d0 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 72 65 73      */.      res
225e0 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 45   = sqlite3BtreeE
225f0 6f 66 28 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f  of(pC->uc.pCurso
22600 72 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 73 65  r);.    }.  }.se
22610 65 6b 5f 6e 6f 74 5f 66 6f 75 6e 64 3a 0a 20 20  ek_not_found:.  
22620 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e  assert( pOp->p2>
22630 30 20 29 3b 0a 20 20 56 64 62 65 42 72 61 6e 63  0 );.  VdbeBranc
22640 68 54 61 6b 65 6e 28 72 65 73 21 3d 30 2c 32 29  hTaken(res!=0,2)
22650 3b 0a 20 20 69 66 28 20 72 65 73 20 29 7b 0a 20  ;.  if( res ){. 
22660 20 20 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f     goto jump_to_
22670 70 32 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20  p2;.  }else if( 
22680 65 71 4f 6e 6c 79 20 29 7b 0a 20 20 20 20 61 73  eqOnly ){.    as
22690 73 65 72 74 28 20 70 4f 70 5b 31 5d 2e 6f 70 63  sert( pOp[1].opc
226a0 6f 64 65 3d 3d 4f 50 5f 49 64 78 4c 54 20 7c 7c  ode==OP_IdxLT ||
226b0 20 70 4f 70 5b 31 5d 2e 6f 70 63 6f 64 65 3d 3d   pOp[1].opcode==
226c0 4f 50 5f 49 64 78 47 54 20 29 3b 0a 20 20 20 20  OP_IdxGT );.    
226d0 70 4f 70 2b 2b 3b 20 2f 2a 20 53 6b 69 70 20 74  pOp++; /* Skip t
226e0 68 65 20 4f 50 5f 49 64 78 4c 74 20 6f 72 20 4f  he OP_IdxLt or O
226f0 50 5f 49 64 78 47 54 20 74 68 61 74 20 66 6f 6c  P_IdxGT that fol
22700 6c 6f 77 73 20 2a 2f 0a 20 20 7d 0a 20 20 62 72  lows */.  }.  br
22710 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
22720 65 3a 20 53 65 65 6b 48 69 74 20 50 31 20 50 32  e: SeekHit P1 P2
22730 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73   * * *.** Synops
22740 69 73 3a 20 73 65 65 6b 48 69 74 3d 50 32 0a 2a  is: seekHit=P2.*
22750 2a 0a 2a 2a 20 53 65 74 20 74 68 65 20 73 65 65  *.** Set the see
22760 6b 48 69 74 20 66 6c 61 67 20 6f 6e 20 63 75 72  kHit flag on cur
22770 73 6f 72 20 50 31 20 74 6f 20 74 68 65 20 76 61  sor P1 to the va
22780 6c 75 65 20 69 6e 20 50 32 2e 0a 2a 2a 20 54 68  lue in P2..** Th
22790 65 20 73 65 65 6b 48 69 74 20 66 6c 61 67 20 69  e seekHit flag i
227a0 73 20 75 73 65 64 20 62 79 20 74 68 65 20 49 66  s used by the If
227b0 4e 6f 48 6f 70 65 20 6f 70 63 6f 64 65 2e 0a 2a  NoHope opcode..*
227c0 2a 0a 2a 2a 20 50 31 20 6d 75 73 74 20 62 65 20  *.** P1 must be 
227d0 61 20 76 61 6c 69 64 20 62 2d 74 72 65 65 20 63  a valid b-tree c
227e0 75 72 73 6f 72 2e 20 20 50 32 20 6d 75 73 74 20  ursor.  P2 must 
227f0 62 65 20 61 20 62 6f 6f 6c 65 61 6e 20 76 61 6c  be a boolean val
22800 75 65 2c 0a 2a 2a 20 65 69 74 68 65 72 20 30 20  ue,.** either 0 
22810 6f 72 20 31 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  or 1..*/.case OP
22820 5f 53 65 65 6b 48 69 74 3a 20 7b 0a 20 20 56 64  _SeekHit: {.  Vd
22830 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20  beCursor *pC;.  
22840 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
22850 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d  =0 && pOp->p1<p-
22860 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43  >nCursor );.  pC
22870 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d   = p->apCsr[pOp-
22880 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p1];.  assert( 
22890 70 43 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  pC!=0 );.  asser
228a0 74 28 20 70 4f 70 2d 3e 70 32 3d 3d 30 20 7c 7c  t( pOp->p2==0 ||
228b0 20 70 4f 70 2d 3e 70 32 3d 3d 31 20 29 3b 0a 20   pOp->p2==1 );. 
228c0 20 70 43 2d 3e 73 65 65 6b 48 69 74 20 3d 20 70   pC->seekHit = p
228d0 4f 70 2d 3e 70 32 20 26 20 31 3b 0a 20 20 62 72  Op->p2 & 1;.  br
228e0 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
228f0 65 3a 20 46 6f 75 6e 64 20 50 31 20 50 32 20 50  e: Found P1 P2 P
22900 33 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73  3 P4 *.** Synops
22910 69 73 3a 20 6b 65 79 3d 72 5b 50 33 40 50 34 5d  is: key=r[P3@P4]
22920 0a 2a 2a 0a 2a 2a 20 49 66 20 50 34 3d 3d 30 20  .**.** If P4==0 
22930 74 68 65 6e 20 72 65 67 69 73 74 65 72 20 50 33  then register P3
22940 20 68 6f 6c 64 73 20 61 20 62 6c 6f 62 20 63 6f   holds a blob co
22950 6e 73 74 72 75 63 74 65 64 20 62 79 20 4d 61 6b  nstructed by Mak
22960 65 52 65 63 6f 72 64 2e 20 20 49 66 0a 2a 2a 20  eRecord.  If.** 
22970 50 34 3e 30 20 74 68 65 6e 20 72 65 67 69 73 74  P4>0 then regist
22980 65 72 20 50 33 20 69 73 20 74 68 65 20 66 69 72  er P3 is the fir
22990 73 74 20 6f 66 20 50 34 20 72 65 67 69 73 74 65  st of P4 registe
229a0 72 73 20 74 68 61 74 20 66 6f 72 6d 20 61 6e 20  rs that form an 
229b0 75 6e 70 61 63 6b 65 64 0a 2a 2a 20 72 65 63 6f  unpacked.** reco
229c0 72 64 2e 0a 2a 2a 0a 2a 2a 20 43 75 72 73 6f 72  rd..**.** Cursor
229d0 20 50 31 20 69 73 20 6f 6e 20 61 6e 20 69 6e 64   P1 is on an ind
229e0 65 78 20 62 74 72 65 65 2e 20 20 49 66 20 74 68  ex btree.  If th
229f0 65 20 72 65 63 6f 72 64 20 69 64 65 6e 74 69 66  e record identif
22a00 69 65 64 20 62 79 20 50 33 20 61 6e 64 20 50 34  ied by P3 and P4
22a10 0a 2a 2a 20 69 73 20 61 20 70 72 65 66 69 78 20  .** is a prefix 
22a20 6f 66 20 61 6e 79 20 65 6e 74 72 79 20 69 6e 20  of any entry in 
22a30 50 31 20 74 68 65 6e 20 61 20 6a 75 6d 70 20 69  P1 then a jump i
22a40 73 20 6d 61 64 65 20 74 6f 20 50 32 20 61 6e 64  s made to P2 and
22a50 0a 2a 2a 20 50 31 20 69 73 20 6c 65 66 74 20 70  .** P1 is left p
22a60 6f 69 6e 74 69 6e 67 20 61 74 20 74 68 65 20 6d  ointing at the m
22a70 61 74 63 68 69 6e 67 20 65 6e 74 72 79 2e 0a 2a  atching entry..*
22a80 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 65 72 61 74  *.** This operat
22a90 69 6f 6e 20 6c 65 61 76 65 73 20 74 68 65 20 63  ion leaves the c
22aa0 75 72 73 6f 72 20 69 6e 20 61 20 73 74 61 74 65  ursor in a state
22ab0 20 77 68 65 72 65 20 69 74 20 63 61 6e 20 62 65   where it can be
22ac0 0a 2a 2a 20 61 64 76 61 6e 63 65 64 20 69 6e 20  .** advanced in 
22ad0 74 68 65 20 66 6f 72 77 61 72 64 20 64 69 72 65  the forward dire
22ae0 63 74 69 6f 6e 2e 20 20 54 68 65 20 4e 65 78 74  ction.  The Next
22af0 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 77 69 6c   instruction wil
22b00 6c 20 77 6f 72 6b 2c 0a 2a 2a 20 62 75 74 20 6e  l work,.** but n
22b10 6f 74 20 74 68 65 20 50 72 65 76 20 69 6e 73 74  ot the Prev inst
22b20 72 75 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 53  ruction..**.** S
22b30 65 65 20 61 6c 73 6f 3a 20 4e 6f 74 46 6f 75 6e  ee also: NotFoun
22b40 64 2c 20 4e 6f 43 6f 6e 66 6c 69 63 74 2c 20 4e  d, NoConflict, N
22b50 6f 74 45 78 69 73 74 73 2e 20 53 65 65 6b 47 65  otExists. SeekGe
22b60 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e  .*/./* Opcode: N
22b70 6f 74 46 6f 75 6e 64 20 50 31 20 50 32 20 50 33  otFound P1 P2 P3
22b80 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69   P4 *.** Synopsi
22b90 73 3a 20 6b 65 79 3d 72 5b 50 33 40 50 34 5d 0a  s: key=r[P3@P4].
22ba0 2a 2a 0a 2a 2a 20 49 66 20 50 34 3d 3d 30 20 74  **.** If P4==0 t
22bb0 68 65 6e 20 72 65 67 69 73 74 65 72 20 50 33 20  hen register P3 
22bc0 68 6f 6c 64 73 20 61 20 62 6c 6f 62 20 63 6f 6e  holds a blob con
22bd0 73 74 72 75 63 74 65 64 20 62 79 20 4d 61 6b 65  structed by Make
22be0 52 65 63 6f 72 64 2e 20 20 49 66 0a 2a 2a 20 50  Record.  If.** P
22bf0 34 3e 30 20 74 68 65 6e 20 72 65 67 69 73 74 65  4>0 then registe
22c00 72 20 50 33 20 69 73 20 74 68 65 20 66 69 72 73  r P3 is the firs
22c10 74 20 6f 66 20 50 34 20 72 65 67 69 73 74 65 72  t of P4 register
22c20 73 20 74 68 61 74 20 66 6f 72 6d 20 61 6e 20 75  s that form an u
22c30 6e 70 61 63 6b 65 64 0a 2a 2a 20 72 65 63 6f 72  npacked.** recor
22c40 64 2e 0a 2a 2a 20 0a 2a 2a 20 43 75 72 73 6f 72  d..** .** Cursor
22c50 20 50 31 20 69 73 20 6f 6e 20 61 6e 20 69 6e 64   P1 is on an ind
22c60 65 78 20 62 74 72 65 65 2e 20 20 49 66 20 74 68  ex btree.  If th
22c70 65 20 72 65 63 6f 72 64 20 69 64 65 6e 74 69 66  e record identif
22c80 69 65 64 20 62 79 20 50 33 20 61 6e 64 20 50 34  ied by P3 and P4
22c90 0a 2a 2a 20 69 73 20 6e 6f 74 20 74 68 65 20 70  .** is not the p
22ca0 72 65 66 69 78 20 6f 66 20 61 6e 79 20 65 6e 74  refix of any ent
22cb0 72 79 20 69 6e 20 50 31 20 74 68 65 6e 20 61 20  ry in P1 then a 
22cc0 6a 75 6d 70 20 69 73 20 6d 61 64 65 20 74 6f 20  jump is made to 
22cd0 50 32 2e 20 20 49 66 20 50 31 20 0a 2a 2a 20 64  P2.  If P1 .** d
22ce0 6f 65 73 20 63 6f 6e 74 61 69 6e 20 61 6e 20 65  oes contain an e
22cf0 6e 74 72 79 20 77 68 6f 73 65 20 70 72 65 66 69  ntry whose prefi
22d00 78 20 6d 61 74 63 68 65 73 20 74 68 65 20 50 33  x matches the P3
22d10 2f 50 34 20 72 65 63 6f 72 64 20 74 68 65 6e 20  /P4 record then 
22d20 63 6f 6e 74 72 6f 6c 0a 2a 2a 20 66 61 6c 6c 73  control.** falls
22d30 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20   through to the 
22d40 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e  next instruction
22d50 20 61 6e 64 20 50 31 20 69 73 20 6c 65 66 74 20   and P1 is left 
22d60 70 6f 69 6e 74 69 6e 67 20 61 74 20 74 68 65 0a  pointing at the.
22d70 2a 2a 20 6d 61 74 63 68 69 6e 67 20 65 6e 74 72  ** matching entr
22d80 79 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70  y..**.** This op
22d90 65 72 61 74 69 6f 6e 20 6c 65 61 76 65 73 20 74  eration leaves t
22da0 68 65 20 63 75 72 73 6f 72 20 69 6e 20 61 20 73  he cursor in a s
22db0 74 61 74 65 20 77 68 65 72 65 20 69 74 20 63 61  tate where it ca
22dc0 6e 6e 6f 74 20 62 65 0a 2a 2a 20 61 64 76 61 6e  nnot be.** advan
22dd0 63 65 64 20 69 6e 20 65 69 74 68 65 72 20 64 69  ced in either di
22de0 72 65 63 74 69 6f 6e 2e 20 20 49 6e 20 6f 74 68  rection.  In oth
22df0 65 72 20 77 6f 72 64 73 2c 20 74 68 65 20 4e 65  er words, the Ne
22e00 78 74 20 61 6e 64 20 50 72 65 76 0a 2a 2a 20 6f  xt and Prev.** o
22e10 70 63 6f 64 65 73 20 64 6f 20 6e 6f 74 20 77 6f  pcodes do not wo
22e20 72 6b 20 61 66 74 65 72 20 74 68 69 73 20 6f 70  rk after this op
22e30 65 72 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 53  eration..**.** S
22e40 65 65 20 61 6c 73 6f 3a 20 46 6f 75 6e 64 2c 20  ee also: Found, 
22e50 4e 6f 74 45 78 69 73 74 73 2c 20 4e 6f 43 6f 6e  NotExists, NoCon
22e60 66 6c 69 63 74 2c 20 49 66 4e 6f 48 6f 70 65 0a  flict, IfNoHope.
22e70 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 66  */./* Opcode: If
22e80 4e 6f 48 6f 70 65 20 50 31 20 50 32 20 50 33 20  NoHope P1 P2 P3 
22e90 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73  P4 *.** Synopsis
22ea0 3a 20 6b 65 79 3d 72 5b 50 33 40 50 34 5d 0a 2a  : key=r[P3@P4].*
22eb0 2a 0a 2a 2a 20 52 65 67 69 73 74 65 72 20 50 33  *.** Register P3
22ec0 20 69 73 20 74 68 65 20 66 69 72 73 74 20 6f 66   is the first of
22ed0 20 50 34 20 72 65 67 69 73 74 65 72 73 20 74 68   P4 registers th
22ee0 61 74 20 66 6f 72 6d 20 61 6e 20 75 6e 70 61 63  at form an unpac
22ef0 6b 65 64 0a 2a 2a 20 72 65 63 6f 72 64 2e 0a 2a  ked.** record..*
22f00 2a 0a 2a 2a 20 43 75 72 73 6f 72 20 50 31 20 69  *.** Cursor P1 i
22f10 73 20 6f 6e 20 61 6e 20 69 6e 64 65 78 20 62 74  s on an index bt
22f20 72 65 65 2e 20 20 49 66 20 74 68 65 20 73 65 65  ree.  If the see
22f30 6b 48 69 74 20 66 6c 61 67 20 69 73 20 73 65 74  kHit flag is set
22f40 20 6f 6e 20 50 31 2c 20 74 68 65 6e 0a 2a 2a 20   on P1, then.** 
22f50 74 68 69 73 20 6f 70 63 6f 64 65 20 69 73 20 61  this opcode is a
22f60 20 6e 6f 2d 6f 70 2e 20 20 42 75 74 20 69 66 20   no-op.  But if 
22f70 74 68 65 20 73 65 65 6b 48 69 74 20 66 6c 61 67  the seekHit flag
22f80 20 6f 66 20 50 31 20 69 73 20 63 6c 65 61 72 2c   of P1 is clear,
22f90 20 74 68 65 6e 0a 2a 2a 20 63 68 65 63 6b 20 74   then.** check t
22fa0 6f 20 73 65 65 20 69 66 20 74 68 65 72 65 20 69  o see if there i
22fb0 73 20 61 6e 79 20 65 6e 74 72 79 20 69 6e 20 50  s any entry in P
22fc0 31 20 74 68 61 74 20 6d 61 74 63 68 65 73 20 74  1 that matches t
22fd0 68 65 0a 2a 2a 20 70 72 65 66 69 78 20 69 64 65  he.** prefix ide
22fe0 6e 74 69 66 69 65 64 20 62 79 20 50 33 20 61 6e  ntified by P3 an
22ff0 64 20 50 34 2e 20 20 49 66 20 6e 6f 20 65 6e 74  d P4.  If no ent
23000 72 79 20 6d 61 74 63 68 65 73 20 74 68 65 20 70  ry matches the p
23010 72 65 66 69 78 2c 0a 2a 2a 20 6a 75 6d 70 20 74  refix,.** jump t
23020 6f 20 50 32 2e 20 20 4f 74 68 65 72 77 69 73 65  o P2.  Otherwise
23030 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 2e 0a 2a   fall through..*
23040 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65  *.** This opcode
23050 20 62 65 68 61 76 65 73 20 6c 69 6b 65 20 4f 50   behaves like OP
23060 5f 4e 6f 74 46 6f 75 6e 64 20 69 66 20 74 68 65  _NotFound if the
23070 20 73 65 65 6b 48 69 74 0a 2a 2a 20 66 6c 61 67   seekHit.** flag
23080 20 69 73 20 63 6c 65 61 72 20 61 6e 64 20 69 74   is clear and it
23090 20 62 65 68 61 76 65 73 20 6c 69 6b 65 20 4f 50   behaves like OP
230a0 5f 4e 6f 6f 70 20 69 66 20 74 68 65 20 73 65 65  _Noop if the see
230b0 6b 48 69 74 20 66 6c 61 67 20 69 73 20 73 65 74  kHit flag is set
230c0 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63  ..**.** This opc
230d0 6f 64 65 20 69 73 20 75 73 65 64 20 69 6e 20 49  ode is used in I
230e0 4e 20 63 6c 61 75 73 65 20 70 72 6f 63 65 73 73  N clause process
230f0 69 6e 67 20 66 6f 72 20 61 20 6d 75 6c 74 69 2d  ing for a multi-
23100 63 6f 6c 75 6d 6e 20 6b 65 79 2e 0a 2a 2a 20 49  column key..** I
23110 66 20 61 6e 20 49 4e 20 63 6c 61 75 73 65 20 69  f an IN clause i
23120 73 20 61 74 74 61 63 68 65 64 20 74 6f 20 61 6e  s attached to an
23130 20 65 6c 65 6d 65 6e 74 20 6f 66 20 74 68 65 20   element of the 
23140 6b 65 79 20 6f 74 68 65 72 20 74 68 61 6e 20 74  key other than t
23150 68 65 0a 2a 2a 20 6c 65 66 74 2d 6d 6f 73 74 20  he.** left-most 
23160 65 6c 65 6d 65 6e 74 2c 20 61 6e 64 20 69 66 20  element, and if 
23170 74 68 65 72 65 20 61 72 65 20 6e 6f 20 6d 61 74  there are no mat
23180 63 68 65 73 20 6f 6e 20 74 68 65 20 6d 6f 73 74  ches on the most
23190 20 72 65 63 65 6e 74 0a 2a 2a 20 73 65 65 6b 20   recent.** seek 
231a0 6f 76 65 72 20 74 68 65 20 77 68 6f 6c 65 20 6b  over the whole k
231b0 65 79 2c 20 74 68 65 6e 20 69 74 20 6d 69 67 68  ey, then it migh
231c0 74 20 62 65 20 74 68 61 74 20 6f 6e 65 20 6f 66  t be that one of
231d0 20 74 68 65 20 6b 65 79 20 65 6c 65 6d 65 6e 74   the key element
231e0 0a 2a 2a 20 74 6f 20 74 68 65 20 6c 65 66 74 20  .** to the left 
231f0 69 73 20 70 72 6f 68 69 62 69 74 69 6e 67 20 61  is prohibiting a
23200 20 6d 61 74 63 68 2c 20 61 6e 64 20 68 65 6e 63   match, and henc
23210 65 20 74 68 65 72 65 20 69 73 20 22 6e 6f 20 68  e there is "no h
23220 6f 70 65 22 20 6f 66 0a 2a 2a 20 61 6e 79 20 6d  ope" of.** any m
23230 61 74 63 68 20 72 65 67 61 72 64 6c 65 73 73 20  atch regardless 
23240 6f 66 20 68 6f 77 20 6d 61 6e 79 20 49 4e 20 63  of how many IN c
23250 6c 61 75 73 65 20 65 6c 65 6d 65 6e 74 73 20 61  lause elements a
23260 72 65 20 63 68 65 63 6b 65 64 2e 0a 2a 2a 20 49  re checked..** I
23270 6e 20 73 75 63 68 20 61 20 63 61 73 65 2c 20 77  n such a case, w
23280 65 20 61 62 61 6e 64 6f 6e 20 74 68 65 20 49 4e  e abandon the IN
23290 20 63 6c 61 75 73 65 20 73 65 61 72 63 68 20 65   clause search e
232a0 61 72 6c 79 2c 20 75 73 69 6e 67 20 74 68 69 73  arly, using this
232b0 0a 2a 2a 20 6f 70 63 6f 64 65 2e 20 20 54 68 65  .** opcode.  The
232c0 20 6f 70 63 6f 64 65 20 6e 61 6d 65 20 63 6f 6d   opcode name com
232d0 65 73 20 66 72 6f 6d 20 74 68 65 20 66 61 63 74  es from the fact
232e0 20 74 68 61 74 20 74 68 65 0a 2a 2a 20 6a 75 6d   that the.** jum
232f0 70 20 69 73 20 74 61 6b 65 6e 20 69 66 20 74 68  p is taken if th
23300 65 72 65 20 69 73 20 22 6e 6f 20 68 6f 70 65 22  ere is "no hope"
23310 20 6f 66 20 61 63 68 69 65 76 69 6e 67 20 61 20   of achieving a 
23320 6d 61 74 63 68 2e 0a 2a 2a 0a 2a 2a 20 53 65 65  match..**.** See
23330 20 61 6c 73 6f 3a 20 4e 6f 74 46 6f 75 6e 64 2c   also: NotFound,
23340 20 53 65 65 6b 48 69 74 0a 2a 2f 0a 2f 2a 20 4f   SeekHit.*/./* O
23350 70 63 6f 64 65 3a 20 4e 6f 43 6f 6e 66 6c 69 63  pcode: NoConflic
23360 74 20 50 31 20 50 32 20 50 33 20 50 34 20 2a 0a  t P1 P2 P3 P4 *.
23370 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79  ** Synopsis: key
23380 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20  =r[P3@P4].**.** 
23390 49 66 20 50 34 3d 3d 30 20 74 68 65 6e 20 72 65  If P4==0 then re
233a0 67 69 73 74 65 72 20 50 33 20 68 6f 6c 64 73 20  gister P3 holds 
233b0 61 20 62 6c 6f 62 20 63 6f 6e 73 74 72 75 63 74  a blob construct
233c0 65 64 20 62 79 20 4d 61 6b 65 52 65 63 6f 72 64  ed by MakeRecord
233d0 2e 20 20 49 66 0a 2a 2a 20 50 34 3e 30 20 74 68  .  If.** P4>0 th
233e0 65 6e 20 72 65 67 69 73 74 65 72 20 50 33 20 69  en register P3 i
233f0 73 20 74 68 65 20 66 69 72 73 74 20 6f 66 20 50  s the first of P
23400 34 20 72 65 67 69 73 74 65 72 73 20 74 68 61 74  4 registers that
23410 20 66 6f 72 6d 20 61 6e 20 75 6e 70 61 63 6b 65   form an unpacke
23420 64 0a 2a 2a 20 72 65 63 6f 72 64 2e 0a 2a 2a 20  d.** record..** 
23430 0a 2a 2a 20 43 75 72 73 6f 72 20 50 31 20 69 73  .** Cursor P1 is
23440 20 6f 6e 20 61 6e 20 69 6e 64 65 78 20 62 74 72   on an index btr
23450 65 65 2e 20 20 49 66 20 74 68 65 20 72 65 63 6f  ee.  If the reco
23460 72 64 20 69 64 65 6e 74 69 66 69 65 64 20 62 79  rd identified by
23470 20 50 33 20 61 6e 64 20 50 34 0a 2a 2a 20 63 6f   P3 and P4.** co
23480 6e 74 61 69 6e 73 20 61 6e 79 20 4e 55 4c 4c 20  ntains any NULL 
23490 76 61 6c 75 65 2c 20 6a 75 6d 70 20 69 6d 6d 65  value, jump imme
234a0 64 69 61 74 65 6c 79 20 74 6f 20 50 32 2e 20 20  diately to P2.  
234b0 49 66 20 61 6c 6c 20 74 65 72 6d 73 20 6f 66 20  If all terms of 
234c0 74 68 65 0a 2a 2a 20 72 65 63 6f 72 64 20 61 72  the.** record ar
234d0 65 20 6e 6f 74 2d 4e 55 4c 4c 20 74 68 65 6e 20  e not-NULL then 
234e0 61 20 63 68 65 63 6b 20 69 73 20 64 6f 6e 65 20  a check is done 
234f0 74 6f 20 64 65 74 65 72 6d 69 6e 65 20 69 66 20  to determine if 
23500 61 6e 79 20 72 6f 77 20 69 6e 20 74 68 65 0a 2a  any row in the.*
23510 2a 20 50 31 20 69 6e 64 65 78 20 62 74 72 65 65  * P1 index btree
23520 20 68 61 73 20 61 20 6d 61 74 63 68 69 6e 67 20   has a matching 
23530 6b 65 79 20 70 72 65 66 69 78 2e 20 20 49 66 20  key prefix.  If 
23540 74 68 65 72 65 20 61 72 65 20 6e 6f 20 6d 61 74  there are no mat
23550 63 68 65 73 2c 20 6a 75 6d 70 0a 2a 2a 20 69 6d  ches, jump.** im
23560 6d 65 64 69 61 74 65 6c 79 20 74 6f 20 50 32 2e  mediately to P2.
23570 20 20 49 66 20 74 68 65 72 65 20 69 73 20 61 20    If there is a 
23580 6d 61 74 63 68 2c 20 66 61 6c 6c 20 74 68 72 6f  match, fall thro
23590 75 67 68 20 61 6e 64 20 6c 65 61 76 65 20 74 68  ugh and leave th
235a0 65 20 50 31 0a 2a 2a 20 63 75 72 73 6f 72 20 70  e P1.** cursor p
235b0 6f 69 6e 74 69 6e 67 20 74 6f 20 74 68 65 20 6d  ointing to the m
235c0 61 74 63 68 69 6e 67 20 72 6f 77 2e 0a 2a 2a 0a  atching row..**.
235d0 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 69  ** This opcode i
235e0 73 20 73 69 6d 69 6c 61 72 20 74 6f 20 4f 50 5f  s similar to OP_
235f0 4e 6f 74 46 6f 75 6e 64 20 77 69 74 68 20 74 68  NotFound with th
23600 65 20 65 78 63 65 70 74 69 6f 6e 73 20 74 68 61  e exceptions tha
23610 74 20 74 68 65 0a 2a 2a 20 62 72 61 6e 63 68 20  t the.** branch 
23620 69 73 20 61 6c 77 61 79 73 20 74 61 6b 65 6e 20  is always taken 
23630 69 66 20 61 6e 79 20 70 61 72 74 20 6f 66 20 74  if any part of t
23640 68 65 20 73 65 61 72 63 68 20 6b 65 79 20 69 6e  he search key in
23650 70 75 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2a 0a  put is NULL..**.
23660 2a 2a 20 54 68 69 73 20 6f 70 65 72 61 74 69 6f  ** This operatio
23670 6e 20 6c 65 61 76 65 73 20 74 68 65 20 63 75 72  n leaves the cur
23680 73 6f 72 20 69 6e 20 61 20 73 74 61 74 65 20 77  sor in a state w
23690 68 65 72 65 20 69 74 20 63 61 6e 6e 6f 74 20 62  here it cannot b
236a0 65 0a 2a 2a 20 61 64 76 61 6e 63 65 64 20 69 6e  e.** advanced in
236b0 20 65 69 74 68 65 72 20 64 69 72 65 63 74 69 6f   either directio
236c0 6e 2e 20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72  n.  In other wor
236d0 64 73 2c 20 74 68 65 20 4e 65 78 74 20 61 6e 64  ds, the Next and
236e0 20 50 72 65 76 0a 2a 2a 20 6f 70 63 6f 64 65 73   Prev.** opcodes
236f0 20 64 6f 20 6e 6f 74 20 77 6f 72 6b 20 61 66 74   do not work aft
23700 65 72 20 74 68 69 73 20 6f 70 65 72 61 74 69 6f  er this operatio
23710 6e 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73  n..**.** See als
23720 6f 3a 20 4e 6f 74 46 6f 75 6e 64 2c 20 46 6f 75  o: NotFound, Fou
23730 6e 64 2c 20 4e 6f 74 45 78 69 73 74 73 0a 2a 2f  nd, NotExists.*/
23740 0a 63 61 73 65 20 4f 50 5f 49 66 4e 6f 48 6f 70  .case OP_IfNoHop
23750 65 3a 20 7b 20 20 20 20 20 2f 2a 20 6a 75 6d 70  e: {     /* jump
23760 2c 20 69 6e 33 20 2a 2f 0a 20 20 56 64 62 65 43  , in3 */.  VdbeC
23770 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 61 73 73  ursor *pC;.  ass
23780 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20  ert( pOp->p1>=0 
23790 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43  && pOp->p1<p->nC
237a0 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20  ursor );.  pC = 
237b0 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31  p->apCsr[pOp->p1
237c0 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21  ];.  assert( pC!
237d0 3d 30 20 29 3b 0a 20 20 69 66 28 20 70 43 2d 3e  =0 );.  if( pC->
237e0 73 65 65 6b 48 69 74 20 29 20 62 72 65 61 6b 3b  seekHit ) break;
237f0 0a 20 20 2f 2a 20 46 61 6c 6c 20 74 68 72 6f 75  .  /* Fall throu
23800 67 68 20 69 6e 74 6f 20 4f 50 5f 4e 6f 74 46 6f  gh into OP_NotFo
23810 75 6e 64 20 2a 2f 0a 7d 0a 63 61 73 65 20 4f 50  und */.}.case OP
23820 5f 4e 6f 43 6f 6e 66 6c 69 63 74 3a 20 20 20 20  _NoConflict:    
23830 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f   /* jump, in3 */
23840 0a 63 61 73 65 20 4f 50 5f 4e 6f 74 46 6f 75 6e  .case OP_NotFoun
23850 64 3a 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70  d:       /* jump
23860 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50  , in3 */.case OP
23870 5f 46 6f 75 6e 64 3a 20 7b 20 20 20 20 20 20 20  _Found: {       
23880 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f   /* jump, in3 */
23890 0a 20 20 69 6e 74 20 61 6c 72 65 61 64 79 45 78  .  int alreadyEx
238a0 69 73 74 73 3b 0a 20 20 69 6e 74 20 74 61 6b 65  ists;.  int take
238b0 4a 75 6d 70 3b 0a 20 20 69 6e 74 20 69 69 3b 0a  Jump;.  int ii;.
238c0 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43    VdbeCursor *pC
238d0 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a 20 20 55  ;.  int res;.  U
238e0 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 20 2a 70  npackedRecord *p
238f0 46 72 65 65 3b 0a 20 20 55 6e 70 61 63 6b 65 64  Free;.  Unpacked
23900 52 65 63 6f 72 64 20 2a 70 49 64 78 4b 65 79 3b  Record *pIdxKey;
23910 0a 20 20 55 6e 70 61 63 6b 65 64 52 65 63 6f 72  .  UnpackedRecor
23920 64 20 72 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c  d r;..#ifdef SQL
23930 49 54 45 5f 54 45 53 54 0a 20 20 69 66 28 20 70  ITE_TEST.  if( p
23940 4f 70 2d 3e 6f 70 63 6f 64 65 21 3d 4f 50 5f 4e  Op->opcode!=OP_N
23950 6f 43 6f 6e 66 6c 69 63 74 20 29 20 73 71 6c 69  oConflict ) sqli
23960 74 65 33 5f 66 6f 75 6e 64 5f 63 6f 75 6e 74 2b  te3_found_count+
23970 2b 3b 0a 23 65 6e 64 69 66 0a 0a 20 20 61 73 73  +;.#endif..  ass
23980 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20  ert( pOp->p1>=0 
23990 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43  && pOp->p1<p->nC
239a0 75 72 73 6f 72 20 29 3b 0a 20 20 61 73 73 65 72  ursor );.  asser
239b0 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d  t( pOp->p4type==
239c0 50 34 5f 49 4e 54 33 32 20 29 3b 0a 20 20 70 43  P4_INT32 );.  pC
239d0 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d   = p->apCsr[pOp-
239e0 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p1];.  assert( 
239f0 70 43 21 3d 30 20 29 3b 0a 23 69 66 64 65 66 20  pC!=0 );.#ifdef 
23a00 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 70  SQLITE_DEBUG.  p
23a10 43 2d 3e 73 65 65 6b 4f 70 20 3d 20 70 4f 70 2d  C->seekOp = pOp-
23a20 3e 6f 70 63 6f 64 65 3b 0a 23 65 6e 64 69 66 0a  >opcode;.#endif.
23a30 20 20 70 49 6e 33 20 3d 20 26 61 4d 65 6d 5b 70    pIn3 = &aMem[p
23a40 4f 70 2d 3e 70 33 5d 3b 0a 20 20 61 73 73 65 72  Op->p3];.  asser
23a50 74 28 20 70 43 2d 3e 65 43 75 72 54 79 70 65 3d  t( pC->eCurType=
23a60 3d 43 55 52 54 59 50 45 5f 42 54 52 45 45 20 29  =CURTYPE_BTREE )
23a70 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  ;.  assert( pC->
23a80 75 63 2e 70 43 75 72 73 6f 72 21 3d 30 20 29 3b  uc.pCursor!=0 );
23a90 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69  .  assert( pC->i
23aa0 73 54 61 62 6c 65 3d 3d 30 20 29 3b 0a 20 20 69  sTable==0 );.  i
23ab0 66 28 20 70 4f 70 2d 3e 70 34 2e 69 3e 30 20 29  f( pOp->p4.i>0 )
23ac0 7b 0a 20 20 20 20 72 2e 70 4b 65 79 49 6e 66 6f  {.    r.pKeyInfo
23ad0 20 3d 20 70 43 2d 3e 70 4b 65 79 49 6e 66 6f 3b   = pC->pKeyInfo;
23ae0 0a 20 20 20 20 72 2e 6e 46 69 65 6c 64 20 3d 20  .    r.nField = 
23af0 28 75 31 36 29 70 4f 70 2d 3e 70 34 2e 69 3b 0a  (u16)pOp->p4.i;.
23b00 20 20 20 20 72 2e 61 4d 65 6d 20 3d 20 70 49 6e      r.aMem = pIn
23b10 33 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  3;.#ifdef SQLITE
23b20 5f 44 45 42 55 47 0a 20 20 20 20 66 6f 72 28 69  _DEBUG.    for(i
23b30 69 3d 30 3b 20 69 69 3c 72 2e 6e 46 69 65 6c 64  i=0; ii<r.nField
23b40 3b 20 69 69 2b 2b 29 7b 0a 20 20 20 20 20 20 61  ; ii++){.      a
23b50 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69  ssert( memIsVali
23b60 64 28 26 72 2e 61 4d 65 6d 5b 69 69 5d 29 20 29  d(&r.aMem[ii]) )
23b70 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  ;.      assert( 
23b80 28 72 2e 61 4d 65 6d 5b 69 69 5d 2e 66 6c 61 67  (r.aMem[ii].flag
23b90 73 20 26 20 4d 45 4d 5f 5a 65 72 6f 29 3d 3d 30  s & MEM_Zero)==0
23ba0 20 7c 7c 20 72 2e 61 4d 65 6d 5b 69 69 5d 2e 6e   || r.aMem[ii].n
23bb0 3d 3d 30 20 29 3b 0a 20 20 20 20 20 20 69 66 28  ==0 );.      if(
23bc0 20 69 69 20 29 20 52 45 47 49 53 54 45 52 5f 54   ii ) REGISTER_T
23bd0 52 41 43 45 28 70 4f 70 2d 3e 70 33 2b 69 69 2c  RACE(pOp->p3+ii,
23be0 20 26 72 2e 61 4d 65 6d 5b 69 69 5d 29 3b 0a 20   &r.aMem[ii]);. 
23bf0 20 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20 20 20     }.#endif.    
23c00 70 49 64 78 4b 65 79 20 3d 20 26 72 3b 0a 20 20  pIdxKey = &r;.  
23c10 20 20 70 46 72 65 65 20 3d 20 30 3b 0a 20 20 7d    pFree = 0;.  }
23c20 65 6c 73 65 7b 0a 20 20 20 20 61 73 73 65 72 74  else{.    assert
23c30 28 20 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20  ( pIn3->flags & 
23c40 4d 45 4d 5f 42 6c 6f 62 20 29 3b 0a 20 20 20 20  MEM_Blob );.    
23c50 72 63 20 3d 20 45 78 70 61 6e 64 42 6c 6f 62 28  rc = ExpandBlob(
23c60 70 49 6e 33 29 3b 0a 20 20 20 20 61 73 73 65 72  pIn3);.    asser
23c70 74 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  t( rc==SQLITE_OK
23c80 20 7c 7c 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4e   || rc==SQLITE_N
23c90 4f 4d 45 4d 20 29 3b 0a 20 20 20 20 69 66 28 20  OMEM );.    if( 
23ca0 72 63 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d  rc ) goto no_mem
23cb0 3b 0a 20 20 20 20 70 46 72 65 65 20 3d 20 70 49  ;.    pFree = pI
23cc0 64 78 4b 65 79 20 3d 20 73 71 6c 69 74 65 33 56  dxKey = sqlite3V
23cd0 64 62 65 41 6c 6c 6f 63 55 6e 70 61 63 6b 65 64  dbeAllocUnpacked
23ce0 52 65 63 6f 72 64 28 70 43 2d 3e 70 4b 65 79 49  Record(pC->pKeyI
23cf0 6e 66 6f 29 3b 0a 20 20 20 20 69 66 28 20 70 49  nfo);.    if( pI
23d00 64 78 4b 65 79 3d 3d 30 20 29 20 67 6f 74 6f 20  dxKey==0 ) goto 
23d10 6e 6f 5f 6d 65 6d 3b 0a 20 20 20 20 73 71 6c 69  no_mem;.    sqli
23d20 74 65 33 56 64 62 65 52 65 63 6f 72 64 55 6e 70  te3VdbeRecordUnp
23d30 61 63 6b 28 70 43 2d 3e 70 4b 65 79 49 6e 66 6f  ack(pC->pKeyInfo
23d40 2c 20 70 49 6e 33 2d 3e 6e 2c 20 70 49 6e 33 2d  , pIn3->n, pIn3-
23d50 3e 7a 2c 20 70 49 64 78 4b 65 79 29 3b 0a 20 20  >z, pIdxKey);.  
23d60 7d 0a 20 20 70 49 64 78 4b 65 79 2d 3e 64 65 66  }.  pIdxKey->def
23d70 61 75 6c 74 5f 72 63 20 3d 20 30 3b 0a 20 20 74  ault_rc = 0;.  t
23d80 61 6b 65 4a 75 6d 70 20 3d 20 30 3b 0a 20 20 69  akeJump = 0;.  i
23d90 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d  f( pOp->opcode==
23da0 4f 50 5f 4e 6f 43 6f 6e 66 6c 69 63 74 20 29 7b  OP_NoConflict ){
23db0 0a 20 20 20 20 2f 2a 20 46 6f 72 20 74 68 65 20  .    /* For the 
23dc0 4f 50 5f 4e 6f 43 6f 6e 66 6c 69 63 74 20 6f 70  OP_NoConflict op
23dd0 63 6f 64 65 2c 20 74 61 6b 65 20 74 68 65 20 6a  code, take the j
23de0 75 6d 70 20 69 66 20 61 6e 79 20 6f 66 20 74 68  ump if any of th
23df0 65 0a 20 20 20 20 2a 2a 20 69 6e 70 75 74 20 66  e.    ** input f
23e00 69 65 6c 64 73 20 61 72 65 20 4e 55 4c 4c 2c 20  ields are NULL, 
23e10 73 69 6e 63 65 20 61 6e 79 20 6b 65 79 20 77 69  since any key wi
23e20 74 68 20 61 20 4e 55 4c 4c 20 77 69 6c 6c 20 6e  th a NULL will n
23e30 6f 74 0a 20 20 20 20 2a 2a 20 63 6f 6e 66 6c 69  ot.    ** confli
23e40 63 74 20 2a 2f 0a 20 20 20 20 66 6f 72 28 69 69  ct */.    for(ii
23e50 3d 30 3b 20 69 69 3c 70 49 64 78 4b 65 79 2d 3e  =0; ii<pIdxKey->
23e60 6e 46 69 65 6c 64 3b 20 69 69 2b 2b 29 7b 0a 20  nField; ii++){. 
23e70 20 20 20 20 20 69 66 28 20 70 49 64 78 4b 65 79       if( pIdxKey
23e80 2d 3e 61 4d 65 6d 5b 69 69 5d 2e 66 6c 61 67 73  ->aMem[ii].flags
23e90 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20   & MEM_Null ){. 
23ea0 20 20 20 20 20 20 20 74 61 6b 65 4a 75 6d 70 20         takeJump 
23eb0 3d 20 31 3b 0a 20 20 20 20 20 20 20 20 62 72 65  = 1;.        bre
23ec0 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  ak;.      }.    
23ed0 7d 0a 20 20 7d 0a 20 20 72 63 20 3d 20 73 71 6c  }.  }.  rc = sql
23ee0 69 74 65 33 42 74 72 65 65 4d 6f 76 65 74 6f 55  ite3BtreeMovetoU
23ef0 6e 70 61 63 6b 65 64 28 70 43 2d 3e 75 63 2e 70  npacked(pC->uc.p
23f00 43 75 72 73 6f 72 2c 20 70 49 64 78 4b 65 79 2c  Cursor, pIdxKey,
23f10 20 30 2c 20 30 2c 20 26 72 65 73 29 3b 0a 20 20   0, 0, &res);.  
23f20 69 66 28 20 70 46 72 65 65 20 29 20 73 71 6c 69  if( pFree ) sqli
23f30 74 65 33 44 62 46 72 65 65 4e 4e 28 64 62 2c 20  te3DbFreeNN(db, 
23f40 70 46 72 65 65 29 3b 0a 20 20 69 66 28 20 72 63  pFree);.  if( rc
23f50 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20  !=SQLITE_OK ){. 
23f60 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75     goto abort_du
23f70 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 7d 0a  e_to_error;.  }.
23f80 20 20 70 43 2d 3e 73 65 65 6b 52 65 73 75 6c 74    pC->seekResult
23f90 20 3d 20 72 65 73 3b 0a 20 20 61 6c 72 65 61 64   = res;.  alread
23fa0 79 45 78 69 73 74 73 20 3d 20 28 72 65 73 3d 3d  yExists = (res==
23fb0 30 29 3b 0a 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f  0);.  pC->nullRo
23fc0 77 20 3d 20 31 2d 61 6c 72 65 61 64 79 45 78 69  w = 1-alreadyExi
23fd0 73 74 73 3b 0a 20 20 70 43 2d 3e 64 65 66 65 72  sts;.  pC->defer
23fe0 72 65 64 4d 6f 76 65 74 6f 20 3d 20 30 3b 0a 20  redMoveto = 0;. 
23ff0 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73   pC->cacheStatus
24000 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a   = CACHE_STALE;.
24010 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64    if( pOp->opcod
24020 65 3d 3d 4f 50 5f 46 6f 75 6e 64 20 29 7b 0a 20  e==OP_Found ){. 
24030 20 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b     VdbeBranchTak
24040 65 6e 28 61 6c 72 65 61 64 79 45 78 69 73 74 73  en(alreadyExists
24050 21 3d 30 2c 32 29 3b 0a 20 20 20 20 69 66 28 20  !=0,2);.    if( 
24060 61 6c 72 65 61 64 79 45 78 69 73 74 73 20 29 20  alreadyExists ) 
24070 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b  goto jump_to_p2;
24080 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 56 64  .  }else{.    Vd
24090 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 74 61  beBranchTaken(ta
240a0 6b 65 4a 75 6d 70 7c 7c 61 6c 72 65 61 64 79 45  keJump||alreadyE
240b0 78 69 73 74 73 3d 3d 30 2c 32 29 3b 0a 20 20 20  xists==0,2);.   
240c0 20 69 66 28 20 74 61 6b 65 4a 75 6d 70 20 7c 7c   if( takeJump ||
240d0 20 21 61 6c 72 65 61 64 79 45 78 69 73 74 73 20   !alreadyExists 
240e0 29 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70  ) goto jump_to_p
240f0 32 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  2;.  }.  break;.
24100 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 65  }../* Opcode: Se
24110 65 6b 52 6f 77 69 64 20 50 31 20 50 32 20 50 33  ekRowid P1 P2 P3
24120 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73   * *.** Synopsis
24130 3a 20 69 6e 74 6b 65 79 3d 72 5b 50 33 5d 0a 2a  : intkey=r[P3].*
24140 2a 0a 2a 2a 20 50 31 20 69 73 20 74 68 65 20 69  *.** P1 is the i
24150 6e 64 65 78 20 6f 66 20 61 20 63 75 72 73 6f 72  ndex of a cursor
24160 20 6f 70 65 6e 20 6f 6e 20 61 6e 20 53 51 4c 20   open on an SQL 
24170 74 61 62 6c 65 20 62 74 72 65 65 20 28 77 69 74  table btree (wit
24180 68 20 69 6e 74 65 67 65 72 0a 2a 2a 20 6b 65 79  h integer.** key
24190 73 29 2e 20 20 49 66 20 72 65 67 69 73 74 65 72  s).  If register
241a0 20 50 33 20 64 6f 65 73 20 6e 6f 74 20 63 6f 6e   P3 does not con
241b0 74 61 69 6e 20 61 6e 20 69 6e 74 65 67 65 72 20  tain an integer 
241c0 6f 72 20 69 66 20 50 31 20 64 6f 65 73 20 6e 6f  or if P1 does no
241d0 74 0a 2a 2a 20 63 6f 6e 74 61 69 6e 20 61 20 72  t.** contain a r
241e0 65 63 6f 72 64 20 77 69 74 68 20 72 6f 77 69 64  ecord with rowid
241f0 20 50 33 20 74 68 65 6e 20 6a 75 6d 70 20 69 6d   P3 then jump im
24200 6d 65 64 69 61 74 65 6c 79 20 74 6f 20 50 32 2e  mediately to P2.
24210 20 20 0a 2a 2a 20 4f 72 2c 20 69 66 20 50 32 20    .** Or, if P2 
24220 69 73 20 30 2c 20 72 61 69 73 65 20 61 6e 20 53  is 0, raise an S
24230 51 4c 49 54 45 5f 43 4f 52 52 55 50 54 20 65 72  QLITE_CORRUPT er
24240 72 6f 72 2e 20 49 66 20 50 31 20 64 6f 65 73 20  ror. If P1 does 
24250 63 6f 6e 74 61 69 6e 0a 2a 2a 20 61 20 72 65 63  contain.** a rec
24260 6f 72 64 20 77 69 74 68 20 72 6f 77 69 64 20 50  ord with rowid P
24270 33 20 74 68 65 6e 20 0a 2a 2a 20 6c 65 61 76 65  3 then .** leave
24280 20 74 68 65 20 63 75 72 73 6f 72 20 70 6f 69 6e   the cursor poin
24290 74 69 6e 67 20 61 74 20 74 68 61 74 20 72 65 63  ting at that rec
242a0 6f 72 64 20 61 6e 64 20 66 61 6c 6c 20 74 68 72  ord and fall thr
242b0 6f 75 67 68 20 74 6f 20 74 68 65 20 6e 65 78 74  ough to the next
242c0 0a 2a 2a 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e  .** instruction.
242d0 0a 2a 2a 0a 2a 2a 20 54 68 65 20 4f 50 5f 4e 6f  .**.** The OP_No
242e0 74 45 78 69 73 74 73 20 6f 70 63 6f 64 65 20 70  tExists opcode p
242f0 65 72 66 6f 72 6d 73 20 74 68 65 20 73 61 6d 65  erforms the same
24300 20 6f 70 65 72 61 74 69 6f 6e 2c 20 62 75 74 20   operation, but 
24310 77 69 74 68 20 4f 50 5f 4e 6f 74 45 78 69 73 74  with OP_NotExist
24320 73 0a 2a 2a 20 74 68 65 20 50 33 20 72 65 67 69  s.** the P3 regi
24330 73 74 65 72 20 6d 75 73 74 20 62 65 20 67 75 61  ster must be gua
24340 72 61 6e 74 65 65 64 20 74 6f 20 63 6f 6e 74 61  ranteed to conta
24350 69 6e 20 61 6e 20 69 6e 74 65 67 65 72 20 76 61  in an integer va
24360 6c 75 65 2e 20 20 57 69 74 68 20 74 68 69 73 0a  lue.  With this.
24370 2a 2a 20 6f 70 63 6f 64 65 2c 20 72 65 67 69 73  ** opcode, regis
24380 74 65 72 20 50 33 20 6d 69 67 68 74 20 6e 6f 74  ter P3 might not
24390 20 63 6f 6e 74 61 69 6e 20 61 6e 20 69 6e 74 65   contain an inte
243a0 67 65 72 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 4f  ger..**.** The O
243b0 50 5f 4e 6f 74 46 6f 75 6e 64 20 6f 70 63 6f 64  P_NotFound opcod
243c0 65 20 70 65 72 66 6f 72 6d 73 20 74 68 65 20 73  e performs the s
243d0 61 6d 65 20 6f 70 65 72 61 74 69 6f 6e 20 6f 6e  ame operation on
243e0 20 69 6e 64 65 78 20 62 74 72 65 65 73 0a 2a 2a   index btrees.**
243f0 20 28 77 69 74 68 20 61 72 62 69 74 72 61 72 79   (with arbitrary
24400 20 6d 75 6c 74 69 2d 76 61 6c 75 65 20 6b 65 79   multi-value key
24410 73 29 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f  s)..**.** This o
24420 70 63 6f 64 65 20 6c 65 61 76 65 73 20 74 68 65  pcode leaves the
24430 20 63 75 72 73 6f 72 20 69 6e 20 61 20 73 74 61   cursor in a sta
24440 74 65 20 77 68 65 72 65 20 69 74 20 63 61 6e 6e  te where it cann
24450 6f 74 20 62 65 20 61 64 76 61 6e 63 65 64 0a 2a  ot be advanced.*
24460 2a 20 69 6e 20 65 69 74 68 65 72 20 64 69 72 65  * in either dire
24470 63 74 69 6f 6e 2e 20 20 49 6e 20 6f 74 68 65 72  ction.  In other
24480 20 77 6f 72 64 73 2c 20 74 68 65 20 4e 65 78 74   words, the Next
24490 20 61 6e 64 20 50 72 65 76 20 6f 70 63 6f 64 65   and Prev opcode
244a0 73 20 77 69 6c 6c 0a 2a 2a 20 6e 6f 74 20 77 6f  s will.** not wo
244b0 72 6b 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 68 69  rk following thi
244c0 73 20 6f 70 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20  s opcode..**.** 
244d0 53 65 65 20 61 6c 73 6f 3a 20 46 6f 75 6e 64 2c  See also: Found,
244e0 20 4e 6f 74 46 6f 75 6e 64 2c 20 4e 6f 43 6f 6e   NotFound, NoCon
244f0 66 6c 69 63 74 2c 20 53 65 65 6b 52 6f 77 69 64  flict, SeekRowid
24500 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e  .*/./* Opcode: N
24510 6f 74 45 78 69 73 74 73 20 50 31 20 50 32 20 50  otExists P1 P2 P
24520 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69  3 * *.** Synopsi
24530 73 3a 20 69 6e 74 6b 65 79 3d 72 5b 50 33 5d 0a  s: intkey=r[P3].
24540 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 74 68 65 20  **.** P1 is the 
24550 69 6e 64 65 78 20 6f 66 20 61 20 63 75 72 73 6f  index of a curso
24560 72 20 6f 70 65 6e 20 6f 6e 20 61 6e 20 53 51 4c  r open on an SQL
24570 20 74 61 62 6c 65 20 62 74 72 65 65 20 28 77 69   table btree (wi
24580 74 68 20 69 6e 74 65 67 65 72 0a 2a 2a 20 6b 65  th integer.** ke
24590 79 73 29 2e 20 20 50 33 20 69 73 20 61 6e 20 69  ys).  P3 is an i
245a0 6e 74 65 67 65 72 20 72 6f 77 69 64 2e 20 20 49  nteger rowid.  I
245b0 66 20 50 31 20 64 6f 65 73 20 6e 6f 74 20 63 6f  f P1 does not co
245c0 6e 74 61 69 6e 20 61 20 72 65 63 6f 72 64 20 77  ntain a record w
245d0 69 74 68 0a 2a 2a 20 72 6f 77 69 64 20 50 33 20  ith.** rowid P3 
245e0 74 68 65 6e 20 6a 75 6d 70 20 69 6d 6d 65 64 69  then jump immedi
245f0 61 74 65 6c 79 20 74 6f 20 50 32 2e 20 20 4f 72  ately to P2.  Or
24600 2c 20 69 66 20 50 32 20 69 73 20 30 2c 20 72 61  , if P2 is 0, ra
24610 69 73 65 20 61 6e 0a 2a 2a 20 53 51 4c 49 54 45  ise an.** SQLITE
24620 5f 43 4f 52 52 55 50 54 20 65 72 72 6f 72 2e 20  _CORRUPT error. 
24630 49 66 20 50 31 20 64 6f 65 73 20 63 6f 6e 74 61  If P1 does conta
24640 69 6e 20 61 20 72 65 63 6f 72 64 20 77 69 74 68  in a record with
24650 20 72 6f 77 69 64 20 50 33 20 74 68 65 6e 20 0a   rowid P3 then .
24660 2a 2a 20 6c 65 61 76 65 20 74 68 65 20 63 75 72  ** leave the cur
24670 73 6f 72 20 70 6f 69 6e 74 69 6e 67 20 61 74 20  sor pointing at 
24680 74 68 61 74 20 72 65 63 6f 72 64 20 61 6e 64 20  that record and 
24690 66 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20  fall through to 
246a0 74 68 65 20 6e 65 78 74 0a 2a 2a 20 69 6e 73 74  the next.** inst
246b0 72 75 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54  ruction..**.** T
246c0 68 65 20 4f 50 5f 53 65 65 6b 52 6f 77 69 64 20  he OP_SeekRowid 
246d0 6f 70 63 6f 64 65 20 70 65 72 66 6f 72 6d 73 20  opcode performs 
246e0 74 68 65 20 73 61 6d 65 20 6f 70 65 72 61 74 69  the same operati
246f0 6f 6e 20 62 75 74 20 61 6c 73 6f 20 61 6c 6c 6f  on but also allo
24700 77 73 20 74 68 65 0a 2a 2a 20 50 33 20 72 65 67  ws the.** P3 reg
24710 69 73 74 65 72 20 74 6f 20 63 6f 6e 74 61 69 6e  ister to contain
24720 20 61 20 6e 6f 6e 2d 69 6e 74 65 67 65 72 20 76   a non-integer v
24730 61 6c 75 65 2c 20 69 6e 20 77 68 69 63 68 20 63  alue, in which c
24740 61 73 65 20 74 68 65 20 6a 75 6d 70 20 69 73 0a  ase the jump is.
24750 2a 2a 20 61 6c 77 61 79 73 20 74 61 6b 65 6e 2e  ** always taken.
24760 20 20 54 68 69 73 20 6f 70 63 6f 64 65 20 72 65    This opcode re
24770 71 75 69 72 65 73 20 74 68 61 74 20 50 33 20 61  quires that P3 a
24780 6c 77 61 79 73 20 63 6f 6e 74 61 69 6e 20 61 6e  lways contain an
24790 20 69 6e 74 65 67 65 72 2e 0a 2a 2a 0a 2a 2a 20   integer..**.** 
247a0 54 68 65 20 4f 50 5f 4e 6f 74 46 6f 75 6e 64 20  The OP_NotFound 
247b0 6f 70 63 6f 64 65 20 70 65 72 66 6f 72 6d 73 20  opcode performs 
247c0 74 68 65 20 73 61 6d 65 20 6f 70 65 72 61 74 69  the same operati
247d0 6f 6e 20 6f 6e 20 69 6e 64 65 78 20 62 74 72 65  on on index btre
247e0 65 73 0a 2a 2a 20 28 77 69 74 68 20 61 72 62 69  es.** (with arbi
247f0 74 72 61 72 79 20 6d 75 6c 74 69 2d 76 61 6c 75  trary multi-valu
24800 65 20 6b 65 79 73 29 2e 0a 2a 2a 0a 2a 2a 20 54  e keys)..**.** T
24810 68 69 73 20 6f 70 63 6f 64 65 20 6c 65 61 76 65  his opcode leave
24820 73 20 74 68 65 20 63 75 72 73 6f 72 20 69 6e 20  s the cursor in 
24830 61 20 73 74 61 74 65 20 77 68 65 72 65 20 69 74  a state where it
24840 20 63 61 6e 6e 6f 74 20 62 65 20 61 64 76 61 6e   cannot be advan
24850 63 65 64 0a 2a 2a 20 69 6e 20 65 69 74 68 65 72  ced.** in either
24860 20 64 69 72 65 63 74 69 6f 6e 2e 20 20 49 6e 20   direction.  In 
24870 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 74 68 65  other words, the
24880 20 4e 65 78 74 20 61 6e 64 20 50 72 65 76 20 6f   Next and Prev o
24890 70 63 6f 64 65 73 20 77 69 6c 6c 0a 2a 2a 20 6e  pcodes will.** n
248a0 6f 74 20 77 6f 72 6b 20 66 6f 6c 6c 6f 77 69 6e  ot work followin
248b0 67 20 74 68 69 73 20 6f 70 63 6f 64 65 2e 0a 2a  g this opcode..*
248c0 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 46  *.** See also: F
248d0 6f 75 6e 64 2c 20 4e 6f 74 46 6f 75 6e 64 2c 20  ound, NotFound, 
248e0 4e 6f 43 6f 6e 66 6c 69 63 74 2c 20 53 65 65 6b  NoConflict, Seek
248f0 52 6f 77 69 64 0a 2a 2f 0a 63 61 73 65 20 4f 50  Rowid.*/.case OP
24900 5f 53 65 65 6b 52 6f 77 69 64 3a 20 7b 20 20 20  _SeekRowid: {   
24910 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e       /* jump, in
24920 33 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73 6f  3 */.  VdbeCurso
24930 72 20 2a 70 43 3b 0a 20 20 42 74 43 75 72 73 6f  r *pC;.  BtCurso
24940 72 20 2a 70 43 72 73 72 3b 0a 20 20 69 6e 74 20  r *pCrsr;.  int 
24950 72 65 73 3b 0a 20 20 75 36 34 20 69 4b 65 79 3b  res;.  u64 iKey;
24960 0a 0a 20 20 70 49 6e 33 20 3d 20 26 61 4d 65 6d  ..  pIn3 = &aMem
24970 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 69 66 28  [pOp->p3];.  if(
24980 20 28 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20   (pIn3->flags & 
24990 4d 45 4d 5f 49 6e 74 29 3d 3d 30 20 29 7b 0a 20  MEM_Int)==0 ){. 
249a0 20 20 20 2f 2a 20 4d 61 6b 65 20 73 75 72 65 20     /* Make sure 
249b0 70 49 6e 33 2d 3e 75 2e 69 20 63 6f 6e 74 61 69  pIn3->u.i contai
249c0 6e 73 20 61 20 76 61 6c 69 64 20 69 6e 74 65 67  ns a valid integ
249d0 65 72 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f  er representatio
249e0 6e 20 6f 66 0a 20 20 20 20 2a 2a 20 74 68 65 20  n of.    ** the 
249f0 6b 65 79 20 76 61 6c 75 65 2c 20 62 75 74 20 64  key value, but d
24a00 6f 20 6e 6f 74 20 63 68 61 6e 67 65 20 74 68 65  o not change the
24a10 20 64 61 74 61 74 79 70 65 20 6f 66 20 74 68 65   datatype of the
24a20 20 72 65 67 69 73 74 65 72 2c 20 61 73 0a 20 20   register, as.  
24a30 20 20 2a 2a 20 6f 74 68 65 72 20 70 61 72 74 73    ** other parts
24a40 20 6f 66 20 74 68 65 20 70 65 72 70 61 72 65 64   of the perpared
24a50 20 73 74 61 74 65 6d 65 6e 74 20 6d 69 67 68 74   statement might
24a60 20 62 65 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e   be depending on
24a70 20 74 68 65 0a 20 20 20 20 2a 2a 20 63 75 72 72   the.    ** curr
24a80 65 6e 74 20 64 61 74 61 74 79 70 65 2e 20 2a 2f  ent datatype. */
24a90 0a 20 20 20 20 75 31 36 20 6f 72 69 67 46 6c 61  .    u16 origFla
24aa0 67 73 20 3d 20 70 49 6e 33 2d 3e 66 6c 61 67 73  gs = pIn3->flags
24ab0 3b 0a 20 20 20 20 69 6e 74 20 69 73 4e 6f 74 49  ;.    int isNotI
24ac0 6e 74 3b 0a 20 20 20 20 61 70 70 6c 79 41 66 66  nt;.    applyAff
24ad0 69 6e 69 74 79 28 70 49 6e 33 2c 20 53 51 4c 49  inity(pIn3, SQLI
24ae0 54 45 5f 41 46 46 5f 4e 55 4d 45 52 49 43 2c 20  TE_AFF_NUMERIC, 
24af0 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 20 20 69  encoding);.    i
24b00 73 4e 6f 74 49 6e 74 20 3d 20 28 70 49 6e 33 2d  sNotInt = (pIn3-
24b10 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74  >flags & MEM_Int
24b20 29 3d 3d 30 3b 0a 20 20 20 20 70 49 6e 33 2d 3e  )==0;.    pIn3->
24b30 66 6c 61 67 73 20 3d 20 6f 72 69 67 46 6c 61 67  flags = origFlag
24b40 73 3b 0a 20 20 20 20 69 66 28 20 69 73 4e 6f 74  s;.    if( isNot
24b50 49 6e 74 20 29 20 67 6f 74 6f 20 6a 75 6d 70 5f  Int ) goto jump_
24b60 74 6f 5f 70 32 3b 0a 20 20 7d 0a 20 20 2f 2a 20  to_p2;.  }.  /* 
24b70 46 61 6c 6c 20 74 68 72 6f 75 67 68 20 69 6e 74  Fall through int
24b80 6f 20 4f 50 5f 4e 6f 74 45 78 69 73 74 73 20 2a  o OP_NotExists *
24b90 2f 0a 63 61 73 65 20 4f 50 5f 4e 6f 74 45 78 69  /.case OP_NotExi
24ba0 73 74 73 3a 20 20 20 20 20 20 20 20 20 20 2f 2a  sts:          /*
24bb0 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 20 20   jump, in3 */.  
24bc0 70 49 6e 33 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn3 = &aMem[pOp
24bd0 2d 3e 70 33 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p3];.  assert(
24be0 20 28 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20   (pIn3->flags & 
24bf0 4d 45 4d 5f 49 6e 74 29 21 3d 30 20 7c 7c 20 70  MEM_Int)!=0 || p
24c00 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 53  Op->opcode==OP_S
24c10 65 65 6b 52 6f 77 69 64 20 29 3b 0a 20 20 61 73  eekRowid );.  as
24c20 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30  sert( pOp->p1>=0
24c30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e   && pOp->p1<p->n
24c40 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d  Cursor );.  pC =
24c50 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70   p->apCsr[pOp->p
24c60 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43  1];.  assert( pC
24c70 21 3d 30 20 29 3b 0a 23 69 66 64 65 66 20 53 51  !=0 );.#ifdef SQ
24c80 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 69 66 28  LITE_DEBUG.  if(
24c90 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50   pOp->opcode==OP
24ca0 5f 53 65 65 6b 52 6f 77 69 64 20 29 20 70 43 2d  _SeekRowid ) pC-
24cb0 3e 73 65 65 6b 4f 70 20 3d 20 4f 50 5f 53 65 65  >seekOp = OP_See
24cc0 6b 52 6f 77 69 64 3b 0a 23 65 6e 64 69 66 0a 20  kRowid;.#endif. 
24cd0 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73 54   assert( pC->isT
24ce0 61 62 6c 65 20 29 3b 0a 20 20 61 73 73 65 72 74  able );.  assert
24cf0 28 20 70 43 2d 3e 65 43 75 72 54 79 70 65 3d 3d  ( pC->eCurType==
24d00 43 55 52 54 59 50 45 5f 42 54 52 45 45 20 29 3b  CURTYPE_BTREE );
24d10 0a 20 20 70 43 72 73 72 20 3d 20 70 43 2d 3e 75  .  pCrsr = pC->u
24d20 63 2e 70 43 75 72 73 6f 72 3b 0a 20 20 61 73 73  c.pCursor;.  ass
24d30 65 72 74 28 20 70 43 72 73 72 21 3d 30 20 29 3b  ert( pCrsr!=0 );
24d40 0a 20 20 72 65 73 20 3d 20 30 3b 0a 20 20 69 4b  .  res = 0;.  iK
24d50 65 79 20 3d 20 70 49 6e 33 2d 3e 75 2e 69 3b 0a  ey = pIn3->u.i;.
24d60 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
24d70 72 65 65 4d 6f 76 65 74 6f 55 6e 70 61 63 6b 65  reeMovetoUnpacke
24d80 64 28 70 43 72 73 72 2c 20 30 2c 20 69 4b 65 79  d(pCrsr, 0, iKey
24d90 2c 20 30 2c 20 26 72 65 73 29 3b 0a 20 20 61 73  , 0, &res);.  as
24da0 73 65 72 74 28 20 72 63 3d 3d 53 51 4c 49 54 45  sert( rc==SQLITE
24db0 5f 4f 4b 20 7c 7c 20 72 65 73 3d 3d 30 20 29 3b  _OK || res==0 );
24dc0 0a 20 20 70 43 2d 3e 6d 6f 76 65 74 6f 54 61 72  .  pC->movetoTar
24dd0 67 65 74 20 3d 20 69 4b 65 79 3b 20 20 2f 2a 20  get = iKey;  /* 
24de0 55 73 65 64 20 62 79 20 4f 50 5f 44 65 6c 65 74  Used by OP_Delet
24df0 65 20 2a 2f 0a 20 20 70 43 2d 3e 6e 75 6c 6c 52  e */.  pC->nullR
24e00 6f 77 20 3d 20 30 3b 0a 20 20 70 43 2d 3e 63 61  ow = 0;.  pC->ca
24e10 63 68 65 53 74 61 74 75 73 20 3d 20 43 41 43 48  cheStatus = CACH
24e20 45 5f 53 54 41 4c 45 3b 0a 20 20 70 43 2d 3e 64  E_STALE;.  pC->d
24e30 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d 20  eferredMoveto = 
24e40 30 3b 0a 20 20 56 64 62 65 42 72 61 6e 63 68 54  0;.  VdbeBranchT
24e50 61 6b 65 6e 28 72 65 73 21 3d 30 2c 32 29 3b 0a  aken(res!=0,2);.
24e60 20 20 70 43 2d 3e 73 65 65 6b 52 65 73 75 6c 74    pC->seekResult
24e70 20 3d 20 72 65 73 3b 0a 20 20 69 66 28 20 72 65   = res;.  if( re
24e80 73 21 3d 30 20 29 7b 0a 20 20 20 20 61 73 73 65  s!=0 ){.    asse
24e90 72 74 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f  rt( rc==SQLITE_O
24ea0 4b 20 29 3b 0a 20 20 20 20 69 66 28 20 70 4f 70  K );.    if( pOp
24eb0 2d 3e 70 32 3d 3d 30 20 29 7b 0a 20 20 20 20 20  ->p2==0 ){.     
24ec0 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 43 4f 52   rc = SQLITE_COR
24ed0 52 55 50 54 5f 42 4b 50 54 3b 0a 20 20 20 20 7d  RUPT_BKPT;.    }
24ee0 65 6c 73 65 7b 0a 20 20 20 20 20 20 67 6f 74 6f  else{.      goto
24ef0 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 20   jump_to_p2;.   
24f00 20 7d 0a 20 20 7d 0a 20 20 69 66 28 20 72 63 20   }.  }.  if( rc 
24f10 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65  ) goto abort_due
24f20 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 62 72 65  _to_error;.  bre
24f30 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
24f40 3a 20 53 65 71 75 65 6e 63 65 20 50 31 20 50 32  : Sequence P1 P2
24f50 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73   * * *.** Synops
24f60 69 73 3a 20 72 5b 50 32 5d 3d 63 75 72 73 6f 72  is: r[P2]=cursor
24f70 5b 50 31 5d 2e 63 74 72 2b 2b 0a 2a 2a 0a 2a 2a  [P1].ctr++.**.**
24f80 20 46 69 6e 64 20 74 68 65 20 6e 65 78 74 20 61   Find the next a
24f90 76 61 69 6c 61 62 6c 65 20 73 65 71 75 65 6e 63  vailable sequenc
24fa0 65 20 6e 75 6d 62 65 72 20 66 6f 72 20 63 75 72  e number for cur
24fb0 73 6f 72 20 50 31 2e 0a 2a 2a 20 57 72 69 74 65  sor P1..** Write
24fc0 20 74 68 65 20 73 65 71 75 65 6e 63 65 20 6e 75   the sequence nu
24fd0 6d 62 65 72 20 69 6e 74 6f 20 72 65 67 69 73 74  mber into regist
24fe0 65 72 20 50 32 2e 0a 2a 2a 20 54 68 65 20 73 65  er P2..** The se
24ff0 71 75 65 6e 63 65 20 6e 75 6d 62 65 72 20 6f 6e  quence number on
25000 20 74 68 65 20 63 75 72 73 6f 72 20 69 73 20 69   the cursor is i
25010 6e 63 72 65 6d 65 6e 74 65 64 20 61 66 74 65 72  ncremented after
25020 20 74 68 69 73 0a 2a 2a 20 69 6e 73 74 72 75 63   this.** instruc
25030 74 69 6f 6e 2e 20 20 0a 2a 2f 0a 63 61 73 65 20  tion.  .*/.case 
25040 4f 50 5f 53 65 71 75 65 6e 63 65 3a 20 7b 20 20  OP_Sequence: {  
25050 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32           /* out2
25060 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f   */.  assert( pO
25070 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d  p->p1>=0 && pOp-
25080 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29  >p1<p->nCursor )
25090 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 61  ;.  assert( p->a
250a0 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 21 3d 30  pCsr[pOp->p1]!=0
250b0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d   );.  assert( p-
250c0 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 2d  >apCsr[pOp->p1]-
250d0 3e 65 43 75 72 54 79 70 65 21 3d 43 55 52 54 59  >eCurType!=CURTY
250e0 50 45 5f 56 54 41 42 20 29 3b 0a 20 20 70 4f 75  PE_VTAB );.  pOu
250f0 74 20 3d 20 6f 75 74 32 50 72 65 72 65 6c 65 61  t = out2Prerelea
25100 73 65 28 70 2c 20 70 4f 70 29 3b 0a 20 20 70 4f  se(p, pOp);.  pO
25110 75 74 2d 3e 75 2e 69 20 3d 20 70 2d 3e 61 70 43  ut->u.i = p->apC
25120 73 72 5b 70 4f 70 2d 3e 70 31 5d 2d 3e 73 65 71  sr[pOp->p1]->seq
25130 43 6f 75 6e 74 2b 2b 3b 0a 20 20 62 72 65 61 6b  Count++;.  break
25140 3b 0a 7d 0a 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  ;.}.../* Opcode:
25150 20 4e 65 77 52 6f 77 69 64 20 50 31 20 50 32 20   NewRowid P1 P2 
25160 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73  P3 * *.** Synops
25170 69 73 3a 20 72 5b 50 32 5d 3d 72 6f 77 69 64 0a  is: r[P2]=rowid.
25180 2a 2a 0a 2a 2a 20 47 65 74 20 61 20 6e 65 77 20  **.** Get a new 
25190 69 6e 74 65 67 65 72 20 72 65 63 6f 72 64 20 6e  integer record n
251a0 75 6d 62 65 72 20 28 61 2e 6b 2e 61 20 22 72 6f  umber (a.k.a "ro
251b0 77 69 64 22 29 20 75 73 65 64 20 61 73 20 74 68  wid") used as th
251c0 65 20 6b 65 79 20 74 6f 20 61 20 74 61 62 6c 65  e key to a table
251d0 2e 0a 2a 2a 20 54 68 65 20 72 65 63 6f 72 64 20  ..** The record 
251e0 6e 75 6d 62 65 72 20 69 73 20 6e 6f 74 20 70 72  number is not pr
251f0 65 76 69 6f 75 73 6c 79 20 75 73 65 64 20 61 73  eviously used as
25200 20 61 20 6b 65 79 20 69 6e 20 74 68 65 20 64 61   a key in the da
25210 74 61 62 61 73 65 0a 2a 2a 20 74 61 62 6c 65 20  tabase.** table 
25220 74 68 61 74 20 63 75 72 73 6f 72 20 50 31 20 70  that cursor P1 p
25230 6f 69 6e 74 73 20 74 6f 2e 20 20 54 68 65 20 6e  oints to.  The n
25240 65 77 20 72 65 63 6f 72 64 20 6e 75 6d 62 65 72  ew record number
25250 20 69 73 20 77 72 69 74 74 65 6e 0a 2a 2a 20 77   is written.** w
25260 72 69 74 74 65 6e 20 74 6f 20 72 65 67 69 73 74  ritten to regist
25270 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  er P2..**.** If 
25280 50 33 3e 30 20 74 68 65 6e 20 50 33 20 69 73 20  P3>0 then P3 is 
25290 61 20 72 65 67 69 73 74 65 72 20 69 6e 20 74 68  a register in th
252a0 65 20 72 6f 6f 74 20 66 72 61 6d 65 20 6f 66 20  e root frame of 
252b0 74 68 69 73 20 56 44 42 45 20 74 68 61 74 20 68  this VDBE that h
252c0 6f 6c 64 73 20 0a 2a 2a 20 74 68 65 20 6c 61 72  olds .** the lar
252d0 67 65 73 74 20 70 72 65 76 69 6f 75 73 6c 79 20  gest previously 
252e0 67 65 6e 65 72 61 74 65 64 20 72 65 63 6f 72 64  generated record
252f0 20 6e 75 6d 62 65 72 2e 20 4e 6f 20 6e 65 77 20   number. No new 
25300 72 65 63 6f 72 64 20 6e 75 6d 62 65 72 73 20 61  record numbers a
25310 72 65 0a 2a 2a 20 61 6c 6c 6f 77 65 64 20 74 6f  re.** allowed to
25320 20 62 65 20 6c 65 73 73 20 74 68 61 6e 20 74 68   be less than th
25330 69 73 20 76 61 6c 75 65 2e 20 57 68 65 6e 20 74  is value. When t
25340 68 69 73 20 76 61 6c 75 65 20 72 65 61 63 68 65  his value reache
25350 73 20 69 74 73 20 6d 61 78 69 6d 75 6d 2c 20 0a  s its maximum, .
25360 2a 2a 20 61 6e 20 53 51 4c 49 54 45 5f 46 55 4c  ** an SQLITE_FUL
25370 4c 20 65 72 72 6f 72 20 69 73 20 67 65 6e 65 72  L error is gener
25380 61 74 65 64 2e 20 54 68 65 20 50 33 20 72 65 67  ated. The P3 reg
25390 69 73 74 65 72 20 69 73 20 75 70 64 61 74 65 64  ister is updated
253a0 20 77 69 74 68 20 74 68 65 20 27 0a 2a 2a 20 67   with the '.** g
253b0 65 6e 65 72 61 74 65 64 20 72 65 63 6f 72 64 20  enerated record 
253c0 6e 75 6d 62 65 72 2e 20 54 68 69 73 20 50 33 20  number. This P3 
253d0 6d 65 63 68 61 6e 69 73 6d 20 69 73 20 75 73 65  mechanism is use
253e0 64 20 74 6f 20 68 65 6c 70 20 69 6d 70 6c 65 6d  d to help implem
253f0 65 6e 74 20 74 68 65 0a 2a 2a 20 41 55 54 4f 49  ent the.** AUTOI
25400 4e 43 52 45 4d 45 4e 54 20 66 65 61 74 75 72 65  NCREMENT feature
25410 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 65 77  ..*/.case OP_New
25420 52 6f 77 69 64 3a 20 7b 20 20 20 20 20 20 20 20  Rowid: {        
25430 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20 20     /* out2 */.  
25440 69 36 34 20 76 3b 20 20 20 20 20 20 20 20 20 20  i64 v;          
25450 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6e 65         /* The ne
25460 77 20 72 6f 77 69 64 20 2a 2f 0a 20 20 56 64 62  w rowid */.  Vdb
25470 65 43 75 72 73 6f 72 20 2a 70 43 3b 20 20 20 20  eCursor *pC;    
25480 20 20 20 20 2f 2a 20 43 75 72 73 6f 72 20 6f 66      /* Cursor of
25490 20 74 61 62 6c 65 20 74 6f 20 67 65 74 20 74 68   table to get th
254a0 65 20 6e 65 77 20 72 6f 77 69 64 20 2a 2f 0a 20  e new rowid */. 
254b0 20 69 6e 74 20 72 65 73 3b 20 20 20 20 20 20 20   int res;       
254c0 20 20 20 20 20 20 20 20 2f 2a 20 52 65 73 75 6c          /* Resul
254d0 74 20 6f 66 20 61 6e 20 73 71 6c 69 74 65 33 42  t of an sqlite3B
254e0 74 72 65 65 4c 61 73 74 28 29 20 2a 2f 0a 20 20  treeLast() */.  
254f0 69 6e 74 20 63 6e 74 3b 20 20 20 20 20 20 20 20  int cnt;        
25500 20 20 20 20 20 20 20 2f 2a 20 43 6f 75 6e 74 65         /* Counte
25510 72 20 74 6f 20 6c 69 6d 69 74 20 74 68 65 20 6e  r to limit the n
25520 75 6d 62 65 72 20 6f 66 20 73 65 61 72 63 68 65  umber of searche
25530 73 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d  s */.  Mem *pMem
25540 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
25550 20 52 65 67 69 73 74 65 72 20 68 6f 6c 64 69 6e   Register holdin
25560 67 20 6c 61 72 67 65 73 74 20 72 6f 77 69 64 20  g largest rowid 
25570 66 6f 72 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e  for AUTOINCREMEN
25580 54 20 2a 2f 0a 20 20 56 64 62 65 46 72 61 6d 65  T */.  VdbeFrame
25590 20 2a 70 46 72 61 6d 65 3b 20 20 20 20 20 2f 2a   *pFrame;     /*
255a0 20 52 6f 6f 74 20 66 72 61 6d 65 20 6f 66 20 56   Root frame of V
255b0 44 42 45 20 2a 2f 0a 0a 20 20 76 20 3d 20 30 3b  DBE */..  v = 0;
255c0 0a 20 20 72 65 73 20 3d 20 30 3b 0a 20 20 70 4f  .  res = 0;.  pO
255d0 75 74 20 3d 20 6f 75 74 32 50 72 65 72 65 6c 65  ut = out2Prerele
255e0 61 73 65 28 70 2c 20 70 4f 70 29 3b 0a 20 20 61  ase(p, pOp);.  a
255f0 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d  ssert( pOp->p1>=
25600 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e  0 && pOp->p1<p->
25610 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20  nCursor );.  pC 
25620 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e  = p->apCsr[pOp->
25630 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p1];.  assert( p
25640 43 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  C!=0 );.  assert
25650 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 20 29 3b  ( pC->isTable );
25660 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 65  .  assert( pC->e
25670 43 75 72 54 79 70 65 3d 3d 43 55 52 54 59 50 45  CurType==CURTYPE
25680 5f 42 54 52 45 45 20 29 3b 0a 20 20 61 73 73 65  _BTREE );.  asse
25690 72 74 28 20 70 43 2d 3e 75 63 2e 70 43 75 72 73  rt( pC->uc.pCurs
256a0 6f 72 21 3d 30 20 29 3b 0a 20 20 7b 0a 20 20 20  or!=0 );.  {.   
256b0 20 2f 2a 20 54 68 65 20 6e 65 78 74 20 72 6f 77   /* The next row
256c0 69 64 20 6f 72 20 72 65 63 6f 72 64 20 6e 75 6d  id or record num
256d0 62 65 72 20 28 64 69 66 66 65 72 65 6e 74 20 74  ber (different t
256e0 65 72 6d 73 20 66 6f 72 20 74 68 65 20 73 61 6d  erms for the sam
256f0 65 0a 20 20 20 20 2a 2a 20 74 68 69 6e 67 29 20  e.    ** thing) 
25700 69 73 20 6f 62 74 61 69 6e 65 64 20 69 6e 20 61  is obtained in a
25710 20 74 77 6f 2d 73 74 65 70 20 61 6c 67 6f 72 69   two-step algori
25720 74 68 6d 2e 0a 20 20 20 20 2a 2a 0a 20 20 20 20  thm..    **.    
25730 2a 2a 20 46 69 72 73 74 20 77 65 20 61 74 74 65  ** First we atte
25740 6d 70 74 20 74 6f 20 66 69 6e 64 20 74 68 65 20  mpt to find the 
25750 6c 61 72 67 65 73 74 20 65 78 69 73 74 69 6e 67  largest existing
25760 20 72 6f 77 69 64 20 61 6e 64 20 61 64 64 20 6f   rowid and add o
25770 6e 65 0a 20 20 20 20 2a 2a 20 74 6f 20 74 68 61  ne.    ** to tha
25780 74 2e 20 20 42 75 74 20 69 66 20 74 68 65 20 6c  t.  But if the l
25790 61 72 67 65 73 74 20 65 78 69 73 74 69 6e 67 20  argest existing 
257a0 72 6f 77 69 64 20 69 73 20 61 6c 72 65 61 64 79  rowid is already
257b0 20 74 68 65 20 6d 61 78 69 6d 75 6d 0a 20 20 20   the maximum.   
257c0 20 2a 2a 20 70 6f 73 69 74 69 76 65 20 69 6e 74   ** positive int
257d0 65 67 65 72 2c 20 77 65 20 68 61 76 65 20 74 6f  eger, we have to
257e0 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f   fall through to
257f0 20 74 68 65 20 73 65 63 6f 6e 64 0a 20 20 20 20   the second.    
25800 2a 2a 20 70 72 6f 62 61 62 69 6c 69 73 74 69 63  ** probabilistic
25810 20 61 6c 67 6f 72 69 74 68 6d 0a 20 20 20 20 2a   algorithm.    *
25820 2a 0a 20 20 20 20 2a 2a 20 54 68 65 20 73 65 63  *.    ** The sec
25830 6f 6e 64 20 61 6c 67 6f 72 69 74 68 6d 20 69 73  ond algorithm is
25840 20 74 6f 20 73 65 6c 65 63 74 20 61 20 72 6f 77   to select a row
25850 69 64 20 61 74 20 72 61 6e 64 6f 6d 20 61 6e 64  id at random and
25860 20 73 65 65 20 69 66 0a 20 20 20 20 2a 2a 20 69   see if.    ** i
25870 74 20 61 6c 72 65 61 64 79 20 65 78 69 73 74 73  t already exists
25880 20 69 6e 20 74 68 65 20 74 61 62 6c 65 2e 20 20   in the table.  
25890 49 66 20 69 74 20 64 6f 65 73 20 6e 6f 74 20 65  If it does not e
258a0 78 69 73 74 2c 20 77 65 20 68 61 76 65 0a 20 20  xist, we have.  
258b0 20 20 2a 2a 20 73 75 63 63 65 65 64 65 64 2e 20    ** succeeded. 
258c0 20 49 66 20 74 68 65 20 72 61 6e 64 6f 6d 20 72   If the random r
258d0 6f 77 69 64 20 64 6f 65 73 20 65 78 69 73 74 2c  owid does exist,
258e0 20 77 65 20 73 65 6c 65 63 74 20 61 20 6e 65 77   we select a new
258f0 20 6f 6e 65 0a 20 20 20 20 2a 2a 20 61 6e 64 20   one.    ** and 
25900 74 72 79 20 61 67 61 69 6e 2c 20 75 70 20 74 6f  try again, up to
25910 20 31 30 30 20 74 69 6d 65 73 2e 0a 20 20 20 20   100 times..    
25920 2a 2f 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  */.    assert( p
25930 43 2d 3e 69 73 54 61 62 6c 65 20 29 3b 0a 0a 23  C->isTable );..#
25940 69 66 64 65 66 20 53 51 4c 49 54 45 5f 33 32 42  ifdef SQLITE_32B
25950 49 54 5f 52 4f 57 49 44 0a 23 20 20 20 64 65 66  IT_ROWID.#   def
25960 69 6e 65 20 4d 41 58 5f 52 4f 57 49 44 20 30 78  ine MAX_ROWID 0x
25970 37 66 66 66 66 66 66 66 0a 23 65 6c 73 65 0a 20  7fffffff.#else. 
25980 20 20 20 2f 2a 20 53 6f 6d 65 20 63 6f 6d 70 69     /* Some compi
25990 6c 65 72 73 20 63 6f 6d 70 6c 61 69 6e 20 61 62  lers complain ab
259a0 6f 75 74 20 63 6f 6e 73 74 61 6e 74 73 20 6f 66  out constants of
259b0 20 74 68 65 20 66 6f 72 6d 20 30 78 37 66 66 66   the form 0x7fff
259c0 66 66 66 66 66 66 66 66 66 66 66 66 2e 0a 20 20  ffffffffffff..  
259d0 20 20 2a 2a 20 4f 74 68 65 72 73 20 63 6f 6d 70    ** Others comp
259e0 6c 61 69 6e 20 61 62 6f 75 74 20 30 78 37 66 66  lain about 0x7ff
259f0 66 66 66 66 66 66 66 66 66 66 66 66 66 66 4c 4c  ffffffffffffffLL
25a00 2e 20 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  .  The following
25a10 20 6d 61 63 72 6f 20 73 65 65 6d 73 0a 20 20 20   macro seems.   
25a20 20 2a 2a 20 74 6f 20 70 72 6f 76 69 64 65 20 74   ** to provide t
25a30 68 65 20 63 6f 6e 73 74 61 6e 74 20 77 68 69 6c  he constant whil
25a40 65 20 6d 61 6b 69 6e 67 20 61 6c 6c 20 63 6f 6d  e making all com
25a50 70 69 6c 65 72 73 20 68 61 70 70 79 2e 0a 20 20  pilers happy..  
25a60 20 20 2a 2f 0a 23 20 20 20 64 65 66 69 6e 65 20    */.#   define 
25a70 4d 41 58 5f 52 4f 57 49 44 20 20 28 69 36 34 29  MAX_ROWID  (i64)
25a80 28 20 28 28 28 75 36 34 29 30 78 37 66 66 66 66  ( (((u64)0x7ffff
25a90 66 66 66 29 3c 3c 33 32 29 20 7c 20 28 75 36 34  fff)<<32) | (u64
25aa0 29 30 78 66 66 66 66 66 66 66 66 20 29 0a 23 65  )0xffffffff ).#e
25ab0 6e 64 69 66 0a 0a 20 20 20 20 69 66 28 20 21 70  ndif..    if( !p
25ac0 43 2d 3e 75 73 65 52 61 6e 64 6f 6d 52 6f 77 69  C->useRandomRowi
25ad0 64 20 29 7b 0a 20 20 20 20 20 20 72 63 20 3d 20  d ){.      rc = 
25ae0 73 71 6c 69 74 65 33 42 74 72 65 65 4c 61 73 74  sqlite3BtreeLast
25af0 28 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 2c  (pC->uc.pCursor,
25b00 20 26 72 65 73 29 3b 0a 20 20 20 20 20 20 69 66   &res);.      if
25b10 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc!=SQLITE_OK 
25b20 29 7b 0a 20 20 20 20 20 20 20 20 67 6f 74 6f 20  ){.        goto 
25b30 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
25b40 6f 72 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  or;.      }.    
25b50 20 20 69 66 28 20 72 65 73 20 29 7b 0a 20 20 20    if( res ){.   
25b60 20 20 20 20 20 76 20 3d 20 31 3b 20 20 20 2f 2a       v = 1;   /*
25b70 20 49 4d 50 3a 20 52 2d 36 31 39 31 34 2d 34 38   IMP: R-61914-48
25b80 30 37 34 20 2a 2f 0a 20 20 20 20 20 20 7d 65 6c  074 */.      }el
25b90 73 65 7b 0a 20 20 20 20 20 20 20 20 61 73 73 65  se{.        asse
25ba0 72 74 28 20 73 71 6c 69 74 65 33 42 74 72 65 65  rt( sqlite3Btree
25bb0 43 75 72 73 6f 72 49 73 56 61 6c 69 64 28 70 43  CursorIsValid(pC
25bc0 2d 3e 75 63 2e 70 43 75 72 73 6f 72 29 20 29 3b  ->uc.pCursor) );
25bd0 0a 20 20 20 20 20 20 20 20 76 20 3d 20 73 71 6c  .        v = sql
25be0 69 74 65 33 42 74 72 65 65 49 6e 74 65 67 65 72  ite3BtreeInteger
25bf0 4b 65 79 28 70 43 2d 3e 75 63 2e 70 43 75 72 73  Key(pC->uc.pCurs
25c00 6f 72 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28  or);.        if(
25c10 20 76 3e 3d 4d 41 58 5f 52 4f 57 49 44 20 29 7b   v>=MAX_ROWID ){
25c20 0a 20 20 20 20 20 20 20 20 20 20 70 43 2d 3e 75  .          pC->u
25c30 73 65 52 61 6e 64 6f 6d 52 6f 77 69 64 20 3d 20  seRandomRowid = 
25c40 31 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c 73 65  1;.        }else
25c50 7b 0a 20 20 20 20 20 20 20 20 20 20 76 2b 2b 3b  {.          v++;
25c60 20 20 20 2f 2a 20 49 4d 50 3a 20 52 2d 32 39 35     /* IMP: R-295
25c70 33 38 2d 33 34 39 38 37 20 2a 2f 0a 20 20 20 20  38-34987 */.    
25c80 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20      }.      }.  
25c90 20 20 7d 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c    }..#ifndef SQL
25ca0 49 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 49 4e 43  ITE_OMIT_AUTOINC
25cb0 52 45 4d 45 4e 54 0a 20 20 20 20 69 66 28 20 70  REMENT.    if( p
25cc0 4f 70 2d 3e 70 33 20 29 7b 0a 20 20 20 20 20 20  Op->p3 ){.      
25cd0 2f 2a 20 41 73 73 65 72 74 20 74 68 61 74 20 50  /* Assert that P
25ce0 33 20 69 73 20 61 20 76 61 6c 69 64 20 6d 65 6d  3 is a valid mem
25cf0 6f 72 79 20 63 65 6c 6c 2e 20 2a 2f 0a 20 20 20  ory cell. */.   
25d00 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e     assert( pOp->
25d10 70 33 3e 30 20 29 3b 0a 20 20 20 20 20 20 69 66  p3>0 );.      if
25d20 28 20 70 2d 3e 70 46 72 61 6d 65 20 29 7b 0a 20  ( p->pFrame ){. 
25d30 20 20 20 20 20 20 20 66 6f 72 28 70 46 72 61 6d         for(pFram
25d40 65 3d 70 2d 3e 70 46 72 61 6d 65 3b 20 70 46 72  e=p->pFrame; pFr
25d50 61 6d 65 2d 3e 70 50 61 72 65 6e 74 3b 20 70 46  ame->pParent; pF
25d60 72 61 6d 65 3d 70 46 72 61 6d 65 2d 3e 70 50 61  rame=pFrame->pPa
25d70 72 65 6e 74 29 3b 0a 20 20 20 20 20 20 20 20 2f  rent);.        /
25d80 2a 20 41 73 73 65 72 74 20 74 68 61 74 20 50 33  * Assert that P3
25d90 20 69 73 20 61 20 76 61 6c 69 64 20 6d 65 6d 6f   is a valid memo
25da0 72 79 20 63 65 6c 6c 2e 20 2a 2f 0a 20 20 20 20  ry cell. */.    
25db0 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d      assert( pOp-
25dc0 3e 70 33 3c 3d 70 46 72 61 6d 65 2d 3e 6e 4d 65  >p3<=pFrame->nMe
25dd0 6d 20 29 3b 0a 20 20 20 20 20 20 20 20 70 4d 65  m );.        pMe
25de0 6d 20 3d 20 26 70 46 72 61 6d 65 2d 3e 61 4d 65  m = &pFrame->aMe
25df0 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 20 20  m[pOp->p3];.    
25e00 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20    }else{.       
25e10 20 2f 2a 20 41 73 73 65 72 74 20 74 68 61 74 20   /* Assert that 
25e20 50 33 20 69 73 20 61 20 76 61 6c 69 64 20 6d 65  P3 is a valid me
25e30 6d 6f 72 79 20 63 65 6c 6c 2e 20 2a 2f 0a 20 20  mory cell. */.  
25e40 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f        assert( pO
25e50 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b  p->p3<=(p->nMem+
25e60 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29 20  1 - p->nCursor) 
25e70 29 3b 0a 20 20 20 20 20 20 20 20 70 4d 65 6d 20  );.        pMem 
25e80 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  = &aMem[pOp->p3]
25e90 3b 0a 20 20 20 20 20 20 20 20 6d 65 6d 41 62 6f  ;.        memAbo
25ea0 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 4d  utToChange(p, pM
25eb0 65 6d 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  em);.      }.   
25ec0 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73     assert( memIs
25ed0 56 61 6c 69 64 28 70 4d 65 6d 29 20 29 3b 0a 0a  Valid(pMem) );..
25ee0 20 20 20 20 20 20 52 45 47 49 53 54 45 52 5f 54        REGISTER_T
25ef0 52 41 43 45 28 70 4f 70 2d 3e 70 33 2c 20 70 4d  RACE(pOp->p3, pM
25f00 65 6d 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74  em);.      sqlit
25f10 65 33 56 64 62 65 4d 65 6d 49 6e 74 65 67 65 72  e3VdbeMemInteger
25f20 69 66 79 28 70 4d 65 6d 29 3b 0a 20 20 20 20 20  ify(pMem);.     
25f30 20 61 73 73 65 72 74 28 20 28 70 4d 65 6d 2d 3e   assert( (pMem->
25f40 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29  flags & MEM_Int)
25f50 21 3d 30 20 29 3b 20 20 2f 2a 20 6d 65 6d 28 50  !=0 );  /* mem(P
25f60 33 29 20 68 6f 6c 64 73 20 61 6e 20 69 6e 74 65  3) holds an inte
25f70 67 65 72 20 2a 2f 0a 20 20 20 20 20 20 69 66 28  ger */.      if(
25f80 20 70 4d 65 6d 2d 3e 75 2e 69 3d 3d 4d 41 58 5f   pMem->u.i==MAX_
25f90 52 4f 57 49 44 20 7c 7c 20 70 43 2d 3e 75 73 65  ROWID || pC->use
25fa0 52 61 6e 64 6f 6d 52 6f 77 69 64 20 29 7b 0a 20  RandomRowid ){. 
25fb0 20 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49         rc = SQLI
25fc0 54 45 5f 46 55 4c 4c 3b 20 20 20 2f 2a 20 49 4d  TE_FULL;   /* IM
25fd0 50 3a 20 52 2d 31 37 38 31 37 2d 30 30 36 33 30  P: R-17817-00630
25fe0 20 2a 2f 0a 20 20 20 20 20 20 20 20 67 6f 74 6f   */.        goto
25ff0 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
26000 72 6f 72 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  ror;.      }.   
26010 20 20 20 69 66 28 20 76 3c 70 4d 65 6d 2d 3e 75     if( v<pMem->u
26020 2e 69 2b 31 20 29 7b 0a 20 20 20 20 20 20 20 20  .i+1 ){.        
26030 76 20 3d 20 70 4d 65 6d 2d 3e 75 2e 69 20 2b 20  v = pMem->u.i + 
26040 31 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20  1;.      }.     
26050 20 70 4d 65 6d 2d 3e 75 2e 69 20 3d 20 76 3b 0a   pMem->u.i = v;.
26060 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20 20      }.#endif.   
26070 20 69 66 28 20 70 43 2d 3e 75 73 65 52 61 6e 64   if( pC->useRand
26080 6f 6d 52 6f 77 69 64 20 29 7b 0a 20 20 20 20 20  omRowid ){.     
26090 20 2f 2a 20 49 4d 50 4c 45 4d 45 4e 54 41 54 49   /* IMPLEMENTATI
260a0 4f 4e 2d 4f 46 3a 20 52 2d 30 37 36 37 37 2d 34  ON-OF: R-07677-4
260b0 31 38 38 31 20 49 66 20 74 68 65 20 6c 61 72 67  1881 If the larg
260c0 65 73 74 20 52 4f 57 49 44 20 69 73 20 65 71 75  est ROWID is equ
260d0 61 6c 20 74 6f 20 74 68 65 0a 20 20 20 20 20 20  al to the.      
260e0 2a 2a 20 6c 61 72 67 65 73 74 20 70 6f 73 73 69  ** largest possi
260f0 62 6c 65 20 69 6e 74 65 67 65 72 20 28 39 32 32  ble integer (922
26100 33 33 37 32 30 33 36 38 35 34 37 37 35 38 30 37  3372036854775807
26110 29 20 74 68 65 6e 20 74 68 65 20 64 61 74 61 62  ) then the datab
26120 61 73 65 0a 20 20 20 20 20 20 2a 2a 20 65 6e 67  ase.      ** eng
26130 69 6e 65 20 73 74 61 72 74 73 20 70 69 63 6b 69  ine starts picki
26140 6e 67 20 70 6f 73 69 74 69 76 65 20 63 61 6e 64  ng positive cand
26150 69 64 61 74 65 20 52 4f 57 49 44 73 20 61 74 20  idate ROWIDs at 
26160 72 61 6e 64 6f 6d 20 75 6e 74 69 6c 0a 20 20 20  random until.   
26170 20 20 20 2a 2a 20 69 74 20 66 69 6e 64 73 20 6f     ** it finds o
26180 6e 65 20 74 68 61 74 20 69 73 20 6e 6f 74 20 70  ne that is not p
26190 72 65 76 69 6f 75 73 6c 79 20 75 73 65 64 2e 20  reviously used. 
261a0 2a 2f 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  */.      assert(
261b0 20 70 4f 70 2d 3e 70 33 3d 3d 30 20 29 3b 20 20   pOp->p3==0 );  
261c0 2f 2a 20 57 65 20 63 61 6e 6e 6f 74 20 62 65 20  /* We cannot be 
261d0 69 6e 20 72 61 6e 64 6f 6d 20 72 6f 77 69 64 20  in random rowid 
261e0 6d 6f 64 65 20 69 66 20 74 68 69 73 20 69 73 0a  mode if this is.
261f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26200 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20               ** 
26210 61 6e 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54  an AUTOINCREMENT
26220 20 74 61 62 6c 65 2e 20 2a 2f 0a 20 20 20 20 20   table. */.     
26230 20 63 6e 74 20 3d 20 30 3b 0a 20 20 20 20 20 20   cnt = 0;.      
26240 64 6f 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69  do{.        sqli
26250 74 65 33 5f 72 61 6e 64 6f 6d 6e 65 73 73 28 73  te3_randomness(s
26260 69 7a 65 6f 66 28 76 29 2c 20 26 76 29 3b 0a 20  izeof(v), &v);. 
26270 20 20 20 20 20 20 20 76 20 26 3d 20 28 4d 41 58         v &= (MAX
26280 5f 52 4f 57 49 44 3e 3e 31 29 3b 20 76 2b 2b 3b  _ROWID>>1); v++;
26290 20 20 2f 2a 20 45 6e 73 75 72 65 20 74 68 61 74    /* Ensure that
262a0 20 76 20 69 73 20 67 72 65 61 74 65 72 20 74 68   v is greater th
262b0 61 6e 20 7a 65 72 6f 20 2a 2f 0a 20 20 20 20 20  an zero */.     
262c0 20 7d 77 68 69 6c 65 28 20 20 28 28 72 63 20 3d   }while(  ((rc =
262d0 20 73 71 6c 69 74 65 33 42 74 72 65 65 4d 6f 76   sqlite3BtreeMov
262e0 65 74 6f 55 6e 70 61 63 6b 65 64 28 70 43 2d 3e  etoUnpacked(pC->
262f0 75 63 2e 70 43 75 72 73 6f 72 2c 20 30 2c 20 28  uc.pCursor, 0, (
26300 75 36 34 29 76 2c 0a 20 20 20 20 20 20 20 20 20  u64)v,.         
26310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26320 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26330 20 20 20 20 20 20 20 20 30 2c 20 26 72 65 73 29          0, &res)
26340 29 3d 3d 53 51 4c 49 54 45 5f 4f 4b 29 0a 20 20  )==SQLITE_OK).  
26350 20 20 20 20 20 20 20 20 20 20 26 26 20 28 72 65            && (re
26360 73 3d 3d 30 29 0a 20 20 20 20 20 20 20 20 20 20  s==0).          
26370 20 20 26 26 20 28 2b 2b 63 6e 74 3c 31 30 30 29    && (++cnt<100)
26380 29 3b 0a 20 20 20 20 20 20 69 66 28 20 72 63 20  );.      if( rc 
26390 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65  ) goto abort_due
263a0 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20  _to_error;.     
263b0 20 69 66 28 20 72 65 73 3d 3d 30 20 29 7b 0a 20   if( res==0 ){. 
263c0 20 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49         rc = SQLI
263d0 54 45 5f 46 55 4c 4c 3b 20 20 20 2f 2a 20 49 4d  TE_FULL;   /* IM
263e0 50 3a 20 52 2d 33 38 32 31 39 2d 35 33 30 30 32  P: R-38219-53002
263f0 20 2a 2f 0a 20 20 20 20 20 20 20 20 67 6f 74 6f   */.        goto
26400 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
26410 72 6f 72 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  ror;.      }.   
26420 20 20 20 61 73 73 65 72 74 28 20 76 3e 30 20 29     assert( v>0 )
26430 3b 20 20 2f 2a 20 45 56 3a 20 52 2d 34 30 38 31  ;  /* EV: R-4081
26440 32 2d 30 33 35 37 30 20 2a 2f 0a 20 20 20 20 7d  2-03570 */.    }
26450 0a 20 20 20 20 70 43 2d 3e 64 65 66 65 72 72 65  .    pC->deferre
26460 64 4d 6f 76 65 74 6f 20 3d 20 30 3b 0a 20 20 20  dMoveto = 0;.   
26470 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73   pC->cacheStatus
26480 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a   = CACHE_STALE;.
26490 20 20 7d 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20    }.  pOut->u.i 
264a0 3d 20 76 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  = v;.  break;.}.
264b0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 6e 73 65  ./* Opcode: Inse
264c0 72 74 20 50 31 20 50 32 20 50 33 20 50 34 20 50  rt P1 P2 P3 P4 P
264d0 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69  5.** Synopsis: i
264e0 6e 74 6b 65 79 3d 72 5b 50 33 5d 20 64 61 74 61  ntkey=r[P3] data
264f0 3d 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20 57 72 69  =r[P2].**.** Wri
26500 74 65 20 61 6e 20 65 6e 74 72 79 20 69 6e 74 6f  te an entry into
26510 20 74 68 65 20 74 61 62 6c 65 20 6f 66 20 63 75   the table of cu
26520 72 73 6f 72 20 50 31 2e 20 20 41 20 6e 65 77 20  rsor P1.  A new 
26530 65 6e 74 72 79 20 69 73 0a 2a 2a 20 63 72 65 61  entry is.** crea
26540 74 65 64 20 69 66 20 69 74 20 64 6f 65 73 6e 27  ted if it doesn'
26550 74 20 61 6c 72 65 61 64 79 20 65 78 69 73 74 20  t already exist 
26560 6f 72 20 74 68 65 20 64 61 74 61 20 66 6f 72 20  or the data for 
26570 61 6e 20 65 78 69 73 74 69 6e 67 0a 2a 2a 20 65  an existing.** e
26580 6e 74 72 79 20 69 73 20 6f 76 65 72 77 72 69 74  ntry is overwrit
26590 74 65 6e 2e 20 20 54 68 65 20 64 61 74 61 20 69  ten.  The data i
265a0 73 20 74 68 65 20 76 61 6c 75 65 20 4d 45 4d 5f  s the value MEM_
265b0 42 6c 6f 62 20 73 74 6f 72 65 64 20 69 6e 20 72  Blob stored in r
265c0 65 67 69 73 74 65 72 0a 2a 2a 20 6e 75 6d 62 65  egister.** numbe
265d0 72 20 50 32 2e 20 54 68 65 20 6b 65 79 20 69 73  r P2. The key is
265e0 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73   stored in regis
265f0 74 65 72 20 50 33 2e 20 54 68 65 20 6b 65 79 20  ter P3. The key 
26600 6d 75 73 74 0a 2a 2a 20 62 65 20 61 20 4d 45 4d  must.** be a MEM
26610 5f 49 6e 74 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74  _Int..**.** If t
26620 68 65 20 4f 50 46 4c 41 47 5f 4e 43 48 41 4e 47  he OPFLAG_NCHANG
26630 45 20 66 6c 61 67 20 6f 66 20 50 35 20 69 73 20  E flag of P5 is 
26640 73 65 74 2c 20 74 68 65 6e 20 74 68 65 20 72 6f  set, then the ro
26650 77 20 63 68 61 6e 67 65 20 63 6f 75 6e 74 20 69  w change count i
26660 73 0a 2a 2a 20 69 6e 63 72 65 6d 65 6e 74 65 64  s.** incremented
26670 20 28 6f 74 68 65 72 77 69 73 65 20 6e 6f 74 29   (otherwise not)
26680 2e 20 20 49 66 20 74 68 65 20 4f 50 46 4c 41 47  .  If the OPFLAG
26690 5f 4c 41 53 54 52 4f 57 49 44 20 66 6c 61 67 20  _LASTROWID flag 
266a0 6f 66 20 50 35 20 69 73 20 73 65 74 2c 0a 2a 2a  of P5 is set,.**
266b0 20 74 68 65 6e 20 72 6f 77 69 64 20 69 73 20 73   then rowid is s
266c0 74 6f 72 65 64 20 66 6f 72 20 73 75 62 73 65 71  tored for subseq
266d0 75 65 6e 74 20 72 65 74 75 72 6e 20 62 79 20 74  uent return by t
266e0 68 65 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 6c 61  he.** sqlite3_la
266f0 73 74 5f 69 6e 73 65 72 74 5f 72 6f 77 69 64 28  st_insert_rowid(
26700 29 20 66 75 6e 63 74 69 6f 6e 20 28 6f 74 68 65  ) function (othe
26710 72 77 69 73 65 20 69 74 20 69 73 20 75 6e 6d 6f  rwise it is unmo
26720 64 69 66 69 65 64 29 2e 0a 2a 2a 0a 2a 2a 20 49  dified)..**.** I
26730 66 20 74 68 65 20 4f 50 46 4c 41 47 5f 55 53 45  f the OPFLAG_USE
26740 53 45 45 4b 52 45 53 55 4c 54 20 66 6c 61 67 20  SEEKRESULT flag 
26750 6f 66 20 50 35 20 69 73 20 73 65 74 2c 20 74 68  of P5 is set, th
26760 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e  e implementation
26770 20 6d 69 67 68 74 0a 2a 2a 20 72 75 6e 20 66 61   might.** run fa
26780 73 74 65 72 20 62 79 20 61 76 6f 69 64 69 6e 67  ster by avoiding
26790 20 61 6e 20 75 6e 6e 65 63 65 73 73 61 72 79 20   an unnecessary 
267a0 73 65 65 6b 20 6f 6e 20 63 75 72 73 6f 72 20 50  seek on cursor P
267b0 31 2e 20 20 48 6f 77 65 76 65 72 2c 0a 2a 2a 20  1.  However,.** 
267c0 74 68 65 20 4f 50 46 4c 41 47 5f 55 53 45 53 45  the OPFLAG_USESE
267d0 45 4b 52 45 53 55 4c 54 20 66 6c 61 67 20 6d 75  EKRESULT flag mu
267e0 73 74 20 6f 6e 6c 79 20 62 65 20 73 65 74 20 69  st only be set i
267f0 66 20 74 68 65 72 65 20 68 61 76 65 20 62 65 65  f there have bee
26800 6e 20 6e 6f 20 70 72 69 6f 72 0a 2a 2a 20 73 65  n no prior.** se
26810 65 6b 73 20 6f 6e 20 74 68 65 20 63 75 72 73 6f  eks on the curso
26820 72 20 6f 72 20 69 66 20 74 68 65 20 6d 6f 73 74  r or if the most
26830 20 72 65 63 65 6e 74 20 73 65 65 6b 20 75 73 65   recent seek use
26840 64 20 61 20 6b 65 79 20 65 71 75 61 6c 20 74 6f  d a key equal to
26850 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68   P3..**.** If th
26860 65 20 4f 50 46 4c 41 47 5f 49 53 55 50 44 41 54  e OPFLAG_ISUPDAT
26870 45 20 66 6c 61 67 20 69 73 20 73 65 74 2c 20 74  E flag is set, t
26880 68 65 6e 20 74 68 69 73 20 6f 70 63 6f 64 65 20  hen this opcode 
26890 69 73 20 70 61 72 74 20 6f 66 20 61 6e 0a 2a 2a  is part of an.**
268a0 20 55 50 44 41 54 45 20 6f 70 65 72 61 74 69 6f   UPDATE operatio
268b0 6e 2e 20 20 4f 74 68 65 72 77 69 73 65 20 28 69  n.  Otherwise (i
268c0 66 20 74 68 65 20 66 6c 61 67 20 69 73 20 63 6c  f the flag is cl
268d0 65 61 72 29 20 74 68 65 6e 20 74 68 69 73 20 6f  ear) then this o
268e0 70 63 6f 64 65 0a 2a 2a 20 69 73 20 70 61 72 74  pcode.** is part
268f0 20 6f 66 20 61 6e 20 49 4e 53 45 52 54 20 6f 70   of an INSERT op
26900 65 72 61 74 69 6f 6e 2e 20 20 54 68 65 20 64 69  eration.  The di
26910 66 66 65 72 65 6e 63 65 20 69 73 20 6f 6e 6c 79  fference is only
26920 20 69 6d 70 6f 72 74 61 6e 74 20 74 6f 0a 2a 2a   important to.**
26930 20 74 68 65 20 75 70 64 61 74 65 20 68 6f 6f 6b   the update hook
26940 2e 0a 2a 2a 0a 2a 2a 20 50 61 72 61 6d 65 74 65  ..**.** Paramete
26950 72 20 50 34 20 6d 61 79 20 70 6f 69 6e 74 20 74  r P4 may point t
26960 6f 20 61 20 54 61 62 6c 65 20 73 74 72 75 63 74  o a Table struct
26970 75 72 65 2c 20 6f 72 20 6d 61 79 20 62 65 20 4e  ure, or may be N
26980 55 4c 4c 2e 20 49 66 20 69 74 20 69 73 20 0a 2a  ULL. If it is .*
26990 2a 20 6e 6f 74 20 4e 55 4c 4c 2c 20 74 68 65 6e  * not NULL, then
269a0 20 74 68 65 20 75 70 64 61 74 65 2d 68 6f 6f 6b   the update-hook
269b0 20 28 73 71 6c 69 74 65 33 2e 78 55 70 64 61 74   (sqlite3.xUpdat
269c0 65 43 61 6c 6c 62 61 63 6b 29 20 69 73 20 69 6e  eCallback) is in
269d0 76 6f 6b 65 64 20 0a 2a 2a 20 66 6f 6c 6c 6f 77  voked .** follow
269e0 69 6e 67 20 61 20 73 75 63 63 65 73 73 66 75 6c  ing a successful
269f0 20 69 6e 73 65 72 74 2e 0a 2a 2a 0a 2a 2a 20 28   insert..**.** (
26a00 57 41 52 4e 49 4e 47 2f 54 4f 44 4f 3a 20 49 66  WARNING/TODO: If
26a10 20 50 31 20 69 73 20 61 20 70 73 65 75 64 6f 2d   P1 is a pseudo-
26a20 63 75 72 73 6f 72 20 61 6e 64 20 50 32 20 69 73  cursor and P2 is
26a30 20 64 79 6e 61 6d 69 63 61 6c 6c 79 0a 2a 2a 20   dynamically.** 
26a40 61 6c 6c 6f 63 61 74 65 64 2c 20 74 68 65 6e 20  allocated, then 
26a50 6f 77 6e 65 72 73 68 69 70 20 6f 66 20 50 32 20  ownership of P2 
26a60 69 73 20 74 72 61 6e 73 66 65 72 72 65 64 20 74  is transferred t
26a70 6f 20 74 68 65 20 70 73 65 75 64 6f 2d 63 75 72  o the pseudo-cur
26a80 73 6f 72 0a 2a 2a 20 61 6e 64 20 72 65 67 69 73  sor.** and regis
26a90 74 65 72 20 50 32 20 62 65 63 6f 6d 65 73 20 65  ter P2 becomes e
26aa0 70 68 65 6d 65 72 61 6c 2e 20 20 49 66 20 74 68  phemeral.  If th
26ab0 65 20 63 75 72 73 6f 72 20 69 73 20 63 68 61 6e  e cursor is chan
26ac0 67 65 64 2c 20 74 68 65 0a 2a 2a 20 76 61 6c 75  ged, the.** valu
26ad0 65 20 6f 66 20 72 65 67 69 73 74 65 72 20 50 32  e of register P2
26ae0 20 77 69 6c 6c 20 74 68 65 6e 20 63 68 61 6e 67   will then chang
26af0 65 2e 20 20 4d 61 6b 65 20 73 75 72 65 20 74 68  e.  Make sure th
26b00 69 73 20 64 6f 65 73 20 6e 6f 74 0a 2a 2a 20 63  is does not.** c
26b10 61 75 73 65 20 61 6e 79 20 70 72 6f 62 6c 65 6d  ause any problem
26b20 73 2e 29 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 69  s.).**.** This i
26b30 6e 73 74 72 75 63 74 69 6f 6e 20 6f 6e 6c 79 20  nstruction only 
26b40 77 6f 72 6b 73 20 6f 6e 20 74 61 62 6c 65 73 2e  works on tables.
26b50 20 20 54 68 65 20 65 71 75 69 76 61 6c 65 6e 74    The equivalent
26b60 20 69 6e 73 74 72 75 63 74 69 6f 6e 0a 2a 2a 20   instruction.** 
26b70 66 6f 72 20 69 6e 64 69 63 65 73 20 69 73 20 4f  for indices is O
26b80 50 5f 49 64 78 49 6e 73 65 72 74 2e 0a 2a 2f 0a  P_IdxInsert..*/.
26b90 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 6e 73 65 72  /* Opcode: Inser
26ba0 74 49 6e 74 20 50 31 20 50 32 20 50 33 20 50 34  tInt P1 P2 P3 P4
26bb0 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a   P5.** Synopsis:
26bc0 20 69 6e 74 6b 65 79 3d 50 33 20 64 61 74 61 3d   intkey=P3 data=
26bd0 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20 54 68 69 73  r[P2].**.** This
26be0 20 77 6f 72 6b 73 20 65 78 61 63 74 6c 79 20 6c   works exactly l
26bf0 69 6b 65 20 4f 50 5f 49 6e 73 65 72 74 20 65 78  ike OP_Insert ex
26c00 63 65 70 74 20 74 68 61 74 20 74 68 65 20 6b 65  cept that the ke
26c10 79 20 69 73 20 74 68 65 0a 2a 2a 20 69 6e 74 65  y is the.** inte
26c20 67 65 72 20 76 61 6c 75 65 20 50 33 2c 20 6e 6f  ger value P3, no
26c30 74 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74  t the value of t
26c40 68 65 20 69 6e 74 65 67 65 72 20 73 74 6f 72 65  he integer store
26c50 64 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33  d in register P3
26c60 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 6e 73  ..*/.case OP_Ins
26c70 65 72 74 3a 20 0a 63 61 73 65 20 4f 50 5f 49 6e  ert: .case OP_In
26c80 73 65 72 74 49 6e 74 3a 20 7b 0a 20 20 4d 65 6d  sertInt: {.  Mem
26c90 20 2a 70 44 61 74 61 3b 20 20 20 20 20 20 20 2f   *pData;       /
26ca0 2a 20 4d 45 4d 20 63 65 6c 6c 20 68 6f 6c 64 69  * MEM cell holdi
26cb0 6e 67 20 64 61 74 61 20 66 6f 72 20 74 68 65 20  ng data for the 
26cc0 72 65 63 6f 72 64 20 74 6f 20 62 65 20 69 6e 73  record to be ins
26cd0 65 72 74 65 64 20 2a 2f 0a 20 20 4d 65 6d 20 2a  erted */.  Mem *
26ce0 70 4b 65 79 3b 20 20 20 20 20 20 20 20 2f 2a 20  pKey;        /* 
26cf0 4d 45 4d 20 63 65 6c 6c 20 68 6f 6c 64 69 6e 67  MEM cell holding
26d00 20 6b 65 79 20 20 66 6f 72 20 74 68 65 20 72 65   key  for the re
26d10 63 6f 72 64 20 2a 2f 0a 20 20 56 64 62 65 43 75  cord */.  VdbeCu
26d20 72 73 6f 72 20 2a 70 43 3b 20 20 20 2f 2a 20 43  rsor *pC;   /* C
26d30 75 72 73 6f 72 20 74 6f 20 74 61 62 6c 65 20 69  ursor to table i
26d40 6e 74 6f 20 77 68 69 63 68 20 69 6e 73 65 72 74  nto which insert
26d50 20 69 73 20 77 72 69 74 74 65 6e 20 2a 2f 0a 20   is written */. 
26d60 20 69 6e 74 20 73 65 65 6b 52 65 73 75 6c 74 3b   int seekResult;
26d70 20 20 20 2f 2a 20 52 65 73 75 6c 74 20 6f 66 20     /* Result of 
26d80 70 72 69 6f 72 20 73 65 65 6b 20 6f 72 20 30 20  prior seek or 0 
26d90 69 66 20 6e 6f 20 55 53 45 53 45 45 4b 52 45 53  if no USESEEKRES
26da0 55 4c 54 20 66 6c 61 67 20 2a 2f 0a 20 20 63 6f  ULT flag */.  co
26db0 6e 73 74 20 63 68 61 72 20 2a 7a 44 62 3b 20 20  nst char *zDb;  
26dc0 2f 2a 20 64 61 74 61 62 61 73 65 20 6e 61 6d 65  /* database name
26dd0 20 2d 20 75 73 65 64 20 62 79 20 74 68 65 20 75   - used by the u
26de0 70 64 61 74 65 20 68 6f 6f 6b 20 2a 2f 0a 20 20  pdate hook */.  
26df0 54 61 62 6c 65 20 2a 70 54 61 62 3b 20 20 20 20  Table *pTab;    
26e00 20 20 2f 2a 20 54 61 62 6c 65 20 73 74 72 75 63    /* Table struc
26e10 74 75 72 65 20 2d 20 75 73 65 64 20 62 79 20 75  ture - used by u
26e20 70 64 61 74 65 20 61 6e 64 20 70 72 65 2d 75 70  pdate and pre-up
26e30 64 61 74 65 20 68 6f 6f 6b 73 20 2a 2f 0a 20 20  date hooks */.  
26e40 42 74 72 65 65 50 61 79 6c 6f 61 64 20 78 3b 20  BtreePayload x; 
26e50 20 20 2f 2a 20 50 61 79 6c 6f 61 64 20 74 6f 20    /* Payload to 
26e60 62 65 20 69 6e 73 65 72 74 65 64 20 2a 2f 0a 0a  be inserted */..
26e70 20 20 70 44 61 74 61 20 3d 20 26 61 4d 65 6d 5b    pData = &aMem[
26e80 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 61 73 73 65  pOp->p2];.  asse
26e90 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26  rt( pOp->p1>=0 &
26ea0 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75  & pOp->p1<p->nCu
26eb0 72 73 6f 72 20 29 3b 0a 20 20 61 73 73 65 72 74  rsor );.  assert
26ec0 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 70 44 61  ( memIsValid(pDa
26ed0 74 61 29 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d  ta) );.  pC = p-
26ee0 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b  >apCsr[pOp->p1];
26ef0 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30  .  assert( pC!=0
26f00 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43   );.  assert( pC
26f10 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43 55 52 54  ->eCurType==CURT
26f20 59 50 45 5f 42 54 52 45 45 20 29 3b 0a 20 20 61  YPE_BTREE );.  a
26f30 73 73 65 72 74 28 20 70 43 2d 3e 75 63 2e 70 43  ssert( pC->uc.pC
26f40 75 72 73 6f 72 21 3d 30 20 29 3b 0a 20 20 61 73  ursor!=0 );.  as
26f50 73 65 72 74 28 20 28 70 4f 70 2d 3e 70 35 20 26  sert( (pOp->p5 &
26f60 20 4f 50 46 4c 41 47 5f 49 53 4e 4f 4f 50 29 20   OPFLAG_ISNOOP) 
26f70 7c 7c 20 70 43 2d 3e 69 73 54 61 62 6c 65 20 29  || pC->isTable )
26f80 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
26f90 3e 70 34 74 79 70 65 3d 3d 50 34 5f 54 41 42 4c  >p4type==P4_TABL
26fa0 45 20 7c 7c 20 70 4f 70 2d 3e 70 34 74 79 70 65  E || pOp->p4type
26fb0 3e 3d 50 34 5f 53 54 41 54 49 43 20 29 3b 0a 20  >=P4_STATIC );. 
26fc0 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28   REGISTER_TRACE(
26fd0 70 4f 70 2d 3e 70 32 2c 20 70 44 61 74 61 29 3b  pOp->p2, pData);
26fe0 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e  .  sqlite3VdbeIn
26ff0 63 72 57 72 69 74 65 43 6f 75 6e 74 65 72 28 70  crWriteCounter(p
27000 2c 20 70 43 29 3b 0a 0a 20 20 69 66 28 20 70 4f  , pC);..  if( pO
27010 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 6e  p->opcode==OP_In
27020 73 65 72 74 20 29 7b 0a 20 20 20 20 70 4b 65 79  sert ){.    pKey
27030 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33   = &aMem[pOp->p3
27040 5d 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  ];.    assert( p
27050 4b 65 79 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  Key->flags & MEM
27060 5f 49 6e 74 20 29 3b 0a 20 20 20 20 61 73 73 65  _Int );.    asse
27070 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 70  rt( memIsValid(p
27080 4b 65 79 29 20 29 3b 0a 20 20 20 20 52 45 47 49  Key) );.    REGI
27090 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e  STER_TRACE(pOp->
270a0 70 33 2c 20 70 4b 65 79 29 3b 0a 20 20 20 20 78  p3, pKey);.    x
270b0 2e 6e 4b 65 79 20 3d 20 70 4b 65 79 2d 3e 75 2e  .nKey = pKey->u.
270c0 69 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  i;.  }else{.    
270d0 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63  assert( pOp->opc
270e0 6f 64 65 3d 3d 4f 50 5f 49 6e 73 65 72 74 49 6e  ode==OP_InsertIn
270f0 74 20 29 3b 0a 20 20 20 20 78 2e 6e 4b 65 79 20  t );.    x.nKey 
27100 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 7d 0a 0a  = pOp->p3;.  }..
27110 20 20 69 66 28 20 70 4f 70 2d 3e 70 34 74 79 70    if( pOp->p4typ
27120 65 3d 3d 50 34 5f 54 41 42 4c 45 20 26 26 20 48  e==P4_TABLE && H
27130 41 53 5f 55 50 44 41 54 45 5f 48 4f 4f 4b 28 64  AS_UPDATE_HOOK(d
27140 62 29 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74  b) ){.    assert
27150 28 20 70 43 2d 3e 69 44 62 3e 3d 30 20 29 3b 0a  ( pC->iDb>=0 );.
27160 20 20 20 20 7a 44 62 20 3d 20 64 62 2d 3e 61 44      zDb = db->aD
27170 62 5b 70 43 2d 3e 69 44 62 5d 2e 7a 44 62 53 4e  b[pC->iDb].zDbSN
27180 61 6d 65 3b 0a 20 20 20 20 70 54 61 62 20 3d 20  ame;.    pTab = 
27190 70 4f 70 2d 3e 70 34 2e 70 54 61 62 3b 0a 20 20  pOp->p4.pTab;.  
271a0 20 20 61 73 73 65 72 74 28 20 28 70 4f 70 2d 3e    assert( (pOp->
271b0 70 35 20 26 20 4f 50 46 4c 41 47 5f 49 53 4e 4f  p5 & OPFLAG_ISNO
271c0 4f 50 29 20 7c 7c 20 48 61 73 52 6f 77 69 64 28  OP) || HasRowid(
271d0 70 54 61 62 29 20 29 3b 0a 20 20 7d 65 6c 73 65  pTab) );.  }else
271e0 7b 0a 20 20 20 20 70 54 61 62 20 3d 20 30 3b 0a  {.    pTab = 0;.
271f0 20 20 20 20 7a 44 62 20 3d 20 30 3b 20 20 2f 2a      zDb = 0;  /*
27200 20 4e 6f 74 20 6e 65 65 64 65 64 2e 20 20 53 69   Not needed.  Si
27210 6c 65 6e 63 65 20 61 20 63 6f 6d 70 69 6c 65 72  lence a compiler
27220 20 77 61 72 6e 69 6e 67 2e 20 2a 2f 0a 20 20 7d   warning. */.  }
27230 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ..#ifdef SQLITE_
27240 45 4e 41 42 4c 45 5f 50 52 45 55 50 44 41 54 45  ENABLE_PREUPDATE
27250 5f 48 4f 4f 4b 0a 20 20 2f 2a 20 49 6e 76 6f 6b  _HOOK.  /* Invok
27260 65 20 74 68 65 20 70 72 65 2d 75 70 64 61 74 65  e the pre-update
27270 20 68 6f 6f 6b 2c 20 69 66 20 61 6e 79 20 2a 2f   hook, if any */
27280 0a 20 20 69 66 28 20 70 54 61 62 20 29 7b 0a 20  .  if( pTab ){. 
27290 20 20 20 69 66 28 20 64 62 2d 3e 78 50 72 65 55     if( db->xPreU
272a0 70 64 61 74 65 43 61 6c 6c 62 61 63 6b 20 26 26  pdateCallback &&
272b0 20 21 28 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46   !(pOp->p5 & OPF
272c0 4c 41 47 5f 49 53 55 50 44 41 54 45 29 20 29 7b  LAG_ISUPDATE) ){
272d0 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64  .      sqlite3Vd
272e0 62 65 50 72 65 55 70 64 61 74 65 48 6f 6f 6b 28  bePreUpdateHook(
272f0 70 2c 20 70 43 2c 20 53 51 4c 49 54 45 5f 49 4e  p, pC, SQLITE_IN
27300 53 45 52 54 2c 20 7a 44 62 2c 20 70 54 61 62 2c  SERT, zDb, pTab,
27310 20 78 2e 6e 4b 65 79 2c 70 4f 70 2d 3e 70 32 29   x.nKey,pOp->p2)
27320 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20  ;.    }.    if( 
27330 64 62 2d 3e 78 55 70 64 61 74 65 43 61 6c 6c 62  db->xUpdateCallb
27340 61 63 6b 3d 3d 30 20 7c 7c 20 70 54 61 62 2d 3e  ack==0 || pTab->
27350 61 43 6f 6c 3d 3d 30 20 29 7b 0a 20 20 20 20 20  aCol==0 ){.     
27360 20 2f 2a 20 50 72 65 76 65 6e 74 20 70 6f 73 74   /* Prevent post
27370 2d 75 70 64 61 74 65 20 68 6f 6f 6b 20 66 72 6f  -update hook fro
27380 6d 20 72 75 6e 6e 69 6e 67 20 69 6e 20 63 61 73  m running in cas
27390 65 73 20 77 68 65 6e 20 69 74 20 73 68 6f 75 6c  es when it shoul
273a0 64 20 6e 6f 74 20 2a 2f 0a 20 20 20 20 20 20 70  d not */.      p
273b0 54 61 62 20 3d 20 30 3b 0a 20 20 20 20 7d 0a 20  Tab = 0;.    }. 
273c0 20 7d 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 35   }.  if( pOp->p5
273d0 20 26 20 4f 50 46 4c 41 47 5f 49 53 4e 4f 4f 50   & OPFLAG_ISNOOP
273e0 20 29 20 62 72 65 61 6b 3b 0a 23 65 6e 64 69 66   ) break;.#endif
273f0 0a 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 20  ..  if( pOp->p5 
27400 26 20 4f 50 46 4c 41 47 5f 4e 43 48 41 4e 47 45  & OPFLAG_NCHANGE
27410 20 29 20 70 2d 3e 6e 43 68 61 6e 67 65 2b 2b 3b   ) p->nChange++;
27420 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 26  .  if( pOp->p5 &
27430 20 4f 50 46 4c 41 47 5f 4c 41 53 54 52 4f 57 49   OPFLAG_LASTROWI
27440 44 20 29 20 64 62 2d 3e 6c 61 73 74 52 6f 77 69  D ) db->lastRowi
27450 64 20 3d 20 78 2e 6e 4b 65 79 3b 0a 20 20 61 73  d = x.nKey;.  as
27460 73 65 72 74 28 20 70 44 61 74 61 2d 3e 66 6c 61  sert( pData->fla
27470 67 73 20 26 20 28 4d 45 4d 5f 42 6c 6f 62 7c 4d  gs & (MEM_Blob|M
27480 45 4d 5f 53 74 72 29 20 29 3b 0a 20 20 78 2e 70  EM_Str) );.  x.p
27490 44 61 74 61 20 3d 20 70 44 61 74 61 2d 3e 7a 3b  Data = pData->z;
274a0 0a 20 20 78 2e 6e 44 61 74 61 20 3d 20 70 44 61  .  x.nData = pDa
274b0 74 61 2d 3e 6e 3b 0a 20 20 73 65 65 6b 52 65 73  ta->n;.  seekRes
274c0 75 6c 74 20 3d 20 28 28 70 4f 70 2d 3e 70 35 20  ult = ((pOp->p5 
274d0 26 20 4f 50 46 4c 41 47 5f 55 53 45 53 45 45 4b  & OPFLAG_USESEEK
274e0 52 45 53 55 4c 54 29 20 3f 20 70 43 2d 3e 73 65  RESULT) ? pC->se
274f0 65 6b 52 65 73 75 6c 74 20 3a 20 30 29 3b 0a 20  ekResult : 0);. 
27500 20 69 66 28 20 70 44 61 74 61 2d 3e 66 6c 61 67   if( pData->flag
27510 73 20 26 20 4d 45 4d 5f 5a 65 72 6f 20 29 7b 0a  s & MEM_Zero ){.
27520 20 20 20 20 78 2e 6e 5a 65 72 6f 20 3d 20 70 44      x.nZero = pD
27530 61 74 61 2d 3e 75 2e 6e 5a 65 72 6f 3b 0a 20 20  ata->u.nZero;.  
27540 7d 65 6c 73 65 7b 0a 20 20 20 20 78 2e 6e 5a 65  }else{.    x.nZe
27550 72 6f 20 3d 20 30 3b 0a 20 20 7d 0a 20 20 78 2e  ro = 0;.  }.  x.
27560 70 4b 65 79 20 3d 20 30 3b 0a 20 20 72 63 20 3d  pKey = 0;.  rc =
27570 20 73 71 6c 69 74 65 33 42 74 72 65 65 49 6e 73   sqlite3BtreeIns
27580 65 72 74 28 70 43 2d 3e 75 63 2e 70 43 75 72 73  ert(pC->uc.pCurs
27590 6f 72 2c 20 26 78 2c 0a 20 20 20 20 20 20 28 70  or, &x,.      (p
275a0 4f 70 2d 3e 70 35 20 26 20 28 4f 50 46 4c 41 47  Op->p5 & (OPFLAG
275b0 5f 41 50 50 45 4e 44 7c 4f 50 46 4c 41 47 5f 53  _APPEND|OPFLAG_S
275c0 41 56 45 50 4f 53 49 54 49 4f 4e 29 29 2c 20 73  AVEPOSITION)), s
275d0 65 65 6b 52 65 73 75 6c 74 0a 20 20 29 3b 0a 20  eekResult.  );. 
275e0 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76   pC->deferredMov
275f0 65 74 6f 20 3d 20 30 3b 0a 20 20 70 43 2d 3e 63  eto = 0;.  pC->c
27600 61 63 68 65 53 74 61 74 75 73 20 3d 20 43 41 43  acheStatus = CAC
27610 48 45 5f 53 54 41 4c 45 3b 0a 0a 20 20 2f 2a 20  HE_STALE;..  /* 
27620 49 6e 76 6f 6b 65 20 74 68 65 20 75 70 64 61 74  Invoke the updat
27630 65 2d 68 6f 6f 6b 20 69 66 20 72 65 71 75 69 72  e-hook if requir
27640 65 64 2e 20 2a 2f 0a 20 20 69 66 28 20 72 63 20  ed. */.  if( rc 
27650 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65  ) goto abort_due
27660 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 69 66 28  _to_error;.  if(
27670 20 70 54 61 62 20 29 7b 0a 20 20 20 20 61 73 73   pTab ){.    ass
27680 65 72 74 28 20 64 62 2d 3e 78 55 70 64 61 74 65  ert( db->xUpdate
27690 43 61 6c 6c 62 61 63 6b 21 3d 30 20 29 3b 0a 20  Callback!=0 );. 
276a0 20 20 20 61 73 73 65 72 74 28 20 70 54 61 62 2d     assert( pTab-
276b0 3e 61 43 6f 6c 21 3d 30 20 29 3b 0a 20 20 20 20  >aCol!=0 );.    
276c0 64 62 2d 3e 78 55 70 64 61 74 65 43 61 6c 6c 62  db->xUpdateCallb
276d0 61 63 6b 28 64 62 2d 3e 70 55 70 64 61 74 65 41  ack(db->pUpdateA
276e0 72 67 2c 0a 20 20 20 20 20 20 20 20 20 20 20 28  rg,.           (
276f0 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47  pOp->p5 & OPFLAG
27700 5f 49 53 55 50 44 41 54 45 29 20 3f 20 53 51 4c  _ISUPDATE) ? SQL
27710 49 54 45 5f 55 50 44 41 54 45 20 3a 20 53 51 4c  ITE_UPDATE : SQL
27720 49 54 45 5f 49 4e 53 45 52 54 2c 0a 20 20 20 20  ITE_INSERT,.    
27730 20 20 20 20 20 20 20 7a 44 62 2c 20 70 54 61 62         zDb, pTab
27740 2d 3e 7a 4e 61 6d 65 2c 20 78 2e 6e 4b 65 79 29  ->zName, x.nKey)
27750 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
27760 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 44 65 6c  ../* Opcode: Del
27770 65 74 65 20 50 31 20 50 32 20 50 33 20 50 34 20  ete P1 P2 P3 P4 
27780 50 35 0a 2a 2a 0a 2a 2a 20 44 65 6c 65 74 65 20  P5.**.** Delete 
27790 74 68 65 20 72 65 63 6f 72 64 20 61 74 20 77 68  the record at wh
277a0 69 63 68 20 74 68 65 20 50 31 20 63 75 72 73 6f  ich the P1 curso
277b0 72 20 69 73 20 63 75 72 72 65 6e 74 6c 79 20 70  r is currently p
277c0 6f 69 6e 74 69 6e 67 2e 0a 2a 2a 0a 2a 2a 20 49  ointing..**.** I
277d0 66 20 74 68 65 20 4f 50 46 4c 41 47 5f 53 41 56  f the OPFLAG_SAV
277e0 45 50 4f 53 49 54 49 4f 4e 20 62 69 74 20 6f 66  EPOSITION bit of
277f0 20 74 68 65 20 50 35 20 70 61 72 61 6d 65 74 65   the P5 paramete
27800 72 20 69 73 20 73 65 74 2c 20 74 68 65 6e 0a 2a  r is set, then.*
27810 2a 20 74 68 65 20 63 75 72 73 6f 72 20 77 69 6c  * the cursor wil
27820 6c 20 62 65 20 6c 65 66 74 20 70 6f 69 6e 74 69  l be left pointi
27830 6e 67 20 61 74 20 20 65 69 74 68 65 72 20 74 68  ng at  either th
27840 65 20 6e 65 78 74 20 6f 72 20 74 68 65 20 70 72  e next or the pr
27850 65 76 69 6f 75 73 0a 2a 2a 20 72 65 63 6f 72 64  evious.** record
27860 20 69 6e 20 74 68 65 20 74 61 62 6c 65 2e 20 49   in the table. I
27870 66 20 69 74 20 69 73 20 6c 65 66 74 20 70 6f 69  f it is left poi
27880 6e 74 69 6e 67 20 61 74 20 74 68 65 20 6e 65 78  nting at the nex
27890 74 20 72 65 63 6f 72 64 2c 20 74 68 65 6e 0a 2a  t record, then.*
278a0 2a 20 74 68 65 20 6e 65 78 74 20 4e 65 78 74 20  * the next Next 
278b0 69 6e 73 74 72 75 63 74 69 6f 6e 20 77 69 6c 6c  instruction will
278c0 20 62 65 20 61 20 6e 6f 2d 6f 70 2e 20 41 73 20   be a no-op. As 
278d0 61 20 72 65 73 75 6c 74 2c 20 69 6e 20 74 68 69  a result, in thi
278e0 73 20 63 61 73 65 0a 2a 2a 20 69 74 20 69 73 20  s case.** it is 
278f0 6f 6b 20 74 6f 20 64 65 6c 65 74 65 20 61 20 72  ok to delete a r
27900 65 63 6f 72 64 20 66 72 6f 6d 20 77 69 74 68 69  ecord from withi
27910 6e 20 61 20 4e 65 78 74 20 6c 6f 6f 70 2e 20 49  n a Next loop. I
27920 66 20 0a 2a 2a 20 4f 50 46 4c 41 47 5f 53 41 56  f .** OPFLAG_SAV
27930 45 50 4f 53 49 54 49 4f 4e 20 62 69 74 20 6f 66  EPOSITION bit of
27940 20 50 35 20 69 73 20 63 6c 65 61 72 2c 20 74 68   P5 is clear, th
27950 65 6e 20 74 68 65 20 63 75 72 73 6f 72 20 77 69  en the cursor wi
27960 6c 6c 20 62 65 0a 2a 2a 20 6c 65 66 74 20 69 6e  ll be.** left in
27970 20 61 6e 20 75 6e 64 65 66 69 6e 65 64 20 73 74   an undefined st
27980 61 74 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68  ate..**.** If th
27990 65 20 4f 50 46 4c 41 47 5f 41 55 58 44 45 4c 45  e OPFLAG_AUXDELE
279a0 54 45 20 62 69 74 20 69 73 20 73 65 74 20 6f 6e  TE bit is set on
279b0 20 50 35 2c 20 74 68 61 74 20 69 6e 64 69 63 61   P5, that indica
279c0 74 65 73 20 74 68 61 74 20 74 68 69 73 0a 2a 2a  tes that this.**
279d0 20 64 65 6c 65 74 65 20 6f 6e 65 20 6f 66 20 73   delete one of s
279e0 65 76 65 72 61 6c 20 61 73 73 6f 63 69 61 74 65  everal associate
279f0 64 20 77 69 74 68 20 64 65 6c 65 74 69 6e 67 20  d with deleting 
27a00 61 20 74 61 62 6c 65 20 72 6f 77 20 61 6e 64 20  a table row and 
27a10 61 6c 6c 20 69 74 73 0a 2a 2a 20 61 73 73 6f 63  all its.** assoc
27a20 69 61 74 65 64 20 69 6e 64 65 78 20 65 6e 74 72  iated index entr
27a30 69 65 73 2e 20 20 45 78 61 63 74 6c 79 20 6f 6e  ies.  Exactly on
27a40 65 20 6f 66 20 74 68 6f 73 65 20 64 65 6c 65 74  e of those delet
27a50 65 73 20 69 73 20 74 68 65 20 22 70 72 69 6d 61  es is the "prima
27a60 72 79 22 0a 2a 2a 20 64 65 6c 65 74 65 2e 20 20  ry".** delete.  
27a70 54 68 65 20 6f 74 68 65 72 73 20 61 72 65 20 61  The others are a
27a80 6c 6c 20 6f 6e 20 4f 50 46 4c 41 47 5f 46 4f 52  ll on OPFLAG_FOR
27a90 44 45 4c 45 54 45 20 63 75 72 73 6f 72 73 20 6f  DELETE cursors o
27aa0 72 20 65 6c 73 65 20 61 72 65 0a 2a 2a 20 6d 61  r else are.** ma
27ab0 72 6b 65 64 20 77 69 74 68 20 74 68 65 20 41 55  rked with the AU
27ac0 58 44 45 4c 45 54 45 20 66 6c 61 67 2e 0a 2a 2a  XDELETE flag..**
27ad0 0a 2a 2a 20 49 66 20 74 68 65 20 4f 50 46 4c 41  .** If the OPFLA
27ae0 47 5f 4e 43 48 41 4e 47 45 20 66 6c 61 67 20 6f  G_NCHANGE flag o
27af0 66 20 50 32 20 28 4e 42 3a 20 50 32 20 6e 6f 74  f P2 (NB: P2 not
27b00 20 50 35 29 20 69 73 20 73 65 74 2c 20 74 68 65   P5) is set, the
27b10 6e 20 74 68 65 20 72 6f 77 0a 2a 2a 20 63 68 61  n the row.** cha
27b20 6e 67 65 20 63 6f 75 6e 74 20 69 73 20 69 6e 63  nge count is inc
27b30 72 65 6d 65 6e 74 65 64 20 28 6f 74 68 65 72 77  remented (otherw
27b40 69 73 65 20 6e 6f 74 29 2e 0a 2a 2a 0a 2a 2a 20  ise not)..**.** 
27b50 50 31 20 6d 75 73 74 20 6e 6f 74 20 62 65 20 70  P1 must not be p
27b60 73 65 75 64 6f 2d 74 61 62 6c 65 2e 20 20 49 74  seudo-table.  It
27b70 20 68 61 73 20 74 6f 20 62 65 20 61 20 72 65 61   has to be a rea
27b80 6c 20 74 61 62 6c 65 20 77 69 74 68 0a 2a 2a 20  l table with.** 
27b90 6d 75 6c 74 69 70 6c 65 20 72 6f 77 73 2e 0a 2a  multiple rows..*
27ba0 2a 0a 2a 2a 20 49 66 20 50 34 20 69 73 20 6e 6f  *.** If P4 is no
27bb0 74 20 4e 55 4c 4c 20 74 68 65 6e 20 69 74 20 70  t NULL then it p
27bc0 6f 69 6e 74 73 20 74 6f 20 61 20 54 61 62 6c 65  oints to a Table
27bd0 20 6f 62 6a 65 63 74 2e 20 49 6e 20 74 68 69 73   object. In this
27be0 20 63 61 73 65 20 65 69 74 68 65 72 20 0a 2a 2a   case either .**
27bf0 20 74 68 65 20 75 70 64 61 74 65 20 6f 72 20 70   the update or p
27c00 72 65 2d 75 70 64 61 74 65 20 68 6f 6f 6b 2c 20  re-update hook, 
27c10 6f 72 20 62 6f 74 68 2c 20 6d 61 79 20 62 65 20  or both, may be 
27c20 69 6e 76 6f 6b 65 64 2e 20 54 68 65 20 50 31 20  invoked. The P1 
27c30 63 75 72 73 6f 72 20 6d 75 73 74 0a 2a 2a 20 68  cursor must.** h
27c40 61 76 65 20 62 65 65 6e 20 70 6f 73 69 74 69 6f  ave been positio
27c50 6e 65 64 20 75 73 69 6e 67 20 4f 50 5f 4e 6f 74  ned using OP_Not
27c60 46 6f 75 6e 64 20 70 72 69 6f 72 20 74 6f 20 69  Found prior to i
27c70 6e 76 6f 6b 69 6e 67 20 74 68 69 73 20 6f 70 63  nvoking this opc
27c80 6f 64 65 20 69 6e 20 0a 2a 2a 20 74 68 69 73 20  ode in .** this 
27c90 63 61 73 65 2e 20 53 70 65 63 69 66 69 63 61 6c  case. Specifical
27ca0 6c 79 2c 20 69 66 20 6f 6e 65 20 69 73 20 63 6f  ly, if one is co
27cb0 6e 66 69 67 75 72 65 64 2c 20 74 68 65 20 70 72  nfigured, the pr
27cc0 65 2d 75 70 64 61 74 65 20 68 6f 6f 6b 20 69 73  e-update hook is
27cd0 20 0a 2a 2a 20 69 6e 76 6f 6b 65 64 20 69 66 20   .** invoked if 
27ce0 50 34 20 69 73 20 6e 6f 74 20 4e 55 4c 4c 2e 20  P4 is not NULL. 
27cf0 54 68 65 20 75 70 64 61 74 65 2d 68 6f 6f 6b 20  The update-hook 
27d00 69 73 20 69 6e 76 6f 6b 65 64 20 69 66 20 6f 6e  is invoked if on
27d10 65 20 69 73 20 63 6f 6e 66 69 67 75 72 65 64 2c  e is configured,
27d20 20 0a 2a 2a 20 50 34 20 69 73 20 6e 6f 74 20 4e   .** P4 is not N
27d30 55 4c 4c 2c 20 61 6e 64 20 74 68 65 20 4f 50 46  ULL, and the OPF
27d40 4c 41 47 5f 4e 43 48 41 4e 47 45 20 66 6c 61 67  LAG_NCHANGE flag
27d50 20 69 73 20 73 65 74 20 69 6e 20 50 32 2e 0a 2a   is set in P2..*
27d60 2a 0a 2a 2a 20 49 66 20 74 68 65 20 4f 50 46 4c  *.** If the OPFL
27d70 41 47 5f 49 53 55 50 44 41 54 45 20 66 6c 61 67  AG_ISUPDATE flag
27d80 20 69 73 20 73 65 74 20 69 6e 20 50 32 2c 20 74   is set in P2, t
27d90 68 65 6e 20 50 33 20 63 6f 6e 74 61 69 6e 73 20  hen P3 contains 
27da0 74 68 65 20 61 64 64 72 65 73 73 0a 2a 2a 20 6f  the address.** o
27db0 66 20 74 68 65 20 6d 65 6d 6f 72 79 20 63 65 6c  f the memory cel
27dc0 6c 20 74 68 61 74 20 63 6f 6e 74 61 69 6e 73 20  l that contains 
27dd0 74 68 65 20 76 61 6c 75 65 20 74 68 61 74 20 74  the value that t
27de0 68 65 20 72 6f 77 69 64 20 6f 66 20 74 68 65 20  he rowid of the 
27df0 72 6f 77 20 77 69 6c 6c 0a 2a 2a 20 62 65 20 73  row will.** be s
27e00 65 74 20 74 6f 20 62 79 20 74 68 65 20 75 70 64  et to by the upd
27e10 61 74 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ate..*/.case OP_
27e20 44 65 6c 65 74 65 3a 20 7b 0a 20 20 56 64 62 65  Delete: {.  Vdbe
27e30 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 63 6f  Cursor *pC;.  co
27e40 6e 73 74 20 63 68 61 72 20 2a 7a 44 62 3b 0a 20  nst char *zDb;. 
27e50 20 54 61 62 6c 65 20 2a 70 54 61 62 3b 0a 20 20   Table *pTab;.  
27e60 69 6e 74 20 6f 70 66 6c 61 67 73 3b 0a 0a 20 20  int opflags;..  
27e70 6f 70 66 6c 61 67 73 20 3d 20 70 4f 70 2d 3e 70  opflags = pOp->p
27e80 32 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  2;.  assert( pOp
27e90 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e  ->p1>=0 && pOp->
27ea0 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b  p1<p->nCursor );
27eb0 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72  .  pC = p->apCsr
27ec0 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
27ed0 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20  ert( pC!=0 );.  
27ee0 61 73 73 65 72 74 28 20 70 43 2d 3e 65 43 75 72  assert( pC->eCur
27ef0 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f 42 54  Type==CURTYPE_BT
27f00 52 45 45 20 29 3b 0a 20 20 61 73 73 65 72 74 28  REE );.  assert(
27f10 20 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 21   pC->uc.pCursor!
27f20 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
27f30 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65  pC->deferredMove
27f40 74 6f 3d 3d 30 20 29 3b 0a 20 20 73 71 6c 69 74  to==0 );.  sqlit
27f50 65 33 56 64 62 65 49 6e 63 72 57 72 69 74 65 43  e3VdbeIncrWriteC
27f60 6f 75 6e 74 65 72 28 70 2c 20 70 43 29 3b 0a 0a  ounter(p, pC);..
27f70 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45  #ifdef SQLITE_DE
27f80 42 55 47 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70  BUG.  if( pOp->p
27f90 34 74 79 70 65 3d 3d 50 34 5f 54 41 42 4c 45 20  4type==P4_TABLE 
27fa0 26 26 20 48 61 73 52 6f 77 69 64 28 70 4f 70 2d  && HasRowid(pOp-
27fb0 3e 70 34 2e 70 54 61 62 29 20 26 26 20 70 4f 70  >p4.pTab) && pOp
27fc0 2d 3e 70 35 3d 3d 30 20 29 7b 0a 20 20 20 20 2f  ->p5==0 ){.    /
27fd0 2a 20 49 66 20 70 35 20 69 73 20 7a 65 72 6f 2c  * If p5 is zero,
27fe0 20 74 68 65 20 73 65 65 6b 20 6f 70 65 72 61 74   the seek operat
27ff0 69 6f 6e 20 74 68 61 74 20 70 6f 73 69 74 69 6f  ion that positio
28000 6e 65 64 20 74 68 65 20 63 75 72 73 6f 72 20 70  ned the cursor p
28010 72 69 6f 72 20 74 6f 0a 20 20 20 20 2a 2a 20 4f  rior to.    ** O
28020 50 5f 44 65 6c 65 74 65 20 77 69 6c 6c 20 68 61  P_Delete will ha
28030 76 65 20 61 6c 73 6f 20 73 65 74 20 74 68 65 20  ve also set the 
28040 70 43 2d 3e 6d 6f 76 65 74 6f 54 61 72 67 65 74  pC->movetoTarget
28050 20 66 69 65 6c 64 20 74 6f 20 74 68 65 20 72 6f   field to the ro
28060 77 69 64 20 6f 66 0a 20 20 20 20 2a 2a 20 74 68  wid of.    ** th
28070 65 20 72 6f 77 20 74 68 61 74 20 69 73 20 62 65  e row that is be
28080 69 6e 67 20 64 65 6c 65 74 65 64 20 2a 2f 0a 20  ing deleted */. 
28090 20 20 20 69 36 34 20 69 4b 65 79 20 3d 20 73 71     i64 iKey = sq
280a0 6c 69 74 65 33 42 74 72 65 65 49 6e 74 65 67 65  lite3BtreeIntege
280b0 72 4b 65 79 28 70 43 2d 3e 75 63 2e 70 43 75 72  rKey(pC->uc.pCur
280c0 73 6f 72 29 3b 0a 20 20 20 20 61 73 73 65 72 74  sor);.    assert
280d0 28 20 70 43 2d 3e 6d 6f 76 65 74 6f 54 61 72 67  ( pC->movetoTarg
280e0 65 74 3d 3d 69 4b 65 79 20 29 3b 0a 20 20 7d 0a  et==iKey );.  }.
280f0 23 65 6e 64 69 66 0a 0a 20 20 2f 2a 20 49 66 20  #endif..  /* If 
28100 74 68 65 20 75 70 64 61 74 65 2d 68 6f 6f 6b 20  the update-hook 
28110 6f 72 20 70 72 65 2d 75 70 64 61 74 65 2d 68 6f  or pre-update-ho
28120 6f 6b 20 77 69 6c 6c 20 62 65 20 69 6e 76 6f 6b  ok will be invok
28130 65 64 2c 20 73 65 74 20 7a 44 62 20 74 6f 0a 20  ed, set zDb to. 
28140 20 2a 2a 20 74 68 65 20 6e 61 6d 65 20 6f 66 20   ** the name of 
28150 74 68 65 20 64 62 20 74 6f 20 70 61 73 73 20 61  the db to pass a
28160 73 20 74 6f 20 69 74 2e 20 41 6c 73 6f 20 73 65  s to it. Also se
28170 74 20 6c 6f 63 61 6c 20 70 54 61 62 20 74 6f 20  t local pTab to 
28180 61 20 63 6f 70 79 0a 20 20 2a 2a 20 6f 66 20 70  a copy.  ** of p
28190 34 2e 70 54 61 62 2e 20 46 69 6e 61 6c 6c 79 2c  4.pTab. Finally,
281a0 20 69 66 20 70 35 20 69 73 20 74 72 75 65 2c 20   if p5 is true, 
281b0 69 6e 64 69 63 61 74 69 6e 67 20 74 68 61 74 20  indicating that 
281c0 74 68 69 73 20 63 75 72 73 6f 72 20 77 61 73 0a  this cursor was.
281d0 20 20 2a 2a 20 6c 61 73 74 20 6d 6f 76 65 64 20    ** last moved 
281e0 77 69 74 68 20 4f 50 5f 4e 65 78 74 20 6f 72 20  with OP_Next or 
281f0 4f 50 5f 50 72 65 76 2c 20 6e 6f 74 20 53 65 65  OP_Prev, not See
28200 6b 20 6f 72 20 4e 6f 74 46 6f 75 6e 64 2c 20 73  k or NotFound, s
28210 65 74 20 0a 20 20 2a 2a 20 56 64 62 65 43 75 72  et .  ** VdbeCur
28220 73 6f 72 2e 6d 6f 76 65 74 6f 54 61 72 67 65 74  sor.movetoTarget
28230 20 74 6f 20 74 68 65 20 63 75 72 72 65 6e 74 20   to the current 
28240 72 6f 77 69 64 2e 20 20 2a 2f 0a 20 20 69 66 28  rowid.  */.  if(
28250 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34   pOp->p4type==P4
28260 5f 54 41 42 4c 45 20 26 26 20 48 41 53 5f 55 50  _TABLE && HAS_UP
28270 44 41 54 45 5f 48 4f 4f 4b 28 64 62 29 20 29 7b  DATE_HOOK(db) ){
28280 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 43 2d  .    assert( pC-
28290 3e 69 44 62 3e 3d 30 20 29 3b 0a 20 20 20 20 61  >iDb>=0 );.    a
282a0 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 2e 70  ssert( pOp->p4.p
282b0 54 61 62 21 3d 30 20 29 3b 0a 20 20 20 20 7a 44  Tab!=0 );.    zD
282c0 62 20 3d 20 64 62 2d 3e 61 44 62 5b 70 43 2d 3e  b = db->aDb[pC->
282d0 69 44 62 5d 2e 7a 44 62 53 4e 61 6d 65 3b 0a 20  iDb].zDbSName;. 
282e0 20 20 20 70 54 61 62 20 3d 20 70 4f 70 2d 3e 70     pTab = pOp->p
282f0 34 2e 70 54 61 62 3b 0a 20 20 20 20 69 66 28 20  4.pTab;.    if( 
28300 28 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41  (pOp->p5 & OPFLA
28310 47 5f 53 41 56 45 50 4f 53 49 54 49 4f 4e 29 21  G_SAVEPOSITION)!
28320 3d 30 20 26 26 20 70 43 2d 3e 69 73 54 61 62 6c  =0 && pC->isTabl
28330 65 20 29 7b 0a 20 20 20 20 20 20 70 43 2d 3e 6d  e ){.      pC->m
28340 6f 76 65 74 6f 54 61 72 67 65 74 20 3d 20 73 71  ovetoTarget = sq
28350 6c 69 74 65 33 42 74 72 65 65 49 6e 74 65 67 65  lite3BtreeIntege
28360 72 4b 65 79 28 70 43 2d 3e 75 63 2e 70 43 75 72  rKey(pC->uc.pCur
28370 73 6f 72 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 65  sor);.    }.  }e
28380 6c 73 65 7b 0a 20 20 20 20 7a 44 62 20 3d 20 30  lse{.    zDb = 0
28390 3b 20 20 20 2f 2a 20 4e 6f 74 20 6e 65 65 64 65  ;   /* Not neede
283a0 64 2e 20 20 53 69 6c 65 6e 63 65 20 61 20 63 6f  d.  Silence a co
283b0 6d 70 69 6c 65 72 20 77 61 72 6e 69 6e 67 2e 20  mpiler warning. 
283c0 2a 2f 0a 20 20 20 20 70 54 61 62 20 3d 20 30 3b  */.    pTab = 0;
283d0 20 20 2f 2a 20 4e 6f 74 20 6e 65 65 64 65 64 2e    /* Not needed.
283e0 20 20 53 69 6c 65 6e 63 65 20 61 20 63 6f 6d 70    Silence a comp
283f0 69 6c 65 72 20 77 61 72 6e 69 6e 67 2e 20 2a 2f  iler warning. */
28400 0a 20 20 7d 0a 0a 23 69 66 64 65 66 20 53 51 4c  .  }..#ifdef SQL
28410 49 54 45 5f 45 4e 41 42 4c 45 5f 50 52 45 55 50  ITE_ENABLE_PREUP
28420 44 41 54 45 5f 48 4f 4f 4b 0a 20 20 2f 2a 20 49  DATE_HOOK.  /* I
28430 6e 76 6f 6b 65 20 74 68 65 20 70 72 65 2d 75 70  nvoke the pre-up
28440 64 61 74 65 2d 68 6f 6f 6b 20 69 66 20 72 65 71  date-hook if req
28450 75 69 72 65 64 2e 20 2a 2f 0a 20 20 69 66 28 20  uired. */.  if( 
28460 64 62 2d 3e 78 50 72 65 55 70 64 61 74 65 43 61  db->xPreUpdateCa
28470 6c 6c 62 61 63 6b 20 26 26 20 70 4f 70 2d 3e 70  llback && pOp->p
28480 34 2e 70 54 61 62 20 29 7b 0a 20 20 20 20 61 73  4.pTab ){.    as
28490 73 65 72 74 28 20 21 28 6f 70 66 6c 61 67 73 20  sert( !(opflags 
284a0 26 20 4f 50 46 4c 41 47 5f 49 53 55 50 44 41 54  & OPFLAG_ISUPDAT
284b0 45 29 20 0a 20 20 20 20 20 20 20 20 20 7c 7c 20  E) .         || 
284c0 48 61 73 52 6f 77 69 64 28 70 54 61 62 29 3d 3d  HasRowid(pTab)==
284d0 30 20 0a 20 20 20 20 20 20 20 20 20 7c 7c 20 28  0 .         || (
284e0 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 2e 66 6c  aMem[pOp->p3].fl
284f0 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29 20 0a  ags & MEM_Int) .
28500 20 20 20 20 29 3b 0a 20 20 20 20 73 71 6c 69 74      );.    sqlit
28510 65 33 56 64 62 65 50 72 65 55 70 64 61 74 65 48  e3VdbePreUpdateH
28520 6f 6f 6b 28 70 2c 20 70 43 2c 0a 20 20 20 20 20  ook(p, pC,.     
28530 20 20 20 28 6f 70 66 6c 61 67 73 20 26 20 4f 50     (opflags & OP
28540 46 4c 41 47 5f 49 53 55 50 44 41 54 45 29 20 3f  FLAG_ISUPDATE) ?
28550 20 53 51 4c 49 54 45 5f 55 50 44 41 54 45 20 3a   SQLITE_UPDATE :
28560 20 53 51 4c 49 54 45 5f 44 45 4c 45 54 45 2c 20   SQLITE_DELETE, 
28570 0a 20 20 20 20 20 20 20 20 7a 44 62 2c 20 70 54  .        zDb, pT
28580 61 62 2c 20 70 43 2d 3e 6d 6f 76 65 74 6f 54 61  ab, pC->movetoTa
28590 72 67 65 74 2c 0a 20 20 20 20 20 20 20 20 70 4f  rget,.        pO
285a0 70 2d 3e 70 33 0a 20 20 20 20 29 3b 0a 20 20 7d  p->p3.    );.  }
285b0 0a 20 20 69 66 28 20 6f 70 66 6c 61 67 73 20 26  .  if( opflags &
285c0 20 4f 50 46 4c 41 47 5f 49 53 4e 4f 4f 50 20 29   OPFLAG_ISNOOP )
285d0 20 62 72 65 61 6b 3b 0a 23 65 6e 64 69 66 0a 20   break;.#endif. 
285e0 0a 20 20 2f 2a 20 4f 6e 6c 79 20 66 6c 61 67 73  .  /* Only flags
285f0 20 74 68 61 74 20 63 61 6e 20 62 65 20 73 65 74   that can be set
28600 20 61 72 65 20 53 41 56 45 50 4f 49 53 54 49 4f   are SAVEPOISTIO
28610 4e 20 61 6e 64 20 41 55 58 44 45 4c 45 54 45 20  N and AUXDELETE 
28620 2a 2f 20 0a 20 20 61 73 73 65 72 74 28 20 28 70  */ .  assert( (p
28630 4f 70 2d 3e 70 35 20 26 20 7e 28 4f 50 46 4c 41  Op->p5 & ~(OPFLA
28640 47 5f 53 41 56 45 50 4f 53 49 54 49 4f 4e 7c 4f  G_SAVEPOSITION|O
28650 50 46 4c 41 47 5f 41 55 58 44 45 4c 45 54 45 29  PFLAG_AUXDELETE)
28660 29 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  )==0 );.  assert
28670 28 20 4f 50 46 4c 41 47 5f 53 41 56 45 50 4f 53  ( OPFLAG_SAVEPOS
28680 49 54 49 4f 4e 3d 3d 42 54 52 45 45 5f 53 41 56  ITION==BTREE_SAV
28690 45 50 4f 53 49 54 49 4f 4e 20 29 3b 0a 20 20 61  EPOSITION );.  a
286a0 73 73 65 72 74 28 20 4f 50 46 4c 41 47 5f 41 55  ssert( OPFLAG_AU
286b0 58 44 45 4c 45 54 45 3d 3d 42 54 52 45 45 5f 41  XDELETE==BTREE_A
286c0 55 58 44 45 4c 45 54 45 20 29 3b 0a 0a 23 69 66  UXDELETE );..#if
286d0 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47  def SQLITE_DEBUG
286e0 0a 20 20 69 66 28 20 70 2d 3e 70 46 72 61 6d 65  .  if( p->pFrame
286f0 3d 3d 30 20 29 7b 0a 20 20 20 20 69 66 28 20 70  ==0 ){.    if( p
28700 43 2d 3e 69 73 45 70 68 65 6d 65 72 61 6c 3d 3d  C->isEphemeral==
28710 30 0a 20 20 20 20 20 20 20 20 26 26 20 28 70 4f  0.        && (pO
28720 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 41  p->p5 & OPFLAG_A
28730 55 58 44 45 4c 45 54 45 29 3d 3d 30 0a 20 20 20  UXDELETE)==0.   
28740 20 20 20 20 20 26 26 20 28 70 43 2d 3e 77 72 46       && (pC->wrF
28750 6c 61 67 20 26 20 4f 50 46 4c 41 47 5f 46 4f 52  lag & OPFLAG_FOR
28760 44 45 4c 45 54 45 29 3d 3d 30 0a 20 20 20 20 20  DELETE)==0.     
28770 20 29 7b 0a 20 20 20 20 20 20 6e 45 78 74 72 61   ){.      nExtra
28780 44 65 6c 65 74 65 2b 2b 3b 0a 20 20 20 20 7d 0a  Delete++;.    }.
28790 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 32 20      if( pOp->p2 
287a0 26 20 4f 50 46 4c 41 47 5f 4e 43 48 41 4e 47 45  & OPFLAG_NCHANGE
287b0 20 29 7b 0a 20 20 20 20 20 20 6e 45 78 74 72 61   ){.      nExtra
287c0 44 65 6c 65 74 65 2d 2d 3b 0a 20 20 20 20 7d 0a  Delete--;.    }.
287d0 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 20 20 72 63    }.#endif..  rc
287e0 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 44   = sqlite3BtreeD
287f0 65 6c 65 74 65 28 70 43 2d 3e 75 63 2e 70 43 75  elete(pC->uc.pCu
28800 72 73 6f 72 2c 20 70 4f 70 2d 3e 70 35 29 3b 0a  rsor, pOp->p5);.
28810 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75    pC->cacheStatu
28820 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b  s = CACHE_STALE;
28830 0a 20 20 70 43 2d 3e 73 65 65 6b 52 65 73 75 6c  .  pC->seekResul
28840 74 20 3d 20 30 3b 0a 20 20 69 66 28 20 72 63 20  t = 0;.  if( rc 
28850 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65  ) goto abort_due
28860 5f 74 6f 5f 65 72 72 6f 72 3b 0a 0a 20 20 2f 2a  _to_error;..  /*
28870 20 49 6e 76 6f 6b 65 20 74 68 65 20 75 70 64 61   Invoke the upda
28880 74 65 2d 68 6f 6f 6b 20 69 66 20 72 65 71 75 69  te-hook if requi
28890 72 65 64 2e 20 2a 2f 0a 20 20 69 66 28 20 6f 70  red. */.  if( op
288a0 66 6c 61 67 73 20 26 20 4f 50 46 4c 41 47 5f 4e  flags & OPFLAG_N
288b0 43 48 41 4e 47 45 20 29 7b 0a 20 20 20 20 70 2d  CHANGE ){.    p-
288c0 3e 6e 43 68 61 6e 67 65 2b 2b 3b 0a 20 20 20 20  >nChange++;.    
288d0 69 66 28 20 64 62 2d 3e 78 55 70 64 61 74 65 43  if( db->xUpdateC
288e0 61 6c 6c 62 61 63 6b 20 26 26 20 48 61 73 52 6f  allback && HasRo
288f0 77 69 64 28 70 54 61 62 29 20 29 7b 0a 20 20 20  wid(pTab) ){.   
28900 20 20 20 64 62 2d 3e 78 55 70 64 61 74 65 43 61     db->xUpdateCa
28910 6c 6c 62 61 63 6b 28 64 62 2d 3e 70 55 70 64 61  llback(db->pUpda
28920 74 65 41 72 67 2c 20 53 51 4c 49 54 45 5f 44 45  teArg, SQLITE_DE
28930 4c 45 54 45 2c 20 7a 44 62 2c 20 70 54 61 62 2d  LETE, zDb, pTab-
28940 3e 7a 4e 61 6d 65 2c 0a 20 20 20 20 20 20 20 20  >zName,.        
28950 20 20 70 43 2d 3e 6d 6f 76 65 74 6f 54 61 72 67    pC->movetoTarg
28960 65 74 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72  et);.      asser
28970 74 28 20 70 43 2d 3e 69 44 62 3e 3d 30 20 29 3b  t( pC->iDb>=0 );
28980 0a 20 20 20 20 7d 0a 20 20 7d 0a 0a 20 20 62 72  .    }.  }..  br
28990 65 61 6b 3b 0a 7d 0a 2f 2a 20 4f 70 63 6f 64 65  eak;.}./* Opcode
289a0 3a 20 52 65 73 65 74 43 6f 75 6e 74 20 2a 20 2a  : ResetCount * *
289b0 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 65   * * *.**.** The
289c0 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 63 68   value of the ch
289d0 61 6e 67 65 20 63 6f 75 6e 74 65 72 20 69 73 20  ange counter is 
289e0 63 6f 70 69 65 64 20 74 6f 20 74 68 65 20 64 61  copied to the da
289f0 74 61 62 61 73 65 20 68 61 6e 64 6c 65 0a 2a 2a  tabase handle.**
28a00 20 63 68 61 6e 67 65 20 63 6f 75 6e 74 65 72 20   change counter 
28a10 28 72 65 74 75 72 6e 65 64 20 62 79 20 73 75 62  (returned by sub
28a20 73 65 71 75 65 6e 74 20 63 61 6c 6c 73 20 74 6f  sequent calls to
28a30 20 73 71 6c 69 74 65 33 5f 63 68 61 6e 67 65 73   sqlite3_changes
28a40 28 29 29 2e 0a 2a 2a 20 54 68 65 6e 20 74 68 65  ())..** Then the
28a50 20 56 4d 73 20 69 6e 74 65 72 6e 61 6c 20 63 68   VMs internal ch
28a60 61 6e 67 65 20 63 6f 75 6e 74 65 72 20 72 65 73  ange counter res
28a70 65 74 73 20 74 6f 20 30 2e 0a 2a 2a 20 54 68 69  ets to 0..** Thi
28a80 73 20 69 73 20 75 73 65 64 20 62 79 20 74 72 69  s is used by tri
28a90 67 67 65 72 20 70 72 6f 67 72 61 6d 73 2e 0a 2a  gger programs..*
28aa0 2f 0a 63 61 73 65 20 4f 50 5f 52 65 73 65 74 43  /.case OP_ResetC
28ab0 6f 75 6e 74 3a 20 7b 0a 20 20 73 71 6c 69 74 65  ount: {.  sqlite
28ac0 33 56 64 62 65 53 65 74 43 68 61 6e 67 65 73 28  3VdbeSetChanges(
28ad0 64 62 2c 20 70 2d 3e 6e 43 68 61 6e 67 65 29 3b  db, p->nChange);
28ae0 0a 20 20 70 2d 3e 6e 43 68 61 6e 67 65 20 3d 20  .  p->nChange = 
28af0 30 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  0;.  break;.}../
28b00 2a 20 4f 70 63 6f 64 65 3a 20 53 6f 72 74 65 72  * Opcode: Sorter
28b10 43 6f 6d 70 61 72 65 20 50 31 20 50 32 20 50 33  Compare P1 P2 P3
28b20 20 50 34 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a   P4.** Synopsis:
28b30 20 69 66 20 6b 65 79 28 50 31 29 21 3d 74 72 69   if key(P1)!=tri
28b40 6d 28 72 5b 50 33 5d 2c 50 34 29 20 67 6f 74 6f  m(r[P3],P4) goto
28b50 20 50 32 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20   P2.**.** P1 is 
28b60 61 20 73 6f 72 74 65 72 20 63 75 72 73 6f 72 2e  a sorter cursor.
28b70 20 54 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f   This instructio
28b80 6e 20 63 6f 6d 70 61 72 65 73 20 61 20 70 72 65  n compares a pre
28b90 66 69 78 20 6f 66 20 74 68 65 0a 2a 2a 20 72 65  fix of the.** re
28ba0 63 6f 72 64 20 62 6c 6f 62 20 69 6e 20 72 65 67  cord blob in reg
28bb0 69 73 74 65 72 20 50 33 20 61 67 61 69 6e 73 74  ister P3 against
28bc0 20 61 20 70 72 65 66 69 78 20 6f 66 20 74 68 65   a prefix of the
28bd0 20 65 6e 74 72 79 20 74 68 61 74 20 0a 2a 2a 20   entry that .** 
28be0 74 68 65 20 73 6f 72 74 65 72 20 63 75 72 73 6f  the sorter curso
28bf0 72 20 63 75 72 72 65 6e 74 6c 79 20 70 6f 69 6e  r currently poin
28c00 74 73 20 74 6f 2e 20 20 4f 6e 6c 79 20 74 68 65  ts to.  Only the
28c10 20 66 69 72 73 74 20 50 34 20 66 69 65 6c 64 73   first P4 fields
28c20 0a 2a 2a 20 6f 66 20 72 5b 50 33 5d 20 61 6e 64  .** of r[P3] and
28c30 20 74 68 65 20 73 6f 72 74 65 72 20 72 65 63 6f   the sorter reco
28c40 72 64 20 61 72 65 20 63 6f 6d 70 61 72 65 64 2e  rd are compared.
28c50 0a 2a 2a 0a 2a 2a 20 49 66 20 65 69 74 68 65 72  .**.** If either
28c60 20 50 33 20 6f 72 20 74 68 65 20 73 6f 72 74 65   P3 or the sorte
28c70 72 20 63 6f 6e 74 61 69 6e 73 20 61 20 4e 55 4c  r contains a NUL
28c80 4c 20 69 6e 20 6f 6e 65 20 6f 66 20 74 68 65 69  L in one of thei
28c90 72 20 73 69 67 6e 69 66 69 63 61 6e 74 0a 2a 2a  r significant.**
28ca0 20 66 69 65 6c 64 73 20 28 6e 6f 74 20 63 6f 75   fields (not cou
28cb0 6e 74 69 6e 67 20 74 68 65 20 50 34 20 66 69 65  nting the P4 fie
28cc0 6c 64 73 20 61 74 20 74 68 65 20 65 6e 64 20 77  lds at the end w
28cd0 68 69 63 68 20 61 72 65 20 69 67 6e 6f 72 65 64  hich are ignored
28ce0 29 20 74 68 65 6e 0a 2a 2a 20 74 68 65 20 63 6f  ) then.** the co
28cf0 6d 70 61 72 69 73 6f 6e 20 69 73 20 61 73 73 75  mparison is assu
28d00 6d 65 64 20 74 6f 20 62 65 20 65 71 75 61 6c 2e  med to be equal.
28d10 0a 2a 2a 0a 2a 2a 20 46 61 6c 6c 20 74 68 72 6f  .**.** Fall thro
28d20 75 67 68 20 74 6f 20 6e 65 78 74 20 69 6e 73 74  ugh to next inst
28d30 72 75 63 74 69 6f 6e 20 69 66 20 74 68 65 20 74  ruction if the t
28d40 77 6f 20 72 65 63 6f 72 64 73 20 63 6f 6d 70 61  wo records compa
28d50 72 65 20 65 71 75 61 6c 20 74 6f 0a 2a 2a 20 65  re equal to.** e
28d60 61 63 68 20 6f 74 68 65 72 2e 20 20 4a 75 6d 70  ach other.  Jump
28d70 20 74 6f 20 50 32 20 69 66 20 74 68 65 79 20 61   to P2 if they a
28d80 72 65 20 64 69 66 66 65 72 65 6e 74 2e 0a 2a 2f  re different..*/
28d90 0a 63 61 73 65 20 4f 50 5f 53 6f 72 74 65 72 43  .case OP_SorterC
28da0 6f 6d 70 61 72 65 3a 20 7b 0a 20 20 56 64 62 65  ompare: {.  Vdbe
28db0 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 69 6e  Cursor *pC;.  in
28dc0 74 20 72 65 73 3b 0a 20 20 69 6e 74 20 6e 4b 65  t res;.  int nKe
28dd0 79 43 6f 6c 3b 0a 0a 20 20 70 43 20 3d 20 70 2d  yCol;..  pC = p-
28de0 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b  >apCsr[pOp->p1];
28df0 0a 20 20 61 73 73 65 72 74 28 20 69 73 53 6f 72  .  assert( isSor
28e00 74 65 72 28 70 43 29 20 29 3b 0a 20 20 61 73 73  ter(pC) );.  ass
28e10 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65  ert( pOp->p4type
28e20 3d 3d 50 34 5f 49 4e 54 33 32 20 29 3b 0a 20 20  ==P4_INT32 );.  
28e30 70 49 6e 33 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn3 = &aMem[pOp
28e40 2d 3e 70 33 5d 3b 0a 20 20 6e 4b 65 79 43 6f 6c  ->p3];.  nKeyCol
28e50 20 3d 20 70 4f 70 2d 3e 70 34 2e 69 3b 0a 20 20   = pOp->p4.i;.  
28e60 72 65 73 20 3d 20 30 3b 0a 20 20 72 63 20 3d 20  res = 0;.  rc = 
28e70 73 71 6c 69 74 65 33 56 64 62 65 53 6f 72 74 65  sqlite3VdbeSorte
28e80 72 43 6f 6d 70 61 72 65 28 70 43 2c 20 70 49 6e  rCompare(pC, pIn
28e90 33 2c 20 6e 4b 65 79 43 6f 6c 2c 20 26 72 65 73  3, nKeyCol, &res
28ea0 29 3b 0a 20 20 56 64 62 65 42 72 61 6e 63 68 54  );.  VdbeBranchT
28eb0 61 6b 65 6e 28 72 65 73 21 3d 30 2c 32 29 3b 0a  aken(res!=0,2);.
28ec0 20 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20    if( rc ) goto 
28ed0 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
28ee0 6f 72 3b 0a 20 20 69 66 28 20 72 65 73 20 29 20  or;.  if( res ) 
28ef0 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b  goto jump_to_p2;
28f00 0a 20 20 62 72 65 61 6b 3b 0a 7d 3b 0a 0a 2f 2a  .  break;.};../*
28f10 20 4f 70 63 6f 64 65 3a 20 53 6f 72 74 65 72 44   Opcode: SorterD
28f20 61 74 61 20 50 31 20 50 32 20 50 33 20 2a 20 2a  ata P1 P2 P3 * *
28f30 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b  .** Synopsis: r[
28f40 50 32 5d 3d 64 61 74 61 0a 2a 2a 0a 2a 2a 20 57  P2]=data.**.** W
28f50 72 69 74 65 20 69 6e 74 6f 20 72 65 67 69 73 74  rite into regist
28f60 65 72 20 50 32 20 74 68 65 20 63 75 72 72 65 6e  er P2 the curren
28f70 74 20 73 6f 72 74 65 72 20 64 61 74 61 20 66 6f  t sorter data fo
28f80 72 20 73 6f 72 74 65 72 20 63 75 72 73 6f 72 20  r sorter cursor 
28f90 50 31 2e 0a 2a 2a 20 54 68 65 6e 20 63 6c 65 61  P1..** Then clea
28fa0 72 20 74 68 65 20 63 6f 6c 75 6d 6e 20 68 65 61  r the column hea
28fb0 64 65 72 20 63 61 63 68 65 20 6f 6e 20 63 75 72  der cache on cur
28fc0 73 6f 72 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 54 68  sor P3..**.** Th
28fd0 69 73 20 6f 70 63 6f 64 65 20 69 73 20 6e 6f 72  is opcode is nor
28fe0 6d 61 6c 6c 79 20 75 73 65 20 74 6f 20 6d 6f 76  mally use to mov
28ff0 65 20 61 20 72 65 63 6f 72 64 20 6f 75 74 20 6f  e a record out o
29000 66 20 74 68 65 20 73 6f 72 74 65 72 20 61 6e 64  f the sorter and
29010 20 69 6e 74 6f 0a 2a 2a 20 61 20 72 65 67 69 73   into.** a regis
29020 74 65 72 20 74 68 61 74 20 69 73 20 74 68 65 20  ter that is the 
29030 73 6f 75 72 63 65 20 66 6f 72 20 61 20 70 73 65  source for a pse
29040 75 64 6f 2d 74 61 62 6c 65 20 63 75 72 73 6f 72  udo-table cursor
29050 20 63 72 65 61 74 65 64 20 75 73 69 6e 67 0a 2a   created using.*
29060 2a 20 4f 70 65 6e 50 73 65 75 64 6f 2e 20 20 54  * OpenPseudo.  T
29070 68 61 74 20 70 73 65 75 64 6f 2d 74 61 62 6c 65  hat pseudo-table
29080 20 63 75 72 73 6f 72 20 69 73 20 74 68 65 20 6f   cursor is the o
29090 6e 65 20 74 68 61 74 20 69 73 20 69 64 65 6e 74  ne that is ident
290a0 69 66 69 65 64 20 62 79 0a 2a 2a 20 70 61 72 61  ified by.** para
290b0 6d 65 74 65 72 20 50 33 2e 20 20 43 6c 65 61 72  meter P3.  Clear
290c0 69 6e 67 20 74 68 65 20 50 33 20 63 6f 6c 75 6d  ing the P3 colum
290d0 6e 20 63 61 63 68 65 20 61 73 20 70 61 72 74 20  n cache as part 
290e0 6f 66 20 74 68 69 73 20 6f 70 63 6f 64 65 20 73  of this opcode s
290f0 61 76 65 73 0a 2a 2a 20 75 73 20 66 72 6f 6d 20  aves.** us from 
29100 68 61 76 69 6e 67 20 74 6f 20 69 73 73 75 65 20  having to issue 
29110 61 20 73 65 70 61 72 61 74 65 20 4e 75 6c 6c 52  a separate NullR
29120 6f 77 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 74  ow instruction t
29130 6f 20 63 6c 65 61 72 20 74 68 61 74 20 63 61 63  o clear that cac
29140 68 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53  he..*/.case OP_S
29150 6f 72 74 65 72 44 61 74 61 3a 20 7b 0a 20 20 56  orterData: {.  V
29160 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 0a  dbeCursor *pC;..
29170 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70    pOut = &aMem[p
29180 4f 70 2d 3e 70 32 5d 3b 0a 20 20 70 43 20 3d 20  Op->p2];.  pC = 
29190 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31  p->apCsr[pOp->p1
291a0 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 69 73 53  ];.  assert( isS
291b0 6f 72 74 65 72 28 70 43 29 20 29 3b 0a 20 20 72  orter(pC) );.  r
291c0 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 53  c = sqlite3VdbeS
291d0 6f 72 74 65 72 52 6f 77 6b 65 79 28 70 43 2c 20  orterRowkey(pC, 
291e0 70 4f 75 74 29 3b 0a 20 20 61 73 73 65 72 74 28  pOut);.  assert(
291f0 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 7c   rc!=SQLITE_OK |
29200 7c 20 28 70 4f 75 74 2d 3e 66 6c 61 67 73 20 26  | (pOut->flags &
29210 20 4d 45 4d 5f 42 6c 6f 62 29 20 29 3b 0a 20 20   MEM_Blob) );.  
29220 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
29230 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d  =0 && pOp->p1<p-
29240 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 69 66  >nCursor );.  if
29250 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72  ( rc ) goto abor
29260 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
29270 20 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e    p->apCsr[pOp->
29280 70 33 5d 2d 3e 63 61 63 68 65 53 74 61 74 75 73  p3]->cacheStatus
29290 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a   = CACHE_STALE;.
292a0 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
292b0 70 63 6f 64 65 3a 20 52 6f 77 44 61 74 61 20 50  pcode: RowData P
292c0 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53  1 P2 P3 * *.** S
292d0 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 64  ynopsis: r[P2]=d
292e0 61 74 61 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20  ata.**.** Write 
292f0 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 32  into register P2
29300 20 74 68 65 20 63 6f 6d 70 6c 65 74 65 20 72 6f   the complete ro
29310 77 20 63 6f 6e 74 65 6e 74 20 66 6f 72 20 74 68  w content for th
29320 65 20 72 6f 77 20 61 74 20 0a 2a 2a 20 77 68 69  e row at .** whi
29330 63 68 20 63 75 72 73 6f 72 20 50 31 20 69 73 20  ch cursor P1 is 
29340 63 75 72 72 65 6e 74 6c 79 20 70 6f 69 6e 74 69  currently pointi
29350 6e 67 2e 0a 2a 2a 20 54 68 65 72 65 20 69 73 20  ng..** There is 
29360 6e 6f 20 69 6e 74 65 72 70 72 65 74 61 74 69 6f  no interpretatio
29370 6e 20 6f 66 20 74 68 65 20 64 61 74 61 2e 20 20  n of the data.  
29380 0a 2a 2a 20 49 74 20 69 73 20 6a 75 73 74 20 63  .** It is just c
29390 6f 70 69 65 64 20 6f 6e 74 6f 20 74 68 65 20 50  opied onto the P
293a0 32 20 72 65 67 69 73 74 65 72 20 65 78 61 63 74  2 register exact
293b0 6c 79 20 61 73 20 0a 2a 2a 20 69 74 20 69 73 20  ly as .** it is 
293c0 66 6f 75 6e 64 20 69 6e 20 74 68 65 20 64 61 74  found in the dat
293d0 61 62 61 73 65 20 66 69 6c 65 2e 0a 2a 2a 0a 2a  abase file..**.*
293e0 2a 20 49 66 20 63 75 72 73 6f 72 20 50 31 20 69  * If cursor P1 i
293f0 73 20 61 6e 20 69 6e 64 65 78 2c 20 74 68 65 6e  s an index, then
29400 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 69 73 20   the content is 
29410 74 68 65 20 6b 65 79 20 6f 66 20 74 68 65 20 72  the key of the r
29420 6f 77 2e 0a 2a 2a 20 49 66 20 63 75 72 73 6f 72  ow..** If cursor
29430 20 50 32 20 69 73 20 61 20 74 61 62 6c 65 2c 20   P2 is a table, 
29440 74 68 65 6e 20 74 68 65 20 63 6f 6e 74 65 6e 74  then the content
29450 20 65 78 74 72 61 63 74 65 64 20 69 73 20 74 68   extracted is th
29460 65 20 64 61 74 61 2e 0a 2a 2a 0a 2a 2a 20 49 66  e data..**.** If
29470 20 74 68 65 20 50 31 20 63 75 72 73 6f 72 20 6d   the P1 cursor m
29480 75 73 74 20 62 65 20 70 6f 69 6e 74 69 6e 67 20  ust be pointing 
29490 74 6f 20 61 20 76 61 6c 69 64 20 72 6f 77 20 28  to a valid row (
294a0 6e 6f 74 20 61 20 4e 55 4c 4c 20 72 6f 77 29 0a  not a NULL row).
294b0 2a 2a 20 6f 66 20 61 20 72 65 61 6c 20 74 61 62  ** of a real tab
294c0 6c 65 2c 20 6e 6f 74 20 61 20 70 73 65 75 64 6f  le, not a pseudo
294d0 2d 74 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 49 66  -table..**.** If
294e0 20 50 33 21 3d 30 20 74 68 65 6e 20 74 68 69 73   P3!=0 then this
294f0 20 6f 70 63 6f 64 65 20 69 73 20 61 6c 6c 6f 77   opcode is allow
29500 65 64 20 74 6f 20 6d 61 6b 65 20 61 6e 20 65 70  ed to make an ep
29510 68 65 6d 65 72 61 6c 20 70 6f 69 6e 74 65 72 0a  hemeral pointer.
29520 2a 2a 20 69 6e 74 6f 20 74 68 65 20 64 61 74 61  ** into the data
29530 62 61 73 65 20 70 61 67 65 2e 20 20 54 68 61 74  base page.  That
29540 20 6d 65 61 6e 73 20 74 68 61 74 20 74 68 65 20   means that the 
29550 63 6f 6e 74 65 6e 74 20 6f 66 20 74 68 65 20 6f  content of the o
29560 75 74 70 75 74 0a 2a 2a 20 72 65 67 69 73 74 65  utput.** registe
29570 72 20 77 69 6c 6c 20 62 65 20 69 6e 76 61 6c 69  r will be invali
29580 64 61 74 65 64 20 61 73 20 73 6f 6f 6e 20 61 73  dated as soon as
29590 20 74 68 65 20 63 75 72 73 6f 72 20 6d 6f 76 65   the cursor move
295a0 73 20 2d 20 69 6e 63 6c 75 64 69 6e 67 0a 2a 2a  s - including.**
295b0 20 6d 6f 76 65 73 20 63 61 75 73 65 64 20 62 79   moves caused by
295c0 20 6f 74 68 65 72 20 63 75 72 73 6f 72 73 20 74   other cursors t
295d0 68 61 74 20 22 73 61 76 65 22 20 74 68 65 20 63  hat "save" the c
295e0 75 72 72 65 6e 74 20 63 75 72 73 6f 72 73 0a 2a  urrent cursors.*
295f0 2a 20 70 6f 73 69 74 69 6f 6e 20 69 6e 20 6f 72  * position in or
29600 64 65 72 20 74 68 61 74 20 74 68 65 79 20 63 61  der that they ca
29610 6e 20 77 72 69 74 65 20 74 6f 20 74 68 65 20 73  n write to the s
29620 61 6d 65 20 74 61 62 6c 65 2e 20 20 49 66 20 50  ame table.  If P
29630 33 3d 3d 30 0a 2a 2a 20 74 68 65 6e 20 61 20 63  3==0.** then a c
29640 6f 70 79 20 6f 66 20 74 68 65 20 64 61 74 61 20  opy of the data 
29650 69 73 20 6d 61 64 65 20 69 6e 74 6f 20 6d 65 6d  is made into mem
29660 6f 72 79 2e 20 20 50 33 21 3d 30 20 69 73 20 66  ory.  P3!=0 is f
29670 61 73 74 65 72 2c 20 62 75 74 0a 2a 2a 20 50 33  aster, but.** P3
29680 3d 3d 30 20 69 73 20 73 61 66 65 72 2e 0a 2a 2a  ==0 is safer..**
29690 0a 2a 2a 20 49 66 20 50 33 21 3d 30 20 74 68 65  .** If P3!=0 the
296a0 6e 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66  n the content of
296b0 20 74 68 65 20 50 32 20 72 65 67 69 73 74 65 72   the P2 register
296c0 20 69 73 20 75 6e 73 75 69 74 61 62 6c 65 20 66   is unsuitable f
296d0 6f 72 20 75 73 65 0a 2a 2a 20 69 6e 20 4f 50 5f  or use.** in OP_
296e0 52 65 73 75 6c 74 20 61 6e 64 20 61 6e 79 20 4f  Result and any O
296f0 50 5f 52 65 73 75 6c 74 20 77 69 6c 6c 20 69 6e  P_Result will in
29700 76 61 6c 69 64 61 74 65 20 74 68 65 20 50 32 20  validate the P2 
29710 72 65 67 69 73 74 65 72 20 63 6f 6e 74 65 6e 74  register content
29720 2e 0a 2a 2a 20 54 68 65 20 50 32 20 72 65 67 69  ..** The P2 regi
29730 73 74 65 72 20 63 6f 6e 74 65 6e 74 20 69 73 20  ster content is 
29740 69 6e 76 61 6c 69 64 61 74 65 64 20 62 79 20 6f  invalidated by o
29750 70 63 6f 64 65 73 20 6c 69 6b 65 20 4f 50 5f 46  pcodes like OP_F
29760 75 6e 63 74 69 6f 6e 20 6f 72 0a 2a 2a 20 62 79  unction or.** by
29770 20 61 6e 79 20 75 73 65 20 6f 66 20 61 6e 6f 74   any use of anot
29780 68 65 72 20 63 75 72 73 6f 72 20 70 6f 69 6e 74  her cursor point
29790 69 6e 67 20 74 6f 20 74 68 65 20 73 61 6d 65 20  ing to the same 
297a0 74 61 62 6c 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f  table..*/.case O
297b0 50 5f 52 6f 77 44 61 74 61 3a 20 7b 0a 20 20 56  P_RowData: {.  V
297c0 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20  dbeCursor *pC;. 
297d0 20 42 74 43 75 72 73 6f 72 20 2a 70 43 72 73 72   BtCursor *pCrsr
297e0 3b 0a 20 20 75 33 32 20 6e 3b 0a 0a 20 20 70 4f  ;.  u32 n;..  pO
297f0 75 74 20 3d 20 6f 75 74 32 50 72 65 72 65 6c 65  ut = out2Prerele
29800 61 73 65 28 70 2c 20 70 4f 70 29 3b 0a 0a 20 20  ase(p, pOp);..  
29810 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
29820 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d  =0 && pOp->p1<p-
29830 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43  >nCursor );.  pC
29840 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d   = p->apCsr[pOp-
29850 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p1];.  assert( 
29860 70 43 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  pC!=0 );.  asser
29870 74 28 20 70 43 2d 3e 65 43 75 72 54 79 70 65 3d  t( pC->eCurType=
29880 3d 43 55 52 54 59 50 45 5f 42 54 52 45 45 20 29  =CURTYPE_BTREE )
29890 3b 0a 20 20 61 73 73 65 72 74 28 20 69 73 53 6f  ;.  assert( isSo
298a0 72 74 65 72 28 70 43 29 3d 3d 30 20 29 3b 0a 20  rter(pC)==0 );. 
298b0 20 61 73 73 65 72 74 28 20 70 43 2d 3e 6e 75 6c   assert( pC->nul
298c0 6c 52 6f 77 3d 3d 30 20 29 3b 0a 20 20 61 73 73  lRow==0 );.  ass
298d0 65 72 74 28 20 70 43 2d 3e 75 63 2e 70 43 75 72  ert( pC->uc.pCur
298e0 73 6f 72 21 3d 30 20 29 3b 0a 20 20 70 43 72 73  sor!=0 );.  pCrs
298f0 72 20 3d 20 70 43 2d 3e 75 63 2e 70 43 75 72 73  r = pC->uc.pCurs
29900 6f 72 3b 0a 0a 20 20 2f 2a 20 54 68 65 20 4f 50  or;..  /* The OP
29910 5f 52 6f 77 44 61 74 61 20 6f 70 63 6f 64 65 73  _RowData opcodes
29920 20 61 6c 77 61 79 73 20 66 6f 6c 6c 6f 77 20 4f   always follow O
29930 50 5f 4e 6f 74 45 78 69 73 74 73 20 6f 72 0a 20  P_NotExists or. 
29940 20 2a 2a 20 4f 50 5f 53 65 65 6b 52 6f 77 69 64   ** OP_SeekRowid
29950 20 6f 72 20 4f 50 5f 52 65 77 69 6e 64 2f 4f 70   or OP_Rewind/Op
29960 5f 4e 65 78 74 20 77 69 74 68 20 6e 6f 20 69 6e  _Next with no in
29970 74 65 72 76 65 6e 69 6e 67 20 69 6e 73 74 72 75  tervening instru
29980 63 74 69 6f 6e 73 0a 20 20 2a 2a 20 74 68 61 74  ctions.  ** that
29990 20 6d 69 67 68 74 20 69 6e 76 61 6c 69 64 61 74   might invalidat
299a0 65 20 74 68 65 20 63 75 72 73 6f 72 2e 0a 20 20  e the cursor..  
299b0 2a 2a 20 49 66 20 74 68 69 73 20 77 68 65 72 65  ** If this where
299c0 20 6e 6f 74 20 74 68 65 20 63 61 73 65 2c 20 6f   not the case, o
299d0 6e 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69  n of the followi
299e0 6e 67 20 61 73 73 65 72 74 28 29 73 0a 20 20 2a  ng assert()s.  *
299f0 2a 20 77 6f 75 6c 64 20 66 61 69 6c 2e 20 20 53  * would fail.  S
29a00 68 6f 75 6c 64 20 74 68 69 73 20 65 76 65 72 20  hould this ever 
29a10 63 68 61 6e 67 65 20 28 62 65 63 61 75 73 65 20  change (because 
29a20 6f 66 20 63 68 61 6e 67 65 73 20 69 6e 20 74 68  of changes in th
29a30 65 20 63 6f 64 65 0a 20 20 2a 2a 20 67 65 6e 65  e code.  ** gene
29a40 72 61 74 6f 72 29 20 74 68 65 6e 20 74 68 65 20  rator) then the 
29a50 66 69 78 20 77 6f 75 6c 64 20 62 65 20 74 6f 20  fix would be to 
29a60 69 6e 73 65 72 74 20 61 20 63 61 6c 6c 20 74 6f  insert a call to
29a70 0a 20 20 2a 2a 20 73 71 6c 69 74 65 33 56 64 62  .  ** sqlite3Vdb
29a80 65 43 75 72 73 6f 72 4d 6f 76 65 74 6f 28 29 2e  eCursorMoveto().
29a90 0a 20 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20  .  */.  assert( 
29aa0 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65  pC->deferredMove
29ab0 74 6f 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  to==0 );.  asser
29ac0 74 28 20 73 71 6c 69 74 65 33 42 74 72 65 65 43  t( sqlite3BtreeC
29ad0 75 72 73 6f 72 49 73 56 61 6c 69 64 28 70 43 72  ursorIsValid(pCr
29ae0 73 72 29 20 29 3b 0a 23 69 66 20 30 20 20 2f 2a  sr) );.#if 0  /*
29af0 20 4e 6f 74 20 72 65 71 75 69 72 65 64 20 64 75   Not required du
29b00 65 20 74 6f 20 74 68 65 20 70 72 65 76 69 6f 75  e to the previou
29b10 73 20 74 6f 20 61 73 73 65 72 74 28 29 20 73 74  s to assert() st
29b20 61 74 65 6d 65 6e 74 73 20 2a 2f 0a 20 20 72 63  atements */.  rc
29b30 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 43 75   = sqlite3VdbeCu
29b40 72 73 6f 72 4d 6f 76 65 74 6f 28 70 43 29 3b 0a  rsorMoveto(pC);.
29b50 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45    if( rc!=SQLITE
29b60 5f 4f 4b 20 29 20 67 6f 74 6f 20 61 62 6f 72 74  _OK ) goto abort
29b70 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 23  _due_to_error;.#
29b80 65 6e 64 69 66 0a 0a 20 20 6e 20 3d 20 73 71 6c  endif..  n = sql
29b90 69 74 65 33 42 74 72 65 65 50 61 79 6c 6f 61 64  ite3BtreePayload
29ba0 53 69 7a 65 28 70 43 72 73 72 29 3b 0a 20 20 69  Size(pCrsr);.  i
29bb0 66 28 20 6e 3e 28 75 33 32 29 64 62 2d 3e 61 4c  f( n>(u32)db->aL
29bc0 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4c 49 4d 49  imit[SQLITE_LIMI
29bd0 54 5f 4c 45 4e 47 54 48 5d 20 29 7b 0a 20 20 20  T_LENGTH] ){.   
29be0 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20   goto too_big;. 
29bf0 20 7d 0a 20 20 74 65 73 74 63 61 73 65 28 20 6e   }.  testcase( n
29c00 3d 3d 30 20 29 3b 0a 20 20 72 63 20 3d 20 73 71  ==0 );.  rc = sq
29c10 6c 69 74 65 33 56 64 62 65 4d 65 6d 46 72 6f 6d  lite3VdbeMemFrom
29c20 42 74 72 65 65 28 70 43 72 73 72 2c 20 30 2c 20  Btree(pCrsr, 0, 
29c30 6e 2c 20 70 4f 75 74 29 3b 0a 20 20 69 66 28 20  n, pOut);.  if( 
29c40 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f  rc ) goto abort_
29c50 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
29c60 69 66 28 20 21 70 4f 70 2d 3e 70 33 20 29 20 44  if( !pOp->p3 ) D
29c70 65 65 70 68 65 6d 65 72 61 6c 69 7a 65 28 70 4f  eephemeralize(pO
29c80 75 74 29 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41  ut);.  UPDATE_MA
29c90 58 5f 42 4c 4f 42 53 49 5a 45 28 70 4f 75 74 29  X_BLOBSIZE(pOut)
29ca0 3b 0a 20 20 52 45 47 49 53 54 45 52 5f 54 52 41  ;.  REGISTER_TRA
29cb0 43 45 28 70 4f 70 2d 3e 70 32 2c 20 70 4f 75 74  CE(pOp->p2, pOut
29cc0 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  );.  break;.}../
29cd0 2a 20 4f 70 63 6f 64 65 3a 20 52 6f 77 69 64 20  * Opcode: Rowid 
29ce0 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53  P1 P2 * * *.** S
29cf0 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 72  ynopsis: r[P2]=r
29d00 6f 77 69 64 0a 2a 2a 0a 2a 2a 20 53 74 6f 72 65  owid.**.** Store
29d10 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 20   in register P2 
29d20 61 6e 20 69 6e 74 65 67 65 72 20 77 68 69 63 68  an integer which
29d30 20 69 73 20 74 68 65 20 6b 65 79 20 6f 66 20 74   is the key of t
29d40 68 65 20 74 61 62 6c 65 20 65 6e 74 72 79 20 74  he table entry t
29d50 68 61 74 0a 2a 2a 20 50 31 20 69 73 20 63 75 72  hat.** P1 is cur
29d60 72 65 6e 74 6c 79 20 70 6f 69 6e 74 20 74 6f 2e  rently point to.
29d70 0a 2a 2a 0a 2a 2a 20 50 31 20 63 61 6e 20 62 65  .**.** P1 can be
29d80 20 65 69 74 68 65 72 20 61 6e 20 6f 72 64 69 6e   either an ordin
29d90 61 72 79 20 74 61 62 6c 65 20 6f 72 20 61 20 76  ary table or a v
29da0 69 72 74 75 61 6c 20 74 61 62 6c 65 2e 20 20 54  irtual table.  T
29db0 68 65 72 65 20 75 73 65 64 20 74 6f 0a 2a 2a 20  here used to.** 
29dc0 62 65 20 61 20 73 65 70 61 72 61 74 65 20 4f 50  be a separate OP
29dd0 5f 56 52 6f 77 69 64 20 6f 70 63 6f 64 65 20 66  _VRowid opcode f
29de0 6f 72 20 75 73 65 20 77 69 74 68 20 76 69 72 74  or use with virt
29df0 75 61 6c 20 74 61 62 6c 65 73 2c 20 62 75 74 20  ual tables, but 
29e00 74 68 69 73 0a 2a 2a 20 6f 6e 65 20 6f 70 63 6f  this.** one opco
29e10 64 65 20 6e 6f 77 20 77 6f 72 6b 73 20 66 6f 72  de now works for
29e20 20 62 6f 74 68 20 74 61 62 6c 65 20 74 79 70 65   both table type
29e30 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 6f  s..*/.case OP_Ro
29e40 77 69 64 3a 20 7b 20 20 20 20 20 20 20 20 20 20  wid: {          
29e50 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a         /* out2 *
29e60 2f 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a  /.  VdbeCursor *
29e70 70 43 3b 0a 20 20 69 36 34 20 76 3b 0a 20 20 73  pC;.  i64 v;.  s
29e80 71 6c 69 74 65 33 5f 76 74 61 62 20 2a 70 56 74  qlite3_vtab *pVt
29e90 61 62 3b 0a 20 20 63 6f 6e 73 74 20 73 71 6c 69  ab;.  const sqli
29ea0 74 65 33 5f 6d 6f 64 75 6c 65 20 2a 70 4d 6f 64  te3_module *pMod
29eb0 75 6c 65 3b 0a 0a 20 20 70 4f 75 74 20 3d 20 6f  ule;..  pOut = o
29ec0 75 74 32 50 72 65 72 65 6c 65 61 73 65 28 70 2c  ut2Prerelease(p,
29ed0 20 70 4f 70 29 3b 0a 20 20 61 73 73 65 72 74 28   pOp);.  assert(
29ee0 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70   pOp->p1>=0 && p
29ef0 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f  Op->p1<p->nCurso
29f00 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61  r );.  pC = p->a
29f10 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  pCsr[pOp->p1];. 
29f20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29   assert( pC!=0 )
29f30 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  ;.  assert( pC->
29f40 65 43 75 72 54 79 70 65 21 3d 43 55 52 54 59 50  eCurType!=CURTYP
29f50 45 5f 50 53 45 55 44 4f 20 7c 7c 20 70 43 2d 3e  E_PSEUDO || pC->
29f60 6e 75 6c 6c 52 6f 77 20 29 3b 0a 20 20 69 66 28  nullRow );.  if(
29f70 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 29 7b 0a   pC->nullRow ){.
29f80 20 20 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20      pOut->flags 
29f90 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20 20 20 20  = MEM_Null;.    
29fa0 62 72 65 61 6b 3b 0a 20 20 7d 65 6c 73 65 20 69  break;.  }else i
29fb0 66 28 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d  f( pC->deferredM
29fc0 6f 76 65 74 6f 20 29 7b 0a 20 20 20 20 76 20 3d  oveto ){.    v =
29fd0 20 70 43 2d 3e 6d 6f 76 65 74 6f 54 61 72 67 65   pC->movetoTarge
29fe0 74 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  t;.#ifndef SQLIT
29ff0 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41  E_OMIT_VIRTUALTA
2a000 42 4c 45 0a 20 20 7d 65 6c 73 65 20 69 66 28 20  BLE.  }else if( 
2a010 70 43 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43 55  pC->eCurType==CU
2a020 52 54 59 50 45 5f 56 54 41 42 20 29 7b 0a 20 20  RTYPE_VTAB ){.  
2a030 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 75 63    assert( pC->uc
2a040 2e 70 56 43 75 72 21 3d 30 20 29 3b 0a 20 20 20  .pVCur!=0 );.   
2a050 20 70 56 74 61 62 20 3d 20 70 43 2d 3e 75 63 2e   pVtab = pC->uc.
2a060 70 56 43 75 72 2d 3e 70 56 74 61 62 3b 0a 20 20  pVCur->pVtab;.  
2a070 20 20 70 4d 6f 64 75 6c 65 20 3d 20 70 56 74 61    pModule = pVta
2a080 62 2d 3e 70 4d 6f 64 75 6c 65 3b 0a 20 20 20 20  b->pModule;.    
2a090 61 73 73 65 72 74 28 20 70 4d 6f 64 75 6c 65 2d  assert( pModule-
2a0a0 3e 78 52 6f 77 69 64 20 29 3b 0a 20 20 20 20 72  >xRowid );.    r
2a0b0 63 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78 52 6f  c = pModule->xRo
2a0c0 77 69 64 28 70 43 2d 3e 75 63 2e 70 56 43 75 72  wid(pC->uc.pVCur
2a0d0 2c 20 26 76 29 3b 0a 20 20 20 20 73 71 6c 69 74  , &v);.    sqlit
2a0e0 65 33 56 74 61 62 49 6d 70 6f 72 74 45 72 72 6d  e3VtabImportErrm
2a0f0 73 67 28 70 2c 20 70 56 74 61 62 29 3b 0a 20 20  sg(p, pVtab);.  
2a100 20 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20    if( rc ) goto 
2a110 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
2a120 6f 72 3b 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51  or;.#endif /* SQ
2a130 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41  LITE_OMIT_VIRTUA
2a140 4c 54 41 42 4c 45 20 2a 2f 0a 20 20 7d 65 6c 73  LTABLE */.  }els
2a150 65 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  e{.    assert( p
2a160 43 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43 55 52  C->eCurType==CUR
2a170 54 59 50 45 5f 42 54 52 45 45 20 29 3b 0a 20 20  TYPE_BTREE );.  
2a180 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 75 63    assert( pC->uc
2a190 2e 70 43 75 72 73 6f 72 21 3d 30 20 29 3b 0a 20  .pCursor!=0 );. 
2a1a0 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56     rc = sqlite3V
2a1b0 64 62 65 43 75 72 73 6f 72 52 65 73 74 6f 72 65  dbeCursorRestore
2a1c0 28 70 43 29 3b 0a 20 20 20 20 69 66 28 20 72 63  (pC);.    if( rc
2a1d0 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75   ) goto abort_du
2a1e0 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20  e_to_error;.    
2a1f0 69 66 28 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20  if( pC->nullRow 
2a200 29 7b 0a 20 20 20 20 20 20 70 4f 75 74 2d 3e 66  ){.      pOut->f
2a210 6c 61 67 73 20 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b  lags = MEM_Null;
2a220 0a 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20  .      break;.  
2a230 20 20 7d 0a 20 20 20 20 76 20 3d 20 73 71 6c 69    }.    v = sqli
2a240 74 65 33 42 74 72 65 65 49 6e 74 65 67 65 72 4b  te3BtreeIntegerK
2a250 65 79 28 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f  ey(pC->uc.pCurso
2a260 72 29 3b 0a 20 20 7d 0a 20 20 70 4f 75 74 2d 3e  r);.  }.  pOut->
2a270 75 2e 69 20 3d 20 76 3b 0a 20 20 62 72 65 61 6b  u.i = v;.  break
2a280 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
2a290 4e 75 6c 6c 52 6f 77 20 50 31 20 2a 20 2a 20 2a  NullRow P1 * * *
2a2a0 20 2a 0a 2a 2a 0a 2a 2a 20 4d 6f 76 65 20 74 68   *.**.** Move th
2a2b0 65 20 63 75 72 73 6f 72 20 50 31 20 74 6f 20 61  e cursor P1 to a
2a2c0 20 6e 75 6c 6c 20 72 6f 77 2e 20 20 41 6e 79 20   null row.  Any 
2a2d0 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 70 65 72 61 74  OP_Column operat
2a2e0 69 6f 6e 73 0a 2a 2a 20 74 68 61 74 20 6f 63 63  ions.** that occ
2a2f0 75 72 20 77 68 69 6c 65 20 74 68 65 20 63 75 72  ur while the cur
2a300 73 6f 72 20 69 73 20 6f 6e 20 74 68 65 20 6e 75  sor is on the nu
2a310 6c 6c 20 72 6f 77 20 77 69 6c 6c 20 61 6c 77 61  ll row will alwa
2a320 79 73 0a 2a 2a 20 77 72 69 74 65 20 61 20 4e 55  ys.** write a NU
2a330 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e  LL..*/.case OP_N
2a340 75 6c 6c 52 6f 77 3a 20 7b 0a 20 20 56 64 62 65  ullRow: {.  Vdbe
2a350 43 75 72 73 6f 72 20 2a 70 43 3b 0a 0a 20 20 61  Cursor *pC;..  a
2a360 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d  ssert( pOp->p1>=
2a370 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e  0 && pOp->p1<p->
2a380 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20  nCursor );.  pC 
2a390 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e  = p->apCsr[pOp->
2a3a0 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p1];.  assert( p
2a3b0 43 21 3d 30 20 29 3b 0a 20 20 70 43 2d 3e 6e 75  C!=0 );.  pC->nu
2a3c0 6c 6c 52 6f 77 20 3d 20 31 3b 0a 20 20 70 43 2d  llRow = 1;.  pC-
2a3d0 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d 20 43  >cacheStatus = C
2a3e0 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20 69 66  ACHE_STALE;.  if
2a3f0 28 20 70 43 2d 3e 65 43 75 72 54 79 70 65 3d 3d  ( pC->eCurType==
2a400 43 55 52 54 59 50 45 5f 42 54 52 45 45 20 29 7b  CURTYPE_BTREE ){
2a410 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 43 2d  .    assert( pC-
2a420 3e 75 63 2e 70 43 75 72 73 6f 72 21 3d 30 20 29  >uc.pCursor!=0 )
2a430 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 42 74 72  ;.    sqlite3Btr
2a440 65 65 43 6c 65 61 72 43 75 72 73 6f 72 28 70 43  eeClearCursor(pC
2a450 2d 3e 75 63 2e 70 43 75 72 73 6f 72 29 3b 0a 20  ->uc.pCursor);. 
2a460 20 7d 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45   }.#ifdef SQLITE
2a470 5f 44 45 42 55 47 0a 20 20 69 66 28 20 70 43 2d  _DEBUG.  if( pC-
2a480 3e 73 65 65 6b 4f 70 3d 3d 30 20 29 20 70 43 2d  >seekOp==0 ) pC-
2a490 3e 73 65 65 6b 4f 70 20 3d 20 4f 50 5f 4e 75 6c  >seekOp = OP_Nul
2a4a0 6c 52 6f 77 3b 0a 23 65 6e 64 69 66 0a 20 20 62  lRow;.#endif.  b
2a4b0 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
2a4c0 64 65 3a 20 53 65 65 6b 45 6e 64 20 50 31 20 2a  de: SeekEnd P1 *
2a4d0 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 50 6f 73   * * *.**.** Pos
2a4e0 69 74 69 6f 6e 20 63 75 72 73 6f 72 20 50 31 20  ition cursor P1 
2a4f0 61 74 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68  at the end of th
2a500 65 20 62 74 72 65 65 20 66 6f 72 20 74 68 65 20  e btree for the 
2a510 70 75 72 70 6f 73 65 20 6f 66 0a 2a 2a 20 61 70  purpose of.** ap
2a520 70 65 6e 64 69 6e 67 20 61 20 6e 65 77 20 65 6e  pending a new en
2a530 74 72 79 20 6f 6e 74 6f 20 74 68 65 20 62 74 72  try onto the btr
2a540 65 65 2e 0a 2a 2a 0a 2a 2a 20 49 74 20 69 73 20  ee..**.** It is 
2a550 61 73 73 75 6d 65 64 20 74 68 61 74 20 74 68 65  assumed that the
2a560 20 63 75 72 73 6f 72 20 69 73 20 75 73 65 64 20   cursor is used 
2a570 6f 6e 6c 79 20 66 6f 72 20 61 70 70 65 6e 64 69  only for appendi
2a580 6e 67 20 61 6e 64 20 73 6f 0a 2a 2a 20 69 66 20  ng and so.** if 
2a590 74 68 65 20 63 75 72 73 6f 72 20 69 73 20 76 61  the cursor is va
2a5a0 6c 69 64 2c 20 74 68 65 6e 20 74 68 65 20 63 75  lid, then the cu
2a5b0 72 73 6f 72 20 6d 75 73 74 20 61 6c 72 65 61 64  rsor must alread
2a5c0 79 20 62 65 20 70 6f 69 6e 74 69 6e 67 0a 2a 2a  y be pointing.**
2a5d0 20 61 74 20 74 68 65 20 65 6e 64 20 6f 66 20 74   at the end of t
2a5e0 68 65 20 62 74 72 65 65 20 61 6e 64 20 73 6f 20  he btree and so 
2a5f0 6e 6f 20 63 68 61 6e 67 65 73 20 61 72 65 20 6d  no changes are m
2a600 61 64 65 20 74 6f 0a 2a 2a 20 74 68 65 20 63 75  ade to.** the cu
2a610 72 73 6f 72 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f  rsor..*/./* Opco
2a620 64 65 3a 20 4c 61 73 74 20 50 31 20 50 32 20 2a  de: Last P1 P2 *
2a630 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6e   * *.**.** The n
2a640 65 78 74 20 75 73 65 20 6f 66 20 74 68 65 20 52  ext use of the R
2a650 6f 77 69 64 20 6f 72 20 43 6f 6c 75 6d 6e 20 6f  owid or Column o
2a660 72 20 50 72 65 76 20 69 6e 73 74 72 75 63 74 69  r Prev instructi
2a670 6f 6e 20 66 6f 72 20 50 31 20 0a 2a 2a 20 77 69  on for P1 .** wi
2a680 6c 6c 20 72 65 66 65 72 20 74 6f 20 74 68 65 20  ll refer to the 
2a690 6c 61 73 74 20 65 6e 74 72 79 20 69 6e 20 74 68  last entry in th
2a6a0 65 20 64 61 74 61 62 61 73 65 20 74 61 62 6c 65  e database table
2a6b0 20 6f 72 20 69 6e 64 65 78 2e 0a 2a 2a 20 49 66   or index..** If
2a6c0 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20 69 6e   the table or in
2a6d0 64 65 78 20 69 73 20 65 6d 70 74 79 20 61 6e 64  dex is empty and
2a6e0 20 50 32 3e 30 2c 20 74 68 65 6e 20 6a 75 6d 70   P2>0, then jump
2a6f0 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f 20   immediately to 
2a700 50 32 2e 0a 2a 2a 20 49 66 20 50 32 20 69 73 20  P2..** If P2 is 
2a710 30 20 6f 72 20 69 66 20 74 68 65 20 74 61 62 6c  0 or if the tabl
2a720 65 20 6f 72 20 69 6e 64 65 78 20 69 73 20 6e 6f  e or index is no
2a730 74 20 65 6d 70 74 79 2c 20 66 61 6c 6c 20 74 68  t empty, fall th
2a740 72 6f 75 67 68 0a 2a 2a 20 74 6f 20 74 68 65 20  rough.** to the 
2a750 66 6f 6c 6c 6f 77 69 6e 67 20 69 6e 73 74 72 75  following instru
2a760 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68 69  ction..**.** Thi
2a770 73 20 6f 70 63 6f 64 65 20 6c 65 61 76 65 73 20  s opcode leaves 
2a780 74 68 65 20 63 75 72 73 6f 72 20 63 6f 6e 66 69  the cursor confi
2a790 67 75 72 65 64 20 74 6f 20 6d 6f 76 65 20 69 6e  gured to move in
2a7a0 20 72 65 76 65 72 73 65 20 6f 72 64 65 72 2c 0a   reverse order,.
2a7b0 2a 2a 20 66 72 6f 6d 20 74 68 65 20 65 6e 64 20  ** from the end 
2a7c0 74 6f 77 61 72 64 20 74 68 65 20 62 65 67 69 6e  toward the begin
2a7d0 6e 69 6e 67 2e 20 20 49 6e 20 6f 74 68 65 72 20  ning.  In other 
2a7e0 77 6f 72 64 73 2c 20 74 68 65 20 63 75 72 73 6f  words, the curso
2a7f0 72 20 69 73 0a 2a 2a 20 63 6f 6e 66 69 67 75 72  r is.** configur
2a800 65 64 20 74 6f 20 75 73 65 20 50 72 65 76 2c 20  ed to use Prev, 
2a810 6e 6f 74 20 4e 65 78 74 2e 0a 2a 2f 0a 63 61 73  not Next..*/.cas
2a820 65 20 4f 50 5f 53 65 65 6b 45 6e 64 3a 0a 63 61  e OP_SeekEnd:.ca
2a830 73 65 20 4f 50 5f 4c 61 73 74 3a 20 7b 20 20 20  se OP_Last: {   
2a840 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a       /* jump */.
2a850 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43    VdbeCursor *pC
2a860 3b 0a 20 20 42 74 43 75 72 73 6f 72 20 2a 70 43  ;.  BtCursor *pC
2a870 72 73 72 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a  rsr;.  int res;.
2a880 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
2a890 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31  p1>=0 && pOp->p1
2a8a0 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20  <p->nCursor );. 
2a8b0 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70   pC = p->apCsr[p
2a8c0 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72  Op->p1];.  asser
2a8d0 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 61 73  t( pC!=0 );.  as
2a8e0 73 65 72 74 28 20 70 43 2d 3e 65 43 75 72 54 79  sert( pC->eCurTy
2a8f0 70 65 3d 3d 43 55 52 54 59 50 45 5f 42 54 52 45  pe==CURTYPE_BTRE
2a900 45 20 29 3b 0a 20 20 70 43 72 73 72 20 3d 20 70  E );.  pCrsr = p
2a910 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 3b 0a 20  C->uc.pCursor;. 
2a920 20 72 65 73 20 3d 20 30 3b 0a 20 20 61 73 73 65   res = 0;.  asse
2a930 72 74 28 20 70 43 72 73 72 21 3d 30 20 29 3b 0a  rt( pCrsr!=0 );.
2a940 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45  #ifdef SQLITE_DE
2a950 42 55 47 0a 20 20 70 43 2d 3e 73 65 65 6b 4f 70  BUG.  pC->seekOp
2a960 20 3d 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3b 0a   = pOp->opcode;.
2a970 23 65 6e 64 69 66 0a 20 20 69 66 28 20 70 4f 70  #endif.  if( pOp
2a980 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 53 65 65  ->opcode==OP_See
2a990 6b 45 6e 64 20 29 7b 0a 20 20 20 20 61 73 73 65  kEnd ){.    asse
2a9a0 72 74 28 20 70 4f 70 2d 3e 70 32 3d 3d 30 20 29  rt( pOp->p2==0 )
2a9b0 3b 0a 20 20 20 20 70 43 2d 3e 73 65 65 6b 52 65  ;.    pC->seekRe
2a9c0 73 75 6c 74 20 3d 20 2d 31 3b 0a 20 20 20 20 69  sult = -1;.    i
2a9d0 66 28 20 73 71 6c 69 74 65 33 42 74 72 65 65 43  f( sqlite3BtreeC
2a9e0 75 72 73 6f 72 49 73 56 61 6c 69 64 4e 4e 28 70  ursorIsValidNN(p
2a9f0 43 72 73 72 29 20 29 7b 0a 20 20 20 20 20 20 62  Crsr) ){.      b
2aa00 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a  reak;.    }.  }.
2aa10 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
2aa20 72 65 65 4c 61 73 74 28 70 43 72 73 72 2c 20 26  reeLast(pCrsr, &
2aa30 72 65 73 29 3b 0a 20 20 70 43 2d 3e 6e 75 6c 6c  res);.  pC->null
2aa40 52 6f 77 20 3d 20 28 75 38 29 72 65 73 3b 0a 20  Row = (u8)res;. 
2aa50 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76   pC->deferredMov
2aa60 65 74 6f 20 3d 20 30 3b 0a 20 20 70 43 2d 3e 63  eto = 0;.  pC->c
2aa70 61 63 68 65 53 74 61 74 75 73 20 3d 20 43 41 43  acheStatus = CAC
2aa80 48 45 5f 53 54 41 4c 45 3b 0a 20 20 69 66 28 20  HE_STALE;.  if( 
2aa90 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f  rc ) goto abort_
2aaa0 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
2aab0 69 66 28 20 70 4f 70 2d 3e 70 32 3e 30 20 29 7b  if( pOp->p2>0 ){
2aac0 0a 20 20 20 20 56 64 62 65 42 72 61 6e 63 68 54  .    VdbeBranchT
2aad0 61 6b 65 6e 28 72 65 73 21 3d 30 2c 32 29 3b 0a  aken(res!=0,2);.
2aae0 20 20 20 20 69 66 28 20 72 65 73 20 29 20 67 6f      if( res ) go
2aaf0 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20  to jump_to_p2;. 
2ab00 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f   }.  break;.}../
2ab10 2a 20 4f 70 63 6f 64 65 3a 20 49 66 53 6d 61 6c  * Opcode: IfSmal
2ab20 6c 65 72 20 50 31 20 50 32 20 50 33 20 2a 20 2a  ler P1 P2 P3 * *
2ab30 0a 2a 2a 0a 2a 2a 20 45 73 74 69 6d 61 74 65 20  .**.** Estimate 
2ab40 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f  the number of ro
2ab50 77 73 20 69 6e 20 74 68 65 20 74 61 62 6c 65 20  ws in the table 
2ab60 50 31 2e 20 20 4a 75 6d 70 20 74 6f 20 50 32 20  P1.  Jump to P2 
2ab70 69 66 20 74 68 61 74 0a 2a 2a 20 65 73 74 69 6d  if that.** estim
2ab80 61 74 65 20 69 73 20 6c 65 73 73 20 74 68 61 6e  ate is less than
2ab90 20 61 70 70 72 6f 78 69 6d 61 74 65 6c 79 20 32   approximately 2
2aba0 2a 2a 28 30 2e 31 2a 50 33 29 2e 0a 2a 2f 0a 63  **(0.1*P3)..*/.c
2abb0 61 73 65 20 4f 50 5f 49 66 53 6d 61 6c 6c 65 72  ase OP_IfSmaller
2abc0 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a 75  : {        /* ju
2abd0 6d 70 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73  mp */.  VdbeCurs
2abe0 6f 72 20 2a 70 43 3b 0a 20 20 42 74 43 75 72 73  or *pC;.  BtCurs
2abf0 6f 72 20 2a 70 43 72 73 72 3b 0a 20 20 69 6e 74  or *pCrsr;.  int
2ac00 20 72 65 73 3b 0a 20 20 69 36 34 20 73 7a 3b 0a   res;.  i64 sz;.
2ac10 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
2ac20 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31  p1>=0 && pOp->p1
2ac30 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20  <p->nCursor );. 
2ac40 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70   pC = p->apCsr[p
2ac50 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72  Op->p1];.  asser
2ac60 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 70 43  t( pC!=0 );.  pC
2ac70 72 73 72 20 3d 20 70 43 2d 3e 75 63 2e 70 43 75  rsr = pC->uc.pCu
2ac80 72 73 6f 72 3b 0a 20 20 61 73 73 65 72 74 28 20  rsor;.  assert( 
2ac90 70 43 72 73 72 20 29 3b 0a 20 20 72 63 20 3d 20  pCrsr );.  rc = 
2aca0 73 71 6c 69 74 65 33 42 74 72 65 65 46 69 72 73  sqlite3BtreeFirs
2acb0 74 28 70 43 72 73 72 2c 20 26 72 65 73 29 3b 0a  t(pCrsr, &res);.
2acc0 20 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20    if( rc ) goto 
2acd0 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
2ace0 6f 72 3b 0a 20 20 69 66 28 20 72 65 73 3d 3d 30  or;.  if( res==0
2acf0 20 29 7b 0a 20 20 20 20 73 7a 20 3d 20 73 71 6c   ){.    sz = sql
2ad00 69 74 65 33 42 74 72 65 65 52 6f 77 43 6f 75 6e  ite3BtreeRowCoun
2ad10 74 45 73 74 28 70 43 72 73 72 29 3b 0a 20 20 20  tEst(pCrsr);.   
2ad20 20 69 66 28 20 41 4c 57 41 59 53 28 73 7a 3e 3d   if( ALWAYS(sz>=
2ad30 30 29 20 26 26 20 73 71 6c 69 74 65 33 4c 6f 67  0) && sqlite3Log
2ad40 45 73 74 28 28 75 36 34 29 73 7a 29 3c 70 4f 70  Est((u64)sz)<pOp
2ad50 2d 3e 70 33 20 29 20 72 65 73 20 3d 20 31 3b 0a  ->p3 ) res = 1;.
2ad60 20 20 7d 0a 20 20 56 64 62 65 42 72 61 6e 63 68    }.  VdbeBranch
2ad70 54 61 6b 65 6e 28 72 65 73 21 3d 30 2c 32 29 3b  Taken(res!=0,2);
2ad80 0a 20 20 69 66 28 20 72 65 73 20 29 20 67 6f 74  .  if( res ) got
2ad90 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20  o jump_to_p2;.  
2ada0 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 2f 2a 20 4f 70  break;.}.../* Op
2adb0 63 6f 64 65 3a 20 53 6f 72 74 65 72 53 6f 72 74  code: SorterSort
2adc0 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a   P1 P2 * * *.**.
2add0 2a 2a 20 41 66 74 65 72 20 61 6c 6c 20 72 65 63  ** After all rec
2ade0 6f 72 64 73 20 68 61 76 65 20 62 65 65 6e 20 69  ords have been i
2adf0 6e 73 65 72 74 65 64 20 69 6e 74 6f 20 74 68 65  nserted into the
2ae00 20 53 6f 72 74 65 72 20 6f 62 6a 65 63 74 0a 2a   Sorter object.*
2ae10 2a 20 69 64 65 6e 74 69 66 69 65 64 20 62 79 20  * identified by 
2ae20 50 31 2c 20 69 6e 76 6f 6b 65 20 74 68 69 73 20  P1, invoke this 
2ae30 6f 70 63 6f 64 65 20 74 6f 20 61 63 74 75 61 6c  opcode to actual
2ae40 6c 79 20 64 6f 20 74 68 65 20 73 6f 72 74 69 6e  ly do the sortin
2ae50 67 2e 0a 2a 2a 20 4a 75 6d 70 20 74 6f 20 50 32  g..** Jump to P2
2ae60 20 69 66 20 74 68 65 72 65 20 61 72 65 20 6e 6f   if there are no
2ae70 20 72 65 63 6f 72 64 73 20 74 6f 20 62 65 20 73   records to be s
2ae80 6f 72 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 69  orted..**.** Thi
2ae90 73 20 6f 70 63 6f 64 65 20 69 73 20 61 6e 20 61  s opcode is an a
2aea0 6c 69 61 73 20 66 6f 72 20 4f 50 5f 53 6f 72 74  lias for OP_Sort
2aeb0 20 61 6e 64 20 4f 50 5f 52 65 77 69 6e 64 20 74   and OP_Rewind t
2aec0 68 61 74 20 69 73 20 75 73 65 64 0a 2a 2a 20 66  hat is used.** f
2aed0 6f 72 20 53 6f 72 74 65 72 20 6f 62 6a 65 63 74  or Sorter object
2aee0 73 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a  s..*/./* Opcode:
2aef0 20 53 6f 72 74 20 50 31 20 50 32 20 2a 20 2a 20   Sort P1 P2 * * 
2af00 2a 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63  *.**.** This opc
2af10 6f 64 65 20 64 6f 65 73 20 65 78 61 63 74 6c 79  ode does exactly
2af20 20 74 68 65 20 73 61 6d 65 20 74 68 69 6e 67 20   the same thing 
2af30 61 73 20 4f 50 5f 52 65 77 69 6e 64 20 65 78 63  as OP_Rewind exc
2af40 65 70 74 20 74 68 61 74 0a 2a 2a 20 69 74 20 69  ept that.** it i
2af50 6e 63 72 65 6d 65 6e 74 73 20 61 6e 20 75 6e 64  ncrements an und
2af60 6f 63 75 6d 65 6e 74 65 64 20 67 6c 6f 62 61 6c  ocumented global
2af70 20 76 61 72 69 61 62 6c 65 20 75 73 65 64 20 66   variable used f
2af80 6f 72 20 74 65 73 74 69 6e 67 2e 0a 2a 2a 0a 2a  or testing..**.*
2af90 2a 20 53 6f 72 74 69 6e 67 20 69 73 20 61 63 63  * Sorting is acc
2afa0 6f 6d 70 6c 69 73 68 65 64 20 62 79 20 77 72 69  omplished by wri
2afb0 74 69 6e 67 20 72 65 63 6f 72 64 73 20 69 6e 74  ting records int
2afc0 6f 20 61 20 73 6f 72 74 69 6e 67 20 69 6e 64 65  o a sorting inde
2afd0 78 2c 0a 2a 2a 20 74 68 65 6e 20 72 65 77 69 6e  x,.** then rewin
2afe0 64 69 6e 67 20 74 68 61 74 20 69 6e 64 65 78 20  ding that index 
2aff0 61 6e 64 20 70 6c 61 79 69 6e 67 20 69 74 20 62  and playing it b
2b000 61 63 6b 20 66 72 6f 6d 20 62 65 67 69 6e 6e 69  ack from beginni
2b010 6e 67 20 74 6f 0a 2a 2a 20 65 6e 64 2e 20 20 57  ng to.** end.  W
2b020 65 20 75 73 65 20 74 68 65 20 4f 50 5f 53 6f 72  e use the OP_Sor
2b030 74 20 6f 70 63 6f 64 65 20 69 6e 73 74 65 61 64  t opcode instead
2b040 20 6f 66 20 4f 50 5f 52 65 77 69 6e 64 20 74 6f   of OP_Rewind to
2b050 20 64 6f 20 74 68 65 0a 2a 2a 20 72 65 77 69 6e   do the.** rewin
2b060 64 69 6e 67 20 73 6f 20 74 68 61 74 20 74 68 65  ding so that the
2b070 20 67 6c 6f 62 61 6c 20 76 61 72 69 61 62 6c 65   global variable
2b080 20 77 69 6c 6c 20 62 65 20 69 6e 63 72 65 6d 65   will be increme
2b090 6e 74 65 64 20 61 6e 64 0a 2a 2a 20 72 65 67 72  nted and.** regr
2b0a0 65 73 73 69 6f 6e 20 74 65 73 74 73 20 63 61 6e  ession tests can
2b0b0 20 64 65 74 65 72 6d 69 6e 65 20 77 68 65 74 68   determine wheth
2b0c0 65 72 20 6f 72 20 6e 6f 74 20 74 68 65 20 6f 70  er or not the op
2b0d0 74 69 6d 69 7a 65 72 20 69 73 0a 2a 2a 20 63 6f  timizer is.** co
2b0e0 72 72 65 63 74 6c 79 20 6f 70 74 69 6d 69 7a 69  rrectly optimizi
2b0f0 6e 67 20 6f 75 74 20 73 6f 72 74 73 2e 0a 2a 2f  ng out sorts..*/
2b100 0a 63 61 73 65 20 4f 50 5f 53 6f 72 74 65 72 53  .case OP_SorterS
2b110 6f 72 74 3a 20 20 20 20 2f 2a 20 6a 75 6d 70 20  ort:    /* jump 
2b120 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 6f 72 74 3a  */.case OP_Sort:
2b130 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d   {        /* jum
2b140 70 20 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49  p */.#ifdef SQLI
2b150 54 45 5f 54 45 53 54 0a 20 20 73 71 6c 69 74 65  TE_TEST.  sqlite
2b160 33 5f 73 6f 72 74 5f 63 6f 75 6e 74 2b 2b 3b 0a  3_sort_count++;.
2b170 20 20 73 71 6c 69 74 65 33 5f 73 65 61 72 63 68    sqlite3_search
2b180 5f 63 6f 75 6e 74 2d 2d 3b 0a 23 65 6e 64 69 66  _count--;.#endif
2b190 0a 20 20 70 2d 3e 61 43 6f 75 6e 74 65 72 5b 53  .  p->aCounter[S
2b1a0 51 4c 49 54 45 5f 53 54 4d 54 53 54 41 54 55 53  QLITE_STMTSTATUS
2b1b0 5f 53 4f 52 54 5d 2b 2b 3b 0a 20 20 2f 2a 20 46  _SORT]++;.  /* F
2b1c0 61 6c 6c 20 74 68 72 6f 75 67 68 20 69 6e 74 6f  all through into
2b1d0 20 4f 50 5f 52 65 77 69 6e 64 20 2a 2f 0a 7d 0a   OP_Rewind */.}.
2b1e0 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65 77 69 6e  /* Opcode: Rewin
2b1f0 64 20 50 31 20 50 32 20 2a 20 2a 20 50 35 0a 2a  d P1 P2 * * P5.*
2b200 2a 0a 2a 2a 20 54 68 65 20 6e 65 78 74 20 75 73  *.** The next us
2b210 65 20 6f 66 20 74 68 65 20 52 6f 77 69 64 20 6f  e of the Rowid o
2b220 72 20 43 6f 6c 75 6d 6e 20 6f 72 20 4e 65 78 74  r Column or Next
2b230 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 66 6f 72   instruction for
2b240 20 50 31 20 0a 2a 2a 20 77 69 6c 6c 20 72 65 66   P1 .** will ref
2b250 65 72 20 74 6f 20 74 68 65 20 66 69 72 73 74 20  er to the first 
2b260 65 6e 74 72 79 20 69 6e 20 74 68 65 20 64 61 74  entry in the dat
2b270 61 62 61 73 65 20 74 61 62 6c 65 20 6f 72 20 69  abase table or i
2b280 6e 64 65 78 2e 0a 2a 2a 20 49 66 20 74 68 65 20  ndex..** If the 
2b290 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 69  table or index i
2b2a0 73 20 65 6d 70 74 79 2c 20 6a 75 6d 70 20 69 6d  s empty, jump im
2b2b0 6d 65 64 69 61 74 65 6c 79 20 74 6f 20 50 32 2e  mediately to P2.
2b2c0 0a 2a 2a 20 49 66 20 74 68 65 20 74 61 62 6c 65  .** If the table
2b2d0 20 6f 72 20 69 6e 64 65 78 20 69 73 20 6e 6f 74   or index is not
2b2e0 20 65 6d 70 74 79 2c 20 66 61 6c 6c 20 74 68 72   empty, fall thr
2b2f0 6f 75 67 68 20 74 6f 20 74 68 65 20 66 6f 6c 6c  ough to the foll
2b300 6f 77 69 6e 67 20 0a 2a 2a 20 69 6e 73 74 72 75  owing .** instru
2b310 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  ction..**.** If 
2b320 50 35 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 20 61  P5 is non-zero a
2b330 6e 64 20 74 68 65 20 74 61 62 6c 65 20 69 73 20  nd the table is 
2b340 6e 6f 74 20 65 6d 70 74 79 2c 20 74 68 65 6e 20  not empty, then 
2b350 74 68 65 20 22 73 6b 69 70 2d 6e 65 78 74 22 0a  the "skip-next".
2b360 2a 2a 20 66 6c 61 67 20 69 73 20 73 65 74 20 6f  ** flag is set o
2b370 6e 20 74 68 65 20 63 75 72 73 6f 72 20 73 6f 20  n the cursor so 
2b380 74 68 61 74 20 74 68 65 20 6e 65 78 74 20 4f 50  that the next OP
2b390 5f 4e 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f  _Next instructio
2b3a0 6e 20 0a 2a 2a 20 65 78 65 63 75 74 65 64 20 6f  n .** executed o
2b3b0 6e 20 69 74 20 69 73 20 61 20 6e 6f 2d 6f 70 2e  n it is a no-op.
2b3c0 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f  .**.** This opco
2b3d0 64 65 20 6c 65 61 76 65 73 20 74 68 65 20 63 75  de leaves the cu
2b3e0 72 73 6f 72 20 63 6f 6e 66 69 67 75 72 65 64 20  rsor configured 
2b3f0 74 6f 20 6d 6f 76 65 20 69 6e 20 66 6f 72 77 61  to move in forwa
2b400 72 64 20 6f 72 64 65 72 2c 0a 2a 2a 20 66 72 6f  rd order,.** fro
2b410 6d 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 20  m the beginning 
2b420 74 6f 77 61 72 64 20 74 68 65 20 65 6e 64 2e 20  toward the end. 
2b430 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c   In other words,
2b440 20 74 68 65 20 63 75 72 73 6f 72 20 69 73 0a 2a   the cursor is.*
2b450 2a 20 63 6f 6e 66 69 67 75 72 65 64 20 74 6f 20  * configured to 
2b460 75 73 65 20 4e 65 78 74 2c 20 6e 6f 74 20 50 72  use Next, not Pr
2b470 65 76 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52  ev..*/.case OP_R
2b480 65 77 69 6e 64 3a 20 7b 20 20 20 20 20 20 20 20  ewind: {        
2b490 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 56 64 62  /* jump */.  Vdb
2b4a0 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 42  eCursor *pC;.  B
2b4b0 74 43 75 72 73 6f 72 20 2a 70 43 72 73 72 3b 0a  tCursor *pCrsr;.
2b4c0 20 20 69 6e 74 20 72 65 73 3b 0a 0a 20 20 61 73    int res;..  as
2b4d0 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30  sert( pOp->p1>=0
2b4e0 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e   && pOp->p1<p->n
2b4f0 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d  Cursor );.  pC =
2b500 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70   p->apCsr[pOp->p
2b510 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43  1];.  assert( pC
2b520 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  !=0 );.  assert(
2b530 20 69 73 53 6f 72 74 65 72 28 70 43 29 3d 3d 28   isSorter(pC)==(
2b540 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  pOp->opcode==OP_
2b550 53 6f 72 74 65 72 53 6f 72 74 29 20 29 3b 0a 20  SorterSort) );. 
2b560 20 72 65 73 20 3d 20 31 3b 0a 23 69 66 64 65 66   res = 1;.#ifdef
2b570 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20   SQLITE_DEBUG.  
2b580 70 43 2d 3e 73 65 65 6b 4f 70 20 3d 20 4f 50 5f  pC->seekOp = OP_
2b590 52 65 77 69 6e 64 3b 0a 23 65 6e 64 69 66 0a 20  Rewind;.#endif. 
2b5a0 20 69 66 28 20 69 73 53 6f 72 74 65 72 28 70 43   if( isSorter(pC
2b5b0 29 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 73 71  ) ){.    rc = sq
2b5c0 6c 69 74 65 33 56 64 62 65 53 6f 72 74 65 72 52  lite3VdbeSorterR
2b5d0 65 77 69 6e 64 28 70 43 2c 20 26 72 65 73 29 3b  ewind(pC, &res);
2b5e0 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73  .  }else{.    as
2b5f0 73 65 72 74 28 20 70 43 2d 3e 65 43 75 72 54 79  sert( pC->eCurTy
2b600 70 65 3d 3d 43 55 52 54 59 50 45 5f 42 54 52 45  pe==CURTYPE_BTRE
2b610 45 20 29 3b 0a 20 20 20 20 70 43 72 73 72 20 3d  E );.    pCrsr =
2b620 20 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 3b   pC->uc.pCursor;
2b630 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 43 72  .    assert( pCr
2b640 73 72 20 29 3b 0a 20 20 20 20 72 63 20 3d 20 73  sr );.    rc = s
2b650 71 6c 69 74 65 33 42 74 72 65 65 46 69 72 73 74  qlite3BtreeFirst
2b660 28 70 43 72 73 72 2c 20 26 72 65 73 29 3b 0a 23  (pCrsr, &res);.#
2b670 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
2b680 49 54 5f 57 49 4e 44 4f 57 46 55 4e 43 0a 20 20  IT_WINDOWFUNC.  
2b690 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 29 20    if( pOp->p5 ) 
2b6a0 73 71 6c 69 74 65 33 42 74 72 65 65 53 6b 69 70  sqlite3BtreeSkip
2b6b0 4e 65 78 74 28 70 43 72 73 72 29 3b 0a 23 65 6e  Next(pCrsr);.#en
2b6c0 64 69 66 0a 20 20 20 20 70 43 2d 3e 64 65 66 65  dif.    pC->defe
2b6d0 72 72 65 64 4d 6f 76 65 74 6f 20 3d 20 30 3b 0a  rredMoveto = 0;.
2b6e0 20 20 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61      pC->cacheSta
2b6f0 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c  tus = CACHE_STAL
2b700 45 3b 0a 20 20 7d 0a 20 20 69 66 28 20 72 63 20  E;.  }.  if( rc 
2b710 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65  ) goto abort_due
2b720 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 70 43 2d  _to_error;.  pC-
2b730 3e 6e 75 6c 6c 52 6f 77 20 3d 20 28 75 38 29 72  >nullRow = (u8)r
2b740 65 73 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f  es;.  assert( pO
2b750 70 2d 3e 70 32 3e 30 20 26 26 20 70 4f 70 2d 3e  p->p2>0 && pOp->
2b760 70 32 3c 70 2d 3e 6e 4f 70 20 29 3b 0a 20 20 56  p2<p->nOp );.  V
2b770 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 72  dbeBranchTaken(r
2b780 65 73 21 3d 30 2c 32 29 3b 0a 20 20 69 66 28 20  es!=0,2);.  if( 
2b790 72 65 73 20 29 20 67 6f 74 6f 20 6a 75 6d 70 5f  res ) goto jump_
2b7a0 74 6f 5f 70 32 3b 0a 20 20 62 72 65 61 6b 3b 0a  to_p2;.  break;.
2b7b0 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 65  }../* Opcode: Ne
2b7c0 78 74 20 50 31 20 50 32 20 50 33 20 50 34 20 50  xt P1 P2 P3 P4 P
2b7d0 35 0a 2a 2a 0a 2a 2a 20 41 64 76 61 6e 63 65 20  5.**.** Advance 
2b7e0 63 75 72 73 6f 72 20 50 31 20 73 6f 20 74 68 61  cursor P1 so tha
2b7f0 74 20 69 74 20 70 6f 69 6e 74 73 20 74 6f 20 74  t it points to t
2b800 68 65 20 6e 65 78 74 20 6b 65 79 2f 64 61 74 61  he next key/data
2b810 20 70 61 69 72 20 69 6e 20 69 74 73 0a 2a 2a 20   pair in its.** 
2b820 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 2e 20  table or index. 
2b830 20 49 66 20 74 68 65 72 65 20 61 72 65 20 6e 6f   If there are no
2b840 20 6d 6f 72 65 20 6b 65 79 2f 76 61 6c 75 65 20   more key/value 
2b850 70 61 69 72 73 20 74 68 65 6e 20 66 61 6c 6c 20  pairs then fall 
2b860 74 68 72 6f 75 67 68 0a 2a 2a 20 74 6f 20 74 68  through.** to th
2b870 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 69 6e 73 74  e following inst
2b880 72 75 63 74 69 6f 6e 2e 20 20 42 75 74 20 69 66  ruction.  But if
2b890 20 74 68 65 20 63 75 72 73 6f 72 20 61 64 76 61   the cursor adva
2b8a0 6e 63 65 20 77 61 73 20 73 75 63 63 65 73 73 66  nce was successf
2b8b0 75 6c 2c 0a 2a 2a 20 6a 75 6d 70 20 69 6d 6d 65  ul,.** jump imme
2b8c0 64 69 61 74 65 6c 79 20 74 6f 20 50 32 2e 0a 2a  diately to P2..*
2b8d0 2a 0a 2a 2a 20 54 68 65 20 4e 65 78 74 20 6f 70  *.** The Next op
2b8e0 63 6f 64 65 20 69 73 20 6f 6e 6c 79 20 76 61 6c  code is only val
2b8f0 69 64 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 6e 20  id following an 
2b900 53 65 65 6b 47 54 2c 20 53 65 65 6b 47 45 2c 20  SeekGT, SeekGE, 
2b910 6f 72 0a 2a 2a 20 4f 50 5f 52 65 77 69 6e 64 20  or.** OP_Rewind 
2b920 6f 70 63 6f 64 65 20 75 73 65 64 20 74 6f 20 70  opcode used to p
2b930 6f 73 69 74 69 6f 6e 20 74 68 65 20 63 75 72 73  osition the curs
2b940 6f 72 2e 20 20 4e 65 78 74 20 69 73 20 6e 6f 74  or.  Next is not
2b950 20 61 6c 6c 6f 77 65 64 0a 2a 2a 20 74 6f 20 66   allowed.** to f
2b960 6f 6c 6c 6f 77 20 53 65 65 6b 4c 54 2c 20 53 65  ollow SeekLT, Se
2b970 65 6b 4c 45 2c 20 6f 72 20 4f 50 5f 4c 61 73 74  ekLE, or OP_Last
2b980 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 31 20 63  ..**.** The P1 c
2b990 75 72 73 6f 72 20 6d 75 73 74 20 62 65 20 66 6f  ursor must be fo
2b9a0 72 20 61 20 72 65 61 6c 20 74 61 62 6c 65 2c 20  r a real table, 
2b9b0 6e 6f 74 20 61 20 70 73 65 75 64 6f 2d 74 61 62  not a pseudo-tab
2b9c0 6c 65 2e 20 20 50 31 20 6d 75 73 74 20 68 61 76  le.  P1 must hav
2b9d0 65 0a 2a 2a 20 62 65 65 6e 20 6f 70 65 6e 65 64  e.** been opened
2b9e0 20 70 72 69 6f 72 20 74 6f 20 74 68 69 73 20 6f   prior to this o
2b9f0 70 63 6f 64 65 20 6f 72 20 74 68 65 20 70 72 6f  pcode or the pro
2ba00 67 72 61 6d 20 77 69 6c 6c 20 73 65 67 66 61 75  gram will segfau
2ba10 6c 74 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 33  lt..**.** The P3
2ba20 20 76 61 6c 75 65 20 69 73 20 61 20 68 69 6e 74   value is a hint
2ba30 20 74 6f 20 74 68 65 20 62 74 72 65 65 20 69 6d   to the btree im
2ba40 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 2e 20 49 66  plementation. If
2ba50 20 50 33 3d 3d 31 2c 20 74 68 61 74 0a 2a 2a 20   P3==1, that.** 
2ba60 6d 65 61 6e 73 20 50 31 20 69 73 20 61 6e 20 53  means P1 is an S
2ba70 51 4c 20 69 6e 64 65 78 20 61 6e 64 20 74 68 61  QL index and tha
2ba80 74 20 74 68 69 73 20 69 6e 73 74 72 75 63 74 69  t this instructi
2ba90 6f 6e 20 63 6f 75 6c 64 20 68 61 76 65 20 62 65  on could have be
2baa0 65 6e 0a 2a 2a 20 6f 6d 69 74 74 65 64 20 69 66  en.** omitted if
2bab0 20 74 68 61 74 20 69 6e 64 65 78 20 68 61 64 20   that index had 
2bac0 62 65 65 6e 20 75 6e 69 71 75 65 2e 20 20 50 33  been unique.  P3
2bad0 20 69 73 20 75 73 75 61 6c 6c 79 20 30 2e 20 20   is usually 0.  
2bae0 50 33 20 69 73 0a 2a 2a 20 61 6c 77 61 79 73 20  P3 is.** always 
2baf0 65 69 74 68 65 72 20 30 20 6f 72 20 31 2e 0a 2a  either 0 or 1..*
2bb00 2a 0a 2a 2a 20 50 34 20 69 73 20 61 6c 77 61 79  *.** P4 is alway
2bb10 73 20 6f 66 20 74 79 70 65 20 50 34 5f 41 44 56  s of type P4_ADV
2bb20 41 4e 43 45 2e 20 54 68 65 20 66 75 6e 63 74 69  ANCE. The functi
2bb30 6f 6e 20 70 6f 69 6e 74 65 72 20 70 6f 69 6e 74  on pointer point
2bb40 73 20 74 6f 0a 2a 2a 20 73 71 6c 69 74 65 33 42  s to.** sqlite3B
2bb50 74 72 65 65 4e 65 78 74 28 29 2e 0a 2a 2a 0a 2a  treeNext()..**.*
2bb60 2a 20 49 66 20 50 35 20 69 73 20 70 6f 73 69 74  * If P5 is posit
2bb70 69 76 65 20 61 6e 64 20 74 68 65 20 6a 75 6d 70  ive and the jump
2bb80 20 69 73 20 74 61 6b 65 6e 2c 20 74 68 65 6e 20   is taken, then 
2bb90 65 76 65 6e 74 20 63 6f 75 6e 74 65 72 0a 2a 2a  event counter.**
2bba0 20 6e 75 6d 62 65 72 20 50 35 2d 31 20 69 6e 20   number P5-1 in 
2bbb0 74 68 65 20 70 72 65 70 61 72 65 64 20 73 74 61  the prepared sta
2bbc0 74 65 6d 65 6e 74 20 69 73 20 69 6e 63 72 65 6d  tement is increm
2bbd0 65 6e 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 53 65 65  ented..**.** See
2bbe0 20 61 6c 73 6f 3a 20 50 72 65 76 0a 2a 2f 0a 2f   also: Prev.*/./
2bbf0 2a 20 4f 70 63 6f 64 65 3a 20 50 72 65 76 20 50  * Opcode: Prev P
2bc00 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a  1 P2 P3 P4 P5.**
2bc10 0a 2a 2a 20 42 61 63 6b 20 75 70 20 63 75 72 73  .** Back up curs
2bc20 6f 72 20 50 31 20 73 6f 20 74 68 61 74 20 69 74  or P1 so that it
2bc30 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 20 70   points to the p
2bc40 72 65 76 69 6f 75 73 20 6b 65 79 2f 64 61 74 61  revious key/data
2bc50 20 70 61 69 72 20 69 6e 20 69 74 73 0a 2a 2a 20   pair in its.** 
2bc60 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 2e 20  table or index. 
2bc70 20 49 66 20 74 68 65 72 65 20 69 73 20 6e 6f 20   If there is no 
2bc80 70 72 65 76 69 6f 75 73 20 6b 65 79 2f 76 61 6c  previous key/val
2bc90 75 65 20 70 61 69 72 73 20 74 68 65 6e 20 66 61  ue pairs then fa
2bca0 6c 6c 20 74 68 72 6f 75 67 68 0a 2a 2a 20 74 6f  ll through.** to
2bcb0 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 69   the following i
2bcc0 6e 73 74 72 75 63 74 69 6f 6e 2e 20 20 42 75 74  nstruction.  But
2bcd0 20 69 66 20 74 68 65 20 63 75 72 73 6f 72 20 62   if the cursor b
2bce0 61 63 6b 75 70 20 77 61 73 20 73 75 63 63 65 73  ackup was succes
2bcf0 73 66 75 6c 2c 0a 2a 2a 20 6a 75 6d 70 20 69 6d  sful,.** jump im
2bd00 6d 65 64 69 61 74 65 6c 79 20 74 6f 20 50 32 2e  mediately to P2.
2bd10 0a 2a 2a 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 72  .**.**.** The Pr
2bd20 65 76 20 6f 70 63 6f 64 65 20 69 73 20 6f 6e 6c  ev opcode is onl
2bd30 79 20 76 61 6c 69 64 20 66 6f 6c 6c 6f 77 69 6e  y valid followin
2bd40 67 20 61 6e 20 53 65 65 6b 4c 54 2c 20 53 65 65  g an SeekLT, See
2bd50 6b 4c 45 2c 20 6f 72 0a 2a 2a 20 4f 50 5f 4c 61  kLE, or.** OP_La
2bd60 73 74 20 6f 70 63 6f 64 65 20 75 73 65 64 20 74  st opcode used t
2bd70 6f 20 70 6f 73 69 74 69 6f 6e 20 74 68 65 20 63  o position the c
2bd80 75 72 73 6f 72 2e 20 20 50 72 65 76 20 69 73 20  ursor.  Prev is 
2bd90 6e 6f 74 20 61 6c 6c 6f 77 65 64 0a 2a 2a 20 74  not allowed.** t
2bda0 6f 20 66 6f 6c 6c 6f 77 20 53 65 65 6b 47 54 2c  o follow SeekGT,
2bdb0 20 53 65 65 6b 47 45 2c 20 6f 72 20 4f 50 5f 52   SeekGE, or OP_R
2bdc0 65 77 69 6e 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  ewind..**.** The
2bdd0 20 50 31 20 63 75 72 73 6f 72 20 6d 75 73 74 20   P1 cursor must 
2bde0 62 65 20 66 6f 72 20 61 20 72 65 61 6c 20 74 61  be for a real ta
2bdf0 62 6c 65 2c 20 6e 6f 74 20 61 20 70 73 65 75 64  ble, not a pseud
2be00 6f 2d 74 61 62 6c 65 2e 20 20 49 66 20 50 31 20  o-table.  If P1 
2be10 69 73 0a 2a 2a 20 6e 6f 74 20 6f 70 65 6e 20 74  is.** not open t
2be20 68 65 6e 20 74 68 65 20 62 65 68 61 76 69 6f 72  hen the behavior
2be30 20 69 73 20 75 6e 64 65 66 69 6e 65 64 2e 0a 2a   is undefined..*
2be40 2a 0a 2a 2a 20 54 68 65 20 50 33 20 76 61 6c 75  *.** The P3 valu
2be50 65 20 69 73 20 61 20 68 69 6e 74 20 74 6f 20 74  e is a hint to t
2be60 68 65 20 62 74 72 65 65 20 69 6d 70 6c 65 6d 65  he btree impleme
2be70 6e 74 61 74 69 6f 6e 2e 20 49 66 20 50 33 3d 3d  ntation. If P3==
2be80 31 2c 20 74 68 61 74 0a 2a 2a 20 6d 65 61 6e 73  1, that.** means
2be90 20 50 31 20 69 73 20 61 6e 20 53 51 4c 20 69 6e   P1 is an SQL in
2bea0 64 65 78 20 61 6e 64 20 74 68 61 74 20 74 68 69  dex and that thi
2beb0 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 63 6f  s instruction co
2bec0 75 6c 64 20 68 61 76 65 20 62 65 65 6e 0a 2a 2a  uld have been.**
2bed0 20 6f 6d 69 74 74 65 64 20 69 66 20 74 68 61 74   omitted if that
2bee0 20 69 6e 64 65 78 20 68 61 64 20 62 65 65 6e 20   index had been 
2bef0 75 6e 69 71 75 65 2e 20 20 50 33 20 69 73 20 75  unique.  P3 is u
2bf00 73 75 61 6c 6c 79 20 30 2e 20 20 50 33 20 69 73  sually 0.  P3 is
2bf10 0a 2a 2a 20 61 6c 77 61 79 73 20 65 69 74 68 65  .** always eithe
2bf20 72 20 30 20 6f 72 20 31 2e 0a 2a 2a 0a 2a 2a 20  r 0 or 1..**.** 
2bf30 50 34 20 69 73 20 61 6c 77 61 79 73 20 6f 66 20  P4 is always of 
2bf40 74 79 70 65 20 50 34 5f 41 44 56 41 4e 43 45 2e  type P4_ADVANCE.
2bf50 20 54 68 65 20 66 75 6e 63 74 69 6f 6e 20 70 6f   The function po
2bf60 69 6e 74 65 72 20 70 6f 69 6e 74 73 20 74 6f 0a  inter points to.
2bf70 2a 2a 20 73 71 6c 69 74 65 33 42 74 72 65 65 50  ** sqlite3BtreeP
2bf80 72 65 76 69 6f 75 73 28 29 2e 0a 2a 2a 0a 2a 2a  revious()..**.**
2bf90 20 49 66 20 50 35 20 69 73 20 70 6f 73 69 74 69   If P5 is positi
2bfa0 76 65 20 61 6e 64 20 74 68 65 20 6a 75 6d 70 20  ve and the jump 
2bfb0 69 73 20 74 61 6b 65 6e 2c 20 74 68 65 6e 20 65  is taken, then e
2bfc0 76 65 6e 74 20 63 6f 75 6e 74 65 72 0a 2a 2a 20  vent counter.** 
2bfd0 6e 75 6d 62 65 72 20 50 35 2d 31 20 69 6e 20 74  number P5-1 in t
2bfe0 68 65 20 70 72 65 70 61 72 65 64 20 73 74 61 74  he prepared stat
2bff0 65 6d 65 6e 74 20 69 73 20 69 6e 63 72 65 6d 65  ement is increme
2c000 6e 74 65 64 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f  nted..*/./* Opco
2c010 64 65 3a 20 53 6f 72 74 65 72 4e 65 78 74 20 50  de: SorterNext P
2c020 31 20 50 32 20 2a 20 2a 20 50 35 0a 2a 2a 0a 2a  1 P2 * * P5.**.*
2c030 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 77 6f  * This opcode wo
2c040 72 6b 73 20 6a 75 73 74 20 6c 69 6b 65 20 4f 50  rks just like OP
2c050 5f 4e 65 78 74 20 65 78 63 65 70 74 20 74 68 61  _Next except tha
2c060 74 20 50 31 20 6d 75 73 74 20 62 65 20 61 0a 2a  t P1 must be a.*
2c070 2a 20 73 6f 72 74 65 72 20 6f 62 6a 65 63 74 20  * sorter object 
2c080 66 6f 72 20 77 68 69 63 68 20 74 68 65 20 4f 50  for which the OP
2c090 5f 53 6f 72 74 65 72 53 6f 72 74 20 6f 70 63 6f  _SorterSort opco
2c0a0 64 65 20 68 61 73 20 62 65 65 6e 0a 2a 2a 20 69  de has been.** i
2c0b0 6e 76 6f 6b 65 64 2e 20 20 54 68 69 73 20 6f 70  nvoked.  This op
2c0c0 63 6f 64 65 20 61 64 76 61 6e 63 65 73 20 74 68  code advances th
2c0d0 65 20 63 75 72 73 6f 72 20 74 6f 20 74 68 65 20  e cursor to the 
2c0e0 6e 65 78 74 20 73 6f 72 74 65 64 0a 2a 2a 20 72  next sorted.** r
2c0f0 65 63 6f 72 64 2c 20 6f 72 20 6a 75 6d 70 73 20  ecord, or jumps 
2c100 74 6f 20 50 32 20 69 66 20 74 68 65 72 65 20 61  to P2 if there a
2c110 72 65 20 6e 6f 20 6d 6f 72 65 20 73 6f 72 74 65  re no more sorte
2c120 64 20 72 65 63 6f 72 64 73 2e 0a 2a 2f 0a 63 61  d records..*/.ca
2c130 73 65 20 4f 50 5f 53 6f 72 74 65 72 4e 65 78 74  se OP_SorterNext
2c140 3a 20 7b 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a  : {  /* jump */.
2c150 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43    VdbeCursor *pC
2c160 3b 0a 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43  ;..  pC = p->apC
2c170 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  sr[pOp->p1];.  a
2c180 73 73 65 72 74 28 20 69 73 53 6f 72 74 65 72 28  ssert( isSorter(
2c190 70 43 29 20 29 3b 0a 20 20 72 63 20 3d 20 73 71  pC) );.  rc = sq
2c1a0 6c 69 74 65 33 56 64 62 65 53 6f 72 74 65 72 4e  lite3VdbeSorterN
2c1b0 65 78 74 28 64 62 2c 20 70 43 29 3b 0a 20 20 67  ext(db, pC);.  g
2c1c0 6f 74 6f 20 6e 65 78 74 5f 74 61 69 6c 3b 0a 63  oto next_tail;.c
2c1d0 61 73 65 20 4f 50 5f 50 72 65 76 3a 20 20 20 20  ase OP_Prev:    
2c1e0 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f        /* jump */
2c1f0 0a 63 61 73 65 20 4f 50 5f 4e 65 78 74 3a 20 20  .case OP_Next:  
2c200 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20          /* jump 
2c210 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  */.  assert( pOp
2c220 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e  ->p1>=0 && pOp->
2c230 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b  p1<p->nCursor );
2c240 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
2c250 70 35 3c 41 72 72 61 79 53 69 7a 65 28 70 2d 3e  p5<ArraySize(p->
2c260 61 43 6f 75 6e 74 65 72 29 20 29 3b 0a 20 20 70  aCounter) );.  p
2c270 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70  C = p->apCsr[pOp
2c280 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p1];.  assert(
2c290 20 70 43 21 3d 30 20 29 3b 0a 20 20 61 73 73 65   pC!=0 );.  asse
2c2a0 72 74 28 20 70 43 2d 3e 64 65 66 65 72 72 65 64  rt( pC->deferred
2c2b0 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a 20 20 61  Moveto==0 );.  a
2c2c0 73 73 65 72 74 28 20 70 43 2d 3e 65 43 75 72 54  ssert( pC->eCurT
2c2d0 79 70 65 3d 3d 43 55 52 54 59 50 45 5f 42 54 52  ype==CURTYPE_BTR
2c2e0 45 45 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  EE );.  assert( 
2c2f0 70 4f 70 2d 3e 6f 70 63 6f 64 65 21 3d 4f 50 5f  pOp->opcode!=OP_
2c300 4e 65 78 74 20 7c 7c 20 70 4f 70 2d 3e 70 34 2e  Next || pOp->p4.
2c310 78 41 64 76 61 6e 63 65 3d 3d 73 71 6c 69 74 65  xAdvance==sqlite
2c320 33 42 74 72 65 65 4e 65 78 74 20 29 3b 0a 20 20  3BtreeNext );.  
2c330 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63  assert( pOp->opc
2c340 6f 64 65 21 3d 4f 50 5f 50 72 65 76 20 7c 7c 20  ode!=OP_Prev || 
2c350 70 4f 70 2d 3e 70 34 2e 78 41 64 76 61 6e 63 65  pOp->p4.xAdvance
2c360 3d 3d 73 71 6c 69 74 65 33 42 74 72 65 65 50 72  ==sqlite3BtreePr
2c370 65 76 69 6f 75 73 20 29 3b 0a 0a 20 20 2f 2a 20  evious );..  /* 
2c380 54 68 65 20 4e 65 78 74 20 6f 70 63 6f 64 65 20  The Next opcode 
2c390 69 73 20 6f 6e 6c 79 20 75 73 65 64 20 61 66 74  is only used aft
2c3a0 65 72 20 53 65 65 6b 47 54 2c 20 53 65 65 6b 47  er SeekGT, SeekG
2c3b0 45 2c 20 52 65 77 69 6e 64 2c 20 61 6e 64 20 46  E, Rewind, and F
2c3c0 6f 75 6e 64 2e 0a 20 20 2a 2a 20 54 68 65 20 50  ound..  ** The P
2c3d0 72 65 76 20 6f 70 63 6f 64 65 20 69 73 20 6f 6e  rev opcode is on
2c3e0 6c 79 20 75 73 65 64 20 61 66 74 65 72 20 53 65  ly used after Se
2c3f0 65 6b 4c 54 2c 20 53 65 65 6b 4c 45 2c 20 61 6e  ekLT, SeekLE, an
2c400 64 20 4c 61 73 74 2e 20 2a 2f 0a 20 20 61 73 73  d Last. */.  ass
2c410 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65  ert( pOp->opcode
2c420 21 3d 4f 50 5f 4e 65 78 74 0a 20 20 20 20 20 20  !=OP_Next.      
2c430 20 7c 7c 20 70 43 2d 3e 73 65 65 6b 4f 70 3d 3d   || pC->seekOp==
2c440 4f 50 5f 53 65 65 6b 47 54 20 7c 7c 20 70 43 2d  OP_SeekGT || pC-
2c450 3e 73 65 65 6b 4f 70 3d 3d 4f 50 5f 53 65 65 6b  >seekOp==OP_Seek
2c460 47 45 0a 20 20 20 20 20 20 20 7c 7c 20 70 43 2d  GE.       || pC-
2c470 3e 73 65 65 6b 4f 70 3d 3d 4f 50 5f 52 65 77 69  >seekOp==OP_Rewi
2c480 6e 64 20 7c 7c 20 70 43 2d 3e 73 65 65 6b 4f 70  nd || pC->seekOp
2c490 3d 3d 4f 50 5f 46 6f 75 6e 64 20 0a 20 20 20 20  ==OP_Found .    
2c4a0 20 20 20 7c 7c 20 70 43 2d 3e 73 65 65 6b 4f 70     || pC->seekOp
2c4b0 3d 3d 4f 50 5f 4e 75 6c 6c 52 6f 77 7c 7c 20 70  ==OP_NullRow|| p
2c4c0 43 2d 3e 73 65 65 6b 4f 70 3d 3d 4f 50 5f 53 65  C->seekOp==OP_Se
2c4d0 65 6b 52 6f 77 69 64 29 3b 0a 20 20 61 73 73 65  ekRowid);.  asse
2c4e0 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 21  rt( pOp->opcode!
2c4f0 3d 4f 50 5f 50 72 65 76 0a 20 20 20 20 20 20 20  =OP_Prev.       
2c500 7c 7c 20 70 43 2d 3e 73 65 65 6b 4f 70 3d 3d 4f  || pC->seekOp==O
2c510 50 5f 53 65 65 6b 4c 54 20 7c 7c 20 70 43 2d 3e  P_SeekLT || pC->
2c520 73 65 65 6b 4f 70 3d 3d 4f 50 5f 53 65 65 6b 4c  seekOp==OP_SeekL
2c530 45 0a 20 20 20 20 20 20 20 7c 7c 20 70 43 2d 3e  E.       || pC->
2c540 73 65 65 6b 4f 70 3d 3d 4f 50 5f 4c 61 73 74 20  seekOp==OP_Last 
2c550 0a 20 20 20 20 20 20 20 7c 7c 20 70 43 2d 3e 73  .       || pC->s
2c560 65 65 6b 4f 70 3d 3d 4f 50 5f 4e 75 6c 6c 52 6f  eekOp==OP_NullRo
2c570 77 29 3b 0a 0a 20 20 72 63 20 3d 20 70 4f 70 2d  w);..  rc = pOp-
2c580 3e 70 34 2e 78 41 64 76 61 6e 63 65 28 70 43 2d  >p4.xAdvance(pC-
2c590 3e 75 63 2e 70 43 75 72 73 6f 72 2c 20 70 4f 70  >uc.pCursor, pOp
2c5a0 2d 3e 70 33 29 3b 0a 6e 65 78 74 5f 74 61 69 6c  ->p3);.next_tail
2c5b0 3a 0a 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61  :.  pC->cacheSta
2c5c0 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c  tus = CACHE_STAL
2c5d0 45 3b 0a 20 20 56 64 62 65 42 72 61 6e 63 68 54  E;.  VdbeBranchT
2c5e0 61 6b 65 6e 28 72 63 3d 3d 53 51 4c 49 54 45 5f  aken(rc==SQLITE_
2c5f0 4f 4b 2c 32 29 3b 0a 20 20 69 66 28 20 72 63 3d  OK,2);.  if( rc=
2c600 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20  =SQLITE_OK ){.  
2c610 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20    pC->nullRow = 
2c620 30 3b 0a 20 20 20 20 70 2d 3e 61 43 6f 75 6e 74  0;.    p->aCount
2c630 65 72 5b 70 4f 70 2d 3e 70 35 5d 2b 2b 3b 0a 23  er[pOp->p5]++;.#
2c640 69 66 64 65 66 20 53 51 4c 49 54 45 5f 54 45 53  ifdef SQLITE_TES
2c650 54 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 73 65  T.    sqlite3_se
2c660 61 72 63 68 5f 63 6f 75 6e 74 2b 2b 3b 0a 23 65  arch_count++;.#e
2c670 6e 64 69 66 0a 20 20 20 20 67 6f 74 6f 20 6a 75  ndif.    goto ju
2c680 6d 70 5f 74 6f 5f 70 32 5f 61 6e 64 5f 63 68 65  mp_to_p2_and_che
2c690 63 6b 5f 66 6f 72 5f 69 6e 74 65 72 72 75 70 74  ck_for_interrupt
2c6a0 3b 0a 20 20 7d 0a 20 20 69 66 28 20 72 63 21 3d  ;.  }.  if( rc!=
2c6b0 53 51 4c 49 54 45 5f 44 4f 4e 45 20 29 20 67 6f  SQLITE_DONE ) go
2c6c0 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
2c6d0 65 72 72 6f 72 3b 0a 20 20 72 63 20 3d 20 53 51  error;.  rc = SQ
2c6e0 4c 49 54 45 5f 4f 4b 3b 0a 20 20 70 43 2d 3e 6e  LITE_OK;.  pC->n
2c6f0 75 6c 6c 52 6f 77 20 3d 20 31 3b 0a 20 20 67 6f  ullRow = 1;.  go
2c700 74 6f 20 63 68 65 63 6b 5f 66 6f 72 5f 69 6e 74  to check_for_int
2c710 65 72 72 75 70 74 3b 0a 7d 0a 0a 2f 2a 20 4f 70  errupt;.}../* Op
2c720 63 6f 64 65 3a 20 49 64 78 49 6e 73 65 72 74 20  code: IdxInsert 
2c730 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a  P1 P2 P3 P4 P5.*
2c740 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d  * Synopsis: key=
2c750 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20 52 65 67 69  r[P2].**.** Regi
2c760 73 74 65 72 20 50 32 20 68 6f 6c 64 73 20 61 6e  ster P2 holds an
2c770 20 53 51 4c 20 69 6e 64 65 78 20 6b 65 79 20 6d   SQL index key m
2c780 61 64 65 20 75 73 69 6e 67 20 74 68 65 0a 2a 2a  ade using the.**
2c790 20 4d 61 6b 65 52 65 63 6f 72 64 20 69 6e 73 74   MakeRecord inst
2c7a0 72 75 63 74 69 6f 6e 73 2e 20 20 54 68 69 73 20  ructions.  This 
2c7b0 6f 70 63 6f 64 65 20 77 72 69 74 65 73 20 74 68  opcode writes th
2c7c0 61 74 20 6b 65 79 0a 2a 2a 20 69 6e 74 6f 20 74  at key.** into t
2c7d0 68 65 20 69 6e 64 65 78 20 50 31 2e 20 20 44 61  he index P1.  Da
2c7e0 74 61 20 66 6f 72 20 74 68 65 20 65 6e 74 72 79  ta for the entry
2c7f0 20 69 73 20 6e 69 6c 2e 0a 2a 2a 0a 2a 2a 20 49   is nil..**.** I
2c800 66 20 50 34 20 69 73 20 6e 6f 74 20 7a 65 72 6f  f P4 is not zero
2c810 2c 20 74 68 65 6e 20 69 74 20 69 73 20 74 68 65  , then it is the
2c820 20 6e 75 6d 62 65 72 20 6f 66 20 76 61 6c 75 65   number of value
2c830 73 20 69 6e 20 74 68 65 20 75 6e 70 61 63 6b 65  s in the unpacke
2c840 64 0a 2a 2a 20 6b 65 79 20 6f 66 20 72 65 67 28  d.** key of reg(
2c850 50 32 29 2e 20 20 49 6e 20 74 68 61 74 20 63 61  P2).  In that ca
2c860 73 65 2c 20 50 33 20 69 73 20 74 68 65 20 69 6e  se, P3 is the in
2c870 64 65 78 20 6f 66 20 74 68 65 20 66 69 72 73 74  dex of the first
2c880 20 72 65 67 69 73 74 65 72 0a 2a 2a 20 66 6f 72   register.** for
2c890 20 74 68 65 20 75 6e 70 61 63 6b 65 64 20 6b 65   the unpacked ke
2c8a0 79 2e 20 20 54 68 65 20 61 76 61 69 6c 61 62 69  y.  The availabi
2c8b0 6c 69 74 79 20 6f 66 20 74 68 65 20 75 6e 70 61  lity of the unpa
2c8c0 63 6b 65 64 20 6b 65 79 20 63 61 6e 20 73 6f 6d  cked key can som
2c8d0 65 74 69 6d 65 73 0a 2a 2a 20 62 65 20 61 6e 20  etimes.** be an 
2c8e0 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 2e 0a 2a 2a  optimization..**
2c8f0 0a 2a 2a 20 49 66 20 50 35 20 68 61 73 20 74 68  .** If P5 has th
2c900 65 20 4f 50 46 4c 41 47 5f 41 50 50 45 4e 44 20  e OPFLAG_APPEND 
2c910 62 69 74 20 73 65 74 2c 20 74 68 61 74 20 69 73  bit set, that is
2c920 20 61 20 68 69 6e 74 20 74 6f 20 74 68 65 20 62   a hint to the b
2c930 2d 74 72 65 65 20 6c 61 79 65 72 0a 2a 2a 20 74  -tree layer.** t
2c940 68 61 74 20 74 68 69 73 20 69 6e 73 65 72 74 20  hat this insert 
2c950 69 73 20 6c 69 6b 65 6c 79 20 74 6f 20 62 65 20  is likely to be 
2c960 61 6e 20 61 70 70 65 6e 64 2e 0a 2a 2a 0a 2a 2a  an append..**.**
2c970 20 49 66 20 50 35 20 68 61 73 20 74 68 65 20 4f   If P5 has the O
2c980 50 46 4c 41 47 5f 4e 43 48 41 4e 47 45 20 62 69  PFLAG_NCHANGE bi
2c990 74 20 73 65 74 2c 20 74 68 65 6e 20 74 68 65 20  t set, then the 
2c9a0 63 68 61 6e 67 65 20 63 6f 75 6e 74 65 72 20 69  change counter i
2c9b0 73 0a 2a 2a 20 69 6e 63 72 65 6d 65 6e 74 65 64  s.** incremented
2c9c0 20 62 79 20 74 68 69 73 20 69 6e 73 74 72 75 63   by this instruc
2c9d0 74 69 6f 6e 2e 20 20 49 66 20 74 68 65 20 4f 50  tion.  If the OP
2c9e0 46 4c 41 47 5f 4e 43 48 41 4e 47 45 20 62 69 74  FLAG_NCHANGE bit
2c9f0 20 69 73 20 63 6c 65 61 72 2c 0a 2a 2a 20 74 68   is clear,.** th
2ca00 65 6e 20 74 68 65 20 63 68 61 6e 67 65 20 63 6f  en the change co
2ca10 75 6e 74 65 72 20 69 73 20 75 6e 63 68 61 6e 67  unter is unchang
2ca20 65 64 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65  ed..**.** If the
2ca30 20 4f 50 46 4c 41 47 5f 55 53 45 53 45 45 4b 52   OPFLAG_USESEEKR
2ca40 45 53 55 4c 54 20 66 6c 61 67 20 6f 66 20 50 35  ESULT flag of P5
2ca50 20 69 73 20 73 65 74 2c 20 74 68 65 20 69 6d 70   is set, the imp
2ca60 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 6d 69 67 68  lementation migh
2ca70 74 0a 2a 2a 20 72 75 6e 20 66 61 73 74 65 72 20  t.** run faster 
2ca80 62 79 20 61 76 6f 69 64 69 6e 67 20 61 6e 20 75  by avoiding an u
2ca90 6e 6e 65 63 65 73 73 61 72 79 20 73 65 65 6b 20  nnecessary seek 
2caa0 6f 6e 20 63 75 72 73 6f 72 20 50 31 2e 20 20 48  on cursor P1.  H
2cab0 6f 77 65 76 65 72 2c 0a 2a 2a 20 74 68 65 20 4f  owever,.** the O
2cac0 50 46 4c 41 47 5f 55 53 45 53 45 45 4b 52 45 53  PFLAG_USESEEKRES
2cad0 55 4c 54 20 66 6c 61 67 20 6d 75 73 74 20 6f 6e  ULT flag must on
2cae0 6c 79 20 62 65 20 73 65 74 20 69 66 20 74 68 65  ly be set if the
2caf0 72 65 20 68 61 76 65 20 62 65 65 6e 20 6e 6f 20  re have been no 
2cb00 70 72 69 6f 72 0a 2a 2a 20 73 65 65 6b 73 20 6f  prior.** seeks o
2cb10 6e 20 74 68 65 20 63 75 72 73 6f 72 20 6f 72 20  n the cursor or 
2cb20 69 66 20 74 68 65 20 6d 6f 73 74 20 72 65 63 65  if the most rece
2cb30 6e 74 20 73 65 65 6b 20 75 73 65 64 20 61 20 6b  nt seek used a k
2cb40 65 79 20 65 71 75 69 76 61 6c 65 6e 74 0a 2a 2a  ey equivalent.**
2cb50 20 74 6f 20 50 32 2e 20 0a 2a 2a 0a 2a 2a 20 54   to P2. .**.** T
2cb60 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20  his instruction 
2cb70 6f 6e 6c 79 20 77 6f 72 6b 73 20 66 6f 72 20 69  only works for i
2cb80 6e 64 69 63 65 73 2e 20 20 54 68 65 20 65 71 75  ndices.  The equ
2cb90 69 76 61 6c 65 6e 74 20 69 6e 73 74 72 75 63 74  ivalent instruct
2cba0 69 6f 6e 0a 2a 2a 20 66 6f 72 20 74 61 62 6c 65  ion.** for table
2cbb0 73 20 69 73 20 4f 50 5f 49 6e 73 65 72 74 2e 0a  s is OP_Insert..
2cbc0 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 6f  */./* Opcode: So
2cbd0 72 74 65 72 49 6e 73 65 72 74 20 50 31 20 50 32  rterInsert P1 P2
2cbe0 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73   * * *.** Synops
2cbf0 69 73 3a 20 6b 65 79 3d 72 5b 50 32 5d 0a 2a 2a  is: key=r[P2].**
2cc00 0a 2a 2a 20 52 65 67 69 73 74 65 72 20 50 32 20  .** Register P2 
2cc10 68 6f 6c 64 73 20 61 6e 20 53 51 4c 20 69 6e 64  holds an SQL ind
2cc20 65 78 20 6b 65 79 20 6d 61 64 65 20 75 73 69 6e  ex key made usin
2cc30 67 20 74 68 65 0a 2a 2a 20 4d 61 6b 65 52 65 63  g the.** MakeRec
2cc40 6f 72 64 20 69 6e 73 74 72 75 63 74 69 6f 6e 73  ord instructions
2cc50 2e 20 20 54 68 69 73 20 6f 70 63 6f 64 65 20 77  .  This opcode w
2cc60 72 69 74 65 73 20 74 68 61 74 20 6b 65 79 0a 2a  rites that key.*
2cc70 2a 20 69 6e 74 6f 20 74 68 65 20 73 6f 72 74 65  * into the sorte
2cc80 72 20 50 31 2e 20 20 44 61 74 61 20 66 6f 72 20  r P1.  Data for 
2cc90 74 68 65 20 65 6e 74 72 79 20 69 73 20 6e 69 6c  the entry is nil
2cca0 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 6f 72  ..*/.case OP_Sor
2ccb0 74 65 72 49 6e 73 65 72 74 3a 20 20 20 20 20 20  terInsert:      
2ccc0 20 2f 2a 20 69 6e 32 20 2a 2f 0a 63 61 73 65 20   /* in2 */.case 
2ccd0 4f 50 5f 49 64 78 49 6e 73 65 72 74 3a 20 7b 20  OP_IdxInsert: { 
2cce0 20 20 20 20 20 20 20 2f 2a 20 69 6e 32 20 2a 2f         /* in2 */
2ccf0 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70  .  VdbeCursor *p
2cd00 43 3b 0a 20 20 42 74 72 65 65 50 61 79 6c 6f 61  C;.  BtreePayloa
2cd10 64 20 78 3b 0a 0a 20 20 61 73 73 65 72 74 28 20  d x;..  assert( 
2cd20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f  pOp->p1>=0 && pO
2cd30 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72  p->p1<p->nCursor
2cd40 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70   );.  pC = p->ap
2cd50 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Csr[pOp->p1];.  
2cd60 73 71 6c 69 74 65 33 56 64 62 65 49 6e 63 72 57  sqlite3VdbeIncrW
2cd70 72 69 74 65 43 6f 75 6e 74 65 72 28 70 2c 20 70  riteCounter(p, p
2cd80 43 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43  C);.  assert( pC
2cd90 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  !=0 );.  assert(
2cda0 20 69 73 53 6f 72 74 65 72 28 70 43 29 3d 3d 28   isSorter(pC)==(
2cdb0 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  pOp->opcode==OP_
2cdc0 53 6f 72 74 65 72 49 6e 73 65 72 74 29 20 29 3b  SorterInsert) );
2cdd0 0a 20 20 70 49 6e 32 20 3d 20 26 61 4d 65 6d 5b  .  pIn2 = &aMem[
2cde0 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 61 73 73 65  pOp->p2];.  asse
2cdf0 72 74 28 20 70 49 6e 32 2d 3e 66 6c 61 67 73 20  rt( pIn2->flags 
2ce00 26 20 4d 45 4d 5f 42 6c 6f 62 20 29 3b 0a 20 20  & MEM_Blob );.  
2ce10 69 66 28 20 70 4f 70 2d 3e 70 35 20 26 20 4f 50  if( pOp->p5 & OP
2ce20 46 4c 41 47 5f 4e 43 48 41 4e 47 45 20 29 20 70  FLAG_NCHANGE ) p
2ce30 2d 3e 6e 43 68 61 6e 67 65 2b 2b 3b 0a 20 20 61  ->nChange++;.  a
2ce40 73 73 65 72 74 28 20 70 43 2d 3e 65 43 75 72 54  ssert( pC->eCurT
2ce50 79 70 65 3d 3d 43 55 52 54 59 50 45 5f 42 54 52  ype==CURTYPE_BTR
2ce60 45 45 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64  EE || pOp->opcod
2ce70 65 3d 3d 4f 50 5f 53 6f 72 74 65 72 49 6e 73 65  e==OP_SorterInse
2ce80 72 74 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  rt );.  assert( 
2ce90 70 43 2d 3e 69 73 54 61 62 6c 65 3d 3d 30 20 29  pC->isTable==0 )
2cea0 3b 0a 20 20 72 63 20 3d 20 45 78 70 61 6e 64 42  ;.  rc = ExpandB
2ceb0 6c 6f 62 28 70 49 6e 32 29 3b 0a 20 20 69 66 28  lob(pIn2);.  if(
2cec0 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74   rc ) goto abort
2ced0 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20  _due_to_error;. 
2cee0 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65   if( pOp->opcode
2cef0 3d 3d 4f 50 5f 53 6f 72 74 65 72 49 6e 73 65 72  ==OP_SorterInser
2cf00 74 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 73 71  t ){.    rc = sq
2cf10 6c 69 74 65 33 56 64 62 65 53 6f 72 74 65 72 57  lite3VdbeSorterW
2cf20 72 69 74 65 28 70 43 2c 20 70 49 6e 32 29 3b 0a  rite(pC, pIn2);.
2cf30 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 78 2e 6e    }else{.    x.n
2cf40 4b 65 79 20 3d 20 70 49 6e 32 2d 3e 6e 3b 0a 20  Key = pIn2->n;. 
2cf50 20 20 20 78 2e 70 4b 65 79 20 3d 20 70 49 6e 32     x.pKey = pIn2
2cf60 2d 3e 7a 3b 0a 20 20 20 20 78 2e 61 4d 65 6d 20  ->z;.    x.aMem 
2cf70 3d 20 61 4d 65 6d 20 2b 20 70 4f 70 2d 3e 70 33  = aMem + pOp->p3
2cf80 3b 0a 20 20 20 20 78 2e 6e 4d 65 6d 20 3d 20 28  ;.    x.nMem = (
2cf90 75 31 36 29 70 4f 70 2d 3e 70 34 2e 69 3b 0a 20  u16)pOp->p4.i;. 
2cfa0 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42     rc = sqlite3B
2cfb0 74 72 65 65 49 6e 73 65 72 74 28 70 43 2d 3e 75  treeInsert(pC->u
2cfc0 63 2e 70 43 75 72 73 6f 72 2c 20 26 78 2c 0a 20  c.pCursor, &x,. 
2cfd0 20 20 20 20 20 20 20 20 28 70 4f 70 2d 3e 70 35          (pOp->p5
2cfe0 20 26 20 28 4f 50 46 4c 41 47 5f 41 50 50 45 4e   & (OPFLAG_APPEN
2cff0 44 7c 4f 50 46 4c 41 47 5f 53 41 56 45 50 4f 53  D|OPFLAG_SAVEPOS
2d000 49 54 49 4f 4e 29 29 2c 20 0a 20 20 20 20 20 20  ITION)), .      
2d010 20 20 28 28 70 4f 70 2d 3e 70 35 20 26 20 4f 50    ((pOp->p5 & OP
2d020 46 4c 41 47 5f 55 53 45 53 45 45 4b 52 45 53 55  FLAG_USESEEKRESU
2d030 4c 54 29 20 3f 20 70 43 2d 3e 73 65 65 6b 52 65  LT) ? pC->seekRe
2d040 73 75 6c 74 20 3a 20 30 29 0a 20 20 20 20 20 20  sult : 0).      
2d050 20 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28    );.    assert(
2d060 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76   pC->deferredMov
2d070 65 74 6f 3d 3d 30 20 29 3b 0a 20 20 20 20 70 43  eto==0 );.    pC
2d080 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d 20  ->cacheStatus = 
2d090 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20 7d  CACHE_STALE;.  }
2d0a0 0a 20 20 69 66 28 20 72 63 29 20 67 6f 74 6f 20  .  if( rc) goto 
2d0b0 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
2d0c0 6f 72 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  or;.  break;.}..
2d0d0 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 64 78 44 65  /* Opcode: IdxDe
2d0e0 6c 65 74 65 20 50 31 20 50 32 20 50 33 20 2a 20  lete P1 P2 P3 * 
2d0f0 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b  *.** Synopsis: k
2d100 65 79 3d 72 5b 50 32 40 50 33 5d 0a 2a 2a 0a 2a  ey=r[P2@P3].**.*
2d110 2a 20 54 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66  * The content of
2d120 20 50 33 20 72 65 67 69 73 74 65 72 73 20 73 74   P3 registers st
2d130 61 72 74 69 6e 67 20 61 74 20 72 65 67 69 73 74  arting at regist
2d140 65 72 20 50 32 20 66 6f 72 6d 0a 2a 2a 20 61 6e  er P2 form.** an
2d150 20 75 6e 70 61 63 6b 65 64 20 69 6e 64 65 78 20   unpacked index 
2d160 6b 65 79 2e 20 54 68 69 73 20 6f 70 63 6f 64 65  key. This opcode
2d170 20 72 65 6d 6f 76 65 73 20 74 68 61 74 20 65 6e   removes that en
2d180 74 72 79 20 66 72 6f 6d 20 74 68 65 20 0a 2a 2a  try from the .**
2d190 20 69 6e 64 65 78 20 6f 70 65 6e 65 64 20 62 79   index opened by
2d1a0 20 63 75 72 73 6f 72 20 50 31 2e 0a 2a 2f 0a 63   cursor P1..*/.c
2d1b0 61 73 65 20 4f 50 5f 49 64 78 44 65 6c 65 74 65  ase OP_IdxDelete
2d1c0 3a 20 7b 0a 20 20 56 64 62 65 43 75 72 73 6f 72  : {.  VdbeCursor
2d1d0 20 2a 70 43 3b 0a 20 20 42 74 43 75 72 73 6f 72   *pC;.  BtCursor
2d1e0 20 2a 70 43 72 73 72 3b 0a 20 20 69 6e 74 20 72   *pCrsr;.  int r
2d1f0 65 73 3b 0a 20 20 55 6e 70 61 63 6b 65 64 52 65  es;.  UnpackedRe
2d200 63 6f 72 64 20 72 3b 0a 0a 20 20 61 73 73 65 72  cord r;..  asser
2d210 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20 29 3b 0a  t( pOp->p3>0 );.
2d220 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
2d230 32 3e 30 20 26 26 20 70 4f 70 2d 3e 70 32 2b 70  2>0 && pOp->p2+p
2d240 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d  Op->p3<=(p->nMem
2d250 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29  +1 - p->nCursor)
2d260 2b 31 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  +1 );.  assert( 
2d270 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f  pOp->p1>=0 && pO
2d280 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72  p->p1<p->nCursor
2d290 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70   );.  pC = p->ap
2d2a0 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Csr[pOp->p1];.  
2d2b0 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b  assert( pC!=0 );
2d2c0 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 65  .  assert( pC->e
2d2d0 43 75 72 54 79 70 65 3d 3d 43 55 52 54 59 50 45  CurType==CURTYPE
2d2e0 5f 42 54 52 45 45 20 29 3b 0a 20 20 73 71 6c 69  _BTREE );.  sqli
2d2f0 74 65 33 56 64 62 65 49 6e 63 72 57 72 69 74 65  te3VdbeIncrWrite
2d300 43 6f 75 6e 74 65 72 28 70 2c 20 70 43 29 3b 0a  Counter(p, pC);.
2d310 20 20 70 43 72 73 72 20 3d 20 70 43 2d 3e 75 63    pCrsr = pC->uc
2d320 2e 70 43 75 72 73 6f 72 3b 0a 20 20 61 73 73 65  .pCursor;.  asse
2d330 72 74 28 20 70 43 72 73 72 21 3d 30 20 29 3b 0a  rt( pCrsr!=0 );.
2d340 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
2d350 35 3d 3d 30 20 29 3b 0a 20 20 72 2e 70 4b 65 79  5==0 );.  r.pKey
2d360 49 6e 66 6f 20 3d 20 70 43 2d 3e 70 4b 65 79 49  Info = pC->pKeyI
2d370 6e 66 6f 3b 0a 20 20 72 2e 6e 46 69 65 6c 64 20  nfo;.  r.nField 
2d380 3d 20 28 75 31 36 29 70 4f 70 2d 3e 70 33 3b 0a  = (u16)pOp->p3;.
2d390 20 20 72 2e 64 65 66 61 75 6c 74 5f 72 63 20 3d    r.default_rc =
2d3a0 20 30 3b 0a 20 20 72 2e 61 4d 65 6d 20 3d 20 26   0;.  r.aMem = &
2d3b0 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20  aMem[pOp->p2];. 
2d3c0 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
2d3d0 65 65 4d 6f 76 65 74 6f 55 6e 70 61 63 6b 65 64  eeMovetoUnpacked
2d3e0 28 70 43 72 73 72 2c 20 26 72 2c 20 30 2c 20 30  (pCrsr, &r, 0, 0
2d3f0 2c 20 26 72 65 73 29 3b 0a 20 20 69 66 28 20 72  , &res);.  if( r
2d400 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64  c ) goto abort_d
2d410 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 69  ue_to_error;.  i
2d420 66 28 20 72 65 73 3d 3d 30 20 29 7b 0a 20 20 20  f( res==0 ){.   
2d430 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
2d440 65 65 44 65 6c 65 74 65 28 70 43 72 73 72 2c 20  eeDelete(pCrsr, 
2d450 42 54 52 45 45 5f 41 55 58 44 45 4c 45 54 45 29  BTREE_AUXDELETE)
2d460 3b 0a 20 20 20 20 69 66 28 20 72 63 20 29 20 67  ;.    if( rc ) g
2d470 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
2d480 5f 65 72 72 6f 72 3b 0a 20 20 7d 0a 20 20 61 73  _error;.  }.  as
2d490 73 65 72 74 28 20 70 43 2d 3e 64 65 66 65 72 72  sert( pC->deferr
2d4a0 65 64 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a 20  edMoveto==0 );. 
2d4b0 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73   pC->cacheStatus
2d4c0 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a   = CACHE_STALE;.
2d4d0 20 20 70 43 2d 3e 73 65 65 6b 52 65 73 75 6c 74    pC->seekResult
2d4e0 20 3d 20 30 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d   = 0;.  break;.}
2d4f0 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 44 65 66  ../* Opcode: Def
2d500 65 72 72 65 64 53 65 65 6b 20 50 31 20 2a 20 50  erredSeek P1 * P
2d510 33 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73  3 P4 *.** Synops
2d520 69 73 3a 20 4d 6f 76 65 20 50 33 20 74 6f 20 50  is: Move P3 to P
2d530 31 2e 72 6f 77 69 64 20 69 66 20 6e 65 65 64 65  1.rowid if neede
2d540 64 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 61 6e  d.**.** P1 is an
2d550 20 6f 70 65 6e 20 69 6e 64 65 78 20 63 75 72 73   open index curs
2d560 6f 72 20 61 6e 64 20 50 33 20 69 73 20 61 20 63  or and P3 is a c
2d570 75 72 73 6f 72 20 6f 6e 20 74 68 65 20 63 6f 72  ursor on the cor
2d580 72 65 73 70 6f 6e 64 69 6e 67 0a 2a 2a 20 74 61  responding.** ta
2d590 62 6c 65 2e 20 20 54 68 69 73 20 6f 70 63 6f 64  ble.  This opcod
2d5a0 65 20 64 6f 65 73 20 61 20 64 65 66 65 72 72 65  e does a deferre
2d5b0 64 20 73 65 65 6b 20 6f 66 20 74 68 65 20 50 33  d seek of the P3
2d5c0 20 74 61 62 6c 65 20 63 75 72 73 6f 72 0a 2a 2a   table cursor.**
2d5d0 20 74 6f 20 74 68 65 20 72 6f 77 20 74 68 61 74   to the row that
2d5e0 20 63 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f 20   corresponds to 
2d5f0 74 68 65 20 63 75 72 72 65 6e 74 20 72 6f 77 20  the current row 
2d600 6f 66 20 50 31 2e 0a 2a 2a 0a 2a 2a 20 54 68 69  of P1..**.** Thi
2d610 73 20 69 73 20 61 20 64 65 66 65 72 72 65 64 20  s is a deferred 
2d620 73 65 65 6b 2e 20 20 4e 6f 74 68 69 6e 67 20 61  seek.  Nothing a
2d630 63 74 75 61 6c 6c 79 20 68 61 70 70 65 6e 73 20  ctually happens 
2d640 75 6e 74 69 6c 0a 2a 2a 20 74 68 65 20 63 75 72  until.** the cur
2d650 73 6f 72 20 69 73 20 75 73 65 64 20 74 6f 20 72  sor is used to r
2d660 65 61 64 20 61 20 72 65 63 6f 72 64 2e 20 20 54  ead a record.  T
2d670 68 61 74 20 77 61 79 2c 20 69 66 20 6e 6f 20 72  hat way, if no r
2d680 65 61 64 73 0a 2a 2a 20 6f 63 63 75 72 2c 20 6e  eads.** occur, n
2d690 6f 20 75 6e 6e 65 63 65 73 73 61 72 79 20 49 2f  o unnecessary I/
2d6a0 4f 20 68 61 70 70 65 6e 73 2e 0a 2a 2a 0a 2a 2a  O happens..**.**
2d6b0 20 50 34 20 6d 61 79 20 62 65 20 61 6e 20 61 72   P4 may be an ar
2d6c0 72 61 79 20 6f 66 20 69 6e 74 65 67 65 72 73 20  ray of integers 
2d6d0 28 74 79 70 65 20 50 34 5f 49 4e 54 41 52 52 41  (type P4_INTARRA
2d6e0 59 29 20 63 6f 6e 74 61 69 6e 69 6e 67 0a 2a 2a  Y) containing.**
2d6f0 20 6f 6e 65 20 65 6e 74 72 79 20 66 6f 72 20 65   one entry for e
2d700 61 63 68 20 63 6f 6c 75 6d 6e 20 69 6e 20 74 68  ach column in th
2d710 65 20 50 33 20 74 61 62 6c 65 2e 20 20 49 66 20  e P3 table.  If 
2d720 61 72 72 61 79 20 65 6e 74 72 79 20 61 28 69 29  array entry a(i)
2d730 0a 2a 2a 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c  .** is non-zero,
2d740 20 74 68 65 6e 20 72 65 61 64 69 6e 67 20 63 6f   then reading co
2d750 6c 75 6d 6e 20 61 28 69 29 2d 31 20 66 72 6f 6d  lumn a(i)-1 from
2d760 20 63 75 72 73 6f 72 20 50 33 20 69 73 20 0a 2a   cursor P3 is .*
2d770 2a 20 65 71 75 69 76 61 6c 65 6e 74 20 74 6f 20  * equivalent to 
2d780 70 65 72 66 6f 72 6d 69 6e 67 20 74 68 65 20 64  performing the d
2d790 65 66 65 72 72 65 64 20 73 65 65 6b 20 61 6e 64  eferred seek and
2d7a0 20 74 68 65 6e 20 72 65 61 64 69 6e 67 20 63 6f   then reading co
2d7b0 6c 75 6d 6e 20 69 20 0a 2a 2a 20 66 72 6f 6d 20  lumn i .** from 
2d7c0 50 31 2e 20 20 54 68 69 73 20 69 6e 66 6f 72 6d  P1.  This inform
2d7d0 61 74 69 6f 6e 20 69 73 20 73 74 6f 72 65 64 20  ation is stored 
2d7e0 69 6e 20 50 33 20 61 6e 64 20 75 73 65 64 20 74  in P3 and used t
2d7f0 6f 20 72 65 64 69 72 65 63 74 0a 2a 2a 20 72 65  o redirect.** re
2d800 61 64 73 20 61 67 61 69 6e 73 74 20 50 33 20 6f  ads against P3 o
2d810 76 65 72 20 74 6f 20 50 31 2c 20 74 68 75 73 20  ver to P1, thus 
2d820 70 6f 73 73 69 62 6c 79 20 61 76 6f 69 64 69 6e  possibly avoidin
2d830 67 20 74 68 65 20 6e 65 65 64 20 74 6f 0a 2a 2a  g the need to.**
2d840 20 73 65 65 6b 20 61 6e 64 20 72 65 61 64 20 63   seek and read c
2d850 75 72 73 6f 72 20 50 33 2e 0a 2a 2f 0a 2f 2a 20  ursor P3..*/./* 
2d860 4f 70 63 6f 64 65 3a 20 49 64 78 52 6f 77 69 64  Opcode: IdxRowid
2d870 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20   P1 P2 * * *.** 
2d880 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d  Synopsis: r[P2]=
2d890 72 6f 77 69 64 0a 2a 2a 0a 2a 2a 20 57 72 69 74  rowid.**.** Writ
2d8a0 65 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20  e into register 
2d8b0 50 32 20 61 6e 20 69 6e 74 65 67 65 72 20 77 68  P2 an integer wh
2d8c0 69 63 68 20 69 73 20 74 68 65 20 6c 61 73 74 20  ich is the last 
2d8d0 65 6e 74 72 79 20 69 6e 20 74 68 65 20 72 65 63  entry in the rec
2d8e0 6f 72 64 20 61 74 0a 2a 2a 20 74 68 65 20 65 6e  ord at.** the en
2d8f0 64 20 6f 66 20 74 68 65 20 69 6e 64 65 78 20 6b  d of the index k
2d900 65 79 20 70 6f 69 6e 74 65 64 20 74 6f 20 62 79  ey pointed to by
2d910 20 63 75 72 73 6f 72 20 50 31 2e 20 20 54 68 69   cursor P1.  Thi
2d920 73 20 69 6e 74 65 67 65 72 20 73 68 6f 75 6c 64  s integer should
2d930 20 62 65 0a 2a 2a 20 74 68 65 20 72 6f 77 69 64   be.** the rowid
2d940 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 65 6e   of the table en
2d950 74 72 79 20 74 6f 20 77 68 69 63 68 20 74 68 69  try to which thi
2d960 73 20 69 6e 64 65 78 20 65 6e 74 72 79 20 70 6f  s index entry po
2d970 69 6e 74 73 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20  ints..**.** See 
2d980 61 6c 73 6f 3a 20 52 6f 77 69 64 2c 20 4d 61 6b  also: Rowid, Mak
2d990 65 52 65 63 6f 72 64 2e 0a 2a 2f 0a 63 61 73 65  eRecord..*/.case
2d9a0 20 4f 50 5f 44 65 66 65 72 72 65 64 53 65 65 6b   OP_DeferredSeek
2d9b0 3a 0a 63 61 73 65 20 4f 50 5f 49 64 78 52 6f 77  :.case OP_IdxRow
2d9c0 69 64 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  id: {           
2d9d0 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20 20 56 64 62  /* out2 */.  Vdb
2d9e0 65 43 75 72 73 6f 72 20 2a 70 43 3b 20 20 20 20  eCursor *pC;    
2d9f0 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
2da00 50 31 20 69 6e 64 65 78 20 63 75 72 73 6f 72 20  P1 index cursor 
2da10 2a 2f 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20  */.  VdbeCursor 
2da20 2a 70 54 61 62 43 75 72 3b 20 20 20 20 20 20 20  *pTabCur;       
2da30 20 2f 2a 20 54 68 65 20 50 32 20 74 61 62 6c 65   /* The P2 table
2da40 20 63 75 72 73 6f 72 20 28 4f 50 5f 44 65 66 65   cursor (OP_Defe
2da50 72 72 65 64 53 65 65 6b 20 6f 6e 6c 79 29 20 2a  rredSeek only) *
2da60 2f 0a 20 20 69 36 34 20 72 6f 77 69 64 3b 20 20  /.  i64 rowid;  
2da70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2da80 2f 2a 20 52 6f 77 69 64 20 74 68 61 74 20 50 31  /* Rowid that P1
2da90 20 63 75 72 72 65 6e 74 20 70 6f 69 6e 74 73 20   current points 
2daa0 74 6f 20 2a 2f 0a 0a 20 20 61 73 73 65 72 74 28  to */..  assert(
2dab0 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70   pOp->p1>=0 && p
2dac0 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f  Op->p1<p->nCurso
2dad0 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61  r );.  pC = p->a
2dae0 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  pCsr[pOp->p1];. 
2daf0 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29   assert( pC!=0 )
2db00 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  ;.  assert( pC->
2db10 65 43 75 72 54 79 70 65 3d 3d 43 55 52 54 59 50  eCurType==CURTYP
2db20 45 5f 42 54 52 45 45 20 29 3b 0a 20 20 61 73 73  E_BTREE );.  ass
2db30 65 72 74 28 20 70 43 2d 3e 75 63 2e 70 43 75 72  ert( pC->uc.pCur
2db40 73 6f 72 21 3d 30 20 29 3b 0a 20 20 61 73 73 65  sor!=0 );.  asse
2db50 72 74 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 3d  rt( pC->isTable=
2db60 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
2db70 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65  pC->deferredMove
2db80 74 6f 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  to==0 );.  asser
2db90 74 28 20 21 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20  t( !pC->nullRow 
2dba0 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d  || pOp->opcode==
2dbb0 4f 50 5f 49 64 78 52 6f 77 69 64 20 29 3b 0a 0a  OP_IdxRowid );..
2dbc0 20 20 2f 2a 20 54 68 65 20 49 64 78 52 6f 77 69    /* The IdxRowi
2dbd0 64 20 61 6e 64 20 53 65 65 6b 20 6f 70 63 6f 64  d and Seek opcod
2dbe0 65 73 20 61 72 65 20 63 6f 6d 62 69 6e 65 64 20  es are combined 
2dbf0 62 65 63 61 75 73 65 20 6f 66 20 74 68 65 20 63  because of the c
2dc00 6f 6d 6d 6f 6e 61 6c 69 74 79 0a 20 20 2a 2a 20  ommonality.  ** 
2dc10 6f 66 20 73 71 6c 69 74 65 33 56 64 62 65 43 75  of sqlite3VdbeCu
2dc20 72 73 6f 72 52 65 73 74 6f 72 65 28 29 20 61 6e  rsorRestore() an
2dc30 64 20 73 71 6c 69 74 65 33 56 64 62 65 49 64 78  d sqlite3VdbeIdx
2dc40 52 6f 77 69 64 28 29 2e 20 2a 2f 0a 20 20 72 63  Rowid(). */.  rc
2dc50 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 43 75   = sqlite3VdbeCu
2dc60 72 73 6f 72 52 65 73 74 6f 72 65 28 70 43 29 3b  rsorRestore(pC);
2dc70 0a 0a 20 20 2f 2a 20 73 71 6c 69 74 65 33 56 62  ..  /* sqlite3Vb
2dc80 65 43 75 72 73 6f 72 52 65 73 74 6f 72 65 28 29  eCursorRestore()
2dc90 20 63 61 6e 20 6f 6e 6c 79 20 66 61 69 6c 20 69   can only fail i
2dca0 66 20 74 68 65 20 72 65 63 6f 72 64 20 68 61 73  f the record has
2dcb0 20 62 65 65 6e 20 64 65 6c 65 74 65 64 0a 20 20   been deleted.  
2dcc0 2a 2a 20 6f 75 74 20 66 72 6f 6d 20 75 6e 64 65  ** out from unde
2dcd0 72 20 74 68 65 20 63 75 72 73 6f 72 2e 20 20 54  r the cursor.  T
2dce0 68 61 74 20 77 69 6c 6c 20 6e 65 76 65 72 20 68  hat will never h
2dcf0 61 70 70 65 6e 73 20 66 6f 72 20 61 6e 20 49 64  appens for an Id
2dd00 78 52 6f 77 69 64 0a 20 20 2a 2a 20 6f 72 20 53  xRowid.  ** or S
2dd10 65 65 6b 20 6f 70 63 6f 64 65 20 2a 2f 0a 20 20  eek opcode */.  
2dd20 69 66 28 20 4e 45 56 45 52 28 72 63 21 3d 53 51  if( NEVER(rc!=SQ
2dd30 4c 49 54 45 5f 4f 4b 29 20 29 20 67 6f 74 6f 20  LITE_OK) ) goto 
2dd40 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
2dd50 6f 72 3b 0a 0a 20 20 69 66 28 20 21 70 43 2d 3e  or;..  if( !pC->
2dd60 6e 75 6c 6c 52 6f 77 20 29 7b 0a 20 20 20 20 72  nullRow ){.    r
2dd70 6f 77 69 64 20 3d 20 30 3b 20 20 2f 2a 20 4e 6f  owid = 0;  /* No
2dd80 74 20 6e 65 65 64 65 64 2e 20 20 4f 6e 6c 79 20  t needed.  Only 
2dd90 75 73 65 64 20 74 6f 20 73 69 6c 65 6e 63 65 20  used to silence 
2dda0 61 20 77 61 72 6e 69 6e 67 2e 20 2a 2f 0a 20 20  a warning. */.  
2ddb0 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64    rc = sqlite3Vd
2ddc0 62 65 49 64 78 52 6f 77 69 64 28 64 62 2c 20 70  beIdxRowid(db, p
2ddd0 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 2c 20 26  C->uc.pCursor, &
2dde0 72 6f 77 69 64 29 3b 0a 20 20 20 20 69 66 28 20  rowid);.    if( 
2ddf0 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b  rc!=SQLITE_OK ){
2de00 0a 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72  .      goto abor
2de10 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
2de20 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 70 4f      }.    if( pO
2de30 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 44 65  p->opcode==OP_De
2de40 66 65 72 72 65 64 53 65 65 6b 20 29 7b 0a 20 20  ferredSeek ){.  
2de50 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d      assert( pOp-
2de60 3e 70 33 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70  >p3>=0 && pOp->p
2de70 33 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a  3<p->nCursor );.
2de80 20 20 20 20 20 20 70 54 61 62 43 75 72 20 3d 20        pTabCur = 
2de90 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 33  p->apCsr[pOp->p3
2dea0 5d 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  ];.      assert(
2deb0 20 70 54 61 62 43 75 72 21 3d 30 20 29 3b 0a 20   pTabCur!=0 );. 
2dec0 20 20 20 20 20 61 73 73 65 72 74 28 20 70 54 61       assert( pTa
2ded0 62 43 75 72 2d 3e 65 43 75 72 54 79 70 65 3d 3d  bCur->eCurType==
2dee0 43 55 52 54 59 50 45 5f 42 54 52 45 45 20 29 3b  CURTYPE_BTREE );
2def0 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70  .      assert( p
2df00 54 61 62 43 75 72 2d 3e 75 63 2e 70 43 75 72 73  TabCur->uc.pCurs
2df10 6f 72 21 3d 30 20 29 3b 0a 20 20 20 20 20 20 61  or!=0 );.      a
2df20 73 73 65 72 74 28 20 70 54 61 62 43 75 72 2d 3e  ssert( pTabCur->
2df30 69 73 54 61 62 6c 65 20 29 3b 0a 20 20 20 20 20  isTable );.     
2df40 20 70 54 61 62 43 75 72 2d 3e 6e 75 6c 6c 52 6f   pTabCur->nullRo
2df50 77 20 3d 20 30 3b 0a 20 20 20 20 20 20 70 54 61  w = 0;.      pTa
2df60 62 43 75 72 2d 3e 6d 6f 76 65 74 6f 54 61 72 67  bCur->movetoTarg
2df70 65 74 20 3d 20 72 6f 77 69 64 3b 0a 20 20 20 20  et = rowid;.    
2df80 20 20 70 54 61 62 43 75 72 2d 3e 64 65 66 65 72    pTabCur->defer
2df90 72 65 64 4d 6f 76 65 74 6f 20 3d 20 31 3b 0a 20  redMoveto = 1;. 
2dfa0 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70       assert( pOp
2dfb0 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54  ->p4type==P4_INT
2dfc0 41 52 52 41 59 20 7c 7c 20 70 4f 70 2d 3e 70 34  ARRAY || pOp->p4
2dfd0 2e 61 69 3d 3d 30 20 29 3b 0a 20 20 20 20 20 20  .ai==0 );.      
2dfe0 70 54 61 62 43 75 72 2d 3e 61 41 6c 74 4d 61 70  pTabCur->aAltMap
2dff0 20 3d 20 70 4f 70 2d 3e 70 34 2e 61 69 3b 0a 20   = pOp->p4.ai;. 
2e000 20 20 20 20 20 70 54 61 62 43 75 72 2d 3e 70 41       pTabCur->pA
2e010 6c 74 43 75 72 73 6f 72 20 3d 20 70 43 3b 0a 20  ltCursor = pC;. 
2e020 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
2e030 70 4f 75 74 20 3d 20 6f 75 74 32 50 72 65 72 65  pOut = out2Prere
2e040 6c 65 61 73 65 28 70 2c 20 70 4f 70 29 3b 0a 20  lease(p, pOp);. 
2e050 20 20 20 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d       pOut->u.i =
2e060 20 72 6f 77 69 64 3b 0a 20 20 20 20 7d 0a 20 20   rowid;.    }.  
2e070 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73 73 65 72  }else{.    asser
2e080 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d  t( pOp->opcode==
2e090 4f 50 5f 49 64 78 52 6f 77 69 64 20 29 3b 0a 20  OP_IdxRowid );. 
2e0a0 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
2e0b0 6d 53 65 74 4e 75 6c 6c 28 26 61 4d 65 6d 5b 70  mSetNull(&aMem[p
2e0c0 4f 70 2d 3e 70 32 5d 29 3b 0a 20 20 7d 0a 20 20  Op->p2]);.  }.  
2e0d0 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
2e0e0 6f 64 65 3a 20 49 64 78 47 45 20 50 31 20 50 32  ode: IdxGE P1 P2
2e0f0 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e   P3 P4 P5.** Syn
2e100 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50 33 40  opsis: key=r[P3@
2e110 50 34 5d 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 34  P4].**.** The P4
2e120 20 72 65 67 69 73 74 65 72 20 76 61 6c 75 65 73   register values
2e130 20 62 65 67 69 6e 6e 69 6e 67 20 77 69 74 68 20   beginning with 
2e140 50 33 20 66 6f 72 6d 20 61 6e 20 75 6e 70 61 63  P3 form an unpac
2e150 6b 65 64 20 69 6e 64 65 78 20 0a 2a 2a 20 6b 65  ked index .** ke
2e160 79 20 74 68 61 74 20 6f 6d 69 74 73 20 74 68 65  y that omits the
2e170 20 50 52 49 4d 41 52 59 20 4b 45 59 2e 20 20 43   PRIMARY KEY.  C
2e180 6f 6d 70 61 72 65 20 74 68 69 73 20 6b 65 79 20  ompare this key 
2e190 76 61 6c 75 65 20 61 67 61 69 6e 73 74 20 74 68  value against th
2e1a0 65 20 69 6e 64 65 78 20 0a 2a 2a 20 74 68 61 74  e index .** that
2e1b0 20 50 31 20 69 73 20 63 75 72 72 65 6e 74 6c 79   P1 is currently
2e1c0 20 70 6f 69 6e 74 69 6e 67 20 74 6f 2c 20 69 67   pointing to, ig
2e1d0 6e 6f 72 69 6e 67 20 74 68 65 20 50 52 49 4d 41  noring the PRIMA
2e1e0 52 59 20 4b 45 59 20 6f 72 20 52 4f 57 49 44 20  RY KEY or ROWID 
2e1f0 0a 2a 2a 20 66 69 65 6c 64 73 20 61 74 20 74 68  .** fields at th
2e200 65 20 65 6e 64 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  e end..**.** If 
2e210 74 68 65 20 50 31 20 69 6e 64 65 78 20 65 6e 74  the P1 index ent
2e220 72 79 20 69 73 20 67 72 65 61 74 65 72 20 74 68  ry is greater th
2e230 61 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f 20 74  an or equal to t
2e240 68 65 20 6b 65 79 20 76 61 6c 75 65 0a 2a 2a 20  he key value.** 
2e250 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20 50 32 2e  then jump to P2.
2e260 20 20 4f 74 68 65 72 77 69 73 65 20 66 61 6c 6c    Otherwise fall
2e270 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20   through to the 
2e280 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e  next instruction
2e290 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ..*/./* Opcode: 
2e2a0 49 64 78 47 54 20 50 31 20 50 32 20 50 33 20 50  IdxGT P1 P2 P3 P
2e2b0 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73  4 P5.** Synopsis
2e2c0 3a 20 6b 65 79 3d 72 5b 50 33 40 50 34 5d 0a 2a  : key=r[P3@P4].*
2e2d0 2a 0a 2a 2a 20 54 68 65 20 50 34 20 72 65 67 69  *.** The P4 regi
2e2e0 73 74 65 72 20 76 61 6c 75 65 73 20 62 65 67 69  ster values begi
2e2f0 6e 6e 69 6e 67 20 77 69 74 68 20 50 33 20 66 6f  nning with P3 fo
2e300 72 6d 20 61 6e 20 75 6e 70 61 63 6b 65 64 20 69  rm an unpacked i
2e310 6e 64 65 78 20 0a 2a 2a 20 6b 65 79 20 74 68 61  ndex .** key tha
2e320 74 20 6f 6d 69 74 73 20 74 68 65 20 50 52 49 4d  t omits the PRIM
2e330 41 52 59 20 4b 45 59 2e 20 20 43 6f 6d 70 61 72  ARY KEY.  Compar
2e340 65 20 74 68 69 73 20 6b 65 79 20 76 61 6c 75 65  e this key value
2e350 20 61 67 61 69 6e 73 74 20 74 68 65 20 69 6e 64   against the ind
2e360 65 78 20 0a 2a 2a 20 74 68 61 74 20 50 31 20 69  ex .** that P1 i
2e370 73 20 63 75 72 72 65 6e 74 6c 79 20 70 6f 69 6e  s currently poin
2e380 74 69 6e 67 20 74 6f 2c 20 69 67 6e 6f 72 69 6e  ting to, ignorin
2e390 67 20 74 68 65 20 50 52 49 4d 41 52 59 20 4b 45  g the PRIMARY KE
2e3a0 59 20 6f 72 20 52 4f 57 49 44 20 0a 2a 2a 20 66  Y or ROWID .** f
2e3b0 69 65 6c 64 73 20 61 74 20 74 68 65 20 65 6e 64  ields at the end
2e3c0 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 50  ..**.** If the P
2e3d0 31 20 69 6e 64 65 78 20 65 6e 74 72 79 20 69 73  1 index entry is
2e3e0 20 67 72 65 61 74 65 72 20 74 68 61 6e 20 74 68   greater than th
2e3f0 65 20 6b 65 79 20 76 61 6c 75 65 0a 2a 2a 20 74  e key value.** t
2e400 68 65 6e 20 6a 75 6d 70 20 74 6f 20 50 32 2e 20  hen jump to P2. 
2e410 20 4f 74 68 65 72 77 69 73 65 20 66 61 6c 6c 20   Otherwise fall 
2e420 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6e  through to the n
2e430 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e  ext instruction.
2e440 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49  .*/./* Opcode: I
2e450 64 78 4c 54 20 50 31 20 50 32 20 50 33 20 50 34  dxLT P1 P2 P3 P4
2e460 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a   P5.** Synopsis:
2e470 20 6b 65 79 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a   key=r[P3@P4].**
2e480 0a 2a 2a 20 54 68 65 20 50 34 20 72 65 67 69 73  .** The P4 regis
2e490 74 65 72 20 76 61 6c 75 65 73 20 62 65 67 69 6e  ter values begin
2e4a0 6e 69 6e 67 20 77 69 74 68 20 50 33 20 66 6f 72  ning with P3 for
2e4b0 6d 20 61 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e  m an unpacked in
2e4c0 64 65 78 20 0a 2a 2a 20 6b 65 79 20 74 68 61 74  dex .** key that
2e4d0 20 6f 6d 69 74 73 20 74 68 65 20 50 52 49 4d 41   omits the PRIMA
2e4e0 52 59 20 4b 45 59 20 6f 72 20 52 4f 57 49 44 2e  RY KEY or ROWID.
2e4f0 20 20 43 6f 6d 70 61 72 65 20 74 68 69 73 20 6b    Compare this k
2e500 65 79 20 76 61 6c 75 65 20 61 67 61 69 6e 73 74  ey value against
2e510 0a 2a 2a 20 74 68 65 20 69 6e 64 65 78 20 74 68  .** the index th
2e520 61 74 20 50 31 20 69 73 20 63 75 72 72 65 6e 74  at P1 is current
2e530 6c 79 20 70 6f 69 6e 74 69 6e 67 20 74 6f 2c 20  ly pointing to, 
2e540 69 67 6e 6f 72 69 6e 67 20 74 68 65 20 50 52 49  ignoring the PRI
2e550 4d 41 52 59 20 4b 45 59 20 6f 72 0a 2a 2a 20 52  MARY KEY or.** R
2e560 4f 57 49 44 20 6f 6e 20 74 68 65 20 50 31 20 69  OWID on the P1 i
2e570 6e 64 65 78 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74  ndex..**.** If t
2e580 68 65 20 50 31 20 69 6e 64 65 78 20 65 6e 74 72  he P1 index entr
2e590 79 20 69 73 20 6c 65 73 73 20 74 68 61 6e 20 74  y is less than t
2e5a0 68 65 20 6b 65 79 20 76 61 6c 75 65 20 74 68 65  he key value the
2e5b0 6e 20 6a 75 6d 70 20 74 6f 20 50 32 2e 0a 2a 2a  n jump to P2..**
2e5c0 20 4f 74 68 65 72 77 69 73 65 20 66 61 6c 6c 20   Otherwise fall 
2e5d0 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6e  through to the n
2e5e0 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e  ext instruction.
2e5f0 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49  .*/./* Opcode: I
2e600 64 78 4c 45 20 50 31 20 50 32 20 50 33 20 50 34  dxLE P1 P2 P3 P4
2e610 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a   P5.** Synopsis:
2e620 20 6b 65 79 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a   key=r[P3@P4].**
2e630 0a 2a 2a 20 54 68 65 20 50 34 20 72 65 67 69 73  .** The P4 regis
2e640 74 65 72 20 76 61 6c 75 65 73 20 62 65 67 69 6e  ter values begin
2e650 6e 69 6e 67 20 77 69 74 68 20 50 33 20 66 6f 72  ning with P3 for
2e660 6d 20 61 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e  m an unpacked in
2e670 64 65 78 20 0a 2a 2a 20 6b 65 79 20 74 68 61 74  dex .** key that
2e680 20 6f 6d 69 74 73 20 74 68 65 20 50 52 49 4d 41   omits the PRIMA
2e690 52 59 20 4b 45 59 20 6f 72 20 52 4f 57 49 44 2e  RY KEY or ROWID.
2e6a0 20 20 43 6f 6d 70 61 72 65 20 74 68 69 73 20 6b    Compare this k
2e6b0 65 79 20 76 61 6c 75 65 20 61 67 61 69 6e 73 74  ey value against
2e6c0 0a 2a 2a 20 74 68 65 20 69 6e 64 65 78 20 74 68  .** the index th
2e6d0 61 74 20 50 31 20 69 73 20 63 75 72 72 65 6e 74  at P1 is current
2e6e0 6c 79 20 70 6f 69 6e 74 69 6e 67 20 74 6f 2c 20  ly pointing to, 
2e6f0 69 67 6e 6f 72 69 6e 67 20 74 68 65 20 50 52 49  ignoring the PRI
2e700 4d 41 52 59 20 4b 45 59 20 6f 72 0a 2a 2a 20 52  MARY KEY or.** R
2e710 4f 57 49 44 20 6f 6e 20 74 68 65 20 50 31 20 69  OWID on the P1 i
2e720 6e 64 65 78 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74  ndex..**.** If t
2e730 68 65 20 50 31 20 69 6e 64 65 78 20 65 6e 74 72  he P1 index entr
2e740 79 20 69 73 20 6c 65 73 73 20 74 68 61 6e 20 6f  y is less than o
2e750 72 20 65 71 75 61 6c 20 74 6f 20 74 68 65 20 6b  r equal to the k
2e760 65 79 20 76 61 6c 75 65 20 74 68 65 6e 20 6a 75  ey value then ju
2e770 6d 70 0a 2a 2a 20 74 6f 20 50 32 2e 20 4f 74 68  mp.** to P2. Oth
2e780 65 72 77 69 73 65 20 66 61 6c 6c 20 74 68 72 6f  erwise fall thro
2e790 75 67 68 20 74 6f 20 74 68 65 20 6e 65 78 74 20  ugh to the next 
2e7a0 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a  instruction..*/.
2e7b0 63 61 73 65 20 4f 50 5f 49 64 78 4c 45 3a 20 20  case OP_IdxLE:  
2e7c0 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20          /* jump 
2e7d0 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 64 78 47 54  */.case OP_IdxGT
2e7e0 3a 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75  :          /* ju
2e7f0 6d 70 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 64  mp */.case OP_Id
2e800 78 4c 54 3a 20 20 20 20 20 20 20 20 20 20 2f 2a  xLT:          /*
2e810 20 6a 75 6d 70 20 2a 2f 0a 63 61 73 65 20 4f 50   jump */.case OP
2e820 5f 49 64 78 47 45 3a 20 20 7b 20 20 20 20 20 20  _IdxGE:  {      
2e830 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 56 64   /* jump */.  Vd
2e840 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20  beCursor *pC;.  
2e850 69 6e 74 20 72 65 73 3b 0a 20 20 55 6e 70 61 63  int res;.  Unpac
2e860 6b 65 64 52 65 63 6f 72 64 20 72 3b 0a 0a 20 20  kedRecord r;..  
2e870 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
2e880 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d  =0 && pOp->p1<p-
2e890 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43  >nCursor );.  pC
2e8a0 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d   = p->apCsr[pOp-
2e8b0 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p1];.  assert( 
2e8c0 70 43 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  pC!=0 );.  asser
2e8d0 74 28 20 70 43 2d 3e 69 73 4f 72 64 65 72 65 64  t( pC->isOrdered
2e8e0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43   );.  assert( pC
2e8f0 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43 55 52 54  ->eCurType==CURT
2e900 59 50 45 5f 42 54 52 45 45 20 29 3b 0a 20 20 61  YPE_BTREE );.  a
2e910 73 73 65 72 74 28 20 70 43 2d 3e 75 63 2e 70 43  ssert( pC->uc.pC
2e920 75 72 73 6f 72 21 3d 30 29 3b 0a 20 20 61 73 73  ursor!=0);.  ass
2e930 65 72 74 28 20 70 43 2d 3e 64 65 66 65 72 72 65  ert( pC->deferre
2e940 64 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a 20 20  dMoveto==0 );.  
2e950 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 35 3d  assert( pOp->p5=
2e960 3d 30 20 7c 7c 20 70 4f 70 2d 3e 70 35 3d 3d 31  =0 || pOp->p5==1
2e970 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   );.  assert( pO
2e980 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e  p->p4type==P4_IN
2e990 54 33 32 20 29 3b 0a 20 20 72 2e 70 4b 65 79 49  T32 );.  r.pKeyI
2e9a0 6e 66 6f 20 3d 20 70 43 2d 3e 70 4b 65 79 49 6e  nfo = pC->pKeyIn
2e9b0 66 6f 3b 0a 20 20 72 2e 6e 46 69 65 6c 64 20 3d  fo;.  r.nField =
2e9c0 20 28 75 31 36 29 70 4f 70 2d 3e 70 34 2e 69 3b   (u16)pOp->p4.i;
2e9d0 0a 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f  .  if( pOp->opco
2e9e0 64 65 3c 4f 50 5f 49 64 78 4c 54 20 29 7b 0a 20  de<OP_IdxLT ){. 
2e9f0 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e     assert( pOp->
2ea00 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 64 78 4c 45  opcode==OP_IdxLE
2ea10 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d   || pOp->opcode=
2ea20 3d 4f 50 5f 49 64 78 47 54 20 29 3b 0a 20 20 20  =OP_IdxGT );.   
2ea30 20 72 2e 64 65 66 61 75 6c 74 5f 72 63 20 3d 20   r.default_rc = 
2ea40 2d 31 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  -1;.  }else{.   
2ea50 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70   assert( pOp->op
2ea60 63 6f 64 65 3d 3d 4f 50 5f 49 64 78 47 45 20 7c  code==OP_IdxGE |
2ea70 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f  | pOp->opcode==O
2ea80 50 5f 49 64 78 4c 54 20 29 3b 0a 20 20 20 20 72  P_IdxLT );.    r
2ea90 2e 64 65 66 61 75 6c 74 5f 72 63 20 3d 20 30 3b  .default_rc = 0;
2eaa0 0a 20 20 7d 0a 20 20 72 2e 61 4d 65 6d 20 3d 20  .  }.  r.aMem = 
2eab0 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a  &aMem[pOp->p3];.
2eac0 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45  #ifdef SQLITE_DE
2ead0 42 55 47 0a 20 20 7b 0a 20 20 20 20 69 6e 74 20  BUG.  {.    int 
2eae0 69 3b 0a 20 20 20 20 66 6f 72 28 69 3d 30 3b 20  i;.    for(i=0; 
2eaf0 69 3c 72 2e 6e 46 69 65 6c 64 3b 20 69 2b 2b 29  i<r.nField; i++)
2eb00 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  {.      assert( 
2eb10 6d 65 6d 49 73 56 61 6c 69 64 28 26 72 2e 61 4d  memIsValid(&r.aM
2eb20 65 6d 5b 69 5d 29 20 29 3b 0a 20 20 20 20 20 20  em[i]) );.      
2eb30 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70  REGISTER_TRACE(p
2eb40 4f 70 2d 3e 70 33 2b 69 2c 20 26 61 4d 65 6d 5b  Op->p3+i, &aMem[
2eb50 70 4f 70 2d 3e 70 33 2b 69 5d 29 3b 0a 20 20 20  pOp->p3+i]);.   
2eb60 20 7d 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20   }.  }.#endif.  
2eb70 72 65 73 20 3d 20 30 3b 20 20 2f 2a 20 4e 6f 74  res = 0;  /* Not
2eb80 20 6e 65 65 64 65 64 2e 20 20 4f 6e 6c 79 20 75   needed.  Only u
2eb90 73 65 64 20 74 6f 20 73 69 6c 65 6e 63 65 20 61  sed to silence a
2eba0 20 77 61 72 6e 69 6e 67 2e 20 2a 2f 0a 20 20 72   warning. */.  r
2ebb0 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 49  c = sqlite3VdbeI
2ebc0 64 78 4b 65 79 43 6f 6d 70 61 72 65 28 64 62 2c  dxKeyCompare(db,
2ebd0 20 70 43 2c 20 26 72 2c 20 26 72 65 73 29 3b 0a   pC, &r, &res);.
2ebe0 20 20 61 73 73 65 72 74 28 20 28 4f 50 5f 49 64    assert( (OP_Id
2ebf0 78 4c 45 26 31 29 3d 3d 28 4f 50 5f 49 64 78 4c  xLE&1)==(OP_IdxL
2ec00 54 26 31 29 20 26 26 20 28 4f 50 5f 49 64 78 47  T&1) && (OP_IdxG
2ec10 45 26 31 29 3d 3d 28 4f 50 5f 49 64 78 47 54 26  E&1)==(OP_IdxGT&
2ec20 31 29 20 29 3b 0a 20 20 69 66 28 20 28 70 4f 70  1) );.  if( (pOp
2ec30 2d 3e 6f 70 63 6f 64 65 26 31 29 3d 3d 28 4f 50  ->opcode&1)==(OP
2ec40 5f 49 64 78 4c 54 26 31 29 20 29 7b 0a 20 20 20  _IdxLT&1) ){.   
2ec50 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70   assert( pOp->op
2ec60 63 6f 64 65 3d 3d 4f 50 5f 49 64 78 4c 45 20 7c  code==OP_IdxLE |
2ec70 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f  | pOp->opcode==O
2ec80 50 5f 49 64 78 4c 54 20 29 3b 0a 20 20 20 20 72  P_IdxLT );.    r
2ec90 65 73 20 3d 20 2d 72 65 73 3b 0a 20 20 7d 65 6c  es = -res;.  }el
2eca0 73 65 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20  se{.    assert( 
2ecb0 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  pOp->opcode==OP_
2ecc0 49 64 78 47 45 20 7c 7c 20 70 4f 70 2d 3e 6f 70  IdxGE || pOp->op
2ecd0 63 6f 64 65 3d 3d 4f 50 5f 49 64 78 47 54 20 29  code==OP_IdxGT )
2ece0 3b 0a 20 20 20 20 72 65 73 2b 2b 3b 0a 20 20 7d  ;.    res++;.  }
2ecf0 0a 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b  .  VdbeBranchTak
2ed00 65 6e 28 72 65 73 3e 30 2c 32 29 3b 0a 20 20 69  en(res>0,2);.  i
2ed10 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f  f( rc ) goto abo
2ed20 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
2ed30 0a 20 20 69 66 28 20 72 65 73 3e 30 20 29 20 67  .  if( res>0 ) g
2ed40 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a  oto jump_to_p2;.
2ed50 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
2ed60 70 63 6f 64 65 3a 20 44 65 73 74 72 6f 79 20 50  pcode: Destroy P
2ed70 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a  1 P2 P3 * *.**.*
2ed80 2a 20 44 65 6c 65 74 65 20 61 6e 20 65 6e 74 69  * Delete an enti
2ed90 72 65 20 64 61 74 61 62 61 73 65 20 74 61 62 6c  re database tabl
2eda0 65 20 6f 72 20 69 6e 64 65 78 20 77 68 6f 73 65  e or index whose
2edb0 20 72 6f 6f 74 20 70 61 67 65 20 69 6e 20 74 68   root page in th
2edc0 65 20 64 61 74 61 62 61 73 65 0a 2a 2a 20 66 69  e database.** fi
2edd0 6c 65 20 69 73 20 67 69 76 65 6e 20 62 79 20 50  le is given by P
2ede0 31 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 74 61 62  1..**.** The tab
2edf0 6c 65 20 62 65 69 6e 67 20 64 65 73 74 72 6f 79  le being destroy
2ee00 65 64 20 69 73 20 69 6e 20 74 68 65 20 6d 61 69  ed is in the mai
2ee10 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  n database file 
2ee20 69 66 20 50 33 3d 3d 30 2e 20 20 49 66 0a 2a 2a  if P3==0.  If.**
2ee30 20 50 33 3d 3d 31 20 74 68 65 6e 20 74 68 65 20   P3==1 then the 
2ee40 74 61 62 6c 65 20 74 6f 20 62 65 20 63 6c 65 61  table to be clea
2ee50 72 20 69 73 20 69 6e 20 74 68 65 20 61 75 78 69  r is in the auxi
2ee60 6c 69 61 72 79 20 64 61 74 61 62 61 73 65 20 66  liary database f
2ee70 69 6c 65 0a 2a 2a 20 74 68 61 74 20 69 73 20 75  ile.** that is u
2ee80 73 65 64 20 74 6f 20 73 74 6f 72 65 20 74 61 62  sed to store tab
2ee90 6c 65 73 20 63 72 65 61 74 65 20 75 73 69 6e 67  les create using
2eea0 20 43 52 45 41 54 45 20 54 45 4d 50 4f 52 41 52   CREATE TEMPORAR
2eeb0 59 20 54 41 42 4c 45 2e 0a 2a 2a 0a 2a 2a 20 49  Y TABLE..**.** I
2eec0 66 20 41 55 54 4f 56 41 43 55 55 4d 20 69 73 20  f AUTOVACUUM is 
2eed0 65 6e 61 62 6c 65 64 20 74 68 65 6e 20 69 74 20  enabled then it 
2eee0 69 73 20 70 6f 73 73 69 62 6c 65 20 74 68 61 74  is possible that
2eef0 20 61 6e 6f 74 68 65 72 20 72 6f 6f 74 20 70 61   another root pa
2ef00 67 65 0a 2a 2a 20 6d 69 67 68 74 20 62 65 20 6d  ge.** might be m
2ef10 6f 76 65 64 20 69 6e 74 6f 20 74 68 65 20 6e 65  oved into the ne
2ef20 77 6c 79 20 64 65 6c 65 74 65 64 20 72 6f 6f 74  wly deleted root
2ef30 20 70 61 67 65 20 69 6e 20 6f 72 64 65 72 20 74   page in order t
2ef40 6f 20 6b 65 65 70 20 61 6c 6c 0a 2a 2a 20 72 6f  o keep all.** ro
2ef50 6f 74 20 70 61 67 65 73 20 63 6f 6e 74 69 67 75  ot pages contigu
2ef60 6f 75 73 20 61 74 20 74 68 65 20 62 65 67 69 6e  ous at the begin
2ef70 6e 69 6e 67 20 6f 66 20 74 68 65 20 64 61 74 61  ning of the data
2ef80 62 61 73 65 2e 20 20 54 68 65 20 66 6f 72 6d 65  base.  The forme
2ef90 72 0a 2a 2a 20 76 61 6c 75 65 20 6f 66 20 74 68  r.** value of th
2efa0 65 20 72 6f 6f 74 20 70 61 67 65 20 74 68 61 74  e root page that
2efb0 20 6d 6f 76 65 64 20 2d 20 69 74 73 20 76 61 6c   moved - its val
2efc0 75 65 20 62 65 66 6f 72 65 20 74 68 65 20 6d 6f  ue before the mo
2efd0 76 65 20 6f 63 63 75 72 72 65 64 20 2d 0a 2a 2a  ve occurred -.**
2efe0 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 72 65   is stored in re
2eff0 67 69 73 74 65 72 20 50 32 2e 20 49 66 20 6e 6f  gister P2. If no
2f000 20 70 61 67 65 20 6d 6f 76 65 6d 65 6e 74 20 77   page movement w
2f010 61 73 20 72 65 71 75 69 72 65 64 20 28 62 65 63  as required (bec
2f020 61 75 73 65 20 74 68 65 0a 2a 2a 20 74 61 62 6c  ause the.** tabl
2f030 65 20 62 65 69 6e 67 20 64 72 6f 70 70 65 64 20  e being dropped 
2f040 77 61 73 20 61 6c 72 65 61 64 79 20 74 68 65 20  was already the 
2f050 6c 61 73 74 20 6f 6e 65 20 69 6e 20 74 68 65 20  last one in the 
2f060 64 61 74 61 62 61 73 65 29 20 74 68 65 6e 20 61  database) then a
2f070 20 0a 2a 2a 20 7a 65 72 6f 20 69 73 20 73 74 6f   .** zero is sto
2f080 72 65 64 20 69 6e 20 72 65 67 69 73 74 65 72 20  red in register 
2f090 50 32 2e 20 20 49 66 20 41 55 54 4f 56 41 43 55  P2.  If AUTOVACU
2f0a0 55 4d 20 69 73 20 64 69 73 61 62 6c 65 64 20 74  UM is disabled t
2f0b0 68 65 6e 20 61 20 7a 65 72 6f 20 0a 2a 2a 20 69  hen a zero .** i
2f0c0 73 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69  s stored in regi
2f0d0 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54  ster P2..**.** T
2f0e0 68 69 73 20 6f 70 63 6f 64 65 20 74 68 72 6f 77  his opcode throw
2f0f0 73 20 61 6e 20 65 72 72 6f 72 20 69 66 20 74 68  s an error if th
2f100 65 72 65 20 61 72 65 20 61 6e 79 20 61 63 74 69  ere are any acti
2f110 76 65 20 72 65 61 64 65 72 20 56 4d 73 20 77 68  ve reader VMs wh
2f120 65 6e 0a 2a 2a 20 69 74 20 69 73 20 69 6e 76 6f  en.** it is invo
2f130 6b 65 64 2e 20 54 68 69 73 20 69 73 20 64 6f 6e  ked. This is don
2f140 65 20 74 6f 20 61 76 6f 69 64 20 74 68 65 20 64  e to avoid the d
2f150 69 66 66 69 63 75 6c 74 79 20 61 73 73 6f 63 69  ifficulty associ
2f160 61 74 65 64 20 77 69 74 68 20 0a 2a 2a 20 75 70  ated with .** up
2f170 64 61 74 69 6e 67 20 65 78 69 73 74 69 6e 67 20  dating existing 
2f180 63 75 72 73 6f 72 73 20 77 68 65 6e 20 61 20 72  cursors when a r
2f190 6f 6f 74 20 70 61 67 65 20 69 73 20 6d 6f 76 65  oot page is move
2f1a0 64 20 69 6e 20 61 6e 20 41 55 54 4f 56 41 43 55  d in an AUTOVACU
2f1b0 55 4d 20 0a 2a 2a 20 64 61 74 61 62 61 73 65 2e  UM .** database.
2f1c0 20 54 68 69 73 20 65 72 72 6f 72 20 69 73 20 74   This error is t
2f1d0 68 72 6f 77 6e 20 65 76 65 6e 20 69 66 20 74 68  hrown even if th
2f1e0 65 20 64 61 74 61 62 61 73 65 20 69 73 20 6e 6f  e database is no
2f1f0 74 20 61 6e 20 41 55 54 4f 56 41 43 55 55 4d 20  t an AUTOVACUUM 
2f200 0a 2a 2a 20 64 62 20 69 6e 20 6f 72 64 65 72 20  .** db in order 
2f210 74 6f 20 61 76 6f 69 64 20 69 6e 74 72 6f 64 75  to avoid introdu
2f220 63 69 6e 67 20 61 6e 20 69 6e 63 6f 6d 70 61 74  cing an incompat
2f230 69 62 69 6c 69 74 79 20 62 65 74 77 65 65 6e 20  ibility between 
2f240 61 75 74 6f 76 61 63 75 75 6d 20 0a 2a 2a 20 61  autovacuum .** a
2f250 6e 64 20 6e 6f 6e 2d 61 75 74 6f 76 61 63 75 75  nd non-autovacuu
2f260 6d 20 6d 6f 64 65 73 2e 0a 2a 2a 0a 2a 2a 20 53  m modes..**.** S
2f270 65 65 20 61 6c 73 6f 3a 20 43 6c 65 61 72 0a 2a  ee also: Clear.*
2f280 2f 0a 63 61 73 65 20 4f 50 5f 44 65 73 74 72 6f  /.case OP_Destro
2f290 79 3a 20 7b 20 20 20 20 20 2f 2a 20 6f 75 74 32  y: {     /* out2
2f2a0 20 2a 2f 0a 20 20 69 6e 74 20 69 4d 6f 76 65 64   */.  int iMoved
2f2b0 3b 0a 20 20 69 6e 74 20 69 44 62 3b 0a 0a 20 20  ;.  int iDb;..  
2f2c0 73 71 6c 69 74 65 33 56 64 62 65 49 6e 63 72 57  sqlite3VdbeIncrW
2f2d0 72 69 74 65 43 6f 75 6e 74 65 72 28 70 2c 20 30  riteCounter(p, 0
2f2e0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e  );.  assert( p->
2f2f0 72 65 61 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 20  readOnly==0 );. 
2f300 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
2f310 3e 31 20 29 3b 0a 20 20 70 4f 75 74 20 3d 20 6f  >1 );.  pOut = o
2f320 75 74 32 50 72 65 72 65 6c 65 61 73 65 28 70 2c  ut2Prerelease(p,
2f330 20 70 4f 70 29 3b 0a 20 20 70 4f 75 74 2d 3e 66   pOp);.  pOut->f
2f340 6c 61 67 73 20 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b  lags = MEM_Null;
2f350 0a 20 20 69 66 28 20 64 62 2d 3e 6e 56 64 62 65  .  if( db->nVdbe
2f360 52 65 61 64 20 3e 20 64 62 2d 3e 6e 56 44 65 73  Read > db->nVDes
2f370 74 72 6f 79 2b 31 20 29 7b 0a 20 20 20 20 72 63  troy+1 ){.    rc
2f380 20 3d 20 53 51 4c 49 54 45 5f 4c 4f 43 4b 45 44   = SQLITE_LOCKED
2f390 3b 0a 20 20 20 20 70 2d 3e 65 72 72 6f 72 41 63  ;.    p->errorAc
2f3a0 74 69 6f 6e 20 3d 20 4f 45 5f 41 62 6f 72 74 3b  tion = OE_Abort;
2f3b0 0a 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f  .    goto abort_
2f3c0 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
2f3d0 7d 65 6c 73 65 7b 0a 20 20 20 20 69 44 62 20 3d  }else{.    iDb =
2f3e0 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 20 20 61 73   pOp->p3;.    as
2f3f0 73 65 72 74 28 20 44 62 4d 61 73 6b 54 65 73 74  sert( DbMaskTest
2f400 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b 2c 20 69  (p->btreeMask, i
2f410 44 62 29 20 29 3b 0a 20 20 20 20 69 4d 6f 76 65  Db) );.    iMove
2f420 64 20 3d 20 30 3b 20 20 2f 2a 20 4e 6f 74 20 6e  d = 0;  /* Not n
2f430 65 65 64 65 64 2e 20 20 4f 6e 6c 79 20 74 6f 20  eeded.  Only to 
2f440 73 69 6c 65 6e 63 65 20 61 20 77 61 72 6e 69 6e  silence a warnin
2f450 67 2e 20 2a 2f 0a 20 20 20 20 72 63 20 3d 20 73  g. */.    rc = s
2f460 71 6c 69 74 65 33 42 74 72 65 65 44 72 6f 70 54  qlite3BtreeDropT
2f470 61 62 6c 65 28 64 62 2d 3e 61 44 62 5b 69 44 62  able(db->aDb[iDb
2f480 5d 2e 70 42 74 2c 20 70 4f 70 2d 3e 70 31 2c 20  ].pBt, pOp->p1, 
2f490 26 69 4d 6f 76 65 64 29 3b 0a 20 20 20 20 70 4f  &iMoved);.    pO
2f4a0 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f  ut->flags = MEM_
2f4b0 49 6e 74 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 75  Int;.    pOut->u
2f4c0 2e 69 20 3d 20 69 4d 6f 76 65 64 3b 0a 20 20 20  .i = iMoved;.   
2f4d0 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61   if( rc ) goto a
2f4e0 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
2f4f0 72 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  r;.#ifndef SQLIT
2f500 45 5f 4f 4d 49 54 5f 41 55 54 4f 56 41 43 55 55  E_OMIT_AUTOVACUU
2f510 4d 0a 20 20 20 20 69 66 28 20 69 4d 6f 76 65 64  M.    if( iMoved
2f520 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 73 71 6c  !=0 ){.      sql
2f530 69 74 65 33 52 6f 6f 74 50 61 67 65 4d 6f 76 65  ite3RootPageMove
2f540 64 28 64 62 2c 20 69 44 62 2c 20 69 4d 6f 76 65  d(db, iDb, iMove
2f550 64 2c 20 70 4f 70 2d 3e 70 31 29 3b 0a 20 20 20  d, pOp->p1);.   
2f560 20 20 20 2f 2a 20 41 6c 6c 20 4f 50 5f 44 65 73     /* All OP_Des
2f570 74 72 6f 79 20 6f 70 65 72 61 74 69 6f 6e 73 20  troy operations 
2f580 6f 63 63 75 72 20 6f 6e 20 74 68 65 20 73 61 6d  occur on the sam
2f590 65 20 62 74 72 65 65 20 2a 2f 0a 20 20 20 20 20  e btree */.     
2f5a0 20 61 73 73 65 72 74 28 20 72 65 73 65 74 53 63   assert( resetSc
2f5b0 68 65 6d 61 4f 6e 46 61 75 6c 74 3d 3d 30 20 7c  hemaOnFault==0 |
2f5c0 7c 20 72 65 73 65 74 53 63 68 65 6d 61 4f 6e 46  | resetSchemaOnF
2f5d0 61 75 6c 74 3d 3d 69 44 62 2b 31 20 29 3b 0a 20  ault==iDb+1 );. 
2f5e0 20 20 20 20 20 72 65 73 65 74 53 63 68 65 6d 61       resetSchema
2f5f0 4f 6e 46 61 75 6c 74 20 3d 20 69 44 62 2b 31 3b  OnFault = iDb+1;
2f600 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20  .    }.#endif.  
2f610 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  }.  break;.}../*
2f620 20 4f 70 63 6f 64 65 3a 20 43 6c 65 61 72 20 50   Opcode: Clear P
2f630 31 20 50 32 20 50 33 0a 2a 2a 0a 2a 2a 20 44 65  1 P2 P3.**.** De
2f640 6c 65 74 65 20 61 6c 6c 20 63 6f 6e 74 65 6e 74  lete all content
2f650 73 20 6f 66 20 74 68 65 20 64 61 74 61 62 61 73  s of the databas
2f660 65 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78  e table or index
2f670 20 77 68 6f 73 65 20 72 6f 6f 74 20 70 61 67 65   whose root page
2f680 0a 2a 2a 20 69 6e 20 74 68 65 20 64 61 74 61 62  .** in the datab
2f690 61 73 65 20 66 69 6c 65 20 69 73 20 67 69 76 65  ase file is give
2f6a0 6e 20 62 79 20 50 31 2e 20 20 42 75 74 2c 20 75  n by P1.  But, u
2f6b0 6e 6c 69 6b 65 20 44 65 73 74 72 6f 79 2c 20 64  nlike Destroy, d
2f6c0 6f 20 6e 6f 74 0a 2a 2a 20 72 65 6d 6f 76 65 20  o not.** remove 
2f6d0 74 68 65 20 74 61 62 6c 65 20 6f 72 20 69 6e 64  the table or ind
2f6e0 65 78 20 66 72 6f 6d 20 74 68 65 20 64 61 74 61  ex from the data
2f6f0 62 61 73 65 20 66 69 6c 65 2e 0a 2a 2a 0a 2a 2a  base file..**.**
2f700 20 54 68 65 20 74 61 62 6c 65 20 62 65 69 6e 67   The table being
2f710 20 63 6c 65 61 72 20 69 73 20 69 6e 20 74 68 65   clear is in the
2f720 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 66   main database f
2f730 69 6c 65 20 69 66 20 50 32 3d 3d 30 2e 20 20 49  ile if P2==0.  I
2f740 66 0a 2a 2a 20 50 32 3d 3d 31 20 74 68 65 6e 20  f.** P2==1 then 
2f750 74 68 65 20 74 61 62 6c 65 20 74 6f 20 62 65 20  the table to be 
2f760 63 6c 65 61 72 20 69 73 20 69 6e 20 74 68 65 20  clear is in the 
2f770 61 75 78 69 6c 69 61 72 79 20 64 61 74 61 62 61  auxiliary databa
2f780 73 65 20 66 69 6c 65 0a 2a 2a 20 74 68 61 74 20  se file.** that 
2f790 69 73 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65  is used to store
2f7a0 20 74 61 62 6c 65 73 20 63 72 65 61 74 65 20 75   tables create u
2f7b0 73 69 6e 67 20 43 52 45 41 54 45 20 54 45 4d 50  sing CREATE TEMP
2f7c0 4f 52 41 52 59 20 54 41 42 4c 45 2e 0a 2a 2a 0a  ORARY TABLE..**.
2f7d0 2a 2a 20 49 66 20 74 68 65 20 50 33 20 76 61 6c  ** If the P3 val
2f7e0 75 65 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20  ue is non-zero, 
2f7f0 74 68 65 6e 20 74 68 65 20 74 61 62 6c 65 20 72  then the table r
2f800 65 66 65 72 72 65 64 20 74 6f 20 6d 75 73 74 20  eferred to must 
2f810 62 65 20 61 6e 0a 2a 2a 20 69 6e 74 6b 65 79 20  be an.** intkey 
2f820 74 61 62 6c 65 20 28 61 6e 20 53 51 4c 20 74 61  table (an SQL ta
2f830 62 6c 65 2c 20 6e 6f 74 20 61 6e 20 69 6e 64 65  ble, not an inde
2f840 78 29 2e 20 49 6e 20 74 68 69 73 20 63 61 73 65  x). In this case
2f850 20 74 68 65 20 72 6f 77 20 63 68 61 6e 67 65 20   the row change 
2f860 0a 2a 2a 20 63 6f 75 6e 74 20 69 73 20 69 6e 63  .** count is inc
2f870 72 65 6d 65 6e 74 65 64 20 62 79 20 74 68 65 20  remented by the 
2f880 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 20 69  number of rows i
2f890 6e 20 74 68 65 20 74 61 62 6c 65 20 62 65 69 6e  n the table bein
2f8a0 67 20 63 6c 65 61 72 65 64 2e 20 0a 2a 2a 20 49  g cleared. .** I
2f8b0 66 20 50 33 20 69 73 20 67 72 65 61 74 65 72 20  f P3 is greater 
2f8c0 74 68 61 6e 20 7a 65 72 6f 2c 20 74 68 65 6e 20  than zero, then 
2f8d0 74 68 65 20 76 61 6c 75 65 20 73 74 6f 72 65 64  the value stored
2f8e0 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 20   in register P3 
2f8f0 69 73 0a 2a 2a 20 61 6c 73 6f 20 69 6e 63 72 65  is.** also incre
2f900 6d 65 6e 74 65 64 20 62 79 20 74 68 65 20 6e 75  mented by the nu
2f910 6d 62 65 72 20 6f 66 20 72 6f 77 73 20 69 6e 20  mber of rows in 
2f920 74 68 65 20 74 61 62 6c 65 20 62 65 69 6e 67 20  the table being 
2f930 63 6c 65 61 72 65 64 2e 0a 2a 2a 0a 2a 2a 20 53  cleared..**.** S
2f940 65 65 20 61 6c 73 6f 3a 20 44 65 73 74 72 6f 79  ee also: Destroy
2f950 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 6c 65 61  .*/.case OP_Clea
2f960 72 3a 20 7b 0a 20 20 69 6e 74 20 6e 43 68 61 6e  r: {.  int nChan
2f970 67 65 3b 0a 20 0a 20 20 73 71 6c 69 74 65 33 56  ge;. .  sqlite3V
2f980 64 62 65 49 6e 63 72 57 72 69 74 65 43 6f 75 6e  dbeIncrWriteCoun
2f990 74 65 72 28 70 2c 20 30 29 3b 0a 20 20 6e 43 68  ter(p, 0);.  nCh
2f9a0 61 6e 67 65 20 3d 20 30 3b 0a 20 20 61 73 73 65  ange = 0;.  asse
2f9b0 72 74 28 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d  rt( p->readOnly=
2f9c0 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
2f9d0 44 62 4d 61 73 6b 54 65 73 74 28 70 2d 3e 62 74  DbMaskTest(p->bt
2f9e0 72 65 65 4d 61 73 6b 2c 20 70 4f 70 2d 3e 70 32  reeMask, pOp->p2
2f9f0 29 20 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69  ) );.  rc = sqli
2fa00 74 65 33 42 74 72 65 65 43 6c 65 61 72 54 61 62  te3BtreeClearTab
2fa10 6c 65 28 0a 20 20 20 20 20 20 64 62 2d 3e 61 44  le(.      db->aD
2fa20 62 5b 70 4f 70 2d 3e 70 32 5d 2e 70 42 74 2c 20  b[pOp->p2].pBt, 
2fa30 70 4f 70 2d 3e 70 31 2c 20 28 70 4f 70 2d 3e 70  pOp->p1, (pOp->p
2fa40 33 20 3f 20 26 6e 43 68 61 6e 67 65 20 3a 20 30  3 ? &nChange : 0
2fa50 29 0a 20 20 29 3b 0a 20 20 69 66 28 20 70 4f 70  ).  );.  if( pOp
2fa60 2d 3e 70 33 20 29 7b 0a 20 20 20 20 70 2d 3e 6e  ->p3 ){.    p->n
2fa70 43 68 61 6e 67 65 20 2b 3d 20 6e 43 68 61 6e 67  Change += nChang
2fa80 65 3b 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e  e;.    if( pOp->
2fa90 70 33 3e 30 20 29 7b 0a 20 20 20 20 20 20 61 73  p3>0 ){.      as
2faa0 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64  sert( memIsValid
2fab0 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 29  (&aMem[pOp->p3])
2fac0 20 29 3b 0a 20 20 20 20 20 20 6d 65 6d 41 62 6f   );.      memAbo
2fad0 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 26 61  utToChange(p, &a
2fae0 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 29 3b 0a 20  Mem[pOp->p3]);. 
2faf0 20 20 20 20 20 61 4d 65 6d 5b 70 4f 70 2d 3e 70       aMem[pOp->p
2fb00 33 5d 2e 75 2e 69 20 2b 3d 20 6e 43 68 61 6e 67  3].u.i += nChang
2fb10 65 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 69  e;.    }.  }.  i
2fb20 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f  f( rc ) goto abo
2fb30 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
2fb40 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
2fb50 4f 70 63 6f 64 65 3a 20 52 65 73 65 74 53 6f 72  Opcode: ResetSor
2fb60 74 65 72 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a  ter P1 * * * *.*
2fb70 2a 0a 2a 2a 20 44 65 6c 65 74 65 20 61 6c 6c 20  *.** Delete all 
2fb80 63 6f 6e 74 65 6e 74 73 20 66 72 6f 6d 20 74 68  contents from th
2fb90 65 20 65 70 68 65 6d 65 72 61 6c 20 74 61 62 6c  e ephemeral tabl
2fba0 65 20 6f 72 20 73 6f 72 74 65 72 0a 2a 2a 20 74  e or sorter.** t
2fbb0 68 61 74 20 69 73 20 6f 70 65 6e 20 6f 6e 20 63  hat is open on c
2fbc0 75 72 73 6f 72 20 50 31 2e 0a 2a 2a 0a 2a 2a 20  ursor P1..**.** 
2fbd0 54 68 69 73 20 6f 70 63 6f 64 65 20 6f 6e 6c 79  This opcode only
2fbe0 20 77 6f 72 6b 73 20 66 6f 72 20 63 75 72 73 6f   works for curso
2fbf0 72 73 20 75 73 65 64 20 66 6f 72 20 73 6f 72 74  rs used for sort
2fc00 69 6e 67 20 61 6e 64 0a 2a 2a 20 6f 70 65 6e 65  ing and.** opene
2fc10 64 20 77 69 74 68 20 4f 50 5f 4f 70 65 6e 45 70  d with OP_OpenEp
2fc20 68 65 6d 65 72 61 6c 20 6f 72 20 4f 50 5f 53 6f  hemeral or OP_So
2fc30 72 74 65 72 4f 70 65 6e 2e 0a 2a 2f 0a 63 61 73  rterOpen..*/.cas
2fc40 65 20 4f 50 5f 52 65 73 65 74 53 6f 72 74 65 72  e OP_ResetSorter
2fc50 3a 20 7b 0a 20 20 56 64 62 65 43 75 72 73 6f 72  : {.  VdbeCursor
2fc60 20 2a 70 43 3b 0a 20 0a 20 20 61 73 73 65 72 74   *pC;. .  assert
2fc70 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20  ( pOp->p1>=0 && 
2fc80 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73  pOp->p1<p->nCurs
2fc90 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e  or );.  pC = p->
2fca0 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  apCsr[pOp->p1];.
2fcb0 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20    assert( pC!=0 
2fcc0 29 3b 0a 20 20 69 66 28 20 69 73 53 6f 72 74 65  );.  if( isSorte
2fcd0 72 28 70 43 29 20 29 7b 0a 20 20 20 20 73 71 6c  r(pC) ){.    sql
2fce0 69 74 65 33 56 64 62 65 53 6f 72 74 65 72 52 65  ite3VdbeSorterRe
2fcf0 73 65 74 28 64 62 2c 20 70 43 2d 3e 75 63 2e 70  set(db, pC->uc.p
2fd00 53 6f 72 74 65 72 29 3b 0a 20 20 7d 65 6c 73 65  Sorter);.  }else
2fd10 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 43  {.    assert( pC
2fd20 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43 55 52 54  ->eCurType==CURT
2fd30 59 50 45 5f 42 54 52 45 45 20 29 3b 0a 20 20 20  YPE_BTREE );.   
2fd40 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73 45   assert( pC->isE
2fd50 70 68 65 6d 65 72 61 6c 20 29 3b 0a 20 20 20 20  phemeral );.    
2fd60 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
2fd70 65 43 6c 65 61 72 54 61 62 6c 65 4f 66 43 75 72  eClearTableOfCur
2fd80 73 6f 72 28 70 43 2d 3e 75 63 2e 70 43 75 72 73  sor(pC->uc.pCurs
2fd90 6f 72 29 3b 0a 20 20 20 20 69 66 28 20 72 63 20  or);.    if( rc 
2fda0 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65  ) goto abort_due
2fdb0 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 7d 0a 20  _to_error;.  }. 
2fdc0 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
2fdd0 63 6f 64 65 3a 20 43 72 65 61 74 65 42 74 72 65  code: CreateBtre
2fde0 65 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a  e P1 P2 P3 * *.*
2fdf0 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32  * Synopsis: r[P2
2fe00 5d 3d 72 6f 6f 74 20 69 44 62 3d 50 31 20 66 6c  ]=root iDb=P1 fl
2fe10 61 67 73 3d 50 33 0a 2a 2a 0a 2a 2a 20 41 6c 6c  ags=P3.**.** All
2fe20 6f 63 61 74 65 20 61 20 6e 65 77 20 62 2d 74 72  ocate a new b-tr
2fe30 65 65 20 69 6e 20 74 68 65 20 6d 61 69 6e 20 64  ee in the main d
2fe40 61 74 61 62 61 73 65 20 66 69 6c 65 20 69 66 20  atabase file if 
2fe50 50 31 3d 3d 30 20 6f 72 20 69 6e 20 74 68 65 0a  P1==0 or in the.
2fe60 2a 2a 20 54 45 4d 50 20 64 61 74 61 62 61 73 65  ** TEMP database
2fe70 20 66 69 6c 65 20 69 66 20 50 31 3d 3d 31 20 6f   file if P1==1 o
2fe80 72 20 69 6e 20 61 6e 20 61 74 74 61 63 68 65 64  r in an attached
2fe90 20 64 61 74 61 62 61 73 65 20 69 66 0a 2a 2a 20   database if.** 
2fea0 50 31 3e 31 2e 20 20 54 68 65 20 50 33 20 61 72  P1>1.  The P3 ar
2feb0 67 75 6d 65 6e 74 20 6d 75 73 74 20 62 65 20 31  gument must be 1
2fec0 20 28 42 54 52 45 45 5f 49 4e 54 4b 45 59 29 20   (BTREE_INTKEY) 
2fed0 66 6f 72 20 61 20 72 6f 77 69 64 20 74 61 62 6c  for a rowid tabl
2fee0 65 0a 2a 2a 20 69 74 20 6d 75 73 74 20 62 65 20  e.** it must be 
2fef0 32 20 28 42 54 52 45 45 5f 42 4c 4f 42 4b 45 59  2 (BTREE_BLOBKEY
2ff00 29 20 66 6f 72 20 61 6e 20 69 6e 64 65 78 20 6f  ) for an index o
2ff10 72 20 57 49 54 48 4f 55 54 20 52 4f 57 49 44 20  r WITHOUT ROWID 
2ff20 74 61 62 6c 65 2e 0a 2a 2a 20 54 68 65 20 72 6f  table..** The ro
2ff30 6f 74 20 70 61 67 65 20 6e 75 6d 62 65 72 20 6f  ot page number o
2ff40 66 20 74 68 65 20 6e 65 77 20 62 2d 74 72 65 65  f the new b-tree
2ff50 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 72 65   is stored in re
2ff60 67 69 73 74 65 72 20 50 32 2e 0a 2a 2f 0a 63 61  gister P2..*/.ca
2ff70 73 65 20 4f 50 5f 43 72 65 61 74 65 42 74 72 65  se OP_CreateBtre
2ff80 65 3a 20 7b 20 20 20 20 20 20 20 20 20 20 2f 2a  e: {          /*
2ff90 20 6f 75 74 32 20 2a 2f 0a 20 20 69 6e 74 20 70   out2 */.  int p
2ffa0 67 6e 6f 3b 0a 20 20 44 62 20 2a 70 44 62 3b 0a  gno;.  Db *pDb;.
2ffb0 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e  .  sqlite3VdbeIn
2ffc0 63 72 57 72 69 74 65 43 6f 75 6e 74 65 72 28 70  crWriteCounter(p
2ffd0 2c 20 30 29 3b 0a 20 20 70 4f 75 74 20 3d 20 6f  , 0);.  pOut = o
2ffe0 75 74 32 50 72 65 72 65 6c 65 61 73 65 28 70 2c  ut2Prerelease(p,
2fff0 20 70 4f 70 29 3b 0a 20 20 70 67 6e 6f 20 3d 20   pOp);.  pgno = 
30000 30 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  0;.  assert( pOp
30010 2d 3e 70 33 3d 3d 42 54 52 45 45 5f 49 4e 54 4b  ->p3==BTREE_INTK
30020 45 59 20 7c 7c 20 70 4f 70 2d 3e 70 33 3d 3d 42  EY || pOp->p3==B
30030 54 52 45 45 5f 42 4c 4f 42 4b 45 59 20 29 3b 0a  TREE_BLOBKEY );.
30040 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
30050 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c  1>=0 && pOp->p1<
30060 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73  db->nDb );.  ass
30070 65 72 74 28 20 44 62 4d 61 73 6b 54 65 73 74 28  ert( DbMaskTest(
30080 70 2d 3e 62 74 72 65 65 4d 61 73 6b 2c 20 70 4f  p->btreeMask, pO
30090 70 2d 3e 70 31 29 20 29 3b 0a 20 20 61 73 73 65  p->p1) );.  asse
300a0 72 74 28 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d  rt( p->readOnly=
300b0 3d 30 20 29 3b 0a 20 20 70 44 62 20 3d 20 26 64  =0 );.  pDb = &d
300c0 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 31 5d 3b  b->aDb[pOp->p1];
300d0 0a 20 20 61 73 73 65 72 74 28 20 70 44 62 2d 3e  .  assert( pDb->
300e0 70 42 74 21 3d 30 20 29 3b 0a 20 20 72 63 20 3d  pBt!=0 );.  rc =
300f0 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 72 65   sqlite3BtreeCre
30100 61 74 65 54 61 62 6c 65 28 70 44 62 2d 3e 70 42  ateTable(pDb->pB
30110 74 2c 20 26 70 67 6e 6f 2c 20 70 4f 70 2d 3e 70  t, &pgno, pOp->p
30120 33 29 3b 0a 20 20 69 66 28 20 72 63 20 29 20 67  3);.  if( rc ) g
30130 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
30140 5f 65 72 72 6f 72 3b 0a 20 20 70 4f 75 74 2d 3e  _error;.  pOut->
30150 75 2e 69 20 3d 20 70 67 6e 6f 3b 0a 20 20 62 72  u.i = pgno;.  br
30160 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
30170 65 3a 20 53 71 6c 45 78 65 63 20 2a 20 2a 20 2a  e: SqlExec * * *
30180 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 52 75 6e 20   P4 *.**.** Run 
30190 74 68 65 20 53 51 4c 20 73 74 61 74 65 6d 65 6e  the SQL statemen
301a0 74 20 6f 72 20 73 74 61 74 65 6d 65 6e 74 73 20  t or statements 
301b0 73 70 65 63 69 66 69 65 64 20 69 6e 20 74 68 65  specified in the
301c0 20 50 34 20 73 74 72 69 6e 67 2e 0a 2a 2f 0a 63   P4 string..*/.c
301d0 61 73 65 20 4f 50 5f 53 71 6c 45 78 65 63 3a 20  ase OP_SqlExec: 
301e0 7b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 49  {.  sqlite3VdbeI
301f0 6e 63 72 57 72 69 74 65 43 6f 75 6e 74 65 72 28  ncrWriteCounter(
30200 70 2c 20 30 29 3b 0a 20 20 64 62 2d 3e 6e 53 71  p, 0);.  db->nSq
30210 6c 45 78 65 63 2b 2b 3b 0a 20 20 72 63 20 3d 20  lExec++;.  rc = 
30220 73 71 6c 69 74 65 33 5f 65 78 65 63 28 64 62 2c  sqlite3_exec(db,
30230 20 70 4f 70 2d 3e 70 34 2e 7a 2c 20 30 2c 20 30   pOp->p4.z, 0, 0
30240 2c 20 30 29 3b 0a 20 20 64 62 2d 3e 6e 53 71 6c  , 0);.  db->nSql
30250 45 78 65 63 2d 2d 3b 0a 20 20 69 66 28 20 72 63  Exec--;.  if( rc
30260 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75   ) goto abort_du
30270 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 62 72  e_to_error;.  br
30280 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
30290 65 3a 20 50 61 72 73 65 53 63 68 65 6d 61 20 50  e: ParseSchema P
302a0 31 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a  1 * * P4 *.**.**
302b0 20 52 65 61 64 20 61 6e 64 20 70 61 72 73 65 20   Read and parse 
302c0 61 6c 6c 20 65 6e 74 72 69 65 73 20 66 72 6f 6d  all entries from
302d0 20 74 68 65 20 53 51 4c 49 54 45 5f 4d 41 53 54   the SQLITE_MAST
302e0 45 52 20 74 61 62 6c 65 20 6f 66 20 64 61 74 61  ER table of data
302f0 62 61 73 65 20 50 31 0a 2a 2a 20 74 68 61 74 20  base P1.** that 
30300 6d 61 74 63 68 20 74 68 65 20 57 48 45 52 45 20  match the WHERE 
30310 63 6c 61 75 73 65 20 50 34 2e 20 20 49 66 20 50  clause P4.  If P
30320 34 20 69 73 20 61 20 4e 55 4c 4c 20 70 6f 69 6e  4 is a NULL poin
30330 74 65 72 2c 20 74 68 65 6e 20 74 68 65 0a 2a 2a  ter, then the.**
30340 20 65 6e 74 69 72 65 20 73 63 68 65 6d 61 20 66   entire schema f
30350 6f 72 20 50 31 20 69 73 20 72 65 70 61 72 73 65  or P1 is reparse
30360 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70  d..**.** This op
30370 63 6f 64 65 20 69 6e 76 6f 6b 65 73 20 74 68 65  code invokes the
30380 20 70 61 72 73 65 72 20 74 6f 20 63 72 65 61 74   parser to creat
30390 65 20 61 20 6e 65 77 20 76 69 72 74 75 61 6c 20  e a new virtual 
303a0 6d 61 63 68 69 6e 65 2c 0a 2a 2a 20 74 68 65 6e  machine,.** then
303b0 20 72 75 6e 73 20 74 68 65 20 6e 65 77 20 76 69   runs the new vi
303c0 72 74 75 61 6c 20 6d 61 63 68 69 6e 65 2e 20 20  rtual machine.  
303d0 49 74 20 69 73 20 74 68 75 73 20 61 20 72 65 2d  It is thus a re-
303e0 65 6e 74 72 61 6e 74 20 6f 70 63 6f 64 65 2e 0a  entrant opcode..
303f0 2a 2f 0a 63 61 73 65 20 4f 50 5f 50 61 72 73 65  */.case OP_Parse
30400 53 63 68 65 6d 61 3a 20 7b 0a 20 20 69 6e 74 20  Schema: {.  int 
30410 69 44 62 3b 0a 20 20 63 6f 6e 73 74 20 63 68 61  iDb;.  const cha
30420 72 20 2a 7a 4d 61 73 74 65 72 3b 0a 20 20 63 68  r *zMaster;.  ch
30430 61 72 20 2a 7a 53 71 6c 3b 0a 20 20 49 6e 69 74  ar *zSql;.  Init
30440 44 61 74 61 20 69 6e 69 74 44 61 74 61 3b 0a 0a  Data initData;..
30450 20 20 2f 2a 20 41 6e 79 20 70 72 65 70 61 72 65    /* Any prepare
30460 64 20 73 74 61 74 65 6d 65 6e 74 20 74 68 61 74  d statement that
30470 20 69 6e 76 6f 6b 65 73 20 74 68 69 73 20 6f 70   invokes this op
30480 63 6f 64 65 20 77 69 6c 6c 20 68 6f 6c 64 20 6d  code will hold m
30490 75 74 65 78 65 73 0a 20 20 2a 2a 20 6f 6e 20 65  utexes.  ** on e
304a0 76 65 72 79 20 62 74 72 65 65 2e 20 20 54 68 69  very btree.  Thi
304b0 73 20 69 73 20 61 20 70 72 65 72 65 71 75 69 73  s is a prerequis
304c0 69 74 65 20 66 6f 72 20 69 6e 76 6f 6b 69 6e 67  ite for invoking
304d0 20 0a 20 20 2a 2a 20 73 71 6c 69 74 65 33 49 6e   .  ** sqlite3In
304e0 69 74 43 61 6c 6c 62 61 63 6b 28 29 2e 0a 20 20  itCallback()..  
304f0 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  */.#ifdef SQLITE
30500 5f 44 45 42 55 47 0a 20 20 66 6f 72 28 69 44 62  _DEBUG.  for(iDb
30510 3d 30 3b 20 69 44 62 3c 64 62 2d 3e 6e 44 62 3b  =0; iDb<db->nDb;
30520 20 69 44 62 2b 2b 29 7b 0a 20 20 20 20 61 73 73   iDb++){.    ass
30530 65 72 74 28 20 69 44 62 3d 3d 31 20 7c 7c 20 73  ert( iDb==1 || s
30540 71 6c 69 74 65 33 42 74 72 65 65 48 6f 6c 64 73  qlite3BtreeHolds
30550 4d 75 74 65 78 28 64 62 2d 3e 61 44 62 5b 69 44  Mutex(db->aDb[iD
30560 62 5d 2e 70 42 74 29 20 29 3b 0a 20 20 7d 0a 23  b].pBt) );.  }.#
30570 65 6e 64 69 66 0a 0a 20 20 69 44 62 20 3d 20 70  endif..  iDb = p
30580 4f 70 2d 3e 70 31 3b 0a 20 20 61 73 73 65 72 74  Op->p1;.  assert
30590 28 20 69 44 62 3e 3d 30 20 26 26 20 69 44 62 3c  ( iDb>=0 && iDb<
305a0 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73  db->nDb );.  ass
305b0 65 72 74 28 20 44 62 48 61 73 50 72 6f 70 65 72  ert( DbHasProper
305c0 74 79 28 64 62 2c 20 69 44 62 2c 20 44 42 5f 53  ty(db, iDb, DB_S
305d0 63 68 65 6d 61 4c 6f 61 64 65 64 29 20 29 3b 0a  chemaLoaded) );.
305e0 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
305f0 4f 4d 49 54 5f 41 4c 54 45 52 54 41 42 4c 45 0a  OMIT_ALTERTABLE.
30600 20 20 69 66 28 20 70 4f 70 2d 3e 70 34 2e 7a 3d    if( pOp->p4.z=
30610 3d 30 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  =0 ){.    sqlite
30620 33 53 63 68 65 6d 61 43 6c 65 61 72 28 64 62 2d  3SchemaClear(db-
30630 3e 61 44 62 5b 69 44 62 5d 2e 70 53 63 68 65 6d  >aDb[iDb].pSchem
30640 61 29 3b 0a 20 20 20 20 64 62 2d 3e 6d 44 62 46  a);.    db->mDbF
30650 6c 61 67 73 20 26 3d 20 7e 44 42 46 4c 41 47 5f  lags &= ~DBFLAG_
30660 53 63 68 65 6d 61 4b 6e 6f 77 6e 4f 6b 3b 0a 20  SchemaKnownOk;. 
30670 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 49     rc = sqlite3I
30680 6e 69 74 4f 6e 65 28 64 62 2c 20 69 44 62 2c 20  nitOne(db, iDb, 
30690 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 49 4e 49  &p->zErrMsg, INI
306a0 54 46 4c 41 47 5f 41 6c 74 65 72 54 61 62 6c 65  TFLAG_AlterTable
306b0 29 3b 0a 20 20 20 20 64 62 2d 3e 6d 44 62 46 6c  );.    db->mDbFl
306c0 61 67 73 20 7c 3d 20 44 42 46 4c 41 47 5f 53 63  ags |= DBFLAG_Sc
306d0 68 65 6d 61 43 68 61 6e 67 65 3b 0a 20 20 20 20  hemaChange;.    
306e0 70 2d 3e 65 78 70 69 72 65 64 20 3d 20 30 3b 0a  p->expired = 0;.
306f0 20 20 7d 65 6c 73 65 0a 23 65 6e 64 69 66 0a 20    }else.#endif. 
30700 20 7b 0a 20 20 20 20 7a 4d 61 73 74 65 72 20 3d   {.    zMaster =
30710 20 4d 41 53 54 45 52 5f 4e 41 4d 45 3b 0a 20 20   MASTER_NAME;.  
30720 20 20 69 6e 69 74 44 61 74 61 2e 64 62 20 3d 20    initData.db = 
30730 64 62 3b 0a 20 20 20 20 69 6e 69 74 44 61 74 61  db;.    initData
30740 2e 69 44 62 20 3d 20 69 44 62 3b 0a 20 20 20 20  .iDb = iDb;.    
30750 69 6e 69 74 44 61 74 61 2e 70 7a 45 72 72 4d 73  initData.pzErrMs
30760 67 20 3d 20 26 70 2d 3e 7a 45 72 72 4d 73 67 3b  g = &p->zErrMsg;
30770 0a 20 20 20 20 69 6e 69 74 44 61 74 61 2e 6d 49  .    initData.mI
30780 6e 69 74 46 6c 61 67 73 20 3d 20 30 3b 0a 20 20  nitFlags = 0;.  
30790 20 20 7a 53 71 6c 20 3d 20 73 71 6c 69 74 65 33    zSql = sqlite3
307a0 4d 50 72 69 6e 74 66 28 64 62 2c 0a 20 20 20 20  MPrintf(db,.    
307b0 20 20 20 22 53 45 4c 45 43 54 20 6e 61 6d 65 2c     "SELECT name,
307c0 20 72 6f 6f 74 70 61 67 65 2c 20 73 71 6c 20 46   rootpage, sql F
307d0 52 4f 4d 20 27 25 71 27 2e 25 73 20 57 48 45 52  ROM '%q'.%s WHER
307e0 45 20 25 73 20 4f 52 44 45 52 20 42 59 20 72 6f  E %s ORDER BY ro
307f0 77 69 64 22 2c 0a 20 20 20 20 20 20 20 64 62 2d  wid",.       db-
30800 3e 61 44 62 5b 69 44 62 5d 2e 7a 44 62 53 4e 61  >aDb[iDb].zDbSNa
30810 6d 65 2c 20 7a 4d 61 73 74 65 72 2c 20 70 4f 70  me, zMaster, pOp
30820 2d 3e 70 34 2e 7a 29 3b 0a 20 20 20 20 69 66 28  ->p4.z);.    if(
30830 20 7a 53 71 6c 3d 3d 30 20 29 7b 0a 20 20 20 20   zSql==0 ){.    
30840 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4e 4f    rc = SQLITE_NO
30850 4d 45 4d 5f 42 4b 50 54 3b 0a 20 20 20 20 7d 65  MEM_BKPT;.    }e
30860 6c 73 65 7b 0a 20 20 20 20 20 20 61 73 73 65 72  lse{.      asser
30870 74 28 20 64 62 2d 3e 69 6e 69 74 2e 62 75 73 79  t( db->init.busy
30880 3d 3d 30 20 29 3b 0a 20 20 20 20 20 20 64 62 2d  ==0 );.      db-
30890 3e 69 6e 69 74 2e 62 75 73 79 20 3d 20 31 3b 0a  >init.busy = 1;.
308a0 20 20 20 20 20 20 69 6e 69 74 44 61 74 61 2e 72        initData.r
308b0 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20  c = SQLITE_OK;. 
308c0 20 20 20 20 20 69 6e 69 74 44 61 74 61 2e 6e 49       initData.nI
308d0 6e 69 74 52 6f 77 20 3d 20 30 3b 0a 20 20 20 20  nitRow = 0;.    
308e0 20 20 61 73 73 65 72 74 28 20 21 64 62 2d 3e 6d    assert( !db->m
308f0 61 6c 6c 6f 63 46 61 69 6c 65 64 20 29 3b 0a 20  allocFailed );. 
30900 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65       rc = sqlite
30910 33 5f 65 78 65 63 28 64 62 2c 20 7a 53 71 6c 2c  3_exec(db, zSql,
30920 20 73 71 6c 69 74 65 33 49 6e 69 74 43 61 6c 6c   sqlite3InitCall
30930 62 61 63 6b 2c 20 26 69 6e 69 74 44 61 74 61 2c  back, &initData,
30940 20 30 29 3b 0a 20 20 20 20 20 20 69 66 28 20 72   0);.      if( r
30950 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 20 72  c==SQLITE_OK ) r
30960 63 20 3d 20 69 6e 69 74 44 61 74 61 2e 72 63 3b  c = initData.rc;
30970 0a 20 20 20 20 20 20 69 66 28 20 72 63 3d 3d 53  .      if( rc==S
30980 51 4c 49 54 45 5f 4f 4b 20 26 26 20 69 6e 69 74  QLITE_OK && init
30990 44 61 74 61 2e 6e 49 6e 69 74 52 6f 77 3d 3d 30  Data.nInitRow==0
309a0 20 29 7b 0a 20 20 20 20 20 20 20 20 2f 2a 20 54   ){.        /* T
309b0 68 65 20 4f 50 5f 50 61 72 73 65 53 63 68 65 6d  he OP_ParseSchem
309c0 61 20 6f 70 63 6f 64 65 20 77 69 74 68 20 61 20  a opcode with a 
309d0 6e 6f 6e 2d 4e 55 4c 4c 20 50 34 20 61 72 67 75  non-NULL P4 argu
309e0 6d 65 6e 74 20 73 68 6f 75 6c 64 20 70 61 72 73  ment should pars
309f0 65 0a 20 20 20 20 20 20 20 20 2a 2a 20 61 74 20  e.        ** at 
30a00 6c 65 61 73 74 20 6f 6e 65 20 53 51 4c 20 73 74  least one SQL st
30a10 61 74 65 6d 65 6e 74 2e 20 41 6e 79 20 6c 65 73  atement. Any les
30a20 73 20 74 68 61 6e 20 74 68 61 74 20 69 6e 64 69  s than that indi
30a30 63 61 74 65 73 20 74 68 61 74 0a 20 20 20 20 20  cates that.     
30a40 20 20 20 2a 2a 20 74 68 65 20 73 71 6c 69 74 65     ** the sqlite
30a50 5f 6d 61 73 74 65 72 20 74 61 62 6c 65 20 69 73  _master table is
30a60 20 63 6f 72 72 75 70 74 2e 20 2a 2f 0a 20 20 20   corrupt. */.   
30a70 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45       rc = SQLITE
30a80 5f 43 4f 52 52 55 50 54 5f 42 4b 50 54 3b 0a 20  _CORRUPT_BKPT;. 
30a90 20 20 20 20 20 7d 0a 20 20 20 20 20 20 73 71 6c       }.      sql
30aa0 69 74 65 33 44 62 46 72 65 65 4e 4e 28 64 62 2c  ite3DbFreeNN(db,
30ab0 20 7a 53 71 6c 29 3b 0a 20 20 20 20 20 20 64 62   zSql);.      db
30ac0 2d 3e 69 6e 69 74 2e 62 75 73 79 20 3d 20 30 3b  ->init.busy = 0;
30ad0 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 69 66 28  .    }.  }.  if(
30ae0 20 72 63 20 29 7b 0a 20 20 20 20 73 71 6c 69 74   rc ){.    sqlit
30af0 65 33 52 65 73 65 74 41 6c 6c 53 63 68 65 6d 61  e3ResetAllSchema
30b00 73 4f 66 43 6f 6e 6e 65 63 74 69 6f 6e 28 64 62  sOfConnection(db
30b10 29 3b 0a 20 20 20 20 69 66 28 20 72 63 3d 3d 53  );.    if( rc==S
30b20 51 4c 49 54 45 5f 4e 4f 4d 45 4d 20 29 7b 0a 20  QLITE_NOMEM ){. 
30b30 20 20 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d       goto no_mem
30b40 3b 0a 20 20 20 20 7d 0a 20 20 20 20 67 6f 74 6f  ;.    }.    goto
30b50 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
30b60 72 6f 72 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  ror;.  }.  break
30b70 3b 20 20 0a 7d 0a 0a 23 69 66 20 21 64 65 66 69  ;  .}..#if !defi
30b80 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ned(SQLITE_OMIT_
30b90 41 4e 41 4c 59 5a 45 29 0a 2f 2a 20 4f 70 63 6f  ANALYZE)./* Opco
30ba0 64 65 3a 20 4c 6f 61 64 41 6e 61 6c 79 73 69 73  de: LoadAnalysis
30bb0 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a   P1 * * * *.**.*
30bc0 2a 20 52 65 61 64 20 74 68 65 20 73 71 6c 69 74  * Read the sqlit
30bd0 65 5f 73 74 61 74 31 20 74 61 62 6c 65 20 66 6f  e_stat1 table fo
30be0 72 20 64 61 74 61 62 61 73 65 20 50 31 20 61 6e  r database P1 an
30bf0 64 20 6c 6f 61 64 20 74 68 65 20 63 6f 6e 74 65  d load the conte
30c00 6e 74 0a 2a 2a 20 6f 66 20 74 68 61 74 20 74 61  nt.** of that ta
30c10 62 6c 65 20 69 6e 74 6f 20 74 68 65 20 69 6e 74  ble into the int
30c20 65 72 6e 61 6c 20 69 6e 64 65 78 20 68 61 73 68  ernal index hash
30c30 20 74 61 62 6c 65 2e 20 20 54 68 69 73 20 77 69   table.  This wi
30c40 6c 6c 20 63 61 75 73 65 0a 2a 2a 20 74 68 65 20  ll cause.** the 
30c50 61 6e 61 6c 79 73 69 73 20 74 6f 20 62 65 20 75  analysis to be u
30c60 73 65 64 20 77 68 65 6e 20 70 72 65 70 61 72 69  sed when prepari
30c70 6e 67 20 61 6c 6c 20 73 75 62 73 65 71 75 65 6e  ng all subsequen
30c80 74 20 71 75 65 72 69 65 73 2e 0a 2a 2f 0a 63 61  t queries..*/.ca
30c90 73 65 20 4f 50 5f 4c 6f 61 64 41 6e 61 6c 79 73  se OP_LoadAnalys
30ca0 69 73 3a 20 7b 0a 20 20 61 73 73 65 72 74 28 20  is: {.  assert( 
30cb0 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f  pOp->p1>=0 && pO
30cc0 70 2d 3e 70 31 3c 64 62 2d 3e 6e 44 62 20 29 3b  p->p1<db->nDb );
30cd0 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 41  .  rc = sqlite3A
30ce0 6e 61 6c 79 73 69 73 4c 6f 61 64 28 64 62 2c 20  nalysisLoad(db, 
30cf0 70 4f 70 2d 3e 70 31 29 3b 0a 20 20 69 66 28 20  pOp->p1);.  if( 
30d00 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f  rc ) goto abort_
30d10 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
30d20 62 72 65 61 6b 3b 20 20 0a 7d 0a 23 65 6e 64 69  break;  .}.#endi
30d30 66 20 2f 2a 20 21 64 65 66 69 6e 65 64 28 53 51  f /* !defined(SQ
30d40 4c 49 54 45 5f 4f 4d 49 54 5f 41 4e 41 4c 59 5a  LITE_OMIT_ANALYZ
30d50 45 29 20 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f 64 65  E) */../* Opcode
30d60 3a 20 44 72 6f 70 54 61 62 6c 65 20 50 31 20 2a  : DropTable P1 *
30d70 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 52 65   * P4 *.**.** Re
30d80 6d 6f 76 65 20 74 68 65 20 69 6e 74 65 72 6e 61  move the interna
30d90 6c 20 28 69 6e 2d 6d 65 6d 6f 72 79 29 20 64 61  l (in-memory) da
30da0 74 61 20 73 74 72 75 63 74 75 72 65 73 20 74 68  ta structures th
30db0 61 74 20 64 65 73 63 72 69 62 65 0a 2a 2a 20 74  at describe.** t
30dc0 68 65 20 74 61 62 6c 65 20 6e 61 6d 65 64 20 50  he table named P
30dd0 34 20 69 6e 20 64 61 74 61 62 61 73 65 20 50 31  4 in database P1
30de0 2e 20 20 54 68 69 73 20 69 73 20 63 61 6c 6c 65  .  This is calle
30df0 64 20 61 66 74 65 72 20 61 20 74 61 62 6c 65 0a  d after a table.
30e00 2a 2a 20 69 73 20 64 72 6f 70 70 65 64 20 66 72  ** is dropped fr
30e10 6f 6d 20 64 69 73 6b 20 28 75 73 69 6e 67 20 74  om disk (using t
30e20 68 65 20 44 65 73 74 72 6f 79 20 6f 70 63 6f 64  he Destroy opcod
30e30 65 29 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 6b  e) in order to k
30e40 65 65 70 20 0a 2a 2a 20 74 68 65 20 69 6e 74 65  eep .** the inte
30e50 72 6e 61 6c 20 72 65 70 72 65 73 65 6e 74 61 74  rnal representat
30e60 69 6f 6e 20 6f 66 20 74 68 65 0a 2a 2a 20 73 63  ion of the.** sc
30e70 68 65 6d 61 20 63 6f 6e 73 69 73 74 65 6e 74 20  hema consistent 
30e80 77 69 74 68 20 77 68 61 74 20 69 73 20 6f 6e 20  with what is on 
30e90 64 69 73 6b 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  disk..*/.case OP
30ea0 5f 44 72 6f 70 54 61 62 6c 65 3a 20 7b 0a 20 20  _DropTable: {.  
30eb0 73 71 6c 69 74 65 33 56 64 62 65 49 6e 63 72 57  sqlite3VdbeIncrW
30ec0 72 69 74 65 43 6f 75 6e 74 65 72 28 70 2c 20 30  riteCounter(p, 0
30ed0 29 3b 0a 20 20 73 71 6c 69 74 65 33 55 6e 6c 69  );.  sqlite3Unli
30ee0 6e 6b 41 6e 64 44 65 6c 65 74 65 54 61 62 6c 65  nkAndDeleteTable
30ef0 28 64 62 2c 20 70 4f 70 2d 3e 70 31 2c 20 70 4f  (db, pOp->p1, pO
30f00 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20 62 72 65 61  p->p4.z);.  brea
30f10 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
30f20 20 44 72 6f 70 49 6e 64 65 78 20 50 31 20 2a 20   DropIndex P1 * 
30f30 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 52 65 6d  * P4 *.**.** Rem
30f40 6f 76 65 20 74 68 65 20 69 6e 74 65 72 6e 61 6c  ove the internal
30f50 20 28 69 6e 2d 6d 65 6d 6f 72 79 29 20 64 61 74   (in-memory) dat
30f60 61 20 73 74 72 75 63 74 75 72 65 73 20 74 68 61  a structures tha
30f70 74 20 64 65 73 63 72 69 62 65 0a 2a 2a 20 74 68  t describe.** th
30f80 65 20 69 6e 64 65 78 20 6e 61 6d 65 64 20 50 34  e index named P4
30f90 20 69 6e 20 64 61 74 61 62 61 73 65 20 50 31 2e   in database P1.
30fa0 20 20 54 68 69 73 20 69 73 20 63 61 6c 6c 65 64    This is called
30fb0 20 61 66 74 65 72 20 61 6e 20 69 6e 64 65 78 0a   after an index.
30fc0 2a 2a 20 69 73 20 64 72 6f 70 70 65 64 20 66 72  ** is dropped fr
30fd0 6f 6d 20 64 69 73 6b 20 28 75 73 69 6e 67 20 74  om disk (using t
30fe0 68 65 20 44 65 73 74 72 6f 79 20 6f 70 63 6f 64  he Destroy opcod
30ff0 65 29 0a 2a 2a 20 69 6e 20 6f 72 64 65 72 20 74  e).** in order t
31000 6f 20 6b 65 65 70 20 74 68 65 20 69 6e 74 65 72  o keep the inter
31010 6e 61 6c 20 72 65 70 72 65 73 65 6e 74 61 74 69  nal representati
31020 6f 6e 20 6f 66 20 74 68 65 0a 2a 2a 20 73 63 68  on of the.** sch
31030 65 6d 61 20 63 6f 6e 73 69 73 74 65 6e 74 20 77  ema consistent w
31040 69 74 68 20 77 68 61 74 20 69 73 20 6f 6e 20 64  ith what is on d
31050 69 73 6b 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  isk..*/.case OP_
31060 44 72 6f 70 49 6e 64 65 78 3a 20 7b 0a 20 20 73  DropIndex: {.  s
31070 71 6c 69 74 65 33 56 64 62 65 49 6e 63 72 57 72  qlite3VdbeIncrWr
31080 69 74 65 43 6f 75 6e 74 65 72 28 70 2c 20 30 29  iteCounter(p, 0)
31090 3b 0a 20 20 73 71 6c 69 74 65 33 55 6e 6c 69 6e  ;.  sqlite3Unlin
310a0 6b 41 6e 64 44 65 6c 65 74 65 49 6e 64 65 78 28  kAndDeleteIndex(
310b0 64 62 2c 20 70 4f 70 2d 3e 70 31 2c 20 70 4f 70  db, pOp->p1, pOp
310c0 2d 3e 70 34 2e 7a 29 3b 0a 20 20 62 72 65 61 6b  ->p4.z);.  break
310d0 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
310e0 44 72 6f 70 54 72 69 67 67 65 72 20 50 31 20 2a  DropTrigger P1 *
310f0 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 52 65   * P4 *.**.** Re
31100 6d 6f 76 65 20 74 68 65 20 69 6e 74 65 72 6e 61  move the interna
31110 6c 20 28 69 6e 2d 6d 65 6d 6f 72 79 29 20 64 61  l (in-memory) da
31120 74 61 20 73 74 72 75 63 74 75 72 65 73 20 74 68  ta structures th
31130 61 74 20 64 65 73 63 72 69 62 65 0a 2a 2a 20 74  at describe.** t
31140 68 65 20 74 72 69 67 67 65 72 20 6e 61 6d 65 64  he trigger named
31150 20 50 34 20 69 6e 20 64 61 74 61 62 61 73 65 20   P4 in database 
31160 50 31 2e 20 20 54 68 69 73 20 69 73 20 63 61 6c  P1.  This is cal
31170 6c 65 64 20 61 66 74 65 72 20 61 20 74 72 69 67  led after a trig
31180 67 65 72 0a 2a 2a 20 69 73 20 64 72 6f 70 70 65  ger.** is droppe
31190 64 20 66 72 6f 6d 20 64 69 73 6b 20 28 75 73 69  d from disk (usi
311a0 6e 67 20 74 68 65 20 44 65 73 74 72 6f 79 20 6f  ng the Destroy o
311b0 70 63 6f 64 65 29 20 69 6e 20 6f 72 64 65 72 20  pcode) in order 
311c0 74 6f 20 6b 65 65 70 20 0a 2a 2a 20 74 68 65 20  to keep .** the 
311d0 69 6e 74 65 72 6e 61 6c 20 72 65 70 72 65 73 65  internal represe
311e0 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 0a 2a  ntation of the.*
311f0 2a 20 73 63 68 65 6d 61 20 63 6f 6e 73 69 73 74  * schema consist
31200 65 6e 74 20 77 69 74 68 20 77 68 61 74 20 69 73  ent with what is
31210 20 6f 6e 20 64 69 73 6b 2e 0a 2a 2f 0a 63 61 73   on disk..*/.cas
31220 65 20 4f 50 5f 44 72 6f 70 54 72 69 67 67 65 72  e OP_DropTrigger
31230 3a 20 7b 0a 20 20 73 71 6c 69 74 65 33 56 64 62  : {.  sqlite3Vdb
31240 65 49 6e 63 72 57 72 69 74 65 43 6f 75 6e 74 65  eIncrWriteCounte
31250 72 28 70 2c 20 30 29 3b 0a 20 20 73 71 6c 69 74  r(p, 0);.  sqlit
31260 65 33 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74  e3UnlinkAndDelet
31270 65 54 72 69 67 67 65 72 28 64 62 2c 20 70 4f 70  eTrigger(db, pOp
31280 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29  ->p1, pOp->p4.z)
31290 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 23  ;.  break;.}...#
312a0 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
312b0 49 54 5f 49 4e 54 45 47 52 49 54 59 5f 43 48 45  IT_INTEGRITY_CHE
312c0 43 4b 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 6e  CK./* Opcode: In
312d0 74 65 67 72 69 74 79 43 6b 20 50 31 20 50 32 20  tegrityCk P1 P2 
312e0 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 44  P3 P4 P5.**.** D
312f0 6f 20 61 6e 20 61 6e 61 6c 79 73 69 73 20 6f 66  o an analysis of
31300 20 74 68 65 20 63 75 72 72 65 6e 74 6c 79 20 6f   the currently o
31310 70 65 6e 20 64 61 74 61 62 61 73 65 2e 20 20 53  pen database.  S
31320 74 6f 72 65 20 69 6e 0a 2a 2a 20 72 65 67 69 73  tore in.** regis
31330 74 65 72 20 50 31 20 74 68 65 20 74 65 78 74 20  ter P1 the text 
31340 6f 66 20 61 6e 20 65 72 72 6f 72 20 6d 65 73 73  of an error mess
31350 61 67 65 20 64 65 73 63 72 69 62 69 6e 67 20 61  age describing a
31360 6e 79 20 70 72 6f 62 6c 65 6d 73 2e 0a 2a 2a 20  ny problems..** 
31370 49 66 20 6e 6f 20 70 72 6f 62 6c 65 6d 73 20 61  If no problems a
31380 72 65 20 66 6f 75 6e 64 2c 20 73 74 6f 72 65 20  re found, store 
31390 61 20 4e 55 4c 4c 20 69 6e 20 72 65 67 69 73 74  a NULL in regist
313a0 65 72 20 50 31 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  er P1..**.** The
313b0 20 72 65 67 69 73 74 65 72 20 50 33 20 63 6f 6e   register P3 con
313c0 74 61 69 6e 73 20 6f 6e 65 20 6c 65 73 73 20 74  tains one less t
313d0 68 61 6e 20 74 68 65 20 6d 61 78 69 6d 75 6d 20  han the maximum 
313e0 6e 75 6d 62 65 72 20 6f 66 20 61 6c 6c 6f 77 65  number of allowe
313f0 64 20 65 72 72 6f 72 73 2e 0a 2a 2a 20 41 74 20  d errors..** At 
31400 6d 6f 73 74 20 72 65 67 28 50 33 29 20 65 72 72  most reg(P3) err
31410 6f 72 73 20 77 69 6c 6c 20 62 65 20 72 65 70 6f  ors will be repo
31420 72 74 65 64 2e 0a 2a 2a 20 49 6e 20 6f 74 68 65  rted..** In othe
31430 72 20 77 6f 72 64 73 2c 20 74 68 65 20 61 6e 61  r words, the ana
31440 6c 79 73 69 73 20 73 74 6f 70 73 20 61 73 20 73  lysis stops as s
31450 6f 6f 6e 20 61 73 20 72 65 67 28 50 31 29 20 65  oon as reg(P1) e
31460 72 72 6f 72 73 20 61 72 65 20 0a 2a 2a 20 73 65  rrors are .** se
31470 65 6e 2e 20 20 52 65 67 28 50 31 29 20 69 73 20  en.  Reg(P1) is 
31480 75 70 64 61 74 65 64 20 77 69 74 68 20 74 68 65  updated with the
31490 20 6e 75 6d 62 65 72 20 6f 66 20 65 72 72 6f 72   number of error
314a0 73 20 72 65 6d 61 69 6e 69 6e 67 2e 0a 2a 2a 0a  s remaining..**.
314b0 2a 2a 20 54 68 65 20 72 6f 6f 74 20 70 61 67 65  ** The root page
314c0 20 6e 75 6d 62 65 72 73 20 6f 66 20 61 6c 6c 20   numbers of all 
314d0 74 61 62 6c 65 73 20 69 6e 20 74 68 65 20 64 61  tables in the da
314e0 74 61 62 61 73 65 20 61 72 65 20 69 6e 74 65 67  tabase are integ
314f0 65 72 73 0a 2a 2a 20 73 74 6f 72 65 64 20 69 6e  ers.** stored in
31500 20 50 34 5f 49 4e 54 41 52 52 41 59 20 61 72 67   P4_INTARRAY arg
31510 75 6d 65 6e 74 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  ument..**.** If 
31520 50 35 20 69 73 20 6e 6f 74 20 7a 65 72 6f 2c 20  P5 is not zero, 
31530 74 68 65 20 63 68 65 63 6b 20 69 73 20 64 6f 6e  the check is don
31540 65 20 6f 6e 20 74 68 65 20 61 75 78 69 6c 69 61  e on the auxilia
31550 72 79 20 64 61 74 61 62 61 73 65 0a 2a 2a 20 66  ry database.** f
31560 69 6c 65 2c 20 6e 6f 74 20 74 68 65 20 6d 61 69  ile, not the mai
31570 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e  n database file.
31580 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f  .**.** This opco
31590 64 65 20 69 73 20 75 73 65 64 20 74 6f 20 69 6d  de is used to im
315a0 70 6c 65 6d 65 6e 74 20 74 68 65 20 69 6e 74 65  plement the inte
315b0 67 72 69 74 79 5f 63 68 65 63 6b 20 70 72 61 67  grity_check prag
315c0 6d 61 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49  ma..*/.case OP_I
315d0 6e 74 65 67 72 69 74 79 43 6b 3a 20 7b 0a 20 20  ntegrityCk: {.  
315e0 69 6e 74 20 6e 52 6f 6f 74 3b 20 20 20 20 20 20  int nRoot;      
315f0 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 74 61 62  /* Number of tab
31600 6c 65 73 20 74 6f 20 63 68 65 63 6b 2e 20 20 28  les to check.  (
31610 4e 75 6d 62 65 72 20 6f 66 20 72 6f 6f 74 20 70  Number of root p
31620 61 67 65 73 2e 29 20 2a 2f 0a 20 20 69 6e 74 20  ages.) */.  int 
31630 2a 61 52 6f 6f 74 3b 20 20 20 20 20 2f 2a 20 41  *aRoot;     /* A
31640 72 72 61 79 20 6f 66 20 72 6f 6f 74 70 61 67 65  rray of rootpage
31650 20 6e 75 6d 62 65 72 73 20 66 6f 72 20 74 61 62   numbers for tab
31660 6c 65 73 20 74 6f 20 62 65 20 63 68 65 63 6b 65  les to be checke
31670 64 20 2a 2f 0a 20 20 69 6e 74 20 6e 45 72 72 3b  d */.  int nErr;
31680 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
31690 20 6f 66 20 65 72 72 6f 72 73 20 72 65 70 6f 72   of errors repor
316a0 74 65 64 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a  ted */.  char *z
316b0 3b 20 20 20 20 20 20 20 20 2f 2a 20 54 65 78 74  ;        /* Text
316c0 20 6f 66 20 74 68 65 20 65 72 72 6f 72 20 72 65   of the error re
316d0 70 6f 72 74 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70  port */.  Mem *p
316e0 6e 45 72 72 3b 20 20 20 20 20 2f 2a 20 52 65 67  nErr;     /* Reg
316f0 69 73 74 65 72 20 6b 65 65 70 69 6e 67 20 74 72  ister keeping tr
31700 61 63 6b 20 6f 66 20 65 72 72 6f 72 73 20 72 65  ack of errors re
31710 6d 61 69 6e 69 6e 67 20 2a 2f 0a 0a 20 20 61 73  maining */..  as
31720 73 65 72 74 28 20 70 2d 3e 62 49 73 52 65 61 64  sert( p->bIsRead
31730 65 72 20 29 3b 0a 20 20 6e 52 6f 6f 74 20 3d 20  er );.  nRoot = 
31740 70 4f 70 2d 3e 70 32 3b 0a 20 20 61 52 6f 6f 74  pOp->p2;.  aRoot
31750 20 3d 20 70 4f 70 2d 3e 70 34 2e 61 69 3b 0a 20   = pOp->p4.ai;. 
31760 20 61 73 73 65 72 74 28 20 6e 52 6f 6f 74 3e 30   assert( nRoot>0
31770 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 61 52   );.  assert( aR
31780 6f 6f 74 5b 30 5d 3d 3d 6e 52 6f 6f 74 20 29 3b  oot[0]==nRoot );
31790 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
317a0 70 33 3e 30 20 26 26 20 70 4f 70 2d 3e 70 33 3c  p3>0 && pOp->p3<
317b0 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d  =(p->nMem+1 - p-
317c0 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 70  >nCursor) );.  p
317d0 6e 45 72 72 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  nErr = &aMem[pOp
317e0 2d 3e 70 33 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p3];.  assert(
317f0 20 28 70 6e 45 72 72 2d 3e 66 6c 61 67 73 20 26   (pnErr->flags &
31800 20 4d 45 4d 5f 49 6e 74 29 21 3d 30 20 29 3b 0a   MEM_Int)!=0 );.
31810 20 20 61 73 73 65 72 74 28 20 28 70 6e 45 72 72    assert( (pnErr
31820 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f 53  ->flags & (MEM_S
31830 74 72 7c 4d 45 4d 5f 42 6c 6f 62 29 29 3d 3d 30  tr|MEM_Blob))==0
31840 20 29 3b 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d   );.  pIn1 = &aM
31850 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  em[pOp->p1];.  a
31860 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 35 3c 64  ssert( pOp->p5<d
31870 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73 65  b->nDb );.  asse
31880 72 74 28 20 44 62 4d 61 73 6b 54 65 73 74 28 70  rt( DbMaskTest(p
31890 2d 3e 62 74 72 65 65 4d 61 73 6b 2c 20 70 4f 70  ->btreeMask, pOp
318a0 2d 3e 70 35 29 20 29 3b 0a 20 20 7a 20 3d 20 73  ->p5) );.  z = s
318b0 71 6c 69 74 65 33 42 74 72 65 65 49 6e 74 65 67  qlite3BtreeInteg
318c0 72 69 74 79 43 68 65 63 6b 28 64 62 2d 3e 61 44  rityCheck(db->aD
318d0 62 5b 70 4f 70 2d 3e 70 35 5d 2e 70 42 74 2c 20  b[pOp->p5].pBt, 
318e0 26 61 52 6f 6f 74 5b 31 5d 2c 20 6e 52 6f 6f 74  &aRoot[1], nRoot
318f0 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
31900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31910 20 20 20 28 69 6e 74 29 70 6e 45 72 72 2d 3e 75     (int)pnErr->u
31920 2e 69 2b 31 2c 20 26 6e 45 72 72 29 3b 0a 20 20  .i+1, &nErr);.  
31930 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65  sqlite3VdbeMemSe
31940 74 4e 75 6c 6c 28 70 49 6e 31 29 3b 0a 20 20 69  tNull(pIn1);.  i
31950 66 28 20 6e 45 72 72 3d 3d 30 20 29 7b 0a 20 20  f( nErr==0 ){.  
31960 20 20 61 73 73 65 72 74 28 20 7a 3d 3d 30 20 29    assert( z==0 )
31970 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 7a 3d  ;.  }else if( z=
31980 3d 30 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 6e  =0 ){.    goto n
31990 6f 5f 6d 65 6d 3b 0a 20 20 7d 65 6c 73 65 7b 0a  o_mem;.  }else{.
319a0 20 20 20 20 70 6e 45 72 72 2d 3e 75 2e 69 20 2d      pnErr->u.i -
319b0 3d 20 6e 45 72 72 2d 31 3b 0a 20 20 20 20 73 71  = nErr-1;.    sq
319c0 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 53  lite3VdbeMemSetS
319d0 74 72 28 70 49 6e 31 2c 20 7a 2c 20 2d 31 2c 20  tr(pIn1, z, -1, 
319e0 53 51 4c 49 54 45 5f 55 54 46 38 2c 20 73 71 6c  SQLITE_UTF8, sql
319f0 69 74 65 33 5f 66 72 65 65 29 3b 0a 20 20 7d 0a  ite3_free);.  }.
31a00 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f    UPDATE_MAX_BLO
31a10 42 53 49 5a 45 28 70 49 6e 31 29 3b 0a 20 20 73  BSIZE(pIn1);.  s
31a20 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67 65  qlite3VdbeChange
31a30 45 6e 63 6f 64 69 6e 67 28 70 49 6e 31 2c 20 65  Encoding(pIn1, e
31a40 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 62 72 65 61  ncoding);.  brea
31a50 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53  k;.}.#endif /* S
31a60 51 4c 49 54 45 5f 4f 4d 49 54 5f 49 4e 54 45 47  QLITE_OMIT_INTEG
31a70 52 49 54 59 5f 43 48 45 43 4b 20 2a 2f 0a 0a 2f  RITY_CHECK */../
31a80 2a 20 4f 70 63 6f 64 65 3a 20 52 6f 77 53 65 74  * Opcode: RowSet
31a90 41 64 64 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  Add P1 P2 * * *.
31aa0 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 6f 77  ** Synopsis: row
31ab0 73 65 74 28 50 31 29 3d 72 5b 50 32 5d 0a 2a 2a  set(P1)=r[P2].**
31ac0 0a 2a 2a 20 49 6e 73 65 72 74 20 74 68 65 20 69  .** Insert the i
31ad0 6e 74 65 67 65 72 20 76 61 6c 75 65 20 68 65 6c  nteger value hel
31ae0 64 20 62 79 20 72 65 67 69 73 74 65 72 20 50 32  d by register P2
31af0 20 69 6e 74 6f 20 61 20 52 6f 77 53 65 74 20 6f   into a RowSet o
31b00 62 6a 65 63 74 0a 2a 2a 20 68 65 6c 64 20 69 6e  bject.** held in
31b10 20 72 65 67 69 73 74 65 72 20 50 31 2e 0a 2a 2a   register P1..**
31b20 0a 2a 2a 20 41 6e 20 61 73 73 65 72 74 69 6f 6e  .** An assertion
31b30 20 66 61 69 6c 73 20 69 66 20 50 32 20 69 73 20   fails if P2 is 
31b40 6e 6f 74 20 61 6e 20 69 6e 74 65 67 65 72 2e 0a  not an integer..
31b50 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 6f 77 53 65  */.case OP_RowSe
31b60 74 41 64 64 3a 20 7b 20 20 20 20 20 20 20 2f 2a  tAdd: {       /*
31b70 20 69 6e 31 2c 20 69 6e 32 20 2a 2f 0a 20 20 70   in1, in2 */.  p
31b80 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In1 = &aMem[pOp-
31b90 3e 70 31 5d 3b 0a 20 20 70 49 6e 32 20 3d 20 26  >p1];.  pIn2 = &
31ba0 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20  aMem[pOp->p2];. 
31bb0 20 61 73 73 65 72 74 28 20 28 70 49 6e 32 2d 3e   assert( (pIn2->
31bc0 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29  flags & MEM_Int)
31bd0 21 3d 30 20 29 3b 0a 20 20 69 66 28 20 28 70 49  !=0 );.  if( (pI
31be0 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  n1->flags & MEM_
31bf0 42 6c 6f 62 29 3d 3d 30 20 29 7b 0a 20 20 20 20  Blob)==0 ){.    
31c00 69 66 28 20 73 71 6c 69 74 65 33 56 64 62 65 4d  if( sqlite3VdbeM
31c10 65 6d 53 65 74 52 6f 77 53 65 74 28 70 49 6e 31  emSetRowSet(pIn1
31c20 29 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b  ) ) goto no_mem;
31c30 0a 20 20 7d 0a 20 20 61 73 73 65 72 74 28 20 73  .  }.  assert( s
31c40 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 49 73 52  qlite3VdbeMemIsR
31c50 6f 77 53 65 74 28 70 49 6e 31 29 20 29 3b 0a 20  owSet(pIn1) );. 
31c60 20 73 71 6c 69 74 65 33 52 6f 77 53 65 74 49 6e   sqlite3RowSetIn
31c70 73 65 72 74 28 28 52 6f 77 53 65 74 2a 29 70 49  sert((RowSet*)pI
31c80 6e 31 2d 3e 7a 2c 20 70 49 6e 32 2d 3e 75 2e 69  n1->z, pIn2->u.i
31c90 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  );.  break;.}../
31ca0 2a 20 4f 70 63 6f 64 65 3a 20 52 6f 77 53 65 74  * Opcode: RowSet
31cb0 52 65 61 64 20 50 31 20 50 32 20 50 33 20 2a 20  Read P1 P2 P3 * 
31cc0 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72  *.** Synopsis: r
31cd0 5b 50 33 5d 3d 72 6f 77 73 65 74 28 50 31 29 0a  [P3]=rowset(P1).
31ce0 2a 2a 0a 2a 2a 20 45 78 74 72 61 63 74 20 74 68  **.** Extract th
31cf0 65 20 73 6d 61 6c 6c 65 73 74 20 76 61 6c 75 65  e smallest value
31d00 20 66 72 6f 6d 20 74 68 65 20 52 6f 77 53 65 74   from the RowSet
31d10 20 6f 62 6a 65 63 74 20 69 6e 20 50 31 0a 2a 2a   object in P1.**
31d20 20 61 6e 64 20 70 75 74 20 74 68 61 74 20 76 61   and put that va
31d30 6c 75 65 20 69 6e 74 6f 20 72 65 67 69 73 74 65  lue into registe
31d40 72 20 50 33 2e 0a 2a 2a 20 4f 72 2c 20 69 66 20  r P3..** Or, if 
31d50 52 6f 77 53 65 74 20 6f 62 6a 65 63 74 20 50 31  RowSet object P1
31d60 20 69 73 20 69 6e 69 74 69 61 6c 6c 79 20 65 6d   is initially em
31d70 70 74 79 2c 20 6c 65 61 76 65 20 50 33 0a 2a 2a  pty, leave P3.**
31d80 20 75 6e 63 68 61 6e 67 65 64 20 61 6e 64 20 6a   unchanged and j
31d90 75 6d 70 20 74 6f 20 69 6e 73 74 72 75 63 74 69  ump to instructi
31da0 6f 6e 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f  on P2..*/.case O
31db0 50 5f 52 6f 77 53 65 74 52 65 61 64 3a 20 7b 20  P_RowSetRead: { 
31dc0 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69        /* jump, i
31dd0 6e 31 2c 20 6f 75 74 33 20 2a 2f 0a 20 20 69 36  n1, out3 */.  i6
31de0 34 20 76 61 6c 3b 0a 0a 20 20 70 49 6e 31 20 3d  4 val;..  pIn1 =
31df0 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b   &aMem[pOp->p1];
31e00 0a 20 20 61 73 73 65 72 74 28 20 28 70 49 6e 31  .  assert( (pIn1
31e10 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 42 6c  ->flags & MEM_Bl
31e20 6f 62 29 3d 3d 30 20 7c 7c 20 73 71 6c 69 74 65  ob)==0 || sqlite
31e30 33 56 64 62 65 4d 65 6d 49 73 52 6f 77 53 65 74  3VdbeMemIsRowSet
31e40 28 70 49 6e 31 29 20 29 3b 0a 20 20 69 66 28 20  (pIn1) );.  if( 
31e50 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d  (pIn1->flags & M
31e60 45 4d 5f 42 6c 6f 62 29 3d 3d 30 20 0a 20 20 20  EM_Blob)==0 .   
31e70 7c 7c 20 73 71 6c 69 74 65 33 52 6f 77 53 65 74  || sqlite3RowSet
31e80 4e 65 78 74 28 28 52 6f 77 53 65 74 2a 29 70 49  Next((RowSet*)pI
31e90 6e 31 2d 3e 7a 2c 20 26 76 61 6c 29 3d 3d 30 0a  n1->z, &val)==0.
31ea0 20 20 29 7b 0a 20 20 20 20 2f 2a 20 54 68 65 20    ){.    /* The 
31eb0 62 6f 6f 6c 65 61 6e 20 69 6e 64 65 78 20 69 73  boolean index is
31ec0 20 65 6d 70 74 79 20 2a 2f 0a 20 20 20 20 73 71   empty */.    sq
31ed0 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e  lite3VdbeMemSetN
31ee0 75 6c 6c 28 70 49 6e 31 29 3b 0a 20 20 20 20 56  ull(pIn1);.    V
31ef0 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 31  dbeBranchTaken(1
31f00 2c 32 29 3b 0a 20 20 20 20 67 6f 74 6f 20 6a 75  ,2);.    goto ju
31f10 6d 70 5f 74 6f 5f 70 32 5f 61 6e 64 5f 63 68 65  mp_to_p2_and_che
31f20 63 6b 5f 66 6f 72 5f 69 6e 74 65 72 72 75 70 74  ck_for_interrupt
31f30 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 2f  ;.  }else{.    /
31f40 2a 20 41 20 76 61 6c 75 65 20 77 61 73 20 70 75  * A value was pu
31f50 6c 6c 65 64 20 66 72 6f 6d 20 74 68 65 20 69 6e  lled from the in
31f60 64 65 78 20 2a 2f 0a 20 20 20 20 56 64 62 65 42  dex */.    VdbeB
31f70 72 61 6e 63 68 54 61 6b 65 6e 28 30 2c 32 29 3b  ranchTaken(0,2);
31f80 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
31f90 4d 65 6d 53 65 74 49 6e 74 36 34 28 26 61 4d 65  MemSetInt64(&aMe
31fa0 6d 5b 70 4f 70 2d 3e 70 33 5d 2c 20 76 61 6c 29  m[pOp->p3], val)
31fb0 3b 0a 20 20 7d 0a 20 20 67 6f 74 6f 20 63 68 65  ;.  }.  goto che
31fc0 63 6b 5f 66 6f 72 5f 69 6e 74 65 72 72 75 70 74  ck_for_interrupt
31fd0 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
31fe0 52 6f 77 53 65 74 54 65 73 74 20 50 31 20 50 32  RowSetTest P1 P2
31ff0 20 50 33 20 50 34 0a 2a 2a 20 53 79 6e 6f 70 73   P3 P4.** Synops
32000 69 73 3a 20 69 66 20 72 5b 50 33 5d 20 69 6e 20  is: if r[P3] in 
32010 72 6f 77 73 65 74 28 50 31 29 20 67 6f 74 6f 20  rowset(P1) goto 
32020 50 32 0a 2a 2a 0a 2a 2a 20 52 65 67 69 73 74 65  P2.**.** Registe
32030 72 20 50 33 20 69 73 20 61 73 73 75 6d 65 64 20  r P3 is assumed 
32040 74 6f 20 68 6f 6c 64 20 61 20 36 34 2d 62 69 74  to hold a 64-bit
32050 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65 2e 20   integer value. 
32060 49 66 20 72 65 67 69 73 74 65 72 20 50 31 0a 2a  If register P1.*
32070 2a 20 63 6f 6e 74 61 69 6e 73 20 61 20 52 6f 77  * contains a Row
32080 53 65 74 20 6f 62 6a 65 63 74 20 61 6e 64 20 74  Set object and t
32090 68 61 74 20 52 6f 77 53 65 74 20 6f 62 6a 65 63  hat RowSet objec
320a0 74 20 63 6f 6e 74 61 69 6e 73 0a 2a 2a 20 74 68  t contains.** th
320b0 65 20 76 61 6c 75 65 20 68 65 6c 64 20 69 6e 20  e value held in 
320c0 50 33 2c 20 6a 75 6d 70 20 74 6f 20 72 65 67 69  P3, jump to regi
320d0 73 74 65 72 20 50 32 2e 20 4f 74 68 65 72 77 69  ster P2. Otherwi
320e0 73 65 2c 20 69 6e 73 65 72 74 20 74 68 65 0a 2a  se, insert the.*
320f0 2a 20 69 6e 74 65 67 65 72 20 69 6e 20 50 33 20  * integer in P3 
32100 69 6e 74 6f 20 74 68 65 20 52 6f 77 53 65 74 20  into the RowSet 
32110 61 6e 64 20 63 6f 6e 74 69 6e 75 65 20 6f 6e 20  and continue on 
32120 74 6f 20 74 68 65 0a 2a 2a 20 6e 65 78 74 20 6f  to the.** next o
32130 70 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  pcode..**.** The
32140 20 52 6f 77 53 65 74 20 6f 62 6a 65 63 74 20 69   RowSet object i
32150 73 20 6f 70 74 69 6d 69 7a 65 64 20 66 6f 72 20  s optimized for 
32160 74 68 65 20 63 61 73 65 20 77 68 65 72 65 20 73  the case where s
32170 65 74 73 20 6f 66 20 69 6e 74 65 67 65 72 73 0a  ets of integers.
32180 2a 2a 20 61 72 65 20 69 6e 73 65 72 74 65 64 20  ** are inserted 
32190 69 6e 20 64 69 73 74 69 6e 63 74 20 70 68 61 73  in distinct phas
321a0 65 73 2c 20 77 68 69 63 68 20 65 61 63 68 20 73  es, which each s
321b0 65 74 20 63 6f 6e 74 61 69 6e 73 20 6e 6f 20 64  et contains no d
321c0 75 70 6c 69 63 61 74 65 73 2e 0a 2a 2a 20 45 61  uplicates..** Ea
321d0 63 68 20 73 65 74 20 69 73 20 69 64 65 6e 74 69  ch set is identi
321e0 66 69 65 64 20 62 79 20 61 20 75 6e 69 71 75 65  fied by a unique
321f0 20 50 34 20 76 61 6c 75 65 2e 20 54 68 65 20 66   P4 value. The f
32200 69 72 73 74 20 73 65 74 0a 2a 2a 20 6d 75 73 74  irst set.** must
32210 20 68 61 76 65 20 50 34 3d 3d 30 2c 20 74 68 65   have P4==0, the
32220 20 66 69 6e 61 6c 20 73 65 74 20 6d 75 73 74 20   final set must 
32230 68 61 76 65 20 50 34 3d 3d 2d 31 2c 20 61 6e 64  have P4==-1, and
32240 20 66 6f 72 20 61 6c 6c 20 6f 74 68 65 72 20 73   for all other s
32250 65 74 73 0a 2a 2a 20 6d 75 73 74 20 68 61 76 65  ets.** must have
32260 20 50 34 3e 30 2e 0a 2a 2a 0a 2a 2a 20 54 68 69   P4>0..**.** Thi
32270 73 20 61 6c 6c 6f 77 73 20 6f 70 74 69 6d 69 7a  s allows optimiz
32280 61 74 69 6f 6e 73 3a 20 28 61 29 20 77 68 65 6e  ations: (a) when
32290 20 50 34 3d 3d 30 20 74 68 65 72 65 20 69 73 20   P4==0 there is 
322a0 6e 6f 20 6e 65 65 64 20 74 6f 20 74 65 73 74 0a  no need to test.
322b0 2a 2a 20 74 68 65 20 52 6f 77 53 65 74 20 6f 62  ** the RowSet ob
322c0 6a 65 63 74 20 66 6f 72 20 50 33 2c 20 61 73 20  ject for P3, as 
322d0 69 74 20 69 73 20 67 75 61 72 61 6e 74 65 65 64  it is guaranteed
322e0 20 6e 6f 74 20 74 6f 20 63 6f 6e 74 61 69 6e 20   not to contain 
322f0 69 74 2c 0a 2a 2a 20 28 62 29 20 77 68 65 6e 20  it,.** (b) when 
32300 50 34 3d 3d 2d 31 20 74 68 65 72 65 20 69 73 20  P4==-1 there is 
32310 6e 6f 20 6e 65 65 64 20 74 6f 20 69 6e 73 65 72  no need to inser
32320 74 20 74 68 65 20 76 61 6c 75 65 2c 20 61 73 20  t the value, as 
32330 69 74 20 77 69 6c 6c 0a 2a 2a 20 6e 65 76 65 72  it will.** never
32340 20 62 65 20 74 65 73 74 65 64 20 66 6f 72 2c 20   be tested for, 
32350 61 6e 64 20 28 63 29 20 77 68 65 6e 20 61 20 76  and (c) when a v
32360 61 6c 75 65 20 74 68 61 74 20 69 73 20 70 61 72  alue that is par
32370 74 20 6f 66 20 73 65 74 20 58 20 69 73 0a 2a 2a  t of set X is.**
32380 20 69 6e 73 65 72 74 65 64 2c 20 74 68 65 72 65   inserted, there
32390 20 69 73 20 6e 6f 20 6e 65 65 64 20 74 6f 20 73   is no need to s
323a0 65 61 72 63 68 20 74 6f 20 73 65 65 20 69 66 20  earch to see if 
323b0 74 68 65 20 73 61 6d 65 20 76 61 6c 75 65 20 77  the same value w
323c0 61 73 0a 2a 2a 20 70 72 65 76 69 6f 75 73 6c 79  as.** previously
323d0 20 69 6e 73 65 72 74 65 64 20 61 73 20 70 61 72   inserted as par
323e0 74 20 6f 66 20 73 65 74 20 58 20 28 6f 6e 6c 79  t of set X (only
323f0 20 69 66 20 69 74 20 77 61 73 20 70 72 65 76 69   if it was previ
32400 6f 75 73 6c 79 0a 2a 2a 20 69 6e 73 65 72 74 65  ously.** inserte
32410 64 20 61 73 20 70 61 72 74 20 6f 66 20 73 6f 6d  d as part of som
32420 65 20 6f 74 68 65 72 20 73 65 74 29 2e 0a 2a 2f  e other set)..*/
32430 0a 63 61 73 65 20 4f 50 5f 52 6f 77 53 65 74 54  .case OP_RowSetT
32440 65 73 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20  est: {          
32450 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75             /* ju
32460 6d 70 2c 20 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a  mp, in1, in3 */.
32470 20 20 69 6e 74 20 69 53 65 74 3b 0a 20 20 69 6e    int iSet;.  in
32480 74 20 65 78 69 73 74 73 3b 0a 0a 20 20 70 49 6e  t exists;..  pIn
32490 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  1 = &aMem[pOp->p
324a0 31 5d 3b 0a 20 20 70 49 6e 33 20 3d 20 26 61 4d  1];.  pIn3 = &aM
324b0 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 69  em[pOp->p3];.  i
324c0 53 65 74 20 3d 20 70 4f 70 2d 3e 70 34 2e 69 3b  Set = pOp->p4.i;
324d0 0a 20 20 61 73 73 65 72 74 28 20 70 49 6e 33 2d  .  assert( pIn3-
324e0 3e 66 6c 61 67 73 26 4d 45 4d 5f 49 6e 74 20 29  >flags&MEM_Int )
324f0 3b 0a 0a 20 20 2f 2a 20 49 66 20 74 68 65 72 65  ;..  /* If there
32500 20 69 73 20 61 6e 79 74 68 69 6e 67 20 6f 74 68   is anything oth
32510 65 72 20 74 68 61 6e 20 61 20 72 6f 77 73 65 74  er than a rowset
32520 20 6f 62 6a 65 63 74 20 69 6e 20 6d 65 6d 6f 72   object in memor
32530 79 20 63 65 6c 6c 20 50 31 2c 0a 20 20 2a 2a 20  y cell P1,.  ** 
32540 64 65 6c 65 74 65 20 69 74 20 6e 6f 77 20 61 6e  delete it now an
32550 64 20 69 6e 69 74 69 61 6c 69 7a 65 20 50 31 20  d initialize P1 
32560 77 69 74 68 20 61 6e 20 65 6d 70 74 79 20 72 6f  with an empty ro
32570 77 73 65 74 0a 20 20 2a 2f 0a 20 20 69 66 28 20  wset.  */.  if( 
32580 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d  (pIn1->flags & M
32590 45 4d 5f 42 6c 6f 62 29 3d 3d 30 20 29 7b 0a 20  EM_Blob)==0 ){. 
325a0 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 56 64     if( sqlite3Vd
325b0 62 65 4d 65 6d 53 65 74 52 6f 77 53 65 74 28 70  beMemSetRowSet(p
325c0 49 6e 31 29 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d  In1) ) goto no_m
325d0 65 6d 3b 0a 20 20 7d 0a 20 20 61 73 73 65 72 74  em;.  }.  assert
325e0 28 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d  ( sqlite3VdbeMem
325f0 49 73 52 6f 77 53 65 74 28 70 49 6e 31 29 20 29  IsRowSet(pIn1) )
32600 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
32610 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54 33  >p4type==P4_INT3
32620 32 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 69  2 );.  assert( i
32630 53 65 74 3d 3d 2d 31 20 7c 7c 20 69 53 65 74 3e  Set==-1 || iSet>
32640 3d 30 20 29 3b 0a 20 20 69 66 28 20 69 53 65 74  =0 );.  if( iSet
32650 20 29 7b 0a 20 20 20 20 65 78 69 73 74 73 20 3d   ){.    exists =
32660 20 73 71 6c 69 74 65 33 52 6f 77 53 65 74 54 65   sqlite3RowSetTe
32670 73 74 28 28 52 6f 77 53 65 74 2a 29 70 49 6e 31  st((RowSet*)pIn1
32680 2d 3e 7a 2c 20 69 53 65 74 2c 20 70 49 6e 33 2d  ->z, iSet, pIn3-
32690 3e 75 2e 69 29 3b 0a 20 20 20 20 56 64 62 65 42  >u.i);.    VdbeB
326a0 72 61 6e 63 68 54 61 6b 65 6e 28 65 78 69 73 74  ranchTaken(exist
326b0 73 21 3d 30 2c 32 29 3b 0a 20 20 20 20 69 66 28  s!=0,2);.    if(
326c0 20 65 78 69 73 74 73 20 29 20 67 6f 74 6f 20 6a   exists ) goto j
326d0 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 7d 0a 20  ump_to_p2;.  }. 
326e0 20 69 66 28 20 69 53 65 74 3e 3d 30 20 29 7b 0a   if( iSet>=0 ){.
326f0 20 20 20 20 73 71 6c 69 74 65 33 52 6f 77 53 65      sqlite3RowSe
32700 74 49 6e 73 65 72 74 28 28 52 6f 77 53 65 74 2a  tInsert((RowSet*
32710 29 70 49 6e 31 2d 3e 7a 2c 20 70 49 6e 33 2d 3e  )pIn1->z, pIn3->
32720 75 2e 69 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61  u.i);.  }.  brea
32730 6b 3b 0a 7d 0a 0a 0a 23 69 66 6e 64 65 66 20 53  k;.}...#ifndef S
32740 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 49 47 47  QLITE_OMIT_TRIGG
32750 45 52 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 50  ER../* Opcode: P
32760 72 6f 67 72 61 6d 20 50 31 20 50 32 20 50 33 20  rogram P1 P2 P3 
32770 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 45 78 65 63  P4 P5.**.** Exec
32780 75 74 65 20 74 68 65 20 74 72 69 67 67 65 72 20  ute the trigger 
32790 70 72 6f 67 72 61 6d 20 70 61 73 73 65 64 20 61  program passed a
327a0 73 20 50 34 20 28 74 79 70 65 20 50 34 5f 53 55  s P4 (type P4_SU
327b0 42 50 52 4f 47 52 41 4d 29 2e 20 0a 2a 2a 0a 2a  BPROGRAM). .**.*
327c0 2a 20 50 31 20 63 6f 6e 74 61 69 6e 73 20 74 68  * P1 contains th
327d0 65 20 61 64 64 72 65 73 73 20 6f 66 20 74 68 65  e address of the
327e0 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 74 68 61   memory cell tha
327f0 74 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 66  t contains the f
32800 69 72 73 74 20 6d 65 6d 6f 72 79 20 0a 2a 2a 20  irst memory .** 
32810 63 65 6c 6c 20 69 6e 20 61 6e 20 61 72 72 61 79  cell in an array
32820 20 6f 66 20 76 61 6c 75 65 73 20 75 73 65 64 20   of values used 
32830 61 73 20 61 72 67 75 6d 65 6e 74 73 20 74 6f 20  as arguments to 
32840 74 68 65 20 73 75 62 2d 70 72 6f 67 72 61 6d 2e  the sub-program.
32850 20 50 32 20 0a 2a 2a 20 63 6f 6e 74 61 69 6e 73   P2 .** contains
32860 20 74 68 65 20 61 64 64 72 65 73 73 20 74 6f 20   the address to 
32870 6a 75 6d 70 20 74 6f 20 69 66 20 74 68 65 20 73  jump to if the s
32880 75 62 2d 70 72 6f 67 72 61 6d 20 74 68 72 6f 77  ub-program throw
32890 73 20 61 6e 20 49 47 4e 4f 52 45 20 0a 2a 2a 20  s an IGNORE .** 
328a0 65 78 63 65 70 74 69 6f 6e 20 75 73 69 6e 67 20  exception using 
328b0 74 68 65 20 52 41 49 53 45 28 29 20 66 75 6e 63  the RAISE() func
328c0 74 69 6f 6e 2e 20 52 65 67 69 73 74 65 72 20 50  tion. Register P
328d0 33 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 61  3 contains the a
328e0 64 64 72 65 73 73 20 0a 2a 2a 20 6f 66 20 61 20  ddress .** of a 
328f0 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 69 6e 20 74  memory cell in t
32900 68 69 73 20 28 74 68 65 20 70 61 72 65 6e 74 29  his (the parent)
32910 20 56 4d 20 74 68 61 74 20 69 73 20 75 73 65 64   VM that is used
32920 20 74 6f 20 61 6c 6c 6f 63 61 74 65 20 74 68 65   to allocate the
32930 20 0a 2a 2a 20 6d 65 6d 6f 72 79 20 72 65 71 75   .** memory requ
32940 69 72 65 64 20 62 79 20 74 68 65 20 73 75 62 2d  ired by the sub-
32950 76 64 62 65 20 61 74 20 72 75 6e 74 69 6d 65 2e  vdbe at runtime.
32960 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20 70  .**.** P4 is a p
32970 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20 56 4d  ointer to the VM
32980 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20   containing the 
32990 74 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d 2e  trigger program.
329a0 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 20 69 73 20  .**.** If P5 is 
329b0 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65 6e 20 72  non-zero, then r
329c0 65 63 75 72 73 69 76 65 20 70 72 6f 67 72 61 6d  ecursive program
329d0 20 69 6e 76 6f 63 61 74 69 6f 6e 20 69 73 20 65   invocation is e
329e0 6e 61 62 6c 65 64 2e 0a 2a 2f 0a 63 61 73 65 20  nabled..*/.case 
329f0 4f 50 5f 50 72 6f 67 72 61 6d 3a 20 7b 20 20 20  OP_Program: {   
32a00 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a       /* jump */.
32a10 20 20 69 6e 74 20 6e 4d 65 6d 3b 20 20 20 20 20    int nMem;     
32a20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
32a30 62 65 72 20 6f 66 20 6d 65 6d 6f 72 79 20 72 65  ber of memory re
32a40 67 69 73 74 65 72 73 20 66 6f 72 20 73 75 62 2d  gisters for sub-
32a50 70 72 6f 67 72 61 6d 20 2a 2f 0a 20 20 69 6e 74  program */.  int
32a60 20 6e 42 79 74 65 3b 20 20 20 20 20 20 20 20 20   nByte;         
32a70 20 20 20 20 20 2f 2a 20 42 79 74 65 73 20 6f 66       /* Bytes of
32a80 20 72 75 6e 74 69 6d 65 20 73 70 61 63 65 20 72   runtime space r
32a90 65 71 75 69 72 65 64 20 66 6f 72 20 73 75 62 2d  equired for sub-
32aa0 70 72 6f 67 72 61 6d 20 2a 2f 0a 20 20 4d 65 6d  program */.  Mem
32ab0 20 2a 70 52 74 3b 20 20 20 20 20 20 20 20 20 20   *pRt;          
32ac0 20 20 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72       /* Register
32ad0 20 74 6f 20 61 6c 6c 6f 63 61 74 65 20 72 75 6e   to allocate run
32ae0 74 69 6d 65 20 73 70 61 63 65 20 2a 2f 0a 20 20  time space */.  
32af0 4d 65 6d 20 2a 70 4d 65 6d 3b 20 20 20 20 20 20  Mem *pMem;      
32b00 20 20 20 20 20 20 20 20 2f 2a 20 55 73 65 64 20          /* Used 
32b10 74 6f 20 69 74 65 72 61 74 65 20 74 68 72 6f 75  to iterate throu
32b20 67 68 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 73 20  gh memory cells 
32b30 2a 2f 0a 20 20 4d 65 6d 20 2a 70 45 6e 64 3b 20  */.  Mem *pEnd; 
32b40 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
32b50 4c 61 73 74 20 6d 65 6d 6f 72 79 20 63 65 6c 6c  Last memory cell
32b60 20 69 6e 20 6e 65 77 20 61 72 72 61 79 20 2a 2f   in new array */
32b70 0a 20 20 56 64 62 65 46 72 61 6d 65 20 2a 70 46  .  VdbeFrame *pF
32b80 72 61 6d 65 3b 20 20 20 20 20 20 2f 2a 20 4e 65  rame;      /* Ne
32b90 77 20 76 64 62 65 20 66 72 61 6d 65 20 74 6f 20  w vdbe frame to 
32ba0 65 78 65 63 75 74 65 20 69 6e 20 2a 2f 0a 20 20  execute in */.  
32bb0 53 75 62 50 72 6f 67 72 61 6d 20 2a 70 50 72 6f  SubProgram *pPro
32bc0 67 72 61 6d 3b 20 20 20 2f 2a 20 53 75 62 2d 70  gram;   /* Sub-p
32bd0 72 6f 67 72 61 6d 20 74 6f 20 65 78 65 63 75 74  rogram to execut
32be0 65 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 74 3b 20  e */.  void *t; 
32bf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
32c00 2a 20 54 6f 6b 65 6e 20 69 64 65 6e 74 69 66 79  * Token identify
32c10 69 6e 67 20 74 72 69 67 67 65 72 20 2a 2f 0a 0a  ing trigger */..
32c20 20 20 70 50 72 6f 67 72 61 6d 20 3d 20 70 4f 70    pProgram = pOp
32c30 2d 3e 70 34 2e 70 50 72 6f 67 72 61 6d 3b 0a 20  ->p4.pProgram;. 
32c40 20 70 52 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70   pRt = &aMem[pOp
32c50 2d 3e 70 33 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p3];.  assert(
32c60 20 70 50 72 6f 67 72 61 6d 2d 3e 6e 4f 70 3e 30   pProgram->nOp>0
32c70 20 29 3b 0a 20 20 0a 20 20 2f 2a 20 49 66 20 74   );.  .  /* If t
32c80 68 65 20 70 35 20 66 6c 61 67 20 69 73 20 63 6c  he p5 flag is cl
32c90 65 61 72 2c 20 74 68 65 6e 20 72 65 63 75 72 73  ear, then recurs
32ca0 69 76 65 20 69 6e 76 6f 63 61 74 69 6f 6e 20 6f  ive invocation o
32cb0 66 20 74 72 69 67 67 65 72 73 20 69 73 20 0a 20  f triggers is . 
32cc0 20 2a 2a 20 64 69 73 61 62 6c 65 64 20 66 6f 72   ** disabled for
32cd0 20 62 61 63 6b 77 61 72 64 73 20 63 6f 6d 70 61   backwards compa
32ce0 74 69 62 69 6c 69 74 79 20 28 70 35 20 69 73 20  tibility (p5 is 
32cf0 73 65 74 20 69 66 20 74 68 69 73 20 73 75 62 2d  set if this sub-
32d00 70 72 6f 67 72 61 6d 0a 20 20 2a 2a 20 69 73 20  program.  ** is 
32d10 72 65 61 6c 6c 79 20 61 20 74 72 69 67 67 65 72  really a trigger
32d20 2c 20 6e 6f 74 20 61 20 66 6f 72 65 69 67 6e 20  , not a foreign 
32d30 6b 65 79 20 61 63 74 69 6f 6e 2c 20 61 6e 64 20  key action, and 
32d40 74 68 65 20 66 6c 61 67 20 73 65 74 0a 20 20 2a  the flag set.  *
32d50 2a 20 61 6e 64 20 63 6c 65 61 72 65 64 20 62 79  * and cleared by
32d60 20 74 68 65 20 22 50 52 41 47 4d 41 20 72 65 63   the "PRAGMA rec
32d70 75 72 73 69 76 65 5f 74 72 69 67 67 65 72 73 22  ursive_triggers"
32d80 20 63 6f 6d 6d 61 6e 64 20 69 73 20 63 6c 65 61   command is clea
32d90 72 29 2e 0a 20 20 2a 2a 20 0a 20 20 2a 2a 20 49  r)..  ** .  ** I
32da0 74 20 69 73 20 72 65 63 75 72 73 69 76 65 20 69  t is recursive i
32db0 6e 76 6f 63 61 74 69 6f 6e 20 6f 66 20 74 72 69  nvocation of tri
32dc0 67 67 65 72 73 2c 20 61 74 20 74 68 65 20 53 51  ggers, at the SQ
32dd0 4c 20 6c 65 76 65 6c 2c 20 74 68 61 74 20 69 73  L level, that is
32de0 20 0a 20 20 2a 2a 20 64 69 73 61 62 6c 65 64 2e   .  ** disabled.
32df0 20 49 6e 20 73 6f 6d 65 20 63 61 73 65 73 20 61   In some cases a
32e00 20 73 69 6e 67 6c 65 20 74 72 69 67 67 65 72 20   single trigger 
32e10 6d 61 79 20 67 65 6e 65 72 61 74 65 20 6d 6f 72  may generate mor
32e20 65 20 74 68 61 6e 20 6f 6e 65 20 0a 20 20 2a 2a  e than one .  **
32e30 20 53 75 62 50 72 6f 67 72 61 6d 20 28 69 66 20   SubProgram (if 
32e40 74 68 65 20 74 72 69 67 67 65 72 20 6d 61 79 20  the trigger may 
32e50 62 65 20 65 78 65 63 75 74 65 64 20 77 69 74 68  be executed with
32e60 20 6d 6f 72 65 20 74 68 61 6e 20 6f 6e 65 20 64   more than one d
32e70 69 66 66 65 72 65 6e 74 20 0a 20 20 2a 2a 20 4f  ifferent .  ** O
32e80 4e 20 43 4f 4e 46 4c 49 43 54 20 61 6c 67 6f 72  N CONFLICT algor
32e90 69 74 68 6d 29 2e 20 53 75 62 50 72 6f 67 72 61  ithm). SubProgra
32ea0 6d 20 73 74 72 75 63 74 75 72 65 73 20 61 73 73  m structures ass
32eb0 6f 63 69 61 74 65 64 20 77 69 74 68 20 61 0a 20  ociated with a. 
32ec0 20 2a 2a 20 73 69 6e 67 6c 65 20 74 72 69 67 67   ** single trigg
32ed0 65 72 20 61 6c 6c 20 68 61 76 65 20 74 68 65 20  er all have the 
32ee0 73 61 6d 65 20 76 61 6c 75 65 20 66 6f 72 20 74  same value for t
32ef0 68 65 20 53 75 62 50 72 6f 67 72 61 6d 2e 74 6f  he SubProgram.to
32f00 6b 65 6e 20 0a 20 20 2a 2a 20 76 61 72 69 61 62  ken .  ** variab
32f10 6c 65 2e 20 20 2a 2f 0a 20 20 69 66 28 20 70 4f  le.  */.  if( pO
32f20 70 2d 3e 70 35 20 29 7b 0a 20 20 20 20 74 20 3d  p->p5 ){.    t =
32f30 20 70 50 72 6f 67 72 61 6d 2d 3e 74 6f 6b 65 6e   pProgram->token
32f40 3b 0a 20 20 20 20 66 6f 72 28 70 46 72 61 6d 65  ;.    for(pFrame
32f50 3d 70 2d 3e 70 46 72 61 6d 65 3b 20 70 46 72 61  =p->pFrame; pFra
32f60 6d 65 20 26 26 20 70 46 72 61 6d 65 2d 3e 74 6f  me && pFrame->to
32f70 6b 65 6e 21 3d 74 3b 20 70 46 72 61 6d 65 3d 70  ken!=t; pFrame=p
32f80 46 72 61 6d 65 2d 3e 70 50 61 72 65 6e 74 29 3b  Frame->pParent);
32f90 0a 20 20 20 20 69 66 28 20 70 46 72 61 6d 65 20  .    if( pFrame 
32fa0 29 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20  ) break;.  }..  
32fb0 69 66 28 20 70 2d 3e 6e 46 72 61 6d 65 3e 3d 64  if( p->nFrame>=d
32fc0 62 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45  b->aLimit[SQLITE
32fd0 5f 4c 49 4d 49 54 5f 54 52 49 47 47 45 52 5f 44  _LIMIT_TRIGGER_D
32fe0 45 50 54 48 5d 20 29 7b 0a 20 20 20 20 72 63 20  EPTH] ){.    rc 
32ff0 3d 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 3b 0a  = SQLITE_ERROR;.
33000 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 45      sqlite3VdbeE
33010 72 72 6f 72 28 70 2c 20 22 74 6f 6f 20 6d 61 6e  rror(p, "too man
33020 79 20 6c 65 76 65 6c 73 20 6f 66 20 74 72 69 67  y levels of trig
33030 67 65 72 20 72 65 63 75 72 73 69 6f 6e 22 29 3b  ger recursion");
33040 0a 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f  .    goto abort_
33050 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
33060 7d 0a 0a 20 20 2f 2a 20 52 65 67 69 73 74 65 72  }..  /* Register
33070 20 70 52 74 20 69 73 20 75 73 65 64 20 74 6f 20   pRt is used to 
33080 73 74 6f 72 65 20 74 68 65 20 6d 65 6d 6f 72 79  store the memory
33090 20 72 65 71 75 69 72 65 64 20 74 6f 20 73 61 76   required to sav
330a0 65 20 74 68 65 20 73 74 61 74 65 0a 20 20 2a 2a  e the state.  **
330b0 20 6f 66 20 74 68 65 20 63 75 72 72 65 6e 74 20   of the current 
330c0 70 72 6f 67 72 61 6d 2c 20 61 6e 64 20 74 68 65  program, and the
330d0 20 6d 65 6d 6f 72 79 20 72 65 71 75 69 72 65 64   memory required
330e0 20 61 74 20 72 75 6e 74 69 6d 65 20 74 6f 20 65   at runtime to e
330f0 78 65 63 75 74 65 0a 20 20 2a 2a 20 74 68 65 20  xecute.  ** the 
33100 74 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d 2e  trigger program.
33110 20 49 66 20 74 68 69 73 20 74 72 69 67 67 65 72   If this trigger
33120 20 68 61 73 20 62 65 65 6e 20 66 69 72 65 64 20   has been fired 
33130 62 65 66 6f 72 65 2c 20 74 68 65 6e 20 70 52 74  before, then pRt
33140 20 0a 20 20 2a 2a 20 69 73 20 61 6c 72 65 61 64   .  ** is alread
33150 79 20 61 6c 6c 6f 63 61 74 65 64 2e 20 4f 74 68  y allocated. Oth
33160 65 72 77 69 73 65 2c 20 69 74 20 6d 75 73 74 20  erwise, it must 
33170 62 65 20 69 6e 69 74 69 61 6c 69 7a 65 64 2e 20  be initialized. 
33180 20 2a 2f 0a 20 20 69 66 28 20 28 70 52 74 2d 3e   */.  if( (pRt->
33190 66 6c 61 67 73 26 4d 45 4d 5f 42 6c 6f 62 29 3d  flags&MEM_Blob)=
331a0 3d 30 20 29 7b 0a 20 20 20 20 2f 2a 20 53 75 62  =0 ){.    /* Sub
331b0 50 72 6f 67 72 61 6d 2e 6e 4d 65 6d 20 69 73 20  Program.nMem is 
331c0 73 65 74 20 74 6f 20 74 68 65 20 6e 75 6d 62 65  set to the numbe
331d0 72 20 6f 66 20 6d 65 6d 6f 72 79 20 63 65 6c 6c  r of memory cell
331e0 73 20 75 73 65 64 20 62 79 20 74 68 65 20 0a 20  s used by the . 
331f0 20 20 20 2a 2a 20 70 72 6f 67 72 61 6d 20 73 74     ** program st
33200 6f 72 65 64 20 69 6e 20 53 75 62 50 72 6f 67 72  ored in SubProgr
33210 61 6d 2e 61 4f 70 2e 20 41 73 20 77 65 6c 6c 20  am.aOp. As well 
33220 61 73 20 74 68 65 73 65 2c 20 6f 6e 65 20 6d 65  as these, one me
33230 6d 6f 72 79 0a 20 20 20 20 2a 2a 20 63 65 6c 6c  mory.    ** cell
33240 20 69 73 20 72 65 71 75 69 72 65 64 20 66 6f 72   is required for
33250 20 65 61 63 68 20 63 75 72 73 6f 72 20 75 73 65   each cursor use
33260 64 20 62 79 20 74 68 65 20 70 72 6f 67 72 61 6d  d by the program
33270 2e 20 53 65 74 20 6c 6f 63 61 6c 0a 20 20 20 20  . Set local.    
33280 2a 2a 20 76 61 72 69 61 62 6c 65 20 6e 4d 65 6d  ** variable nMem
33290 20 28 61 6e 64 20 6c 61 74 65 72 2c 20 56 64 62   (and later, Vdb
332a0 65 46 72 61 6d 65 2e 6e 43 68 69 6c 64 4d 65 6d  eFrame.nChildMem
332b0 29 20 74 6f 20 74 68 69 73 20 76 61 6c 75 65 2e  ) to this value.
332c0 0a 20 20 20 20 2a 2f 0a 20 20 20 20 6e 4d 65 6d  .    */.    nMem
332d0 20 3d 20 70 50 72 6f 67 72 61 6d 2d 3e 6e 4d 65   = pProgram->nMe
332e0 6d 20 2b 20 70 50 72 6f 67 72 61 6d 2d 3e 6e 43  m + pProgram->nC
332f0 73 72 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20  sr;.    assert( 
33300 6e 4d 65 6d 3e 30 20 29 3b 0a 20 20 20 20 69 66  nMem>0 );.    if
33310 28 20 70 50 72 6f 67 72 61 6d 2d 3e 6e 43 73 72  ( pProgram->nCsr
33320 3d 3d 30 20 29 20 6e 4d 65 6d 2b 2b 3b 0a 20 20  ==0 ) nMem++;.  
33330 20 20 6e 42 79 74 65 20 3d 20 52 4f 55 4e 44 38    nByte = ROUND8
33340 28 73 69 7a 65 6f 66 28 56 64 62 65 46 72 61 6d  (sizeof(VdbeFram
33350 65 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20  e)).            
33360 20 20 2b 20 6e 4d 65 6d 20 2a 20 73 69 7a 65 6f    + nMem * sizeo
33370 66 28 4d 65 6d 29 0a 20 20 20 20 20 20 20 20 20  f(Mem).         
33380 20 20 20 20 20 2b 20 70 50 72 6f 67 72 61 6d 2d       + pProgram-
33390 3e 6e 43 73 72 20 2a 20 73 69 7a 65 6f 66 28 56  >nCsr * sizeof(V
333a0 64 62 65 43 75 72 73 6f 72 2a 29 0a 20 20 20 20  dbeCursor*).    
333b0 20 20 20 20 20 20 20 20 20 20 2b 20 28 70 50 72            + (pPr
333c0 6f 67 72 61 6d 2d 3e 6e 4f 70 20 2b 20 37 29 2f  ogram->nOp + 7)/
333d0 38 3b 0a 20 20 20 20 70 46 72 61 6d 65 20 3d 20  8;.    pFrame = 
333e0 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 5a  sqlite3DbMallocZ
333f0 65 72 6f 28 64 62 2c 20 6e 42 79 74 65 29 3b 0a  ero(db, nByte);.
33400 20 20 20 20 69 66 28 20 21 70 46 72 61 6d 65 20      if( !pFrame 
33410 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20 6e 6f  ){.      goto no
33420 5f 6d 65 6d 3b 0a 20 20 20 20 7d 0a 20 20 20 20  _mem;.    }.    
33430 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 52 65  sqlite3VdbeMemRe
33440 6c 65 61 73 65 28 70 52 74 29 3b 0a 20 20 20 20  lease(pRt);.    
33450 70 52 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d  pRt->flags = MEM
33460 5f 42 6c 6f 62 7c 4d 45 4d 5f 44 79 6e 3b 0a 20  _Blob|MEM_Dyn;. 
33470 20 20 20 70 52 74 2d 3e 7a 20 3d 20 28 63 68 61     pRt->z = (cha
33480 72 2a 29 70 46 72 61 6d 65 3b 0a 20 20 20 20 70  r*)pFrame;.    p
33490 52 74 2d 3e 6e 20 3d 20 6e 42 79 74 65 3b 0a 20  Rt->n = nByte;. 
334a0 20 20 20 70 52 74 2d 3e 78 44 65 6c 20 3d 20 73     pRt->xDel = s
334b0 71 6c 69 74 65 33 56 64 62 65 46 72 61 6d 65 4d  qlite3VdbeFrameM
334c0 65 6d 44 65 6c 3b 0a 0a 20 20 20 20 70 46 72 61  emDel;..    pFra
334d0 6d 65 2d 3e 76 20 3d 20 70 3b 0a 20 20 20 20 70  me->v = p;.    p
334e0 46 72 61 6d 65 2d 3e 6e 43 68 69 6c 64 4d 65 6d  Frame->nChildMem
334f0 20 3d 20 6e 4d 65 6d 3b 0a 20 20 20 20 70 46 72   = nMem;.    pFr
33500 61 6d 65 2d 3e 6e 43 68 69 6c 64 43 73 72 20 3d  ame->nChildCsr =
33510 20 70 50 72 6f 67 72 61 6d 2d 3e 6e 43 73 72 3b   pProgram->nCsr;
33520 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 70 63 20  .    pFrame->pc 
33530 3d 20 28 69 6e 74 29 28 70 4f 70 20 2d 20 61 4f  = (int)(pOp - aO
33540 70 29 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e  p);.    pFrame->
33550 61 4d 65 6d 20 3d 20 70 2d 3e 61 4d 65 6d 3b 0a  aMem = p->aMem;.
33560 20 20 20 20 70 46 72 61 6d 65 2d 3e 6e 4d 65 6d      pFrame->nMem
33570 20 3d 20 70 2d 3e 6e 4d 65 6d 3b 0a 20 20 20 20   = p->nMem;.    
33580 70 46 72 61 6d 65 2d 3e 61 70 43 73 72 20 3d 20  pFrame->apCsr = 
33590 70 2d 3e 61 70 43 73 72 3b 0a 20 20 20 20 70 46  p->apCsr;.    pF
335a0 72 61 6d 65 2d 3e 6e 43 75 72 73 6f 72 20 3d 20  rame->nCursor = 
335b0 70 2d 3e 6e 43 75 72 73 6f 72 3b 0a 20 20 20 20  p->nCursor;.    
335c0 70 46 72 61 6d 65 2d 3e 61 4f 70 20 3d 20 70 2d  pFrame->aOp = p-
335d0 3e 61 4f 70 3b 0a 20 20 20 20 70 46 72 61 6d 65  >aOp;.    pFrame
335e0 2d 3e 6e 4f 70 20 3d 20 70 2d 3e 6e 4f 70 3b 0a  ->nOp = p->nOp;.
335f0 20 20 20 20 70 46 72 61 6d 65 2d 3e 74 6f 6b 65      pFrame->toke
33600 6e 20 3d 20 70 50 72 6f 67 72 61 6d 2d 3e 74 6f  n = pProgram->to
33610 6b 65 6e 3b 0a 23 69 66 64 65 66 20 53 51 4c 49  ken;.#ifdef SQLI
33620 54 45 5f 45 4e 41 42 4c 45 5f 53 54 4d 54 5f 53  TE_ENABLE_STMT_S
33630 43 41 4e 53 54 41 54 55 53 0a 20 20 20 20 70 46  CANSTATUS.    pF
33640 72 61 6d 65 2d 3e 61 6e 45 78 65 63 20 3d 20 70  rame->anExec = p
33650 2d 3e 61 6e 45 78 65 63 3b 0a 23 65 6e 64 69 66  ->anExec;.#endif
33660 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44  .#ifdef SQLITE_D
33670 45 42 55 47 0a 20 20 20 20 70 46 72 61 6d 65 2d  EBUG.    pFrame-
33680 3e 69 46 72 61 6d 65 4d 61 67 69 63 20 3d 20 53  >iFrameMagic = S
33690 51 4c 49 54 45 5f 46 52 41 4d 45 5f 4d 41 47 49  QLITE_FRAME_MAGI
336a0 43 3b 0a 23 65 6e 64 69 66 0a 0a 20 20 20 20 70  C;.#endif..    p
336b0 45 6e 64 20 3d 20 26 56 64 62 65 46 72 61 6d 65  End = &VdbeFrame
336c0 4d 65 6d 28 70 46 72 61 6d 65 29 5b 70 46 72 61  Mem(pFrame)[pFra
336d0 6d 65 2d 3e 6e 43 68 69 6c 64 4d 65 6d 5d 3b 0a  me->nChildMem];.
336e0 20 20 20 20 66 6f 72 28 70 4d 65 6d 3d 56 64 62      for(pMem=Vdb
336f0 65 46 72 61 6d 65 4d 65 6d 28 70 46 72 61 6d 65  eFrameMem(pFrame
33700 29 3b 20 70 4d 65 6d 21 3d 70 45 6e 64 3b 20 70  ); pMem!=pEnd; p
33710 4d 65 6d 2b 2b 29 7b 0a 20 20 20 20 20 20 70 4d  Mem++){.      pM
33720 65 6d 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f  em->flags = MEM_
33730 55 6e 64 65 66 69 6e 65 64 3b 0a 20 20 20 20 20  Undefined;.     
33740 20 70 4d 65 6d 2d 3e 64 62 20 3d 20 64 62 3b 0a   pMem->db = db;.
33750 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20      }.  }else{. 
33760 20 20 20 70 46 72 61 6d 65 20 3d 20 28 56 64 62     pFrame = (Vdb
33770 65 46 72 61 6d 65 2a 29 70 52 74 2d 3e 7a 3b 0a  eFrame*)pRt->z;.
33780 20 20 20 20 61 73 73 65 72 74 28 20 70 52 74 2d      assert( pRt-
33790 3e 78 44 65 6c 3d 3d 73 71 6c 69 74 65 33 56 64  >xDel==sqlite3Vd
337a0 62 65 46 72 61 6d 65 4d 65 6d 44 65 6c 20 29 3b  beFrameMemDel );
337b0 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 50 72  .    assert( pPr
337c0 6f 67 72 61 6d 2d 3e 6e 4d 65 6d 2b 70 50 72 6f  ogram->nMem+pPro
337d0 67 72 61 6d 2d 3e 6e 43 73 72 3d 3d 70 46 72 61  gram->nCsr==pFra
337e0 6d 65 2d 3e 6e 43 68 69 6c 64 4d 65 6d 20 0a 20  me->nChildMem . 
337f0 20 20 20 20 20 20 20 7c 7c 20 28 70 50 72 6f 67         || (pProg
33800 72 61 6d 2d 3e 6e 43 73 72 3d 3d 30 20 26 26 20  ram->nCsr==0 && 
33810 70 50 72 6f 67 72 61 6d 2d 3e 6e 4d 65 6d 2b 31  pProgram->nMem+1
33820 3d 3d 70 46 72 61 6d 65 2d 3e 6e 43 68 69 6c 64  ==pFrame->nChild
33830 4d 65 6d 29 20 29 3b 0a 20 20 20 20 61 73 73 65  Mem) );.    asse
33840 72 74 28 20 70 50 72 6f 67 72 61 6d 2d 3e 6e 43  rt( pProgram->nC
33850 73 72 3d 3d 70 46 72 61 6d 65 2d 3e 6e 43 68 69  sr==pFrame->nChi
33860 6c 64 43 73 72 20 29 3b 0a 20 20 20 20 61 73 73  ldCsr );.    ass
33870 65 72 74 28 20 28 69 6e 74 29 28 70 4f 70 20 2d  ert( (int)(pOp -
33880 20 61 4f 70 29 3d 3d 70 46 72 61 6d 65 2d 3e 70   aOp)==pFrame->p
33890 63 20 29 3b 0a 20 20 7d 0a 0a 20 20 70 2d 3e 6e  c );.  }..  p->n
338a0 46 72 61 6d 65 2b 2b 3b 0a 20 20 70 46 72 61 6d  Frame++;.  pFram
338b0 65 2d 3e 70 50 61 72 65 6e 74 20 3d 20 70 2d 3e  e->pParent = p->
338c0 70 46 72 61 6d 65 3b 0a 20 20 70 46 72 61 6d 65  pFrame;.  pFrame
338d0 2d 3e 6c 61 73 74 52 6f 77 69 64 20 3d 20 64 62  ->lastRowid = db
338e0 2d 3e 6c 61 73 74 52 6f 77 69 64 3b 0a 20 20 70  ->lastRowid;.  p
338f0 46 72 61 6d 65 2d 3e 6e 43 68 61 6e 67 65 20 3d  Frame->nChange =
33900 20 70 2d 3e 6e 43 68 61 6e 67 65 3b 0a 20 20 70   p->nChange;.  p
33910 46 72 61 6d 65 2d 3e 6e 44 62 43 68 61 6e 67 65  Frame->nDbChange
33920 20 3d 20 70 2d 3e 64 62 2d 3e 6e 43 68 61 6e 67   = p->db->nChang
33930 65 3b 0a 20 20 61 73 73 65 72 74 28 20 70 46 72  e;.  assert( pFr
33940 61 6d 65 2d 3e 70 41 75 78 44 61 74 61 3d 3d 30  ame->pAuxData==0
33950 20 29 3b 0a 20 20 70 46 72 61 6d 65 2d 3e 70 41   );.  pFrame->pA
33960 75 78 44 61 74 61 20 3d 20 70 2d 3e 70 41 75 78  uxData = p->pAux
33970 44 61 74 61 3b 0a 20 20 70 2d 3e 70 41 75 78 44  Data;.  p->pAuxD
33980 61 74 61 20 3d 20 30 3b 0a 20 20 70 2d 3e 6e 43  ata = 0;.  p->nC
33990 68 61 6e 67 65 20 3d 20 30 3b 0a 20 20 70 2d 3e  hange = 0;.  p->
339a0 70 46 72 61 6d 65 20 3d 20 70 46 72 61 6d 65 3b  pFrame = pFrame;
339b0 0a 20 20 70 2d 3e 61 4d 65 6d 20 3d 20 61 4d 65  .  p->aMem = aMe
339c0 6d 20 3d 20 56 64 62 65 46 72 61 6d 65 4d 65 6d  m = VdbeFrameMem
339d0 28 70 46 72 61 6d 65 29 3b 0a 20 20 70 2d 3e 6e  (pFrame);.  p->n
339e0 4d 65 6d 20 3d 20 70 46 72 61 6d 65 2d 3e 6e 43  Mem = pFrame->nC
339f0 68 69 6c 64 4d 65 6d 3b 0a 20 20 70 2d 3e 6e 43  hildMem;.  p->nC
33a00 75 72 73 6f 72 20 3d 20 28 75 31 36 29 70 46 72  ursor = (u16)pFr
33a10 61 6d 65 2d 3e 6e 43 68 69 6c 64 43 73 72 3b 0a  ame->nChildCsr;.
33a20 20 20 70 2d 3e 61 70 43 73 72 20 3d 20 28 56 64    p->apCsr = (Vd
33a30 62 65 43 75 72 73 6f 72 20 2a 2a 29 26 61 4d 65  beCursor **)&aMe
33a40 6d 5b 70 2d 3e 6e 4d 65 6d 5d 3b 0a 20 20 70 46  m[p->nMem];.  pF
33a50 72 61 6d 65 2d 3e 61 4f 6e 63 65 20 3d 20 28 75  rame->aOnce = (u
33a60 38 2a 29 26 70 2d 3e 61 70 43 73 72 5b 70 50 72  8*)&p->apCsr[pPr
33a70 6f 67 72 61 6d 2d 3e 6e 43 73 72 5d 3b 0a 20 20  ogram->nCsr];.  
33a80 6d 65 6d 73 65 74 28 70 46 72 61 6d 65 2d 3e 61  memset(pFrame->a
33a90 4f 6e 63 65 2c 20 30 2c 20 28 70 50 72 6f 67 72  Once, 0, (pProgr
33aa0 61 6d 2d 3e 6e 4f 70 20 2b 20 37 29 2f 38 29 3b  am->nOp + 7)/8);
33ab0 0a 20 20 70 2d 3e 61 4f 70 20 3d 20 61 4f 70 20  .  p->aOp = aOp 
33ac0 3d 20 70 50 72 6f 67 72 61 6d 2d 3e 61 4f 70 3b  = pProgram->aOp;
33ad0 0a 20 20 70 2d 3e 6e 4f 70 20 3d 20 70 50 72 6f  .  p->nOp = pPro
33ae0 67 72 61 6d 2d 3e 6e 4f 70 3b 0a 23 69 66 64 65  gram->nOp;.#ifde
33af0 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  f SQLITE_ENABLE_
33b00 53 54 4d 54 5f 53 43 41 4e 53 54 41 54 55 53 0a  STMT_SCANSTATUS.
33b10 20 20 70 2d 3e 61 6e 45 78 65 63 20 3d 20 30 3b    p->anExec = 0;
33b20 0a 23 65 6e 64 69 66 0a 23 69 66 64 65 66 20 53  .#endif.#ifdef S
33b30 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 2f 2a  QLITE_DEBUG.  /*
33b40 20 56 65 72 69 66 79 20 74 68 61 74 20 73 65 63   Verify that sec
33b50 6f 6e 64 20 61 6e 64 20 73 75 62 73 65 71 75 65  ond and subseque
33b60 6e 74 20 65 78 65 63 75 74 69 6f 6e 73 20 6f 66  nt executions of
33b70 20 74 68 65 20 73 61 6d 65 20 74 72 69 67 67 65   the same trigge
33b80 72 20 64 6f 20 6e 6f 74 0a 20 20 2a 2a 20 74 72  r do not.  ** tr
33b90 79 20 74 6f 20 72 65 75 73 65 20 72 65 67 69 73  y to reuse regis
33ba0 74 65 72 20 76 61 6c 75 65 73 20 66 72 6f 6d 20  ter values from 
33bb0 74 68 65 20 66 69 72 73 74 20 75 73 65 2e 20 2a  the first use. *
33bc0 2f 0a 20 20 7b 0a 20 20 20 20 69 6e 74 20 69 3b  /.  {.    int i;
33bd0 0a 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c  .    for(i=0; i<
33be0 70 2d 3e 6e 4d 65 6d 3b 20 69 2b 2b 29 7b 0a 20  p->nMem; i++){. 
33bf0 20 20 20 20 20 61 4d 65 6d 5b 69 5d 2e 70 53 63       aMem[i].pSc
33c00 6f 70 79 46 72 6f 6d 20 3d 20 30 3b 20 20 2f 2a  opyFrom = 0;  /*
33c10 20 50 72 65 76 65 6e 74 20 66 61 6c 73 65 2d 70   Prevent false-p
33c20 6f 73 69 74 69 76 65 20 41 62 6f 75 74 54 6f 43  ositive AboutToC
33c30 68 61 6e 67 65 28 29 20 65 72 72 73 20 2a 2f 0a  hange() errs */.
33c40 20 20 20 20 20 20 61 4d 65 6d 5b 69 5d 2e 66 6c        aMem[i].fl
33c50 61 67 73 20 7c 3d 20 4d 45 4d 5f 55 6e 64 65 66  ags |= MEM_Undef
33c60 69 6e 65 64 3b 20 2f 2a 20 43 61 75 73 65 20 61  ined; /* Cause a
33c70 20 66 61 75 6c 74 20 69 66 20 74 68 69 73 20 72   fault if this r
33c80 65 67 20 69 73 20 72 65 75 73 65 64 20 2a 2f 0a  eg is reused */.
33c90 20 20 20 20 7d 0a 20 20 7d 0a 23 65 6e 64 69 66      }.  }.#endif
33ca0 0a 20 20 70 4f 70 20 3d 20 26 61 4f 70 5b 2d 31  .  pOp = &aOp[-1
33cb0 5d 3b 0a 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  ];..  break;.}..
33cc0 2f 2a 20 4f 70 63 6f 64 65 3a 20 50 61 72 61 6d  /* Opcode: Param
33cd0 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a   P1 P2 * * *.**.
33ce0 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 69  ** This opcode i
33cf0 73 20 6f 6e 6c 79 20 65 76 65 72 20 70 72 65 73  s only ever pres
33d00 65 6e 74 20 69 6e 20 73 75 62 2d 70 72 6f 67 72  ent in sub-progr
33d10 61 6d 73 20 63 61 6c 6c 65 64 20 76 69 61 20 74  ams called via t
33d20 68 65 20 0a 2a 2a 20 4f 50 5f 50 72 6f 67 72 61  he .** OP_Progra
33d30 6d 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20 43  m instruction. C
33d40 6f 70 79 20 61 20 76 61 6c 75 65 20 63 75 72 72  opy a value curr
33d50 65 6e 74 6c 79 20 73 74 6f 72 65 64 20 69 6e 20  ently stored in 
33d60 61 20 6d 65 6d 6f 72 79 20 0a 2a 2a 20 63 65 6c  a memory .** cel
33d70 6c 20 6f 66 20 74 68 65 20 63 61 6c 6c 69 6e 67  l of the calling
33d80 20 28 70 61 72 65 6e 74 29 20 66 72 61 6d 65 20   (parent) frame 
33d90 74 6f 20 63 65 6c 6c 20 50 32 20 69 6e 20 74 68  to cell P2 in th
33da0 65 20 63 75 72 72 65 6e 74 20 66 72 61 6d 65 73  e current frames
33db0 20 0a 2a 2a 20 61 64 64 72 65 73 73 20 73 70 61   .** address spa
33dc0 63 65 2e 20 54 68 69 73 20 69 73 20 75 73 65 64  ce. This is used
33dd0 20 62 79 20 74 72 69 67 67 65 72 20 70 72 6f 67   by trigger prog
33de0 72 61 6d 73 20 74 6f 20 61 63 63 65 73 73 20 74  rams to access t
33df0 68 65 20 6e 65 77 2e 2a 20 0a 2a 2a 20 61 6e 64  he new.* .** and
33e00 20 6f 6c 64 2e 2a 20 76 61 6c 75 65 73 2e 0a 2a   old.* values..*
33e10 2a 0a 2a 2a 20 54 68 65 20 61 64 64 72 65 73 73  *.** The address
33e20 20 6f 66 20 74 68 65 20 63 65 6c 6c 20 69 6e 20   of the cell in 
33e30 74 68 65 20 70 61 72 65 6e 74 20 66 72 61 6d 65  the parent frame
33e40 20 69 73 20 64 65 74 65 72 6d 69 6e 65 64 20 62   is determined b
33e50 79 20 61 64 64 69 6e 67 0a 2a 2a 20 74 68 65 20  y adding.** the 
33e60 76 61 6c 75 65 20 6f 66 20 74 68 65 20 50 31 20  value of the P1 
33e70 61 72 67 75 6d 65 6e 74 20 74 6f 20 74 68 65 20  argument to the 
33e80 76 61 6c 75 65 20 6f 66 20 74 68 65 20 50 31 20  value of the P1 
33e90 61 72 67 75 6d 65 6e 74 20 74 6f 20 74 68 65 0a  argument to the.
33ea0 2a 2a 20 63 61 6c 6c 69 6e 67 20 4f 50 5f 50 72  ** calling OP_Pr
33eb0 6f 67 72 61 6d 20 69 6e 73 74 72 75 63 74 69 6f  ogram instructio
33ec0 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 50 61  n..*/.case OP_Pa
33ed0 72 61 6d 3a 20 7b 20 20 20 20 20 20 20 20 20 20  ram: {          
33ee0 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20 20 56 64   /* out2 */.  Vd
33ef0 62 65 46 72 61 6d 65 20 2a 70 46 72 61 6d 65 3b  beFrame *pFrame;
33f00 0a 20 20 4d 65 6d 20 2a 70 49 6e 3b 0a 20 20 70  .  Mem *pIn;.  p
33f10 4f 75 74 20 3d 20 6f 75 74 32 50 72 65 72 65 6c  Out = out2Prerel
33f20 65 61 73 65 28 70 2c 20 70 4f 70 29 3b 0a 20 20  ease(p, pOp);.  
33f30 70 46 72 61 6d 65 20 3d 20 70 2d 3e 70 46 72 61  pFrame = p->pFra
33f40 6d 65 3b 0a 20 20 70 49 6e 20 3d 20 26 70 46 72  me;.  pIn = &pFr
33f50 61 6d 65 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70  ame->aMem[pOp->p
33f60 31 20 2b 20 70 46 72 61 6d 65 2d 3e 61 4f 70 5b  1 + pFrame->aOp[
33f70 70 46 72 61 6d 65 2d 3e 70 63 5d 2e 70 31 5d 3b  pFrame->pc].p1];
33f80 20 20 20 0a 20 20 73 71 6c 69 74 65 33 56 64 62     .  sqlite3Vdb
33f90 65 4d 65 6d 53 68 61 6c 6c 6f 77 43 6f 70 79 28  eMemShallowCopy(
33fa0 70 4f 75 74 2c 20 70 49 6e 2c 20 4d 45 4d 5f 45  pOut, pIn, MEM_E
33fb0 70 68 65 6d 29 3b 0a 20 20 62 72 65 61 6b 3b 0a  phem);.  break;.
33fc0 7d 0a 0a 23 65 6e 64 69 66 20 2f 2a 20 23 69 66  }..#endif /* #if
33fd0 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
33fe0 5f 54 52 49 47 47 45 52 20 2a 2f 0a 0a 23 69 66  _TRIGGER */..#if
33ff0 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
34000 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 0a 2f 2a 20  _FOREIGN_KEY./* 
34010 4f 70 63 6f 64 65 3a 20 46 6b 43 6f 75 6e 74 65  Opcode: FkCounte
34020 72 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  r P1 P2 * * *.**
34030 20 53 79 6e 6f 70 73 69 73 3a 20 66 6b 63 74 72   Synopsis: fkctr
34040 5b 50 31 5d 2b 3d 50 32 0a 2a 2a 0a 2a 2a 20 49  [P1]+=P2.**.** I
34050 6e 63 72 65 6d 65 6e 74 20 61 20 22 63 6f 6e 73  ncrement a "cons
34060 74 72 61 69 6e 74 20 63 6f 75 6e 74 65 72 22 20  traint counter" 
34070 62 79 20 50 32 20 28 50 32 20 6d 61 79 20 62 65  by P2 (P2 may be
34080 20 6e 65 67 61 74 69 76 65 20 6f 72 20 70 6f 73   negative or pos
34090 69 74 69 76 65 29 2e 0a 2a 2a 20 49 66 20 50 31  itive)..** If P1
340a0 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68   is non-zero, th
340b0 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e 73 74  e database const
340c0 72 61 69 6e 74 20 63 6f 75 6e 74 65 72 20 69 73  raint counter is
340d0 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 0a 2a 2a   incremented .**
340e0 20 28 64 65 66 65 72 72 65 64 20 66 6f 72 65 69   (deferred forei
340f0 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e  gn key constrain
34100 74 73 29 2e 20 4f 74 68 65 72 77 69 73 65 2c 20  ts). Otherwise, 
34110 69 66 20 50 31 20 69 73 20 7a 65 72 6f 2c 20 74  if P1 is zero, t
34120 68 65 20 0a 2a 2a 20 73 74 61 74 65 6d 65 6e 74  he .** statement
34130 20 63 6f 75 6e 74 65 72 20 69 73 20 69 6e 63 72   counter is incr
34140 65 6d 65 6e 74 65 64 20 28 69 6d 6d 65 64 69 61  emented (immedia
34150 74 65 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 63  te foreign key c
34160 6f 6e 73 74 72 61 69 6e 74 73 29 2e 0a 2a 2f 0a  onstraints)..*/.
34170 63 61 73 65 20 4f 50 5f 46 6b 43 6f 75 6e 74 65  case OP_FkCounte
34180 72 3a 20 7b 0a 20 20 69 66 28 20 64 62 2d 3e 66  r: {.  if( db->f
34190 6c 61 67 73 20 26 20 53 51 4c 49 54 45 5f 44 65  lags & SQLITE_De
341a0 66 65 72 46 4b 73 20 29 7b 0a 20 20 20 20 64 62  ferFKs ){.    db
341b0 2d 3e 6e 44 65 66 65 72 72 65 64 49 6d 6d 43 6f  ->nDeferredImmCo
341c0 6e 73 20 2b 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20  ns += pOp->p2;. 
341d0 20 7d 65 6c 73 65 20 69 66 28 20 70 4f 70 2d 3e   }else if( pOp->
341e0 70 31 20 29 7b 0a 20 20 20 20 64 62 2d 3e 6e 44  p1 ){.    db->nD
341f0 65 66 65 72 72 65 64 43 6f 6e 73 20 2b 3d 20 70  eferredCons += p
34200 4f 70 2d 3e 70 32 3b 0a 20 20 7d 65 6c 73 65 7b  Op->p2;.  }else{
34210 0a 20 20 20 20 70 2d 3e 6e 46 6b 43 6f 6e 73 74  .    p->nFkConst
34220 72 61 69 6e 74 20 2b 3d 20 70 4f 70 2d 3e 70 32  raint += pOp->p2
34230 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
34240 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 46 6b 49  ../* Opcode: FkI
34250 66 5a 65 72 6f 20 50 31 20 50 32 20 2a 20 2a 20  fZero P1 P2 * * 
34260 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69  *.** Synopsis: i
34270 66 20 66 6b 63 74 72 5b 50 31 5d 3d 3d 30 20 67  f fkctr[P1]==0 g
34280 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 54 68 69  oto P2.**.** Thi
34290 73 20 6f 70 63 6f 64 65 20 74 65 73 74 73 20 69  s opcode tests i
342a0 66 20 61 20 66 6f 72 65 69 67 6e 20 6b 65 79 20  f a foreign key 
342b0 63 6f 6e 73 74 72 61 69 6e 74 2d 63 6f 75 6e 74  constraint-count
342c0 65 72 20 69 73 20 63 75 72 72 65 6e 74 6c 79 20  er is currently 
342d0 7a 65 72 6f 2e 0a 2a 2a 20 49 66 20 73 6f 2c 20  zero..** If so, 
342e0 6a 75 6d 70 20 74 6f 20 69 6e 73 74 72 75 63 74  jump to instruct
342f0 69 6f 6e 20 50 32 2e 20 4f 74 68 65 72 77 69 73  ion P2. Otherwis
34300 65 2c 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 20  e, fall through 
34310 74 6f 20 74 68 65 20 6e 65 78 74 20 0a 2a 2a 20  to the next .** 
34320 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a 0a  instruction..**.
34330 2a 2a 20 49 66 20 50 31 20 69 73 20 6e 6f 6e 2d  ** If P1 is non-
34340 7a 65 72 6f 2c 20 74 68 65 6e 20 74 68 65 20 6a  zero, then the j
34350 75 6d 70 20 69 73 20 74 61 6b 65 6e 20 69 66 20  ump is taken if 
34360 74 68 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e  the database con
34370 73 74 72 61 69 6e 74 2d 63 6f 75 6e 74 65 72 0a  straint-counter.
34380 2a 2a 20 69 73 20 7a 65 72 6f 20 28 74 68 65 20  ** is zero (the 
34390 6f 6e 65 20 74 68 61 74 20 63 6f 75 6e 74 73 20  one that counts 
343a0 64 65 66 65 72 72 65 64 20 63 6f 6e 73 74 72 61  deferred constra
343b0 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 73 29 2e  int violations).
343c0 20 49 66 20 50 31 20 69 73 0a 2a 2a 20 7a 65 72   If P1 is.** zer
343d0 6f 2c 20 74 68 65 20 6a 75 6d 70 20 69 73 20 74  o, the jump is t
343e0 61 6b 65 6e 20 69 66 20 74 68 65 20 73 74 61 74  aken if the stat
343f0 65 6d 65 6e 74 20 63 6f 6e 73 74 72 61 69 6e 74  ement constraint
34400 2d 63 6f 75 6e 74 65 72 20 69 73 20 7a 65 72 6f  -counter is zero
34410 0a 2a 2a 20 28 69 6d 6d 65 64 69 61 74 65 20 66  .** (immediate f
34420 6f 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74  oreign key const
34430 72 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 73  raint violations
34440 29 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 46 6b  )..*/.case OP_Fk
34450 49 66 5a 65 72 6f 3a 20 7b 20 20 20 20 20 20 20  IfZero: {       
34460 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 69    /* jump */.  i
34470 66 28 20 70 4f 70 2d 3e 70 31 20 29 7b 0a 20 20  f( pOp->p1 ){.  
34480 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65    VdbeBranchTake
34490 6e 28 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 43  n(db->nDeferredC
344a0 6f 6e 73 3d 3d 30 20 26 26 20 64 62 2d 3e 6e 44  ons==0 && db->nD
344b0 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73 3d 3d  eferredImmCons==
344c0 30 2c 20 32 29 3b 0a 20 20 20 20 69 66 28 20 64  0, 2);.    if( d
344d0 62 2d 3e 6e 44 65 66 65 72 72 65 64 43 6f 6e 73  b->nDeferredCons
344e0 3d 3d 30 20 26 26 20 64 62 2d 3e 6e 44 65 66 65  ==0 && db->nDefe
344f0 72 72 65 64 49 6d 6d 43 6f 6e 73 3d 3d 30 20 29  rredImmCons==0 )
34500 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32   goto jump_to_p2
34510 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 56  ;.  }else{.    V
34520 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 70  dbeBranchTaken(p
34530 2d 3e 6e 46 6b 43 6f 6e 73 74 72 61 69 6e 74 3d  ->nFkConstraint=
34540 3d 30 20 26 26 20 64 62 2d 3e 6e 44 65 66 65 72  =0 && db->nDefer
34550 72 65 64 49 6d 6d 43 6f 6e 73 3d 3d 30 2c 20 32  redImmCons==0, 2
34560 29 3b 0a 20 20 20 20 69 66 28 20 70 2d 3e 6e 46  );.    if( p->nF
34570 6b 43 6f 6e 73 74 72 61 69 6e 74 3d 3d 30 20 26  kConstraint==0 &
34580 26 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 49  & db->nDeferredI
34590 6d 6d 43 6f 6e 73 3d 3d 30 20 29 20 67 6f 74 6f  mmCons==0 ) goto
345a0 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 7d   jump_to_p2;.  }
345b0 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64  .  break;.}.#end
345c0 69 66 20 2f 2a 20 23 69 66 6e 64 65 66 20 53 51  if /* #ifndef SQ
345d0 4c 49 54 45 5f 4f 4d 49 54 5f 46 4f 52 45 49 47  LITE_OMIT_FOREIG
345e0 4e 5f 4b 45 59 20 2a 2f 0a 0a 23 69 66 6e 64 65  N_KEY */..#ifnde
345f0 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55  f SQLITE_OMIT_AU
34600 54 4f 49 4e 43 52 45 4d 45 4e 54 0a 2f 2a 20 4f  TOINCREMENT./* O
34610 70 63 6f 64 65 3a 20 4d 65 6d 4d 61 78 20 50 31  pcode: MemMax P1
34620 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e   P2 * * *.** Syn
34630 6f 70 73 69 73 3a 20 72 5b 50 31 5d 3d 6d 61 78  opsis: r[P1]=max
34640 28 72 5b 50 31 5d 2c 72 5b 50 32 5d 29 0a 2a 2a  (r[P1],r[P2]).**
34650 0a 2a 2a 20 50 31 20 69 73 20 61 20 72 65 67 69  .** P1 is a regi
34660 73 74 65 72 20 69 6e 20 74 68 65 20 72 6f 6f 74  ster in the root
34670 20 66 72 61 6d 65 20 6f 66 20 74 68 69 73 20 56   frame of this V
34680 4d 20 28 74 68 65 20 72 6f 6f 74 20 66 72 61 6d  M (the root fram
34690 65 20 69 73 0a 2a 2a 20 64 69 66 66 65 72 65 6e  e is.** differen
346a0 74 20 66 72 6f 6d 20 74 68 65 20 63 75 72 72 65  t from the curre
346b0 6e 74 20 66 72 61 6d 65 20 69 66 20 74 68 69 73  nt frame if this
346c0 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 69 73 20   instruction is 
346d0 62 65 69 6e 67 20 65 78 65 63 75 74 65 64 0a 2a  being executed.*
346e0 2a 20 77 69 74 68 69 6e 20 61 20 73 75 62 2d 70  * within a sub-p
346f0 72 6f 67 72 61 6d 29 2e 20 53 65 74 20 74 68 65  rogram). Set the
34700 20 76 61 6c 75 65 20 6f 66 20 72 65 67 69 73 74   value of regist
34710 65 72 20 50 31 20 74 6f 20 74 68 65 20 6d 61 78  er P1 to the max
34720 69 6d 75 6d 20 6f 66 20 0a 2a 2a 20 69 74 73 20  imum of .** its 
34730 63 75 72 72 65 6e 74 20 76 61 6c 75 65 20 61 6e  current value an
34740 64 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72  d the value in r
34750 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a  egister P2..**.*
34760 2a 20 54 68 69 73 20 69 6e 73 74 72 75 63 74 69  * This instructi
34770 6f 6e 20 74 68 72 6f 77 73 20 61 6e 20 65 72 72  on throws an err
34780 6f 72 20 69 66 20 74 68 65 20 6d 65 6d 6f 72 79  or if the memory
34790 20 63 65 6c 6c 20 69 73 20 6e 6f 74 20 69 6e 69   cell is not ini
347a0 74 69 61 6c 6c 79 0a 2a 2a 20 61 6e 20 69 6e 74  tially.** an int
347b0 65 67 65 72 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  eger..*/.case OP
347c0 5f 4d 65 6d 4d 61 78 3a 20 7b 20 20 20 20 20 20  _MemMax: {      
347d0 20 20 2f 2a 20 69 6e 32 20 2a 2f 0a 20 20 56 64    /* in2 */.  Vd
347e0 62 65 46 72 61 6d 65 20 2a 70 46 72 61 6d 65 3b  beFrame *pFrame;
347f0 0a 20 20 69 66 28 20 70 2d 3e 70 46 72 61 6d 65  .  if( p->pFrame
34800 20 29 7b 0a 20 20 20 20 66 6f 72 28 70 46 72 61   ){.    for(pFra
34810 6d 65 3d 70 2d 3e 70 46 72 61 6d 65 3b 20 70 46  me=p->pFrame; pF
34820 72 61 6d 65 2d 3e 70 50 61 72 65 6e 74 3b 20 70  rame->pParent; p
34830 46 72 61 6d 65 3d 70 46 72 61 6d 65 2d 3e 70 50  Frame=pFrame->pP
34840 61 72 65 6e 74 29 3b 0a 20 20 20 20 70 49 6e 31  arent);.    pIn1
34850 20 3d 20 26 70 46 72 61 6d 65 2d 3e 61 4d 65 6d   = &pFrame->aMem
34860 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 7d 65 6c  [pOp->p1];.  }el
34870 73 65 7b 0a 20 20 20 20 70 49 6e 31 20 3d 20 26  se{.    pIn1 = &
34880 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  aMem[pOp->p1];. 
34890 20 7d 0a 20 20 61 73 73 65 72 74 28 20 6d 65 6d   }.  assert( mem
348a0 49 73 56 61 6c 69 64 28 70 49 6e 31 29 20 29 3b  IsValid(pIn1) );
348b0 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65  .  sqlite3VdbeMe
348c0 6d 49 6e 74 65 67 65 72 69 66 79 28 70 49 6e 31  mIntegerify(pIn1
348d0 29 3b 0a 20 20 70 49 6e 32 20 3d 20 26 61 4d 65  );.  pIn2 = &aMe
348e0 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 73 71  m[pOp->p2];.  sq
348f0 6c 69 74 65 33 56 64 62 65 4d 65 6d 49 6e 74 65  lite3VdbeMemInte
34900 67 65 72 69 66 79 28 70 49 6e 32 29 3b 0a 20 20  gerify(pIn2);.  
34910 69 66 28 20 70 49 6e 31 2d 3e 75 2e 69 3c 70 49  if( pIn1->u.i<pI
34920 6e 32 2d 3e 75 2e 69 29 7b 0a 20 20 20 20 70 49  n2->u.i){.    pI
34930 6e 31 2d 3e 75 2e 69 20 3d 20 70 49 6e 32 2d 3e  n1->u.i = pIn2->
34940 75 2e 69 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  u.i;.  }.  break
34950 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51  ;.}.#endif /* SQ
34960 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 49 4e  LITE_OMIT_AUTOIN
34970 43 52 45 4d 45 4e 54 20 2a 2f 0a 0a 2f 2a 20 4f  CREMENT */../* O
34980 70 63 6f 64 65 3a 20 49 66 50 6f 73 20 50 31 20  pcode: IfPos P1 
34990 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e  P2 P3 * *.** Syn
349a0 6f 70 73 69 73 3a 20 69 66 20 72 5b 50 31 5d 3e  opsis: if r[P1]>
349b0 30 20 74 68 65 6e 20 72 5b 50 31 5d 2d 3d 50 33  0 then r[P1]-=P3
349c0 2c 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20  , goto P2.**.** 
349d0 52 65 67 69 73 74 65 72 20 50 31 20 6d 75 73 74  Register P1 must
349e0 20 63 6f 6e 74 61 69 6e 20 61 6e 20 69 6e 74 65   contain an inte
349f0 67 65 72 2e 0a 2a 2a 20 49 66 20 74 68 65 20 76  ger..** If the v
34a00 61 6c 75 65 20 6f 66 20 72 65 67 69 73 74 65 72  alue of register
34a10 20 50 31 20 69 73 20 31 20 6f 72 20 67 72 65 61   P1 is 1 or grea
34a20 74 65 72 2c 20 73 75 62 74 72 61 63 74 20 50 33  ter, subtract P3
34a30 20 66 72 6f 6d 20 74 68 65 0a 2a 2a 20 76 61 6c   from the.** val
34a40 75 65 20 69 6e 20 50 31 20 61 6e 64 20 6a 75 6d  ue in P1 and jum
34a50 70 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 49  p to P2..**.** I
34a60 66 20 74 68 65 20 69 6e 69 74 69 61 6c 20 76 61  f the initial va
34a70 6c 75 65 20 6f 66 20 72 65 67 69 73 74 65 72 20  lue of register 
34a80 50 31 20 69 73 20 6c 65 73 73 20 74 68 61 6e 20  P1 is less than 
34a90 31 2c 20 74 68 65 6e 20 74 68 65 0a 2a 2a 20 76  1, then the.** v
34aa0 61 6c 75 65 20 69 73 20 75 6e 63 68 61 6e 67 65  alue is unchange
34ab0 64 20 61 6e 64 20 63 6f 6e 74 72 6f 6c 20 70 61  d and control pa
34ac0 73 73 65 73 20 74 68 72 6f 75 67 68 20 74 6f 20  sses through to 
34ad0 74 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63  the next instruc
34ae0 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  tion..*/.case OP
34af0 5f 49 66 50 6f 73 3a 20 7b 20 20 20 20 20 20 20  _IfPos: {       
34b00 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f   /* jump, in1 */
34b10 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b  .  pIn1 = &aMem[
34b20 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65  pOp->p1];.  asse
34b30 72 74 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 26  rt( pIn1->flags&
34b40 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 56 64 62  MEM_Int );.  Vdb
34b50 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 20 70 49  eBranchTaken( pI
34b60 6e 31 2d 3e 75 2e 69 3e 30 2c 20 32 29 3b 0a 20  n1->u.i>0, 2);. 
34b70 20 69 66 28 20 70 49 6e 31 2d 3e 75 2e 69 3e 30   if( pIn1->u.i>0
34b80 20 29 7b 0a 20 20 20 20 70 49 6e 31 2d 3e 75 2e   ){.    pIn1->u.
34b90 69 20 2d 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20  i -= pOp->p3;.  
34ba0 20 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70    goto jump_to_p
34bb0 32 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  2;.  }.  break;.
34bc0 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f 66  }../* Opcode: Of
34bd0 66 73 65 74 4c 69 6d 69 74 20 50 31 20 50 32 20  fsetLimit P1 P2 
34be0 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73  P3 * *.** Synops
34bf0 69 73 3a 20 69 66 20 72 5b 50 31 5d 3e 30 20 74  is: if r[P1]>0 t
34c00 68 65 6e 20 72 5b 50 32 5d 3d 72 5b 50 31 5d 2b  hen r[P2]=r[P1]+
34c10 6d 61 78 28 30 2c 72 5b 50 33 5d 29 20 65 6c 73  max(0,r[P3]) els
34c20 65 20 72 5b 50 32 5d 3d 28 2d 31 29 0a 2a 2a 0a  e r[P2]=(-1).**.
34c30 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 70  ** This opcode p
34c40 65 72 66 6f 72 6d 73 20 61 20 63 6f 6d 6d 6f 6e  erforms a common
34c50 6c 79 20 75 73 65 64 20 63 6f 6d 70 75 74 61 74  ly used computat
34c60 69 6f 6e 20 61 73 73 6f 63 69 61 74 65 64 20 77  ion associated w
34c70 69 74 68 0a 2a 2a 20 4c 49 4d 49 54 20 61 6e 64  ith.** LIMIT and
34c80 20 4f 46 46 53 45 54 20 70 72 6f 63 65 73 73 2e   OFFSET process.
34c90 20 20 72 5b 50 31 5d 20 68 6f 6c 64 73 20 74 68    r[P1] holds th
34ca0 65 20 6c 69 6d 69 74 20 63 6f 75 6e 74 65 72 2e  e limit counter.
34cb0 20 20 72 5b 50 33 5d 0a 2a 2a 20 68 6f 6c 64 73    r[P3].** holds
34cc0 20 74 68 65 20 6f 66 66 73 65 74 20 63 6f 75 6e   the offset coun
34cd0 74 65 72 2e 20 20 54 68 65 20 6f 70 63 6f 64 65  ter.  The opcode
34ce0 20 63 6f 6d 70 75 74 65 73 20 74 68 65 20 63 6f   computes the co
34cf0 6d 62 69 6e 65 64 20 76 61 6c 75 65 0a 2a 2a 20  mbined value.** 
34d00 6f 66 20 74 68 65 20 4c 49 4d 49 54 20 61 6e 64  of the LIMIT and
34d10 20 4f 46 46 53 45 54 20 61 6e 64 20 73 74 6f 72   OFFSET and stor
34d20 65 73 20 74 68 61 74 20 76 61 6c 75 65 20 69 6e  es that value in
34d30 20 72 5b 50 32 5d 2e 20 20 54 68 65 20 72 5b 50   r[P2].  The r[P
34d40 32 5d 0a 2a 2a 20 76 61 6c 75 65 20 63 6f 6d 70  2].** value comp
34d50 75 74 65 64 20 69 73 20 74 68 65 20 74 6f 74 61  uted is the tota
34d60 6c 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73  l number of rows
34d70 20 74 68 61 74 20 77 69 6c 6c 20 6e 65 65 64 20   that will need 
34d80 74 6f 20 62 65 0a 2a 2a 20 76 69 73 69 74 65 64  to be.** visited
34d90 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 63 6f 6d   in order to com
34da0 70 6c 65 74 65 20 74 68 65 20 71 75 65 72 79 2e  plete the query.
34db0 0a 2a 2a 0a 2a 2a 20 49 66 20 72 5b 50 33 5d 20  .**.** If r[P3] 
34dc0 69 73 20 7a 65 72 6f 20 6f 72 20 6e 65 67 61 74  is zero or negat
34dd0 69 76 65 2c 20 74 68 61 74 20 6d 65 61 6e 73 20  ive, that means 
34de0 74 68 65 72 65 20 69 73 20 6e 6f 20 4f 46 46 53  there is no OFFS
34df0 45 54 0a 2a 2a 20 61 6e 64 20 72 5b 50 32 5d 20  ET.** and r[P2] 
34e00 69 73 20 73 65 74 20 74 6f 20 62 65 20 74 68 65  is set to be the
34e10 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 4c 49   value of the LI
34e20 4d 49 54 2c 20 72 5b 50 31 5d 2e 0a 2a 2a 0a 2a  MIT, r[P1]..**.*
34e30 2a 20 69 66 20 72 5b 50 31 5d 20 69 73 20 7a 65  * if r[P1] is ze
34e40 72 6f 20 6f 72 20 6e 65 67 61 74 69 76 65 2c 20  ro or negative, 
34e50 74 68 61 74 20 6d 65 61 6e 73 20 74 68 65 72 65  that means there
34e60 20 69 73 20 6e 6f 20 4c 49 4d 49 54 0a 2a 2a 20   is no LIMIT.** 
34e70 61 6e 64 20 72 5b 50 32 5d 20 69 73 20 73 65 74  and r[P2] is set
34e80 20 74 6f 20 2d 31 2e 20 0a 2a 2a 0a 2a 2a 20 4f   to -1. .**.** O
34e90 74 68 65 72 77 69 73 65 2c 20 72 5b 50 32 5d 20  therwise, r[P2] 
34ea0 69 73 20 73 65 74 20 74 6f 20 74 68 65 20 73 75  is set to the su
34eb0 6d 20 6f 66 20 72 5b 50 31 5d 20 61 6e 64 20 72  m of r[P1] and r
34ec0 5b 50 33 5d 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  [P3]..*/.case OP
34ed0 5f 4f 66 66 73 65 74 4c 69 6d 69 74 3a 20 7b 20  _OffsetLimit: { 
34ee0 20 20 20 2f 2a 20 69 6e 31 2c 20 6f 75 74 32 2c     /* in1, out2,
34ef0 20 69 6e 33 20 2a 2f 0a 20 20 69 36 34 20 78 3b   in3 */.  i64 x;
34f00 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b  .  pIn1 = &aMem[
34f10 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 49 6e 33  pOp->p1];.  pIn3
34f20 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33   = &aMem[pOp->p3
34f30 5d 3b 0a 20 20 70 4f 75 74 20 3d 20 6f 75 74 32  ];.  pOut = out2
34f40 50 72 65 72 65 6c 65 61 73 65 28 70 2c 20 70 4f  Prerelease(p, pO
34f50 70 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 49  p);.  assert( pI
34f60 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  n1->flags & MEM_
34f70 49 6e 74 20 29 3b 0a 20 20 61 73 73 65 72 74 28  Int );.  assert(
34f80 20 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d   pIn3->flags & M
34f90 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 78 20 3d 20  EM_Int );.  x = 
34fa0 70 49 6e 31 2d 3e 75 2e 69 3b 0a 20 20 69 66 28  pIn1->u.i;.  if(
34fb0 20 78 3c 3d 30 20 7c 7c 20 73 71 6c 69 74 65 33   x<=0 || sqlite3
34fc0 41 64 64 49 6e 74 36 34 28 26 78 2c 20 70 49 6e  AddInt64(&x, pIn
34fd0 33 2d 3e 75 2e 69 3e 30 3f 70 49 6e 33 2d 3e 75  3->u.i>0?pIn3->u
34fe0 2e 69 3a 30 29 20 29 7b 0a 20 20 20 20 2f 2a 20  .i:0) ){.    /* 
34ff0 49 66 20 74 68 65 20 4c 49 4d 49 54 20 69 73 20  If the LIMIT is 
35000 6c 65 73 73 20 74 68 61 6e 20 6f 72 20 65 71 75  less than or equ
35010 61 6c 20 74 6f 20 7a 65 72 6f 2c 20 6c 6f 6f 70  al to zero, loop
35020 20 66 6f 72 65 76 65 72 2e 20 20 54 68 69 73 0a   forever.  This.
35030 20 20 20 20 2a 2a 20 69 73 20 64 6f 63 75 6d 65      ** is docume
35040 6e 74 65 64 2e 20 20 42 75 74 20 61 6c 73 6f 2c  nted.  But also,
35050 20 69 66 20 74 68 65 20 4c 49 4d 49 54 2b 4f 46   if the LIMIT+OF
35060 46 53 45 54 20 65 78 63 65 65 64 73 20 32 5e 36  FSET exceeds 2^6
35070 33 20 74 68 65 6e 0a 20 20 20 20 2a 2a 20 61 6c  3 then.    ** al
35080 73 6f 20 6c 6f 6f 70 20 66 6f 72 65 76 65 72 2e  so loop forever.
35090 20 20 54 68 69 73 20 69 73 20 75 6e 64 6f 63 75    This is undocu
350a0 6d 65 6e 74 65 64 2e 20 20 49 6e 20 66 61 63 74  mented.  In fact
350b0 2c 20 6f 6e 65 20 63 6f 75 6c 64 20 61 72 67 75  , one could argu
350c0 65 0a 20 20 20 20 2a 2a 20 74 68 61 74 20 74 68  e.    ** that th
350d0 65 20 6c 6f 6f 70 20 73 68 6f 75 6c 64 20 74 65  e loop should te
350e0 72 6d 69 6e 61 74 65 2e 20 20 42 75 74 20 61 73  rminate.  But as
350f0 73 75 6d 69 6e 67 20 31 20 62 69 6c 6c 69 6f 6e  suming 1 billion
35100 20 69 74 65 72 61 74 69 6f 6e 73 0a 20 20 20 20   iterations.    
35110 2a 2a 20 70 65 72 20 73 65 63 6f 6e 64 20 28 66  ** per second (f
35120 61 72 20 65 78 63 65 65 64 69 6e 67 20 74 68 65  ar exceeding the
35130 20 63 61 70 61 62 69 6c 69 74 69 65 73 20 6f 66   capabilities of
35140 20 61 6e 79 20 63 75 72 72 65 6e 74 20 68 61 72   any current har
35150 64 77 61 72 65 29 0a 20 20 20 20 2a 2a 20 69 74  dware).    ** it
35160 20 77 6f 75 6c 64 20 74 61 6b 65 20 6e 65 61 72   would take near
35170 6c 79 20 33 30 30 20 79 65 61 72 73 20 74 6f 20  ly 300 years to 
35180 61 63 74 75 61 6c 6c 79 20 72 65 61 63 68 20 74  actually reach t
35190 68 65 20 6c 69 6d 69 74 2e 20 20 53 6f 0a 20 20  he limit.  So.  
351a0 20 20 2a 2a 20 6c 6f 6f 70 69 6e 67 20 66 6f 72    ** looping for
351b0 65 76 65 72 20 69 73 20 61 20 72 65 61 73 6f 6e  ever is a reason
351c0 61 62 6c 65 20 61 70 70 72 6f 78 69 6d 61 74 69  able approximati
351d0 6f 6e 2e 20 2a 2f 0a 20 20 20 20 70 4f 75 74 2d  on. */.    pOut-
351e0 3e 75 2e 69 20 3d 20 2d 31 3b 0a 20 20 7d 65 6c  >u.i = -1;.  }el
351f0 73 65 7b 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e  se{.    pOut->u.
35200 69 20 3d 20 78 3b 0a 20 20 7d 0a 20 20 62 72 65  i = x;.  }.  bre
35210 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
35220 3a 20 49 66 4e 6f 74 5a 65 72 6f 20 50 31 20 50  : IfNotZero P1 P
35230 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70  2 * * *.** Synop
35240 73 69 73 3a 20 69 66 20 72 5b 50 31 5d 21 3d 30  sis: if r[P1]!=0
35250 20 74 68 65 6e 20 72 5b 50 31 5d 2d 2d 2c 20 67   then r[P1]--, g
35260 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 52 65 67  oto P2.**.** Reg
35270 69 73 74 65 72 20 50 31 20 6d 75 73 74 20 63 6f  ister P1 must co
35280 6e 74 61 69 6e 20 61 6e 20 69 6e 74 65 67 65 72  ntain an integer
35290 2e 20 20 49 66 20 74 68 65 20 63 6f 6e 74 65 6e  .  If the conten
352a0 74 20 6f 66 20 72 65 67 69 73 74 65 72 20 50 31  t of register P1
352b0 20 69 73 0a 2a 2a 20 69 6e 69 74 69 61 6c 6c 79   is.** initially
352c0 20 67 72 65 61 74 65 72 20 74 68 61 6e 20 7a 65   greater than ze
352d0 72 6f 2c 20 74 68 65 6e 20 64 65 63 72 65 6d 65  ro, then decreme
352e0 6e 74 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20  nt the value in 
352f0 72 65 67 69 73 74 65 72 20 50 31 2e 0a 2a 2a 20  register P1..** 
35300 49 66 20 69 74 20 69 73 20 6e 6f 6e 2d 7a 65 72  If it is non-zer
35310 6f 20 28 6e 65 67 61 74 69 76 65 20 6f 72 20 70  o (negative or p
35320 6f 73 69 74 69 76 65 29 20 61 6e 64 20 74 68 65  ositive) and the
35330 6e 20 61 6c 73 6f 20 6a 75 6d 70 20 74 6f 20 50  n also jump to P
35340 32 2e 20 20 0a 2a 2a 20 49 66 20 72 65 67 69 73  2.  .** If regis
35350 74 65 72 20 50 31 20 69 73 20 69 6e 69 74 69 61  ter P1 is initia
35360 6c 6c 79 20 7a 65 72 6f 2c 20 6c 65 61 76 65 20  lly zero, leave 
35370 69 74 20 75 6e 63 68 61 6e 67 65 64 20 61 6e 64  it unchanged and
35380 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 2e 0a 2a   fall through..*
35390 2f 0a 63 61 73 65 20 4f 50 5f 49 66 4e 6f 74 5a  /.case OP_IfNotZ
353a0 65 72 6f 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a  ero: {        /*
353b0 20 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20   jump, in1 */.  
353c0 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn1 = &aMem[pOp
353d0 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p1];.  assert(
353e0 20 70 49 6e 31 2d 3e 66 6c 61 67 73 26 4d 45 4d   pIn1->flags&MEM
353f0 5f 49 6e 74 20 29 3b 0a 20 20 56 64 62 65 42 72  _Int );.  VdbeBr
35400 61 6e 63 68 54 61 6b 65 6e 28 70 49 6e 31 2d 3e  anchTaken(pIn1->
35410 75 2e 69 3c 30 2c 20 32 29 3b 0a 20 20 69 66 28  u.i<0, 2);.  if(
35420 20 70 49 6e 31 2d 3e 75 2e 69 20 29 7b 0a 20 20   pIn1->u.i ){.  
35430 20 20 20 69 66 28 20 70 49 6e 31 2d 3e 75 2e 69     if( pIn1->u.i
35440 3e 30 20 29 20 70 49 6e 31 2d 3e 75 2e 69 2d 2d  >0 ) pIn1->u.i--
35450 3b 0a 20 20 20 20 20 67 6f 74 6f 20 6a 75 6d 70  ;.     goto jump
35460 5f 74 6f 5f 70 32 3b 0a 20 20 7d 0a 20 20 62 72  _to_p2;.  }.  br
35470 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
35480 65 3a 20 44 65 63 72 4a 75 6d 70 5a 65 72 6f 20  e: DecrJumpZero 
35490 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53  P1 P2 * * *.** S
354a0 79 6e 6f 70 73 69 73 3a 20 69 66 20 28 2d 2d 72  ynopsis: if (--r
354b0 5b 50 31 5d 29 3d 3d 30 20 67 6f 74 6f 20 50 32  [P1])==0 goto P2
354c0 0a 2a 2a 0a 2a 2a 20 52 65 67 69 73 74 65 72 20  .**.** Register 
354d0 50 31 20 6d 75 73 74 20 68 6f 6c 64 20 61 6e 20  P1 must hold an 
354e0 69 6e 74 65 67 65 72 2e 20 20 44 65 63 72 65 6d  integer.  Decrem
354f0 65 6e 74 20 74 68 65 20 76 61 6c 75 65 20 69 6e  ent the value in
35500 20 50 31 0a 2a 2a 20 61 6e 64 20 6a 75 6d 70 20   P1.** and jump 
35510 74 6f 20 50 32 20 69 66 20 74 68 65 20 6e 65 77  to P2 if the new
35520 20 76 61 6c 75 65 20 69 73 20 65 78 61 63 74 6c   value is exactl
35530 79 20 7a 65 72 6f 2e 0a 2a 2f 0a 63 61 73 65 20  y zero..*/.case 
35540 4f 50 5f 44 65 63 72 4a 75 6d 70 5a 65 72 6f 3a  OP_DecrJumpZero:
35550 20 7b 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c   {      /* jump,
35560 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d   in1 */.  pIn1 =
35570 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b   &aMem[pOp->p1];
35580 0a 20 20 61 73 73 65 72 74 28 20 70 49 6e 31 2d  .  assert( pIn1-
35590 3e 66 6c 61 67 73 26 4d 45 4d 5f 49 6e 74 20 29  >flags&MEM_Int )
355a0 3b 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e 75 2e  ;.  if( pIn1->u.
355b0 69 3e 53 4d 41 4c 4c 45 53 54 5f 49 4e 54 36 34  i>SMALLEST_INT64
355c0 20 29 20 70 49 6e 31 2d 3e 75 2e 69 2d 2d 3b 0a   ) pIn1->u.i--;.
355d0 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65    VdbeBranchTake
355e0 6e 28 70 49 6e 31 2d 3e 75 2e 69 3d 3d 30 2c 20  n(pIn1->u.i==0, 
355f0 32 29 3b 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e  2);.  if( pIn1->
35600 75 2e 69 3d 3d 30 20 29 20 67 6f 74 6f 20 6a 75  u.i==0 ) goto ju
35610 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 62 72 65 61  mp_to_p2;.  brea
35620 6b 3b 0a 7d 0a 0a 0a 2f 2a 20 4f 70 63 6f 64 65  k;.}.../* Opcode
35630 3a 20 41 67 67 53 74 65 70 20 2a 20 50 32 20 50  : AggStep * P2 P
35640 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70  3 P4 P5.** Synop
35650 73 69 73 3a 20 61 63 63 75 6d 3d 72 5b 50 33 5d  sis: accum=r[P3]
35660 20 73 74 65 70 28 72 5b 50 32 40 50 35 5d 29 0a   step(r[P2@P5]).
35670 2a 2a 0a 2a 2a 20 45 78 65 63 75 74 65 20 74 68  **.** Execute th
35680 65 20 78 53 74 65 70 20 66 75 6e 63 74 69 6f 6e  e xStep function
35690 20 66 6f 72 20 61 6e 20 61 67 67 72 65 67 61 74   for an aggregat
356a0 65 2e 0a 2a 2a 20 54 68 65 20 66 75 6e 63 74 69  e..** The functi
356b0 6f 6e 20 68 61 73 20 50 35 20 61 72 67 75 6d 65  on has P5 argume
356c0 6e 74 73 2e 20 20 50 34 20 69 73 20 61 20 70 6f  nts.  P4 is a po
356d0 69 6e 74 65 72 20 74 6f 20 74 68 65 20 0a 2a 2a  inter to the .**
356e0 20 46 75 6e 63 44 65 66 20 73 74 72 75 63 74 75   FuncDef structu
356f0 72 65 20 74 68 61 74 20 73 70 65 63 69 66 69 65  re that specifie
35700 73 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 2e 20  s the function. 
35710 20 52 65 67 69 73 74 65 72 20 50 33 20 69 73 20   Register P3 is 
35720 74 68 65 0a 2a 2a 20 61 63 63 75 6d 75 6c 61 74  the.** accumulat
35730 6f 72 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 35  or..**.** The P5
35740 20 61 72 67 75 6d 65 6e 74 73 20 61 72 65 20 74   arguments are t
35750 61 6b 65 6e 20 66 72 6f 6d 20 72 65 67 69 73 74  aken from regist
35760 65 72 20 50 32 20 61 6e 64 20 69 74 73 0a 2a 2a  er P2 and its.**
35770 20 73 75 63 63 65 73 73 6f 72 73 2e 0a 2a 2f 0a   successors..*/.
35780 2f 2a 20 4f 70 63 6f 64 65 3a 20 41 67 67 49 6e  /* Opcode: AggIn
35790 76 65 72 73 65 20 2a 20 50 32 20 50 33 20 50 34  verse * P2 P3 P4
357a0 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a   P5.** Synopsis:
357b0 20 61 63 63 75 6d 3d 72 5b 50 33 5d 20 69 6e 76   accum=r[P3] inv
357c0 65 72 73 65 28 72 5b 50 32 40 50 35 5d 29 0a 2a  erse(r[P2@P5]).*
357d0 2a 0a 2a 2a 20 45 78 65 63 75 74 65 20 74 68 65  *.** Execute the
357e0 20 78 49 6e 76 65 72 73 65 20 66 75 6e 63 74 69   xInverse functi
357f0 6f 6e 20 66 6f 72 20 61 6e 20 61 67 67 72 65 67  on for an aggreg
35800 61 74 65 2e 0a 2a 2a 20 54 68 65 20 66 75 6e 63  ate..** The func
35810 74 69 6f 6e 20 68 61 73 20 50 35 20 61 72 67 75  tion has P5 argu
35820 6d 65 6e 74 73 2e 20 20 50 34 20 69 73 20 61 20  ments.  P4 is a 
35830 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20 0a  pointer to the .
35840 2a 2a 20 46 75 6e 63 44 65 66 20 73 74 72 75 63  ** FuncDef struc
35850 74 75 72 65 20 74 68 61 74 20 73 70 65 63 69 66  ture that specif
35860 69 65 73 20 74 68 65 20 66 75 6e 63 74 69 6f 6e  ies the function
35870 2e 20 20 52 65 67 69 73 74 65 72 20 50 33 20 69  .  Register P3 i
35880 73 20 74 68 65 0a 2a 2a 20 61 63 63 75 6d 75 6c  s the.** accumul
35890 61 74 6f 72 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  ator..**.** The 
358a0 50 35 20 61 72 67 75 6d 65 6e 74 73 20 61 72 65  P5 arguments are
358b0 20 74 61 6b 65 6e 20 66 72 6f 6d 20 72 65 67 69   taken from regi
358c0 73 74 65 72 20 50 32 20 61 6e 64 20 69 74 73 0a  ster P2 and its.
358d0 2a 2a 20 73 75 63 63 65 73 73 6f 72 73 2e 0a 2a  ** successors..*
358e0 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 41 67 67  /./* Opcode: Agg
358f0 53 74 65 70 31 20 50 31 20 50 32 20 50 33 20 50  Step1 P1 P2 P3 P
35900 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73  4 P5.** Synopsis
35910 3a 20 61 63 63 75 6d 3d 72 5b 50 33 5d 20 73 74  : accum=r[P3] st
35920 65 70 28 72 5b 50 32 40 50 35 5d 29 0a 2a 2a 0a  ep(r[P2@P5]).**.
35930 2a 2a 20 45 78 65 63 75 74 65 20 74 68 65 20 78  ** Execute the x
35940 53 74 65 70 20 28 69 66 20 50 31 3d 3d 30 29 20  Step (if P1==0) 
35950 6f 72 20 78 49 6e 76 65 72 73 65 20 28 69 66 20  or xInverse (if 
35960 50 31 21 3d 30 29 20 66 75 6e 63 74 69 6f 6e 20  P1!=0) function 
35970 66 6f 72 20 61 6e 0a 2a 2a 20 61 67 67 72 65 67  for an.** aggreg
35980 61 74 65 2e 20 20 54 68 65 20 66 75 6e 63 74 69  ate.  The functi
35990 6f 6e 20 68 61 73 20 50 35 20 61 72 67 75 6d 65  on has P5 argume
359a0 6e 74 73 2e 20 20 50 34 20 69 73 20 61 20 70 6f  nts.  P4 is a po
359b0 69 6e 74 65 72 20 74 6f 20 74 68 65 20 0a 2a 2a  inter to the .**
359c0 20 46 75 6e 63 44 65 66 20 73 74 72 75 63 74 75   FuncDef structu
359d0 72 65 20 74 68 61 74 20 73 70 65 63 69 66 69 65  re that specifie
359e0 73 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 2e 20  s the function. 
359f0 20 52 65 67 69 73 74 65 72 20 50 33 20 69 73 20   Register P3 is 
35a00 74 68 65 0a 2a 2a 20 61 63 63 75 6d 75 6c 61 74  the.** accumulat
35a10 6f 72 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 35  or..**.** The P5
35a20 20 61 72 67 75 6d 65 6e 74 73 20 61 72 65 20 74   arguments are t
35a30 61 6b 65 6e 20 66 72 6f 6d 20 72 65 67 69 73 74  aken from regist
35a40 65 72 20 50 32 20 61 6e 64 20 69 74 73 0a 2a 2a  er P2 and its.**
35a50 20 73 75 63 63 65 73 73 6f 72 73 2e 0a 2a 2a 0a   successors..**.
35a60 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 69  ** This opcode i
35a70 73 20 69 6e 69 74 69 61 6c 6c 79 20 63 6f 64 65  s initially code
35a80 64 20 61 73 20 4f 50 5f 41 67 67 53 74 65 70 30  d as OP_AggStep0
35a90 2e 20 20 4f 6e 20 66 69 72 73 74 20 65 76 61 6c  .  On first eval
35aa0 75 61 74 69 6f 6e 2c 0a 2a 2a 20 74 68 65 20 46  uation,.** the F
35ab0 75 6e 63 44 65 66 20 73 74 6f 72 65 64 20 69 6e  uncDef stored in
35ac0 20 50 34 20 69 73 20 63 6f 6e 76 65 72 74 65 64   P4 is converted
35ad0 20 69 6e 74 6f 20 61 6e 20 73 71 6c 69 74 65 33   into an sqlite3
35ae0 5f 63 6f 6e 74 65 78 74 20 61 6e 64 0a 2a 2a 20  _context and.** 
35af0 74 68 65 20 6f 70 63 6f 64 65 20 69 73 20 63 68  the opcode is ch
35b00 61 6e 67 65 64 2e 20 20 49 6e 20 74 68 69 73 20  anged.  In this 
35b10 77 61 79 2c 20 74 68 65 20 69 6e 69 74 69 61 6c  way, the initial
35b20 69 7a 61 74 69 6f 6e 20 6f 66 20 74 68 65 0a 2a  ization of the.*
35b30 2a 20 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78  * sqlite3_contex
35b40 74 20 6f 6e 6c 79 20 68 61 70 70 65 6e 73 20 6f  t only happens o
35b50 6e 63 65 2c 20 69 6e 73 74 65 61 64 20 6f 66 20  nce, instead of 
35b60 6f 6e 20 65 61 63 68 20 63 61 6c 6c 20 74 6f 20  on each call to 
35b70 74 68 65 0a 2a 2a 20 73 74 65 70 20 66 75 6e 63  the.** step func
35b80 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  tion..*/.case OP
35b90 5f 41 67 67 49 6e 76 65 72 73 65 3a 0a 63 61 73  _AggInverse:.cas
35ba0 65 20 4f 50 5f 41 67 67 53 74 65 70 3a 20 7b 0a  e OP_AggStep: {.
35bb0 20 20 69 6e 74 20 6e 3b 0a 20 20 73 71 6c 69 74    int n;.  sqlit
35bc0 65 33 5f 63 6f 6e 74 65 78 74 20 2a 70 43 74 78  e3_context *pCtx
35bd0 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  ;..  assert( pOp
35be0 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 46 55 4e  ->p4type==P4_FUN
35bf0 43 44 45 46 20 29 3b 0a 20 20 6e 20 3d 20 70 4f  CDEF );.  n = pO
35c00 70 2d 3e 70 35 3b 0a 20 20 61 73 73 65 72 74 28  p->p5;.  assert(
35c10 20 70 4f 70 2d 3e 70 33 3e 30 20 26 26 20 70 4f   pOp->p3>0 && pO
35c20 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b  p->p3<=(p->nMem+
35c30 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29 20  1 - p->nCursor) 
35c40 29 3b 0a 20 20 61 73 73 65 72 74 28 20 6e 3d 3d  );.  assert( n==
35c50 30 20 7c 7c 20 28 70 4f 70 2d 3e 70 32 3e 30 20  0 || (pOp->p2>0 
35c60 26 26 20 70 4f 70 2d 3e 70 32 2b 6e 3c 3d 28 70  && pOp->p2+n<=(p
35c70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43  ->nMem+1 - p->nC
35c80 75 72 73 6f 72 29 2b 31 29 20 29 3b 0a 20 20 61  ursor)+1) );.  a
35c90 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c 70  ssert( pOp->p3<p
35ca0 4f 70 2d 3e 70 32 20 7c 7c 20 70 4f 70 2d 3e 70  Op->p2 || pOp->p
35cb0 33 3e 3d 70 4f 70 2d 3e 70 32 2b 6e 20 29 3b 0a  3>=pOp->p2+n );.
35cc0 20 20 70 43 74 78 20 3d 20 73 71 6c 69 74 65 33    pCtx = sqlite3
35cd0 44 62 4d 61 6c 6c 6f 63 52 61 77 4e 4e 28 64 62  DbMallocRawNN(db
35ce0 2c 20 6e 2a 73 69 7a 65 6f 66 28 73 71 6c 69 74  , n*sizeof(sqlit
35cf0 65 33 5f 76 61 6c 75 65 2a 29 20 2b 0a 20 20 20  e3_value*) +.   
35d00 20 20 20 20 20 20 20 20 20 20 20 20 28 73 69 7a              (siz
35d10 65 6f 66 28 70 43 74 78 5b 30 5d 29 20 2b 20 73  eof(pCtx[0]) + s
35d20 69 7a 65 6f 66 28 4d 65 6d 29 20 2d 20 73 69 7a  izeof(Mem) - siz
35d30 65 6f 66 28 73 71 6c 69 74 65 33 5f 76 61 6c 75  eof(sqlite3_valu
35d40 65 2a 29 29 29 3b 0a 20 20 69 66 28 20 70 43 74  e*)));.  if( pCt
35d50 78 3d 3d 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d  x==0 ) goto no_m
35d60 65 6d 3b 0a 20 20 70 43 74 78 2d 3e 70 4d 65 6d  em;.  pCtx->pMem
35d70 20 3d 20 30 3b 0a 20 20 70 43 74 78 2d 3e 70 4f   = 0;.  pCtx->pO
35d80 75 74 20 3d 20 28 4d 65 6d 2a 29 26 28 70 43 74  ut = (Mem*)&(pCt
35d90 78 2d 3e 61 72 67 76 5b 6e 5d 29 3b 0a 20 20 73  x->argv[n]);.  s
35da0 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 49 6e 69  qlite3VdbeMemIni
35db0 74 28 70 43 74 78 2d 3e 70 4f 75 74 2c 20 64 62  t(pCtx->pOut, db
35dc0 2c 20 4d 45 4d 5f 4e 75 6c 6c 29 3b 0a 20 20 70  , MEM_Null);.  p
35dd0 43 74 78 2d 3e 70 46 75 6e 63 20 3d 20 70 4f 70  Ctx->pFunc = pOp
35de0 2d 3e 70 34 2e 70 46 75 6e 63 3b 0a 20 20 70 43  ->p4.pFunc;.  pC
35df0 74 78 2d 3e 69 4f 70 20 3d 20 28 69 6e 74 29 28  tx->iOp = (int)(
35e00 70 4f 70 20 2d 20 61 4f 70 29 3b 0a 20 20 70 43  pOp - aOp);.  pC
35e10 74 78 2d 3e 70 56 64 62 65 20 3d 20 70 3b 0a 20  tx->pVdbe = p;. 
35e20 20 70 43 74 78 2d 3e 73 6b 69 70 46 6c 61 67 20   pCtx->skipFlag 
35e30 3d 20 30 3b 0a 20 20 70 43 74 78 2d 3e 69 73 45  = 0;.  pCtx->isE
35e40 72 72 6f 72 20 3d 20 30 3b 0a 20 20 70 43 74 78  rror = 0;.  pCtx
35e50 2d 3e 61 72 67 63 20 3d 20 6e 3b 0a 20 20 70 4f  ->argc = n;.  pO
35e60 70 2d 3e 70 34 74 79 70 65 20 3d 20 50 34 5f 46  p->p4type = P4_F
35e70 55 4e 43 43 54 58 3b 0a 20 20 70 4f 70 2d 3e 70  UNCCTX;.  pOp->p
35e80 34 2e 70 43 74 78 20 3d 20 70 43 74 78 3b 0a 0a  4.pCtx = pCtx;..
35e90 20 20 2f 2a 20 4f 50 5f 41 67 67 49 6e 76 65 72    /* OP_AggInver
35ea0 73 65 20 6d 75 73 74 20 68 61 76 65 20 50 31 3d  se must have P1=
35eb0 3d 31 20 61 6e 64 20 4f 50 5f 41 67 67 53 74 65  =1 and OP_AggSte
35ec0 70 20 6d 75 73 74 20 68 61 76 65 20 50 31 3d 3d  p must have P1==
35ed0 30 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70  0 */.  assert( p
35ee0 4f 70 2d 3e 70 31 3d 3d 28 70 4f 70 2d 3e 6f 70  Op->p1==(pOp->op
35ef0 63 6f 64 65 3d 3d 4f 50 5f 41 67 67 49 6e 76 65  code==OP_AggInve
35f00 72 73 65 29 20 29 3b 0a 0a 20 20 70 4f 70 2d 3e  rse) );..  pOp->
35f10 6f 70 63 6f 64 65 20 3d 20 4f 50 5f 41 67 67 53  opcode = OP_AggS
35f20 74 65 70 31 3b 0a 20 20 2f 2a 20 46 61 6c 6c 20  tep1;.  /* Fall 
35f30 74 68 72 6f 75 67 68 20 69 6e 74 6f 20 4f 50 5f  through into OP_
35f40 41 67 67 53 74 65 70 20 2a 2f 0a 7d 0a 63 61 73  AggStep */.}.cas
35f50 65 20 4f 50 5f 41 67 67 53 74 65 70 31 3a 20 7b  e OP_AggStep1: {
35f60 0a 20 20 69 6e 74 20 69 3b 0a 20 20 73 71 6c 69  .  int i;.  sqli
35f70 74 65 33 5f 63 6f 6e 74 65 78 74 20 2a 70 43 74  te3_context *pCt
35f80 78 3b 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d 3b 0a  x;.  Mem *pMem;.
35f90 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
35fa0 70 34 74 79 70 65 3d 3d 50 34 5f 46 55 4e 43 43  p4type==P4_FUNCC
35fb0 54 58 20 29 3b 0a 20 20 70 43 74 78 20 3d 20 70  TX );.  pCtx = p
35fc0 4f 70 2d 3e 70 34 2e 70 43 74 78 3b 0a 20 20 70  Op->p4.pCtx;.  p
35fd0 4d 65 6d 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  Mem = &aMem[pOp-
35fe0 3e 70 33 5d 3b 0a 0a 23 69 66 64 65 66 20 53 51  >p3];..#ifdef SQ
35ff0 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 69 66 28  LITE_DEBUG.  if(
36000 20 70 4f 70 2d 3e 70 31 20 29 7b 0a 20 20 20 20   pOp->p1 ){.    
36010 2f 2a 20 54 68 69 73 20 69 73 20 61 6e 20 4f 50  /* This is an OP
36020 5f 41 67 67 49 6e 76 65 72 73 65 20 63 61 6c 6c  _AggInverse call
36030 2e 20 20 56 65 72 69 66 79 20 74 68 61 74 20 78  .  Verify that x
36040 53 74 65 70 20 68 61 73 20 61 6c 77 61 79 73 0a  Step has always.
36050 20 20 20 20 2a 2a 20 62 65 65 6e 20 63 61 6c 6c      ** been call
36060 65 64 20 61 74 20 6c 65 61 73 74 20 6f 6e 63 65  ed at least once
36070 20 70 72 69 6f 72 20 74 6f 20 61 6e 79 20 78 49   prior to any xI
36080 6e 76 65 72 73 65 20 63 61 6c 6c 2e 20 2a 2f 0a  nverse call. */.
36090 20 20 20 20 61 73 73 65 72 74 28 20 70 4d 65 6d      assert( pMem
360a0 2d 3e 75 54 65 6d 70 3d 3d 30 78 31 31 32 32 65  ->uTemp==0x1122e
360b0 30 65 33 20 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a  0e3 );.  }else{.
360c0 20 20 20 20 2f 2a 20 54 68 69 73 20 69 73 20 61      /* This is a
360d0 6e 20 4f 50 5f 41 67 67 53 74 65 70 20 63 61 6c  n OP_AggStep cal
360e0 6c 2e 20 20 4d 61 72 6b 20 69 74 20 61 73 20 73  l.  Mark it as s
360f0 75 63 68 2e 20 2a 2f 0a 20 20 20 20 70 4d 65 6d  uch. */.    pMem
36100 2d 3e 75 54 65 6d 70 20 3d 20 30 78 31 31 32 32  ->uTemp = 0x1122
36110 65 30 65 33 3b 0a 20 20 7d 0a 23 65 6e 64 69 66  e0e3;.  }.#endif
36120 0a 0a 20 20 2f 2a 20 49 66 20 74 68 69 73 20 66  ..  /* If this f
36130 75 6e 63 74 69 6f 6e 20 69 73 20 69 6e 73 69 64  unction is insid
36140 65 20 6f 66 20 61 20 74 72 69 67 67 65 72 2c 20  e of a trigger, 
36150 74 68 65 20 72 65 67 69 73 74 65 72 20 61 72 72  the register arr
36160 61 79 20 69 6e 20 61 4d 65 6d 5b 5d 0a 20 20 2a  ay in aMem[].  *
36170 2a 20 6d 69 67 68 74 20 63 68 61 6e 67 65 20 66  * might change f
36180 72 6f 6d 20 6f 6e 65 20 65 76 61 6c 75 61 74 69  rom one evaluati
36190 6f 6e 20 74 6f 20 74 68 65 20 6e 65 78 74 2e 20  on to the next. 
361a0 20 54 68 65 20 6e 65 78 74 20 62 6c 6f 63 6b 20   The next block 
361b0 6f 66 20 63 6f 64 65 0a 20 20 2a 2a 20 63 68 65  of code.  ** che
361c0 63 6b 73 20 74 6f 20 73 65 65 20 69 66 20 74 68  cks to see if th
361d0 65 20 72 65 67 69 73 74 65 72 20 61 72 72 61 79  e register array
361e0 20 68 61 73 20 63 68 61 6e 67 65 64 2c 20 61 6e   has changed, an
361f0 64 20 69 66 20 73 6f 20 69 74 0a 20 20 2a 2a 20  d if so it.  ** 
36200 72 65 69 6e 69 74 69 61 6c 69 7a 65 73 20 74 68  reinitializes th
36210 65 20 72 65 6c 61 76 61 6e 74 20 70 61 72 74 73  e relavant parts
36220 20 6f 66 20 74 68 65 20 73 71 6c 69 74 65 33 5f   of the sqlite3_
36230 63 6f 6e 74 65 78 74 20 6f 62 6a 65 63 74 20 2a  context object *
36240 2f 0a 20 20 69 66 28 20 70 43 74 78 2d 3e 70 4d  /.  if( pCtx->pM
36250 65 6d 20 21 3d 20 70 4d 65 6d 20 29 7b 0a 20 20  em != pMem ){.  
36260 20 20 70 43 74 78 2d 3e 70 4d 65 6d 20 3d 20 70    pCtx->pMem = p
36270 4d 65 6d 3b 0a 20 20 20 20 66 6f 72 28 69 3d 70  Mem;.    for(i=p
36280 43 74 78 2d 3e 61 72 67 63 2d 31 3b 20 69 3e 3d  Ctx->argc-1; i>=
36290 30 3b 20 69 2d 2d 29 20 70 43 74 78 2d 3e 61 72  0; i--) pCtx->ar
362a0 67 76 5b 69 5d 20 3d 20 26 61 4d 65 6d 5b 70 4f  gv[i] = &aMem[pO
362b0 70 2d 3e 70 32 2b 69 5d 3b 0a 20 20 7d 0a 0a 23  p->p2+i];.  }..#
362c0 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42  ifdef SQLITE_DEB
362d0 55 47 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c  UG.  for(i=0; i<
362e0 70 43 74 78 2d 3e 61 72 67 63 3b 20 69 2b 2b 29  pCtx->argc; i++)
362f0 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 6d 65  {.    assert( me
36300 6d 49 73 56 61 6c 69 64 28 70 43 74 78 2d 3e 61  mIsValid(pCtx->a
36310 72 67 76 5b 69 5d 29 20 29 3b 0a 20 20 20 20 52  rgv[i]) );.    R
36320 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f  EGISTER_TRACE(pO
36330 70 2d 3e 70 32 2b 69 2c 20 70 43 74 78 2d 3e 61  p->p2+i, pCtx->a
36340 72 67 76 5b 69 5d 29 3b 0a 20 20 7d 0a 23 65 6e  rgv[i]);.  }.#en
36350 64 69 66 0a 0a 20 20 70 4d 65 6d 2d 3e 6e 2b 2b  dif..  pMem->n++
36360 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 74 78  ;.  assert( pCtx
36370 2d 3e 70 4f 75 74 2d 3e 66 6c 61 67 73 3d 3d 4d  ->pOut->flags==M
36380 45 4d 5f 4e 75 6c 6c 20 29 3b 0a 20 20 61 73 73  EM_Null );.  ass
36390 65 72 74 28 20 70 43 74 78 2d 3e 69 73 45 72 72  ert( pCtx->isErr
363a0 6f 72 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  or==0 );.  asser
363b0 74 28 20 70 43 74 78 2d 3e 73 6b 69 70 46 6c 61  t( pCtx->skipFla
363c0 67 3d 3d 30 20 29 3b 0a 23 69 66 6e 64 65 66 20  g==0 );.#ifndef 
363d0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 49 4e 44  SQLITE_OMIT_WIND
363e0 4f 57 46 55 4e 43 0a 20 20 69 66 28 20 70 4f 70  OWFUNC.  if( pOp
363f0 2d 3e 70 31 20 29 7b 0a 20 20 20 20 28 70 43 74  ->p1 ){.    (pCt
36400 78 2d 3e 70 46 75 6e 63 2d 3e 78 49 6e 76 65 72  x->pFunc->xInver
36410 73 65 29 28 70 43 74 78 2c 70 43 74 78 2d 3e 61  se)(pCtx,pCtx->a
36420 72 67 63 2c 70 43 74 78 2d 3e 61 72 67 76 29 3b  rgc,pCtx->argv);
36430 0a 20 20 7d 65 6c 73 65 0a 23 65 6e 64 69 66 0a  .  }else.#endif.
36440 20 20 28 70 43 74 78 2d 3e 70 46 75 6e 63 2d 3e    (pCtx->pFunc->
36450 78 53 46 75 6e 63 29 28 70 43 74 78 2c 70 43 74  xSFunc)(pCtx,pCt
36460 78 2d 3e 61 72 67 63 2c 70 43 74 78 2d 3e 61 72  x->argc,pCtx->ar
36470 67 76 29 3b 20 2f 2a 20 49 4d 50 3a 20 52 2d 32  gv); /* IMP: R-2
36480 34 35 30 35 2d 32 33 32 33 30 20 2a 2f 0a 0a 20  4505-23230 */.. 
36490 20 69 66 28 20 70 43 74 78 2d 3e 69 73 45 72 72   if( pCtx->isErr
364a0 6f 72 20 29 7b 0a 20 20 20 20 69 66 28 20 70 43  or ){.    if( pC
364b0 74 78 2d 3e 69 73 45 72 72 6f 72 3e 30 20 29 7b  tx->isError>0 ){
364c0 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64  .      sqlite3Vd
364d0 62 65 45 72 72 6f 72 28 70 2c 20 22 25 73 22 2c  beError(p, "%s",
364e0 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74   sqlite3_value_t
364f0 65 78 74 28 70 43 74 78 2d 3e 70 4f 75 74 29 29  ext(pCtx->pOut))
36500 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 70 43 74  ;.      rc = pCt
36510 78 2d 3e 69 73 45 72 72 6f 72 3b 0a 20 20 20 20  x->isError;.    
36520 7d 0a 20 20 20 20 69 66 28 20 70 43 74 78 2d 3e  }.    if( pCtx->
36530 73 6b 69 70 46 6c 61 67 20 29 7b 0a 20 20 20 20  skipFlag ){.    
36540 20 20 61 73 73 65 72 74 28 20 70 4f 70 5b 2d 31    assert( pOp[-1
36550 5d 2e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 43 6f 6c  ].opcode==OP_Col
36560 6c 53 65 71 20 29 3b 0a 20 20 20 20 20 20 69 20  lSeq );.      i 
36570 3d 20 70 4f 70 5b 2d 31 5d 2e 70 31 3b 0a 20 20  = pOp[-1].p1;.  
36580 20 20 20 20 69 66 28 20 69 20 29 20 73 71 6c 69      if( i ) sqli
36590 74 65 33 56 64 62 65 4d 65 6d 53 65 74 49 6e 74  te3VdbeMemSetInt
365a0 36 34 28 26 61 4d 65 6d 5b 69 5d 2c 20 31 29 3b  64(&aMem[i], 1);
365b0 0a 20 20 20 20 20 20 70 43 74 78 2d 3e 73 6b 69  .      pCtx->ski
365c0 70 46 6c 61 67 20 3d 20 30 3b 0a 20 20 20 20 7d  pFlag = 0;.    }
365d0 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
365e0 4d 65 6d 52 65 6c 65 61 73 65 28 70 43 74 78 2d  MemRelease(pCtx-
365f0 3e 70 4f 75 74 29 3b 0a 20 20 20 20 70 43 74 78  >pOut);.    pCtx
36600 2d 3e 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20  ->pOut->flags = 
36610 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20 20 20 20 70 43  MEM_Null;.    pC
36620 74 78 2d 3e 69 73 45 72 72 6f 72 20 3d 20 30 3b  tx->isError = 0;
36630 0a 20 20 20 20 69 66 28 20 72 63 20 29 20 67 6f  .    if( rc ) go
36640 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
36650 65 72 72 6f 72 3b 0a 20 20 7d 0a 20 20 61 73 73  error;.  }.  ass
36660 65 72 74 28 20 70 43 74 78 2d 3e 70 4f 75 74 2d  ert( pCtx->pOut-
36670 3e 66 6c 61 67 73 3d 3d 4d 45 4d 5f 4e 75 6c 6c  >flags==MEM_Null
36680 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43   );.  assert( pC
36690 74 78 2d 3e 73 6b 69 70 46 6c 61 67 3d 3d 30 20  tx->skipFlag==0 
366a0 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  );.  break;.}../
366b0 2a 20 4f 70 63 6f 64 65 3a 20 41 67 67 46 69 6e  * Opcode: AggFin
366c0 61 6c 20 50 31 20 50 32 20 2a 20 50 34 20 2a 0a  al P1 P2 * P4 *.
366d0 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 61 63 63  ** Synopsis: acc
366e0 75 6d 3d 72 5b 50 31 5d 20 4e 3d 50 32 0a 2a 2a  um=r[P1] N=P2.**
366f0 0a 2a 2a 20 50 31 20 69 73 20 74 68 65 20 6d 65  .** P1 is the me
36700 6d 6f 72 79 20 6c 6f 63 61 74 69 6f 6e 20 74 68  mory location th
36710 61 74 20 69 73 20 74 68 65 20 61 63 63 75 6d 75  at is the accumu
36720 6c 61 74 6f 72 20 66 6f 72 20 61 6e 20 61 67 67  lator for an agg
36730 72 65 67 61 74 65 0a 2a 2a 20 6f 72 20 77 69 6e  regate.** or win
36740 64 6f 77 20 66 75 6e 63 74 69 6f 6e 2e 20 20 45  dow function.  E
36750 78 65 63 75 74 65 20 74 68 65 20 66 69 6e 61 6c  xecute the final
36760 69 7a 65 72 20 66 75 6e 63 74 69 6f 6e 20 0a 2a  izer function .*
36770 2a 20 66 6f 72 20 61 6e 20 61 67 67 72 65 67 61  * for an aggrega
36780 74 65 20 61 6e 64 20 73 74 6f 72 65 20 74 68 65  te and store the
36790 20 72 65 73 75 6c 74 20 69 6e 20 50 31 2e 0a 2a   result in P1..*
367a0 2a 0a 2a 2a 20 50 32 20 69 73 20 74 68 65 20 6e  *.** P2 is the n
367b0 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e  umber of argumen
367c0 74 73 20 74 68 61 74 20 74 68 65 20 73 74 65 70  ts that the step
367d0 20 66 75 6e 63 74 69 6f 6e 20 74 61 6b 65 73 20   function takes 
367e0 61 6e 64 0a 2a 2a 20 50 34 20 69 73 20 61 20 70  and.** P4 is a p
367f0 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20 46 75  ointer to the Fu
36800 6e 63 44 65 66 20 66 6f 72 20 74 68 69 73 20 66  ncDef for this f
36810 75 6e 63 74 69 6f 6e 2e 20 20 54 68 65 20 50 32  unction.  The P2
36820 0a 2a 2a 20 61 72 67 75 6d 65 6e 74 20 69 73 20  .** argument is 
36830 6e 6f 74 20 75 73 65 64 20 62 79 20 74 68 69 73  not used by this
36840 20 6f 70 63 6f 64 65 2e 20 20 49 74 20 69 73 20   opcode.  It is 
36850 6f 6e 6c 79 20 74 68 65 72 65 20 74 6f 20 64 69  only there to di
36860 73 61 6d 62 69 67 75 61 74 65 0a 2a 2a 20 66 75  sambiguate.** fu
36870 6e 63 74 69 6f 6e 73 20 74 68 61 74 20 63 61 6e  nctions that can
36880 20 74 61 6b 65 20 76 61 72 79 69 6e 67 20 6e 75   take varying nu
36890 6d 62 65 72 73 20 6f 66 20 61 72 67 75 6d 65 6e  mbers of argumen
368a0 74 73 2e 20 20 54 68 65 0a 2a 2a 20 50 34 20 61  ts.  The.** P4 a
368b0 72 67 75 6d 65 6e 74 20 69 73 20 6f 6e 6c 79 20  rgument is only 
368c0 6e 65 65 64 65 64 20 66 6f 72 20 74 68 65 20 63  needed for the c
368d0 61 73 65 20 77 68 65 72 65 0a 2a 2a 20 74 68 65  ase where.** the
368e0 20 73 74 65 70 20 66 75 6e 63 74 69 6f 6e 20 77   step function w
368f0 61 73 20 6e 6f 74 20 70 72 65 76 69 6f 75 73 6c  as not previousl
36900 79 20 63 61 6c 6c 65 64 2e 0a 2a 2f 0a 2f 2a 20  y called..*/./* 
36910 4f 70 63 6f 64 65 3a 20 41 67 67 56 61 6c 75 65  Opcode: AggValue
36920 20 2a 20 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a   * P2 P3 P4 *.**
36930 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 33 5d   Synopsis: r[P3]
36940 3d 76 61 6c 75 65 20 4e 3d 50 32 0a 2a 2a 0a 2a  =value N=P2.**.*
36950 2a 20 49 6e 76 6f 6b 65 20 74 68 65 20 78 56 61  * Invoke the xVa
36960 6c 75 65 28 29 20 66 75 6e 63 74 69 6f 6e 20 61  lue() function a
36970 6e 64 20 73 74 6f 72 65 20 74 68 65 20 72 65 73  nd store the res
36980 75 6c 74 20 69 6e 20 72 65 67 69 73 74 65 72 20  ult in register 
36990 50 33 2e 0a 2a 2a 0a 2a 2a 20 50 32 20 69 73 20  P3..**.** P2 is 
369a0 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 61 72  the number of ar
369b0 67 75 6d 65 6e 74 73 20 74 68 61 74 20 74 68 65  guments that the
369c0 20 73 74 65 70 20 66 75 6e 63 74 69 6f 6e 20 74   step function t
369d0 61 6b 65 73 20 61 6e 64 0a 2a 2a 20 50 34 20 69  akes and.** P4 i
369e0 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 74  s a pointer to t
369f0 68 65 20 46 75 6e 63 44 65 66 20 66 6f 72 20 74  he FuncDef for t
36a00 68 69 73 20 66 75 6e 63 74 69 6f 6e 2e 20 20 54  his function.  T
36a10 68 65 20 50 32 0a 2a 2a 20 61 72 67 75 6d 65 6e  he P2.** argumen
36a20 74 20 69 73 20 6e 6f 74 20 75 73 65 64 20 62 79  t is not used by
36a30 20 74 68 69 73 20 6f 70 63 6f 64 65 2e 20 20 49   this opcode.  I
36a40 74 20 69 73 20 6f 6e 6c 79 20 74 68 65 72 65 20  t is only there 
36a50 74 6f 20 64 69 73 61 6d 62 69 67 75 61 74 65 0a  to disambiguate.
36a60 2a 2a 20 66 75 6e 63 74 69 6f 6e 73 20 74 68 61  ** functions tha
36a70 74 20 63 61 6e 20 74 61 6b 65 20 76 61 72 79 69  t can take varyi
36a80 6e 67 20 6e 75 6d 62 65 72 73 20 6f 66 20 61 72  ng numbers of ar
36a90 67 75 6d 65 6e 74 73 2e 20 20 54 68 65 0a 2a 2a  guments.  The.**
36aa0 20 50 34 20 61 72 67 75 6d 65 6e 74 20 69 73 20   P4 argument is 
36ab0 6f 6e 6c 79 20 6e 65 65 64 65 64 20 66 6f 72 20  only needed for 
36ac0 74 68 65 20 63 61 73 65 20 77 68 65 72 65 0a 2a  the case where.*
36ad0 2a 20 74 68 65 20 73 74 65 70 20 66 75 6e 63 74  * the step funct
36ae0 69 6f 6e 20 77 61 73 20 6e 6f 74 20 70 72 65 76  ion was not prev
36af0 69 6f 75 73 6c 79 20 63 61 6c 6c 65 64 2e 0a 2a  iously called..*
36b00 2f 0a 63 61 73 65 20 4f 50 5f 41 67 67 56 61 6c  /.case OP_AggVal
36b10 75 65 3a 0a 63 61 73 65 20 4f 50 5f 41 67 67 46  ue:.case OP_AggF
36b20 69 6e 61 6c 3a 20 7b 0a 20 20 4d 65 6d 20 2a 70  inal: {.  Mem *p
36b30 4d 65 6d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  Mem;.  assert( p
36b40 4f 70 2d 3e 70 31 3e 30 20 26 26 20 70 4f 70 2d  Op->p1>0 && pOp-
36b50 3e 70 31 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20  >p1<=(p->nMem+1 
36b60 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b  - p->nCursor) );
36b70 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
36b80 70 33 3d 3d 30 20 7c 7c 20 70 4f 70 2d 3e 6f 70  p3==0 || pOp->op
36b90 63 6f 64 65 3d 3d 4f 50 5f 41 67 67 56 61 6c 75  code==OP_AggValu
36ba0 65 20 29 3b 0a 20 20 70 4d 65 6d 20 3d 20 26 61  e );.  pMem = &a
36bb0 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
36bc0 61 73 73 65 72 74 28 20 28 70 4d 65 6d 2d 3e 66  assert( (pMem->f
36bd0 6c 61 67 73 20 26 20 7e 28 4d 45 4d 5f 4e 75 6c  lags & ~(MEM_Nul
36be0 6c 7c 4d 45 4d 5f 41 67 67 29 29 3d 3d 30 20 29  l|MEM_Agg))==0 )
36bf0 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ;.#ifndef SQLITE
36c00 5f 4f 4d 49 54 5f 57 49 4e 44 4f 57 46 55 4e 43  _OMIT_WINDOWFUNC
36c10 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 33 20 29  .  if( pOp->p3 )
36c20 7b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74  {.    rc = sqlit
36c30 65 33 56 64 62 65 4d 65 6d 41 67 67 56 61 6c 75  e3VdbeMemAggValu
36c40 65 28 70 4d 65 6d 2c 20 26 61 4d 65 6d 5b 70 4f  e(pMem, &aMem[pO
36c50 70 2d 3e 70 33 5d 2c 20 70 4f 70 2d 3e 70 34 2e  p->p3], pOp->p4.
36c60 70 46 75 6e 63 29 3b 0a 20 20 20 20 70 4d 65 6d  pFunc);.    pMem
36c70 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33   = &aMem[pOp->p3
36c80 5d 3b 0a 20 20 7d 65 6c 73 65 0a 23 65 6e 64 69  ];.  }else.#endi
36c90 66 0a 20 20 7b 0a 20 20 20 20 72 63 20 3d 20 73  f.  {.    rc = s
36ca0 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 46 69 6e  qlite3VdbeMemFin
36cb0 61 6c 69 7a 65 28 70 4d 65 6d 2c 20 70 4f 70 2d  alize(pMem, pOp-
36cc0 3e 70 34 2e 70 46 75 6e 63 29 3b 0a 20 20 7d 0a  >p4.pFunc);.  }.
36cd0 20 20 0a 20 20 69 66 28 20 72 63 20 29 7b 0a 20    .  if( rc ){. 
36ce0 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 45 72     sqlite3VdbeEr
36cf0 72 6f 72 28 70 2c 20 22 25 73 22 2c 20 73 71 6c  ror(p, "%s", sql
36d00 69 74 65 33 5f 76 61 6c 75 65 5f 74 65 78 74 28  ite3_value_text(
36d10 70 4d 65 6d 29 29 3b 0a 20 20 20 20 67 6f 74 6f  pMem));.    goto
36d20 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
36d30 72 6f 72 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74  ror;.  }.  sqlit
36d40 65 33 56 64 62 65 43 68 61 6e 67 65 45 6e 63 6f  e3VdbeChangeEnco
36d50 64 69 6e 67 28 70 4d 65 6d 2c 20 65 6e 63 6f 64  ding(pMem, encod
36d60 69 6e 67 29 3b 0a 20 20 55 50 44 41 54 45 5f 4d  ing);.  UPDATE_M
36d70 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 4d 65 6d  AX_BLOBSIZE(pMem
36d80 29 3b 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33  );.  if( sqlite3
36d90 56 64 62 65 4d 65 6d 54 6f 6f 42 69 67 28 70 4d  VdbeMemTooBig(pM
36da0 65 6d 29 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20  em) ){.    goto 
36db0 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a 20 20 62  too_big;.  }.  b
36dc0 72 65 61 6b 3b 0a 7d 0a 0a 23 69 66 6e 64 65 66  reak;.}..#ifndef
36dd0 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 41 4c   SQLITE_OMIT_WAL
36de0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 68 65 63  ./* Opcode: Chec
36df0 6b 70 6f 69 6e 74 20 50 31 20 50 32 20 50 33 20  kpoint P1 P2 P3 
36e00 2a 20 2a 0a 2a 2a 0a 2a 2a 20 43 68 65 63 6b 70  * *.**.** Checkp
36e10 6f 69 6e 74 20 64 61 74 61 62 61 73 65 20 50 31  oint database P1
36e20 2e 20 54 68 69 73 20 69 73 20 61 20 6e 6f 2d 6f  . This is a no-o
36e30 70 20 69 66 20 50 31 20 69 73 20 6e 6f 74 20 63  p if P1 is not c
36e40 75 72 72 65 6e 74 6c 79 20 69 6e 0a 2a 2a 20 57  urrently in.** W
36e50 41 4c 20 6d 6f 64 65 2e 20 50 61 72 61 6d 65 74  AL mode. Paramet
36e60 65 72 20 50 32 20 69 73 20 6f 6e 65 20 6f 66 20  er P2 is one of 
36e70 53 51 4c 49 54 45 5f 43 48 45 43 4b 50 4f 49 4e  SQLITE_CHECKPOIN
36e80 54 5f 50 41 53 53 49 56 45 2c 20 46 55 4c 4c 2c  T_PASSIVE, FULL,
36e90 0a 2a 2a 20 52 45 53 54 41 52 54 2c 20 6f 72 20  .** RESTART, or 
36ea0 54 52 55 4e 43 41 54 45 2e 20 20 57 72 69 74 65  TRUNCATE.  Write
36eb0 20 31 20 6f 72 20 30 20 69 6e 74 6f 20 6d 65 6d   1 or 0 into mem
36ec0 5b 50 33 5d 20 69 66 20 74 68 65 20 63 68 65 63  [P3] if the chec
36ed0 6b 70 6f 69 6e 74 20 72 65 74 75 72 6e 73 0a 2a  kpoint returns.*
36ee0 2a 20 53 51 4c 49 54 45 5f 42 55 53 59 20 6f 72  * SQLITE_BUSY or
36ef0 20 6e 6f 74 2c 20 72 65 73 70 65 63 74 69 76 65   not, respective
36f00 6c 79 2e 20 20 57 72 69 74 65 20 74 68 65 20 6e  ly.  Write the n
36f10 75 6d 62 65 72 20 6f 66 20 70 61 67 65 73 20 69  umber of pages i
36f20 6e 20 74 68 65 0a 2a 2a 20 57 41 4c 20 61 66 74  n the.** WAL aft
36f30 65 72 20 74 68 65 20 63 68 65 63 6b 70 6f 69 6e  er the checkpoin
36f40 74 20 69 6e 74 6f 20 6d 65 6d 5b 50 33 2b 31 5d  t into mem[P3+1]
36f50 20 61 6e 64 20 74 68 65 20 6e 75 6d 62 65 72 20   and the number 
36f60 6f 66 20 70 61 67 65 73 0a 2a 2a 20 69 6e 20 74  of pages.** in t
36f70 68 65 20 57 41 4c 20 74 68 61 74 20 68 61 76 65  he WAL that have
36f80 20 62 65 65 6e 20 63 68 65 63 6b 70 6f 69 6e 74   been checkpoint
36f90 65 64 20 61 66 74 65 72 20 74 68 65 20 63 68 65  ed after the che
36fa0 63 6b 70 6f 69 6e 74 0a 2a 2a 20 63 6f 6d 70 6c  ckpoint.** compl
36fb0 65 74 65 73 20 69 6e 74 6f 20 6d 65 6d 5b 50 33  etes into mem[P3
36fc0 2b 32 5d 2e 20 20 48 6f 77 65 76 65 72 20 6f 6e  +2].  However on
36fd0 20 61 6e 20 65 72 72 6f 72 2c 20 6d 65 6d 5b 50   an error, mem[P
36fe0 33 2b 31 5d 20 61 6e 64 0a 2a 2a 20 6d 65 6d 5b  3+1] and.** mem[
36ff0 50 33 2b 32 5d 20 61 72 65 20 69 6e 69 74 69 61  P3+2] are initia
37000 6c 69 7a 65 64 20 74 6f 20 2d 31 2e 0a 2a 2f 0a  lized to -1..*/.
37010 63 61 73 65 20 4f 50 5f 43 68 65 63 6b 70 6f 69  case OP_Checkpoi
37020 6e 74 3a 20 7b 0a 20 20 69 6e 74 20 69 3b 20 20  nt: {.  int i;  
37030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37040 20 20 20 20 20 20 20 20 2f 2a 20 4c 6f 6f 70 20          /* Loop 
37050 63 6f 75 6e 74 65 72 20 2a 2f 0a 20 20 69 6e 74  counter */.  int
37060 20 61 52 65 73 5b 33 5d 3b 20 20 20 20 20 20 20   aRes[3];       
37070 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
37080 52 65 73 75 6c 74 73 20 2a 2f 0a 20 20 4d 65 6d  Results */.  Mem
37090 20 2a 70 4d 65 6d 3b 20 20 20 20 20 20 20 20 20   *pMem;         
370a0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
370b0 57 72 69 74 65 20 72 65 73 75 6c 74 73 20 68 65  Write results he
370c0 72 65 20 2a 2f 0a 0a 20 20 61 73 73 65 72 74 28  re */..  assert(
370d0 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30 20   p->readOnly==0 
370e0 29 3b 0a 20 20 61 52 65 73 5b 30 5d 20 3d 20 30  );.  aRes[0] = 0
370f0 3b 0a 20 20 61 52 65 73 5b 31 5d 20 3d 20 61 52  ;.  aRes[1] = aR
37100 65 73 5b 32 5d 20 3d 20 2d 31 3b 0a 20 20 61 73  es[2] = -1;.  as
37110 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3d 3d 53  sert( pOp->p2==S
37120 51 4c 49 54 45 5f 43 48 45 43 4b 50 4f 49 4e 54  QLITE_CHECKPOINT
37130 5f 50 41 53 53 49 56 45 0a 20 20 20 20 20 20 20  _PASSIVE.       
37140 7c 7c 20 70 4f 70 2d 3e 70 32 3d 3d 53 51 4c 49  || pOp->p2==SQLI
37150 54 45 5f 43 48 45 43 4b 50 4f 49 4e 54 5f 46 55  TE_CHECKPOINT_FU
37160 4c 4c 0a 20 20 20 20 20 20 20 7c 7c 20 70 4f 70  LL.       || pOp
37170 2d 3e 70 32 3d 3d 53 51 4c 49 54 45 5f 43 48 45  ->p2==SQLITE_CHE
37180 43 4b 50 4f 49 4e 54 5f 52 45 53 54 41 52 54 0a  CKPOINT_RESTART.
37190 20 20 20 20 20 20 20 7c 7c 20 70 4f 70 2d 3e 70         || pOp->p
371a0 32 3d 3d 53 51 4c 49 54 45 5f 43 48 45 43 4b 50  2==SQLITE_CHECKP
371b0 4f 49 4e 54 5f 54 52 55 4e 43 41 54 45 0a 20 20  OINT_TRUNCATE.  
371c0 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65  );.  rc = sqlite
371d0 33 43 68 65 63 6b 70 6f 69 6e 74 28 64 62 2c 20  3Checkpoint(db, 
371e0 70 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70 32  pOp->p1, pOp->p2
371f0 2c 20 26 61 52 65 73 5b 31 5d 2c 20 26 61 52 65  , &aRes[1], &aRe
37200 73 5b 32 5d 29 3b 0a 20 20 69 66 28 20 72 63 20  s[2]);.  if( rc 
37210 29 7b 0a 20 20 20 20 69 66 28 20 72 63 21 3d 53  ){.    if( rc!=S
37220 51 4c 49 54 45 5f 42 55 53 59 20 29 20 67 6f 74  QLITE_BUSY ) got
37230 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
37240 72 72 6f 72 3b 0a 20 20 20 20 72 63 20 3d 20 53  rror;.    rc = S
37250 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20 20 20 61 52  QLITE_OK;.    aR
37260 65 73 5b 30 5d 20 3d 20 31 3b 0a 20 20 7d 0a 20  es[0] = 1;.  }. 
37270 20 66 6f 72 28 69 3d 30 2c 20 70 4d 65 6d 20 3d   for(i=0, pMem =
37280 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b   &aMem[pOp->p3];
37290 20 69 3c 33 3b 20 69 2b 2b 2c 20 70 4d 65 6d 2b   i<3; i++, pMem+
372a0 2b 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56  +){.    sqlite3V
372b0 64 62 65 4d 65 6d 53 65 74 49 6e 74 36 34 28 70  dbeMemSetInt64(p
372c0 4d 65 6d 2c 20 28 69 36 34 29 61 52 65 73 5b 69  Mem, (i64)aRes[i
372d0 5d 29 3b 0a 20 20 7d 20 20 20 20 0a 20 20 62 72  ]);.  }    .  br
372e0 65 61 6b 3b 0a 7d 3b 20 20 0a 23 65 6e 64 69 66  eak;.};  .#endif
372f0 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
37300 5f 4f 4d 49 54 5f 50 52 41 47 4d 41 0a 2f 2a 20  _OMIT_PRAGMA./* 
37310 4f 70 63 6f 64 65 3a 20 4a 6f 75 72 6e 61 6c 4d  Opcode: JournalM
37320 6f 64 65 20 50 31 20 50 32 20 50 33 20 2a 20 2a  ode P1 P2 P3 * *
37330 0a 2a 2a 0a 2a 2a 20 43 68 61 6e 67 65 20 74 68  .**.** Change th
37340 65 20 6a 6f 75 72 6e 61 6c 20 6d 6f 64 65 20 6f  e journal mode o
37350 66 20 64 61 74 61 62 61 73 65 20 50 31 20 74 6f  f database P1 to
37360 20 50 33 2e 20 50 33 20 6d 75 73 74 20 62 65 20   P3. P3 must be 
37370 6f 6e 65 20 6f 66 20 74 68 65 0a 2a 2a 20 50 41  one of the.** PA
37380 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f  GER_JOURNALMODE_
37390 58 58 58 20 76 61 6c 75 65 73 2e 20 49 66 20 63  XXX values. If c
373a0 68 61 6e 67 69 6e 67 20 62 65 74 77 65 65 6e 20  hanging between 
373b0 74 68 65 20 76 61 72 69 6f 75 73 20 72 6f 6c 6c  the various roll
373c0 62 61 63 6b 0a 2a 2a 20 6d 6f 64 65 73 20 28 64  back.** modes (d
373d0 65 6c 65 74 65 2c 20 74 72 75 6e 63 61 74 65 2c  elete, truncate,
373e0 20 70 65 72 73 69 73 74 2c 20 6f 66 66 20 61 6e   persist, off an
373f0 64 20 6d 65 6d 6f 72 79 29 2c 20 74 68 69 73 20  d memory), this 
37400 69 73 20 61 20 73 69 6d 70 6c 65 0a 2a 2a 20 6f  is a simple.** o
37410 70 65 72 61 74 69 6f 6e 2e 20 4e 6f 20 49 4f 20  peration. No IO 
37420 69 73 20 72 65 71 75 69 72 65 64 2e 0a 2a 2a 0a  is required..**.
37430 2a 2a 20 49 66 20 63 68 61 6e 67 69 6e 67 20 69  ** If changing i
37440 6e 74 6f 20 6f 72 20 6f 75 74 20 6f 66 20 57 41  nto or out of WA
37450 4c 20 6d 6f 64 65 20 74 68 65 20 70 72 6f 63 65  L mode the proce
37460 64 75 72 65 20 69 73 20 6d 6f 72 65 20 63 6f 6d  dure is more com
37470 70 6c 69 63 61 74 65 64 2e 0a 2a 2a 0a 2a 2a 20  plicated..**.** 
37480 57 72 69 74 65 20 61 20 73 74 72 69 6e 67 20 63  Write a string c
37490 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 66 69  ontaining the fi
374a0 6e 61 6c 20 6a 6f 75 72 6e 61 6c 2d 6d 6f 64 65  nal journal-mode
374b0 20 74 6f 20 72 65 67 69 73 74 65 72 20 50 32 2e   to register P2.
374c0 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4a 6f 75 72  .*/.case OP_Jour
374d0 6e 61 6c 4d 6f 64 65 3a 20 7b 20 20 20 20 2f 2a  nalMode: {    /*
374e0 20 6f 75 74 32 20 2a 2f 0a 20 20 42 74 72 65 65   out2 */.  Btree
374f0 20 2a 70 42 74 3b 20 20 20 20 20 20 20 20 20 20   *pBt;          
37500 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 42 74             /* Bt
37510 72 65 65 20 74 6f 20 63 68 61 6e 67 65 20 6a 6f  ree to change jo
37520 75 72 6e 61 6c 20 6d 6f 64 65 20 6f 66 20 2a 2f  urnal mode of */
37530 0a 20 20 50 61 67 65 72 20 2a 70 50 61 67 65 72  .  Pager *pPager
37540 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
37550 20 20 20 2f 2a 20 50 61 67 65 72 20 61 73 73 6f     /* Pager asso
37560 63 69 61 74 65 64 20 77 69 74 68 20 70 42 74 20  ciated with pBt 
37570 2a 2f 0a 20 20 69 6e 74 20 65 4e 65 77 3b 20 20  */.  int eNew;  
37580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37590 20 20 20 20 20 2f 2a 20 4e 65 77 20 6a 6f 75 72       /* New jour
375a0 6e 61 6c 20 6d 6f 64 65 20 2a 2f 0a 20 20 69 6e  nal mode */.  in
375b0 74 20 65 4f 6c 64 3b 20 20 20 20 20 20 20 20 20  t eOld;         
375c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
375d0 20 54 68 65 20 6f 6c 64 20 6a 6f 75 72 6e 61 6c   The old journal
375e0 20 6d 6f 64 65 20 2a 2f 0a 23 69 66 6e 64 65 66   mode */.#ifndef
375f0 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 41 4c   SQLITE_OMIT_WAL
37600 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  .  const char *z
37610 46 69 6c 65 6e 61 6d 65 3b 20 20 20 20 20 20 20  Filename;       
37620 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 64 61     /* Name of da
37630 74 61 62 61 73 65 20 66 69 6c 65 20 66 6f 72 20  tabase file for 
37640 70 50 61 67 65 72 20 2a 2f 0a 23 65 6e 64 69 66  pPager */.#endif
37650 0a 0a 20 20 70 4f 75 74 20 3d 20 6f 75 74 32 50  ..  pOut = out2P
37660 72 65 72 65 6c 65 61 73 65 28 70 2c 20 70 4f 70  rerelease(p, pOp
37670 29 3b 0a 20 20 65 4e 65 77 20 3d 20 70 4f 70 2d  );.  eNew = pOp-
37680 3e 70 33 3b 0a 20 20 61 73 73 65 72 74 28 20 65  >p3;.  assert( e
37690 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e  New==PAGER_JOURN
376a0 41 4c 4d 4f 44 45 5f 44 45 4c 45 54 45 20 0a 20  ALMODE_DELETE . 
376b0 20 20 20 20 20 20 7c 7c 20 65 4e 65 77 3d 3d 50        || eNew==P
376c0 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45  AGER_JOURNALMODE
376d0 5f 54 52 55 4e 43 41 54 45 20 0a 20 20 20 20 20  _TRUNCATE .     
376e0 20 20 7c 7c 20 65 4e 65 77 3d 3d 50 41 47 45 52    || eNew==PAGER
376f0 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 50 45 52  _JOURNALMODE_PER
37700 53 49 53 54 20 0a 20 20 20 20 20 20 20 7c 7c 20  SIST .       || 
37710 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52  eNew==PAGER_JOUR
37720 4e 41 4c 4d 4f 44 45 5f 4f 46 46 0a 20 20 20 20  NALMODE_OFF.    
37730 20 20 20 7c 7c 20 65 4e 65 77 3d 3d 50 41 47 45     || eNew==PAGE
37740 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 4d 45  R_JOURNALMODE_ME
37750 4d 4f 52 59 0a 20 20 20 20 20 20 20 7c 7c 20 65  MORY.       || e
37760 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e  New==PAGER_JOURN
37770 41 4c 4d 4f 44 45 5f 57 41 4c 0a 20 20 20 20 20  ALMODE_WAL.     
37780 20 20 7c 7c 20 65 4e 65 77 3d 3d 50 41 47 45 52    || eNew==PAGER
37790 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 51 55 45  _JOURNALMODE_QUE
377a0 52 59 0a 20 20 29 3b 0a 20 20 61 73 73 65 72 74  RY.  );.  assert
377b0 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20  ( pOp->p1>=0 && 
377c0 70 4f 70 2d 3e 70 31 3c 64 62 2d 3e 6e 44 62 20  pOp->p1<db->nDb 
377d0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e  );.  assert( p->
377e0 72 65 61 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 0a  readOnly==0 );..
377f0 20 20 70 42 74 20 3d 20 64 62 2d 3e 61 44 62 5b    pBt = db->aDb[
37800 70 4f 70 2d 3e 70 31 5d 2e 70 42 74 3b 0a 20 20  pOp->p1].pBt;.  
37810 70 50 61 67 65 72 20 3d 20 73 71 6c 69 74 65 33  pPager = sqlite3
37820 42 74 72 65 65 50 61 67 65 72 28 70 42 74 29 3b  BtreePager(pBt);
37830 0a 20 20 65 4f 6c 64 20 3d 20 73 71 6c 69 74 65  .  eOld = sqlite
37840 33 50 61 67 65 72 47 65 74 4a 6f 75 72 6e 61 6c  3PagerGetJournal
37850 4d 6f 64 65 28 70 50 61 67 65 72 29 3b 0a 20 20  Mode(pPager);.  
37860 69 66 28 20 65 4e 65 77 3d 3d 50 41 47 45 52 5f  if( eNew==PAGER_
37870 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 51 55 45 52  JOURNALMODE_QUER
37880 59 20 29 20 65 4e 65 77 20 3d 20 65 4f 6c 64 3b  Y ) eNew = eOld;
37890 0a 20 20 69 66 28 20 21 73 71 6c 69 74 65 33 50  .  if( !sqlite3P
378a0 61 67 65 72 4f 6b 54 6f 43 68 61 6e 67 65 4a 6f  agerOkToChangeJo
378b0 75 72 6e 61 6c 4d 6f 64 65 28 70 50 61 67 65 72  urnalMode(pPager
378c0 29 20 29 20 65 4e 65 77 20 3d 20 65 4f 6c 64 3b  ) ) eNew = eOld;
378d0 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
378e0 5f 4f 4d 49 54 5f 57 41 4c 0a 20 20 7a 46 69 6c  _OMIT_WAL.  zFil
378f0 65 6e 61 6d 65 20 3d 20 73 71 6c 69 74 65 33 50  ename = sqlite3P
37900 61 67 65 72 46 69 6c 65 6e 61 6d 65 28 70 50 61  agerFilename(pPa
37910 67 65 72 2c 20 31 29 3b 0a 0a 20 20 2f 2a 20 44  ger, 1);..  /* D
37920 6f 20 6e 6f 74 20 61 6c 6c 6f 77 20 61 20 74 72  o not allow a tr
37930 61 6e 73 69 74 69 6f 6e 20 74 6f 20 6a 6f 75 72  ansition to jour
37940 6e 61 6c 5f 6d 6f 64 65 3d 57 41 4c 20 66 6f 72  nal_mode=WAL for
37950 20 61 20 64 61 74 61 62 61 73 65 0a 20 20 2a 2a   a database.  **
37960 20 69 6e 20 74 65 6d 70 6f 72 61 72 79 20 73 74   in temporary st
37970 6f 72 61 67 65 20 6f 72 20 69 66 20 74 68 65 20  orage or if the 
37980 56 46 53 20 64 6f 65 73 20 6e 6f 74 20 73 75 70  VFS does not sup
37990 70 6f 72 74 20 73 68 61 72 65 64 20 6d 65 6d 6f  port shared memo
379a0 72 79 20 0a 20 20 2a 2f 0a 20 20 69 66 28 20 65  ry .  */.  if( e
379b0 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e  New==PAGER_JOURN
379c0 41 4c 4d 4f 44 45 5f 57 41 4c 0a 20 20 20 26 26  ALMODE_WAL.   &&
379d0 20 28 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33   (sqlite3Strlen3
379e0 30 28 7a 46 69 6c 65 6e 61 6d 65 29 3d 3d 30 20  0(zFilename)==0 
379f0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 65 6d            /* Tem
37a00 70 20 66 69 6c 65 20 2a 2f 0a 20 20 20 20 20 20  p file */.      
37a10 20 7c 7c 20 21 73 71 6c 69 74 65 33 50 61 67 65   || !sqlite3Page
37a20 72 57 61 6c 53 75 70 70 6f 72 74 65 64 28 70 50  rWalSupported(pP
37a30 61 67 65 72 29 29 20 20 20 2f 2a 20 4e 6f 20 73  ager))   /* No s
37a40 68 61 72 65 64 2d 6d 65 6d 6f 72 79 20 73 75 70  hared-memory sup
37a50 70 6f 72 74 20 2a 2f 0a 20 20 29 7b 0a 20 20 20  port */.  ){.   
37a60 20 65 4e 65 77 20 3d 20 65 4f 6c 64 3b 0a 20 20   eNew = eOld;.  
37a70 7d 0a 0a 20 20 69 66 28 20 28 65 4e 65 77 21 3d  }..  if( (eNew!=
37a80 65 4f 6c 64 29 0a 20 20 20 26 26 20 28 65 4f 6c  eOld).   && (eOl
37a90 64 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c  d==PAGER_JOURNAL
37aa0 4d 4f 44 45 5f 57 41 4c 20 7c 7c 20 65 4e 65 77  MODE_WAL || eNew
37ab0 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d  ==PAGER_JOURNALM
37ac0 4f 44 45 5f 57 41 4c 29 0a 20 20 29 7b 0a 20 20  ODE_WAL).  ){.  
37ad0 20 20 69 66 28 20 21 64 62 2d 3e 61 75 74 6f 43    if( !db->autoC
37ae0 6f 6d 6d 69 74 20 7c 7c 20 64 62 2d 3e 6e 56 64  ommit || db->nVd
37af0 62 65 52 65 61 64 3e 31 20 29 7b 0a 20 20 20 20  beRead>1 ){.    
37b00 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 45 52    rc = SQLITE_ER
37b10 52 4f 52 3b 0a 20 20 20 20 20 20 73 71 6c 69 74  ROR;.      sqlit
37b20 65 33 56 64 62 65 45 72 72 6f 72 28 70 2c 0a 20  e3VdbeError(p,. 
37b30 20 20 20 20 20 20 20 20 20 22 63 61 6e 6e 6f 74           "cannot
37b40 20 63 68 61 6e 67 65 20 25 73 20 77 61 6c 20 6d   change %s wal m
37b50 6f 64 65 20 66 72 6f 6d 20 77 69 74 68 69 6e 20  ode from within 
37b60 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 22 2c 0a  a transaction",.
37b70 20 20 20 20 20 20 20 20 20 20 28 65 4e 65 77 3d            (eNew=
37b80 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f  =PAGER_JOURNALMO
37b90 44 45 5f 57 41 4c 20 3f 20 22 69 6e 74 6f 22 20  DE_WAL ? "into" 
37ba0 3a 20 22 6f 75 74 20 6f 66 22 29 0a 20 20 20 20  : "out of").    
37bb0 20 20 29 3b 0a 20 20 20 20 20 20 67 6f 74 6f 20    );.      goto 
37bc0 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
37bd0 6f 72 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20  or;.    }else{. 
37be0 0a 20 20 20 20 20 20 69 66 28 20 65 4f 6c 64 3d  .      if( eOld=
37bf0 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f  =PAGER_JOURNALMO
37c00 44 45 5f 57 41 4c 20 29 7b 0a 20 20 20 20 20 20  DE_WAL ){.      
37c10 20 20 2f 2a 20 49 66 20 6c 65 61 76 69 6e 67 20    /* If leaving 
37c20 57 41 4c 20 6d 6f 64 65 2c 20 63 6c 6f 73 65 20  WAL mode, close 
37c30 74 68 65 20 6c 6f 67 20 66 69 6c 65 2e 20 49 66  the log file. If
37c40 20 73 75 63 63 65 73 73 66 75 6c 2c 20 74 68 65   successful, the
37c50 20 63 61 6c 6c 0a 20 20 20 20 20 20 20 20 2a 2a   call.        **
37c60 20 74 6f 20 50 61 67 65 72 43 6c 6f 73 65 57 61   to PagerCloseWa
37c70 6c 28 29 20 63 68 65 63 6b 70 6f 69 6e 74 73 20  l() checkpoints 
37c80 61 6e 64 20 64 65 6c 65 74 65 73 20 74 68 65 20  and deletes the 
37c90 77 72 69 74 65 2d 61 68 65 61 64 2d 6c 6f 67 20  write-ahead-log 
37ca0 0a 20 20 20 20 20 20 20 20 2a 2a 20 66 69 6c 65  .        ** file
37cb0 2e 20 41 6e 20 45 58 43 4c 55 53 49 56 45 20 6c  . An EXCLUSIVE l
37cc0 6f 63 6b 20 6d 61 79 20 73 74 69 6c 6c 20 62 65  ock may still be
37cd0 20 68 65 6c 64 20 6f 6e 20 74 68 65 20 64 61 74   held on the dat
37ce0 61 62 61 73 65 20 66 69 6c 65 20 0a 20 20 20 20  abase file .    
37cf0 20 20 20 20 2a 2a 20 61 66 74 65 72 20 61 20 73      ** after a s
37d00 75 63 63 65 73 73 66 75 6c 20 72 65 74 75 72 6e  uccessful return
37d10 2e 20 0a 20 20 20 20 20 20 20 20 2a 2f 0a 20 20  . .        */.  
37d20 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74        rc = sqlit
37d30 65 33 50 61 67 65 72 43 6c 6f 73 65 57 61 6c 28  e3PagerCloseWal(
37d40 70 50 61 67 65 72 2c 20 64 62 29 3b 0a 20 20 20  pPager, db);.   
37d50 20 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c       if( rc==SQL
37d60 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20  ITE_OK ){.      
37d70 20 20 20 20 73 71 6c 69 74 65 33 50 61 67 65 72      sqlite3Pager
37d80 53 65 74 4a 6f 75 72 6e 61 6c 4d 6f 64 65 28 70  SetJournalMode(p
37d90 50 61 67 65 72 2c 20 65 4e 65 77 29 3b 0a 20 20  Pager, eNew);.  
37da0 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 65        }.      }e
37db0 6c 73 65 20 69 66 28 20 65 4f 6c 64 3d 3d 50 41  lse if( eOld==PA
37dc0 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f  GER_JOURNALMODE_
37dd0 4d 45 4d 4f 52 59 20 29 7b 0a 20 20 20 20 20 20  MEMORY ){.      
37de0 20 20 2f 2a 20 43 61 6e 6e 6f 74 20 74 72 61 6e    /* Cannot tran
37df0 73 69 74 69 6f 6e 20 64 69 72 65 63 74 6c 79 20  sition directly 
37e00 66 72 6f 6d 20 4d 45 4d 4f 52 59 20 74 6f 20 57  from MEMORY to W
37e10 41 4c 2e 20 20 55 73 65 20 6d 6f 64 65 20 4f 46  AL.  Use mode OF
37e20 46 0a 20 20 20 20 20 20 20 20 2a 2a 20 61 73 20  F.        ** as 
37e30 61 6e 20 69 6e 74 65 72 6d 65 64 69 61 74 65 20  an intermediate 
37e40 2a 2f 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  */.        sqlit
37e50 65 33 50 61 67 65 72 53 65 74 4a 6f 75 72 6e 61  e3PagerSetJourna
37e60 6c 4d 6f 64 65 28 70 50 61 67 65 72 2c 20 50 41  lMode(pPager, PA
37e70 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f  GER_JOURNALMODE_
37e80 4f 46 46 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20  OFF);.      }.  
37e90 0a 20 20 20 20 20 20 2f 2a 20 4f 70 65 6e 20 61  .      /* Open a
37ea0 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 6f 6e 20   transaction on 
37eb0 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c  the database fil
37ec0 65 2e 20 52 65 67 61 72 64 6c 65 73 73 20 6f 66  e. Regardless of
37ed0 20 74 68 65 20 6a 6f 75 72 6e 61 6c 0a 20 20 20   the journal.   
37ee0 20 20 20 2a 2a 20 6d 6f 64 65 2c 20 74 68 69 73     ** mode, this
37ef0 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 61 6c 77   transaction alw
37f00 61 79 73 20 75 73 65 73 20 61 20 72 6f 6c 6c 62  ays uses a rollb
37f10 61 63 6b 20 6a 6f 75 72 6e 61 6c 2e 0a 20 20 20  ack journal..   
37f20 20 20 20 2a 2f 0a 20 20 20 20 20 20 61 73 73 65     */.      asse
37f30 72 74 28 20 73 71 6c 69 74 65 33 42 74 72 65 65  rt( sqlite3Btree
37f40 49 73 49 6e 54 72 61 6e 73 28 70 42 74 29 3d 3d  IsInTrans(pBt)==
37f50 30 20 29 3b 0a 20 20 20 20 20 20 69 66 28 20 72  0 );.      if( r
37f60 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a  c==SQLITE_OK ){.
37f70 20 20 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c          rc = sql
37f80 69 74 65 33 42 74 72 65 65 53 65 74 56 65 72 73  ite3BtreeSetVers
37f90 69 6f 6e 28 70 42 74 2c 20 28 65 4e 65 77 3d 3d  ion(pBt, (eNew==
37fa0 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44  PAGER_JOURNALMOD
37fb0 45 5f 57 41 4c 20 3f 20 32 20 3a 20 31 29 29 3b  E_WAL ? 2 : 1));
37fc0 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20  .      }.    }. 
37fd0 20 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 69 66 6e   }.#endif /* ifn
37fe0 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
37ff0 57 41 4c 20 2a 2f 0a 0a 20 20 69 66 28 20 72 63  WAL */..  if( rc
38000 20 29 20 65 4e 65 77 20 3d 20 65 4f 6c 64 3b 0a   ) eNew = eOld;.
38010 20 20 65 4e 65 77 20 3d 20 73 71 6c 69 74 65 33    eNew = sqlite3
38020 50 61 67 65 72 53 65 74 4a 6f 75 72 6e 61 6c 4d  PagerSetJournalM
38030 6f 64 65 28 70 50 61 67 65 72 2c 20 65 4e 65 77  ode(pPager, eNew
38040 29 3b 0a 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67  );..  pOut->flag
38050 73 20 3d 20 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f  s = MEM_Str|MEM_
38060 53 74 61 74 69 63 7c 4d 45 4d 5f 54 65 72 6d 3b  Static|MEM_Term;
38070 0a 20 20 70 4f 75 74 2d 3e 7a 20 3d 20 28 63 68  .  pOut->z = (ch
38080 61 72 20 2a 29 73 71 6c 69 74 65 33 4a 6f 75 72  ar *)sqlite3Jour
38090 6e 61 6c 4d 6f 64 65 6e 61 6d 65 28 65 4e 65 77  nalModename(eNew
380a0 29 3b 0a 20 20 70 4f 75 74 2d 3e 6e 20 3d 20 73  );.  pOut->n = s
380b0 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28 70  qlite3Strlen30(p
380c0 4f 75 74 2d 3e 7a 29 3b 0a 20 20 70 4f 75 74 2d  Out->z);.  pOut-
380d0 3e 65 6e 63 20 3d 20 53 51 4c 49 54 45 5f 55 54  >enc = SQLITE_UT
380e0 46 38 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62  F8;.  sqlite3Vdb
380f0 65 43 68 61 6e 67 65 45 6e 63 6f 64 69 6e 67 28  eChangeEncoding(
38100 70 4f 75 74 2c 20 65 6e 63 6f 64 69 6e 67 29 3b  pOut, encoding);
38110 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f  .  if( rc ) goto
38120 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
38130 72 6f 72 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 3b  ror;.  break;.};
38140 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54  .#endif /* SQLIT
38150 45 5f 4f 4d 49 54 5f 50 52 41 47 4d 41 20 2a 2f  E_OMIT_PRAGMA */
38160 0a 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53  ..#if !defined(S
38170 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 41 43 55 55  QLITE_OMIT_VACUU
38180 4d 29 20 26 26 20 21 64 65 66 69 6e 65 64 28 53  M) && !defined(S
38190 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 54 54 41 43  QLITE_OMIT_ATTAC
381a0 48 29 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 61  H)./* Opcode: Va
381b0 63 75 75 6d 20 50 31 20 50 32 20 2a 20 2a 20 2a  cuum P1 P2 * * *
381c0 0a 2a 2a 0a 2a 2a 20 56 61 63 75 75 6d 20 74 68  .**.** Vacuum th
381d0 65 20 65 6e 74 69 72 65 20 64 61 74 61 62 61 73  e entire databas
381e0 65 20 50 31 2e 20 20 50 31 20 69 73 20 30 20 66  e P1.  P1 is 0 f
381f0 6f 72 20 22 6d 61 69 6e 22 2c 20 61 6e 64 20 32  or "main", and 2
38200 20 6f 72 20 6d 6f 72 65 0a 2a 2a 20 66 6f 72 20   or more.** for 
38210 61 6e 20 61 74 74 61 63 68 65 64 20 64 61 74 61  an attached data
38220 62 61 73 65 2e 20 20 54 68 65 20 22 74 65 6d 70  base.  The "temp
38230 22 20 64 61 74 61 62 61 73 65 20 6d 61 79 20 6e  " database may n
38240 6f 74 20 62 65 20 76 61 63 75 75 6d 65 64 2e 0a  ot be vacuumed..
38250 2a 2a 0a 2a 2a 20 49 66 20 50 32 20 69 73 20 6e  **.** If P2 is n
38260 6f 74 20 7a 65 72 6f 2c 20 74 68 65 6e 20 69 74  ot zero, then it
38270 20 69 73 20 61 20 72 65 67 69 73 74 65 72 20 68   is a register h
38280 6f 6c 64 69 6e 67 20 61 20 73 74 72 69 6e 67 20  olding a string 
38290 77 68 69 63 68 20 69 73 0a 2a 2a 20 74 68 65 20  which is.** the 
382a0 66 69 6c 65 20 69 6e 74 6f 20 77 68 69 63 68 20  file into which 
382b0 74 68 65 20 72 65 73 75 6c 74 20 6f 66 20 76 61  the result of va
382c0 63 75 75 6d 20 73 68 6f 75 6c 64 20 62 65 20 77  cuum should be w
382d0 72 69 74 74 65 6e 2e 20 20 57 68 65 6e 0a 2a 2a  ritten.  When.**
382e0 20 50 32 20 69 73 20 7a 65 72 6f 2c 20 74 68 65   P2 is zero, the
382f0 20 76 61 63 75 75 6d 20 6f 76 65 72 77 72 69 74   vacuum overwrit
38300 65 73 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 20  es the original 
38310 64 61 74 61 62 61 73 65 2e 0a 2a 2f 0a 63 61 73  database..*/.cas
38320 65 20 4f 50 5f 56 61 63 75 75 6d 3a 20 7b 0a 20  e OP_Vacuum: