/ Hex Artifact Content
Login

Artifact a81238e51e05e34b14935054cd5115299c05d32c94ce0c128e99b44f99b78ba8:


0000: 2f 2a 0a 2a 2a 20 32 30 30 31 20 53 65 70 74 65  /*.** 2001 Septe
0010: 6d 62 65 72 20 31 35 0a 2a 2a 0a 2a 2a 20 54 68  mber 15.**.** Th
0020: 65 20 61 75 74 68 6f 72 20 64 69 73 63 6c 61 69  e author disclai
0030: 6d 73 20 63 6f 70 79 72 69 67 68 74 20 74 6f 20  ms copyright to 
0040: 74 68 69 73 20 73 6f 75 72 63 65 20 63 6f 64 65  this source code
0050: 2e 20 20 49 6e 20 70 6c 61 63 65 20 6f 66 0a 2a  .  In place of.*
0060: 2a 20 61 20 6c 65 67 61 6c 20 6e 6f 74 69 63 65  * a legal notice
0070: 2c 20 68 65 72 65 20 69 73 20 61 20 62 6c 65 73  , here is a bles
0080: 73 69 6e 67 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 4d  sing:.**.**    M
0090: 61 79 20 79 6f 75 20 64 6f 20 67 6f 6f 64 20 61  ay you do good a
00a0: 6e 64 20 6e 6f 74 20 65 76 69 6c 2e 0a 2a 2a 20  nd not evil..** 
00b0: 20 20 20 4d 61 79 20 79 6f 75 20 66 69 6e 64 20     May you find 
00c0: 66 6f 72 67 69 76 65 6e 65 73 73 20 66 6f 72 20  forgiveness for 
00d0: 79 6f 75 72 73 65 6c 66 20 61 6e 64 20 66 6f 72  yourself and for
00e0: 67 69 76 65 20 6f 74 68 65 72 73 2e 0a 2a 2a 20  give others..** 
00f0: 20 20 20 4d 61 79 20 79 6f 75 20 73 68 61 72 65     May you share
0100: 20 66 72 65 65 6c 79 2c 20 6e 65 76 65 72 20 74   freely, never t
0110: 61 6b 69 6e 67 20 6d 6f 72 65 20 74 68 61 6e 20  aking more than 
0120: 79 6f 75 20 67 69 76 65 2e 0a 2a 2a 0a 2a 2a 2a  you give..**.***
0130: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0140: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0150: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0160: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0170: 2a 2a 2a 2a 2a 2a 0a 2a 2a 20 54 68 65 20 63 6f  ******.** The co
0180: 64 65 20 69 6e 20 74 68 69 73 20 66 69 6c 65 20  de in this file 
0190: 69 6d 70 6c 65 6d 65 6e 74 73 20 74 68 65 20 66  implements the f
01a0: 75 6e 63 74 69 6f 6e 20 74 68 61 74 20 72 75 6e  unction that run
01b0: 73 20 74 68 65 0a 2a 2a 20 62 79 74 65 63 6f 64  s the.** bytecod
01c0: 65 20 6f 66 20 61 20 70 72 65 70 61 72 65 64 20  e of a prepared 
01d0: 73 74 61 74 65 6d 65 6e 74 2e 0a 2a 2a 0a 2a 2a  statement..**.**
01e0: 20 56 61 72 69 6f 75 73 20 73 63 72 69 70 74 73   Various scripts
01f0: 20 73 63 61 6e 20 74 68 69 73 20 73 6f 75 72 63   scan this sourc
0200: 65 20 66 69 6c 65 20 69 6e 20 6f 72 64 65 72 20  e file in order 
0210: 74 6f 20 67 65 6e 65 72 61 74 65 20 48 54 4d 4c  to generate HTML
0220: 0a 2a 2a 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f  .** documentatio
0230: 6e 2c 20 68 65 61 64 65 72 73 20 66 69 6c 65 73  n, headers files
0240: 2c 20 6f 72 20 6f 74 68 65 72 20 64 65 72 69 76  , or other deriv
0250: 65 64 20 66 69 6c 65 73 2e 20 20 54 68 65 20 66  ed files.  The f
0260: 6f 72 6d 61 74 74 69 6e 67 0a 2a 2a 20 6f 66 20  ormatting.** of 
0270: 74 68 65 20 63 6f 64 65 20 69 6e 20 74 68 69 73  the code in this
0280: 20 66 69 6c 65 20 69 73 2c 20 74 68 65 72 65 66   file is, theref
0290: 6f 72 65 2c 20 69 6d 70 6f 72 74 61 6e 74 2e 20  ore, important. 
02a0: 20 53 65 65 20 6f 74 68 65 72 20 63 6f 6d 6d 65   See other comme
02b0: 6e 74 73 0a 2a 2a 20 69 6e 20 74 68 69 73 20 66  nts.** in this f
02c0: 69 6c 65 20 66 6f 72 20 64 65 74 61 69 6c 73 2e  ile for details.
02d0: 20 20 49 66 20 69 6e 20 64 6f 75 62 74 2c 20 64    If in doubt, d
02e0: 6f 20 6e 6f 74 20 64 65 76 69 61 74 65 20 66 72  o not deviate fr
02f0: 6f 6d 20 65 78 69 73 74 69 6e 67 0a 2a 2a 20 63  om existing.** c
0300: 6f 6d 6d 65 6e 74 69 6e 67 20 61 6e 64 20 69 6e  ommenting and in
0310: 64 65 6e 74 61 74 69 6f 6e 20 70 72 61 63 74 69  dentation practi
0320: 63 65 73 20 77 68 65 6e 20 63 68 61 6e 67 69 6e  ces when changin
0330: 67 20 6f 72 20 61 64 64 69 6e 67 20 63 6f 64 65  g or adding code
0340: 2e 0a 2a 2f 0a 23 69 6e 63 6c 75 64 65 20 22 73  ..*/.#include "s
0350: 71 6c 69 74 65 49 6e 74 2e 68 22 0a 23 69 6e 63  qliteInt.h".#inc
0360: 6c 75 64 65 20 22 76 64 62 65 49 6e 74 2e 68 22  lude "vdbeInt.h"
0370: 0a 0a 2f 2a 0a 2a 2a 20 49 6e 76 6f 6b 65 20 74  ../*.** Invoke t
0380: 68 69 73 20 6d 61 63 72 6f 20 6f 6e 20 6d 65 6d  his macro on mem
0390: 6f 72 79 20 63 65 6c 6c 73 20 6a 75 73 74 20 70  ory cells just p
03a0: 72 69 6f 72 20 74 6f 20 63 68 61 6e 67 69 6e 67  rior to changing
03b0: 20 74 68 65 0a 2a 2a 20 76 61 6c 75 65 20 6f 66   the.** value of
03c0: 20 74 68 65 20 63 65 6c 6c 2e 20 20 54 68 69 73   the cell.  This
03d0: 20 6d 61 63 72 6f 20 76 65 72 69 66 69 65 73 20   macro verifies 
03e0: 74 68 61 74 20 73 68 61 6c 6c 6f 77 20 63 6f 70  that shallow cop
03f0: 69 65 73 20 61 72 65 0a 2a 2a 20 6e 6f 74 20 6d  ies are.** not m
0400: 69 73 75 73 65 64 2e 20 20 41 20 73 68 61 6c 6c  isused.  A shall
0410: 6f 77 20 63 6f 70 79 20 6f 66 20 61 20 73 74 72  ow copy of a str
0420: 69 6e 67 20 6f 72 20 62 6c 6f 62 20 6a 75 73 74  ing or blob just
0430: 20 63 6f 70 69 65 73 20 61 0a 2a 2a 20 70 6f 69   copies a.** poi
0440: 6e 74 65 72 20 74 6f 20 74 68 65 20 73 74 72 69  nter to the stri
0450: 6e 67 20 6f 72 20 62 6c 6f 62 2c 20 6e 6f 74 20  ng or blob, not 
0460: 74 68 65 20 63 6f 6e 74 65 6e 74 2e 20 20 49 66  the content.  If
0470: 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 0a 2a 2a   the original.**
0480: 20 69 73 20 63 68 61 6e 67 65 64 20 77 68 69 6c   is changed whil
0490: 65 20 74 68 65 20 63 6f 70 79 20 69 73 20 73 74  e the copy is st
04a0: 69 6c 6c 20 69 6e 20 75 73 65 2c 20 74 68 65 20  ill in use, the 
04b0: 73 74 72 69 6e 67 20 6f 72 20 62 6c 6f 62 20 6d  string or blob m
04c0: 69 67 68 74 0a 2a 2a 20 62 65 20 63 68 61 6e 67  ight.** be chang
04d0: 65 64 20 6f 75 74 20 66 72 6f 6d 20 75 6e 64 65  ed out from unde
04e0: 72 20 74 68 65 20 63 6f 70 79 2e 20 20 54 68 69  r the copy.  Thi
04f0: 73 20 6d 61 63 72 6f 20 76 65 72 69 66 69 65 73  s macro verifies
0500: 20 74 68 61 74 20 6e 6f 74 68 69 6e 67 0a 2a 2a   that nothing.**
0510: 20 6c 69 6b 65 20 74 68 61 74 20 65 76 65 72 20   like that ever 
0520: 68 61 70 70 65 6e 73 2e 0a 2a 2f 0a 23 69 66 64  happens..*/.#ifd
0530: 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a  ef SQLITE_DEBUG.
0540: 23 20 64 65 66 69 6e 65 20 6d 65 6d 41 62 6f 75  # define memAbou
0550: 74 54 6f 43 68 61 6e 67 65 28 50 2c 4d 29 20 73  tToChange(P,M) s
0560: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 41 62 6f  qlite3VdbeMemAbo
0570: 75 74 54 6f 43 68 61 6e 67 65 28 50 2c 4d 29 0a  utToChange(P,M).
0580: 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 6d  #else.# define m
0590: 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28  emAboutToChange(
05a0: 50 2c 4d 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  P,M).#endif../*.
05b0: 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  ** The following
05c0: 20 67 6c 6f 62 61 6c 20 76 61 72 69 61 62 6c 65   global variable
05d0: 20 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 20   is incremented 
05e0: 65 76 65 72 79 20 74 69 6d 65 20 61 20 63 75 72  every time a cur
05f0: 73 6f 72 0a 2a 2a 20 6d 6f 76 65 73 2c 20 65 69  sor.** moves, ei
0600: 74 68 65 72 20 62 79 20 74 68 65 20 4f 50 5f 53  ther by the OP_S
0610: 65 65 6b 58 58 2c 20 4f 50 5f 4e 65 78 74 2c 20  eekXX, OP_Next, 
0620: 6f 72 20 4f 50 5f 50 72 65 76 20 6f 70 63 6f 64  or OP_Prev opcod
0630: 65 73 2e 20 20 54 68 65 20 74 65 73 74 0a 2a 2a  es.  The test.**
0640: 20 70 72 6f 63 65 64 75 72 65 73 20 75 73 65 20   procedures use 
0650: 74 68 69 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  this information
0660: 20 74 6f 20 6d 61 6b 65 20 73 75 72 65 20 74 68   to make sure th
0670: 61 74 20 69 6e 64 69 63 65 73 20 61 72 65 0a 2a  at indices are.*
0680: 2a 20 77 6f 72 6b 69 6e 67 20 63 6f 72 72 65 63  * working correc
0690: 74 6c 79 2e 20 20 54 68 69 73 20 76 61 72 69 61  tly.  This varia
06a0: 62 6c 65 20 68 61 73 20 6e 6f 20 66 75 6e 63 74  ble has no funct
06b0: 69 6f 6e 20 6f 74 68 65 72 20 74 68 61 6e 20 74  ion other than t
06c0: 6f 0a 2a 2a 20 68 65 6c 70 20 76 65 72 69 66 79  o.** help verify
06d0: 20 74 68 65 20 63 6f 72 72 65 63 74 20 6f 70 65   the correct ope
06e0: 72 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 6c 69  ration of the li
06f0: 62 72 61 72 79 2e 0a 2a 2f 0a 23 69 66 64 65 66  brary..*/.#ifdef
0700: 20 53 51 4c 49 54 45 5f 54 45 53 54 0a 69 6e 74   SQLITE_TEST.int
0710: 20 73 71 6c 69 74 65 33 5f 73 65 61 72 63 68 5f   sqlite3_search_
0720: 63 6f 75 6e 74 20 3d 20 30 3b 0a 23 65 6e 64 69  count = 0;.#endi
0730: 66 0a 0a 2f 2a 0a 2a 2a 20 57 68 65 6e 20 74 68  f../*.** When th
0740: 69 73 20 67 6c 6f 62 61 6c 20 76 61 72 69 61 62  is global variab
0750: 6c 65 20 69 73 20 70 6f 73 69 74 69 76 65 2c 20  le is positive, 
0760: 69 74 20 67 65 74 73 20 64 65 63 72 65 6d 65 6e  it gets decremen
0770: 74 65 64 20 6f 6e 63 65 20 62 65 66 6f 72 65 0a  ted once before.
0780: 2a 2a 20 65 61 63 68 20 69 6e 73 74 72 75 63 74  ** each instruct
0790: 69 6f 6e 20 69 6e 20 74 68 65 20 56 44 42 45 2e  ion in the VDBE.
07a0: 20 20 57 68 65 6e 20 69 74 20 72 65 61 63 68 65    When it reache
07b0: 73 20 7a 65 72 6f 2c 20 74 68 65 20 75 31 2e 69  s zero, the u1.i
07c0: 73 49 6e 74 65 72 72 75 70 74 65 64 0a 2a 2a 20  sInterrupted.** 
07d0: 66 69 65 6c 64 20 6f 66 20 74 68 65 20 73 71 6c  field of the sql
07e0: 69 74 65 33 20 73 74 72 75 63 74 75 72 65 20 69  ite3 structure i
07f0: 73 20 73 65 74 20 69 6e 20 6f 72 64 65 72 20 74  s set in order t
0800: 6f 20 73 69 6d 75 6c 61 74 65 20 61 6e 20 69 6e  o simulate an in
0810: 74 65 72 72 75 70 74 2e 0a 2a 2a 0a 2a 2a 20 54  terrupt..**.** T
0820: 68 69 73 20 66 61 63 69 6c 69 74 79 20 69 73 20  his facility is 
0830: 75 73 65 64 20 66 6f 72 20 74 65 73 74 69 6e 67  used for testing
0840: 20 70 75 72 70 6f 73 65 73 20 6f 6e 6c 79 2e 20   purposes only. 
0850: 20 49 74 20 64 6f 65 73 20 6e 6f 74 20 66 75 6e   It does not fun
0860: 63 74 69 6f 6e 0a 2a 2a 20 69 6e 20 61 6e 20 6f  ction.** in an o
0870: 72 64 69 6e 61 72 79 20 62 75 69 6c 64 2e 0a 2a  rdinary build..*
0880: 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
0890: 54 45 53 54 0a 69 6e 74 20 73 71 6c 69 74 65 33  TEST.int sqlite3
08a0: 5f 69 6e 74 65 72 72 75 70 74 5f 63 6f 75 6e 74  _interrupt_count
08b0: 20 3d 20 30 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a   = 0;.#endif../*
08c0: 0a 2a 2a 20 54 68 65 20 6e 65 78 74 20 67 6c 6f  .** The next glo
08d0: 62 61 6c 20 76 61 72 69 61 62 6c 65 20 69 73 20  bal variable is 
08e0: 69 6e 63 72 65 6d 65 6e 74 65 64 20 65 61 63 68  incremented each
08f0: 20 74 79 70 65 20 74 68 65 20 4f 50 5f 53 6f 72   type the OP_Sor
0900: 74 20 6f 70 63 6f 64 65 0a 2a 2a 20 69 73 20 65  t opcode.** is e
0910: 78 65 63 75 74 65 64 2e 20 20 54 68 65 20 74 65  xecuted.  The te
0920: 73 74 20 70 72 6f 63 65 64 75 72 65 73 20 75 73  st procedures us
0930: 65 20 74 68 69 73 20 69 6e 66 6f 72 6d 61 74 69  e this informati
0940: 6f 6e 20 74 6f 20 6d 61 6b 65 20 73 75 72 65 20  on to make sure 
0950: 74 68 61 74 0a 2a 2a 20 73 6f 72 74 69 6e 67 20  that.** sorting 
0960: 69 73 20 6f 63 63 75 72 72 69 6e 67 20 6f 72 20  is occurring or 
0970: 6e 6f 74 20 6f 63 63 75 72 72 69 6e 67 20 61 74  not occurring at
0980: 20 61 70 70 72 6f 70 72 69 61 74 65 20 74 69 6d   appropriate tim
0990: 65 73 2e 20 20 20 54 68 69 73 20 76 61 72 69 61  es.   This varia
09a0: 62 6c 65 0a 2a 2a 20 68 61 73 20 6e 6f 20 66 75  ble.** has no fu
09b0: 6e 63 74 69 6f 6e 20 6f 74 68 65 72 20 74 68 61  nction other tha
09c0: 6e 20 74 6f 20 68 65 6c 70 20 76 65 72 69 66 79  n to help verify
09d0: 20 74 68 65 20 63 6f 72 72 65 63 74 20 6f 70 65   the correct ope
09e0: 72 61 74 69 6f 6e 20 6f 66 20 74 68 65 0a 2a 2a  ration of the.**
09f0: 20 6c 69 62 72 61 72 79 2e 0a 2a 2f 0a 23 69 66   library..*/.#if
0a00: 64 65 66 20 53 51 4c 49 54 45 5f 54 45 53 54 0a  def SQLITE_TEST.
0a10: 69 6e 74 20 73 71 6c 69 74 65 33 5f 73 6f 72 74  int sqlite3_sort
0a20: 5f 63 6f 75 6e 74 20 3d 20 30 3b 0a 23 65 6e 64  _count = 0;.#end
0a30: 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 6e 65  if../*.** The ne
0a40: 78 74 20 67 6c 6f 62 61 6c 20 76 61 72 69 61 62  xt global variab
0a50: 6c 65 20 72 65 63 6f 72 64 73 20 74 68 65 20 73  le records the s
0a60: 69 7a 65 20 6f 66 20 74 68 65 20 6c 61 72 67 65  ize of the large
0a70: 73 74 20 4d 45 4d 5f 42 6c 6f 62 0a 2a 2a 20 6f  st MEM_Blob.** o
0a80: 72 20 4d 45 4d 5f 53 74 72 20 74 68 61 74 20 68  r MEM_Str that h
0a90: 61 73 20 62 65 65 6e 20 75 73 65 64 20 62 79 20  as been used by 
0aa0: 61 20 56 44 42 45 20 6f 70 63 6f 64 65 2e 20 20  a VDBE opcode.  
0ab0: 54 68 65 20 74 65 73 74 20 70 72 6f 63 65 64 75  The test procedu
0ac0: 72 65 73 0a 2a 2a 20 75 73 65 20 74 68 69 73 20  res.** use this 
0ad0: 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 74 6f 20 6d  information to m
0ae0: 61 6b 65 20 73 75 72 65 20 74 68 61 74 20 74 68  ake sure that th
0af0: 65 20 7a 65 72 6f 2d 62 6c 6f 62 20 66 75 6e 63  e zero-blob func
0b00: 74 69 6f 6e 61 6c 69 74 79 0a 2a 2a 20 69 73 20  tionality.** is 
0b10: 77 6f 72 6b 69 6e 67 20 63 6f 72 72 65 63 74 6c  working correctl
0b20: 79 2e 20 20 20 54 68 69 73 20 76 61 72 69 61 62  y.   This variab
0b30: 6c 65 20 68 61 73 20 6e 6f 20 66 75 6e 63 74 69  le has no functi
0b40: 6f 6e 20 6f 74 68 65 72 20 74 68 61 6e 20 74 6f  on other than to
0b50: 0a 2a 2a 20 68 65 6c 70 20 76 65 72 69 66 79 20  .** help verify 
0b60: 74 68 65 20 63 6f 72 72 65 63 74 20 6f 70 65 72  the correct oper
0b70: 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 6c 69 62  ation of the lib
0b80: 72 61 72 79 2e 0a 2a 2f 0a 23 69 66 64 65 66 20  rary..*/.#ifdef 
0b90: 53 51 4c 49 54 45 5f 54 45 53 54 0a 69 6e 74 20  SQLITE_TEST.int 
0ba0: 73 71 6c 69 74 65 33 5f 6d 61 78 5f 62 6c 6f 62  sqlite3_max_blob
0bb0: 73 69 7a 65 20 3d 20 30 3b 0a 73 74 61 74 69 63  size = 0;.static
0bc0: 20 76 6f 69 64 20 75 70 64 61 74 65 4d 61 78 42   void updateMaxB
0bd0: 6c 6f 62 73 69 7a 65 28 4d 65 6d 20 2a 70 29 7b  lobsize(Mem *p){
0be0: 0a 20 20 69 66 28 20 28 70 2d 3e 66 6c 61 67 73  .  if( (p->flags
0bf0: 20 26 20 28 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f   & (MEM_Str|MEM_
0c00: 42 6c 6f 62 29 29 21 3d 30 20 26 26 20 70 2d 3e  Blob))!=0 && p->
0c10: 6e 3e 73 71 6c 69 74 65 33 5f 6d 61 78 5f 62 6c  n>sqlite3_max_bl
0c20: 6f 62 73 69 7a 65 20 29 7b 0a 20 20 20 20 73 71  obsize ){.    sq
0c30: 6c 69 74 65 33 5f 6d 61 78 5f 62 6c 6f 62 73 69  lite3_max_blobsi
0c40: 7a 65 20 3d 20 70 2d 3e 6e 3b 0a 20 20 7d 0a 7d  ze = p->n;.  }.}
0c50: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54  .#endif../*.** T
0c60: 68 69 73 20 6d 61 63 72 6f 20 65 76 61 6c 75 61  his macro evalua
0c70: 74 65 73 20 74 6f 20 74 72 75 65 20 69 66 20 65  tes to true if e
0c80: 69 74 68 65 72 20 74 68 65 20 75 70 64 61 74 65  ither the update
0c90: 20 68 6f 6f 6b 20 6f 72 20 74 68 65 20 70 72 65   hook or the pre
0ca0: 75 70 64 61 74 65 0a 2a 2a 20 68 6f 6f 6b 20 61  update.** hook a
0cb0: 72 65 20 65 6e 61 62 6c 65 64 20 66 6f 72 20 64  re enabled for d
0cc0: 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 20  atabase connect 
0cd0: 44 42 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51  DB..*/.#ifdef SQ
0ce0: 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 50 52 45 55  LITE_ENABLE_PREU
0cf0: 50 44 41 54 45 5f 48 4f 4f 4b 0a 23 20 64 65 66  PDATE_HOOK.# def
0d00: 69 6e 65 20 48 41 53 5f 55 50 44 41 54 45 5f 48  ine HAS_UPDATE_H
0d10: 4f 4f 4b 28 44 42 29 20 28 28 44 42 29 2d 3e 78  OOK(DB) ((DB)->x
0d20: 50 72 65 55 70 64 61 74 65 43 61 6c 6c 62 61 63  PreUpdateCallbac
0d30: 6b 7c 7c 28 44 42 29 2d 3e 78 55 70 64 61 74 65  k||(DB)->xUpdate
0d40: 43 61 6c 6c 62 61 63 6b 29 0a 23 65 6c 73 65 0a  Callback).#else.
0d50: 23 20 64 65 66 69 6e 65 20 48 41 53 5f 55 50 44  # define HAS_UPD
0d60: 41 54 45 5f 48 4f 4f 4b 28 44 42 29 20 28 28 44  ATE_HOOK(DB) ((D
0d70: 42 29 2d 3e 78 55 70 64 61 74 65 43 61 6c 6c 62  B)->xUpdateCallb
0d80: 61 63 6b 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  ack).#endif../*.
0d90: 2a 2a 20 54 68 65 20 6e 65 78 74 20 67 6c 6f 62  ** The next glob
0da0: 61 6c 20 76 61 72 69 61 62 6c 65 20 69 73 20 69  al variable is i
0db0: 6e 63 72 65 6d 65 6e 74 65 64 20 65 61 63 68 20  ncremented each 
0dc0: 74 69 6d 65 20 74 68 65 20 4f 50 5f 46 6f 75 6e  time the OP_Foun
0dd0: 64 20 6f 70 63 6f 64 65 0a 2a 2a 20 69 73 20 65  d opcode.** is e
0de0: 78 65 63 75 74 65 64 2e 20 54 68 69 73 20 69 73  xecuted. This is
0df0: 20 75 73 65 64 20 74 6f 20 74 65 73 74 20 77 68   used to test wh
0e00: 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 74 68 65  ether or not the
0e10: 20 66 6f 72 65 69 67 6e 20 6b 65 79 0a 2a 2a 20   foreign key.** 
0e20: 6f 70 65 72 61 74 69 6f 6e 20 69 6d 70 6c 65 6d  operation implem
0e30: 65 6e 74 65 64 20 75 73 69 6e 67 20 4f 50 5f 46  ented using OP_F
0e40: 6b 49 73 5a 65 72 6f 20 69 73 20 77 6f 72 6b 69  kIsZero is worki
0e50: 6e 67 2e 20 54 68 69 73 20 76 61 72 69 61 62 6c  ng. This variabl
0e60: 65 0a 2a 2a 20 68 61 73 20 6e 6f 20 66 75 6e 63  e.** has no func
0e70: 74 69 6f 6e 20 6f 74 68 65 72 20 74 68 61 6e 20  tion other than 
0e80: 74 6f 20 68 65 6c 70 20 76 65 72 69 66 79 20 74  to help verify t
0e90: 68 65 20 63 6f 72 72 65 63 74 20 6f 70 65 72 61  he correct opera
0ea0: 74 69 6f 6e 20 6f 66 20 74 68 65 0a 2a 2a 20 6c  tion of the.** l
0eb0: 69 62 72 61 72 79 2e 0a 2a 2f 0a 23 69 66 64 65  ibrary..*/.#ifde
0ec0: 66 20 53 51 4c 49 54 45 5f 54 45 53 54 0a 69 6e  f SQLITE_TEST.in
0ed0: 74 20 73 71 6c 69 74 65 33 5f 66 6f 75 6e 64 5f  t sqlite3_found_
0ee0: 63 6f 75 6e 74 20 3d 20 30 3b 0a 23 65 6e 64 69  count = 0;.#endi
0ef0: 66 0a 0a 2f 2a 0a 2a 2a 20 54 65 73 74 20 61 20  f../*.** Test a 
0f00: 72 65 67 69 73 74 65 72 20 74 6f 20 73 65 65 20  register to see 
0f10: 69 66 20 69 74 20 65 78 63 65 65 64 73 20 74 68  if it exceeds th
0f20: 65 20 63 75 72 72 65 6e 74 20 6d 61 78 69 6d 75  e current maximu
0f30: 6d 20 62 6c 6f 62 20 73 69 7a 65 2e 0a 2a 2a 20  m blob size..** 
0f40: 49 66 20 69 74 20 64 6f 65 73 2c 20 72 65 63 6f  If it does, reco
0f50: 72 64 20 74 68 65 20 6e 65 77 20 6d 61 78 69 6d  rd the new maxim
0f60: 75 6d 20 62 6c 6f 62 20 73 69 7a 65 2e 0a 2a 2f  um blob size..*/
0f70: 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c  .#if defined(SQL
0f80: 49 54 45 5f 54 45 53 54 29 20 26 26 20 21 64 65  ITE_TEST) && !de
0f90: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 55 4e 54  fined(SQLITE_UNT
0fa0: 45 53 54 41 42 4c 45 29 0a 23 20 64 65 66 69 6e  ESTABLE).# defin
0fb0: 65 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f  e UPDATE_MAX_BLO
0fc0: 42 53 49 5a 45 28 50 29 20 20 75 70 64 61 74 65  BSIZE(P)  update
0fd0: 4d 61 78 42 6c 6f 62 73 69 7a 65 28 50 29 0a 23  MaxBlobsize(P).#
0fe0: 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 55 50  else.# define UP
0ff0: 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a  DATE_MAX_BLOBSIZ
1000: 45 28 50 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  E(P).#endif../*.
1010: 2a 2a 20 49 6e 76 6f 6b 65 20 74 68 65 20 56 44  ** Invoke the VD
1020: 42 45 20 63 6f 76 65 72 61 67 65 20 63 61 6c 6c  BE coverage call
1030: 62 61 63 6b 2c 20 69 66 20 74 68 61 74 20 63 61  back, if that ca
1040: 6c 6c 62 61 63 6b 20 69 73 20 64 65 66 69 6e 65  llback is define
1050: 64 2e 20 20 54 68 69 73 0a 2a 2a 20 66 65 61 74  d.  This.** feat
1060: 75 72 65 20 69 73 20 75 73 65 64 20 66 6f 72 20  ure is used for 
1070: 74 65 73 74 20 73 75 69 74 65 20 76 61 6c 69 64  test suite valid
1080: 61 74 69 6f 6e 20 6f 6e 6c 79 20 61 6e 64 20 64  ation only and d
1090: 6f 65 73 20 6e 6f 74 20 61 70 70 65 61 72 20 61  oes not appear a
10a0: 6e 0a 2a 2a 20 70 72 6f 64 75 63 74 69 6f 6e 20  n.** production 
10b0: 62 75 69 6c 64 73 2e 0a 2a 2a 0a 2a 2a 20 4d 20  builds..**.** M 
10c0: 69 73 20 74 68 65 20 74 79 70 65 20 6f 66 20 62  is the type of b
10d0: 72 61 6e 63 68 2e 20 20 49 20 69 73 20 74 68 65  ranch.  I is the
10e0: 20 64 69 72 65 63 74 69 6f 6e 20 74 61 6b 65 6e   direction taken
10f0: 20 66 6f 72 20 74 68 69 73 20 69 6e 73 74 61 6e   for this instan
1100: 63 65 20 6f 66 0a 2a 2a 20 74 68 65 20 62 72 61  ce of.** the bra
1110: 6e 63 68 2e 0a 2a 2a 0a 2a 2a 20 20 20 4d 3a 20  nch..**.**   M: 
1120: 32 20 2d 20 74 77 6f 2d 77 61 79 20 62 72 61 6e  2 - two-way bran
1130: 63 68 20 28 49 3d 30 3a 20 66 61 6c 6c 2d 74 68  ch (I=0: fall-th
1140: 72 75 20 20 20 31 3a 20 6a 75 6d 70 20 20 20 20  ru   1: jump    
1150: 20 20 20 20 20 20 20 20 20 20 20 20 29 0a 2a 2a              ).**
1160: 20 20 20 20 20 20 33 20 2d 20 74 77 6f 2d 77 61        3 - two-wa
1170: 79 20 2b 20 4e 55 4c 4c 20 28 49 3d 30 3a 20 66  y + NULL (I=0: f
1180: 61 6c 6c 2d 74 68 72 75 20 20 20 31 3a 20 6a 75  all-thru   1: ju
1190: 6d 70 20 20 20 20 20 20 32 3a 20 4e 55 4c 4c 20  mp      2: NULL 
11a0: 20 20 29 0a 2a 2a 20 20 20 20 20 20 34 20 2d 20    ).**      4 - 
11b0: 4f 50 5f 4a 75 6d 70 20 20 20 20 20 20 20 20 28  OP_Jump        (
11c0: 49 3d 30 3a 20 6a 75 6d 70 20 70 31 20 20 20 20  I=0: jump p1    
11d0: 20 31 3a 20 6a 75 6d 70 20 70 32 20 20 20 32 3a   1: jump p2   2:
11e0: 20 6a 75 6d 70 20 70 33 29 0a 2a 2a 0a 2a 2a 20   jump p3).**.** 
11f0: 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20  In other words, 
1200: 69 66 20 4d 20 69 73 20 32 2c 20 74 68 65 6e 20  if M is 2, then 
1210: 49 20 69 73 20 65 69 74 68 65 72 20 30 20 28 66  I is either 0 (f
1220: 6f 72 20 66 61 6c 6c 2d 74 68 72 6f 75 67 68 29  or fall-through)
1230: 20 6f 72 0a 2a 2a 20 31 20 28 66 6f 72 20 77 68   or.** 1 (for wh
1240: 65 6e 20 74 68 65 20 62 72 61 6e 63 68 20 69 73  en the branch is
1250: 20 74 61 6b 65 6e 29 2e 20 20 49 66 20 4d 20 69   taken).  If M i
1260: 73 20 33 2c 20 74 68 65 20 49 20 69 73 20 30 20  s 3, the I is 0 
1270: 66 6f 72 20 61 6e 0a 2a 2a 20 6f 72 64 69 6e 61  for an.** ordina
1280: 72 79 20 66 61 6c 6c 2d 74 68 72 6f 75 67 68 2c  ry fall-through,
1290: 20 49 20 69 73 20 31 20 69 66 20 74 68 65 20 62   I is 1 if the b
12a0: 72 61 6e 63 68 20 77 61 73 20 74 61 6b 65 6e 2c  ranch was taken,
12b0: 20 61 6e 64 20 49 20 69 73 20 32 20 0a 2a 2a 20   and I is 2 .** 
12c0: 69 66 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66  if the result of
12d0: 20 63 6f 6d 70 61 72 69 73 6f 6e 20 69 73 20 4e   comparison is N
12e0: 55 4c 4c 2e 20 20 46 6f 72 20 4d 3d 33 2c 20 49  ULL.  For M=3, I
12f0: 3d 32 20 74 68 65 20 6a 75 6d 70 20 6d 61 79 20  =2 the jump may 
1300: 6f 72 0a 2a 2a 20 6d 61 79 20 6e 6f 74 20 62 65  or.** may not be
1310: 20 74 61 6b 65 6e 2c 20 64 65 70 65 6e 64 69 6e   taken, dependin
1320: 67 20 6f 6e 20 74 68 65 20 53 51 4c 49 54 45 5f  g on the SQLITE_
1330: 4a 55 4d 50 49 46 4e 55 4c 4c 20 66 6c 61 67 73  JUMPIFNULL flags
1340: 20 69 6e 20 70 35 2e 0a 2a 2a 20 57 68 65 6e 20   in p5..** When 
1350: 4d 20 69 73 20 34 2c 20 74 68 61 74 20 6d 65 61  M is 4, that mea
1360: 6e 73 20 74 68 61 74 20 61 6e 20 4f 50 5f 4a 75  ns that an OP_Ju
1370: 6d 70 20 69 73 20 62 65 69 6e 67 20 72 75 6e 2e  mp is being run.
1380: 20 20 49 20 69 73 20 30 2c 20 31 2c 20 6f 72 20    I is 0, 1, or 
1390: 32 0a 2a 2a 20 64 65 70 65 6e 64 69 6e 67 20 6f  2.** depending o
13a0: 6e 20 69 66 20 74 68 65 20 6f 70 65 72 61 6e 64  n if the operand
13b0: 73 20 61 72 65 20 6c 65 73 73 20 74 68 61 6e 2c  s are less than,
13c0: 20 65 71 75 61 6c 2c 20 6f 72 20 67 72 65 61 74   equal, or great
13d0: 65 72 20 74 68 61 6e 2e 0a 2a 2a 0a 2a 2a 20 69  er than..**.** i
13e0: 53 72 63 4c 69 6e 65 20 69 73 20 74 68 65 20 73  SrcLine is the s
13f0: 6f 75 72 63 65 20 63 6f 64 65 20 6c 69 6e 65 20  ource code line 
1400: 28 66 72 6f 6d 20 74 68 65 20 5f 5f 4c 49 4e 45  (from the __LINE
1410: 5f 5f 20 6d 61 63 72 6f 29 20 74 68 61 74 0a 2a  __ macro) that.*
1420: 2a 20 67 65 6e 65 72 61 74 65 64 20 74 68 65 20  * generated the 
1430: 56 44 42 45 20 69 6e 73 74 72 75 63 74 69 6f 6e  VDBE instruction
1440: 20 63 6f 6d 62 69 6e 65 64 20 77 69 74 68 20 66   combined with f
1450: 6c 61 67 20 62 69 74 73 2e 20 20 54 68 65 20 73  lag bits.  The s
1460: 6f 75 72 63 65 0a 2a 2a 20 63 6f 64 65 20 6c 69  ource.** code li
1470: 6e 65 20 6e 75 6d 62 65 72 20 69 73 20 69 6e 20  ne number is in 
1480: 74 68 65 20 6c 6f 77 65 72 20 32 34 20 62 69 74  the lower 24 bit
1490: 73 20 6f 66 20 69 53 72 63 4c 69 6e 65 20 61 6e  s of iSrcLine an
14a0: 64 20 74 68 65 20 75 70 70 65 72 0a 2a 2a 20 38  d the upper.** 8
14b0: 20 62 79 74 65 73 20 61 72 65 20 66 6c 61 67 73   bytes are flags
14c0: 2e 20 20 54 68 65 20 6c 6f 77 65 72 20 74 68 72  .  The lower thr
14d0: 65 65 20 62 69 74 73 20 6f 66 20 74 68 65 20 66  ee bits of the f
14e0: 6c 61 67 73 20 69 6e 64 69 63 61 74 65 0a 2a 2a  lags indicate.**
14f0: 20 76 61 6c 75 65 73 20 66 6f 72 20 49 20 74 68   values for I th
1500: 61 74 20 73 68 6f 75 6c 64 20 6e 65 76 65 72 20  at should never 
1510: 6f 63 63 75 72 2e 20 20 46 6f 72 20 65 78 61 6d  occur.  For exam
1520: 70 6c 65 2c 20 69 66 20 74 68 65 20 62 72 61 6e  ple, if the bran
1530: 63 68 20 69 73 0a 2a 2a 20 61 6c 77 61 79 73 20  ch is.** always 
1540: 74 61 6b 65 6e 2c 20 74 68 65 20 66 6c 61 67 73  taken, the flags
1550: 20 73 68 6f 75 6c 64 20 62 65 20 30 78 30 35 20   should be 0x05 
1560: 73 69 6e 63 65 20 74 68 65 20 66 61 6c 6c 2d 74  since the fall-t
1570: 68 72 6f 75 67 68 20 61 6e 64 0a 2a 2a 20 61 6c  hrough and.** al
1580: 74 65 72 6e 61 74 65 20 62 72 61 6e 63 68 20 61  ternate branch a
1590: 72 65 20 6e 65 76 65 72 20 74 61 6b 65 6e 2e 20  re never taken. 
15a0: 20 49 66 20 61 20 62 72 61 6e 63 68 20 69 73 20   If a branch is 
15b0: 6e 65 76 65 72 20 74 61 6b 65 6e 20 74 68 65 6e  never taken then
15c0: 0a 2a 2a 20 66 6c 61 67 73 20 73 68 6f 75 6c 64  .** flags should
15d0: 20 62 65 20 30 78 30 36 20 73 69 6e 63 65 20 6f   be 0x06 since o
15e0: 6e 6c 79 20 74 68 65 20 66 61 6c 6c 2d 74 68 72  nly the fall-thr
15f0: 6f 75 67 68 20 61 70 70 72 6f 61 63 68 20 69 73  ough approach is
1600: 20 61 6c 6c 6f 77 65 64 2e 0a 2a 2a 0a 2a 2a 20   allowed..**.** 
1610: 42 69 74 20 30 78 30 38 20 6f 66 20 74 68 65 20  Bit 0x08 of the 
1620: 66 6c 61 67 73 20 69 6e 64 69 63 61 74 65 73 20  flags indicates 
1630: 61 6e 20 4f 50 5f 4a 75 6d 70 20 6f 70 63 6f 64  an OP_Jump opcod
1640: 65 20 74 68 61 74 20 69 73 20 6f 6e 6c 79 0a 2a  e that is only.*
1650: 2a 20 69 6e 74 65 72 65 73 74 65 64 20 69 6e 20  * interested in 
1660: 65 71 75 61 6c 20 6f 72 20 6e 6f 74 2d 65 71 75  equal or not-equ
1670: 61 6c 2e 20 20 49 6e 20 6f 74 68 65 72 20 77 6f  al.  In other wo
1680: 72 64 73 2c 20 49 3d 3d 30 20 61 6e 64 20 49 3d  rds, I==0 and I=
1690: 3d 32 0a 2a 2a 20 73 68 6f 75 6c 64 20 62 65 20  =2.** should be 
16a0: 74 72 65 61 74 65 64 20 61 73 20 65 71 75 69 76  treated as equiv
16b0: 61 6c 65 6e 74 0a 2a 2a 0a 2a 2a 20 53 69 6e 63  alent.**.** Sinc
16c0: 65 20 6f 6e 6c 79 20 61 20 6c 69 6e 65 20 6e 75  e only a line nu
16d0: 6d 62 65 72 20 69 73 20 72 65 74 61 69 6e 65 64  mber is retained
16e0: 2c 20 6e 6f 74 20 74 68 65 20 66 69 6c 65 6e 61  , not the filena
16f0: 6d 65 2c 20 74 68 69 73 20 6d 61 63 72 6f 0a 2a  me, this macro.*
1700: 2a 20 6f 6e 6c 79 20 77 6f 72 6b 73 20 66 6f 72  * only works for
1710: 20 61 6d 61 6c 67 61 6d 61 74 69 6f 6e 20 62 75   amalgamation bu
1720: 69 6c 64 73 2e 20 20 42 75 74 20 74 68 61 74 20  ilds.  But that 
1730: 69 73 20 6f 6b 2c 20 73 69 6e 63 65 20 74 68 65  is ok, since the
1740: 73 65 20 6d 61 63 72 6f 73 0a 2a 2a 20 73 68 6f  se macros.** sho
1750: 75 6c 64 20 62 65 20 6e 6f 2d 6f 70 73 20 65 78  uld be no-ops ex
1760: 63 65 70 74 20 66 6f 72 20 73 70 65 63 69 61 6c  cept for special
1770: 20 62 75 69 6c 64 73 20 75 73 65 64 20 74 6f 20   builds used to 
1780: 6d 65 61 73 75 72 65 20 74 65 73 74 20 63 6f 76  measure test cov
1790: 65 72 61 67 65 2e 0a 2a 2f 0a 23 69 66 20 21 64  erage..*/.#if !d
17a0: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 56 44  efined(SQLITE_VD
17b0: 42 45 5f 43 4f 56 45 52 41 47 45 29 0a 23 20 64  BE_COVERAGE).# d
17c0: 65 66 69 6e 65 20 56 64 62 65 42 72 61 6e 63 68  efine VdbeBranch
17d0: 54 61 6b 65 6e 28 49 2c 4d 29 0a 23 65 6c 73 65  Taken(I,M).#else
17e0: 0a 23 20 64 65 66 69 6e 65 20 56 64 62 65 42 72  .# define VdbeBr
17f0: 61 6e 63 68 54 61 6b 65 6e 28 49 2c 4d 29 20 76  anchTaken(I,M) v
1800: 64 62 65 54 61 6b 65 42 72 61 6e 63 68 28 70 4f  dbeTakeBranch(pO
1810: 70 2d 3e 69 53 72 63 4c 69 6e 65 2c 49 2c 4d 29  p->iSrcLine,I,M)
1820: 0a 20 20 73 74 61 74 69 63 20 76 6f 69 64 20 76  .  static void v
1830: 64 62 65 54 61 6b 65 42 72 61 6e 63 68 28 75 33  dbeTakeBranch(u3
1840: 32 20 69 53 72 63 4c 69 6e 65 2c 20 75 38 20 49  2 iSrcLine, u8 I
1850: 2c 20 75 38 20 4d 29 7b 0a 20 20 20 20 75 38 20  , u8 M){.    u8 
1860: 6d 4e 65 76 65 72 3b 0a 20 20 20 20 61 73 73 65  mNever;.    asse
1870: 72 74 28 20 49 3c 3d 32 20 29 3b 20 20 2f 2a 20  rt( I<=2 );  /* 
1880: 30 3a 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 2c  0: fall through,
1890: 20 20 31 3a 20 74 61 6b 65 6e 2c 20 20 32 3a 20    1: taken,  2: 
18a0: 61 6c 74 65 72 6e 61 74 65 20 74 61 6b 65 6e 20  alternate taken 
18b0: 2a 2f 0a 20 20 20 20 61 73 73 65 72 74 28 20 4d  */.    assert( M
18c0: 3c 3d 34 20 29 3b 20 20 2f 2a 20 32 3a 20 74 77  <=4 );  /* 2: tw
18d0: 6f 2d 77 61 79 20 62 72 61 6e 63 68 2c 20 33 3a  o-way branch, 3:
18e0: 20 74 68 72 65 65 2d 77 61 79 20 62 72 61 6e 63   three-way branc
18f0: 68 2c 20 34 3a 20 4f 50 5f 4a 75 6d 70 20 2a 2f  h, 4: OP_Jump */
1900: 0a 20 20 20 20 61 73 73 65 72 74 28 20 49 3c 4d  .    assert( I<M
1910: 20 29 3b 20 20 20 2f 2a 20 49 20 63 61 6e 20 6f   );   /* I can o
1920: 6e 6c 79 20 62 65 20 32 20 69 66 20 4d 20 69 73  nly be 2 if M is
1930: 20 33 20 6f 72 20 34 20 2a 2f 0a 20 20 20 20 2f   3 or 4 */.    /
1940: 2a 20 54 72 61 6e 73 66 6f 72 6d 20 49 20 66 72  * Transform I fr
1950: 6f 6d 20 61 20 69 6e 74 65 67 65 72 20 5b 30 2c  om a integer [0,
1960: 31 2c 32 5d 20 69 6e 74 6f 20 61 20 62 69 74 6d  1,2] into a bitm
1970: 61 73 6b 20 6f 66 20 5b 31 2c 32 2c 34 5d 20 2a  ask of [1,2,4] *
1980: 2f 0a 20 20 20 20 49 20 3d 20 31 3c 3c 49 3b 0a  /.    I = 1<<I;.
1990: 20 20 20 20 2f 2a 20 54 68 65 20 75 70 70 65 72      /* The upper
19a0: 20 38 20 62 69 74 73 20 6f 66 20 69 53 72 63 4c   8 bits of iSrcL
19b0: 69 6e 65 20 61 72 65 20 66 6c 61 67 73 2e 20 20  ine are flags.  
19c0: 54 68 65 20 6c 6f 77 65 72 20 74 68 72 65 65 20  The lower three 
19d0: 62 69 74 73 20 6f 66 0a 20 20 20 20 2a 2a 20 74  bits of.    ** t
19e0: 68 65 20 66 6c 61 67 73 20 69 6e 64 69 63 61 74  he flags indicat
19f0: 65 20 64 69 72 65 63 74 69 6f 6e 73 20 74 68 61  e directions tha
1a00: 74 20 74 68 65 20 62 72 61 6e 63 68 20 63 61 6e  t the branch can
1a10: 20 6e 65 76 65 72 20 67 6f 2e 20 20 49 66 0a 20   never go.  If. 
1a20: 20 20 20 2a 2a 20 61 20 62 72 61 6e 63 68 20 72     ** a branch r
1a30: 65 61 6c 6c 79 20 64 6f 65 73 20 67 6f 20 69 6e  eally does go in
1a40: 20 6f 6e 65 20 6f 66 20 74 68 6f 73 65 20 64 69   one of those di
1a50: 72 65 63 74 69 6f 6e 73 2c 20 61 73 73 65 72 74  rections, assert
1a60: 20 72 69 67 68 74 0a 20 20 20 20 2a 2a 20 61 77   right.    ** aw
1a70: 61 79 2e 20 2a 2f 0a 20 20 20 20 6d 4e 65 76 65  ay. */.    mNeve
1a80: 72 20 3d 20 69 53 72 63 4c 69 6e 65 20 3e 3e 20  r = iSrcLine >> 
1a90: 32 34 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20  24;.    assert( 
1aa0: 28 49 20 26 20 6d 4e 65 76 65 72 29 3d 3d 30 20  (I & mNever)==0 
1ab0: 29 3b 0a 20 20 20 20 69 66 28 20 73 71 6c 69 74  );.    if( sqlit
1ac0: 65 33 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 2e 78  e3GlobalConfig.x
1ad0: 56 64 62 65 42 72 61 6e 63 68 3d 3d 30 20 29 20  VdbeBranch==0 ) 
1ae0: 72 65 74 75 72 6e 3b 20 20 2f 2a 4e 4f 5f 54 45  return;  /*NO_TE
1af0: 53 54 2a 2f 0a 20 20 20 20 2f 2a 20 49 6e 76 6f  ST*/.    /* Invo
1b00: 6b 65 20 74 68 65 20 62 72 61 6e 63 68 20 63 6f  ke the branch co
1b10: 76 65 72 61 67 65 20 63 61 6c 6c 62 61 63 6b 20  verage callback 
1b20: 77 69 74 68 20 74 68 72 65 65 20 61 72 67 75 6d  with three argum
1b30: 65 6e 74 73 3a 0a 20 20 20 20 2a 2a 20 20 20 20  ents:.    **    
1b40: 69 53 72 63 4c 69 6e 65 20 2d 20 74 68 65 20 6c  iSrcLine - the l
1b50: 69 6e 65 20 6e 75 6d 62 65 72 20 6f 66 20 74 68  ine number of th
1b60: 65 20 56 64 62 65 43 6f 76 65 72 61 67 65 28 29  e VdbeCoverage()
1b70: 20 6d 61 63 72 6f 2c 20 77 69 74 68 0a 20 20 20   macro, with.   
1b80: 20 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20   **             
1b90: 20 20 66 6c 61 67 73 20 72 65 6d 6f 76 65 64 2e    flags removed.
1ba0: 0a 20 20 20 20 2a 2a 20 20 20 20 49 20 20 20 20  .    **    I    
1bb0: 20 20 20 20 2d 20 4d 61 73 6b 20 6f 66 20 62 69      - Mask of bi
1bc0: 74 73 20 30 78 30 37 20 69 6e 64 69 63 61 74 69  ts 0x07 indicati
1bd0: 6e 67 20 77 68 69 63 68 20 63 61 73 65 73 20 61  ng which cases a
1be0: 72 65 20 61 72 65 0a 20 20 20 20 2a 2a 20 20 20  re are.    **   
1bf0: 20 20 20 20 20 20 20 20 20 20 20 20 66 75 6c 66              fulf
1c00: 69 6c 6c 65 64 20 62 79 20 74 68 69 73 20 69 6e  illed by this in
1c10: 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 6a 75  stance of the ju
1c20: 6d 70 2e 20 20 30 78 30 31 20 6d 65 61 6e 73 0a  mp.  0x01 means.
1c30: 20 20 20 20 2a 2a 20 20 20 20 20 20 20 20 20 20      **          
1c40: 20 20 20 20 20 66 61 6c 6c 2d 74 68 72 75 2c 20       fall-thru, 
1c50: 30 78 30 32 20 6d 65 61 6e 73 20 74 61 6b 65 6e  0x02 means taken
1c60: 2c 20 30 78 30 34 20 6d 65 61 6e 73 20 4e 55 4c  , 0x04 means NUL
1c70: 4c 2e 20 20 41 6e 79 0a 20 20 20 20 2a 2a 20 20  L.  Any.    **  
1c80: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 6d 70               imp
1c90: 6f 73 73 69 62 6c 65 20 63 61 73 65 73 20 28 65  ossible cases (e
1ca0: 78 3a 20 69 66 20 74 68 65 20 63 6f 6d 70 61 72  x: if the compar
1cb0: 69 73 6f 6e 20 69 73 20 6e 65 76 65 72 20 4e 55  ison is never NU
1cc0: 4c 4c 29 0a 20 20 20 20 2a 2a 20 20 20 20 20 20  LL).    **      
1cd0: 20 20 20 20 20 20 20 20 20 61 72 65 20 66 69 6c           are fil
1ce0: 6c 65 64 20 69 6e 20 61 75 74 6f 6d 61 74 69 63  led in automatic
1cf0: 61 6c 6c 79 20 73 6f 20 74 68 61 74 20 74 68 65  ally so that the
1d00: 20 63 6f 76 65 72 61 67 65 0a 20 20 20 20 2a 2a   coverage.    **
1d10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6d                 m
1d20: 65 61 73 75 72 65 6d 65 6e 74 20 6c 6f 67 69 63  easurement logic
1d30: 20 64 6f 65 73 20 6e 6f 74 20 66 6c 61 67 20 74   does not flag t
1d40: 68 6f 73 65 20 69 6d 70 6f 73 73 69 62 6c 65 20  hose impossible 
1d50: 63 61 73 65 73 0a 20 20 20 20 2a 2a 20 20 20 20  cases.    **    
1d60: 20 20 20 20 20 20 20 20 20 20 20 61 73 20 6d 69             as mi
1d70: 73 73 65 64 20 63 6f 76 65 72 61 67 65 2e 0a 20  ssed coverage.. 
1d80: 20 20 20 2a 2a 20 20 20 20 4d 20 20 20 20 20 20     **    M      
1d90: 20 20 2d 20 54 79 70 65 20 6f 66 20 6a 75 6d 70    - Type of jump
1da0: 2e 20 20 53 61 6d 65 20 61 73 20 4d 20 61 72 67  .  Same as M arg
1db0: 75 6d 65 6e 74 20 61 62 6f 76 65 0a 20 20 20 20  ument above.    
1dc0: 2a 2f 0a 20 20 20 20 49 20 7c 3d 20 6d 4e 65 76  */.    I |= mNev
1dd0: 65 72 3b 0a 20 20 20 20 69 66 28 20 4d 3d 3d 32  er;.    if( M==2
1de0: 20 29 20 49 20 7c 3d 20 30 78 30 34 3b 0a 20 20   ) I |= 0x04;.  
1df0: 20 20 69 66 28 20 4d 3d 3d 34 20 29 7b 0a 20 20    if( M==4 ){.  
1e00: 20 20 20 20 49 20 7c 3d 20 30 78 30 38 3b 0a 20      I |= 0x08;. 
1e10: 20 20 20 20 20 69 66 28 20 28 6d 4e 65 76 65 72       if( (mNever
1e20: 26 30 78 30 38 29 21 3d 30 20 26 26 20 28 49 26  &0x08)!=0 && (I&
1e30: 30 78 30 35 29 21 3d 30 29 20 49 20 7c 3d 20 30  0x05)!=0) I |= 0
1e40: 78 30 35 3b 20 2f 2a 4e 4f 5f 54 45 53 54 2a 2f  x05; /*NO_TEST*/
1e50: 0a 20 20 20 20 7d 0a 20 20 20 20 73 71 6c 69 74  .    }.    sqlit
1e60: 65 33 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 2e 78  e3GlobalConfig.x
1e70: 56 64 62 65 42 72 61 6e 63 68 28 73 71 6c 69 74  VdbeBranch(sqlit
1e80: 65 33 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 2e 70  e3GlobalConfig.p
1e90: 56 64 62 65 42 72 61 6e 63 68 41 72 67 2c 0a 20  VdbeBranchArg,. 
1ea0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1eb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ec0: 20 20 20 69 53 72 63 4c 69 6e 65 26 30 78 66 66     iSrcLine&0xff
1ed0: 66 66 66 66 2c 20 49 2c 20 4d 29 3b 0a 20 20 7d  ffff, I, M);.  }
1ee0: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41  .#endif../*.** A
1ef0: 6e 20 65 70 68 65 6d 65 72 61 6c 20 73 74 72 69  n ephemeral stri
1f00: 6e 67 20 76 61 6c 75 65 20 28 73 69 67 6e 69 66  ng value (signif
1f10: 69 65 64 20 62 79 20 74 68 65 20 4d 45 4d 5f 45  ied by the MEM_E
1f20: 70 68 65 6d 20 66 6c 61 67 29 20 63 6f 6e 74 61  phem flag) conta
1f30: 69 6e 73 0a 2a 2a 20 61 20 70 6f 69 6e 74 65 72  ins.** a pointer
1f40: 20 74 6f 20 61 20 64 79 6e 61 6d 69 63 61 6c 6c   to a dynamicall
1f50: 79 20 61 6c 6c 6f 63 61 74 65 64 20 73 74 72 69  y allocated stri
1f60: 6e 67 20 77 68 65 72 65 20 73 6f 6d 65 20 6f 74  ng where some ot
1f70: 68 65 72 20 65 6e 74 69 74 79 0a 2a 2a 20 69 73  her entity.** is
1f80: 20 72 65 73 70 6f 6e 73 69 62 6c 65 20 66 6f 72   responsible for
1f90: 20 64 65 61 6c 6c 6f 63 61 74 69 6e 67 20 74 68   deallocating th
1fa0: 61 74 20 73 74 72 69 6e 67 2e 20 20 42 65 63 61  at string.  Beca
1fb0: 75 73 65 20 74 68 65 20 72 65 67 69 73 74 65 72  use the register
1fc0: 0a 2a 2a 20 64 6f 65 73 20 6e 6f 74 20 63 6f 6e  .** does not con
1fd0: 74 72 6f 6c 20 74 68 65 20 73 74 72 69 6e 67 2c  trol the string,
1fe0: 20 69 74 20 6d 69 67 68 74 20 62 65 20 64 65 6c   it might be del
1ff0: 65 74 65 64 20 77 69 74 68 6f 75 74 20 74 68 65  eted without the
2000: 20 72 65 67 69 73 74 65 72 0a 2a 2a 20 6b 6e 6f   register.** kno
2010: 77 69 6e 67 20 69 74 2e 0a 2a 2a 0a 2a 2a 20 54  wing it..**.** T
2020: 68 69 73 20 72 6f 75 74 69 6e 65 20 63 6f 6e 76  his routine conv
2030: 65 72 74 73 20 61 6e 20 65 70 68 65 6d 65 72 61  erts an ephemera
2040: 6c 20 73 74 72 69 6e 67 20 69 6e 74 6f 20 61 20  l string into a 
2050: 64 79 6e 61 6d 69 63 61 6c 6c 79 20 61 6c 6c 6f  dynamically allo
2060: 63 61 74 65 64 0a 2a 2a 20 73 74 72 69 6e 67 20  cated.** string 
2070: 74 68 61 74 20 74 68 65 20 72 65 67 69 73 74 65  that the registe
2080: 72 20 69 74 73 65 6c 66 20 63 6f 6e 74 72 6f 6c  r itself control
2090: 73 2e 20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72  s.  In other wor
20a0: 64 73 2c 20 69 74 0a 2a 2a 20 63 6f 6e 76 65 72  ds, it.** conver
20b0: 74 73 20 61 6e 20 4d 45 4d 5f 45 70 68 65 6d 20  ts an MEM_Ephem 
20c0: 73 74 72 69 6e 67 20 69 6e 74 6f 20 61 20 73 74  string into a st
20d0: 72 69 6e 67 20 77 69 74 68 20 50 2e 7a 3d 3d 50  ring with P.z==P
20e0: 2e 7a 4d 61 6c 6c 6f 63 2e 0a 2a 2f 0a 23 64 65  .zMalloc..*/.#de
20f0: 66 69 6e 65 20 44 65 65 70 68 65 6d 65 72 61 6c  fine Deephemeral
2100: 69 7a 65 28 50 29 20 5c 0a 20 20 20 69 66 28 20  ize(P) \.   if( 
2110: 28 28 50 29 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f  ((P)->flags&MEM_
2120: 45 70 68 65 6d 29 21 3d 30 20 5c 0a 20 20 20 20  Ephem)!=0 \.    
2130: 20 20 20 26 26 20 73 71 6c 69 74 65 33 56 64 62     && sqlite3Vdb
2140: 65 4d 65 6d 4d 61 6b 65 57 72 69 74 65 61 62 6c  eMemMakeWriteabl
2150: 65 28 50 29 20 29 7b 20 67 6f 74 6f 20 6e 6f 5f  e(P) ){ goto no_
2160: 6d 65 6d 3b 7d 0a 0a 2f 2a 20 52 65 74 75 72 6e  mem;}../* Return
2170: 20 74 72 75 65 20 69 66 20 74 68 65 20 63 75 72   true if the cur
2180: 73 6f 72 20 77 61 73 20 6f 70 65 6e 65 64 20 75  sor was opened u
2190: 73 69 6e 67 20 74 68 65 20 4f 50 5f 4f 70 65 6e  sing the OP_Open
21a0: 53 6f 72 74 65 72 20 6f 70 63 6f 64 65 2e 20 2a  Sorter opcode. *
21b0: 2f 0a 23 64 65 66 69 6e 65 20 69 73 53 6f 72 74  /.#define isSort
21c0: 65 72 28 78 29 20 28 28 78 29 2d 3e 65 43 75 72  er(x) ((x)->eCur
21d0: 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f 53 4f  Type==CURTYPE_SO
21e0: 52 54 45 52 29 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c  RTER)../*.** All
21f0: 6f 63 61 74 65 20 56 64 62 65 43 75 72 73 6f 72  ocate VdbeCursor
2200: 20 6e 75 6d 62 65 72 20 69 43 75 72 2e 20 20 52   number iCur.  R
2210: 65 74 75 72 6e 20 61 20 70 6f 69 6e 74 65 72 20  eturn a pointer 
2220: 74 6f 20 69 74 2e 20 20 52 65 74 75 72 6e 20 4e  to it.  Return N
2230: 55 4c 4c 0a 2a 2a 20 69 66 20 77 65 20 72 75 6e  ULL.** if we run
2240: 20 6f 75 74 20 6f 66 20 6d 65 6d 6f 72 79 2e 0a   out of memory..
2250: 2a 2f 0a 73 74 61 74 69 63 20 56 64 62 65 43 75  */.static VdbeCu
2260: 72 73 6f 72 20 2a 61 6c 6c 6f 63 61 74 65 43 75  rsor *allocateCu
2270: 72 73 6f 72 28 0a 20 20 56 64 62 65 20 2a 70 2c  rsor(.  Vdbe *p,
2280: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
2290: 20 54 68 65 20 76 69 72 74 75 61 6c 20 6d 61 63   The virtual mac
22a0: 68 69 6e 65 20 2a 2f 0a 20 20 69 6e 74 20 69 43  hine */.  int iC
22b0: 75 72 2c 20 20 20 20 20 20 20 20 20 20 20 20 20  ur,             
22c0: 2f 2a 20 49 6e 64 65 78 20 6f 66 20 74 68 65 20  /* Index of the 
22d0: 6e 65 77 20 56 64 62 65 43 75 72 73 6f 72 20 2a  new VdbeCursor *
22e0: 2f 0a 20 20 69 6e 74 20 6e 46 69 65 6c 64 2c 20  /.  int nField, 
22f0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
2300: 62 65 72 20 6f 66 20 66 69 65 6c 64 73 20 69 6e  ber of fields in
2310: 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20 69 6e   the table or in
2320: 64 65 78 20 2a 2f 0a 20 20 69 6e 74 20 69 44 62  dex */.  int iDb
2330: 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ,              /
2340: 2a 20 44 61 74 61 62 61 73 65 20 74 68 65 20 63  * Database the c
2350: 75 72 73 6f 72 20 62 65 6c 6f 6e 67 73 20 74 6f  ursor belongs to
2360: 2c 20 6f 72 20 2d 31 20 2a 2f 0a 20 20 75 38 20  , or -1 */.  u8 
2370: 65 43 75 72 54 79 70 65 20 20 20 20 20 20 20 20  eCurType        
2380: 20 20 20 2f 2a 20 54 79 70 65 20 6f 66 20 74 68     /* Type of th
2390: 65 20 6e 65 77 20 63 75 72 73 6f 72 20 2a 2f 0a  e new cursor */.
23a0: 29 7b 0a 20 20 2f 2a 20 46 69 6e 64 20 74 68 65  ){.  /* Find the
23b0: 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 74 68 61   memory cell tha
23c0: 74 20 77 69 6c 6c 20 62 65 20 75 73 65 64 20 74  t will be used t
23d0: 6f 20 73 74 6f 72 65 20 74 68 65 20 62 6c 6f 62  o store the blob
23e0: 20 6f 66 20 6d 65 6d 6f 72 79 0a 20 20 2a 2a 20   of memory.  ** 
23f0: 72 65 71 75 69 72 65 64 20 66 6f 72 20 74 68 69  required for thi
2400: 73 20 56 64 62 65 43 75 72 73 6f 72 20 73 74 72  s VdbeCursor str
2410: 75 63 74 75 72 65 2e 20 49 74 20 69 73 20 63 6f  ucture. It is co
2420: 6e 76 65 6e 69 65 6e 74 20 74 6f 20 75 73 65 20  nvenient to use 
2430: 61 20 0a 20 20 2a 2a 20 76 64 62 65 20 6d 65 6d  a .  ** vdbe mem
2440: 6f 72 79 20 63 65 6c 6c 20 74 6f 20 6d 61 6e 61  ory cell to mana
2450: 67 65 20 74 68 65 20 6d 65 6d 6f 72 79 20 61 6c  ge the memory al
2460: 6c 6f 63 61 74 69 6f 6e 20 72 65 71 75 69 72 65  location require
2470: 64 20 66 6f 72 20 61 0a 20 20 2a 2a 20 56 64 62  d for a.  ** Vdb
2480: 65 43 75 72 73 6f 72 20 73 74 72 75 63 74 75 72  eCursor structur
2490: 65 20 66 6f 72 20 74 68 65 20 66 6f 6c 6c 6f 77  e for the follow
24a0: 69 6e 67 20 72 65 61 73 6f 6e 73 3a 0a 20 20 2a  ing reasons:.  *
24b0: 2a 0a 20 20 2a 2a 20 20 20 2a 20 53 6f 6d 65 74  *.  **   * Somet
24c0: 69 6d 65 73 20 63 75 72 73 6f 72 20 6e 75 6d 62  imes cursor numb
24d0: 65 72 73 20 61 72 65 20 75 73 65 64 20 66 6f 72  ers are used for
24e0: 20 61 20 63 6f 75 70 6c 65 20 6f 66 20 64 69 66   a couple of dif
24f0: 66 65 72 65 6e 74 0a 20 20 2a 2a 20 20 20 20 20  ferent.  **     
2500: 70 75 72 70 6f 73 65 73 20 69 6e 20 61 20 76 64  purposes in a vd
2510: 62 65 20 70 72 6f 67 72 61 6d 2e 20 54 68 65 20  be program. The 
2520: 64 69 66 66 65 72 65 6e 74 20 75 73 65 73 20 6d  different uses m
2530: 69 67 68 74 20 72 65 71 75 69 72 65 0a 20 20 2a  ight require.  *
2540: 2a 20 20 20 20 20 64 69 66 66 65 72 65 6e 74 20  *     different 
2550: 73 69 7a 65 64 20 61 6c 6c 6f 63 61 74 69 6f 6e  sized allocation
2560: 73 2e 20 4d 65 6d 6f 72 79 20 63 65 6c 6c 73 20  s. Memory cells 
2570: 70 72 6f 76 69 64 65 20 67 72 6f 77 61 62 6c 65  provide growable
2580: 0a 20 20 2a 2a 20 20 20 20 20 61 6c 6c 6f 63 61  .  **     alloca
2590: 74 69 6f 6e 73 2e 0a 20 20 2a 2a 0a 20 20 2a 2a  tions..  **.  **
25a0: 20 20 20 2a 20 57 68 65 6e 20 75 73 69 6e 67 20     * When using 
25b0: 45 4e 41 42 4c 45 5f 4d 45 4d 4f 52 59 5f 4d 41  ENABLE_MEMORY_MA
25c0: 4e 41 47 45 4d 45 4e 54 2c 20 6d 65 6d 6f 72 79  NAGEMENT, memory
25d0: 20 63 65 6c 6c 20 62 75 66 66 65 72 73 20 63 61   cell buffers ca
25e0: 6e 0a 20 20 2a 2a 20 20 20 20 20 62 65 20 66 72  n.  **     be fr
25f0: 65 65 64 20 6c 61 7a 69 6c 79 20 76 69 61 20 74  eed lazily via t
2600: 68 65 20 73 71 6c 69 74 65 33 5f 72 65 6c 65 61  he sqlite3_relea
2610: 73 65 5f 6d 65 6d 6f 72 79 28 29 20 41 50 49 2e  se_memory() API.
2620: 20 54 68 69 73 0a 20 20 2a 2a 20 20 20 20 20 6d   This.  **     m
2630: 69 6e 69 6d 69 7a 65 73 20 74 68 65 20 6e 75 6d  inimizes the num
2640: 62 65 72 20 6f 66 20 6d 61 6c 6c 6f 63 20 63 61  ber of malloc ca
2650: 6c 6c 73 20 6d 61 64 65 20 62 79 20 74 68 65 20  lls made by the 
2660: 73 79 73 74 65 6d 2e 0a 20 20 2a 2a 0a 20 20 2a  system..  **.  *
2670: 2a 20 54 68 65 20 6d 65 6d 6f 72 79 20 63 65 6c  * The memory cel
2680: 6c 20 66 6f 72 20 63 75 72 73 6f 72 20 30 20 69  l for cursor 0 i
2690: 73 20 61 4d 65 6d 5b 30 5d 2e 20 54 68 65 20 72  s aMem[0]. The r
26a0: 65 73 74 20 61 72 65 20 61 6c 6c 6f 63 61 74 65  est are allocate
26b0: 64 20 66 72 6f 6d 0a 20 20 2a 2a 20 74 68 65 20  d from.  ** the 
26c0: 74 6f 70 20 6f 66 20 74 68 65 20 72 65 67 69 73  top of the regis
26d0: 74 65 72 20 73 70 61 63 65 2e 20 20 43 75 72 73  ter space.  Curs
26e0: 6f 72 20 31 20 69 73 20 61 74 20 4d 65 6d 5b 70  or 1 is at Mem[p
26f0: 2d 3e 6e 4d 65 6d 2d 31 5d 2e 0a 20 20 2a 2a 20  ->nMem-1]..  ** 
2700: 43 75 72 73 6f 72 20 32 20 69 73 20 61 74 20 4d  Cursor 2 is at M
2710: 65 6d 5b 70 2d 3e 6e 4d 65 6d 2d 32 5d 2e 20 41  em[p->nMem-2]. A
2720: 6e 64 20 73 6f 20 66 6f 72 74 68 2e 0a 20 20 2a  nd so forth..  *
2730: 2f 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d 20 3d 20  /.  Mem *pMem = 
2740: 69 43 75 72 3e 30 20 3f 20 26 70 2d 3e 61 4d 65  iCur>0 ? &p->aMe
2750: 6d 5b 70 2d 3e 6e 4d 65 6d 2d 69 43 75 72 5d 20  m[p->nMem-iCur] 
2760: 3a 20 70 2d 3e 61 4d 65 6d 3b 0a 0a 20 20 69 6e  : p->aMem;..  in
2770: 74 20 6e 42 79 74 65 3b 0a 20 20 56 64 62 65 43  t nByte;.  VdbeC
2780: 75 72 73 6f 72 20 2a 70 43 78 20 3d 20 30 3b 0a  ursor *pCx = 0;.
2790: 20 20 6e 42 79 74 65 20 3d 20 0a 20 20 20 20 20    nByte = .     
27a0: 20 52 4f 55 4e 44 38 28 73 69 7a 65 6f 66 28 56   ROUND8(sizeof(V
27b0: 64 62 65 43 75 72 73 6f 72 29 29 20 2b 20 32 2a  dbeCursor)) + 2*
27c0: 73 69 7a 65 6f 66 28 75 33 32 29 2a 6e 46 69 65  sizeof(u32)*nFie
27d0: 6c 64 20 2b 20 0a 20 20 20 20 20 20 28 65 43 75  ld + .      (eCu
27e0: 72 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f 42  rType==CURTYPE_B
27f0: 54 52 45 45 3f 73 71 6c 69 74 65 33 42 74 72 65  TREE?sqlite3Btre
2800: 65 43 75 72 73 6f 72 53 69 7a 65 28 29 3a 30 29  eCursorSize():0)
2810: 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 69 43 75  ;..  assert( iCu
2820: 72 3e 3d 30 20 26 26 20 69 43 75 72 3c 70 2d 3e  r>=0 && iCur<p->
2830: 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 69 66 28  nCursor );.  if(
2840: 20 70 2d 3e 61 70 43 73 72 5b 69 43 75 72 5d 20   p->apCsr[iCur] 
2850: 29 7b 20 2f 2a 4f 50 54 49 4d 49 5a 41 54 49 4f  ){ /*OPTIMIZATIO
2860: 4e 2d 49 46 2d 46 41 4c 53 45 2a 2f 0a 20 20 20  N-IF-FALSE*/.   
2870: 20 2f 2a 20 42 65 66 6f 72 65 20 63 61 6c 6c 69   /* Before calli
2880: 6e 67 20 73 71 6c 69 74 65 33 56 64 62 65 46 72  ng sqlite3VdbeFr
2890: 65 65 43 75 72 73 6f 72 28 29 2c 20 65 6e 73 75  eeCursor(), ensu
28a0: 72 65 20 74 68 65 20 69 73 45 70 68 65 6d 65 72  re the isEphemer
28b0: 61 6c 20 66 6c 61 67 0a 20 20 20 20 2a 2a 20 69  al flag.    ** i
28c0: 73 20 63 6c 65 61 72 2e 20 4f 74 68 65 72 77 69  s clear. Otherwi
28d0: 73 65 2c 20 69 66 20 74 68 69 73 20 69 73 20 61  se, if this is a
28e0: 6e 20 65 70 68 65 6d 65 72 61 6c 20 63 75 72 73  n ephemeral curs
28f0: 6f 72 20 63 72 65 61 74 65 64 20 62 79 20 0a 20  or created by . 
2900: 20 20 20 2a 2a 20 4f 50 5f 4f 70 65 6e 44 75 70     ** OP_OpenDup
2910: 2c 20 74 68 65 20 63 75 72 73 6f 72 20 77 69 6c  , the cursor wil
2920: 6c 20 6e 6f 74 20 62 65 20 63 6c 6f 73 65 64 20  l not be closed 
2930: 61 6e 64 20 77 69 6c 6c 20 73 74 69 6c 6c 20 62  and will still b
2940: 65 20 70 61 72 74 0a 20 20 20 20 2a 2a 20 6f 66  e part.    ** of
2950: 20 61 20 42 74 53 68 61 72 65 64 2e 70 43 75 72   a BtShared.pCur
2960: 73 6f 72 20 6c 69 73 74 2e 20 20 2a 2f 0a 20 20  sor list.  */.  
2970: 20 20 69 66 28 20 70 2d 3e 61 70 43 73 72 5b 69    if( p->apCsr[i
2980: 43 75 72 5d 2d 3e 70 42 74 78 3d 3d 30 20 29 20  Cur]->pBtx==0 ) 
2990: 70 2d 3e 61 70 43 73 72 5b 69 43 75 72 5d 2d 3e  p->apCsr[iCur]->
29a0: 69 73 45 70 68 65 6d 65 72 61 6c 20 3d 20 30 3b  isEphemeral = 0;
29b0: 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
29c0: 46 72 65 65 43 75 72 73 6f 72 28 70 2c 20 70 2d  FreeCursor(p, p-
29d0: 3e 61 70 43 73 72 5b 69 43 75 72 5d 29 3b 0a 20  >apCsr[iCur]);. 
29e0: 20 20 20 70 2d 3e 61 70 43 73 72 5b 69 43 75 72     p->apCsr[iCur
29f0: 5d 20 3d 20 30 3b 0a 20 20 7d 0a 20 20 69 66 28  ] = 0;.  }.  if(
2a00: 20 53 51 4c 49 54 45 5f 4f 4b 3d 3d 73 71 6c 69   SQLITE_OK==sqli
2a10: 74 65 33 56 64 62 65 4d 65 6d 43 6c 65 61 72 41  te3VdbeMemClearA
2a20: 6e 64 52 65 73 69 7a 65 28 70 4d 65 6d 2c 20 6e  ndResize(pMem, n
2a30: 42 79 74 65 29 20 29 7b 0a 20 20 20 20 70 2d 3e  Byte) ){.    p->
2a40: 61 70 43 73 72 5b 69 43 75 72 5d 20 3d 20 70 43  apCsr[iCur] = pC
2a50: 78 20 3d 20 28 56 64 62 65 43 75 72 73 6f 72 2a  x = (VdbeCursor*
2a60: 29 70 4d 65 6d 2d 3e 7a 3b 0a 20 20 20 20 6d 65  )pMem->z;.    me
2a70: 6d 73 65 74 28 70 43 78 2c 20 30 2c 20 6f 66 66  mset(pCx, 0, off
2a80: 73 65 74 6f 66 28 56 64 62 65 43 75 72 73 6f 72  setof(VdbeCursor
2a90: 2c 70 41 6c 74 43 75 72 73 6f 72 29 29 3b 0a 20  ,pAltCursor));. 
2aa0: 20 20 20 70 43 78 2d 3e 65 43 75 72 54 79 70 65     pCx->eCurType
2ab0: 20 3d 20 65 43 75 72 54 79 70 65 3b 0a 20 20 20   = eCurType;.   
2ac0: 20 70 43 78 2d 3e 69 44 62 20 3d 20 69 44 62 3b   pCx->iDb = iDb;
2ad0: 0a 20 20 20 20 70 43 78 2d 3e 6e 46 69 65 6c 64  .    pCx->nField
2ae0: 20 3d 20 6e 46 69 65 6c 64 3b 0a 20 20 20 20 70   = nField;.    p
2af0: 43 78 2d 3e 61 4f 66 66 73 65 74 20 3d 20 26 70  Cx->aOffset = &p
2b00: 43 78 2d 3e 61 54 79 70 65 5b 6e 46 69 65 6c 64  Cx->aType[nField
2b10: 5d 3b 0a 20 20 20 20 69 66 28 20 65 43 75 72 54  ];.    if( eCurT
2b20: 79 70 65 3d 3d 43 55 52 54 59 50 45 5f 42 54 52  ype==CURTYPE_BTR
2b30: 45 45 20 29 7b 0a 20 20 20 20 20 20 70 43 78 2d  EE ){.      pCx-
2b40: 3e 75 63 2e 70 43 75 72 73 6f 72 20 3d 20 28 42  >uc.pCursor = (B
2b50: 74 43 75 72 73 6f 72 2a 29 0a 20 20 20 20 20 20  tCursor*).      
2b60: 20 20 20 20 26 70 4d 65 6d 2d 3e 7a 5b 52 4f 55      &pMem->z[ROU
2b70: 4e 44 38 28 73 69 7a 65 6f 66 28 56 64 62 65 43  ND8(sizeof(VdbeC
2b80: 75 72 73 6f 72 29 29 2b 32 2a 73 69 7a 65 6f 66  ursor))+2*sizeof
2b90: 28 75 33 32 29 2a 6e 46 69 65 6c 64 5d 3b 0a 20  (u32)*nField];. 
2ba0: 20 20 20 20 20 73 71 6c 69 74 65 33 42 74 72 65       sqlite3Btre
2bb0: 65 43 75 72 73 6f 72 5a 65 72 6f 28 70 43 78 2d  eCursorZero(pCx-
2bc0: 3e 75 63 2e 70 43 75 72 73 6f 72 29 3b 0a 20 20  >uc.pCursor);.  
2bd0: 20 20 7d 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e    }.  }.  return
2be0: 20 70 43 78 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54   pCx;.}../*.** T
2bf0: 68 65 20 73 74 72 69 6e 67 20 69 6e 20 70 52 65  he string in pRe
2c00: 63 20 69 73 20 6b 6e 6f 77 6e 20 74 6f 20 6c 6f  c is known to lo
2c10: 6f 6b 20 6c 69 6b 65 20 61 6e 20 69 6e 74 65 67  ok like an integ
2c20: 65 72 20 61 6e 64 20 74 6f 20 68 61 76 65 20 61  er and to have a
2c30: 0a 2a 2a 20 66 6c 6f 61 74 69 6e 67 20 70 6f 69  .** floating poi
2c40: 6e 74 20 76 61 6c 75 65 20 6f 66 20 72 56 61 6c  nt value of rVal
2c50: 75 65 2e 20 20 52 65 74 75 72 6e 20 74 72 75 65  ue.  Return true
2c60: 20 61 6e 64 20 73 65 74 20 2a 70 69 56 61 6c 75   and set *piValu
2c70: 65 20 74 6f 20 74 68 65 0a 2a 2a 20 69 6e 74 65  e to the.** inte
2c80: 67 65 72 20 76 61 6c 75 65 20 69 66 20 74 68 65  ger value if the
2c90: 20 73 74 72 69 6e 67 20 69 73 20 69 6e 20 72 61   string is in ra
2ca0: 6e 67 65 20 74 6f 20 62 65 20 61 6e 20 69 6e 74  nge to be an int
2cb0: 65 67 65 72 2e 20 20 4f 74 68 65 72 77 69 73 65  eger.  Otherwise
2cc0: 2c 0a 2a 2a 20 72 65 74 75 72 6e 20 66 61 6c 73  ,.** return fals
2cd0: 65 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74  e..*/.static int
2ce0: 20 61 6c 73 6f 41 6e 49 6e 74 28 4d 65 6d 20 2a   alsoAnInt(Mem *
2cf0: 70 52 65 63 2c 20 64 6f 75 62 6c 65 20 72 56 61  pRec, double rVa
2d00: 6c 75 65 2c 20 69 36 34 20 2a 70 69 56 61 6c 75  lue, i64 *piValu
2d10: 65 29 7b 0a 20 20 69 36 34 20 69 56 61 6c 75 65  e){.  i64 iValue
2d20: 20 3d 20 28 64 6f 75 62 6c 65 29 72 56 61 6c 75   = (double)rValu
2d30: 65 3b 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33  e;.  if( sqlite3
2d40: 52 65 61 6c 53 61 6d 65 41 73 49 6e 74 28 72 56  RealSameAsInt(rV
2d50: 61 6c 75 65 2c 69 56 61 6c 75 65 29 20 29 7b 0a  alue,iValue) ){.
2d60: 20 20 20 20 2a 70 69 56 61 6c 75 65 20 3d 20 69      *piValue = i
2d70: 56 61 6c 75 65 3b 0a 20 20 20 20 72 65 74 75 72  Value;.    retur
2d80: 6e 20 31 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72  n 1;.  }.  retur
2d90: 6e 20 30 3d 3d 73 71 6c 69 74 65 33 41 74 6f 69  n 0==sqlite3Atoi
2da0: 36 34 28 70 52 65 63 2d 3e 7a 2c 20 70 69 56 61  64(pRec->z, piVa
2db0: 6c 75 65 2c 20 70 52 65 63 2d 3e 6e 2c 20 70 52  lue, pRec->n, pR
2dc0: 65 63 2d 3e 65 6e 63 29 3b 0a 7d 0a 0a 2f 2a 0a  ec->enc);.}../*.
2dd0: 2a 2a 20 54 72 79 20 74 6f 20 63 6f 6e 76 65 72  ** Try to conver
2de0: 74 20 61 20 76 61 6c 75 65 20 69 6e 74 6f 20 61  t a value into a
2df0: 20 6e 75 6d 65 72 69 63 20 72 65 70 72 65 73 65   numeric represe
2e00: 6e 74 61 74 69 6f 6e 20 69 66 20 77 65 20 63 61  ntation if we ca
2e10: 6e 0a 2a 2a 20 64 6f 20 73 6f 20 77 69 74 68 6f  n.** do so witho
2e20: 75 74 20 6c 6f 73 73 20 6f 66 20 69 6e 66 6f 72  ut loss of infor
2e30: 6d 61 74 69 6f 6e 2e 20 20 49 6e 20 6f 74 68 65  mation.  In othe
2e40: 72 20 77 6f 72 64 73 2c 20 69 66 20 74 68 65 20  r words, if the 
2e50: 73 74 72 69 6e 67 0a 2a 2a 20 6c 6f 6f 6b 73 20  string.** looks 
2e60: 6c 69 6b 65 20 61 20 6e 75 6d 62 65 72 2c 20 63  like a number, c
2e70: 6f 6e 76 65 72 74 20 69 74 20 69 6e 74 6f 20 61  onvert it into a
2e80: 20 6e 75 6d 62 65 72 2e 20 20 49 66 20 69 74 20   number.  If it 
2e90: 64 6f 65 73 20 6e 6f 74 0a 2a 2a 20 6c 6f 6f 6b  does not.** look
2ea0: 20 6c 69 6b 65 20 61 20 6e 75 6d 62 65 72 2c 20   like a number, 
2eb0: 6c 65 61 76 65 20 69 74 20 61 6c 6f 6e 65 2e 0a  leave it alone..
2ec0: 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 62 54 72  **.** If the bTr
2ed0: 79 46 6f 72 49 6e 74 20 66 6c 61 67 20 69 73 20  yForInt flag is 
2ee0: 74 72 75 65 2c 20 74 68 65 6e 20 65 78 74 72 61  true, then extra
2ef0: 20 65 66 66 6f 72 74 20 69 73 20 6d 61 64 65 20   effort is made 
2f00: 74 6f 20 67 69 76 65 0a 2a 2a 20 61 6e 20 69 6e  to give.** an in
2f10: 74 65 67 65 72 20 72 65 70 72 65 73 65 6e 74 61  teger representa
2f20: 74 69 6f 6e 2e 20 20 53 74 72 69 6e 67 73 20 74  tion.  Strings t
2f30: 68 61 74 20 6c 6f 6f 6b 20 6c 69 6b 65 20 66 6c  hat look like fl
2f40: 6f 61 74 69 6e 67 20 70 6f 69 6e 74 0a 2a 2a 20  oating point.** 
2f50: 76 61 6c 75 65 73 20 62 75 74 20 77 68 69 63 68  values but which
2f60: 20 68 61 76 65 20 6e 6f 20 66 72 61 63 74 69 6f   have no fractio
2f70: 6e 61 6c 20 63 6f 6d 70 6f 6e 65 6e 74 20 28 65  nal component (e
2f80: 78 61 6d 70 6c 65 3a 20 27 34 38 2e 30 30 27 29  xample: '48.00')
2f90: 0a 2a 2a 20 77 69 6c 6c 20 68 61 76 65 20 61 20  .** will have a 
2fa0: 4d 45 4d 5f 49 6e 74 20 72 65 70 72 65 73 65 6e  MEM_Int represen
2fb0: 74 61 74 69 6f 6e 20 77 68 65 6e 20 62 54 72 79  tation when bTry
2fc0: 46 6f 72 49 6e 74 20 69 73 20 74 72 75 65 2e 0a  ForInt is true..
2fd0: 2a 2a 0a 2a 2a 20 49 66 20 62 54 72 79 46 6f 72  **.** If bTryFor
2fe0: 49 6e 74 20 69 73 20 66 61 6c 73 65 2c 20 74 68  Int is false, th
2ff0: 65 6e 20 69 66 20 74 68 65 20 69 6e 70 75 74 20  en if the input 
3000: 73 74 72 69 6e 67 20 63 6f 6e 74 61 69 6e 73 20  string contains 
3010: 61 20 64 65 63 69 6d 61 6c 0a 2a 2a 20 70 6f 69  a decimal.** poi
3020: 6e 74 20 6f 72 20 65 78 70 6f 6e 65 6e 74 69 61  nt or exponentia
3030: 6c 20 6e 6f 74 61 74 69 6f 6e 2c 20 74 68 65 20  l notation, the 
3040: 72 65 73 75 6c 74 20 69 73 20 6f 6e 6c 79 20 4d  result is only M
3050: 45 4d 5f 52 65 61 6c 2c 20 65 76 65 6e 0a 2a 2a  EM_Real, even.**
3060: 20 69 66 20 74 68 65 72 65 20 69 73 20 61 6e 20   if there is an 
3070: 65 78 61 63 74 20 69 6e 74 65 67 65 72 20 72 65  exact integer re
3080: 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66 20  presentation of 
3090: 74 68 65 20 71 75 61 6e 74 69 74 79 2e 0a 2a 2f  the quantity..*/
30a0: 0a 73 74 61 74 69 63 20 76 6f 69 64 20 61 70 70  .static void app
30b0: 6c 79 4e 75 6d 65 72 69 63 41 66 66 69 6e 69 74  lyNumericAffinit
30c0: 79 28 4d 65 6d 20 2a 70 52 65 63 2c 20 69 6e 74  y(Mem *pRec, int
30d0: 20 62 54 72 79 46 6f 72 49 6e 74 29 7b 0a 20 20   bTryForInt){.  
30e0: 64 6f 75 62 6c 65 20 72 56 61 6c 75 65 3b 0a 20  double rValue;. 
30f0: 20 75 38 20 65 6e 63 20 3d 20 70 52 65 63 2d 3e   u8 enc = pRec->
3100: 65 6e 63 3b 0a 20 20 69 6e 74 20 72 63 3b 0a 20  enc;.  int rc;. 
3110: 20 61 73 73 65 72 74 28 20 28 70 52 65 63 2d 3e   assert( (pRec->
3120: 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f 53 74 72  flags & (MEM_Str
3130: 7c 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 52 65 61  |MEM_Int|MEM_Rea
3140: 6c 7c 4d 45 4d 5f 49 6e 74 52 65 61 6c 29 29 3d  l|MEM_IntReal))=
3150: 3d 4d 45 4d 5f 53 74 72 20 29 3b 0a 20 20 72 63  =MEM_Str );.  rc
3160: 20 3d 20 73 71 6c 69 74 65 33 41 74 6f 46 28 70   = sqlite3AtoF(p
3170: 52 65 63 2d 3e 7a 2c 20 26 72 56 61 6c 75 65 2c  Rec->z, &rValue,
3180: 20 70 52 65 63 2d 3e 6e 2c 20 65 6e 63 29 3b 0a   pRec->n, enc);.
3190: 20 20 69 66 28 20 72 63 3c 3d 30 20 29 20 72 65    if( rc<=0 ) re
31a0: 74 75 72 6e 3b 0a 20 20 69 66 28 20 72 63 3d 3d  turn;.  if( rc==
31b0: 31 20 26 26 20 61 6c 73 6f 41 6e 49 6e 74 28 70  1 && alsoAnInt(p
31c0: 52 65 63 2c 20 72 56 61 6c 75 65 2c 20 26 70 52  Rec, rValue, &pR
31d0: 65 63 2d 3e 75 2e 69 29 20 29 7b 0a 20 20 20 20  ec->u.i) ){.    
31e0: 70 52 65 63 2d 3e 66 6c 61 67 73 20 7c 3d 20 4d  pRec->flags |= M
31f0: 45 4d 5f 49 6e 74 3b 0a 20 20 7d 65 6c 73 65 7b  EM_Int;.  }else{
3200: 0a 20 20 20 20 70 52 65 63 2d 3e 75 2e 72 20 3d  .    pRec->u.r =
3210: 20 72 56 61 6c 75 65 3b 0a 20 20 20 20 70 52 65   rValue;.    pRe
3220: 63 2d 3e 66 6c 61 67 73 20 7c 3d 20 4d 45 4d 5f  c->flags |= MEM_
3230: 52 65 61 6c 3b 0a 20 20 20 20 69 66 28 20 62 54  Real;.    if( bT
3240: 72 79 46 6f 72 49 6e 74 20 29 20 73 71 6c 69 74  ryForInt ) sqlit
3250: 65 33 56 64 62 65 49 6e 74 65 67 65 72 41 66 66  e3VdbeIntegerAff
3260: 69 6e 69 74 79 28 70 52 65 63 29 3b 0a 20 20 7d  inity(pRec);.  }
3270: 0a 20 20 2f 2a 20 54 45 58 54 2d 3e 4e 55 4d 45  .  /* TEXT->NUME
3280: 52 49 43 20 69 73 20 6d 61 6e 79 2d 3e 6f 6e 65  RIC is many->one
3290: 2e 20 20 48 65 6e 63 65 2c 20 69 74 20 69 73 20  .  Hence, it is 
32a0: 69 6d 70 6f 72 74 61 6e 74 20 74 6f 20 69 6e 76  important to inv
32b0: 61 6c 69 64 61 74 65 20 74 68 65 0a 20 20 2a 2a  alidate the.  **
32c0: 20 73 74 72 69 6e 67 20 72 65 70 72 65 73 65 6e   string represen
32d0: 74 61 74 69 6f 6e 20 61 66 74 65 72 20 63 6f 6d  tation after com
32e0: 70 75 74 69 6e 67 20 61 20 6e 75 6d 65 72 69 63  puting a numeric
32f0: 20 65 71 75 69 76 61 6c 65 6e 74 2c 20 62 65 63   equivalent, bec
3300: 61 75 73 65 20 74 68 65 0a 20 20 2a 2a 20 73 74  ause the.  ** st
3310: 72 69 6e 67 20 72 65 70 72 65 73 65 6e 74 61 74  ring representat
3320: 69 6f 6e 20 6d 69 67 68 74 20 6e 6f 74 20 62 65  ion might not be
3330: 20 74 68 65 20 63 61 6e 6f 6e 69 63 61 6c 20 72   the canonical r
3340: 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 66 6f  epresentation fo
3350: 72 20 74 68 65 0a 20 20 2a 2a 20 6e 75 6d 65 72  r the.  ** numer
3360: 69 63 20 76 61 6c 75 65 2e 20 20 54 69 63 6b 65  ic value.  Ticke
3370: 74 20 5b 33 34 33 36 33 34 39 34 32 64 64 35 34  t [343634942dd54
3380: 61 62 35 37 62 37 30 32 34 5d 20 32 30 31 38 2d  ab57b7024] 2018-
3390: 30 31 2d 33 31 2e 20 2a 2f 0a 20 20 70 52 65 63  01-31. */.  pRec
33a0: 2d 3e 66 6c 61 67 73 20 26 3d 20 7e 4d 45 4d 5f  ->flags &= ~MEM_
33b0: 53 74 72 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 50 72  Str;.}../*.** Pr
33c0: 6f 63 65 73 73 69 6e 67 20 69 73 20 64 65 74 65  ocessing is dete
33d0: 72 6d 69 6e 65 20 62 79 20 74 68 65 20 61 66 66  rmine by the aff
33e0: 69 6e 69 74 79 20 70 61 72 61 6d 65 74 65 72 3a  inity parameter:
33f0: 0a 2a 2a 0a 2a 2a 20 53 51 4c 49 54 45 5f 41 46  .**.** SQLITE_AF
3400: 46 5f 49 4e 54 45 47 45 52 3a 0a 2a 2a 20 53 51  F_INTEGER:.** SQ
3410: 4c 49 54 45 5f 41 46 46 5f 52 45 41 4c 3a 0a 2a  LITE_AFF_REAL:.*
3420: 2a 20 53 51 4c 49 54 45 5f 41 46 46 5f 4e 55 4d  * SQLITE_AFF_NUM
3430: 45 52 49 43 3a 0a 2a 2a 20 20 20 20 54 72 79 20  ERIC:.**    Try 
3440: 74 6f 20 63 6f 6e 76 65 72 74 20 70 52 65 63 20  to convert pRec 
3450: 74 6f 20 61 6e 20 69 6e 74 65 67 65 72 20 72 65  to an integer re
3460: 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f 72 20  presentation or 
3470: 61 20 0a 2a 2a 20 20 20 20 66 6c 6f 61 74 69 6e  a .**    floatin
3480: 67 2d 70 6f 69 6e 74 20 72 65 70 72 65 73 65 6e  g-point represen
3490: 74 61 74 69 6f 6e 20 69 66 20 61 6e 20 69 6e 74  tation if an int
34a0: 65 67 65 72 20 72 65 70 72 65 73 65 6e 74 61 74  eger representat
34b0: 69 6f 6e 0a 2a 2a 20 20 20 20 69 73 20 6e 6f 74  ion.**    is not
34c0: 20 70 6f 73 73 69 62 6c 65 2e 20 20 4e 6f 74 65   possible.  Note
34d0: 20 74 68 61 74 20 74 68 65 20 69 6e 74 65 67 65   that the intege
34e0: 72 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e  r representation
34f0: 20 69 73 0a 2a 2a 20 20 20 20 61 6c 77 61 79 73   is.**    always
3500: 20 70 72 65 66 65 72 72 65 64 2c 20 65 76 65 6e   preferred, even
3510: 20 69 66 20 74 68 65 20 61 66 66 69 6e 69 74 79   if the affinity
3520: 20 69 73 20 52 45 41 4c 2c 20 62 65 63 61 75 73   is REAL, becaus
3530: 65 0a 2a 2a 20 20 20 20 61 6e 20 69 6e 74 65 67  e.**    an integ
3540: 65 72 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f  er representatio
3550: 6e 20 69 73 20 6d 6f 72 65 20 73 70 61 63 65 20  n is more space 
3560: 65 66 66 69 63 69 65 6e 74 20 6f 6e 20 64 69 73  efficient on dis
3570: 6b 2e 0a 2a 2a 0a 2a 2a 20 53 51 4c 49 54 45 5f  k..**.** SQLITE_
3580: 41 46 46 5f 54 45 58 54 3a 0a 2a 2a 20 20 20 20  AFF_TEXT:.**    
3590: 43 6f 6e 76 65 72 74 20 70 52 65 63 20 74 6f 20  Convert pRec to 
35a0: 61 20 74 65 78 74 20 72 65 70 72 65 73 65 6e 74  a text represent
35b0: 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 53 51 4c  ation..**.** SQL
35c0: 49 54 45 5f 41 46 46 5f 42 4c 4f 42 3a 0a 2a 2a  ITE_AFF_BLOB:.**
35d0: 20 53 51 4c 49 54 45 5f 41 46 46 5f 4e 4f 4e 45   SQLITE_AFF_NONE
35e0: 3a 0a 2a 2a 20 20 20 20 4e 6f 2d 6f 70 2e 20 20  :.**    No-op.  
35f0: 70 52 65 63 20 69 73 20 75 6e 63 68 61 6e 67 65  pRec is unchange
3600: 64 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69  d..*/.static voi
3610: 64 20 61 70 70 6c 79 41 66 66 69 6e 69 74 79 28  d applyAffinity(
3620: 0a 20 20 4d 65 6d 20 2a 70 52 65 63 2c 20 20 20  .  Mem *pRec,   
3630: 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 76 61         /* The va
3640: 6c 75 65 20 74 6f 20 61 70 70 6c 79 20 61 66 66  lue to apply aff
3650: 69 6e 69 74 79 20 74 6f 20 2a 2f 0a 20 20 63 68  inity to */.  ch
3660: 61 72 20 61 66 66 69 6e 69 74 79 2c 20 20 20 20  ar affinity,    
3670: 20 20 2f 2a 20 54 68 65 20 61 66 66 69 6e 69 74    /* The affinit
3680: 79 20 74 6f 20 62 65 20 61 70 70 6c 69 65 64 20  y to be applied 
3690: 2a 2f 0a 20 20 75 38 20 65 6e 63 20 20 20 20 20  */.  u8 enc     
36a0: 20 20 20 20 20 20 20 20 20 2f 2a 20 55 73 65 20           /* Use 
36b0: 74 68 69 73 20 74 65 78 74 20 65 6e 63 6f 64 69  this text encodi
36c0: 6e 67 20 2a 2f 0a 29 7b 0a 20 20 69 66 28 20 61  ng */.){.  if( a
36d0: 66 66 69 6e 69 74 79 3e 3d 53 51 4c 49 54 45 5f  ffinity>=SQLITE_
36e0: 41 46 46 5f 4e 55 4d 45 52 49 43 20 29 7b 0a 20  AFF_NUMERIC ){. 
36f0: 20 20 20 61 73 73 65 72 74 28 20 61 66 66 69 6e     assert( affin
3700: 69 74 79 3d 3d 53 51 4c 49 54 45 5f 41 46 46 5f  ity==SQLITE_AFF_
3710: 49 4e 54 45 47 45 52 20 7c 7c 20 61 66 66 69 6e  INTEGER || affin
3720: 69 74 79 3d 3d 53 51 4c 49 54 45 5f 41 46 46 5f  ity==SQLITE_AFF_
3730: 52 45 41 4c 0a 20 20 20 20 20 20 20 20 20 20 20  REAL.           
3740: 20 20 7c 7c 20 61 66 66 69 6e 69 74 79 3d 3d 53    || affinity==S
3750: 51 4c 49 54 45 5f 41 46 46 5f 4e 55 4d 45 52 49  QLITE_AFF_NUMERI
3760: 43 20 29 3b 0a 20 20 20 20 69 66 28 20 28 70 52  C );.    if( (pR
3770: 65 63 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  ec->flags & MEM_
3780: 49 6e 74 29 3d 3d 30 20 29 7b 20 2f 2a 4f 50 54  Int)==0 ){ /*OPT
3790: 49 4d 49 5a 41 54 49 4f 4e 2d 49 46 2d 46 41 4c  IMIZATION-IF-FAL
37a0: 53 45 2a 2f 0a 20 20 20 20 20 20 69 66 28 20 28  SE*/.      if( (
37b0: 70 52 65 63 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pRec->flags & ME
37c0: 4d 5f 52 65 61 6c 29 3d 3d 30 20 29 7b 0a 20 20  M_Real)==0 ){.  
37d0: 20 20 20 20 20 20 69 66 28 20 70 52 65 63 2d 3e        if( pRec->
37e0: 66 6c 61 67 73 20 26 20 4d 45 4d 5f 53 74 72 20  flags & MEM_Str 
37f0: 29 20 61 70 70 6c 79 4e 75 6d 65 72 69 63 41 66  ) applyNumericAf
3800: 66 69 6e 69 74 79 28 70 52 65 63 2c 31 29 3b 0a  finity(pRec,1);.
3810: 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20        }else{.   
3820: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
3830: 49 6e 74 65 67 65 72 41 66 66 69 6e 69 74 79 28  IntegerAffinity(
3840: 70 52 65 63 29 3b 0a 20 20 20 20 20 20 7d 0a 20  pRec);.      }. 
3850: 20 20 20 7d 0a 20 20 7d 65 6c 73 65 20 69 66 28     }.  }else if(
3860: 20 61 66 66 69 6e 69 74 79 3d 3d 53 51 4c 49 54   affinity==SQLIT
3870: 45 5f 41 46 46 5f 54 45 58 54 20 29 7b 0a 20 20  E_AFF_TEXT ){.  
3880: 20 20 2f 2a 20 4f 6e 6c 79 20 61 74 74 65 6d 70    /* Only attemp
3890: 74 20 74 68 65 20 63 6f 6e 76 65 72 73 69 6f 6e  t the conversion
38a0: 20 74 6f 20 54 45 58 54 20 69 66 20 74 68 65 72   to TEXT if ther
38b0: 65 20 69 73 20 61 6e 20 69 6e 74 65 67 65 72 20  e is an integer 
38c0: 6f 72 20 72 65 61 6c 0a 20 20 20 20 2a 2a 20 72  or real.    ** r
38d0: 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 28 62  epresentation (b
38e0: 6c 6f 62 20 61 6e 64 20 4e 55 4c 4c 20 64 6f 20  lob and NULL do 
38f0: 6e 6f 74 20 67 65 74 20 63 6f 6e 76 65 72 74 65  not get converte
3900: 64 29 20 62 75 74 20 6e 6f 20 73 74 72 69 6e 67  d) but no string
3910: 0a 20 20 20 20 2a 2a 20 72 65 70 72 65 73 65 6e  .    ** represen
3920: 74 61 74 69 6f 6e 2e 20 20 49 74 20 77 6f 75 6c  tation.  It woul
3930: 64 20 62 65 20 68 61 72 6d 6c 65 73 73 20 74 6f  d be harmless to
3940: 20 72 65 70 65 61 74 20 74 68 65 20 63 6f 6e 76   repeat the conv
3950: 65 72 73 69 6f 6e 20 69 66 20 0a 20 20 20 20 2a  ersion if .    *
3960: 2a 20 74 68 65 72 65 20 69 73 20 61 6c 72 65 61  * there is alrea
3970: 64 79 20 61 20 73 74 72 69 6e 67 20 72 65 70 2c  dy a string rep,
3980: 20 62 75 74 20 69 74 20 69 73 20 70 6f 69 6e 74   but it is point
3990: 6c 65 73 73 20 74 6f 20 77 61 73 74 65 20 74 68  less to waste th
39a0: 6f 73 65 0a 20 20 20 20 2a 2a 20 43 50 55 20 63  ose.    ** CPU c
39b0: 79 63 6c 65 73 2e 20 2a 2f 0a 20 20 20 20 69 66  ycles. */.    if
39c0: 28 20 30 3d 3d 28 70 52 65 63 2d 3e 66 6c 61 67  ( 0==(pRec->flag
39d0: 73 26 4d 45 4d 5f 53 74 72 29 20 29 7b 20 2f 2a  s&MEM_Str) ){ /*
39e0: 4f 50 54 49 4d 49 5a 41 54 49 4f 4e 2d 49 46 2d  OPTIMIZATION-IF-
39f0: 46 41 4c 53 45 2a 2f 0a 20 20 20 20 20 20 69 66  FALSE*/.      if
3a00: 28 20 28 70 52 65 63 2d 3e 66 6c 61 67 73 26 28  ( (pRec->flags&(
3a10: 4d 45 4d 5f 52 65 61 6c 7c 4d 45 4d 5f 49 6e 74  MEM_Real|MEM_Int
3a20: 7c 4d 45 4d 5f 49 6e 74 52 65 61 6c 29 29 20 29  |MEM_IntReal)) )
3a30: 7b 0a 20 20 20 20 20 20 20 20 74 65 73 74 63 61  {.        testca
3a40: 73 65 28 20 70 52 65 63 2d 3e 66 6c 61 67 73 20  se( pRec->flags 
3a50: 26 20 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 20  & MEM_Int );.   
3a60: 20 20 20 20 20 74 65 73 74 63 61 73 65 28 20 70       testcase( p
3a70: 52 65 63 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  Rec->flags & MEM
3a80: 5f 52 65 61 6c 20 29 3b 0a 20 20 20 20 20 20 20  _Real );.       
3a90: 20 74 65 73 74 63 61 73 65 28 20 70 52 65 63 2d   testcase( pRec-
3aa0: 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74  >flags & MEM_Int
3ab0: 52 65 61 6c 20 29 3b 0a 20 20 20 20 20 20 20 20  Real );.        
3ac0: 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 74  sqlite3VdbeMemSt
3ad0: 72 69 6e 67 69 66 79 28 70 52 65 63 2c 20 65 6e  ringify(pRec, en
3ae0: 63 2c 20 31 29 3b 0a 20 20 20 20 20 20 7d 0a 20  c, 1);.      }. 
3af0: 20 20 20 7d 0a 20 20 20 20 70 52 65 63 2d 3e 66     }.    pRec->f
3b00: 6c 61 67 73 20 26 3d 20 7e 28 4d 45 4d 5f 52 65  lags &= ~(MEM_Re
3b10: 61 6c 7c 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 49  al|MEM_Int|MEM_I
3b20: 6e 74 52 65 61 6c 29 3b 0a 20 20 7d 0a 7d 0a 0a  ntReal);.  }.}..
3b30: 2f 2a 0a 2a 2a 20 54 72 79 20 74 6f 20 63 6f 6e  /*.** Try to con
3b40: 76 65 72 74 20 74 68 65 20 74 79 70 65 20 6f 66  vert the type of
3b50: 20 61 20 66 75 6e 63 74 69 6f 6e 20 61 72 67 75   a function argu
3b60: 6d 65 6e 74 20 6f 72 20 61 20 72 65 73 75 6c 74  ment or a result
3b70: 20 63 6f 6c 75 6d 6e 0a 2a 2a 20 69 6e 74 6f 20   column.** into 
3b80: 61 20 6e 75 6d 65 72 69 63 20 72 65 70 72 65 73  a numeric repres
3b90: 65 6e 74 61 74 69 6f 6e 2e 20 20 55 73 65 20 65  entation.  Use e
3ba0: 69 74 68 65 72 20 49 4e 54 45 47 45 52 20 6f 72  ither INTEGER or
3bb0: 20 52 45 41 4c 20 77 68 69 63 68 65 76 65 72 0a   REAL whichever.
3bc0: 2a 2a 20 69 73 20 61 70 70 72 6f 70 72 69 61 74  ** is appropriat
3bd0: 65 2e 20 20 42 75 74 20 6f 6e 6c 79 20 64 6f 20  e.  But only do 
3be0: 74 68 65 20 63 6f 6e 76 65 72 73 69 6f 6e 20 69  the conversion i
3bf0: 66 20 69 74 20 69 73 20 70 6f 73 73 69 62 6c 65  f it is possible
3c00: 20 77 69 74 68 6f 75 74 0a 2a 2a 20 6c 6f 73 73   without.** loss
3c10: 20 6f 66 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20   of information 
3c20: 61 6e 64 20 72 65 74 75 72 6e 20 74 68 65 20 72  and return the r
3c30: 65 76 69 73 65 64 20 74 79 70 65 20 6f 66 20 74  evised type of t
3c40: 68 65 20 61 72 67 75 6d 65 6e 74 2e 0a 2a 2f 0a  he argument..*/.
3c50: 69 6e 74 20 73 71 6c 69 74 65 33 5f 76 61 6c 75  int sqlite3_valu
3c60: 65 5f 6e 75 6d 65 72 69 63 5f 74 79 70 65 28 73  e_numeric_type(s
3c70: 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 70 56  qlite3_value *pV
3c80: 61 6c 29 7b 0a 20 20 69 6e 74 20 65 54 79 70 65  al){.  int eType
3c90: 20 3d 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65   = sqlite3_value
3ca0: 5f 74 79 70 65 28 70 56 61 6c 29 3b 0a 20 20 69  _type(pVal);.  i
3cb0: 66 28 20 65 54 79 70 65 3d 3d 53 51 4c 49 54 45  f( eType==SQLITE
3cc0: 5f 54 45 58 54 20 29 7b 0a 20 20 20 20 4d 65 6d  _TEXT ){.    Mem
3cd0: 20 2a 70 4d 65 6d 20 3d 20 28 4d 65 6d 2a 29 70   *pMem = (Mem*)p
3ce0: 56 61 6c 3b 0a 20 20 20 20 61 70 70 6c 79 4e 75  Val;.    applyNu
3cf0: 6d 65 72 69 63 41 66 66 69 6e 69 74 79 28 70 4d  mericAffinity(pM
3d00: 65 6d 2c 20 30 29 3b 0a 20 20 20 20 65 54 79 70  em, 0);.    eTyp
3d10: 65 20 3d 20 73 71 6c 69 74 65 33 5f 76 61 6c 75  e = sqlite3_valu
3d20: 65 5f 74 79 70 65 28 70 56 61 6c 29 3b 0a 20 20  e_type(pVal);.  
3d30: 7d 0a 20 20 72 65 74 75 72 6e 20 65 54 79 70 65  }.  return eType
3d40: 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 45 78 70 6f 72  ;.}../*.** Expor
3d50: 74 65 64 20 76 65 72 73 69 6f 6e 20 6f 66 20 61  ted version of a
3d60: 70 70 6c 79 41 66 66 69 6e 69 74 79 28 29 2e 20  pplyAffinity(). 
3d70: 54 68 69 73 20 6f 6e 65 20 77 6f 72 6b 73 20 6f  This one works o
3d80: 6e 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a  n sqlite3_value*
3d90: 2c 20 0a 2a 2a 20 6e 6f 74 20 74 68 65 20 69 6e  , .** not the in
3da0: 74 65 72 6e 61 6c 20 4d 65 6d 2a 20 74 79 70 65  ternal Mem* type
3db0: 2e 0a 2a 2f 0a 76 6f 69 64 20 73 71 6c 69 74 65  ..*/.void sqlite
3dc0: 33 56 61 6c 75 65 41 70 70 6c 79 41 66 66 69 6e  3ValueApplyAffin
3dd0: 69 74 79 28 0a 20 20 73 71 6c 69 74 65 33 5f 76  ity(.  sqlite3_v
3de0: 61 6c 75 65 20 2a 70 56 61 6c 2c 20 0a 20 20 75  alue *pVal, .  u
3df0: 38 20 61 66 66 69 6e 69 74 79 2c 20 0a 20 20 75  8 affinity, .  u
3e00: 38 20 65 6e 63 0a 29 7b 0a 20 20 61 70 70 6c 79  8 enc.){.  apply
3e10: 41 66 66 69 6e 69 74 79 28 28 4d 65 6d 20 2a 29  Affinity((Mem *)
3e20: 70 56 61 6c 2c 20 61 66 66 69 6e 69 74 79 2c 20  pVal, affinity, 
3e30: 65 6e 63 29 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 70  enc);.}../*.** p
3e40: 4d 65 6d 20 63 75 72 72 65 6e 74 6c 79 20 6f 6e  Mem currently on
3e50: 6c 79 20 68 6f 6c 64 73 20 61 20 73 74 72 69 6e  ly holds a strin
3e60: 67 20 74 79 70 65 20 28 6f 72 20 6d 61 79 62 65  g type (or maybe
3e70: 20 61 20 42 4c 4f 42 20 74 68 61 74 20 77 65 20   a BLOB that we 
3e80: 63 61 6e 0a 2a 2a 20 69 6e 74 65 72 70 72 65 74  can.** interpret
3e90: 20 61 73 20 61 20 73 74 72 69 6e 67 20 69 66 20   as a string if 
3ea0: 77 65 20 77 61 6e 74 20 74 6f 29 2e 20 20 43 6f  we want to).  Co
3eb0: 6d 70 75 74 65 20 69 74 73 20 63 6f 72 72 65 73  mpute its corres
3ec0: 70 6f 6e 64 69 6e 67 0a 2a 2a 20 6e 75 6d 65 72  ponding.** numer
3ed0: 69 63 20 74 79 70 65 2c 20 69 66 20 68 61 73 20  ic type, if has 
3ee0: 6f 6e 65 2e 20 20 53 65 74 20 74 68 65 20 70 4d  one.  Set the pM
3ef0: 65 6d 2d 3e 75 2e 72 20 61 6e 64 20 70 4d 65 6d  em->u.r and pMem
3f00: 2d 3e 75 2e 69 20 66 69 65 6c 64 73 0a 2a 2a 20  ->u.i fields.** 
3f10: 61 63 63 6f 72 64 69 6e 67 6c 79 2e 0a 2a 2f 0a  accordingly..*/.
3f20: 73 74 61 74 69 63 20 75 31 36 20 53 51 4c 49 54  static u16 SQLIT
3f30: 45 5f 4e 4f 49 4e 4c 49 4e 45 20 63 6f 6d 70 75  E_NOINLINE compu
3f40: 74 65 4e 75 6d 65 72 69 63 54 79 70 65 28 4d 65  teNumericType(Me
3f50: 6d 20 2a 70 4d 65 6d 29 7b 0a 20 20 69 6e 74 20  m *pMem){.  int 
3f60: 72 63 3b 0a 20 20 73 71 6c 69 74 65 33 5f 69 6e  rc;.  sqlite3_in
3f70: 74 36 34 20 69 78 3b 0a 20 20 61 73 73 65 72 74  t64 ix;.  assert
3f80: 28 20 28 70 4d 65 6d 2d 3e 66 6c 61 67 73 20 26  ( (pMem->flags &
3f90: 20 28 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 52 65   (MEM_Int|MEM_Re
3fa0: 61 6c 7c 4d 45 4d 5f 49 6e 74 52 65 61 6c 29 29  al|MEM_IntReal))
3fb0: 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  ==0 );.  assert(
3fc0: 20 28 70 4d 65 6d 2d 3e 66 6c 61 67 73 20 26 20   (pMem->flags & 
3fd0: 28 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f 42 6c 6f  (MEM_Str|MEM_Blo
3fe0: 62 29 29 21 3d 30 20 29 3b 0a 20 20 45 78 70 61  b))!=0 );.  Expa
3ff0: 6e 64 42 6c 6f 62 28 70 4d 65 6d 29 3b 0a 20 20  ndBlob(pMem);.  
4000: 72 63 20 3d 20 73 71 6c 69 74 65 33 41 74 6f 46  rc = sqlite3AtoF
4010: 28 70 4d 65 6d 2d 3e 7a 2c 20 26 70 4d 65 6d 2d  (pMem->z, &pMem-
4020: 3e 75 2e 72 2c 20 70 4d 65 6d 2d 3e 6e 2c 20 70  >u.r, pMem->n, p
4030: 4d 65 6d 2d 3e 65 6e 63 29 3b 0a 20 20 69 66 28  Mem->enc);.  if(
4040: 20 72 63 3c 3d 30 20 29 7b 0a 20 20 20 20 69 66   rc<=0 ){.    if
4050: 28 20 72 63 3d 3d 30 20 26 26 20 73 71 6c 69 74  ( rc==0 && sqlit
4060: 65 33 41 74 6f 69 36 34 28 70 4d 65 6d 2d 3e 7a  e3Atoi64(pMem->z
4070: 2c 20 26 69 78 2c 20 70 4d 65 6d 2d 3e 6e 2c 20  , &ix, pMem->n, 
4080: 70 4d 65 6d 2d 3e 65 6e 63 29 3c 3d 31 20 29 7b  pMem->enc)<=1 ){
4090: 0a 20 20 20 20 20 20 70 4d 65 6d 2d 3e 75 2e 69  .      pMem->u.i
40a0: 20 3d 20 69 78 3b 0a 20 20 20 20 20 20 72 65 74   = ix;.      ret
40b0: 75 72 6e 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20 20  urn MEM_Int;.   
40c0: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 72 65   }else{.      re
40d0: 74 75 72 6e 20 4d 45 4d 5f 52 65 61 6c 3b 0a 20  turn MEM_Real;. 
40e0: 20 20 20 7d 0a 20 20 7d 65 6c 73 65 20 69 66 28     }.  }else if(
40f0: 20 72 63 3d 3d 31 20 26 26 20 73 71 6c 69 74 65   rc==1 && sqlite
4100: 33 41 74 6f 69 36 34 28 70 4d 65 6d 2d 3e 7a 2c  3Atoi64(pMem->z,
4110: 20 26 69 78 2c 20 70 4d 65 6d 2d 3e 6e 2c 20 70   &ix, pMem->n, p
4120: 4d 65 6d 2d 3e 65 6e 63 29 3d 3d 30 20 29 7b 0a  Mem->enc)==0 ){.
4130: 20 20 20 20 70 4d 65 6d 2d 3e 75 2e 69 20 3d 20      pMem->u.i = 
4140: 69 78 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 4d  ix;.    return M
4150: 45 4d 5f 49 6e 74 3b 0a 20 20 7d 0a 20 20 72 65  EM_Int;.  }.  re
4160: 74 75 72 6e 20 4d 45 4d 5f 52 65 61 6c 3b 0a 7d  turn MEM_Real;.}
4170: 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74  ../*.** Return t
4180: 68 65 20 6e 75 6d 65 72 69 63 20 74 79 70 65 20  he numeric type 
4190: 66 6f 72 20 70 4d 65 6d 2c 20 65 69 74 68 65 72  for pMem, either
41a0: 20 4d 45 4d 5f 49 6e 74 20 6f 72 20 4d 45 4d 5f   MEM_Int or MEM_
41b0: 52 65 61 6c 20 6f 72 20 62 6f 74 68 20 6f 72 0a  Real or both or.
41c0: 2a 2a 20 6e 6f 6e 65 2e 20 20 0a 2a 2a 0a 2a 2a  ** none.  .**.**
41d0: 20 55 6e 6c 69 6b 65 20 61 70 70 6c 79 4e 75 6d   Unlike applyNum
41e0: 65 72 69 63 41 66 66 69 6e 69 74 79 28 29 2c 20  ericAffinity(), 
41f0: 74 68 69 73 20 72 6f 75 74 69 6e 65 20 64 6f 65  this routine doe
4200: 73 20 6e 6f 74 20 6d 6f 64 69 66 79 20 70 4d 65  s not modify pMe
4210: 6d 2d 3e 66 6c 61 67 73 2e 0a 2a 2a 20 42 75 74  m->flags..** But
4220: 20 69 74 20 64 6f 65 73 20 73 65 74 20 70 4d 65   it does set pMe
4230: 6d 2d 3e 75 2e 72 20 61 6e 64 20 70 4d 65 6d 2d  m->u.r and pMem-
4240: 3e 75 2e 69 20 61 70 70 72 6f 70 72 69 61 74 65  >u.i appropriate
4250: 6c 79 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 75 31  ly..*/.static u1
4260: 36 20 6e 75 6d 65 72 69 63 54 79 70 65 28 4d 65  6 numericType(Me
4270: 6d 20 2a 70 4d 65 6d 29 7b 0a 20 20 69 66 28 20  m *pMem){.  if( 
4280: 70 4d 65 6d 2d 3e 66 6c 61 67 73 20 26 20 28 4d  pMem->flags & (M
4290: 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 52 65 61 6c 7c  EM_Int|MEM_Real|
42a0: 4d 45 4d 5f 49 6e 74 52 65 61 6c 29 20 29 7b 0a  MEM_IntReal) ){.
42b0: 20 20 20 20 74 65 73 74 63 61 73 65 28 20 70 4d      testcase( pM
42c0: 65 6d 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  em->flags & MEM_
42d0: 49 6e 74 20 29 3b 0a 20 20 20 20 74 65 73 74 63  Int );.    testc
42e0: 61 73 65 28 20 70 4d 65 6d 2d 3e 66 6c 61 67 73  ase( pMem->flags
42f0: 20 26 20 4d 45 4d 5f 52 65 61 6c 20 29 3b 0a 20   & MEM_Real );. 
4300: 20 20 20 74 65 73 74 63 61 73 65 28 20 70 4d 65     testcase( pMe
4310: 6d 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49  m->flags & MEM_I
4320: 6e 74 52 65 61 6c 20 29 3b 0a 20 20 20 20 72 65  ntReal );.    re
4330: 74 75 72 6e 20 70 4d 65 6d 2d 3e 66 6c 61 67 73  turn pMem->flags
4340: 20 26 20 28 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f   & (MEM_Int|MEM_
4350: 52 65 61 6c 7c 4d 45 4d 5f 49 6e 74 52 65 61 6c  Real|MEM_IntReal
4360: 29 3b 0a 20 20 7d 0a 20 20 69 66 28 20 70 4d 65  );.  }.  if( pMe
4370: 6d 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f  m->flags & (MEM_
4380: 53 74 72 7c 4d 45 4d 5f 42 6c 6f 62 29 20 29 7b  Str|MEM_Blob) ){
4390: 0a 20 20 20 20 74 65 73 74 63 61 73 65 28 20 70  .    testcase( p
43a0: 4d 65 6d 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  Mem->flags & MEM
43b0: 5f 53 74 72 20 29 3b 0a 20 20 20 20 74 65 73 74  _Str );.    test
43c0: 63 61 73 65 28 20 70 4d 65 6d 2d 3e 66 6c 61 67  case( pMem->flag
43d0: 73 20 26 20 4d 45 4d 5f 42 6c 6f 62 20 29 3b 0a  s & MEM_Blob );.
43e0: 20 20 20 20 72 65 74 75 72 6e 20 63 6f 6d 70 75      return compu
43f0: 74 65 4e 75 6d 65 72 69 63 54 79 70 65 28 70 4d  teNumericType(pM
4400: 65 6d 29 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72  em);.  }.  retur
4410: 6e 20 30 3b 0a 7d 0a 0a 23 69 66 64 65 66 20 53  n 0;.}..#ifdef S
4420: 51 4c 49 54 45 5f 44 45 42 55 47 0a 2f 2a 0a 2a  QLITE_DEBUG./*.*
4430: 2a 20 57 72 69 74 65 20 61 20 6e 69 63 65 20 73  * Write a nice s
4440: 74 72 69 6e 67 20 72 65 70 72 65 73 65 6e 74 61  tring representa
4450: 74 69 6f 6e 20 6f 66 20 74 68 65 20 63 6f 6e 74  tion of the cont
4460: 65 6e 74 73 20 6f 66 20 63 65 6c 6c 20 70 4d 65  ents of cell pMe
4470: 6d 0a 2a 2a 20 69 6e 74 6f 20 62 75 66 66 65 72  m.** into buffer
4480: 20 7a 42 75 66 2c 20 6c 65 6e 67 74 68 20 6e 42   zBuf, length nB
4490: 75 66 2e 0a 2a 2f 0a 76 6f 69 64 20 73 71 6c 69  uf..*/.void sqli
44a0: 74 65 33 56 64 62 65 4d 65 6d 50 72 65 74 74 79  te3VdbeMemPretty
44b0: 50 72 69 6e 74 28 4d 65 6d 20 2a 70 4d 65 6d 2c  Print(Mem *pMem,
44c0: 20 63 68 61 72 20 2a 7a 42 75 66 29 7b 0a 20 20   char *zBuf){.  
44d0: 63 68 61 72 20 2a 7a 43 73 72 20 3d 20 7a 42 75  char *zCsr = zBu
44e0: 66 3b 0a 20 20 69 6e 74 20 66 20 3d 20 70 4d 65  f;.  int f = pMe
44f0: 6d 2d 3e 66 6c 61 67 73 3b 0a 0a 20 20 73 74 61  m->flags;..  sta
4500: 74 69 63 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  tic const char *
4510: 63 6f 6e 73 74 20 65 6e 63 6e 61 6d 65 73 5b 5d  const encnames[]
4520: 20 3d 20 7b 22 28 58 29 22 2c 20 22 28 38 29 22   = {"(X)", "(8)"
4530: 2c 20 22 28 31 36 4c 45 29 22 2c 20 22 28 31 36  , "(16LE)", "(16
4540: 42 45 29 22 7d 3b 0a 0a 20 20 69 66 28 20 66 26  BE)"};..  if( f&
4550: 4d 45 4d 5f 42 6c 6f 62 20 29 7b 0a 20 20 20 20  MEM_Blob ){.    
4560: 69 6e 74 20 69 3b 0a 20 20 20 20 63 68 61 72 20  int i;.    char 
4570: 63 3b 0a 20 20 20 20 69 66 28 20 66 20 26 20 4d  c;.    if( f & M
4580: 45 4d 5f 44 79 6e 20 29 7b 0a 20 20 20 20 20 20  EM_Dyn ){.      
4590: 63 20 3d 20 27 7a 27 3b 0a 20 20 20 20 20 20 61  c = 'z';.      a
45a0: 73 73 65 72 74 28 20 28 66 20 26 20 28 4d 45 4d  ssert( (f & (MEM
45b0: 5f 53 74 61 74 69 63 7c 4d 45 4d 5f 45 70 68 65  _Static|MEM_Ephe
45c0: 6d 29 29 3d 3d 30 20 29 3b 0a 20 20 20 20 7d 65  m))==0 );.    }e
45d0: 6c 73 65 20 69 66 28 20 66 20 26 20 4d 45 4d 5f  lse if( f & MEM_
45e0: 53 74 61 74 69 63 20 29 7b 0a 20 20 20 20 20 20  Static ){.      
45f0: 63 20 3d 20 27 74 27 3b 0a 20 20 20 20 20 20 61  c = 't';.      a
4600: 73 73 65 72 74 28 20 28 66 20 26 20 28 4d 45 4d  ssert( (f & (MEM
4610: 5f 44 79 6e 7c 4d 45 4d 5f 45 70 68 65 6d 29 29  _Dyn|MEM_Ephem))
4620: 3d 3d 30 20 29 3b 0a 20 20 20 20 7d 65 6c 73 65  ==0 );.    }else
4630: 20 69 66 28 20 66 20 26 20 4d 45 4d 5f 45 70 68   if( f & MEM_Eph
4640: 65 6d 20 29 7b 0a 20 20 20 20 20 20 63 20 3d 20  em ){.      c = 
4650: 27 65 27 3b 0a 20 20 20 20 20 20 61 73 73 65 72  'e';.      asser
4660: 74 28 20 28 66 20 26 20 28 4d 45 4d 5f 53 74 61  t( (f & (MEM_Sta
4670: 74 69 63 7c 4d 45 4d 5f 44 79 6e 29 29 3d 3d 30  tic|MEM_Dyn))==0
4680: 20 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20   );.    }else{. 
4690: 20 20 20 20 20 63 20 3d 20 27 73 27 3b 0a 20 20       c = 's';.  
46a0: 20 20 7d 0a 20 20 20 20 2a 28 7a 43 73 72 2b 2b    }.    *(zCsr++
46b0: 29 20 3d 20 63 3b 0a 20 20 20 20 2a 28 7a 43 73  ) = c;.    *(zCs
46c0: 72 2b 2b 29 20 3d 20 27 78 27 3b 0a 20 20 20 20  r++) = 'x';.    
46d0: 73 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74 66  sqlite3_snprintf
46e0: 28 31 30 30 2c 20 7a 43 73 72 2c 20 22 25 64 5b  (100, zCsr, "%d[
46f0: 22 2c 20 70 4d 65 6d 2d 3e 6e 29 3b 0a 20 20 20  ", pMem->n);.   
4700: 20 7a 43 73 72 20 2b 3d 20 73 71 6c 69 74 65 33   zCsr += sqlite3
4710: 53 74 72 6c 65 6e 33 30 28 7a 43 73 72 29 3b 0a  Strlen30(zCsr);.
4720: 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 32      for(i=0; i<2
4730: 35 20 26 26 20 69 3c 70 4d 65 6d 2d 3e 6e 3b 20  5 && i<pMem->n; 
4740: 69 2b 2b 29 7b 0a 20 20 20 20 20 20 73 71 6c 69  i++){.      sqli
4750: 74 65 33 5f 73 6e 70 72 69 6e 74 66 28 31 30 30  te3_snprintf(100
4760: 2c 20 7a 43 73 72 2c 20 22 25 30 32 58 22 2c 20  , zCsr, "%02X", 
4770: 28 28 69 6e 74 29 70 4d 65 6d 2d 3e 7a 5b 69 5d  ((int)pMem->z[i]
4780: 20 26 20 30 78 46 46 29 29 3b 0a 20 20 20 20 20   & 0xFF));.     
4790: 20 7a 43 73 72 20 2b 3d 20 73 71 6c 69 74 65 33   zCsr += sqlite3
47a0: 53 74 72 6c 65 6e 33 30 28 7a 43 73 72 29 3b 0a  Strlen30(zCsr);.
47b0: 20 20 20 20 7d 0a 20 20 20 20 2a 7a 43 73 72 2b      }.    *zCsr+
47c0: 2b 20 3d 20 27 7c 27 3b 0a 20 20 20 20 66 6f 72  + = '|';.    for
47d0: 28 69 3d 30 3b 20 69 3c 32 35 20 26 26 20 69 3c  (i=0; i<25 && i<
47e0: 70 4d 65 6d 2d 3e 6e 3b 20 69 2b 2b 29 7b 0a 20  pMem->n; i++){. 
47f0: 20 20 20 20 20 63 68 61 72 20 7a 20 3d 20 70 4d       char z = pM
4800: 65 6d 2d 3e 7a 5b 69 5d 3b 0a 20 20 20 20 20 20  em->z[i];.      
4810: 69 66 28 20 7a 3c 33 32 20 7c 7c 20 7a 3e 31 32  if( z<32 || z>12
4820: 36 20 29 20 2a 7a 43 73 72 2b 2b 20 3d 20 27 2e  6 ) *zCsr++ = '.
4830: 27 3b 0a 20 20 20 20 20 20 65 6c 73 65 20 2a 7a  ';.      else *z
4840: 43 73 72 2b 2b 20 3d 20 7a 3b 0a 20 20 20 20 7d  Csr++ = z;.    }
4850: 0a 20 20 20 20 2a 28 7a 43 73 72 2b 2b 29 20 3d  .    *(zCsr++) =
4860: 20 27 5d 27 3b 0a 20 20 20 20 69 66 28 20 66 20   ']';.    if( f 
4870: 26 20 4d 45 4d 5f 5a 65 72 6f 20 29 7b 0a 20 20  & MEM_Zero ){.  
4880: 20 20 20 20 73 71 6c 69 74 65 33 5f 73 6e 70 72      sqlite3_snpr
4890: 69 6e 74 66 28 31 30 30 2c 20 7a 43 73 72 2c 22  intf(100, zCsr,"
48a0: 2b 25 64 7a 22 2c 70 4d 65 6d 2d 3e 75 2e 6e 5a  +%dz",pMem->u.nZ
48b0: 65 72 6f 29 3b 0a 20 20 20 20 20 20 7a 43 73 72  ero);.      zCsr
48c0: 20 2b 3d 20 73 71 6c 69 74 65 33 53 74 72 6c 65   += sqlite3Strle
48d0: 6e 33 30 28 7a 43 73 72 29 3b 0a 20 20 20 20 7d  n30(zCsr);.    }
48e0: 0a 20 20 20 20 2a 7a 43 73 72 20 3d 20 27 5c 30  .    *zCsr = '\0
48f0: 27 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 66  ';.  }else if( f
4900: 20 26 20 4d 45 4d 5f 53 74 72 20 29 7b 0a 20 20   & MEM_Str ){.  
4910: 20 20 69 6e 74 20 6a 2c 20 6b 3b 0a 20 20 20 20    int j, k;.    
4920: 7a 42 75 66 5b 30 5d 20 3d 20 27 20 27 3b 0a 20  zBuf[0] = ' ';. 
4930: 20 20 20 69 66 28 20 66 20 26 20 4d 45 4d 5f 44     if( f & MEM_D
4940: 79 6e 20 29 7b 0a 20 20 20 20 20 20 7a 42 75 66  yn ){.      zBuf
4950: 5b 31 5d 20 3d 20 27 7a 27 3b 0a 20 20 20 20 20  [1] = 'z';.     
4960: 20 61 73 73 65 72 74 28 20 28 66 20 26 20 28 4d   assert( (f & (M
4970: 45 4d 5f 53 74 61 74 69 63 7c 4d 45 4d 5f 45 70  EM_Static|MEM_Ep
4980: 68 65 6d 29 29 3d 3d 30 20 29 3b 0a 20 20 20 20  hem))==0 );.    
4990: 7d 65 6c 73 65 20 69 66 28 20 66 20 26 20 4d 45  }else if( f & ME
49a0: 4d 5f 53 74 61 74 69 63 20 29 7b 0a 20 20 20 20  M_Static ){.    
49b0: 20 20 7a 42 75 66 5b 31 5d 20 3d 20 27 74 27 3b    zBuf[1] = 't';
49c0: 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 28  .      assert( (
49d0: 66 20 26 20 28 4d 45 4d 5f 44 79 6e 7c 4d 45 4d  f & (MEM_Dyn|MEM
49e0: 5f 45 70 68 65 6d 29 29 3d 3d 30 20 29 3b 0a 20  _Ephem))==0 );. 
49f0: 20 20 20 7d 65 6c 73 65 20 69 66 28 20 66 20 26     }else if( f &
4a00: 20 4d 45 4d 5f 45 70 68 65 6d 20 29 7b 0a 20 20   MEM_Ephem ){.  
4a10: 20 20 20 20 7a 42 75 66 5b 31 5d 20 3d 20 27 65      zBuf[1] = 'e
4a20: 27 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  ';.      assert(
4a30: 20 28 66 20 26 20 28 4d 45 4d 5f 53 74 61 74 69   (f & (MEM_Stati
4a40: 63 7c 4d 45 4d 5f 44 79 6e 29 29 3d 3d 30 20 29  c|MEM_Dyn))==0 )
4a50: 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20  ;.    }else{.   
4a60: 20 20 20 7a 42 75 66 5b 31 5d 20 3d 20 27 73 27     zBuf[1] = 's'
4a70: 3b 0a 20 20 20 20 7d 0a 20 20 20 20 6b 20 3d 20  ;.    }.    k = 
4a80: 32 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 73  2;.    sqlite3_s
4a90: 6e 70 72 69 6e 74 66 28 31 30 30 2c 20 26 7a 42  nprintf(100, &zB
4aa0: 75 66 5b 6b 5d 2c 20 22 25 64 22 2c 20 70 4d 65  uf[k], "%d", pMe
4ab0: 6d 2d 3e 6e 29 3b 0a 20 20 20 20 6b 20 2b 3d 20  m->n);.    k += 
4ac0: 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28  sqlite3Strlen30(
4ad0: 26 7a 42 75 66 5b 6b 5d 29 3b 0a 20 20 20 20 7a  &zBuf[k]);.    z
4ae0: 42 75 66 5b 6b 2b 2b 5d 20 3d 20 27 5b 27 3b 0a  Buf[k++] = '[';.
4af0: 20 20 20 20 66 6f 72 28 6a 3d 30 3b 20 6a 3c 32      for(j=0; j<2
4b00: 35 20 26 26 20 6a 3c 70 4d 65 6d 2d 3e 6e 3b 20  5 && j<pMem->n; 
4b10: 6a 2b 2b 29 7b 0a 20 20 20 20 20 20 75 38 20 63  j++){.      u8 c
4b20: 20 3d 20 70 4d 65 6d 2d 3e 7a 5b 6a 5d 3b 0a 20   = pMem->z[j];. 
4b30: 20 20 20 20 20 69 66 28 20 63 3e 3d 30 78 32 30       if( c>=0x20
4b40: 20 26 26 20 63 3c 30 78 37 66 20 29 7b 0a 20 20   && c<0x7f ){.  
4b50: 20 20 20 20 20 20 7a 42 75 66 5b 6b 2b 2b 5d 20        zBuf[k++] 
4b60: 3d 20 63 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65  = c;.      }else
4b70: 7b 0a 20 20 20 20 20 20 20 20 7a 42 75 66 5b 6b  {.        zBuf[k
4b80: 2b 2b 5d 20 3d 20 27 2e 27 3b 0a 20 20 20 20 20  ++] = '.';.     
4b90: 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 7a 42 75   }.    }.    zBu
4ba0: 66 5b 6b 2b 2b 5d 20 3d 20 27 5d 27 3b 0a 20 20  f[k++] = ']';.  
4bb0: 20 20 73 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e    sqlite3_snprin
4bc0: 74 66 28 31 30 30 2c 26 7a 42 75 66 5b 6b 5d 2c  tf(100,&zBuf[k],
4bd0: 20 65 6e 63 6e 61 6d 65 73 5b 70 4d 65 6d 2d 3e   encnames[pMem->
4be0: 65 6e 63 5d 29 3b 0a 20 20 20 20 6b 20 2b 3d 20  enc]);.    k += 
4bf0: 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28  sqlite3Strlen30(
4c00: 26 7a 42 75 66 5b 6b 5d 29 3b 0a 20 20 20 20 7a  &zBuf[k]);.    z
4c10: 42 75 66 5b 6b 2b 2b 5d 20 3d 20 30 3b 0a 20 20  Buf[k++] = 0;.  
4c20: 7d 0a 7d 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64  }.}.#endif..#ifd
4c30: 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a  ef SQLITE_DEBUG.
4c40: 2f 2a 0a 2a 2a 20 50 72 69 6e 74 20 74 68 65 20  /*.** Print the 
4c50: 76 61 6c 75 65 20 6f 66 20 61 20 72 65 67 69 73  value of a regis
4c60: 74 65 72 20 66 6f 72 20 74 72 61 63 69 6e 67 20  ter for tracing 
4c70: 70 75 72 70 6f 73 65 73 3a 0a 2a 2f 0a 73 74 61  purposes:.*/.sta
4c80: 74 69 63 20 76 6f 69 64 20 6d 65 6d 54 72 61 63  tic void memTrac
4c90: 65 50 72 69 6e 74 28 4d 65 6d 20 2a 70 29 7b 0a  ePrint(Mem *p){.
4ca0: 20 20 69 66 28 20 70 2d 3e 66 6c 61 67 73 20 26    if( p->flags &
4cb0: 20 4d 45 4d 5f 55 6e 64 65 66 69 6e 65 64 20 29   MEM_Undefined )
4cc0: 7b 0a 20 20 20 20 70 72 69 6e 74 66 28 22 20 75  {.    printf(" u
4cd0: 6e 64 65 66 69 6e 65 64 22 29 3b 0a 20 20 7d 65  ndefined");.  }e
4ce0: 6c 73 65 20 69 66 28 20 70 2d 3e 66 6c 61 67 73  lse if( p->flags
4cf0: 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20   & MEM_Null ){. 
4d00: 20 20 20 70 72 69 6e 74 66 28 70 2d 3e 66 6c 61     printf(p->fla
4d10: 67 73 20 26 20 4d 45 4d 5f 5a 65 72 6f 20 3f 20  gs & MEM_Zero ? 
4d20: 22 20 4e 55 4c 4c 2d 6e 6f 63 68 6e 67 22 20 3a  " NULL-nochng" :
4d30: 20 22 20 4e 55 4c 4c 22 29 3b 0a 20 20 7d 65 6c   " NULL");.  }el
4d40: 73 65 20 69 66 28 20 28 70 2d 3e 66 6c 61 67 73  se if( (p->flags
4d50: 20 26 20 28 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f   & (MEM_Int|MEM_
4d60: 53 74 72 29 29 3d 3d 28 4d 45 4d 5f 49 6e 74 7c  Str))==(MEM_Int|
4d70: 4d 45 4d 5f 53 74 72 29 20 29 7b 0a 20 20 20 20  MEM_Str) ){.    
4d80: 70 72 69 6e 74 66 28 22 20 73 69 3a 25 6c 6c 64  printf(" si:%lld
4d90: 22 2c 20 70 2d 3e 75 2e 69 29 3b 0a 20 20 7d 65  ", p->u.i);.  }e
4da0: 6c 73 65 20 69 66 28 20 28 70 2d 3e 66 6c 61 67  lse if( (p->flag
4db0: 73 20 26 20 28 4d 45 4d 5f 49 6e 74 52 65 61 6c  s & (MEM_IntReal
4dc0: 29 29 21 3d 30 20 29 7b 0a 20 20 20 20 70 72 69  ))!=0 ){.    pri
4dd0: 6e 74 66 28 22 20 69 72 3a 25 6c 6c 64 22 2c 20  ntf(" ir:%lld", 
4de0: 70 2d 3e 75 2e 69 29 3b 0a 20 20 7d 65 6c 73 65  p->u.i);.  }else
4df0: 20 69 66 28 20 70 2d 3e 66 6c 61 67 73 20 26 20   if( p->flags & 
4e00: 4d 45 4d 5f 49 6e 74 20 29 7b 0a 20 20 20 20 70  MEM_Int ){.    p
4e10: 72 69 6e 74 66 28 22 20 69 3a 25 6c 6c 64 22 2c  rintf(" i:%lld",
4e20: 20 70 2d 3e 75 2e 69 29 3b 0a 23 69 66 6e 64 65   p->u.i);.#ifnde
4e30: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c  f SQLITE_OMIT_FL
4e40: 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 0a 20 20 7d  OATING_POINT.  }
4e50: 65 6c 73 65 20 69 66 28 20 70 2d 3e 66 6c 61 67  else if( p->flag
4e60: 73 20 26 20 4d 45 4d 5f 52 65 61 6c 20 29 7b 0a  s & MEM_Real ){.
4e70: 20 20 20 20 70 72 69 6e 74 66 28 22 20 72 3a 25      printf(" r:%
4e80: 2e 31 37 67 22 2c 20 70 2d 3e 75 2e 72 29 3b 0a  .17g", p->u.r);.
4e90: 23 65 6e 64 69 66 0a 20 20 7d 65 6c 73 65 20 69  #endif.  }else i
4ea0: 66 28 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65  f( sqlite3VdbeMe
4eb0: 6d 49 73 52 6f 77 53 65 74 28 70 29 20 29 7b 0a  mIsRowSet(p) ){.
4ec0: 20 20 20 20 70 72 69 6e 74 66 28 22 20 28 72 6f      printf(" (ro
4ed0: 77 73 65 74 29 22 29 3b 0a 20 20 7d 65 6c 73 65  wset)");.  }else
4ee0: 7b 0a 20 20 20 20 63 68 61 72 20 7a 42 75 66 5b  {.    char zBuf[
4ef0: 32 30 30 5d 3b 0a 20 20 20 20 73 71 6c 69 74 65  200];.    sqlite
4f00: 33 56 64 62 65 4d 65 6d 50 72 65 74 74 79 50 72  3VdbeMemPrettyPr
4f10: 69 6e 74 28 70 2c 20 7a 42 75 66 29 3b 0a 20 20  int(p, zBuf);.  
4f20: 20 20 70 72 69 6e 74 66 28 22 20 25 73 22 2c 20    printf(" %s", 
4f30: 7a 42 75 66 29 3b 0a 20 20 7d 0a 20 20 69 66 28  zBuf);.  }.  if(
4f40: 20 70 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f   p->flags & MEM_
4f50: 53 75 62 74 79 70 65 20 29 20 70 72 69 6e 74 66  Subtype ) printf
4f60: 28 22 20 73 75 62 74 79 70 65 3d 30 78 25 30 32  (" subtype=0x%02
4f70: 78 22 2c 20 70 2d 3e 65 53 75 62 74 79 70 65 29  x", p->eSubtype)
4f80: 3b 0a 7d 0a 73 74 61 74 69 63 20 76 6f 69 64 20  ;.}.static void 
4f90: 72 65 67 69 73 74 65 72 54 72 61 63 65 28 69 6e  registerTrace(in
4fa0: 74 20 69 52 65 67 2c 20 4d 65 6d 20 2a 70 29 7b  t iReg, Mem *p){
4fb0: 0a 20 20 70 72 69 6e 74 66 28 22 52 45 47 5b 25  .  printf("REG[%
4fc0: 64 5d 20 3d 20 22 2c 20 69 52 65 67 29 3b 0a 20  d] = ", iReg);. 
4fd0: 20 6d 65 6d 54 72 61 63 65 50 72 69 6e 74 28 70   memTracePrint(p
4fe0: 29 3b 0a 20 20 70 72 69 6e 74 66 28 22 5c 6e 22  );.  printf("\n"
4ff0: 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65  );.  sqlite3Vdbe
5000: 43 68 65 63 6b 4d 65 6d 49 6e 76 61 72 69 61 6e  CheckMemInvarian
5010: 74 73 28 70 29 3b 0a 7d 0a 23 65 6e 64 69 66 0a  ts(p);.}.#endif.
5020: 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44  .#ifdef SQLITE_D
5030: 45 42 55 47 0a 23 20 20 64 65 66 69 6e 65 20 52  EBUG.#  define R
5040: 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 52 2c  EGISTER_TRACE(R,
5050: 4d 29 20 69 66 28 64 62 2d 3e 66 6c 61 67 73 26  M) if(db->flags&
5060: 53 51 4c 49 54 45 5f 56 64 62 65 54 72 61 63 65  SQLITE_VdbeTrace
5070: 29 72 65 67 69 73 74 65 72 54 72 61 63 65 28 52  )registerTrace(R
5080: 2c 4d 29 0a 23 65 6c 73 65 0a 23 20 20 64 65 66  ,M).#else.#  def
5090: 69 6e 65 20 52 45 47 49 53 54 45 52 5f 54 52 41  ine REGISTER_TRA
50a0: 43 45 28 52 2c 4d 29 0a 23 65 6e 64 69 66 0a 0a  CE(R,M).#endif..
50b0: 0a 23 69 66 64 65 66 20 56 44 42 45 5f 50 52 4f  .#ifdef VDBE_PRO
50c0: 46 49 4c 45 0a 0a 2f 2a 20 0a 2a 2a 20 68 77 74  FILE../* .** hwt
50d0: 69 6d 65 2e 68 20 63 6f 6e 74 61 69 6e 73 20 69  ime.h contains i
50e0: 6e 6c 69 6e 65 20 61 73 73 65 6d 62 6c 65 72 20  nline assembler 
50f0: 63 6f 64 65 20 66 6f 72 20 69 6d 70 6c 65 6d 65  code for impleme
5100: 6e 74 69 6e 67 20 0a 2a 2a 20 68 69 67 68 2d 70  nting .** high-p
5110: 65 72 66 6f 72 6d 61 6e 63 65 20 74 69 6d 69 6e  erformance timin
5120: 67 20 72 6f 75 74 69 6e 65 73 2e 0a 2a 2f 0a 23  g routines..*/.#
5130: 69 6e 63 6c 75 64 65 20 22 68 77 74 69 6d 65 2e  include "hwtime.
5140: 68 22 0a 0a 23 65 6e 64 69 66 0a 0a 23 69 66 6e  h"..#endif..#ifn
5150: 64 65 66 20 4e 44 45 42 55 47 0a 2f 2a 0a 2a 2a  def NDEBUG./*.**
5160: 20 54 68 69 73 20 66 75 6e 63 74 69 6f 6e 20 69   This function i
5170: 73 20 6f 6e 6c 79 20 63 61 6c 6c 65 64 20 66 72  s only called fr
5180: 6f 6d 20 77 69 74 68 69 6e 20 61 6e 20 61 73 73  om within an ass
5190: 65 72 74 28 29 20 65 78 70 72 65 73 73 69 6f 6e  ert() expression
51a0: 2e 20 49 74 0a 2a 2a 20 63 68 65 63 6b 73 20 74  . It.** checks t
51b0: 68 61 74 20 74 68 65 20 73 71 6c 69 74 65 33 2e  hat the sqlite3.
51c0: 6e 54 72 61 6e 73 61 63 74 69 6f 6e 20 76 61 72  nTransaction var
51d0: 69 61 62 6c 65 20 69 73 20 63 6f 72 72 65 63 74  iable is correct
51e0: 6c 79 20 73 65 74 20 74 6f 0a 2a 2a 20 74 68 65  ly set to.** the
51f0: 20 6e 75 6d 62 65 72 20 6f 66 20 6e 6f 6e 2d 74   number of non-t
5200: 72 61 6e 73 61 63 74 69 6f 6e 20 73 61 76 65 70  ransaction savep
5210: 6f 69 6e 74 73 20 63 75 72 72 65 6e 74 6c 79 20  oints currently 
5220: 69 6e 20 74 68 65 20 0a 2a 2a 20 6c 69 6e 6b 65  in the .** linke
5230: 64 20 6c 69 73 74 20 73 74 61 72 74 69 6e 67 20  d list starting 
5240: 61 74 20 73 71 6c 69 74 65 33 2e 70 53 61 76 65  at sqlite3.pSave
5250: 70 6f 69 6e 74 2e 0a 2a 2a 20 0a 2a 2a 20 55 73  point..** .** Us
5260: 61 67 65 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 61  age:.**.**     a
5270: 73 73 65 72 74 28 20 63 68 65 63 6b 53 61 76 65  ssert( checkSave
5280: 70 6f 69 6e 74 43 6f 75 6e 74 28 64 62 29 20 29  pointCount(db) )
5290: 3b 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20  ;.*/.static int 
52a0: 63 68 65 63 6b 53 61 76 65 70 6f 69 6e 74 43 6f  checkSavepointCo
52b0: 75 6e 74 28 73 71 6c 69 74 65 33 20 2a 64 62 29  unt(sqlite3 *db)
52c0: 7b 0a 20 20 69 6e 74 20 6e 20 3d 20 30 3b 0a 20  {.  int n = 0;. 
52d0: 20 53 61 76 65 70 6f 69 6e 74 20 2a 70 3b 0a 20   Savepoint *p;. 
52e0: 20 66 6f 72 28 70 3d 64 62 2d 3e 70 53 61 76 65   for(p=db->pSave
52f0: 70 6f 69 6e 74 3b 20 70 3b 20 70 3d 70 2d 3e 70  point; p; p=p->p
5300: 4e 65 78 74 29 20 6e 2b 2b 3b 0a 20 20 61 73 73  Next) n++;.  ass
5310: 65 72 74 28 20 6e 3d 3d 28 64 62 2d 3e 6e 53 61  ert( n==(db->nSa
5320: 76 65 70 6f 69 6e 74 20 2b 20 64 62 2d 3e 69 73  vepoint + db->is
5330: 54 72 61 6e 73 61 63 74 69 6f 6e 53 61 76 65 70  TransactionSavep
5340: 6f 69 6e 74 29 20 29 3b 0a 20 20 72 65 74 75 72  oint) );.  retur
5350: 6e 20 31 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 2f  n 1;.}.#endif../
5360: 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74 68 65 20  *.** Return the 
5370: 72 65 67 69 73 74 65 72 20 6f 66 20 70 4f 70 2d  register of pOp-
5380: 3e 70 32 20 61 66 74 65 72 20 66 69 72 73 74 20  >p2 after first 
5390: 70 72 65 70 61 72 69 6e 67 20 69 74 20 74 6f 20  preparing it to 
53a0: 62 65 0a 2a 2a 20 6f 76 65 72 77 72 69 74 74 65  be.** overwritte
53b0: 6e 20 77 69 74 68 20 61 6e 20 69 6e 74 65 67 65  n with an intege
53c0: 72 20 76 61 6c 75 65 2e 0a 2a 2f 0a 73 74 61 74  r value..*/.stat
53d0: 69 63 20 53 51 4c 49 54 45 5f 4e 4f 49 4e 4c 49  ic SQLITE_NOINLI
53e0: 4e 45 20 4d 65 6d 20 2a 6f 75 74 32 50 72 65 72  NE Mem *out2Prer
53f0: 65 6c 65 61 73 65 57 69 74 68 43 6c 65 61 72 28  eleaseWithClear(
5400: 4d 65 6d 20 2a 70 4f 75 74 29 7b 0a 20 20 73 71  Mem *pOut){.  sq
5410: 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e  lite3VdbeMemSetN
5420: 75 6c 6c 28 70 4f 75 74 29 3b 0a 20 20 70 4f 75  ull(pOut);.  pOu
5430: 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 49  t->flags = MEM_I
5440: 6e 74 3b 0a 20 20 72 65 74 75 72 6e 20 70 4f 75  nt;.  return pOu
5450: 74 3b 0a 7d 0a 73 74 61 74 69 63 20 4d 65 6d 20  t;.}.static Mem 
5460: 2a 6f 75 74 32 50 72 65 72 65 6c 65 61 73 65 28  *out2Prerelease(
5470: 56 64 62 65 20 2a 70 2c 20 56 64 62 65 4f 70 20  Vdbe *p, VdbeOp 
5480: 2a 70 4f 70 29 7b 0a 20 20 4d 65 6d 20 2a 70 4f  *pOp){.  Mem *pO
5490: 75 74 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f  ut;.  assert( pO
54a0: 70 2d 3e 70 32 3e 30 20 29 3b 0a 20 20 61 73 73  p->p2>0 );.  ass
54b0: 65 72 74 28 20 70 4f 70 2d 3e 70 32 3c 3d 28 70  ert( pOp->p2<=(p
54c0: 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43  ->nMem+1 - p->nC
54d0: 75 72 73 6f 72 29 20 29 3b 0a 20 20 70 4f 75 74  ursor) );.  pOut
54e0: 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d   = &p->aMem[pOp-
54f0: 3e 70 32 5d 3b 0a 20 20 6d 65 6d 41 62 6f 75 74  >p2];.  memAbout
5500: 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 4f 75 74  ToChange(p, pOut
5510: 29 3b 0a 20 20 69 66 28 20 56 64 62 65 4d 65 6d  );.  if( VdbeMem
5520: 44 79 6e 61 6d 69 63 28 70 4f 75 74 29 20 29 7b  Dynamic(pOut) ){
5530: 20 2f 2a 4f 50 54 49 4d 49 5a 41 54 49 4f 4e 2d   /*OPTIMIZATION-
5540: 49 46 2d 46 41 4c 53 45 2a 2f 0a 20 20 20 20 72  IF-FALSE*/.    r
5550: 65 74 75 72 6e 20 6f 75 74 32 50 72 65 72 65 6c  eturn out2Prerel
5560: 65 61 73 65 57 69 74 68 43 6c 65 61 72 28 70 4f  easeWithClear(pO
5570: 75 74 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  ut);.  }else{.  
5580: 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20    pOut->flags = 
5590: 4d 45 4d 5f 49 6e 74 3b 0a 20 20 20 20 72 65 74  MEM_Int;.    ret
55a0: 75 72 6e 20 70 4f 75 74 3b 0a 20 20 7d 0a 7d 0a  urn pOut;.  }.}.
55b0: 0a 0a 2f 2a 0a 2a 2a 20 45 78 65 63 75 74 65 20  ../*.** Execute 
55c0: 61 73 20 6d 75 63 68 20 6f 66 20 61 20 56 44 42  as much of a VDB
55d0: 45 20 70 72 6f 67 72 61 6d 20 61 73 20 77 65 20  E program as we 
55e0: 63 61 6e 2e 0a 2a 2a 20 54 68 69 73 20 69 73 20  can..** This is 
55f0: 74 68 65 20 63 6f 72 65 20 6f 66 20 73 71 6c 69  the core of sqli
5600: 74 65 33 5f 73 74 65 70 28 29 2e 20 20 0a 2a 2f  te3_step().  .*/
5610: 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 64 62 65  .int sqlite3Vdbe
5620: 45 78 65 63 28 0a 20 20 56 64 62 65 20 2a 70 20  Exec(.  Vdbe *p 
5630: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5640: 20 20 20 2f 2a 20 54 68 65 20 56 44 42 45 20 2a     /* The VDBE *
5650: 2f 0a 29 7b 0a 20 20 4f 70 20 2a 61 4f 70 20 3d  /.){.  Op *aOp =
5660: 20 70 2d 3e 61 4f 70 3b 20 20 20 20 20 20 20 20   p->aOp;        
5670: 20 20 2f 2a 20 43 6f 70 79 20 6f 66 20 70 2d 3e    /* Copy of p->
5680: 61 4f 70 20 2a 2f 0a 20 20 4f 70 20 2a 70 4f 70  aOp */.  Op *pOp
5690: 20 3d 20 61 4f 70 3b 20 20 20 20 20 20 20 20 20   = aOp;         
56a0: 20 20 20 20 2f 2a 20 43 75 72 72 65 6e 74 20 6f      /* Current o
56b0: 70 65 72 61 74 69 6f 6e 20 2a 2f 0a 23 69 66 20  peration */.#if 
56c0: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 44  defined(SQLITE_D
56d0: 45 42 55 47 29 20 7c 7c 20 64 65 66 69 6e 65 64  EBUG) || defined
56e0: 28 56 44 42 45 5f 50 52 4f 46 49 4c 45 29 0a 20  (VDBE_PROFILE). 
56f0: 20 4f 70 20 2a 70 4f 72 69 67 4f 70 3b 20 20 20   Op *pOrigOp;   
5700: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56              /* V
5710: 61 6c 75 65 20 6f 66 20 70 4f 70 20 61 74 20 74  alue of pOp at t
5720: 68 65 20 74 6f 70 20 6f 66 20 74 68 65 20 6c 6f  he top of the lo
5730: 6f 70 20 2a 2f 0a 23 65 6e 64 69 66 0a 23 69 66  op */.#endif.#if
5740: 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47  def SQLITE_DEBUG
5750: 0a 20 20 69 6e 74 20 6e 45 78 74 72 61 44 65 6c  .  int nExtraDel
5760: 65 74 65 20 3d 20 30 3b 20 20 20 20 20 20 2f 2a  ete = 0;      /*
5770: 20 56 65 72 69 66 69 65 73 20 46 4f 52 44 45 4c   Verifies FORDEL
5780: 45 54 45 20 61 6e 64 20 41 55 58 44 45 4c 45 54  ETE and AUXDELET
5790: 45 20 66 6c 61 67 73 20 2a 2f 0a 23 65 6e 64 69  E flags */.#endi
57a0: 66 0a 20 20 69 6e 74 20 72 63 20 3d 20 53 51 4c  f.  int rc = SQL
57b0: 49 54 45 5f 4f 4b 3b 20 20 20 20 20 20 20 20 2f  ITE_OK;        /
57c0: 2a 20 56 61 6c 75 65 20 74 6f 20 72 65 74 75 72  * Value to retur
57d0: 6e 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 20 2a  n */.  sqlite3 *
57e0: 64 62 20 3d 20 70 2d 3e 64 62 3b 20 20 20 20 20  db = p->db;     
57f0: 20 20 2f 2a 20 54 68 65 20 64 61 74 61 62 61 73    /* The databas
5800: 65 20 2a 2f 0a 20 20 75 38 20 72 65 73 65 74 53  e */.  u8 resetS
5810: 63 68 65 6d 61 4f 6e 46 61 75 6c 74 20 3d 20 30  chemaOnFault = 0
5820: 3b 20 2f 2a 20 52 65 73 65 74 20 73 63 68 65 6d  ; /* Reset schem
5830: 61 20 61 66 74 65 72 20 61 6e 20 65 72 72 6f 72  a after an error
5840: 20 69 66 20 70 6f 73 69 74 69 76 65 20 2a 2f 0a   if positive */.
5850: 20 20 75 38 20 65 6e 63 6f 64 69 6e 67 20 3d 20    u8 encoding = 
5860: 45 4e 43 28 64 62 29 3b 20 20 20 20 20 2f 2a 20  ENC(db);     /* 
5870: 54 68 65 20 64 61 74 61 62 61 73 65 20 65 6e 63  The database enc
5880: 6f 64 69 6e 67 20 2a 2f 0a 20 20 69 6e 74 20 69  oding */.  int i
5890: 43 6f 6d 70 61 72 65 20 3d 20 30 3b 20 20 20 20  Compare = 0;    
58a0: 20 20 20 20 20 20 2f 2a 20 52 65 73 75 6c 74 20        /* Result 
58b0: 6f 66 20 6c 61 73 74 20 63 6f 6d 70 61 72 69 73  of last comparis
58c0: 6f 6e 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64  on */.  unsigned
58d0: 20 6e 56 6d 53 74 65 70 20 3d 20 30 3b 20 20 20   nVmStep = 0;   
58e0: 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
58f0: 76 69 72 74 75 61 6c 20 6d 61 63 68 69 6e 65 20  virtual machine 
5900: 73 74 65 70 73 20 2a 2f 0a 23 69 66 6e 64 65 66  steps */.#ifndef
5910: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 52 4f   SQLITE_OMIT_PRO
5920: 47 52 45 53 53 5f 43 41 4c 4c 42 41 43 4b 0a 20  GRESS_CALLBACK. 
5930: 20 75 6e 73 69 67 6e 65 64 20 6e 50 72 6f 67 72   unsigned nProgr
5940: 65 73 73 4c 69 6d 69 74 3b 20 20 20 2f 2a 20 49  essLimit;   /* I
5950: 6e 76 6f 6b 65 20 78 50 72 6f 67 72 65 73 73 28  nvoke xProgress(
5960: 29 20 77 68 65 6e 20 6e 56 6d 53 74 65 70 20 72  ) when nVmStep r
5970: 65 61 63 68 65 73 20 74 68 69 73 20 2a 2f 0a 23  eaches this */.#
5980: 65 6e 64 69 66 0a 20 20 4d 65 6d 20 2a 61 4d 65  endif.  Mem *aMe
5990: 6d 20 3d 20 70 2d 3e 61 4d 65 6d 3b 20 20 20 20  m = p->aMem;    
59a0: 20 20 20 2f 2a 20 43 6f 70 79 20 6f 66 20 70 2d     /* Copy of p-
59b0: 3e 61 4d 65 6d 20 2a 2f 0a 20 20 4d 65 6d 20 2a  >aMem */.  Mem *
59c0: 70 49 6e 31 20 3d 20 30 3b 20 20 20 20 20 20 20  pIn1 = 0;       
59d0: 20 20 20 20 20 20 2f 2a 20 31 73 74 20 69 6e 70        /* 1st inp
59e0: 75 74 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20  ut operand */.  
59f0: 4d 65 6d 20 2a 70 49 6e 32 20 3d 20 30 3b 20 20  Mem *pIn2 = 0;  
5a00: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 32 6e             /* 2n
5a10: 64 20 69 6e 70 75 74 20 6f 70 65 72 61 6e 64 20  d input operand 
5a20: 2a 2f 0a 20 20 4d 65 6d 20 2a 70 49 6e 33 20 3d  */.  Mem *pIn3 =
5a30: 20 30 3b 20 20 20 20 20 20 20 20 20 20 20 20 20   0;             
5a40: 2f 2a 20 33 72 64 20 69 6e 70 75 74 20 6f 70 65  /* 3rd input ope
5a50: 72 61 6e 64 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70  rand */.  Mem *p
5a60: 4f 75 74 20 3d 20 30 3b 20 20 20 20 20 20 20 20  Out = 0;        
5a70: 20 20 20 20 20 2f 2a 20 4f 75 74 70 75 74 20 6f       /* Output o
5a80: 70 65 72 61 6e 64 20 2a 2f 0a 23 69 66 64 65 66  perand */.#ifdef
5a90: 20 56 44 42 45 5f 50 52 4f 46 49 4c 45 0a 20 20   VDBE_PROFILE.  
5aa0: 75 36 34 20 73 74 61 72 74 3b 20 20 20 20 20 20  u64 start;      
5ab0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43 50             /* CP
5ac0: 55 20 63 6c 6f 63 6b 20 63 6f 75 6e 74 20 61 74  U clock count at
5ad0: 20 73 74 61 72 74 20 6f 66 20 6f 70 63 6f 64 65   start of opcode
5ae0: 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 2f 2a 2a   */.#endif.  /**
5af0: 2a 20 49 4e 53 45 52 54 20 53 54 41 43 4b 20 55  * INSERT STACK U
5b00: 4e 49 4f 4e 20 48 45 52 45 20 2a 2a 2a 2f 0a 0a  NION HERE ***/..
5b10: 20 20 61 73 73 65 72 74 28 20 70 2d 3e 6d 61 67    assert( p->mag
5b20: 69 63 3d 3d 56 44 42 45 5f 4d 41 47 49 43 5f 52  ic==VDBE_MAGIC_R
5b30: 55 4e 20 29 3b 20 20 2f 2a 20 73 71 6c 69 74 65  UN );  /* sqlite
5b40: 33 5f 73 74 65 70 28 29 20 76 65 72 69 66 69 65  3_step() verifie
5b50: 73 20 74 68 69 73 20 2a 2f 0a 20 20 73 71 6c 69  s this */.  sqli
5b60: 74 65 33 56 64 62 65 45 6e 74 65 72 28 70 29 3b  te3VdbeEnter(p);
5b70: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
5b80: 4f 4d 49 54 5f 50 52 4f 47 52 45 53 53 5f 43 41  OMIT_PROGRESS_CA
5b90: 4c 4c 42 41 43 4b 0a 20 20 69 66 28 20 64 62 2d  LLBACK.  if( db-
5ba0: 3e 78 50 72 6f 67 72 65 73 73 20 29 7b 0a 20 20  >xProgress ){.  
5bb0: 20 20 75 33 32 20 69 50 72 69 6f 72 20 3d 20 70    u32 iPrior = p
5bc0: 2d 3e 61 43 6f 75 6e 74 65 72 5b 53 51 4c 49 54  ->aCounter[SQLIT
5bd0: 45 5f 53 54 4d 54 53 54 41 54 55 53 5f 56 4d 5f  E_STMTSTATUS_VM_
5be0: 53 54 45 50 5d 3b 0a 20 20 20 20 61 73 73 65 72  STEP];.    asser
5bf0: 74 28 20 30 20 3c 20 64 62 2d 3e 6e 50 72 6f 67  t( 0 < db->nProg
5c00: 72 65 73 73 4f 70 73 20 29 3b 0a 20 20 20 20 6e  ressOps );.    n
5c10: 50 72 6f 67 72 65 73 73 4c 69 6d 69 74 20 3d 20  ProgressLimit = 
5c20: 64 62 2d 3e 6e 50 72 6f 67 72 65 73 73 4f 70 73  db->nProgressOps
5c30: 20 2d 20 28 69 50 72 69 6f 72 20 25 20 64 62 2d   - (iPrior % db-
5c40: 3e 6e 50 72 6f 67 72 65 73 73 4f 70 73 29 3b 0a  >nProgressOps);.
5c50: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 6e 50 72    }else{.    nPr
5c60: 6f 67 72 65 73 73 4c 69 6d 69 74 20 3d 20 30 78  ogressLimit = 0x
5c70: 66 66 66 66 66 66 66 66 3b 0a 20 20 7d 0a 23 65  ffffffff;.  }.#e
5c80: 6e 64 69 66 0a 20 20 69 66 28 20 70 2d 3e 72 63  ndif.  if( p->rc
5c90: 3d 3d 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 20 29  ==SQLITE_NOMEM )
5ca0: 7b 0a 20 20 20 20 2f 2a 20 54 68 69 73 20 68 61  {.    /* This ha
5cb0: 70 70 65 6e 73 20 69 66 20 61 20 6d 61 6c 6c 6f  ppens if a mallo
5cc0: 63 28 29 20 69 6e 73 69 64 65 20 61 20 63 61 6c  c() inside a cal
5cd0: 6c 20 74 6f 20 73 71 6c 69 74 65 33 5f 63 6f 6c  l to sqlite3_col
5ce0: 75 6d 6e 5f 74 65 78 74 28 29 20 6f 72 0a 20 20  umn_text() or.  
5cf0: 20 20 2a 2a 20 73 71 6c 69 74 65 33 5f 63 6f 6c    ** sqlite3_col
5d00: 75 6d 6e 5f 74 65 78 74 31 36 28 29 20 66 61 69  umn_text16() fai
5d10: 6c 65 64 2e 20 20 2a 2f 0a 20 20 20 20 67 6f 74  led.  */.    got
5d20: 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 20 20  o no_mem;.  }.  
5d30: 61 73 73 65 72 74 28 20 70 2d 3e 72 63 3d 3d 53  assert( p->rc==S
5d40: 51 4c 49 54 45 5f 4f 4b 20 7c 7c 20 28 70 2d 3e  QLITE_OK || (p->
5d50: 72 63 26 30 78 66 66 29 3d 3d 53 51 4c 49 54 45  rc&0xff)==SQLITE
5d60: 5f 42 55 53 59 20 29 3b 0a 20 20 61 73 73 65 72  _BUSY );.  asser
5d70: 74 28 20 70 2d 3e 62 49 73 52 65 61 64 65 72 20  t( p->bIsReader 
5d80: 7c 7c 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 21 3d  || p->readOnly!=
5d90: 30 20 29 3b 0a 20 20 70 2d 3e 69 43 75 72 72 65  0 );.  p->iCurre
5da0: 6e 74 54 69 6d 65 20 3d 20 30 3b 0a 20 20 61 73  ntTime = 0;.  as
5db0: 73 65 72 74 28 20 70 2d 3e 65 78 70 6c 61 69 6e  sert( p->explain
5dc0: 3d 3d 30 20 29 3b 0a 20 20 70 2d 3e 70 52 65 73  ==0 );.  p->pRes
5dd0: 75 6c 74 53 65 74 20 3d 20 30 3b 0a 20 20 64 62  ultSet = 0;.  db
5de0: 2d 3e 62 75 73 79 48 61 6e 64 6c 65 72 2e 6e 42  ->busyHandler.nB
5df0: 75 73 79 20 3d 20 30 3b 0a 20 20 69 66 28 20 64  usy = 0;.  if( d
5e00: 62 2d 3e 75 31 2e 69 73 49 6e 74 65 72 72 75 70  b->u1.isInterrup
5e10: 74 65 64 20 29 20 67 6f 74 6f 20 61 62 6f 72 74  ted ) goto abort
5e20: 5f 64 75 65 5f 74 6f 5f 69 6e 74 65 72 72 75 70  _due_to_interrup
5e30: 74 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65  t;.  sqlite3Vdbe
5e40: 49 4f 54 72 61 63 65 53 71 6c 28 70 29 3b 0a 23  IOTraceSql(p);.#
5e50: 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42  ifdef SQLITE_DEB
5e60: 55 47 0a 20 20 73 71 6c 69 74 65 33 42 65 67 69  UG.  sqlite3Begi
5e70: 6e 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28 29 3b  nBenignMalloc();
5e80: 0a 20 20 69 66 28 20 70 2d 3e 70 63 3d 3d 30 0a  .  if( p->pc==0.
5e90: 20 20 20 26 26 20 28 70 2d 3e 64 62 2d 3e 66 6c     && (p->db->fl
5ea0: 61 67 73 20 26 20 28 53 51 4c 49 54 45 5f 56 64  ags & (SQLITE_Vd
5eb0: 62 65 4c 69 73 74 69 6e 67 7c 53 51 4c 49 54 45  beListing|SQLITE
5ec0: 5f 56 64 62 65 45 51 50 7c 53 51 4c 49 54 45 5f  _VdbeEQP|SQLITE_
5ed0: 56 64 62 65 54 72 61 63 65 29 29 21 3d 30 0a 20  VdbeTrace))!=0. 
5ee0: 20 29 7b 0a 20 20 20 20 69 6e 74 20 69 3b 0a 20   ){.    int i;. 
5ef0: 20 20 20 69 6e 74 20 6f 6e 63 65 20 3d 20 31 3b     int once = 1;
5f00: 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
5f10: 50 72 69 6e 74 53 71 6c 28 70 29 3b 0a 20 20 20  PrintSql(p);.   
5f20: 20 69 66 28 20 70 2d 3e 64 62 2d 3e 66 6c 61 67   if( p->db->flag
5f30: 73 20 26 20 53 51 4c 49 54 45 5f 56 64 62 65 4c  s & SQLITE_VdbeL
5f40: 69 73 74 69 6e 67 20 29 7b 0a 20 20 20 20 20 20  isting ){.      
5f50: 70 72 69 6e 74 66 28 22 56 44 42 45 20 50 72 6f  printf("VDBE Pro
5f60: 67 72 61 6d 20 4c 69 73 74 69 6e 67 3a 5c 6e 22  gram Listing:\n"
5f70: 29 3b 0a 20 20 20 20 20 20 66 6f 72 28 69 3d 30  );.      for(i=0
5f80: 3b 20 69 3c 70 2d 3e 6e 4f 70 3b 20 69 2b 2b 29  ; i<p->nOp; i++)
5f90: 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  {.        sqlite
5fa0: 33 56 64 62 65 50 72 69 6e 74 4f 70 28 73 74 64  3VdbePrintOp(std
5fb0: 6f 75 74 2c 20 69 2c 20 26 61 4f 70 5b 69 5d 29  out, i, &aOp[i])
5fc0: 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a  ;.      }.    }.
5fd0: 20 20 20 20 69 66 28 20 70 2d 3e 64 62 2d 3e 66      if( p->db->f
5fe0: 6c 61 67 73 20 26 20 53 51 4c 49 54 45 5f 56 64  lags & SQLITE_Vd
5ff0: 62 65 45 51 50 20 29 7b 0a 20 20 20 20 20 20 66  beEQP ){.      f
6000: 6f 72 28 69 3d 30 3b 20 69 3c 70 2d 3e 6e 4f 70  or(i=0; i<p->nOp
6010: 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20  ; i++){.        
6020: 69 66 28 20 61 4f 70 5b 69 5d 2e 6f 70 63 6f 64  if( aOp[i].opcod
6030: 65 3d 3d 4f 50 5f 45 78 70 6c 61 69 6e 20 29 7b  e==OP_Explain ){
6040: 0a 20 20 20 20 20 20 20 20 20 20 69 66 28 20 6f  .          if( o
6050: 6e 63 65 20 29 20 70 72 69 6e 74 66 28 22 56 44  nce ) printf("VD
6060: 42 45 20 51 75 65 72 79 20 50 6c 61 6e 3a 5c 6e  BE Query Plan:\n
6070: 22 29 3b 0a 20 20 20 20 20 20 20 20 20 20 70 72  ");.          pr
6080: 69 6e 74 66 28 22 25 73 5c 6e 22 2c 20 61 4f 70  intf("%s\n", aOp
6090: 5b 69 5d 2e 70 34 2e 7a 29 3b 0a 20 20 20 20 20  [i].p4.z);.     
60a0: 20 20 20 20 20 6f 6e 63 65 20 3d 20 30 3b 0a 20       once = 0;. 
60b0: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d         }.      }
60c0: 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 70  .    }.    if( p
60d0: 2d 3e 64 62 2d 3e 66 6c 61 67 73 20 26 20 53 51  ->db->flags & SQ
60e0: 4c 49 54 45 5f 56 64 62 65 54 72 61 63 65 20 29  LITE_VdbeTrace )
60f0: 20 20 70 72 69 6e 74 66 28 22 56 44 42 45 20 54    printf("VDBE T
6100: 72 61 63 65 3a 5c 6e 22 29 3b 0a 20 20 7d 0a 20  race:\n");.  }. 
6110: 20 73 71 6c 69 74 65 33 45 6e 64 42 65 6e 69 67   sqlite3EndBenig
6120: 6e 4d 61 6c 6c 6f 63 28 29 3b 0a 23 65 6e 64 69  nMalloc();.#endi
6130: 66 0a 20 20 66 6f 72 28 70 4f 70 3d 26 61 4f 70  f.  for(pOp=&aOp
6140: 5b 70 2d 3e 70 63 5d 3b 20 31 3b 20 70 4f 70 2b  [p->pc]; 1; pOp+
6150: 2b 29 7b 0a 20 20 20 20 2f 2a 20 45 72 72 6f 72  +){.    /* Error
6160: 73 20 61 72 65 20 64 65 74 65 63 74 65 64 20 62  s are detected b
6170: 79 20 69 6e 64 69 76 69 64 75 61 6c 20 6f 70 63  y individual opc
6180: 6f 64 65 73 2c 20 77 69 74 68 20 61 6e 20 69 6d  odes, with an im
6190: 6d 65 64 69 61 74 65 0a 20 20 20 20 2a 2a 20 6a  mediate.    ** j
61a0: 75 6d 70 73 20 74 6f 20 61 62 6f 72 74 5f 64 75  umps to abort_du
61b0: 65 5f 74 6f 5f 65 72 72 6f 72 2e 20 2a 2f 0a 20  e_to_error. */. 
61c0: 20 20 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53     assert( rc==S
61d0: 51 4c 49 54 45 5f 4f 4b 20 29 3b 0a 0a 20 20 20  QLITE_OK );..   
61e0: 20 61 73 73 65 72 74 28 20 70 4f 70 3e 3d 61 4f   assert( pOp>=aO
61f0: 70 20 26 26 20 70 4f 70 3c 26 61 4f 70 5b 70 2d  p && pOp<&aOp[p-
6200: 3e 6e 4f 70 5d 29 3b 0a 23 69 66 64 65 66 20 56  >nOp]);.#ifdef V
6210: 44 42 45 5f 50 52 4f 46 49 4c 45 0a 20 20 20 20  DBE_PROFILE.    
6220: 73 74 61 72 74 20 3d 20 73 71 6c 69 74 65 33 4e  start = sqlite3N
6230: 50 72 6f 66 69 6c 65 43 6e 74 20 3f 20 73 71 6c  ProfileCnt ? sql
6240: 69 74 65 33 4e 50 72 6f 66 69 6c 65 43 6e 74 20  ite3NProfileCnt 
6250: 3a 20 73 71 6c 69 74 65 33 48 77 74 69 6d 65 28  : sqlite3Hwtime(
6260: 29 3b 0a 23 65 6e 64 69 66 0a 20 20 20 20 6e 56  );.#endif.    nV
6270: 6d 53 74 65 70 2b 2b 3b 0a 23 69 66 64 65 66 20  mStep++;.#ifdef 
6280: 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54  SQLITE_ENABLE_ST
6290: 4d 54 5f 53 43 41 4e 53 54 41 54 55 53 0a 20 20  MT_SCANSTATUS.  
62a0: 20 20 69 66 28 20 70 2d 3e 61 6e 45 78 65 63 20    if( p->anExec 
62b0: 29 20 70 2d 3e 61 6e 45 78 65 63 5b 28 69 6e 74  ) p->anExec[(int
62c0: 29 28 70 4f 70 2d 61 4f 70 29 5d 2b 2b 3b 0a 23  )(pOp-aOp)]++;.#
62d0: 65 6e 64 69 66 0a 0a 20 20 20 20 2f 2a 20 4f 6e  endif..    /* On
62e0: 6c 79 20 61 6c 6c 6f 77 20 74 72 61 63 69 6e 67  ly allow tracing
62f0: 20 69 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47   if SQLITE_DEBUG
6300: 20 69 73 20 64 65 66 69 6e 65 64 2e 0a 20 20 20   is defined..   
6310: 20 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54   */.#ifdef SQLIT
6320: 45 5f 44 45 42 55 47 0a 20 20 20 20 69 66 28 20  E_DEBUG.    if( 
6330: 64 62 2d 3e 66 6c 61 67 73 20 26 20 53 51 4c 49  db->flags & SQLI
6340: 54 45 5f 56 64 62 65 54 72 61 63 65 20 29 7b 0a  TE_VdbeTrace ){.
6350: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
6360: 65 50 72 69 6e 74 4f 70 28 73 74 64 6f 75 74 2c  ePrintOp(stdout,
6370: 20 28 69 6e 74 29 28 70 4f 70 20 2d 20 61 4f 70   (int)(pOp - aOp
6380: 29 2c 20 70 4f 70 29 3b 0a 20 20 20 20 7d 0a 23  ), pOp);.    }.#
6390: 65 6e 64 69 66 0a 20 20 20 20 20 20 0a 0a 20 20  endif.      ..  
63a0: 20 20 2f 2a 20 43 68 65 63 6b 20 74 6f 20 73 65    /* Check to se
63b0: 65 20 69 66 20 77 65 20 6e 65 65 64 20 74 6f 20  e if we need to 
63c0: 73 69 6d 75 6c 61 74 65 20 61 6e 20 69 6e 74 65  simulate an inte
63d0: 72 72 75 70 74 2e 20 20 54 68 69 73 20 6f 6e 6c  rrupt.  This onl
63e0: 79 20 68 61 70 70 65 6e 73 0a 20 20 20 20 2a 2a  y happens.    **
63f0: 20 69 66 20 77 65 20 68 61 76 65 20 61 20 73 70   if we have a sp
6400: 65 63 69 61 6c 20 74 65 73 74 20 62 75 69 6c 64  ecial test build
6410: 2e 0a 20 20 20 20 2a 2f 0a 23 69 66 64 65 66 20  ..    */.#ifdef 
6420: 53 51 4c 49 54 45 5f 54 45 53 54 0a 20 20 20 20  SQLITE_TEST.    
6430: 69 66 28 20 73 71 6c 69 74 65 33 5f 69 6e 74 65  if( sqlite3_inte
6440: 72 72 75 70 74 5f 63 6f 75 6e 74 3e 30 20 29 7b  rrupt_count>0 ){
6450: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 69  .      sqlite3_i
6460: 6e 74 65 72 72 75 70 74 5f 63 6f 75 6e 74 2d 2d  nterrupt_count--
6470: 3b 0a 20 20 20 20 20 20 69 66 28 20 73 71 6c 69  ;.      if( sqli
6480: 74 65 33 5f 69 6e 74 65 72 72 75 70 74 5f 63 6f  te3_interrupt_co
6490: 75 6e 74 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  unt==0 ){.      
64a0: 20 20 73 71 6c 69 74 65 33 5f 69 6e 74 65 72 72    sqlite3_interr
64b0: 75 70 74 28 64 62 29 3b 0a 20 20 20 20 20 20 7d  upt(db);.      }
64c0: 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 20  .    }.#endif.. 
64d0: 20 20 20 2f 2a 20 53 61 6e 69 74 79 20 63 68 65     /* Sanity che
64e0: 63 6b 69 6e 67 20 6f 6e 20 6f 74 68 65 72 20 6f  cking on other o
64f0: 70 65 72 61 6e 64 73 20 2a 2f 0a 23 69 66 64 65  perands */.#ifde
6500: 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20  f SQLITE_DEBUG. 
6510: 20 20 20 7b 0a 20 20 20 20 20 20 75 38 20 6f 70     {.      u8 op
6520: 50 72 6f 70 65 72 74 79 20 3d 20 73 71 6c 69 74  Property = sqlit
6530: 65 33 4f 70 63 6f 64 65 50 72 6f 70 65 72 74 79  e3OpcodeProperty
6540: 5b 70 4f 70 2d 3e 6f 70 63 6f 64 65 5d 3b 0a 20  [pOp->opcode];. 
6550: 20 20 20 20 20 69 66 28 20 28 6f 70 50 72 6f 70       if( (opProp
6560: 65 72 74 79 20 26 20 4f 50 46 4c 47 5f 49 4e 31  erty & OPFLG_IN1
6570: 29 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20  )!=0 ){.        
6580: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
6590: 30 20 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73  0 );.        ass
65a0: 65 72 74 28 20 70 4f 70 2d 3e 70 31 3c 3d 28 70  ert( pOp->p1<=(p
65b0: 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43  ->nMem+1 - p->nC
65c0: 75 72 73 6f 72 29 20 29 3b 0a 20 20 20 20 20 20  ursor) );.      
65d0: 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56    assert( memIsV
65e0: 61 6c 69 64 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e  alid(&aMem[pOp->
65f0: 70 31 5d 29 20 29 3b 0a 20 20 20 20 20 20 20 20  p1]) );.        
6600: 61 73 73 65 72 74 28 20 73 71 6c 69 74 65 33 56  assert( sqlite3V
6610: 64 62 65 43 68 65 63 6b 4d 65 6d 49 6e 76 61 72  dbeCheckMemInvar
6620: 69 61 6e 74 73 28 26 61 4d 65 6d 5b 70 4f 70 2d  iants(&aMem[pOp-
6630: 3e 70 31 5d 29 20 29 3b 0a 20 20 20 20 20 20 20  >p1]) );.       
6640: 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28   REGISTER_TRACE(
6650: 70 4f 70 2d 3e 70 31 2c 20 26 61 4d 65 6d 5b 70  pOp->p1, &aMem[p
6660: 4f 70 2d 3e 70 31 5d 29 3b 0a 20 20 20 20 20 20  Op->p1]);.      
6670: 7d 0a 20 20 20 20 20 20 69 66 28 20 28 6f 70 50  }.      if( (opP
6680: 72 6f 70 65 72 74 79 20 26 20 4f 50 46 4c 47 5f  roperty & OPFLG_
6690: 49 4e 32 29 21 3d 30 20 29 7b 0a 20 20 20 20 20  IN2)!=0 ){.     
66a0: 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e     assert( pOp->
66b0: 70 32 3e 30 20 29 3b 0a 20 20 20 20 20 20 20 20  p2>0 );.        
66c0: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3c  assert( pOp->p2<
66d0: 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d  =(p->nMem+1 - p-
66e0: 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 20  >nCursor) );.   
66f0: 20 20 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d       assert( mem
6700: 49 73 56 61 6c 69 64 28 26 61 4d 65 6d 5b 70 4f  IsValid(&aMem[pO
6710: 70 2d 3e 70 32 5d 29 20 29 3b 0a 20 20 20 20 20  p->p2]) );.     
6720: 20 20 20 61 73 73 65 72 74 28 20 73 71 6c 69 74     assert( sqlit
6730: 65 33 56 64 62 65 43 68 65 63 6b 4d 65 6d 49 6e  e3VdbeCheckMemIn
6740: 76 61 72 69 61 6e 74 73 28 26 61 4d 65 6d 5b 70  variants(&aMem[p
6750: 4f 70 2d 3e 70 32 5d 29 20 29 3b 0a 20 20 20 20  Op->p2]) );.    
6760: 20 20 20 20 52 45 47 49 53 54 45 52 5f 54 52 41      REGISTER_TRA
6770: 43 45 28 70 4f 70 2d 3e 70 32 2c 20 26 61 4d 65  CE(pOp->p2, &aMe
6780: 6d 5b 70 4f 70 2d 3e 70 32 5d 29 3b 0a 20 20 20  m[pOp->p2]);.   
6790: 20 20 20 7d 0a 20 20 20 20 20 20 69 66 28 20 28     }.      if( (
67a0: 6f 70 50 72 6f 70 65 72 74 79 20 26 20 4f 50 46  opProperty & OPF
67b0: 4c 47 5f 49 4e 33 29 21 3d 30 20 29 7b 0a 20 20  LG_IN3)!=0 ){.  
67c0: 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f        assert( pO
67d0: 70 2d 3e 70 33 3e 30 20 29 3b 0a 20 20 20 20 20  p->p3>0 );.     
67e0: 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e     assert( pOp->
67f0: 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d  p3<=(p->nMem+1 -
6800: 20 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a   p->nCursor) );.
6810: 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20          assert( 
6820: 6d 65 6d 49 73 56 61 6c 69 64 28 26 61 4d 65 6d  memIsValid(&aMem
6830: 5b 70 4f 70 2d 3e 70 33 5d 29 20 29 3b 0a 20 20  [pOp->p3]) );.  
6840: 20 20 20 20 20 20 61 73 73 65 72 74 28 20 73 71        assert( sq
6850: 6c 69 74 65 33 56 64 62 65 43 68 65 63 6b 4d 65  lite3VdbeCheckMe
6860: 6d 49 6e 76 61 72 69 61 6e 74 73 28 26 61 4d 65  mInvariants(&aMe
6870: 6d 5b 70 4f 70 2d 3e 70 33 5d 29 20 29 3b 0a 20  m[pOp->p3]) );. 
6880: 20 20 20 20 20 20 20 52 45 47 49 53 54 45 52 5f         REGISTER_
6890: 54 52 41 43 45 28 70 4f 70 2d 3e 70 33 2c 20 26  TRACE(pOp->p3, &
68a0: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 29 3b 0a  aMem[pOp->p3]);.
68b0: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69 66        }.      if
68c0: 28 20 28 6f 70 50 72 6f 70 65 72 74 79 20 26 20  ( (opProperty & 
68d0: 4f 50 46 4c 47 5f 4f 55 54 32 29 21 3d 30 20 29  OPFLG_OUT2)!=0 )
68e0: 7b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74  {.        assert
68f0: 28 20 70 4f 70 2d 3e 70 32 3e 30 20 29 3b 0a 20  ( pOp->p2>0 );. 
6900: 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70         assert( p
6910: 4f 70 2d 3e 70 32 3c 3d 28 70 2d 3e 6e 4d 65 6d  Op->p2<=(p->nMem
6920: 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29  +1 - p->nCursor)
6930: 20 29 3b 0a 20 20 20 20 20 20 20 20 6d 65 6d 41   );.        memA
6940: 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20  boutToChange(p, 
6950: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 29 3b  &aMem[pOp->p2]);
6960: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69  .      }.      i
6970: 66 28 20 28 6f 70 50 72 6f 70 65 72 74 79 20 26  f( (opProperty &
6980: 20 4f 50 46 4c 47 5f 4f 55 54 33 29 21 3d 30 20   OPFLG_OUT3)!=0 
6990: 29 7b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72  ){.        asser
69a0: 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20 29 3b 0a  t( pOp->p3>0 );.
69b0: 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20          assert( 
69c0: 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65  pOp->p3<=(p->nMe
69d0: 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72  m+1 - p->nCursor
69e0: 29 20 29 3b 0a 20 20 20 20 20 20 20 20 6d 65 6d  ) );.        mem
69f0: 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c  AboutToChange(p,
6a00: 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 29   &aMem[pOp->p3])
6a10: 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a  ;.      }.    }.
6a20: 23 65 6e 64 69 66 0a 23 69 66 20 64 65 66 69 6e  #endif.#if defin
6a30: 65 64 28 53 51 4c 49 54 45 5f 44 45 42 55 47 29  ed(SQLITE_DEBUG)
6a40: 20 7c 7c 20 64 65 66 69 6e 65 64 28 56 44 42 45   || defined(VDBE
6a50: 5f 50 52 4f 46 49 4c 45 29 0a 20 20 20 20 70 4f  _PROFILE).    pO
6a60: 72 69 67 4f 70 20 3d 20 70 4f 70 3b 0a 23 65 6e  rigOp = pOp;.#en
6a70: 64 69 66 0a 20 20 0a 20 20 20 20 73 77 69 74 63  dif.  .    switc
6a80: 68 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 20 29  h( pOp->opcode )
6a90: 7b 0a 0a 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  {../************
6aa0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
6ab0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
6ac0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
6ad0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
6ae0: 2a 0a 2a 2a 20 57 68 61 74 20 66 6f 6c 6c 6f 77  *.** What follow
6af0: 73 20 69 73 20 61 20 6d 61 73 73 69 76 65 20 73  s is a massive s
6b00: 77 69 74 63 68 20 73 74 61 74 65 6d 65 6e 74 20  witch statement 
6b10: 77 68 65 72 65 20 65 61 63 68 20 63 61 73 65 20  where each case 
6b20: 69 6d 70 6c 65 6d 65 6e 74 73 20 61 0a 2a 2a 20  implements a.** 
6b30: 73 65 70 61 72 61 74 65 20 69 6e 73 74 72 75 63  separate instruc
6b40: 74 69 6f 6e 20 69 6e 20 74 68 65 20 76 69 72 74  tion in the virt
6b50: 75 61 6c 20 6d 61 63 68 69 6e 65 2e 20 20 49 66  ual machine.  If
6b60: 20 77 65 20 66 6f 6c 6c 6f 77 20 74 68 65 20 75   we follow the u
6b70: 73 75 61 6c 0a 2a 2a 20 69 6e 64 65 6e 74 61 74  sual.** indentat
6b80: 69 6f 6e 20 63 6f 6e 76 65 6e 74 69 6f 6e 73 2c  ion conventions,
6b90: 20 65 61 63 68 20 63 61 73 65 20 73 68 6f 75 6c   each case shoul
6ba0: 64 20 62 65 20 69 6e 64 65 6e 74 65 64 20 62 79  d be indented by
6bb0: 20 36 20 73 70 61 63 65 73 2e 20 20 42 75 74 0a   6 spaces.  But.
6bc0: 2a 2a 20 74 68 61 74 20 69 73 20 61 20 6c 6f 74  ** that is a lot
6bd0: 20 6f 66 20 77 61 73 74 65 64 20 73 70 61 63 65   of wasted space
6be0: 20 6f 6e 20 74 68 65 20 6c 65 66 74 20 6d 61 72   on the left mar
6bf0: 67 69 6e 2e 20 20 53 6f 20 74 68 65 20 63 6f 64  gin.  So the cod
6c00: 65 20 77 69 74 68 69 6e 0a 2a 2a 20 74 68 65 20  e within.** the 
6c10: 73 77 69 74 63 68 20 73 74 61 74 65 6d 65 6e 74  switch statement
6c20: 20 77 69 6c 6c 20 62 72 65 61 6b 20 77 69 74 68   will break with
6c30: 20 63 6f 6e 76 65 6e 74 69 6f 6e 20 61 6e 64 20   convention and 
6c40: 62 65 20 66 6c 75 73 68 2d 6c 65 66 74 2e 20 41  be flush-left. A
6c50: 6e 6f 74 68 65 72 0a 2a 2a 20 62 69 67 20 63 6f  nother.** big co
6c60: 6d 6d 65 6e 74 20 28 73 69 6d 69 6c 61 72 20 74  mment (similar t
6c70: 6f 20 74 68 69 73 20 6f 6e 65 29 20 77 69 6c 6c  o this one) will
6c80: 20 6d 61 72 6b 20 74 68 65 20 70 6f 69 6e 74 20   mark the point 
6c90: 69 6e 20 74 68 65 20 63 6f 64 65 20 77 68 65 72  in the code wher
6ca0: 65 0a 2a 2a 20 77 65 20 74 72 61 6e 73 69 74 69  e.** we transiti
6cb0: 6f 6e 20 62 61 63 6b 20 74 6f 20 6e 6f 72 6d 61  on back to norma
6cc0: 6c 20 69 6e 64 65 6e 74 61 74 69 6f 6e 2e 0a 2a  l indentation..*
6cd0: 2a 0a 2a 2a 20 54 68 65 20 66 6f 72 6d 61 74 74  *.** The formatt
6ce0: 69 6e 67 20 6f 66 20 65 61 63 68 20 63 61 73 65  ing of each case
6cf0: 20 69 73 20 69 6d 70 6f 72 74 61 6e 74 2e 20 20   is important.  
6d00: 54 68 65 20 6d 61 6b 65 66 69 6c 65 20 66 6f 72  The makefile for
6d10: 20 53 51 4c 69 74 65 0a 2a 2a 20 67 65 6e 65 72   SQLite.** gener
6d20: 61 74 65 73 20 74 77 6f 20 43 20 66 69 6c 65 73  ates two C files
6d30: 20 22 6f 70 63 6f 64 65 73 2e 68 22 20 61 6e 64   "opcodes.h" and
6d40: 20 22 6f 70 63 6f 64 65 73 2e 63 22 20 62 79 20   "opcodes.c" by 
6d50: 73 63 61 6e 6e 69 6e 67 20 74 68 69 73 0a 2a 2a  scanning this.**
6d60: 20 66 69 6c 65 20 6c 6f 6f 6b 69 6e 67 20 66 6f   file looking fo
6d70: 72 20 6c 69 6e 65 73 20 74 68 61 74 20 62 65 67  r lines that beg
6d80: 69 6e 20 77 69 74 68 20 22 63 61 73 65 20 4f 50  in with "case OP
6d90: 5f 22 2e 20 20 54 68 65 20 6f 70 63 6f 64 65 73  _".  The opcodes
6da0: 2e 68 20 66 69 6c 65 73 0a 2a 2a 20 77 69 6c 6c  .h files.** will
6db0: 20 62 65 20 66 69 6c 6c 65 64 20 77 69 74 68 20   be filled with 
6dc0: 23 64 65 66 69 6e 65 73 20 74 68 61 74 20 67 69  #defines that gi
6dd0: 76 65 20 75 6e 69 71 75 65 20 69 6e 74 65 67 65  ve unique intege
6de0: 72 20 76 61 6c 75 65 73 20 74 6f 20 65 61 63 68  r values to each
6df0: 0a 2a 2a 20 6f 70 63 6f 64 65 20 61 6e 64 20 74  .** opcode and t
6e00: 68 65 20 6f 70 63 6f 64 65 73 2e 63 20 66 69 6c  he opcodes.c fil
6e10: 65 20 69 73 20 66 69 6c 6c 65 64 20 77 69 74 68  e is filled with
6e20: 20 61 6e 20 61 72 72 61 79 20 6f 66 20 73 74 72   an array of str
6e30: 69 6e 67 73 20 77 68 65 72 65 0a 2a 2a 20 65 61  ings where.** ea
6e40: 63 68 20 73 74 72 69 6e 67 20 69 73 20 74 68 65  ch string is the
6e50: 20 73 79 6d 62 6f 6c 69 63 20 6e 61 6d 65 20 66   symbolic name f
6e60: 6f 72 20 74 68 65 20 63 6f 72 72 65 73 70 6f 6e  or the correspon
6e70: 64 69 6e 67 20 6f 70 63 6f 64 65 2e 20 20 49 66  ding opcode.  If
6e80: 20 74 68 65 0a 2a 2a 20 63 61 73 65 20 73 74 61   the.** case sta
6e90: 74 65 6d 65 6e 74 20 69 73 20 66 6f 6c 6c 6f 77  tement is follow
6ea0: 65 64 20 62 79 20 61 20 63 6f 6d 6d 65 6e 74 20  ed by a comment 
6eb0: 6f 66 20 74 68 65 20 66 6f 72 6d 20 22 2f 23 20  of the form "/# 
6ec0: 73 61 6d 65 20 61 73 20 2e 2e 2e 20 23 2f 22 0a  same as ... #/".
6ed0: 2a 2a 20 74 68 61 74 20 63 6f 6d 6d 65 6e 74 20  ** that comment 
6ee0: 69 73 20 75 73 65 64 20 74 6f 20 64 65 74 65 72  is used to deter
6ef0: 6d 69 6e 65 20 74 68 65 20 70 61 72 74 69 63 75  mine the particu
6f00: 6c 61 72 20 76 61 6c 75 65 20 6f 66 20 74 68 65  lar value of the
6f10: 20 6f 70 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 4f   opcode..**.** O
6f20: 74 68 65 72 20 6b 65 79 77 6f 72 64 73 20 69 6e  ther keywords in
6f30: 20 74 68 65 20 63 6f 6d 6d 65 6e 74 20 74 68 61   the comment tha
6f40: 74 20 66 6f 6c 6c 6f 77 73 20 65 61 63 68 20 63  t follows each c
6f50: 61 73 65 20 61 72 65 20 75 73 65 64 20 74 6f 0a  ase are used to.
6f60: 2a 2a 20 63 6f 6e 73 74 72 75 63 74 20 74 68 65  ** construct the
6f70: 20 4f 50 46 4c 47 5f 49 4e 49 54 49 41 4c 49 5a   OPFLG_INITIALIZ
6f80: 45 52 20 76 61 6c 75 65 20 74 68 61 74 20 69 6e  ER value that in
6f90: 69 74 69 61 6c 69 7a 65 73 20 6f 70 63 6f 64 65  itializes opcode
6fa0: 50 72 6f 70 65 72 74 79 5b 5d 2e 0a 2a 2a 20 4b  Property[]..** K
6fb0: 65 79 77 6f 72 64 73 20 69 6e 63 6c 75 64 65 3a  eywords include:
6fc0: 20 69 6e 31 2c 20 69 6e 32 2c 20 69 6e 33 2c 20   in1, in2, in3, 
6fd0: 6f 75 74 32 2c 20 6f 75 74 33 2e 20 20 53 65 65  out2, out3.  See
6fe0: 0a 2a 2a 20 74 68 65 20 6d 6b 6f 70 63 6f 64 65  .** the mkopcode
6ff0: 68 2e 61 77 6b 20 73 63 72 69 70 74 20 66 6f 72  h.awk script for
7000: 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f   additional info
7010: 72 6d 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 44  rmation..**.** D
7020: 6f 63 75 6d 65 6e 74 61 74 69 6f 6e 20 61 62 6f  ocumentation abo
7030: 75 74 20 56 44 42 45 20 6f 70 63 6f 64 65 73 20  ut VDBE opcodes 
7040: 69 73 20 67 65 6e 65 72 61 74 65 64 20 62 79 20  is generated by 
7050: 73 63 61 6e 6e 69 6e 67 20 74 68 69 73 20 66 69  scanning this fi
7060: 6c 65 0a 2a 2a 20 66 6f 72 20 6c 69 6e 65 73 20  le.** for lines 
7070: 6f 66 20 74 68 61 74 20 63 6f 6e 74 61 69 6e 20  of that contain 
7080: 22 4f 70 63 6f 64 65 3a 22 2e 20 20 54 68 61 74  "Opcode:".  That
7090: 20 6c 69 6e 65 20 61 6e 64 20 61 6c 6c 20 73 75   line and all su
70a0: 62 73 65 71 75 65 6e 74 0a 2a 2a 20 63 6f 6d 6d  bsequent.** comm
70b0: 65 6e 74 20 6c 69 6e 65 73 20 61 72 65 20 75 73  ent lines are us
70c0: 65 64 20 69 6e 20 74 68 65 20 67 65 6e 65 72 61  ed in the genera
70d0: 74 69 6f 6e 20 6f 66 20 74 68 65 20 6f 70 63 6f  tion of the opco
70e0: 64 65 2e 68 74 6d 6c 20 64 6f 63 75 6d 65 6e 74  de.html document
70f0: 61 74 69 6f 6e 0a 2a 2a 20 66 69 6c 65 2e 0a 2a  ation.** file..*
7100: 2a 0a 2a 2a 20 53 55 4d 4d 41 52 59 3a 0a 2a 2a  *.** SUMMARY:.**
7110: 0a 2a 2a 20 20 20 20 20 46 6f 72 6d 61 74 74 69  .**     Formatti
7120: 6e 67 20 69 73 20 69 6d 70 6f 72 74 61 6e 74 20  ng is important 
7130: 74 6f 20 73 63 72 69 70 74 73 20 74 68 61 74 20  to scripts that 
7140: 73 63 61 6e 20 74 68 69 73 20 66 69 6c 65 2e 0a  scan this file..
7150: 2a 2a 20 20 20 20 20 44 6f 20 6e 6f 74 20 64 65  **     Do not de
7160: 76 69 61 74 65 20 66 72 6f 6d 20 74 68 65 20 66  viate from the f
7170: 6f 72 6d 61 74 74 69 6e 67 20 73 74 79 6c 65 20  ormatting style 
7180: 63 75 72 72 65 6e 74 6c 79 20 69 6e 20 75 73 65  currently in use
7190: 2e 0a 2a 2a 0a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ..**.***********
71a0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
71b0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
71c0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
71d0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
71e0: 2a 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  **/../* Opcode: 
71f0: 20 47 6f 74 6f 20 2a 20 50 32 20 2a 20 2a 20 2a   Goto * P2 * * *
7200: 0a 2a 2a 0a 2a 2a 20 41 6e 20 75 6e 63 6f 6e 64  .**.** An uncond
7210: 69 74 69 6f 6e 61 6c 20 6a 75 6d 70 20 74 6f 20  itional jump to 
7220: 61 64 64 72 65 73 73 20 50 32 2e 0a 2a 2a 20 54  address P2..** T
7230: 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63 74  he next instruct
7240: 69 6f 6e 20 65 78 65 63 75 74 65 64 20 77 69 6c  ion executed wil
7250: 6c 20 62 65 20 0a 2a 2a 20 74 68 65 20 6f 6e 65  l be .** the one
7260: 20 61 74 20 69 6e 64 65 78 20 50 32 20 66 72 6f   at index P2 fro
7270: 6d 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 20  m the beginning 
7280: 6f 66 0a 2a 2a 20 74 68 65 20 70 72 6f 67 72 61  of.** the progra
7290: 6d 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 31 20  m..**.** The P1 
72a0: 70 61 72 61 6d 65 74 65 72 20 69 73 20 6e 6f 74  parameter is not
72b0: 20 61 63 74 75 61 6c 6c 79 20 75 73 65 64 20 62   actually used b
72c0: 79 20 74 68 69 73 20 6f 70 63 6f 64 65 2e 20 20  y this opcode.  
72d0: 48 6f 77 65 76 65 72 2c 20 69 74 0a 2a 2a 20 69  However, it.** i
72e0: 73 20 73 6f 6d 65 74 69 6d 65 73 20 73 65 74 20  s sometimes set 
72f0: 74 6f 20 31 20 69 6e 73 74 65 61 64 20 6f 66 20  to 1 instead of 
7300: 30 20 61 73 20 61 20 68 69 6e 74 20 74 6f 20 74  0 as a hint to t
7310: 68 65 20 63 6f 6d 6d 61 6e 64 2d 6c 69 6e 65 20  he command-line 
7320: 73 68 65 6c 6c 0a 2a 2a 20 74 68 61 74 20 74 68  shell.** that th
7330: 69 73 20 47 6f 74 6f 20 69 73 20 74 68 65 20 62  is Goto is the b
7340: 6f 74 74 6f 6d 20 6f 66 20 61 20 6c 6f 6f 70 20  ottom of a loop 
7350: 61 6e 64 20 74 68 61 74 20 74 68 65 20 6c 69 6e  and that the lin
7360: 65 73 20 66 72 6f 6d 20 50 32 20 64 6f 77 6e 0a  es from P2 down.
7370: 2a 2a 20 74 6f 20 74 68 65 20 63 75 72 72 65 6e  ** to the curren
7380: 74 20 6c 69 6e 65 20 73 68 6f 75 6c 64 20 62 65  t line should be
7390: 20 69 6e 64 65 6e 74 65 64 20 66 6f 72 20 45 58   indented for EX
73a0: 50 4c 41 49 4e 20 6f 75 74 70 75 74 2e 0a 2a 2f  PLAIN output..*/
73b0: 0a 63 61 73 65 20 4f 50 5f 47 6f 74 6f 3a 20 7b  .case OP_Goto: {
73c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
73d0: 6a 75 6d 70 20 2a 2f 0a 6a 75 6d 70 5f 74 6f 5f  jump */.jump_to_
73e0: 70 32 5f 61 6e 64 5f 63 68 65 63 6b 5f 66 6f 72  p2_and_check_for
73f0: 5f 69 6e 74 65 72 72 75 70 74 3a 0a 20 20 70 4f  _interrupt:.  pO
7400: 70 20 3d 20 26 61 4f 70 5b 70 4f 70 2d 3e 70 32  p = &aOp[pOp->p2
7410: 20 2d 20 31 5d 3b 0a 0a 20 20 2f 2a 20 4f 70 63   - 1];..  /* Opc
7420: 6f 64 65 73 20 74 68 61 74 20 61 72 65 20 75 73  odes that are us
7430: 65 64 20 61 73 20 74 68 65 20 62 6f 74 74 6f 6d  ed as the bottom
7440: 20 6f 66 20 61 20 6c 6f 6f 70 20 28 4f 50 5f 4e   of a loop (OP_N
7450: 65 78 74 2c 20 4f 50 5f 50 72 65 76 2c 0a 20 20  ext, OP_Prev,.  
7460: 2a 2a 20 4f 50 5f 56 4e 65 78 74 2c 20 6f 72 20  ** OP_VNext, or 
7470: 4f 50 5f 53 6f 72 74 65 72 4e 65 78 74 29 20 61  OP_SorterNext) a
7480: 6c 6c 20 6a 75 6d 70 20 68 65 72 65 20 75 70 6f  ll jump here upo
7490: 6e 0a 20 20 2a 2a 20 63 6f 6d 70 6c 65 74 69 6f  n.  ** completio
74a0: 6e 2e 20 20 43 68 65 63 6b 20 74 6f 20 73 65 65  n.  Check to see
74b0: 20 69 66 20 73 71 6c 69 74 65 33 5f 69 6e 74 65   if sqlite3_inte
74c0: 72 72 75 70 74 28 29 20 68 61 73 20 62 65 65 6e  rrupt() has been
74d0: 20 63 61 6c 6c 65 64 0a 20 20 2a 2a 20 6f 72 20   called.  ** or 
74e0: 69 66 20 74 68 65 20 70 72 6f 67 72 65 73 73 20  if the progress 
74f0: 63 61 6c 6c 62 61 63 6b 20 6e 65 65 64 73 20 74  callback needs t
7500: 6f 20 62 65 20 69 6e 76 6f 6b 65 64 2e 20 0a 20  o be invoked. . 
7510: 20 2a 2a 0a 20 20 2a 2a 20 54 68 69 73 20 63 6f   **.  ** This co
7520: 64 65 20 75 73 65 73 20 75 6e 73 74 72 75 63 74  de uses unstruct
7530: 75 72 65 64 20 22 67 6f 74 6f 22 20 73 74 61 74  ured "goto" stat
7540: 65 6d 65 6e 74 73 20 61 6e 64 20 64 6f 65 73 20  ements and does 
7550: 6e 6f 74 20 6c 6f 6f 6b 20 63 6c 65 61 6e 2e 0a  not look clean..
7560: 20 20 2a 2a 20 42 75 74 20 74 68 61 74 20 69 73    ** But that is
7570: 20 6e 6f 74 20 64 75 65 20 74 6f 20 73 6c 6f 70   not due to slop
7580: 70 79 20 63 6f 64 69 6e 67 20 68 61 62 69 74 73  py coding habits
7590: 2e 20 54 68 65 20 63 6f 64 65 20 69 73 20 77 72  . The code is wr
75a0: 69 74 74 65 6e 20 74 68 69 73 0a 20 20 2a 2a 20  itten this.  ** 
75b0: 77 61 79 20 66 6f 72 20 70 65 72 66 6f 72 6d 61  way for performa
75c0: 6e 63 65 2c 20 74 6f 20 61 76 6f 69 64 20 68 61  nce, to avoid ha
75d0: 76 69 6e 67 20 74 6f 20 72 75 6e 20 74 68 65 20  ving to run the 
75e0: 69 6e 74 65 72 72 75 70 74 20 61 6e 64 20 70 72  interrupt and pr
75f0: 6f 67 72 65 73 73 0a 20 20 2a 2a 20 63 68 65 63  ogress.  ** chec
7600: 6b 73 20 6f 6e 20 65 76 65 72 79 20 6f 70 63 6f  ks on every opco
7610: 64 65 2e 20 20 54 68 69 73 20 68 65 6c 70 73 20  de.  This helps 
7620: 73 71 6c 69 74 65 33 5f 73 74 65 70 28 29 20 74  sqlite3_step() t
7630: 6f 20 72 75 6e 20 61 62 6f 75 74 20 31 2e 35 25  o run about 1.5%
7640: 0a 20 20 2a 2a 20 66 61 73 74 65 72 20 61 63 63  .  ** faster acc
7650: 6f 72 64 69 6e 67 20 74 6f 20 22 76 61 6c 67 72  ording to "valgr
7660: 69 6e 64 20 2d 2d 74 6f 6f 6c 3d 63 61 63 68 65  ind --tool=cache
7670: 67 72 69 6e 64 22 20 2a 2f 0a 63 68 65 63 6b 5f  grind" */.check_
7680: 66 6f 72 5f 69 6e 74 65 72 72 75 70 74 3a 0a 20  for_interrupt:. 
7690: 20 69 66 28 20 64 62 2d 3e 75 31 2e 69 73 49 6e   if( db->u1.isIn
76a0: 74 65 72 72 75 70 74 65 64 20 29 20 67 6f 74 6f  terrupted ) goto
76b0: 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 69 6e   abort_due_to_in
76c0: 74 65 72 72 75 70 74 3b 0a 23 69 66 6e 64 65 66  terrupt;.#ifndef
76d0: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 52 4f   SQLITE_OMIT_PRO
76e0: 47 52 45 53 53 5f 43 41 4c 4c 42 41 43 4b 0a 20  GRESS_CALLBACK. 
76f0: 20 2f 2a 20 43 61 6c 6c 20 74 68 65 20 70 72 6f   /* Call the pro
7700: 67 72 65 73 73 20 63 61 6c 6c 62 61 63 6b 20 69  gress callback i
7710: 66 20 69 74 20 69 73 20 63 6f 6e 66 69 67 75 72  f it is configur
7720: 65 64 20 61 6e 64 20 74 68 65 20 72 65 71 75 69  ed and the requi
7730: 72 65 64 20 6e 75 6d 62 65 72 0a 20 20 2a 2a 20  red number.  ** 
7740: 6f 66 20 56 44 42 45 20 6f 70 73 20 68 61 76 65  of VDBE ops have
7750: 20 62 65 65 6e 20 65 78 65 63 75 74 65 64 20 28   been executed (
7760: 65 69 74 68 65 72 20 73 69 6e 63 65 20 74 68 69  either since thi
7770: 73 20 69 6e 76 6f 63 61 74 69 6f 6e 20 6f 66 0a  s invocation of.
7780: 20 20 2a 2a 20 73 71 6c 69 74 65 33 56 64 62 65    ** sqlite3Vdbe
7790: 45 78 65 63 28 29 20 6f 72 20 73 69 6e 63 65 20  Exec() or since 
77a0: 6c 61 73 74 20 74 69 6d 65 20 74 68 65 20 70 72  last time the pr
77b0: 6f 67 72 65 73 73 20 63 61 6c 6c 62 61 63 6b 20  ogress callback 
77c0: 77 61 73 20 63 61 6c 6c 65 64 29 2e 0a 20 20 2a  was called)..  *
77d0: 2a 20 49 66 20 74 68 65 20 70 72 6f 67 72 65 73  * If the progres
77e0: 73 20 63 61 6c 6c 62 61 63 6b 20 72 65 74 75 72  s callback retur
77f0: 6e 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 65 78 69  ns non-zero, exi
7800: 74 20 74 68 65 20 76 69 72 74 75 61 6c 20 6d 61  t the virtual ma
7810: 63 68 69 6e 65 20 77 69 74 68 0a 20 20 2a 2a 20  chine with.  ** 
7820: 61 20 72 65 74 75 72 6e 20 63 6f 64 65 20 53 51  a return code SQ
7830: 4c 49 54 45 5f 41 42 4f 52 54 2e 0a 20 20 2a 2f  LITE_ABORT..  */
7840: 0a 20 20 77 68 69 6c 65 28 20 6e 56 6d 53 74 65  .  while( nVmSte
7850: 70 3e 3d 6e 50 72 6f 67 72 65 73 73 4c 69 6d 69  p>=nProgressLimi
7860: 74 20 26 26 20 64 62 2d 3e 78 50 72 6f 67 72 65  t && db->xProgre
7870: 73 73 21 3d 30 20 29 7b 0a 20 20 20 20 61 73 73  ss!=0 ){.    ass
7880: 65 72 74 28 20 64 62 2d 3e 6e 50 72 6f 67 72 65  ert( db->nProgre
7890: 73 73 4f 70 73 21 3d 30 20 29 3b 0a 20 20 20 20  ssOps!=0 );.    
78a0: 6e 50 72 6f 67 72 65 73 73 4c 69 6d 69 74 20 2b  nProgressLimit +
78b0: 3d 20 64 62 2d 3e 6e 50 72 6f 67 72 65 73 73 4f  = db->nProgressO
78c0: 70 73 3b 0a 20 20 20 20 69 66 28 20 64 62 2d 3e  ps;.    if( db->
78d0: 78 50 72 6f 67 72 65 73 73 28 64 62 2d 3e 70 50  xProgress(db->pP
78e0: 72 6f 67 72 65 73 73 41 72 67 29 20 29 7b 0a 20  rogressArg) ){. 
78f0: 20 20 20 20 20 6e 50 72 6f 67 72 65 73 73 4c 69       nProgressLi
7900: 6d 69 74 20 3d 20 30 78 66 66 66 66 66 66 66 66  mit = 0xffffffff
7910: 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c  ;.      rc = SQL
7920: 49 54 45 5f 49 4e 54 45 52 52 55 50 54 3b 0a 20  ITE_INTERRUPT;. 
7930: 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f       goto abort_
7940: 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
7950: 20 20 7d 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 20    }.  }.#endif. 
7960: 20 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a   .  break;.}../*
7970: 20 4f 70 63 6f 64 65 3a 20 20 47 6f 73 75 62 20   Opcode:  Gosub 
7980: 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a  P1 P2 * * *.**.*
7990: 2a 20 57 72 69 74 65 20 74 68 65 20 63 75 72 72  * Write the curr
79a0: 65 6e 74 20 61 64 64 72 65 73 73 20 6f 6e 74 6f  ent address onto
79b0: 20 72 65 67 69 73 74 65 72 20 50 31 0a 2a 2a 20   register P1.** 
79c0: 61 6e 64 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f  and then jump to
79d0: 20 61 64 64 72 65 73 73 20 50 32 2e 0a 2a 2f 0a   address P2..*/.
79e0: 63 61 73 65 20 4f 50 5f 47 6f 73 75 62 3a 20 7b  case OP_Gosub: {
79f0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a              /* j
7a00: 75 6d 70 20 2a 2f 0a 20 20 61 73 73 65 72 74 28  ump */.  assert(
7a10: 20 70 4f 70 2d 3e 70 31 3e 30 20 26 26 20 70 4f   pOp->p1>0 && pO
7a20: 70 2d 3e 70 31 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b  p->p1<=(p->nMem+
7a30: 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29 20  1 - p->nCursor) 
7a40: 29 3b 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65  );.  pIn1 = &aMe
7a50: 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  m[pOp->p1];.  as
7a60: 73 65 72 74 28 20 56 64 62 65 4d 65 6d 44 79 6e  sert( VdbeMemDyn
7a70: 61 6d 69 63 28 70 49 6e 31 29 3d 3d 30 20 29 3b  amic(pIn1)==0 );
7a80: 0a 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61  .  memAboutToCha
7a90: 6e 67 65 28 70 2c 20 70 49 6e 31 29 3b 0a 20 20  nge(p, pIn1);.  
7aa0: 70 49 6e 31 2d 3e 66 6c 61 67 73 20 3d 20 4d 45  pIn1->flags = ME
7ab0: 4d 5f 49 6e 74 3b 0a 20 20 70 49 6e 31 2d 3e 75  M_Int;.  pIn1->u
7ac0: 2e 69 20 3d 20 28 69 6e 74 29 28 70 4f 70 2d 61  .i = (int)(pOp-a
7ad0: 4f 70 29 3b 0a 20 20 52 45 47 49 53 54 45 52 5f  Op);.  REGISTER_
7ae0: 54 52 41 43 45 28 70 4f 70 2d 3e 70 31 2c 20 70  TRACE(pOp->p1, p
7af0: 49 6e 31 29 3b 0a 0a 20 20 2f 2a 20 4d 6f 73 74  In1);..  /* Most
7b00: 20 6a 75 6d 70 20 6f 70 65 72 61 74 69 6f 6e 73   jump operations
7b10: 20 64 6f 20 61 20 67 6f 74 6f 20 74 6f 20 74 68   do a goto to th
7b20: 69 73 20 73 70 6f 74 20 69 6e 20 6f 72 64 65 72  is spot in order
7b30: 20 74 6f 20 75 70 64 61 74 65 0a 20 20 2a 2a 20   to update.  ** 
7b40: 74 68 65 20 70 4f 70 20 70 6f 69 6e 74 65 72 2e  the pOp pointer.
7b50: 20 2a 2f 0a 6a 75 6d 70 5f 74 6f 5f 70 32 3a 0a   */.jump_to_p2:.
7b60: 20 20 70 4f 70 20 3d 20 26 61 4f 70 5b 70 4f 70    pOp = &aOp[pOp
7b70: 2d 3e 70 32 20 2d 20 31 5d 3b 0a 20 20 62 72 65  ->p2 - 1];.  bre
7b80: 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
7b90: 3a 20 20 52 65 74 75 72 6e 20 50 31 20 2a 20 2a  :  Return P1 * *
7ba0: 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70 20   * *.**.** Jump 
7bb0: 74 6f 20 74 68 65 20 6e 65 78 74 20 69 6e 73 74  to the next inst
7bc0: 72 75 63 74 69 6f 6e 20 61 66 74 65 72 20 74 68  ruction after th
7bd0: 65 20 61 64 64 72 65 73 73 20 69 6e 20 72 65 67  e address in reg
7be0: 69 73 74 65 72 20 50 31 2e 20 20 41 66 74 65 72  ister P1.  After
7bf0: 0a 2a 2a 20 74 68 65 20 6a 75 6d 70 2c 20 72 65  .** the jump, re
7c00: 67 69 73 74 65 72 20 50 31 20 62 65 63 6f 6d 65  gister P1 become
7c10: 73 20 75 6e 64 65 66 69 6e 65 64 2e 0a 2a 2f 0a  s undefined..*/.
7c20: 63 61 73 65 20 4f 50 5f 52 65 74 75 72 6e 3a 20  case OP_Return: 
7c30: 7b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69  {           /* i
7c40: 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26  n1 */.  pIn1 = &
7c50: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  aMem[pOp->p1];. 
7c60: 20 61 73 73 65 72 74 28 20 70 49 6e 31 2d 3e 66   assert( pIn1->f
7c70: 6c 61 67 73 3d 3d 4d 45 4d 5f 49 6e 74 20 29 3b  lags==MEM_Int );
7c80: 0a 20 20 70 4f 70 20 3d 20 26 61 4f 70 5b 70 49  .  pOp = &aOp[pI
7c90: 6e 31 2d 3e 75 2e 69 5d 3b 0a 20 20 70 49 6e 31  n1->u.i];.  pIn1
7ca0: 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 55 6e  ->flags = MEM_Un
7cb0: 64 65 66 69 6e 65 64 3b 0a 20 20 62 72 65 61 6b  defined;.  break
7cc0: 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
7cd0: 49 6e 69 74 43 6f 72 6f 75 74 69 6e 65 20 50 31  InitCoroutine P1
7ce0: 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a   P2 P3 * *.**.**
7cf0: 20 53 65 74 20 75 70 20 72 65 67 69 73 74 65 72   Set up register
7d00: 20 50 31 20 73 6f 20 74 68 61 74 20 69 74 20 77   P1 so that it w
7d10: 69 6c 6c 20 59 69 65 6c 64 20 74 6f 20 74 68 65  ill Yield to the
7d20: 20 63 6f 72 6f 75 74 69 6e 65 0a 2a 2a 20 6c 6f   coroutine.** lo
7d30: 63 61 74 65 64 20 61 74 20 61 64 64 72 65 73 73  cated at address
7d40: 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 32   P3..**.** If P2
7d50: 21 3d 30 20 74 68 65 6e 20 74 68 65 20 63 6f 72  !=0 then the cor
7d60: 6f 75 74 69 6e 65 20 69 6d 70 6c 65 6d 65 6e 74  outine implement
7d70: 61 74 69 6f 6e 20 69 6d 6d 65 64 69 61 74 65 6c  ation immediatel
7d80: 79 20 66 6f 6c 6c 6f 77 73 0a 2a 2a 20 74 68 69  y follows.** thi
7d90: 73 20 6f 70 63 6f 64 65 2e 20 20 53 6f 20 6a 75  s opcode.  So ju
7da0: 6d 70 20 6f 76 65 72 20 74 68 65 20 63 6f 72 6f  mp over the coro
7db0: 75 74 69 6e 65 20 69 6d 70 6c 65 6d 65 6e 74 61  utine implementa
7dc0: 74 69 6f 6e 20 74 6f 0a 2a 2a 20 61 64 64 72 65  tion to.** addre
7dd0: 73 73 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 53 65 65  ss P2..**.** See
7de0: 20 61 6c 73 6f 3a 20 45 6e 64 43 6f 72 6f 75 74   also: EndCorout
7df0: 69 6e 65 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49  ine.*/.case OP_I
7e00: 6e 69 74 43 6f 72 6f 75 74 69 6e 65 3a 20 7b 20  nitCoroutine: { 
7e10: 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20      /* jump */. 
7e20: 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
7e30: 3e 30 20 26 26 20 20 70 4f 70 2d 3e 70 31 3c 3d  >0 &&  pOp->p1<=
7e40: 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e  (p->nMem+1 - p->
7e50: 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 61 73  nCursor) );.  as
7e60: 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e 3d 30  sert( pOp->p2>=0
7e70: 20 26 26 20 70 4f 70 2d 3e 70 32 3c 70 2d 3e 6e   && pOp->p2<p->n
7e80: 4f 70 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  Op );.  assert( 
7e90: 70 4f 70 2d 3e 70 33 3e 3d 30 20 26 26 20 70 4f  pOp->p3>=0 && pO
7ea0: 70 2d 3e 70 33 3c 70 2d 3e 6e 4f 70 20 29 3b 0a  p->p3<p->nOp );.
7eb0: 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70    pOut = &aMem[p
7ec0: 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72  Op->p1];.  asser
7ed0: 74 28 20 21 56 64 62 65 4d 65 6d 44 79 6e 61 6d  t( !VdbeMemDynam
7ee0: 69 63 28 70 4f 75 74 29 20 29 3b 0a 20 20 70 4f  ic(pOut) );.  pO
7ef0: 75 74 2d 3e 75 2e 69 20 3d 20 70 4f 70 2d 3e 70  ut->u.i = pOp->p
7f00: 33 20 2d 20 31 3b 0a 20 20 70 4f 75 74 2d 3e 66  3 - 1;.  pOut->f
7f10: 6c 61 67 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a  lags = MEM_Int;.
7f20: 20 20 69 66 28 20 70 4f 70 2d 3e 70 32 20 29 20    if( pOp->p2 ) 
7f30: 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b  goto jump_to_p2;
7f40: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
7f50: 4f 70 63 6f 64 65 3a 20 20 45 6e 64 43 6f 72 6f  Opcode:  EndCoro
7f60: 75 74 69 6e 65 20 50 31 20 2a 20 2a 20 2a 20 2a  utine P1 * * * *
7f70: 0a 2a 2a 0a 2a 2a 20 54 68 65 20 69 6e 73 74 72  .**.** The instr
7f80: 75 63 74 69 6f 6e 20 61 74 20 74 68 65 20 61 64  uction at the ad
7f90: 64 72 65 73 73 20 69 6e 20 72 65 67 69 73 74 65  dress in registe
7fa0: 72 20 50 31 20 69 73 20 61 20 59 69 65 6c 64 2e  r P1 is a Yield.
7fb0: 0a 2a 2a 20 4a 75 6d 70 20 74 6f 20 74 68 65 20  .** Jump to the 
7fc0: 50 32 20 70 61 72 61 6d 65 74 65 72 20 6f 66 20  P2 parameter of 
7fd0: 74 68 61 74 20 59 69 65 6c 64 2e 0a 2a 2a 20 41  that Yield..** A
7fe0: 66 74 65 72 20 74 68 65 20 6a 75 6d 70 2c 20 72  fter the jump, r
7ff0: 65 67 69 73 74 65 72 20 50 31 20 62 65 63 6f 6d  egister P1 becom
8000: 65 73 20 75 6e 64 65 66 69 6e 65 64 2e 0a 2a 2a  es undefined..**
8010: 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 49 6e  .** See also: In
8020: 69 74 43 6f 72 6f 75 74 69 6e 65 0a 2a 2f 0a 63  itCoroutine.*/.c
8030: 61 73 65 20 4f 50 5f 45 6e 64 43 6f 72 6f 75 74  ase OP_EndCorout
8040: 69 6e 65 3a 20 7b 20 20 20 20 20 20 20 20 20 20  ine: {          
8050: 20 2f 2a 20 69 6e 31 20 2a 2f 0a 20 20 56 64 62   /* in1 */.  Vdb
8060: 65 4f 70 20 2a 70 43 61 6c 6c 65 72 3b 0a 20 20  eOp *pCaller;.  
8070: 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn1 = &aMem[pOp
8080: 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p1];.  assert(
8090: 20 70 49 6e 31 2d 3e 66 6c 61 67 73 3d 3d 4d 45   pIn1->flags==ME
80a0: 4d 5f 49 6e 74 20 29 3b 0a 20 20 61 73 73 65 72  M_Int );.  asser
80b0: 74 28 20 70 49 6e 31 2d 3e 75 2e 69 3e 3d 30 20  t( pIn1->u.i>=0 
80c0: 26 26 20 70 49 6e 31 2d 3e 75 2e 69 3c 70 2d 3e  && pIn1->u.i<p->
80d0: 6e 4f 70 20 29 3b 0a 20 20 70 43 61 6c 6c 65 72  nOp );.  pCaller
80e0: 20 3d 20 26 61 4f 70 5b 70 49 6e 31 2d 3e 75 2e   = &aOp[pIn1->u.
80f0: 69 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43  i];.  assert( pC
8100: 61 6c 6c 65 72 2d 3e 6f 70 63 6f 64 65 3d 3d 4f  aller->opcode==O
8110: 50 5f 59 69 65 6c 64 20 29 3b 0a 20 20 61 73 73  P_Yield );.  ass
8120: 65 72 74 28 20 70 43 61 6c 6c 65 72 2d 3e 70 32  ert( pCaller->p2
8130: 3e 3d 30 20 26 26 20 70 43 61 6c 6c 65 72 2d 3e  >=0 && pCaller->
8140: 70 32 3c 70 2d 3e 6e 4f 70 20 29 3b 0a 20 20 70  p2<p->nOp );.  p
8150: 4f 70 20 3d 20 26 61 4f 70 5b 70 43 61 6c 6c 65  Op = &aOp[pCalle
8160: 72 2d 3e 70 32 20 2d 20 31 5d 3b 0a 20 20 70 49  r->p2 - 1];.  pI
8170: 6e 31 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f  n1->flags = MEM_
8180: 55 6e 64 65 66 69 6e 65 64 3b 0a 20 20 62 72 65  Undefined;.  bre
8190: 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
81a0: 3a 20 20 59 69 65 6c 64 20 50 31 20 50 32 20 2a  :  Yield P1 P2 *
81b0: 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 53 77 61 70 20   * *.**.** Swap 
81c0: 74 68 65 20 70 72 6f 67 72 61 6d 20 63 6f 75 6e  the program coun
81d0: 74 65 72 20 77 69 74 68 20 74 68 65 20 76 61 6c  ter with the val
81e0: 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
81f0: 31 2e 20 20 54 68 69 73 0a 2a 2a 20 68 61 73 20  1.  This.** has 
8200: 74 68 65 20 65 66 66 65 63 74 20 6f 66 20 79 69  the effect of yi
8210: 65 6c 64 69 6e 67 20 74 6f 20 61 20 63 6f 72 6f  elding to a coro
8220: 75 74 69 6e 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  utine..**.** If 
8230: 74 68 65 20 63 6f 72 6f 75 74 69 6e 65 20 74 68  the coroutine th
8240: 61 74 20 69 73 20 6c 61 75 6e 63 68 65 64 20 62  at is launched b
8250: 79 20 74 68 69 73 20 69 6e 73 74 72 75 63 74 69  y this instructi
8260: 6f 6e 20 65 6e 64 73 20 77 69 74 68 0a 2a 2a 20  on ends with.** 
8270: 59 69 65 6c 64 20 6f 72 20 52 65 74 75 72 6e 20  Yield or Return 
8280: 74 68 65 6e 20 63 6f 6e 74 69 6e 75 65 20 74 6f  then continue to
8290: 20 74 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75   the next instru
82a0: 63 74 69 6f 6e 2e 20 20 42 75 74 20 69 66 0a 2a  ction.  But if.*
82b0: 2a 20 74 68 65 20 63 6f 72 6f 75 74 69 6e 65 20  * the coroutine 
82c0: 6c 61 75 6e 63 68 65 64 20 62 79 20 74 68 69 73  launched by this
82d0: 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 65 6e 64   instruction end
82e0: 73 20 77 69 74 68 0a 2a 2a 20 45 6e 64 43 6f 72  s with.** EndCor
82f0: 6f 75 74 69 6e 65 2c 20 74 68 65 6e 20 6a 75 6d  outine, then jum
8300: 70 20 74 6f 20 50 32 20 72 61 74 68 65 72 20 74  p to P2 rather t
8310: 68 61 6e 20 63 6f 6e 74 69 6e 75 69 6e 67 20 77  han continuing w
8320: 69 74 68 20 74 68 65 0a 2a 2a 20 6e 65 78 74 20  ith the.** next 
8330: 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a 0a  instruction..**.
8340: 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 49 6e 69  ** See also: Ini
8350: 74 43 6f 72 6f 75 74 69 6e 65 0a 2a 2f 0a 63 61  tCoroutine.*/.ca
8360: 73 65 20 4f 50 5f 59 69 65 6c 64 3a 20 7b 20 20  se OP_Yield: {  
8370: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 31            /* in1
8380: 2c 20 6a 75 6d 70 20 2a 2f 0a 20 20 69 6e 74 20  , jump */.  int 
8390: 70 63 44 65 73 74 3b 0a 20 20 70 49 6e 31 20 3d  pcDest;.  pIn1 =
83a0: 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b   &aMem[pOp->p1];
83b0: 0a 20 20 61 73 73 65 72 74 28 20 56 64 62 65 4d  .  assert( VdbeM
83c0: 65 6d 44 79 6e 61 6d 69 63 28 70 49 6e 31 29 3d  emDynamic(pIn1)=
83d0: 3d 30 20 29 3b 0a 20 20 70 49 6e 31 2d 3e 66 6c  =0 );.  pIn1->fl
83e0: 61 67 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20  ags = MEM_Int;. 
83f0: 20 70 63 44 65 73 74 20 3d 20 28 69 6e 74 29 70   pcDest = (int)p
8400: 49 6e 31 2d 3e 75 2e 69 3b 0a 20 20 70 49 6e 31  In1->u.i;.  pIn1
8410: 2d 3e 75 2e 69 20 3d 20 28 69 6e 74 29 28 70 4f  ->u.i = (int)(pO
8420: 70 20 2d 20 61 4f 70 29 3b 0a 20 20 52 45 47 49  p - aOp);.  REGI
8430: 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e  STER_TRACE(pOp->
8440: 70 31 2c 20 70 49 6e 31 29 3b 0a 20 20 70 4f 70  p1, pIn1);.  pOp
8450: 20 3d 20 26 61 4f 70 5b 70 63 44 65 73 74 5d 3b   = &aOp[pcDest];
8460: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
8470: 4f 70 63 6f 64 65 3a 20 20 48 61 6c 74 49 66 4e  Opcode:  HaltIfN
8480: 75 6c 6c 20 20 50 31 20 50 32 20 50 33 20 50 34  ull  P1 P2 P3 P4
8490: 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a   P5.** Synopsis:
84a0: 20 69 66 20 72 5b 50 33 5d 3d 6e 75 6c 6c 20 68   if r[P3]=null h
84b0: 61 6c 74 0a 2a 2a 0a 2a 2a 20 43 68 65 63 6b 20  alt.**.** Check 
84c0: 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67  the value in reg
84d0: 69 73 74 65 72 20 50 33 2e 20 20 49 66 20 69 74  ister P3.  If it
84e0: 20 69 73 20 4e 55 4c 4c 20 74 68 65 6e 20 48 61   is NULL then Ha
84f0: 6c 74 20 75 73 69 6e 67 0a 2a 2a 20 70 61 72 61  lt using.** para
8500: 6d 65 74 65 72 20 50 31 2c 20 50 32 2c 20 61 6e  meter P1, P2, an
8510: 64 20 50 34 20 61 73 20 69 66 20 74 68 69 73 20  d P4 as if this 
8520: 77 65 72 65 20 61 20 48 61 6c 74 20 69 6e 73 74  were a Halt inst
8530: 72 75 63 74 69 6f 6e 2e 20 20 49 66 20 74 68 65  ruction.  If the
8540: 0a 2a 2a 20 76 61 6c 75 65 20 69 6e 20 72 65 67  .** value in reg
8550: 69 73 74 65 72 20 50 33 20 69 73 20 6e 6f 74 20  ister P3 is not 
8560: 4e 55 4c 4c 2c 20 74 68 65 6e 20 74 68 69 73 20  NULL, then this 
8570: 72 6f 75 74 69 6e 65 20 69 73 20 61 20 6e 6f 2d  routine is a no-
8580: 6f 70 2e 0a 2a 2a 20 54 68 65 20 50 35 20 70 61  op..** The P5 pa
8590: 72 61 6d 65 74 65 72 20 73 68 6f 75 6c 64 20 62  rameter should b
85a0: 65 20 31 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  e 1..*/.case OP_
85b0: 48 61 6c 74 49 66 4e 75 6c 6c 3a 20 7b 20 20 20  HaltIfNull: {   
85c0: 20 20 20 2f 2a 20 69 6e 33 20 2a 2f 0a 20 20 70     /* in3 */.  p
85d0: 49 6e 33 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In3 = &aMem[pOp-
85e0: 3e 70 33 5d 3b 0a 23 69 66 64 65 66 20 53 51 4c  >p3];.#ifdef SQL
85f0: 49 54 45 5f 44 45 42 55 47 0a 20 20 69 66 28 20  ITE_DEBUG.  if( 
8600: 70 4f 70 2d 3e 70 32 3d 3d 4f 45 5f 41 62 6f 72  pOp->p2==OE_Abor
8610: 74 20 29 7b 20 73 71 6c 69 74 65 33 56 64 62 65  t ){ sqlite3Vdbe
8620: 41 73 73 65 72 74 41 62 6f 72 74 61 62 6c 65 28  AssertAbortable(
8630: 70 29 3b 20 7d 0a 23 65 6e 64 69 66 0a 20 20 69  p); }.#endif.  i
8640: 66 28 20 28 70 49 6e 33 2d 3e 66 6c 61 67 73 20  f( (pIn3->flags 
8650: 26 20 4d 45 4d 5f 4e 75 6c 6c 29 3d 3d 30 20 29  & MEM_Null)==0 )
8660: 20 62 72 65 61 6b 3b 0a 20 20 2f 2a 20 46 61 6c   break;.  /* Fal
8670: 6c 20 74 68 72 6f 75 67 68 20 69 6e 74 6f 20 4f  l through into O
8680: 50 5f 48 61 6c 74 20 2a 2f 0a 7d 0a 0a 2f 2a 20  P_Halt */.}../* 
8690: 4f 70 63 6f 64 65 3a 20 20 48 61 6c 74 20 50 31  Opcode:  Halt P1
86a0: 20 50 32 20 2a 20 50 34 20 50 35 0a 2a 2a 0a 2a   P2 * P4 P5.**.*
86b0: 2a 20 45 78 69 74 20 69 6d 6d 65 64 69 61 74 65  * Exit immediate
86c0: 6c 79 2e 20 20 41 6c 6c 20 6f 70 65 6e 20 63 75  ly.  All open cu
86d0: 72 73 6f 72 73 2c 20 65 74 63 20 61 72 65 20 63  rsors, etc are c
86e0: 6c 6f 73 65 64 0a 2a 2a 20 61 75 74 6f 6d 61 74  losed.** automat
86f0: 69 63 61 6c 6c 79 2e 0a 2a 2a 0a 2a 2a 20 50 31  ically..**.** P1
8700: 20 69 73 20 74 68 65 20 72 65 73 75 6c 74 20 63   is the result c
8710: 6f 64 65 20 72 65 74 75 72 6e 65 64 20 62 79 20  ode returned by 
8720: 73 71 6c 69 74 65 33 5f 65 78 65 63 28 29 2c 20  sqlite3_exec(), 
8730: 73 71 6c 69 74 65 33 5f 72 65 73 65 74 28 29 2c  sqlite3_reset(),
8740: 0a 2a 2a 20 6f 72 20 73 71 6c 69 74 65 33 5f 66  .** or sqlite3_f
8750: 69 6e 61 6c 69 7a 65 28 29 2e 20 20 46 6f 72 20  inalize().  For 
8760: 61 20 6e 6f 72 6d 61 6c 20 68 61 6c 74 2c 20 74  a normal halt, t
8770: 68 69 73 20 73 68 6f 75 6c 64 20 62 65 20 53 51  his should be SQ
8780: 4c 49 54 45 5f 4f 4b 20 28 30 29 2e 0a 2a 2a 20  LITE_OK (0)..** 
8790: 46 6f 72 20 65 72 72 6f 72 73 2c 20 69 74 20 63  For errors, it c
87a0: 61 6e 20 62 65 20 73 6f 6d 65 20 6f 74 68 65 72  an be some other
87b0: 20 76 61 6c 75 65 2e 20 20 49 66 20 50 31 21 3d   value.  If P1!=
87c0: 30 20 74 68 65 6e 20 50 32 20 77 69 6c 6c 20 64  0 then P2 will d
87d0: 65 74 65 72 6d 69 6e 65 0a 2a 2a 20 77 68 65 74  etermine.** whet
87e0: 68 65 72 20 6f 72 20 6e 6f 74 20 74 6f 20 72 6f  her or not to ro
87f0: 6c 6c 62 61 63 6b 20 74 68 65 20 63 75 72 72 65  llback the curre
8800: 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20  nt transaction. 
8810: 20 44 6f 20 6e 6f 74 20 72 6f 6c 6c 62 61 63 6b   Do not rollback
8820: 0a 2a 2a 20 69 66 20 50 32 3d 3d 4f 45 5f 46 61  .** if P2==OE_Fa
8830: 69 6c 2e 20 44 6f 20 74 68 65 20 72 6f 6c 6c 62  il. Do the rollb
8840: 61 63 6b 20 69 66 20 50 32 3d 3d 4f 45 5f 52 6f  ack if P2==OE_Ro
8850: 6c 6c 62 61 63 6b 2e 20 20 49 66 20 50 32 3d 3d  llback.  If P2==
8860: 4f 45 5f 41 62 6f 72 74 2c 0a 2a 2a 20 74 68 65  OE_Abort,.** the
8870: 6e 20 62 61 63 6b 20 6f 75 74 20 61 6c 6c 20 63  n back out all c
8880: 68 61 6e 67 65 73 20 74 68 61 74 20 68 61 76 65  hanges that have
8890: 20 6f 63 63 75 72 72 65 64 20 64 75 72 69 6e 67   occurred during
88a0: 20 74 68 69 73 20 65 78 65 63 75 74 69 6f 6e 20   this execution 
88b0: 6f 66 20 74 68 65 0a 2a 2a 20 56 44 42 45 2c 20  of the.** VDBE, 
88c0: 62 75 74 20 64 6f 20 6e 6f 74 20 72 6f 6c 6c 62  but do not rollb
88d0: 61 63 6b 20 74 68 65 20 74 72 61 6e 73 61 63 74  ack the transact
88e0: 69 6f 6e 2e 20 0a 2a 2a 0a 2a 2a 20 49 66 20 50  ion. .**.** If P
88f0: 34 20 69 73 20 6e 6f 74 20 6e 75 6c 6c 20 74 68  4 is not null th
8900: 65 6e 20 69 74 20 69 73 20 61 6e 20 65 72 72 6f  en it is an erro
8910: 72 20 6d 65 73 73 61 67 65 20 73 74 72 69 6e 67  r message string
8920: 2e 0a 2a 2a 0a 2a 2a 20 50 35 20 69 73 20 61 20  ..**.** P5 is a 
8930: 76 61 6c 75 65 20 62 65 74 77 65 65 6e 20 30 20  value between 0 
8940: 61 6e 64 20 34 2c 20 69 6e 63 6c 75 73 69 76 65  and 4, inclusive
8950: 2c 20 74 68 61 74 20 6d 6f 64 69 66 69 65 73 20  , that modifies 
8960: 74 68 65 20 50 34 20 73 74 72 69 6e 67 2e 0a 2a  the P4 string..*
8970: 2a 0a 2a 2a 20 20 20 20 30 3a 20 20 28 6e 6f 20  *.**    0:  (no 
8980: 63 68 61 6e 67 65 29 0a 2a 2a 20 20 20 20 31 3a  change).**    1:
8990: 20 20 4e 4f 54 20 4e 55 4c 4c 20 63 6f 6e 74 72    NOT NULL contr
89a0: 61 69 6e 74 20 66 61 69 6c 65 64 3a 20 50 34 0a  aint failed: P4.
89b0: 2a 2a 20 20 20 20 32 3a 20 20 55 4e 49 51 55 45  **    2:  UNIQUE
89c0: 20 63 6f 6e 73 74 72 61 69 6e 74 20 66 61 69 6c   constraint fail
89d0: 65 64 3a 20 50 34 0a 2a 2a 20 20 20 20 33 3a 20  ed: P4.**    3: 
89e0: 20 43 48 45 43 4b 20 63 6f 6e 73 74 72 61 69 6e   CHECK constrain
89f0: 74 20 66 61 69 6c 65 64 3a 20 50 34 0a 2a 2a 20  t failed: P4.** 
8a00: 20 20 20 34 3a 20 20 46 4f 52 45 49 47 4e 20 4b     4:  FOREIGN K
8a10: 45 59 20 63 6f 6e 73 74 72 61 69 6e 74 20 66 61  EY constraint fa
8a20: 69 6c 65 64 3a 20 50 34 0a 2a 2a 0a 2a 2a 20 49  iled: P4.**.** I
8a30: 66 20 50 35 20 69 73 20 6e 6f 74 20 7a 65 72 6f  f P5 is not zero
8a40: 20 61 6e 64 20 50 34 20 69 73 20 4e 55 4c 4c 2c   and P4 is NULL,
8a50: 20 74 68 65 6e 20 65 76 65 72 79 74 68 69 6e 67   then everything
8a60: 20 61 66 74 65 72 20 74 68 65 20 22 3a 22 20 69   after the ":" i
8a70: 73 0a 2a 2a 20 6f 6d 69 74 74 65 64 2e 0a 2a 2a  s.** omitted..**
8a80: 0a 2a 2a 20 54 68 65 72 65 20 69 73 20 61 6e 20  .** There is an 
8a90: 69 6d 70 6c 69 65 64 20 22 48 61 6c 74 20 30 20  implied "Halt 0 
8aa0: 30 20 30 22 20 69 6e 73 74 72 75 63 74 69 6f 6e  0 0" instruction
8ab0: 20 69 6e 73 65 72 74 65 64 20 61 74 20 74 68 65   inserted at the
8ac0: 20 76 65 72 79 20 65 6e 64 20 6f 66 0a 2a 2a 20   very end of.** 
8ad0: 65 76 65 72 79 20 70 72 6f 67 72 61 6d 2e 20 20  every program.  
8ae0: 53 6f 20 61 20 6a 75 6d 70 20 70 61 73 74 20 74  So a jump past t
8af0: 68 65 20 6c 61 73 74 20 69 6e 73 74 72 75 63 74  he last instruct
8b00: 69 6f 6e 20 6f 66 20 74 68 65 20 70 72 6f 67 72  ion of the progr
8b10: 61 6d 0a 2a 2a 20 69 73 20 74 68 65 20 73 61 6d  am.** is the sam
8b20: 65 20 61 73 20 65 78 65 63 75 74 69 6e 67 20 48  e as executing H
8b30: 61 6c 74 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  alt..*/.case OP_
8b40: 48 61 6c 74 3a 20 7b 0a 20 20 56 64 62 65 46 72  Halt: {.  VdbeFr
8b50: 61 6d 65 20 2a 70 46 72 61 6d 65 3b 0a 20 20 69  ame *pFrame;.  i
8b60: 6e 74 20 70 63 78 3b 0a 0a 20 20 70 63 78 20 3d  nt pcx;..  pcx =
8b70: 20 28 69 6e 74 29 28 70 4f 70 20 2d 20 61 4f 70   (int)(pOp - aOp
8b80: 29 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  );.#ifdef SQLITE
8b90: 5f 44 45 42 55 47 0a 20 20 69 66 28 20 70 4f 70  _DEBUG.  if( pOp
8ba0: 2d 3e 70 32 3d 3d 4f 45 5f 41 62 6f 72 74 20 29  ->p2==OE_Abort )
8bb0: 7b 20 73 71 6c 69 74 65 33 56 64 62 65 41 73 73  { sqlite3VdbeAss
8bc0: 65 72 74 41 62 6f 72 74 61 62 6c 65 28 70 29 3b  ertAbortable(p);
8bd0: 20 7d 0a 23 65 6e 64 69 66 0a 20 20 69 66 28 20   }.#endif.  if( 
8be0: 70 4f 70 2d 3e 70 31 3d 3d 53 51 4c 49 54 45 5f  pOp->p1==SQLITE_
8bf0: 4f 4b 20 26 26 20 70 2d 3e 70 46 72 61 6d 65 20  OK && p->pFrame 
8c00: 29 7b 0a 20 20 20 20 2f 2a 20 48 61 6c 74 20 74  ){.    /* Halt t
8c10: 68 65 20 73 75 62 2d 70 72 6f 67 72 61 6d 2e 20  he sub-program. 
8c20: 52 65 74 75 72 6e 20 63 6f 6e 74 72 6f 6c 20 74  Return control t
8c30: 6f 20 74 68 65 20 70 61 72 65 6e 74 20 66 72 61  o the parent fra
8c40: 6d 65 2e 20 2a 2f 0a 20 20 20 20 70 46 72 61 6d  me. */.    pFram
8c50: 65 20 3d 20 70 2d 3e 70 46 72 61 6d 65 3b 0a 20  e = p->pFrame;. 
8c60: 20 20 20 70 2d 3e 70 46 72 61 6d 65 20 3d 20 70     p->pFrame = p
8c70: 46 72 61 6d 65 2d 3e 70 50 61 72 65 6e 74 3b 0a  Frame->pParent;.
8c80: 20 20 20 20 70 2d 3e 6e 46 72 61 6d 65 2d 2d 3b      p->nFrame--;
8c90: 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
8ca0: 53 65 74 43 68 61 6e 67 65 73 28 64 62 2c 20 70  SetChanges(db, p
8cb0: 2d 3e 6e 43 68 61 6e 67 65 29 3b 0a 20 20 20 20  ->nChange);.    
8cc0: 70 63 78 20 3d 20 73 71 6c 69 74 65 33 56 64 62  pcx = sqlite3Vdb
8cd0: 65 46 72 61 6d 65 52 65 73 74 6f 72 65 28 70 46  eFrameRestore(pF
8ce0: 72 61 6d 65 29 3b 0a 20 20 20 20 69 66 28 20 70  rame);.    if( p
8cf0: 4f 70 2d 3e 70 32 3d 3d 4f 45 5f 49 67 6e 6f 72  Op->p2==OE_Ignor
8d00: 65 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 49 6e  e ){.      /* In
8d10: 73 74 72 75 63 74 69 6f 6e 20 70 63 78 20 69 73  struction pcx is
8d20: 20 74 68 65 20 4f 50 5f 50 72 6f 67 72 61 6d 20   the OP_Program 
8d30: 74 68 61 74 20 69 6e 76 6f 6b 65 64 20 74 68 65  that invoked the
8d40: 20 73 75 62 2d 70 72 6f 67 72 61 6d 20 0a 20 20   sub-program .  
8d50: 20 20 20 20 2a 2a 20 63 75 72 72 65 6e 74 6c 79      ** currently
8d60: 20 62 65 69 6e 67 20 68 61 6c 74 65 64 2e 20 49   being halted. I
8d70: 66 20 74 68 65 20 70 32 20 69 6e 73 74 72 75 63  f the p2 instruc
8d80: 74 69 6f 6e 20 6f 66 20 74 68 69 73 20 4f 50 5f  tion of this OP_
8d90: 48 61 6c 74 0a 20 20 20 20 20 20 2a 2a 20 69 6e  Halt.      ** in
8da0: 73 74 72 75 63 74 69 6f 6e 20 69 73 20 73 65 74  struction is set
8db0: 20 74 6f 20 4f 45 5f 49 67 6e 6f 72 65 2c 20 74   to OE_Ignore, t
8dc0: 68 65 6e 20 74 68 65 20 73 75 62 2d 70 72 6f 67  hen the sub-prog
8dd0: 72 61 6d 20 69 73 20 74 68 72 6f 77 69 6e 67 0a  ram is throwing.
8de0: 20 20 20 20 20 20 2a 2a 20 61 6e 20 49 47 4e 4f        ** an IGNO
8df0: 52 45 20 65 78 63 65 70 74 69 6f 6e 2e 20 49 6e  RE exception. In
8e00: 20 74 68 69 73 20 63 61 73 65 20 6a 75 6d 70 20   this case jump 
8e10: 74 6f 20 74 68 65 20 61 64 64 72 65 73 73 20 73  to the address s
8e20: 70 65 63 69 66 69 65 64 0a 20 20 20 20 20 20 2a  pecified.      *
8e30: 2a 20 61 73 20 74 68 65 20 70 32 20 6f 66 20 74  * as the p2 of t
8e40: 68 65 20 63 61 6c 6c 69 6e 67 20 4f 50 5f 50 72  he calling OP_Pr
8e50: 6f 67 72 61 6d 2e 20 20 2a 2f 0a 20 20 20 20 20  ogram.  */.     
8e60: 20 70 63 78 20 3d 20 70 2d 3e 61 4f 70 5b 70 63   pcx = p->aOp[pc
8e70: 78 5d 2e 70 32 2d 31 3b 0a 20 20 20 20 7d 0a 20  x].p2-1;.    }. 
8e80: 20 20 20 61 4f 70 20 3d 20 70 2d 3e 61 4f 70 3b     aOp = p->aOp;
8e90: 0a 20 20 20 20 61 4d 65 6d 20 3d 20 70 2d 3e 61  .    aMem = p->a
8ea0: 4d 65 6d 3b 0a 20 20 20 20 70 4f 70 20 3d 20 26  Mem;.    pOp = &
8eb0: 61 4f 70 5b 70 63 78 5d 3b 0a 20 20 20 20 62 72  aOp[pcx];.    br
8ec0: 65 61 6b 3b 0a 20 20 7d 0a 20 20 70 2d 3e 72 63  eak;.  }.  p->rc
8ed0: 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 70 2d   = pOp->p1;.  p-
8ee0: 3e 65 72 72 6f 72 41 63 74 69 6f 6e 20 3d 20 28  >errorAction = (
8ef0: 75 38 29 70 4f 70 2d 3e 70 32 3b 0a 20 20 70 2d  u8)pOp->p2;.  p-
8f00: 3e 70 63 20 3d 20 70 63 78 3b 0a 20 20 61 73 73  >pc = pcx;.  ass
8f10: 65 72 74 28 20 70 4f 70 2d 3e 70 35 3c 3d 34 20  ert( pOp->p5<=4 
8f20: 29 3b 0a 20 20 69 66 28 20 70 2d 3e 72 63 20 29  );.  if( p->rc )
8f30: 7b 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70  {.    if( pOp->p
8f40: 35 20 29 7b 0a 20 20 20 20 20 20 73 74 61 74 69  5 ){.      stati
8f50: 63 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 20 63  c const char * c
8f60: 6f 6e 73 74 20 61 7a 54 79 70 65 5b 5d 20 3d 20  onst azType[] = 
8f70: 7b 20 22 4e 4f 54 20 4e 55 4c 4c 22 2c 20 22 55  { "NOT NULL", "U
8f80: 4e 49 51 55 45 22 2c 20 22 43 48 45 43 4b 22 2c  NIQUE", "CHECK",
8f90: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
8fa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8fb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 46                "F
8fc0: 4f 52 45 49 47 4e 20 4b 45 59 22 20 7d 3b 0a 20  OREIGN KEY" };. 
8fd0: 20 20 20 20 20 74 65 73 74 63 61 73 65 28 20 70       testcase( p
8fe0: 4f 70 2d 3e 70 35 3d 3d 31 20 29 3b 0a 20 20 20  Op->p5==1 );.   
8ff0: 20 20 20 74 65 73 74 63 61 73 65 28 20 70 4f 70     testcase( pOp
9000: 2d 3e 70 35 3d 3d 32 20 29 3b 0a 20 20 20 20 20  ->p5==2 );.     
9010: 20 74 65 73 74 63 61 73 65 28 20 70 4f 70 2d 3e   testcase( pOp->
9020: 70 35 3d 3d 33 20 29 3b 0a 20 20 20 20 20 20 74  p5==3 );.      t
9030: 65 73 74 63 61 73 65 28 20 70 4f 70 2d 3e 70 35  estcase( pOp->p5
9040: 3d 3d 34 20 29 3b 0a 20 20 20 20 20 20 73 71 6c  ==4 );.      sql
9050: 69 74 65 33 56 64 62 65 45 72 72 6f 72 28 70 2c  ite3VdbeError(p,
9060: 20 22 25 73 20 63 6f 6e 73 74 72 61 69 6e 74 20   "%s constraint 
9070: 66 61 69 6c 65 64 22 2c 20 61 7a 54 79 70 65 5b  failed", azType[
9080: 70 4f 70 2d 3e 70 35 2d 31 5d 29 3b 0a 20 20 20  pOp->p5-1]);.   
9090: 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 34 2e 7a     if( pOp->p4.z
90a0: 20 29 7b 0a 20 20 20 20 20 20 20 20 70 2d 3e 7a   ){.        p->z
90b0: 45 72 72 4d 73 67 20 3d 20 73 71 6c 69 74 65 33  ErrMsg = sqlite3
90c0: 4d 50 72 69 6e 74 66 28 64 62 2c 20 22 25 7a 3a  MPrintf(db, "%z:
90d0: 20 25 73 22 2c 20 70 2d 3e 7a 45 72 72 4d 73 67   %s", p->zErrMsg
90e0: 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20  , pOp->p4.z);.  
90f0: 20 20 20 20 7d 0a 20 20 20 20 7d 65 6c 73 65 7b      }.    }else{
9100: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64  .      sqlite3Vd
9110: 62 65 45 72 72 6f 72 28 70 2c 20 22 25 73 22 2c  beError(p, "%s",
9120: 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20 20   pOp->p4.z);.   
9130: 20 7d 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 6c   }.    sqlite3_l
9140: 6f 67 28 70 4f 70 2d 3e 70 31 2c 20 22 61 62 6f  og(pOp->p1, "abo
9150: 72 74 20 61 74 20 25 64 20 69 6e 20 5b 25 73 5d  rt at %d in [%s]
9160: 3a 20 25 73 22 2c 20 70 63 78 2c 20 70 2d 3e 7a  : %s", pcx, p->z
9170: 53 71 6c 2c 20 70 2d 3e 7a 45 72 72 4d 73 67 29  Sql, p->zErrMsg)
9180: 3b 0a 20 20 7d 0a 20 20 72 63 20 3d 20 73 71 6c  ;.  }.  rc = sql
9190: 69 74 65 33 56 64 62 65 48 61 6c 74 28 70 29 3b  ite3VdbeHalt(p);
91a0: 0a 20 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53  .  assert( rc==S
91b0: 51 4c 49 54 45 5f 42 55 53 59 20 7c 7c 20 72 63  QLITE_BUSY || rc
91c0: 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 7c 7c 20 72  ==SQLITE_OK || r
91d0: 63 3d 3d 53 51 4c 49 54 45 5f 45 52 52 4f 52 20  c==SQLITE_ERROR 
91e0: 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c  );.  if( rc==SQL
91f0: 49 54 45 5f 42 55 53 59 20 29 7b 0a 20 20 20 20  ITE_BUSY ){.    
9200: 70 2d 3e 72 63 20 3d 20 53 51 4c 49 54 45 5f 42  p->rc = SQLITE_B
9210: 55 53 59 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  USY;.  }else{.  
9220: 20 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53 51    assert( rc==SQ
9230: 4c 49 54 45 5f 4f 4b 20 7c 7c 20 28 70 2d 3e 72  LITE_OK || (p->r
9240: 63 26 30 78 66 66 29 3d 3d 53 51 4c 49 54 45 5f  c&0xff)==SQLITE_
9250: 43 4f 4e 53 54 52 41 49 4e 54 20 29 3b 0a 20 20  CONSTRAINT );.  
9260: 20 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53 51    assert( rc==SQ
9270: 4c 49 54 45 5f 4f 4b 20 7c 7c 20 64 62 2d 3e 6e  LITE_OK || db->n
9280: 44 65 66 65 72 72 65 64 43 6f 6e 73 3e 30 20 7c  DeferredCons>0 |
9290: 7c 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 49  | db->nDeferredI
92a0: 6d 6d 43 6f 6e 73 3e 30 20 29 3b 0a 20 20 20 20  mmCons>0 );.    
92b0: 72 63 20 3d 20 70 2d 3e 72 63 20 3f 20 53 51 4c  rc = p->rc ? SQL
92c0: 49 54 45 5f 45 52 52 4f 52 20 3a 20 53 51 4c 49  ITE_ERROR : SQLI
92d0: 54 45 5f 44 4f 4e 45 3b 0a 20 20 7d 0a 20 20 67  TE_DONE;.  }.  g
92e0: 6f 74 6f 20 76 64 62 65 5f 72 65 74 75 72 6e 3b  oto vdbe_return;
92f0: 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49  .}../* Opcode: I
9300: 6e 74 65 67 65 72 20 50 31 20 50 32 20 2a 20 2a  nteger P1 P2 * *
9310: 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
9320: 72 5b 50 32 5d 3d 50 31 0a 2a 2a 0a 2a 2a 20 54  r[P2]=P1.**.** T
9330: 68 65 20 33 32 2d 62 69 74 20 69 6e 74 65 67 65  he 32-bit intege
9340: 72 20 76 61 6c 75 65 20 50 31 20 69 73 20 77 72  r value P1 is wr
9350: 69 74 74 65 6e 20 69 6e 74 6f 20 72 65 67 69 73  itten into regis
9360: 74 65 72 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20  ter P2..*/.case 
9370: 4f 50 5f 49 6e 74 65 67 65 72 3a 20 7b 20 20 20  OP_Integer: {   
9380: 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f        /* out2 */
9390: 0a 20 20 70 4f 75 74 20 3d 20 6f 75 74 32 50 72  .  pOut = out2Pr
93a0: 65 72 65 6c 65 61 73 65 28 70 2c 20 70 4f 70 29  erelease(p, pOp)
93b0: 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20  ;.  pOut->u.i = 
93c0: 70 4f 70 2d 3e 70 31 3b 0a 20 20 62 72 65 61 6b  pOp->p1;.  break
93d0: 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
93e0: 49 6e 74 36 34 20 2a 20 50 32 20 2a 20 50 34 20  Int64 * P2 * P4 
93f0: 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72  *.** Synopsis: r
9400: 5b 50 32 5d 3d 50 34 0a 2a 2a 0a 2a 2a 20 50 34  [P2]=P4.**.** P4
9410: 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f   is a pointer to
9420: 20 61 20 36 34 2d 62 69 74 20 69 6e 74 65 67 65   a 64-bit intege
9430: 72 20 76 61 6c 75 65 2e 0a 2a 2a 20 57 72 69 74  r value..** Writ
9440: 65 20 74 68 61 74 20 76 61 6c 75 65 20 69 6e 74  e that value int
9450: 6f 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a  o register P2..*
9460: 2f 0a 63 61 73 65 20 4f 50 5f 49 6e 74 36 34 3a  /.case OP_Int64:
9470: 20 7b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20   {           /* 
9480: 6f 75 74 32 20 2a 2f 0a 20 20 70 4f 75 74 20 3d  out2 */.  pOut =
9490: 20 6f 75 74 32 50 72 65 72 65 6c 65 61 73 65 28   out2Prerelease(
94a0: 70 2c 20 70 4f 70 29 3b 0a 20 20 61 73 73 65 72  p, pOp);.  asser
94b0: 74 28 20 70 4f 70 2d 3e 70 34 2e 70 49 36 34 21  t( pOp->p4.pI64!
94c0: 3d 30 20 29 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e  =0 );.  pOut->u.
94d0: 69 20 3d 20 2a 70 4f 70 2d 3e 70 34 2e 70 49 36  i = *pOp->p4.pI6
94e0: 34 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 23  4;.  break;.}..#
94f0: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
9500: 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e  IT_FLOATING_POIN
9510: 54 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65 61  T./* Opcode: Rea
9520: 6c 20 2a 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a  l * P2 * P4 *.**
9530: 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d   Synopsis: r[P2]
9540: 3d 50 34 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20  =P4.**.** P4 is 
9550: 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 36  a pointer to a 6
9560: 34 2d 62 69 74 20 66 6c 6f 61 74 69 6e 67 20 70  4-bit floating p
9570: 6f 69 6e 74 20 76 61 6c 75 65 2e 0a 2a 2a 20 57  oint value..** W
9580: 72 69 74 65 20 74 68 61 74 20 76 61 6c 75 65 20  rite that value 
9590: 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 32  into register P2
95a0: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65 61  ..*/.case OP_Rea
95b0: 6c 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20  l: {            
95c0: 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 46 4c  /* same as TK_FL
95d0: 4f 41 54 2c 20 6f 75 74 32 20 2a 2f 0a 20 20 70  OAT, out2 */.  p
95e0: 4f 75 74 20 3d 20 6f 75 74 32 50 72 65 72 65 6c  Out = out2Prerel
95f0: 65 61 73 65 28 70 2c 20 70 4f 70 29 3b 0a 20 20  ease(p, pOp);.  
9600: 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45  pOut->flags = ME
9610: 4d 5f 52 65 61 6c 3b 0a 20 20 61 73 73 65 72 74  M_Real;.  assert
9620: 28 20 21 73 71 6c 69 74 65 33 49 73 4e 61 4e 28  ( !sqlite3IsNaN(
9630: 2a 70 4f 70 2d 3e 70 34 2e 70 52 65 61 6c 29 20  *pOp->p4.pReal) 
9640: 29 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e 72 20 3d  );.  pOut->u.r =
9650: 20 2a 70 4f 70 2d 3e 70 34 2e 70 52 65 61 6c 3b   *pOp->p4.pReal;
9660: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64  .  break;.}.#end
9670: 69 66 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53  if../* Opcode: S
9680: 74 72 69 6e 67 38 20 2a 20 50 32 20 2a 20 50 34  tring8 * P2 * P4
9690: 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
96a0: 72 5b 50 32 5d 3d 27 50 34 27 0a 2a 2a 0a 2a 2a  r[P2]='P4'.**.**
96b0: 20 50 34 20 70 6f 69 6e 74 73 20 74 6f 20 61 20   P4 points to a 
96c0: 6e 75 6c 20 74 65 72 6d 69 6e 61 74 65 64 20 55  nul terminated U
96d0: 54 46 2d 38 20 73 74 72 69 6e 67 2e 20 54 68 69  TF-8 string. Thi
96e0: 73 20 6f 70 63 6f 64 65 20 69 73 20 74 72 61 6e  s opcode is tran
96f0: 73 66 6f 72 6d 65 64 20 0a 2a 2a 20 69 6e 74 6f  sformed .** into
9700: 20 61 20 53 74 72 69 6e 67 20 6f 70 63 6f 64 65   a String opcode
9710: 20 62 65 66 6f 72 65 20 69 74 20 69 73 20 65 78   before it is ex
9720: 65 63 75 74 65 64 20 66 6f 72 20 74 68 65 20 66  ecuted for the f
9730: 69 72 73 74 20 74 69 6d 65 2e 20 20 44 75 72 69  irst time.  Duri
9740: 6e 67 0a 2a 2a 20 74 68 69 73 20 74 72 61 6e 73  ng.** this trans
9750: 66 6f 72 6d 61 74 69 6f 6e 2c 20 74 68 65 20 6c  formation, the l
9760: 65 6e 67 74 68 20 6f 66 20 73 74 72 69 6e 67 20  ength of string 
9770: 50 34 20 69 73 20 63 6f 6d 70 75 74 65 64 20 61  P4 is computed a
9780: 6e 64 20 73 74 6f 72 65 64 0a 2a 2a 20 61 73 20  nd stored.** as 
9790: 74 68 65 20 50 31 20 70 61 72 61 6d 65 74 65 72  the P1 parameter
97a0: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 74 72  ..*/.case OP_Str
97b0: 69 6e 67 38 3a 20 7b 20 20 20 20 20 20 20 20 20  ing8: {         
97c0: 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 53 54  /* same as TK_ST
97d0: 52 49 4e 47 2c 20 6f 75 74 32 20 2a 2f 0a 20 20  RING, out2 */.  
97e0: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 2e  assert( pOp->p4.
97f0: 7a 21 3d 30 20 29 3b 0a 20 20 70 4f 75 74 20 3d  z!=0 );.  pOut =
9800: 20 6f 75 74 32 50 72 65 72 65 6c 65 61 73 65 28   out2Prerelease(
9810: 70 2c 20 70 4f 70 29 3b 0a 20 20 70 4f 70 2d 3e  p, pOp);.  pOp->
9820: 70 31 20 3d 20 73 71 6c 69 74 65 33 53 74 72 6c  p1 = sqlite3Strl
9830: 65 6e 33 30 28 70 4f 70 2d 3e 70 34 2e 7a 29 3b  en30(pOp->p4.z);
9840: 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
9850: 5f 4f 4d 49 54 5f 55 54 46 31 36 0a 20 20 69 66  _OMIT_UTF16.  if
9860: 28 20 65 6e 63 6f 64 69 6e 67 21 3d 53 51 4c 49  ( encoding!=SQLI
9870: 54 45 5f 55 54 46 38 20 29 7b 0a 20 20 20 20 72  TE_UTF8 ){.    r
9880: 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 4d  c = sqlite3VdbeM
9890: 65 6d 53 65 74 53 74 72 28 70 4f 75 74 2c 20 70  emSetStr(pOut, p
98a0: 4f 70 2d 3e 70 34 2e 7a 2c 20 2d 31 2c 20 53 51  Op->p4.z, -1, SQ
98b0: 4c 49 54 45 5f 55 54 46 38 2c 20 53 51 4c 49 54  LITE_UTF8, SQLIT
98c0: 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20 61  E_STATIC);.    a
98d0: 73 73 65 72 74 28 20 72 63 3d 3d 53 51 4c 49 54  ssert( rc==SQLIT
98e0: 45 5f 4f 4b 20 7c 7c 20 72 63 3d 3d 53 51 4c 49  E_OK || rc==SQLI
98f0: 54 45 5f 54 4f 4f 42 49 47 20 29 3b 0a 20 20 20  TE_TOOBIG );.   
9900: 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20 74   if( rc ) goto t
9910: 6f 6f 5f 62 69 67 3b 0a 20 20 20 20 69 66 28 20  oo_big;.    if( 
9920: 53 51 4c 49 54 45 5f 4f 4b 21 3d 73 71 6c 69 74  SQLITE_OK!=sqlit
9930: 65 33 56 64 62 65 43 68 61 6e 67 65 45 6e 63 6f  e3VdbeChangeEnco
9940: 64 69 6e 67 28 70 4f 75 74 2c 20 65 6e 63 6f 64  ding(pOut, encod
9950: 69 6e 67 29 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d  ing) ) goto no_m
9960: 65 6d 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20  em;.    assert( 
9970: 70 4f 75 74 2d 3e 73 7a 4d 61 6c 6c 6f 63 3e 30  pOut->szMalloc>0
9980: 20 26 26 20 70 4f 75 74 2d 3e 7a 4d 61 6c 6c 6f   && pOut->zMallo
9990: 63 3d 3d 70 4f 75 74 2d 3e 7a 20 29 3b 0a 20 20  c==pOut->z );.  
99a0: 20 20 61 73 73 65 72 74 28 20 56 64 62 65 4d 65    assert( VdbeMe
99b0: 6d 44 79 6e 61 6d 69 63 28 70 4f 75 74 29 3d 3d  mDynamic(pOut)==
99c0: 30 20 29 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 73  0 );.    pOut->s
99d0: 7a 4d 61 6c 6c 6f 63 20 3d 20 30 3b 0a 20 20 20  zMalloc = 0;.   
99e0: 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 7c 3d 20   pOut->flags |= 
99f0: 4d 45 4d 5f 53 74 61 74 69 63 3b 0a 20 20 20 20  MEM_Static;.    
9a00: 69 66 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d  if( pOp->p4type=
9a10: 3d 50 34 5f 44 59 4e 41 4d 49 43 20 29 7b 0a 20  =P4_DYNAMIC ){. 
9a20: 20 20 20 20 20 73 71 6c 69 74 65 33 44 62 46 72       sqlite3DbFr
9a30: 65 65 28 64 62 2c 20 70 4f 70 2d 3e 70 34 2e 7a  ee(db, pOp->p4.z
9a40: 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 70 4f 70  );.    }.    pOp
9a50: 2d 3e 70 34 74 79 70 65 20 3d 20 50 34 5f 44 59  ->p4type = P4_DY
9a60: 4e 41 4d 49 43 3b 0a 20 20 20 20 70 4f 70 2d 3e  NAMIC;.    pOp->
9a70: 70 34 2e 7a 20 3d 20 70 4f 75 74 2d 3e 7a 3b 0a  p4.z = pOut->z;.
9a80: 20 20 20 20 70 4f 70 2d 3e 70 31 20 3d 20 70 4f      pOp->p1 = pO
9a90: 75 74 2d 3e 6e 3b 0a 20 20 7d 0a 23 65 6e 64 69  ut->n;.  }.#endi
9aa0: 66 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 31 3e  f.  if( pOp->p1>
9ab0: 64 62 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c 49 54  db->aLimit[SQLIT
9ac0: 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54 48 5d 20  E_LIMIT_LENGTH] 
9ad0: 29 7b 0a 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f  ){.    goto too_
9ae0: 62 69 67 3b 0a 20 20 7d 0a 20 20 70 4f 70 2d 3e  big;.  }.  pOp->
9af0: 6f 70 63 6f 64 65 20 3d 20 4f 50 5f 53 74 72 69  opcode = OP_Stri
9b00: 6e 67 3b 0a 20 20 61 73 73 65 72 74 28 20 72 63  ng;.  assert( rc
9b10: 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 3b 0a 20  ==SQLITE_OK );. 
9b20: 20 2f 2a 20 46 61 6c 6c 20 74 68 72 6f 75 67 68   /* Fall through
9b30: 20 74 6f 20 74 68 65 20 6e 65 78 74 20 63 61 73   to the next cas
9b40: 65 2c 20 4f 50 5f 53 74 72 69 6e 67 20 2a 2f 0a  e, OP_String */.
9b50: 7d 0a 20 20 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  }.  ./* Opcode: 
9b60: 53 74 72 69 6e 67 20 50 31 20 50 32 20 50 33 20  String P1 P2 P3 
9b70: 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69  P4 P5.** Synopsi
9b80: 73 3a 20 72 5b 50 32 5d 3d 27 50 34 27 20 28 6c  s: r[P2]='P4' (l
9b90: 65 6e 3d 50 31 29 0a 2a 2a 0a 2a 2a 20 54 68 65  en=P1).**.** The
9ba0: 20 73 74 72 69 6e 67 20 76 61 6c 75 65 20 50 34   string value P4
9bb0: 20 6f 66 20 6c 65 6e 67 74 68 20 50 31 20 28 62   of length P1 (b
9bc0: 79 74 65 73 29 20 69 73 20 73 74 6f 72 65 64 20  ytes) is stored 
9bd0: 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a  in register P2..
9be0: 2a 2a 0a 2a 2a 20 49 66 20 50 33 20 69 73 20 6e  **.** If P3 is n
9bf0: 6f 74 20 7a 65 72 6f 20 61 6e 64 20 74 68 65 20  ot zero and the 
9c00: 63 6f 6e 74 65 6e 74 20 6f 66 20 72 65 67 69 73  content of regis
9c10: 74 65 72 20 50 33 20 69 73 20 65 71 75 61 6c 20  ter P3 is equal 
9c20: 74 6f 20 50 35 2c 20 74 68 65 6e 0a 2a 2a 20 74  to P5, then.** t
9c30: 68 65 20 64 61 74 61 74 79 70 65 20 6f 66 20 74  he datatype of t
9c40: 68 65 20 72 65 67 69 73 74 65 72 20 50 32 20 69  he register P2 i
9c50: 73 20 63 6f 6e 76 65 72 74 65 64 20 74 6f 20 42  s converted to B
9c60: 4c 4f 42 2e 20 20 54 68 65 20 63 6f 6e 74 65 6e  LOB.  The conten
9c70: 74 20 69 73 0a 2a 2a 20 74 68 65 20 73 61 6d 65  t is.** the same
9c80: 20 73 65 71 75 65 6e 63 65 20 6f 66 20 62 79 74   sequence of byt
9c90: 65 73 2c 20 69 74 20 69 73 20 6d 65 72 65 6c 79  es, it is merely
9ca0: 20 69 6e 74 65 72 70 72 65 74 65 64 20 61 73 20   interpreted as 
9cb0: 61 20 42 4c 4f 42 20 69 6e 73 74 65 61 64 0a 2a  a BLOB instead.*
9cc0: 2a 20 6f 66 20 61 20 73 74 72 69 6e 67 2c 20 61  * of a string, a
9cd0: 73 20 69 66 20 69 74 20 68 61 64 20 62 65 65 6e  s if it had been
9ce0: 20 43 41 53 54 2e 20 20 49 6e 20 6f 74 68 65 72   CAST.  In other
9cf0: 20 77 6f 72 64 73 3a 0a 2a 2a 0a 2a 2a 20 69 66   words:.**.** if
9d00: 28 20 50 33 21 3d 30 20 61 6e 64 20 72 65 67 5b  ( P3!=0 and reg[
9d10: 50 33 5d 3d 3d 50 35 20 29 20 72 65 67 5b 50 32  P3]==P5 ) reg[P2
9d20: 5d 20 3a 3d 20 43 41 53 54 28 72 65 67 5b 50 32  ] := CAST(reg[P2
9d30: 5d 20 61 73 20 42 4c 4f 42 29 0a 2a 2f 0a 63 61  ] as BLOB).*/.ca
9d40: 73 65 20 4f 50 5f 53 74 72 69 6e 67 3a 20 7b 20  se OP_String: { 
9d50: 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32           /* out2
9d60: 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f   */.  assert( pO
9d70: 70 2d 3e 70 34 2e 7a 21 3d 30 20 29 3b 0a 20 20  p->p4.z!=0 );.  
9d80: 70 4f 75 74 20 3d 20 6f 75 74 32 50 72 65 72 65  pOut = out2Prere
9d90: 6c 65 61 73 65 28 70 2c 20 70 4f 70 29 3b 0a 20  lease(p, pOp);. 
9da0: 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d   pOut->flags = M
9db0: 45 4d 5f 53 74 72 7c 4d 45 4d 5f 53 74 61 74 69  EM_Str|MEM_Stati
9dc0: 63 7c 4d 45 4d 5f 54 65 72 6d 3b 0a 20 20 70 4f  c|MEM_Term;.  pO
9dd0: 75 74 2d 3e 7a 20 3d 20 70 4f 70 2d 3e 70 34 2e  ut->z = pOp->p4.
9de0: 7a 3b 0a 20 20 70 4f 75 74 2d 3e 6e 20 3d 20 70  z;.  pOut->n = p
9df0: 4f 70 2d 3e 70 31 3b 0a 20 20 70 4f 75 74 2d 3e  Op->p1;.  pOut->
9e00: 65 6e 63 20 3d 20 65 6e 63 6f 64 69 6e 67 3b 0a  enc = encoding;.
9e10: 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f    UPDATE_MAX_BLO
9e20: 42 53 49 5a 45 28 70 4f 75 74 29 3b 0a 23 69 66  BSIZE(pOut);.#if
9e30: 6e 64 65 66 20 53 51 4c 49 54 45 5f 4c 49 4b 45  ndef SQLITE_LIKE
9e40: 5f 44 4f 45 53 4e 54 5f 4d 41 54 43 48 5f 42 4c  _DOESNT_MATCH_BL
9e50: 4f 42 53 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70  OBS.  if( pOp->p
9e60: 33 3e 30 20 29 7b 0a 20 20 20 20 61 73 73 65 72  3>0 ){.    asser
9e70: 74 28 20 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e  t( pOp->p3<=(p->
9e80: 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72  nMem+1 - p->nCur
9e90: 73 6f 72 29 20 29 3b 0a 20 20 20 20 70 49 6e 33  sor) );.    pIn3
9ea0: 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33   = &aMem[pOp->p3
9eb0: 5d 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  ];.    assert( p
9ec0: 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  In3->flags & MEM
9ed0: 5f 49 6e 74 20 29 3b 0a 20 20 20 20 69 66 28 20  _Int );.    if( 
9ee0: 70 49 6e 33 2d 3e 75 2e 69 3d 3d 70 4f 70 2d 3e  pIn3->u.i==pOp->
9ef0: 70 35 20 29 20 70 4f 75 74 2d 3e 66 6c 61 67 73  p5 ) pOut->flags
9f00: 20 3d 20 4d 45 4d 5f 42 6c 6f 62 7c 4d 45 4d 5f   = MEM_Blob|MEM_
9f10: 53 74 61 74 69 63 7c 4d 45 4d 5f 54 65 72 6d 3b  Static|MEM_Term;
9f20: 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20 62 72  .  }.#endif.  br
9f30: 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
9f40: 65 3a 20 4e 75 6c 6c 20 50 31 20 50 32 20 50 33  e: Null P1 P2 P3
9f50: 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73   * *.** Synopsis
9f60: 3a 20 72 5b 50 32 2e 2e 50 33 5d 3d 4e 55 4c 4c  : r[P2..P3]=NULL
9f70: 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 61 20 4e  .**.** Write a N
9f80: 55 4c 4c 20 69 6e 74 6f 20 72 65 67 69 73 74 65  ULL into registe
9f90: 72 73 20 50 32 2e 20 20 49 66 20 50 33 20 67 72  rs P2.  If P3 gr
9fa0: 65 61 74 65 72 20 74 68 61 6e 20 50 32 2c 20 74  eater than P2, t
9fb0: 68 65 6e 20 61 6c 73 6f 20 77 72 69 74 65 0a 2a  hen also write.*
9fc0: 2a 20 4e 55 4c 4c 20 69 6e 74 6f 20 72 65 67 69  * NULL into regi
9fd0: 73 74 65 72 20 50 33 20 61 6e 64 20 65 76 65 72  ster P3 and ever
9fe0: 79 20 72 65 67 69 73 74 65 72 20 69 6e 20 62 65  y register in be
9ff0: 74 77 65 65 6e 20 50 32 20 61 6e 64 20 50 33 2e  tween P2 and P3.
a000: 20 20 49 66 20 50 33 0a 2a 2a 20 69 73 20 6c 65    If P3.** is le
a010: 73 73 20 74 68 61 6e 20 50 32 20 28 74 79 70 69  ss than P2 (typi
a020: 63 61 6c 6c 79 20 50 33 20 69 73 20 7a 65 72 6f  cally P3 is zero
a030: 29 20 74 68 65 6e 20 6f 6e 6c 79 20 72 65 67 69  ) then only regi
a040: 73 74 65 72 20 50 32 20 69 73 0a 2a 2a 20 73 65  ster P2 is.** se
a050: 74 20 74 6f 20 4e 55 4c 4c 2e 0a 2a 2a 0a 2a 2a  t to NULL..**.**
a060: 20 49 66 20 74 68 65 20 50 31 20 76 61 6c 75 65   If the P1 value
a070: 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68   is non-zero, th
a080: 65 6e 20 61 6c 73 6f 20 73 65 74 20 74 68 65 20  en also set the 
a090: 4d 45 4d 5f 43 6c 65 61 72 65 64 20 66 6c 61 67  MEM_Cleared flag
a0a0: 20 73 6f 20 74 68 61 74 0a 2a 2a 20 4e 55 4c 4c   so that.** NULL
a0b0: 20 76 61 6c 75 65 73 20 77 69 6c 6c 20 6e 6f 74   values will not
a0c0: 20 63 6f 6d 70 61 72 65 20 65 71 75 61 6c 20 65   compare equal e
a0d0: 76 65 6e 20 69 66 20 53 51 4c 49 54 45 5f 4e 55  ven if SQLITE_NU
a0e0: 4c 4c 45 51 20 69 73 20 73 65 74 20 6f 6e 0a 2a  LLEQ is set on.*
a0f0: 2a 20 4f 50 5f 4e 65 20 6f 72 20 4f 50 5f 45 71  * OP_Ne or OP_Eq
a100: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 75 6c  ..*/.case OP_Nul
a110: 6c 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 2f  l: {           /
a120: 2a 20 6f 75 74 32 20 2a 2f 0a 20 20 69 6e 74 20  * out2 */.  int 
a130: 63 6e 74 3b 0a 20 20 75 31 36 20 6e 75 6c 6c 46  cnt;.  u16 nullF
a140: 6c 61 67 3b 0a 20 20 70 4f 75 74 20 3d 20 6f 75  lag;.  pOut = ou
a150: 74 32 50 72 65 72 65 6c 65 61 73 65 28 70 2c 20  t2Prerelease(p, 
a160: 70 4f 70 29 3b 0a 20 20 63 6e 74 20 3d 20 70 4f  pOp);.  cnt = pO
a170: 70 2d 3e 70 33 2d 70 4f 70 2d 3e 70 32 3b 0a 20  p->p3-pOp->p2;. 
a180: 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33   assert( pOp->p3
a190: 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70  <=(p->nMem+1 - p
a1a0: 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20  ->nCursor) );.  
a1b0: 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 6e 75  pOut->flags = nu
a1c0: 6c 6c 46 6c 61 67 20 3d 20 70 4f 70 2d 3e 70 31  llFlag = pOp->p1
a1d0: 20 3f 20 28 4d 45 4d 5f 4e 75 6c 6c 7c 4d 45 4d   ? (MEM_Null|MEM
a1e0: 5f 43 6c 65 61 72 65 64 29 20 3a 20 4d 45 4d 5f  _Cleared) : MEM_
a1f0: 4e 75 6c 6c 3b 0a 20 20 70 4f 75 74 2d 3e 6e 20  Null;.  pOut->n 
a200: 3d 20 30 3b 0a 23 69 66 64 65 66 20 53 51 4c 49  = 0;.#ifdef SQLI
a210: 54 45 5f 44 45 42 55 47 0a 20 20 70 4f 75 74 2d  TE_DEBUG.  pOut-
a220: 3e 75 54 65 6d 70 20 3d 20 30 3b 0a 23 65 6e 64  >uTemp = 0;.#end
a230: 69 66 0a 20 20 77 68 69 6c 65 28 20 63 6e 74 3e  if.  while( cnt>
a240: 30 20 29 7b 0a 20 20 20 20 70 4f 75 74 2b 2b 3b  0 ){.    pOut++;
a250: 0a 20 20 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43  .    memAboutToC
a260: 68 61 6e 67 65 28 70 2c 20 70 4f 75 74 29 3b 0a  hange(p, pOut);.
a270: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
a280: 65 6d 53 65 74 4e 75 6c 6c 28 70 4f 75 74 29 3b  emSetNull(pOut);
a290: 0a 20 20 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73  .    pOut->flags
a2a0: 20 3d 20 6e 75 6c 6c 46 6c 61 67 3b 0a 20 20 20   = nullFlag;.   
a2b0: 20 70 4f 75 74 2d 3e 6e 20 3d 20 30 3b 0a 20 20   pOut->n = 0;.  
a2c0: 20 20 63 6e 74 2d 2d 3b 0a 20 20 7d 0a 20 20 62    cnt--;.  }.  b
a2d0: 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
a2e0: 64 65 3a 20 53 6f 66 74 4e 75 6c 6c 20 50 31 20  de: SoftNull P1 
a2f0: 2a 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70  * * * *.** Synop
a300: 73 69 73 3a 20 72 5b 50 31 5d 3d 4e 55 4c 4c 0a  sis: r[P1]=NULL.
a310: 2a 2a 0a 2a 2a 20 53 65 74 20 72 65 67 69 73 74  **.** Set regist
a320: 65 72 20 50 31 20 74 6f 20 68 61 76 65 20 74 68  er P1 to have th
a330: 65 20 76 61 6c 75 65 20 4e 55 4c 4c 20 61 73 20  e value NULL as 
a340: 73 65 65 6e 20 62 79 20 74 68 65 20 4f 50 5f 4d  seen by the OP_M
a350: 61 6b 65 52 65 63 6f 72 64 0a 2a 2a 20 69 6e 73  akeRecord.** ins
a360: 74 72 75 63 74 69 6f 6e 2c 20 62 75 74 20 64 6f  truction, but do
a370: 20 6e 6f 74 20 66 72 65 65 20 61 6e 79 20 73 74   not free any st
a380: 72 69 6e 67 20 6f 72 20 62 6c 6f 62 20 6d 65 6d  ring or blob mem
a390: 6f 72 79 20 61 73 73 6f 63 69 61 74 65 64 20 77  ory associated w
a3a0: 69 74 68 0a 2a 2a 20 74 68 65 20 72 65 67 69 73  ith.** the regis
a3b0: 74 65 72 2c 20 73 6f 20 74 68 61 74 20 69 66 20  ter, so that if 
a3c0: 74 68 65 20 76 61 6c 75 65 20 77 61 73 20 61 20  the value was a 
a3d0: 73 74 72 69 6e 67 20 6f 72 20 62 6c 6f 62 20 74  string or blob t
a3e0: 68 61 74 20 77 61 73 0a 2a 2a 20 70 72 65 76 69  hat was.** previ
a3f0: 6f 75 73 6c 79 20 63 6f 70 69 65 64 20 75 73 69  ously copied usi
a400: 6e 67 20 4f 50 5f 53 43 6f 70 79 2c 20 74 68 65  ng OP_SCopy, the
a410: 20 63 6f 70 69 65 73 20 77 69 6c 6c 20 63 6f 6e   copies will con
a420: 74 69 6e 75 65 20 74 6f 20 62 65 20 76 61 6c 69  tinue to be vali
a430: 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 6f  d..*/.case OP_So
a440: 66 74 4e 75 6c 6c 3a 20 7b 0a 20 20 61 73 73 65  ftNull: {.  asse
a450: 72 74 28 20 70 4f 70 2d 3e 70 31 3e 30 20 26 26  rt( pOp->p1>0 &&
a460: 20 70 4f 70 2d 3e 70 31 3c 3d 28 70 2d 3e 6e 4d   pOp->p1<=(p->nM
a470: 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f  em+1 - p->nCurso
a480: 72 29 20 29 3b 0a 20 20 70 4f 75 74 20 3d 20 26  r) );.  pOut = &
a490: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  aMem[pOp->p1];. 
a4a0: 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 28   pOut->flags = (
a4b0: 70 4f 75 74 2d 3e 66 6c 61 67 73 26 7e 28 4d 45  pOut->flags&~(ME
a4c0: 4d 5f 55 6e 64 65 66 69 6e 65 64 7c 4d 45 4d 5f  M_Undefined|MEM_
a4d0: 41 66 66 4d 61 73 6b 29 29 7c 4d 45 4d 5f 4e 75  AffMask))|MEM_Nu
a4e0: 6c 6c 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  ll;.  break;.}..
a4f0: 2f 2a 20 4f 70 63 6f 64 65 3a 20 42 6c 6f 62 20  /* Opcode: Blob 
a500: 50 31 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 20  P1 P2 * P4 *.** 
a510: 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d  Synopsis: r[P2]=
a520: 50 34 20 28 6c 65 6e 3d 50 31 29 0a 2a 2a 0a 2a  P4 (len=P1).**.*
a530: 2a 20 50 34 20 70 6f 69 6e 74 73 20 74 6f 20 61  * P4 points to a
a540: 20 62 6c 6f 62 20 6f 66 20 64 61 74 61 20 50 31   blob of data P1
a550: 20 62 79 74 65 73 20 6c 6f 6e 67 2e 20 20 53 74   bytes long.  St
a560: 6f 72 65 20 74 68 69 73 0a 2a 2a 20 62 6c 6f 62  ore this.** blob
a570: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 2e   in register P2.
a580: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 42 6c 6f 62  .*/.case OP_Blob
a590: 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20  : {             
a5a0: 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20 20     /* out2 */.  
a5b0: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 20  assert( pOp->p1 
a5c0: 3c 3d 20 53 51 4c 49 54 45 5f 4d 41 58 5f 4c 45  <= SQLITE_MAX_LE
a5d0: 4e 47 54 48 20 29 3b 0a 20 20 70 4f 75 74 20 3d  NGTH );.  pOut =
a5e0: 20 6f 75 74 32 50 72 65 72 65 6c 65 61 73 65 28   out2Prerelease(
a5f0: 70 2c 20 70 4f 70 29 3b 0a 20 20 73 71 6c 69 74  p, pOp);.  sqlit
a600: 65 33 56 64 62 65 4d 65 6d 53 65 74 53 74 72 28  e3VdbeMemSetStr(
a610: 70 4f 75 74 2c 20 70 4f 70 2d 3e 70 34 2e 7a 2c  pOut, pOp->p4.z,
a620: 20 70 4f 70 2d 3e 70 31 2c 20 30 2c 20 30 29 3b   pOp->p1, 0, 0);
a630: 0a 20 20 70 4f 75 74 2d 3e 65 6e 63 20 3d 20 65  .  pOut->enc = e
a640: 6e 63 6f 64 69 6e 67 3b 0a 20 20 55 50 44 41 54  ncoding;.  UPDAT
a650: 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70  E_MAX_BLOBSIZE(p
a660: 4f 75 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  Out);.  break;.}
a670: 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 61 72  ../* Opcode: Var
a680: 69 61 62 6c 65 20 50 31 20 50 32 20 2a 20 50 34  iable P1 P2 * P4
a690: 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
a6a0: 72 5b 50 32 5d 3d 70 61 72 61 6d 65 74 65 72 28  r[P2]=parameter(
a6b0: 50 31 2c 50 34 29 0a 2a 2a 0a 2a 2a 20 54 72 61  P1,P4).**.** Tra
a6c0: 6e 73 66 65 72 20 74 68 65 20 76 61 6c 75 65 73  nsfer the values
a6d0: 20 6f 66 20 62 6f 75 6e 64 20 70 61 72 61 6d 65   of bound parame
a6e0: 74 65 72 20 50 31 20 69 6e 74 6f 20 72 65 67 69  ter P1 into regi
a6f0: 73 74 65 72 20 50 32 0a 2a 2a 0a 2a 2a 20 49 66  ster P2.**.** If
a700: 20 74 68 65 20 70 61 72 61 6d 65 74 65 72 20 69   the parameter i
a710: 73 20 6e 61 6d 65 64 2c 20 74 68 65 6e 20 69 74  s named, then it
a720: 73 20 6e 61 6d 65 20 61 70 70 65 61 72 73 20 69  s name appears i
a730: 6e 20 50 34 2e 0a 2a 2a 20 54 68 65 20 50 34 20  n P4..** The P4 
a740: 76 61 6c 75 65 20 69 73 20 75 73 65 64 20 62 79  value is used by
a750: 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 70 61   sqlite3_bind_pa
a760: 72 61 6d 65 74 65 72 5f 6e 61 6d 65 28 29 2e 0a  rameter_name()..
a770: 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 61 72 69 61  */.case OP_Varia
a780: 62 6c 65 3a 20 7b 20 20 20 20 20 20 20 20 20 20  ble: {          
a790: 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20 20 4d    /* out2 */.  M
a7a0: 65 6d 20 2a 70 56 61 72 3b 20 20 20 20 20 20 20  em *pVar;       
a7b0: 2f 2a 20 56 61 6c 75 65 20 62 65 69 6e 67 20 74  /* Value being t
a7c0: 72 61 6e 73 66 65 72 72 65 64 20 2a 2f 0a 0a 20  ransferred */.. 
a7d0: 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
a7e0: 3e 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 3d 70  >0 && pOp->p1<=p
a7f0: 2d 3e 6e 56 61 72 20 29 3b 0a 20 20 61 73 73 65  ->nVar );.  asse
a800: 72 74 28 20 70 4f 70 2d 3e 70 34 2e 7a 3d 3d 30  rt( pOp->p4.z==0
a810: 20 7c 7c 20 70 4f 70 2d 3e 70 34 2e 7a 3d 3d 73   || pOp->p4.z==s
a820: 71 6c 69 74 65 33 56 4c 69 73 74 4e 75 6d 54 6f  qlite3VListNumTo
a830: 4e 61 6d 65 28 70 2d 3e 70 56 4c 69 73 74 2c 70  Name(p->pVList,p
a840: 4f 70 2d 3e 70 31 29 20 29 3b 0a 20 20 70 56 61  Op->p1) );.  pVa
a850: 72 20 3d 20 26 70 2d 3e 61 56 61 72 5b 70 4f 70  r = &p->aVar[pOp
a860: 2d 3e 70 31 20 2d 20 31 5d 3b 0a 20 20 69 66 28  ->p1 - 1];.  if(
a870: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 54   sqlite3VdbeMemT
a880: 6f 6f 42 69 67 28 70 56 61 72 29 20 29 7b 0a 20  ooBig(pVar) ){. 
a890: 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b     goto too_big;
a8a0: 0a 20 20 7d 0a 20 20 70 4f 75 74 20 3d 20 26 61  .  }.  pOut = &a
a8b0: 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20  Mem[pOp->p2];.  
a8c0: 69 66 28 20 56 64 62 65 4d 65 6d 44 79 6e 61 6d  if( VdbeMemDynam
a8d0: 69 63 28 70 4f 75 74 29 20 29 20 73 71 6c 69 74  ic(pOut) ) sqlit
a8e0: 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c  e3VdbeMemSetNull
a8f0: 28 70 4f 75 74 29 3b 0a 20 20 6d 65 6d 63 70 79  (pOut);.  memcpy
a900: 28 70 4f 75 74 2c 20 70 56 61 72 2c 20 4d 45 4d  (pOut, pVar, MEM
a910: 43 45 4c 4c 53 49 5a 45 29 3b 0a 20 20 70 4f 75  CELLSIZE);.  pOu
a920: 74 2d 3e 66 6c 61 67 73 20 26 3d 20 7e 28 4d 45  t->flags &= ~(ME
a930: 4d 5f 44 79 6e 7c 4d 45 4d 5f 45 70 68 65 6d 29  M_Dyn|MEM_Ephem)
a940: 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20  ;.  pOut->flags 
a950: 7c 3d 20 4d 45 4d 5f 53 74 61 74 69 63 7c 4d 45  |= MEM_Static|ME
a960: 4d 5f 46 72 6f 6d 42 69 6e 64 3b 0a 20 20 55 50  M_FromBind;.  UP
a970: 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a  DATE_MAX_BLOBSIZ
a980: 45 28 70 4f 75 74 29 3b 0a 20 20 62 72 65 61 6b  E(pOut);.  break
a990: 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
a9a0: 4d 6f 76 65 20 50 31 20 50 32 20 50 33 20 2a 20  Move P1 P2 P3 * 
a9b0: 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72  *.** Synopsis: r
a9c0: 5b 50 32 40 50 33 5d 3d 72 5b 50 31 40 50 33 5d  [P2@P3]=r[P1@P3]
a9d0: 0a 2a 2a 0a 2a 2a 20 4d 6f 76 65 20 74 68 65 20  .**.** Move the 
a9e0: 50 33 20 76 61 6c 75 65 73 20 69 6e 20 72 65 67  P3 values in reg
a9f0: 69 73 74 65 72 20 50 31 2e 2e 50 31 2b 50 33 2d  ister P1..P1+P3-
aa00: 31 20 6f 76 65 72 20 69 6e 74 6f 0a 2a 2a 20 72  1 over into.** r
aa10: 65 67 69 73 74 65 72 73 20 50 32 2e 2e 50 32 2b  egisters P2..P2+
aa20: 50 33 2d 31 2e 20 20 52 65 67 69 73 74 65 72 73  P3-1.  Registers
aa30: 20 50 31 2e 2e 50 31 2b 50 33 2d 31 20 61 72 65   P1..P1+P3-1 are
aa40: 0a 2a 2a 20 6c 65 66 74 20 68 6f 6c 64 69 6e 67  .** left holding
aa50: 20 61 20 4e 55 4c 4c 2e 20 20 49 74 20 69 73 20   a NULL.  It is 
aa60: 61 6e 20 65 72 72 6f 72 20 66 6f 72 20 72 65 67  an error for reg
aa70: 69 73 74 65 72 20 72 61 6e 67 65 73 0a 2a 2a 20  ister ranges.** 
aa80: 50 31 2e 2e 50 31 2b 50 33 2d 31 20 61 6e 64 20  P1..P1+P3-1 and 
aa90: 50 32 2e 2e 50 32 2b 50 33 2d 31 20 74 6f 20 6f  P2..P2+P3-1 to o
aaa0: 76 65 72 6c 61 70 2e 20 20 49 74 20 69 73 20 61  verlap.  It is a
aab0: 6e 20 65 72 72 6f 72 0a 2a 2a 20 66 6f 72 20 50  n error.** for P
aac0: 33 20 74 6f 20 62 65 20 6c 65 73 73 20 74 68 61  3 to be less tha
aad0: 6e 20 31 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  n 1..*/.case OP_
aae0: 4d 6f 76 65 3a 20 7b 0a 20 20 69 6e 74 20 6e 3b  Move: {.  int n;
aaf0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
ab00: 6d 62 65 72 20 6f 66 20 72 65 67 69 73 74 65 72  mber of register
ab10: 73 20 6c 65 66 74 20 74 6f 20 63 6f 70 79 20 2a  s left to copy *
ab20: 2f 0a 20 20 69 6e 74 20 70 31 3b 20 20 20 20 20  /.  int p1;     
ab30: 20 20 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72       /* Register
ab40: 20 74 6f 20 63 6f 70 79 20 66 72 6f 6d 20 2a 2f   to copy from */
ab50: 0a 20 20 69 6e 74 20 70 32 3b 20 20 20 20 20 20  .  int p2;      
ab60: 20 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72 20      /* Register 
ab70: 74 6f 20 63 6f 70 79 20 74 6f 20 2a 2f 0a 0a 20  to copy to */.. 
ab80: 20 6e 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20   n = pOp->p3;.  
ab90: 70 31 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20  p1 = pOp->p1;.  
aba0: 70 32 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20  p2 = pOp->p2;.  
abb0: 61 73 73 65 72 74 28 20 6e 3e 30 20 26 26 20 70  assert( n>0 && p
abc0: 31 3e 30 20 26 26 20 70 32 3e 30 20 29 3b 0a 20  1>0 && p2>0 );. 
abd0: 20 61 73 73 65 72 74 28 20 70 31 2b 6e 3c 3d 70   assert( p1+n<=p
abe0: 32 20 7c 7c 20 70 32 2b 6e 3c 3d 70 31 20 29 3b  2 || p2+n<=p1 );
abf0: 0a 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d  ..  pIn1 = &aMem
ac00: 5b 70 31 5d 3b 0a 20 20 70 4f 75 74 20 3d 20 26  [p1];.  pOut = &
ac10: 61 4d 65 6d 5b 70 32 5d 3b 0a 20 20 64 6f 7b 0a  aMem[p2];.  do{.
ac20: 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 75 74      assert( pOut
ac30: 3c 3d 26 61 4d 65 6d 5b 28 70 2d 3e 6e 4d 65 6d  <=&aMem[(p->nMem
ac40: 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29  +1 - p->nCursor)
ac50: 5d 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  ] );.    assert(
ac60: 20 70 49 6e 31 3c 3d 26 61 4d 65 6d 5b 28 70 2d   pIn1<=&aMem[(p-
ac70: 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75  >nMem+1 - p->nCu
ac80: 72 73 6f 72 29 5d 20 29 3b 0a 20 20 20 20 61 73  rsor)] );.    as
ac90: 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64  sert( memIsValid
aca0: 28 70 49 6e 31 29 20 29 3b 0a 20 20 20 20 6d 65  (pIn1) );.    me
acb0: 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70  mAboutToChange(p
acc0: 2c 20 70 4f 75 74 29 3b 0a 20 20 20 20 73 71 6c  , pOut);.    sql
acd0: 69 74 65 33 56 64 62 65 4d 65 6d 4d 6f 76 65 28  ite3VdbeMemMove(
ace0: 70 4f 75 74 2c 20 70 49 6e 31 29 3b 0a 23 69 66  pOut, pIn1);.#if
acf0: 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47  def SQLITE_DEBUG
ad00: 0a 20 20 20 20 69 66 28 20 70 4f 75 74 2d 3e 70  .    if( pOut->p
ad10: 53 63 6f 70 79 46 72 6f 6d 3e 3d 26 61 4d 65 6d  ScopyFrom>=&aMem
ad20: 5b 70 31 5d 20 26 26 20 70 4f 75 74 2d 3e 70 53  [p1] && pOut->pS
ad30: 63 6f 70 79 46 72 6f 6d 3c 70 4f 75 74 20 29 7b  copyFrom<pOut ){
ad40: 0a 20 20 20 20 20 20 70 4f 75 74 2d 3e 70 53 63  .      pOut->pSc
ad50: 6f 70 79 46 72 6f 6d 20 2b 3d 20 70 4f 70 2d 3e  opyFrom += pOp->
ad60: 70 32 20 2d 20 70 31 3b 0a 20 20 20 20 7d 0a 23  p2 - p1;.    }.#
ad70: 65 6e 64 69 66 0a 20 20 20 20 44 65 65 70 68 65  endif.    Deephe
ad80: 6d 65 72 61 6c 69 7a 65 28 70 4f 75 74 29 3b 0a  meralize(pOut);.
ad90: 20 20 20 20 52 45 47 49 53 54 45 52 5f 54 52 41      REGISTER_TRA
ada0: 43 45 28 70 32 2b 2b 2c 20 70 4f 75 74 29 3b 0a  CE(p2++, pOut);.
adb0: 20 20 20 20 70 49 6e 31 2b 2b 3b 0a 20 20 20 20      pIn1++;.    
adc0: 70 4f 75 74 2b 2b 3b 0a 20 20 7d 77 68 69 6c 65  pOut++;.  }while
add0: 28 20 2d 2d 6e 20 29 3b 0a 20 20 62 72 65 61 6b  ( --n );.  break
ade0: 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
adf0: 43 6f 70 79 20 50 31 20 50 32 20 50 33 20 2a 20  Copy P1 P2 P3 * 
ae00: 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72  *.** Synopsis: r
ae10: 5b 50 32 40 50 33 2b 31 5d 3d 72 5b 50 31 40 50  [P2@P3+1]=r[P1@P
ae20: 33 2b 31 5d 0a 2a 2a 0a 2a 2a 20 4d 61 6b 65 20  3+1].**.** Make 
ae30: 61 20 63 6f 70 79 20 6f 66 20 72 65 67 69 73 74  a copy of regist
ae40: 65 72 73 20 50 31 2e 2e 50 31 2b 50 33 20 69 6e  ers P1..P1+P3 in
ae50: 74 6f 20 72 65 67 69 73 74 65 72 73 20 50 32 2e  to registers P2.
ae60: 2e 50 32 2b 50 33 2e 0a 2a 2a 0a 2a 2a 20 54 68  .P2+P3..**.** Th
ae70: 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 6d  is instruction m
ae80: 61 6b 65 73 20 61 20 64 65 65 70 20 63 6f 70 79  akes a deep copy
ae90: 20 6f 66 20 74 68 65 20 76 61 6c 75 65 2e 20 20   of the value.  
aea0: 41 20 64 75 70 6c 69 63 61 74 65 0a 2a 2a 20 69  A duplicate.** i
aeb0: 73 20 6d 61 64 65 20 6f 66 20 61 6e 79 20 73 74  s made of any st
aec0: 72 69 6e 67 20 6f 72 20 62 6c 6f 62 20 63 6f 6e  ring or blob con
aed0: 73 74 61 6e 74 2e 20 20 53 65 65 20 61 6c 73 6f  stant.  See also
aee0: 20 4f 50 5f 53 43 6f 70 79 2e 0a 2a 2f 0a 63 61   OP_SCopy..*/.ca
aef0: 73 65 20 4f 50 5f 43 6f 70 79 3a 20 7b 0a 20 20  se OP_Copy: {.  
af00: 69 6e 74 20 6e 3b 0a 0a 20 20 6e 20 3d 20 70 4f  int n;..  n = pO
af10: 70 2d 3e 70 33 3b 0a 20 20 70 49 6e 31 20 3d 20  p->p3;.  pIn1 = 
af20: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  &aMem[pOp->p1];.
af30: 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70    pOut = &aMem[p
af40: 4f 70 2d 3e 70 32 5d 3b 0a 20 20 61 73 73 65 72  Op->p2];.  asser
af50: 74 28 20 70 4f 75 74 21 3d 70 49 6e 31 20 29 3b  t( pOut!=pIn1 );
af60: 0a 20 20 77 68 69 6c 65 28 20 31 20 29 7b 0a 20  .  while( 1 ){. 
af70: 20 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61     memAboutToCha
af80: 6e 67 65 28 70 2c 20 70 4f 75 74 29 3b 0a 20 20  nge(p, pOut);.  
af90: 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
afa0: 53 68 61 6c 6c 6f 77 43 6f 70 79 28 70 4f 75 74  ShallowCopy(pOut
afb0: 2c 20 70 49 6e 31 2c 20 4d 45 4d 5f 45 70 68 65  , pIn1, MEM_Ephe
afc0: 6d 29 3b 0a 20 20 20 20 44 65 65 70 68 65 6d 65  m);.    Deepheme
afd0: 72 61 6c 69 7a 65 28 70 4f 75 74 29 3b 0a 23 69  ralize(pOut);.#i
afe0: 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55  fdef SQLITE_DEBU
aff0: 47 0a 20 20 20 20 70 4f 75 74 2d 3e 70 53 63 6f  G.    pOut->pSco
b000: 70 79 46 72 6f 6d 20 3d 20 30 3b 0a 23 65 6e 64  pyFrom = 0;.#end
b010: 69 66 0a 20 20 20 20 52 45 47 49 53 54 45 52 5f  if.    REGISTER_
b020: 54 52 41 43 45 28 70 4f 70 2d 3e 70 32 2b 70 4f  TRACE(pOp->p2+pO
b030: 70 2d 3e 70 33 2d 6e 2c 20 70 4f 75 74 29 3b 0a  p->p3-n, pOut);.
b040: 20 20 20 20 69 66 28 20 28 6e 2d 2d 29 3d 3d 30      if( (n--)==0
b050: 20 29 20 62 72 65 61 6b 3b 0a 20 20 20 20 70 4f   ) break;.    pO
b060: 75 74 2b 2b 3b 0a 20 20 20 20 70 49 6e 31 2b 2b  ut++;.    pIn1++
b070: 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
b080: 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 43 6f  ../* Opcode: SCo
b090: 70 79 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  py P1 P2 * * *.*
b0a0: 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32  * Synopsis: r[P2
b0b0: 5d 3d 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 4d 61  ]=r[P1].**.** Ma
b0c0: 6b 65 20 61 20 73 68 61 6c 6c 6f 77 20 63 6f 70  ke a shallow cop
b0d0: 79 20 6f 66 20 72 65 67 69 73 74 65 72 20 50 31  y of register P1
b0e0: 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50   into register P
b0f0: 32 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 6e  2..**.** This in
b100: 73 74 72 75 63 74 69 6f 6e 20 6d 61 6b 65 73 20  struction makes 
b110: 61 20 73 68 61 6c 6c 6f 77 20 63 6f 70 79 20 6f  a shallow copy o
b120: 66 20 74 68 65 20 76 61 6c 75 65 2e 20 20 49 66  f the value.  If
b130: 20 74 68 65 20 76 61 6c 75 65 0a 2a 2a 20 69 73   the value.** is
b140: 20 61 20 73 74 72 69 6e 67 20 6f 72 20 62 6c 6f   a string or blo
b150: 62 2c 20 74 68 65 6e 20 74 68 65 20 63 6f 70 79  b, then the copy
b160: 20 69 73 20 6f 6e 6c 79 20 61 20 70 6f 69 6e 74   is only a point
b170: 65 72 20 74 6f 20 74 68 65 0a 2a 2a 20 6f 72 69  er to the.** ori
b180: 67 69 6e 61 6c 20 61 6e 64 20 68 65 6e 63 65 20  ginal and hence 
b190: 69 66 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 20  if the original 
b1a0: 63 68 61 6e 67 65 73 20 73 6f 20 77 69 6c 6c 20  changes so will 
b1b0: 74 68 65 20 63 6f 70 79 2e 0a 2a 2a 20 57 6f 72  the copy..** Wor
b1c0: 73 65 2c 20 69 66 20 74 68 65 20 6f 72 69 67 69  se, if the origi
b1d0: 6e 61 6c 20 69 73 20 64 65 61 6c 6c 6f 63 61 74  nal is deallocat
b1e0: 65 64 2c 20 74 68 65 20 63 6f 70 79 20 62 65 63  ed, the copy bec
b1f0: 6f 6d 65 73 20 69 6e 76 61 6c 69 64 2e 0a 2a 2a  omes invalid..**
b200: 20 54 68 75 73 20 74 68 65 20 70 72 6f 67 72 61   Thus the progra
b210: 6d 20 6d 75 73 74 20 67 75 61 72 61 6e 74 65 65  m must guarantee
b220: 20 74 68 61 74 20 74 68 65 20 6f 72 69 67 69 6e   that the origin
b230: 61 6c 20 77 69 6c 6c 20 6e 6f 74 20 63 68 61 6e  al will not chan
b240: 67 65 0a 2a 2a 20 64 75 72 69 6e 67 20 74 68 65  ge.** during the
b250: 20 6c 69 66 65 74 69 6d 65 20 6f 66 20 74 68 65   lifetime of the
b260: 20 63 6f 70 79 2e 20 20 55 73 65 20 4f 50 5f 43   copy.  Use OP_C
b270: 6f 70 79 20 74 6f 20 6d 61 6b 65 20 61 20 63 6f  opy to make a co
b280: 6d 70 6c 65 74 65 0a 2a 2a 20 63 6f 70 79 2e 0a  mplete.** copy..
b290: 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 43 6f 70 79  */.case OP_SCopy
b2a0: 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f  : {            /
b2b0: 2a 20 6f 75 74 32 20 2a 2f 0a 20 20 70 49 6e 31  * out2 */.  pIn1
b2c0: 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31   = &aMem[pOp->p1
b2d0: 5d 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65  ];.  pOut = &aMe
b2e0: 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 61 73  m[pOp->p2];.  as
b2f0: 73 65 72 74 28 20 70 4f 75 74 21 3d 70 49 6e 31  sert( pOut!=pIn1
b300: 20 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62   );.  sqlite3Vdb
b310: 65 4d 65 6d 53 68 61 6c 6c 6f 77 43 6f 70 79 28  eMemShallowCopy(
b320: 70 4f 75 74 2c 20 70 49 6e 31 2c 20 4d 45 4d 5f  pOut, pIn1, MEM_
b330: 45 70 68 65 6d 29 3b 0a 23 69 66 64 65 66 20 53  Ephem);.#ifdef S
b340: 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 70 4f  QLITE_DEBUG.  pO
b350: 75 74 2d 3e 70 53 63 6f 70 79 46 72 6f 6d 20 3d  ut->pScopyFrom =
b360: 20 70 49 6e 31 3b 0a 20 20 70 4f 75 74 2d 3e 6d   pIn1;.  pOut->m
b370: 53 63 6f 70 79 46 6c 61 67 73 20 3d 20 70 49 6e  ScopyFlags = pIn
b380: 31 2d 3e 66 6c 61 67 73 3b 0a 23 65 6e 64 69 66  1->flags;.#endif
b390: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
b3a0: 4f 70 63 6f 64 65 3a 20 49 6e 74 43 6f 70 79 20  Opcode: IntCopy 
b3b0: 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53  P1 P2 * * *.** S
b3c0: 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 72  ynopsis: r[P2]=r
b3d0: 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 54 72 61 6e 73  [P1].**.** Trans
b3e0: 66 65 72 20 74 68 65 20 69 6e 74 65 67 65 72 20  fer the integer 
b3f0: 76 61 6c 75 65 20 68 65 6c 64 20 69 6e 20 72 65  value held in re
b400: 67 69 73 74 65 72 20 50 31 20 69 6e 74 6f 20 72  gister P1 into r
b410: 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a  egister P2..**.*
b420: 2a 20 54 68 69 73 20 69 73 20 61 6e 20 6f 70 74  * This is an opt
b430: 69 6d 69 7a 65 64 20 76 65 72 73 69 6f 6e 20 6f  imized version o
b440: 66 20 53 43 6f 70 79 20 74 68 61 74 20 77 6f 72  f SCopy that wor
b450: 6b 73 20 6f 6e 6c 79 20 66 6f 72 20 69 6e 74 65  ks only for inte
b460: 67 65 72 0a 2a 2a 20 76 61 6c 75 65 73 2e 0a 2a  ger.** values..*
b470: 2f 0a 63 61 73 65 20 4f 50 5f 49 6e 74 43 6f 70  /.case OP_IntCop
b480: 79 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20  y: {            
b490: 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20 20 70 49 6e  /* out2 */.  pIn
b4a0: 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  1 = &aMem[pOp->p
b4b0: 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70  1];.  assert( (p
b4c0: 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  In1->flags & MEM
b4d0: 5f 49 6e 74 29 21 3d 30 20 29 3b 0a 20 20 70 4f  _Int)!=0 );.  pO
b4e0: 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  ut = &aMem[pOp->
b4f0: 70 32 5d 3b 0a 20 20 73 71 6c 69 74 65 33 56 64  p2];.  sqlite3Vd
b500: 62 65 4d 65 6d 53 65 74 49 6e 74 36 34 28 70 4f  beMemSetInt64(pO
b510: 75 74 2c 20 70 49 6e 31 2d 3e 75 2e 69 29 3b 0a  ut, pIn1->u.i);.
b520: 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
b530: 70 63 6f 64 65 3a 20 52 65 73 75 6c 74 52 6f 77  pcode: ResultRow
b540: 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20   P1 P2 * * *.** 
b550: 53 79 6e 6f 70 73 69 73 3a 20 6f 75 74 70 75 74  Synopsis: output
b560: 3d 72 5b 50 31 40 50 32 5d 0a 2a 2a 0a 2a 2a 20  =r[P1@P2].**.** 
b570: 54 68 65 20 72 65 67 69 73 74 65 72 73 20 50 31  The registers P1
b580: 20 74 68 72 6f 75 67 68 20 50 31 2b 50 32 2d 31   through P1+P2-1
b590: 20 63 6f 6e 74 61 69 6e 20 61 20 73 69 6e 67 6c   contain a singl
b5a0: 65 20 72 6f 77 20 6f 66 0a 2a 2a 20 72 65 73 75  e row of.** resu
b5b0: 6c 74 73 2e 20 54 68 69 73 20 6f 70 63 6f 64 65  lts. This opcode
b5c0: 20 63 61 75 73 65 73 20 74 68 65 20 73 71 6c 69   causes the sqli
b5d0: 74 65 33 5f 73 74 65 70 28 29 20 63 61 6c 6c 20  te3_step() call 
b5e0: 74 6f 20 74 65 72 6d 69 6e 61 74 65 0a 2a 2a 20  to terminate.** 
b5f0: 77 69 74 68 20 61 6e 20 53 51 4c 49 54 45 5f 52  with an SQLITE_R
b600: 4f 57 20 72 65 74 75 72 6e 20 63 6f 64 65 20 61  OW return code a
b610: 6e 64 20 69 74 20 73 65 74 73 20 75 70 20 74 68  nd it sets up th
b620: 65 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 0a 2a  e sqlite3_stmt.*
b630: 2a 20 73 74 72 75 63 74 75 72 65 20 74 6f 20 70  * structure to p
b640: 72 6f 76 69 64 65 20 61 63 63 65 73 73 20 74 6f  rovide access to
b650: 20 74 68 65 20 72 28 50 31 29 2e 2e 72 28 50 31   the r(P1)..r(P1
b660: 2b 50 32 2d 31 29 20 76 61 6c 75 65 73 20 61 73  +P2-1) values as
b670: 0a 2a 2a 20 74 68 65 20 72 65 73 75 6c 74 20 72  .** the result r
b680: 6f 77 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52  ow..*/.case OP_R
b690: 65 73 75 6c 74 52 6f 77 3a 20 7b 0a 20 20 4d 65  esultRow: {.  Me
b6a0: 6d 20 2a 70 4d 65 6d 3b 0a 20 20 69 6e 74 20 69  m *pMem;.  int i
b6b0: 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 6e  ;.  assert( p->n
b6c0: 52 65 73 43 6f 6c 75 6d 6e 3d 3d 70 4f 70 2d 3e  ResColumn==pOp->
b6d0: 70 32 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  p2 );.  assert( 
b6e0: 70 4f 70 2d 3e 70 31 3e 30 20 29 3b 0a 20 20 61  pOp->p1>0 );.  a
b6f0: 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 2b 70  ssert( pOp->p1+p
b700: 4f 70 2d 3e 70 32 3c 3d 28 70 2d 3e 6e 4d 65 6d  Op->p2<=(p->nMem
b710: 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29  +1 - p->nCursor)
b720: 2b 31 20 29 3b 0a 0a 20 20 2f 2a 20 49 66 20 74  +1 );..  /* If t
b730: 68 69 73 20 73 74 61 74 65 6d 65 6e 74 20 68 61  his statement ha
b740: 73 20 76 69 6f 6c 61 74 65 64 20 69 6d 6d 65 64  s violated immed
b750: 69 61 74 65 20 66 6f 72 65 69 67 6e 20 6b 65 79  iate foreign key
b760: 20 63 6f 6e 73 74 72 61 69 6e 74 73 2c 20 64 6f   constraints, do
b770: 0a 20 20 2a 2a 20 6e 6f 74 20 72 65 74 75 72 6e  .  ** not return
b780: 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 72   the number of r
b790: 6f 77 73 20 6d 6f 64 69 66 69 65 64 2e 20 41 6e  ows modified. An
b7a0: 64 20 64 6f 20 6e 6f 74 20 52 45 4c 45 41 53 45  d do not RELEASE
b7b0: 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74 0a 20   the statement. 
b7c0: 20 2a 2a 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e   ** transaction.
b7d0: 20 49 74 20 6e 65 65 64 73 20 74 6f 20 62 65 20   It needs to be 
b7e0: 72 6f 6c 6c 65 64 20 62 61 63 6b 2e 20 20 2a 2f  rolled back.  */
b7f0: 0a 20 20 69 66 28 20 53 51 4c 49 54 45 5f 4f 4b  .  if( SQLITE_OK
b800: 21 3d 28 72 63 20 3d 20 73 71 6c 69 74 65 33 56  !=(rc = sqlite3V
b810: 64 62 65 43 68 65 63 6b 46 6b 28 70 2c 20 30 29  dbeCheckFk(p, 0)
b820: 29 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28  ) ){.    assert(
b830: 20 64 62 2d 3e 66 6c 61 67 73 26 53 51 4c 49 54   db->flags&SQLIT
b840: 45 5f 43 6f 75 6e 74 52 6f 77 73 20 29 3b 0a 20  E_CountRows );. 
b850: 20 20 20 61 73 73 65 72 74 28 20 70 2d 3e 75 73     assert( p->us
b860: 65 73 53 74 6d 74 4a 6f 75 72 6e 61 6c 20 29 3b  esStmtJournal );
b870: 0a 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f  .    goto abort_
b880: 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
b890: 7d 0a 0a 20 20 2f 2a 20 49 66 20 74 68 65 20 53  }..  /* If the S
b8a0: 51 4c 49 54 45 5f 43 6f 75 6e 74 52 6f 77 73 20  QLITE_CountRows 
b8b0: 66 6c 61 67 20 69 73 20 73 65 74 20 69 6e 20 73  flag is set in s
b8c0: 71 6c 69 74 65 33 2e 66 6c 61 67 73 20 6d 61 73  qlite3.flags mas
b8d0: 6b 2c 20 74 68 65 6e 20 0a 20 20 2a 2a 20 44 4d  k, then .  ** DM
b8e0: 4c 20 73 74 61 74 65 6d 65 6e 74 73 20 69 6e 76  L statements inv
b8f0: 6f 6b 65 20 74 68 69 73 20 6f 70 63 6f 64 65 20  oke this opcode 
b900: 74 6f 20 72 65 74 75 72 6e 20 74 68 65 20 6e 75  to return the nu
b910: 6d 62 65 72 20 6f 66 20 72 6f 77 73 20 0a 20 20  mber of rows .  
b920: 2a 2a 20 6d 6f 64 69 66 69 65 64 20 74 6f 20 74  ** modified to t
b930: 68 65 20 75 73 65 72 2e 20 54 68 69 73 20 69 73  he user. This is
b940: 20 74 68 65 20 6f 6e 6c 79 20 77 61 79 20 74 68   the only way th
b950: 61 74 20 61 20 56 4d 20 74 68 61 74 0a 20 20 2a  at a VM that.  *
b960: 2a 20 6f 70 65 6e 73 20 61 20 73 74 61 74 65 6d  * opens a statem
b970: 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  ent transaction 
b980: 6d 61 79 20 69 6e 76 6f 6b 65 20 74 68 69 73 20  may invoke this 
b990: 6f 70 63 6f 64 65 2e 0a 20 20 2a 2a 0a 20 20 2a  opcode..  **.  *
b9a0: 2a 20 49 6e 20 63 61 73 65 20 74 68 69 73 20 69  * In case this i
b9b0: 73 20 73 75 63 68 20 61 20 73 74 61 74 65 6d 65  s such a stateme
b9c0: 6e 74 2c 20 63 6c 6f 73 65 20 61 6e 79 20 73 74  nt, close any st
b9d0: 61 74 65 6d 65 6e 74 20 74 72 61 6e 73 61 63 74  atement transact
b9e0: 69 6f 6e 0a 20 20 2a 2a 20 6f 70 65 6e 65 64 20  ion.  ** opened 
b9f0: 62 79 20 74 68 69 73 20 56 4d 20 62 65 66 6f 72  by this VM befor
ba00: 65 20 72 65 74 75 72 6e 69 6e 67 20 63 6f 6e 74  e returning cont
ba10: 72 6f 6c 20 74 6f 20 74 68 65 20 75 73 65 72 2e  rol to the user.
ba20: 20 54 68 69 73 20 69 73 20 74 6f 0a 20 20 2a 2a   This is to.  **
ba30: 20 65 6e 73 75 72 65 20 74 68 61 74 20 73 74 61   ensure that sta
ba40: 74 65 6d 65 6e 74 2d 74 72 61 6e 73 61 63 74 69  tement-transacti
ba50: 6f 6e 73 20 61 72 65 20 61 6c 77 61 79 73 20 6e  ons are always n
ba60: 65 73 74 65 64 2c 20 6e 6f 74 20 6f 76 65 72 6c  ested, not overl
ba70: 61 70 70 69 6e 67 2e 0a 20 20 2a 2a 20 49 66 20  apping..  ** If 
ba80: 74 68 65 20 6f 70 65 6e 20 73 74 61 74 65 6d 65  the open stateme
ba90: 6e 74 2d 74 72 61 6e 73 61 63 74 69 6f 6e 20 69  nt-transaction i
baa0: 73 20 6e 6f 74 20 63 6c 6f 73 65 64 20 68 65 72  s not closed her
bab0: 65 2c 20 74 68 65 6e 20 74 68 65 20 75 73 65 72  e, then the user
bac0: 0a 20 20 2a 2a 20 6d 61 79 20 73 74 65 70 20 61  .  ** may step a
bad0: 6e 6f 74 68 65 72 20 56 4d 20 74 68 61 74 20 6f  nother VM that o
bae0: 70 65 6e 73 20 69 74 73 20 6f 77 6e 20 73 74 61  pens its own sta
baf0: 74 65 6d 65 6e 74 20 74 72 61 6e 73 61 63 74 69  tement transacti
bb00: 6f 6e 2e 20 54 68 69 73 0a 20 20 2a 2a 20 6d 61  on. This.  ** ma
bb10: 79 20 6c 65 61 64 20 74 6f 20 6f 76 65 72 6c 61  y lead to overla
bb20: 70 70 69 6e 67 20 73 74 61 74 65 6d 65 6e 74 20  pping statement 
bb30: 74 72 61 6e 73 61 63 74 69 6f 6e 73 2e 0a 20 20  transactions..  
bb40: 2a 2a 0a 20 20 2a 2a 20 54 68 65 20 73 74 61 74  **.  ** The stat
bb50: 65 6d 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f  ement transactio
bb60: 6e 20 69 73 20 6e 65 76 65 72 20 61 20 74 6f 70  n is never a top
bb70: 2d 6c 65 76 65 6c 20 74 72 61 6e 73 61 63 74 69  -level transacti
bb80: 6f 6e 2e 20 20 48 65 6e 63 65 0a 20 20 2a 2a 20  on.  Hence.  ** 
bb90: 74 68 65 20 52 45 4c 45 41 53 45 20 63 61 6c 6c  the RELEASE call
bba0: 20 62 65 6c 6f 77 20 63 61 6e 20 6e 65 76 65 72   below can never
bbb0: 20 66 61 69 6c 2e 0a 20 20 2a 2f 0a 20 20 61 73   fail..  */.  as
bbc0: 73 65 72 74 28 20 70 2d 3e 69 53 74 61 74 65 6d  sert( p->iStatem
bbd0: 65 6e 74 3d 3d 30 20 7c 7c 20 64 62 2d 3e 66 6c  ent==0 || db->fl
bbe0: 61 67 73 26 53 51 4c 49 54 45 5f 43 6f 75 6e 74  ags&SQLITE_Count
bbf0: 52 6f 77 73 20 29 3b 0a 20 20 72 63 20 3d 20 73  Rows );.  rc = s
bc00: 71 6c 69 74 65 33 56 64 62 65 43 6c 6f 73 65 53  qlite3VdbeCloseS
bc10: 74 61 74 65 6d 65 6e 74 28 70 2c 20 53 41 56 45  tatement(p, SAVE
bc20: 50 4f 49 4e 54 5f 52 45 4c 45 41 53 45 29 3b 0a  POINT_RELEASE);.
bc30: 20 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53 51    assert( rc==SQ
bc40: 4c 49 54 45 5f 4f 4b 20 29 3b 0a 0a 20 20 2f 2a  LITE_OK );..  /*
bc50: 20 49 6e 76 61 6c 69 64 61 74 65 20 61 6c 6c 20   Invalidate all 
bc60: 65 70 68 65 6d 65 72 61 6c 20 63 75 72 73 6f 72  ephemeral cursor
bc70: 20 72 6f 77 20 63 61 63 68 65 73 20 2a 2f 0a 20   row caches */. 
bc80: 20 70 2d 3e 63 61 63 68 65 43 74 72 20 3d 20 28   p->cacheCtr = (
bc90: 70 2d 3e 63 61 63 68 65 43 74 72 20 2b 20 32 29  p->cacheCtr + 2)
bca0: 7c 31 3b 0a 0a 20 20 2f 2a 20 4d 61 6b 65 20 73  |1;..  /* Make s
bcb0: 75 72 65 20 74 68 65 20 72 65 73 75 6c 74 73 20  ure the results 
bcc0: 6f 66 20 74 68 65 20 63 75 72 72 65 6e 74 20 72  of the current r
bcd0: 6f 77 20 61 72 65 20 5c 30 30 30 20 74 65 72 6d  ow are \000 term
bce0: 69 6e 61 74 65 64 0a 20 20 2a 2a 20 61 6e 64 20  inated.  ** and 
bcf0: 68 61 76 65 20 61 6e 20 61 73 73 69 67 6e 65 64  have an assigned
bd00: 20 74 79 70 65 2e 20 20 54 68 65 20 72 65 73 75   type.  The resu
bd10: 6c 74 73 20 61 72 65 20 64 65 2d 65 70 68 65 6d  lts are de-ephem
bd20: 65 72 61 6c 69 7a 65 64 20 61 73 0a 20 20 2a 2a  eralized as.  **
bd30: 20 61 20 73 69 64 65 20 65 66 66 65 63 74 2e 0a   a side effect..
bd40: 20 20 2a 2f 0a 20 20 70 4d 65 6d 20 3d 20 70 2d    */.  pMem = p-
bd50: 3e 70 52 65 73 75 6c 74 53 65 74 20 3d 20 26 61  >pResultSet = &a
bd60: 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
bd70: 66 6f 72 28 69 3d 30 3b 20 69 3c 70 4f 70 2d 3e  for(i=0; i<pOp->
bd80: 70 32 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 61 73  p2; i++){.    as
bd90: 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64  sert( memIsValid
bda0: 28 26 70 4d 65 6d 5b 69 5d 29 20 29 3b 0a 20 20  (&pMem[i]) );.  
bdb0: 20 20 44 65 65 70 68 65 6d 65 72 61 6c 69 7a 65    Deephemeralize
bdc0: 28 26 70 4d 65 6d 5b 69 5d 29 3b 0a 20 20 20 20  (&pMem[i]);.    
bdd0: 61 73 73 65 72 74 28 20 28 70 4d 65 6d 5b 69 5d  assert( (pMem[i]
bde0: 2e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 45 70 68  .flags & MEM_Eph
bdf0: 65 6d 29 3d 3d 30 0a 20 20 20 20 20 20 20 20 20  em)==0.         
be00: 20 20 20 7c 7c 20 28 70 4d 65 6d 5b 69 5d 2e 66     || (pMem[i].f
be10: 6c 61 67 73 20 26 20 28 4d 45 4d 5f 53 74 72 7c  lags & (MEM_Str|
be20: 4d 45 4d 5f 42 6c 6f 62 29 29 3d 3d 30 20 29 3b  MEM_Blob))==0 );
be30: 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
be40: 4d 65 6d 4e 75 6c 54 65 72 6d 69 6e 61 74 65 28  MemNulTerminate(
be50: 26 70 4d 65 6d 5b 69 5d 29 3b 0a 20 20 20 20 52  &pMem[i]);.    R
be60: 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f  EGISTER_TRACE(pO
be70: 70 2d 3e 70 31 2b 69 2c 20 26 70 4d 65 6d 5b 69  p->p1+i, &pMem[i
be80: 5d 29 3b 0a 20 20 7d 0a 20 20 69 66 28 20 64 62  ]);.  }.  if( db
be90: 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 29  ->mallocFailed )
bea0: 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 0a 20   goto no_mem;.. 
beb0: 20 69 66 28 20 64 62 2d 3e 6d 54 72 61 63 65 20   if( db->mTrace 
bec0: 26 20 53 51 4c 49 54 45 5f 54 52 41 43 45 5f 52  & SQLITE_TRACE_R
bed0: 4f 57 20 29 7b 0a 20 20 20 20 64 62 2d 3e 78 54  OW ){.    db->xT
bee0: 72 61 63 65 28 53 51 4c 49 54 45 5f 54 52 41 43  race(SQLITE_TRAC
bef0: 45 5f 52 4f 57 2c 20 64 62 2d 3e 70 54 72 61 63  E_ROW, db->pTrac
bf00: 65 41 72 67 2c 20 70 2c 20 30 29 3b 0a 20 20 7d  eArg, p, 0);.  }
bf10: 0a 0a 20 20 2f 2a 20 52 65 74 75 72 6e 20 53 51  ..  /* Return SQ
bf20: 4c 49 54 45 5f 52 4f 57 0a 20 20 2a 2f 0a 20 20  LITE_ROW.  */.  
bf30: 70 2d 3e 70 63 20 3d 20 28 69 6e 74 29 28 70 4f  p->pc = (int)(pO
bf40: 70 20 2d 20 61 4f 70 29 20 2b 20 31 3b 0a 20 20  p - aOp) + 1;.  
bf50: 72 63 20 3d 20 53 51 4c 49 54 45 5f 52 4f 57 3b  rc = SQLITE_ROW;
bf60: 0a 20 20 67 6f 74 6f 20 76 64 62 65 5f 72 65 74  .  goto vdbe_ret
bf70: 75 72 6e 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  urn;.}../* Opcod
bf80: 65 3a 20 43 6f 6e 63 61 74 20 50 31 20 50 32 20  e: Concat P1 P2 
bf90: 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73  P3 * *.** Synops
bfa0: 69 73 3a 20 72 5b 50 33 5d 3d 72 5b 50 32 5d 2b  is: r[P3]=r[P2]+
bfb0: 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 41 64 64 20  r[P1].**.** Add 
bfc0: 74 68 65 20 74 65 78 74 20 69 6e 20 72 65 67 69  the text in regi
bfd0: 73 74 65 72 20 50 31 20 6f 6e 74 6f 20 74 68 65  ster P1 onto the
bfe0: 20 65 6e 64 20 6f 66 20 74 68 65 20 74 65 78 74   end of the text
bff0: 20 69 6e 0a 2a 2a 20 72 65 67 69 73 74 65 72 20   in.** register 
c000: 50 32 20 61 6e 64 20 73 74 6f 72 65 20 74 68 65  P2 and store the
c010: 20 72 65 73 75 6c 74 20 69 6e 20 72 65 67 69 73   result in regis
c020: 74 65 72 20 50 33 2e 0a 2a 2a 20 49 66 20 65 69  ter P3..** If ei
c030: 74 68 65 72 20 74 68 65 20 50 31 20 6f 72 20 50  ther the P1 or P
c040: 32 20 74 65 78 74 20 61 72 65 20 4e 55 4c 4c 20  2 text are NULL 
c050: 74 68 65 6e 20 73 74 6f 72 65 20 4e 55 4c 4c 20  then store NULL 
c060: 69 6e 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 20 20 50  in P3..**.**   P
c070: 33 20 3d 20 50 32 20 7c 7c 20 50 31 0a 2a 2a 0a  3 = P2 || P1.**.
c080: 2a 2a 20 49 74 20 69 73 20 69 6c 6c 65 67 61 6c  ** It is illegal
c090: 20 66 6f 72 20 50 31 20 61 6e 64 20 50 33 20 74   for P1 and P3 t
c0a0: 6f 20 62 65 20 74 68 65 20 73 61 6d 65 20 72 65  o be the same re
c0b0: 67 69 73 74 65 72 2e 20 53 6f 6d 65 74 69 6d 65  gister. Sometime
c0c0: 73 2c 0a 2a 2a 20 69 66 20 50 33 20 69 73 20 74  s,.** if P3 is t
c0d0: 68 65 20 73 61 6d 65 20 72 65 67 69 73 74 65 72  he same register
c0e0: 20 61 73 20 50 32 2c 20 74 68 65 20 69 6d 70 6c   as P2, the impl
c0f0: 65 6d 65 6e 74 61 74 69 6f 6e 20 69 73 20 61 62  ementation is ab
c100: 6c 65 0a 2a 2a 20 74 6f 20 61 76 6f 69 64 20 61  le.** to avoid a
c110: 20 6d 65 6d 63 70 79 28 29 2e 0a 2a 2f 0a 63 61   memcpy()..*/.ca
c120: 73 65 20 4f 50 5f 43 6f 6e 63 61 74 3a 20 7b 20  se OP_Concat: { 
c130: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d            /* sam
c140: 65 20 61 73 20 54 4b 5f 43 4f 4e 43 41 54 2c 20  e as TK_CONCAT, 
c150: 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a  in1, in2, out3 *
c160: 2f 0a 20 20 69 36 34 20 6e 42 79 74 65 3b 20 20  /.  i64 nByte;  
c170: 20 20 20 20 20 20 20 20 2f 2a 20 54 6f 74 61 6c          /* Total
c180: 20 73 69 7a 65 20 6f 66 20 74 68 65 20 6f 75 74   size of the out
c190: 70 75 74 20 73 74 72 69 6e 67 20 6f 72 20 62 6c  put string or bl
c1a0: 6f 62 20 2a 2f 0a 20 20 75 31 36 20 66 6c 61 67  ob */.  u16 flag
c1b0: 73 31 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 49  s1;         /* I
c1c0: 6e 69 74 69 61 6c 20 66 6c 61 67 73 20 66 6f 72  nitial flags for
c1d0: 20 50 31 20 2a 2f 0a 20 20 75 31 36 20 66 6c 61   P1 */.  u16 fla
c1e0: 67 73 32 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  gs2;         /* 
c1f0: 49 6e 69 74 69 61 6c 20 66 6c 61 67 73 20 66 6f  Initial flags fo
c200: 72 20 50 32 20 2a 2f 0a 0a 20 20 70 49 6e 31 20  r P2 */..  pIn1 
c210: 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  = &aMem[pOp->p1]
c220: 3b 0a 20 20 70 49 6e 32 20 3d 20 26 61 4d 65 6d  ;.  pIn2 = &aMem
c230: 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 70 4f 75  [pOp->p2];.  pOu
c240: 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  t = &aMem[pOp->p
c250: 33 5d 3b 0a 20 20 74 65 73 74 63 61 73 65 28 20  3];.  testcase( 
c260: 70 49 6e 31 3d 3d 70 49 6e 32 20 29 3b 0a 20 20  pIn1==pIn2 );.  
c270: 74 65 73 74 63 61 73 65 28 20 70 4f 75 74 3d 3d  testcase( pOut==
c280: 70 49 6e 32 20 29 3b 0a 20 20 61 73 73 65 72 74  pIn2 );.  assert
c290: 28 20 70 49 6e 31 21 3d 70 4f 75 74 20 29 3b 0a  ( pIn1!=pOut );.
c2a0: 20 20 66 6c 61 67 73 31 20 3d 20 70 49 6e 31 2d    flags1 = pIn1-
c2b0: 3e 66 6c 61 67 73 3b 0a 20 20 74 65 73 74 63 61  >flags;.  testca
c2c0: 73 65 28 20 66 6c 61 67 73 31 20 26 20 4d 45 4d  se( flags1 & MEM
c2d0: 5f 4e 75 6c 6c 20 29 3b 0a 20 20 74 65 73 74 63  _Null );.  testc
c2e0: 61 73 65 28 20 70 49 6e 32 2d 3e 66 6c 61 67 73  ase( pIn2->flags
c2f0: 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 3b 0a 20   & MEM_Null );. 
c300: 20 69 66 28 20 28 66 6c 61 67 73 31 20 7c 20 70   if( (flags1 | p
c310: 49 6e 32 2d 3e 66 6c 61 67 73 29 20 26 20 4d 45  In2->flags) & ME
c320: 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 73 71  M_Null ){.    sq
c330: 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e  lite3VdbeMemSetN
c340: 75 6c 6c 28 70 4f 75 74 29 3b 0a 20 20 20 20 62  ull(pOut);.    b
c350: 72 65 61 6b 3b 0a 20 20 7d 0a 20 20 69 66 28 20  reak;.  }.  if( 
c360: 28 66 6c 61 67 73 31 20 26 20 28 4d 45 4d 5f 53  (flags1 & (MEM_S
c370: 74 72 7c 4d 45 4d 5f 42 6c 6f 62 29 29 3d 3d 30  tr|MEM_Blob))==0
c380: 20 29 7b 0a 20 20 20 20 69 66 28 20 73 71 6c 69   ){.    if( sqli
c390: 74 65 33 56 64 62 65 4d 65 6d 53 74 72 69 6e 67  te3VdbeMemString
c3a0: 69 66 79 28 70 49 6e 31 2c 65 6e 63 6f 64 69 6e  ify(pIn1,encodin
c3b0: 67 2c 30 29 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d  g,0) ) goto no_m
c3c0: 65 6d 3b 0a 20 20 20 20 66 6c 61 67 73 31 20 3d  em;.    flags1 =
c3d0: 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 7e   pIn1->flags & ~
c3e0: 4d 45 4d 5f 53 74 72 3b 0a 20 20 7d 65 6c 73 65  MEM_Str;.  }else
c3f0: 20 69 66 28 20 28 66 6c 61 67 73 31 20 26 20 4d   if( (flags1 & M
c400: 45 4d 5f 5a 65 72 6f 29 21 3d 30 20 29 7b 0a 20  EM_Zero)!=0 ){. 
c410: 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 56 64     if( sqlite3Vd
c420: 62 65 4d 65 6d 45 78 70 61 6e 64 42 6c 6f 62 28  beMemExpandBlob(
c430: 70 49 6e 31 29 20 29 20 67 6f 74 6f 20 6e 6f 5f  pIn1) ) goto no_
c440: 6d 65 6d 3b 0a 20 20 20 20 66 6c 61 67 73 31 20  mem;.    flags1 
c450: 3d 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20  = pIn1->flags & 
c460: 7e 4d 45 4d 5f 53 74 72 3b 0a 20 20 7d 0a 20 20  ~MEM_Str;.  }.  
c470: 66 6c 61 67 73 32 20 3d 20 70 49 6e 32 2d 3e 66  flags2 = pIn2->f
c480: 6c 61 67 73 3b 0a 20 20 69 66 28 20 28 66 6c 61  lags;.  if( (fla
c490: 67 73 32 20 26 20 28 4d 45 4d 5f 53 74 72 7c 4d  gs2 & (MEM_Str|M
c4a0: 45 4d 5f 42 6c 6f 62 29 29 3d 3d 30 20 29 7b 0a  EM_Blob))==0 ){.
c4b0: 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 56      if( sqlite3V
c4c0: 64 62 65 4d 65 6d 53 74 72 69 6e 67 69 66 79 28  dbeMemStringify(
c4d0: 70 49 6e 32 2c 65 6e 63 6f 64 69 6e 67 2c 30 29  pIn2,encoding,0)
c4e0: 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a   ) goto no_mem;.
c4f0: 20 20 20 20 66 6c 61 67 73 32 20 3d 20 70 49 6e      flags2 = pIn
c500: 32 2d 3e 66 6c 61 67 73 20 26 20 7e 4d 45 4d 5f  2->flags & ~MEM_
c510: 53 74 72 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28  Str;.  }else if(
c520: 20 28 66 6c 61 67 73 32 20 26 20 4d 45 4d 5f 5a   (flags2 & MEM_Z
c530: 65 72 6f 29 21 3d 30 20 29 7b 0a 20 20 20 20 69  ero)!=0 ){.    i
c540: 66 28 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65  f( sqlite3VdbeMe
c550: 6d 45 78 70 61 6e 64 42 6c 6f 62 28 70 49 6e 32  mExpandBlob(pIn2
c560: 29 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b  ) ) goto no_mem;
c570: 0a 20 20 20 20 66 6c 61 67 73 32 20 3d 20 70 49  .    flags2 = pI
c580: 6e 32 2d 3e 66 6c 61 67 73 20 26 20 7e 4d 45 4d  n2->flags & ~MEM
c590: 5f 53 74 72 3b 0a 20 20 7d 0a 20 20 6e 42 79 74  _Str;.  }.  nByt
c5a0: 65 20 3d 20 70 49 6e 31 2d 3e 6e 20 2b 20 70 49  e = pIn1->n + pI
c5b0: 6e 32 2d 3e 6e 3b 0a 20 20 69 66 28 20 6e 42 79  n2->n;.  if( nBy
c5c0: 74 65 3e 64 62 2d 3e 61 4c 69 6d 69 74 5b 53 51  te>db->aLimit[SQ
c5d0: 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54  LITE_LIMIT_LENGT
c5e0: 48 5d 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 74  H] ){.    goto t
c5f0: 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a 20 20 69 66  oo_big;.  }.  if
c600: 28 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d  ( sqlite3VdbeMem
c610: 47 72 6f 77 28 70 4f 75 74 2c 20 28 69 6e 74 29  Grow(pOut, (int)
c620: 6e 42 79 74 65 2b 33 2c 20 70 4f 75 74 3d 3d 70  nByte+3, pOut==p
c630: 49 6e 32 29 20 29 7b 0a 20 20 20 20 67 6f 74 6f  In2) ){.    goto
c640: 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 20 20 4d   no_mem;.  }.  M
c650: 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70 4f  emSetTypeFlag(pO
c660: 75 74 2c 20 4d 45 4d 5f 53 74 72 29 3b 0a 20 20  ut, MEM_Str);.  
c670: 69 66 28 20 70 4f 75 74 21 3d 70 49 6e 32 20 29  if( pOut!=pIn2 )
c680: 7b 0a 20 20 20 20 6d 65 6d 63 70 79 28 70 4f 75  {.    memcpy(pOu
c690: 74 2d 3e 7a 2c 20 70 49 6e 32 2d 3e 7a 2c 20 70  t->z, pIn2->z, p
c6a0: 49 6e 32 2d 3e 6e 29 3b 0a 20 20 20 20 61 73 73  In2->n);.    ass
c6b0: 65 72 74 28 20 28 70 49 6e 32 2d 3e 66 6c 61 67  ert( (pIn2->flag
c6c0: 73 20 26 20 4d 45 4d 5f 44 79 6e 29 20 3d 3d 20  s & MEM_Dyn) == 
c6d0: 28 66 6c 61 67 73 32 20 26 20 4d 45 4d 5f 44 79  (flags2 & MEM_Dy
c6e0: 6e 29 20 29 3b 0a 20 20 20 20 70 49 6e 32 2d 3e  n) );.    pIn2->
c6f0: 66 6c 61 67 73 20 3d 20 66 6c 61 67 73 32 3b 0a  flags = flags2;.
c700: 20 20 7d 0a 20 20 6d 65 6d 63 70 79 28 26 70 4f    }.  memcpy(&pO
c710: 75 74 2d 3e 7a 5b 70 49 6e 32 2d 3e 6e 5d 2c 20  ut->z[pIn2->n], 
c720: 70 49 6e 31 2d 3e 7a 2c 20 70 49 6e 31 2d 3e 6e  pIn1->z, pIn1->n
c730: 29 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70 49  );.  assert( (pI
c740: 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  n1->flags & MEM_
c750: 44 79 6e 29 20 3d 3d 20 28 66 6c 61 67 73 31 20  Dyn) == (flags1 
c760: 26 20 4d 45 4d 5f 44 79 6e 29 20 29 3b 0a 20 20  & MEM_Dyn) );.  
c770: 70 49 6e 31 2d 3e 66 6c 61 67 73 20 3d 20 66 6c  pIn1->flags = fl
c780: 61 67 73 31 3b 0a 20 20 70 4f 75 74 2d 3e 7a 5b  ags1;.  pOut->z[
c790: 6e 42 79 74 65 5d 3d 30 3b 0a 20 20 70 4f 75 74  nByte]=0;.  pOut
c7a0: 2d 3e 7a 5b 6e 42 79 74 65 2b 31 5d 20 3d 20 30  ->z[nByte+1] = 0
c7b0: 3b 0a 20 20 70 4f 75 74 2d 3e 7a 5b 6e 42 79 74  ;.  pOut->z[nByt
c7c0: 65 2b 32 5d 20 3d 20 30 3b 0a 20 20 70 4f 75 74  e+2] = 0;.  pOut
c7d0: 2d 3e 66 6c 61 67 73 20 7c 3d 20 4d 45 4d 5f 54  ->flags |= MEM_T
c7e0: 65 72 6d 3b 0a 20 20 70 4f 75 74 2d 3e 6e 20 3d  erm;.  pOut->n =
c7f0: 20 28 69 6e 74 29 6e 42 79 74 65 3b 0a 20 20 70   (int)nByte;.  p
c800: 4f 75 74 2d 3e 65 6e 63 20 3d 20 65 6e 63 6f 64  Out->enc = encod
c810: 69 6e 67 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41  ing;.  UPDATE_MA
c820: 58 5f 42 4c 4f 42 53 49 5a 45 28 70 4f 75 74 29  X_BLOBSIZE(pOut)
c830: 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
c840: 20 4f 70 63 6f 64 65 3a 20 41 64 64 20 50 31 20   Opcode: Add P1 
c850: 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e  P2 P3 * *.** Syn
c860: 6f 70 73 69 73 3a 20 72 5b 50 33 5d 3d 72 5b 50  opsis: r[P3]=r[P
c870: 31 5d 2b 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20 41  1]+r[P2].**.** A
c880: 64 64 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20  dd the value in 
c890: 72 65 67 69 73 74 65 72 20 50 31 20 74 6f 20 74  register P1 to t
c8a0: 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69  he value in regi
c8b0: 73 74 65 72 20 50 32 0a 2a 2a 20 61 6e 64 20 73  ster P2.** and s
c8c0: 74 6f 72 65 20 74 68 65 20 72 65 73 75 6c 74 20  tore the result 
c8d0: 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a  in register P3..
c8e0: 2a 2a 20 49 66 20 65 69 74 68 65 72 20 69 6e 70  ** If either inp
c8f0: 75 74 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65 20  ut is NULL, the 
c900: 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a  result is NULL..
c910: 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4d 75  */./* Opcode: Mu
c920: 6c 74 69 70 6c 79 20 50 31 20 50 32 20 50 33 20  ltiply P1 P2 P3 
c930: 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  * *.** Synopsis:
c940: 20 72 5b 50 33 5d 3d 72 5b 50 31 5d 2a 72 5b 50   r[P3]=r[P1]*r[P
c950: 32 5d 0a 2a 2a 0a 2a 2a 0a 2a 2a 20 4d 75 6c 74  2].**.**.** Mult
c960: 69 70 6c 79 20 74 68 65 20 76 61 6c 75 65 20 69  iply the value i
c970: 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 62 79  n register P1 by
c980: 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65   the value in re
c990: 67 69 73 74 65 72 20 50 32 0a 2a 2a 20 61 6e 64  gister P2.** and
c9a0: 20 73 74 6f 72 65 20 74 68 65 20 72 65 73 75 6c   store the resul
c9b0: 74 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33  t in register P3
c9c0: 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20 69  ..** If either i
c9d0: 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2c 20 74 68  nput is NULL, th
c9e0: 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c  e result is NULL
c9f0: 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ..*/./* Opcode: 
ca00: 53 75 62 74 72 61 63 74 20 50 31 20 50 32 20 50  Subtract P1 P2 P
ca10: 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69  3 * *.** Synopsi
ca20: 73 3a 20 72 5b 50 33 5d 3d 72 5b 50 32 5d 2d 72  s: r[P3]=r[P2]-r
ca30: 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 53 75 62 74 72  [P1].**.** Subtr
ca40: 61 63 74 20 74 68 65 20 76 61 6c 75 65 20 69 6e  act the value in
ca50: 20 72 65 67 69 73 74 65 72 20 50 31 20 66 72 6f   register P1 fro
ca60: 6d 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72  m the value in r
ca70: 65 67 69 73 74 65 72 20 50 32 0a 2a 2a 20 61 6e  egister P2.** an
ca80: 64 20 73 74 6f 72 65 20 74 68 65 20 72 65 73 75  d store the resu
ca90: 6c 74 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  lt in register P
caa0: 33 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20  3..** If either 
cab0: 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2c 20 74  input is NULL, t
cac0: 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c  he result is NUL
cad0: 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a  L..*/./* Opcode:
cae0: 20 44 69 76 69 64 65 20 50 31 20 50 32 20 50 33   Divide P1 P2 P3
caf0: 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73   * *.** Synopsis
cb00: 3a 20 72 5b 50 33 5d 3d 72 5b 50 32 5d 2f 72 5b  : r[P3]=r[P2]/r[
cb10: 50 31 5d 0a 2a 2a 0a 2a 2a 20 44 69 76 69 64 65  P1].**.** Divide
cb20: 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65   the value in re
cb30: 67 69 73 74 65 72 20 50 31 20 62 79 20 74 68 65  gister P1 by the
cb40: 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
cb50: 65 72 20 50 32 0a 2a 2a 20 61 6e 64 20 73 74 6f  er P2.** and sto
cb60: 72 65 20 74 68 65 20 72 65 73 75 6c 74 20 69 6e  re the result in
cb70: 20 72 65 67 69 73 74 65 72 20 50 33 20 28 50 33   register P3 (P3
cb80: 3d 50 32 2f 50 31 29 2e 20 49 66 20 74 68 65 20  =P2/P1). If the 
cb90: 76 61 6c 75 65 20 69 6e 20 0a 2a 2a 20 72 65 67  value in .** reg
cba0: 69 73 74 65 72 20 50 31 20 69 73 20 7a 65 72 6f  ister P1 is zero
cbb0: 2c 20 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c  , then the resul
cbc0: 74 20 69 73 20 4e 55 4c 4c 2e 20 49 66 20 65 69  t is NULL. If ei
cbd0: 74 68 65 72 20 69 6e 70 75 74 20 69 73 20 0a 2a  ther input is .*
cbe0: 2a 20 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73 75  * NULL, the resu
cbf0: 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f  lt is NULL..*/./
cc00: 2a 20 4f 70 63 6f 64 65 3a 20 52 65 6d 61 69 6e  * Opcode: Remain
cc10: 64 65 72 20 50 31 20 50 32 20 50 33 20 2a 20 2a  der P1 P2 P3 * *
cc20: 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b  .** Synopsis: r[
cc30: 50 33 5d 3d 72 5b 50 32 5d 25 72 5b 50 31 5d 0a  P3]=r[P2]%r[P1].
cc40: 2a 2a 0a 2a 2a 20 43 6f 6d 70 75 74 65 20 74 68  **.** Compute th
cc50: 65 20 72 65 6d 61 69 6e 64 65 72 20 61 66 74 65  e remainder afte
cc60: 72 20 69 6e 74 65 67 65 72 20 72 65 67 69 73 74  r integer regist
cc70: 65 72 20 50 32 20 69 73 20 64 69 76 69 64 65 64  er P2 is divided
cc80: 20 62 79 20 0a 2a 2a 20 72 65 67 69 73 74 65 72   by .** register
cc90: 20 50 31 20 61 6e 64 20 73 74 6f 72 65 20 74 68   P1 and store th
cca0: 65 20 72 65 73 75 6c 74 20 69 6e 20 72 65 67 69  e result in regi
ccb0: 73 74 65 72 20 50 33 2e 20 0a 2a 2a 20 49 66 20  ster P3. .** If 
ccc0: 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67  the value in reg
ccd0: 69 73 74 65 72 20 50 31 20 69 73 20 7a 65 72 6f  ister P1 is zero
cce0: 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e   the result is N
ccf0: 55 4c 4c 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65  ULL..** If eithe
cd00: 72 20 6f 70 65 72 61 6e 64 20 69 73 20 4e 55 4c  r operand is NUL
cd10: 4c 2c 20 74 68 65 20 72 65 73 75 6c 74 20 69 73  L, the result is
cd20: 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20 4f   NULL..*/.case O
cd30: 50 5f 41 64 64 3a 20 20 20 20 20 20 20 20 20 20  P_Add:          
cd40: 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65           /* same
cd50: 20 61 73 20 54 4b 5f 50 4c 55 53 2c 20 69 6e 31   as TK_PLUS, in1
cd60: 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 63  , in2, out3 */.c
cd70: 61 73 65 20 4f 50 5f 53 75 62 74 72 61 63 74 3a  ase OP_Subtract:
cd80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
cd90: 20 73 61 6d 65 20 61 73 20 54 4b 5f 4d 49 4e 55   same as TK_MINU
cda0: 53 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74  S, in1, in2, out
cdb0: 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 4d 75 6c  3 */.case OP_Mul
cdc0: 74 69 70 6c 79 3a 20 20 20 20 20 20 20 20 20 20  tiply:          
cdd0: 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54      /* same as T
cde0: 4b 5f 53 54 41 52 2c 20 69 6e 31 2c 20 69 6e 32  K_STAR, in1, in2
cdf0: 2c 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20 4f  , out3 */.case O
ce00: 50 5f 44 69 76 69 64 65 3a 20 20 20 20 20 20 20  P_Divide:       
ce10: 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65           /* same
ce20: 20 61 73 20 54 4b 5f 53 4c 41 53 48 2c 20 69 6e   as TK_SLASH, in
ce30: 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a  1, in2, out3 */.
ce40: 63 61 73 65 20 4f 50 5f 52 65 6d 61 69 6e 64 65  case OP_Remainde
ce50: 72 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 2f  r: {           /
ce60: 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 52 45 4d  * same as TK_REM
ce70: 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33  , in1, in2, out3
ce80: 20 2a 2f 0a 20 20 75 31 36 20 66 6c 61 67 73 3b   */.  u16 flags;
ce90: 20 20 20 20 20 20 2f 2a 20 43 6f 6d 62 69 6e 65        /* Combine
cea0: 64 20 4d 45 4d 5f 2a 20 66 6c 61 67 73 20 66 72  d MEM_* flags fr
ceb0: 6f 6d 20 62 6f 74 68 20 69 6e 70 75 74 73 20 2a  om both inputs *
cec0: 2f 0a 20 20 75 31 36 20 74 79 70 65 31 3b 20 20  /.  u16 type1;  
ced0: 20 20 20 20 2f 2a 20 4e 75 6d 65 72 69 63 20 74      /* Numeric t
cee0: 79 70 65 20 6f 66 20 6c 65 66 74 20 6f 70 65 72  ype of left oper
cef0: 61 6e 64 20 2a 2f 0a 20 20 75 31 36 20 74 79 70  and */.  u16 typ
cf00: 65 32 3b 20 20 20 20 20 20 2f 2a 20 4e 75 6d 65  e2;      /* Nume
cf10: 72 69 63 20 74 79 70 65 20 6f 66 20 72 69 67 68  ric type of righ
cf20: 74 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20 69  t operand */.  i
cf30: 36 34 20 69 41 3b 20 20 20 20 20 20 20 20 20 2f  64 iA;         /
cf40: 2a 20 49 6e 74 65 67 65 72 20 76 61 6c 75 65 20  * Integer value 
cf50: 6f 66 20 6c 65 66 74 20 6f 70 65 72 61 6e 64 20  of left operand 
cf60: 2a 2f 0a 20 20 69 36 34 20 69 42 3b 20 20 20 20  */.  i64 iB;    
cf70: 20 20 20 20 20 2f 2a 20 49 6e 74 65 67 65 72 20       /* Integer 
cf80: 76 61 6c 75 65 20 6f 66 20 72 69 67 68 74 20 6f  value of right o
cf90: 70 65 72 61 6e 64 20 2a 2f 0a 20 20 64 6f 75 62  perand */.  doub
cfa0: 6c 65 20 72 41 3b 20 20 20 20 20 20 2f 2a 20 52  le rA;      /* R
cfb0: 65 61 6c 20 76 61 6c 75 65 20 6f 66 20 6c 65 66  eal value of lef
cfc0: 74 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20 64  t operand */.  d
cfd0: 6f 75 62 6c 65 20 72 42 3b 20 20 20 20 20 20 2f  ouble rB;      /
cfe0: 2a 20 52 65 61 6c 20 76 61 6c 75 65 20 6f 66 20  * Real value of 
cff0: 72 69 67 68 74 20 6f 70 65 72 61 6e 64 20 2a 2f  right operand */
d000: 0a 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d  ..  pIn1 = &aMem
d010: 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 74 79 70  [pOp->p1];.  typ
d020: 65 31 20 3d 20 6e 75 6d 65 72 69 63 54 79 70 65  e1 = numericType
d030: 28 70 49 6e 31 29 3b 0a 20 20 70 49 6e 32 20 3d  (pIn1);.  pIn2 =
d040: 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b   &aMem[pOp->p2];
d050: 0a 20 20 74 79 70 65 32 20 3d 20 6e 75 6d 65 72  .  type2 = numer
d060: 69 63 54 79 70 65 28 70 49 6e 32 29 3b 0a 20 20  icType(pIn2);.  
d070: 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pOut = &aMem[pOp
d080: 2d 3e 70 33 5d 3b 0a 20 20 66 6c 61 67 73 20 3d  ->p3];.  flags =
d090: 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 7c 20 70   pIn1->flags | p
d0a0: 49 6e 32 2d 3e 66 6c 61 67 73 3b 0a 20 20 69 66  In2->flags;.  if
d0b0: 28 20 28 74 79 70 65 31 20 26 20 74 79 70 65 32  ( (type1 & type2
d0c0: 20 26 20 4d 45 4d 5f 49 6e 74 29 21 3d 30 20 29   & MEM_Int)!=0 )
d0d0: 7b 0a 20 20 20 20 69 41 20 3d 20 70 49 6e 31 2d  {.    iA = pIn1-
d0e0: 3e 75 2e 69 3b 0a 20 20 20 20 69 42 20 3d 20 70  >u.i;.    iB = p
d0f0: 49 6e 32 2d 3e 75 2e 69 3b 0a 20 20 20 20 73 77  In2->u.i;.    sw
d100: 69 74 63 68 28 20 70 4f 70 2d 3e 6f 70 63 6f 64  itch( pOp->opcod
d110: 65 20 29 7b 0a 20 20 20 20 20 20 63 61 73 65 20  e ){.      case 
d120: 4f 50 5f 41 64 64 3a 20 20 20 20 20 20 20 69 66  OP_Add:       if
d130: 28 20 73 71 6c 69 74 65 33 41 64 64 49 6e 74 36  ( sqlite3AddInt6
d140: 34 28 26 69 42 2c 69 41 29 20 29 20 67 6f 74 6f  4(&iB,iA) ) goto
d150: 20 66 70 5f 6d 61 74 68 3b 20 20 62 72 65 61 6b   fp_math;  break
d160: 3b 0a 20 20 20 20 20 20 63 61 73 65 20 4f 50 5f  ;.      case OP_
d170: 53 75 62 74 72 61 63 74 3a 20 20 69 66 28 20 73  Subtract:  if( s
d180: 71 6c 69 74 65 33 53 75 62 49 6e 74 36 34 28 26  qlite3SubInt64(&
d190: 69 42 2c 69 41 29 20 29 20 67 6f 74 6f 20 66 70  iB,iA) ) goto fp
d1a0: 5f 6d 61 74 68 3b 20 20 62 72 65 61 6b 3b 0a 20  _math;  break;. 
d1b0: 20 20 20 20 20 63 61 73 65 20 4f 50 5f 4d 75 6c       case OP_Mul
d1c0: 74 69 70 6c 79 3a 20 20 69 66 28 20 73 71 6c 69  tiply:  if( sqli
d1d0: 74 65 33 4d 75 6c 49 6e 74 36 34 28 26 69 42 2c  te3MulInt64(&iB,
d1e0: 69 41 29 20 29 20 67 6f 74 6f 20 66 70 5f 6d 61  iA) ) goto fp_ma
d1f0: 74 68 3b 20 20 62 72 65 61 6b 3b 0a 20 20 20 20  th;  break;.    
d200: 20 20 63 61 73 65 20 4f 50 5f 44 69 76 69 64 65    case OP_Divide
d210: 3a 20 7b 0a 20 20 20 20 20 20 20 20 69 66 28 20  : {.        if( 
d220: 69 41 3d 3d 30 20 29 20 67 6f 74 6f 20 61 72 69  iA==0 ) goto ari
d230: 74 68 6d 65 74 69 63 5f 72 65 73 75 6c 74 5f 69  thmetic_result_i
d240: 73 5f 6e 75 6c 6c 3b 0a 20 20 20 20 20 20 20 20  s_null;.        
d250: 69 66 28 20 69 41 3d 3d 2d 31 20 26 26 20 69 42  if( iA==-1 && iB
d260: 3d 3d 53 4d 41 4c 4c 45 53 54 5f 49 4e 54 36 34  ==SMALLEST_INT64
d270: 20 29 20 67 6f 74 6f 20 66 70 5f 6d 61 74 68 3b   ) goto fp_math;
d280: 0a 20 20 20 20 20 20 20 20 69 42 20 2f 3d 20 69  .        iB /= i
d290: 41 3b 0a 20 20 20 20 20 20 20 20 62 72 65 61 6b  A;.        break
d2a0: 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  ;.      }.      
d2b0: 64 65 66 61 75 6c 74 3a 20 7b 0a 20 20 20 20 20  default: {.     
d2c0: 20 20 20 69 66 28 20 69 41 3d 3d 30 20 29 20 67     if( iA==0 ) g
d2d0: 6f 74 6f 20 61 72 69 74 68 6d 65 74 69 63 5f 72  oto arithmetic_r
d2e0: 65 73 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3b 0a 20  esult_is_null;. 
d2f0: 20 20 20 20 20 20 20 69 66 28 20 69 41 3d 3d 2d         if( iA==-
d300: 31 20 29 20 69 41 20 3d 20 31 3b 0a 20 20 20 20  1 ) iA = 1;.    
d310: 20 20 20 20 69 42 20 25 3d 20 69 41 3b 0a 20 20      iB %= iA;.  
d320: 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
d330: 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 70     }.    }.    p
d340: 4f 75 74 2d 3e 75 2e 69 20 3d 20 69 42 3b 0a 20  Out->u.i = iB;. 
d350: 20 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61     MemSetTypeFla
d360: 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 49 6e 74 29  g(pOut, MEM_Int)
d370: 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 28 66  ;.  }else if( (f
d380: 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29  lags & MEM_Null)
d390: 21 3d 30 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20  !=0 ){.    goto 
d3a0: 61 72 69 74 68 6d 65 74 69 63 5f 72 65 73 75 6c  arithmetic_resul
d3b0: 74 5f 69 73 5f 6e 75 6c 6c 3b 0a 20 20 7d 65 6c  t_is_null;.  }el
d3c0: 73 65 7b 0a 66 70 5f 6d 61 74 68 3a 0a 20 20 20  se{.fp_math:.   
d3d0: 20 72 41 20 3d 20 73 71 6c 69 74 65 33 56 64 62   rA = sqlite3Vdb
d3e0: 65 52 65 61 6c 56 61 6c 75 65 28 70 49 6e 31 29  eRealValue(pIn1)
d3f0: 3b 0a 20 20 20 20 72 42 20 3d 20 73 71 6c 69 74  ;.    rB = sqlit
d400: 65 33 56 64 62 65 52 65 61 6c 56 61 6c 75 65 28  e3VdbeRealValue(
d410: 70 49 6e 32 29 3b 0a 20 20 20 20 73 77 69 74 63  pIn2);.    switc
d420: 68 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 20 29  h( pOp->opcode )
d430: 7b 0a 20 20 20 20 20 20 63 61 73 65 20 4f 50 5f  {.      case OP_
d440: 41 64 64 3a 20 20 20 20 20 20 20 20 20 72 42 20  Add:         rB 
d450: 2b 3d 20 72 41 3b 20 20 20 20 20 20 20 62 72 65  += rA;       bre
d460: 61 6b 3b 0a 20 20 20 20 20 20 63 61 73 65 20 4f  ak;.      case O
d470: 50 5f 53 75 62 74 72 61 63 74 3a 20 20 20 20 72  P_Subtract:    r
d480: 42 20 2d 3d 20 72 41 3b 20 20 20 20 20 20 20 62  B -= rA;       b
d490: 72 65 61 6b 3b 0a 20 20 20 20 20 20 63 61 73 65  reak;.      case
d4a0: 20 4f 50 5f 4d 75 6c 74 69 70 6c 79 3a 20 20 20   OP_Multiply:   
d4b0: 20 72 42 20 2a 3d 20 72 41 3b 20 20 20 20 20 20   rB *= rA;      
d4c0: 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 63 61   break;.      ca
d4d0: 73 65 20 4f 50 5f 44 69 76 69 64 65 3a 20 7b 0a  se OP_Divide: {.
d4e0: 20 20 20 20 20 20 20 20 2f 2a 20 28 64 6f 75 62          /* (doub
d4f0: 6c 65 29 30 20 49 6e 20 63 61 73 65 20 6f 66 20  le)0 In case of 
d500: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41  SQLITE_OMIT_FLOA
d510: 54 49 4e 47 5f 50 4f 49 4e 54 2e 2e 2e 20 2a 2f  TING_POINT... */
d520: 0a 20 20 20 20 20 20 20 20 69 66 28 20 72 41 3d  .        if( rA=
d530: 3d 28 64 6f 75 62 6c 65 29 30 20 29 20 67 6f 74  =(double)0 ) got
d540: 6f 20 61 72 69 74 68 6d 65 74 69 63 5f 72 65 73  o arithmetic_res
d550: 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3b 0a 20 20 20  ult_is_null;.   
d560: 20 20 20 20 20 72 42 20 2f 3d 20 72 41 3b 0a 20       rB /= rA;. 
d570: 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20         break;.  
d580: 20 20 20 20 7d 0a 20 20 20 20 20 20 64 65 66 61      }.      defa
d590: 75 6c 74 3a 20 7b 0a 20 20 20 20 20 20 20 20 69  ult: {.        i
d5a0: 41 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 49  A = sqlite3VdbeI
d5b0: 6e 74 56 61 6c 75 65 28 70 49 6e 31 29 3b 0a 20  ntValue(pIn1);. 
d5c0: 20 20 20 20 20 20 20 69 42 20 3d 20 73 71 6c 69         iB = sqli
d5d0: 74 65 33 56 64 62 65 49 6e 74 56 61 6c 75 65 28  te3VdbeIntValue(
d5e0: 70 49 6e 32 29 3b 0a 20 20 20 20 20 20 20 20 69  pIn2);.        i
d5f0: 66 28 20 69 41 3d 3d 30 20 29 20 67 6f 74 6f 20  f( iA==0 ) goto 
d600: 61 72 69 74 68 6d 65 74 69 63 5f 72 65 73 75 6c  arithmetic_resul
d610: 74 5f 69 73 5f 6e 75 6c 6c 3b 0a 20 20 20 20 20  t_is_null;.     
d620: 20 20 20 69 66 28 20 69 41 3d 3d 2d 31 20 29 20     if( iA==-1 ) 
d630: 69 41 20 3d 20 31 3b 0a 20 20 20 20 20 20 20 20  iA = 1;.        
d640: 72 42 20 3d 20 28 64 6f 75 62 6c 65 29 28 69 42  rB = (double)(iB
d650: 20 25 20 69 41 29 3b 0a 20 20 20 20 20 20 20 20   % iA);.        
d660: 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 20  break;.      }. 
d670: 20 20 20 7d 0a 23 69 66 64 65 66 20 53 51 4c 49     }.#ifdef SQLI
d680: 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47  TE_OMIT_FLOATING
d690: 5f 50 4f 49 4e 54 0a 20 20 20 20 70 4f 75 74 2d  _POINT.    pOut-
d6a0: 3e 75 2e 69 20 3d 20 72 42 3b 0a 20 20 20 20 4d  >u.i = rB;.    M
d6b0: 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70 4f  emSetTypeFlag(pO
d6c0: 75 74 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a 23 65  ut, MEM_Int);.#e
d6d0: 6c 73 65 0a 20 20 20 20 69 66 28 20 73 71 6c 69  lse.    if( sqli
d6e0: 74 65 33 49 73 4e 61 4e 28 72 42 29 20 29 7b 0a  te3IsNaN(rB) ){.
d6f0: 20 20 20 20 20 20 67 6f 74 6f 20 61 72 69 74 68        goto arith
d700: 6d 65 74 69 63 5f 72 65 73 75 6c 74 5f 69 73 5f  metic_result_is_
d710: 6e 75 6c 6c 3b 0a 20 20 20 20 7d 0a 20 20 20 20  null;.    }.    
d720: 70 4f 75 74 2d 3e 75 2e 72 20 3d 20 72 42 3b 0a  pOut->u.r = rB;.
d730: 20 20 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c      MemSetTypeFl
d740: 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 52 65 61  ag(pOut, MEM_Rea
d750: 6c 29 3b 0a 23 65 6e 64 69 66 0a 20 20 7d 0a 20  l);.#endif.  }. 
d760: 20 62 72 65 61 6b 3b 0a 0a 61 72 69 74 68 6d 65   break;..arithme
d770: 74 69 63 5f 72 65 73 75 6c 74 5f 69 73 5f 6e 75  tic_result_is_nu
d780: 6c 6c 3a 0a 20 20 73 71 6c 69 74 65 33 56 64 62  ll:.  sqlite3Vdb
d790: 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 4f 75 74  eMemSetNull(pOut
d7a0: 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  );.  break;.}../
d7b0: 2a 20 4f 70 63 6f 64 65 3a 20 43 6f 6c 6c 53 65  * Opcode: CollSe
d7c0: 71 20 50 31 20 2a 20 2a 20 50 34 0a 2a 2a 0a 2a  q P1 * * P4.**.*
d7d0: 2a 20 50 34 20 69 73 20 61 20 70 6f 69 6e 74 65  * P4 is a pointe
d7e0: 72 20 74 6f 20 61 20 43 6f 6c 6c 53 65 71 20 6f  r to a CollSeq o
d7f0: 62 6a 65 63 74 2e 20 49 66 20 74 68 65 20 6e 65  bject. If the ne
d800: 78 74 20 63 61 6c 6c 20 74 6f 20 61 20 75 73 65  xt call to a use
d810: 72 20 66 75 6e 63 74 69 6f 6e 0a 2a 2a 20 6f 72  r function.** or
d820: 20 61 67 67 72 65 67 61 74 65 20 63 61 6c 6c 73   aggregate calls
d830: 20 73 71 6c 69 74 65 33 47 65 74 46 75 6e 63 43   sqlite3GetFuncC
d840: 6f 6c 6c 53 65 71 28 29 2c 20 74 68 69 73 20 63  ollSeq(), this c
d850: 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e 63  ollation sequenc
d860: 65 20 77 69 6c 6c 0a 2a 2a 20 62 65 20 72 65 74  e will.** be ret
d870: 75 72 6e 65 64 2e 20 54 68 69 73 20 69 73 20 75  urned. This is u
d880: 73 65 64 20 62 79 20 74 68 65 20 62 75 69 6c 74  sed by the built
d890: 2d 69 6e 20 6d 69 6e 28 29 2c 20 6d 61 78 28 29  -in min(), max()
d8a0: 20 61 6e 64 20 6e 75 6c 6c 69 66 28 29 0a 2a 2a   and nullif().**
d8b0: 20 66 75 6e 63 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a   functions..**.*
d8c0: 2a 20 49 66 20 50 31 20 69 73 20 6e 6f 74 20 7a  * If P1 is not z
d8d0: 65 72 6f 2c 20 74 68 65 6e 20 69 74 20 69 73 20  ero, then it is 
d8e0: 61 20 72 65 67 69 73 74 65 72 20 74 68 61 74 20  a register that 
d8f0: 61 20 73 75 62 73 65 71 75 65 6e 74 20 6d 69 6e  a subsequent min
d900: 28 29 20 6f 72 0a 2a 2a 20 6d 61 78 28 29 20 61  () or.** max() a
d910: 67 67 72 65 67 61 74 65 20 77 69 6c 6c 20 73 65  ggregate will se
d920: 74 20 74 6f 20 31 20 69 66 20 74 68 65 20 63 75  t to 1 if the cu
d930: 72 72 65 6e 74 20 72 6f 77 20 69 73 20 6e 6f 74  rrent row is not
d940: 20 74 68 65 20 6d 69 6e 69 6d 75 6d 20 6f 72 0a   the minimum or.
d950: 2a 2a 20 6d 61 78 69 6d 75 6d 2e 20 20 54 68 65  ** maximum.  The
d960: 20 50 31 20 72 65 67 69 73 74 65 72 20 69 73 20   P1 register is 
d970: 69 6e 69 74 69 61 6c 69 7a 65 64 20 74 6f 20 30  initialized to 0
d980: 20 62 79 20 74 68 69 73 20 69 6e 73 74 72 75 63   by this instruc
d990: 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  tion..**.** The 
d9a0: 69 6e 74 65 72 66 61 63 65 20 75 73 65 64 20 62  interface used b
d9b0: 79 20 74 68 65 20 69 6d 70 6c 65 6d 65 6e 74 61  y the implementa
d9c0: 74 69 6f 6e 20 6f 66 20 74 68 65 20 61 66 6f 72  tion of the afor
d9d0: 65 6d 65 6e 74 69 6f 6e 65 64 20 66 75 6e 63 74  ementioned funct
d9e0: 69 6f 6e 73 0a 2a 2a 20 74 6f 20 72 65 74 72 69  ions.** to retri
d9f0: 65 76 65 20 74 68 65 20 63 6f 6c 6c 61 74 69 6f  eve the collatio
da00: 6e 20 73 65 71 75 65 6e 63 65 20 73 65 74 20 62  n sequence set b
da10: 79 20 74 68 69 73 20 6f 70 63 6f 64 65 20 69 73  y this opcode is
da20: 20 6e 6f 74 20 61 76 61 69 6c 61 62 6c 65 0a 2a   not available.*
da30: 2a 20 70 75 62 6c 69 63 6c 79 2e 20 20 4f 6e 6c  * publicly.  Onl
da40: 79 20 62 75 69 6c 74 2d 69 6e 20 66 75 6e 63 74  y built-in funct
da50: 69 6f 6e 73 20 68 61 76 65 20 61 63 63 65 73 73  ions have access
da60: 20 74 6f 20 74 68 69 73 20 66 65 61 74 75 72 65   to this feature
da70: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 6f 6c  ..*/.case OP_Col
da80: 6c 53 65 71 3a 20 7b 0a 20 20 61 73 73 65 72 74  lSeq: {.  assert
da90: 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50  ( pOp->p4type==P
daa0: 34 5f 43 4f 4c 4c 53 45 51 20 29 3b 0a 20 20 69  4_COLLSEQ );.  i
dab0: 66 28 20 70 4f 70 2d 3e 70 31 20 29 7b 0a 20 20  f( pOp->p1 ){.  
dac0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
dad0: 53 65 74 49 6e 74 36 34 28 26 61 4d 65 6d 5b 70  SetInt64(&aMem[p
dae0: 4f 70 2d 3e 70 31 5d 2c 20 30 29 3b 0a 20 20 7d  Op->p1], 0);.  }
daf0: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
db00: 4f 70 63 6f 64 65 3a 20 42 69 74 41 6e 64 20 50  Opcode: BitAnd P
db10: 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53  1 P2 P3 * *.** S
db20: 79 6e 6f 70 73 69 73 3a 20 72 5b 50 33 5d 3d 72  ynopsis: r[P3]=r
db30: 5b 50 31 5d 26 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a  [P1]&r[P2].**.**
db40: 20 54 61 6b 65 20 74 68 65 20 62 69 74 2d 77 69   Take the bit-wi
db50: 73 65 20 41 4e 44 20 6f 66 20 74 68 65 20 76 61  se AND of the va
db60: 6c 75 65 73 20 69 6e 20 72 65 67 69 73 74 65 72  lues in register
db70: 20 50 31 20 61 6e 64 20 50 32 20 61 6e 64 0a 2a   P1 and P2 and.*
db80: 2a 20 73 74 6f 72 65 20 74 68 65 20 72 65 73 75  * store the resu
db90: 6c 74 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  lt in register P
dba0: 33 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20  3..** If either 
dbb0: 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2c 20 74  input is NULL, t
dbc0: 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c  he result is NUL
dbd0: 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a  L..*/./* Opcode:
dbe0: 20 42 69 74 4f 72 20 50 31 20 50 32 20 50 33 20   BitOr P1 P2 P3 
dbf0: 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  * *.** Synopsis:
dc00: 20 72 5b 50 33 5d 3d 72 5b 50 31 5d 7c 72 5b 50   r[P3]=r[P1]|r[P
dc10: 32 5d 0a 2a 2a 0a 2a 2a 20 54 61 6b 65 20 74 68  2].**.** Take th
dc20: 65 20 62 69 74 2d 77 69 73 65 20 4f 52 20 6f 66  e bit-wise OR of
dc30: 20 74 68 65 20 76 61 6c 75 65 73 20 69 6e 20 72   the values in r
dc40: 65 67 69 73 74 65 72 20 50 31 20 61 6e 64 20 50  egister P1 and P
dc50: 32 20 61 6e 64 0a 2a 2a 20 73 74 6f 72 65 20 74  2 and.** store t
dc60: 68 65 20 72 65 73 75 6c 74 20 69 6e 20 72 65 67  he result in reg
dc70: 69 73 74 65 72 20 50 33 2e 0a 2a 2a 20 49 66 20  ister P3..** If 
dc80: 65 69 74 68 65 72 20 69 6e 70 75 74 20 69 73 20  either input is 
dc90: 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c 74  NULL, the result
dca0: 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20   is NULL..*/./* 
dcb0: 4f 70 63 6f 64 65 3a 20 53 68 69 66 74 4c 65 66  Opcode: ShiftLef
dcc0: 74 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a  t P1 P2 P3 * *.*
dcd0: 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 33  * Synopsis: r[P3
dce0: 5d 3d 72 5b 50 32 5d 3c 3c 72 5b 50 31 5d 0a 2a  ]=r[P2]<<r[P1].*
dcf0: 2a 0a 2a 2a 20 53 68 69 66 74 20 74 68 65 20 69  *.** Shift the i
dd00: 6e 74 65 67 65 72 20 76 61 6c 75 65 20 69 6e 20  nteger value in 
dd10: 72 65 67 69 73 74 65 72 20 50 32 20 74 6f 20 74  register P2 to t
dd20: 68 65 20 6c 65 66 74 20 62 79 20 74 68 65 0a 2a  he left by the.*
dd30: 2a 20 6e 75 6d 62 65 72 20 6f 66 20 62 69 74 73  * number of bits
dd40: 20 73 70 65 63 69 66 69 65 64 20 62 79 20 74 68   specified by th
dd50: 65 20 69 6e 74 65 67 65 72 20 69 6e 20 72 65 67  e integer in reg
dd60: 69 73 74 65 72 20 50 31 2e 0a 2a 2a 20 53 74 6f  ister P1..** Sto
dd70: 72 65 20 74 68 65 20 72 65 73 75 6c 74 20 69 6e  re the result in
dd80: 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a   register P3..**
dd90: 20 49 66 20 65 69 74 68 65 72 20 69 6e 70 75 74   If either input
dda0: 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65 20 72 65   is NULL, the re
ddb0: 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f  sult is NULL..*/
ddc0: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 68 69 66  ./* Opcode: Shif
ddd0: 74 52 69 67 68 74 20 50 31 20 50 32 20 50 33 20  tRight P1 P2 P3 
dde0: 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  * *.** Synopsis:
ddf0: 20 72 5b 50 33 5d 3d 72 5b 50 32 5d 3e 3e 72 5b   r[P3]=r[P2]>>r[
de00: 50 31 5d 0a 2a 2a 0a 2a 2a 20 53 68 69 66 74 20  P1].**.** Shift 
de10: 74 68 65 20 69 6e 74 65 67 65 72 20 76 61 6c 75  the integer valu
de20: 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32  e in register P2
de30: 20 74 6f 20 74 68 65 20 72 69 67 68 74 20 62 79   to the right by
de40: 20 74 68 65 0a 2a 2a 20 6e 75 6d 62 65 72 20 6f   the.** number o
de50: 66 20 62 69 74 73 20 73 70 65 63 69 66 69 65 64  f bits specified
de60: 20 62 79 20 74 68 65 20 69 6e 74 65 67 65 72 20   by the integer 
de70: 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 2e 0a  in register P1..
de80: 2a 2a 20 53 74 6f 72 65 20 74 68 65 20 72 65 73  ** Store the res
de90: 75 6c 74 20 69 6e 20 72 65 67 69 73 74 65 72 20  ult in register 
dea0: 50 33 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65 72  P3..** If either
deb0: 20 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2c 20   input is NULL, 
dec0: 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55  the result is NU
ded0: 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 42  LL..*/.case OP_B
dee0: 69 74 41 6e 64 3a 20 20 20 20 20 20 20 20 20 20  itAnd:          
def0: 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61         /* same a
df00: 73 20 54 4b 5f 42 49 54 41 4e 44 2c 20 69 6e 31  s TK_BITAND, in1
df10: 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 63  , in2, out3 */.c
df20: 61 73 65 20 4f 50 5f 42 69 74 4f 72 3a 20 20 20  ase OP_BitOr:   
df30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
df40: 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 42 49 54  * same as TK_BIT
df50: 4f 52 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75  OR, in1, in2, ou
df60: 74 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 68  t3 */.case OP_Sh
df70: 69 66 74 4c 65 66 74 3a 20 20 20 20 20 20 20 20  iftLeft:        
df80: 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73        /* same as
df90: 20 54 4b 5f 4c 53 48 49 46 54 2c 20 69 6e 31 2c   TK_LSHIFT, in1,
dfa0: 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 63 61   in2, out3 */.ca
dfb0: 73 65 20 4f 50 5f 53 68 69 66 74 52 69 67 68 74  se OP_ShiftRight
dfc0: 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  : {           /*
dfd0: 20 73 61 6d 65 20 61 73 20 54 4b 5f 52 53 48 49   same as TK_RSHI
dfe0: 46 54 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75  FT, in1, in2, ou
dff0: 74 33 20 2a 2f 0a 20 20 69 36 34 20 69 41 3b 0a  t3 */.  i64 iA;.
e000: 20 20 75 36 34 20 75 41 3b 0a 20 20 69 36 34 20    u64 uA;.  i64 
e010: 69 42 3b 0a 20 20 75 38 20 6f 70 3b 0a 0a 20 20  iB;.  u8 op;..  
e020: 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn1 = &aMem[pOp
e030: 2d 3e 70 31 5d 3b 0a 20 20 70 49 6e 32 20 3d 20  ->p1];.  pIn2 = 
e040: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a  &aMem[pOp->p2];.
e050: 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70    pOut = &aMem[p
e060: 4f 70 2d 3e 70 33 5d 3b 0a 20 20 69 66 28 20 28  Op->p3];.  if( (
e070: 70 49 6e 31 2d 3e 66 6c 61 67 73 20 7c 20 70 49  pIn1->flags | pI
e080: 6e 32 2d 3e 66 6c 61 67 73 29 20 26 20 4d 45 4d  n2->flags) & MEM
e090: 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 73 71 6c  _Null ){.    sql
e0a0: 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75  ite3VdbeMemSetNu
e0b0: 6c 6c 28 70 4f 75 74 29 3b 0a 20 20 20 20 62 72  ll(pOut);.    br
e0c0: 65 61 6b 3b 0a 20 20 7d 0a 20 20 69 41 20 3d 20  eak;.  }.  iA = 
e0d0: 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74 56 61  sqlite3VdbeIntVa
e0e0: 6c 75 65 28 70 49 6e 32 29 3b 0a 20 20 69 42 20  lue(pIn2);.  iB 
e0f0: 3d 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74  = sqlite3VdbeInt
e100: 56 61 6c 75 65 28 70 49 6e 31 29 3b 0a 20 20 6f  Value(pIn1);.  o
e110: 70 20 3d 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3b  p = pOp->opcode;
e120: 0a 20 20 69 66 28 20 6f 70 3d 3d 4f 50 5f 42 69  .  if( op==OP_Bi
e130: 74 41 6e 64 20 29 7b 0a 20 20 20 20 69 41 20 26  tAnd ){.    iA &
e140: 3d 20 69 42 3b 0a 20 20 7d 65 6c 73 65 20 69 66  = iB;.  }else if
e150: 28 20 6f 70 3d 3d 4f 50 5f 42 69 74 4f 72 20 29  ( op==OP_BitOr )
e160: 7b 0a 20 20 20 20 69 41 20 7c 3d 20 69 42 3b 0a  {.    iA |= iB;.
e170: 20 20 7d 65 6c 73 65 20 69 66 28 20 69 42 21 3d    }else if( iB!=
e180: 30 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28  0 ){.    assert(
e190: 20 6f 70 3d 3d 4f 50 5f 53 68 69 66 74 52 69 67   op==OP_ShiftRig
e1a0: 68 74 20 7c 7c 20 6f 70 3d 3d 4f 50 5f 53 68 69  ht || op==OP_Shi
e1b0: 66 74 4c 65 66 74 20 29 3b 0a 0a 20 20 20 20 2f  ftLeft );..    /
e1c0: 2a 20 49 66 20 73 68 69 66 74 69 6e 67 20 62 79  * If shifting by
e1d0: 20 61 20 6e 65 67 61 74 69 76 65 20 61 6d 6f 75   a negative amou
e1e0: 6e 74 2c 20 73 68 69 66 74 20 69 6e 20 74 68 65  nt, shift in the
e1f0: 20 6f 74 68 65 72 20 64 69 72 65 63 74 69 6f 6e   other direction
e200: 20 2a 2f 0a 20 20 20 20 69 66 28 20 69 42 3c 30   */.    if( iB<0
e210: 20 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74   ){.      assert
e220: 28 20 4f 50 5f 53 68 69 66 74 52 69 67 68 74 3d  ( OP_ShiftRight=
e230: 3d 4f 50 5f 53 68 69 66 74 4c 65 66 74 2b 31 20  =OP_ShiftLeft+1 
e240: 29 3b 0a 20 20 20 20 20 20 6f 70 20 3d 20 32 2a  );.      op = 2*
e250: 4f 50 5f 53 68 69 66 74 4c 65 66 74 20 2b 20 31  OP_ShiftLeft + 1
e260: 20 2d 20 6f 70 3b 0a 20 20 20 20 20 20 69 42 20   - op;.      iB 
e270: 3d 20 69 42 3e 28 2d 36 34 29 20 3f 20 2d 69 42  = iB>(-64) ? -iB
e280: 20 3a 20 36 34 3b 0a 20 20 20 20 7d 0a 0a 20 20   : 64;.    }..  
e290: 20 20 69 66 28 20 69 42 3e 3d 36 34 20 29 7b 0a    if( iB>=64 ){.
e2a0: 20 20 20 20 20 20 69 41 20 3d 20 28 69 41 3e 3d        iA = (iA>=
e2b0: 30 20 7c 7c 20 6f 70 3d 3d 4f 50 5f 53 68 69 66  0 || op==OP_Shif
e2c0: 74 4c 65 66 74 29 20 3f 20 30 20 3a 20 2d 31 3b  tLeft) ? 0 : -1;
e2d0: 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  .    }else{.    
e2e0: 20 20 6d 65 6d 63 70 79 28 26 75 41 2c 20 26 69    memcpy(&uA, &i
e2f0: 41 2c 20 73 69 7a 65 6f 66 28 75 41 29 29 3b 0a  A, sizeof(uA));.
e300: 20 20 20 20 20 20 69 66 28 20 6f 70 3d 3d 4f 50        if( op==OP
e310: 5f 53 68 69 66 74 4c 65 66 74 20 29 7b 0a 20 20  _ShiftLeft ){.  
e320: 20 20 20 20 20 20 75 41 20 3c 3c 3d 20 69 42 3b        uA <<= iB;
e330: 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  .      }else{.  
e340: 20 20 20 20 20 20 75 41 20 3e 3e 3d 20 69 42 3b        uA >>= iB;
e350: 0a 20 20 20 20 20 20 20 20 2f 2a 20 53 69 67 6e  .        /* Sign
e360: 2d 65 78 74 65 6e 64 20 6f 6e 20 61 20 72 69 67  -extend on a rig
e370: 68 74 20 73 68 69 66 74 20 6f 66 20 61 20 6e 65  ht shift of a ne
e380: 67 61 74 69 76 65 20 6e 75 6d 62 65 72 20 2a 2f  gative number */
e390: 0a 20 20 20 20 20 20 20 20 69 66 28 20 69 41 3c  .        if( iA<
e3a0: 30 20 29 20 75 41 20 7c 3d 20 28 28 28 28 75 36  0 ) uA |= ((((u6
e3b0: 34 29 30 78 66 66 66 66 66 66 66 66 29 3c 3c 33  4)0xffffffff)<<3
e3c0: 32 29 7c 30 78 66 66 66 66 66 66 66 66 29 20 3c  2)|0xffffffff) <
e3d0: 3c 20 28 36 34 2d 69 42 29 3b 0a 20 20 20 20 20  < (64-iB);.     
e3e0: 20 7d 0a 20 20 20 20 20 20 6d 65 6d 63 70 79 28   }.      memcpy(
e3f0: 26 69 41 2c 20 26 75 41 2c 20 73 69 7a 65 6f 66  &iA, &uA, sizeof
e400: 28 69 41 29 29 3b 0a 20 20 20 20 7d 0a 20 20 7d  (iA));.    }.  }
e410: 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 69  .  pOut->u.i = i
e420: 41 3b 0a 20 20 4d 65 6d 53 65 74 54 79 70 65 46  A;.  MemSetTypeF
e430: 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 49 6e  lag(pOut, MEM_In
e440: 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  t);.  break;.}..
e450: 2f 2a 20 4f 70 63 6f 64 65 3a 20 41 64 64 49 6d  /* Opcode: AddIm
e460: 6d 20 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  m  P1 P2 * * *.*
e470: 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 31  * Synopsis: r[P1
e480: 5d 3d 72 5b 50 31 5d 2b 50 32 0a 2a 2a 20 0a 2a  ]=r[P1]+P2.** .*
e490: 2a 20 41 64 64 20 74 68 65 20 63 6f 6e 73 74 61  * Add the consta
e4a0: 6e 74 20 50 32 20 74 6f 20 74 68 65 20 76 61 6c  nt P2 to the val
e4b0: 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
e4c0: 31 2e 0a 2a 2a 20 54 68 65 20 72 65 73 75 6c 74  1..** The result
e4d0: 20 69 73 20 61 6c 77 61 79 73 20 61 6e 20 69 6e   is always an in
e4e0: 74 65 67 65 72 2e 0a 2a 2a 0a 2a 2a 20 54 6f 20  teger..**.** To 
e4f0: 66 6f 72 63 65 20 61 6e 79 20 72 65 67 69 73 74  force any regist
e500: 65 72 20 74 6f 20 62 65 20 61 6e 20 69 6e 74 65  er to be an inte
e510: 67 65 72 2c 20 6a 75 73 74 20 61 64 64 20 30 2e  ger, just add 0.
e520: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 41 64 64 49  .*/.case OP_AddI
e530: 6d 6d 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  mm: {           
e540: 20 2f 2a 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e   /* in1 */.  pIn
e550: 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  1 = &aMem[pOp->p
e560: 31 5d 3b 0a 20 20 6d 65 6d 41 62 6f 75 74 54 6f  1];.  memAboutTo
e570: 43 68 61 6e 67 65 28 70 2c 20 70 49 6e 31 29 3b  Change(p, pIn1);
e580: 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65  .  sqlite3VdbeMe
e590: 6d 49 6e 74 65 67 65 72 69 66 79 28 70 49 6e 31  mIntegerify(pIn1
e5a0: 29 3b 0a 20 20 70 49 6e 31 2d 3e 75 2e 69 20 2b  );.  pIn1->u.i +
e5b0: 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 62 72 65  = pOp->p2;.  bre
e5c0: 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
e5d0: 3a 20 4d 75 73 74 42 65 49 6e 74 20 50 31 20 50  : MustBeInt P1 P
e5e0: 32 20 2a 20 2a 20 2a 0a 2a 2a 20 0a 2a 2a 20 46  2 * * *.** .** F
e5f0: 6f 72 63 65 20 74 68 65 20 76 61 6c 75 65 20 69  orce the value i
e600: 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 74 6f  n register P1 to
e610: 20 62 65 20 61 6e 20 69 6e 74 65 67 65 72 2e 20   be an integer. 
e620: 20 49 66 20 74 68 65 20 76 61 6c 75 65 0a 2a 2a   If the value.**
e630: 20 69 6e 20 50 31 20 69 73 20 6e 6f 74 20 61 6e   in P1 is not an
e640: 20 69 6e 74 65 67 65 72 20 61 6e 64 20 63 61 6e   integer and can
e650: 6e 6f 74 20 62 65 20 63 6f 6e 76 65 72 74 65 64  not be converted
e660: 20 69 6e 74 6f 20 61 6e 20 69 6e 74 65 67 65 72   into an integer
e670: 0a 2a 2a 20 77 69 74 68 6f 75 74 20 64 61 74 61  .** without data
e680: 20 6c 6f 73 73 2c 20 74 68 65 6e 20 6a 75 6d 70   loss, then jump
e690: 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f 20   immediately to 
e6a0: 50 32 2c 20 6f 72 20 69 66 20 50 32 3d 3d 30 0a  P2, or if P2==0.
e6b0: 2a 2a 20 72 61 69 73 65 20 61 6e 20 53 51 4c 49  ** raise an SQLI
e6c0: 54 45 5f 4d 49 53 4d 41 54 43 48 20 65 78 63 65  TE_MISMATCH exce
e6d0: 70 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f  ption..*/.case O
e6e0: 50 5f 4d 75 73 74 42 65 49 6e 74 3a 20 7b 20 20  P_MustBeInt: {  
e6f0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d            /* jum
e700: 70 2c 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31  p, in1 */.  pIn1
e710: 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31   = &aMem[pOp->p1
e720: 5d 3b 0a 20 20 69 66 28 20 28 70 49 6e 31 2d 3e  ];.  if( (pIn1->
e730: 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29  flags & MEM_Int)
e740: 3d 3d 30 20 29 7b 0a 20 20 20 20 61 70 70 6c 79  ==0 ){.    apply
e750: 41 66 66 69 6e 69 74 79 28 70 49 6e 31 2c 20 53  Affinity(pIn1, S
e760: 51 4c 49 54 45 5f 41 46 46 5f 4e 55 4d 45 52 49  QLITE_AFF_NUMERI
e770: 43 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20  C, encoding);.  
e780: 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61    if( (pIn1->fla
e790: 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29 3d 3d 30  gs & MEM_Int)==0
e7a0: 20 29 7b 0a 20 20 20 20 20 20 56 64 62 65 42 72   ){.      VdbeBr
e7b0: 61 6e 63 68 54 61 6b 65 6e 28 31 2c 20 32 29 3b  anchTaken(1, 2);
e7c0: 0a 20 20 20 20 20 20 69 66 28 20 70 4f 70 2d 3e  .      if( pOp->
e7d0: 70 32 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20  p2==0 ){.       
e7e0: 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4d 49 53   rc = SQLITE_MIS
e7f0: 4d 41 54 43 48 3b 0a 20 20 20 20 20 20 20 20 67  MATCH;.        g
e800: 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
e810: 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 7d 65  _error;.      }e
e820: 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 67 6f 74  lse{.        got
e830: 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20  o jump_to_p2;.  
e840: 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a      }.    }.  }.
e850: 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65    VdbeBranchTake
e860: 6e 28 30 2c 20 32 29 3b 0a 20 20 4d 65 6d 53 65  n(0, 2);.  MemSe
e870: 74 54 79 70 65 46 6c 61 67 28 70 49 6e 31 2c 20  tTypeFlag(pIn1, 
e880: 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20 62 72 65 61  MEM_Int);.  brea
e890: 6b 3b 0a 7d 0a 0a 23 69 66 6e 64 65 66 20 53 51  k;.}..#ifndef SQ
e8a0: 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49  LITE_OMIT_FLOATI
e8b0: 4e 47 5f 50 4f 49 4e 54 0a 2f 2a 20 4f 70 63 6f  NG_POINT./* Opco
e8c0: 64 65 3a 20 52 65 61 6c 41 66 66 69 6e 69 74 79  de: RealAffinity
e8d0: 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a   P1 * * * *.**.*
e8e0: 2a 20 49 66 20 72 65 67 69 73 74 65 72 20 50 31  * If register P1
e8f0: 20 68 6f 6c 64 73 20 61 6e 20 69 6e 74 65 67 65   holds an intege
e900: 72 20 63 6f 6e 76 65 72 74 20 69 74 20 74 6f 20  r convert it to 
e910: 61 20 72 65 61 6c 20 76 61 6c 75 65 2e 0a 2a 2a  a real value..**
e920: 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20  .** This opcode 
e930: 69 73 20 75 73 65 64 20 77 68 65 6e 20 65 78 74  is used when ext
e940: 72 61 63 74 69 6e 67 20 69 6e 66 6f 72 6d 61 74  racting informat
e950: 69 6f 6e 20 66 72 6f 6d 20 61 20 63 6f 6c 75 6d  ion from a colum
e960: 6e 20 74 68 61 74 0a 2a 2a 20 68 61 73 20 52 45  n that.** has RE
e970: 41 4c 20 61 66 66 69 6e 69 74 79 2e 20 20 53 75  AL affinity.  Su
e980: 63 68 20 63 6f 6c 75 6d 6e 20 76 61 6c 75 65 73  ch column values
e990: 20 6d 61 79 20 73 74 69 6c 6c 20 62 65 20 73 74   may still be st
e9a0: 6f 72 65 64 20 61 73 0a 2a 2a 20 69 6e 74 65 67  ored as.** integ
e9b0: 65 72 73 2c 20 66 6f 72 20 73 70 61 63 65 20 65  ers, for space e
e9c0: 66 66 69 63 69 65 6e 63 79 2c 20 62 75 74 20 61  fficiency, but a
e9d0: 66 74 65 72 20 65 78 74 72 61 63 74 69 6f 6e 20  fter extraction 
e9e0: 77 65 20 77 61 6e 74 20 74 68 65 6d 0a 2a 2a 20  we want them.** 
e9f0: 74 6f 20 68 61 76 65 20 6f 6e 6c 79 20 61 20 72  to have only a r
ea00: 65 61 6c 20 76 61 6c 75 65 2e 0a 2a 2f 0a 63 61  eal value..*/.ca
ea10: 73 65 20 4f 50 5f 52 65 61 6c 41 66 66 69 6e 69  se OP_RealAffini
ea20: 74 79 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  ty: {           
ea30: 20 20 20 20 20 20 20 2f 2a 20 69 6e 31 20 2a 2f         /* in1 */
ea40: 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b  .  pIn1 = &aMem[
ea50: 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 69 66 28 20  pOp->p1];.  if( 
ea60: 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 28 4d  pIn1->flags & (M
ea70: 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 49 6e 74 52 65  EM_Int|MEM_IntRe
ea80: 61 6c 29 20 29 7b 0a 20 20 20 20 74 65 73 74 63  al) ){.    testc
ea90: 61 73 65 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73  ase( pIn1->flags
eaa0: 20 26 20 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20   & MEM_Int );.  
eab0: 20 20 74 65 73 74 63 61 73 65 28 20 70 49 6e 31    testcase( pIn1
eac0: 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e  ->flags & MEM_In
ead0: 74 52 65 61 6c 20 29 3b 0a 20 20 20 20 73 71 6c  tReal );.    sql
eae0: 69 74 65 33 56 64 62 65 4d 65 6d 52 65 61 6c 69  ite3VdbeMemReali
eaf0: 66 79 28 70 49 6e 31 29 3b 0a 20 20 20 20 52 45  fy(pIn1);.    RE
eb00: 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70  GISTER_TRACE(pOp
eb10: 2d 3e 70 31 2c 20 70 49 6e 31 29 3b 0a 20 20 7d  ->p1, pIn1);.  }
eb20: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64  .  break;.}.#end
eb30: 69 66 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  if..#ifndef SQLI
eb40: 54 45 5f 4f 4d 49 54 5f 43 41 53 54 0a 2f 2a 20  TE_OMIT_CAST./* 
eb50: 4f 70 63 6f 64 65 3a 20 43 61 73 74 20 50 31 20  Opcode: Cast P1 
eb60: 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f  P2 * * *.** Syno
eb70: 70 73 69 73 3a 20 61 66 66 69 6e 69 74 79 28 72  psis: affinity(r
eb80: 5b 50 31 5d 29 0a 2a 2a 0a 2a 2a 20 46 6f 72 63  [P1]).**.** Forc
eb90: 65 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72  e the value in r
eba0: 65 67 69 73 74 65 72 20 50 31 20 74 6f 20 62 65  egister P1 to be
ebb0: 20 74 68 65 20 74 79 70 65 20 64 65 66 69 6e 65   the type define
ebc0: 64 20 62 79 20 50 32 2e 0a 2a 2a 20 0a 2a 2a 20  d by P2..** .** 
ebd0: 3c 75 6c 3e 0a 2a 2a 20 3c 6c 69 3e 20 50 32 3d  <ul>.** <li> P2=
ebe0: 3d 27 41 27 20 26 72 61 72 72 3b 20 42 4c 4f 42  ='A' &rarr; BLOB
ebf0: 0a 2a 2a 20 3c 6c 69 3e 20 50 32 3d 3d 27 42 27  .** <li> P2=='B'
ec00: 20 26 72 61 72 72 3b 20 54 45 58 54 0a 2a 2a 20   &rarr; TEXT.** 
ec10: 3c 6c 69 3e 20 50 32 3d 3d 27 43 27 20 26 72 61  <li> P2=='C' &ra
ec20: 72 72 3b 20 4e 55 4d 45 52 49 43 0a 2a 2a 20 3c  rr; NUMERIC.** <
ec30: 6c 69 3e 20 50 32 3d 3d 27 44 27 20 26 72 61 72  li> P2=='D' &rar
ec40: 72 3b 20 49 4e 54 45 47 45 52 0a 2a 2a 20 3c 6c  r; INTEGER.** <l
ec50: 69 3e 20 50 32 3d 3d 27 45 27 20 26 72 61 72 72  i> P2=='E' &rarr
ec60: 3b 20 52 45 41 4c 0a 2a 2a 20 3c 2f 75 6c 3e 0a  ; REAL.** </ul>.
ec70: 2a 2a 0a 2a 2a 20 41 20 4e 55 4c 4c 20 76 61 6c  **.** A NULL val
ec80: 75 65 20 69 73 20 6e 6f 74 20 63 68 61 6e 67 65  ue is not change
ec90: 64 20 62 79 20 74 68 69 73 20 72 6f 75 74 69 6e  d by this routin
eca0: 65 2e 20 20 49 74 20 72 65 6d 61 69 6e 73 20 4e  e.  It remains N
ecb0: 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ULL..*/.case OP_
ecc0: 43 61 73 74 3a 20 7b 20 20 20 20 20 20 20 20 20  Cast: {         
ecd0: 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 31 20           /* in1 
ece0: 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  */.  assert( pOp
ecf0: 2d 3e 70 32 3e 3d 53 51 4c 49 54 45 5f 41 46 46  ->p2>=SQLITE_AFF
ed00: 5f 42 4c 4f 42 20 26 26 20 70 4f 70 2d 3e 70 32  _BLOB && pOp->p2
ed10: 3c 3d 53 51 4c 49 54 45 5f 41 46 46 5f 52 45 41  <=SQLITE_AFF_REA
ed20: 4c 20 29 3b 0a 20 20 74 65 73 74 63 61 73 65 28  L );.  testcase(
ed30: 20 70 4f 70 2d 3e 70 32 3d 3d 53 51 4c 49 54 45   pOp->p2==SQLITE
ed40: 5f 41 46 46 5f 54 45 58 54 20 29 3b 0a 20 20 74  _AFF_TEXT );.  t
ed50: 65 73 74 63 61 73 65 28 20 70 4f 70 2d 3e 70 32  estcase( pOp->p2
ed60: 3d 3d 53 51 4c 49 54 45 5f 41 46 46 5f 42 4c 4f  ==SQLITE_AFF_BLO
ed70: 42 20 29 3b 0a 20 20 74 65 73 74 63 61 73 65 28  B );.  testcase(
ed80: 20 70 4f 70 2d 3e 70 32 3d 3d 53 51 4c 49 54 45   pOp->p2==SQLITE
ed90: 5f 41 46 46 5f 4e 55 4d 45 52 49 43 20 29 3b 0a  _AFF_NUMERIC );.
eda0: 20 20 74 65 73 74 63 61 73 65 28 20 70 4f 70 2d    testcase( pOp-
edb0: 3e 70 32 3d 3d 53 51 4c 49 54 45 5f 41 46 46 5f  >p2==SQLITE_AFF_
edc0: 49 4e 54 45 47 45 52 20 29 3b 0a 20 20 74 65 73  INTEGER );.  tes
edd0: 74 63 61 73 65 28 20 70 4f 70 2d 3e 70 32 3d 3d  tcase( pOp->p2==
ede0: 53 51 4c 49 54 45 5f 41 46 46 5f 52 45 41 4c 20  SQLITE_AFF_REAL 
edf0: 29 3b 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65  );.  pIn1 = &aMe
ee00: 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 6d 65  m[pOp->p1];.  me
ee10: 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70  mAboutToChange(p
ee20: 2c 20 70 49 6e 31 29 3b 0a 20 20 72 63 20 3d 20  , pIn1);.  rc = 
ee30: 45 78 70 61 6e 64 42 6c 6f 62 28 70 49 6e 31 29  ExpandBlob(pIn1)
ee40: 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d  ;.  sqlite3VdbeM
ee50: 65 6d 43 61 73 74 28 70 49 6e 31 2c 20 70 4f 70  emCast(pIn1, pOp
ee60: 2d 3e 70 32 2c 20 65 6e 63 6f 64 69 6e 67 29 3b  ->p2, encoding);
ee70: 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c  .  UPDATE_MAX_BL
ee80: 4f 42 53 49 5a 45 28 70 49 6e 31 29 3b 0a 20 20  OBSIZE(pIn1);.  
ee90: 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62  if( rc ) goto ab
eea0: 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
eeb0: 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e  ;.  break;.}.#en
eec0: 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d  dif /* SQLITE_OM
eed0: 49 54 5f 43 41 53 54 20 2a 2f 0a 0a 2f 2a 20 4f  IT_CAST */../* O
eee0: 70 63 6f 64 65 3a 20 45 71 20 50 31 20 50 32 20  pcode: Eq P1 P2 
eef0: 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f  P3 P4 P5.** Syno
ef00: 70 73 69 73 3a 20 49 46 20 72 5b 50 33 5d 3d 3d  psis: IF r[P3]==
ef10: 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 43 6f 6d 70  r[P1].**.** Comp
ef20: 61 72 65 20 74 68 65 20 76 61 6c 75 65 73 20 69  are the values i
ef30: 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 61 6e  n register P1 an
ef40: 64 20 50 33 2e 20 20 49 66 20 72 65 67 28 50 33  d P3.  If reg(P3
ef50: 29 3d 3d 72 65 67 28 50 31 29 20 74 68 65 6e 0a  )==reg(P1) then.
ef60: 2a 2a 20 6a 75 6d 70 20 74 6f 20 61 64 64 72 65  ** jump to addre
ef70: 73 73 20 50 32 2e 20 20 4f 72 20 69 66 20 74 68  ss P2.  Or if th
ef80: 65 20 53 51 4c 49 54 45 5f 53 54 4f 52 45 50 32  e SQLITE_STOREP2
ef90: 20 66 6c 61 67 20 69 73 20 73 65 74 20 69 6e 20   flag is set in 
efa0: 50 35 2c 20 74 68 65 6e 0a 2a 2a 20 73 74 6f 72  P5, then.** stor
efb0: 65 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66 20  e the result of 
efc0: 63 6f 6d 70 61 72 69 73 6f 6e 20 69 6e 20 72 65  comparison in re
efd0: 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a  gister P2..**.**
efe0: 20 54 68 65 20 53 51 4c 49 54 45 5f 41 46 46 5f   The SQLITE_AFF_
eff0: 4d 41 53 4b 20 70 6f 72 74 69 6f 6e 20 6f 66 20  MASK portion of 
f000: 50 35 20 6d 75 73 74 20 62 65 20 61 6e 20 61 66  P5 must be an af
f010: 66 69 6e 69 74 79 20 63 68 61 72 61 63 74 65 72  finity character
f020: 20 2d 0a 2a 2a 20 53 51 4c 49 54 45 5f 41 46 46   -.** SQLITE_AFF
f030: 5f 54 45 58 54 2c 20 53 51 4c 49 54 45 5f 41 46  _TEXT, SQLITE_AF
f040: 46 5f 49 4e 54 45 47 45 52 2c 20 61 6e 64 20 73  F_INTEGER, and s
f050: 6f 20 66 6f 72 74 68 2e 20 41 6e 20 61 74 74 65  o forth. An atte
f060: 6d 70 74 20 69 73 20 6d 61 64 65 20 0a 2a 2a 20  mpt is made .** 
f070: 74 6f 20 63 6f 65 72 63 65 20 62 6f 74 68 20 69  to coerce both i
f080: 6e 70 75 74 73 20 61 63 63 6f 72 64 69 6e 67 20  nputs according 
f090: 74 6f 20 74 68 69 73 20 61 66 66 69 6e 69 74 79  to this affinity
f0a0: 20 62 65 66 6f 72 65 20 74 68 65 0a 2a 2a 20 63   before the.** c
f0b0: 6f 6d 70 61 72 69 73 6f 6e 20 69 73 20 6d 61 64  omparison is mad
f0c0: 65 2e 20 49 66 20 74 68 65 20 53 51 4c 49 54 45  e. If the SQLITE
f0d0: 5f 41 46 46 5f 4d 41 53 4b 20 69 73 20 30 78 30  _AFF_MASK is 0x0
f0e0: 30 2c 20 74 68 65 6e 20 6e 75 6d 65 72 69 63 0a  0, then numeric.
f0f0: 2a 2a 20 61 66 66 69 6e 69 74 79 20 69 73 20 75  ** affinity is u
f100: 73 65 64 2e 20 4e 6f 74 65 20 74 68 61 74 20 74  sed. Note that t
f110: 68 65 20 61 66 66 69 6e 69 74 79 20 63 6f 6e 76  he affinity conv
f120: 65 72 73 69 6f 6e 73 20 61 72 65 20 73 74 6f 72  ersions are stor
f130: 65 64 0a 2a 2a 20 62 61 63 6b 20 69 6e 74 6f 20  ed.** back into 
f140: 74 68 65 20 69 6e 70 75 74 20 72 65 67 69 73 74  the input regist
f150: 65 72 73 20 50 31 20 61 6e 64 20 50 33 2e 20 20  ers P1 and P3.  
f160: 53 6f 20 74 68 69 73 20 6f 70 63 6f 64 65 20 63  So this opcode c
f170: 61 6e 20 63 61 75 73 65 0a 2a 2a 20 70 65 72 73  an cause.** pers
f180: 69 73 74 65 6e 74 20 63 68 61 6e 67 65 73 20 74  istent changes t
f190: 6f 20 72 65 67 69 73 74 65 72 73 20 50 31 20 61  o registers P1 a
f1a0: 6e 64 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 4f 6e 63  nd P3..**.** Onc
f1b0: 65 20 61 6e 79 20 63 6f 6e 76 65 72 73 69 6f 6e  e any conversion
f1c0: 73 20 68 61 76 65 20 74 61 6b 65 6e 20 70 6c 61  s have taken pla
f1d0: 63 65 2c 20 61 6e 64 20 6e 65 69 74 68 65 72 20  ce, and neither 
f1e0: 76 61 6c 75 65 20 69 73 20 4e 55 4c 4c 2c 20 0a  value is NULL, .
f1f0: 2a 2a 20 74 68 65 20 76 61 6c 75 65 73 20 61 72  ** the values ar
f200: 65 20 63 6f 6d 70 61 72 65 64 2e 20 49 66 20 62  e compared. If b
f210: 6f 74 68 20 76 61 6c 75 65 73 20 61 72 65 20 62  oth values are b
f220: 6c 6f 62 73 20 74 68 65 6e 20 6d 65 6d 63 6d 70  lobs then memcmp
f230: 28 29 20 69 73 0a 2a 2a 20 75 73 65 64 20 74 6f  () is.** used to
f240: 20 64 65 74 65 72 6d 69 6e 65 20 74 68 65 20 72   determine the r
f250: 65 73 75 6c 74 73 20 6f 66 20 74 68 65 20 63 6f  esults of the co
f260: 6d 70 61 72 69 73 6f 6e 2e 20 20 49 66 20 62 6f  mparison.  If bo
f270: 74 68 20 76 61 6c 75 65 73 0a 2a 2a 20 61 72 65  th values.** are
f280: 20 74 65 78 74 2c 20 74 68 65 6e 20 74 68 65 20   text, then the 
f290: 61 70 70 72 6f 70 72 69 61 74 65 20 63 6f 6c 6c  appropriate coll
f2a0: 61 74 69 6e 67 20 66 75 6e 63 74 69 6f 6e 20 73  ating function s
f2b0: 70 65 63 69 66 69 65 64 20 69 6e 0a 2a 2a 20 50  pecified in.** P
f2c0: 34 20 69 73 20 75 73 65 64 20 74 6f 20 64 6f 20  4 is used to do 
f2d0: 74 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 20  the comparison. 
f2e0: 20 49 66 20 50 34 20 69 73 20 6e 6f 74 20 73 70   If P4 is not sp
f2f0: 65 63 69 66 69 65 64 20 74 68 65 6e 0a 2a 2a 20  ecified then.** 
f300: 6d 65 6d 63 6d 70 28 29 20 69 73 20 75 73 65 64  memcmp() is used
f310: 20 74 6f 20 63 6f 6d 70 61 72 65 20 74 65 78 74   to compare text
f320: 20 73 74 72 69 6e 67 2e 20 20 49 66 20 62 6f 74   string.  If bot
f330: 68 20 76 61 6c 75 65 73 20 61 72 65 0a 2a 2a 20  h values are.** 
f340: 6e 75 6d 65 72 69 63 2c 20 74 68 65 6e 20 61 20  numeric, then a 
f350: 6e 75 6d 65 72 69 63 20 63 6f 6d 70 61 72 69 73  numeric comparis
f360: 6f 6e 20 69 73 20 75 73 65 64 2e 20 49 66 20 74  on is used. If t
f370: 68 65 20 74 77 6f 20 76 61 6c 75 65 73 0a 2a 2a  he two values.**
f380: 20 61 72 65 20 6f 66 20 64 69 66 66 65 72 65 6e   are of differen
f390: 74 20 74 79 70 65 73 2c 20 74 68 65 6e 20 6e 75  t types, then nu
f3a0: 6d 62 65 72 73 20 61 72 65 20 63 6f 6e 73 69 64  mbers are consid
f3b0: 65 72 65 64 20 6c 65 73 73 20 74 68 61 6e 0a 2a  ered less than.*
f3c0: 2a 20 73 74 72 69 6e 67 73 20 61 6e 64 20 73 74  * strings and st
f3d0: 72 69 6e 67 73 20 61 72 65 20 63 6f 6e 73 69 64  rings are consid
f3e0: 65 72 65 64 20 6c 65 73 73 20 74 68 61 6e 20 62  ered less than b
f3f0: 6c 6f 62 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 53  lobs..**.** If S
f400: 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 20 69 73 20  QLITE_NULLEQ is 
f410: 73 65 74 20 69 6e 20 50 35 20 74 68 65 6e 20 74  set in P5 then t
f420: 68 65 20 72 65 73 75 6c 74 20 6f 66 20 63 6f 6d  he result of com
f430: 70 61 72 69 73 6f 6e 20 69 73 20 61 6c 77 61 79  parison is alway
f440: 73 20 65 69 74 68 65 72 0a 2a 2a 20 74 72 75 65  s either.** true
f450: 20 6f 72 20 66 61 6c 73 65 20 61 6e 64 20 69 73   or false and is
f460: 20 6e 65 76 65 72 20 4e 55 4c 4c 2e 20 20 49 66   never NULL.  If
f470: 20 62 6f 74 68 20 6f 70 65 72 61 6e 64 73 20 61   both operands a
f480: 72 65 20 4e 55 4c 4c 20 74 68 65 6e 20 74 68 65  re NULL then the
f490: 20 72 65 73 75 6c 74 0a 2a 2a 20 6f 66 20 63 6f   result.** of co
f4a0: 6d 70 61 72 69 73 6f 6e 20 69 73 20 74 72 75 65  mparison is true
f4b0: 2e 20 20 49 66 20 65 69 74 68 65 72 20 6f 70 65  .  If either ope
f4c0: 72 61 6e 64 20 69 73 20 4e 55 4c 4c 20 74 68 65  rand is NULL the
f4d0: 6e 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20  n the result is 
f4e0: 66 61 6c 73 65 2e 0a 2a 2a 20 49 66 20 6e 65 69  false..** If nei
f4f0: 74 68 65 72 20 6f 70 65 72 61 6e 64 20 69 73 20  ther operand is 
f500: 4e 55 4c 4c 20 74 68 65 20 72 65 73 75 6c 74 20  NULL the result 
f510: 69 73 20 74 68 65 20 73 61 6d 65 20 61 73 20 69  is the same as i
f520: 74 20 77 6f 75 6c 64 20 62 65 20 69 66 0a 2a 2a  t would be if.**
f530: 20 74 68 65 20 53 51 4c 49 54 45 5f 4e 55 4c 4c   the SQLITE_NULL
f540: 45 51 20 66 6c 61 67 20 77 65 72 65 20 6f 6d 69  EQ flag were omi
f550: 74 74 65 64 20 66 72 6f 6d 20 50 35 2e 0a 2a 2a  tted from P5..**
f560: 0a 2a 2a 20 49 66 20 62 6f 74 68 20 53 51 4c 49  .** If both SQLI
f570: 54 45 5f 53 54 4f 52 45 50 32 20 61 6e 64 20 53  TE_STOREP2 and S
f580: 51 4c 49 54 45 5f 4b 45 45 50 4e 55 4c 4c 20 66  QLITE_KEEPNULL f
f590: 6c 61 67 73 20 61 72 65 20 73 65 74 20 74 68 65  lags are set the
f5a0: 6e 20 74 68 65 0a 2a 2a 20 63 6f 6e 74 65 6e 74  n the.** content
f5b0: 20 6f 66 20 72 5b 50 32 5d 20 69 73 20 6f 6e 6c   of r[P2] is onl
f5c0: 79 20 63 68 61 6e 67 65 64 20 69 66 20 74 68 65  y changed if the
f5d0: 20 6e 65 77 20 76 61 6c 75 65 20 69 73 20 4e 55   new value is NU
f5e0: 4c 4c 20 6f 72 20 30 20 28 66 61 6c 73 65 29 2e  LL or 0 (false).
f5f0: 0a 2a 2a 20 49 6e 20 6f 74 68 65 72 20 77 6f 72  .** In other wor
f600: 64 73 2c 20 61 20 70 72 69 6f 72 20 72 5b 50 32  ds, a prior r[P2
f610: 5d 20 76 61 6c 75 65 20 77 69 6c 6c 20 6e 6f 74  ] value will not
f620: 20 62 65 20 6f 76 65 72 77 72 69 74 74 65 6e 20   be overwritten 
f630: 62 79 20 31 20 28 74 72 75 65 29 2e 0a 2a 2f 0a  by 1 (true)..*/.
f640: 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 65 20 50 31  /* Opcode: Ne P1
f650: 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20   P2 P3 P4 P5.** 
f660: 53 79 6e 6f 70 73 69 73 3a 20 49 46 20 72 5b 50  Synopsis: IF r[P
f670: 33 5d 21 3d 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20  3]!=r[P1].**.** 
f680: 54 68 69 73 20 77 6f 72 6b 73 20 6a 75 73 74 20  This works just 
f690: 6c 69 6b 65 20 74 68 65 20 45 71 20 6f 70 63 6f  like the Eq opco
f6a0: 64 65 20 65 78 63 65 70 74 20 74 68 61 74 20 74  de except that t
f6b0: 68 65 20 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e  he jump is taken
f6c0: 20 69 66 0a 2a 2a 20 74 68 65 20 6f 70 65 72 61   if.** the opera
f6d0: 6e 64 73 20 69 6e 20 72 65 67 69 73 74 65 72 73  nds in registers
f6e0: 20 50 31 20 61 6e 64 20 50 33 20 61 72 65 20 6e   P1 and P3 are n
f6f0: 6f 74 20 65 71 75 61 6c 2e 20 20 53 65 65 20 74  ot equal.  See t
f700: 68 65 20 45 71 20 6f 70 63 6f 64 65 20 66 6f 72  he Eq opcode for
f710: 0a 2a 2a 20 61 64 64 69 74 69 6f 6e 61 6c 20 69  .** additional i
f720: 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a  nformation..**.*
f730: 2a 20 49 66 20 62 6f 74 68 20 53 51 4c 49 54 45  * If both SQLITE
f740: 5f 53 54 4f 52 45 50 32 20 61 6e 64 20 53 51 4c  _STOREP2 and SQL
f750: 49 54 45 5f 4b 45 45 50 4e 55 4c 4c 20 66 6c 61  ITE_KEEPNULL fla
f760: 67 73 20 61 72 65 20 73 65 74 20 74 68 65 6e 20  gs are set then 
f770: 74 68 65 0a 2a 2a 20 63 6f 6e 74 65 6e 74 20 6f  the.** content o
f780: 66 20 72 5b 50 32 5d 20 69 73 20 6f 6e 6c 79 20  f r[P2] is only 
f790: 63 68 61 6e 67 65 64 20 69 66 20 74 68 65 20 6e  changed if the n
f7a0: 65 77 20 76 61 6c 75 65 20 69 73 20 4e 55 4c 4c  ew value is NULL
f7b0: 20 6f 72 20 31 20 28 74 72 75 65 29 2e 0a 2a 2a   or 1 (true)..**
f7c0: 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c   In other words,
f7d0: 20 61 20 70 72 69 6f 72 20 72 5b 50 32 5d 20 76   a prior r[P2] v
f7e0: 61 6c 75 65 20 77 69 6c 6c 20 6e 6f 74 20 62 65  alue will not be
f7f0: 20 6f 76 65 72 77 72 69 74 74 65 6e 20 62 79 20   overwritten by 
f800: 30 20 28 66 61 6c 73 65 29 2e 0a 2a 2f 0a 2f 2a  0 (false)..*/./*
f810: 20 4f 70 63 6f 64 65 3a 20 4c 74 20 50 31 20 50   Opcode: Lt P1 P
f820: 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79  2 P3 P4 P5.** Sy
f830: 6e 6f 70 73 69 73 3a 20 49 46 20 72 5b 50 33 5d  nopsis: IF r[P3]
f840: 3c 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 43 6f 6d  <r[P1].**.** Com
f850: 70 61 72 65 20 74 68 65 20 76 61 6c 75 65 73 20  pare the values 
f860: 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 61  in register P1 a
f870: 6e 64 20 50 33 2e 20 20 49 66 20 72 65 67 28 50  nd P3.  If reg(P
f880: 33 29 3c 72 65 67 28 50 31 29 20 74 68 65 6e 0a  3)<reg(P1) then.
f890: 2a 2a 20 6a 75 6d 70 20 74 6f 20 61 64 64 72 65  ** jump to addre
f8a0: 73 73 20 50 32 2e 20 20 4f 72 20 69 66 20 74 68  ss P2.  Or if th
f8b0: 65 20 53 51 4c 49 54 45 5f 53 54 4f 52 45 50 32  e SQLITE_STOREP2
f8c0: 20 66 6c 61 67 20 69 73 20 73 65 74 20 69 6e 20   flag is set in 
f8d0: 50 35 20 73 74 6f 72 65 0a 2a 2a 20 74 68 65 20  P5 store.** the 
f8e0: 72 65 73 75 6c 74 20 6f 66 20 63 6f 6d 70 61 72  result of compar
f8f0: 69 73 6f 6e 20 28 30 20 6f 72 20 31 20 6f 72 20  ison (0 or 1 or 
f900: 4e 55 4c 4c 29 20 69 6e 74 6f 20 72 65 67 69 73  NULL) into regis
f910: 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 49 66  ter P2..**.** If
f920: 20 74 68 65 20 53 51 4c 49 54 45 5f 4a 55 4d 50   the SQLITE_JUMP
f930: 49 46 4e 55 4c 4c 20 62 69 74 20 6f 66 20 50 35  IFNULL bit of P5
f940: 20 69 73 20 73 65 74 20 61 6e 64 20 65 69 74 68   is set and eith
f950: 65 72 20 72 65 67 28 50 31 29 20 6f 72 0a 2a 2a  er reg(P1) or.**
f960: 20 72 65 67 28 50 33 29 20 69 73 20 4e 55 4c 4c   reg(P3) is NULL
f970: 20 74 68 65 6e 20 74 68 65 20 74 61 6b 65 20 74   then the take t
f980: 68 65 20 6a 75 6d 70 2e 20 20 49 66 20 74 68 65  he jump.  If the
f990: 20 53 51 4c 49 54 45 5f 4a 55 4d 50 49 46 4e 55   SQLITE_JUMPIFNU
f9a0: 4c 4c 20 0a 2a 2a 20 62 69 74 20 69 73 20 63 6c  LL .** bit is cl
f9b0: 65 61 72 20 74 68 65 6e 20 66 61 6c 6c 20 74 68  ear then fall th
f9c0: 72 6f 75 67 68 20 69 66 20 65 69 74 68 65 72 20  rough if either 
f9d0: 6f 70 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c 2e  operand is NULL.
f9e0: 0a 2a 2a 0a 2a 2a 20 54 68 65 20 53 51 4c 49 54  .**.** The SQLIT
f9f0: 45 5f 41 46 46 5f 4d 41 53 4b 20 70 6f 72 74 69  E_AFF_MASK porti
fa00: 6f 6e 20 6f 66 20 50 35 20 6d 75 73 74 20 62 65  on of P5 must be
fa10: 20 61 6e 20 61 66 66 69 6e 69 74 79 20 63 68 61   an affinity cha
fa20: 72 61 63 74 65 72 20 2d 0a 2a 2a 20 53 51 4c 49  racter -.** SQLI
fa30: 54 45 5f 41 46 46 5f 54 45 58 54 2c 20 53 51 4c  TE_AFF_TEXT, SQL
fa40: 49 54 45 5f 41 46 46 5f 49 4e 54 45 47 45 52 2c  ITE_AFF_INTEGER,
fa50: 20 61 6e 64 20 73 6f 20 66 6f 72 74 68 2e 20 41   and so forth. A
fa60: 6e 20 61 74 74 65 6d 70 74 20 69 73 20 6d 61 64  n attempt is mad
fa70: 65 20 0a 2a 2a 20 74 6f 20 63 6f 65 72 63 65 20  e .** to coerce 
fa80: 62 6f 74 68 20 69 6e 70 75 74 73 20 61 63 63 6f  both inputs acco
fa90: 72 64 69 6e 67 20 74 6f 20 74 68 69 73 20 61 66  rding to this af
faa0: 66 69 6e 69 74 79 20 62 65 66 6f 72 65 20 74 68  finity before th
fab0: 65 0a 2a 2a 20 63 6f 6d 70 61 72 69 73 6f 6e 20  e.** comparison 
fac0: 69 73 20 6d 61 64 65 2e 20 49 66 20 74 68 65 20  is made. If the 
fad0: 53 51 4c 49 54 45 5f 41 46 46 5f 4d 41 53 4b 20  SQLITE_AFF_MASK 
fae0: 69 73 20 30 78 30 30 2c 20 74 68 65 6e 20 6e 75  is 0x00, then nu
faf0: 6d 65 72 69 63 0a 2a 2a 20 61 66 66 69 6e 69 74  meric.** affinit
fb00: 79 20 69 73 20 75 73 65 64 2e 20 4e 6f 74 65 20  y is used. Note 
fb10: 74 68 61 74 20 74 68 65 20 61 66 66 69 6e 69 74  that the affinit
fb20: 79 20 63 6f 6e 76 65 72 73 69 6f 6e 73 20 61 72  y conversions ar
fb30: 65 20 73 74 6f 72 65 64 0a 2a 2a 20 62 61 63 6b  e stored.** back
fb40: 20 69 6e 74 6f 20 74 68 65 20 69 6e 70 75 74 20   into the input 
fb50: 72 65 67 69 73 74 65 72 73 20 50 31 20 61 6e 64  registers P1 and
fb60: 20 50 33 2e 20 20 53 6f 20 74 68 69 73 20 6f 70   P3.  So this op
fb70: 63 6f 64 65 20 63 61 6e 20 63 61 75 73 65 0a 2a  code can cause.*
fb80: 2a 20 70 65 72 73 69 73 74 65 6e 74 20 63 68 61  * persistent cha
fb90: 6e 67 65 73 20 74 6f 20 72 65 67 69 73 74 65 72  nges to register
fba0: 73 20 50 31 20 61 6e 64 20 50 33 2e 0a 2a 2a 0a  s P1 and P3..**.
fbb0: 2a 2a 20 4f 6e 63 65 20 61 6e 79 20 63 6f 6e 76  ** Once any conv
fbc0: 65 72 73 69 6f 6e 73 20 68 61 76 65 20 74 61 6b  ersions have tak
fbd0: 65 6e 20 70 6c 61 63 65 2c 20 61 6e 64 20 6e 65  en place, and ne
fbe0: 69 74 68 65 72 20 76 61 6c 75 65 20 69 73 20 4e  ither value is N
fbf0: 55 4c 4c 2c 20 0a 2a 2a 20 74 68 65 20 76 61 6c  ULL, .** the val
fc00: 75 65 73 20 61 72 65 20 63 6f 6d 70 61 72 65 64  ues are compared
fc10: 2e 20 49 66 20 62 6f 74 68 20 76 61 6c 75 65 73  . If both values
fc20: 20 61 72 65 20 62 6c 6f 62 73 20 74 68 65 6e 20   are blobs then 
fc30: 6d 65 6d 63 6d 70 28 29 20 69 73 0a 2a 2a 20 75  memcmp() is.** u
fc40: 73 65 64 20 74 6f 20 64 65 74 65 72 6d 69 6e 65  sed to determine
fc50: 20 74 68 65 20 72 65 73 75 6c 74 73 20 6f 66 20   the results of 
fc60: 74 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 20  the comparison. 
fc70: 20 49 66 20 62 6f 74 68 20 76 61 6c 75 65 73 0a   If both values.
fc80: 2a 2a 20 61 72 65 20 74 65 78 74 2c 20 74 68 65  ** are text, the
fc90: 6e 20 74 68 65 20 61 70 70 72 6f 70 72 69 61 74  n the appropriat
fca0: 65 20 63 6f 6c 6c 61 74 69 6e 67 20 66 75 6e 63  e collating func
fcb0: 74 69 6f 6e 20 73 70 65 63 69 66 69 65 64 20 69  tion specified i
fcc0: 6e 0a 2a 2a 20 50 34 20 69 73 20 20 75 73 65 64  n.** P4 is  used
fcd0: 20 74 6f 20 64 6f 20 74 68 65 20 63 6f 6d 70 61   to do the compa
fce0: 72 69 73 6f 6e 2e 20 20 49 66 20 50 34 20 69 73  rison.  If P4 is
fcf0: 20 6e 6f 74 20 73 70 65 63 69 66 69 65 64 20 74   not specified t
fd00: 68 65 6e 0a 2a 2a 20 6d 65 6d 63 6d 70 28 29 20  hen.** memcmp() 
fd10: 69 73 20 75 73 65 64 20 74 6f 20 63 6f 6d 70 61  is used to compa
fd20: 72 65 20 74 65 78 74 20 73 74 72 69 6e 67 2e 20  re text string. 
fd30: 20 49 66 20 62 6f 74 68 20 76 61 6c 75 65 73 20   If both values 
fd40: 61 72 65 0a 2a 2a 20 6e 75 6d 65 72 69 63 2c 20  are.** numeric, 
fd50: 74 68 65 6e 20 61 20 6e 75 6d 65 72 69 63 20 63  then a numeric c
fd60: 6f 6d 70 61 72 69 73 6f 6e 20 69 73 20 75 73 65  omparison is use
fd70: 64 2e 20 49 66 20 74 68 65 20 74 77 6f 20 76 61  d. If the two va
fd80: 6c 75 65 73 0a 2a 2a 20 61 72 65 20 6f 66 20 64  lues.** are of d
fd90: 69 66 66 65 72 65 6e 74 20 74 79 70 65 73 2c 20  ifferent types, 
fda0: 74 68 65 6e 20 6e 75 6d 62 65 72 73 20 61 72 65  then numbers are
fdb0: 20 63 6f 6e 73 69 64 65 72 65 64 20 6c 65 73 73   considered less
fdc0: 20 74 68 61 6e 0a 2a 2a 20 73 74 72 69 6e 67 73   than.** strings
fdd0: 20 61 6e 64 20 73 74 72 69 6e 67 73 20 61 72 65   and strings are
fde0: 20 63 6f 6e 73 69 64 65 72 65 64 20 6c 65 73 73   considered less
fdf0: 20 74 68 61 6e 20 62 6c 6f 62 73 2e 0a 2a 2f 0a   than blobs..*/.
fe00: 2f 2a 20 4f 70 63 6f 64 65 3a 20 4c 65 20 50 31  /* Opcode: Le P1
fe10: 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20   P2 P3 P4 P5.** 
fe20: 53 79 6e 6f 70 73 69 73 3a 20 49 46 20 72 5b 50  Synopsis: IF r[P
fe30: 33 5d 3c 3d 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20  3]<=r[P1].**.** 
fe40: 54 68 69 73 20 77 6f 72 6b 73 20 6a 75 73 74 20  This works just 
fe50: 6c 69 6b 65 20 74 68 65 20 4c 74 20 6f 70 63 6f  like the Lt opco
fe60: 64 65 20 65 78 63 65 70 74 20 74 68 61 74 20 74  de except that t
fe70: 68 65 20 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e  he jump is taken
fe80: 20 69 66 0a 2a 2a 20 74 68 65 20 63 6f 6e 74 65   if.** the conte
fe90: 6e 74 20 6f 66 20 72 65 67 69 73 74 65 72 20 50  nt of register P
fea0: 33 20 69 73 20 6c 65 73 73 20 74 68 61 6e 20 6f  3 is less than o
feb0: 72 20 65 71 75 61 6c 20 74 6f 20 74 68 65 20 63  r equal to the c
fec0: 6f 6e 74 65 6e 74 20 6f 66 0a 2a 2a 20 72 65 67  ontent of.** reg
fed0: 69 73 74 65 72 20 50 31 2e 20 20 53 65 65 20 74  ister P1.  See t
fee0: 68 65 20 4c 74 20 6f 70 63 6f 64 65 20 66 6f 72  he Lt opcode for
fef0: 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f   additional info
ff00: 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 2f 2a 20 4f  rmation..*/./* O
ff10: 70 63 6f 64 65 3a 20 47 74 20 50 31 20 50 32 20  pcode: Gt P1 P2 
ff20: 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f  P3 P4 P5.** Syno
ff30: 70 73 69 73 3a 20 49 46 20 72 5b 50 33 5d 3e 72  psis: IF r[P3]>r
ff40: 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20  [P1].**.** This 
ff50: 77 6f 72 6b 73 20 6a 75 73 74 20 6c 69 6b 65 20  works just like 
ff60: 74 68 65 20 4c 74 20 6f 70 63 6f 64 65 20 65 78  the Lt opcode ex
ff70: 63 65 70 74 20 74 68 61 74 20 74 68 65 20 6a 75  cept that the ju
ff80: 6d 70 20 69 73 20 74 61 6b 65 6e 20 69 66 0a 2a  mp is taken if.*
ff90: 2a 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66  * the content of
ffa0: 20 72 65 67 69 73 74 65 72 20 50 33 20 69 73 20   register P3 is 
ffb0: 67 72 65 61 74 65 72 20 74 68 61 6e 20 74 68 65  greater than the
ffc0: 20 63 6f 6e 74 65 6e 74 20 6f 66 0a 2a 2a 20 72   content of.** r
ffd0: 65 67 69 73 74 65 72 20 50 31 2e 20 20 53 65 65  egister P1.  See
ffe0: 20 74 68 65 20 4c 74 20 6f 70 63 6f 64 65 20 66   the Lt opcode f
fff0: 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e  or additional in
10000 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 2f 2a  formation..*/./*
10010 20 4f 70 63 6f 64 65 3a 20 47 65 20 50 31 20 50   Opcode: Ge P1 P
10020 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79  2 P3 P4 P5.** Sy
10030 6e 6f 70 73 69 73 3a 20 49 46 20 72 5b 50 33 5d  nopsis: IF r[P3]
10040 3e 3d 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 54 68  >=r[P1].**.** Th
10050 69 73 20 77 6f 72 6b 73 20 6a 75 73 74 20 6c 69  is works just li
10060 6b 65 20 74 68 65 20 4c 74 20 6f 70 63 6f 64 65  ke the Lt opcode
10070 20 65 78 63 65 70 74 20 74 68 61 74 20 74 68 65   except that the
10080 20 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e 20 69   jump is taken i
10090 66 0a 2a 2a 20 74 68 65 20 63 6f 6e 74 65 6e 74  f.** the content
100a0 20 6f 66 20 72 65 67 69 73 74 65 72 20 50 33 20   of register P3 
100b0 69 73 20 67 72 65 61 74 65 72 20 74 68 61 6e 20  is greater than 
100c0 6f 72 20 65 71 75 61 6c 20 74 6f 20 74 68 65 20  or equal to the 
100d0 63 6f 6e 74 65 6e 74 20 6f 66 0a 2a 2a 20 72 65  content of.** re
100e0 67 69 73 74 65 72 20 50 31 2e 20 20 53 65 65 20  gister P1.  See 
100f0 74 68 65 20 4c 74 20 6f 70 63 6f 64 65 20 66 6f  the Lt opcode fo
10100 72 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66  r additional inf
10110 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73  ormation..*/.cas
10120 65 20 4f 50 5f 45 71 3a 20 20 20 20 20 20 20 20  e OP_Eq:        
10130 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61         /* same a
10140 73 20 54 4b 5f 45 51 2c 20 6a 75 6d 70 2c 20 69  s TK_EQ, jump, i
10150 6e 31 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20  n1, in3 */.case 
10160 4f 50 5f 4e 65 3a 20 20 20 20 20 20 20 20 20 20  OP_Ne:          
10170 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20       /* same as 
10180 54 4b 5f 4e 45 2c 20 6a 75 6d 70 2c 20 69 6e 31  TK_NE, jump, in1
10190 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50  , in3 */.case OP
101a0 5f 4c 74 3a 20 20 20 20 20 20 20 20 20 20 20 20  _Lt:            
101b0 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b     /* same as TK
101c0 5f 4c 54 2c 20 6a 75 6d 70 2c 20 69 6e 31 2c 20  _LT, jump, in1, 
101d0 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 4c  in3 */.case OP_L
101e0 65 3a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e:              
101f0 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 4c   /* same as TK_L
10200 45 2c 20 6a 75 6d 70 2c 20 69 6e 31 2c 20 69 6e  E, jump, in1, in
10210 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 47 74 3a  3 */.case OP_Gt:
10220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
10230 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 47 54 2c  * same as TK_GT,
10240 20 6a 75 6d 70 2c 20 69 6e 31 2c 20 69 6e 33 20   jump, in1, in3 
10250 2a 2f 0a 63 61 73 65 20 4f 50 5f 47 65 3a 20 7b  */.case OP_Ge: {
10260 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
10270 73 61 6d 65 20 61 73 20 54 4b 5f 47 45 2c 20 6a  same as TK_GE, j
10280 75 6d 70 2c 20 69 6e 31 2c 20 69 6e 33 20 2a 2f  ump, in1, in3 */
10290 0a 20 20 69 6e 74 20 72 65 73 2c 20 72 65 73 32  .  int res, res2
102a0 3b 20 20 20 20 20 20 2f 2a 20 52 65 73 75 6c 74  ;      /* Result
102b0 20 6f 66 20 74 68 65 20 63 6f 6d 70 61 72 69 73   of the comparis
102c0 6f 6e 20 6f 66 20 70 49 6e 31 20 61 67 61 69 6e  on of pIn1 again
102d0 73 74 20 70 49 6e 33 20 2a 2f 0a 20 20 63 68 61  st pIn3 */.  cha
102e0 72 20 61 66 66 69 6e 69 74 79 3b 20 20 20 20 20  r affinity;     
102f0 20 2f 2a 20 41 66 66 69 6e 69 74 79 20 74 6f 20   /* Affinity to 
10300 75 73 65 20 66 6f 72 20 63 6f 6d 70 61 72 69 73  use for comparis
10310 6f 6e 20 2a 2f 0a 20 20 75 31 36 20 66 6c 61 67  on */.  u16 flag
10320 73 31 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 43  s1;         /* C
10330 6f 70 79 20 6f 66 20 69 6e 69 74 69 61 6c 20 76  opy of initial v
10340 61 6c 75 65 20 6f 66 20 70 49 6e 31 2d 3e 66 6c  alue of pIn1->fl
10350 61 67 73 20 2a 2f 0a 20 20 75 31 36 20 66 6c 61  ags */.  u16 fla
10360 67 73 33 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  gs3;         /* 
10370 43 6f 70 79 20 6f 66 20 69 6e 69 74 69 61 6c 20  Copy of initial 
10380 76 61 6c 75 65 20 6f 66 20 70 49 6e 33 2d 3e 66  value of pIn3->f
10390 6c 61 67 73 20 2a 2f 0a 0a 20 20 70 49 6e 31 20  lags */..  pIn1 
103a0 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  = &aMem[pOp->p1]
103b0 3b 0a 20 20 70 49 6e 33 20 3d 20 26 61 4d 65 6d  ;.  pIn3 = &aMem
103c0 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 66 6c 61  [pOp->p3];.  fla
103d0 67 73 31 20 3d 20 70 49 6e 31 2d 3e 66 6c 61 67  gs1 = pIn1->flag
103e0 73 3b 0a 20 20 66 6c 61 67 73 33 20 3d 20 70 49  s;.  flags3 = pI
103f0 6e 33 2d 3e 66 6c 61 67 73 3b 0a 20 20 69 66 28  n3->flags;.  if(
10400 20 28 66 6c 61 67 73 31 20 7c 20 66 6c 61 67 73   (flags1 | flags
10410 33 29 26 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20  3)&MEM_Null ){. 
10420 20 20 20 2f 2a 20 4f 6e 65 20 6f 72 20 62 6f 74     /* One or bot
10430 68 20 6f 70 65 72 61 6e 64 73 20 61 72 65 20 4e  h operands are N
10440 55 4c 4c 20 2a 2f 0a 20 20 20 20 69 66 28 20 70  ULL */.    if( p
10450 4f 70 2d 3e 70 35 20 26 20 53 51 4c 49 54 45 5f  Op->p5 & SQLITE_
10460 4e 55 4c 4c 45 51 20 29 7b 0a 20 20 20 20 20 20  NULLEQ ){.      
10470 2f 2a 20 49 66 20 53 51 4c 49 54 45 5f 4e 55 4c  /* If SQLITE_NUL
10480 4c 45 51 20 69 73 20 73 65 74 20 28 77 68 69 63  LEQ is set (whic
10490 68 20 77 69 6c 6c 20 6f 6e 6c 79 20 68 61 70 70  h will only happ
104a0 65 6e 20 69 66 20 74 68 65 20 6f 70 65 72 61 74  en if the operat
104b0 6f 72 20 69 73 0a 20 20 20 20 20 20 2a 2a 20 4f  or is.      ** O
104c0 50 5f 45 71 20 6f 72 20 4f 50 5f 4e 65 29 20 74  P_Eq or OP_Ne) t
104d0 68 65 6e 20 74 61 6b 65 20 74 68 65 20 6a 75 6d  hen take the jum
104e0 70 20 6f 72 20 6e 6f 74 20 64 65 70 65 6e 64 69  p or not dependi
104f0 6e 67 20 6f 6e 20 77 68 65 74 68 65 72 0a 20 20  ng on whether.  
10500 20 20 20 20 2a 2a 20 6f 72 20 6e 6f 74 20 62 6f      ** or not bo
10510 74 68 20 6f 70 65 72 61 6e 64 73 20 61 72 65 20  th operands are 
10520 6e 75 6c 6c 2e 0a 20 20 20 20 20 20 2a 2f 0a 20  null..      */. 
10530 20 20 20 20 20 61 73 73 65 72 74 28 20 28 66 6c       assert( (fl
10540 61 67 73 31 20 26 20 4d 45 4d 5f 43 6c 65 61 72  ags1 & MEM_Clear
10550 65 64 29 3d 3d 30 20 29 3b 0a 20 20 20 20 20 20  ed)==0 );.      
10560 61 73 73 65 72 74 28 20 28 70 4f 70 2d 3e 70 35  assert( (pOp->p5
10570 20 26 20 53 51 4c 49 54 45 5f 4a 55 4d 50 49 46   & SQLITE_JUMPIF
10580 4e 55 4c 4c 29 3d 3d 30 20 7c 7c 20 43 4f 52 52  NULL)==0 || CORR
10590 55 50 54 5f 44 42 20 29 3b 0a 20 20 20 20 20 20  UPT_DB );.      
105a0 74 65 73 74 63 61 73 65 28 20 28 70 4f 70 2d 3e  testcase( (pOp->
105b0 70 35 20 26 20 53 51 4c 49 54 45 5f 4a 55 4d 50  p5 & SQLITE_JUMP
105c0 49 46 4e 55 4c 4c 29 21 3d 30 20 29 3b 0a 20 20  IFNULL)!=0 );.  
105d0 20 20 20 20 69 66 28 20 28 66 6c 61 67 73 31 26      if( (flags1&
105e0 66 6c 61 67 73 33 26 4d 45 4d 5f 4e 75 6c 6c 29  flags3&MEM_Null)
105f0 21 3d 30 0a 20 20 20 20 20 20 20 26 26 20 28 66  !=0.       && (f
10600 6c 61 67 73 33 26 4d 45 4d 5f 43 6c 65 61 72 65  lags3&MEM_Cleare
10610 64 29 3d 3d 30 0a 20 20 20 20 20 20 29 7b 0a 20  d)==0.      ){. 
10620 20 20 20 20 20 20 20 72 65 73 20 3d 20 30 3b 20         res = 0; 
10630 20 2f 2a 20 4f 70 65 72 61 6e 64 73 20 61 72 65   /* Operands are
10640 20 65 71 75 61 6c 20 2a 2f 0a 20 20 20 20 20 20   equal */.      
10650 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 72  }else{.        r
10660 65 73 20 3d 20 28 28 66 6c 61 67 73 33 20 26 20  es = ((flags3 & 
10670 4d 45 4d 5f 4e 75 6c 6c 29 20 3f 20 2d 31 20 3a  MEM_Null) ? -1 :
10680 20 2b 31 29 3b 20 20 2f 2a 20 4f 70 65 72 61 6e   +1);  /* Operan
10690 64 73 20 61 72 65 20 6e 6f 74 20 65 71 75 61 6c  ds are not equal
106a0 20 2a 2f 0a 20 20 20 20 20 20 7d 0a 20 20 20 20   */.      }.    
106b0 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 2f 2a 20  }else{.      /* 
106c0 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 20 69 73  SQLITE_NULLEQ is
106d0 20 63 6c 65 61 72 20 61 6e 64 20 61 74 20 6c 65   clear and at le
106e0 61 73 74 20 6f 6e 65 20 6f 70 65 72 61 6e 64 20  ast one operand 
106f0 69 73 20 4e 55 4c 4c 2c 0a 20 20 20 20 20 20 2a  is NULL,.      *
10700 2a 20 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c  * then the resul
10710 74 20 69 73 20 61 6c 77 61 79 73 20 4e 55 4c 4c  t is always NULL
10720 2e 0a 20 20 20 20 20 20 2a 2a 20 54 68 65 20 6a  ..      ** The j
10730 75 6d 70 20 69 73 20 74 61 6b 65 6e 20 69 66 20  ump is taken if 
10740 74 68 65 20 53 51 4c 49 54 45 5f 4a 55 4d 50 49  the SQLITE_JUMPI
10750 46 4e 55 4c 4c 20 62 69 74 20 69 73 20 73 65 74  FNULL bit is set
10760 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20  ..      */.     
10770 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 26 20 53   if( pOp->p5 & S
10780 51 4c 49 54 45 5f 53 54 4f 52 45 50 32 20 29 7b  QLITE_STOREP2 ){
10790 0a 20 20 20 20 20 20 20 20 70 4f 75 74 20 3d 20  .        pOut = 
107a0 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a  &aMem[pOp->p2];.
107b0 20 20 20 20 20 20 20 20 69 43 6f 6d 70 61 72 65          iCompare
107c0 20 3d 20 31 3b 20 20 20 20 2f 2a 20 4f 70 65 72   = 1;    /* Oper
107d0 61 6e 64 73 20 61 72 65 20 6e 6f 74 20 65 71 75  ands are not equ
107e0 61 6c 20 2a 2f 0a 20 20 20 20 20 20 20 20 6d 65  al */.        me
107f0 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70  mAboutToChange(p
10800 2c 20 70 4f 75 74 29 3b 0a 20 20 20 20 20 20 20  , pOut);.       
10810 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28   MemSetTypeFlag(
10820 70 4f 75 74 2c 20 4d 45 4d 5f 4e 75 6c 6c 29 3b  pOut, MEM_Null);
10830 0a 20 20 20 20 20 20 20 20 52 45 47 49 53 54 45  .        REGISTE
10840 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 32 2c  R_TRACE(pOp->p2,
10850 20 70 4f 75 74 29 3b 0a 20 20 20 20 20 20 7d 65   pOut);.      }e
10860 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 56 64 62  lse{.        Vdb
10870 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 32 2c 33  eBranchTaken(2,3
10880 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 70  );.        if( p
10890 4f 70 2d 3e 70 35 20 26 20 53 51 4c 49 54 45 5f  Op->p5 & SQLITE_
108a0 4a 55 4d 50 49 46 4e 55 4c 4c 20 29 7b 0a 20 20  JUMPIFNULL ){.  
108b0 20 20 20 20 20 20 20 20 67 6f 74 6f 20 6a 75 6d          goto jum
108c0 70 5f 74 6f 5f 70 32 3b 0a 20 20 20 20 20 20 20  p_to_p2;.       
108d0 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20   }.      }.     
108e0 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 20 20   break;.    }.  
108f0 7d 65 6c 73 65 7b 0a 20 20 20 20 2f 2a 20 4e 65  }else{.    /* Ne
10900 69 74 68 65 72 20 6f 70 65 72 61 6e 64 20 69 73  ither operand is
10910 20 4e 55 4c 4c 2e 20 20 44 6f 20 61 20 63 6f 6d   NULL.  Do a com
10920 70 61 72 69 73 6f 6e 2e 20 2a 2f 0a 20 20 20 20  parison. */.    
10930 61 66 66 69 6e 69 74 79 20 3d 20 70 4f 70 2d 3e  affinity = pOp->
10940 70 35 20 26 20 53 51 4c 49 54 45 5f 41 46 46 5f  p5 & SQLITE_AFF_
10950 4d 41 53 4b 3b 0a 20 20 20 20 69 66 28 20 61 66  MASK;.    if( af
10960 66 69 6e 69 74 79 3e 3d 53 51 4c 49 54 45 5f 41  finity>=SQLITE_A
10970 46 46 5f 4e 55 4d 45 52 49 43 20 29 7b 0a 20 20  FF_NUMERIC ){.  
10980 20 20 20 20 69 66 28 20 28 66 6c 61 67 73 31 20      if( (flags1 
10990 7c 20 66 6c 61 67 73 33 29 26 4d 45 4d 5f 53 74  | flags3)&MEM_St
109a0 72 20 29 7b 0a 20 20 20 20 20 20 20 20 69 66 28  r ){.        if(
109b0 20 28 66 6c 61 67 73 31 20 26 20 28 4d 45 4d 5f   (flags1 & (MEM_
109c0 49 6e 74 7c 4d 45 4d 5f 49 6e 74 52 65 61 6c 7c  Int|MEM_IntReal|
109d0 4d 45 4d 5f 52 65 61 6c 7c 4d 45 4d 5f 53 74 72  MEM_Real|MEM_Str
109e0 29 29 3d 3d 4d 45 4d 5f 53 74 72 20 29 7b 0a 20  ))==MEM_Str ){. 
109f0 20 20 20 20 20 20 20 20 20 61 70 70 6c 79 4e 75           applyNu
10a00 6d 65 72 69 63 41 66 66 69 6e 69 74 79 28 70 49  mericAffinity(pI
10a10 6e 31 2c 30 29 3b 0a 20 20 20 20 20 20 20 20 20  n1,0);.         
10a20 20 61 73 73 65 72 74 28 20 66 6c 61 67 73 33 3d   assert( flags3=
10a30 3d 70 49 6e 33 2d 3e 66 6c 61 67 73 20 29 3b 0a  =pIn3->flags );.
10a40 20 20 20 20 20 20 20 20 20 20 2f 2a 20 74 65 73            /* tes
10a50 74 63 61 73 65 28 20 66 6c 61 67 73 33 21 3d 70  tcase( flags3!=p
10a60 49 6e 33 2d 3e 66 6c 61 67 73 20 29 3b 0a 20 20  In3->flags );.  
10a70 20 20 20 20 20 20 20 20 2a 2a 20 74 68 69 73 20          ** this 
10a80 75 73 65 64 20 74 6f 20 62 65 20 70 6f 73 73 69  used to be possi
10a90 62 6c 65 20 77 69 74 68 20 70 49 6e 31 3d 3d 70  ble with pIn1==p
10aa0 49 6e 33 2c 20 62 75 74 20 6e 6f 74 20 73 69 6e  In3, but not sin
10ab0 63 65 0a 20 20 20 20 20 20 20 20 20 20 2a 2a 20  ce.          ** 
10ac0 74 68 65 20 63 6f 6c 75 6d 6e 20 63 61 63 68 65  the column cache
10ad0 20 77 61 73 20 72 65 6d 6f 76 65 64 2e 20 20 54   was removed.  T
10ae0 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 73 73  he following ass
10af0 69 67 6e 6d 65 6e 74 0a 20 20 20 20 20 20 20 20  ignment.        
10b00 20 20 2a 2a 20 69 73 20 65 73 73 65 6e 74 69 61    ** is essentia
10b10 6c 6c 79 20 61 20 6e 6f 2d 6f 70 2e 20 20 42 75  lly a no-op.  Bu
10b20 74 2c 20 69 74 20 70 72 6f 76 69 64 65 73 20 64  t, it provides d
10b30 65 66 65 6e 73 65 2d 69 6e 2d 64 65 70 74 68 0a  efense-in-depth.
10b40 20 20 20 20 20 20 20 20 20 20 2a 2a 20 69 6e 20            ** in 
10b50 63 61 73 65 20 6f 75 72 20 61 6e 61 6c 79 73 69  case our analysi
10b60 73 20 69 73 20 69 6e 63 6f 72 72 65 63 74 2c 20  s is incorrect, 
10b70 73 6f 20 69 74 20 69 73 20 6c 65 66 74 20 69 6e  so it is left in
10b80 2e 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 66  . */.          f
10b90 6c 61 67 73 33 20 3d 20 70 49 6e 33 2d 3e 66 6c  lags3 = pIn3->fl
10ba0 61 67 73 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20  ags;.        }. 
10bb0 20 20 20 20 20 20 20 69 66 28 20 28 66 6c 61 67         if( (flag
10bc0 73 33 20 26 20 28 4d 45 4d 5f 49 6e 74 7c 4d 45  s3 & (MEM_Int|ME
10bd0 4d 5f 49 6e 74 52 65 61 6c 7c 4d 45 4d 5f 52 65  M_IntReal|MEM_Re
10be0 61 6c 7c 4d 45 4d 5f 53 74 72 29 29 3d 3d 4d 45  al|MEM_Str))==ME
10bf0 4d 5f 53 74 72 20 29 7b 0a 20 20 20 20 20 20 20  M_Str ){.       
10c00 20 20 20 61 70 70 6c 79 4e 75 6d 65 72 69 63 41     applyNumericA
10c10 66 66 69 6e 69 74 79 28 70 49 6e 33 2c 30 29 3b  ffinity(pIn3,0);
10c20 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20  .        }.     
10c30 20 7d 0a 20 20 20 20 20 20 2f 2a 20 48 61 6e 64   }.      /* Hand
10c40 6c 65 20 74 68 65 20 63 6f 6d 6d 6f 6e 20 63 61  le the common ca
10c50 73 65 20 6f 66 20 69 6e 74 65 67 65 72 20 63 6f  se of integer co
10c60 6d 70 61 72 69 73 6f 6e 20 68 65 72 65 2c 20 61  mparison here, a
10c70 73 20 61 6e 0a 20 20 20 20 20 20 2a 2a 20 6f 70  s an.      ** op
10c80 74 69 6d 69 7a 61 74 69 6f 6e 2c 20 74 6f 20 61  timization, to a
10c90 76 6f 69 64 20 61 20 63 61 6c 6c 20 74 6f 20 73  void a call to s
10ca0 71 6c 69 74 65 33 4d 65 6d 43 6f 6d 70 61 72 65  qlite3MemCompare
10cb0 28 29 20 2a 2f 0a 20 20 20 20 20 20 69 66 28 20  () */.      if( 
10cc0 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 70  (pIn1->flags & p
10cd0 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  In3->flags & MEM
10ce0 5f 49 6e 74 29 21 3d 30 20 29 7b 0a 20 20 20 20  _Int)!=0 ){.    
10cf0 20 20 20 20 69 66 28 20 70 49 6e 33 2d 3e 75 2e      if( pIn3->u.
10d00 69 20 3e 20 70 49 6e 31 2d 3e 75 2e 69 20 29 7b  i > pIn1->u.i ){
10d10 20 72 65 73 20 3d 20 2b 31 3b 20 67 6f 74 6f 20   res = +1; goto 
10d20 63 6f 6d 70 61 72 65 5f 6f 70 3b 20 7d 0a 20 20  compare_op; }.  
10d30 20 20 20 20 20 20 69 66 28 20 70 49 6e 33 2d 3e        if( pIn3->
10d40 75 2e 69 20 3c 20 70 49 6e 31 2d 3e 75 2e 69 20  u.i < pIn1->u.i 
10d50 29 7b 20 72 65 73 20 3d 20 2d 31 3b 20 67 6f 74  ){ res = -1; got
10d60 6f 20 63 6f 6d 70 61 72 65 5f 6f 70 3b 20 7d 0a  o compare_op; }.
10d70 20 20 20 20 20 20 20 20 72 65 73 20 3d 20 30 3b          res = 0;
10d80 0a 20 20 20 20 20 20 20 20 67 6f 74 6f 20 63 6f  .        goto co
10d90 6d 70 61 72 65 5f 6f 70 3b 0a 20 20 20 20 20 20  mpare_op;.      
10da0 7d 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20  }.    }else if( 
10db0 61 66 66 69 6e 69 74 79 3d 3d 53 51 4c 49 54 45  affinity==SQLITE
10dc0 5f 41 46 46 5f 54 45 58 54 20 29 7b 0a 20 20 20  _AFF_TEXT ){.   
10dd0 20 20 20 69 66 28 20 28 66 6c 61 67 73 31 20 26     if( (flags1 &
10de0 20 4d 45 4d 5f 53 74 72 29 3d 3d 30 20 26 26 20   MEM_Str)==0 && 
10df0 28 66 6c 61 67 73 31 26 28 4d 45 4d 5f 49 6e 74  (flags1&(MEM_Int
10e00 7c 4d 45 4d 5f 52 65 61 6c 7c 4d 45 4d 5f 49 6e  |MEM_Real|MEM_In
10e10 74 52 65 61 6c 29 29 21 3d 30 20 29 7b 0a 20 20  tReal))!=0 ){.  
10e20 20 20 20 20 20 20 74 65 73 74 63 61 73 65 28 20        testcase( 
10e30 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn1->flags & ME
10e40 4d 5f 49 6e 74 20 29 3b 0a 20 20 20 20 20 20 20  M_Int );.       
10e50 20 74 65 73 74 63 61 73 65 28 20 70 49 6e 31 2d   testcase( pIn1-
10e60 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52 65 61  >flags & MEM_Rea
10e70 6c 20 29 3b 0a 20 20 20 20 20 20 20 20 74 65 73  l );.        tes
10e80 74 63 61 73 65 28 20 70 49 6e 31 2d 3e 66 6c 61  tcase( pIn1->fla
10e90 67 73 20 26 20 4d 45 4d 5f 49 6e 74 52 65 61 6c  gs & MEM_IntReal
10ea0 20 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69   );.        sqli
10eb0 74 65 33 56 64 62 65 4d 65 6d 53 74 72 69 6e 67  te3VdbeMemString
10ec0 69 66 79 28 70 49 6e 31 2c 20 65 6e 63 6f 64 69  ify(pIn1, encodi
10ed0 6e 67 2c 20 31 29 3b 0a 20 20 20 20 20 20 20 20  ng, 1);.        
10ee0 74 65 73 74 63 61 73 65 28 20 28 66 6c 61 67 73  testcase( (flags
10ef0 31 26 4d 45 4d 5f 44 79 6e 29 20 21 3d 20 28 70  1&MEM_Dyn) != (p
10f00 49 6e 31 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 44  In1->flags&MEM_D
10f10 79 6e 29 20 29 3b 0a 20 20 20 20 20 20 20 20 66  yn) );.        f
10f20 6c 61 67 73 31 20 3d 20 28 70 49 6e 31 2d 3e 66  lags1 = (pIn1->f
10f30 6c 61 67 73 20 26 20 7e 4d 45 4d 5f 54 79 70 65  lags & ~MEM_Type
10f40 4d 61 73 6b 29 20 7c 20 28 66 6c 61 67 73 31 20  Mask) | (flags1 
10f50 26 20 4d 45 4d 5f 54 79 70 65 4d 61 73 6b 29 3b  & MEM_TypeMask);
10f60 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28  .        assert(
10f70 20 70 49 6e 31 21 3d 70 49 6e 33 20 29 3b 0a 20   pIn1!=pIn3 );. 
10f80 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69 66 28       }.      if(
10f90 20 28 66 6c 61 67 73 33 20 26 20 4d 45 4d 5f 53   (flags3 & MEM_S
10fa0 74 72 29 3d 3d 30 20 26 26 20 28 66 6c 61 67 73  tr)==0 && (flags
10fb0 33 26 28 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 52  3&(MEM_Int|MEM_R
10fc0 65 61 6c 7c 4d 45 4d 5f 49 6e 74 52 65 61 6c 29  eal|MEM_IntReal)
10fd0 29 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20  )!=0 ){.        
10fe0 74 65 73 74 63 61 73 65 28 20 70 49 6e 33 2d 3e  testcase( pIn3->
10ff0 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 20  flags & MEM_Int 
11000 29 3b 0a 20 20 20 20 20 20 20 20 74 65 73 74 63  );.        testc
11010 61 73 65 28 20 70 49 6e 33 2d 3e 66 6c 61 67 73  ase( pIn3->flags
11020 20 26 20 4d 45 4d 5f 52 65 61 6c 20 29 3b 0a 20   & MEM_Real );. 
11030 20 20 20 20 20 20 20 74 65 73 74 63 61 73 65 28         testcase(
11040 20 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d   pIn3->flags & M
11050 45 4d 5f 49 6e 74 52 65 61 6c 20 29 3b 0a 20 20  EM_IntReal );.  
11060 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
11070 65 4d 65 6d 53 74 72 69 6e 67 69 66 79 28 70 49  eMemStringify(pI
11080 6e 33 2c 20 65 6e 63 6f 64 69 6e 67 2c 20 31 29  n3, encoding, 1)
11090 3b 0a 20 20 20 20 20 20 20 20 74 65 73 74 63 61  ;.        testca
110a0 73 65 28 20 28 66 6c 61 67 73 33 26 4d 45 4d 5f  se( (flags3&MEM_
110b0 44 79 6e 29 20 21 3d 20 28 70 49 6e 33 2d 3e 66  Dyn) != (pIn3->f
110c0 6c 61 67 73 26 4d 45 4d 5f 44 79 6e 29 20 29 3b  lags&MEM_Dyn) );
110d0 0a 20 20 20 20 20 20 20 20 66 6c 61 67 73 33 20  .        flags3 
110e0 3d 20 28 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26  = (pIn3->flags &
110f0 20 7e 4d 45 4d 5f 54 79 70 65 4d 61 73 6b 29 20   ~MEM_TypeMask) 
11100 7c 20 28 66 6c 61 67 73 33 20 26 20 4d 45 4d 5f  | (flags3 & MEM_
11110 54 79 70 65 4d 61 73 6b 29 3b 0a 20 20 20 20 20  TypeMask);.     
11120 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 61 73 73   }.    }.    ass
11130 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65  ert( pOp->p4type
11140 3d 3d 50 34 5f 43 4f 4c 4c 53 45 51 20 7c 7c 20  ==P4_COLLSEQ || 
11150 70 4f 70 2d 3e 70 34 2e 70 43 6f 6c 6c 3d 3d 30  pOp->p4.pColl==0
11160 20 29 3b 0a 20 20 20 20 72 65 73 20 3d 20 73 71   );.    res = sq
11170 6c 69 74 65 33 4d 65 6d 43 6f 6d 70 61 72 65 28  lite3MemCompare(
11180 70 49 6e 33 2c 20 70 49 6e 31 2c 20 70 4f 70 2d  pIn3, pIn1, pOp-
11190 3e 70 34 2e 70 43 6f 6c 6c 29 3b 0a 20 20 7d 0a  >p4.pColl);.  }.
111a0 63 6f 6d 70 61 72 65 5f 6f 70 3a 0a 20 20 2f 2a  compare_op:.  /*
111b0 20 41 74 20 74 68 69 73 20 70 6f 69 6e 74 2c 20   At this point, 
111c0 72 65 73 20 69 73 20 6e 65 67 61 74 69 76 65 2c  res is negative,
111d0 20 7a 65 72 6f 2c 20 6f 72 20 70 6f 73 69 74 69   zero, or positi
111e0 76 65 20 69 66 20 72 65 67 5b 50 31 5d 20 69 73  ve if reg[P1] is
111f0 0a 20 20 2a 2a 20 6c 65 73 73 20 74 68 61 6e 2c  .  ** less than,
11200 20 65 71 75 61 6c 20 74 6f 2c 20 6f 72 20 67 72   equal to, or gr
11210 65 61 74 65 72 20 74 68 61 6e 20 72 65 67 5b 50  eater than reg[P
11220 33 5d 2c 20 72 65 73 70 65 63 74 69 76 65 6c 79  3], respectively
11230 2e 20 20 43 6f 6d 70 75 74 65 0a 20 20 2a 2a 20  .  Compute.  ** 
11240 74 68 65 20 61 6e 73 77 65 72 20 74 6f 20 74 68  the answer to th
11250 69 73 20 6f 70 65 72 61 74 6f 72 20 69 6e 20 72  is operator in r
11260 65 73 32 2c 20 64 65 70 65 6e 64 69 6e 67 20 6f  es2, depending o
11270 6e 20 77 68 61 74 20 74 68 65 20 63 6f 6d 70 61  n what the compa
11280 72 69 73 6f 6e 0a 20 20 2a 2a 20 6f 70 65 72 61  rison.  ** opera
11290 74 6f 72 20 61 63 74 75 61 6c 6c 79 20 69 73 2e  tor actually is.
112a0 20 20 54 68 65 20 6e 65 78 74 20 62 6c 6f 63 6b    The next block
112b0 20 6f 66 20 63 6f 64 65 20 64 65 70 65 6e 64 73   of code depends
112c0 20 6f 6e 20 74 68 65 20 66 61 63 74 0a 20 20 2a   on the fact.  *
112d0 2a 20 74 68 61 74 20 74 68 65 20 36 20 63 6f 6d  * that the 6 com
112e0 70 61 72 69 73 6f 6e 20 6f 70 65 72 61 74 6f 72  parison operator
112f0 73 20 61 72 65 20 63 6f 6e 73 65 63 75 74 69 76  s are consecutiv
11300 65 20 69 6e 74 65 67 65 72 73 20 69 6e 20 74 68  e integers in th
11310 69 73 0a 20 20 2a 2a 20 6f 72 64 65 72 3a 20 20  is.  ** order:  
11320 4e 45 2c 20 45 51 2c 20 47 54 2c 20 4c 45 2c 20  NE, EQ, GT, LE, 
11330 4c 54 2c 20 47 45 20 2a 2f 0a 20 20 61 73 73 65  LT, GE */.  asse
11340 72 74 28 20 4f 50 5f 45 71 3d 3d 4f 50 5f 4e 65  rt( OP_Eq==OP_Ne
11350 2b 31 20 29 3b 20 61 73 73 65 72 74 28 20 4f 50  +1 ); assert( OP
11360 5f 47 74 3d 3d 4f 50 5f 4e 65 2b 32 20 29 3b 20  _Gt==OP_Ne+2 ); 
11370 61 73 73 65 72 74 28 20 4f 50 5f 4c 65 3d 3d 4f  assert( OP_Le==O
11380 50 5f 4e 65 2b 33 20 29 3b 0a 20 20 61 73 73 65  P_Ne+3 );.  asse
11390 72 74 28 20 4f 50 5f 4c 74 3d 3d 4f 50 5f 4e 65  rt( OP_Lt==OP_Ne
113a0 2b 34 20 29 3b 20 61 73 73 65 72 74 28 20 4f 50  +4 ); assert( OP
113b0 5f 47 65 3d 3d 4f 50 5f 4e 65 2b 35 20 29 3b 0a  _Ge==OP_Ne+5 );.
113c0 20 20 69 66 28 20 72 65 73 3c 30 20 29 7b 20 20    if( res<0 ){  
113d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
113e0 20 20 20 20 20 20 2f 2a 20 6e 65 2c 20 65 71 2c        /* ne, eq,
113f0 20 67 74 2c 20 6c 65 2c 20 6c 74 2c 20 67 65 20   gt, le, lt, ge 
11400 2a 2f 0a 20 20 20 20 73 74 61 74 69 63 20 63 6f  */.    static co
11410 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61  nst unsigned cha
11420 72 20 61 4c 54 62 5b 5d 20 3d 20 7b 20 31 2c 20  r aLTb[] = { 1, 
11430 20 30 2c 20 20 30 2c 20 20 31 2c 20 20 31 2c 20   0,  0,  1,  1, 
11440 20 30 20 7d 3b 0a 20 20 20 20 72 65 73 32 20 3d   0 };.    res2 =
11450 20 61 4c 54 62 5b 70 4f 70 2d 3e 6f 70 63 6f 64   aLTb[pOp->opcod
11460 65 20 2d 20 4f 50 5f 4e 65 5d 3b 0a 20 20 7d 65  e - OP_Ne];.  }e
11470 6c 73 65 20 69 66 28 20 72 65 73 3d 3d 30 20 29  lse if( res==0 )
11480 7b 0a 20 20 20 20 73 74 61 74 69 63 20 63 6f 6e  {.    static con
11490 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72  st unsigned char
114a0 20 61 45 51 62 5b 5d 20 3d 20 7b 20 30 2c 20 20   aEQb[] = { 0,  
114b0 31 2c 20 20 30 2c 20 20 31 2c 20 20 30 2c 20 20  1,  0,  1,  0,  
114c0 31 20 7d 3b 0a 20 20 20 20 72 65 73 32 20 3d 20  1 };.    res2 = 
114d0 61 45 51 62 5b 70 4f 70 2d 3e 6f 70 63 6f 64 65  aEQb[pOp->opcode
114e0 20 2d 20 4f 50 5f 4e 65 5d 3b 0a 20 20 7d 65 6c   - OP_Ne];.  }el
114f0 73 65 7b 0a 20 20 20 20 73 74 61 74 69 63 20 63  se{.    static c
11500 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68  onst unsigned ch
11510 61 72 20 61 47 54 62 5b 5d 20 3d 20 7b 20 31 2c  ar aGTb[] = { 1,
11520 20 20 30 2c 20 20 31 2c 20 20 30 2c 20 20 30 2c    0,  1,  0,  0,
11530 20 20 31 20 7d 3b 0a 20 20 20 20 72 65 73 32 20    1 };.    res2 
11540 3d 20 61 47 54 62 5b 70 4f 70 2d 3e 6f 70 63 6f  = aGTb[pOp->opco
11550 64 65 20 2d 20 4f 50 5f 4e 65 5d 3b 0a 20 20 7d  de - OP_Ne];.  }
11560 0a 0a 20 20 2f 2a 20 55 6e 64 6f 20 61 6e 79 20  ..  /* Undo any 
11570 63 68 61 6e 67 65 73 20 6d 61 64 65 20 62 79 20  changes made by 
11580 61 70 70 6c 79 41 66 66 69 6e 69 74 79 28 29 20  applyAffinity() 
11590 74 6f 20 74 68 65 20 69 6e 70 75 74 20 72 65 67  to the input reg
115a0 69 73 74 65 72 73 2e 20 2a 2f 0a 20 20 61 73 73  isters. */.  ass
115b0 65 72 74 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67  ert( (pIn1->flag
115c0 73 20 26 20 4d 45 4d 5f 44 79 6e 29 20 3d 3d 20  s & MEM_Dyn) == 
115d0 28 66 6c 61 67 73 31 20 26 20 4d 45 4d 5f 44 79  (flags1 & MEM_Dy
115e0 6e 29 20 29 3b 0a 20 20 70 49 6e 31 2d 3e 66 6c  n) );.  pIn1->fl
115f0 61 67 73 20 3d 20 66 6c 61 67 73 31 3b 0a 20 20  ags = flags1;.  
11600 61 73 73 65 72 74 28 20 28 70 49 6e 33 2d 3e 66  assert( (pIn3->f
11610 6c 61 67 73 20 26 20 4d 45 4d 5f 44 79 6e 29 20  lags & MEM_Dyn) 
11620 3d 3d 20 28 66 6c 61 67 73 33 20 26 20 4d 45 4d  == (flags3 & MEM
11630 5f 44 79 6e 29 20 29 3b 0a 20 20 70 49 6e 33 2d  _Dyn) );.  pIn3-
11640 3e 66 6c 61 67 73 20 3d 20 66 6c 61 67 73 33 3b  >flags = flags3;
11650 0a 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 20  ..  if( pOp->p5 
11660 26 20 53 51 4c 49 54 45 5f 53 54 4f 52 45 50 32  & SQLITE_STOREP2
11670 20 29 7b 0a 20 20 20 20 70 4f 75 74 20 3d 20 26   ){.    pOut = &
11680 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20  aMem[pOp->p2];. 
11690 20 20 20 69 43 6f 6d 70 61 72 65 20 3d 20 72 65     iCompare = re
116a0 73 3b 0a 20 20 20 20 69 66 28 20 28 70 4f 70 2d  s;.    if( (pOp-
116b0 3e 70 35 20 26 20 53 51 4c 49 54 45 5f 4b 45 45  >p5 & SQLITE_KEE
116c0 50 4e 55 4c 4c 29 21 3d 30 20 29 7b 0a 20 20 20  PNULL)!=0 ){.   
116d0 20 20 20 2f 2a 20 54 68 65 20 4b 45 45 50 4e 55     /* The KEEPNU
116e0 4c 4c 20 66 6c 61 67 20 70 72 65 76 65 6e 74 73  LL flag prevents
116f0 20 4f 50 5f 45 71 20 66 72 6f 6d 20 6f 76 65 72   OP_Eq from over
11700 77 72 69 74 69 6e 67 20 61 20 4e 55 4c 4c 20 77  writing a NULL w
11710 69 74 68 20 31 0a 20 20 20 20 20 20 2a 2a 20 61  ith 1.      ** a
11720 6e 64 20 70 72 65 76 65 6e 74 73 20 4f 50 5f 4e  nd prevents OP_N
11730 65 20 66 72 6f 6d 20 6f 76 65 72 77 72 69 74 69  e from overwriti
11740 6e 67 20 4e 55 4c 4c 20 77 69 74 68 20 30 2e 20  ng NULL with 0. 
11750 20 54 68 69 73 20 66 6c 61 67 0a 20 20 20 20 20   This flag.     
11760 20 2a 2a 20 69 73 20 6f 6e 6c 79 20 75 73 65 64   ** is only used
11770 20 69 6e 20 63 6f 6e 74 65 78 74 73 20 77 68 65   in contexts whe
11780 72 65 20 65 69 74 68 65 72 3a 0a 20 20 20 20 20  re either:.     
11790 20 2a 2a 20 20 20 28 31 29 20 6f 70 3d 3d 4f 50   **   (1) op==OP
117a0 5f 45 71 20 26 26 20 28 72 5b 50 32 5d 3d 3d 4e  _Eq && (r[P2]==N
117b0 55 4c 4c 20 7c 7c 20 72 5b 50 32 5d 3d 3d 30 29  ULL || r[P2]==0)
117c0 0a 20 20 20 20 20 20 2a 2a 20 20 20 28 32 29 20  .      **   (2) 
117d0 6f 70 3d 3d 4f 50 5f 4e 65 20 26 26 20 28 72 5b  op==OP_Ne && (r[
117e0 50 32 5d 3d 3d 4e 55 4c 4c 20 7c 7c 20 72 5b 50  P2]==NULL || r[P
117f0 32 5d 3d 3d 31 29 0a 20 20 20 20 20 20 2a 2a 20  2]==1).      ** 
11800 54 68 65 72 65 66 6f 72 65 20 69 74 20 69 73 20  Therefore it is 
11810 6e 6f 74 20 6e 65 63 65 73 73 61 72 79 20 74 6f  not necessary to
11820 20 63 68 65 63 6b 20 74 68 65 20 63 6f 6e 74 65   check the conte
11830 6e 74 20 6f 66 20 72 5b 50 32 5d 20 66 6f 72 0a  nt of r[P2] for.
11840 20 20 20 20 20 20 2a 2a 20 4e 55 4c 4c 2e 20 2a        ** NULL. *
11850 2f 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  /.      assert( 
11860 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  pOp->opcode==OP_
11870 4e 65 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64  Ne || pOp->opcod
11880 65 3d 3d 4f 50 5f 45 71 20 29 3b 0a 20 20 20 20  e==OP_Eq );.    
11890 20 20 61 73 73 65 72 74 28 20 72 65 73 32 3d 3d    assert( res2==
118a0 30 20 7c 7c 20 72 65 73 32 3d 3d 31 20 29 3b 0a  0 || res2==1 );.
118b0 20 20 20 20 20 20 74 65 73 74 63 61 73 65 28 20        testcase( 
118c0 72 65 73 32 3d 3d 30 20 26 26 20 70 4f 70 2d 3e  res2==0 && pOp->
118d0 6f 70 63 6f 64 65 3d 3d 4f 50 5f 45 71 20 29 3b  opcode==OP_Eq );
118e0 0a 20 20 20 20 20 20 74 65 73 74 63 61 73 65 28  .      testcase(
118f0 20 72 65 73 32 3d 3d 31 20 26 26 20 70 4f 70 2d   res2==1 && pOp-
11900 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 45 71 20 29  >opcode==OP_Eq )
11910 3b 0a 20 20 20 20 20 20 74 65 73 74 63 61 73 65  ;.      testcase
11920 28 20 72 65 73 32 3d 3d 30 20 26 26 20 70 4f 70  ( res2==0 && pOp
11930 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4e 65 20  ->opcode==OP_Ne 
11940 29 3b 0a 20 20 20 20 20 20 74 65 73 74 63 61 73  );.      testcas
11950 65 28 20 72 65 73 32 3d 3d 31 20 26 26 20 70 4f  e( res2==1 && pO
11960 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4e 65  p->opcode==OP_Ne
11970 20 29 3b 0a 20 20 20 20 20 20 69 66 28 20 28 70   );.      if( (p
11980 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 45  Op->opcode==OP_E
11990 71 29 3d 3d 72 65 73 32 20 29 20 62 72 65 61 6b  q)==res2 ) break
119a0 3b 0a 20 20 20 20 7d 0a 20 20 20 20 6d 65 6d 41  ;.    }.    memA
119b0 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20  boutToChange(p, 
119c0 70 4f 75 74 29 3b 0a 20 20 20 20 4d 65 6d 53 65  pOut);.    MemSe
119d0 74 54 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20  tTypeFlag(pOut, 
119e0 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20 20 20 70 4f  MEM_Int);.    pO
119f0 75 74 2d 3e 75 2e 69 20 3d 20 72 65 73 32 3b 0a  ut->u.i = res2;.
11a00 20 20 20 20 52 45 47 49 53 54 45 52 5f 54 52 41      REGISTER_TRA
11a10 43 45 28 70 4f 70 2d 3e 70 32 2c 20 70 4f 75 74  CE(pOp->p2, pOut
11a20 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  );.  }else{.    
11a30 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28  VdbeBranchTaken(
11a40 72 65 73 32 21 3d 30 2c 20 28 70 4f 70 2d 3e 70  res2!=0, (pOp->p
11a50 35 20 26 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45  5 & SQLITE_NULLE
11a60 51 29 3f 32 3a 33 29 3b 0a 20 20 20 20 69 66 28  Q)?2:3);.    if(
11a70 20 72 65 73 32 20 29 7b 0a 20 20 20 20 20 20 67   res2 ){.      g
11a80 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a  oto jump_to_p2;.
11a90 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61      }.  }.  brea
11aa0 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
11ab0 20 45 6c 73 65 4e 6f 74 45 71 20 2a 20 50 32 20   ElseNotEq * P2 
11ac0 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 69 73  * * *.**.** This
11ad0 20 6f 70 63 6f 64 65 20 6d 75 73 74 20 69 6d 6d   opcode must imm
11ae0 65 64 69 61 74 65 6c 79 20 66 6f 6c 6c 6f 77 20  ediately follow 
11af0 61 6e 20 4f 50 5f 4c 74 20 6f 72 20 4f 50 5f 47  an OP_Lt or OP_G
11b00 74 20 63 6f 6d 70 61 72 69 73 6f 6e 20 6f 70 65  t comparison ope
11b10 72 61 74 6f 72 2e 0a 2a 2a 20 49 66 20 72 65 73  rator..** If res
11b20 75 6c 74 20 6f 66 20 61 6e 20 4f 50 5f 45 71 20  ult of an OP_Eq 
11b30 63 6f 6d 70 61 72 69 73 6f 6e 20 6f 6e 20 74 68  comparison on th
11b40 65 20 73 61 6d 65 20 74 77 6f 20 6f 70 65 72 61  e same two opera
11b50 6e 64 73 0a 2a 2a 20 77 6f 75 6c 64 20 68 61 76  nds.** would hav
11b60 65 20 62 65 20 4e 55 4c 4c 20 6f 72 20 66 61 6c  e be NULL or fal
11b70 73 65 20 28 30 29 2c 20 74 68 65 6e 20 74 68 65  se (0), then the
11b80 6e 20 6a 75 6d 70 20 74 6f 20 50 32 2e 20 0a 2a  n jump to P2. .*
11b90 2a 20 49 66 20 74 68 65 20 72 65 73 75 6c 74 20  * If the result 
11ba0 6f 66 20 61 6e 20 4f 50 5f 45 71 20 63 6f 6d 70  of an OP_Eq comp
11bb0 61 72 69 73 6f 6e 20 6f 6e 20 74 68 65 20 74 77  arison on the tw
11bc0 6f 20 70 72 65 76 69 6f 75 73 20 6f 70 65 72 61  o previous opera
11bd0 6e 64 73 0a 2a 2a 20 77 6f 75 6c 64 20 68 61 76  nds.** would hav
11be0 65 20 62 65 65 6e 20 74 72 75 65 20 28 31 29 2c  e been true (1),
11bf0 20 74 68 65 6e 20 66 61 6c 6c 20 74 68 72 6f 75   then fall throu
11c00 67 68 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 45  gh..*/.case OP_E
11c10 6c 73 65 4e 6f 74 45 71 3a 20 7b 20 20 20 20 20  lseNotEq: {     
11c20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f    /* same as TK_
11c30 45 53 43 41 50 45 2c 20 6a 75 6d 70 20 2a 2f 0a  ESCAPE, jump */.
11c40 20 20 61 73 73 65 72 74 28 20 70 4f 70 3e 61 4f    assert( pOp>aO
11c50 70 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p );.  assert( p
11c60 4f 70 5b 2d 31 5d 2e 6f 70 63 6f 64 65 3d 3d 4f  Op[-1].opcode==O
11c70 50 5f 4c 74 20 7c 7c 20 70 4f 70 5b 2d 31 5d 2e  P_Lt || pOp[-1].
11c80 6f 70 63 6f 64 65 3d 3d 4f 50 5f 47 74 20 29 3b  opcode==OP_Gt );
11c90 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 5b 2d  .  assert( pOp[-
11ca0 31 5d 2e 70 35 20 26 20 53 51 4c 49 54 45 5f 53  1].p5 & SQLITE_S
11cb0 54 4f 52 45 50 32 20 29 3b 0a 20 20 56 64 62 65  TOREP2 );.  Vdbe
11cc0 42 72 61 6e 63 68 54 61 6b 65 6e 28 69 43 6f 6d  BranchTaken(iCom
11cd0 70 61 72 65 21 3d 30 2c 20 32 29 3b 0a 20 20 69  pare!=0, 2);.  i
11ce0 66 28 20 69 43 6f 6d 70 61 72 65 21 3d 30 20 29  f( iCompare!=0 )
11cf0 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32   goto jump_to_p2
11d00 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 2f  ;.  break;.}.../
11d10 2a 20 4f 70 63 6f 64 65 3a 20 50 65 72 6d 75 74  * Opcode: Permut
11d20 61 74 69 6f 6e 20 2a 20 2a 20 2a 20 50 34 20 2a  ation * * * P4 *
11d30 0a 2a 2a 0a 2a 2a 20 53 65 74 20 74 68 65 20 70  .**.** Set the p
11d40 65 72 6d 75 74 61 74 69 6f 6e 20 75 73 65 64 20  ermutation used 
11d50 62 79 20 74 68 65 20 4f 50 5f 43 6f 6d 70 61 72  by the OP_Compar
11d60 65 20 6f 70 65 72 61 74 6f 72 20 69 6e 20 74 68  e operator in th
11d70 65 20 6e 65 78 74 0a 2a 2a 20 69 6e 73 74 72 75  e next.** instru
11d80 63 74 69 6f 6e 2e 20 20 54 68 65 20 70 65 72 6d  ction.  The perm
11d90 75 74 61 74 69 6f 6e 20 69 73 20 73 74 6f 72 65  utation is store
11da0 64 20 69 6e 20 74 68 65 20 50 34 20 6f 70 65 72  d in the P4 oper
11db0 61 6e 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 70  and..**.** The p
11dc0 65 72 6d 75 74 61 74 69 6f 6e 20 69 73 20 6f 6e  ermutation is on
11dd0 6c 79 20 76 61 6c 69 64 20 75 6e 74 69 6c 20 74  ly valid until t
11de0 68 65 20 6e 65 78 74 20 4f 50 5f 43 6f 6d 70 61  he next OP_Compa
11df0 72 65 20 74 68 61 74 20 68 61 73 0a 2a 2a 20 74  re that has.** t
11e00 68 65 20 4f 50 46 4c 41 47 5f 50 45 52 4d 55 54  he OPFLAG_PERMUT
11e10 45 20 62 69 74 20 73 65 74 20 69 6e 20 50 35 2e  E bit set in P5.
11e20 20 54 79 70 69 63 61 6c 6c 79 20 74 68 65 20 4f   Typically the O
11e30 50 5f 50 65 72 6d 75 74 61 74 69 6f 6e 20 73 68  P_Permutation sh
11e40 6f 75 6c 64 20 0a 2a 2a 20 6f 63 63 75 72 20 69  ould .** occur i
11e50 6d 6d 65 64 69 61 74 65 6c 79 20 70 72 69 6f 72  mmediately prior
11e60 20 74 6f 20 74 68 65 20 4f 50 5f 43 6f 6d 70 61   to the OP_Compa
11e70 72 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 66 69  re..**.** The fi
11e80 72 73 74 20 69 6e 74 65 67 65 72 20 69 6e 20 74  rst integer in t
11e90 68 65 20 50 34 20 69 6e 74 65 67 65 72 20 61 72  he P4 integer ar
11ea0 72 61 79 20 69 73 20 74 68 65 20 6c 65 6e 67 74  ray is the lengt
11eb0 68 20 6f 66 20 74 68 65 20 61 72 72 61 79 0a 2a  h of the array.*
11ec0 2a 20 61 6e 64 20 64 6f 65 73 20 6e 6f 74 20 62  * and does not b
11ed0 65 63 6f 6d 65 20 70 61 72 74 20 6f 66 20 74 68  ecome part of th
11ee0 65 20 70 65 72 6d 75 74 61 74 69 6f 6e 2e 0a 2a  e permutation..*
11ef0 2f 0a 63 61 73 65 20 4f 50 5f 50 65 72 6d 75 74  /.case OP_Permut
11f00 61 74 69 6f 6e 3a 20 7b 0a 20 20 61 73 73 65 72  ation: {.  asser
11f10 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d  t( pOp->p4type==
11f20 50 34 5f 49 4e 54 41 52 52 41 59 20 29 3b 0a 20  P4_INTARRAY );. 
11f30 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34   assert( pOp->p4
11f40 2e 61 69 20 29 3b 0a 20 20 61 73 73 65 72 74 28  .ai );.  assert(
11f50 20 70 4f 70 5b 31 5d 2e 6f 70 63 6f 64 65 3d 3d   pOp[1].opcode==
11f60 4f 50 5f 43 6f 6d 70 61 72 65 20 29 3b 0a 20 20  OP_Compare );.  
11f70 61 73 73 65 72 74 28 20 70 4f 70 5b 31 5d 2e 70  assert( pOp[1].p
11f80 35 20 26 20 4f 50 46 4c 41 47 5f 50 45 52 4d 55  5 & OPFLAG_PERMU
11f90 54 45 20 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  TE );.  break;.}
11fa0 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6f 6d  ../* Opcode: Com
11fb0 70 61 72 65 20 50 31 20 50 32 20 50 33 20 50 34  pare P1 P2 P3 P4
11fc0 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a   P5.** Synopsis:
11fd0 20 72 5b 50 31 40 50 33 5d 20 3c 2d 3e 20 72 5b   r[P1@P3] <-> r[
11fe0 50 32 40 50 33 5d 0a 2a 2a 0a 2a 2a 20 43 6f 6d  P2@P3].**.** Com
11ff0 70 61 72 65 20 74 77 6f 20 76 65 63 74 6f 72 73  pare two vectors
12000 20 6f 66 20 72 65 67 69 73 74 65 72 73 20 69 6e   of registers in
12010 20 72 65 67 28 50 31 29 2e 2e 72 65 67 28 50 31   reg(P1)..reg(P1
12020 2b 50 33 2d 31 29 20 28 63 61 6c 6c 20 74 68 69  +P3-1) (call thi
12030 73 0a 2a 2a 20 76 65 63 74 6f 72 20 22 41 22 29  s.** vector "A")
12040 20 61 6e 64 20 69 6e 20 72 65 67 28 50 32 29 2e   and in reg(P2).
12050 2e 72 65 67 28 50 32 2b 50 33 2d 31 29 20 28 22  .reg(P2+P3-1) ("
12060 42 22 29 2e 20 20 53 61 76 65 20 74 68 65 20 72  B").  Save the r
12070 65 73 75 6c 74 20 6f 66 0a 2a 2a 20 74 68 65 20  esult of.** the 
12080 63 6f 6d 70 61 72 69 73 6f 6e 20 66 6f 72 20 75  comparison for u
12090 73 65 20 62 79 20 74 68 65 20 6e 65 78 74 20 4f  se by the next O
120a0 50 5f 4a 75 6d 70 20 69 6e 73 74 72 75 63 74 2e  P_Jump instruct.
120b0 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 20 68 61 73  .**.** If P5 has
120c0 20 74 68 65 20 4f 50 46 4c 41 47 5f 50 45 52 4d   the OPFLAG_PERM
120d0 55 54 45 20 62 69 74 20 73 65 74 2c 20 74 68 65  UTE bit set, the
120e0 6e 20 74 68 65 20 6f 72 64 65 72 20 6f 66 20 63  n the order of c
120f0 6f 6d 70 61 72 69 73 6f 6e 20 69 73 0a 2a 2a 20  omparison is.** 
12100 64 65 74 65 72 6d 69 6e 65 64 20 62 79 20 74 68  determined by th
12110 65 20 6d 6f 73 74 20 72 65 63 65 6e 74 20 4f 50  e most recent OP
12120 5f 50 65 72 6d 75 74 61 74 69 6f 6e 20 6f 70 65  _Permutation ope
12130 72 61 74 6f 72 2e 20 20 49 66 20 74 68 65 0a 2a  rator.  If the.*
12140 2a 20 4f 50 46 4c 41 47 5f 50 45 52 4d 55 54 45  * OPFLAG_PERMUTE
12150 20 62 69 74 20 69 73 20 63 6c 65 61 72 2c 20 74   bit is clear, t
12160 68 65 6e 20 72 65 67 69 73 74 65 72 20 61 72 65  hen register are
12170 20 63 6f 6d 70 61 72 65 64 20 69 6e 20 73 65 71   compared in seq
12180 75 65 6e 74 69 61 6c 0a 2a 2a 20 6f 72 64 65 72  uential.** order
12190 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20  ..**.** P4 is a 
121a0 4b 65 79 49 6e 66 6f 20 73 74 72 75 63 74 75 72  KeyInfo structur
121b0 65 20 74 68 61 74 20 64 65 66 69 6e 65 73 20 63  e that defines c
121c0 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63  ollating sequenc
121d0 65 73 20 61 6e 64 20 73 6f 72 74 0a 2a 2a 20 6f  es and sort.** o
121e0 72 64 65 72 73 20 66 6f 72 20 74 68 65 20 63 6f  rders for the co
121f0 6d 70 61 72 69 73 6f 6e 2e 20 20 54 68 65 20 70  mparison.  The p
12200 65 72 6d 75 74 61 74 69 6f 6e 20 61 70 70 6c 69  ermutation appli
12210 65 73 20 74 6f 20 72 65 67 69 73 74 65 72 73 0a  es to registers.
12220 2a 2a 20 6f 6e 6c 79 2e 20 20 54 68 65 20 4b 65  ** only.  The Ke
12230 79 49 6e 66 6f 20 65 6c 65 6d 65 6e 74 73 20 61  yInfo elements a
12240 72 65 20 75 73 65 64 20 73 65 71 75 65 6e 74 69  re used sequenti
12250 61 6c 6c 79 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  ally..**.** The 
12260 63 6f 6d 70 61 72 69 73 6f 6e 20 69 73 20 61 20  comparison is a 
12270 73 6f 72 74 20 63 6f 6d 70 61 72 69 73 6f 6e 2c  sort comparison,
12280 20 73 6f 20 4e 55 4c 4c 73 20 63 6f 6d 70 61 72   so NULLs compar
12290 65 20 65 71 75 61 6c 2c 0a 2a 2a 20 4e 55 4c 4c  e equal,.** NULL
122a0 73 20 61 72 65 20 6c 65 73 73 20 74 68 61 6e 20  s are less than 
122b0 6e 75 6d 62 65 72 73 2c 20 6e 75 6d 62 65 72 73  numbers, numbers
122c0 20 61 72 65 20 6c 65 73 73 20 74 68 61 6e 20 73   are less than s
122d0 74 72 69 6e 67 73 2c 0a 2a 2a 20 61 6e 64 20 73  trings,.** and s
122e0 74 72 69 6e 67 73 20 61 72 65 20 6c 65 73 73 20  trings are less 
122f0 74 68 61 6e 20 62 6c 6f 62 73 2e 0a 2a 2f 0a 63  than blobs..*/.c
12300 61 73 65 20 4f 50 5f 43 6f 6d 70 61 72 65 3a 20  ase OP_Compare: 
12310 7b 0a 20 20 69 6e 74 20 6e 3b 0a 20 20 69 6e 74  {.  int n;.  int
12320 20 69 3b 0a 20 20 69 6e 74 20 70 31 3b 0a 20 20   i;.  int p1;.  
12330 69 6e 74 20 70 32 3b 0a 20 20 63 6f 6e 73 74 20  int p2;.  const 
12340 4b 65 79 49 6e 66 6f 20 2a 70 4b 65 79 49 6e 66  KeyInfo *pKeyInf
12350 6f 3b 0a 20 20 69 6e 74 20 69 64 78 3b 0a 20 20  o;.  int idx;.  
12360 43 6f 6c 6c 53 65 71 20 2a 70 43 6f 6c 6c 3b 20  CollSeq *pColl; 
12370 20 20 20 2f 2a 20 43 6f 6c 6c 61 74 69 6e 67 20     /* Collating 
12380 73 65 71 75 65 6e 63 65 20 74 6f 20 75 73 65 20  sequence to use 
12390 6f 6e 20 74 68 69 73 20 74 65 72 6d 20 2a 2f 0a  on this term */.
123a0 20 20 69 6e 74 20 62 52 65 76 3b 20 20 20 20 20    int bRev;     
123b0 20 20 20 20 20 2f 2a 20 54 72 75 65 20 66 6f 72       /* True for
123c0 20 44 45 53 43 45 4e 44 49 4e 47 20 73 6f 72 74   DESCENDING sort
123d0 20 6f 72 64 65 72 20 2a 2f 0a 20 20 69 6e 74 20   order */.  int 
123e0 2a 61 50 65 72 6d 75 74 65 3b 20 20 20 20 20 2f  *aPermute;     /
123f0 2a 20 54 68 65 20 70 65 72 6d 75 74 61 74 69 6f  * The permutatio
12400 6e 20 2a 2f 0a 0a 20 20 69 66 28 20 28 70 4f 70  n */..  if( (pOp
12410 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 50 45  ->p5 & OPFLAG_PE
12420 52 4d 55 54 45 29 3d 3d 30 20 29 7b 0a 20 20 20  RMUTE)==0 ){.   
12430 20 61 50 65 72 6d 75 74 65 20 3d 20 30 3b 0a 20   aPermute = 0;. 
12440 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73 73 65   }else{.    asse
12450 72 74 28 20 70 4f 70 3e 61 4f 70 20 29 3b 0a 20  rt( pOp>aOp );. 
12460 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 5b 2d     assert( pOp[-
12470 31 5d 2e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 50 65  1].opcode==OP_Pe
12480 72 6d 75 74 61 74 69 6f 6e 20 29 3b 0a 20 20 20  rmutation );.   
12490 20 61 73 73 65 72 74 28 20 70 4f 70 5b 2d 31 5d   assert( pOp[-1]
124a0 2e 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54 41  .p4type==P4_INTA
124b0 52 52 41 59 20 29 3b 0a 20 20 20 20 61 50 65 72  RRAY );.    aPer
124c0 6d 75 74 65 20 3d 20 70 4f 70 5b 2d 31 5d 2e 70  mute = pOp[-1].p
124d0 34 2e 61 69 20 2b 20 31 3b 0a 20 20 20 20 61 73  4.ai + 1;.    as
124e0 73 65 72 74 28 20 61 50 65 72 6d 75 74 65 21 3d  sert( aPermute!=
124f0 30 20 29 3b 0a 20 20 7d 0a 20 20 6e 20 3d 20 70  0 );.  }.  n = p
12500 4f 70 2d 3e 70 33 3b 0a 20 20 70 4b 65 79 49 6e  Op->p3;.  pKeyIn
12510 66 6f 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 4b 65  fo = pOp->p4.pKe
12520 79 49 6e 66 6f 3b 0a 20 20 61 73 73 65 72 74 28  yInfo;.  assert(
12530 20 6e 3e 30 20 29 3b 0a 20 20 61 73 73 65 72 74   n>0 );.  assert
12540 28 20 70 4b 65 79 49 6e 66 6f 21 3d 30 20 29 3b  ( pKeyInfo!=0 );
12550 0a 20 20 70 31 20 3d 20 70 4f 70 2d 3e 70 31 3b  .  p1 = pOp->p1;
12560 0a 20 20 70 32 20 3d 20 70 4f 70 2d 3e 70 32 3b  .  p2 = pOp->p2;
12570 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44  .#ifdef SQLITE_D
12580 45 42 55 47 0a 20 20 69 66 28 20 61 50 65 72 6d  EBUG.  if( aPerm
12590 75 74 65 20 29 7b 0a 20 20 20 20 69 6e 74 20 6b  ute ){.    int k
125a0 2c 20 6d 78 20 3d 20 30 3b 0a 20 20 20 20 66 6f  , mx = 0;.    fo
125b0 72 28 6b 3d 30 3b 20 6b 3c 6e 3b 20 6b 2b 2b 29  r(k=0; k<n; k++)
125c0 20 69 66 28 20 61 50 65 72 6d 75 74 65 5b 6b 5d   if( aPermute[k]
125d0 3e 6d 78 20 29 20 6d 78 20 3d 20 61 50 65 72 6d  >mx ) mx = aPerm
125e0 75 74 65 5b 6b 5d 3b 0a 20 20 20 20 61 73 73 65  ute[k];.    asse
125f0 72 74 28 20 70 31 3e 30 20 26 26 20 70 31 2b 6d  rt( p1>0 && p1+m
12600 78 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20  x<=(p->nMem+1 - 
12610 70 2d 3e 6e 43 75 72 73 6f 72 29 2b 31 20 29 3b  p->nCursor)+1 );
12620 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 32 3e  .    assert( p2>
12630 30 20 26 26 20 70 32 2b 6d 78 3c 3d 28 70 2d 3e  0 && p2+mx<=(p->
12640 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72  nMem+1 - p->nCur
12650 73 6f 72 29 2b 31 20 29 3b 0a 20 20 7d 65 6c 73  sor)+1 );.  }els
12660 65 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  e{.    assert( p
12670 31 3e 30 20 26 26 20 70 31 2b 6e 3c 3d 28 70 2d  1>0 && p1+n<=(p-
12680 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75  >nMem+1 - p->nCu
12690 72 73 6f 72 29 2b 31 20 29 3b 0a 20 20 20 20 61  rsor)+1 );.    a
126a0 73 73 65 72 74 28 20 70 32 3e 30 20 26 26 20 70  ssert( p2>0 && p
126b0 32 2b 6e 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20  2+n<=(p->nMem+1 
126c0 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29 2b 31 20  - p->nCursor)+1 
126d0 29 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 20 2f 2a  );.  }.#endif /*
126e0 20 53 51 4c 49 54 45 5f 44 45 42 55 47 20 2a 2f   SQLITE_DEBUG */
126f0 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 6e 3b  .  for(i=0; i<n;
12700 20 69 2b 2b 29 7b 0a 20 20 20 20 69 64 78 20 3d   i++){.    idx =
12710 20 61 50 65 72 6d 75 74 65 20 3f 20 61 50 65 72   aPermute ? aPer
12720 6d 75 74 65 5b 69 5d 20 3a 20 69 3b 0a 20 20 20  mute[i] : i;.   
12730 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61   assert( memIsVa
12740 6c 69 64 28 26 61 4d 65 6d 5b 70 31 2b 69 64 78  lid(&aMem[p1+idx
12750 5d 29 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74  ]) );.    assert
12760 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 26 61 4d  ( memIsValid(&aM
12770 65 6d 5b 70 32 2b 69 64 78 5d 29 20 29 3b 0a 20  em[p2+idx]) );. 
12780 20 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43     REGISTER_TRAC
12790 45 28 70 31 2b 69 64 78 2c 20 26 61 4d 65 6d 5b  E(p1+idx, &aMem[
127a0 70 31 2b 69 64 78 5d 29 3b 0a 20 20 20 20 52 45  p1+idx]);.    RE
127b0 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 32 2b  GISTER_TRACE(p2+
127c0 69 64 78 2c 20 26 61 4d 65 6d 5b 70 32 2b 69 64  idx, &aMem[p2+id
127d0 78 5d 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  x]);.    assert(
127e0 20 69 3c 70 4b 65 79 49 6e 66 6f 2d 3e 6e 4b 65   i<pKeyInfo->nKe
127f0 79 46 69 65 6c 64 20 29 3b 0a 20 20 20 20 70 43  yField );.    pC
12800 6f 6c 6c 20 3d 20 70 4b 65 79 49 6e 66 6f 2d 3e  oll = pKeyInfo->
12810 61 43 6f 6c 6c 5b 69 5d 3b 0a 20 20 20 20 62 52  aColl[i];.    bR
12820 65 76 20 3d 20 28 70 4b 65 79 49 6e 66 6f 2d 3e  ev = (pKeyInfo->
12830 61 53 6f 72 74 46 6c 61 67 73 5b 69 5d 20 26 20  aSortFlags[i] & 
12840 4b 45 59 49 4e 46 4f 5f 4f 52 44 45 52 5f 44 45  KEYINFO_ORDER_DE
12850 53 43 29 3b 0a 20 20 20 20 69 43 6f 6d 70 61 72  SC);.    iCompar
12860 65 20 3d 20 73 71 6c 69 74 65 33 4d 65 6d 43 6f  e = sqlite3MemCo
12870 6d 70 61 72 65 28 26 61 4d 65 6d 5b 70 31 2b 69  mpare(&aMem[p1+i
12880 64 78 5d 2c 20 26 61 4d 65 6d 5b 70 32 2b 69 64  dx], &aMem[p2+id
12890 78 5d 2c 20 70 43 6f 6c 6c 29 3b 0a 20 20 20 20  x], pColl);.    
128a0 69 66 28 20 69 43 6f 6d 70 61 72 65 20 29 7b 0a  if( iCompare ){.
128b0 20 20 20 20 20 20 69 66 28 20 28 70 4b 65 79 49        if( (pKeyI
128c0 6e 66 6f 2d 3e 61 53 6f 72 74 46 6c 61 67 73 5b  nfo->aSortFlags[
128d0 69 5d 20 26 20 4b 45 59 49 4e 46 4f 5f 4f 52 44  i] & KEYINFO_ORD
128e0 45 52 5f 42 49 47 4e 55 4c 4c 29 20 0a 20 20 20  ER_BIGNULL) .   
128f0 20 20 20 20 26 26 20 28 28 61 4d 65 6d 5b 70 31      && ((aMem[p1
12900 2b 69 64 78 5d 2e 66 6c 61 67 73 20 26 20 4d 45  +idx].flags & ME
12910 4d 5f 4e 75 6c 6c 29 20 7c 7c 20 28 61 4d 65 6d  M_Null) || (aMem
12920 5b 70 32 2b 69 64 78 5d 2e 66 6c 61 67 73 20 26  [p2+idx].flags &
12930 20 4d 45 4d 5f 4e 75 6c 6c 29 29 0a 20 20 20 20   MEM_Null)).    
12940 20 20 29 7b 0a 20 20 20 20 20 20 20 20 69 43 6f    ){.        iCo
12950 6d 70 61 72 65 20 3d 20 2d 69 43 6f 6d 70 61 72  mpare = -iCompar
12960 65 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20  e;.      }.     
12970 20 69 66 28 20 62 52 65 76 20 29 20 69 43 6f 6d   if( bRev ) iCom
12980 70 61 72 65 20 3d 20 2d 69 43 6f 6d 70 61 72 65  pare = -iCompare
12990 3b 0a 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20  ;.      break;. 
129a0 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b     }.  }.  break
129b0 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
129c0 4a 75 6d 70 20 50 31 20 50 32 20 50 33 20 2a 20  Jump P1 P2 P3 * 
129d0 2a 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70 20 74 6f 20  *.**.** Jump to 
129e0 74 68 65 20 69 6e 73 74 72 75 63 74 69 6f 6e 20  the instruction 
129f0 61 74 20 61 64 64 72 65 73 73 20 50 31 2c 20 50  at address P1, P
12a00 32 2c 20 6f 72 20 50 33 20 64 65 70 65 6e 64 69  2, or P3 dependi
12a10 6e 67 20 6f 6e 20 77 68 65 74 68 65 72 0a 2a 2a  ng on whether.**
12a20 20 69 6e 20 74 68 65 20 6d 6f 73 74 20 72 65 63   in the most rec
12a30 65 6e 74 20 4f 50 5f 43 6f 6d 70 61 72 65 20 69  ent OP_Compare i
12a40 6e 73 74 72 75 63 74 69 6f 6e 20 74 68 65 20 50  nstruction the P
12a50 31 20 76 65 63 74 6f 72 20 77 61 73 20 6c 65 73  1 vector was les
12a60 73 20 74 68 61 6e 0a 2a 2a 20 65 71 75 61 6c 20  s than.** equal 
12a70 74 6f 2c 20 6f 72 20 67 72 65 61 74 65 72 20 74  to, or greater t
12a80 68 61 6e 20 74 68 65 20 50 32 20 76 65 63 74 6f  han the P2 vecto
12a90 72 2c 20 72 65 73 70 65 63 74 69 76 65 6c 79 2e  r, respectively.
12aa0 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4a 75 6d 70  .*/.case OP_Jump
12ab0 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20  : {             
12ac0 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 69 66 28  /* jump */.  if(
12ad0 20 69 43 6f 6d 70 61 72 65 3c 30 20 29 7b 0a 20   iCompare<0 ){. 
12ae0 20 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b     VdbeBranchTak
12af0 65 6e 28 30 2c 34 29 3b 20 70 4f 70 20 3d 20 26  en(0,4); pOp = &
12b00 61 4f 70 5b 70 4f 70 2d 3e 70 31 20 2d 20 31 5d  aOp[pOp->p1 - 1]
12b10 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 69 43  ;.  }else if( iC
12b20 6f 6d 70 61 72 65 3d 3d 30 20 29 7b 0a 20 20 20  ompare==0 ){.   
12b30 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e   VdbeBranchTaken
12b40 28 31 2c 34 29 3b 20 70 4f 70 20 3d 20 26 61 4f  (1,4); pOp = &aO
12b50 70 5b 70 4f 70 2d 3e 70 32 20 2d 20 31 5d 3b 0a  p[pOp->p2 - 1];.
12b60 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 56 64 62    }else{.    Vdb
12b70 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 32 2c 34  eBranchTaken(2,4
12b80 29 3b 20 70 4f 70 20 3d 20 26 61 4f 70 5b 70 4f  ); pOp = &aOp[pO
12b90 70 2d 3e 70 33 20 2d 20 31 5d 3b 0a 20 20 7d 0a  p->p3 - 1];.  }.
12ba0 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
12bb0 70 63 6f 64 65 3a 20 41 6e 64 20 50 31 20 50 32  pcode: And P1 P2
12bc0 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70   P3 * *.** Synop
12bd0 73 69 73 3a 20 72 5b 50 33 5d 3d 28 72 5b 50 31  sis: r[P3]=(r[P1
12be0 5d 20 26 26 20 72 5b 50 32 5d 29 0a 2a 2a 0a 2a  ] && r[P2]).**.*
12bf0 2a 20 54 61 6b 65 20 74 68 65 20 6c 6f 67 69 63  * Take the logic
12c00 61 6c 20 41 4e 44 20 6f 66 20 74 68 65 20 76 61  al AND of the va
12c10 6c 75 65 73 20 69 6e 20 72 65 67 69 73 74 65 72  lues in register
12c20 73 20 50 31 20 61 6e 64 20 50 32 20 61 6e 64 0a  s P1 and P2 and.
12c30 2a 2a 20 77 72 69 74 65 20 74 68 65 20 72 65 73  ** write the res
12c40 75 6c 74 20 69 6e 74 6f 20 72 65 67 69 73 74 65  ult into registe
12c50 72 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 65  r P3..**.** If e
12c60 69 74 68 65 72 20 50 31 20 6f 72 20 50 32 20 69  ither P1 or P2 i
12c70 73 20 30 20 28 66 61 6c 73 65 29 20 74 68 65 6e  s 0 (false) then
12c80 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 30   the result is 0
12c90 20 65 76 65 6e 20 69 66 0a 2a 2a 20 74 68 65 20   even if.** the 
12ca0 6f 74 68 65 72 20 69 6e 70 75 74 20 69 73 20 4e  other input is N
12cb0 55 4c 4c 2e 20 20 41 20 4e 55 4c 4c 20 61 6e 64  ULL.  A NULL and
12cc0 20 74 72 75 65 20 6f 72 20 74 77 6f 20 4e 55 4c   true or two NUL
12cd0 4c 73 20 67 69 76 65 0a 2a 2a 20 61 20 4e 55 4c  Ls give.** a NUL
12ce0 4c 20 6f 75 74 70 75 74 2e 0a 2a 2f 0a 2f 2a 20  L output..*/./* 
12cf0 4f 70 63 6f 64 65 3a 20 4f 72 20 50 31 20 50 32  Opcode: Or P1 P2
12d00 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70   P3 * *.** Synop
12d10 73 69 73 3a 20 72 5b 50 33 5d 3d 28 72 5b 50 31  sis: r[P3]=(r[P1
12d20 5d 20 7c 7c 20 72 5b 50 32 5d 29 0a 2a 2a 0a 2a  ] || r[P2]).**.*
12d30 2a 20 54 61 6b 65 20 74 68 65 20 6c 6f 67 69 63  * Take the logic
12d40 61 6c 20 4f 52 20 6f 66 20 74 68 65 20 76 61 6c  al OR of the val
12d50 75 65 73 20 69 6e 20 72 65 67 69 73 74 65 72 20  ues in register 
12d60 50 31 20 61 6e 64 20 50 32 20 61 6e 64 0a 2a 2a  P1 and P2 and.**
12d70 20 73 74 6f 72 65 20 74 68 65 20 61 6e 73 77 65   store the answe
12d80 72 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33  r in register P3
12d90 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 65 69 74 68 65  ..**.** If eithe
12da0 72 20 50 31 20 6f 72 20 50 32 20 69 73 20 6e 6f  r P1 or P2 is no
12db0 6e 7a 65 72 6f 20 28 74 72 75 65 29 20 74 68 65  nzero (true) the
12dc0 6e 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20  n the result is 
12dd0 31 20 28 74 72 75 65 29 0a 2a 2a 20 65 76 65 6e  1 (true).** even
12de0 20 69 66 20 74 68 65 20 6f 74 68 65 72 20 69 6e   if the other in
12df0 70 75 74 20 69 73 20 4e 55 4c 4c 2e 20 20 41 20  put is NULL.  A 
12e00 4e 55 4c 4c 20 61 6e 64 20 66 61 6c 73 65 20 6f  NULL and false o
12e10 72 20 74 77 6f 20 4e 55 4c 4c 73 0a 2a 2a 20 67  r two NULLs.** g
12e20 69 76 65 20 61 20 4e 55 4c 4c 20 6f 75 74 70 75  ive a NULL outpu
12e30 74 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 41 6e  t..*/.case OP_An
12e40 64 3a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  d:              
12e50 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 41 4e  /* same as TK_AN
12e60 44 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74  D, in1, in2, out
12e70 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 4f 72 3a  3 */.case OP_Or:
12e80 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f   {             /
12e90 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 4f 52 2c  * same as TK_OR,
12ea0 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20   in1, in2, out3 
12eb0 2a 2f 0a 20 20 69 6e 74 20 76 31 3b 20 20 20 20  */.  int v1;    
12ec0 2f 2a 20 4c 65 66 74 20 6f 70 65 72 61 6e 64 3a  /* Left operand:
12ed0 20 20 30 3d 3d 46 41 4c 53 45 2c 20 31 3d 3d 54    0==FALSE, 1==T
12ee0 52 55 45 2c 20 32 3d 3d 55 4e 4b 4e 4f 57 4e 20  RUE, 2==UNKNOWN 
12ef0 6f 72 20 4e 55 4c 4c 20 2a 2f 0a 20 20 69 6e 74  or NULL */.  int
12f00 20 76 32 3b 20 20 20 20 2f 2a 20 52 69 67 68 74   v2;    /* Right
12f10 20 6f 70 65 72 61 6e 64 3a 20 30 3d 3d 46 41 4c   operand: 0==FAL
12f20 53 45 2c 20 31 3d 3d 54 52 55 45 2c 20 32 3d 3d  SE, 1==TRUE, 2==
12f30 55 4e 4b 4e 4f 57 4e 20 6f 72 20 4e 55 4c 4c 20  UNKNOWN or NULL 
12f40 2a 2f 0a 0a 20 20 76 31 20 3d 20 73 71 6c 69 74  */..  v1 = sqlit
12f50 65 33 56 64 62 65 42 6f 6f 6c 65 61 6e 56 61 6c  e3VdbeBooleanVal
12f60 75 65 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31  ue(&aMem[pOp->p1
12f70 5d 2c 20 32 29 3b 0a 20 20 76 32 20 3d 20 73 71  ], 2);.  v2 = sq
12f80 6c 69 74 65 33 56 64 62 65 42 6f 6f 6c 65 61 6e  lite3VdbeBoolean
12f90 56 61 6c 75 65 28 26 61 4d 65 6d 5b 70 4f 70 2d  Value(&aMem[pOp-
12fa0 3e 70 32 5d 2c 20 32 29 3b 0a 20 20 69 66 28 20  >p2], 2);.  if( 
12fb0 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  pOp->opcode==OP_
12fc0 41 6e 64 20 29 7b 0a 20 20 20 20 73 74 61 74 69  And ){.    stati
12fd0 63 20 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64  c const unsigned
12fe0 20 63 68 61 72 20 61 6e 64 5f 6c 6f 67 69 63 5b   char and_logic[
12ff0 5d 20 3d 20 7b 20 30 2c 20 30 2c 20 30 2c 20 30  ] = { 0, 0, 0, 0
13000 2c 20 31 2c 20 32 2c 20 30 2c 20 32 2c 20 32 20  , 1, 2, 0, 2, 2 
13010 7d 3b 0a 20 20 20 20 76 31 20 3d 20 61 6e 64 5f  };.    v1 = and_
13020 6c 6f 67 69 63 5b 76 31 2a 33 2b 76 32 5d 3b 0a  logic[v1*3+v2];.
13030 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 73 74 61    }else{.    sta
13040 74 69 63 20 63 6f 6e 73 74 20 75 6e 73 69 67 6e  tic const unsign
13050 65 64 20 63 68 61 72 20 6f 72 5f 6c 6f 67 69 63  ed char or_logic
13060 5b 5d 20 3d 20 7b 20 30 2c 20 31 2c 20 32 2c 20  [] = { 0, 1, 2, 
13070 31 2c 20 31 2c 20 31 2c 20 32 2c 20 31 2c 20 32  1, 1, 1, 2, 1, 2
13080 20 7d 3b 0a 20 20 20 20 76 31 20 3d 20 6f 72 5f   };.    v1 = or_
13090 6c 6f 67 69 63 5b 76 31 2a 33 2b 76 32 5d 3b 0a  logic[v1*3+v2];.
130a0 20 20 7d 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d    }.  pOut = &aM
130b0 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 69  em[pOp->p3];.  i
130c0 66 28 20 76 31 3d 3d 32 20 29 7b 0a 20 20 20 20  f( v1==2 ){.    
130d0 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70  MemSetTypeFlag(p
130e0 4f 75 74 2c 20 4d 45 4d 5f 4e 75 6c 6c 29 3b 0a  Out, MEM_Null);.
130f0 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70 4f 75    }else{.    pOu
13100 74 2d 3e 75 2e 69 20 3d 20 76 31 3b 0a 20 20 20  t->u.i = v1;.   
13110 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28   MemSetTypeFlag(
13120 70 4f 75 74 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a  pOut, MEM_Int);.
13130 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
13140 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 73 54 72 75  /* Opcode: IsTru
13150 65 20 50 31 20 50 32 20 50 33 20 50 34 20 2a 0a  e P1 P2 P3 P4 *.
13160 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50  ** Synopsis: r[P
13170 32 5d 20 3d 20 63 6f 61 6c 65 73 63 65 28 72 5b  2] = coalesce(r[
13180 50 31 5d 3d 3d 54 52 55 45 2c 50 33 29 20 5e 20  P1]==TRUE,P3) ^ 
13190 50 34 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70  P4.**.** This op
131a0 63 6f 64 65 20 69 6d 70 6c 65 6d 65 6e 74 73 20  code implements 
131b0 74 68 65 20 49 53 20 54 52 55 45 2c 20 49 53 20  the IS TRUE, IS 
131c0 46 41 4c 53 45 2c 20 49 53 20 4e 4f 54 20 54 52  FALSE, IS NOT TR
131d0 55 45 2c 20 61 6e 64 0a 2a 2a 20 49 53 20 4e 4f  UE, and.** IS NO
131e0 54 20 46 41 4c 53 45 20 6f 70 65 72 61 74 6f 72  T FALSE operator
131f0 73 2e 0a 2a 2a 0a 2a 2a 20 49 6e 74 65 72 70 72  s..**.** Interpr
13200 65 74 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20  et the value in 
13210 72 65 67 69 73 74 65 72 20 50 31 20 61 73 20 61  register P1 as a
13220 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 2e 20   boolean value. 
13230 20 53 74 6f 72 65 20 74 68 61 74 0a 2a 2a 20 62   Store that.** b
13240 6f 6f 6c 65 61 6e 20 28 61 20 30 20 6f 72 20 31  oolean (a 0 or 1
13250 29 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32  ) in register P2
13260 2e 20 20 4f 72 20 69 66 20 74 68 65 20 76 61 6c  .  Or if the val
13270 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
13280 31 20 69 73 20 0a 2a 2a 20 4e 55 4c 4c 2c 20 74  1 is .** NULL, t
13290 68 65 6e 20 74 68 65 20 50 33 20 69 73 20 73 74  hen the P3 is st
132a0 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74 65 72  ored in register
132b0 20 50 32 2e 20 20 49 6e 76 65 72 74 20 74 68 65   P2.  Invert the
132c0 20 61 6e 73 77 65 72 20 69 66 20 50 34 0a 2a 2a   answer if P4.**
132d0 20 69 73 20 31 2e 0a 2a 2a 0a 2a 2a 20 54 68 65   is 1..**.** The
132e0 20 6c 6f 67 69 63 20 69 73 20 73 75 6d 6d 61 72   logic is summar
132f0 69 7a 65 64 20 6c 69 6b 65 20 74 68 69 73 3a 0a  ized like this:.
13300 2a 2a 0a 2a 2a 20 3c 75 6c 3e 20 0a 2a 2a 20 3c  **.** <ul> .** <
13310 6c 69 3e 20 49 66 20 50 33 3d 3d 30 20 61 6e 64  li> If P3==0 and
13320 20 50 34 3d 3d 30 20 20 74 68 65 6e 20 20 72 5b   P4==0  then  r[
13330 50 32 5d 20 3a 3d 20 72 5b 50 31 5d 20 49 53 20  P2] := r[P1] IS 
13340 54 52 55 45 0a 2a 2a 20 3c 6c 69 3e 20 49 66 20  TRUE.** <li> If 
13350 50 33 3d 3d 31 20 61 6e 64 20 50 34 3d 3d 31 20  P3==1 and P4==1 
13360 20 74 68 65 6e 20 20 72 5b 50 32 5d 20 3a 3d 20   then  r[P2] := 
13370 72 5b 50 31 5d 20 49 53 20 46 41 4c 53 45 0a 2a  r[P1] IS FALSE.*
13380 2a 20 3c 6c 69 3e 20 49 66 20 50 33 3d 3d 30 20  * <li> If P3==0 
13390 61 6e 64 20 50 34 3d 3d 31 20 20 74 68 65 6e 20  and P4==1  then 
133a0 20 72 5b 50 32 5d 20 3a 3d 20 72 5b 50 31 5d 20   r[P2] := r[P1] 
133b0 49 53 20 4e 4f 54 20 54 52 55 45 0a 2a 2a 20 3c  IS NOT TRUE.** <
133c0 6c 69 3e 20 49 66 20 50 33 3d 3d 31 20 61 6e 64  li> If P3==1 and
133d0 20 50 34 3d 3d 30 20 20 74 68 65 6e 20 20 72 5b   P4==0  then  r[
133e0 50 32 5d 20 3a 3d 20 72 5b 50 31 5d 20 49 53 20  P2] := r[P1] IS 
133f0 4e 4f 54 20 46 41 4c 53 45 0a 2a 2a 20 3c 2f 75  NOT FALSE.** </u
13400 6c 3e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 73  l>.*/.case OP_Is
13410 54 72 75 65 3a 20 7b 20 20 20 20 20 20 20 20 20  True: {         
13420 20 20 20 20 20 20 2f 2a 20 69 6e 31 2c 20 6f 75        /* in1, ou
13430 74 32 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20  t2 */.  assert( 
13440 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f  pOp->p4type==P4_
13450 49 4e 54 33 32 20 29 3b 0a 20 20 61 73 73 65 72  INT32 );.  asser
13460 74 28 20 70 4f 70 2d 3e 70 34 2e 69 3d 3d 30 20  t( pOp->p4.i==0 
13470 7c 7c 20 70 4f 70 2d 3e 70 34 2e 69 3d 3d 31 20  || pOp->p4.i==1 
13480 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  );.  assert( pOp
13490 2d 3e 70 33 3d 3d 30 20 7c 7c 20 70 4f 70 2d 3e  ->p3==0 || pOp->
134a0 70 33 3d 3d 31 20 29 3b 0a 20 20 73 71 6c 69 74  p3==1 );.  sqlit
134b0 65 33 56 64 62 65 4d 65 6d 53 65 74 49 6e 74 36  e3VdbeMemSetInt6
134c0 34 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d  4(&aMem[pOp->p2]
134d0 2c 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  ,.      sqlite3V
134e0 64 62 65 42 6f 6f 6c 65 61 6e 56 61 6c 75 65 28  dbeBooleanValue(
134f0 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 2c 20  &aMem[pOp->p1], 
13500 70 4f 70 2d 3e 70 33 29 20 5e 20 70 4f 70 2d 3e  pOp->p3) ^ pOp->
13510 70 34 2e 69 29 3b 0a 20 20 62 72 65 61 6b 3b 0a  p4.i);.  break;.
13520 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 6f  }../* Opcode: No
13530 74 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  t P1 P2 * * *.**
13540 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d   Synopsis: r[P2]
13550 3d 20 21 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 49  = !r[P1].**.** I
13560 6e 74 65 72 70 72 65 74 20 74 68 65 20 76 61 6c  nterpret the val
13570 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
13580 31 20 61 73 20 61 20 62 6f 6f 6c 65 61 6e 20 76  1 as a boolean v
13590 61 6c 75 65 2e 20 20 53 74 6f 72 65 20 74 68 65  alue.  Store the
135a0 0a 2a 2a 20 62 6f 6f 6c 65 61 6e 20 63 6f 6d 70  .** boolean comp
135b0 6c 65 6d 65 6e 74 20 69 6e 20 72 65 67 69 73 74  lement in regist
135c0 65 72 20 50 32 2e 20 20 49 66 20 74 68 65 20 76  er P2.  If the v
135d0 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72  alue in register
135e0 20 50 31 20 69 73 20 0a 2a 2a 20 4e 55 4c 4c 2c   P1 is .** NULL,
135f0 20 74 68 65 6e 20 61 20 4e 55 4c 4c 20 69 73 20   then a NULL is 
13600 73 74 6f 72 65 64 20 69 6e 20 50 32 2e 0a 2a 2f  stored in P2..*/
13610 0a 63 61 73 65 20 4f 50 5f 4e 6f 74 3a 20 7b 20  .case OP_Not: { 
13620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
13630 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 4e 4f 54  * same as TK_NOT
13640 2c 20 69 6e 31 2c 20 6f 75 74 32 20 2a 2f 0a 20  , in1, out2 */. 
13650 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn1 = &aMem[pO
13660 70 2d 3e 70 31 5d 3b 0a 20 20 70 4f 75 74 20 3d  p->p1];.  pOut =
13670 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b   &aMem[pOp->p2];
13680 0a 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c  .  if( (pIn1->fl
13690 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29 3d  ags & MEM_Null)=
136a0 3d 30 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  =0 ){.    sqlite
136b0 33 56 64 62 65 4d 65 6d 53 65 74 49 6e 74 36 34  3VdbeMemSetInt64
136c0 28 70 4f 75 74 2c 20 21 73 71 6c 69 74 65 33 56  (pOut, !sqlite3V
136d0 64 62 65 42 6f 6f 6c 65 61 6e 56 61 6c 75 65 28  dbeBooleanValue(
136e0 70 49 6e 31 2c 30 29 29 3b 0a 20 20 7d 65 6c 73  pIn1,0));.  }els
136f0 65 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  e{.    sqlite3Vd
13700 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 4f 75  beMemSetNull(pOu
13710 74 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  t);.  }.  break;
13720 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 42  .}../* Opcode: B
13730 69 74 4e 6f 74 20 50 31 20 50 32 20 2a 20 2a 20  itNot P1 P2 * * 
13740 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72  *.** Synopsis: r
13750 5b 50 32 5d 3d 20 7e 72 5b 50 31 5d 0a 2a 2a 0a  [P2]= ~r[P1].**.
13760 2a 2a 20 49 6e 74 65 72 70 72 65 74 20 74 68 65  ** Interpret the
13770 20 63 6f 6e 74 65 6e 74 20 6f 66 20 72 65 67 69   content of regi
13780 73 74 65 72 20 50 31 20 61 73 20 61 6e 20 69 6e  ster P1 as an in
13790 74 65 67 65 72 2e 20 20 53 74 6f 72 65 20 74 68  teger.  Store th
137a0 65 0a 2a 2a 20 6f 6e 65 73 2d 63 6f 6d 70 6c 65  e.** ones-comple
137b0 6d 65 6e 74 20 6f 66 20 74 68 65 20 50 31 20 76  ment of the P1 v
137c0 61 6c 75 65 20 69 6e 74 6f 20 72 65 67 69 73 74  alue into regist
137d0 65 72 20 50 32 2e 20 20 49 66 20 50 31 20 68 6f  er P2.  If P1 ho
137e0 6c 64 73 0a 2a 2a 20 61 20 4e 55 4c 4c 20 74 68  lds.** a NULL th
137f0 65 6e 20 73 74 6f 72 65 20 61 20 4e 55 4c 4c 20  en store a NULL 
13800 69 6e 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f  in P2..*/.case O
13810 50 5f 42 69 74 4e 6f 74 3a 20 7b 20 20 20 20 20  P_BitNot: {     
13820 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20          /* same 
13830 61 73 20 54 4b 5f 42 49 54 4e 4f 54 2c 20 69 6e  as TK_BITNOT, in
13840 31 2c 20 6f 75 74 32 20 2a 2f 0a 20 20 70 49 6e  1, out2 */.  pIn
13850 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  1 = &aMem[pOp->p
13860 31 5d 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d  1];.  pOut = &aM
13870 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 73  em[pOp->p2];.  s
13880 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74  qlite3VdbeMemSet
13890 4e 75 6c 6c 28 70 4f 75 74 29 3b 0a 20 20 69 66  Null(pOut);.  if
138a0 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26  ( (pIn1->flags &
138b0 20 4d 45 4d 5f 4e 75 6c 6c 29 3d 3d 30 20 29 7b   MEM_Null)==0 ){
138c0 0a 20 20 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73  .    pOut->flags
138d0 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20 20 20   = MEM_Int;.    
138e0 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 7e 73 71 6c  pOut->u.i = ~sql
138f0 69 74 65 33 56 64 62 65 49 6e 74 56 61 6c 75 65  ite3VdbeIntValue
13900 28 70 49 6e 31 29 3b 0a 20 20 7d 0a 20 20 62 72  (pIn1);.  }.  br
13910 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
13920 65 3a 20 4f 6e 63 65 20 50 31 20 50 32 20 2a 20  e: Once P1 P2 * 
13930 2a 20 2a 0a 2a 2a 0a 2a 2a 20 46 61 6c 6c 20 74  * *.**.** Fall t
13940 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6e 65  hrough to the ne
13950 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 74  xt instruction t
13960 68 65 20 66 69 72 73 74 20 74 69 6d 65 20 74 68  he first time th
13970 69 73 20 6f 70 63 6f 64 65 20 69 73 0a 2a 2a 20  is opcode is.** 
13980 65 6e 63 6f 75 6e 74 65 72 65 64 20 6f 6e 20 65  encountered on e
13990 61 63 68 20 69 6e 76 6f 63 61 74 69 6f 6e 20 6f  ach invocation o
139a0 66 20 74 68 65 20 62 79 74 65 2d 63 6f 64 65 20  f the byte-code 
139b0 70 72 6f 67 72 61 6d 2e 20 20 4a 75 6d 70 20 74  program.  Jump t
139c0 6f 20 50 32 0a 2a 2a 20 6f 6e 20 74 68 65 20 73  o P2.** on the s
139d0 65 63 6f 6e 64 20 61 6e 64 20 61 6c 6c 20 73 75  econd and all su
139e0 62 73 65 71 75 65 6e 74 20 65 6e 63 6f 75 6e 74  bsequent encount
139f0 65 72 73 20 64 75 72 69 6e 67 20 74 68 65 20 73  ers during the s
13a00 61 6d 65 20 69 6e 76 6f 63 61 74 69 6f 6e 2e 0a  ame invocation..
13a10 2a 2a 0a 2a 2a 20 54 6f 70 2d 6c 65 76 65 6c 20  **.** Top-level 
13a20 70 72 6f 67 72 61 6d 73 20 64 65 74 65 72 6d 69  programs determi
13a30 6e 65 20 66 69 72 73 74 20 69 6e 76 6f 63 61 74  ne first invocat
13a40 69 6f 6e 20 62 79 20 63 6f 6d 70 61 72 69 6e 67  ion by comparing
13a50 20 74 68 65 20 50 31 0a 2a 2a 20 6f 70 65 72 61   the P1.** opera
13a60 6e 64 20 61 67 61 69 6e 73 74 20 74 68 65 20 50  nd against the P
13a70 31 20 6f 70 65 72 61 6e 64 20 6f 6e 20 74 68 65  1 operand on the
13a80 20 4f 50 5f 49 6e 69 74 20 6f 70 63 6f 64 65 20   OP_Init opcode 
13a90 61 74 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67  at the beginning
13aa0 0a 2a 2a 20 6f 66 20 74 68 65 20 70 72 6f 67 72  .** of the progr
13ab0 61 6d 2e 20 20 49 66 20 74 68 65 20 50 31 20 76  am.  If the P1 v
13ac0 61 6c 75 65 73 20 64 69 66 66 65 72 2c 20 74 68  alues differ, th
13ad0 65 6e 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 20  en fall through 
13ae0 61 6e 64 20 6d 61 6b 65 0a 2a 2a 20 74 68 65 20  and make.** the 
13af0 50 31 20 6f 66 20 74 68 69 73 20 6f 70 63 6f 64  P1 of this opcod
13b00 65 20 65 71 75 61 6c 20 74 6f 20 74 68 65 20 50  e equal to the P
13b10 31 20 6f 66 20 4f 50 5f 49 6e 69 74 2e 20 20 49  1 of OP_Init.  I
13b20 66 20 50 31 20 76 61 6c 75 65 73 20 61 72 65 0a  f P1 values are.
13b30 2a 2a 20 74 68 65 20 73 61 6d 65 20 74 68 65 6e  ** the same then
13b40 20 74 61 6b 65 20 74 68 65 20 6a 75 6d 70 2e 0a   take the jump..
13b50 2a 2a 0a 2a 2a 20 46 6f 72 20 73 75 62 70 72 6f  **.** For subpro
13b60 67 72 61 6d 73 2c 20 74 68 65 72 65 20 69 73 20  grams, there is 
13b70 61 20 62 69 74 6d 61 73 6b 20 69 6e 20 74 68 65  a bitmask in the
13b80 20 56 64 62 65 46 72 61 6d 65 20 74 68 61 74 20   VdbeFrame that 
13b90 64 65 74 65 72 6d 69 6e 65 73 0a 2a 2a 20 77 68  determines.** wh
13ba0 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 74 68 65  ether or not the
13bb0 20 6a 75 6d 70 20 73 68 6f 75 6c 64 20 62 65 20   jump should be 
13bc0 74 61 6b 65 6e 2e 20 20 54 68 65 20 62 69 74 6d  taken.  The bitm
13bd0 61 73 6b 20 69 73 20 6e 65 63 65 73 73 61 72 79  ask is necessary
13be0 0a 2a 2a 20 62 65 63 61 75 73 65 20 74 68 65 20  .** because the 
13bf0 73 65 6c 66 2d 61 6c 74 65 72 69 6e 67 20 63 6f  self-altering co
13c00 64 65 20 74 72 69 63 6b 20 64 6f 65 73 20 6e 6f  de trick does no
13c10 74 20 77 6f 72 6b 20 66 6f 72 20 72 65 63 75 72  t work for recur
13c20 73 69 76 65 0a 2a 2a 20 74 72 69 67 67 65 72 73  sive.** triggers
13c30 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4f 6e 63  ..*/.case OP_Onc
13c40 65 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20  e: {            
13c50 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 75 33   /* jump */.  u3
13c60 32 20 69 41 64 64 72 3b 20 20 20 20 20 20 20 20  2 iAddr;        
13c70 20 20 20 20 20 20 20 20 2f 2a 20 41 64 64 72 65          /* Addre
13c80 73 73 20 6f 66 20 74 68 69 73 20 69 6e 73 74 72  ss of this instr
13c90 75 63 74 69 6f 6e 20 2a 2f 0a 20 20 61 73 73 65  uction */.  asse
13ca0 72 74 28 20 70 2d 3e 61 4f 70 5b 30 5d 2e 6f 70  rt( p->aOp[0].op
13cb0 63 6f 64 65 3d 3d 4f 50 5f 49 6e 69 74 20 29 3b  code==OP_Init );
13cc0 0a 20 20 69 66 28 20 70 2d 3e 70 46 72 61 6d 65  .  if( p->pFrame
13cd0 20 29 7b 0a 20 20 20 20 69 41 64 64 72 20 3d 20   ){.    iAddr = 
13ce0 28 69 6e 74 29 28 70 4f 70 20 2d 20 70 2d 3e 61  (int)(pOp - p->a
13cf0 4f 70 29 3b 0a 20 20 20 20 69 66 28 20 28 70 2d  Op);.    if( (p-
13d00 3e 70 46 72 61 6d 65 2d 3e 61 4f 6e 63 65 5b 69  >pFrame->aOnce[i
13d10 41 64 64 72 2f 38 5d 20 26 20 28 31 3c 3c 28 69  Addr/8] & (1<<(i
13d20 41 64 64 72 20 26 20 37 29 29 29 21 3d 30 20 29  Addr & 7)))!=0 )
13d30 7b 0a 20 20 20 20 20 20 56 64 62 65 42 72 61 6e  {.      VdbeBran
13d40 63 68 54 61 6b 65 6e 28 31 2c 20 32 29 3b 0a 20  chTaken(1, 2);. 
13d50 20 20 20 20 20 67 6f 74 6f 20 6a 75 6d 70 5f 74       goto jump_t
13d60 6f 5f 70 32 3b 0a 20 20 20 20 7d 0a 20 20 20 20  o_p2;.    }.    
13d70 70 2d 3e 70 46 72 61 6d 65 2d 3e 61 4f 6e 63 65  p->pFrame->aOnce
13d80 5b 69 41 64 64 72 2f 38 5d 20 7c 3d 20 31 3c 3c  [iAddr/8] |= 1<<
13d90 28 69 41 64 64 72 20 26 20 37 29 3b 0a 20 20 7d  (iAddr & 7);.  }
13da0 65 6c 73 65 7b 0a 20 20 20 20 69 66 28 20 70 2d  else{.    if( p-
13db0 3e 61 4f 70 5b 30 5d 2e 70 31 3d 3d 70 4f 70 2d  >aOp[0].p1==pOp-
13dc0 3e 70 31 20 29 7b 0a 20 20 20 20 20 20 56 64 62  >p1 ){.      Vdb
13dd0 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 31 2c 20  eBranchTaken(1, 
13de0 32 29 3b 0a 20 20 20 20 20 20 67 6f 74 6f 20 6a  2);.      goto j
13df0 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 20 20 7d  ump_to_p2;.    }
13e00 0a 20 20 7d 0a 20 20 56 64 62 65 42 72 61 6e 63  .  }.  VdbeBranc
13e10 68 54 61 6b 65 6e 28 30 2c 20 32 29 3b 0a 20 20  hTaken(0, 2);.  
13e20 70 4f 70 2d 3e 70 31 20 3d 20 70 2d 3e 61 4f 70  pOp->p1 = p->aOp
13e30 5b 30 5d 2e 70 31 3b 0a 20 20 62 72 65 61 6b 3b  [0].p1;.  break;
13e40 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49  .}../* Opcode: I
13e50 66 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a  f P1 P2 P3 * *.*
13e60 2a 0a 2a 2a 20 4a 75 6d 70 20 74 6f 20 50 32 20  *.** Jump to P2 
13e70 69 66 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20  if the value in 
13e80 72 65 67 69 73 74 65 72 20 50 31 20 69 73 20 74  register P1 is t
13e90 72 75 65 2e 20 20 54 68 65 20 76 61 6c 75 65 0a  rue.  The value.
13ea0 2a 2a 20 69 73 20 63 6f 6e 73 69 64 65 72 65 64  ** is considered
13eb0 20 74 72 75 65 20 69 66 20 69 74 20 69 73 20 6e   true if it is n
13ec0 75 6d 65 72 69 63 20 61 6e 64 20 6e 6f 6e 2d 7a  umeric and non-z
13ed0 65 72 6f 2e 20 20 49 66 20 74 68 65 20 76 61 6c  ero.  If the val
13ee0 75 65 0a 2a 2a 20 69 6e 20 50 31 20 69 73 20 4e  ue.** in P1 is N
13ef0 55 4c 4c 20 74 68 65 6e 20 74 61 6b 65 20 74 68  ULL then take th
13f00 65 20 6a 75 6d 70 20 69 66 20 61 6e 64 20 6f 6e  e jump if and on
13f10 6c 79 20 69 66 20 50 33 20 69 73 20 6e 6f 6e 2d  ly if P3 is non-
13f20 7a 65 72 6f 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  zero..*/.case OP
13f30 5f 49 66 3a 20 20 7b 20 20 20 20 20 20 20 20 20  _If:  {         
13f40 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69        /* jump, i
13f50 6e 31 20 2a 2f 0a 20 20 69 6e 74 20 63 3b 0a 20  n1 */.  int c;. 
13f60 20 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65   c = sqlite3Vdbe
13f70 42 6f 6f 6c 65 61 6e 56 61 6c 75 65 28 26 61 4d  BooleanValue(&aM
13f80 65 6d 5b 70 4f 70 2d 3e 70 31 5d 2c 20 70 4f 70  em[pOp->p1], pOp
13f90 2d 3e 70 33 29 3b 0a 20 20 56 64 62 65 42 72 61  ->p3);.  VdbeBra
13fa0 6e 63 68 54 61 6b 65 6e 28 63 21 3d 30 2c 20 32  nchTaken(c!=0, 2
13fb0 29 3b 0a 20 20 69 66 28 20 63 20 29 20 67 6f 74  );.  if( c ) got
13fc0 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20  o jump_to_p2;.  
13fd0 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
13fe0 6f 64 65 3a 20 49 66 4e 6f 74 20 50 31 20 50 32  ode: IfNot P1 P2
13ff0 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4a 75   P3 * *.**.** Ju
14000 6d 70 20 74 6f 20 50 32 20 69 66 20 74 68 65 20  mp to P2 if the 
14010 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65  value in registe
14020 72 20 50 31 20 69 73 20 46 61 6c 73 65 2e 20 20  r P1 is False.  
14030 54 68 65 20 76 61 6c 75 65 0a 2a 2a 20 69 73 20  The value.** is 
14040 63 6f 6e 73 69 64 65 72 65 64 20 66 61 6c 73 65  considered false
14050 20 69 66 20 69 74 20 68 61 73 20 61 20 6e 75 6d   if it has a num
14060 65 72 69 63 20 76 61 6c 75 65 20 6f 66 20 7a 65  eric value of ze
14070 72 6f 2e 20 20 49 66 20 74 68 65 20 76 61 6c 75  ro.  If the valu
14080 65 0a 2a 2a 20 69 6e 20 50 31 20 69 73 20 4e 55  e.** in P1 is NU
14090 4c 4c 20 74 68 65 6e 20 74 61 6b 65 20 74 68 65  LL then take the
140a0 20 6a 75 6d 70 20 69 66 20 61 6e 64 20 6f 6e 6c   jump if and onl
140b0 79 20 69 66 20 50 33 20 69 73 20 6e 6f 6e 2d 7a  y if P3 is non-z
140c0 65 72 6f 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ero..*/.case OP_
140d0 49 66 4e 6f 74 3a 20 7b 20 20 20 20 20 20 20 20  IfNot: {        
140e0 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31      /* jump, in1
140f0 20 2a 2f 0a 20 20 69 6e 74 20 63 3b 0a 20 20 63   */.  int c;.  c
14100 20 3d 20 21 73 71 6c 69 74 65 33 56 64 62 65 42   = !sqlite3VdbeB
14110 6f 6f 6c 65 61 6e 56 61 6c 75 65 28 26 61 4d 65  ooleanValue(&aMe
14120 6d 5b 70 4f 70 2d 3e 70 31 5d 2c 20 21 70 4f 70  m[pOp->p1], !pOp
14130 2d 3e 70 33 29 3b 0a 20 20 56 64 62 65 42 72 61  ->p3);.  VdbeBra
14140 6e 63 68 54 61 6b 65 6e 28 63 21 3d 30 2c 20 32  nchTaken(c!=0, 2
14150 29 3b 0a 20 20 69 66 28 20 63 20 29 20 67 6f 74  );.  if( c ) got
14160 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20  o jump_to_p2;.  
14170 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
14180 6f 64 65 3a 20 49 73 4e 75 6c 6c 20 50 31 20 50  ode: IsNull P1 P
14190 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70  2 * * *.** Synop
141a0 73 69 73 3a 20 69 66 20 72 5b 50 31 5d 3d 3d 4e  sis: if r[P1]==N
141b0 55 4c 4c 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a  ULL goto P2.**.*
141c0 2a 20 4a 75 6d 70 20 74 6f 20 50 32 20 69 66 20  * Jump to P2 if 
141d0 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67  the value in reg
141e0 69 73 74 65 72 20 50 31 20 69 73 20 4e 55 4c 4c  ister P1 is NULL
141f0 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 73 4e  ..*/.case OP_IsN
14200 75 6c 6c 3a 20 7b 20 20 20 20 20 20 20 20 20 20  ull: {          
14210 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f    /* same as TK_
14220 49 53 4e 55 4c 4c 2c 20 6a 75 6d 70 2c 20 69 6e  ISNULL, jump, in
14230 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61  1 */.  pIn1 = &a
14240 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
14250 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28  VdbeBranchTaken(
14260 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20   (pIn1->flags & 
14270 4d 45 4d 5f 4e 75 6c 6c 29 21 3d 30 2c 20 32 29  MEM_Null)!=0, 2)
14280 3b 0a 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66  ;.  if( (pIn1->f
14290 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29  lags & MEM_Null)
142a0 21 3d 30 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20  !=0 ){.    goto 
142b0 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 7d 0a  jump_to_p2;.  }.
142c0 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
142d0 70 63 6f 64 65 3a 20 4e 6f 74 4e 75 6c 6c 20 50  pcode: NotNull P
142e0 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79  1 P2 * * *.** Sy
142f0 6e 6f 70 73 69 73 3a 20 69 66 20 72 5b 50 31 5d  nopsis: if r[P1]
14300 21 3d 4e 55 4c 4c 20 67 6f 74 6f 20 50 32 0a 2a  !=NULL goto P2.*
14310 2a 0a 2a 2a 20 4a 75 6d 70 20 74 6f 20 50 32 20  *.** Jump to P2 
14320 69 66 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20  if the value in 
14330 72 65 67 69 73 74 65 72 20 50 31 20 69 73 20 6e  register P1 is n
14340 6f 74 20 4e 55 4c 4c 2e 20 20 0a 2a 2f 0a 63 61  ot NULL.  .*/.ca
14350 73 65 20 4f 50 5f 4e 6f 74 4e 75 6c 6c 3a 20 7b  se OP_NotNull: {
14360 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73              /* s
14370 61 6d 65 20 61 73 20 54 4b 5f 4e 4f 54 4e 55 4c  ame as TK_NOTNUL
14380 4c 2c 20 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a  L, jump, in1 */.
14390 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70    pIn1 = &aMem[p
143a0 4f 70 2d 3e 70 31 5d 3b 0a 20 20 56 64 62 65 42  Op->p1];.  VdbeB
143b0 72 61 6e 63 68 54 61 6b 65 6e 28 20 28 70 49 6e  ranchTaken( (pIn
143c0 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e  1->flags & MEM_N
143d0 75 6c 6c 29 3d 3d 30 2c 20 32 29 3b 0a 20 20 69  ull)==0, 2);.  i
143e0 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20  f( (pIn1->flags 
143f0 26 20 4d 45 4d 5f 4e 75 6c 6c 29 3d 3d 30 20 29  & MEM_Null)==0 )
14400 7b 0a 20 20 20 20 67 6f 74 6f 20 6a 75 6d 70 5f  {.    goto jump_
14410 74 6f 5f 70 32 3b 0a 20 20 7d 0a 20 20 62 72 65  to_p2;.  }.  bre
14420 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
14430 3a 20 49 66 4e 75 6c 6c 52 6f 77 20 50 31 20 50  : IfNullRow P1 P
14440 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f  2 P3 * *.** Syno
14450 70 73 69 73 3a 20 69 66 20 50 31 2e 6e 75 6c 6c  psis: if P1.null
14460 52 6f 77 20 74 68 65 6e 20 72 5b 50 33 5d 3d 4e  Row then r[P3]=N
14470 55 4c 4c 2c 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a  ULL, goto P2.**.
14480 2a 2a 20 43 68 65 63 6b 20 74 68 65 20 63 75 72  ** Check the cur
14490 73 6f 72 20 50 31 20 74 6f 20 73 65 65 20 69 66  sor P1 to see if
144a0 20 69 74 20 69 73 20 63 75 72 72 65 6e 74 6c 79   it is currently
144b0 20 70 6f 69 6e 74 69 6e 67 20 61 74 20 61 20 4e   pointing at a N
144c0 55 4c 4c 20 72 6f 77 2e 0a 2a 2a 20 49 66 20 69  ULL row..** If i
144d0 74 20 69 73 2c 20 74 68 65 6e 20 73 65 74 20 72  t is, then set r
144e0 65 67 69 73 74 65 72 20 50 33 20 74 6f 20 4e 55  egister P3 to NU
144f0 4c 4c 20 61 6e 64 20 6a 75 6d 70 20 69 6d 6d 65  LL and jump imme
14500 64 69 61 74 65 6c 79 20 74 6f 20 50 32 2e 0a 2a  diately to P2..*
14510 2a 20 49 66 20 50 31 20 69 73 20 6e 6f 74 20 6f  * If P1 is not o
14520 6e 20 61 20 4e 55 4c 4c 20 72 6f 77 2c 20 74 68  n a NULL row, th
14530 65 6e 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 20  en fall through 
14540 77 69 74 68 6f 75 74 20 6d 61 6b 69 6e 67 20 61  without making a
14550 6e 79 0a 2a 2a 20 63 68 61 6e 67 65 73 2e 0a 2a  ny.** changes..*
14560 2f 0a 63 61 73 65 20 4f 50 5f 49 66 4e 75 6c 6c  /.case OP_IfNull
14570 52 6f 77 3a 20 7b 20 20 20 20 20 20 20 20 20 2f  Row: {         /
14580 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 61 73 73 65  * jump */.  asse
14590 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26  rt( pOp->p1>=0 &
145a0 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75  & pOp->p1<p->nCu
145b0 72 73 6f 72 20 29 3b 0a 20 20 61 73 73 65 72 74  rsor );.  assert
145c0 28 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e  ( p->apCsr[pOp->
145d0 70 31 5d 21 3d 30 20 29 3b 0a 20 20 69 66 28 20  p1]!=0 );.  if( 
145e0 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31  p->apCsr[pOp->p1
145f0 5d 2d 3e 6e 75 6c 6c 52 6f 77 20 29 7b 0a 20 20  ]->nullRow ){.  
14600 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
14610 53 65 74 4e 75 6c 6c 28 61 4d 65 6d 20 2b 20 70  SetNull(aMem + p
14620 4f 70 2d 3e 70 33 29 3b 0a 20 20 20 20 67 6f 74  Op->p3);.    got
14630 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20  o jump_to_p2;.  
14640 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 23 69  }.  break;.}..#i
14650 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42  fdef SQLITE_ENAB
14660 4c 45 5f 4f 46 46 53 45 54 5f 53 51 4c 5f 46 55  LE_OFFSET_SQL_FU
14670 4e 43 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f 66  NC./* Opcode: Of
14680 66 73 65 74 20 50 31 20 50 32 20 50 33 20 2a 20  fset P1 P2 P3 * 
14690 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72  *.** Synopsis: r
146a0 5b 50 33 5d 20 3d 20 73 71 6c 69 74 65 5f 6f 66  [P3] = sqlite_of
146b0 66 73 65 74 28 50 31 29 0a 2a 2a 0a 2a 2a 20 53  fset(P1).**.** S
146c0 74 6f 72 65 20 69 6e 20 72 65 67 69 73 74 65 72  tore in register
146d0 20 72 5b 50 33 5d 20 74 68 65 20 62 79 74 65 20   r[P3] the byte 
146e0 6f 66 66 73 65 74 20 69 6e 74 6f 20 74 68 65 20  offset into the 
146f0 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 74 68  database file th
14700 61 74 20 69 73 20 74 68 65 0a 2a 2a 20 73 74 61  at is the.** sta
14710 72 74 20 6f 66 20 74 68 65 20 70 61 79 6c 6f 61  rt of the payloa
14720 64 20 66 6f 72 20 74 68 65 20 72 65 63 6f 72 64  d for the record
14730 20 61 74 20 77 68 69 63 68 20 74 68 61 74 20 63   at which that c
14740 75 72 73 6f 72 20 50 31 20 69 73 20 63 75 72 72  ursor P1 is curr
14750 65 6e 74 6c 79 0a 2a 2a 20 70 6f 69 6e 74 69 6e  ently.** pointin
14760 67 2e 0a 2a 2a 0a 2a 2a 20 50 32 20 69 73 20 74  g..**.** P2 is t
14770 68 65 20 63 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72  he column number
14780 20 66 6f 72 20 74 68 65 20 61 72 67 75 6d 65 6e   for the argumen
14790 74 20 74 6f 20 74 68 65 20 73 71 6c 69 74 65 5f  t to the sqlite_
147a0 6f 66 66 73 65 74 28 29 20 66 75 6e 63 74 69 6f  offset() functio
147b0 6e 2e 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64  n..** This opcod
147c0 65 20 64 6f 65 73 20 6e 6f 74 20 75 73 65 20 50  e does not use P
147d0 32 20 69 74 73 65 6c 66 2c 20 62 75 74 20 74 68  2 itself, but th
147e0 65 20 50 32 20 76 61 6c 75 65 20 69 73 20 75 73  e P2 value is us
147f0 65 64 20 62 79 20 74 68 65 0a 2a 2a 20 63 6f 64  ed by the.** cod
14800 65 20 67 65 6e 65 72 61 74 6f 72 2e 20 20 54 68  e generator.  Th
14810 65 20 50 31 2c 20 50 32 2c 20 61 6e 64 20 50 33  e P1, P2, and P3
14820 20 6f 70 65 72 61 6e 64 73 20 74 6f 20 74 68 69   operands to thi
14830 73 20 6f 70 63 6f 64 65 20 61 72 65 20 74 68 65  s opcode are the
14840 0a 2a 2a 20 73 61 6d 65 20 61 73 20 66 6f 72 20  .** same as for 
14850 4f 50 5f 43 6f 6c 75 6d 6e 2e 0a 2a 2a 0a 2a 2a  OP_Column..**.**
14860 20 54 68 69 73 20 6f 70 63 6f 64 65 20 69 73 20   This opcode is 
14870 6f 6e 6c 79 20 61 76 61 69 6c 61 62 6c 65 20 69  only available i
14880 66 20 53 51 4c 69 74 65 20 69 73 20 63 6f 6d 70  f SQLite is comp
14890 69 6c 65 64 20 77 69 74 68 20 74 68 65 0a 2a 2a  iled with the.**
148a0 20 2d 44 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45   -DSQLITE_ENABLE
148b0 5f 4f 46 46 53 45 54 5f 53 51 4c 5f 46 55 4e 43  _OFFSET_SQL_FUNC
148c0 20 6f 70 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65   option..*/.case
148d0 20 4f 50 5f 4f 66 66 73 65 74 3a 20 7b 20 20 20   OP_Offset: {   
148e0 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 33 20 2a         /* out3 *
148f0 2f 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a  /.  VdbeCursor *
14900 70 43 3b 20 20 20 20 2f 2a 20 54 68 65 20 56 44  pC;    /* The VD
14910 42 45 20 63 75 72 73 6f 72 20 2a 2f 0a 20 20 61  BE cursor */.  a
14920 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d  ssert( pOp->p1>=
14930 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e  0 && pOp->p1<p->
14940 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20  nCursor );.  pC 
14950 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e  = p->apCsr[pOp->
14960 70 31 5d 3b 0a 20 20 70 4f 75 74 20 3d 20 26 70  p1];.  pOut = &p
14970 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b  ->aMem[pOp->p3];
14980 0a 20 20 69 66 28 20 4e 45 56 45 52 28 70 43 3d  .  if( NEVER(pC=
14990 3d 30 29 20 7c 7c 20 70 43 2d 3e 65 43 75 72 54  =0) || pC->eCurT
149a0 79 70 65 21 3d 43 55 52 54 59 50 45 5f 42 54 52  ype!=CURTYPE_BTR
149b0 45 45 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  EE ){.    sqlite
149c0 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28  3VdbeMemSetNull(
149d0 70 4f 75 74 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a  pOut);.  }else{.
149e0 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
149f0 65 6d 53 65 74 49 6e 74 36 34 28 70 4f 75 74 2c  emSetInt64(pOut,
14a00 20 73 71 6c 69 74 65 33 42 74 72 65 65 4f 66 66   sqlite3BtreeOff
14a10 73 65 74 28 70 43 2d 3e 75 63 2e 70 43 75 72 73  set(pC->uc.pCurs
14a20 6f 72 29 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61  or));.  }.  brea
14a30 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53  k;.}.#endif /* S
14a40 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 4f 46 46  QLITE_ENABLE_OFF
14a50 53 45 54 5f 53 51 4c 5f 46 55 4e 43 20 2a 2f 0a  SET_SQL_FUNC */.
14a60 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6f 6c 75  ./* Opcode: Colu
14a70 6d 6e 20 50 31 20 50 32 20 50 33 20 50 34 20 50  mn P1 P2 P3 P4 P
14a80 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72  5.** Synopsis: r
14a90 5b 50 33 5d 3d 50 58 0a 2a 2a 0a 2a 2a 20 49 6e  [P3]=PX.**.** In
14aa0 74 65 72 70 72 65 74 20 74 68 65 20 64 61 74 61  terpret the data
14ab0 20 74 68 61 74 20 63 75 72 73 6f 72 20 50 31 20   that cursor P1 
14ac0 70 6f 69 6e 74 73 20 74 6f 20 61 73 20 61 20 73  points to as a s
14ad0 74 72 75 63 74 75 72 65 20 62 75 69 6c 74 20 75  tructure built u
14ae0 73 69 6e 67 0a 2a 2a 20 74 68 65 20 4d 61 6b 65  sing.** the Make
14af0 52 65 63 6f 72 64 20 69 6e 73 74 72 75 63 74 69  Record instructi
14b00 6f 6e 2e 20 20 28 53 65 65 20 74 68 65 20 4d 61  on.  (See the Ma
14b10 6b 65 52 65 63 6f 72 64 20 6f 70 63 6f 64 65 20  keRecord opcode 
14b20 66 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c 0a 2a  for additional.*
14b30 2a 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62  * information ab
14b40 6f 75 74 20 74 68 65 20 66 6f 72 6d 61 74 20 6f  out the format o
14b50 66 20 74 68 65 20 64 61 74 61 2e 29 20 20 45 78  f the data.)  Ex
14b60 74 72 61 63 74 20 74 68 65 20 50 32 2d 74 68 20  tract the P2-th 
14b70 63 6f 6c 75 6d 6e 0a 2a 2a 20 66 72 6f 6d 20 74  column.** from t
14b80 68 69 73 20 72 65 63 6f 72 64 2e 20 20 49 66 20  his record.  If 
14b90 74 68 65 72 65 20 61 72 65 20 6c 65 73 73 20 74  there are less t
14ba0 68 61 74 20 28 50 32 2b 31 29 20 0a 2a 2a 20 76  hat (P2+1) .** v
14bb0 61 6c 75 65 73 20 69 6e 20 74 68 65 20 72 65 63  alues in the rec
14bc0 6f 72 64 2c 20 65 78 74 72 61 63 74 20 61 20 4e  ord, extract a N
14bd0 55 4c 4c 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 76  ULL..**.** The v
14be0 61 6c 75 65 20 65 78 74 72 61 63 74 65 64 20 69  alue extracted i
14bf0 73 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69  s stored in regi
14c00 73 74 65 72 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 49  ster P3..**.** I
14c10 66 20 74 68 65 20 72 65 63 6f 72 64 20 63 6f 6e  f the record con
14c20 74 61 69 6e 73 20 66 65 77 65 72 20 74 68 61 6e  tains fewer than
14c30 20 50 32 20 66 69 65 6c 64 73 2c 20 74 68 65 6e   P2 fields, then
14c40 20 65 78 74 72 61 63 74 20 61 20 4e 55 4c 4c 2e   extract a NULL.
14c50 20 20 4f 72 2c 0a 2a 2a 20 69 66 20 74 68 65 20    Or,.** if the 
14c60 50 34 20 61 72 67 75 6d 65 6e 74 20 69 73 20 61  P4 argument is a
14c70 20 50 34 5f 4d 45 4d 20 75 73 65 20 74 68 65 20   P4_MEM use the 
14c80 76 61 6c 75 65 20 6f 66 20 74 68 65 20 50 34 20  value of the P4 
14c90 61 72 67 75 6d 65 6e 74 20 61 73 0a 2a 2a 20 74  argument as.** t
14ca0 68 65 20 72 65 73 75 6c 74 2e 0a 2a 2a 0a 2a 2a  he result..**.**
14cb0 20 49 66 20 74 68 65 20 4f 50 46 4c 41 47 5f 4c   If the OPFLAG_L
14cc0 45 4e 47 54 48 41 52 47 20 61 6e 64 20 4f 50 46  ENGTHARG and OPF
14cd0 4c 41 47 5f 54 59 50 45 4f 46 41 52 47 20 62 69  LAG_TYPEOFARG bi
14ce0 74 73 20 61 72 65 20 73 65 74 20 6f 6e 20 50 35  ts are set on P5
14cf0 20 74 68 65 6e 0a 2a 2a 20 74 68 65 20 72 65 73   then.** the res
14d00 75 6c 74 20 69 73 20 67 75 61 72 61 6e 74 65 65  ult is guarantee
14d10 64 20 74 6f 20 6f 6e 6c 79 20 62 65 20 75 73 65  d to only be use
14d20 64 20 61 73 20 74 68 65 20 61 72 67 75 6d 65 6e  d as the argumen
14d30 74 20 6f 66 20 61 20 6c 65 6e 67 74 68 28 29 0a  t of a length().
14d40 2a 2a 20 6f 72 20 74 79 70 65 6f 66 28 29 20 66  ** or typeof() f
14d50 75 6e 63 74 69 6f 6e 2c 20 72 65 73 70 65 63 74  unction, respect
14d60 69 76 65 6c 79 2e 20 20 54 68 65 20 6c 6f 61 64  ively.  The load
14d70 69 6e 67 20 6f 66 20 6c 61 72 67 65 20 62 6c 6f  ing of large blo
14d80 62 73 20 63 61 6e 20 62 65 0a 2a 2a 20 73 6b 69  bs can be.** ski
14d90 70 70 65 64 20 66 6f 72 20 6c 65 6e 67 74 68 28  pped for length(
14da0 29 20 61 6e 64 20 61 6c 6c 20 63 6f 6e 74 65 6e  ) and all conten
14db0 74 20 6c 6f 61 64 69 6e 67 20 63 61 6e 20 62 65  t loading can be
14dc0 20 73 6b 69 70 70 65 64 20 66 6f 72 20 74 79 70   skipped for typ
14dd0 65 6f 66 28 29 2e 0a 2a 2f 0a 63 61 73 65 20 4f  eof()..*/.case O
14de0 50 5f 43 6f 6c 75 6d 6e 3a 20 7b 0a 20 20 69 6e  P_Column: {.  in
14df0 74 20 70 32 3b 20 20 20 20 20 20 20 20 20 20 20  t p2;           
14e00 20 2f 2a 20 63 6f 6c 75 6d 6e 20 6e 75 6d 62 65   /* column numbe
14e10 72 20 74 6f 20 72 65 74 72 69 65 76 65 20 2a 2f  r to retrieve */
14e20 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70  .  VdbeCursor *p
14e30 43 3b 20 20 20 20 2f 2a 20 54 68 65 20 56 44 42  C;    /* The VDB
14e40 45 20 63 75 72 73 6f 72 20 2a 2f 0a 20 20 42 74  E cursor */.  Bt
14e50 43 75 72 73 6f 72 20 2a 70 43 72 73 72 3b 20 20  Cursor *pCrsr;  
14e60 20 2f 2a 20 54 68 65 20 42 54 72 65 65 20 63 75   /* The BTree cu
14e70 72 73 6f 72 20 2a 2f 0a 20 20 75 33 32 20 2a 61  rsor */.  u32 *a
14e80 4f 66 66 73 65 74 3b 20 20 20 20 20 20 2f 2a 20  Offset;      /* 
14e90 61 4f 66 66 73 65 74 5b 69 5d 20 69 73 20 6f 66  aOffset[i] is of
14ea0 66 73 65 74 20 74 6f 20 73 74 61 72 74 20 6f 66  fset to start of
14eb0 20 64 61 74 61 20 66 6f 72 20 69 2d 74 68 20 63   data for i-th c
14ec0 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 69 6e 74 20 6c  olumn */.  int l
14ed0 65 6e 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  en;           /*
14ee0 20 54 68 65 20 6c 65 6e 67 74 68 20 6f 66 20 74   The length of t
14ef0 68 65 20 73 65 72 69 61 6c 69 7a 65 64 20 64 61  he serialized da
14f00 74 61 20 66 6f 72 20 74 68 65 20 63 6f 6c 75 6d  ta for the colum
14f10 6e 20 2a 2f 0a 20 20 69 6e 74 20 69 3b 20 20 20  n */.  int i;   
14f20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 6f 6f            /* Loo
14f30 70 20 63 6f 75 6e 74 65 72 20 2a 2f 0a 20 20 4d  p counter */.  M
14f40 65 6d 20 2a 70 44 65 73 74 3b 20 20 20 20 20 20  em *pDest;      
14f50 20 20 2f 2a 20 57 68 65 72 65 20 74 6f 20 77 72    /* Where to wr
14f60 69 74 65 20 74 68 65 20 65 78 74 72 61 63 74 65  ite the extracte
14f70 64 20 76 61 6c 75 65 20 2a 2f 0a 20 20 4d 65 6d  d value */.  Mem
14f80 20 73 4d 65 6d 3b 20 20 20 20 20 20 20 20 20 20   sMem;          
14f90 2f 2a 20 46 6f 72 20 73 74 6f 72 69 6e 67 20 74  /* For storing t
14fa0 68 65 20 72 65 63 6f 72 64 20 62 65 69 6e 67 20  he record being 
14fb0 64 65 63 6f 64 65 64 20 2a 2f 0a 20 20 63 6f 6e  decoded */.  con
14fc0 73 74 20 75 38 20 2a 7a 44 61 74 61 3b 20 20 20  st u8 *zData;   
14fd0 2f 2a 20 50 61 72 74 20 6f 66 20 74 68 65 20 72  /* Part of the r
14fe0 65 63 6f 72 64 20 62 65 69 6e 67 20 64 65 63 6f  ecord being deco
14ff0 64 65 64 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 75  ded */.  const u
15000 38 20 2a 7a 48 64 72 3b 20 20 20 20 2f 2a 20 4e  8 *zHdr;    /* N
15010 65 78 74 20 75 6e 70 61 72 73 65 64 20 62 79 74  ext unparsed byt
15020 65 20 6f 66 20 74 68 65 20 68 65 61 64 65 72 20  e of the header 
15030 2a 2f 0a 20 20 63 6f 6e 73 74 20 75 38 20 2a 7a  */.  const u8 *z
15040 45 6e 64 48 64 72 3b 20 2f 2a 20 50 6f 69 6e 74  EndHdr; /* Point
15050 65 72 20 74 6f 20 66 69 72 73 74 20 62 79 74 65  er to first byte
15060 20 61 66 74 65 72 20 74 68 65 20 68 65 61 64 65   after the heade
15070 72 20 2a 2f 0a 20 20 75 36 34 20 6f 66 66 73 65  r */.  u64 offse
15080 74 36 34 3b 20 20 20 20 20 20 2f 2a 20 36 34 2d  t64;      /* 64-
15090 62 69 74 20 6f 66 66 73 65 74 20 2a 2f 0a 20 20  bit offset */.  
150a0 75 33 32 20 74 3b 20 20 20 20 20 20 20 20 20 20  u32 t;          
150b0 20 20 20 2f 2a 20 41 20 74 79 70 65 20 63 6f 64     /* A type cod
150c0 65 20 66 72 6f 6d 20 74 68 65 20 72 65 63 6f 72  e from the recor
150d0 64 20 68 65 61 64 65 72 20 2a 2f 0a 20 20 4d 65  d header */.  Me
150e0 6d 20 2a 70 52 65 67 3b 20 20 20 20 20 20 20 20  m *pReg;        
150f0 20 2f 2a 20 50 73 65 75 64 6f 54 61 62 6c 65 20   /* PseudoTable 
15100 69 6e 70 75 74 20 72 65 67 69 73 74 65 72 20 2a  input register *
15110 2f 0a 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43  /..  pC = p->apC
15120 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70  sr[pOp->p1];.  p
15130 32 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 0a 20 20  2 = pOp->p2;..  
15140 2f 2a 20 49 66 20 74 68 65 20 63 75 72 73 6f 72  /* If the cursor
15150 20 63 61 63 68 65 20 69 73 20 73 74 61 6c 65 20   cache is stale 
15160 28 6d 65 61 6e 69 6e 67 20 69 74 20 69 73 20 6e  (meaning it is n
15170 6f 74 20 63 75 72 72 65 6e 74 6c 79 20 70 6f 69  ot currently poi
15180 6e 74 20 61 74 0a 20 20 2a 2a 20 74 68 65 20 63  nt at.  ** the c
15190 6f 72 72 65 63 74 20 72 6f 77 29 20 74 68 65 6e  orrect row) then
151a0 20 62 72 69 6e 67 20 69 74 20 75 70 2d 74 6f 2d   bring it up-to-
151b0 64 61 74 65 20 62 79 20 64 6f 69 6e 67 20 74 68  date by doing th
151c0 65 20 6e 65 63 65 73 73 61 72 79 20 0a 20 20 2a  e necessary .  *
151d0 2a 20 42 2d 54 72 65 65 20 73 65 65 6b 2e 20 2a  * B-Tree seek. *
151e0 2f 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  /.  rc = sqlite3
151f0 56 64 62 65 43 75 72 73 6f 72 4d 6f 76 65 74 6f  VdbeCursorMoveto
15200 28 26 70 43 2c 20 26 70 32 29 3b 0a 20 20 69 66  (&pC, &p2);.  if
15210 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72  ( rc ) goto abor
15220 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
15230 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
15240 70 33 3e 30 20 26 26 20 70 4f 70 2d 3e 70 33 3c  p3>0 && pOp->p3<
15250 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d  =(p->nMem+1 - p-
15260 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 70  >nCursor) );.  p
15270 44 65 73 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  Dest = &aMem[pOp
15280 2d 3e 70 33 5d 3b 0a 20 20 6d 65 6d 41 62 6f 75  ->p3];.  memAbou
15290 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 44 65  tToChange(p, pDe
152a0 73 74 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  st);.  assert( p
152b0 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70  Op->p1>=0 && pOp
152c0 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20  ->p1<p->nCursor 
152d0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21  );.  assert( pC!
152e0 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
152f0 70 32 3c 70 43 2d 3e 6e 46 69 65 6c 64 20 29 3b  p2<pC->nField );
15300 0a 20 20 61 4f 66 66 73 65 74 20 3d 20 70 43 2d  .  aOffset = pC-
15310 3e 61 4f 66 66 73 65 74 3b 0a 20 20 61 73 73 65  >aOffset;.  asse
15320 72 74 28 20 70 43 2d 3e 65 43 75 72 54 79 70 65  rt( pC->eCurType
15330 21 3d 43 55 52 54 59 50 45 5f 56 54 41 42 20 29  !=CURTYPE_VTAB )
15340 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  ;.  assert( pC->
15350 65 43 75 72 54 79 70 65 21 3d 43 55 52 54 59 50  eCurType!=CURTYP
15360 45 5f 50 53 45 55 44 4f 20 7c 7c 20 70 43 2d 3e  E_PSEUDO || pC->
15370 6e 75 6c 6c 52 6f 77 20 29 3b 0a 20 20 61 73 73  nullRow );.  ass
15380 65 72 74 28 20 70 43 2d 3e 65 43 75 72 54 79 70  ert( pC->eCurTyp
15390 65 21 3d 43 55 52 54 59 50 45 5f 53 4f 52 54 45  e!=CURTYPE_SORTE
153a0 52 20 29 3b 0a 0a 20 20 69 66 28 20 70 43 2d 3e  R );..  if( pC->
153b0 63 61 63 68 65 53 74 61 74 75 73 21 3d 70 2d 3e  cacheStatus!=p->
153c0 63 61 63 68 65 43 74 72 20 29 7b 20 20 20 20 20  cacheCtr ){     
153d0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 4f 50 54             /*OPT
153e0 49 4d 49 5a 41 54 49 4f 4e 2d 49 46 2d 46 41 4c  IMIZATION-IF-FAL
153f0 53 45 2a 2f 0a 20 20 20 20 69 66 28 20 70 43 2d  SE*/.    if( pC-
15400 3e 6e 75 6c 6c 52 6f 77 20 29 7b 0a 20 20 20 20  >nullRow ){.    
15410 20 20 69 66 28 20 70 43 2d 3e 65 43 75 72 54 79    if( pC->eCurTy
15420 70 65 3d 3d 43 55 52 54 59 50 45 5f 50 53 45 55  pe==CURTYPE_PSEU
15430 44 4f 20 29 7b 0a 20 20 20 20 20 20 20 20 2f 2a  DO ){.        /*
15440 20 46 6f 72 20 74 68 65 20 73 70 65 63 69 61 6c   For the special
15450 20 63 61 73 65 20 6f 66 20 61 73 20 70 73 65 75   case of as pseu
15460 64 6f 2d 63 75 72 73 6f 72 2c 20 74 68 65 20 73  do-cursor, the s
15470 65 65 6b 52 65 73 75 6c 74 20 66 69 65 6c 64 0a  eekResult field.
15480 20 20 20 20 20 20 20 20 2a 2a 20 69 64 65 6e 74          ** ident
15490 69 66 69 65 73 20 74 68 65 20 72 65 67 69 73 74  ifies the regist
154a0 65 72 20 74 68 61 74 20 68 6f 6c 64 73 20 74 68  er that holds th
154b0 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 20 20  e record */.    
154c0 20 20 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e      assert( pC->
154d0 73 65 65 6b 52 65 73 75 6c 74 3e 30 20 29 3b 0a  seekResult>0 );.
154e0 20 20 20 20 20 20 20 20 70 52 65 67 20 3d 20 26          pReg = &
154f0 61 4d 65 6d 5b 70 43 2d 3e 73 65 65 6b 52 65 73  aMem[pC->seekRes
15500 75 6c 74 5d 3b 0a 20 20 20 20 20 20 20 20 61 73  ult];.        as
15510 73 65 72 74 28 20 70 52 65 67 2d 3e 66 6c 61 67  sert( pReg->flag
15520 73 20 26 20 4d 45 4d 5f 42 6c 6f 62 20 29 3b 0a  s & MEM_Blob );.
15530 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20          assert( 
15540 6d 65 6d 49 73 56 61 6c 69 64 28 70 52 65 67 29  memIsValid(pReg)
15550 20 29 3b 0a 20 20 20 20 20 20 20 20 70 43 2d 3e   );.        pC->
15560 70 61 79 6c 6f 61 64 53 69 7a 65 20 3d 20 70 43  payloadSize = pC
15570 2d 3e 73 7a 52 6f 77 20 3d 20 70 52 65 67 2d 3e  ->szRow = pReg->
15580 6e 3b 0a 20 20 20 20 20 20 20 20 70 43 2d 3e 61  n;.        pC->a
15590 52 6f 77 20 3d 20 28 75 38 2a 29 70 52 65 67 2d  Row = (u8*)pReg-
155a0 3e 7a 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b  >z;.      }else{
155b0 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
155c0 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70  VdbeMemSetNull(p
155d0 44 65 73 74 29 3b 0a 20 20 20 20 20 20 20 20 67  Dest);.        g
155e0 6f 74 6f 20 6f 70 5f 63 6f 6c 75 6d 6e 5f 6f 75  oto op_column_ou
155f0 74 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  t;.      }.    }
15600 65 6c 73 65 7b 0a 20 20 20 20 20 20 70 43 72 73  else{.      pCrs
15610 72 20 3d 20 70 43 2d 3e 75 63 2e 70 43 75 72 73  r = pC->uc.pCurs
15620 6f 72 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74  or;.      assert
15630 28 20 70 43 2d 3e 65 43 75 72 54 79 70 65 3d 3d  ( pC->eCurType==
15640 43 55 52 54 59 50 45 5f 42 54 52 45 45 20 29 3b  CURTYPE_BTREE );
15650 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70  .      assert( p
15660 43 72 73 72 20 29 3b 0a 20 20 20 20 20 20 61 73  Crsr );.      as
15670 73 65 72 74 28 20 73 71 6c 69 74 65 33 42 74 72  sert( sqlite3Btr
15680 65 65 43 75 72 73 6f 72 49 73 56 61 6c 69 64 28  eeCursorIsValid(
15690 70 43 72 73 72 29 20 29 3b 0a 20 20 20 20 20 20  pCrsr) );.      
156a0 70 43 2d 3e 70 61 79 6c 6f 61 64 53 69 7a 65 20  pC->payloadSize 
156b0 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 50 61  = sqlite3BtreePa
156c0 79 6c 6f 61 64 53 69 7a 65 28 70 43 72 73 72 29  yloadSize(pCrsr)
156d0 3b 0a 20 20 20 20 20 20 70 43 2d 3e 61 52 6f 77  ;.      pC->aRow
156e0 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 50   = sqlite3BtreeP
156f0 61 79 6c 6f 61 64 46 65 74 63 68 28 70 43 72 73  ayloadFetch(pCrs
15700 72 2c 20 26 70 43 2d 3e 73 7a 52 6f 77 29 3b 0a  r, &pC->szRow);.
15710 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70 43        assert( pC
15720 2d 3e 73 7a 52 6f 77 3c 3d 70 43 2d 3e 70 61 79  ->szRow<=pC->pay
15730 6c 6f 61 64 53 69 7a 65 20 29 3b 0a 20 20 20 20  loadSize );.    
15740 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 73 7a    assert( pC->sz
15750 52 6f 77 3c 3d 36 35 35 33 36 20 29 3b 20 20 2f  Row<=65536 );  /
15760 2a 20 4d 61 78 69 6d 75 6d 20 70 61 67 65 20 73  * Maximum page s
15770 69 7a 65 20 69 73 20 36 34 4b 69 42 20 2a 2f 0a  ize is 64KiB */.
15780 20 20 20 20 20 20 69 66 28 20 70 43 2d 3e 70 61        if( pC->pa
15790 79 6c 6f 61 64 53 69 7a 65 20 3e 20 28 75 33 32  yloadSize > (u32
157a0 29 64 62 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c 49  )db->aLimit[SQLI
157b0 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54 48 5d  TE_LIMIT_LENGTH]
157c0 20 29 7b 0a 20 20 20 20 20 20 20 20 67 6f 74 6f   ){.        goto
157d0 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 20 20 20 20   too_big;.      
157e0 7d 0a 20 20 20 20 7d 0a 20 20 20 20 70 43 2d 3e  }.    }.    pC->
157f0 63 61 63 68 65 53 74 61 74 75 73 20 3d 20 70 2d  cacheStatus = p-
15800 3e 63 61 63 68 65 43 74 72 3b 0a 20 20 20 20 70  >cacheCtr;.    p
15810 43 2d 3e 69 48 64 72 4f 66 66 73 65 74 20 3d 20  C->iHdrOffset = 
15820 67 65 74 56 61 72 69 6e 74 33 32 28 70 43 2d 3e  getVarint32(pC->
15830 61 52 6f 77 2c 20 61 4f 66 66 73 65 74 5b 30 5d  aRow, aOffset[0]
15840 29 3b 0a 20 20 20 20 70 43 2d 3e 6e 48 64 72 50  );.    pC->nHdrP
15850 61 72 73 65 64 20 3d 20 30 3b 0a 0a 0a 20 20 20  arsed = 0;...   
15860 20 69 66 28 20 70 43 2d 3e 73 7a 52 6f 77 3c 61   if( pC->szRow<a
15870 4f 66 66 73 65 74 5b 30 5d 20 29 7b 20 20 20 20  Offset[0] ){    
15880 20 20 2f 2a 4f 50 54 49 4d 49 5a 41 54 49 4f 4e    /*OPTIMIZATION
15890 2d 49 46 2d 46 41 4c 53 45 2a 2f 0a 20 20 20 20  -IF-FALSE*/.    
158a0 20 20 2f 2a 20 70 43 2d 3e 61 52 6f 77 20 64 6f    /* pC->aRow do
158b0 65 73 20 6e 6f 74 20 68 61 76 65 20 74 6f 20 68  es not have to h
158c0 6f 6c 64 20 74 68 65 20 65 6e 74 69 72 65 20 72  old the entire r
158d0 6f 77 2c 20 62 75 74 20 69 74 20 64 6f 65 73 20  ow, but it does 
158e0 61 74 20 6c 65 61 73 74 0a 20 20 20 20 20 20 2a  at least.      *
158f0 2a 20 6e 65 65 64 20 74 6f 20 63 6f 76 65 72 20  * need to cover 
15900 74 68 65 20 68 65 61 64 65 72 20 6f 66 20 74 68  the header of th
15910 65 20 72 65 63 6f 72 64 2e 20 20 49 66 20 70 43  e record.  If pC
15920 2d 3e 61 52 6f 77 20 64 6f 65 73 20 6e 6f 74 20  ->aRow does not 
15930 63 6f 6e 74 61 69 6e 0a 20 20 20 20 20 20 2a 2a  contain.      **
15940 20 74 68 65 20 63 6f 6d 70 6c 65 74 65 20 68 65   the complete he
15950 61 64 65 72 2c 20 74 68 65 6e 20 73 65 74 20 69  ader, then set i
15960 74 20 74 6f 20 7a 65 72 6f 2c 20 66 6f 72 63 69  t to zero, forci
15970 6e 67 20 74 68 65 20 68 65 61 64 65 72 20 74 6f  ng the header to
15980 20 62 65 0a 20 20 20 20 20 20 2a 2a 20 64 79 6e   be.      ** dyn
15990 61 6d 69 63 61 6c 6c 79 20 61 6c 6c 6f 63 61 74  amically allocat
159a0 65 64 2e 20 2a 2f 0a 20 20 20 20 20 20 70 43 2d  ed. */.      pC-
159b0 3e 61 52 6f 77 20 3d 20 30 3b 0a 20 20 20 20 20  >aRow = 0;.     
159c0 20 70 43 2d 3e 73 7a 52 6f 77 20 3d 20 30 3b 0a   pC->szRow = 0;.
159d0 0a 20 20 20 20 20 20 2f 2a 20 4d 61 6b 65 20 73  .      /* Make s
159e0 75 72 65 20 61 20 63 6f 72 72 75 70 74 20 64 61  ure a corrupt da
159f0 74 61 62 61 73 65 20 68 61 73 20 6e 6f 74 20 67  tabase has not g
15a00 69 76 65 6e 20 75 73 20 61 6e 20 6f 76 65 72 73  iven us an overs
15a10 69 7a 65 20 68 65 61 64 65 72 2e 0a 20 20 20 20  ize header..    
15a20 20 20 2a 2a 20 44 6f 20 74 68 69 73 20 6e 6f 77    ** Do this now
15a30 20 74 6f 20 61 76 6f 69 64 20 61 6e 20 6f 76 65   to avoid an ove
15a40 72 73 69 7a 65 20 6d 65 6d 6f 72 79 20 61 6c 6c  rsize memory all
15a50 6f 63 61 74 69 6f 6e 2e 0a 20 20 20 20 20 20 2a  ocation..      *
15a60 2a 0a 20 20 20 20 20 20 2a 2a 20 54 79 70 65 20  *.      ** Type 
15a70 65 6e 74 72 69 65 73 20 63 61 6e 20 62 65 20 62  entries can be b
15a80 65 74 77 65 65 6e 20 31 20 61 6e 64 20 35 20 62  etween 1 and 5 b
15a90 79 74 65 73 20 65 61 63 68 2e 20 20 42 75 74 20  ytes each.  But 
15aa0 34 20 61 6e 64 20 35 20 62 79 74 65 0a 20 20 20  4 and 5 byte.   
15ab0 20 20 20 2a 2a 20 74 79 70 65 73 20 75 73 65 20     ** types use 
15ac0 73 6f 20 6d 75 63 68 20 64 61 74 61 20 73 70 61  so much data spa
15ad0 63 65 20 74 68 61 74 20 74 68 65 72 65 20 63 61  ce that there ca
15ae0 6e 20 6f 6e 6c 79 20 62 65 20 34 30 39 36 20 61  n only be 4096 a
15af0 6e 64 20 33 32 20 6f 66 0a 20 20 20 20 20 20 2a  nd 32 of.      *
15b00 2a 20 74 68 65 6d 2c 20 72 65 73 70 65 63 74 69  * them, respecti
15b10 76 65 6c 79 2e 20 20 53 6f 20 74 68 65 20 6d 61  vely.  So the ma
15b20 78 69 6d 75 6d 20 68 65 61 64 65 72 20 6c 65 6e  ximum header len
15b30 67 74 68 20 72 65 73 75 6c 74 73 20 66 72 6f 6d  gth results from
15b40 20 61 0a 20 20 20 20 20 20 2a 2a 20 33 2d 62 79   a.      ** 3-by
15b50 74 65 20 74 79 70 65 20 66 6f 72 20 65 61 63 68  te type for each
15b60 20 6f 66 20 74 68 65 20 6d 61 78 69 6d 75 6d 20   of the maximum 
15b70 6f 66 20 33 32 37 36 38 20 63 6f 6c 75 6d 6e 73  of 32768 columns
15b80 20 70 6c 75 73 20 74 68 72 65 65 0a 20 20 20 20   plus three.    
15b90 20 20 2a 2a 20 65 78 74 72 61 20 62 79 74 65 73    ** extra bytes
15ba0 20 66 6f 72 20 74 68 65 20 68 65 61 64 65 72 20   for the header 
15bb0 6c 65 6e 67 74 68 20 69 74 73 65 6c 66 2e 20 20  length itself.  
15bc0 33 32 37 36 38 2a 33 20 2b 20 33 20 3d 20 39 38  32768*3 + 3 = 98
15bd0 33 30 37 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20  307..      */.  
15be0 20 20 20 20 69 66 28 20 61 4f 66 66 73 65 74 5b      if( aOffset[
15bf0 30 5d 20 3e 20 39 38 33 30 37 20 7c 7c 20 61 4f  0] > 98307 || aO
15c00 66 66 73 65 74 5b 30 5d 20 3e 20 70 43 2d 3e 70  ffset[0] > pC->p
15c10 61 79 6c 6f 61 64 53 69 7a 65 20 29 7b 0a 20 20  ayloadSize ){.  
15c20 20 20 20 20 20 20 67 6f 74 6f 20 6f 70 5f 63 6f        goto op_co
15c30 6c 75 6d 6e 5f 63 6f 72 72 75 70 74 3b 0a 20 20  lumn_corrupt;.  
15c40 20 20 20 20 7d 0a 20 20 20 20 7d 65 6c 73 65 7b      }.    }else{
15c50 0a 20 20 20 20 20 20 2f 2a 20 54 68 69 73 20 69  .      /* This i
15c60 73 20 61 6e 20 6f 70 74 69 6d 69 7a 61 74 69 6f  s an optimizatio
15c70 6e 2e 20 20 42 79 20 73 6b 69 70 70 69 6e 67 20  n.  By skipping 
15c80 6f 76 65 72 20 74 68 65 20 66 69 72 73 74 20 66  over the first f
15c90 65 77 20 74 65 73 74 73 0a 20 20 20 20 20 20 2a  ew tests.      *
15ca0 2a 20 28 65 78 3a 20 70 43 2d 3e 6e 48 64 72 50  * (ex: pC->nHdrP
15cb0 61 72 73 65 64 3c 3d 70 32 29 20 69 6e 20 74 68  arsed<=p2) in th
15cc0 65 20 6e 65 78 74 20 73 65 63 74 69 6f 6e 2c 20  e next section, 
15cd0 77 65 20 61 63 68 69 65 76 65 20 61 0a 20 20 20  we achieve a.   
15ce0 20 20 20 2a 2a 20 6d 65 61 73 75 72 61 62 6c 65     ** measurable
15cf0 20 70 65 72 66 6f 72 6d 61 6e 63 65 20 67 61 69   performance gai
15d00 6e 2e 0a 20 20 20 20 20 20 2a 2a 0a 20 20 20 20  n..      **.    
15d10 20 20 2a 2a 20 54 68 69 73 20 62 72 61 6e 63 68    ** This branch
15d20 20 69 73 20 74 61 6b 65 6e 20 65 76 65 6e 20 69   is taken even i
15d30 66 20 61 4f 66 66 73 65 74 5b 30 5d 3d 3d 30 2e  f aOffset[0]==0.
15d40 20 20 53 75 63 68 20 61 20 72 65 63 6f 72 64 20    Such a record 
15d50 69 73 20 6e 65 76 65 72 0a 20 20 20 20 20 20 2a  is never.      *
15d60 2a 20 67 65 6e 65 72 61 74 65 64 20 62 79 20 53  * generated by S
15d70 51 4c 69 74 65 2c 20 61 6e 64 20 63 6f 75 6c 64  QLite, and could
15d80 20 62 65 20 63 6f 6e 73 69 64 65 72 65 64 20 63   be considered c
15d90 6f 72 72 75 70 74 69 6f 6e 2c 20 62 75 74 20 77  orruption, but w
15da0 65 0a 20 20 20 20 20 20 2a 2a 20 61 63 63 65 70  e.      ** accep
15db0 74 20 69 74 20 66 6f 72 20 68 69 73 74 6f 72 69  t it for histori
15dc0 63 61 6c 20 72 65 61 73 6f 6e 73 2e 20 20 57 68  cal reasons.  Wh
15dd0 65 6e 20 61 4f 66 66 73 65 74 5b 30 5d 3d 3d 30  en aOffset[0]==0
15de0 2c 20 74 68 65 20 63 6f 64 65 20 74 68 69 73 0a  , the code this.
15df0 20 20 20 20 20 20 2a 2a 20 62 72 61 6e 63 68 20        ** branch 
15e00 6a 75 6d 70 73 20 74 6f 20 72 65 61 64 73 20 70  jumps to reads p
15e10 61 73 74 20 74 68 65 20 65 6e 64 20 6f 66 20 74  ast the end of t
15e20 68 65 20 72 65 63 6f 72 64 2c 20 62 75 74 20 6e  he record, but n
15e30 65 76 65 72 20 6d 6f 72 65 0a 20 20 20 20 20 20  ever more.      
15e40 2a 2a 20 74 68 61 6e 20 61 20 66 65 77 20 62 79  ** than a few by
15e50 74 65 73 2e 20 20 45 76 65 6e 20 69 66 20 74 68  tes.  Even if th
15e60 65 20 72 65 63 6f 72 64 20 6f 63 63 75 72 73 20  e record occurs 
15e70 61 74 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68  at the end of th
15e80 65 20 70 61 67 65 0a 20 20 20 20 20 20 2a 2a 20  e page.      ** 
15e90 63 6f 6e 74 65 6e 74 20 61 72 65 61 2c 20 74 68  content area, th
15ea0 65 20 22 70 61 67 65 20 68 65 61 64 65 72 22 20  e "page header" 
15eb0 63 6f 6d 65 73 20 61 66 74 65 72 20 74 68 65 20  comes after the 
15ec0 70 61 67 65 20 63 6f 6e 74 65 6e 74 20 61 6e 64  page content and
15ed0 20 73 6f 0a 20 20 20 20 20 20 2a 2a 20 74 68 69   so.      ** thi
15ee0 73 20 6f 76 65 72 72 65 61 64 20 69 73 20 68 61  s overread is ha
15ef0 72 6d 6c 65 73 73 2e 20 20 53 69 6d 69 6c 61 72  rmless.  Similar
15f00 20 6f 76 65 72 72 65 61 64 73 20 63 61 6e 20 6f   overreads can o
15f10 63 63 75 72 20 66 6f 72 20 61 20 63 6f 72 72 75  ccur for a corru
15f20 70 74 0a 20 20 20 20 20 20 2a 2a 20 64 61 74 61  pt.      ** data
15f30 62 61 73 65 20 66 69 6c 65 2e 0a 20 20 20 20 20  base file..     
15f40 20 2a 2f 0a 20 20 20 20 20 20 7a 44 61 74 61 20   */.      zData 
15f50 3d 20 70 43 2d 3e 61 52 6f 77 3b 0a 20 20 20 20  = pC->aRow;.    
15f60 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 6e 48    assert( pC->nH
15f70 64 72 50 61 72 73 65 64 3c 3d 70 32 20 29 3b 20  drParsed<=p2 ); 
15f80 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 6e 64 69          /* Condi
15f90 74 69 6f 6e 61 6c 20 73 6b 69 70 70 65 64 20 2a  tional skipped *
15fa0 2f 0a 20 20 20 20 20 20 74 65 73 74 63 61 73 65  /.      testcase
15fb0 28 20 61 4f 66 66 73 65 74 5b 30 5d 3d 3d 30 20  ( aOffset[0]==0 
15fc0 29 3b 0a 20 20 20 20 20 20 67 6f 74 6f 20 6f 70  );.      goto op
15fd0 5f 63 6f 6c 75 6d 6e 5f 72 65 61 64 5f 68 65 61  _column_read_hea
15fe0 64 65 72 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 0a  der;.    }.  }..
15ff0 20 20 2f 2a 20 4d 61 6b 65 20 73 75 72 65 20 61    /* Make sure a
16000 74 20 6c 65 61 73 74 20 74 68 65 20 66 69 72 73  t least the firs
16010 74 20 70 32 2b 31 20 65 6e 74 72 69 65 73 20 6f  t p2+1 entries o
16020 66 20 74 68 65 20 68 65 61 64 65 72 20 68 61 76  f the header hav
16030 65 20 62 65 65 6e 0a 20 20 2a 2a 20 70 61 72 73  e been.  ** pars
16040 65 64 20 61 6e 64 20 76 61 6c 69 64 20 69 6e 66  ed and valid inf
16050 6f 72 6d 61 74 69 6f 6e 20 69 73 20 69 6e 20 61  ormation is in a
16060 4f 66 66 73 65 74 5b 5d 20 61 6e 64 20 70 43 2d  Offset[] and pC-
16070 3e 61 54 79 70 65 5b 5d 2e 0a 20 20 2a 2f 0a 20  >aType[]..  */. 
16080 20 69 66 28 20 70 43 2d 3e 6e 48 64 72 50 61 72   if( pC->nHdrPar
16090 73 65 64 3c 3d 70 32 20 29 7b 0a 20 20 20 20 2f  sed<=p2 ){.    /
160a0 2a 20 49 66 20 74 68 65 72 65 20 69 73 20 6d 6f  * If there is mo
160b0 72 65 20 68 65 61 64 65 72 20 61 76 61 69 6c 61  re header availa
160c0 62 6c 65 20 66 6f 72 20 70 61 72 73 69 6e 67 20  ble for parsing 
160d0 69 6e 20 74 68 65 20 72 65 63 6f 72 64 2c 20 74  in the record, t
160e0 72 79 0a 20 20 20 20 2a 2a 20 74 6f 20 65 78 74  ry.    ** to ext
160f0 72 61 63 74 20 61 64 64 69 74 69 6f 6e 61 6c 20  ract additional 
16100 66 69 65 6c 64 73 20 75 70 20 74 68 72 6f 75 67  fields up throug
16110 68 20 74 68 65 20 70 32 2b 31 2d 74 68 20 66 69  h the p2+1-th fi
16120 65 6c 64 20 0a 20 20 20 20 2a 2f 0a 20 20 20 20  eld .    */.    
16130 69 66 28 20 70 43 2d 3e 69 48 64 72 4f 66 66 73  if( pC->iHdrOffs
16140 65 74 3c 61 4f 66 66 73 65 74 5b 30 5d 20 29 7b  et<aOffset[0] ){
16150 0a 20 20 20 20 20 20 2f 2a 20 4d 61 6b 65 20 73  .      /* Make s
16160 75 72 65 20 7a 44 61 74 61 20 70 6f 69 6e 74 73  ure zData points
16170 20 74 6f 20 65 6e 6f 75 67 68 20 6f 66 20 74 68   to enough of th
16180 65 20 72 65 63 6f 72 64 20 74 6f 20 63 6f 76 65  e record to cove
16190 72 20 74 68 65 20 68 65 61 64 65 72 2e 20 2a 2f  r the header. */
161a0 0a 20 20 20 20 20 20 69 66 28 20 70 43 2d 3e 61  .      if( pC->a
161b0 52 6f 77 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  Row==0 ){.      
161c0 20 20 6d 65 6d 73 65 74 28 26 73 4d 65 6d 2c 20    memset(&sMem, 
161d0 30 2c 20 73 69 7a 65 6f 66 28 73 4d 65 6d 29 29  0, sizeof(sMem))
161e0 3b 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20 73  ;.        rc = s
161f0 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 46 72 6f  qlite3VdbeMemFro
16200 6d 42 74 72 65 65 28 70 43 2d 3e 75 63 2e 70 43  mBtree(pC->uc.pC
16210 75 72 73 6f 72 2c 20 30 2c 20 61 4f 66 66 73 65  ursor, 0, aOffse
16220 74 5b 30 5d 2c 20 26 73 4d 65 6d 29 3b 0a 20 20  t[0], &sMem);.  
16230 20 20 20 20 20 20 69 66 28 20 72 63 21 3d 53 51        if( rc!=SQ
16240 4c 49 54 45 5f 4f 4b 20 29 20 67 6f 74 6f 20 61  LITE_OK ) goto a
16250 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
16260 72 3b 0a 20 20 20 20 20 20 20 20 7a 44 61 74 61  r;.        zData
16270 20 3d 20 28 75 38 2a 29 73 4d 65 6d 2e 7a 3b 0a   = (u8*)sMem.z;.
16280 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20        }else{.   
16290 20 20 20 20 20 7a 44 61 74 61 20 3d 20 70 43 2d       zData = pC-
162a0 3e 61 52 6f 77 3b 0a 20 20 20 20 20 20 7d 0a 20  >aRow;.      }. 
162b0 20 0a 20 20 20 20 20 20 2f 2a 20 46 69 6c 6c 20   .      /* Fill 
162c0 69 6e 20 70 43 2d 3e 61 54 79 70 65 5b 69 5d 20  in pC->aType[i] 
162d0 61 6e 64 20 61 4f 66 66 73 65 74 5b 69 5d 20 76  and aOffset[i] v
162e0 61 6c 75 65 73 20 74 68 72 6f 75 67 68 20 74 68  alues through th
162f0 65 20 70 32 2d 74 68 20 66 69 65 6c 64 2e 20 2a  e p2-th field. *
16300 2f 0a 20 20 20 20 6f 70 5f 63 6f 6c 75 6d 6e 5f  /.    op_column_
16310 72 65 61 64 5f 68 65 61 64 65 72 3a 0a 20 20 20  read_header:.   
16320 20 20 20 69 20 3d 20 70 43 2d 3e 6e 48 64 72 50     i = pC->nHdrP
16330 61 72 73 65 64 3b 0a 20 20 20 20 20 20 6f 66 66  arsed;.      off
16340 73 65 74 36 34 20 3d 20 61 4f 66 66 73 65 74 5b  set64 = aOffset[
16350 69 5d 3b 0a 20 20 20 20 20 20 7a 48 64 72 20 3d  i];.      zHdr =
16360 20 7a 44 61 74 61 20 2b 20 70 43 2d 3e 69 48 64   zData + pC->iHd
16370 72 4f 66 66 73 65 74 3b 0a 20 20 20 20 20 20 7a  rOffset;.      z
16380 45 6e 64 48 64 72 20 3d 20 7a 44 61 74 61 20 2b  EndHdr = zData +
16390 20 61 4f 66 66 73 65 74 5b 30 5d 3b 0a 20 20 20   aOffset[0];.   
163a0 20 20 20 74 65 73 74 63 61 73 65 28 20 7a 48 64     testcase( zHd
163b0 72 3e 3d 7a 45 6e 64 48 64 72 20 29 3b 0a 20 20  r>=zEndHdr );.  
163c0 20 20 20 20 64 6f 7b 0a 20 20 20 20 20 20 20 20      do{.        
163d0 69 66 28 20 28 70 43 2d 3e 61 54 79 70 65 5b 69  if( (pC->aType[i
163e0 5d 20 3d 20 74 20 3d 20 7a 48 64 72 5b 30 5d 29  ] = t = zHdr[0])
163f0 3c 30 78 38 30 20 29 7b 0a 20 20 20 20 20 20 20  <0x80 ){.       
16400 20 20 20 7a 48 64 72 2b 2b 3b 0a 20 20 20 20 20     zHdr++;.     
16410 20 20 20 20 20 6f 66 66 73 65 74 36 34 20 2b 3d       offset64 +=
16420 20 73 71 6c 69 74 65 33 56 64 62 65 4f 6e 65 42   sqlite3VdbeOneB
16430 79 74 65 53 65 72 69 61 6c 54 79 70 65 4c 65 6e  yteSerialTypeLen
16440 28 74 29 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c  (t);.        }el
16450 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20 7a 48  se{.          zH
16460 64 72 20 2b 3d 20 73 71 6c 69 74 65 33 47 65 74  dr += sqlite3Get
16470 56 61 72 69 6e 74 33 32 28 7a 48 64 72 2c 20 26  Varint32(zHdr, &
16480 74 29 3b 0a 20 20 20 20 20 20 20 20 20 20 70 43  t);.          pC
16490 2d 3e 61 54 79 70 65 5b 69 5d 20 3d 20 74 3b 0a  ->aType[i] = t;.
164a0 20 20 20 20 20 20 20 20 20 20 6f 66 66 73 65 74            offset
164b0 36 34 20 2b 3d 20 73 71 6c 69 74 65 33 56 64 62  64 += sqlite3Vdb
164c0 65 53 65 72 69 61 6c 54 79 70 65 4c 65 6e 28 74  eSerialTypeLen(t
164d0 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20  );.        }.   
164e0 20 20 20 20 20 61 4f 66 66 73 65 74 5b 2b 2b 69       aOffset[++i
164f0 5d 20 3d 20 28 75 33 32 29 28 6f 66 66 73 65 74  ] = (u32)(offset
16500 36 34 20 26 20 30 78 66 66 66 66 66 66 66 66 29  64 & 0xffffffff)
16510 3b 0a 20 20 20 20 20 20 7d 77 68 69 6c 65 28 20  ;.      }while( 
16520 69 3c 3d 70 32 20 26 26 20 7a 48 64 72 3c 7a 45  i<=p2 && zHdr<zE
16530 6e 64 48 64 72 20 29 3b 0a 0a 20 20 20 20 20 20  ndHdr );..      
16540 2f 2a 20 54 68 65 20 72 65 63 6f 72 64 20 69 73  /* The record is
16550 20 63 6f 72 72 75 70 74 20 69 66 20 61 6e 79 20   corrupt if any 
16560 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  of the following
16570 20 61 72 65 20 74 72 75 65 3a 0a 20 20 20 20 20   are true:.     
16580 20 2a 2a 20 28 31 29 20 74 68 65 20 62 79 74 65   ** (1) the byte
16590 73 20 6f 66 20 74 68 65 20 68 65 61 64 65 72 20  s of the header 
165a0 65 78 74 65 6e 64 20 70 61 73 74 20 74 68 65 20  extend past the 
165b0 64 65 63 6c 61 72 65 64 20 68 65 61 64 65 72 20  declared header 
165c0 73 69 7a 65 0a 20 20 20 20 20 20 2a 2a 20 28 32  size.      ** (2
165d0 29 20 74 68 65 20 65 6e 74 69 72 65 20 68 65 61  ) the entire hea
165e0 64 65 72 20 77 61 73 20 75 73 65 64 20 62 75 74  der was used but
165f0 20 6e 6f 74 20 61 6c 6c 20 64 61 74 61 20 77 61   not all data wa
16600 73 20 75 73 65 64 0a 20 20 20 20 20 20 2a 2a 20  s used.      ** 
16610 28 33 29 20 74 68 65 20 65 6e 64 20 6f 66 20 74  (3) the end of t
16620 68 65 20 64 61 74 61 20 65 78 74 65 6e 64 73 20  he data extends 
16630 62 65 79 6f 6e 64 20 74 68 65 20 65 6e 64 20 6f  beyond the end o
16640 66 20 74 68 65 20 72 65 63 6f 72 64 2e 0a 20 20  f the record..  
16650 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 69 66 28      */.      if(
16660 20 28 7a 48 64 72 3e 3d 7a 45 6e 64 48 64 72 20   (zHdr>=zEndHdr 
16670 26 26 20 28 7a 48 64 72 3e 7a 45 6e 64 48 64 72  && (zHdr>zEndHdr
16680 20 7c 7c 20 6f 66 66 73 65 74 36 34 21 3d 70 43   || offset64!=pC
16690 2d 3e 70 61 79 6c 6f 61 64 53 69 7a 65 29 29 0a  ->payloadSize)).
166a0 20 20 20 20 20 20 20 7c 7c 20 28 6f 66 66 73 65         || (offse
166b0 74 36 34 20 3e 20 70 43 2d 3e 70 61 79 6c 6f 61  t64 > pC->payloa
166c0 64 53 69 7a 65 29 0a 20 20 20 20 20 20 29 7b 0a  dSize).      ){.
166d0 20 20 20 20 20 20 20 20 69 66 28 20 61 4f 66 66          if( aOff
166e0 73 65 74 5b 30 5d 3d 3d 30 20 29 7b 0a 20 20 20  set[0]==0 ){.   
166f0 20 20 20 20 20 20 20 69 20 3d 20 30 3b 0a 20 20         i = 0;.  
16700 20 20 20 20 20 20 20 20 7a 48 64 72 20 3d 20 7a          zHdr = z
16710 45 6e 64 48 64 72 3b 0a 20 20 20 20 20 20 20 20  EndHdr;.        
16720 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20  }else{.         
16730 20 69 66 28 20 70 43 2d 3e 61 52 6f 77 3d 3d 30   if( pC->aRow==0
16740 20 29 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65   ) sqlite3VdbeMe
16750 6d 52 65 6c 65 61 73 65 28 26 73 4d 65 6d 29 3b  mRelease(&sMem);
16760 0a 20 20 20 20 20 20 20 20 20 20 67 6f 74 6f 20  .          goto 
16770 6f 70 5f 63 6f 6c 75 6d 6e 5f 63 6f 72 72 75 70  op_column_corrup
16780 74 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20  t;.        }.   
16790 20 20 20 7d 0a 0a 20 20 20 20 20 20 70 43 2d 3e     }..      pC->
167a0 6e 48 64 72 50 61 72 73 65 64 20 3d 20 69 3b 0a  nHdrParsed = i;.
167b0 20 20 20 20 20 20 70 43 2d 3e 69 48 64 72 4f 66        pC->iHdrOf
167c0 66 73 65 74 20 3d 20 28 75 33 32 29 28 7a 48 64  fset = (u32)(zHd
167d0 72 20 2d 20 7a 44 61 74 61 29 3b 0a 20 20 20 20  r - zData);.    
167e0 20 20 69 66 28 20 70 43 2d 3e 61 52 6f 77 3d 3d    if( pC->aRow==
167f0 30 20 29 20 73 71 6c 69 74 65 33 56 64 62 65 4d  0 ) sqlite3VdbeM
16800 65 6d 52 65 6c 65 61 73 65 28 26 73 4d 65 6d 29  emRelease(&sMem)
16810 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20  ;.    }else{.   
16820 20 20 20 74 20 3d 20 30 3b 0a 20 20 20 20 7d 0a     t = 0;.    }.
16830 0a 20 20 20 20 2f 2a 20 49 66 20 61 66 74 65 72  .    /* If after
16840 20 74 72 79 69 6e 67 20 74 6f 20 65 78 74 72 61   trying to extra
16850 63 74 20 6e 65 77 20 65 6e 74 72 69 65 73 20 66  ct new entries f
16860 72 6f 6d 20 74 68 65 20 68 65 61 64 65 72 2c 20  rom the header, 
16870 6e 48 64 72 50 61 72 73 65 64 20 69 73 0a 20 20  nHdrParsed is.  
16880 20 20 2a 2a 20 73 74 69 6c 6c 20 6e 6f 74 20 75    ** still not u
16890 70 20 74 6f 20 70 32 2c 20 74 68 61 74 20 6d 65  p to p2, that me
168a0 61 6e 73 20 74 68 61 74 20 74 68 65 20 72 65 63  ans that the rec
168b0 6f 72 64 20 68 61 73 20 66 65 77 65 72 20 74 68  ord has fewer th
168c0 61 6e 20 70 32 0a 20 20 20 20 2a 2a 20 63 6f 6c  an p2.    ** col
168d0 75 6d 6e 73 2e 20 20 53 6f 20 74 68 65 20 72 65  umns.  So the re
168e0 73 75 6c 74 20 77 69 6c 6c 20 62 65 20 65 69 74  sult will be eit
168f0 68 65 72 20 74 68 65 20 64 65 66 61 75 6c 74 20  her the default 
16900 76 61 6c 75 65 20 6f 72 20 61 20 4e 55 4c 4c 2e  value or a NULL.
16910 0a 20 20 20 20 2a 2f 0a 20 20 20 20 69 66 28 20  .    */.    if( 
16920 70 43 2d 3e 6e 48 64 72 50 61 72 73 65 64 3c 3d  pC->nHdrParsed<=
16930 70 32 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20  p2 ){.      if( 
16940 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f  pOp->p4type==P4_
16950 4d 45 4d 20 29 7b 0a 20 20 20 20 20 20 20 20 73  MEM ){.        s
16960 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 68 61  qlite3VdbeMemSha
16970 6c 6c 6f 77 43 6f 70 79 28 70 44 65 73 74 2c 20  llowCopy(pDest, 
16980 70 4f 70 2d 3e 70 34 2e 70 4d 65 6d 2c 20 4d 45  pOp->p4.pMem, ME
16990 4d 5f 53 74 61 74 69 63 29 3b 0a 20 20 20 20 20  M_Static);.     
169a0 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20   }else{.        
169b0 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65  sqlite3VdbeMemSe
169c0 74 4e 75 6c 6c 28 70 44 65 73 74 29 3b 0a 20 20  tNull(pDest);.  
169d0 20 20 20 20 7d 0a 20 20 20 20 20 20 67 6f 74 6f      }.      goto
169e0 20 6f 70 5f 63 6f 6c 75 6d 6e 5f 6f 75 74 3b 0a   op_column_out;.
169f0 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20      }.  }else{. 
16a00 20 20 20 74 20 3d 20 70 43 2d 3e 61 54 79 70 65     t = pC->aType
16a10 5b 70 32 5d 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20  [p2];.  }..  /* 
16a20 45 78 74 72 61 63 74 20 74 68 65 20 63 6f 6e 74  Extract the cont
16a30 65 6e 74 20 66 6f 72 20 74 68 65 20 70 32 2b 31  ent for the p2+1
16a40 2d 74 68 20 63 6f 6c 75 6d 6e 2e 20 20 43 6f 6e  -th column.  Con
16a50 74 72 6f 6c 20 63 61 6e 20 6f 6e 6c 79 0a 20 20  trol can only.  
16a60 2a 2a 20 72 65 61 63 68 20 74 68 69 73 20 70 6f  ** reach this po
16a70 69 6e 74 20 69 66 20 61 4f 66 66 73 65 74 5b 70  int if aOffset[p
16a80 32 5d 2c 20 61 4f 66 66 73 65 74 5b 70 32 2b 31  2], aOffset[p2+1
16a90 5d 2c 20 61 6e 64 20 70 43 2d 3e 61 54 79 70 65  ], and pC->aType
16aa0 5b 70 32 5d 20 61 72 65 0a 20 20 2a 2a 20 61 6c  [p2] are.  ** al
16ab0 6c 20 76 61 6c 69 64 2e 0a 20 20 2a 2f 0a 20 20  l valid..  */.  
16ac0 61 73 73 65 72 74 28 20 70 32 3c 70 43 2d 3e 6e  assert( p2<pC->n
16ad0 48 64 72 50 61 72 73 65 64 20 29 3b 0a 20 20 61  HdrParsed );.  a
16ae0 73 73 65 72 74 28 20 72 63 3d 3d 53 51 4c 49 54  ssert( rc==SQLIT
16af0 45 5f 4f 4b 20 29 3b 0a 20 20 61 73 73 65 72 74  E_OK );.  assert
16b00 28 20 73 71 6c 69 74 65 33 56 64 62 65 43 68 65  ( sqlite3VdbeChe
16b10 63 6b 4d 65 6d 49 6e 76 61 72 69 61 6e 74 73 28  ckMemInvariants(
16b20 70 44 65 73 74 29 20 29 3b 0a 20 20 69 66 28 20  pDest) );.  if( 
16b30 56 64 62 65 4d 65 6d 44 79 6e 61 6d 69 63 28 70  VdbeMemDynamic(p
16b40 44 65 73 74 29 20 29 7b 0a 20 20 20 20 73 71 6c  Dest) ){.    sql
16b50 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75  ite3VdbeMemSetNu
16b60 6c 6c 28 70 44 65 73 74 29 3b 0a 20 20 7d 0a 20  ll(pDest);.  }. 
16b70 20 61 73 73 65 72 74 28 20 74 3d 3d 70 43 2d 3e   assert( t==pC->
16b80 61 54 79 70 65 5b 70 32 5d 20 29 3b 0a 20 20 69  aType[p2] );.  i
16b90 66 28 20 70 43 2d 3e 73 7a 52 6f 77 3e 3d 61 4f  f( pC->szRow>=aO
16ba0 66 66 73 65 74 5b 70 32 2b 31 5d 20 29 7b 0a 20  ffset[p2+1] ){. 
16bb0 20 20 20 2f 2a 20 54 68 69 73 20 69 73 20 74 68     /* This is th
16bc0 65 20 63 6f 6d 6d 6f 6e 20 63 61 73 65 20 77 68  e common case wh
16bd0 65 72 65 20 74 68 65 20 64 65 73 69 72 65 64 20  ere the desired 
16be0 63 6f 6e 74 65 6e 74 20 66 69 74 73 20 6f 6e 20  content fits on 
16bf0 74 68 65 20 6f 72 69 67 69 6e 61 6c 0a 20 20 20  the original.   
16c00 20 2a 2a 20 70 61 67 65 20 2d 20 77 68 65 72 65   ** page - where
16c10 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 69 73 20   the content is 
16c20 6e 6f 74 20 6f 6e 20 61 6e 20 6f 76 65 72 66 6c  not on an overfl
16c30 6f 77 20 70 61 67 65 20 2a 2f 0a 20 20 20 20 7a  ow page */.    z
16c40 44 61 74 61 20 3d 20 70 43 2d 3e 61 52 6f 77 20  Data = pC->aRow 
16c50 2b 20 61 4f 66 66 73 65 74 5b 70 32 5d 3b 0a 20  + aOffset[p2];. 
16c60 20 20 20 69 66 28 20 74 3c 31 32 20 29 7b 0a 20     if( t<12 ){. 
16c70 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
16c80 53 65 72 69 61 6c 47 65 74 28 7a 44 61 74 61 2c  SerialGet(zData,
16c90 20 74 2c 20 70 44 65 73 74 29 3b 0a 20 20 20 20   t, pDest);.    
16ca0 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 2f 2a 20  }else{.      /* 
16cb0 49 66 20 74 68 65 20 63 6f 6c 75 6d 6e 20 76 61  If the column va
16cc0 6c 75 65 20 69 73 20 61 20 73 74 72 69 6e 67 2c  lue is a string,
16cd0 20 77 65 20 6e 65 65 64 20 61 20 70 65 72 73 69   we need a persi
16ce0 73 74 65 6e 74 20 76 61 6c 75 65 2c 20 6e 6f 74  stent value, not
16cf0 0a 20 20 20 20 20 20 2a 2a 20 61 20 4d 45 4d 5f  .      ** a MEM_
16d00 45 70 68 65 6d 20 76 61 6c 75 65 2e 20 20 54 68  Ephem value.  Th
16d10 69 73 20 62 72 61 6e 63 68 20 69 73 20 61 20 66  is branch is a f
16d20 61 73 74 20 73 68 6f 72 74 2d 63 75 74 20 74 68  ast short-cut th
16d30 61 74 20 69 73 20 65 71 75 69 76 61 6c 65 6e 74  at is equivalent
16d40 0a 20 20 20 20 20 20 2a 2a 20 74 6f 20 63 61 6c  .      ** to cal
16d50 6c 69 6e 67 20 73 71 6c 69 74 65 33 56 64 62 65  ling sqlite3Vdbe
16d60 53 65 72 69 61 6c 47 65 74 28 29 20 61 6e 64 20  SerialGet() and 
16d70 73 71 6c 69 74 65 33 56 64 62 65 44 65 65 70 68  sqlite3VdbeDeeph
16d80 65 6d 65 72 61 6c 69 7a 65 28 29 2e 0a 20 20 20  emeralize()..   
16d90 20 20 20 2a 2f 0a 20 20 20 20 20 20 73 74 61 74     */.      stat
16da0 69 63 20 63 6f 6e 73 74 20 75 31 36 20 61 46 6c  ic const u16 aFl
16db0 61 67 5b 5d 20 3d 20 7b 20 4d 45 4d 5f 42 6c 6f  ag[] = { MEM_Blo
16dc0 62 2c 20 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f 54  b, MEM_Str|MEM_T
16dd0 65 72 6d 20 7d 3b 0a 20 20 20 20 20 20 70 44 65  erm };.      pDe
16de0 73 74 2d 3e 6e 20 3d 20 6c 65 6e 20 3d 20 28 74  st->n = len = (t
16df0 2d 31 32 29 2f 32 3b 0a 20 20 20 20 20 20 70 44  -12)/2;.      pD
16e00 65 73 74 2d 3e 65 6e 63 20 3d 20 65 6e 63 6f 64  est->enc = encod
16e10 69 6e 67 3b 0a 20 20 20 20 20 20 69 66 28 20 70  ing;.      if( p
16e20 44 65 73 74 2d 3e 73 7a 4d 61 6c 6c 6f 63 20 3c  Dest->szMalloc <
16e30 20 6c 65 6e 2b 32 20 29 7b 0a 20 20 20 20 20 20   len+2 ){.      
16e40 20 20 70 44 65 73 74 2d 3e 66 6c 61 67 73 20 3d    pDest->flags =
16e50 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20 20 20 20 20   MEM_Null;.     
16e60 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 56 64     if( sqlite3Vd
16e70 62 65 4d 65 6d 47 72 6f 77 28 70 44 65 73 74 2c  beMemGrow(pDest,
16e80 20 6c 65 6e 2b 32 2c 20 30 29 20 29 20 67 6f 74   len+2, 0) ) got
16e90 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 20 20 20 20  o no_mem;.      
16ea0 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 70  }else{.        p
16eb0 44 65 73 74 2d 3e 7a 20 3d 20 70 44 65 73 74 2d  Dest->z = pDest-
16ec0 3e 7a 4d 61 6c 6c 6f 63 3b 0a 20 20 20 20 20 20  >zMalloc;.      
16ed0 7d 0a 20 20 20 20 20 20 6d 65 6d 63 70 79 28 70  }.      memcpy(p
16ee0 44 65 73 74 2d 3e 7a 2c 20 7a 44 61 74 61 2c 20  Dest->z, zData, 
16ef0 6c 65 6e 29 3b 0a 20 20 20 20 20 20 70 44 65 73  len);.      pDes
16f00 74 2d 3e 7a 5b 6c 65 6e 5d 20 3d 20 30 3b 0a 20  t->z[len] = 0;. 
16f10 20 20 20 20 20 70 44 65 73 74 2d 3e 7a 5b 6c 65       pDest->z[le
16f20 6e 2b 31 5d 20 3d 20 30 3b 0a 20 20 20 20 20 20  n+1] = 0;.      
16f30 70 44 65 73 74 2d 3e 66 6c 61 67 73 20 3d 20 61  pDest->flags = a
16f40 46 6c 61 67 5b 74 26 31 5d 3b 0a 20 20 20 20 7d  Flag[t&1];.    }
16f50 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70 44  .  }else{.    pD
16f60 65 73 74 2d 3e 65 6e 63 20 3d 20 65 6e 63 6f 64  est->enc = encod
16f70 69 6e 67 3b 0a 20 20 20 20 2f 2a 20 54 68 69 73  ing;.    /* This
16f80 20 62 72 61 6e 63 68 20 68 61 70 70 65 6e 73 20   branch happens 
16f90 6f 6e 6c 79 20 77 68 65 6e 20 63 6f 6e 74 65 6e  only when conten
16fa0 74 20 69 73 20 6f 6e 20 6f 76 65 72 66 6c 6f 77  t is on overflow
16fb0 20 70 61 67 65 73 20 2a 2f 0a 20 20 20 20 69 66   pages */.    if
16fc0 28 20 28 28 70 4f 70 2d 3e 70 35 20 26 20 28 4f  ( ((pOp->p5 & (O
16fd0 50 46 4c 41 47 5f 4c 45 4e 47 54 48 41 52 47 7c  PFLAG_LENGTHARG|
16fe0 4f 50 46 4c 41 47 5f 54 59 50 45 4f 46 41 52 47  OPFLAG_TYPEOFARG
16ff0 29 29 21 3d 30 0a 20 20 20 20 20 20 20 20 20 20  ))!=0.          
17000 26 26 20 28 28 74 3e 3d 31 32 20 26 26 20 28 74  && ((t>=12 && (t
17010 26 31 29 3d 3d 30 29 20 7c 7c 20 28 70 4f 70 2d  &1)==0) || (pOp-
17020 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 54 59 50  >p5 & OPFLAG_TYP
17030 45 4f 46 41 52 47 29 21 3d 30 29 29 0a 20 20 20  EOFARG)!=0)).   
17040 20 20 7c 7c 20 28 6c 65 6e 20 3d 20 73 71 6c 69    || (len = sqli
17050 74 65 33 56 64 62 65 53 65 72 69 61 6c 54 79 70  te3VdbeSerialTyp
17060 65 4c 65 6e 28 74 29 29 3d 3d 30 0a 20 20 20 20  eLen(t))==0.    
17070 29 7b 0a 20 20 20 20 20 20 2f 2a 20 43 6f 6e 74  ){.      /* Cont
17080 65 6e 74 20 69 73 20 69 72 72 65 6c 65 76 61 6e  ent is irrelevan
17090 74 20 66 6f 72 0a 20 20 20 20 20 20 2a 2a 20 20  t for.      **  
170a0 20 20 31 2e 20 74 68 65 20 74 79 70 65 6f 66 28    1. the typeof(
170b0 29 20 66 75 6e 63 74 69 6f 6e 2c 0a 20 20 20 20  ) function,.    
170c0 20 20 2a 2a 20 20 20 20 32 2e 20 74 68 65 20 6c    **    2. the l
170d0 65 6e 67 74 68 28 58 29 20 66 75 6e 63 74 69 6f  ength(X) functio
170e0 6e 20 69 66 20 58 20 69 73 20 61 20 62 6c 6f 62  n if X is a blob
170f0 2c 20 61 6e 64 0a 20 20 20 20 20 20 2a 2a 20 20  , and.      **  
17100 20 20 33 2e 20 69 66 20 74 68 65 20 63 6f 6e 74    3. if the cont
17110 65 6e 74 20 6c 65 6e 67 74 68 20 69 73 20 7a 65  ent length is ze
17120 72 6f 2e 0a 20 20 20 20 20 20 2a 2a 20 53 6f 20  ro..      ** So 
17130 77 65 20 6d 69 67 68 74 20 61 73 20 77 65 6c 6c  we might as well
17140 20 75 73 65 20 62 6f 67 75 73 20 63 6f 6e 74 65   use bogus conte
17150 6e 74 20 72 61 74 68 65 72 20 74 68 61 6e 20 72  nt rather than r
17160 65 61 64 69 6e 67 0a 20 20 20 20 20 20 2a 2a 20  eading.      ** 
17170 63 6f 6e 74 65 6e 74 20 66 72 6f 6d 20 64 69 73  content from dis
17180 6b 2e 20 0a 20 20 20 20 20 20 2a 2a 0a 20 20 20  k. .      **.   
17190 20 20 20 2a 2a 20 41 6c 74 68 6f 75 67 68 20 73     ** Although s
171a0 71 6c 69 74 65 33 56 64 62 65 53 65 72 69 61 6c  qlite3VdbeSerial
171b0 47 65 74 28 29 20 6d 61 79 20 72 65 61 64 20 61  Get() may read a
171c0 74 20 6d 6f 73 74 20 38 20 62 79 74 65 73 20 66  t most 8 bytes f
171d0 72 6f 6d 20 74 68 65 0a 20 20 20 20 20 20 2a 2a  rom the.      **
171e0 20 62 75 66 66 65 72 20 70 61 73 73 65 64 20 74   buffer passed t
171f0 6f 20 69 74 2c 20 64 65 62 75 67 67 69 6e 67 20  o it, debugging 
17200 66 75 6e 63 74 69 6f 6e 20 56 64 62 65 4d 65 6d  function VdbeMem
17210 50 72 65 74 74 79 50 72 69 6e 74 28 29 20 6d 61  PrettyPrint() ma
17220 79 0a 20 20 20 20 20 20 2a 2a 20 72 65 61 64 20  y.      ** read 
17230 75 70 20 74 6f 20 31 36 2e 20 53 6f 20 31 36 20  up to 16. So 16 
17240 62 79 74 65 73 20 6f 66 20 62 6f 67 75 73 20 63  bytes of bogus c
17250 6f 6e 74 65 6e 74 20 69 73 20 73 75 70 70 6c 69  ontent is suppli
17260 65 64 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20  ed..      */.   
17270 20 20 20 73 74 61 74 69 63 20 75 38 20 61 5a 65     static u8 aZe
17280 72 6f 5b 31 36 5d 3b 20 20 2f 2a 20 54 68 69 73  ro[16];  /* This
17290 20 69 73 20 74 68 65 20 62 6f 67 75 73 20 63 6f   is the bogus co
172a0 6e 74 65 6e 74 20 2a 2f 0a 20 20 20 20 20 20 73  ntent */.      s
172b0 71 6c 69 74 65 33 56 64 62 65 53 65 72 69 61 6c  qlite3VdbeSerial
172c0 47 65 74 28 61 5a 65 72 6f 2c 20 74 2c 20 70 44  Get(aZero, t, pD
172d0 65 73 74 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b  est);.    }else{
172e0 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69  .      rc = sqli
172f0 74 65 33 56 64 62 65 4d 65 6d 46 72 6f 6d 42 74  te3VdbeMemFromBt
17300 72 65 65 28 70 43 2d 3e 75 63 2e 70 43 75 72 73  ree(pC->uc.pCurs
17310 6f 72 2c 20 61 4f 66 66 73 65 74 5b 70 32 5d 2c  or, aOffset[p2],
17320 20 6c 65 6e 2c 20 70 44 65 73 74 29 3b 0a 20 20   len, pDest);.  
17330 20 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49      if( rc!=SQLI
17340 54 45 5f 4f 4b 20 29 20 67 6f 74 6f 20 61 62 6f  TE_OK ) goto abo
17350 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
17360 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64  .      sqlite3Vd
17370 62 65 53 65 72 69 61 6c 47 65 74 28 28 63 6f 6e  beSerialGet((con
17380 73 74 20 75 38 2a 29 70 44 65 73 74 2d 3e 7a 2c  st u8*)pDest->z,
17390 20 74 2c 20 70 44 65 73 74 29 3b 0a 20 20 20 20   t, pDest);.    
173a0 20 20 70 44 65 73 74 2d 3e 66 6c 61 67 73 20 26    pDest->flags &
173b0 3d 20 7e 4d 45 4d 5f 45 70 68 65 6d 3b 0a 20 20  = ~MEM_Ephem;.  
173c0 20 20 7d 0a 20 20 7d 0a 0a 6f 70 5f 63 6f 6c 75    }.  }..op_colu
173d0 6d 6e 5f 6f 75 74 3a 0a 20 20 55 50 44 41 54 45  mn_out:.  UPDATE
173e0 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 44  _MAX_BLOBSIZE(pD
173f0 65 73 74 29 3b 0a 20 20 52 45 47 49 53 54 45 52  est);.  REGISTER
17400 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 33 2c 20  _TRACE(pOp->p3, 
17410 70 44 65 73 74 29 3b 0a 20 20 62 72 65 61 6b 3b  pDest);.  break;
17420 0a 0a 6f 70 5f 63 6f 6c 75 6d 6e 5f 63 6f 72 72  ..op_column_corr
17430 75 70 74 3a 0a 20 20 69 66 28 20 61 4f 70 5b 30  upt:.  if( aOp[0
17440 5d 2e 70 33 3e 30 20 29 7b 0a 20 20 20 20 70 4f  ].p3>0 ){.    pO
17450 70 20 3d 20 26 61 4f 70 5b 61 4f 70 5b 30 5d 2e  p = &aOp[aOp[0].
17460 70 33 2d 31 5d 3b 0a 20 20 20 20 62 72 65 61 6b  p3-1];.    break
17470 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 72  ;.  }else{.    r
17480 63 20 3d 20 53 51 4c 49 54 45 5f 43 4f 52 52 55  c = SQLITE_CORRU
17490 50 54 5f 42 4b 50 54 3b 0a 20 20 20 20 67 6f 74  PT_BKPT;.    got
174a0 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
174b0 72 72 6f 72 3b 0a 20 20 7d 0a 7d 0a 0a 2f 2a 20  rror;.  }.}../* 
174c0 4f 70 63 6f 64 65 3a 20 41 66 66 69 6e 69 74 79  Opcode: Affinity
174d0 20 50 31 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a   P1 P2 * P4 *.**
174e0 20 53 79 6e 6f 70 73 69 73 3a 20 61 66 66 69 6e   Synopsis: affin
174f0 69 74 79 28 72 5b 50 31 40 50 32 5d 29 0a 2a 2a  ity(r[P1@P2]).**
17500 0a 2a 2a 20 41 70 70 6c 79 20 61 66 66 69 6e 69  .** Apply affini
17510 74 69 65 73 20 74 6f 20 61 20 72 61 6e 67 65 20  ties to a range 
17520 6f 66 20 50 32 20 72 65 67 69 73 74 65 72 73 20  of P2 registers 
17530 73 74 61 72 74 69 6e 67 20 77 69 74 68 20 50 31  starting with P1
17540 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20  ..**.** P4 is a 
17550 73 74 72 69 6e 67 20 74 68 61 74 20 69 73 20 50  string that is P
17560 32 20 63 68 61 72 61 63 74 65 72 73 20 6c 6f 6e  2 characters lon
17570 67 2e 20 54 68 65 20 4e 2d 74 68 20 63 68 61 72  g. The N-th char
17580 61 63 74 65 72 20 6f 66 20 74 68 65 0a 2a 2a 20  acter of the.** 
17590 73 74 72 69 6e 67 20 69 6e 64 69 63 61 74 65 73  string indicates
175a0 20 74 68 65 20 63 6f 6c 75 6d 6e 20 61 66 66 69   the column affi
175b0 6e 69 74 79 20 74 68 61 74 20 73 68 6f 75 6c 64  nity that should
175c0 20 62 65 20 75 73 65 64 20 66 6f 72 20 74 68 65   be used for the
175d0 20 4e 2d 74 68 0a 2a 2a 20 6d 65 6d 6f 72 79 20   N-th.** memory 
175e0 63 65 6c 6c 20 69 6e 20 74 68 65 20 72 61 6e 67  cell in the rang
175f0 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 41 66  e..*/.case OP_Af
17600 66 69 6e 69 74 79 3a 20 7b 0a 20 20 63 6f 6e 73  finity: {.  cons
17610 74 20 63 68 61 72 20 2a 7a 41 66 66 69 6e 69 74  t char *zAffinit
17620 79 3b 20 20 20 2f 2a 20 54 68 65 20 61 66 66 69  y;   /* The affi
17630 6e 69 74 79 20 74 6f 20 62 65 20 61 70 70 6c 69  nity to be appli
17640 65 64 20 2a 2f 0a 0a 20 20 7a 41 66 66 69 6e 69  ed */..  zAffini
17650 74 79 20 3d 20 70 4f 70 2d 3e 70 34 2e 7a 3b 0a  ty = pOp->p4.z;.
17660 20 20 61 73 73 65 72 74 28 20 7a 41 66 66 69 6e    assert( zAffin
17670 69 74 79 21 3d 30 20 29 3b 0a 20 20 61 73 73 65  ity!=0 );.  asse
17680 72 74 28 20 70 4f 70 2d 3e 70 32 3e 30 20 29 3b  rt( pOp->p2>0 );
17690 0a 20 20 61 73 73 65 72 74 28 20 7a 41 66 66 69  .  assert( zAffi
176a0 6e 69 74 79 5b 70 4f 70 2d 3e 70 32 5d 3d 3d 30  nity[pOp->p2]==0
176b0 20 29 3b 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d   );.  pIn1 = &aM
176c0 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 77  em[pOp->p1];.  w
176d0 68 69 6c 65 28 20 31 20 2f 2a 65 78 69 74 2d 62  hile( 1 /*exit-b
176e0 79 2d 62 72 65 61 6b 2a 2f 20 29 7b 0a 20 20 20  y-break*/ ){.   
176f0 20 61 73 73 65 72 74 28 20 70 49 6e 31 20 3c 3d   assert( pIn1 <=
17700 20 26 70 2d 3e 61 4d 65 6d 5b 28 70 2d 3e 6e 4d   &p->aMem[(p->nM
17710 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f  em+1 - p->nCurso
17720 72 29 5d 20 29 3b 0a 20 20 20 20 61 73 73 65 72  r)] );.    asser
17730 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 70 49  t( memIsValid(pI
17740 6e 31 29 20 29 3b 0a 20 20 20 20 61 70 70 6c 79  n1) );.    apply
17750 41 66 66 69 6e 69 74 79 28 70 49 6e 31 2c 20 7a  Affinity(pIn1, z
17760 41 66 66 69 6e 69 74 79 5b 30 5d 2c 20 65 6e 63  Affinity[0], enc
17770 6f 64 69 6e 67 29 3b 0a 20 20 20 20 69 66 28 20  oding);.    if( 
17780 7a 41 66 66 69 6e 69 74 79 5b 30 5d 3d 3d 53 51  zAffinity[0]==SQ
17790 4c 49 54 45 5f 41 46 46 5f 52 45 41 4c 20 26 26  LITE_AFF_REAL &&
177a0 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20   (pIn1->flags & 
177b0 4d 45 4d 5f 49 6e 74 29 21 3d 30 20 29 7b 0a 20  MEM_Int)!=0 ){. 
177c0 20 20 20 20 20 2f 2a 20 57 68 65 6e 20 61 70 70       /* When app
177d0 6c 79 69 6e 67 20 52 45 41 4c 20 61 66 66 69 6e  lying REAL affin
177e0 69 74 79 2c 20 69 66 20 74 68 65 20 72 65 73 75  ity, if the resu
177f0 6c 74 20 69 73 20 73 74 69 6c 6c 20 61 6e 20 4d  lt is still an M
17800 45 4d 5f 49 6e 74 0a 20 20 20 20 20 20 2a 2a 20  EM_Int.      ** 
17810 74 68 61 74 20 77 69 6c 6c 20 66 69 74 20 69 6e  that will fit in
17820 20 36 20 62 79 74 65 73 2c 20 74 68 65 6e 20 63   6 bytes, then c
17830 68 61 6e 67 65 20 74 68 65 20 74 79 70 65 20 74  hange the type t
17840 6f 20 4d 45 4d 5f 49 6e 74 52 65 61 6c 0a 20 20  o MEM_IntReal.  
17850 20 20 20 20 2a 2a 20 73 6f 20 74 68 61 74 20 77      ** so that w
17860 65 20 6b 65 65 70 20 74 68 65 20 68 69 67 68 2d  e keep the high-
17870 72 65 73 6f 6c 75 74 69 6f 6e 20 69 6e 74 65 67  resolution integ
17880 65 72 20 76 61 6c 75 65 20 62 75 74 20 6b 6e 6f  er value but kno
17890 77 20 74 68 61 74 0a 20 20 20 20 20 20 2a 2a 20  w that.      ** 
178a0 74 68 65 20 74 79 70 65 20 72 65 61 6c 6c 79 20  the type really 
178b0 77 61 6e 74 73 20 74 6f 20 62 65 20 52 45 41 4c  wants to be REAL
178c0 2e 20 2a 2f 0a 20 20 20 20 20 20 74 65 73 74 63  . */.      testc
178d0 61 73 65 28 20 70 49 6e 31 2d 3e 75 2e 69 3d 3d  ase( pIn1->u.i==
178e0 31 34 30 37 33 37 34 38 38 33 35 35 33 32 38 4c  140737488355328L
178f0 4c 20 29 3b 0a 20 20 20 20 20 20 74 65 73 74 63  L );.      testc
17900 61 73 65 28 20 70 49 6e 31 2d 3e 75 2e 69 3d 3d  ase( pIn1->u.i==
17910 31 34 30 37 33 37 34 38 38 33 35 35 33 32 37 4c  140737488355327L
17920 4c 20 29 3b 0a 20 20 20 20 20 20 74 65 73 74 63  L );.      testc
17930 61 73 65 28 20 70 49 6e 31 2d 3e 75 2e 69 3d 3d  ase( pIn1->u.i==
17940 2d 31 34 30 37 33 37 34 38 38 33 35 35 33 32 38  -140737488355328
17950 4c 4c 20 29 3b 0a 20 20 20 20 20 20 74 65 73 74  LL );.      test
17960 63 61 73 65 28 20 70 49 6e 31 2d 3e 75 2e 69 3d  case( pIn1->u.i=
17970 3d 2d 31 34 30 37 33 37 34 38 38 33 35 35 33 32  =-14073748835532
17980 39 4c 4c 20 29 3b 0a 20 20 20 20 20 20 69 66 28  9LL );.      if(
17990 20 70 49 6e 31 2d 3e 75 2e 69 3c 3d 31 34 30 37   pIn1->u.i<=1407
179a0 33 37 34 38 38 33 35 35 33 32 37 4c 4c 20 26 26  37488355327LL &&
179b0 20 70 49 6e 31 2d 3e 75 2e 69 3e 3d 2d 31 34 30   pIn1->u.i>=-140
179c0 37 33 37 34 38 38 33 35 35 33 32 38 4c 4c 20 29  737488355328LL )
179d0 7b 0a 20 20 20 20 20 20 20 20 70 49 6e 31 2d 3e  {.        pIn1->
179e0 66 6c 61 67 73 20 7c 3d 20 4d 45 4d 5f 49 6e 74  flags |= MEM_Int
179f0 52 65 61 6c 3b 0a 20 20 20 20 20 20 20 20 70 49  Real;.        pI
17a00 6e 31 2d 3e 66 6c 61 67 73 20 26 3d 20 7e 4d 45  n1->flags &= ~ME
17a10 4d 5f 49 6e 74 3b 0a 20 20 20 20 20 20 7d 65 6c  M_Int;.      }el
17a20 73 65 7b 0a 20 20 20 20 20 20 20 20 70 49 6e 31  se{.        pIn1
17a30 2d 3e 75 2e 72 20 3d 20 28 64 6f 75 62 6c 65 29  ->u.r = (double)
17a40 70 49 6e 31 2d 3e 75 2e 69 3b 0a 20 20 20 20 20  pIn1->u.i;.     
17a50 20 20 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 7c     pIn1->flags |
17a60 3d 20 4d 45 4d 5f 52 65 61 6c 3b 0a 20 20 20 20  = MEM_Real;.    
17a70 20 20 20 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20      pIn1->flags 
17a80 26 3d 20 7e 4d 45 4d 5f 49 6e 74 3b 0a 20 20 20  &= ~MEM_Int;.   
17a90 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 52     }.    }.    R
17aa0 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 28 69  EGISTER_TRACE((i
17ab0 6e 74 29 28 70 49 6e 31 2d 61 4d 65 6d 29 2c 20  nt)(pIn1-aMem), 
17ac0 70 49 6e 31 29 3b 0a 20 20 20 20 7a 41 66 66 69  pIn1);.    zAffi
17ad0 6e 69 74 79 2b 2b 3b 0a 20 20 20 20 69 66 28 20  nity++;.    if( 
17ae0 7a 41 66 66 69 6e 69 74 79 5b 30 5d 3d 3d 30 20  zAffinity[0]==0 
17af0 29 20 62 72 65 61 6b 3b 0a 20 20 20 20 70 49 6e  ) break;.    pIn
17b00 31 2b 2b 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  1++;.  }.  break
17b10 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
17b20 4d 61 6b 65 52 65 63 6f 72 64 20 50 31 20 50 32  MakeRecord P1 P2
17b30 20 50 33 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f   P3 P4 *.** Syno
17b40 70 73 69 73 3a 20 72 5b 50 33 5d 3d 6d 6b 72 65  psis: r[P3]=mkre
17b50 63 28 72 5b 50 31 40 50 32 5d 29 0a 2a 2a 0a 2a  c(r[P1@P2]).**.*
17b60 2a 20 43 6f 6e 76 65 72 74 20 50 32 20 72 65 67  * Convert P2 reg
17b70 69 73 74 65 72 73 20 62 65 67 69 6e 6e 69 6e 67  isters beginning
17b80 20 77 69 74 68 20 50 31 20 69 6e 74 6f 20 74 68   with P1 into th
17b90 65 20 5b 72 65 63 6f 72 64 20 66 6f 72 6d 61 74  e [record format
17ba0 5d 0a 2a 2a 20 75 73 65 20 61 73 20 61 20 64 61  ].** use as a da
17bb0 74 61 20 72 65 63 6f 72 64 20 69 6e 20 61 20 64  ta record in a d
17bc0 61 74 61 62 61 73 65 20 74 61 62 6c 65 20 6f 72  atabase table or
17bd0 20 61 73 20 61 20 6b 65 79 0a 2a 2a 20 69 6e 20   as a key.** in 
17be0 61 6e 20 69 6e 64 65 78 2e 20 20 54 68 65 20 4f  an index.  The O
17bf0 50 5f 43 6f 6c 75 6d 6e 20 6f 70 63 6f 64 65 20  P_Column opcode 
17c00 63 61 6e 20 64 65 63 6f 64 65 20 74 68 65 20 72  can decode the r
17c10 65 63 6f 72 64 20 6c 61 74 65 72 2e 0a 2a 2a 0a  ecord later..**.
17c20 2a 2a 20 50 34 20 6d 61 79 20 62 65 20 61 20 73  ** P4 may be a s
17c30 74 72 69 6e 67 20 74 68 61 74 20 69 73 20 50 32  tring that is P2
17c40 20 63 68 61 72 61 63 74 65 72 73 20 6c 6f 6e 67   characters long
17c50 2e 20 20 54 68 65 20 4e 2d 74 68 20 63 68 61 72  .  The N-th char
17c60 61 63 74 65 72 20 6f 66 20 74 68 65 0a 2a 2a 20  acter of the.** 
17c70 73 74 72 69 6e 67 20 69 6e 64 69 63 61 74 65 73  string indicates
17c80 20 74 68 65 20 63 6f 6c 75 6d 6e 20 61 66 66 69   the column affi
17c90 6e 69 74 79 20 74 68 61 74 20 73 68 6f 75 6c 64  nity that should
17ca0 20 62 65 20 75 73 65 64 20 66 6f 72 20 74 68 65   be used for the
17cb0 20 4e 2d 74 68 0a 2a 2a 20 66 69 65 6c 64 20 6f   N-th.** field o
17cc0 66 20 74 68 65 20 69 6e 64 65 78 20 6b 65 79 2e  f the index key.
17cd0 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6d 61 70 70 69  .**.** The mappi
17ce0 6e 67 20 66 72 6f 6d 20 63 68 61 72 61 63 74 65  ng from characte
17cf0 72 20 74 6f 20 61 66 66 69 6e 69 74 79 20 69 73  r to affinity is
17d00 20 67 69 76 65 6e 20 62 79 20 74 68 65 20 53 51   given by the SQ
17d10 4c 49 54 45 5f 41 46 46 5f 0a 2a 2a 20 6d 61 63  LITE_AFF_.** mac
17d20 72 6f 73 20 64 65 66 69 6e 65 64 20 69 6e 20 73  ros defined in s
17d30 71 6c 69 74 65 49 6e 74 2e 68 2e 0a 2a 2a 0a 2a  qliteInt.h..**.*
17d40 2a 20 49 66 20 50 34 20 69 73 20 4e 55 4c 4c 20  * If P4 is NULL 
17d50 74 68 65 6e 20 61 6c 6c 20 69 6e 64 65 78 20 66  then all index f
17d60 69 65 6c 64 73 20 68 61 76 65 20 74 68 65 20 61  ields have the a
17d70 66 66 69 6e 69 74 79 20 42 4c 4f 42 2e 0a 2a 2f  ffinity BLOB..*/
17d80 0a 63 61 73 65 20 4f 50 5f 4d 61 6b 65 52 65 63  .case OP_MakeRec
17d90 6f 72 64 3a 20 7b 0a 20 20 4d 65 6d 20 2a 70 52  ord: {.  Mem *pR
17da0 65 63 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ec;             
17db0 2f 2a 20 54 68 65 20 6e 65 77 20 72 65 63 6f 72  /* The new recor
17dc0 64 20 2a 2f 0a 20 20 75 36 34 20 6e 44 61 74 61  d */.  u64 nData
17dd0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
17de0 20 4e 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73   Number of bytes
17df0 20 6f 66 20 64 61 74 61 20 73 70 61 63 65 20 2a   of data space *
17e00 2f 0a 20 20 69 6e 74 20 6e 48 64 72 3b 20 20 20  /.  int nHdr;   
17e10 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
17e20 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20 6f 66  mber of bytes of
17e30 20 68 65 61 64 65 72 20 73 70 61 63 65 20 2a 2f   header space */
17e40 0a 20 20 69 36 34 20 6e 42 79 74 65 3b 20 20 20  .  i64 nByte;   
17e50 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 61 74            /* Dat
17e60 61 20 73 70 61 63 65 20 72 65 71 75 69 72 65 64  a space required
17e70 20 66 6f 72 20 74 68 69 73 20 72 65 63 6f 72 64   for this record
17e80 20 2a 2f 0a 20 20 69 36 34 20 6e 5a 65 72 6f 3b   */.  i64 nZero;
17e90 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
17ea0 4e 75 6d 62 65 72 20 6f 66 20 7a 65 72 6f 20 62  Number of zero b
17eb0 79 74 65 73 20 61 74 20 74 68 65 20 65 6e 64 20  ytes at the end 
17ec0 6f 66 20 74 68 65 20 72 65 63 6f 72 64 20 2a 2f  of the record */
17ed0 0a 20 20 69 6e 74 20 6e 56 61 72 69 6e 74 3b 20  .  int nVarint; 
17ee0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
17ef0 62 65 72 20 6f 66 20 62 79 74 65 73 20 69 6e 20  ber of bytes in 
17f00 61 20 76 61 72 69 6e 74 20 2a 2f 0a 20 20 75 33  a varint */.  u3
17f10 32 20 73 65 72 69 61 6c 5f 74 79 70 65 3b 20 20  2 serial_type;  
17f20 20 20 20 20 20 2f 2a 20 54 79 70 65 20 66 69 65       /* Type fie
17f30 6c 64 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 44 61  ld */.  Mem *pDa
17f40 74 61 30 3b 20 20 20 20 20 20 20 20 20 20 20 2f  ta0;           /
17f50 2a 20 46 69 72 73 74 20 66 69 65 6c 64 20 74 6f  * First field to
17f60 20 62 65 20 63 6f 6d 62 69 6e 65 64 20 69 6e 74   be combined int
17f70 6f 20 74 68 65 20 72 65 63 6f 72 64 20 2a 2f 0a  o the record */.
17f80 20 20 4d 65 6d 20 2a 70 4c 61 73 74 3b 20 20 20    Mem *pLast;   
17f90 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 61 73 74           /* Last
17fa0 20 66 69 65 6c 64 20 6f 66 20 74 68 65 20 72 65   field of the re
17fb0 63 6f 72 64 20 2a 2f 0a 20 20 69 6e 74 20 6e 46  cord */.  int nF
17fc0 69 65 6c 64 3b 20 20 20 20 20 20 20 20 20 20 20  ield;           
17fd0 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 66 69   /* Number of fi
17fe0 65 6c 64 73 20 69 6e 20 74 68 65 20 72 65 63 6f  elds in the reco
17ff0 72 64 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 41  rd */.  char *zA
18000 66 66 69 6e 69 74 79 3b 20 20 20 20 20 20 20 2f  ffinity;       /
18010 2a 20 54 68 65 20 61 66 66 69 6e 69 74 79 20 73  * The affinity s
18020 74 72 69 6e 67 20 66 6f 72 20 74 68 65 20 72 65  tring for the re
18030 63 6f 72 64 20 2a 2f 0a 20 20 69 6e 74 20 66 69  cord */.  int fi
18040 6c 65 5f 66 6f 72 6d 61 74 3b 20 20 20 20 20 20  le_format;      
18050 20 2f 2a 20 46 69 6c 65 20 66 6f 72 6d 61 74 20   /* File format 
18060 74 6f 20 75 73 65 20 66 6f 72 20 65 6e 63 6f 64  to use for encod
18070 69 6e 67 20 2a 2f 0a 20 20 75 33 32 20 6c 65 6e  ing */.  u32 len
18080 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
18090 2f 2a 20 4c 65 6e 67 74 68 20 6f 66 20 61 20 66  /* Length of a f
180a0 69 65 6c 64 20 2a 2f 0a 20 20 75 38 20 2a 7a 48  ield */.  u8 *zH
180b0 64 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  dr;             
180c0 20 2f 2a 20 57 68 65 72 65 20 74 6f 20 77 72 69   /* Where to wri
180d0 74 65 20 6e 65 78 74 20 62 79 74 65 20 6f 66 20  te next byte of 
180e0 74 68 65 20 68 65 61 64 65 72 20 2a 2f 0a 20 20  the header */.  
180f0 75 38 20 2a 7a 50 61 79 6c 6f 61 64 3b 20 20 20  u8 *zPayload;   
18100 20 20 20 20 20 20 20 2f 2a 20 57 68 65 72 65 20         /* Where 
18110 74 6f 20 77 72 69 74 65 20 6e 65 78 74 20 62 79  to write next by
18120 74 65 20 6f 66 20 74 68 65 20 70 61 79 6c 6f 61  te of the payloa
18130 64 20 2a 2f 0a 0a 20 20 2f 2a 20 41 73 73 75 6d  d */..  /* Assum
18140 69 6e 67 20 74 68 65 20 72 65 63 6f 72 64 20 63  ing the record c
18150 6f 6e 74 61 69 6e 73 20 4e 20 66 69 65 6c 64 73  ontains N fields
18160 2c 20 74 68 65 20 72 65 63 6f 72 64 20 66 6f 72  , the record for
18170 6d 61 74 20 6c 6f 6f 6b 73 0a 20 20 2a 2a 20 6c  mat looks.  ** l
18180 69 6b 65 20 74 68 69 73 3a 0a 20 20 2a 2a 0a 20  ike this:.  **. 
18190 20 2a 2a 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d   ** ------------
181a0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
181b0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
181c0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
181d0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 20 20 2a  ------------.  *
181e0 2a 20 7c 20 68 64 72 2d 73 69 7a 65 20 7c 20 74  * | hdr-size | t
181f0 79 70 65 20 30 20 7c 20 74 79 70 65 20 31 20 7c  ype 0 | type 1 |
18200 20 2e 2e 2e 20 7c 20 74 79 70 65 20 4e 2d 31 20   ... | type N-1 
18210 7c 20 64 61 74 61 30 20 7c 20 2e 2e 2e 20 7c 20  | data0 | ... | 
18220 64 61 74 61 20 4e 2d 31 20 7c 20 0a 20 20 2a 2a  data N-1 | .  **
18230 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d   ---------------
18240 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
18250 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
18260 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
18270 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 20 20 2a 2a 0a 20  ---------.  **. 
18280 20 2a 2a 20 44 61 74 61 28 30 29 20 69 73 20 74   ** Data(0) is t
18290 61 6b 65 6e 20 66 72 6f 6d 20 72 65 67 69 73 74  aken from regist
182a0 65 72 20 50 31 2e 20 20 44 61 74 61 28 31 29 20  er P1.  Data(1) 
182b0 63 6f 6d 65 73 20 66 72 6f 6d 20 72 65 67 69 73  comes from regis
182c0 74 65 72 20 50 31 2b 31 0a 20 20 2a 2a 20 61 6e  ter P1+1.  ** an
182d0 64 20 73 6f 20 66 6f 72 74 68 2e 0a 20 20 2a 2a  d so forth..  **
182e0 0a 20 20 2a 2a 20 45 61 63 68 20 74 79 70 65 20  .  ** Each type 
182f0 66 69 65 6c 64 20 69 73 20 61 20 76 61 72 69 6e  field is a varin
18300 74 20 72 65 70 72 65 73 65 6e 74 69 6e 67 20 74  t representing t
18310 68 65 20 73 65 72 69 61 6c 20 74 79 70 65 20 6f  he serial type o
18320 66 20 74 68 65 20 0a 20 20 2a 2a 20 63 6f 72 72  f the .  ** corr
18330 65 73 70 6f 6e 64 69 6e 67 20 64 61 74 61 20 65  esponding data e
18340 6c 65 6d 65 6e 74 20 28 73 65 65 20 73 71 6c 69  lement (see sqli
18350 74 65 33 56 64 62 65 53 65 72 69 61 6c 54 79 70  te3VdbeSerialTyp
18360 65 28 29 29 2e 20 54 68 65 0a 20 20 2a 2a 20 68  e()). The.  ** h
18370 64 72 2d 73 69 7a 65 20 66 69 65 6c 64 20 69 73  dr-size field is
18380 20 61 6c 73 6f 20 61 20 76 61 72 69 6e 74 20 77   also a varint w
18390 68 69 63 68 20 69 73 20 74 68 65 20 6f 66 66 73  hich is the offs
183a0 65 74 20 66 72 6f 6d 20 74 68 65 20 62 65 67 69  et from the begi
183b0 6e 6e 69 6e 67 0a 20 20 2a 2a 20 6f 66 20 74 68  nning.  ** of th
183c0 65 20 72 65 63 6f 72 64 20 74 6f 20 64 61 74 61  e record to data
183d0 30 2e 0a 20 20 2a 2f 0a 20 20 6e 44 61 74 61 20  0..  */.  nData 
183e0 3d 20 30 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  = 0;         /* 
183f0 4e 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20  Number of bytes 
18400 6f 66 20 64 61 74 61 20 73 70 61 63 65 20 2a 2f  of data space */
18410 0a 20 20 6e 48 64 72 20 3d 20 30 3b 20 20 20 20  .  nHdr = 0;    
18420 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
18430 6f 66 20 62 79 74 65 73 20 6f 66 20 68 65 61 64  of bytes of head
18440 65 72 20 73 70 61 63 65 20 2a 2f 0a 20 20 6e 5a  er space */.  nZ
18450 65 72 6f 20 3d 20 30 3b 20 20 20 20 20 20 20 20  ero = 0;        
18460 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 7a 65   /* Number of ze
18470 72 6f 20 62 79 74 65 73 20 61 74 20 74 68 65 20  ro bytes at the 
18480 65 6e 64 20 6f 66 20 74 68 65 20 72 65 63 6f 72  end of the recor
18490 64 20 2a 2f 0a 20 20 6e 46 69 65 6c 64 20 3d 20  d */.  nField = 
184a0 70 4f 70 2d 3e 70 31 3b 0a 20 20 7a 41 66 66 69  pOp->p1;.  zAffi
184b0 6e 69 74 79 20 3d 20 70 4f 70 2d 3e 70 34 2e 7a  nity = pOp->p4.z
184c0 3b 0a 20 20 61 73 73 65 72 74 28 20 6e 46 69 65  ;.  assert( nFie
184d0 6c 64 3e 30 20 26 26 20 70 4f 70 2d 3e 70 32 3e  ld>0 && pOp->p2>
184e0 30 20 26 26 20 70 4f 70 2d 3e 70 32 2b 6e 46 69  0 && pOp->p2+nFi
184f0 65 6c 64 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20  eld<=(p->nMem+1 
18500 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29 2b 31 20  - p->nCursor)+1 
18510 29 3b 0a 20 20 70 44 61 74 61 30 20 3d 20 26 61  );.  pData0 = &a
18520 4d 65 6d 5b 6e 46 69 65 6c 64 5d 3b 0a 20 20 6e  Mem[nField];.  n
18530 46 69 65 6c 64 20 3d 20 70 4f 70 2d 3e 70 32 3b  Field = pOp->p2;
18540 0a 20 20 70 4c 61 73 74 20 3d 20 26 70 44 61 74  .  pLast = &pDat
18550 61 30 5b 6e 46 69 65 6c 64 2d 31 5d 3b 0a 20 20  a0[nField-1];.  
18560 66 69 6c 65 5f 66 6f 72 6d 61 74 20 3d 20 70 2d  file_format = p-
18570 3e 6d 69 6e 57 72 69 74 65 46 69 6c 65 46 6f 72  >minWriteFileFor
18580 6d 61 74 3b 0a 0a 20 20 2f 2a 20 49 64 65 6e 74  mat;..  /* Ident
18590 69 66 79 20 74 68 65 20 6f 75 74 70 75 74 20 72  ify the output r
185a0 65 67 69 73 74 65 72 20 2a 2f 0a 20 20 61 73 73  egister */.  ass
185b0 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c 70 4f 70  ert( pOp->p3<pOp
185c0 2d 3e 70 31 20 7c 7c 20 70 4f 70 2d 3e 70 33 3e  ->p1 || pOp->p3>
185d0 3d 70 4f 70 2d 3e 70 31 2b 70 4f 70 2d 3e 70 32  =pOp->p1+pOp->p2
185e0 20 29 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d   );.  pOut = &aM
185f0 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 6d  em[pOp->p3];.  m
18600 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28  emAboutToChange(
18610 70 2c 20 70 4f 75 74 29 3b 0a 0a 20 20 2f 2a 20  p, pOut);..  /* 
18620 41 70 70 6c 79 20 74 68 65 20 72 65 71 75 65 73  Apply the reques
18630 74 65 64 20 61 66 66 69 6e 69 74 79 20 74 6f 20  ted affinity to 
18640 61 6c 6c 20 69 6e 70 75 74 73 0a 20 20 2a 2f 0a  all inputs.  */.
18650 20 20 61 73 73 65 72 74 28 20 70 44 61 74 61 30    assert( pData0
18660 3c 3d 70 4c 61 73 74 20 29 3b 0a 20 20 69 66 28  <=pLast );.  if(
18670 20 7a 41 66 66 69 6e 69 74 79 20 29 7b 0a 20 20   zAffinity ){.  
18680 20 20 70 52 65 63 20 3d 20 70 44 61 74 61 30 3b    pRec = pData0;
18690 0a 20 20 20 20 64 6f 7b 0a 20 20 20 20 20 20 61  .    do{.      a
186a0 70 70 6c 79 41 66 66 69 6e 69 74 79 28 70 52 65  pplyAffinity(pRe
186b0 63 2c 20 7a 41 66 66 69 6e 69 74 79 5b 30 5d 2c  c, zAffinity[0],
186c0 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 20 20   encoding);.    
186d0 20 20 69 66 28 20 7a 41 66 66 69 6e 69 74 79 5b    if( zAffinity[
186e0 30 5d 3d 3d 53 51 4c 49 54 45 5f 41 46 46 5f 52  0]==SQLITE_AFF_R
186f0 45 41 4c 20 26 26 20 28 70 52 65 63 2d 3e 66 6c  EAL && (pRec->fl
18700 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29 20 29  ags & MEM_Int) )
18710 7b 0a 20 20 20 20 20 20 20 20 70 52 65 63 2d 3e  {.        pRec->
18720 66 6c 61 67 73 20 7c 3d 20 4d 45 4d 5f 49 6e 74  flags |= MEM_Int
18730 52 65 61 6c 3b 0a 20 20 20 20 20 20 20 20 70 52  Real;.        pR
18740 65 63 2d 3e 66 6c 61 67 73 20 26 3d 20 7e 28 4d  ec->flags &= ~(M
18750 45 4d 5f 49 6e 74 29 3b 0a 20 20 20 20 20 20 7d  EM_Int);.      }
18760 0a 20 20 20 20 20 20 52 45 47 49 53 54 45 52 5f  .      REGISTER_
18770 54 52 41 43 45 28 28 69 6e 74 29 28 70 52 65 63  TRACE((int)(pRec
18780 2d 61 4d 65 6d 29 2c 20 70 52 65 63 29 3b 0a 20  -aMem), pRec);. 
18790 20 20 20 20 20 7a 41 66 66 69 6e 69 74 79 2b 2b       zAffinity++
187a0 3b 0a 20 20 20 20 20 20 70 52 65 63 2b 2b 3b 0a  ;.      pRec++;.
187b0 20 20 20 20 20 20 61 73 73 65 72 74 28 20 7a 41        assert( zA
187c0 66 66 69 6e 69 74 79 5b 30 5d 3d 3d 30 20 7c 7c  ffinity[0]==0 ||
187d0 20 70 52 65 63 3c 3d 70 4c 61 73 74 20 29 3b 0a   pRec<=pLast );.
187e0 20 20 20 20 7d 77 68 69 6c 65 28 20 7a 41 66 66      }while( zAff
187f0 69 6e 69 74 79 5b 30 5d 20 29 3b 0a 20 20 7d 0a  inity[0] );.  }.
18800 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45  .#ifdef SQLITE_E
18810 4e 41 42 4c 45 5f 4e 55 4c 4c 5f 54 52 49 4d 0a  NABLE_NULL_TRIM.
18820 20 20 2f 2a 20 4e 55 4c 4c 73 20 63 61 6e 20 62    /* NULLs can b
18830 65 20 73 61 66 65 6c 79 20 74 72 69 6d 6d 65 64  e safely trimmed
18840 20 66 72 6f 6d 20 74 68 65 20 65 6e 64 20 6f 66   from the end of
18850 20 74 68 65 20 72 65 63 6f 72 64 2c 20 61 73 20   the record, as 
18860 6c 6f 6e 67 20 61 73 0a 20 20 2a 2a 20 61 73 20  long as.  ** as 
18870 74 68 65 20 73 63 68 65 6d 61 20 66 6f 72 6d 61  the schema forma
18880 74 20 69 73 20 32 20 6f 72 20 6d 6f 72 65 20 61  t is 2 or more a
18890 6e 64 20 6e 6f 6e 65 20 6f 66 20 74 68 65 20 6f  nd none of the o
188a0 6d 69 74 74 65 64 20 63 6f 6c 75 6d 6e 73 0a 20  mitted columns. 
188b0 20 2a 2a 20 68 61 76 65 20 61 20 6e 6f 6e 2d 4e   ** have a non-N
188c0 55 4c 4c 20 64 65 66 61 75 6c 74 20 76 61 6c 75  ULL default valu
188d0 65 2e 20 20 41 6c 73 6f 2c 20 74 68 65 20 72 65  e.  Also, the re
188e0 63 6f 72 64 20 6d 75 73 74 20 62 65 20 6c 65 66  cord must be lef
188f0 74 20 77 69 74 68 0a 20 20 2a 2a 20 61 74 20 6c  t with.  ** at l
18900 65 61 73 74 20 6f 6e 65 20 66 69 65 6c 64 2e 20  east one field. 
18910 20 49 66 20 50 35 3e 30 20 74 68 65 6e 20 69 74   If P5>0 then it
18920 20 77 69 6c 6c 20 62 65 20 6f 6e 65 20 6d 6f 72   will be one mor
18930 65 20 74 68 61 6e 20 74 68 65 0a 20 20 2a 2a 20  e than the.  ** 
18940 69 6e 64 65 78 20 6f 66 20 74 68 65 20 72 69 67  index of the rig
18950 68 74 2d 6d 6f 73 74 20 63 6f 6c 75 6d 6e 20 77  ht-most column w
18960 69 74 68 20 61 20 6e 6f 6e 2d 4e 55 4c 4c 20 64  ith a non-NULL d
18970 65 66 61 75 6c 74 20 76 61 6c 75 65 20 2a 2f 0a  efault value */.
18980 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 29 7b    if( pOp->p5 ){
18990 0a 20 20 20 20 77 68 69 6c 65 28 20 28 70 4c 61  .    while( (pLa
189a0 73 74 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  st->flags & MEM_
189b0 4e 75 6c 6c 29 21 3d 30 20 26 26 20 6e 46 69 65  Null)!=0 && nFie
189c0 6c 64 3e 70 4f 70 2d 3e 70 35 20 29 7b 0a 20 20  ld>pOp->p5 ){.  
189d0 20 20 20 20 70 4c 61 73 74 2d 2d 3b 0a 20 20 20      pLast--;.   
189e0 20 20 20 6e 46 69 65 6c 64 2d 2d 3b 0a 20 20 20     nField--;.   
189f0 20 7d 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 20   }.  }.#endif.. 
18a00 20 2f 2a 20 4c 6f 6f 70 20 74 68 72 6f 75 67 68   /* Loop through
18a10 20 74 68 65 20 65 6c 65 6d 65 6e 74 73 20 74 68   the elements th
18a20 61 74 20 77 69 6c 6c 20 6d 61 6b 65 20 75 70 20  at will make up 
18a30 74 68 65 20 72 65 63 6f 72 64 20 74 6f 20 66 69  the record to fi
18a40 67 75 72 65 0a 20 20 2a 2a 20 6f 75 74 20 68 6f  gure.  ** out ho
18a50 77 20 6d 75 63 68 20 73 70 61 63 65 20 69 73 20  w much space is 
18a60 72 65 71 75 69 72 65 64 20 66 6f 72 20 74 68 65  required for the
18a70 20 6e 65 77 20 72 65 63 6f 72 64 2e 20 20 41 66   new record.  Af
18a80 74 65 72 20 74 68 69 73 20 6c 6f 6f 70 2c 0a 20  ter this loop,. 
18a90 20 2a 2a 20 74 68 65 20 4d 65 6d 2e 75 54 65 6d   ** the Mem.uTem
18aa0 70 20 66 69 65 6c 64 20 6f 66 20 65 61 63 68 20  p field of each 
18ab0 74 65 72 6d 20 73 68 6f 75 6c 64 20 68 6f 6c 64  term should hold
18ac0 20 74 68 65 20 73 65 72 69 61 6c 2d 74 79 70 65   the serial-type
18ad0 20 74 68 61 74 20 77 69 6c 6c 0a 20 20 2a 2a 20   that will.  ** 
18ae0 62 65 20 75 73 65 64 20 66 6f 72 20 74 68 61 74  be used for that
18af0 20 74 65 72 6d 20 69 6e 20 74 68 65 20 67 65 6e   term in the gen
18b00 65 72 61 74 65 64 20 72 65 63 6f 72 64 3a 0a 20  erated record:. 
18b10 20 2a 2a 0a 20 20 2a 2a 20 20 20 4d 65 6d 2e 75   **.  **   Mem.u
18b20 54 65 6d 70 20 76 61 6c 75 65 20 20 20 20 74 79  Temp value    ty
18b30 70 65 0a 20 20 2a 2a 20 20 20 2d 2d 2d 2d 2d 2d  pe.  **   ------
18b40 2d 2d 2d 2d 2d 2d 2d 2d 2d 20 20 20 20 2d 2d 2d  ---------    ---
18b50 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 20 20 2a  ------------.  *
18b60 2a 20 20 20 20 20 20 30 20 20 20 20 20 20 20 20  *      0        
18b70 20 20 20 20 20 20 20 4e 55 4c 4c 0a 20 20 2a 2a         NULL.  **
18b80 20 20 20 20 20 20 31 20 20 20 20 20 20 20 20 20        1         
18b90 20 20 20 20 20 20 31 2d 62 79 74 65 20 73 69 67        1-byte sig
18ba0 6e 65 64 20 69 6e 74 65 67 65 72 0a 20 20 2a 2a  ned integer.  **
18bb0 20 20 20 20 20 20 32 20 20 20 20 20 20 20 20 20        2         
18bc0 20 20 20 20 20 20 32 2d 62 79 74 65 20 73 69 67        2-byte sig
18bd0 6e 65 64 20 69 6e 74 65 67 65 72 0a 20 20 2a 2a  ned integer.  **
18be0 20 20 20 20 20 20 33 20 20 20 20 20 20 20 20 20        3         
18bf0 20 20 20 20 20 20 33 2d 62 79 74 65 20 73 69 67        3-byte sig
18c00 6e 65 64 20 69 6e 74 65 67 65 72 0a 20 20 2a 2a  ned integer.  **
18c10 20 20 20 20 20 20 34 20 20 20 20 20 20 20 20 20        4         
18c20 20 20 20 20 20 20 34 2d 62 79 74 65 20 73 69 67        4-byte sig
18c30 6e 65 64 20 69 6e 74 65 67 65 72 0a 20 20 2a 2a  ned integer.  **
18c40 20 20 20 20 20 20 35 20 20 20 20 20 20 20 20 20        5         
18c50 20 20 20 20 20 20 36 2d 62 79 74 65 20 73 69 67        6-byte sig
18c60 6e 65 64 20 69 6e 74 65 67 65 72 0a 20 20 2a 2a  ned integer.  **
18c70 20 20 20 20 20 20 36 20 20 20 20 20 20 20 20 20        6         
18c80 20 20 20 20 20 20 38 2d 62 79 74 65 20 73 69 67        8-byte sig
18c90 6e 65 64 20 69 6e 74 65 67 65 72 0a 20 20 2a 2a  ned integer.  **
18ca0 20 20 20 20 20 20 37 20 20 20 20 20 20 20 20 20        7         
18cb0 20 20 20 20 20 20 49 45 45 45 20 66 6c 6f 61 74        IEEE float
18cc0 0a 20 20 2a 2a 20 20 20 20 20 20 38 20 20 20 20  .  **      8    
18cd0 20 20 20 20 20 20 20 20 20 20 20 49 6e 74 65 67             Integ
18ce0 65 72 20 63 6f 6e 73 74 61 6e 74 20 30 0a 20 20  er constant 0.  
18cf0 2a 2a 20 20 20 20 20 20 39 20 20 20 20 20 20 20  **      9       
18d00 20 20 20 20 20 20 20 20 49 6e 74 65 67 65 72 20          Integer 
18d10 63 6f 6e 73 74 61 6e 74 20 31 0a 20 20 2a 2a 20  constant 1.  ** 
18d20 20 20 20 20 31 30 2c 31 31 20 20 20 20 20 20 20      10,11       
18d30 20 20 20 20 20 72 65 73 65 72 76 65 64 20 66 6f       reserved fo
18d40 72 20 65 78 70 61 6e 73 69 6f 6e 0a 20 20 2a 2a  r expansion.  **
18d50 20 20 20 20 4e 3e 3d 31 32 20 61 6e 64 20 65 76      N>=12 and ev
18d60 65 6e 20 20 20 20 42 4c 4f 42 0a 20 20 2a 2a 20  en    BLOB.  ** 
18d70 20 20 20 4e 3e 3d 31 33 20 61 6e 64 20 6f 64 64     N>=13 and odd
18d80 20 20 20 20 20 74 65 78 74 0a 20 20 2a 2a 0a 20       text.  **. 
18d90 20 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e   ** The followin
18da0 67 20 61 64 64 69 74 69 6f 6e 61 6c 20 76 61 6c  g additional val
18db0 75 65 73 20 61 72 65 20 63 6f 6d 70 75 74 65 64  ues are computed
18dc0 3a 0a 20 20 2a 2a 20 20 20 20 20 6e 48 64 72 20  :.  **     nHdr 
18dd0 20 20 20 20 20 20 20 4e 75 6d 62 65 72 20 6f 66         Number of
18de0 20 62 79 74 65 73 20 6e 65 65 64 65 64 20 66 6f   bytes needed fo
18df0 72 20 74 68 65 20 72 65 63 6f 72 64 20 68 65 61  r the record hea
18e00 64 65 72 0a 20 20 2a 2a 20 20 20 20 20 6e 44 61  der.  **     nDa
18e10 74 61 20 20 20 20 20 20 20 4e 75 6d 62 65 72 20  ta       Number 
18e20 6f 66 20 62 79 74 65 73 20 6f 66 20 64 61 74 61  of bytes of data
18e30 20 73 70 61 63 65 20 6e 65 65 64 65 64 20 66 6f   space needed fo
18e40 72 20 74 68 65 20 72 65 63 6f 72 64 0a 20 20 2a  r the record.  *
18e50 2a 20 20 20 20 20 6e 5a 65 72 6f 20 20 20 20 20  *     nZero     
18e60 20 20 5a 65 72 6f 20 62 79 74 65 73 20 61 74 20    Zero bytes at 
18e70 74 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20 72  the end of the r
18e80 65 63 6f 72 64 0a 20 20 2a 2f 0a 20 20 70 52 65  ecord.  */.  pRe
18e90 63 20 3d 20 70 4c 61 73 74 3b 0a 20 20 64 6f 7b  c = pLast;.  do{
18ea0 0a 20 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d  .    assert( mem
18eb0 49 73 56 61 6c 69 64 28 70 52 65 63 29 20 29 3b  IsValid(pRec) );
18ec0 0a 20 20 20 20 69 66 28 20 70 52 65 63 2d 3e 66  .    if( pRec->f
18ed0 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20  lags & MEM_Null 
18ee0 29 7b 0a 20 20 20 20 20 20 69 66 28 20 70 52 65  ){.      if( pRe
18ef0 63 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 5a  c->flags & MEM_Z
18f00 65 72 6f 20 29 7b 0a 20 20 20 20 20 20 20 20 2f  ero ){.        /
18f10 2a 20 56 61 6c 75 65 73 20 77 69 74 68 20 4d 45  * Values with ME
18f20 4d 5f 4e 75 6c 6c 20 61 6e 64 20 4d 45 4d 5f 5a  M_Null and MEM_Z
18f30 65 72 6f 20 61 72 65 20 63 72 65 61 74 65 64 20  ero are created 
18f40 62 79 20 78 43 6f 6c 75 6d 6e 20 76 69 72 74 75  by xColumn virtu
18f50 61 6c 0a 20 20 20 20 20 20 20 20 2a 2a 20 74 61  al.        ** ta
18f60 62 6c 65 20 6d 65 74 68 6f 64 73 20 74 68 61 74  ble methods that
18f70 20 6e 65 76 65 72 20 69 6e 76 6f 6b 65 20 73 71   never invoke sq
18f80 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 78 78 78  lite3_result_xxx
18f90 78 78 28 29 20 77 68 69 6c 65 0a 20 20 20 20 20  xx() while.     
18fa0 20 20 20 2a 2a 20 63 6f 6d 70 75 74 69 6e 67 20     ** computing 
18fb0 61 6e 20 75 6e 63 68 61 6e 67 69 6e 67 20 63 6f  an unchanging co
18fc0 6c 75 6d 6e 20 76 61 6c 75 65 20 69 6e 20 61 6e  lumn value in an
18fd0 20 55 50 44 41 54 45 20 73 74 61 74 65 6d 65 6e   UPDATE statemen
18fe0 74 2e 0a 20 20 20 20 20 20 20 20 2a 2a 20 47 69  t..        ** Gi
18ff0 76 65 20 73 75 63 68 20 76 61 6c 75 65 73 20 61  ve such values a
19000 20 73 70 65 63 69 61 6c 20 69 6e 74 65 72 6e 61   special interna
19010 6c 2d 75 73 65 2d 6f 6e 6c 79 20 73 65 72 69 61  l-use-only seria
19020 6c 2d 74 79 70 65 20 6f 66 20 31 30 0a 20 20 20  l-type of 10.   
19030 20 20 20 20 20 2a 2a 20 73 6f 20 74 68 61 74 20       ** so that 
19040 74 68 65 79 20 63 61 6e 20 62 65 20 70 61 73 73  they can be pass
19050 65 64 20 74 68 72 6f 75 67 68 20 74 6f 20 78 55  ed through to xU
19060 70 64 61 74 65 20 61 6e 64 20 68 61 76 65 0a 20  pdate and have. 
19070 20 20 20 20 20 20 20 2a 2a 20 61 20 74 72 75 65         ** a true
19080 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 6e   sqlite3_value_n
19090 6f 63 68 61 6e 67 65 28 29 2e 20 2a 2f 0a 20 20  ochange(). */.  
190a0 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f        assert( pO
190b0 70 2d 3e 70 35 3d 3d 4f 50 46 4c 41 47 5f 4e 4f  p->p5==OPFLAG_NO
190c0 43 48 4e 47 5f 4d 41 47 49 43 20 7c 7c 20 43 4f  CHNG_MAGIC || CO
190d0 52 52 55 50 54 5f 44 42 20 29 3b 0a 20 20 20 20  RRUPT_DB );.    
190e0 20 20 20 20 70 52 65 63 2d 3e 75 54 65 6d 70 20      pRec->uTemp 
190f0 3d 20 31 30 3b 0a 20 20 20 20 20 20 7d 65 6c 73  = 10;.      }els
19100 65 7b 0a 20 20 20 20 20 20 20 20 70 52 65 63 2d  e{.        pRec-
19110 3e 75 54 65 6d 70 20 3d 20 30 3b 0a 20 20 20 20  >uTemp = 0;.    
19120 20 20 7d 0a 20 20 20 20 20 20 6e 48 64 72 2b 2b    }.      nHdr++
19130 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20  ;.    }else if( 
19140 70 52 65 63 2d 3e 66 6c 61 67 73 20 26 20 28 4d  pRec->flags & (M
19150 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 49 6e 74 52 65  EM_Int|MEM_IntRe
19160 61 6c 29 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20  al) ){.      /* 
19170 46 69 67 75 72 65 20 6f 75 74 20 77 68 65 74 68  Figure out wheth
19180 65 72 20 74 6f 20 75 73 65 20 31 2c 20 32 2c 20  er to use 1, 2, 
19190 34 2c 20 36 20 6f 72 20 38 20 62 79 74 65 73 2e  4, 6 or 8 bytes.
191a0 20 2a 2f 0a 20 20 20 20 20 20 69 36 34 20 69 20   */.      i64 i 
191b0 3d 20 70 52 65 63 2d 3e 75 2e 69 3b 0a 20 20 20  = pRec->u.i;.   
191c0 20 20 20 75 36 34 20 75 75 3b 0a 20 20 20 20 20     u64 uu;.     
191d0 20 74 65 73 74 63 61 73 65 28 20 70 52 65 63 2d   testcase( pRec-
191e0 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74  >flags & MEM_Int
191f0 20 29 3b 0a 20 20 20 20 20 20 74 65 73 74 63 61   );.      testca
19200 73 65 28 20 70 52 65 63 2d 3e 66 6c 61 67 73 20  se( pRec->flags 
19210 26 20 4d 45 4d 5f 49 6e 74 52 65 61 6c 20 29 3b  & MEM_IntReal );
19220 0a 20 20 20 20 20 20 69 66 28 20 69 3c 30 20 29  .      if( i<0 )
19230 7b 0a 20 20 20 20 20 20 20 20 75 75 20 3d 20 7e  {.        uu = ~
19240 69 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a  i;.      }else{.
19250 20 20 20 20 20 20 20 20 75 75 20 3d 20 69 3b 0a          uu = i;.
19260 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 6e 48        }.      nH
19270 64 72 2b 2b 3b 0a 20 20 20 20 20 20 74 65 73 74  dr++;.      test
19280 63 61 73 65 28 20 75 75 3d 3d 31 32 37 20 29 3b  case( uu==127 );
19290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
192a0 65 73 74 63 61 73 65 28 20 75 75 3d 3d 31 32 38  estcase( uu==128
192b0 20 29 3b 0a 20 20 20 20 20 20 74 65 73 74 63 61   );.      testca
192c0 73 65 28 20 75 75 3d 3d 33 32 37 36 37 20 29 3b  se( uu==32767 );
192d0 20 20 20 20 20 20 20 20 20 20 20 20 20 74 65 73               tes
192e0 74 63 61 73 65 28 20 75 75 3d 3d 33 32 37 36 38  tcase( uu==32768
192f0 20 29 3b 0a 20 20 20 20 20 20 74 65 73 74 63 61   );.      testca
19300 73 65 28 20 75 75 3d 3d 38 33 38 38 36 30 37 20  se( uu==8388607 
19310 29 3b 20 20 20 20 20 20 20 20 20 20 20 74 65 73  );           tes
19320 74 63 61 73 65 28 20 75 75 3d 3d 38 33 38 38 36  tcase( uu==83886
19330 30 38 20 29 3b 0a 20 20 20 20 20 20 74 65 73 74  08 );.      test
19340 63 61 73 65 28 20 75 75 3d 3d 32 31 34 37 34 38  case( uu==214748
19350 33 36 34 37 20 29 3b 20 20 20 20 20 20 20 20 74  3647 );        t
19360 65 73 74 63 61 73 65 28 20 75 75 3d 3d 32 31 34  estcase( uu==214
19370 37 34 38 33 36 34 38 20 29 3b 0a 20 20 20 20 20  7483648 );.     
19380 20 74 65 73 74 63 61 73 65 28 20 75 75 3d 3d 31   testcase( uu==1
19390 34 30 37 33 37 34 38 38 33 35 35 33 32 37 4c 4c  40737488355327LL
193a0 20 29 3b 20 74 65 73 74 63 61 73 65 28 20 75 75   ); testcase( uu
193b0 3d 3d 31 34 30 37 33 37 34 38 38 33 35 35 33 32  ==14073748835532
193c0 38 4c 4c 20 29 3b 0a 20 20 20 20 20 20 69 66 28  8LL );.      if(
193d0 20 75 75 3c 3d 31 32 37 20 29 7b 0a 20 20 20 20   uu<=127 ){.    
193e0 20 20 20 20 69 66 28 20 28 69 26 31 29 3d 3d 69      if( (i&1)==i
193f0 20 26 26 20 66 69 6c 65 5f 66 6f 72 6d 61 74 3e   && file_format>
19400 3d 34 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  =4 ){.          
19410 70 52 65 63 2d 3e 75 54 65 6d 70 20 3d 20 38 2b  pRec->uTemp = 8+
19420 28 75 33 32 29 75 75 3b 0a 20 20 20 20 20 20 20  (u32)uu;.       
19430 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20   }else{.        
19440 20 20 6e 44 61 74 61 2b 2b 3b 0a 20 20 20 20 20    nData++;.     
19450 20 20 20 20 20 70 52 65 63 2d 3e 75 54 65 6d 70       pRec->uTemp
19460 20 3d 20 31 3b 0a 20 20 20 20 20 20 20 20 7d 0a   = 1;.        }.
19470 20 20 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20        }else if( 
19480 75 75 3c 3d 33 32 37 36 37 20 29 7b 0a 20 20 20  uu<=32767 ){.   
19490 20 20 20 20 20 6e 44 61 74 61 20 2b 3d 20 32 3b       nData += 2;
194a0 0a 20 20 20 20 20 20 20 20 70 52 65 63 2d 3e 75  .        pRec->u
194b0 54 65 6d 70 20 3d 20 32 3b 0a 20 20 20 20 20 20  Temp = 2;.      
194c0 7d 65 6c 73 65 20 69 66 28 20 75 75 3c 3d 38 33  }else if( uu<=83
194d0 38 38 36 30 37 20 29 7b 0a 20 20 20 20 20 20 20  88607 ){.       
194e0 20 6e 44 61 74 61 20 2b 3d 20 33 3b 0a 20 20 20   nData += 3;.   
194f0 20 20 20 20 20 70 52 65 63 2d 3e 75 54 65 6d 70       pRec->uTemp
19500 20 3d 20 33 3b 0a 20 20 20 20 20 20 7d 65 6c 73   = 3;.      }els
19510 65 20 69 66 28 20 75 75 3c 3d 32 31 34 37 34 38  e if( uu<=214748
19520 33 36 34 37 20 29 7b 0a 20 20 20 20 20 20 20 20  3647 ){.        
19530 6e 44 61 74 61 20 2b 3d 20 34 3b 0a 20 20 20 20  nData += 4;.    
19540 20 20 20 20 70 52 65 63 2d 3e 75 54 65 6d 70 20      pRec->uTemp 
19550 3d 20 34 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65  = 4;.      }else
19560 20 69 66 28 20 75 75 3c 3d 31 34 30 37 33 37 34   if( uu<=1407374
19570 38 38 33 35 35 33 32 37 4c 4c 20 29 7b 0a 20 20  88355327LL ){.  
19580 20 20 20 20 20 20 6e 44 61 74 61 20 2b 3d 20 36        nData += 6
19590 3b 0a 20 20 20 20 20 20 20 20 70 52 65 63 2d 3e  ;.        pRec->
195a0 75 54 65 6d 70 20 3d 20 35 3b 0a 20 20 20 20 20  uTemp = 5;.     
195b0 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20   }else{.        
195c0 6e 44 61 74 61 20 2b 3d 20 38 3b 0a 20 20 20 20  nData += 8;.    
195d0 20 20 20 20 69 66 28 20 70 52 65 63 2d 3e 66 6c      if( pRec->fl
195e0 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 52 65 61  ags & MEM_IntRea
195f0 6c 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 2f  l ){.          /
19600 2a 20 49 66 20 74 68 65 20 76 61 6c 75 65 20 69  * If the value i
19610 73 20 49 6e 74 52 65 61 6c 20 61 6e 64 20 69 73  s IntReal and is
19620 20 67 6f 69 6e 67 20 74 6f 20 74 61 6b 65 20 75   going to take u
19630 70 20 38 20 62 79 74 65 73 20 74 6f 20 73 74 6f  p 8 bytes to sto
19640 72 65 0a 20 20 20 20 20 20 20 20 20 20 2a 2a 20  re.          ** 
19650 61 73 20 61 6e 20 69 6e 74 65 67 65 72 2c 20 74  as an integer, t
19660 68 65 6e 20 77 65 20 6d 69 67 68 74 20 61 73 20  hen we might as 
19670 77 65 6c 6c 20 6d 61 6b 65 20 69 74 20 61 6e 20  well make it an 
19680 38 2d 62 79 74 65 20 66 6c 6f 61 74 69 6e 67 0a  8-byte floating.
19690 20 20 20 20 20 20 20 20 20 20 2a 2a 20 70 6f 69            ** poi
196a0 6e 74 20 76 61 6c 75 65 20 2a 2f 0a 20 20 20 20  nt value */.    
196b0 20 20 20 20 20 20 70 52 65 63 2d 3e 75 2e 72 20        pRec->u.r 
196c0 3d 20 28 64 6f 75 62 6c 65 29 70 52 65 63 2d 3e  = (double)pRec->
196d0 75 2e 69 3b 0a 20 20 20 20 20 20 20 20 20 20 70  u.i;.          p
196e0 52 65 63 2d 3e 66 6c 61 67 73 20 26 3d 20 7e 4d  Rec->flags &= ~M
196f0 45 4d 5f 49 6e 74 52 65 61 6c 3b 0a 20 20 20 20  EM_IntReal;.    
19700 20 20 20 20 20 20 70 52 65 63 2d 3e 66 6c 61 67        pRec->flag
19710 73 20 7c 3d 20 4d 45 4d 5f 52 65 61 6c 3b 0a 20  s |= MEM_Real;. 
19720 20 20 20 20 20 20 20 20 20 70 52 65 63 2d 3e 75           pRec->u
19730 54 65 6d 70 20 3d 20 37 3b 0a 20 20 20 20 20 20  Temp = 7;.      
19740 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20    }else{.       
19750 20 20 20 70 52 65 63 2d 3e 75 54 65 6d 70 20 3d     pRec->uTemp =
19760 20 36 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20   6;.        }.  
19770 20 20 20 20 7d 0a 20 20 20 20 7d 65 6c 73 65 20      }.    }else 
19780 69 66 28 20 70 52 65 63 2d 3e 66 6c 61 67 73 20  if( pRec->flags 
19790 26 20 4d 45 4d 5f 52 65 61 6c 20 29 7b 0a 20 20  & MEM_Real ){.  
197a0 20 20 20 20 6e 48 64 72 2b 2b 3b 0a 20 20 20 20      nHdr++;.    
197b0 20 20 6e 44 61 74 61 20 2b 3d 20 38 3b 0a 20 20    nData += 8;.  
197c0 20 20 20 20 70 52 65 63 2d 3e 75 54 65 6d 70 20      pRec->uTemp 
197d0 3d 20 37 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a  = 7;.    }else{.
197e0 20 20 20 20 20 20 61 73 73 65 72 74 28 20 64 62        assert( db
197f0 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 7c  ->mallocFailed |
19800 7c 20 70 52 65 63 2d 3e 66 6c 61 67 73 26 28 4d  | pRec->flags&(M
19810 45 4d 5f 53 74 72 7c 4d 45 4d 5f 42 6c 6f 62 29  EM_Str|MEM_Blob)
19820 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74   );.      assert
19830 28 20 70 52 65 63 2d 3e 6e 3e 3d 30 20 29 3b 0a  ( pRec->n>=0 );.
19840 20 20 20 20 20 20 6c 65 6e 20 3d 20 28 75 33 32        len = (u32
19850 29 70 52 65 63 2d 3e 6e 3b 0a 20 20 20 20 20 20  )pRec->n;.      
19860 73 65 72 69 61 6c 5f 74 79 70 65 20 3d 20 28 6c  serial_type = (l
19870 65 6e 2a 32 29 20 2b 20 31 32 20 2b 20 28 28 70  en*2) + 12 + ((p
19880 52 65 63 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  Rec->flags & MEM
19890 5f 53 74 72 29 21 3d 30 29 3b 0a 20 20 20 20 20  _Str)!=0);.     
198a0 20 69 66 28 20 70 52 65 63 2d 3e 66 6c 61 67 73   if( pRec->flags
198b0 20 26 20 4d 45 4d 5f 5a 65 72 6f 20 29 7b 0a 20   & MEM_Zero ){. 
198c0 20 20 20 20 20 20 20 73 65 72 69 61 6c 5f 74 79         serial_ty
198d0 70 65 20 2b 3d 20 70 52 65 63 2d 3e 75 2e 6e 5a  pe += pRec->u.nZ
198e0 65 72 6f 2a 32 3b 0a 20 20 20 20 20 20 20 20 69  ero*2;.        i
198f0 66 28 20 6e 44 61 74 61 20 29 7b 0a 20 20 20 20  f( nData ){.    
19900 20 20 20 20 20 20 69 66 28 20 73 71 6c 69 74 65        if( sqlite
19910 33 56 64 62 65 4d 65 6d 45 78 70 61 6e 64 42 6c  3VdbeMemExpandBl
19920 6f 62 28 70 52 65 63 29 20 29 20 67 6f 74 6f 20  ob(pRec) ) goto 
19930 6e 6f 5f 6d 65 6d 3b 0a 20 20 20 20 20 20 20 20  no_mem;.        
19940 20 20 6c 65 6e 20 2b 3d 20 70 52 65 63 2d 3e 75    len += pRec->u
19950 2e 6e 5a 65 72 6f 3b 0a 20 20 20 20 20 20 20 20  .nZero;.        
19960 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20  }else{.         
19970 20 6e 5a 65 72 6f 20 2b 3d 20 70 52 65 63 2d 3e   nZero += pRec->
19980 75 2e 6e 5a 65 72 6f 3b 0a 20 20 20 20 20 20 20  u.nZero;.       
19990 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20   }.      }.     
199a0 20 6e 44 61 74 61 20 2b 3d 20 6c 65 6e 3b 0a 20   nData += len;. 
199b0 20 20 20 20 20 6e 48 64 72 20 2b 3d 20 73 71 6c       nHdr += sql
199c0 69 74 65 33 56 61 72 69 6e 74 4c 65 6e 28 73 65  ite3VarintLen(se
199d0 72 69 61 6c 5f 74 79 70 65 29 3b 0a 20 20 20 20  rial_type);.    
199e0 20 20 70 52 65 63 2d 3e 75 54 65 6d 70 20 3d 20    pRec->uTemp = 
199f0 73 65 72 69 61 6c 5f 74 79 70 65 3b 0a 20 20 20  serial_type;.   
19a00 20 7d 0a 20 20 20 20 69 66 28 20 70 52 65 63 3d   }.    if( pRec=
19a10 3d 70 44 61 74 61 30 20 29 20 62 72 65 61 6b 3b  =pData0 ) break;
19a20 0a 20 20 20 20 70 52 65 63 2d 2d 3b 0a 20 20 7d  .    pRec--;.  }
19a30 77 68 69 6c 65 28 31 29 3b 0a 0a 20 20 2f 2a 20  while(1);..  /* 
19a40 45 56 49 44 45 4e 43 45 2d 4f 46 3a 20 52 2d 32  EVIDENCE-OF: R-2
19a50 32 35 36 34 2d 31 31 36 34 37 20 54 68 65 20 68  2564-11647 The h
19a60 65 61 64 65 72 20 62 65 67 69 6e 73 20 77 69 74  eader begins wit
19a70 68 20 61 20 73 69 6e 67 6c 65 20 76 61 72 69 6e  h a single varin
19a80 74 0a 20 20 2a 2a 20 77 68 69 63 68 20 64 65 74  t.  ** which det
19a90 65 72 6d 69 6e 65 73 20 74 68 65 20 74 6f 74 61  ermines the tota
19aa0 6c 20 6e 75 6d 62 65 72 20 6f 66 20 62 79 74 65  l number of byte
19ab0 73 20 69 6e 20 74 68 65 20 68 65 61 64 65 72 2e  s in the header.
19ac0 20 54 68 65 20 76 61 72 69 6e 74 0a 20 20 2a 2a   The varint.  **
19ad0 20 76 61 6c 75 65 20 69 73 20 74 68 65 20 73 69   value is the si
19ae0 7a 65 20 6f 66 20 74 68 65 20 68 65 61 64 65 72  ze of the header
19af0 20 69 6e 20 62 79 74 65 73 20 69 6e 63 6c 75 64   in bytes includ
19b00 69 6e 67 20 74 68 65 20 73 69 7a 65 20 76 61 72  ing the size var
19b10 69 6e 74 0a 20 20 2a 2a 20 69 74 73 65 6c 66 2e  int.  ** itself.
19b20 20 2a 2f 0a 20 20 74 65 73 74 63 61 73 65 28 20   */.  testcase( 
19b30 6e 48 64 72 3d 3d 31 32 36 20 29 3b 0a 20 20 74  nHdr==126 );.  t
19b40 65 73 74 63 61 73 65 28 20 6e 48 64 72 3d 3d 31  estcase( nHdr==1
19b50 32 37 20 29 3b 0a 20 20 69 66 28 20 6e 48 64 72  27 );.  if( nHdr
19b60 3c 3d 31 32 36 20 29 7b 0a 20 20 20 20 2f 2a 20  <=126 ){.    /* 
19b70 54 68 65 20 63 6f 6d 6d 6f 6e 20 63 61 73 65 20  The common case 
19b80 2a 2f 0a 20 20 20 20 6e 48 64 72 20 2b 3d 20 31  */.    nHdr += 1
19b90 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 2f  ;.  }else{.    /
19ba0 2a 20 52 61 72 65 20 63 61 73 65 20 6f 66 20 61  * Rare case of a
19bb0 20 72 65 61 6c 6c 79 20 6c 61 72 67 65 20 68 65   really large he
19bc0 61 64 65 72 20 2a 2f 0a 20 20 20 20 6e 56 61 72  ader */.    nVar
19bd0 69 6e 74 20 3d 20 73 71 6c 69 74 65 33 56 61 72  int = sqlite3Var
19be0 69 6e 74 4c 65 6e 28 6e 48 64 72 29 3b 0a 20 20  intLen(nHdr);.  
19bf0 20 20 6e 48 64 72 20 2b 3d 20 6e 56 61 72 69 6e    nHdr += nVarin
19c00 74 3b 0a 20 20 20 20 69 66 28 20 6e 56 61 72 69  t;.    if( nVari
19c10 6e 74 3c 73 71 6c 69 74 65 33 56 61 72 69 6e 74  nt<sqlite3Varint
19c20 4c 65 6e 28 6e 48 64 72 29 20 29 20 6e 48 64 72  Len(nHdr) ) nHdr
19c30 2b 2b 3b 0a 20 20 7d 0a 20 20 6e 42 79 74 65 20  ++;.  }.  nByte 
19c40 3d 20 6e 48 64 72 2b 6e 44 61 74 61 3b 0a 0a 20  = nHdr+nData;.. 
19c50 20 2f 2a 20 4d 61 6b 65 20 73 75 72 65 20 74 68   /* Make sure th
19c60 65 20 6f 75 74 70 75 74 20 72 65 67 69 73 74 65  e output registe
19c70 72 20 68 61 73 20 61 20 62 75 66 66 65 72 20 6c  r has a buffer l
19c80 61 72 67 65 20 65 6e 6f 75 67 68 20 74 6f 20 73  arge enough to s
19c90 74 6f 72 65 20 0a 20 20 2a 2a 20 74 68 65 20 6e  tore .  ** the n
19ca0 65 77 20 72 65 63 6f 72 64 2e 20 54 68 65 20 6f  ew record. The o
19cb0 75 74 70 75 74 20 72 65 67 69 73 74 65 72 20 28  utput register (
19cc0 70 4f 70 2d 3e 70 33 29 20 69 73 20 6e 6f 74 20  pOp->p3) is not 
19cd0 61 6c 6c 6f 77 65 64 20 74 6f 0a 20 20 2a 2a 20  allowed to.  ** 
19ce0 62 65 20 6f 6e 65 20 6f 66 20 74 68 65 20 69 6e  be one of the in
19cf0 70 75 74 20 72 65 67 69 73 74 65 72 73 20 28 62  put registers (b
19d00 65 63 61 75 73 65 20 74 68 65 20 66 6f 6c 6c 6f  ecause the follo
19d10 77 69 6e 67 20 63 61 6c 6c 20 74 6f 0a 20 20 2a  wing call to.  *
19d20 2a 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d  * sqlite3VdbeMem
19d30 43 6c 65 61 72 41 6e 64 52 65 73 69 7a 65 28 29  ClearAndResize()
19d40 20 63 6f 75 6c 64 20 63 6c 6f 62 62 65 72 20 74   could clobber t
19d50 68 65 20 76 61 6c 75 65 20 62 65 66 6f 72 65 20  he value before 
19d60 69 74 20 69 73 20 75 73 65 64 29 2e 0a 20 20 2a  it is used)..  *
19d70 2f 0a 20 20 69 66 28 20 6e 42 79 74 65 2b 6e 5a  /.  if( nByte+nZ
19d80 65 72 6f 3c 3d 70 4f 75 74 2d 3e 73 7a 4d 61 6c  ero<=pOut->szMal
19d90 6c 6f 63 20 29 7b 0a 20 20 20 20 2f 2a 20 54 68  loc ){.    /* Th
19da0 65 20 6f 75 74 70 75 74 20 72 65 67 69 73 74 65  e output registe
19db0 72 20 69 73 20 61 6c 72 65 61 64 79 20 6c 61 72  r is already lar
19dc0 67 65 20 65 6e 6f 75 67 68 20 74 6f 20 68 6f 6c  ge enough to hol
19dd0 64 20 74 68 65 20 72 65 63 6f 72 64 2e 0a 20 20  d the record..  
19de0 20 20 2a 2a 20 4e 6f 20 65 72 72 6f 72 20 63 68    ** No error ch
19df0 65 63 6b 73 20 6f 72 20 62 75 66 66 65 72 20 65  ecks or buffer e
19e00 6e 6c 61 72 67 65 6d 65 6e 74 20 69 73 20 72 65  nlargement is re
19e10 71 75 69 72 65 64 20 2a 2f 0a 20 20 20 20 70 4f  quired */.    pO
19e20 75 74 2d 3e 7a 20 3d 20 70 4f 75 74 2d 3e 7a 4d  ut->z = pOut->zM
19e30 61 6c 6c 6f 63 3b 0a 20 20 7d 65 6c 73 65 7b 0a  alloc;.  }else{.
19e40 20 20 20 20 2f 2a 20 4e 65 65 64 20 74 6f 20 6d      /* Need to m
19e50 61 6b 65 20 73 75 72 65 20 74 68 61 74 20 74 68  ake sure that th
19e60 65 20 6f 75 74 70 75 74 20 69 73 20 6e 6f 74 20  e output is not 
19e70 74 6f 6f 20 62 69 67 20 61 6e 64 20 74 68 65 6e  too big and then
19e80 20 65 6e 6c 61 72 67 65 0a 20 20 20 20 2a 2a 20   enlarge.    ** 
19e90 74 68 65 20 6f 75 74 70 75 74 20 72 65 67 69 73  the output regis
19ea0 74 65 72 20 74 6f 20 68 6f 6c 64 20 74 68 65 20  ter to hold the 
19eb0 66 75 6c 6c 20 72 65 73 75 6c 74 20 2a 2f 0a 20  full result */. 
19ec0 20 20 20 69 66 28 20 6e 42 79 74 65 2b 6e 5a 65     if( nByte+nZe
19ed0 72 6f 3e 64 62 2d 3e 61 4c 69 6d 69 74 5b 53 51  ro>db->aLimit[SQ
19ee0 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54  LITE_LIMIT_LENGT
19ef0 48 5d 20 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f  H] ){.      goto
19f00 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 20 20 7d 0a   too_big;.    }.
19f10 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 56      if( sqlite3V
19f20 64 62 65 4d 65 6d 43 6c 65 61 72 41 6e 64 52 65  dbeMemClearAndRe
19f30 73 69 7a 65 28 70 4f 75 74 2c 20 28 69 6e 74 29  size(pOut, (int)
19f40 6e 42 79 74 65 29 20 29 7b 0a 20 20 20 20 20 20  nByte) ){.      
19f50 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 20  goto no_mem;.   
19f60 20 7d 0a 20 20 7d 0a 20 20 70 4f 75 74 2d 3e 6e   }.  }.  pOut->n
19f70 20 3d 20 28 69 6e 74 29 6e 42 79 74 65 3b 0a 20   = (int)nByte;. 
19f80 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d   pOut->flags = M
19f90 45 4d 5f 42 6c 6f 62 3b 0a 20 20 69 66 28 20 6e  EM_Blob;.  if( n
19fa0 5a 65 72 6f 20 29 7b 0a 20 20 20 20 70 4f 75 74  Zero ){.    pOut
19fb0 2d 3e 75 2e 6e 5a 65 72 6f 20 3d 20 6e 5a 65 72  ->u.nZero = nZer
19fc0 6f 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 66 6c 61  o;.    pOut->fla
19fd0 67 73 20 7c 3d 20 4d 45 4d 5f 5a 65 72 6f 3b 0a  gs |= MEM_Zero;.
19fe0 20 20 7d 0a 20 20 55 50 44 41 54 45 5f 4d 41 58    }.  UPDATE_MAX
19ff0 5f 42 4c 4f 42 53 49 5a 45 28 70 4f 75 74 29 3b  _BLOBSIZE(pOut);
1a000 0a 20 20 7a 48 64 72 20 3d 20 28 75 38 20 2a 29  .  zHdr = (u8 *)
1a010 70 4f 75 74 2d 3e 7a 3b 0a 20 20 7a 50 61 79 6c  pOut->z;.  zPayl
1a020 6f 61 64 20 3d 20 7a 48 64 72 20 2b 20 6e 48 64  oad = zHdr + nHd
1a030 72 3b 0a 0a 20 20 2f 2a 20 57 72 69 74 65 20 74  r;..  /* Write t
1a040 68 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 7a  he record */.  z
1a050 48 64 72 20 2b 3d 20 70 75 74 56 61 72 69 6e 74  Hdr += putVarint
1a060 33 32 28 7a 48 64 72 2c 20 6e 48 64 72 29 3b 0a  32(zHdr, nHdr);.
1a070 20 20 61 73 73 65 72 74 28 20 70 44 61 74 61 30    assert( pData0
1a080 3c 3d 70 4c 61 73 74 20 29 3b 0a 20 20 70 52 65  <=pLast );.  pRe
1a090 63 20 3d 20 70 44 61 74 61 30 3b 0a 20 20 64 6f  c = pData0;.  do
1a0a0 7b 0a 20 20 20 20 73 65 72 69 61 6c 5f 74 79 70  {.    serial_typ
1a0b0 65 20 3d 20 70 52 65 63 2d 3e 75 54 65 6d 70 3b  e = pRec->uTemp;
1a0c0 0a 20 20 20 20 2f 2a 20 45 56 49 44 45 4e 43 45  .    /* EVIDENCE
1a0d0 2d 4f 46 3a 20 52 2d 30 36 35 32 39 2d 34 37 33  -OF: R-06529-473
1a0e0 36 32 20 46 6f 6c 6c 6f 77 69 6e 67 20 74 68 65  62 Following the
1a0f0 20 73 69 7a 65 20 76 61 72 69 6e 74 20 61 72 65   size varint are
1a100 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 0a 20 20 20   one or more.   
1a110 20 2a 2a 20 61 64 64 69 74 69 6f 6e 61 6c 20 76   ** additional v
1a120 61 72 69 6e 74 73 2c 20 6f 6e 65 20 70 65 72 20  arints, one per 
1a130 63 6f 6c 75 6d 6e 2e 20 2a 2f 0a 20 20 20 20 7a  column. */.    z
1a140 48 64 72 20 2b 3d 20 70 75 74 56 61 72 69 6e 74  Hdr += putVarint
1a150 33 32 28 7a 48 64 72 2c 20 73 65 72 69 61 6c 5f  32(zHdr, serial_
1a160 74 79 70 65 29 3b 20 20 20 20 20 20 20 20 20 20  type);          
1a170 20 20 2f 2a 20 73 65 72 69 61 6c 20 74 79 70 65    /* serial type
1a180 20 2a 2f 0a 20 20 20 20 2f 2a 20 45 56 49 44 45   */.    /* EVIDE
1a190 4e 43 45 2d 4f 46 3a 20 52 2d 36 34 35 33 36 2d  NCE-OF: R-64536-
1a1a0 35 31 37 32 38 20 54 68 65 20 76 61 6c 75 65 73  51728 The values
1a1b0 20 66 6f 72 20 65 61 63 68 20 63 6f 6c 75 6d 6e   for each column
1a1c0 20 69 6e 20 74 68 65 20 72 65 63 6f 72 64 0a 20   in the record. 
1a1d0 20 20 20 2a 2a 20 69 6d 6d 65 64 69 61 74 65 6c     ** immediatel
1a1e0 79 20 66 6f 6c 6c 6f 77 20 74 68 65 20 68 65 61  y follow the hea
1a1f0 64 65 72 2e 20 2a 2f 0a 20 20 20 20 7a 50 61 79  der. */.    zPay
1a200 6c 6f 61 64 20 2b 3d 20 73 71 6c 69 74 65 33 56  load += sqlite3V
1a210 64 62 65 53 65 72 69 61 6c 50 75 74 28 7a 50 61  dbeSerialPut(zPa
1a220 79 6c 6f 61 64 2c 20 70 52 65 63 2c 20 73 65 72  yload, pRec, ser
1a230 69 61 6c 5f 74 79 70 65 29 3b 20 2f 2a 20 63 6f  ial_type); /* co
1a240 6e 74 65 6e 74 20 2a 2f 0a 20 20 7d 77 68 69 6c  ntent */.  }whil
1a250 65 28 20 28 2b 2b 70 52 65 63 29 3c 3d 70 4c 61  e( (++pRec)<=pLa
1a260 73 74 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  st );.  assert( 
1a270 6e 48 64 72 3d 3d 28 69 6e 74 29 28 7a 48 64 72  nHdr==(int)(zHdr
1a280 20 2d 20 28 75 38 2a 29 70 4f 75 74 2d 3e 7a 29   - (u8*)pOut->z)
1a290 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 6e 42   );.  assert( nB
1a2a0 79 74 65 3d 3d 28 69 6e 74 29 28 7a 50 61 79 6c  yte==(int)(zPayl
1a2b0 6f 61 64 20 2d 20 28 75 38 2a 29 70 4f 75 74 2d  oad - (u8*)pOut-
1a2c0 3e 7a 29 20 29 3b 0a 0a 20 20 61 73 73 65 72 74  >z) );..  assert
1a2d0 28 20 70 4f 70 2d 3e 70 33 3e 30 20 26 26 20 70  ( pOp->p3>0 && p
1a2e0 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d  Op->p3<=(p->nMem
1a2f0 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29  +1 - p->nCursor)
1a300 20 29 3b 0a 20 20 52 45 47 49 53 54 45 52 5f 54   );.  REGISTER_T
1a310 52 41 43 45 28 70 4f 70 2d 3e 70 33 2c 20 70 4f  RACE(pOp->p3, pO
1a320 75 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  ut);.  break;.}.
1a330 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6f 75 6e  ./* Opcode: Coun
1a340 74 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  t P1 P2 * * *.**
1a350 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d   Synopsis: r[P2]
1a360 3d 63 6f 75 6e 74 28 29 0a 2a 2a 0a 2a 2a 20 53  =count().**.** S
1a370 74 6f 72 65 20 74 68 65 20 6e 75 6d 62 65 72 20  tore the number 
1a380 6f 66 20 65 6e 74 72 69 65 73 20 28 61 6e 20 69  of entries (an i
1a390 6e 74 65 67 65 72 20 76 61 6c 75 65 29 20 69 6e  nteger value) in
1a3a0 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20 69 6e   the table or in
1a3b0 64 65 78 20 0a 2a 2a 20 6f 70 65 6e 65 64 20 62  dex .** opened b
1a3c0 79 20 63 75 72 73 6f 72 20 50 31 20 69 6e 20 72  y cursor P1 in r
1a3d0 65 67 69 73 74 65 72 20 50 32 0a 2a 2f 0a 23 69  egister P2.*/.#i
1a3e0 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
1a3f0 54 5f 42 54 52 45 45 43 4f 55 4e 54 0a 63 61 73  T_BTREECOUNT.cas
1a400 65 20 4f 50 5f 43 6f 75 6e 74 3a 20 7b 20 20 20  e OP_Count: {   
1a410 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f        /* out2 */
1a420 0a 20 20 69 36 34 20 6e 45 6e 74 72 79 3b 0a 20  .  i64 nEntry;. 
1a430 20 42 74 43 75 72 73 6f 72 20 2a 70 43 72 73 72   BtCursor *pCrsr
1a440 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e  ;..  assert( p->
1a450 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 2d 3e  apCsr[pOp->p1]->
1a460 65 43 75 72 54 79 70 65 3d 3d 43 55 52 54 59 50  eCurType==CURTYP
1a470 45 5f 42 54 52 45 45 20 29 3b 0a 20 20 70 43 72  E_BTREE );.  pCr
1a480 73 72 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f  sr = p->apCsr[pO
1a490 70 2d 3e 70 31 5d 2d 3e 75 63 2e 70 43 75 72 73  p->p1]->uc.pCurs
1a4a0 6f 72 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43  or;.  assert( pC
1a4b0 72 73 72 20 29 3b 0a 20 20 6e 45 6e 74 72 79 20  rsr );.  nEntry 
1a4c0 3d 20 30 3b 20 20 2f 2a 20 4e 6f 74 20 6e 65 65  = 0;  /* Not nee
1a4d0 64 65 64 2e 20 20 4f 6e 6c 79 20 75 73 65 64 20  ded.  Only used 
1a4e0 74 6f 20 73 69 6c 65 6e 63 65 20 61 20 77 61 72  to silence a war
1a4f0 6e 69 6e 67 2e 20 2a 2f 0a 20 20 72 63 20 3d 20  ning. */.  rc = 
1a500 73 71 6c 69 74 65 33 42 74 72 65 65 43 6f 75 6e  sqlite3BtreeCoun
1a510 74 28 70 43 72 73 72 2c 20 26 6e 45 6e 74 72 79  t(pCrsr, &nEntry
1a520 29 3b 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f  );.  if( rc ) go
1a530 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
1a540 65 72 72 6f 72 3b 0a 20 20 70 4f 75 74 20 3d 20  error;.  pOut = 
1a550 6f 75 74 32 50 72 65 72 65 6c 65 61 73 65 28 70  out2Prerelease(p
1a560 2c 20 70 4f 70 29 3b 0a 20 20 70 4f 75 74 2d 3e  , pOp);.  pOut->
1a570 75 2e 69 20 3d 20 6e 45 6e 74 72 79 3b 0a 20 20  u.i = nEntry;.  
1a580 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a  break;.}.#endif.
1a590 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 61 76 65  ./* Opcode: Save
1a5a0 70 6f 69 6e 74 20 50 31 20 2a 20 2a 20 50 34 20  point P1 * * P4 
1a5b0 2a 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e 2c 20 72 65  *.**.** Open, re
1a5c0 6c 65 61 73 65 20 6f 72 20 72 6f 6c 6c 62 61 63  lease or rollbac
1a5d0 6b 20 74 68 65 20 73 61 76 65 70 6f 69 6e 74 20  k the savepoint 
1a5e0 6e 61 6d 65 64 20 62 79 20 70 61 72 61 6d 65 74  named by paramet
1a5f0 65 72 20 50 34 2c 20 64 65 70 65 6e 64 69 6e 67  er P4, depending
1a600 0a 2a 2a 20 6f 6e 20 74 68 65 20 76 61 6c 75 65  .** on the value
1a610 20 6f 66 20 50 31 2e 20 54 6f 20 6f 70 65 6e 20   of P1. To open 
1a620 61 20 6e 65 77 20 73 61 76 65 70 6f 69 6e 74 20  a new savepoint 
1a630 73 65 74 20 50 31 3d 3d 30 20 28 53 41 56 45 50  set P1==0 (SAVEP
1a640 4f 49 4e 54 5f 42 45 47 49 4e 29 2e 0a 2a 2a 20  OINT_BEGIN)..** 
1a650 54 6f 20 72 65 6c 65 61 73 65 20 28 63 6f 6d 6d  To release (comm
1a660 69 74 29 20 61 6e 20 65 78 69 73 74 69 6e 67 20  it) an existing 
1a670 73 61 76 65 70 6f 69 6e 74 20 73 65 74 20 50 31  savepoint set P1
1a680 3d 3d 31 20 28 53 41 56 45 50 4f 49 4e 54 5f 52  ==1 (SAVEPOINT_R
1a690 45 4c 45 41 53 45 29 2e 0a 2a 2a 20 54 6f 20 72  ELEASE)..** To r
1a6a0 6f 6c 6c 62 61 63 6b 20 61 6e 20 65 78 69 73 74  ollback an exist
1a6b0 69 6e 67 20 73 61 76 65 70 6f 69 6e 74 20 73 65  ing savepoint se
1a6c0 74 20 50 31 3d 3d 32 20 28 53 41 56 45 50 4f 49  t P1==2 (SAVEPOI
1a6d0 4e 54 5f 52 4f 4c 4c 42 41 43 4b 29 2e 0a 2a 2f  NT_ROLLBACK)..*/
1a6e0 0a 63 61 73 65 20 4f 50 5f 53 61 76 65 70 6f 69  .case OP_Savepoi
1a6f0 6e 74 3a 20 7b 0a 20 20 69 6e 74 20 70 31 3b 20  nt: {.  int p1; 
1a700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a710 20 20 20 20 20 20 20 20 2f 2a 20 56 61 6c 75 65          /* Value
1a720 20 6f 66 20 50 31 20 6f 70 65 72 61 6e 64 20 2a   of P1 operand *
1a730 2f 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b  /.  char *zName;
1a740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a750 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 73      /* Name of s
1a760 61 76 65 70 6f 69 6e 74 20 2a 2f 0a 20 20 69 6e  avepoint */.  in
1a770 74 20 6e 4e 61 6d 65 3b 0a 20 20 53 61 76 65 70  t nName;.  Savep
1a780 6f 69 6e 74 20 2a 70 4e 65 77 3b 0a 20 20 53 61  oint *pNew;.  Sa
1a790 76 65 70 6f 69 6e 74 20 2a 70 53 61 76 65 70 6f  vepoint *pSavepo
1a7a0 69 6e 74 3b 0a 20 20 53 61 76 65 70 6f 69 6e 74  int;.  Savepoint
1a7b0 20 2a 70 54 6d 70 3b 0a 20 20 69 6e 74 20 69 53   *pTmp;.  int iS
1a7c0 61 76 65 70 6f 69 6e 74 3b 0a 20 20 69 6e 74 20  avepoint;.  int 
1a7d0 69 69 3b 0a 0a 20 20 70 31 20 3d 20 70 4f 70 2d  ii;..  p1 = pOp-
1a7e0 3e 70 31 3b 0a 20 20 7a 4e 61 6d 65 20 3d 20 70  >p1;.  zName = p
1a7f0 4f 70 2d 3e 70 34 2e 7a 3b 0a 0a 20 20 2f 2a 20  Op->p4.z;..  /* 
1a800 41 73 73 65 72 74 20 74 68 61 74 20 74 68 65 20  Assert that the 
1a810 70 31 20 70 61 72 61 6d 65 74 65 72 20 69 73 20  p1 parameter is 
1a820 76 61 6c 69 64 2e 20 41 6c 73 6f 20 74 68 61 74  valid. Also that
1a830 20 69 66 20 74 68 65 72 65 20 69 73 20 6e 6f 20   if there is no 
1a840 6f 70 65 6e 0a 20 20 2a 2a 20 74 72 61 6e 73 61  open.  ** transa
1a850 63 74 69 6f 6e 2c 20 74 68 65 6e 20 74 68 65 72  ction, then ther
1a860 65 20 63 61 6e 6e 6f 74 20 62 65 20 61 6e 79 20  e cannot be any 
1a870 73 61 76 65 70 6f 69 6e 74 73 2e 20 0a 20 20 2a  savepoints. .  *
1a880 2f 0a 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e  /.  assert( db->
1a890 70 53 61 76 65 70 6f 69 6e 74 3d 3d 30 20 7c 7c  pSavepoint==0 ||
1a8a0 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 3d   db->autoCommit=
1a8b0 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
1a8c0 70 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 42 45  p1==SAVEPOINT_BE
1a8d0 47 49 4e 7c 7c 70 31 3d 3d 53 41 56 45 50 4f 49  GIN||p1==SAVEPOI
1a8e0 4e 54 5f 52 45 4c 45 41 53 45 7c 7c 70 31 3d 3d  NT_RELEASE||p1==
1a8f0 53 41 56 45 50 4f 49 4e 54 5f 52 4f 4c 4c 42 41  SAVEPOINT_ROLLBA
1a900 43 4b 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  CK );.  assert( 
1a910 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74 20 7c  db->pSavepoint |
1a920 7c 20 64 62 2d 3e 69 73 54 72 61 6e 73 61 63 74  | db->isTransact
1a930 69 6f 6e 53 61 76 65 70 6f 69 6e 74 3d 3d 30 20  ionSavepoint==0 
1a940 29 3b 0a 20 20 61 73 73 65 72 74 28 20 63 68 65  );.  assert( che
1a950 63 6b 53 61 76 65 70 6f 69 6e 74 43 6f 75 6e 74  ckSavepointCount
1a960 28 64 62 29 20 29 3b 0a 20 20 61 73 73 65 72 74  (db) );.  assert
1a970 28 20 70 2d 3e 62 49 73 52 65 61 64 65 72 20 29  ( p->bIsReader )
1a980 3b 0a 0a 20 20 69 66 28 20 70 31 3d 3d 53 41 56  ;..  if( p1==SAV
1a990 45 50 4f 49 4e 54 5f 42 45 47 49 4e 20 29 7b 0a  EPOINT_BEGIN ){.
1a9a0 20 20 20 20 69 66 28 20 64 62 2d 3e 6e 56 64 62      if( db->nVdb
1a9b0 65 57 72 69 74 65 3e 30 20 29 7b 0a 20 20 20 20  eWrite>0 ){.    
1a9c0 20 20 2f 2a 20 41 20 6e 65 77 20 73 61 76 65 70    /* A new savep
1a9d0 6f 69 6e 74 20 63 61 6e 6e 6f 74 20 62 65 20 63  oint cannot be c
1a9e0 72 65 61 74 65 64 20 69 66 20 74 68 65 72 65 20  reated if there 
1a9f0 61 72 65 20 61 63 74 69 76 65 20 77 72 69 74 65  are active write
1aa00 20 0a 20 20 20 20 20 20 2a 2a 20 73 74 61 74 65   .      ** state
1aa10 6d 65 6e 74 73 20 28 69 2e 65 2e 20 6f 70 65 6e  ments (i.e. open
1aa20 20 72 65 61 64 2f 77 72 69 74 65 20 69 6e 63 72   read/write incr
1aa30 65 6d 65 6e 74 61 6c 20 62 6c 6f 62 20 68 61 6e  emental blob han
1aa40 64 6c 65 73 29 2e 0a 20 20 20 20 20 20 2a 2f 0a  dles)..      */.
1aa50 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
1aa60 65 45 72 72 6f 72 28 70 2c 20 22 63 61 6e 6e 6f  eError(p, "canno
1aa70 74 20 6f 70 65 6e 20 73 61 76 65 70 6f 69 6e 74  t open savepoint
1aa80 20 2d 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74   - SQL statement
1aa90 73 20 69 6e 20 70 72 6f 67 72 65 73 73 22 29 3b  s in progress");
1aaa0 0a 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49  .      rc = SQLI
1aab0 54 45 5f 42 55 53 59 3b 0a 20 20 20 20 7d 65 6c  TE_BUSY;.    }el
1aac0 73 65 7b 0a 20 20 20 20 20 20 6e 4e 61 6d 65 20  se{.      nName 
1aad0 3d 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33  = sqlite3Strlen3
1aae0 30 28 7a 4e 61 6d 65 29 3b 0a 0a 23 69 66 6e 64  0(zName);..#ifnd
1aaf0 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56  ef SQLITE_OMIT_V
1ab00 49 52 54 55 41 4c 54 41 42 4c 45 0a 20 20 20 20  IRTUALTABLE.    
1ab10 20 20 2f 2a 20 54 68 69 73 20 63 61 6c 6c 20 69    /* This call i
1ab20 73 20 4f 6b 20 65 76 65 6e 20 69 66 20 74 68 69  s Ok even if thi
1ab30 73 20 73 61 76 65 70 6f 69 6e 74 20 69 73 20 61  s savepoint is a
1ab40 63 74 75 61 6c 6c 79 20 61 20 74 72 61 6e 73 61  ctually a transa
1ab50 63 74 69 6f 6e 0a 20 20 20 20 20 20 2a 2a 20 73  ction.      ** s
1ab60 61 76 65 70 6f 69 6e 74 20 28 61 6e 64 20 74 68  avepoint (and th
1ab70 65 72 65 66 6f 72 65 20 73 68 6f 75 6c 64 20 6e  erefore should n
1ab80 6f 74 20 70 72 6f 6d 70 74 20 78 53 61 76 65 70  ot prompt xSavep
1ab90 6f 69 6e 74 28 29 29 20 63 61 6c 6c 62 61 63 6b  oint()) callback
1aba0 73 2e 0a 20 20 20 20 20 20 2a 2a 20 49 66 20 74  s..      ** If t
1abb0 68 69 73 20 69 73 20 61 20 74 72 61 6e 73 61 63  his is a transac
1abc0 74 69 6f 6e 20 73 61 76 65 70 6f 69 6e 74 20 62  tion savepoint b
1abd0 65 69 6e 67 20 6f 70 65 6e 65 64 2c 20 69 74 20  eing opened, it 
1abe0 69 73 20 67 75 61 72 61 6e 74 65 65 64 0a 20 20  is guaranteed.  
1abf0 20 20 20 20 2a 2a 20 74 68 61 74 20 74 68 65 20      ** that the 
1ac00 64 62 2d 3e 61 56 54 72 61 6e 73 5b 5d 20 61 72  db->aVTrans[] ar
1ac10 72 61 79 20 69 73 20 65 6d 70 74 79 2e 20 20 2a  ray is empty.  *
1ac20 2f 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  /.      assert( 
1ac30 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 3d 3d  db->autoCommit==
1ac40 30 20 7c 7c 20 64 62 2d 3e 6e 56 54 72 61 6e 73  0 || db->nVTrans
1ac50 3d 3d 30 20 29 3b 0a 20 20 20 20 20 20 72 63 20  ==0 );.      rc 
1ac60 3d 20 73 71 6c 69 74 65 33 56 74 61 62 53 61 76  = sqlite3VtabSav
1ac70 65 70 6f 69 6e 74 28 64 62 2c 20 53 41 56 45 50  epoint(db, SAVEP
1ac80 4f 49 4e 54 5f 42 45 47 49 4e 2c 0a 20 20 20 20  OINT_BEGIN,.    
1ac90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1aca0 20 20 20 20 20 20 20 20 20 20 20 20 64 62 2d 3e              db->
1acb0 6e 53 74 61 74 65 6d 65 6e 74 2b 64 62 2d 3e 6e  nStatement+db->n
1acc0 53 61 76 65 70 6f 69 6e 74 29 3b 0a 20 20 20 20  Savepoint);.    
1acd0 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45    if( rc!=SQLITE
1ace0 5f 4f 4b 20 29 20 67 6f 74 6f 20 61 62 6f 72 74  _OK ) goto abort
1acf0 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 23  _due_to_error;.#
1ad00 65 6e 64 69 66 0a 0a 20 20 20 20 20 20 2f 2a 20  endif..      /* 
1ad10 43 72 65 61 74 65 20 61 20 6e 65 77 20 73 61 76  Create a new sav
1ad20 65 70 6f 69 6e 74 20 73 74 72 75 63 74 75 72 65  epoint structure
1ad30 2e 20 2a 2f 0a 20 20 20 20 20 20 70 4e 65 77 20  . */.      pNew 
1ad40 3d 20 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f  = sqlite3DbMallo
1ad50 63 52 61 77 4e 4e 28 64 62 2c 20 73 69 7a 65 6f  cRawNN(db, sizeo
1ad60 66 28 53 61 76 65 70 6f 69 6e 74 29 2b 6e 4e 61  f(Savepoint)+nNa
1ad70 6d 65 2b 31 29 3b 0a 20 20 20 20 20 20 69 66 28  me+1);.      if(
1ad80 20 70 4e 65 77 20 29 7b 0a 20 20 20 20 20 20 20   pNew ){.       
1ad90 20 70 4e 65 77 2d 3e 7a 4e 61 6d 65 20 3d 20 28   pNew->zName = (
1ada0 63 68 61 72 20 2a 29 26 70 4e 65 77 5b 31 5d 3b  char *)&pNew[1];
1adb0 0a 20 20 20 20 20 20 20 20 6d 65 6d 63 70 79 28  .        memcpy(
1adc0 70 4e 65 77 2d 3e 7a 4e 61 6d 65 2c 20 7a 4e 61  pNew->zName, zNa
1add0 6d 65 2c 20 6e 4e 61 6d 65 2b 31 29 3b 0a 20 20  me, nName+1);.  
1ade0 20 20 0a 20 20 20 20 20 20 20 20 2f 2a 20 49 66    .        /* If
1adf0 20 74 68 65 72 65 20 69 73 20 6e 6f 20 6f 70 65   there is no ope
1ae00 6e 20 74 72 61 6e 73 61 63 74 69 6f 6e 2c 20 74  n transaction, t
1ae10 68 65 6e 20 6d 61 72 6b 20 74 68 69 73 20 61 73  hen mark this as
1ae20 20 61 20 73 70 65 63 69 61 6c 0a 20 20 20 20 20   a special.     
1ae30 20 20 20 2a 2a 20 22 74 72 61 6e 73 61 63 74 69     ** "transacti
1ae40 6f 6e 20 73 61 76 65 70 6f 69 6e 74 22 2e 20 2a  on savepoint". *
1ae50 2f 0a 20 20 20 20 20 20 20 20 69 66 28 20 64 62  /.        if( db
1ae60 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 29 7b 0a  ->autoCommit ){.
1ae70 20 20 20 20 20 20 20 20 20 20 64 62 2d 3e 61 75            db->au
1ae80 74 6f 43 6f 6d 6d 69 74 20 3d 20 30 3b 0a 20 20  toCommit = 0;.  
1ae90 20 20 20 20 20 20 20 20 64 62 2d 3e 69 73 54 72          db->isTr
1aea0 61 6e 73 61 63 74 69 6f 6e 53 61 76 65 70 6f 69  ansactionSavepoi
1aeb0 6e 74 20 3d 20 31 3b 0a 20 20 20 20 20 20 20 20  nt = 1;.        
1aec0 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20  }else{.         
1aed0 20 64 62 2d 3e 6e 53 61 76 65 70 6f 69 6e 74 2b   db->nSavepoint+
1aee0 2b 3b 0a 20 20 20 20 20 20 20 20 7d 0a 0a 20 20  +;.        }..  
1aef0 20 20 20 20 20 20 2f 2a 20 4c 69 6e 6b 20 74 68        /* Link th
1af00 65 20 6e 65 77 20 73 61 76 65 70 6f 69 6e 74 20  e new savepoint 
1af10 69 6e 74 6f 20 74 68 65 20 64 61 74 61 62 61 73  into the databas
1af20 65 20 68 61 6e 64 6c 65 27 73 20 6c 69 73 74 2e  e handle's list.
1af30 20 2a 2f 0a 20 20 20 20 20 20 20 20 70 4e 65 77   */.        pNew
1af40 2d 3e 70 4e 65 78 74 20 3d 20 64 62 2d 3e 70 53  ->pNext = db->pS
1af50 61 76 65 70 6f 69 6e 74 3b 0a 20 20 20 20 20 20  avepoint;.      
1af60 20 20 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74    db->pSavepoint
1af70 20 3d 20 70 4e 65 77 3b 0a 20 20 20 20 20 20 20   = pNew;.       
1af80 20 70 4e 65 77 2d 3e 6e 44 65 66 65 72 72 65 64   pNew->nDeferred
1af90 43 6f 6e 73 20 3d 20 64 62 2d 3e 6e 44 65 66 65  Cons = db->nDefe
1afa0 72 72 65 64 43 6f 6e 73 3b 0a 20 20 20 20 20 20  rredCons;.      
1afb0 20 20 70 4e 65 77 2d 3e 6e 44 65 66 65 72 72 65    pNew->nDeferre
1afc0 64 49 6d 6d 43 6f 6e 73 20 3d 20 64 62 2d 3e 6e  dImmCons = db->n
1afd0 44 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73 3b  DeferredImmCons;
1afe0 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20  .      }.    }. 
1aff0 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73 73 65   }else{.    asse
1b000 72 74 28 20 70 31 3d 3d 53 41 56 45 50 4f 49 4e  rt( p1==SAVEPOIN
1b010 54 5f 52 45 4c 45 41 53 45 20 7c 7c 20 70 31 3d  T_RELEASE || p1=
1b020 3d 53 41 56 45 50 4f 49 4e 54 5f 52 4f 4c 4c 42  =SAVEPOINT_ROLLB
1b030 41 43 4b 20 29 3b 0a 20 20 20 20 69 53 61 76 65  ACK );.    iSave
1b040 70 6f 69 6e 74 20 3d 20 30 3b 0a 0a 20 20 20 20  point = 0;..    
1b050 2f 2a 20 46 69 6e 64 20 74 68 65 20 6e 61 6d 65  /* Find the name
1b060 64 20 73 61 76 65 70 6f 69 6e 74 2e 20 49 66 20  d savepoint. If 
1b070 74 68 65 72 65 20 69 73 20 6e 6f 20 73 75 63 68  there is no such
1b080 20 73 61 76 65 70 6f 69 6e 74 2c 20 74 68 65 6e   savepoint, then
1b090 20 61 6e 0a 20 20 20 20 2a 2a 20 61 6e 20 65 72   an.    ** an er
1b0a0 72 6f 72 20 69 73 20 72 65 74 75 72 6e 65 64 20  ror is returned 
1b0b0 74 6f 20 74 68 65 20 75 73 65 72 2e 20 20 2a 2f  to the user.  */
1b0c0 0a 20 20 20 20 66 6f 72 28 0a 20 20 20 20 20 20  .    for(.      
1b0d0 70 53 61 76 65 70 6f 69 6e 74 20 3d 20 64 62 2d  pSavepoint = db-
1b0e0 3e 70 53 61 76 65 70 6f 69 6e 74 3b 20 0a 20 20  >pSavepoint; .  
1b0f0 20 20 20 20 70 53 61 76 65 70 6f 69 6e 74 20 26      pSavepoint &
1b100 26 20 73 71 6c 69 74 65 33 53 74 72 49 43 6d 70  & sqlite3StrICmp
1b110 28 70 53 61 76 65 70 6f 69 6e 74 2d 3e 7a 4e 61  (pSavepoint->zNa
1b120 6d 65 2c 20 7a 4e 61 6d 65 29 3b 0a 20 20 20 20  me, zName);.    
1b130 20 20 70 53 61 76 65 70 6f 69 6e 74 20 3d 20 70    pSavepoint = p
1b140 53 61 76 65 70 6f 69 6e 74 2d 3e 70 4e 65 78 74  Savepoint->pNext
1b150 0a 20 20 20 20 29 7b 0a 20 20 20 20 20 20 69 53  .    ){.      iS
1b160 61 76 65 70 6f 69 6e 74 2b 2b 3b 0a 20 20 20 20  avepoint++;.    
1b170 7d 0a 20 20 20 20 69 66 28 20 21 70 53 61 76 65  }.    if( !pSave
1b180 70 6f 69 6e 74 20 29 7b 0a 20 20 20 20 20 20 73  point ){.      s
1b190 71 6c 69 74 65 33 56 64 62 65 45 72 72 6f 72 28  qlite3VdbeError(
1b1a0 70 2c 20 22 6e 6f 20 73 75 63 68 20 73 61 76 65  p, "no such save
1b1b0 70 6f 69 6e 74 3a 20 25 73 22 2c 20 7a 4e 61 6d  point: %s", zNam
1b1c0 65 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 53  e);.      rc = S
1b1d0 51 4c 49 54 45 5f 45 52 52 4f 52 3b 0a 20 20 20  QLITE_ERROR;.   
1b1e0 20 7d 65 6c 73 65 20 69 66 28 20 64 62 2d 3e 6e   }else if( db->n
1b1f0 56 64 62 65 57 72 69 74 65 3e 30 20 26 26 20 70  VdbeWrite>0 && p
1b200 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 52 45 4c  1==SAVEPOINT_REL
1b210 45 41 53 45 20 29 7b 0a 20 20 20 20 20 20 2f 2a  EASE ){.      /*
1b220 20 49 74 20 69 73 20 6e 6f 74 20 70 6f 73 73 69   It is not possi
1b230 62 6c 65 20 74 6f 20 72 65 6c 65 61 73 65 20 28  ble to release (
1b240 63 6f 6d 6d 69 74 29 20 61 20 73 61 76 65 70 6f  commit) a savepo
1b250 69 6e 74 20 69 66 20 74 68 65 72 65 20 61 72 65  int if there are
1b260 20 0a 20 20 20 20 20 20 2a 2a 20 61 63 74 69 76   .      ** activ
1b270 65 20 77 72 69 74 65 20 73 74 61 74 65 6d 65 6e  e write statemen
1b280 74 73 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20  ts..      */.   
1b290 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 45 72     sqlite3VdbeEr
1b2a0 72 6f 72 28 70 2c 20 22 63 61 6e 6e 6f 74 20 72  ror(p, "cannot r
1b2b0 65 6c 65 61 73 65 20 73 61 76 65 70 6f 69 6e 74  elease savepoint
1b2c0 20 2d 20 22 0a 20 20 20 20 20 20 20 20 20 20 20   - ".           
1b2d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
1b2e0 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 73 20 69  SQL statements i
1b2f0 6e 20 70 72 6f 67 72 65 73 73 22 29 3b 0a 20 20  n progress");.  
1b300 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f      rc = SQLITE_
1b310 42 55 53 59 3b 0a 20 20 20 20 7d 65 6c 73 65 7b  BUSY;.    }else{
1b320 0a 0a 20 20 20 20 20 20 2f 2a 20 44 65 74 65 72  ..      /* Deter
1b330 6d 69 6e 65 20 77 68 65 74 68 65 72 20 6f 72 20  mine whether or 
1b340 6e 6f 74 20 74 68 69 73 20 69 73 20 61 20 74 72  not this is a tr
1b350 61 6e 73 61 63 74 69 6f 6e 20 73 61 76 65 70 6f  ansaction savepo
1b360 69 6e 74 2e 20 49 66 20 73 6f 2c 0a 20 20 20 20  int. If so,.    
1b370 20 20 2a 2a 20 61 6e 64 20 74 68 69 73 20 69 73    ** and this is
1b380 20 61 20 52 45 4c 45 41 53 45 20 63 6f 6d 6d 61   a RELEASE comma
1b390 6e 64 2c 20 74 68 65 6e 20 74 68 65 20 63 75 72  nd, then the cur
1b3a0 72 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e  rent transaction
1b3b0 20 0a 20 20 20 20 20 20 2a 2a 20 69 73 20 63 6f   .      ** is co
1b3c0 6d 6d 69 74 74 65 64 2e 20 0a 20 20 20 20 20 20  mmitted. .      
1b3d0 2a 2f 0a 20 20 20 20 20 20 69 6e 74 20 69 73 54  */.      int isT
1b3e0 72 61 6e 73 61 63 74 69 6f 6e 20 3d 20 70 53 61  ransaction = pSa
1b3f0 76 65 70 6f 69 6e 74 2d 3e 70 4e 65 78 74 3d 3d  vepoint->pNext==
1b400 30 20 26 26 20 64 62 2d 3e 69 73 54 72 61 6e 73  0 && db->isTrans
1b410 61 63 74 69 6f 6e 53 61 76 65 70 6f 69 6e 74 3b  actionSavepoint;
1b420 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 64  .      assert( d
1b430 62 2d 3e 62 43 6f 6e 63 75 72 72 65 6e 74 3d 3d  b->bConcurrent==
1b440 30 20 7c 7c 20 64 62 2d 3e 69 73 54 72 61 6e 73  0 || db->isTrans
1b450 61 63 74 69 6f 6e 53 61 76 65 70 6f 69 6e 74 3d  actionSavepoint=
1b460 3d 30 20 29 3b 0a 20 20 20 20 20 20 69 66 28 20  =0 );.      if( 
1b470 69 73 54 72 61 6e 73 61 63 74 69 6f 6e 20 26 26  isTransaction &&
1b480 20 70 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 52   p1==SAVEPOINT_R
1b490 45 4c 45 41 53 45 20 29 7b 0a 20 20 20 20 20 20  ELEASE ){.      
1b4a0 20 20 69 66 28 20 28 72 63 20 3d 20 73 71 6c 69    if( (rc = sqli
1b4b0 74 65 33 56 64 62 65 43 68 65 63 6b 46 6b 28 70  te3VdbeCheckFk(p
1b4c0 2c 20 31 29 29 21 3d 53 51 4c 49 54 45 5f 4f 4b  , 1))!=SQLITE_OK
1b4d0 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 67 6f   ){.          go
1b4e0 74 6f 20 76 64 62 65 5f 72 65 74 75 72 6e 3b 0a  to vdbe_return;.
1b4f0 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
1b500 20 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74    db->autoCommit
1b510 20 3d 20 31 3b 0a 20 20 20 20 20 20 20 20 69 66   = 1;.        if
1b520 28 20 73 71 6c 69 74 65 33 56 64 62 65 48 61 6c  ( sqlite3VdbeHal
1b530 74 28 70 29 3d 3d 53 51 4c 49 54 45 5f 42 55 53  t(p)==SQLITE_BUS
1b540 59 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 70  Y ){.          p
1b550 2d 3e 70 63 20 3d 20 28 69 6e 74 29 28 70 4f 70  ->pc = (int)(pOp
1b560 20 2d 20 61 4f 70 29 3b 0a 20 20 20 20 20 20 20   - aOp);.       
1b570 20 20 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69     db->autoCommi
1b580 74 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 20  t = 0;.         
1b590 20 70 2d 3e 72 63 20 3d 20 72 63 20 3d 20 53 51   p->rc = rc = SQ
1b5a0 4c 49 54 45 5f 42 55 53 59 3b 0a 20 20 20 20 20  LITE_BUSY;.     
1b5b0 20 20 20 20 20 67 6f 74 6f 20 76 64 62 65 5f 72       goto vdbe_r
1b5c0 65 74 75 72 6e 3b 0a 20 20 20 20 20 20 20 20 7d  eturn;.        }
1b5d0 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 69 73 54  .        db->isT
1b5e0 72 61 6e 73 61 63 74 69 6f 6e 53 61 76 65 70 6f  ransactionSavepo
1b5f0 69 6e 74 20 3d 20 30 3b 0a 20 20 20 20 20 20 20  int = 0;.       
1b600 20 72 63 20 3d 20 70 2d 3e 72 63 3b 0a 20 20 20   rc = p->rc;.   
1b610 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
1b620 20 20 69 6e 74 20 69 73 53 63 68 65 6d 61 43 68    int isSchemaCh
1b630 61 6e 67 65 3b 0a 20 20 20 20 20 20 20 20 69 53  ange;.        iS
1b640 61 76 65 70 6f 69 6e 74 20 3d 20 64 62 2d 3e 6e  avepoint = db->n
1b650 53 61 76 65 70 6f 69 6e 74 20 2d 20 69 53 61 76  Savepoint - iSav
1b660 65 70 6f 69 6e 74 20 2d 20 31 3b 0a 20 20 20 20  epoint - 1;.    
1b670 20 20 20 20 69 66 28 20 70 31 3d 3d 53 41 56 45      if( p1==SAVE
1b680 50 4f 49 4e 54 5f 52 4f 4c 4c 42 41 43 4b 20 29  POINT_ROLLBACK )
1b690 7b 0a 20 20 20 20 20 20 20 20 20 20 69 73 53 63  {.          isSc
1b6a0 68 65 6d 61 43 68 61 6e 67 65 20 3d 20 28 64 62  hemaChange = (db
1b6b0 2d 3e 6d 44 62 46 6c 61 67 73 20 26 20 44 42 46  ->mDbFlags & DBF
1b6c0 4c 41 47 5f 53 63 68 65 6d 61 43 68 61 6e 67 65  LAG_SchemaChange
1b6d0 29 21 3d 30 3b 0a 20 20 20 20 20 20 20 20 20 20  )!=0;.          
1b6e0 66 6f 72 28 69 69 3d 30 3b 20 69 69 3c 64 62 2d  for(ii=0; ii<db-
1b6f0 3e 6e 44 62 3b 20 69 69 2b 2b 29 7b 0a 20 20 20  >nDb; ii++){.   
1b700 20 20 20 20 20 20 20 20 20 72 63 20 3d 20 73 71           rc = sq
1b710 6c 69 74 65 33 42 74 72 65 65 54 72 69 70 41 6c  lite3BtreeTripAl
1b720 6c 43 75 72 73 6f 72 73 28 64 62 2d 3e 61 44 62  lCursors(db->aDb
1b730 5b 69 69 5d 2e 70 42 74 2c 0a 20 20 20 20 20 20  [ii].pBt,.      
1b740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b760 20 53 51 4c 49 54 45 5f 41 42 4f 52 54 5f 52 4f   SQLITE_ABORT_RO
1b770 4c 4c 42 41 43 4b 2c 0a 20 20 20 20 20 20 20 20  LLBACK,.        
1b780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
1b7a0 73 53 63 68 65 6d 61 43 68 61 6e 67 65 3d 3d 30  sSchemaChange==0
1b7b0 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  );.            i
1b7c0 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc!=SQLITE_OK
1b7d0 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75   ) goto abort_du
1b7e0 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20  e_to_error;.    
1b7f0 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
1b800 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20  }else{.         
1b810 20 61 73 73 65 72 74 28 20 70 31 3d 3d 53 41 56   assert( p1==SAV
1b820 45 50 4f 49 4e 54 5f 52 45 4c 45 41 53 45 20 29  EPOINT_RELEASE )
1b830 3b 0a 20 20 20 20 20 20 20 20 20 20 69 73 53 63  ;.          isSc
1b840 68 65 6d 61 43 68 61 6e 67 65 20 3d 20 30 3b 0a  hemaChange = 0;.
1b850 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
1b860 20 20 66 6f 72 28 69 69 3d 30 3b 20 69 69 3c 64    for(ii=0; ii<d
1b870 62 2d 3e 6e 44 62 3b 20 69 69 2b 2b 29 7b 0a 20  b->nDb; ii++){. 
1b880 20 20 20 20 20 20 20 20 20 72 63 20 3d 20 73 71           rc = sq
1b890 6c 69 74 65 33 42 74 72 65 65 53 61 76 65 70 6f  lite3BtreeSavepo
1b8a0 69 6e 74 28 64 62 2d 3e 61 44 62 5b 69 69 5d 2e  int(db->aDb[ii].
1b8b0 70 42 74 2c 20 70 31 2c 20 69 53 61 76 65 70 6f  pBt, p1, iSavepo
1b8c0 69 6e 74 29 3b 0a 20 20 20 20 20 20 20 20 20 20  int);.          
1b8d0 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f  if( rc!=SQLITE_O
1b8e0 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20  K ){.           
1b8f0 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
1b900 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20  to_error;.      
1b910 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 7d 0a      }.        }.
1b920 20 20 20 20 20 20 20 20 69 66 28 20 69 73 53 63          if( isSc
1b930 68 65 6d 61 43 68 61 6e 67 65 20 29 7b 0a 20 20  hemaChange ){.  
1b940 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 45          sqlite3E
1b950 78 70 69 72 65 50 72 65 70 61 72 65 64 53 74 61  xpirePreparedSta
1b960 74 65 6d 65 6e 74 73 28 64 62 2c 20 30 29 3b 0a  tements(db, 0);.
1b970 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
1b980 33 52 65 73 65 74 41 6c 6c 53 63 68 65 6d 61 73  3ResetAllSchemas
1b990 4f 66 43 6f 6e 6e 65 63 74 69 6f 6e 28 64 62 29  OfConnection(db)
1b9a0 3b 0a 20 20 20 20 20 20 20 20 20 20 64 62 2d 3e  ;.          db->
1b9b0 6d 44 62 46 6c 61 67 73 20 7c 3d 20 44 42 46 4c  mDbFlags |= DBFL
1b9c0 41 47 5f 53 63 68 65 6d 61 43 68 61 6e 67 65 3b  AG_SchemaChange;
1b9d0 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20  .        }.     
1b9e0 20 7d 0a 20 20 0a 20 20 20 20 20 20 2f 2a 20 52   }.  .      /* R
1b9f0 65 67 61 72 64 6c 65 73 73 20 6f 66 20 77 68 65  egardless of whe
1ba00 74 68 65 72 20 74 68 69 73 20 69 73 20 61 20 52  ther this is a R
1ba10 45 4c 45 41 53 45 20 6f 72 20 52 4f 4c 4c 42 41  ELEASE or ROLLBA
1ba20 43 4b 2c 20 64 65 73 74 72 6f 79 20 61 6c 6c 20  CK, destroy all 
1ba30 0a 20 20 20 20 20 20 2a 2a 20 73 61 76 65 70 6f  .      ** savepo
1ba40 69 6e 74 73 20 6e 65 73 74 65 64 20 69 6e 73 69  ints nested insi
1ba50 64 65 20 6f 66 20 74 68 65 20 73 61 76 65 70 6f  de of the savepo
1ba60 69 6e 74 20 62 65 69 6e 67 20 6f 70 65 72 61 74  int being operat
1ba70 65 64 20 6f 6e 2e 20 2a 2f 0a 20 20 20 20 20 20  ed on. */.      
1ba80 77 68 69 6c 65 28 20 64 62 2d 3e 70 53 61 76 65  while( db->pSave
1ba90 70 6f 69 6e 74 21 3d 70 53 61 76 65 70 6f 69 6e  point!=pSavepoin
1baa0 74 20 29 7b 0a 20 20 20 20 20 20 20 20 70 54 6d  t ){.        pTm
1bab0 70 20 3d 20 64 62 2d 3e 70 53 61 76 65 70 6f 69  p = db->pSavepoi
1bac0 6e 74 3b 0a 20 20 20 20 20 20 20 20 64 62 2d 3e  nt;.        db->
1bad0 70 53 61 76 65 70 6f 69 6e 74 20 3d 20 70 54 6d  pSavepoint = pTm
1bae0 70 2d 3e 70 4e 65 78 74 3b 0a 20 20 20 20 20 20  p->pNext;.      
1baf0 20 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 28    sqlite3DbFree(
1bb00 64 62 2c 20 70 54 6d 70 29 3b 0a 20 20 20 20 20  db, pTmp);.     
1bb10 20 20 20 64 62 2d 3e 6e 53 61 76 65 70 6f 69 6e     db->nSavepoin
1bb20 74 2d 2d 3b 0a 20 20 20 20 20 20 7d 0a 0a 20 20  t--;.      }..  
1bb30 20 20 20 20 2f 2a 20 49 66 20 69 74 20 69 73 20      /* If it is 
1bb40 61 20 52 45 4c 45 41 53 45 2c 20 74 68 65 6e 20  a RELEASE, then 
1bb50 64 65 73 74 72 6f 79 20 74 68 65 20 73 61 76 65  destroy the save
1bb60 70 6f 69 6e 74 20 62 65 69 6e 67 20 6f 70 65 72  point being oper
1bb70 61 74 65 64 20 6f 6e 20 0a 20 20 20 20 20 20 2a  ated on .      *
1bb80 2a 20 74 6f 6f 2e 20 49 66 20 69 74 20 69 73 20  * too. If it is 
1bb90 61 20 52 4f 4c 4c 42 41 43 4b 20 54 4f 2c 20 74  a ROLLBACK TO, t
1bba0 68 65 6e 20 73 65 74 20 74 68 65 20 6e 75 6d 62  hen set the numb
1bbb0 65 72 20 6f 66 20 64 65 66 65 72 72 65 64 20 0a  er of deferred .
1bbc0 20 20 20 20 20 20 2a 2a 20 63 6f 6e 73 74 72 61        ** constra
1bbd0 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 73 20 70  int violations p
1bbe0 72 65 73 65 6e 74 20 69 6e 20 74 68 65 20 64 61  resent in the da
1bbf0 74 61 62 61 73 65 20 74 6f 20 74 68 65 20 76 61  tabase to the va
1bc00 6c 75 65 20 73 74 6f 72 65 64 0a 20 20 20 20 20  lue stored.     
1bc10 20 2a 2a 20 77 68 65 6e 20 74 68 65 20 73 61 76   ** when the sav
1bc20 65 70 6f 69 6e 74 20 77 61 73 20 63 72 65 61 74  epoint was creat
1bc30 65 64 2e 20 20 2a 2f 0a 20 20 20 20 20 20 69 66  ed.  */.      if
1bc40 28 20 70 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f  ( p1==SAVEPOINT_
1bc50 52 45 4c 45 41 53 45 20 29 7b 0a 20 20 20 20 20  RELEASE ){.     
1bc60 20 20 20 61 73 73 65 72 74 28 20 70 53 61 76 65     assert( pSave
1bc70 70 6f 69 6e 74 3d 3d 64 62 2d 3e 70 53 61 76 65  point==db->pSave
1bc80 70 6f 69 6e 74 20 29 3b 0a 20 20 20 20 20 20 20  point );.       
1bc90 20 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74 20   db->pSavepoint 
1bca0 3d 20 70 53 61 76 65 70 6f 69 6e 74 2d 3e 70 4e  = pSavepoint->pN
1bcb0 65 78 74 3b 0a 20 20 20 20 20 20 20 20 73 71 6c  ext;.        sql
1bcc0 69 74 65 33 44 62 46 72 65 65 28 64 62 2c 20 70  ite3DbFree(db, p
1bcd0 53 61 76 65 70 6f 69 6e 74 29 3b 0a 20 20 20 20  Savepoint);.    
1bce0 20 20 20 20 69 66 28 20 21 69 73 54 72 61 6e 73      if( !isTrans
1bcf0 61 63 74 69 6f 6e 20 29 7b 0a 20 20 20 20 20 20  action ){.      
1bd00 20 20 20 20 64 62 2d 3e 6e 53 61 76 65 70 6f 69      db->nSavepoi
1bd10 6e 74 2d 2d 3b 0a 20 20 20 20 20 20 20 20 7d 0a  nt--;.        }.
1bd20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20        }else{.   
1bd30 20 20 20 20 20 61 73 73 65 72 74 28 20 70 31 3d       assert( p1=
1bd40 3d 53 41 56 45 50 4f 49 4e 54 5f 52 4f 4c 4c 42  =SAVEPOINT_ROLLB
1bd50 41 43 4b 20 29 3b 0a 20 20 20 20 20 20 20 20 64  ACK );.        d
1bd60 62 2d 3e 6e 44 65 66 65 72 72 65 64 43 6f 6e 73  b->nDeferredCons
1bd70 20 3d 20 70 53 61 76 65 70 6f 69 6e 74 2d 3e 6e   = pSavepoint->n
1bd80 44 65 66 65 72 72 65 64 43 6f 6e 73 3b 0a 20 20  DeferredCons;.  
1bd90 20 20 20 20 20 20 64 62 2d 3e 6e 44 65 66 65 72        db->nDefer
1bda0 72 65 64 49 6d 6d 43 6f 6e 73 20 3d 20 70 53 61  redImmCons = pSa
1bdb0 76 65 70 6f 69 6e 74 2d 3e 6e 44 65 66 65 72 72  vepoint->nDeferr
1bdc0 65 64 49 6d 6d 43 6f 6e 73 3b 0a 20 20 20 20 20  edImmCons;.     
1bdd0 20 7d 0a 0a 20 20 20 20 20 20 69 66 28 20 21 69   }..      if( !i
1bde0 73 54 72 61 6e 73 61 63 74 69 6f 6e 20 7c 7c 20  sTransaction || 
1bdf0 70 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 52 4f  p1==SAVEPOINT_RO
1be00 4c 4c 42 41 43 4b 20 29 7b 0a 20 20 20 20 20 20  LLBACK ){.      
1be10 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 74    rc = sqlite3Vt
1be20 61 62 53 61 76 65 70 6f 69 6e 74 28 64 62 2c 20  abSavepoint(db, 
1be30 70 31 2c 20 69 53 61 76 65 70 6f 69 6e 74 29 3b  p1, iSavepoint);
1be40 0a 20 20 20 20 20 20 20 20 69 66 28 20 72 63 21  .        if( rc!
1be50 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 20 67 6f 74  =SQLITE_OK ) got
1be60 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
1be70 72 72 6f 72 3b 0a 20 20 20 20 20 20 7d 0a 20 20  rror;.      }.  
1be80 20 20 7d 0a 20 20 7d 0a 20 20 69 66 28 20 72 63    }.  }.  if( rc
1be90 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75   ) goto abort_du
1bea0 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 0a 20 20 62  e_to_error;..  b
1beb0 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
1bec0 64 65 3a 20 41 75 74 6f 43 6f 6d 6d 69 74 20 50  de: AutoCommit P
1bed0 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a  1 P2 P3 * *.**.*
1bee0 2a 20 53 65 74 20 74 68 65 20 64 61 74 61 62 61  * Set the databa
1bef0 73 65 20 61 75 74 6f 2d 63 6f 6d 6d 69 74 20 66  se auto-commit f
1bf00 6c 61 67 20 74 6f 20 50 31 20 28 31 20 6f 72 20  lag to P1 (1 or 
1bf10 30 29 2e 20 49 66 20 50 32 20 69 73 20 74 72 75  0). If P2 is tru
1bf20 65 2c 20 72 6f 6c 6c 0a 2a 2a 20 62 61 63 6b 20  e, roll.** back 
1bf30 61 6e 79 20 63 75 72 72 65 6e 74 6c 79 20 61 63  any currently ac
1bf40 74 69 76 65 20 62 74 72 65 65 20 74 72 61 6e 73  tive btree trans
1bf50 61 63 74 69 6f 6e 73 2e 20 49 66 20 74 68 65 72  actions. If ther
1bf60 65 20 61 72 65 20 61 6e 79 20 61 63 74 69 76 65  e are any active
1bf70 0a 2a 2a 20 56 4d 73 20 28 61 70 61 72 74 20 66  .** VMs (apart f
1bf80 72 6f 6d 20 74 68 69 73 20 6f 6e 65 29 2c 20 74  rom this one), t
1bf90 68 65 6e 20 61 20 52 4f 4c 4c 42 41 43 4b 20 66  hen a ROLLBACK f
1bfa0 61 69 6c 73 2e 20 20 41 20 43 4f 4d 4d 49 54 20  ails.  A COMMIT 
1bfb0 66 61 69 6c 73 20 69 66 0a 2a 2a 20 74 68 65 72  fails if.** ther
1bfc0 65 20 61 72 65 20 61 63 74 69 76 65 20 77 72 69  e are active wri
1bfd0 74 69 6e 67 20 56 4d 73 20 6f 72 20 61 63 74 69  ting VMs or acti
1bfe0 76 65 20 56 4d 73 20 74 68 61 74 20 75 73 65 20  ve VMs that use 
1bff0 73 68 61 72 65 64 20 63 61 63 68 65 2e 0a 2a 2a  shared cache..**
1c000 0a 2a 2a 20 49 66 20 50 33 20 69 73 20 6e 6f 6e  .** If P3 is non
1c010 2d 7a 65 72 6f 2c 20 74 68 65 6e 20 74 68 69 73  -zero, then this
1c020 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 69 73 20   instruction is 
1c030 62 65 69 6e 67 20 65 78 65 63 75 74 65 64 20 61  being executed a
1c040 73 20 70 61 72 74 20 6f 66 0a 2a 2a 20 61 20 22  s part of.** a "
1c050 42 45 47 49 4e 20 43 4f 4e 43 55 52 52 45 4e 54  BEGIN CONCURRENT
1c060 22 20 63 6f 6d 6d 61 6e 64 2e 0a 2a 2a 0a 2a 2a  " command..**.**
1c070 20 54 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f   This instructio
1c080 6e 20 63 61 75 73 65 73 20 74 68 65 20 56 4d 20  n causes the VM 
1c090 74 6f 20 68 61 6c 74 2e 0a 2a 2f 0a 63 61 73 65  to halt..*/.case
1c0a0 20 4f 50 5f 41 75 74 6f 43 6f 6d 6d 69 74 3a 20   OP_AutoCommit: 
1c0b0 7b 0a 20 20 69 6e 74 20 64 65 73 69 72 65 64 41  {.  int desiredA
1c0c0 75 74 6f 43 6f 6d 6d 69 74 3b 0a 20 20 69 6e 74  utoCommit;.  int
1c0d0 20 69 52 6f 6c 6c 62 61 63 6b 3b 0a 20 20 69 6e   iRollback;.  in
1c0e0 74 20 62 43 6f 6e 63 75 72 72 65 6e 74 3b 0a 20  t bConcurrent;. 
1c0f0 20 69 6e 74 20 68 72 63 3b 0a 0a 20 20 64 65 73   int hrc;..  des
1c100 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74 20 3d  iredAutoCommit =
1c110 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 69 52 6f 6c   pOp->p1;.  iRol
1c120 6c 62 61 63 6b 20 3d 20 70 4f 70 2d 3e 70 32 3b  lback = pOp->p2;
1c130 0a 20 20 62 43 6f 6e 63 75 72 72 65 6e 74 20 3d  .  bConcurrent =
1c140 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 61 73 73 65   pOp->p3;.  asse
1c150 72 74 28 20 64 65 73 69 72 65 64 41 75 74 6f 43  rt( desiredAutoC
1c160 6f 6d 6d 69 74 3d 3d 31 20 7c 7c 20 64 65 73 69  ommit==1 || desi
1c170 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74 3d 3d 30  redAutoCommit==0
1c180 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 64 65   );.  assert( de
1c190 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74 3d  siredAutoCommit=
1c1a0 3d 31 20 7c 7c 20 69 52 6f 6c 6c 62 61 63 6b 3d  =1 || iRollback=
1c1b0 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
1c1c0 64 65 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69  desiredAutoCommi
1c1d0 74 3d 3d 30 20 7c 7c 20 62 43 6f 6e 63 75 72 72  t==0 || bConcurr
1c1e0 65 6e 74 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65  ent==0 );.  asse
1c1f0 72 74 28 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d  rt( db->autoComm
1c200 69 74 3d 3d 30 20 7c 7c 20 64 62 2d 3e 62 43 6f  it==0 || db->bCo
1c210 6e 63 75 72 72 65 6e 74 3d 3d 30 20 29 3b 0a 20  ncurrent==0 );. 
1c220 20 61 73 73 65 72 74 28 20 64 62 2d 3e 6e 56 64   assert( db->nVd
1c230 62 65 41 63 74 69 76 65 3e 30 20 29 3b 20 20 2f  beActive>0 );  /
1c240 2a 20 41 74 20 6c 65 61 73 74 20 74 68 69 73 20  * At least this 
1c250 6f 6e 65 20 56 4d 20 69 73 20 61 63 74 69 76 65  one VM is active
1c260 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70 2d   */.  assert( p-
1c270 3e 62 49 73 52 65 61 64 65 72 20 29 3b 0a 0a 20  >bIsReader );.. 
1c280 20 69 66 28 20 64 65 73 69 72 65 64 41 75 74 6f   if( desiredAuto
1c290 43 6f 6d 6d 69 74 21 3d 64 62 2d 3e 61 75 74 6f  Commit!=db->auto
1c2a0 43 6f 6d 6d 69 74 20 29 7b 0a 20 20 20 20 69 66  Commit ){.    if
1c2b0 28 20 69 52 6f 6c 6c 62 61 63 6b 20 29 7b 0a 20  ( iRollback ){. 
1c2c0 20 20 20 20 20 61 73 73 65 72 74 28 20 64 65 73       assert( des
1c2d0 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74 3d 3d  iredAutoCommit==
1c2e0 31 20 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74  1 );.      sqlit
1c2f0 65 33 52 6f 6c 6c 62 61 63 6b 41 6c 6c 28 64 62  e3RollbackAll(db
1c300 2c 20 53 51 4c 49 54 45 5f 41 42 4f 52 54 5f 52  , SQLITE_ABORT_R
1c310 4f 4c 4c 42 41 43 4b 29 3b 0a 20 20 20 20 20 20  OLLBACK);.      
1c320 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 3d  db->autoCommit =
1c330 20 31 3b 0a 20 20 20 20 20 20 64 62 2d 3e 62 43   1;.      db->bC
1c340 6f 6e 63 75 72 72 65 6e 74 20 3d 20 30 3b 0a 20  oncurrent = 0;. 
1c350 20 20 20 7d 65 6c 73 65 20 69 66 28 20 64 65 73     }else if( des
1c360 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74 0a 20  iredAutoCommit. 
1c370 20 20 20 20 20 20 20 20 20 20 20 26 26 20 28 64             && (d
1c380 62 2d 3e 6e 56 64 62 65 57 72 69 74 65 3e 30 20  b->nVdbeWrite>0 
1c390 7c 7c 20 28 64 62 2d 3e 62 43 6f 6e 63 75 72 72  || (db->bConcurr
1c3a0 65 6e 74 20 26 26 20 64 62 2d 3e 6e 56 64 62 65  ent && db->nVdbe
1c3b0 41 63 74 69 76 65 3e 31 29 29 20 29 7b 0a 20 20  Active>1)) ){.  
1c3c0 20 20 20 20 2f 2a 20 41 20 74 72 61 6e 73 61 63      /* A transac
1c3d0 74 69 6f 6e 20 6d 61 79 20 6f 6e 6c 79 20 62 65  tion may only be
1c3e0 20 63 6f 6d 6d 69 74 74 65 64 20 69 66 20 74 68   committed if th
1c3f0 65 72 65 20 61 72 65 20 6e 6f 20 6f 74 68 65 72  ere are no other
1c400 20 61 63 74 69 76 65 0a 20 20 20 20 20 20 2a 2a   active.      **
1c410 20 77 72 69 74 65 72 20 56 4d 73 2e 20 49 66 20   writer VMs. If 
1c420 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  the transaction 
1c430 69 73 20 43 4f 4e 43 55 52 52 45 4e 54 2c 20 74  is CONCURRENT, t
1c440 68 65 6e 20 69 74 20 6d 61 79 20 6f 6e 6c 79 20  hen it may only 
1c450 62 65 0a 20 20 20 20 20 20 2a 2a 20 63 6f 6d 6d  be.      ** comm
1c460 69 74 74 65 64 20 69 66 20 74 68 65 72 65 20 61  itted if there a
1c470 72 65 20 6e 6f 20 61 63 74 69 76 65 20 56 4d 73  re no active VMs
1c480 20 61 74 20 61 6c 6c 20 28 72 65 61 64 65 72 73   at all (readers
1c490 20 6f 72 20 77 72 69 74 65 72 73 29 2e 0a 20 20   or writers)..  
1c4a0 20 20 20 20 2a 2a 0a 20 20 20 20 20 20 2a 2a 20      **.      ** 
1c4b0 49 66 20 74 68 69 73 20 69 6e 73 74 72 75 63 74  If this instruct
1c4c0 69 6f 6e 20 69 73 20 61 20 43 4f 4d 4d 49 54 20  ion is a COMMIT 
1c4d0 61 6e 64 20 74 68 65 20 74 72 61 6e 73 61 63 74  and the transact
1c4e0 69 6f 6e 20 6d 61 79 20 6e 6f 74 20 62 65 0a 20  ion may not be. 
1c4f0 20 20 20 20 20 2a 2a 20 63 6f 6d 6d 69 74 74 65       ** committe
1c500 64 20 64 75 65 20 74 6f 20 6f 6e 65 20 6f 66 20  d due to one of 
1c510 74 68 65 20 63 6f 6e 64 69 74 69 6f 6e 73 20 61  the conditions a
1c520 62 6f 76 65 2c 20 72 65 74 75 72 6e 20 61 6e 20  bove, return an 
1c530 65 72 72 6f 72 0a 20 20 20 20 20 20 2a 2a 20 69  error.      ** i
1c540 6e 64 69 63 61 74 69 6e 67 20 74 68 61 74 20 6f  ndicating that o
1c550 74 68 65 72 20 56 4d 73 20 6d 75 73 74 20 63 6f  ther VMs must co
1c560 6d 70 6c 65 74 65 20 62 65 66 6f 72 65 20 74 68  mplete before th
1c570 65 20 43 4f 4d 4d 49 54 20 63 61 6e 20 0a 20 20  e COMMIT can .  
1c580 20 20 20 20 2a 2a 20 62 65 20 70 72 6f 63 65 73      ** be proces
1c590 73 65 64 2e 20 20 2a 2f 0a 20 20 20 20 20 20 73  sed.  */.      s
1c5a0 71 6c 69 74 65 33 56 64 62 65 45 72 72 6f 72 28  qlite3VdbeError(
1c5b0 70 2c 20 22 63 61 6e 6e 6f 74 20 63 6f 6d 6d 69  p, "cannot commi
1c5c0 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 2d 20  t transaction - 
1c5d0 22 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ".              
1c5e0 20 20 20 20 20 20 20 20 20 20 20 20 22 53 51 4c              "SQL
1c5f0 20 73 74 61 74 65 6d 65 6e 74 73 20 69 6e 20 70   statements in p
1c600 72 6f 67 72 65 73 73 22 29 3b 0a 20 20 20 20 20  rogress");.     
1c610 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 42 55 53   rc = SQLITE_BUS
1c620 59 3b 0a 20 20 20 20 20 20 67 6f 74 6f 20 61 62  Y;.      goto ab
1c630 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
1c640 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20  ;.    }else if( 
1c650 28 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62  (rc = sqlite3Vdb
1c660 65 43 68 65 63 6b 46 6b 28 70 2c 20 31 29 29 21  eCheckFk(p, 1))!
1c670 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20  =SQLITE_OK ){.  
1c680 20 20 20 20 67 6f 74 6f 20 76 64 62 65 5f 72 65      goto vdbe_re
1c690 74 75 72 6e 3b 0a 20 20 20 20 7d 65 6c 73 65 7b  turn;.    }else{
1c6a0 0a 20 20 20 20 20 20 64 62 2d 3e 61 75 74 6f 43  .      db->autoC
1c6b0 6f 6d 6d 69 74 20 3d 20 28 75 38 29 64 65 73 69  ommit = (u8)desi
1c6c0 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74 3b 0a 20  redAutoCommit;. 
1c6d0 20 20 20 7d 0a 20 20 20 20 68 72 63 20 3d 20 73     }.    hrc = s
1c6e0 71 6c 69 74 65 33 56 64 62 65 48 61 6c 74 28 70  qlite3VdbeHalt(p
1c6f0 29 3b 0a 20 20 20 20 69 66 28 20 28 68 72 63 20  );.    if( (hrc 
1c700 26 20 30 78 46 46 29 3d 3d 53 51 4c 49 54 45 5f  & 0xFF)==SQLITE_
1c710 42 55 53 59 20 29 7b 0a 20 20 20 20 20 20 70 2d  BUSY ){.      p-
1c720 3e 70 63 20 3d 20 28 69 6e 74 29 28 70 4f 70 20  >pc = (int)(pOp 
1c730 2d 20 61 4f 70 29 3b 0a 20 20 20 20 20 20 64 62  - aOp);.      db
1c740 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 3d 20 28  ->autoCommit = (
1c750 75 38 29 28 31 2d 64 65 73 69 72 65 64 41 75 74  u8)(1-desiredAut
1c760 6f 43 6f 6d 6d 69 74 29 3b 0a 20 20 20 20 20 20  oCommit);.      
1c770 70 2d 3e 72 63 20 3d 20 68 72 63 3b 0a 20 20 20  p->rc = hrc;.   
1c780 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 42     rc = SQLITE_B
1c790 55 53 59 3b 0a 20 20 20 20 20 20 67 6f 74 6f 20  USY;.      goto 
1c7a0 76 64 62 65 5f 72 65 74 75 72 6e 3b 0a 20 20 20  vdbe_return;.   
1c7b0 20 7d 0a 20 20 20 20 64 62 2d 3e 62 43 6f 6e 63   }.    db->bConc
1c7c0 75 72 72 65 6e 74 20 3d 20 28 75 38 29 62 43 6f  urrent = (u8)bCo
1c7d0 6e 63 75 72 72 65 6e 74 3b 0a 20 20 20 20 61 73  ncurrent;.    as
1c7e0 73 65 72 74 28 20 64 62 2d 3e 6e 53 74 61 74 65  sert( db->nState
1c7f0 6d 65 6e 74 3d 3d 30 20 29 3b 0a 20 20 20 20 73  ment==0 );.    s
1c800 71 6c 69 74 65 33 43 6c 6f 73 65 53 61 76 65 70  qlite3CloseSavep
1c810 6f 69 6e 74 73 28 64 62 29 3b 0a 20 20 20 20 69  oints(db);.    i
1c820 66 28 20 70 2d 3e 72 63 3d 3d 53 51 4c 49 54 45  f( p->rc==SQLITE
1c830 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 72 63 20  _OK ){.      rc 
1c840 3d 20 53 51 4c 49 54 45 5f 44 4f 4e 45 3b 0a 20  = SQLITE_DONE;. 
1c850 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
1c860 72 63 20 3d 20 53 51 4c 49 54 45 5f 45 52 52 4f  rc = SQLITE_ERRO
1c870 52 3b 0a 20 20 20 20 7d 0a 20 20 20 20 67 6f 74  R;.    }.    got
1c880 6f 20 76 64 62 65 5f 72 65 74 75 72 6e 3b 0a 20  o vdbe_return;. 
1c890 20 7d 65 6c 73 65 7b 0a 20 20 20 20 73 71 6c 69   }else{.    sqli
1c8a0 74 65 33 56 64 62 65 45 72 72 6f 72 28 70 2c 0a  te3VdbeError(p,.
1c8b0 20 20 20 20 20 20 20 20 28 21 64 65 73 69 72 65          (!desire
1c8c0 64 41 75 74 6f 43 6f 6d 6d 69 74 29 3f 22 63 61  dAutoCommit)?"ca
1c8d0 6e 6e 6f 74 20 73 74 61 72 74 20 61 20 74 72 61  nnot start a tra
1c8e0 6e 73 61 63 74 69 6f 6e 20 77 69 74 68 69 6e 20  nsaction within 
1c8f0 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 22 3a 28  a transaction":(
1c900 0a 20 20 20 20 20 20 20 20 28 69 52 6f 6c 6c 62  .        (iRollb
1c910 61 63 6b 29 3f 22 63 61 6e 6e 6f 74 20 72 6f 6c  ack)?"cannot rol
1c920 6c 62 61 63 6b 20 2d 20 6e 6f 20 74 72 61 6e 73  lback - no trans
1c930 61 63 74 69 6f 6e 20 69 73 20 61 63 74 69 76 65  action is active
1c940 22 3a 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ":.             
1c950 20 20 20 20 20 20 22 63 61 6e 6e 6f 74 20 63 6f        "cannot co
1c960 6d 6d 69 74 20 2d 20 6e 6f 20 74 72 61 6e 73 61  mmit - no transa
1c970 63 74 69 6f 6e 20 69 73 20 61 63 74 69 76 65 22  ction is active"
1c980 29 29 3b 0a 20 20 20 20 20 20 20 20 20 0a 20 20  ));.         .  
1c990 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 45 52    rc = SQLITE_ER
1c9a0 52 4f 52 3b 0a 20 20 20 20 67 6f 74 6f 20 61 62  ROR;.    goto ab
1c9b0 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
1c9c0 3b 0a 20 20 7d 0a 20 20 2f 2a 4e 4f 54 52 45 41  ;.  }.  /*NOTREA
1c9d0 43 48 45 44 2a 2f 20 61 73 73 65 72 74 28 30 29  CHED*/ assert(0)
1c9e0 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
1c9f0 54 72 61 6e 73 61 63 74 69 6f 6e 20 50 31 20 50  Transaction P1 P
1ca00 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a  2 P3 P4 P5.**.**
1ca10 20 42 65 67 69 6e 20 61 20 74 72 61 6e 73 61 63   Begin a transac
1ca20 74 69 6f 6e 20 6f 6e 20 64 61 74 61 62 61 73 65  tion on database
1ca30 20 50 31 20 69 66 20 61 20 74 72 61 6e 73 61 63   P1 if a transac
1ca40 74 69 6f 6e 20 69 73 20 6e 6f 74 20 61 6c 72 65  tion is not alre
1ca50 61 64 79 0a 2a 2a 20 61 63 74 69 76 65 2e 0a 2a  ady.** active..*
1ca60 2a 20 49 66 20 50 32 20 69 73 20 6e 6f 6e 2d 7a  * If P2 is non-z
1ca70 65 72 6f 2c 20 74 68 65 6e 20 61 20 77 72 69 74  ero, then a writ
1ca80 65 2d 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73  e-transaction is
1ca90 20 73 74 61 72 74 65 64 2c 20 6f 72 20 69 66 20   started, or if 
1caa0 61 20 0a 2a 2a 20 72 65 61 64 2d 74 72 61 6e 73  a .** read-trans
1cab0 61 63 74 69 6f 6e 20 69 73 20 61 6c 72 65 61 64  action is alread
1cac0 79 20 61 63 74 69 76 65 2c 20 69 74 20 69 73 20  y active, it is 
1cad0 75 70 67 72 61 64 65 64 20 74 6f 20 61 20 77 72  upgraded to a wr
1cae0 69 74 65 2d 74 72 61 6e 73 61 63 74 69 6f 6e 2e  ite-transaction.
1caf0 0a 2a 2a 20 49 66 20 50 32 20 69 73 20 7a 65 72  .** If P2 is zer
1cb00 6f 2c 20 74 68 65 6e 20 61 20 72 65 61 64 2d 74  o, then a read-t
1cb10 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 73 74  ransaction is st
1cb20 61 72 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 50 31 20  arted..**.** P1 
1cb30 69 73 20 74 68 65 20 69 6e 64 65 78 20 6f 66 20  is the index of 
1cb40 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c  the database fil
1cb50 65 20 6f 6e 20 77 68 69 63 68 20 74 68 65 20 74  e on which the t
1cb60 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 0a 2a 2a  ransaction is.**
1cb70 20 73 74 61 72 74 65 64 2e 20 20 49 6e 64 65 78   started.  Index
1cb80 20 30 20 69 73 20 74 68 65 20 6d 61 69 6e 20 64   0 is the main d
1cb90 61 74 61 62 61 73 65 20 66 69 6c 65 20 61 6e 64  atabase file and
1cba0 20 69 6e 64 65 78 20 31 20 69 73 20 74 68 65 0a   index 1 is the.
1cbb0 2a 2a 20 66 69 6c 65 20 75 73 65 64 20 66 6f 72  ** file used for
1cbc0 20 74 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65   temporary table
1cbd0 73 2e 20 20 49 6e 64 69 63 65 73 20 6f 66 20 32  s.  Indices of 2
1cbe0 20 6f 72 20 6d 6f 72 65 20 61 72 65 20 75 73 65   or more are use
1cbf0 64 20 66 6f 72 0a 2a 2a 20 61 74 74 61 63 68 65  d for.** attache
1cc00 64 20 64 61 74 61 62 61 73 65 73 2e 0a 2a 2a 0a  d databases..**.
1cc10 2a 2a 20 49 66 20 61 20 77 72 69 74 65 2d 74 72  ** If a write-tr
1cc20 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 73 74 61  ansaction is sta
1cc30 72 74 65 64 20 61 6e 64 20 74 68 65 20 56 64 62  rted and the Vdb
1cc40 65 2e 75 73 65 73 53 74 6d 74 4a 6f 75 72 6e 61  e.usesStmtJourna
1cc50 6c 20 66 6c 61 67 20 69 73 0a 2a 2a 20 74 72 75  l flag is.** tru
1cc60 65 20 28 74 68 69 73 20 66 6c 61 67 20 69 73 20  e (this flag is 
1cc70 73 65 74 20 69 66 20 74 68 65 20 56 64 62 65 20  set if the Vdbe 
1cc80 6d 61 79 20 6d 6f 64 69 66 79 20 6d 6f 72 65 20  may modify more 
1cc90 74 68 61 6e 20 6f 6e 65 20 72 6f 77 20 61 6e 64  than one row and
1cca0 20 6d 61 79 0a 2a 2a 20 74 68 72 6f 77 20 61 6e   may.** throw an
1ccb0 20 41 42 4f 52 54 20 65 78 63 65 70 74 69 6f 6e   ABORT exception
1ccc0 29 2c 20 61 20 73 74 61 74 65 6d 65 6e 74 20 74  ), a statement t
1ccd0 72 61 6e 73 61 63 74 69 6f 6e 20 6d 61 79 20 61  ransaction may a
1cce0 6c 73 6f 20 62 65 20 6f 70 65 6e 65 64 2e 0a 2a  lso be opened..*
1ccf0 2a 20 4d 6f 72 65 20 73 70 65 63 69 66 69 63 61  * More specifica
1cd00 6c 6c 79 2c 20 61 20 73 74 61 74 65 6d 65 6e 74  lly, a statement
1cd10 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20   transaction is 
1cd20 6f 70 65 6e 65 64 20 69 66 66 20 74 68 65 20 64  opened iff the d
1cd30 61 74 61 62 61 73 65 0a 2a 2a 20 63 6f 6e 6e 65  atabase.** conne
1cd40 63 74 69 6f 6e 20 69 73 20 63 75 72 72 65 6e 74  ction is current
1cd50 6c 79 20 6e 6f 74 20 69 6e 20 61 75 74 6f 63 6f  ly not in autoco
1cd60 6d 6d 69 74 20 6d 6f 64 65 2c 20 6f 72 20 69 66  mmit mode, or if
1cd70 20 74 68 65 72 65 20 61 72 65 20 6f 74 68 65 72   there are other
1cd80 0a 2a 2a 20 61 63 74 69 76 65 20 73 74 61 74 65  .** active state
1cd90 6d 65 6e 74 73 2e 20 41 20 73 74 61 74 65 6d 65  ments. A stateme
1cda0 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 61  nt transaction a
1cdb0 6c 6c 6f 77 73 20 74 68 65 20 63 68 61 6e 67 65  llows the change
1cdc0 73 20 6d 61 64 65 20 62 79 20 74 68 69 73 0a 2a  s made by this.*
1cdd0 2a 20 56 44 42 45 20 74 6f 20 62 65 20 72 6f 6c  * VDBE to be rol
1cde0 6c 65 64 20 62 61 63 6b 20 61 66 74 65 72 20 61  led back after a
1cdf0 6e 20 65 72 72 6f 72 20 77 69 74 68 6f 75 74 20  n error without 
1ce00 68 61 76 69 6e 67 20 74 6f 20 72 6f 6c 6c 20 62  having to roll b
1ce10 61 63 6b 20 74 68 65 0a 2a 2a 20 65 6e 74 69 72  ack the.** entir
1ce20 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20 49  e transaction. I
1ce30 66 20 6e 6f 20 65 72 72 6f 72 20 69 73 20 65 6e  f no error is en
1ce40 63 6f 75 6e 74 65 72 65 64 2c 20 74 68 65 20 73  countered, the s
1ce50 74 61 74 65 6d 65 6e 74 20 74 72 61 6e 73 61 63  tatement transac
1ce60 74 69 6f 6e 0a 2a 2a 20 77 69 6c 6c 20 61 75 74  tion.** will aut
1ce70 6f 6d 61 74 69 63 61 6c 6c 79 20 63 6f 6d 6d 69  omatically commi
1ce80 74 20 77 68 65 6e 20 74 68 65 20 56 44 42 45 20  t when the VDBE 
1ce90 68 61 6c 74 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  halts..**.** If 
1cea0 50 35 21 3d 30 20 74 68 65 6e 20 74 68 69 73 20  P5!=0 then this 
1ceb0 6f 70 63 6f 64 65 20 61 6c 73 6f 20 63 68 65 63  opcode also chec
1cec0 6b 73 20 74 68 65 20 73 63 68 65 6d 61 20 63 6f  ks the schema co
1ced0 6f 6b 69 65 20 61 67 61 69 6e 73 74 20 50 33 0a  okie against P3.
1cee0 2a 2a 20 61 6e 64 20 74 68 65 20 73 63 68 65 6d  ** and the schem
1cef0 61 20 67 65 6e 65 72 61 74 69 6f 6e 20 63 6f 75  a generation cou
1cf00 6e 74 65 72 20 61 67 61 69 6e 73 74 20 50 34 2e  nter against P4.
1cf10 0a 2a 2a 20 54 68 65 20 63 6f 6f 6b 69 65 20 63  .** The cookie c
1cf20 68 61 6e 67 65 73 20 69 74 73 20 76 61 6c 75 65  hanges its value
1cf30 20 77 68 65 6e 65 76 65 72 20 74 68 65 20 64 61   whenever the da
1cf40 74 61 62 61 73 65 20 73 63 68 65 6d 61 20 63 68  tabase schema ch
1cf50 61 6e 67 65 73 2e 0a 2a 2a 20 54 68 69 73 20 6f  anges..** This o
1cf60 70 65 72 61 74 69 6f 6e 20 69 73 20 75 73 65 64  peration is used
1cf70 20 74 6f 20 64 65 74 65 63 74 20 77 68 65 6e 20   to detect when 
1cf80 74 68 61 74 20 74 68 65 20 63 6f 6f 6b 69 65 20  that the cookie 
1cf90 68 61 73 20 63 68 61 6e 67 65 64 0a 2a 2a 20 61  has changed.** a
1cfa0 6e 64 20 74 68 61 74 20 74 68 65 20 63 75 72 72  nd that the curr
1cfb0 65 6e 74 20 70 72 6f 63 65 73 73 20 6e 65 65 64  ent process need
1cfc0 73 20 74 6f 20 72 65 72 65 61 64 20 74 68 65 20  s to reread the 
1cfd0 73 63 68 65 6d 61 2e 20 20 49 66 20 74 68 65 20  schema.  If the 
1cfe0 73 63 68 65 6d 61 0a 2a 2a 20 63 6f 6f 6b 69 65  schema.** cookie
1cff0 20 69 6e 20 50 33 20 64 69 66 66 65 72 73 20 66   in P3 differs f
1d000 72 6f 6d 20 74 68 65 20 73 63 68 65 6d 61 20 63  rom the schema c
1d010 6f 6f 6b 69 65 20 69 6e 20 74 68 65 20 64 61 74  ookie in the dat
1d020 61 62 61 73 65 20 68 65 61 64 65 72 20 6f 72 0a  abase header or.
1d030 2a 2a 20 69 66 20 74 68 65 20 73 63 68 65 6d 61  ** if the schema
1d040 20 67 65 6e 65 72 61 74 69 6f 6e 20 63 6f 75 6e   generation coun
1d050 74 65 72 20 69 6e 20 50 34 20 64 69 66 66 65 72  ter in P4 differ
1d060 73 20 66 72 6f 6d 20 74 68 65 20 63 75 72 72 65  s from the curre
1d070 6e 74 0a 2a 2a 20 67 65 6e 65 72 61 74 69 6f 6e  nt.** generation
1d080 20 63 6f 75 6e 74 65 72 2c 20 74 68 65 6e 20 61   counter, then a
1d090 6e 20 53 51 4c 49 54 45 5f 53 43 48 45 4d 41 20  n SQLITE_SCHEMA 
1d0a0 65 72 72 6f 72 20 69 73 20 72 61 69 73 65 64 20  error is raised 
1d0b0 61 6e 64 20 65 78 65 63 75 74 69 6f 6e 0a 2a 2a  and execution.**
1d0c0 20 68 61 6c 74 73 2e 20 20 54 68 65 20 73 71 6c   halts.  The sql
1d0d0 69 74 65 33 5f 73 74 65 70 28 29 20 77 72 61 70  ite3_step() wrap
1d0e0 70 65 72 20 66 75 6e 63 74 69 6f 6e 20 6d 69 67  per function mig
1d0f0 68 74 20 74 68 65 6e 20 72 65 70 72 65 70 61 72  ht then reprepar
1d100 65 20 74 68 65 0a 2a 2a 20 73 74 61 74 65 6d 65  e the.** stateme
1d110 6e 74 20 61 6e 64 20 72 65 72 75 6e 20 69 74 20  nt and rerun it 
1d120 66 72 6f 6d 20 74 68 65 20 62 65 67 69 6e 6e 69  from the beginni
1d130 6e 67 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 54  ng..*/.case OP_T
1d140 72 61 6e 73 61 63 74 69 6f 6e 3a 20 7b 0a 20 20  ransaction: {.  
1d150 42 74 72 65 65 20 2a 70 42 74 3b 0a 20 20 69 6e  Btree *pBt;.  in
1d160 74 20 69 4d 65 74 61 20 3d 20 30 3b 0a 0a 20 20  t iMeta = 0;..  
1d170 61 73 73 65 72 74 28 20 70 2d 3e 62 49 73 52 65  assert( p->bIsRe
1d180 61 64 65 72 20 29 3b 0a 20 20 61 73 73 65 72 74  ader );.  assert
1d190 28 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30  ( p->readOnly==0
1d1a0 20 7c 7c 20 70 4f 70 2d 3e 70 32 3d 3d 30 20 29   || pOp->p2==0 )
1d1b0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
1d1c0 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70  >p1>=0 && pOp->p
1d1d0 31 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61  1<db->nDb );.  a
1d1e0 73 73 65 72 74 28 20 44 62 4d 61 73 6b 54 65 73  ssert( DbMaskTes
1d1f0 74 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b 2c 20  t(p->btreeMask, 
1d200 70 4f 70 2d 3e 70 31 29 20 29 3b 0a 20 20 69 66  pOp->p1) );.  if
1d210 28 20 70 4f 70 2d 3e 70 32 20 26 26 20 28 64 62  ( pOp->p2 && (db
1d220 2d 3e 66 6c 61 67 73 20 26 20 53 51 4c 49 54 45  ->flags & SQLITE
1d230 5f 51 75 65 72 79 4f 6e 6c 79 29 21 3d 30 20 29  _QueryOnly)!=0 )
1d240 7b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54  {.    rc = SQLIT
1d250 45 5f 52 45 41 44 4f 4e 4c 59 3b 0a 20 20 20 20  E_READONLY;.    
1d260 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
1d270 6f 5f 65 72 72 6f 72 3b 0a 20 20 7d 0a 20 20 70  o_error;.  }.  p
1d280 42 74 20 3d 20 64 62 2d 3e 61 44 62 5b 70 4f 70  Bt = db->aDb[pOp
1d290 2d 3e 70 31 5d 2e 70 42 74 3b 0a 0a 20 20 69 66  ->p1].pBt;..  if
1d2a0 28 20 70 42 74 20 29 7b 0a 20 20 20 20 72 63 20  ( pBt ){.    rc 
1d2b0 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 42 65  = sqlite3BtreeBe
1d2c0 67 69 6e 54 72 61 6e 73 28 70 42 74 2c 20 70 4f  ginTrans(pBt, pO
1d2d0 70 2d 3e 70 32 2c 20 26 69 4d 65 74 61 29 3b 0a  p->p2, &iMeta);.
1d2e0 20 20 20 20 74 65 73 74 63 61 73 65 28 20 72 63      testcase( rc
1d2f0 3d 3d 53 51 4c 49 54 45 5f 42 55 53 59 5f 53 4e  ==SQLITE_BUSY_SN
1d300 41 50 53 48 4f 54 20 29 3b 0a 20 20 20 20 74 65  APSHOT );.    te
1d310 73 74 63 61 73 65 28 20 72 63 3d 3d 53 51 4c 49  stcase( rc==SQLI
1d320 54 45 5f 42 55 53 59 5f 52 45 43 4f 56 45 52 59  TE_BUSY_RECOVERY
1d330 20 29 3b 0a 20 20 20 20 69 66 28 20 72 63 21 3d   );.    if( rc!=
1d340 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20  SQLITE_OK ){.   
1d350 20 20 20 69 66 28 20 28 72 63 26 30 78 66 66 29     if( (rc&0xff)
1d360 3d 3d 53 51 4c 49 54 45 5f 42 55 53 59 20 29 7b  ==SQLITE_BUSY ){
1d370 0a 20 20 20 20 20 20 20 20 70 2d 3e 70 63 20 3d  .        p->pc =
1d380 20 28 69 6e 74 29 28 70 4f 70 20 2d 20 61 4f 70   (int)(pOp - aOp
1d390 29 3b 0a 20 20 20 20 20 20 20 20 70 2d 3e 72 63  );.        p->rc
1d3a0 20 3d 20 72 63 3b 0a 20 20 20 20 20 20 20 20 67   = rc;.        g
1d3b0 6f 74 6f 20 76 64 62 65 5f 72 65 74 75 72 6e 3b  oto vdbe_return;
1d3c0 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 67  .      }.      g
1d3d0 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
1d3e0 5f 65 72 72 6f 72 3b 0a 20 20 20 20 7d 0a 0a 20  _error;.    }.. 
1d3f0 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 32 20 26     if( pOp->p2 &
1d400 26 20 70 2d 3e 75 73 65 73 53 74 6d 74 4a 6f 75  & p->usesStmtJou
1d410 72 6e 61 6c 20 0a 20 20 20 20 20 26 26 20 28 64  rnal .     && (d
1d420 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 3d 3d 30  b->autoCommit==0
1d430 20 7c 7c 20 64 62 2d 3e 6e 56 64 62 65 52 65 61   || db->nVdbeRea
1d440 64 3e 31 29 20 0a 20 20 20 20 29 7b 0a 20 20 20  d>1) .    ){.   
1d450 20 20 20 61 73 73 65 72 74 28 20 73 71 6c 69 74     assert( sqlit
1d460 65 33 42 74 72 65 65 49 73 49 6e 54 72 61 6e 73  e3BtreeIsInTrans
1d470 28 70 42 74 29 20 29 3b 0a 20 20 20 20 20 20 69  (pBt) );.      i
1d480 66 28 20 70 2d 3e 69 53 74 61 74 65 6d 65 6e 74  f( p->iStatement
1d490 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 61  ==0 ){.        a
1d4a0 73 73 65 72 74 28 20 64 62 2d 3e 6e 53 74 61 74  ssert( db->nStat
1d4b0 65 6d 65 6e 74 3e 3d 30 20 26 26 20 64 62 2d 3e  ement>=0 && db->
1d4c0 6e 53 61 76 65 70 6f 69 6e 74 3e 3d 30 20 29 3b  nSavepoint>=0 );
1d4d0 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 6e 53 74  .        db->nSt
1d4e0 61 74 65 6d 65 6e 74 2b 2b 3b 20 0a 20 20 20 20  atement++; .    
1d4f0 20 20 20 20 70 2d 3e 69 53 74 61 74 65 6d 65 6e      p->iStatemen
1d500 74 20 3d 20 64 62 2d 3e 6e 53 61 76 65 70 6f 69  t = db->nSavepoi
1d510 6e 74 20 2b 20 64 62 2d 3e 6e 53 74 61 74 65 6d  nt + db->nStatem
1d520 65 6e 74 3b 0a 20 20 20 20 20 20 7d 0a 0a 20 20  ent;.      }..  
1d530 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
1d540 56 74 61 62 53 61 76 65 70 6f 69 6e 74 28 64 62  VtabSavepoint(db
1d550 2c 20 53 41 56 45 50 4f 49 4e 54 5f 42 45 47 49  , SAVEPOINT_BEGI
1d560 4e 2c 20 70 2d 3e 69 53 74 61 74 65 6d 65 6e 74  N, p->iStatement
1d570 2d 31 29 3b 0a 20 20 20 20 20 20 69 66 28 20 72  -1);.      if( r
1d580 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a  c==SQLITE_OK ){.
1d590 20 20 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c          rc = sql
1d5a0 69 74 65 33 42 74 72 65 65 42 65 67 69 6e 53 74  ite3BtreeBeginSt
1d5b0 6d 74 28 70 42 74 2c 20 70 2d 3e 69 53 74 61 74  mt(pBt, p->iStat
1d5c0 65 6d 65 6e 74 29 3b 0a 20 20 20 20 20 20 7d 0a  ement);.      }.
1d5d0 0a 20 20 20 20 20 20 2f 2a 20 53 74 6f 72 65 20  .      /* Store 
1d5e0 74 68 65 20 63 75 72 72 65 6e 74 20 76 61 6c 75  the current valu
1d5f0 65 20 6f 66 20 74 68 65 20 64 61 74 61 62 61 73  e of the databas
1d600 65 20 68 61 6e 64 6c 65 73 20 64 65 66 65 72 72  e handles deferr
1d610 65 64 20 63 6f 6e 73 74 72 61 69 6e 74 0a 20 20  ed constraint.  
1d620 20 20 20 20 2a 2a 20 63 6f 75 6e 74 65 72 2e 20      ** counter. 
1d630 49 66 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74  If the statement
1d640 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 6e 65 65   transaction nee
1d650 64 73 20 74 6f 20 62 65 20 72 6f 6c 6c 65 64 20  ds to be rolled 
1d660 62 61 63 6b 2c 0a 20 20 20 20 20 20 2a 2a 20 74  back,.      ** t
1d670 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68 69 73  he value of this
1d680 20 63 6f 75 6e 74 65 72 20 6e 65 65 64 73 20 74   counter needs t
1d690 6f 20 62 65 20 72 65 73 74 6f 72 65 64 20 74 6f  o be restored to
1d6a0 6f 2e 20 20 2a 2f 0a 20 20 20 20 20 20 70 2d 3e  o.  */.      p->
1d6b0 6e 53 74 6d 74 44 65 66 43 6f 6e 73 20 3d 20 64  nStmtDefCons = d
1d6c0 62 2d 3e 6e 44 65 66 65 72 72 65 64 43 6f 6e 73  b->nDeferredCons
1d6d0 3b 0a 20 20 20 20 20 20 70 2d 3e 6e 53 74 6d 74  ;.      p->nStmt
1d6e0 44 65 66 49 6d 6d 43 6f 6e 73 20 3d 20 64 62 2d  DefImmCons = db-
1d6f0 3e 6e 44 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e  >nDeferredImmCon
1d700 73 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 61  s;.    }.  }.  a
1d710 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 35 3d 3d  ssert( pOp->p5==
1d720 30 20 7c 7c 20 70 4f 70 2d 3e 70 34 74 79 70 65  0 || pOp->p4type
1d730 3d 3d 50 34 5f 49 4e 54 33 32 20 29 3b 0a 20 20  ==P4_INT32 );.  
1d740 69 66 28 20 70 4f 70 2d 3e 70 35 0a 20 20 20 26  if( pOp->p5.   &
1d750 26 20 28 69 4d 65 74 61 21 3d 70 4f 70 2d 3e 70  & (iMeta!=pOp->p
1d760 33 0a 20 20 20 20 20 20 7c 7c 20 64 62 2d 3e 61  3.      || db->a
1d770 44 62 5b 70 4f 70 2d 3e 70 31 5d 2e 70 53 63 68  Db[pOp->p1].pSch
1d780 65 6d 61 2d 3e 69 47 65 6e 65 72 61 74 69 6f 6e  ema->iGeneration
1d790 21 3d 70 4f 70 2d 3e 70 34 2e 69 29 0a 20 20 29  !=pOp->p4.i).  )
1d7a0 7b 0a 20 20 20 20 2f 2a 0a 20 20 20 20 2a 2a 20  {.    /*.    ** 
1d7b0 49 4d 50 4c 45 4d 45 4e 54 41 54 49 4f 4e 2d 4f  IMPLEMENTATION-O
1d7c0 46 3a 20 52 2d 30 33 31 38 39 2d 35 31 31 33 35  F: R-03189-51135
1d7d0 20 41 73 20 65 61 63 68 20 53 51 4c 20 73 74 61   As each SQL sta
1d7e0 74 65 6d 65 6e 74 20 72 75 6e 73 2c 20 74 68 65  tement runs, the
1d7f0 20 73 63 68 65 6d 61 0a 20 20 20 20 2a 2a 20 76   schema.    ** v
1d800 65 72 73 69 6f 6e 20 69 73 20 63 68 65 63 6b 65  ersion is checke
1d810 64 20 74 6f 20 65 6e 73 75 72 65 20 74 68 61 74  d to ensure that
1d820 20 74 68 65 20 73 63 68 65 6d 61 20 68 61 73 20   the schema has 
1d830 6e 6f 74 20 63 68 61 6e 67 65 64 20 73 69 6e 63  not changed sinc
1d840 65 20 74 68 65 0a 20 20 20 20 2a 2a 20 53 51 4c  e the.    ** SQL
1d850 20 73 74 61 74 65 6d 65 6e 74 20 77 61 73 20 70   statement was p
1d860 72 65 70 61 72 65 64 2e 0a 20 20 20 20 2a 2f 0a  repared..    */.
1d870 20 20 20 20 73 71 6c 69 74 65 33 44 62 46 72 65      sqlite3DbFre
1d880 65 28 64 62 2c 20 70 2d 3e 7a 45 72 72 4d 73 67  e(db, p->zErrMsg
1d890 29 3b 0a 20 20 20 20 70 2d 3e 7a 45 72 72 4d 73  );.    p->zErrMs
1d8a0 67 20 3d 20 73 71 6c 69 74 65 33 44 62 53 74 72  g = sqlite3DbStr
1d8b0 44 75 70 28 64 62 2c 20 22 64 61 74 61 62 61 73  Dup(db, "databas
1d8c0 65 20 73 63 68 65 6d 61 20 68 61 73 20 63 68 61  e schema has cha
1d8d0 6e 67 65 64 22 29 3b 0a 20 20 20 20 2f 2a 20 49  nged");.    /* I
1d8e0 66 20 74 68 65 20 73 63 68 65 6d 61 2d 63 6f 6f  f the schema-coo
1d8f0 6b 69 65 20 66 72 6f 6d 20 74 68 65 20 64 61 74  kie from the dat
1d900 61 62 61 73 65 20 66 69 6c 65 20 6d 61 74 63 68  abase file match
1d910 65 73 20 74 68 65 20 63 6f 6f 6b 69 65 20 0a 20  es the cookie . 
1d920 20 20 20 2a 2a 20 73 74 6f 72 65 64 20 77 69 74     ** stored wit
1d930 68 20 74 68 65 20 69 6e 2d 6d 65 6d 6f 72 79 20  h the in-memory 
1d940 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f  representation o
1d950 66 20 74 68 65 20 73 63 68 65 6d 61 2c 20 64 6f  f the schema, do
1d960 0a 20 20 20 20 2a 2a 20 6e 6f 74 20 72 65 6c 6f  .    ** not relo
1d970 61 64 20 74 68 65 20 73 63 68 65 6d 61 20 66 72  ad the schema fr
1d980 6f 6d 20 74 68 65 20 64 61 74 61 62 61 73 65 20  om the database 
1d990 66 69 6c 65 2e 0a 20 20 20 20 2a 2a 0a 20 20 20  file..    **.   
1d9a0 20 2a 2a 20 49 66 20 76 69 72 74 75 61 6c 2d 74   ** If virtual-t
1d9b0 61 62 6c 65 73 20 61 72 65 20 69 6e 20 75 73 65  ables are in use
1d9c0 2c 20 74 68 69 73 20 69 73 20 6e 6f 74 20 6a 75  , this is not ju
1d9d0 73 74 20 61 6e 20 6f 70 74 69 6d 69 7a 61 74 69  st an optimizati
1d9e0 6f 6e 2e 0a 20 20 20 20 2a 2a 20 4f 66 74 65 6e  on..    ** Often
1d9f0 2c 20 76 2d 74 61 62 6c 65 73 20 73 74 6f 72 65  , v-tables store
1da00 20 74 68 65 69 72 20 64 61 74 61 20 69 6e 20 6f   their data in o
1da10 74 68 65 72 20 53 51 4c 69 74 65 20 74 61 62 6c  ther SQLite tabl
1da20 65 73 2c 20 77 68 69 63 68 0a 20 20 20 20 2a 2a  es, which.    **
1da30 20 61 72 65 20 71 75 65 72 69 65 64 20 66 72 6f   are queried fro
1da40 6d 20 77 69 74 68 69 6e 20 78 4e 65 78 74 28 29  m within xNext()
1da50 20 61 6e 64 20 6f 74 68 65 72 20 76 2d 74 61 62   and other v-tab
1da60 6c 65 20 6d 65 74 68 6f 64 73 20 75 73 69 6e 67  le methods using
1da70 0a 20 20 20 20 2a 2a 20 70 72 65 70 61 72 65 64  .    ** prepared
1da80 20 71 75 65 72 69 65 73 2e 20 49 66 20 73 75 63   queries. If suc
1da90 68 20 61 20 71 75 65 72 79 20 69 73 20 6f 75 74  h a query is out
1daa0 2d 6f 66 2d 64 61 74 65 2c 20 77 65 20 64 6f 20  -of-date, we do 
1dab0 6e 6f 74 20 77 61 6e 74 20 74 6f 0a 20 20 20 20  not want to.    
1dac0 2a 2a 20 64 69 73 63 61 72 64 20 74 68 65 20 64  ** discard the d
1dad0 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 2c 20  atabase schema, 
1dae0 61 73 20 74 68 65 20 75 73 65 72 20 63 6f 64 65  as the user code
1daf0 20 69 6d 70 6c 65 6d 65 6e 74 69 6e 67 20 74 68   implementing th
1db00 65 0a 20 20 20 20 2a 2a 20 76 2d 74 61 62 6c 65  e.    ** v-table
1db10 20 77 6f 75 6c 64 20 68 61 76 65 20 74 6f 20 62   would have to b
1db20 65 20 72 65 61 64 79 20 66 6f 72 20 74 68 65 20  e ready for the 
1db30 73 71 6c 69 74 65 33 5f 76 74 61 62 20 73 74 72  sqlite3_vtab str
1db40 75 63 74 75 72 65 20 69 74 73 65 6c 66 0a 20 20  ucture itself.  
1db50 20 20 2a 2a 20 74 6f 20 62 65 20 69 6e 76 61 6c    ** to be inval
1db60 69 64 61 74 65 64 20 77 68 65 6e 65 76 65 72 20  idated whenever 
1db70 73 71 6c 69 74 65 33 5f 73 74 65 70 28 29 20 69  sqlite3_step() i
1db80 73 20 63 61 6c 6c 65 64 20 66 72 6f 6d 20 77 69  s called from wi
1db90 74 68 69 6e 20 0a 20 20 20 20 2a 2a 20 61 20 76  thin .    ** a v
1dba0 2d 74 61 62 6c 65 20 6d 65 74 68 6f 64 2e 0a 20  -table method.. 
1dbb0 20 20 20 2a 2f 0a 20 20 20 20 69 66 28 20 64 62     */.    if( db
1dbc0 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 31 5d 2e 70  ->aDb[pOp->p1].p
1dbd0 53 63 68 65 6d 61 2d 3e 73 63 68 65 6d 61 5f 63  Schema->schema_c
1dbe0 6f 6f 6b 69 65 21 3d 69 4d 65 74 61 20 29 7b 0a  ookie!=iMeta ){.
1dbf0 20 20 20 20 20 20 73 71 6c 69 74 65 33 52 65 73        sqlite3Res
1dc00 65 74 4f 6e 65 53 63 68 65 6d 61 28 64 62 2c 20  etOneSchema(db, 
1dc10 70 4f 70 2d 3e 70 31 29 3b 0a 20 20 20 20 7d 0a  pOp->p1);.    }.
1dc20 20 20 20 20 70 2d 3e 65 78 70 69 72 65 64 20 3d      p->expired =
1dc30 20 31 3b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c   1;.    rc = SQL
1dc40 49 54 45 5f 53 43 48 45 4d 41 3b 0a 20 20 7d 0a  ITE_SCHEMA;.  }.
1dc50 20 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20    if( rc ) goto 
1dc60 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
1dc70 6f 72 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  or;.  break;.}..
1dc80 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65 61 64 43  /* Opcode: ReadC
1dc90 6f 6f 6b 69 65 20 50 31 20 50 32 20 50 33 20 2a  ookie P1 P2 P3 *
1dca0 20 2a 0a 2a 2a 0a 2a 2a 20 52 65 61 64 20 63 6f   *.**.** Read co
1dcb0 6f 6b 69 65 20 6e 75 6d 62 65 72 20 50 33 20 66  okie number P3 f
1dcc0 72 6f 6d 20 64 61 74 61 62 61 73 65 20 50 31 20  rom database P1 
1dcd0 61 6e 64 20 77 72 69 74 65 20 69 74 20 69 6e 74  and write it int
1dce0 6f 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a  o register P2..*
1dcf0 2a 20 50 33 3d 3d 31 20 69 73 20 74 68 65 20 73  * P3==1 is the s
1dd00 63 68 65 6d 61 20 76 65 72 73 69 6f 6e 2e 20 20  chema version.  
1dd10 50 33 3d 3d 32 20 69 73 20 74 68 65 20 64 61 74  P3==2 is the dat
1dd20 61 62 61 73 65 20 66 6f 72 6d 61 74 2e 0a 2a 2a  abase format..**
1dd30 20 50 33 3d 3d 33 20 69 73 20 74 68 65 20 72 65   P3==3 is the re
1dd40 63 6f 6d 6d 65 6e 64 65 64 20 70 61 67 65 72 20  commended pager 
1dd50 63 61 63 68 65 20 73 69 7a 65 2c 20 61 6e 64 20  cache size, and 
1dd60 73 6f 20 66 6f 72 74 68 2e 20 20 50 31 3d 3d 30  so forth.  P1==0
1dd70 20 69 73 0a 2a 2a 20 74 68 65 20 6d 61 69 6e 20   is.** the main 
1dd80 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 61 6e  database file an
1dd90 64 20 50 31 3d 3d 31 20 69 73 20 74 68 65 20 64  d P1==1 is the d
1dda0 61 74 61 62 61 73 65 20 66 69 6c 65 20 75 73 65  atabase file use
1ddb0 64 20 74 6f 20 73 74 6f 72 65 0a 2a 2a 20 74 65  d to store.** te
1ddc0 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 73 2e 0a  mporary tables..
1ddd0 2a 2a 0a 2a 2a 20 54 68 65 72 65 20 6d 75 73 74  **.** There must
1dde0 20 62 65 20 61 20 72 65 61 64 2d 6c 6f 63 6b 20   be a read-lock 
1ddf0 6f 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20  on the database 
1de00 28 65 69 74 68 65 72 20 61 20 74 72 61 6e 73 61  (either a transa
1de10 63 74 69 6f 6e 0a 2a 2a 20 6d 75 73 74 20 62 65  ction.** must be
1de20 20 73 74 61 72 74 65 64 20 6f 72 20 74 68 65 72   started or ther
1de30 65 20 6d 75 73 74 20 62 65 20 61 6e 20 6f 70 65  e must be an ope
1de40 6e 20 63 75 72 73 6f 72 29 20 62 65 66 6f 72 65  n cursor) before
1de50 0a 2a 2a 20 65 78 65 63 75 74 69 6e 67 20 74 68  .** executing th
1de60 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a  is instruction..
1de70 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65 61 64 43  */.case OP_ReadC
1de80 6f 6f 6b 69 65 3a 20 7b 20 20 20 20 20 20 20 20  ookie: {        
1de90 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a         /* out2 *
1dea0 2f 0a 20 20 69 6e 74 20 69 4d 65 74 61 3b 0a 20  /.  int iMeta;. 
1deb0 20 69 6e 74 20 69 44 62 3b 0a 20 20 69 6e 74 20   int iDb;.  int 
1dec0 69 43 6f 6f 6b 69 65 3b 0a 0a 20 20 61 73 73 65  iCookie;..  asse
1ded0 72 74 28 20 70 2d 3e 62 49 73 52 65 61 64 65 72  rt( p->bIsReader
1dee0 20 29 3b 0a 20 20 69 44 62 20 3d 20 70 4f 70 2d   );.  iDb = pOp-
1def0 3e 70 31 3b 0a 20 20 69 43 6f 6f 6b 69 65 20 3d  >p1;.  iCookie =
1df00 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 61 73 73 65   pOp->p3;.  asse
1df10 72 74 28 20 70 4f 70 2d 3e 70 33 3c 53 51 4c 49  rt( pOp->p3<SQLI
1df20 54 45 5f 4e 5f 42 54 52 45 45 5f 4d 45 54 41 20  TE_N_BTREE_META 
1df30 29 3b 0a 20 20 61 73 73 65 72 74 28 20 69 44 62  );.  assert( iDb
1df40 3e 3d 30 20 26 26 20 69 44 62 3c 64 62 2d 3e 6e  >=0 && iDb<db->n
1df50 44 62 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  Db );.  assert( 
1df60 64 62 2d 3e 61 44 62 5b 69 44 62 5d 2e 70 42 74  db->aDb[iDb].pBt
1df70 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  !=0 );.  assert(
1df80 20 44 62 4d 61 73 6b 54 65 73 74 28 70 2d 3e 62   DbMaskTest(p->b
1df90 74 72 65 65 4d 61 73 6b 2c 20 69 44 62 29 20 29  treeMask, iDb) )
1dfa0 3b 0a 0a 20 20 73 71 6c 69 74 65 33 42 74 72 65  ;..  sqlite3Btre
1dfb0 65 47 65 74 4d 65 74 61 28 64 62 2d 3e 61 44 62  eGetMeta(db->aDb
1dfc0 5b 69 44 62 5d 2e 70 42 74 2c 20 69 43 6f 6f 6b  [iDb].pBt, iCook
1dfd0 69 65 2c 20 28 75 33 32 20 2a 29 26 69 4d 65 74  ie, (u32 *)&iMet
1dfe0 61 29 3b 0a 20 20 70 4f 75 74 20 3d 20 6f 75 74  a);.  pOut = out
1dff0 32 50 72 65 72 65 6c 65 61 73 65 28 70 2c 20 70  2Prerelease(p, p
1e000 4f 70 29 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e 69  Op);.  pOut->u.i
1e010 20 3d 20 69 4d 65 74 61 3b 0a 20 20 62 72 65 61   = iMeta;.  brea
1e020 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
1e030 20 53 65 74 43 6f 6f 6b 69 65 20 50 31 20 50 32   SetCookie P1 P2
1e040 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 57 72   P3 * *.**.** Wr
1e050 69 74 65 20 74 68 65 20 69 6e 74 65 67 65 72 20  ite the integer 
1e060 76 61 6c 75 65 20 50 33 20 69 6e 74 6f 20 63 6f  value P3 into co
1e070 6f 6b 69 65 20 6e 75 6d 62 65 72 20 50 32 20 6f  okie number P2 o
1e080 66 20 64 61 74 61 62 61 73 65 20 50 31 2e 0a 2a  f database P1..*
1e090 2a 20 50 32 3d 3d 31 20 69 73 20 74 68 65 20 73  * P2==1 is the s
1e0a0 63 68 65 6d 61 20 76 65 72 73 69 6f 6e 2e 20 20  chema version.  
1e0b0 50 32 3d 3d 32 20 69 73 20 74 68 65 20 64 61 74  P2==2 is the dat
1e0c0 61 62 61 73 65 20 66 6f 72 6d 61 74 2e 0a 2a 2a  abase format..**
1e0d0 20 50 32 3d 3d 33 20 69 73 20 74 68 65 20 72 65   P2==3 is the re
1e0e0 63 6f 6d 6d 65 6e 64 65 64 20 70 61 67 65 72 20  commended pager 
1e0f0 63 61 63 68 65 20 0a 2a 2a 20 73 69 7a 65 2c 20  cache .** size, 
1e100 61 6e 64 20 73 6f 20 66 6f 72 74 68 2e 20 20 50  and so forth.  P
1e110 31 3d 3d 30 20 69 73 20 74 68 65 20 6d 61 69 6e  1==0 is the main
1e120 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 61   database file a
1e130 6e 64 20 50 31 3d 3d 31 20 69 73 20 74 68 65 20  nd P1==1 is the 
1e140 0a 2a 2a 20 64 61 74 61 62 61 73 65 20 66 69 6c  .** database fil
1e150 65 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20  e used to store 
1e160 74 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 73  temporary tables
1e170 2e 0a 2a 2a 0a 2a 2a 20 41 20 74 72 61 6e 73 61  ..**.** A transa
1e180 63 74 69 6f 6e 20 6d 75 73 74 20 62 65 20 73 74  ction must be st
1e190 61 72 74 65 64 20 62 65 66 6f 72 65 20 65 78 65  arted before exe
1e1a0 63 75 74 69 6e 67 20 74 68 69 73 20 6f 70 63 6f  cuting this opco
1e1b0 64 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53  de..*/.case OP_S
1e1c0 65 74 43 6f 6f 6b 69 65 3a 20 7b 0a 20 20 44 62  etCookie: {.  Db
1e1d0 20 2a 70 44 62 3b 0a 0a 20 20 73 71 6c 69 74 65   *pDb;..  sqlite
1e1e0 33 56 64 62 65 49 6e 63 72 57 72 69 74 65 43 6f  3VdbeIncrWriteCo
1e1f0 75 6e 74 65 72 28 70 2c 20 30 29 3b 0a 20 20 61  unter(p, 0);.  a
1e200 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3c 53  ssert( pOp->p2<S
1e210 51 4c 49 54 45 5f 4e 5f 42 54 52 45 45 5f 4d 45  QLITE_N_BTREE_ME
1e220 54 41 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  TA );.  assert( 
1e230 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f  pOp->p1>=0 && pO
1e240 70 2d 3e 70 31 3c 64 62 2d 3e 6e 44 62 20 29 3b  p->p1<db->nDb );
1e250 0a 20 20 61 73 73 65 72 74 28 20 44 62 4d 61 73  .  assert( DbMas
1e260 6b 54 65 73 74 28 70 2d 3e 62 74 72 65 65 4d 61  kTest(p->btreeMa
1e270 73 6b 2c 20 70 4f 70 2d 3e 70 31 29 20 29 3b 0a  sk, pOp->p1) );.
1e280 20 20 61 73 73 65 72 74 28 20 70 2d 3e 72 65 61    assert( p->rea
1e290 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 20 20 70 44  dOnly==0 );.  pD
1e2a0 62 20 3d 20 26 64 62 2d 3e 61 44 62 5b 70 4f 70  b = &db->aDb[pOp
1e2b0 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p1];.  assert(
1e2c0 20 70 44 62 2d 3e 70 42 74 21 3d 30 20 29 3b 0a   pDb->pBt!=0 );.
1e2d0 20 20 61 73 73 65 72 74 28 20 73 71 6c 69 74 65    assert( sqlite
1e2e0 33 53 63 68 65 6d 61 4d 75 74 65 78 48 65 6c 64  3SchemaMutexHeld
1e2f0 28 64 62 2c 20 70 4f 70 2d 3e 70 31 2c 20 30 29  (db, pOp->p1, 0)
1e300 20 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49   );.#ifndef SQLI
1e310 54 45 5f 4f 4d 49 54 5f 43 4f 4e 43 55 52 52 45  TE_OMIT_CONCURRE
1e320 4e 54 0a 20 20 69 66 28 20 64 62 2d 3e 62 43 6f  NT.  if( db->bCo
1e330 6e 63 75 72 72 65 6e 74 20 0a 20 20 20 26 26 20  ncurrent .   && 
1e340 28 70 4f 70 2d 3e 70 32 3d 3d 42 54 52 45 45 5f  (pOp->p2==BTREE_
1e350 55 53 45 52 5f 56 45 52 53 49 4f 4e 20 7c 7c 20  USER_VERSION || 
1e360 70 4f 70 2d 3e 70 32 3d 3d 42 54 52 45 45 5f 41  pOp->p2==BTREE_A
1e370 50 50 4c 49 43 41 54 49 4f 4e 5f 49 44 29 0a 20  PPLICATION_ID). 
1e380 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c   ){.    rc = SQL
1e390 49 54 45 5f 45 52 52 4f 52 3b 0a 20 20 20 20 73  ITE_ERROR;.    s
1e3a0 71 6c 69 74 65 33 56 64 62 65 45 72 72 6f 72 28  qlite3VdbeError(
1e3b0 70 2c 20 22 63 61 6e 6e 6f 74 20 6d 6f 64 69 66  p, "cannot modif
1e3c0 79 20 25 73 20 77 69 74 68 69 6e 20 43 4f 4e 43  y %s within CONC
1e3d0 55 52 52 45 4e 54 20 74 72 61 6e 73 61 63 74 69  URRENT transacti
1e3e0 6f 6e 22 2c 0a 20 20 20 20 20 20 20 20 70 4f 70  on",.        pOp
1e3f0 2d 3e 70 32 3d 3d 42 54 52 45 45 5f 55 53 45 52  ->p2==BTREE_USER
1e400 5f 56 45 52 53 49 4f 4e 20 3f 20 22 75 73 65 72  _VERSION ? "user
1e410 5f 76 65 72 73 69 6f 6e 22 20 3a 20 22 61 70 70  _version" : "app
1e420 6c 69 63 61 74 69 6f 6e 5f 69 64 22 0a 20 20 20  lication_id".   
1e430 20 29 3b 0a 20 20 20 20 67 6f 74 6f 20 61 62 6f   );.    goto abo
1e440 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
1e450 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20 2f 2a  .  }.#endif.  /*
1e460 20 53 65 65 20 6e 6f 74 65 20 61 62 6f 75 74 20   See note about 
1e470 69 6e 64 65 78 20 73 68 69 66 74 69 6e 67 20 6f  index shifting o
1e480 6e 20 4f 50 5f 52 65 61 64 43 6f 6f 6b 69 65 20  n OP_ReadCookie 
1e490 2a 2f 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65  */.  rc = sqlite
1e4a0 33 42 74 72 65 65 55 70 64 61 74 65 4d 65 74 61  3BtreeUpdateMeta
1e4b0 28 70 44 62 2d 3e 70 42 74 2c 20 70 4f 70 2d 3e  (pDb->pBt, pOp->
1e4c0 70 32 2c 20 70 4f 70 2d 3e 70 33 29 3b 0a 20 20  p2, pOp->p3);.  
1e4d0 69 66 28 20 70 4f 70 2d 3e 70 32 3d 3d 42 54 52  if( pOp->p2==BTR
1e4e0 45 45 5f 53 43 48 45 4d 41 5f 56 45 52 53 49 4f  EE_SCHEMA_VERSIO
1e4f0 4e 20 29 7b 0a 20 20 20 20 2f 2a 20 57 68 65 6e  N ){.    /* When
1e500 20 74 68 65 20 73 63 68 65 6d 61 20 63 6f 6f 6b   the schema cook
1e510 69 65 20 63 68 61 6e 67 65 73 2c 20 72 65 63 6f  ie changes, reco
1e520 72 64 20 74 68 65 20 6e 65 77 20 63 6f 6f 6b 69  rd the new cooki
1e530 65 20 69 6e 74 65 72 6e 61 6c 6c 79 20 2a 2f 0a  e internally */.
1e540 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d      assert( pOp-
1e550 3e 70 31 3d 3d 31 20 7c 7c 20 64 62 2d 3e 62 43  >p1==1 || db->bC
1e560 6f 6e 63 75 72 72 65 6e 74 3d 3d 30 20 29 3b 0a  oncurrent==0 );.
1e570 20 20 20 20 70 44 62 2d 3e 70 53 63 68 65 6d 61      pDb->pSchema
1e580 2d 3e 73 63 68 65 6d 61 5f 63 6f 6f 6b 69 65 20  ->schema_cookie 
1e590 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 20 20 64  = pOp->p3;.    d
1e5a0 62 2d 3e 6d 44 62 46 6c 61 67 73 20 7c 3d 20 44  b->mDbFlags |= D
1e5b0 42 46 4c 41 47 5f 53 63 68 65 6d 61 43 68 61 6e  BFLAG_SchemaChan
1e5c0 67 65 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20  ge;.  }else if( 
1e5d0 70 4f 70 2d 3e 70 32 3d 3d 42 54 52 45 45 5f 46  pOp->p2==BTREE_F
1e5e0 49 4c 45 5f 46 4f 52 4d 41 54 20 29 7b 0a 20 20  ILE_FORMAT ){.  
1e5f0 20 20 2f 2a 20 52 65 63 6f 72 64 20 63 68 61 6e    /* Record chan
1e600 67 65 73 20 69 6e 20 74 68 65 20 66 69 6c 65 20  ges in the file 
1e610 66 6f 72 6d 61 74 20 2a 2f 0a 20 20 20 20 70 44  format */.    pD
1e620 62 2d 3e 70 53 63 68 65 6d 61 2d 3e 66 69 6c 65  b->pSchema->file
1e630 5f 66 6f 72 6d 61 74 20 3d 20 70 4f 70 2d 3e 70  _format = pOp->p
1e640 33 3b 0a 20 20 7d 0a 20 20 69 66 28 20 70 4f 70  3;.  }.  if( pOp
1e650 2d 3e 70 31 3d 3d 31 20 29 7b 0a 20 20 20 20 2f  ->p1==1 ){.    /
1e660 2a 20 49 6e 76 61 6c 69 64 61 74 65 20 61 6c 6c  * Invalidate all
1e670 20 70 72 65 70 61 72 65 64 20 73 74 61 74 65 6d   prepared statem
1e680 65 6e 74 73 20 77 68 65 6e 65 76 65 72 20 74 68  ents whenever th
1e690 65 20 54 45 4d 50 20 64 61 74 61 62 61 73 65 0a  e TEMP database.
1e6a0 20 20 20 20 2a 2a 20 73 63 68 65 6d 61 20 69 73      ** schema is
1e6b0 20 63 68 61 6e 67 65 64 2e 20 20 54 69 63 6b 65   changed.  Ticke
1e6c0 74 20 23 31 36 34 34 20 2a 2f 0a 20 20 20 20 73  t #1644 */.    s
1e6d0 71 6c 69 74 65 33 45 78 70 69 72 65 50 72 65 70  qlite3ExpirePrep
1e6e0 61 72 65 64 53 74 61 74 65 6d 65 6e 74 73 28 64  aredStatements(d
1e6f0 62 2c 20 30 29 3b 0a 20 20 20 20 70 2d 3e 65 78  b, 0);.    p->ex
1e700 70 69 72 65 64 20 3d 20 30 3b 0a 20 20 7d 0a 20  pired = 0;.  }. 
1e710 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61   if( rc ) goto a
1e720 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
1e730 72 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  r;.  break;.}../
1e740 2a 20 4f 70 63 6f 64 65 3a 20 4f 70 65 6e 52 65  * Opcode: OpenRe
1e750 61 64 20 50 31 20 50 32 20 50 33 20 50 34 20 50  ad P1 P2 P3 P4 P
1e760 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72  5.** Synopsis: r
1e770 6f 6f 74 3d 50 32 20 69 44 62 3d 50 33 0a 2a 2a  oot=P2 iDb=P3.**
1e780 0a 2a 2a 20 4f 70 65 6e 20 61 20 72 65 61 64 2d  .** Open a read-
1e790 6f 6e 6c 79 20 63 75 72 73 6f 72 20 66 6f 72 20  only cursor for 
1e7a0 74 68 65 20 64 61 74 61 62 61 73 65 20 74 61 62  the database tab
1e7b0 6c 65 20 77 68 6f 73 65 20 72 6f 6f 74 20 70 61  le whose root pa
1e7c0 67 65 20 69 73 0a 2a 2a 20 50 32 20 69 6e 20 61  ge is.** P2 in a
1e7d0 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e 20   database file. 
1e7e0 20 54 68 65 20 64 61 74 61 62 61 73 65 20 66 69   The database fi
1e7f0 6c 65 20 69 73 20 64 65 74 65 72 6d 69 6e 65 64  le is determined
1e800 20 62 79 20 50 33 2e 20 0a 2a 2a 20 50 33 3d 3d   by P3. .** P3==
1e810 30 20 6d 65 61 6e 73 20 74 68 65 20 6d 61 69 6e  0 means the main
1e820 20 64 61 74 61 62 61 73 65 2c 20 50 33 3d 3d 31   database, P3==1
1e830 20 6d 65 61 6e 73 20 74 68 65 20 64 61 74 61 62   means the datab
1e840 61 73 65 20 75 73 65 64 20 66 6f 72 20 0a 2a 2a  ase used for .**
1e850 20 74 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65   temporary table
1e860 73 2c 20 61 6e 64 20 50 33 3e 31 20 6d 65 61 6e  s, and P3>1 mean
1e870 73 20 75 73 65 64 20 74 68 65 20 63 6f 72 72 65  s used the corre
1e880 73 70 6f 6e 64 69 6e 67 20 61 74 74 61 63 68 65  sponding attache
1e890 64 0a 2a 2a 20 64 61 74 61 62 61 73 65 2e 20 20  d.** database.  
1e8a0 47 69 76 65 20 74 68 65 20 6e 65 77 20 63 75 72  Give the new cur
1e8b0 73 6f 72 20 61 6e 20 69 64 65 6e 74 69 66 69 65  sor an identifie
1e8c0 72 20 6f 66 20 50 31 2e 20 20 54 68 65 20 50 31  r of P1.  The P1
1e8d0 0a 2a 2a 20 76 61 6c 75 65 73 20 6e 65 65 64 20  .** values need 
1e8e0 6e 6f 74 20 62 65 20 63 6f 6e 74 69 67 75 6f 75  not be contiguou
1e8f0 73 20 62 75 74 20 61 6c 6c 20 50 31 20 76 61 6c  s but all P1 val
1e900 75 65 73 20 73 68 6f 75 6c 64 20 62 65 20 73 6d  ues should be sm
1e910 61 6c 6c 20 69 6e 74 65 67 65 72 73 2e 0a 2a 2a  all integers..**
1e920 20 49 74 20 69 73 20 61 6e 20 65 72 72 6f 72 20   It is an error 
1e930 66 6f 72 20 50 31 20 74 6f 20 62 65 20 6e 65 67  for P1 to be neg
1e940 61 74 69 76 65 2e 0a 2a 2a 0a 2a 2a 20 41 6c 6c  ative..**.** All
1e950 6f 77 65 64 20 50 35 20 62 69 74 73 3a 0a 2a 2a  owed P5 bits:.**
1e960 20 3c 75 6c 3e 0a 2a 2a 20 3c 6c 69 3e 20 20 3c   <ul>.** <li>  <
1e970 62 3e 30 78 30 32 20 4f 50 46 4c 41 47 5f 53 45  b>0x02 OPFLAG_SE
1e980 45 4b 45 51 3c 2f 62 3e 3a 20 54 68 69 73 20 63  EKEQ</b>: This c
1e990 75 72 73 6f 72 20 77 69 6c 6c 20 6f 6e 6c 79 20  ursor will only 
1e9a0 62 65 20 75 73 65 64 20 66 6f 72 0a 2a 2a 20 20  be used for.**  
1e9b0 20 20 20 20 20 65 71 75 61 6c 69 74 79 20 6c 6f       equality lo
1e9c0 6f 6b 75 70 73 20 28 69 6d 70 6c 65 6d 65 6e 74  okups (implement
1e9d0 65 64 20 61 73 20 61 20 70 61 69 72 20 6f 66 20  ed as a pair of 
1e9e0 6f 70 63 6f 64 65 73 20 4f 50 5f 53 65 65 6b 47  opcodes OP_SeekG
1e9f0 45 2f 4f 50 5f 49 64 78 47 54 0a 2a 2a 20 20 20  E/OP_IdxGT.**   
1ea00 20 20 20 20 6f 66 20 4f 50 5f 53 65 65 6b 4c 45      of OP_SeekLE
1ea10 2f 4f 50 5f 49 64 78 47 54 29 0a 2a 2a 20 3c 2f  /OP_IdxGT).** </
1ea20 75 6c 3e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 34  ul>.**.** The P4
1ea30 20 76 61 6c 75 65 20 6d 61 79 20 62 65 20 65 69   value may be ei
1ea40 74 68 65 72 20 61 6e 20 69 6e 74 65 67 65 72 20  ther an integer 
1ea50 28 50 34 5f 49 4e 54 33 32 29 20 6f 72 20 61 20  (P4_INT32) or a 
1ea60 70 6f 69 6e 74 65 72 20 74 6f 0a 2a 2a 20 61 20  pointer to.** a 
1ea70 4b 65 79 49 6e 66 6f 20 73 74 72 75 63 74 75 72  KeyInfo structur
1ea80 65 20 28 50 34 5f 4b 45 59 49 4e 46 4f 29 2e 20  e (P4_KEYINFO). 
1ea90 49 66 20 69 74 20 69 73 20 61 20 70 6f 69 6e 74  If it is a point
1eaa0 65 72 20 74 6f 20 61 20 4b 65 79 49 6e 66 6f 20  er to a KeyInfo 
1eab0 0a 2a 2a 20 6f 62 6a 65 63 74 2c 20 74 68 65 6e  .** object, then
1eac0 20 74 61 62 6c 65 20 62 65 69 6e 67 20 6f 70 65   table being ope
1ead0 6e 65 64 20 6d 75 73 74 20 62 65 20 61 6e 20 5b  ned must be an [
1eae0 69 6e 64 65 78 20 62 2d 74 72 65 65 5d 20 77 68  index b-tree] wh
1eaf0 65 72 65 20 74 68 65 0a 2a 2a 20 4b 65 79 49 6e  ere the.** KeyIn
1eb00 66 6f 20 6f 62 6a 65 63 74 20 64 65 66 69 6e 65  fo object define
1eb10 73 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 61 6e  s the content an
1eb20 64 20 63 6f 6c 6c 61 74 69 6e 67 20 0a 2a 2a 20  d collating .** 
1eb30 73 65 71 75 65 6e 63 65 20 6f 66 20 74 68 61 74  sequence of that
1eb40 20 69 6e 64 65 78 20 62 2d 74 72 65 65 2e 20 4f   index b-tree. O
1eb50 74 68 65 72 77 69 73 65 2c 20 69 66 20 50 34 20  therwise, if P4 
1eb60 69 73 20 61 6e 20 69 6e 74 65 67 65 72 20 0a 2a  is an integer .*
1eb70 2a 20 76 61 6c 75 65 2c 20 74 68 65 6e 20 74 68  * value, then th
1eb80 65 20 74 61 62 6c 65 20 62 65 69 6e 67 20 6f 70  e table being op
1eb90 65 6e 65 64 20 6d 75 73 74 20 62 65 20 61 20 5b  ened must be a [
1eba0 74 61 62 6c 65 20 62 2d 74 72 65 65 5d 20 77 69  table b-tree] wi
1ebb0 74 68 20 61 0a 2a 2a 20 6e 75 6d 62 65 72 20 6f  th a.** number o
1ebc0 66 20 63 6f 6c 75 6d 6e 73 20 6e 6f 20 6c 65 73  f columns no les
1ebd0 73 20 74 68 61 6e 20 74 68 65 20 76 61 6c 75 65  s than the value
1ebe0 20 6f 66 20 50 34 2e 0a 2a 2a 0a 2a 2a 20 53 65   of P4..**.** Se
1ebf0 65 20 61 6c 73 6f 3a 20 4f 70 65 6e 57 72 69 74  e also: OpenWrit
1ec00 65 2c 20 52 65 6f 70 65 6e 49 64 78 0a 2a 2f 0a  e, ReopenIdx.*/.
1ec10 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65 6f 70 65  /* Opcode: Reope
1ec20 6e 49 64 78 20 50 31 20 50 32 20 50 33 20 50 34  nIdx P1 P2 P3 P4
1ec30 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a   P5.** Synopsis:
1ec40 20 72 6f 6f 74 3d 50 32 20 69 44 62 3d 50 33 0a   root=P2 iDb=P3.
1ec50 2a 2a 0a 2a 2a 20 54 68 65 20 52 65 6f 70 65 6e  **.** The Reopen
1ec60 49 64 78 20 6f 70 63 6f 64 65 20 77 6f 72 6b 73  Idx opcode works
1ec70 20 6c 69 6b 65 20 4f 50 5f 4f 70 65 6e 52 65 61   like OP_OpenRea
1ec80 64 20 65 78 63 65 70 74 20 74 68 61 74 20 69 74  d except that it
1ec90 20 66 69 72 73 74 0a 2a 2a 20 63 68 65 63 6b 73   first.** checks
1eca0 20 74 6f 20 73 65 65 20 69 66 20 74 68 65 20 63   to see if the c
1ecb0 75 72 73 6f 72 20 6f 6e 20 50 31 20 69 73 20 61  ursor on P1 is a
1ecc0 6c 72 65 61 64 79 20 6f 70 65 6e 20 6f 6e 20 74  lready open on t
1ecd0 68 65 20 73 61 6d 65 0a 2a 2a 20 62 2d 74 72 65  he same.** b-tre
1ece0 65 20 61 6e 64 20 69 66 20 69 74 20 69 73 20 74  e and if it is t
1ecf0 68 69 73 20 6f 70 63 6f 64 65 20 62 65 63 6f 6d  his opcode becom
1ed00 65 73 20 61 20 6e 6f 2d 6f 70 2e 20 20 49 6e 20  es a no-op.  In 
1ed10 6f 74 68 65 72 20 77 6f 72 64 73 2c 0a 2a 2a 20  other words,.** 
1ed20 69 66 20 74 68 65 20 63 75 72 73 6f 72 20 69 73  if the cursor is
1ed30 20 61 6c 72 65 61 64 79 20 6f 70 65 6e 2c 20 64   already open, d
1ed40 6f 20 6e 6f 74 20 72 65 6f 70 65 6e 20 69 74 2e  o not reopen it.
1ed50 0a 2a 2a 0a 2a 2a 20 54 68 65 20 52 65 6f 70 65  .**.** The Reope
1ed60 6e 49 64 78 20 6f 70 63 6f 64 65 20 6d 61 79 20  nIdx opcode may 
1ed70 6f 6e 6c 79 20 62 65 20 75 73 65 64 20 77 69 74  only be used wit
1ed80 68 20 50 35 3d 3d 30 20 6f 72 20 50 35 3d 3d 4f  h P5==0 or P5==O
1ed90 50 46 4c 41 47 5f 53 45 45 4b 45 51 0a 2a 2a 20  PFLAG_SEEKEQ.** 
1eda0 61 6e 64 20 77 69 74 68 20 50 34 20 62 65 69 6e  and with P4 bein
1edb0 67 20 61 20 50 34 5f 4b 45 59 49 4e 46 4f 20 6f  g a P4_KEYINFO o
1edc0 62 6a 65 63 74 2e 20 20 46 75 72 74 68 65 72 6d  bject.  Furtherm
1edd0 6f 72 65 2c 20 74 68 65 20 50 33 20 76 61 6c 75  ore, the P3 valu
1ede0 65 20 6d 75 73 74 0a 2a 2a 20 62 65 20 74 68 65  e must.** be the
1edf0 20 73 61 6d 65 20 61 73 20 65 76 65 72 79 20 6f   same as every o
1ee00 74 68 65 72 20 52 65 6f 70 65 6e 49 64 78 20 6f  ther ReopenIdx o
1ee10 72 20 4f 70 65 6e 52 65 61 64 20 66 6f 72 20 74  r OpenRead for t
1ee20 68 65 20 73 61 6d 65 20 63 75 72 73 6f 72 0a 2a  he same cursor.*
1ee30 2a 20 6e 75 6d 62 65 72 2e 0a 2a 2a 0a 2a 2a 20  * number..**.** 
1ee40 41 6c 6c 6f 77 65 64 20 50 35 20 62 69 74 73 3a  Allowed P5 bits:
1ee50 0a 2a 2a 20 3c 75 6c 3e 0a 2a 2a 20 3c 6c 69 3e  .** <ul>.** <li>
1ee60 20 20 3c 62 3e 30 78 30 32 20 4f 50 46 4c 41 47    <b>0x02 OPFLAG
1ee70 5f 53 45 45 4b 45 51 3c 2f 62 3e 3a 20 54 68 69  _SEEKEQ</b>: Thi
1ee80 73 20 63 75 72 73 6f 72 20 77 69 6c 6c 20 6f 6e  s cursor will on
1ee90 6c 79 20 62 65 20 75 73 65 64 20 66 6f 72 0a 2a  ly be used for.*
1eea0 2a 20 20 20 20 20 20 20 65 71 75 61 6c 69 74 79  *       equality
1eeb0 20 6c 6f 6f 6b 75 70 73 20 28 69 6d 70 6c 65 6d   lookups (implem
1eec0 65 6e 74 65 64 20 61 73 20 61 20 70 61 69 72 20  ented as a pair 
1eed0 6f 66 20 6f 70 63 6f 64 65 73 20 4f 50 5f 53 65  of opcodes OP_Se
1eee0 65 6b 47 45 2f 4f 50 5f 49 64 78 47 54 0a 2a 2a  ekGE/OP_IdxGT.**
1eef0 20 20 20 20 20 20 20 6f 66 20 4f 50 5f 53 65 65         of OP_See
1ef00 6b 4c 45 2f 4f 50 5f 49 64 78 47 54 29 0a 2a 2a  kLE/OP_IdxGT).**
1ef10 20 3c 2f 75 6c 3e 0a 2a 2a 0a 2a 2a 20 53 65 65   </ul>.**.** See
1ef20 20 61 6c 73 6f 3a 20 4f 50 5f 4f 70 65 6e 52 65   also: OP_OpenRe
1ef30 61 64 2c 20 4f 50 5f 4f 70 65 6e 57 72 69 74 65  ad, OP_OpenWrite
1ef40 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f  .*/./* Opcode: O
1ef50 70 65 6e 57 72 69 74 65 20 50 31 20 50 32 20 50  penWrite P1 P2 P
1ef60 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70  3 P4 P5.** Synop
1ef70 73 69 73 3a 20 72 6f 6f 74 3d 50 32 20 69 44 62  sis: root=P2 iDb
1ef80 3d 50 33 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e 20 61  =P3.**.** Open a
1ef90 20 72 65 61 64 2f 77 72 69 74 65 20 63 75 72 73   read/write curs
1efa0 6f 72 20 6e 61 6d 65 64 20 50 31 20 6f 6e 20 74  or named P1 on t
1efb0 68 65 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65  he table or inde
1efc0 78 20 77 68 6f 73 65 20 72 6f 6f 74 0a 2a 2a 20  x whose root.** 
1efd0 70 61 67 65 20 69 73 20 50 32 20 28 6f 72 20 77  page is P2 (or w
1efe0 68 6f 73 65 20 72 6f 6f 74 20 70 61 67 65 20 69  hose root page i
1eff0 73 20 68 65 6c 64 20 69 6e 20 72 65 67 69 73 74  s held in regist
1f000 65 72 20 50 32 20 69 66 20 74 68 65 0a 2a 2a 20  er P2 if the.** 
1f010 4f 50 46 4c 41 47 5f 50 32 49 53 52 45 47 20 62  OPFLAG_P2ISREG b
1f020 69 74 20 69 73 20 73 65 74 20 69 6e 20 50 35 20  it is set in P5 
1f030 2d 20 73 65 65 20 62 65 6c 6f 77 29 2e 0a 2a 2a  - see below)..**
1f040 0a 2a 2a 20 54 68 65 20 50 34 20 76 61 6c 75 65  .** The P4 value
1f050 20 6d 61 79 20 62 65 20 65 69 74 68 65 72 20 61   may be either a
1f060 6e 20 69 6e 74 65 67 65 72 20 28 50 34 5f 49 4e  n integer (P4_IN
1f070 54 33 32 29 20 6f 72 20 61 20 70 6f 69 6e 74 65  T32) or a pointe
1f080 72 20 74 6f 0a 2a 2a 20 61 20 4b 65 79 49 6e 66  r to.** a KeyInf
1f090 6f 20 73 74 72 75 63 74 75 72 65 20 28 50 34 5f  o structure (P4_
1f0a0 4b 45 59 49 4e 46 4f 29 2e 20 49 66 20 69 74 20  KEYINFO). If it 
1f0b0 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20  is a pointer to 
1f0c0 61 20 4b 65 79 49 6e 66 6f 20 0a 2a 2a 20 6f 62  a KeyInfo .** ob
1f0d0 6a 65 63 74 2c 20 74 68 65 6e 20 74 61 62 6c 65  ject, then table
1f0e0 20 62 65 69 6e 67 20 6f 70 65 6e 65 64 20 6d 75   being opened mu
1f0f0 73 74 20 62 65 20 61 6e 20 5b 69 6e 64 65 78 20  st be an [index 
1f100 62 2d 74 72 65 65 5d 20 77 68 65 72 65 20 74 68  b-tree] where th
1f110 65 0a 2a 2a 20 4b 65 79 49 6e 66 6f 20 6f 62 6a  e.** KeyInfo obj
1f120 65 63 74 20 64 65 66 69 6e 65 73 20 74 68 65 20  ect defines the 
1f130 63 6f 6e 74 65 6e 74 20 61 6e 64 20 63 6f 6c 6c  content and coll
1f140 61 74 69 6e 67 20 0a 2a 2a 20 73 65 71 75 65 6e  ating .** sequen
1f150 63 65 20 6f 66 20 74 68 61 74 20 69 6e 64 65 78  ce of that index
1f160 20 62 2d 74 72 65 65 2e 20 4f 74 68 65 72 77 69   b-tree. Otherwi
1f170 73 65 2c 20 69 66 20 50 34 20 69 73 20 61 6e 20  se, if P4 is an 
1f180 69 6e 74 65 67 65 72 20 0a 2a 2a 20 76 61 6c 75  integer .** valu
1f190 65 2c 20 74 68 65 6e 20 74 68 65 20 74 61 62 6c  e, then the tabl
1f1a0 65 20 62 65 69 6e 67 20 6f 70 65 6e 65 64 20 6d  e being opened m
1f1b0 75 73 74 20 62 65 20 61 20 5b 74 61 62 6c 65 20  ust be a [table 
1f1c0 62 2d 74 72 65 65 5d 20 77 69 74 68 20 61 0a 2a  b-tree] with a.*
1f1d0 2a 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75  * number of colu
1f1e0 6d 6e 73 20 6e 6f 20 6c 65 73 73 20 74 68 61 6e  mns no less than
1f1f0 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 50 34   the value of P4
1f200 2e 0a 2a 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20  ..**.** Allowed 
1f210 50 35 20 62 69 74 73 3a 0a 2a 2a 20 3c 75 6c 3e  P5 bits:.** <ul>
1f220 0a 2a 2a 20 3c 6c 69 3e 20 20 3c 62 3e 30 78 30  .** <li>  <b>0x0
1f230 32 20 4f 50 46 4c 41 47 5f 53 45 45 4b 45 51 3c  2 OPFLAG_SEEKEQ<
1f240 2f 62 3e 3a 20 54 68 69 73 20 63 75 72 73 6f 72  /b>: This cursor
1f250 20 77 69 6c 6c 20 6f 6e 6c 79 20 62 65 20 75 73   will only be us
1f260 65 64 20 66 6f 72 0a 2a 2a 20 20 20 20 20 20 20  ed for.**       
1f270 65 71 75 61 6c 69 74 79 20 6c 6f 6f 6b 75 70 73  equality lookups
1f280 20 28 69 6d 70 6c 65 6d 65 6e 74 65 64 20 61 73   (implemented as
1f290 20 61 20 70 61 69 72 20 6f 66 20 6f 70 63 6f 64   a pair of opcod
1f2a0 65 73 20 4f 50 5f 53 65 65 6b 47 45 2f 4f 50 5f  es OP_SeekGE/OP_
1f2b0 49 64 78 47 54 0a 2a 2a 20 20 20 20 20 20 20 6f  IdxGT.**       o
1f2c0 66 20 4f 50 5f 53 65 65 6b 4c 45 2f 4f 50 5f 49  f OP_SeekLE/OP_I
1f2d0 64 78 47 54 29 0a 2a 2a 20 3c 6c 69 3e 20 20 3c  dxGT).** <li>  <
1f2e0 62 3e 30 78 30 38 20 4f 50 46 4c 41 47 5f 46 4f  b>0x08 OPFLAG_FO
1f2f0 52 44 45 4c 45 54 45 3c 2f 62 3e 3a 20 54 68 69  RDELETE</b>: Thi
1f300 73 20 63 75 72 73 6f 72 20 69 73 20 75 73 65 64  s cursor is used
1f310 20 6f 6e 6c 79 20 74 6f 20 73 65 65 6b 0a 2a 2a   only to seek.**
1f320 20 20 20 20 20 20 20 61 6e 64 20 73 75 62 73 65         and subse
1f330 71 75 65 6e 74 6c 79 20 64 65 6c 65 74 65 20 65  quently delete e
1f340 6e 74 72 69 65 73 20 69 6e 20 61 6e 20 69 6e 64  ntries in an ind
1f350 65 78 20 62 74 72 65 65 2e 20 20 54 68 69 73 20  ex btree.  This 
1f360 69 73 20 61 0a 2a 2a 20 20 20 20 20 20 20 68 69  is a.**       hi
1f370 6e 74 20 74 6f 20 74 68 65 20 73 74 6f 72 61 67  nt to the storag
1f380 65 20 65 6e 67 69 6e 65 20 74 68 61 74 20 74 68  e engine that th
1f390 65 20 73 74 6f 72 61 67 65 20 65 6e 67 69 6e 65  e storage engine
1f3a0 20 69 73 20 61 6c 6c 6f 77 65 64 20 74 6f 0a 2a   is allowed to.*
1f3b0 2a 20 20 20 20 20 20 20 69 67 6e 6f 72 65 2e 20  *       ignore. 
1f3c0 20 54 68 65 20 68 69 6e 74 20 69 73 20 6e 6f 74   The hint is not
1f3d0 20 75 73 65 64 20 62 79 20 74 68 65 20 6f 66 66   used by the off
1f3e0 69 63 69 61 6c 20 53 51 4c 69 74 65 20 62 2a 74  icial SQLite b*t
1f3f0 72 65 65 20 73 74 6f 72 61 67 65 0a 2a 2a 20 20  ree storage.**  
1f400 20 20 20 20 20 65 6e 67 69 6e 65 2c 20 62 75 74       engine, but
1f410 20 69 73 20 75 73 65 64 20 62 79 20 43 4f 4d 44   is used by COMD
1f420 42 32 2e 0a 2a 2a 20 3c 6c 69 3e 20 20 3c 62 3e  B2..** <li>  <b>
1f430 30 78 31 30 20 4f 50 46 4c 41 47 5f 50 32 49 53  0x10 OPFLAG_P2IS
1f440 52 45 47 3c 2f 62 3e 3a 20 55 73 65 20 74 68 65  REG</b>: Use the
1f450 20 63 6f 6e 74 65 6e 74 20 6f 66 20 72 65 67 69   content of regi
1f460 73 74 65 72 20 50 32 0a 2a 2a 20 20 20 20 20 20  ster P2.**      
1f470 20 61 73 20 74 68 65 20 72 6f 6f 74 20 70 61 67   as the root pag
1f480 65 2c 20 6e 6f 74 20 74 68 65 20 76 61 6c 75 65  e, not the value
1f490 20 6f 66 20 50 32 20 69 74 73 65 6c 66 2e 0a 2a   of P2 itself..*
1f4a0 2a 20 3c 2f 75 6c 3e 0a 2a 2a 0a 2a 2a 20 54 68  * </ul>.**.** Th
1f4b0 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 77  is instruction w
1f4c0 6f 72 6b 73 20 6c 69 6b 65 20 4f 70 65 6e 52 65  orks like OpenRe
1f4d0 61 64 20 65 78 63 65 70 74 20 74 68 61 74 20 69  ad except that i
1f4e0 74 20 6f 70 65 6e 73 20 74 68 65 20 63 75 72 73  t opens the curs
1f4f0 6f 72 0a 2a 2a 20 69 6e 20 72 65 61 64 2f 77 72  or.** in read/wr
1f500 69 74 65 20 6d 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20  ite mode..**.** 
1f510 53 65 65 20 61 6c 73 6f 3a 20 4f 50 5f 4f 70 65  See also: OP_Ope
1f520 6e 52 65 61 64 2c 20 4f 50 5f 52 65 6f 70 65 6e  nRead, OP_Reopen
1f530 49 64 78 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52  Idx.*/.case OP_R
1f540 65 6f 70 65 6e 49 64 78 3a 20 7b 0a 20 20 69 6e  eopenIdx: {.  in
1f550 74 20 6e 46 69 65 6c 64 3b 0a 20 20 4b 65 79 49  t nField;.  KeyI
1f560 6e 66 6f 20 2a 70 4b 65 79 49 6e 66 6f 3b 0a 20  nfo *pKeyInfo;. 
1f570 20 69 6e 74 20 70 32 3b 0a 20 20 69 6e 74 20 69   int p2;.  int i
1f580 44 62 3b 0a 20 20 69 6e 74 20 77 72 46 6c 61 67  Db;.  int wrFlag
1f590 3b 0a 20 20 42 74 72 65 65 20 2a 70 58 3b 0a 20  ;.  Btree *pX;. 
1f5a0 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 75   VdbeCursor *pCu
1f5b0 72 3b 0a 20 20 44 62 20 2a 70 44 62 3b 0a 0a 20  r;.  Db *pDb;.. 
1f5c0 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 35   assert( pOp->p5
1f5d0 3d 3d 30 20 7c 7c 20 70 4f 70 2d 3e 70 35 3d 3d  ==0 || pOp->p5==
1f5e0 4f 50 46 4c 41 47 5f 53 45 45 4b 45 51 20 29 3b  OPFLAG_SEEKEQ );
1f5f0 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
1f600 70 34 74 79 70 65 3d 3d 50 34 5f 4b 45 59 49 4e  p4type==P4_KEYIN
1f610 46 4f 20 29 3b 0a 20 20 70 43 75 72 20 3d 20 70  FO );.  pCur = p
1f620 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d  ->apCsr[pOp->p1]
1f630 3b 0a 20 20 69 66 28 20 70 43 75 72 20 26 26 20  ;.  if( pCur && 
1f640 70 43 75 72 2d 3e 70 67 6e 6f 52 6f 6f 74 3d 3d  pCur->pgnoRoot==
1f650 28 75 33 32 29 70 4f 70 2d 3e 70 32 20 29 7b 0a  (u32)pOp->p2 ){.
1f660 20 20 20 20 61 73 73 65 72 74 28 20 70 43 75 72      assert( pCur
1f670 2d 3e 69 44 62 3d 3d 70 4f 70 2d 3e 70 33 20 29  ->iDb==pOp->p3 )
1f680 3b 20 20 20 20 20 20 2f 2a 20 47 75 61 72 61 6e  ;      /* Guaran
1f690 74 65 65 64 20 62 79 20 74 68 65 20 63 6f 64 65  teed by the code
1f6a0 20 67 65 6e 65 72 61 74 6f 72 20 2a 2f 0a 20 20   generator */.  
1f6b0 20 20 67 6f 74 6f 20 6f 70 65 6e 5f 63 75 72 73    goto open_curs
1f6c0 6f 72 5f 73 65 74 5f 68 69 6e 74 73 3b 0a 20 20  or_set_hints;.  
1f6d0 7d 0a 20 20 2f 2a 20 49 66 20 74 68 65 20 63 75  }.  /* If the cu
1f6e0 72 73 6f 72 20 69 73 20 6e 6f 74 20 63 75 72 72  rsor is not curr
1f6f0 65 6e 74 6c 79 20 6f 70 65 6e 20 6f 72 20 69 73  ently open or is
1f700 20 6f 70 65 6e 20 6f 6e 20 61 20 64 69 66 66 65   open on a diffe
1f710 72 65 6e 74 0a 20 20 2a 2a 20 69 6e 64 65 78 2c  rent.  ** index,
1f720 20 74 68 65 6e 20 66 61 6c 6c 20 74 68 72 6f 75   then fall throu
1f730 67 68 20 69 6e 74 6f 20 4f 50 5f 4f 70 65 6e 52  gh into OP_OpenR
1f740 65 61 64 20 74 6f 20 66 6f 72 63 65 20 61 20 72  ead to force a r
1f750 65 6f 70 65 6e 20 2a 2f 0a 63 61 73 65 20 4f 50  eopen */.case OP
1f760 5f 4f 70 65 6e 52 65 61 64 3a 0a 63 61 73 65 20  _OpenRead:.case 
1f770 4f 50 5f 4f 70 65 6e 57 72 69 74 65 3a 0a 0a 20  OP_OpenWrite:.. 
1f780 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70   assert( pOp->op
1f790 63 6f 64 65 3d 3d 4f 50 5f 4f 70 65 6e 57 72 69  code==OP_OpenWri
1f7a0 74 65 20 7c 7c 20 70 4f 70 2d 3e 70 35 3d 3d 30  te || pOp->p5==0
1f7b0 20 7c 7c 20 70 4f 70 2d 3e 70 35 3d 3d 4f 50 46   || pOp->p5==OPF
1f7c0 4c 41 47 5f 53 45 45 4b 45 51 20 29 3b 0a 20 20  LAG_SEEKEQ );.  
1f7d0 61 73 73 65 72 74 28 20 70 2d 3e 62 49 73 52 65  assert( p->bIsRe
1f7e0 61 64 65 72 20 29 3b 0a 20 20 61 73 73 65 72 74  ader );.  assert
1f7f0 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f  ( pOp->opcode==O
1f800 50 5f 4f 70 65 6e 52 65 61 64 20 7c 7c 20 70 4f  P_OpenRead || pO
1f810 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 52 65  p->opcode==OP_Re
1f820 6f 70 65 6e 49 64 78 0a 20 20 20 20 20 20 20 20  openIdx.        
1f830 20 20 7c 7c 20 70 2d 3e 72 65 61 64 4f 6e 6c 79    || p->readOnly
1f840 3d 3d 30 20 29 3b 0a 0a 20 20 69 66 28 20 70 2d  ==0 );..  if( p-
1f850 3e 65 78 70 69 72 65 64 3d 3d 31 20 29 7b 0a 20  >expired==1 ){. 
1f860 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 41     rc = SQLITE_A
1f870 42 4f 52 54 5f 52 4f 4c 4c 42 41 43 4b 3b 0a 20  BORT_ROLLBACK;. 
1f880 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75     goto abort_du
1f890 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 7d 0a  e_to_error;.  }.
1f8a0 0a 20 20 6e 46 69 65 6c 64 20 3d 20 30 3b 0a 20  .  nField = 0;. 
1f8b0 20 70 4b 65 79 49 6e 66 6f 20 3d 20 30 3b 0a 20   pKeyInfo = 0;. 
1f8c0 20 70 32 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20   p2 = pOp->p2;. 
1f8d0 20 69 44 62 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a   iDb = pOp->p3;.
1f8e0 20 20 61 73 73 65 72 74 28 20 69 44 62 3e 3d 30    assert( iDb>=0
1f8f0 20 26 26 20 69 44 62 3c 64 62 2d 3e 6e 44 62 20   && iDb<db->nDb 
1f900 29 3b 0a 20 20 61 73 73 65 72 74 28 20 44 62 4d  );.  assert( DbM
1f910 61 73 6b 54 65 73 74 28 70 2d 3e 62 74 72 65 65  askTest(p->btree
1f920 4d 61 73 6b 2c 20 69 44 62 29 20 29 3b 0a 20 20  Mask, iDb) );.  
1f930 70 44 62 20 3d 20 26 64 62 2d 3e 61 44 62 5b 69  pDb = &db->aDb[i
1f940 44 62 5d 3b 0a 20 20 70 58 20 3d 20 70 44 62 2d  Db];.  pX = pDb-
1f950 3e 70 42 74 3b 0a 20 20 61 73 73 65 72 74 28 20  >pBt;.  assert( 
1f960 70 58 21 3d 30 20 29 3b 0a 20 20 69 66 28 20 70  pX!=0 );.  if( p
1f970 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4f  Op->opcode==OP_O
1f980 70 65 6e 57 72 69 74 65 20 29 7b 0a 20 20 20 20  penWrite ){.    
1f990 61 73 73 65 72 74 28 20 4f 50 46 4c 41 47 5f 46  assert( OPFLAG_F
1f9a0 4f 52 44 45 4c 45 54 45 3d 3d 42 54 52 45 45 5f  ORDELETE==BTREE_
1f9b0 46 4f 52 44 45 4c 45 54 45 20 29 3b 0a 20 20 20  FORDELETE );.   
1f9c0 20 77 72 46 6c 61 67 20 3d 20 42 54 52 45 45 5f   wrFlag = BTREE_
1f9d0 57 52 43 53 52 20 7c 20 28 70 4f 70 2d 3e 70 35  WRCSR | (pOp->p5
1f9e0 20 26 20 4f 50 46 4c 41 47 5f 46 4f 52 44 45 4c   & OPFLAG_FORDEL
1f9f0 45 54 45 29 3b 0a 20 20 20 20 61 73 73 65 72 74  ETE);.    assert
1fa00 28 20 73 71 6c 69 74 65 33 53 63 68 65 6d 61 4d  ( sqlite3SchemaM
1fa10 75 74 65 78 48 65 6c 64 28 64 62 2c 20 69 44 62  utexHeld(db, iDb
1fa20 2c 20 30 29 20 29 3b 0a 20 20 20 20 69 66 28 20  , 0) );.    if( 
1fa30 70 44 62 2d 3e 70 53 63 68 65 6d 61 2d 3e 66 69  pDb->pSchema->fi
1fa40 6c 65 5f 66 6f 72 6d 61 74 20 3c 20 70 2d 3e 6d  le_format < p->m
1fa50 69 6e 57 72 69 74 65 46 69 6c 65 46 6f 72 6d 61  inWriteFileForma
1fa60 74 20 29 7b 0a 20 20 20 20 20 20 70 2d 3e 6d 69  t ){.      p->mi
1fa70 6e 57 72 69 74 65 46 69 6c 65 46 6f 72 6d 61 74  nWriteFileFormat
1fa80 20 3d 20 70 44 62 2d 3e 70 53 63 68 65 6d 61 2d   = pDb->pSchema-
1fa90 3e 66 69 6c 65 5f 66 6f 72 6d 61 74 3b 0a 20 20  >file_format;.  
1faa0 20 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20    }.  }else{.   
1fab0 20 77 72 46 6c 61 67 20 3d 20 30 3b 0a 20 20 7d   wrFlag = 0;.  }
1fac0 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 26  .  if( pOp->p5 &
1fad0 20 4f 50 46 4c 41 47 5f 50 32 49 53 52 45 47 20   OPFLAG_P2ISREG 
1fae0 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  ){.    assert( p
1faf0 32 3e 30 20 29 3b 0a 20 20 20 20 61 73 73 65 72  2>0 );.    asser
1fb00 74 28 20 70 32 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b  t( p2<=(p->nMem+
1fb10 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29 20  1 - p->nCursor) 
1fb20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  );.    assert( p
1fb30 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4f  Op->opcode==OP_O
1fb40 70 65 6e 57 72 69 74 65 20 29 3b 0a 20 20 20 20  penWrite );.    
1fb50 70 49 6e 32 20 3d 20 26 61 4d 65 6d 5b 70 32 5d  pIn2 = &aMem[p2]
1fb60 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 6d 65  ;.    assert( me
1fb70 6d 49 73 56 61 6c 69 64 28 70 49 6e 32 29 20 29  mIsValid(pIn2) )
1fb80 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 28 70  ;.    assert( (p
1fb90 49 6e 32 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  In2->flags & MEM
1fba0 5f 49 6e 74 29 21 3d 30 20 29 3b 0a 20 20 20 20  _Int)!=0 );.    
1fbb0 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 49 6e  sqlite3VdbeMemIn
1fbc0 74 65 67 65 72 69 66 79 28 70 49 6e 32 29 3b 0a  tegerify(pIn2);.
1fbd0 20 20 20 20 70 32 20 3d 20 28 69 6e 74 29 70 49      p2 = (int)pI
1fbe0 6e 32 2d 3e 75 2e 69 3b 0a 20 20 20 20 2f 2a 20  n2->u.i;.    /* 
1fbf0 54 68 65 20 70 32 20 76 61 6c 75 65 20 61 6c 77  The p2 value alw
1fc00 61 79 73 20 63 6f 6d 65 73 20 66 72 6f 6d 20 61  ays comes from a
1fc10 20 70 72 69 6f 72 20 4f 50 5f 43 72 65 61 74 65   prior OP_Create
1fc20 42 74 72 65 65 20 6f 70 63 6f 64 65 20 61 6e 64  Btree opcode and
1fc30 0a 20 20 20 20 2a 2a 20 74 68 61 74 20 6f 70 63  .    ** that opc
1fc40 6f 64 65 20 77 69 6c 6c 20 61 6c 77 61 79 73 20  ode will always 
1fc50 73 65 74 20 74 68 65 20 70 32 20 76 61 6c 75 65  set the p2 value
1fc60 20 74 6f 20 32 20 6f 72 20 6d 6f 72 65 20 6f 72   to 2 or more or
1fc70 20 65 6c 73 65 20 66 61 69 6c 2e 0a 20 20 20 20   else fail..    
1fc80 2a 2a 20 49 66 20 74 68 65 72 65 20 77 65 72 65  ** If there were
1fc90 20 61 20 66 61 69 6c 75 72 65 2c 20 74 68 65 20   a failure, the 
1fca0 70 72 65 70 61 72 65 64 20 73 74 61 74 65 6d 65  prepared stateme
1fcb0 6e 74 20 77 6f 75 6c 64 20 68 61 76 65 20 68 61  nt would have ha
1fcc0 6c 74 65 64 0a 20 20 20 20 2a 2a 20 62 65 66 6f  lted.    ** befo
1fcd0 72 65 20 72 65 61 63 68 69 6e 67 20 74 68 69 73  re reaching this
1fce0 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20 2a 2f   instruction. */
1fcf0 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 32 3e  .    assert( p2>
1fd00 3d 32 20 29 3b 0a 20 20 7d 0a 20 20 69 66 28 20  =2 );.  }.  if( 
1fd10 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f  pOp->p4type==P4_
1fd20 4b 45 59 49 4e 46 4f 20 29 7b 0a 20 20 20 20 70  KEYINFO ){.    p
1fd30 4b 65 79 49 6e 66 6f 20 3d 20 70 4f 70 2d 3e 70  KeyInfo = pOp->p
1fd40 34 2e 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 20 20  4.pKeyInfo;.    
1fd50 61 73 73 65 72 74 28 20 70 4b 65 79 49 6e 66 6f  assert( pKeyInfo
1fd60 2d 3e 65 6e 63 3d 3d 45 4e 43 28 64 62 29 20 29  ->enc==ENC(db) )
1fd70 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4b  ;.    assert( pK
1fd80 65 79 49 6e 66 6f 2d 3e 64 62 3d 3d 64 62 20 29  eyInfo->db==db )
1fd90 3b 0a 20 20 20 20 6e 46 69 65 6c 64 20 3d 20 70  ;.    nField = p
1fda0 4b 65 79 49 6e 66 6f 2d 3e 6e 41 6c 6c 46 69 65  KeyInfo->nAllFie
1fdb0 6c 64 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20  ld;.  }else if( 
1fdc0 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f  pOp->p4type==P4_
1fdd0 49 4e 54 33 32 20 29 7b 0a 20 20 20 20 6e 46 69  INT32 ){.    nFi
1fde0 65 6c 64 20 3d 20 70 4f 70 2d 3e 70 34 2e 69 3b  eld = pOp->p4.i;
1fdf0 0a 20 20 7d 0a 20 20 61 73 73 65 72 74 28 20 70  .  }.  assert( p
1fe00 4f 70 2d 3e 70 31 3e 3d 30 20 29 3b 0a 20 20 61  Op->p1>=0 );.  a
1fe10 73 73 65 72 74 28 20 6e 46 69 65 6c 64 3e 3d 30  ssert( nField>=0
1fe20 20 29 3b 0a 20 20 74 65 73 74 63 61 73 65 28 20   );.  testcase( 
1fe30 6e 46 69 65 6c 64 3d 3d 30 20 29 3b 20 20 2f 2a  nField==0 );  /*
1fe40 20 54 61 62 6c 65 20 77 69 74 68 20 49 4e 54 45   Table with INTE
1fe50 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59 20  GER PRIMARY KEY 
1fe60 61 6e 64 20 6e 6f 74 68 69 6e 67 20 65 6c 73 65  and nothing else
1fe70 20 2a 2f 0a 20 20 70 43 75 72 20 3d 20 61 6c 6c   */.  pCur = all
1fe80 6f 63 61 74 65 43 75 72 73 6f 72 28 70 2c 20 70  ocateCursor(p, p
1fe90 4f 70 2d 3e 70 31 2c 20 6e 46 69 65 6c 64 2c 20  Op->p1, nField, 
1fea0 69 44 62 2c 20 43 55 52 54 59 50 45 5f 42 54 52  iDb, CURTYPE_BTR
1feb0 45 45 29 3b 0a 20 20 69 66 28 20 70 43 75 72 3d  EE);.  if( pCur=
1fec0 3d 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d  =0 ) goto no_mem
1fed0 3b 0a 20 20 70 43 75 72 2d 3e 6e 75 6c 6c 52 6f  ;.  pCur->nullRo
1fee0 77 20 3d 20 31 3b 0a 20 20 70 43 75 72 2d 3e 69  w = 1;.  pCur->i
1fef0 73 4f 72 64 65 72 65 64 20 3d 20 31 3b 0a 20 20  sOrdered = 1;.  
1ff00 70 43 75 72 2d 3e 70 67 6e 6f 52 6f 6f 74 20 3d  pCur->pgnoRoot =
1ff10 20 70 32 3b 0a 23 69 66 64 65 66 20 53 51 4c 49   p2;.#ifdef SQLI
1ff20 54 45 5f 44 45 42 55 47 0a 20 20 70 43 75 72 2d  TE_DEBUG.  pCur-
1ff30 3e 77 72 46 6c 61 67 20 3d 20 77 72 46 6c 61 67  >wrFlag = wrFlag
1ff40 3b 0a 23 65 6e 64 69 66 0a 20 20 72 63 20 3d 20  ;.#endif.  rc = 
1ff50 73 71 6c 69 74 65 33 42 74 72 65 65 43 75 72 73  sqlite3BtreeCurs
1ff60 6f 72 28 70 58 2c 20 70 32 2c 20 77 72 46 6c 61  or(pX, p2, wrFla
1ff70 67 2c 20 70 4b 65 79 49 6e 66 6f 2c 20 70 43 75  g, pKeyInfo, pCu
1ff80 72 2d 3e 75 63 2e 70 43 75 72 73 6f 72 29 3b 0a  r->uc.pCursor);.
1ff90 20 20 70 43 75 72 2d 3e 70 4b 65 79 49 6e 66 6f    pCur->pKeyInfo
1ffa0 20 3d 20 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 2f   = pKeyInfo;.  /
1ffb0 2a 20 53 65 74 20 74 68 65 20 56 64 62 65 43 75  * Set the VdbeCu
1ffc0 72 73 6f 72 2e 69 73 54 61 62 6c 65 20 76 61 72  rsor.isTable var
1ffd0 69 61 62 6c 65 2e 20 50 72 65 76 69 6f 75 73 20  iable. Previous 
1ffe0 76 65 72 73 69 6f 6e 73 20 6f 66 0a 20 20 2a 2a  versions of.  **
1fff0 20 53 51 4c 69 74 65 20 75 73 65 64 20 74 6f 20   SQLite used to 
20000 63 68 65 63 6b 20 69 66 20 74 68 65 20 72 6f 6f  check if the roo
20010 74 2d 70 61 67 65 20 66 6c 61 67 73 20 77 65 72  t-page flags wer
20020 65 20 73 61 6e 65 20 61 74 20 74 68 69 73 20 70  e sane at this p
20030 6f 69 6e 74 0a 20 20 2a 2a 20 61 6e 64 20 72 65  oint.  ** and re
20040 70 6f 72 74 20 64 61 74 61 62 61 73 65 20 63 6f  port database co
20050 72 72 75 70 74 69 6f 6e 20 69 66 20 74 68 65 79  rruption if they
20060 20 77 65 72 65 20 6e 6f 74 2c 20 62 75 74 20 74   were not, but t
20070 68 69 73 20 63 68 65 63 6b 20 68 61 73 0a 20 20  his check has.  
20080 2a 2a 20 73 69 6e 63 65 20 6d 6f 76 65 64 20 69  ** since moved i
20090 6e 74 6f 20 74 68 65 20 62 74 72 65 65 20 6c 61  nto the btree la
200a0 79 65 72 2e 20 20 2a 2f 20 20 0a 20 20 70 43 75  yer.  */  .  pCu
200b0 72 2d 3e 69 73 54 61 62 6c 65 20 3d 20 70 4f 70  r->isTable = pOp
200c0 2d 3e 70 34 74 79 70 65 21 3d 50 34 5f 4b 45 59  ->p4type!=P4_KEY
200d0 49 4e 46 4f 3b 0a 0a 6f 70 65 6e 5f 63 75 72 73  INFO;..open_curs
200e0 6f 72 5f 73 65 74 5f 68 69 6e 74 73 3a 0a 20 20  or_set_hints:.  
200f0 61 73 73 65 72 74 28 20 4f 50 46 4c 41 47 5f 42  assert( OPFLAG_B
20100 55 4c 4b 43 53 52 3d 3d 42 54 52 45 45 5f 42 55  ULKCSR==BTREE_BU
20110 4c 4b 4c 4f 41 44 20 29 3b 0a 20 20 61 73 73 65  LKLOAD );.  asse
20120 72 74 28 20 4f 50 46 4c 41 47 5f 53 45 45 4b 45  rt( OPFLAG_SEEKE
20130 51 3d 3d 42 54 52 45 45 5f 53 45 45 4b 5f 45 51  Q==BTREE_SEEK_EQ
20140 20 29 3b 0a 20 20 74 65 73 74 63 61 73 65 28 20   );.  testcase( 
20150 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47  pOp->p5 & OPFLAG
20160 5f 42 55 4c 4b 43 53 52 20 29 3b 0a 23 69 66 64  _BULKCSR );.#ifd
20170 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ef SQLITE_ENABLE
20180 5f 43 55 52 53 4f 52 5f 48 49 4e 54 53 0a 20 20  _CURSOR_HINTS.  
20190 74 65 73 74 63 61 73 65 28 20 70 4f 70 2d 3e 70  testcase( pOp->p
201a0 32 20 26 20 4f 50 46 4c 41 47 5f 53 45 45 4b 45  2 & OPFLAG_SEEKE
201b0 51 20 29 3b 0a 23 65 6e 64 69 66 0a 20 20 73 71  Q );.#endif.  sq
201c0 6c 69 74 65 33 42 74 72 65 65 43 75 72 73 6f 72  lite3BtreeCursor
201d0 48 69 6e 74 46 6c 61 67 73 28 70 43 75 72 2d 3e  HintFlags(pCur->
201e0 75 63 2e 70 43 75 72 73 6f 72 2c 0a 20 20 20 20  uc.pCursor,.    
201f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20200 20 20 20 20 20 20 20 20 20 20 20 28 70 4f 70 2d             (pOp-
20210 3e 70 35 20 26 20 28 4f 50 46 4c 41 47 5f 42 55  >p5 & (OPFLAG_BU
20220 4c 4b 43 53 52 7c 4f 50 46 4c 41 47 5f 53 45 45  LKCSR|OPFLAG_SEE
20230 4b 45 51 29 29 29 3b 0a 20 20 69 66 28 20 72 63  KEQ)));.  if( rc
20240 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75   ) goto abort_du
20250 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 62 72  e_to_error;.  br
20260 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
20270 65 3a 20 4f 70 65 6e 44 75 70 20 50 31 20 50 32  e: OpenDup P1 P2
20280 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4f 70 65   * * *.**.** Ope
20290 6e 20 61 20 6e 65 77 20 63 75 72 73 6f 72 20 50  n a new cursor P
202a0 31 20 74 68 61 74 20 70 6f 69 6e 74 73 20 74 6f  1 that points to
202b0 20 74 68 65 20 73 61 6d 65 20 65 70 68 65 6d 65   the same epheme
202c0 72 61 6c 20 74 61 62 6c 65 20 61 73 0a 2a 2a 20  ral table as.** 
202d0 63 75 72 73 6f 72 20 50 32 2e 20 20 54 68 65 20  cursor P2.  The 
202e0 50 32 20 63 75 72 73 6f 72 20 6d 75 73 74 20 68  P2 cursor must h
202f0 61 76 65 20 62 65 65 6e 20 6f 70 65 6e 65 64 20  ave been opened 
20300 62 79 20 61 20 70 72 69 6f 72 20 4f 50 5f 4f 70  by a prior OP_Op
20310 65 6e 45 70 68 65 6d 65 72 61 6c 0a 2a 2a 20 6f  enEphemeral.** o
20320 70 63 6f 64 65 2e 20 20 4f 6e 6c 79 20 65 70 68  pcode.  Only eph
20330 65 6d 65 72 61 6c 20 63 75 72 73 6f 72 73 20 6d  emeral cursors m
20340 61 79 20 62 65 20 64 75 70 6c 69 63 61 74 65 64  ay be duplicated
20350 2e 0a 2a 2a 0a 2a 2a 20 44 75 70 6c 69 63 61 74  ..**.** Duplicat
20360 65 20 65 70 68 65 6d 65 72 61 6c 20 63 75 72 73  e ephemeral curs
20370 6f 72 73 20 61 72 65 20 75 73 65 64 20 66 6f 72  ors are used for
20380 20 73 65 6c 66 2d 6a 6f 69 6e 73 20 6f 66 20 6d   self-joins of m
20390 61 74 65 72 69 61 6c 69 7a 65 64 20 76 69 65 77  aterialized view
203a0 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4f 70  s..*/.case OP_Op
203b0 65 6e 44 75 70 3a 20 7b 0a 20 20 56 64 62 65 43  enDup: {.  VdbeC
203c0 75 72 73 6f 72 20 2a 70 4f 72 69 67 3b 20 20 20  ursor *pOrig;   
203d0 20 2f 2a 20 54 68 65 20 6f 72 69 67 69 6e 61 6c   /* The original
203e0 20 63 75 72 73 6f 72 20 74 6f 20 62 65 20 64 75   cursor to be du
203f0 70 6c 69 63 61 74 65 64 20 2a 2f 0a 20 20 56 64  plicated */.  Vd
20400 62 65 43 75 72 73 6f 72 20 2a 70 43 78 3b 20 20  beCursor *pCx;  
20410 20 20 20 20 2f 2a 20 54 68 65 20 6e 65 77 20 63      /* The new c
20420 75 72 73 6f 72 20 2a 2f 0a 0a 20 20 70 4f 72 69  ursor */..  pOri
20430 67 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70  g = p->apCsr[pOp
20440 2d 3e 70 32 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p2];.  assert(
20450 20 70 4f 72 69 67 2d 3e 70 42 74 78 21 3d 30 20   pOrig->pBtx!=0 
20460 29 3b 20 20 2f 2a 20 4f 6e 6c 79 20 65 70 68 65  );  /* Only ephe
20470 6d 65 72 61 6c 20 63 75 72 73 6f 72 73 20 63 61  meral cursors ca
20480 6e 20 62 65 20 64 75 70 6c 69 63 61 74 65 64 20  n be duplicated 
20490 2a 2f 0a 0a 20 20 70 43 78 20 3d 20 61 6c 6c 6f  */..  pCx = allo
204a0 63 61 74 65 43 75 72 73 6f 72 28 70 2c 20 70 4f  cateCursor(p, pO
204b0 70 2d 3e 70 31 2c 20 70 4f 72 69 67 2d 3e 6e 46  p->p1, pOrig->nF
204c0 69 65 6c 64 2c 20 2d 31 2c 20 43 55 52 54 59 50  ield, -1, CURTYP
204d0 45 5f 42 54 52 45 45 29 3b 0a 20 20 69 66 28 20  E_BTREE);.  if( 
204e0 70 43 78 3d 3d 30 20 29 20 67 6f 74 6f 20 6e 6f  pCx==0 ) goto no
204f0 5f 6d 65 6d 3b 0a 20 20 70 43 78 2d 3e 6e 75 6c  _mem;.  pCx->nul
20500 6c 52 6f 77 20 3d 20 31 3b 0a 20 20 70 43 78 2d  lRow = 1;.  pCx-
20510 3e 69 73 45 70 68 65 6d 65 72 61 6c 20 3d 20 31  >isEphemeral = 1
20520 3b 0a 20 20 70 43 78 2d 3e 70 4b 65 79 49 6e 66  ;.  pCx->pKeyInf
20530 6f 20 3d 20 70 4f 72 69 67 2d 3e 70 4b 65 79 49  o = pOrig->pKeyI
20540 6e 66 6f 3b 0a 20 20 70 43 78 2d 3e 69 73 54 61  nfo;.  pCx->isTa
20550 62 6c 65 20 3d 20 70 4f 72 69 67 2d 3e 69 73 54  ble = pOrig->isT
20560 61 62 6c 65 3b 0a 20 20 70 43 78 2d 3e 70 67 6e  able;.  pCx->pgn
20570 6f 52 6f 6f 74 20 3d 20 70 4f 72 69 67 2d 3e 70  oRoot = pOrig->p
20580 67 6e 6f 52 6f 6f 74 3b 0a 20 20 70 43 78 2d 3e  gnoRoot;.  pCx->
20590 69 73 4f 72 64 65 72 65 64 20 3d 20 70 4f 72 69  isOrdered = pOri
205a0 67 2d 3e 69 73 4f 72 64 65 72 65 64 3b 0a 20 20  g->isOrdered;.  
205b0 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
205c0 65 43 75 72 73 6f 72 28 70 4f 72 69 67 2d 3e 70  eCursor(pOrig->p
205d0 42 74 78 2c 20 70 43 78 2d 3e 70 67 6e 6f 52 6f  Btx, pCx->pgnoRo
205e0 6f 74 2c 20 42 54 52 45 45 5f 57 52 43 53 52 2c  ot, BTREE_WRCSR,
205f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
20600 20 20 20 20 20 20 20 20 20 20 20 70 43 78 2d 3e             pCx->
20610 70 4b 65 79 49 6e 66 6f 2c 20 70 43 78 2d 3e 75  pKeyInfo, pCx->u
20620 63 2e 70 43 75 72 73 6f 72 29 3b 0a 20 20 2f 2a  c.pCursor);.  /*
20630 20 54 68 65 20 73 71 6c 69 74 65 33 42 74 72 65   The sqlite3Btre
20640 65 43 75 72 73 6f 72 28 29 20 72 6f 75 74 69 6e  eCursor() routin
20650 65 20 63 61 6e 20 6f 6e 6c 79 20 66 61 69 6c 20  e can only fail 
20660 66 6f 72 20 74 68 65 20 66 69 72 73 74 20 63 75  for the first cu
20670 72 73 6f 72 0a 20 20 2a 2a 20 6f 70 65 6e 65 64  rsor.  ** opened
20680 20 66 6f 72 20 61 20 64 61 74 61 62 61 73 65 2e   for a database.
20690 20 20 53 69 6e 63 65 20 74 68 65 72 65 20 69 73    Since there is
206a0 20 61 6c 72 65 61 64 79 20 61 6e 20 6f 70 65 6e   already an open
206b0 20 63 75 72 73 6f 72 20 77 68 65 6e 20 74 68 69   cursor when thi
206c0 73 0a 20 20 2a 2a 20 6f 70 63 6f 64 65 20 69 73  s.  ** opcode is
206d0 20 72 75 6e 2c 20 74 68 65 20 73 71 6c 69 74 65   run, the sqlite
206e0 33 42 74 72 65 65 43 75 72 73 6f 72 28 29 20 63  3BtreeCursor() c
206f0 61 6e 6e 6f 74 20 66 61 69 6c 20 2a 2f 0a 20 20  annot fail */.  
20700 61 73 73 65 72 74 28 20 72 63 3d 3d 53 51 4c 49  assert( rc==SQLI
20710 54 45 5f 4f 4b 20 29 3b 0a 20 20 62 72 65 61 6b  TE_OK );.  break
20720 3b 0a 7d 0a 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  ;.}.../* Opcode:
20730 20 4f 70 65 6e 45 70 68 65 6d 65 72 61 6c 20 50   OpenEphemeral P
20740 31 20 50 32 20 2a 20 50 34 20 50 35 0a 2a 2a 20  1 P2 * P4 P5.** 
20750 53 79 6e 6f 70 73 69 73 3a 20 6e 43 6f 6c 75 6d  Synopsis: nColum
20760 6e 3d 50 32 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e 20  n=P2.**.** Open 
20770 61 20 6e 65 77 20 63 75 72 73 6f 72 20 50 31 20  a new cursor P1 
20780 74 6f 20 61 20 74 72 61 6e 73 69 65 6e 74 20 74  to a transient t
20790 61 62 6c 65 2e 0a 2a 2a 20 54 68 65 20 63 75 72  able..** The cur
207a0 73 6f 72 20 69 73 20 61 6c 77 61 79 73 20 6f 70  sor is always op
207b0 65 6e 65 64 20 72 65 61 64 2f 77 72 69 74 65 20  ened read/write 
207c0 65 76 65 6e 20 69 66 20 0a 2a 2a 20 74 68 65 20  even if .** the 
207d0 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 69 73  main database is
207e0 20 72 65 61 64 2d 6f 6e 6c 79 2e 20 20 54 68 65   read-only.  The
207f0 20 65 70 68 65 6d 65 72 61 6c 0a 2a 2a 20 74 61   ephemeral.** ta
20800 62 6c 65 20 69 73 20 64 65 6c 65 74 65 64 20 61  ble is deleted a
20810 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 77 68 65  utomatically whe
20820 6e 20 74 68 65 20 63 75 72 73 6f 72 20 69 73 20  n the cursor is 
20830 63 6c 6f 73 65 64 2e 0a 2a 2a 0a 2a 2a 20 49 66  closed..**.** If
20840 20 74 68 65 20 63 75 72 73 6f 72 20 50 31 20 69   the cursor P1 i
20850 73 20 61 6c 72 65 61 64 79 20 6f 70 65 6e 65 64  s already opened
20860 20 6f 6e 20 61 6e 20 65 70 68 65 6d 65 72 61 6c   on an ephemeral
20870 20 74 61 62 6c 65 2c 20 74 68 65 20 74 61 62 6c   table, the tabl
20880 65 0a 2a 2a 20 69 73 20 63 6c 65 61 72 65 64 20  e.** is cleared 
20890 28 61 6c 6c 20 63 6f 6e 74 65 6e 74 20 69 73 20  (all content is 
208a0 65 72 61 73 65 64 29 2e 0a 2a 2a 0a 2a 2a 20 50  erased)..**.** P
208b0 32 20 69 73 20 74 68 65 20 6e 75 6d 62 65 72 20  2 is the number 
208c0 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68  of columns in th
208d0 65 20 65 70 68 65 6d 65 72 61 6c 20 74 61 62 6c  e ephemeral tabl
208e0 65 2e 0a 2a 2a 20 54 68 65 20 63 75 72 73 6f 72  e..** The cursor
208f0 20 70 6f 69 6e 74 73 20 74 6f 20 61 20 42 54 72   points to a BTr
20900 65 65 20 74 61 62 6c 65 20 69 66 20 50 34 3d 3d  ee table if P4==
20910 30 20 61 6e 64 20 74 6f 20 61 20 42 54 72 65 65  0 and to a BTree
20920 20 69 6e 64 65 78 0a 2a 2a 20 69 66 20 50 34 20   index.** if P4 
20930 69 73 20 6e 6f 74 20 30 2e 20 20 49 66 20 50 34  is not 0.  If P4
20940 20 69 73 20 6e 6f 74 20 4e 55 4c 4c 2c 20 69 74   is not NULL, it
20950 20 70 6f 69 6e 74 73 20 74 6f 20 61 20 4b 65 79   points to a Key
20960 49 6e 66 6f 20 73 74 72 75 63 74 75 72 65 0a 2a  Info structure.*
20970 2a 20 74 68 61 74 20 64 65 66 69 6e 65 73 20 74  * that defines t
20980 68 65 20 66 6f 72 6d 61 74 20 6f 66 20 6b 65 79  he format of key
20990 73 20 69 6e 20 74 68 65 20 69 6e 64 65 78 2e 0a  s in the index..
209a0 2a 2a 0a 2a 2a 20 54 68 65 20 50 35 20 70 61 72  **.** The P5 par
209b0 61 6d 65 74 65 72 20 63 61 6e 20 62 65 20 61 20  ameter can be a 
209c0 6d 61 73 6b 20 6f 66 20 74 68 65 20 42 54 52 45  mask of the BTRE
209d0 45 5f 2a 20 66 6c 61 67 73 20 64 65 66 69 6e 65  E_* flags define
209e0 64 0a 2a 2a 20 69 6e 20 62 74 72 65 65 2e 68 2e  d.** in btree.h.
209f0 20 20 54 68 65 73 65 20 66 6c 61 67 73 20 63 6f    These flags co
20a00 6e 74 72 6f 6c 20 61 73 70 65 63 74 73 20 6f 66  ntrol aspects of
20a10 20 74 68 65 20 6f 70 65 72 61 74 69 6f 6e 20 6f   the operation o
20a20 66 0a 2a 2a 20 74 68 65 20 62 74 72 65 65 2e 20  f.** the btree. 
20a30 20 54 68 65 20 42 54 52 45 45 5f 4f 4d 49 54 5f   The BTREE_OMIT_
20a40 4a 4f 55 52 4e 41 4c 20 61 6e 64 20 42 54 52 45  JOURNAL and BTRE
20a50 45 5f 53 49 4e 47 4c 45 20 66 6c 61 67 73 20 61  E_SINGLE flags a
20a60 72 65 0a 2a 2a 20 61 64 64 65 64 20 61 75 74 6f  re.** added auto
20a70 6d 61 74 69 63 61 6c 6c 79 2e 0a 2a 2f 0a 2f 2a  matically..*/./*
20a80 20 4f 70 63 6f 64 65 3a 20 4f 70 65 6e 41 75 74   Opcode: OpenAut
20a90 6f 69 6e 64 65 78 20 50 31 20 50 32 20 2a 20 50  oindex P1 P2 * P
20aa0 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  4 *.** Synopsis:
20ab0 20 6e 43 6f 6c 75 6d 6e 3d 50 32 0a 2a 2a 0a 2a   nColumn=P2.**.*
20ac0 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 77 6f  * This opcode wo
20ad0 72 6b 73 20 74 68 65 20 73 61 6d 65 20 61 73 20  rks the same as 
20ae0 4f 50 5f 4f 70 65 6e 45 70 68 65 6d 65 72 61 6c  OP_OpenEphemeral
20af0 2e 20 20 49 74 20 68 61 73 20 61 0a 2a 2a 20 64  .  It has a.** d
20b00 69 66 66 65 72 65 6e 74 20 6e 61 6d 65 20 74 6f  ifferent name to
20b10 20 64 69 73 74 69 6e 67 75 69 73 68 20 69 74 73   distinguish its
20b20 20 75 73 65 2e 20 20 54 61 62 6c 65 73 20 63 72   use.  Tables cr
20b30 65 61 74 65 64 20 75 73 69 6e 67 0a 2a 2a 20 62  eated using.** b
20b40 79 20 74 68 69 73 20 6f 70 63 6f 64 65 20 77 69  y this opcode wi
20b50 6c 6c 20 62 65 20 75 73 65 64 20 66 6f 72 20 61  ll be used for a
20b60 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 63 72 65  utomatically cre
20b70 61 74 65 64 20 74 72 61 6e 73 69 65 6e 74 0a 2a  ated transient.*
20b80 2a 20 69 6e 64 69 63 65 73 20 69 6e 20 6a 6f 69  * indices in joi
20b90 6e 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4f  ns..*/.case OP_O
20ba0 70 65 6e 41 75 74 6f 69 6e 64 65 78 3a 20 0a 63  penAutoindex: .c
20bb0 61 73 65 20 4f 50 5f 4f 70 65 6e 45 70 68 65 6d  ase OP_OpenEphem
20bc0 65 72 61 6c 3a 20 7b 0a 20 20 56 64 62 65 43 75  eral: {.  VdbeCu
20bd0 72 73 6f 72 20 2a 70 43 78 3b 0a 20 20 4b 65 79  rsor *pCx;.  Key
20be0 49 6e 66 6f 20 2a 70 4b 65 79 49 6e 66 6f 3b 0a  Info *pKeyInfo;.
20bf0 0a 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20  .  static const 
20c00 69 6e 74 20 76 66 73 46 6c 61 67 73 20 3d 20 0a  int vfsFlags = .
20c10 20 20 20 20 20 20 53 51 4c 49 54 45 5f 4f 50 45        SQLITE_OPE
20c20 4e 5f 52 45 41 44 57 52 49 54 45 20 7c 0a 20 20  N_READWRITE |.  
20c30 20 20 20 20 53 51 4c 49 54 45 5f 4f 50 45 4e 5f      SQLITE_OPEN_
20c40 43 52 45 41 54 45 20 7c 0a 20 20 20 20 20 20 53  CREATE |.      S
20c50 51 4c 49 54 45 5f 4f 50 45 4e 5f 45 58 43 4c 55  QLITE_OPEN_EXCLU
20c60 53 49 56 45 20 7c 0a 20 20 20 20 20 20 53 51 4c  SIVE |.      SQL
20c70 49 54 45 5f 4f 50 45 4e 5f 44 45 4c 45 54 45 4f  ITE_OPEN_DELETEO
20c80 4e 43 4c 4f 53 45 20 7c 0a 20 20 20 20 20 20 53  NCLOSE |.      S
20c90 51 4c 49 54 45 5f 4f 50 45 4e 5f 54 52 41 4e 53  QLITE_OPEN_TRANS
20ca0 49 45 4e 54 5f 44 42 3b 0a 20 20 61 73 73 65 72  IENT_DB;.  asser
20cb0 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 29 3b  t( pOp->p1>=0 );
20cc0 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
20cd0 70 32 3e 3d 30 20 29 3b 0a 20 20 70 43 78 20 3d  p2>=0 );.  pCx =
20ce0 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70   p->apCsr[pOp->p
20cf0 31 5d 3b 0a 20 20 69 66 28 20 70 43 78 20 29 7b  1];.  if( pCx ){
20d00 0a 20 20 20 20 2f 2a 20 49 66 20 74 68 65 20 65  .    /* If the e
20d10 70 68 65 72 6d 65 72 61 6c 20 74 61 62 6c 65 20  phermeral table 
20d20 69 73 20 61 6c 72 65 61 64 79 20 6f 70 65 6e 2c  is already open,
20d30 20 65 72 61 73 65 20 61 6c 6c 20 65 78 69 73 74   erase all exist
20d40 69 6e 67 20 63 6f 6e 74 65 6e 74 0a 20 20 20 20  ing content.    
20d50 2a 2a 20 73 6f 20 74 68 61 74 20 74 68 65 20 74  ** so that the t
20d60 61 62 6c 65 20 69 73 20 65 6d 70 74 79 20 61 67  able is empty ag
20d70 61 69 6e 2c 20 72 61 74 68 65 72 20 74 68 61 6e  ain, rather than
20d80 20 63 72 65 61 74 69 6e 67 20 61 20 6e 65 77 20   creating a new 
20d90 74 61 62 6c 65 2e 20 2a 2f 0a 20 20 20 20 61 73  table. */.    as
20da0 73 65 72 74 28 20 70 43 78 2d 3e 69 73 45 70 68  sert( pCx->isEph
20db0 65 6d 65 72 61 6c 20 29 3b 0a 20 20 20 20 70 43  emeral );.    pC
20dc0 78 2d 3e 73 65 71 43 6f 75 6e 74 20 3d 20 30 3b  x->seqCount = 0;
20dd0 0a 20 20 20 20 70 43 78 2d 3e 63 61 63 68 65 53  .    pCx->cacheS
20de0 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54  tatus = CACHE_ST
20df0 41 4c 45 3b 0a 20 20 20 20 69 66 28 20 70 43 78  ALE;.    if( pCx
20e00 2d 3e 70 42 74 78 20 29 7b 0a 20 20 20 20 20 20  ->pBtx ){.      
20e10 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
20e20 65 43 6c 65 61 72 54 61 62 6c 65 28 70 43 78 2d  eClearTable(pCx-
20e30 3e 70 42 74 78 2c 20 70 43 78 2d 3e 70 67 6e 6f  >pBtx, pCx->pgno
20e40 52 6f 6f 74 2c 20 30 29 3b 0a 20 20 20 20 7d 0a  Root, 0);.    }.
20e50 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70 43 78    }else{.    pCx
20e60 20 3d 20 61 6c 6c 6f 63 61 74 65 43 75 72 73 6f   = allocateCurso
20e70 72 28 70 2c 20 70 4f 70 2d 3e 70 31 2c 20 70 4f  r(p, pOp->p1, pO
20e80 70 2d 3e 70 32 2c 20 2d 31 2c 20 43 55 52 54 59  p->p2, -1, CURTY
20e90 50 45 5f 42 54 52 45 45 29 3b 0a 20 20 20 20 69  PE_BTREE);.    i
20ea0 66 28 20 70 43 78 3d 3d 30 20 29 20 67 6f 74 6f  f( pCx==0 ) goto
20eb0 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 20 20 70 43 78   no_mem;.    pCx
20ec0 2d 3e 69 73 45 70 68 65 6d 65 72 61 6c 20 3d 20  ->isEphemeral = 
20ed0 31 3b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69  1;.    rc = sqli
20ee0 74 65 33 42 74 72 65 65 4f 70 65 6e 28 64 62 2d  te3BtreeOpen(db-
20ef0 3e 70 56 66 73 2c 20 30 2c 20 64 62 2c 20 26 70  >pVfs, 0, db, &p
20f00 43 78 2d 3e 70 42 74 78 2c 20 0a 20 20 20 20 20  Cx->pBtx, .     
20f10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20f20 20 20 20 20 20 42 54 52 45 45 5f 4f 4d 49 54 5f       BTREE_OMIT_
20f30 4a 4f 55 52 4e 41 4c 20 7c 20 42 54 52 45 45 5f  JOURNAL | BTREE_
20f40 53 49 4e 47 4c 45 20 7c 20 70 4f 70 2d 3e 70 35  SINGLE | pOp->p5
20f50 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
20f60 20 20 20 20 20 20 20 20 20 20 20 20 76 66 73 46              vfsF
20f70 6c 61 67 73 29 3b 0a 20 20 20 20 69 66 28 20 72  lags);.    if( r
20f80 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a  c==SQLITE_OK ){.
20f90 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74        rc = sqlit
20fa0 65 33 42 74 72 65 65 42 65 67 69 6e 54 72 61 6e  e3BtreeBeginTran
20fb0 73 28 70 43 78 2d 3e 70 42 74 78 2c 20 31 2c 20  s(pCx->pBtx, 1, 
20fc0 30 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66  0);.    }.    if
20fd0 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc==SQLITE_OK 
20fe0 29 7b 0a 20 20 20 20 20 20 2f 2a 20 49 66 20 61  ){.      /* If a
20ff0 20 74 72 61 6e 73 69 65 6e 74 20 69 6e 64 65 78   transient index
21000 20 69 73 20 72 65 71 75 69 72 65 64 2c 20 63 72   is required, cr
21010 65 61 74 65 20 69 74 20 62 79 20 63 61 6c 6c 69  eate it by calli
21020 6e 67 0a 20 20 20 20 20 20 2a 2a 20 73 71 6c 69  ng.      ** sqli
21030 74 65 33 42 74 72 65 65 43 72 65 61 74 65 54 61  te3BtreeCreateTa
21040 62 6c 65 28 29 20 77 69 74 68 20 74 68 65 20 42  ble() with the B
21050 54 52 45 45 5f 42 4c 4f 42 4b 45 59 20 66 6c 61  TREE_BLOBKEY fla
21060 67 20 62 65 66 6f 72 65 0a 20 20 20 20 20 20 2a  g before.      *
21070 2a 20 6f 70 65 6e 69 6e 67 20 69 74 2e 20 49 66  * opening it. If
21080 20 61 20 74 72 61 6e 73 69 65 6e 74 20 74 61 62   a transient tab
21090 6c 65 20 69 73 20 72 65 71 75 69 72 65 64 2c 20  le is required, 
210a0 6a 75 73 74 20 75 73 65 20 74 68 65 0a 20 20 20  just use the.   
210b0 20 20 20 2a 2a 20 61 75 74 6f 6d 61 74 69 63 61     ** automatica
210c0 6c 6c 79 20 63 72 65 61 74 65 64 20 74 61 62 6c  lly created tabl
210d0 65 20 77 69 74 68 20 72 6f 6f 74 2d 70 61 67 65  e with root-page
210e0 20 31 20 28 61 6e 20 42 4c 4f 42 5f 49 4e 54 4b   1 (an BLOB_INTK
210f0 45 59 20 74 61 62 6c 65 29 2e 0a 20 20 20 20 20  EY table)..     
21100 20 2a 2f 0a 20 20 20 20 20 20 69 66 28 20 28 70   */.      if( (p
21110 43 78 2d 3e 70 4b 65 79 49 6e 66 6f 20 3d 20 70  Cx->pKeyInfo = p
21120 4b 65 79 49 6e 66 6f 20 3d 20 70 4f 70 2d 3e 70  KeyInfo = pOp->p
21130 34 2e 70 4b 65 79 49 6e 66 6f 29 21 3d 30 20 29  4.pKeyInfo)!=0 )
21140 7b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74  {.        assert
21150 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50  ( pOp->p4type==P
21160 34 5f 4b 45 59 49 4e 46 4f 20 29 3b 0a 20 20 20  4_KEYINFO );.   
21170 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65       rc = sqlite
21180 33 42 74 72 65 65 43 72 65 61 74 65 54 61 62 6c  3BtreeCreateTabl
21190 65 28 70 43 78 2d 3e 70 42 74 78 2c 20 28 69 6e  e(pCx->pBtx, (in
211a0 74 2a 29 26 70 43 78 2d 3e 70 67 6e 6f 52 6f 6f  t*)&pCx->pgnoRoo
211b0 74 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  t,.             
211c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
211d0 20 20 20 20 20 20 20 20 42 54 52 45 45 5f 42 4c          BTREE_BL
211e0 4f 42 4b 45 59 20 7c 20 70 4f 70 2d 3e 70 35 29  OBKEY | pOp->p5)
211f0 3b 20 0a 20 20 20 20 20 20 20 20 69 66 28 20 72  ; .        if( r
21200 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a  c==SQLITE_OK ){.
21210 20 20 20 20 20 20 20 20 20 20 61 73 73 65 72 74            assert
21220 28 20 70 43 78 2d 3e 70 67 6e 6f 52 6f 6f 74 3d  ( pCx->pgnoRoot=
21230 3d 4d 41 53 54 45 52 5f 52 4f 4f 54 2b 31 20 29  =MASTER_ROOT+1 )
21240 3b 0a 20 20 20 20 20 20 20 20 20 20 61 73 73 65  ;.          asse
21250 72 74 28 20 70 4b 65 79 49 6e 66 6f 2d 3e 64 62  rt( pKeyInfo->db
21260 3d 3d 64 62 20 29 3b 0a 20 20 20 20 20 20 20 20  ==db );.        
21270 20 20 61 73 73 65 72 74 28 20 70 4b 65 79 49 6e    assert( pKeyIn
21280 66 6f 2d 3e 65 6e 63 3d 3d 45 4e 43 28 64 62 29  fo->enc==ENC(db)
21290 20 29 3b 0a 20 20 20 20 20 20 20 20 20 20 72 63   );.          rc
212a0 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 43   = sqlite3BtreeC
212b0 75 72 73 6f 72 28 70 43 78 2d 3e 70 42 74 78 2c  ursor(pCx->pBtx,
212c0 20 70 43 78 2d 3e 70 67 6e 6f 52 6f 6f 74 2c 20   pCx->pgnoRoot, 
212d0 42 54 52 45 45 5f 57 52 43 53 52 2c 0a 20 20 20  BTREE_WRCSR,.   
212e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
212f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70                 p
21300 4b 65 79 49 6e 66 6f 2c 20 70 43 78 2d 3e 75 63  KeyInfo, pCx->uc
21310 2e 70 43 75 72 73 6f 72 29 3b 0a 20 20 20 20 20  .pCursor);.     
21320 20 20 20 7d 0a 20 20 20 20 20 20 20 20 70 43 78     }.        pCx
21330 2d 3e 69 73 54 61 62 6c 65 20 3d 20 30 3b 0a 20  ->isTable = 0;. 
21340 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
21350 20 20 20 20 70 43 78 2d 3e 70 67 6e 6f 52 6f 6f      pCx->pgnoRoo
21360 74 20 3d 20 4d 41 53 54 45 52 5f 52 4f 4f 54 3b  t = MASTER_ROOT;
21370 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20 73 71  .        rc = sq
21380 6c 69 74 65 33 42 74 72 65 65 43 75 72 73 6f 72  lite3BtreeCursor
21390 28 70 43 78 2d 3e 70 42 74 78 2c 20 4d 41 53 54  (pCx->pBtx, MAST
213a0 45 52 5f 52 4f 4f 54 2c 20 42 54 52 45 45 5f 57  ER_ROOT, BTREE_W
213b0 52 43 53 52 2c 0a 20 20 20 20 20 20 20 20 20 20  RCSR,.          
213c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
213d0 20 20 20 20 20 20 30 2c 20 70 43 78 2d 3e 75 63        0, pCx->uc
213e0 2e 70 43 75 72 73 6f 72 29 3b 0a 20 20 20 20 20  .pCursor);.     
213f0 20 20 20 70 43 78 2d 3e 69 73 54 61 62 6c 65 20     pCx->isTable 
21400 3d 20 31 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  = 1;.      }.   
21410 20 7d 0a 20 20 20 20 70 43 78 2d 3e 69 73 4f 72   }.    pCx->isOr
21420 64 65 72 65 64 20 3d 20 28 70 4f 70 2d 3e 70 35  dered = (pOp->p5
21430 21 3d 42 54 52 45 45 5f 55 4e 4f 52 44 45 52 45  !=BTREE_UNORDERE
21440 44 29 3b 0a 20 20 7d 0a 20 20 69 66 28 20 72 63  D);.  }.  if( rc
21450 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75   ) goto abort_du
21460 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 70 43  e_to_error;.  pC
21470 78 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 31 3b 0a  x->nullRow = 1;.
21480 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
21490 70 63 6f 64 65 3a 20 53 6f 72 74 65 72 4f 70 65  pcode: SorterOpe
214a0 6e 20 50 31 20 50 32 20 50 33 20 50 34 20 2a 0a  n P1 P2 P3 P4 *.
214b0 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64  **.** This opcod
214c0 65 20 77 6f 72 6b 73 20 6c 69 6b 65 20 4f 50 5f  e works like OP_
214d0 4f 70 65 6e 45 70 68 65 6d 65 72 61 6c 20 65 78  OpenEphemeral ex
214e0 63 65 70 74 20 74 68 61 74 20 69 74 20 6f 70 65  cept that it ope
214f0 6e 73 0a 2a 2a 20 61 20 74 72 61 6e 73 69 65 6e  ns.** a transien
21500 74 20 69 6e 64 65 78 20 74 68 61 74 20 69 73 20  t index that is 
21510 73 70 65 63 69 66 69 63 61 6c 6c 79 20 64 65 73  specifically des
21520 69 67 6e 65 64 20 74 6f 20 73 6f 72 74 20 6c 61  igned to sort la
21530 72 67 65 0a 2a 2a 20 74 61 62 6c 65 73 20 75 73  rge.** tables us
21540 69 6e 67 20 61 6e 20 65 78 74 65 72 6e 61 6c 20  ing an external 
21550 6d 65 72 67 65 2d 73 6f 72 74 20 61 6c 67 6f 72  merge-sort algor
21560 69 74 68 6d 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 61  ithm..**.** If a
21570 72 67 75 6d 65 6e 74 20 50 33 20 69 73 20 6e 6f  rgument P3 is no
21580 6e 2d 7a 65 72 6f 2c 20 74 68 65 6e 20 69 74 20  n-zero, then it 
21590 69 6e 64 69 63 61 74 65 73 20 74 68 61 74 20 74  indicates that t
215a0 68 65 20 73 6f 72 74 65 72 20 6d 61 79 0a 2a 2a  he sorter may.**
215b0 20 61 73 73 75 6d 65 20 74 68 61 74 20 61 20 73   assume that a s
215c0 74 61 62 6c 65 20 73 6f 72 74 20 63 6f 6e 73 69  table sort consi
215d0 64 65 72 69 6e 67 20 74 68 65 20 66 69 72 73 74  dering the first
215e0 20 50 33 20 66 69 65 6c 64 73 20 6f 66 20 65 61   P3 fields of ea
215f0 63 68 0a 2a 2a 20 6b 65 79 20 69 73 20 73 75 66  ch.** key is suf
21600 66 69 63 69 65 6e 74 20 74 6f 20 70 72 6f 64 75  ficient to produ
21610 63 65 20 74 68 65 20 72 65 71 75 69 72 65 64 20  ce the required 
21620 72 65 73 75 6c 74 73 2e 0a 2a 2f 0a 63 61 73 65  results..*/.case
21630 20 4f 50 5f 53 6f 72 74 65 72 4f 70 65 6e 3a 20   OP_SorterOpen: 
21640 7b 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a  {.  VdbeCursor *
21650 70 43 78 3b 0a 0a 20 20 61 73 73 65 72 74 28 20  pCx;..  assert( 
21660 70 4f 70 2d 3e 70 31 3e 3d 30 20 29 3b 0a 20 20  pOp->p1>=0 );.  
21670 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e  assert( pOp->p2>
21680 3d 30 20 29 3b 0a 20 20 70 43 78 20 3d 20 61 6c  =0 );.  pCx = al
21690 6c 6f 63 61 74 65 43 75 72 73 6f 72 28 70 2c 20  locateCursor(p, 
216a0 70 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70 32  pOp->p1, pOp->p2
216b0 2c 20 2d 31 2c 20 43 55 52 54 59 50 45 5f 53 4f  , -1, CURTYPE_SO
216c0 52 54 45 52 29 3b 0a 20 20 69 66 28 20 70 43 78  RTER);.  if( pCx
216d0 3d 3d 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65  ==0 ) goto no_me
216e0 6d 3b 0a 20 20 70 43 78 2d 3e 70 4b 65 79 49 6e  m;.  pCx->pKeyIn
216f0 66 6f 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 4b 65  fo = pOp->p4.pKe
21700 79 49 6e 66 6f 3b 0a 20 20 61 73 73 65 72 74 28  yInfo;.  assert(
21710 20 70 43 78 2d 3e 70 4b 65 79 49 6e 66 6f 2d 3e   pCx->pKeyInfo->
21720 64 62 3d 3d 64 62 20 29 3b 0a 20 20 61 73 73 65  db==db );.  asse
21730 72 74 28 20 70 43 78 2d 3e 70 4b 65 79 49 6e 66  rt( pCx->pKeyInf
21740 6f 2d 3e 65 6e 63 3d 3d 45 4e 43 28 64 62 29 20  o->enc==ENC(db) 
21750 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65  );.  rc = sqlite
21760 33 56 64 62 65 53 6f 72 74 65 72 49 6e 69 74 28  3VdbeSorterInit(
21770 64 62 2c 20 70 4f 70 2d 3e 70 33 2c 20 70 43 78  db, pOp->p3, pCx
21780 29 3b 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f  );.  if( rc ) go
21790 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
217a0 65 72 72 6f 72 3b 0a 20 20 62 72 65 61 6b 3b 0a  error;.  break;.
217b0 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 65  }../* Opcode: Se
217c0 71 75 65 6e 63 65 54 65 73 74 20 50 31 20 50 32  quenceTest P1 P2
217d0 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73   * * *.** Synops
217e0 69 73 3a 20 69 66 28 20 63 75 72 73 6f 72 5b 50  is: if( cursor[P
217f0 31 5d 2e 63 74 72 2b 2b 20 29 20 70 63 20 3d 20  1].ctr++ ) pc = 
21800 50 32 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 61  P2.**.** P1 is a
21810 20 73 6f 72 74 65 72 20 63 75 72 73 6f 72 2e 20   sorter cursor. 
21820 49 66 20 74 68 65 20 73 65 71 75 65 6e 63 65 20  If the sequence 
21830 63 6f 75 6e 74 65 72 20 69 73 20 63 75 72 72 65  counter is curre
21840 6e 74 6c 79 20 7a 65 72 6f 2c 20 6a 75 6d 70 0a  ntly zero, jump.
21850 2a 2a 20 74 6f 20 50 32 2e 20 52 65 67 61 72 64  ** to P2. Regard
21860 6c 65 73 73 20 6f 66 20 77 68 65 74 68 65 72 20  less of whether 
21870 6f 72 20 6e 6f 74 20 74 68 65 20 6a 75 6d 70 20  or not the jump 
21880 69 73 20 74 61 6b 65 6e 2c 20 69 6e 63 72 65 6d  is taken, increm
21890 65 6e 74 20 74 68 65 0a 2a 2a 20 74 68 65 20 73  ent the.** the s
218a0 65 71 75 65 6e 63 65 20 76 61 6c 75 65 2e 0a 2a  equence value..*
218b0 2f 0a 63 61 73 65 20 4f 50 5f 53 65 71 75 65 6e  /.case OP_Sequen
218c0 63 65 54 65 73 74 3a 20 7b 0a 20 20 56 64 62 65  ceTest: {.  Vdbe
218d0 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 61 73  Cursor *pC;.  as
218e0 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30  sert( pOp->p1>=0
218f0 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e   && pOp->p1<p->n
21900 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d  Cursor );.  pC =
21910 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70   p->apCsr[pOp->p
21920 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 69 73  1];.  assert( is
21930 53 6f 72 74 65 72 28 70 43 29 20 29 3b 0a 20 20  Sorter(pC) );.  
21940 69 66 28 20 28 70 43 2d 3e 73 65 71 43 6f 75 6e  if( (pC->seqCoun
21950 74 2b 2b 29 3d 3d 30 20 29 7b 0a 20 20 20 20 67  t++)==0 ){.    g
21960 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a  oto jump_to_p2;.
21970 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
21980 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f 70 65 6e 50  /* Opcode: OpenP
21990 73 65 75 64 6f 20 50 31 20 50 32 20 50 33 20 2a  seudo P1 P2 P3 *
219a0 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
219b0 50 33 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 72 5b  P3 columns in r[
219c0 50 32 5d 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e 20 61  P2].**.** Open a
219d0 20 6e 65 77 20 63 75 72 73 6f 72 20 74 68 61 74   new cursor that
219e0 20 70 6f 69 6e 74 73 20 74 6f 20 61 20 66 61 6b   points to a fak
219f0 65 20 74 61 62 6c 65 20 74 68 61 74 20 63 6f 6e  e table that con
21a00 74 61 69 6e 73 20 61 20 73 69 6e 67 6c 65 0a 2a  tains a single.*
21a10 2a 20 72 6f 77 20 6f 66 20 64 61 74 61 2e 20 20  * row of data.  
21a20 54 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 74  The content of t
21a30 68 61 74 20 6f 6e 65 20 72 6f 77 20 69 73 20 74  hat one row is t
21a40 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 6d 65  he content of me
21a50 6d 6f 72 79 0a 2a 2a 20 72 65 67 69 73 74 65 72  mory.** register
21a60 20 50 32 2e 20 20 49 6e 20 6f 74 68 65 72 20 77   P2.  In other w
21a70 6f 72 64 73 2c 20 63 75 72 73 6f 72 20 50 31 20  ords, cursor P1 
21a80 62 65 63 6f 6d 65 73 20 61 6e 20 61 6c 69 61 73  becomes an alias
21a90 20 66 6f 72 20 74 68 65 20 0a 2a 2a 20 4d 45 4d   for the .** MEM
21aa0 5f 42 6c 6f 62 20 63 6f 6e 74 65 6e 74 20 63 6f  _Blob content co
21ab0 6e 74 61 69 6e 65 64 20 69 6e 20 72 65 67 69 73  ntained in regis
21ac0 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 41 20  ter P2..**.** A 
21ad0 70 73 65 75 64 6f 2d 74 61 62 6c 65 20 63 72 65  pseudo-table cre
21ae0 61 74 65 64 20 62 79 20 74 68 69 73 20 6f 70 63  ated by this opc
21af0 6f 64 65 20 69 73 20 75 73 65 64 20 74 6f 20 68  ode is used to h
21b00 6f 6c 64 20 61 20 73 69 6e 67 6c 65 0a 2a 2a 20  old a single.** 
21b10 72 6f 77 20 6f 75 74 70 75 74 20 66 72 6f 6d 20  row output from 
21b20 74 68 65 20 73 6f 72 74 65 72 20 73 6f 20 74 68  the sorter so th
21b30 61 74 20 74 68 65 20 72 6f 77 20 63 61 6e 20 62  at the row can b
21b40 65 20 64 65 63 6f 6d 70 6f 73 65 64 20 69 6e 74  e decomposed int
21b50 6f 0a 2a 2a 20 69 6e 64 69 76 69 64 75 61 6c 20  o.** individual 
21b60 63 6f 6c 75 6d 6e 73 20 75 73 69 6e 67 20 74 68  columns using th
21b70 65 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 70 63 6f  e OP_Column opco
21b80 64 65 2e 20 20 54 68 65 20 4f 50 5f 43 6f 6c 75  de.  The OP_Colu
21b90 6d 6e 20 6f 70 63 6f 64 65 0a 2a 2a 20 69 73 20  mn opcode.** is 
21ba0 74 68 65 20 6f 6e 6c 79 20 63 75 72 73 6f 72 20  the only cursor 
21bb0 6f 70 63 6f 64 65 20 74 68 61 74 20 77 6f 72 6b  opcode that work
21bc0 73 20 77 69 74 68 20 61 20 70 73 65 75 64 6f 2d  s with a pseudo-
21bd0 74 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 50 33 20  table..**.** P3 
21be0 69 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  is the number of
21bf0 20 66 69 65 6c 64 73 20 69 6e 20 74 68 65 20 72   fields in the r
21c00 65 63 6f 72 64 73 20 74 68 61 74 20 77 69 6c 6c  ecords that will
21c10 20 62 65 20 73 74 6f 72 65 64 20 62 79 0a 2a 2a   be stored by.**
21c20 20 74 68 65 20 70 73 65 75 64 6f 2d 74 61 62 6c   the pseudo-tabl
21c30 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4f 70  e..*/.case OP_Op
21c40 65 6e 50 73 65 75 64 6f 3a 20 7b 0a 20 20 56 64  enPseudo: {.  Vd
21c50 62 65 43 75 72 73 6f 72 20 2a 70 43 78 3b 0a 0a  beCursor *pCx;..
21c60 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
21c70 31 3e 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  1>=0 );.  assert
21c80 28 20 70 4f 70 2d 3e 70 33 3e 3d 30 20 29 3b 0a  ( pOp->p3>=0 );.
21c90 20 20 70 43 78 20 3d 20 61 6c 6c 6f 63 61 74 65    pCx = allocate
21ca0 43 75 72 73 6f 72 28 70 2c 20 70 4f 70 2d 3e 70  Cursor(p, pOp->p
21cb0 31 2c 20 70 4f 70 2d 3e 70 33 2c 20 2d 31 2c 20  1, pOp->p3, -1, 
21cc0 43 55 52 54 59 50 45 5f 50 53 45 55 44 4f 29 3b  CURTYPE_PSEUDO);
21cd0 0a 20 20 69 66 28 20 70 43 78 3d 3d 30 20 29 20  .  if( pCx==0 ) 
21ce0 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 70  goto no_mem;.  p
21cf0 43 78 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 31 3b  Cx->nullRow = 1;
21d00 0a 20 20 70 43 78 2d 3e 73 65 65 6b 52 65 73 75  .  pCx->seekResu
21d10 6c 74 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20  lt = pOp->p2;.  
21d20 70 43 78 2d 3e 69 73 54 61 62 6c 65 20 3d 20 31  pCx->isTable = 1
21d30 3b 0a 20 20 2f 2a 20 47 69 76 65 20 74 68 69 73  ;.  /* Give this
21d40 20 70 73 65 75 64 6f 2d 63 75 72 73 6f 72 20 61   pseudo-cursor a
21d50 20 66 61 6b 65 20 42 74 43 75 72 73 6f 72 20 70   fake BtCursor p
21d60 6f 69 6e 74 65 72 20 73 6f 20 74 68 61 74 20 70  ointer so that p
21d70 43 78 0a 20 20 2a 2a 20 63 61 6e 20 62 65 20 73  Cx.  ** can be s
21d80 61 66 65 6c 79 20 70 61 73 73 65 64 20 74 6f 20  afely passed to 
21d90 73 71 6c 69 74 65 33 56 64 62 65 43 75 72 73 6f  sqlite3VdbeCurso
21da0 72 4d 6f 76 65 74 6f 28 29 2e 20 20 54 68 69 73  rMoveto().  This
21db0 20 61 76 6f 69 64 73 20 61 20 74 65 73 74 0a 20   avoids a test. 
21dc0 20 2a 2a 20 66 6f 72 20 70 43 78 2d 3e 65 43 75   ** for pCx->eCu
21dd0 72 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f 42  rType==CURTYPE_B
21de0 54 52 45 45 20 69 6e 73 69 64 65 20 6f 66 20 73  TREE inside of s
21df0 71 6c 69 74 65 33 56 64 62 65 43 75 72 73 6f 72  qlite3VdbeCursor
21e00 4d 6f 76 65 74 6f 28 29 0a 20 20 2a 2a 20 77 68  Moveto().  ** wh
21e10 69 63 68 20 69 73 20 61 20 70 65 72 66 6f 72 6d  ich is a perform
21e20 61 6e 63 65 20 6f 70 74 69 6d 69 7a 61 74 69 6f  ance optimizatio
21e30 6e 20 2a 2f 0a 20 20 70 43 78 2d 3e 75 63 2e 70  n */.  pCx->uc.p
21e40 43 75 72 73 6f 72 20 3d 20 73 71 6c 69 74 65 33  Cursor = sqlite3
21e50 42 74 72 65 65 46 61 6b 65 56 61 6c 69 64 43 75  BtreeFakeValidCu
21e60 72 73 6f 72 28 29 3b 0a 20 20 61 73 73 65 72 74  rsor();.  assert
21e70 28 20 70 4f 70 2d 3e 70 35 3d 3d 30 20 29 3b 0a  ( pOp->p5==0 );.
21e80 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
21e90 70 63 6f 64 65 3a 20 43 6c 6f 73 65 20 50 31 20  pcode: Close P1 
21ea0 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 43 6c  * * * *.**.** Cl
21eb0 6f 73 65 20 61 20 63 75 72 73 6f 72 20 70 72 65  ose a cursor pre
21ec0 76 69 6f 75 73 6c 79 20 6f 70 65 6e 65 64 20 61  viously opened a
21ed0 73 20 50 31 2e 20 20 49 66 20 50 31 20 69 73 20  s P1.  If P1 is 
21ee0 6e 6f 74 0a 2a 2a 20 63 75 72 72 65 6e 74 6c 79  not.** currently
21ef0 20 6f 70 65 6e 2c 20 74 68 69 73 20 69 6e 73 74   open, this inst
21f00 72 75 63 74 69 6f 6e 20 69 73 20 61 20 6e 6f 2d  ruction is a no-
21f10 6f 70 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43  op..*/.case OP_C
21f20 6c 6f 73 65 3a 20 7b 0a 20 20 61 73 73 65 72 74  lose: {.  assert
21f30 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20  ( pOp->p1>=0 && 
21f40 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73  pOp->p1<p->nCurs
21f50 6f 72 20 29 3b 0a 20 20 73 71 6c 69 74 65 33 56  or );.  sqlite3V
21f60 64 62 65 46 72 65 65 43 75 72 73 6f 72 28 70 2c  dbeFreeCursor(p,
21f70 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70   p->apCsr[pOp->p
21f80 31 5d 29 3b 0a 20 20 70 2d 3e 61 70 43 73 72 5b  1]);.  p->apCsr[
21f90 70 4f 70 2d 3e 70 31 5d 20 3d 20 30 3b 0a 20 20  pOp->p1] = 0;.  
21fa0 62 72 65 61 6b 3b 0a 7d 0a 0a 23 69 66 64 65 66  break;.}..#ifdef
21fb0 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 43   SQLITE_ENABLE_C
21fc0 4f 4c 55 4d 4e 5f 55 53 45 44 5f 4d 41 53 4b 0a  OLUMN_USED_MASK.
21fd0 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6f 6c 75 6d  /* Opcode: Colum
21fe0 6e 73 55 73 65 64 20 50 31 20 2a 20 2a 20 50 34  nsUsed P1 * * P4
21ff0 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70   *.**.** This op
22000 63 6f 64 65 20 28 77 68 69 63 68 20 6f 6e 6c 79  code (which only
22010 20 65 78 69 73 74 73 20 69 66 20 53 51 4c 69 74   exists if SQLit
22020 65 20 77 61 73 20 63 6f 6d 70 69 6c 65 64 20 77  e was compiled w
22030 69 74 68 0a 2a 2a 20 53 51 4c 49 54 45 5f 45 4e  ith.** SQLITE_EN
22040 41 42 4c 45 5f 43 4f 4c 55 4d 4e 5f 55 53 45 44  ABLE_COLUMN_USED
22050 5f 4d 41 53 4b 29 20 69 64 65 6e 74 69 66 69 65  _MASK) identifie
22060 73 20 77 68 69 63 68 20 63 6f 6c 75 6d 6e 73 20  s which columns 
22070 6f 66 20 74 68 65 0a 2a 2a 20 74 61 62 6c 65 20  of the.** table 
22080 6f 72 20 69 6e 64 65 78 20 66 6f 72 20 63 75 72  or index for cur
22090 73 6f 72 20 50 31 20 61 72 65 20 75 73 65 64 2e  sor P1 are used.
220a0 20 20 50 34 20 69 73 20 61 20 36 34 2d 62 69 74    P4 is a 64-bit
220b0 20 69 6e 74 65 67 65 72 0a 2a 2a 20 28 50 34 5f   integer.** (P4_
220c0 49 4e 54 36 34 29 20 69 6e 20 77 68 69 63 68 20  INT64) in which 
220d0 74 68 65 20 66 69 72 73 74 20 36 33 20 62 69 74  the first 63 bit
220e0 73 20 61 72 65 20 6f 6e 65 20 66 6f 72 20 65 61  s are one for ea
220f0 63 68 20 6f 66 20 74 68 65 0a 2a 2a 20 66 69 72  ch of the.** fir
22100 73 74 20 36 33 20 63 6f 6c 75 6d 6e 73 20 6f 66  st 63 columns of
22110 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20 69 6e   the table or in
22120 64 65 78 20 74 68 61 74 20 61 72 65 20 61 63 74  dex that are act
22130 75 61 6c 6c 79 20 75 73 65 64 0a 2a 2a 20 62 79  ually used.** by
22140 20 74 68 65 20 63 75 72 73 6f 72 2e 20 20 54 68   the cursor.  Th
22150 65 20 68 69 67 68 2d 6f 72 64 65 72 20 62 69 74  e high-order bit
22160 20 69 73 20 73 65 74 20 69 66 20 61 6e 79 20 63   is set if any c
22170 6f 6c 75 6d 6e 20 61 66 74 65 72 0a 2a 2a 20 74  olumn after.** t
22180 68 65 20 36 34 74 68 20 69 73 20 75 73 65 64 2e  he 64th is used.
22190 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 6f 6c 75  .*/.case OP_Colu
221a0 6d 6e 73 55 73 65 64 3a 20 7b 0a 20 20 56 64 62  mnsUsed: {.  Vdb
221b0 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 70  eCursor *pC;.  p
221c0 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70  C = p->apCsr[pOp
221d0 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p1];.  assert(
221e0 20 70 43 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43   pC->eCurType==C
221f0 55 52 54 59 50 45 5f 42 54 52 45 45 20 29 3b 0a  URTYPE_BTREE );.
22200 20 20 70 43 2d 3e 6d 61 73 6b 55 73 65 64 20 3d    pC->maskUsed =
22210 20 2a 28 75 36 34 2a 29 70 4f 70 2d 3e 70 34 2e   *(u64*)pOp->p4.
22220 70 49 36 34 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  pI64;.  break;.}
22230 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20 4f 70 63 6f  .#endif../* Opco
22240 64 65 3a 20 53 65 65 6b 47 45 20 50 31 20 50 32  de: SeekGE P1 P2
22250 20 50 33 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f   P3 P4 *.** Syno
22260 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50 33 40 50  psis: key=r[P3@P
22270 34 5d 0a 2a 2a 0a 2a 2a 20 49 66 20 63 75 72 73  4].**.** If curs
22280 6f 72 20 50 31 20 72 65 66 65 72 73 20 74 6f 20  or P1 refers to 
22290 61 6e 20 53 51 4c 20 74 61 62 6c 65 20 28 42 2d  an SQL table (B-
222a0 54 72 65 65 20 74 68 61 74 20 75 73 65 73 20 69  Tree that uses i
222b0 6e 74 65 67 65 72 20 6b 65 79 73 29 2c 20 0a 2a  nteger keys), .*
222c0 2a 20 75 73 65 20 74 68 65 20 76 61 6c 75 65 20  * use the value 
222d0 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 20 61  in register P3 a
222e0 73 20 74 68 65 20 6b 65 79 2e 20 20 49 66 20 63  s the key.  If c
222f0 75 72 73 6f 72 20 50 31 20 72 65 66 65 72 73 20  ursor P1 refers 
22300 0a 2a 2a 20 74 6f 20 61 6e 20 53 51 4c 20 69 6e  .** to an SQL in
22310 64 65 78 2c 20 74 68 65 6e 20 50 33 20 69 73 20  dex, then P3 is 
22320 74 68 65 20 66 69 72 73 74 20 69 6e 20 61 6e 20  the first in an 
22330 61 72 72 61 79 20 6f 66 20 50 34 20 72 65 67 69  array of P4 regi
22340 73 74 65 72 73 20 0a 2a 2a 20 74 68 61 74 20 61  sters .** that a
22350 72 65 20 75 73 65 64 20 61 73 20 61 6e 20 75 6e  re used as an un
22360 70 61 63 6b 65 64 20 69 6e 64 65 78 20 6b 65 79  packed index key
22370 2e 20 0a 2a 2a 0a 2a 2a 20 52 65 70 6f 73 69 74  . .**.** Reposit
22380 69 6f 6e 20 63 75 72 73 6f 72 20 50 31 20 73 6f  ion cursor P1 so
22390 20 74 68 61 74 20 20 69 74 20 70 6f 69 6e 74 73   that  it points
223a0 20 74 6f 20 74 68 65 20 73 6d 61 6c 6c 65 73 74   to the smallest
223b0 20 65 6e 74 72 79 20 74 68 61 74 20 0a 2a 2a 20   entry that .** 
223c0 69 73 20 67 72 65 61 74 65 72 20 74 68 61 6e 20  is greater than 
223d0 6f 72 20 65 71 75 61 6c 20 74 6f 20 74 68 65 20  or equal to the 
223e0 6b 65 79 20 76 61 6c 75 65 2e 20 49 66 20 74 68  key value. If th
223f0 65 72 65 20 61 72 65 20 6e 6f 20 72 65 63 6f 72  ere are no recor
22400 64 73 20 0a 2a 2a 20 67 72 65 61 74 65 72 20 74  ds .** greater t
22410 68 61 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f 20  han or equal to 
22420 74 68 65 20 6b 65 79 20 61 6e 64 20 50 32 20 69  the key and P2 i
22430 73 20 6e 6f 74 20 7a 65 72 6f 2c 20 74 68 65 6e  s not zero, then
22440 20 6a 75 6d 70 20 74 6f 20 50 32 2e 0a 2a 2a 0a   jump to P2..**.
22450 2a 2a 20 49 66 20 74 68 65 20 63 75 72 73 6f 72  ** If the cursor
22460 20 50 31 20 77 61 73 20 6f 70 65 6e 65 64 20 75   P1 was opened u
22470 73 69 6e 67 20 74 68 65 20 4f 50 46 4c 41 47 5f  sing the OPFLAG_
22480 53 45 45 4b 45 51 20 66 6c 61 67 2c 20 74 68 65  SEEKEQ flag, the
22490 6e 20 74 68 69 73 0a 2a 2a 20 6f 70 63 6f 64 65  n this.** opcode
224a0 20 77 69 6c 6c 20 61 6c 77 61 79 73 20 6c 61 6e   will always lan
224b0 64 20 6f 6e 20 61 20 72 65 63 6f 72 64 20 74 68  d on a record th
224c0 61 74 20 65 71 75 61 6c 6c 79 20 65 71 75 61 6c  at equally equal
224d0 73 20 74 68 65 20 6b 65 79 2c 20 6f 72 0a 2a 2a  s the key, or.**
224e0 20 65 6c 73 65 20 6a 75 6d 70 20 69 6d 6d 65 64   else jump immed
224f0 69 61 74 65 6c 79 20 74 6f 20 50 32 2e 20 20 57  iately to P2.  W
22500 68 65 6e 20 74 68 65 20 63 75 72 73 6f 72 20 69  hen the cursor i
22510 73 20 4f 50 46 4c 41 47 5f 53 45 45 4b 45 51 2c  s OPFLAG_SEEKEQ,
22520 20 74 68 69 73 0a 2a 2a 20 6f 70 63 6f 64 65 20   this.** opcode 
22530 6d 75 73 74 20 62 65 20 66 6f 6c 6c 6f 77 65 64  must be followed
22540 20 62 79 20 61 6e 20 49 64 78 4c 45 20 6f 70 63   by an IdxLE opc
22550 6f 64 65 20 77 69 74 68 20 74 68 65 20 73 61 6d  ode with the sam
22560 65 20 61 72 67 75 6d 65 6e 74 73 2e 0a 2a 2a 20  e arguments..** 
22570 54 68 65 20 49 64 78 4c 45 20 6f 70 63 6f 64 65  The IdxLE opcode
22580 20 77 69 6c 6c 20 62 65 20 73 6b 69 70 70 65 64   will be skipped
22590 20 69 66 20 74 68 69 73 20 6f 70 63 6f 64 65 20   if this opcode 
225a0 73 75 63 63 65 65 64 73 2c 20 62 75 74 20 74 68  succeeds, but th
225b0 65 0a 2a 2a 20 49 64 78 4c 45 20 6f 70 63 6f 64  e.** IdxLE opcod
225c0 65 20 77 69 6c 6c 20 62 65 20 75 73 65 64 20 6f  e will be used o
225d0 6e 20 73 75 62 73 65 71 75 65 6e 74 20 6c 6f 6f  n subsequent loo
225e0 70 20 69 74 65 72 61 74 69 6f 6e 73 2e 0a 2a 2a  p iterations..**
225f0 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20  .** This opcode 
22600 6c 65 61 76 65 73 20 74 68 65 20 63 75 72 73 6f  leaves the curso
22610 72 20 63 6f 6e 66 69 67 75 72 65 64 20 74 6f 20  r configured to 
22620 6d 6f 76 65 20 69 6e 20 66 6f 72 77 61 72 64 20  move in forward 
22630 6f 72 64 65 72 2c 0a 2a 2a 20 66 72 6f 6d 20 74  order,.** from t
22640 68 65 20 62 65 67 69 6e 6e 69 6e 67 20 74 6f 77  he beginning tow
22650 61 72 64 20 74 68 65 20 65 6e 64 2e 20 20 49 6e  ard the end.  In
22660 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 74 68   other words, th
22670 65 20 63 75 72 73 6f 72 20 69 73 0a 2a 2a 20 63  e cursor is.** c
22680 6f 6e 66 69 67 75 72 65 64 20 74 6f 20 75 73 65  onfigured to use
22690 20 4e 65 78 74 2c 20 6e 6f 74 20 50 72 65 76 2e   Next, not Prev.
226a0 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a  .**.** See also:
226b0 20 46 6f 75 6e 64 2c 20 4e 6f 74 46 6f 75 6e 64   Found, NotFound
226c0 2c 20 53 65 65 6b 4c 74 2c 20 53 65 65 6b 47 74  , SeekLt, SeekGt
226d0 2c 20 53 65 65 6b 4c 65 0a 2a 2f 0a 2f 2a 20 4f  , SeekLe.*/./* O
226e0 70 63 6f 64 65 3a 20 53 65 65 6b 47 54 20 50 31  pcode: SeekGT P1
226f0 20 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a 20 53   P2 P3 P4 *.** S
22700 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50  ynopsis: key=r[P
22710 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 49 66 20 63  3@P4].**.** If c
22720 75 72 73 6f 72 20 50 31 20 72 65 66 65 72 73 20  ursor P1 refers 
22730 74 6f 20 61 6e 20 53 51 4c 20 74 61 62 6c 65 20  to an SQL table 
22740 28 42 2d 54 72 65 65 20 74 68 61 74 20 75 73 65  (B-Tree that use
22750 73 20 69 6e 74 65 67 65 72 20 6b 65 79 73 29 2c  s integer keys),
22760 20 0a 2a 2a 20 75 73 65 20 74 68 65 20 76 61 6c   .** use the val
22770 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
22780 33 20 61 73 20 61 20 6b 65 79 2e 20 49 66 20 63  3 as a key. If c
22790 75 72 73 6f 72 20 50 31 20 72 65 66 65 72 73 20  ursor P1 refers 
227a0 0a 2a 2a 20 74 6f 20 61 6e 20 53 51 4c 20 69 6e  .** to an SQL in
227b0 64 65 78 2c 20 74 68 65 6e 20 50 33 20 69 73 20  dex, then P3 is 
227c0 74 68 65 20 66 69 72 73 74 20 69 6e 20 61 6e 20  the first in an 
227d0 61 72 72 61 79 20 6f 66 20 50 34 20 72 65 67 69  array of P4 regi
227e0 73 74 65 72 73 20 0a 2a 2a 20 74 68 61 74 20 61  sters .** that a
227f0 72 65 20 75 73 65 64 20 61 73 20 61 6e 20 75 6e  re used as an un
22800 70 61 63 6b 65 64 20 69 6e 64 65 78 20 6b 65 79  packed index key
22810 2e 20 0a 2a 2a 0a 2a 2a 20 52 65 70 6f 73 69 74  . .**.** Reposit
22820 69 6f 6e 20 63 75 72 73 6f 72 20 50 31 20 73 6f  ion cursor P1 so
22830 20 74 68 61 74 20 20 69 74 20 70 6f 69 6e 74 73   that  it points
22840 20 74 6f 20 74 68 65 20 73 6d 61 6c 6c 65 73 74   to the smallest
22850 20 65 6e 74 72 79 20 74 68 61 74 20 0a 2a 2a 20   entry that .** 
22860 69 73 20 67 72 65 61 74 65 72 20 74 68 61 6e 20  is greater than 
22870 74 68 65 20 6b 65 79 20 76 61 6c 75 65 2e 20 49  the key value. I
22880 66 20 74 68 65 72 65 20 61 72 65 20 6e 6f 20 72  f there are no r
22890 65 63 6f 72 64 73 20 67 72 65 61 74 65 72 20 74  ecords greater t
228a0 68 61 6e 20 0a 2a 2a 20 74 68 65 20 6b 65 79 20  han .** the key 
228b0 61 6e 64 20 50 32 20 69 73 20 6e 6f 74 20 7a 65  and P2 is not ze
228c0 72 6f 2c 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f  ro, then jump to
228d0 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20   P2..**.** This 
228e0 6f 70 63 6f 64 65 20 6c 65 61 76 65 73 20 74 68  opcode leaves th
228f0 65 20 63 75 72 73 6f 72 20 63 6f 6e 66 69 67 75  e cursor configu
22900 72 65 64 20 74 6f 20 6d 6f 76 65 20 69 6e 20 66  red to move in f
22910 6f 72 77 61 72 64 20 6f 72 64 65 72 2c 0a 2a 2a  orward order,.**
22920 20 66 72 6f 6d 20 74 68 65 20 62 65 67 69 6e 6e   from the beginn
22930 69 6e 67 20 74 6f 77 61 72 64 20 74 68 65 20 65  ing toward the e
22940 6e 64 2e 20 20 49 6e 20 6f 74 68 65 72 20 77 6f  nd.  In other wo
22950 72 64 73 2c 20 74 68 65 20 63 75 72 73 6f 72 20  rds, the cursor 
22960 69 73 0a 2a 2a 20 63 6f 6e 66 69 67 75 72 65 64  is.** configured
22970 20 74 6f 20 75 73 65 20 4e 65 78 74 2c 20 6e 6f   to use Next, no
22980 74 20 50 72 65 76 2e 0a 2a 2a 0a 2a 2a 20 53 65  t Prev..**.** Se
22990 65 20 61 6c 73 6f 3a 20 46 6f 75 6e 64 2c 20 4e  e also: Found, N
229a0 6f 74 46 6f 75 6e 64 2c 20 53 65 65 6b 4c 74 2c  otFound, SeekLt,
229b0 20 53 65 65 6b 47 65 2c 20 53 65 65 6b 4c 65 0a   SeekGe, SeekLe.
229c0 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 65  */./* Opcode: Se
229d0 65 6b 4c 54 20 50 31 20 50 32 20 50 33 20 50 34  ekLT P1 P2 P3 P4
229e0 20 2a 20 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a   * .** Synopsis:
229f0 20 6b 65 79 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a   key=r[P3@P4].**
22a00 0a 2a 2a 20 49 66 20 63 75 72 73 6f 72 20 50 31  .** If cursor P1
22a10 20 72 65 66 65 72 73 20 74 6f 20 61 6e 20 53 51   refers to an SQ
22a20 4c 20 74 61 62 6c 65 20 28 42 2d 54 72 65 65 20  L table (B-Tree 
22a30 74 68 61 74 20 75 73 65 73 20 69 6e 74 65 67 65  that uses intege
22a40 72 20 6b 65 79 73 29 2c 20 0a 2a 2a 20 75 73 65  r keys), .** use
22a50 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65   the value in re
22a60 67 69 73 74 65 72 20 50 33 20 61 73 20 61 20 6b  gister P3 as a k
22a70 65 79 2e 20 49 66 20 63 75 72 73 6f 72 20 50 31  ey. If cursor P1
22a80 20 72 65 66 65 72 73 20 0a 2a 2a 20 74 6f 20 61   refers .** to a
22a90 6e 20 53 51 4c 20 69 6e 64 65 78 2c 20 74 68 65  n SQL index, the
22aa0 6e 20 50 33 20 69 73 20 74 68 65 20 66 69 72 73  n P3 is the firs
22ab0 74 20 69 6e 20 61 6e 20 61 72 72 61 79 20 6f 66  t in an array of
22ac0 20 50 34 20 72 65 67 69 73 74 65 72 73 20 0a 2a   P4 registers .*
22ad0 2a 20 74 68 61 74 20 61 72 65 20 75 73 65 64 20  * that are used 
22ae0 61 73 20 61 6e 20 75 6e 70 61 63 6b 65 64 20 69  as an unpacked i
22af0 6e 64 65 78 20 6b 65 79 2e 20 0a 2a 2a 0a 2a 2a  ndex key. .**.**
22b00 20 52 65 70 6f 73 69 74 69 6f 6e 20 63 75 72 73   Reposition curs
22b10 6f 72 20 50 31 20 73 6f 20 74 68 61 74 20 20 69  or P1 so that  i
22b20 74 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 20  t points to the 
22b30 6c 61 72 67 65 73 74 20 65 6e 74 72 79 20 74 68  largest entry th
22b40 61 74 20 0a 2a 2a 20 69 73 20 6c 65 73 73 20 74  at .** is less t
22b50 68 61 6e 20 74 68 65 20 6b 65 79 20 76 61 6c 75  han the key valu
22b60 65 2e 20 49 66 20 74 68 65 72 65 20 61 72 65 20  e. If there are 
22b70 6e 6f 20 72 65 63 6f 72 64 73 20 6c 65 73 73 20  no records less 
22b80 74 68 61 6e 20 0a 2a 2a 20 74 68 65 20 6b 65 79  than .** the key
22b90 20 61 6e 64 20 50 32 20 69 73 20 6e 6f 74 20 7a   and P2 is not z
22ba0 65 72 6f 2c 20 74 68 65 6e 20 6a 75 6d 70 20 74  ero, then jump t
22bb0 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73  o P2..**.** This
22bc0 20 6f 70 63 6f 64 65 20 6c 65 61 76 65 73 20 74   opcode leaves t
22bd0 68 65 20 63 75 72 73 6f 72 20 63 6f 6e 66 69 67  he cursor config
22be0 75 72 65 64 20 74 6f 20 6d 6f 76 65 20 69 6e 20  ured to move in 
22bf0 72 65 76 65 72 73 65 20 6f 72 64 65 72 2c 0a 2a  reverse order,.*
22c00 2a 20 66 72 6f 6d 20 74 68 65 20 65 6e 64 20 74  * from the end t
22c10 6f 77 61 72 64 20 74 68 65 20 62 65 67 69 6e 6e  oward the beginn
22c20 69 6e 67 2e 20 20 49 6e 20 6f 74 68 65 72 20 77  ing.  In other w
22c30 6f 72 64 73 2c 20 74 68 65 20 63 75 72 73 6f 72  ords, the cursor
22c40 20 69 73 0a 2a 2a 20 63 6f 6e 66 69 67 75 72 65   is.** configure
22c50 64 20 74 6f 20 75 73 65 20 50 72 65 76 2c 20 6e  d to use Prev, n
22c60 6f 74 20 4e 65 78 74 2e 0a 2a 2a 0a 2a 2a 20 53  ot Next..**.** S
22c70 65 65 20 61 6c 73 6f 3a 20 46 6f 75 6e 64 2c 20  ee also: Found, 
22c80 4e 6f 74 46 6f 75 6e 64 2c 20 53 65 65 6b 47 74  NotFound, SeekGt
22c90 2c 20 53 65 65 6b 47 65 2c 20 53 65 65 6b 4c 65  , SeekGe, SeekLe
22ca0 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53  .*/./* Opcode: S
22cb0 65 65 6b 4c 45 20 50 31 20 50 32 20 50 33 20 50  eekLE P1 P2 P3 P
22cc0 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  4 *.** Synopsis:
22cd0 20 6b 65 79 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a   key=r[P3@P4].**
22ce0 0a 2a 2a 20 49 66 20 63 75 72 73 6f 72 20 50 31  .** If cursor P1
22cf0 20 72 65 66 65 72 73 20 74 6f 20 61 6e 20 53 51   refers to an SQ
22d00 4c 20 74 61 62 6c 65 20 28 42 2d 54 72 65 65 20  L table (B-Tree 
22d10 74 68 61 74 20 75 73 65 73 20 69 6e 74 65 67 65  that uses intege
22d20 72 20 6b 65 79 73 29 2c 20 0a 2a 2a 20 75 73 65  r keys), .** use
22d30 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65   the value in re
22d40 67 69 73 74 65 72 20 50 33 20 61 73 20 61 20 6b  gister P3 as a k
22d50 65 79 2e 20 49 66 20 63 75 72 73 6f 72 20 50 31  ey. If cursor P1
22d60 20 72 65 66 65 72 73 20 0a 2a 2a 20 74 6f 20 61   refers .** to a
22d70 6e 20 53 51 4c 20 69 6e 64 65 78 2c 20 74 68 65  n SQL index, the
22d80 6e 20 50 33 20 69 73 20 74 68 65 20 66 69 72 73  n P3 is the firs
22d90 74 20 69 6e 20 61 6e 20 61 72 72 61 79 20 6f 66  t in an array of
22da0 20 50 34 20 72 65 67 69 73 74 65 72 73 20 0a 2a   P4 registers .*
22db0 2a 20 74 68 61 74 20 61 72 65 20 75 73 65 64 20  * that are used 
22dc0 61 73 20 61 6e 20 75 6e 70 61 63 6b 65 64 20 69  as an unpacked i
22dd0 6e 64 65 78 20 6b 65 79 2e 20 0a 2a 2a 0a 2a 2a  ndex key. .**.**
22de0 20 52 65 70 6f 73 69 74 69 6f 6e 20 63 75 72 73   Reposition curs
22df0 6f 72 20 50 31 20 73 6f 20 74 68 61 74 20 69 74  or P1 so that it
22e00 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 20 6c   points to the l
22e10 61 72 67 65 73 74 20 65 6e 74 72 79 20 74 68 61  argest entry tha
22e20 74 20 0a 2a 2a 20 69 73 20 6c 65 73 73 20 74 68  t .** is less th
22e30 61 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f 20 74  an or equal to t
22e40 68 65 20 6b 65 79 20 76 61 6c 75 65 2e 20 49 66  he key value. If
22e50 20 74 68 65 72 65 20 61 72 65 20 6e 6f 20 72 65   there are no re
22e60 63 6f 72 64 73 20 0a 2a 2a 20 6c 65 73 73 20 74  cords .** less t
22e70 68 61 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f 20  han or equal to 
22e80 74 68 65 20 6b 65 79 20 61 6e 64 20 50 32 20 69  the key and P2 i
22e90 73 20 6e 6f 74 20 7a 65 72 6f 2c 20 74 68 65 6e  s not zero, then
22ea0 20 6a 75 6d 70 20 74 6f 20 50 32 2e 0a 2a 2a 0a   jump to P2..**.
22eb0 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 6c  ** This opcode l
22ec0 65 61 76 65 73 20 74 68 65 20 63 75 72 73 6f 72  eaves the cursor
22ed0 20 63 6f 6e 66 69 67 75 72 65 64 20 74 6f 20 6d   configured to m
22ee0 6f 76 65 20 69 6e 20 72 65 76 65 72 73 65 20 6f  ove in reverse o
22ef0 72 64 65 72 2c 0a 2a 2a 20 66 72 6f 6d 20 74 68  rder,.** from th
22f00 65 20 65 6e 64 20 74 6f 77 61 72 64 20 74 68 65  e end toward the
22f10 20 62 65 67 69 6e 6e 69 6e 67 2e 20 20 49 6e 20   beginning.  In 
22f20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 74 68 65  other words, the
22f30 20 63 75 72 73 6f 72 20 69 73 0a 2a 2a 20 63 6f   cursor is.** co
22f40 6e 66 69 67 75 72 65 64 20 74 6f 20 75 73 65 20  nfigured to use 
22f50 50 72 65 76 2c 20 6e 6f 74 20 4e 65 78 74 2e 0a  Prev, not Next..
22f60 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 63 75 72  **.** If the cur
22f70 73 6f 72 20 50 31 20 77 61 73 20 6f 70 65 6e 65  sor P1 was opene
22f80 64 20 75 73 69 6e 67 20 74 68 65 20 4f 50 46 4c  d using the OPFL
22f90 41 47 5f 53 45 45 4b 45 51 20 66 6c 61 67 2c 20  AG_SEEKEQ flag, 
22fa0 74 68 65 6e 20 74 68 69 73 0a 2a 2a 20 6f 70 63  then this.** opc
22fb0 6f 64 65 20 77 69 6c 6c 20 61 6c 77 61 79 73 20  ode will always 
22fc0 6c 61 6e 64 20 6f 6e 20 61 20 72 65 63 6f 72 64  land on a record
22fd0 20 74 68 61 74 20 65 71 75 61 6c 6c 79 20 65 71   that equally eq
22fe0 75 61 6c 73 20 74 68 65 20 6b 65 79 2c 20 6f 72  uals the key, or
22ff0 0a 2a 2a 20 65 6c 73 65 20 6a 75 6d 70 20 69 6d  .** else jump im
23000 6d 65 64 69 61 74 65 6c 79 20 74 6f 20 50 32 2e  mediately to P2.
23010 20 20 57 68 65 6e 20 74 68 65 20 63 75 72 73 6f    When the curso
23020 72 20 69 73 20 4f 50 46 4c 41 47 5f 53 45 45 4b  r is OPFLAG_SEEK
23030 45 51 2c 20 74 68 69 73 0a 2a 2a 20 6f 70 63 6f  EQ, this.** opco
23040 64 65 20 6d 75 73 74 20 62 65 20 66 6f 6c 6c 6f  de must be follo
23050 77 65 64 20 62 79 20 61 6e 20 49 64 78 47 45 20  wed by an IdxGE 
23060 6f 70 63 6f 64 65 20 77 69 74 68 20 74 68 65 20  opcode with the 
23070 73 61 6d 65 20 61 72 67 75 6d 65 6e 74 73 2e 0a  same arguments..
23080 2a 2a 20 54 68 65 20 49 64 78 47 45 20 6f 70 63  ** The IdxGE opc
23090 6f 64 65 20 77 69 6c 6c 20 62 65 20 73 6b 69 70  ode will be skip
230a0 70 65 64 20 69 66 20 74 68 69 73 20 6f 70 63 6f  ped if this opco
230b0 64 65 20 73 75 63 63 65 65 64 73 2c 20 62 75 74  de succeeds, but
230c0 20 74 68 65 0a 2a 2a 20 49 64 78 47 45 20 6f 70   the.** IdxGE op
230d0 63 6f 64 65 20 77 69 6c 6c 20 62 65 20 75 73 65  code will be use
230e0 64 20 6f 6e 20 73 75 62 73 65 71 75 65 6e 74 20  d on subsequent 
230f0 6c 6f 6f 70 20 69 74 65 72 61 74 69 6f 6e 73 2e  loop iterations.
23100 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a  .**.** See also:
23110 20 46 6f 75 6e 64 2c 20 4e 6f 74 46 6f 75 6e 64   Found, NotFound
23120 2c 20 53 65 65 6b 47 74 2c 20 53 65 65 6b 47 65  , SeekGt, SeekGe
23130 2c 20 53 65 65 6b 4c 74 0a 2a 2f 0a 63 61 73 65  , SeekLt.*/.case
23140 20 4f 50 5f 53 65 65 6b 4c 54 3a 20 20 20 20 20   OP_SeekLT:     
23150 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33      /* jump, in3
23160 2c 20 67 72 6f 75 70 20 2a 2f 0a 63 61 73 65 20  , group */.case 
23170 4f 50 5f 53 65 65 6b 4c 45 3a 20 20 20 20 20 20  OP_SeekLE:      
23180 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 2c     /* jump, in3,
23190 20 67 72 6f 75 70 20 2a 2f 0a 63 61 73 65 20 4f   group */.case O
231a0 50 5f 53 65 65 6b 47 45 3a 20 20 20 20 20 20 20  P_SeekGE:       
231b0 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 2c 20    /* jump, in3, 
231c0 67 72 6f 75 70 20 2a 2f 0a 63 61 73 65 20 4f 50  group */.case OP
231d0 5f 53 65 65 6b 47 54 3a 20 7b 20 20 20 20 20 20  _SeekGT: {      
231e0 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 2c 20 67   /* jump, in3, g
231f0 72 6f 75 70 20 2a 2f 0a 20 20 69 6e 74 20 72 65  roup */.  int re
23200 73 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  s;           /* 
23210 43 6f 6d 70 61 72 69 73 6f 6e 20 72 65 73 75 6c  Comparison resul
23220 74 20 2a 2f 0a 20 20 69 6e 74 20 6f 63 3b 20 20  t */.  int oc;  
23230 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 70 63            /* Opc
23240 6f 64 65 20 2a 2f 0a 20 20 56 64 62 65 43 75 72  ode */.  VdbeCur
23250 73 6f 72 20 2a 70 43 3b 20 20 20 20 2f 2a 20 54  sor *pC;    /* T
23260 68 65 20 63 75 72 73 6f 72 20 74 6f 20 73 65 65  he cursor to see
23270 6b 20 2a 2f 0a 20 20 55 6e 70 61 63 6b 65 64 52  k */.  UnpackedR
23280 65 63 6f 72 64 20 72 3b 20 20 2f 2a 20 54 68 65  ecord r;  /* The
23290 20 6b 65 79 20 74 6f 20 73 65 65 6b 20 66 6f 72   key to seek for
232a0 20 2a 2f 0a 20 20 69 6e 74 20 6e 46 69 65 6c 64   */.  int nField
232b0 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62  ;        /* Numb
232c0 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 6f 72  er of columns or
232d0 20 66 69 65 6c 64 73 20 69 6e 20 74 68 65 20 6b   fields in the k
232e0 65 79 20 2a 2f 0a 20 20 69 36 34 20 69 4b 65 79  ey */.  i64 iKey
232f0 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68  ;          /* Th
23300 65 20 72 6f 77 69 64 20 77 65 20 61 72 65 20 74  e rowid we are t
23310 6f 20 73 65 65 6b 20 74 6f 20 2a 2f 0a 20 20 69  o seek to */.  i
23320 6e 74 20 65 71 4f 6e 6c 79 3b 20 20 20 20 20 20  nt eqOnly;      
23330 20 20 2f 2a 20 4f 6e 6c 79 20 69 6e 74 65 72 65    /* Only intere
23340 73 74 65 64 20 69 6e 20 3d 3d 20 72 65 73 75 6c  sted in == resul
23350 74 73 20 2a 2f 0a 0a 20 20 61 73 73 65 72 74 28  ts */..  assert(
23360 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70   pOp->p1>=0 && p
23370 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f  Op->p1<p->nCurso
23380 72 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  r );.  assert( p
23390 4f 70 2d 3e 70 32 21 3d 30 20 29 3b 0a 20 20 70  Op->p2!=0 );.  p
233a0 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70  C = p->apCsr[pOp
233b0 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p1];.  assert(
233c0 20 70 43 21 3d 30 20 29 3b 0a 20 20 61 73 73 65   pC!=0 );.  asse
233d0 72 74 28 20 70 43 2d 3e 65 43 75 72 54 79 70 65  rt( pC->eCurType
233e0 3d 3d 43 55 52 54 59 50 45 5f 42 54 52 45 45 20  ==CURTYPE_BTREE 
233f0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 4f 50 5f  );.  assert( OP_
23400 53 65 65 6b 4c 45 20 3d 3d 20 4f 50 5f 53 65 65  SeekLE == OP_See
23410 6b 4c 54 2b 31 20 29 3b 0a 20 20 61 73 73 65 72  kLT+1 );.  asser
23420 74 28 20 4f 50 5f 53 65 65 6b 47 45 20 3d 3d 20  t( OP_SeekGE == 
23430 4f 50 5f 53 65 65 6b 4c 54 2b 32 20 29 3b 0a 20  OP_SeekLT+2 );. 
23440 20 61 73 73 65 72 74 28 20 4f 50 5f 53 65 65 6b   assert( OP_Seek
23450 47 54 20 3d 3d 20 4f 50 5f 53 65 65 6b 4c 54 2b  GT == OP_SeekLT+
23460 33 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  3 );.  assert( p
23470 43 2d 3e 69 73 4f 72 64 65 72 65 64 20 29 3b 0a  C->isOrdered );.
23480 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 75 63    assert( pC->uc
23490 2e 70 43 75 72 73 6f 72 21 3d 30 20 29 3b 0a 20  .pCursor!=0 );. 
234a0 20 6f 63 20 3d 20 70 4f 70 2d 3e 6f 70 63 6f 64   oc = pOp->opcod
234b0 65 3b 0a 20 20 65 71 4f 6e 6c 79 20 3d 20 30 3b  e;.  eqOnly = 0;
234c0 0a 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d  .  pC->nullRow =
234d0 20 30 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54   0;.#ifdef SQLIT
234e0 45 5f 44 45 42 55 47 0a 20 20 70 43 2d 3e 73 65  E_DEBUG.  pC->se
234f0 65 6b 4f 70 20 3d 20 70 4f 70 2d 3e 6f 70 63 6f  ekOp = pOp->opco
23500 64 65 3b 0a 23 65 6e 64 69 66 0a 0a 20 20 70 43  de;.#endif..  pC
23510 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f  ->deferredMoveto
23520 20 3d 20 30 3b 0a 20 20 70 43 2d 3e 63 61 63 68   = 0;.  pC->cach
23530 65 53 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f  eStatus = CACHE_
23540 53 54 41 4c 45 3b 0a 20 20 69 66 28 20 70 43 2d  STALE;.  if( pC-
23550 3e 69 73 54 61 62 6c 65 20 29 7b 0a 20 20 20 20  >isTable ){.    
23560 75 31 36 20 66 6c 61 67 73 33 2c 20 6e 65 77 54  u16 flags3, newT
23570 79 70 65 3b 0a 20 20 20 20 2f 2a 20 54 68 65 20  ype;.    /* The 
23580 42 54 52 45 45 5f 53 45 45 4b 5f 45 51 20 66 6c  BTREE_SEEK_EQ fl
23590 61 67 20 69 73 20 6f 6e 6c 79 20 73 65 74 20 6f  ag is only set o
235a0 6e 20 69 6e 64 65 78 20 63 75 72 73 6f 72 73 20  n index cursors 
235b0 2a 2f 0a 20 20 20 20 61 73 73 65 72 74 28 20 73  */.    assert( s
235c0 71 6c 69 74 65 33 42 74 72 65 65 43 75 72 73 6f  qlite3BtreeCurso
235d0 72 48 61 73 48 69 6e 74 28 70 43 2d 3e 75 63 2e  rHasHint(pC->uc.
235e0 70 43 75 72 73 6f 72 2c 20 42 54 52 45 45 5f 53  pCursor, BTREE_S
235f0 45 45 4b 5f 45 51 29 3d 3d 30 0a 20 20 20 20 20  EEK_EQ)==0.     
23600 20 20 20 20 20 20 20 20 20 7c 7c 20 43 4f 52 52           || CORR
23610 55 50 54 5f 44 42 20 29 3b 0a 0a 20 20 20 20 2f  UPT_DB );..    /
23620 2a 20 54 68 65 20 69 6e 70 75 74 20 76 61 6c 75  * The input valu
23630 65 20 69 6e 20 50 33 20 6d 69 67 68 74 20 62 65  e in P3 might be
23640 20 6f 66 20 61 6e 79 20 74 79 70 65 3a 20 69 6e   of any type: in
23650 74 65 67 65 72 2c 20 72 65 61 6c 2c 20 73 74 72  teger, real, str
23660 69 6e 67 2c 0a 20 20 20 20 2a 2a 20 62 6c 6f 62  ing,.    ** blob
23670 2c 20 6f 72 20 4e 55 4c 4c 2e 20 20 42 75 74 20  , or NULL.  But 
23680 69 74 20 6e 65 65 64 73 20 74 6f 20 62 65 20 61  it needs to be a
23690 6e 20 69 6e 74 65 67 65 72 20 62 65 66 6f 72 65  n integer before
236a0 20 77 65 20 63 61 6e 20 64 6f 0a 20 20 20 20 2a   we can do.    *
236b0 2a 20 74 68 65 20 73 65 65 6b 2c 20 73 6f 20 63  * the seek, so c
236c0 6f 6e 76 65 72 74 20 69 74 2e 20 2a 2f 0a 20 20  onvert it. */.  
236d0 20 20 70 49 6e 33 20 3d 20 26 61 4d 65 6d 5b 70    pIn3 = &aMem[p
236e0 4f 70 2d 3e 70 33 5d 3b 0a 20 20 20 20 66 6c 61  Op->p3];.    fla
236f0 67 73 33 20 3d 20 70 49 6e 33 2d 3e 66 6c 61 67  gs3 = pIn3->flag
23700 73 3b 0a 20 20 20 20 69 66 28 20 28 66 6c 61 67  s;.    if( (flag
23710 73 33 20 26 20 28 4d 45 4d 5f 49 6e 74 7c 4d 45  s3 & (MEM_Int|ME
23720 4d 5f 52 65 61 6c 7c 4d 45 4d 5f 49 6e 74 52 65  M_Real|MEM_IntRe
23730 61 6c 7c 4d 45 4d 5f 53 74 72 29 29 3d 3d 4d 45  al|MEM_Str))==ME
23740 4d 5f 53 74 72 20 29 7b 0a 20 20 20 20 20 20 61  M_Str ){.      a
23750 70 70 6c 79 4e 75 6d 65 72 69 63 41 66 66 69 6e  pplyNumericAffin
23760 69 74 79 28 70 49 6e 33 2c 20 30 29 3b 0a 20 20  ity(pIn3, 0);.  
23770 20 20 7d 0a 20 20 20 20 69 4b 65 79 20 3d 20 73    }.    iKey = s
23780 71 6c 69 74 65 33 56 64 62 65 49 6e 74 56 61 6c  qlite3VdbeIntVal
23790 75 65 28 70 49 6e 33 29 3b 20 2f 2a 20 47 65 74  ue(pIn3); /* Get
237a0 20 74 68 65 20 69 6e 74 65 67 65 72 20 6b 65 79   the integer key
237b0 20 76 61 6c 75 65 20 2a 2f 0a 20 20 20 20 6e 65   value */.    ne
237c0 77 54 79 70 65 20 3d 20 70 49 6e 33 2d 3e 66 6c  wType = pIn3->fl
237d0 61 67 73 3b 20 2f 2a 20 52 65 63 6f 72 64 20 74  ags; /* Record t
237e0 68 65 20 74 79 70 65 20 61 66 74 65 72 20 61 70  he type after ap
237f0 70 6c 79 69 6e 67 20 6e 75 6d 65 72 69 63 20 61  plying numeric a
23800 66 66 69 6e 69 74 79 20 2a 2f 0a 20 20 20 20 70  ffinity */.    p
23810 49 6e 33 2d 3e 66 6c 61 67 73 20 3d 20 66 6c 61  In3->flags = fla
23820 67 73 33 3b 20 20 2f 2a 20 42 75 74 20 63 6f 6e  gs3;  /* But con
23830 76 65 72 74 20 74 68 65 20 74 79 70 65 20 62 61  vert the type ba
23840 63 6b 20 74 6f 20 69 74 73 20 6f 72 69 67 69 6e  ck to its origin
23850 61 6c 20 2a 2f 0a 0a 20 20 20 20 2f 2a 20 49 66  al */..    /* If
23860 20 74 68 65 20 50 33 20 76 61 6c 75 65 20 63 6f   the P3 value co
23870 75 6c 64 20 6e 6f 74 20 62 65 20 63 6f 6e 76 65  uld not be conve
23880 72 74 65 64 20 69 6e 74 6f 20 61 6e 20 69 6e 74  rted into an int
23890 65 67 65 72 20 77 69 74 68 6f 75 74 0a 20 20 20  eger without.   
238a0 20 2a 2a 20 6c 6f 73 73 20 6f 66 20 69 6e 66 6f   ** loss of info
238b0 72 6d 61 74 69 6f 6e 2c 20 74 68 65 6e 20 73 70  rmation, then sp
238c0 65 63 69 61 6c 20 70 72 6f 63 65 73 73 69 6e 67  ecial processing
238d0 20 69 73 20 72 65 71 75 69 72 65 64 2e 2e 2e 20   is required... 
238e0 2a 2f 0a 20 20 20 20 69 66 28 20 28 6e 65 77 54  */.    if( (newT
238f0 79 70 65 20 26 20 28 4d 45 4d 5f 49 6e 74 7c 4d  ype & (MEM_Int|M
23900 45 4d 5f 49 6e 74 52 65 61 6c 29 29 3d 3d 30 20  EM_IntReal))==0 
23910 29 7b 0a 20 20 20 20 20 20 69 66 28 20 28 6e 65  ){.      if( (ne
23920 77 54 79 70 65 20 26 20 4d 45 4d 5f 52 65 61 6c  wType & MEM_Real
23930 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20  )==0 ){.        
23940 69 66 28 20 28 6e 65 77 54 79 70 65 20 26 20 4d  if( (newType & M
23950 45 4d 5f 4e 75 6c 6c 29 20 7c 7c 20 6f 63 3e 3d  EM_Null) || oc>=
23960 4f 50 5f 53 65 65 6b 47 45 20 29 7b 0a 20 20 20  OP_SeekGE ){.   
23970 20 20 20 20 20 20 20 56 64 62 65 42 72 61 6e 63         VdbeBranc
23980 68 54 61 6b 65 6e 28 31 2c 32 29 3b 0a 20 20 20  hTaken(1,2);.   
23990 20 20 20 20 20 20 20 67 6f 74 6f 20 6a 75 6d 70         goto jump
239a0 5f 74 6f 5f 70 32 3b 0a 20 20 20 20 20 20 20 20  _to_p2;.        
239b0 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20  }else{.         
239c0 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
239d0 65 65 4c 61 73 74 28 70 43 2d 3e 75 63 2e 70 43  eeLast(pC->uc.pC
239e0 75 72 73 6f 72 2c 20 26 72 65 73 29 3b 0a 20 20  ursor, &res);.  
239f0 20 20 20 20 20 20 20 20 69 66 28 20 72 63 21 3d          if( rc!=
23a00 53 51 4c 49 54 45 5f 4f 4b 20 29 20 67 6f 74 6f  SQLITE_OK ) goto
23a10 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
23a20 72 6f 72 3b 0a 20 20 20 20 20 20 20 20 20 20 67  ror;.          g
23a30 6f 74 6f 20 73 65 65 6b 5f 6e 6f 74 5f 66 6f 75  oto seek_not_fou
23a40 6e 64 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20  nd;.        }.  
23a50 20 20 20 20 7d 65 6c 73 65 0a 0a 20 20 20 20 20      }else..     
23a60 20 2f 2a 20 49 66 20 74 68 65 20 61 70 70 72 6f   /* If the appro
23a70 78 69 6d 61 74 69 6f 6e 20 69 4b 65 79 20 69 73  ximation iKey is
23a80 20 6c 61 72 67 65 72 20 74 68 61 6e 20 74 68 65   larger than the
23a90 20 61 63 74 75 61 6c 20 72 65 61 6c 20 73 65 61   actual real sea
23aa0 72 63 68 0a 20 20 20 20 20 20 2a 2a 20 74 65 72  rch.      ** ter
23ab0 6d 2c 20 73 75 62 73 74 69 74 75 74 65 20 3e 3d  m, substitute >=
23ac0 20 66 6f 72 20 3e 20 61 6e 64 20 3c 20 66 6f 72   for > and < for
23ad0 20 3c 3d 2e 20 65 2e 67 2e 20 69 66 20 74 68 65   <=. e.g. if the
23ae0 20 73 65 61 72 63 68 20 74 65 72 6d 0a 20 20 20   search term.   
23af0 20 20 20 2a 2a 20 69 73 20 34 2e 39 20 61 6e 64     ** is 4.9 and
23b00 20 74 68 65 20 69 6e 74 65 67 65 72 20 61 70 70   the integer app
23b10 72 6f 78 69 6d 61 74 69 6f 6e 20 35 3a 0a 20 20  roximation 5:.  
23b20 20 20 20 20 2a 2a 0a 20 20 20 20 20 20 2a 2a 20      **.      ** 
23b30 20 20 20 20 20 20 20 28 78 20 3e 20 20 34 2e 39         (x >  4.9
23b40 29 20 20 20 20 2d 3e 20 20 20 20 20 28 78 20 3e  )    ->     (x >
23b50 3d 20 35 29 0a 20 20 20 20 20 20 2a 2a 20 20 20  = 5).      **   
23b60 20 20 20 20 20 28 78 20 3c 3d 20 34 2e 39 29 20       (x <= 4.9) 
23b70 20 20 20 2d 3e 20 20 20 20 20 28 78 20 3c 20 20     ->     (x <  
23b80 35 29 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20  5).      */.    
23b90 20 20 69 66 28 20 70 49 6e 33 2d 3e 75 2e 72 3c    if( pIn3->u.r<
23ba0 28 64 6f 75 62 6c 65 29 69 4b 65 79 20 29 7b 0a  (double)iKey ){.
23bb0 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20          assert( 
23bc0 4f 50 5f 53 65 65 6b 47 45 3d 3d 28 4f 50 5f 53  OP_SeekGE==(OP_S
23bd0 65 65 6b 47 54 2d 31 29 20 29 3b 0a 20 20 20 20  eekGT-1) );.    
23be0 20 20 20 20 61 73 73 65 72 74 28 20 4f 50 5f 53      assert( OP_S
23bf0 65 65 6b 4c 54 3d 3d 28 4f 50 5f 53 65 65 6b 4c  eekLT==(OP_SeekL
23c00 45 2d 31 29 20 29 3b 0a 20 20 20 20 20 20 20 20  E-1) );.        
23c10 61 73 73 65 72 74 28 20 28 4f 50 5f 53 65 65 6b  assert( (OP_Seek
23c20 4c 45 20 26 20 30 78 30 30 30 31 29 3d 3d 28 4f  LE & 0x0001)==(O
23c30 50 5f 53 65 65 6b 47 54 20 26 20 30 78 30 30 30  P_SeekGT & 0x000
23c40 31 29 20 29 3b 0a 20 20 20 20 20 20 20 20 69 66  1) );.        if
23c50 28 20 28 6f 63 20 26 20 30 78 30 30 30 31 29 3d  ( (oc & 0x0001)=
23c60 3d 28 4f 50 5f 53 65 65 6b 47 54 20 26 20 30 78  =(OP_SeekGT & 0x
23c70 30 30 30 31 29 20 29 20 6f 63 2d 2d 3b 0a 20 20  0001) ) oc--;.  
23c80 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 2f 2a 20      }..      /* 
23c90 49 66 20 74 68 65 20 61 70 70 72 6f 78 69 6d 61  If the approxima
23ca0 74 69 6f 6e 20 69 4b 65 79 20 69 73 20 73 6d 61  tion iKey is sma
23cb0 6c 6c 65 72 20 74 68 61 6e 20 74 68 65 20 61 63  ller than the ac
23cc0 74 75 61 6c 20 72 65 61 6c 20 73 65 61 72 63 68  tual real search
23cd0 0a 20 20 20 20 20 20 2a 2a 20 74 65 72 6d 2c 20  .      ** term, 
23ce0 73 75 62 73 74 69 74 75 74 65 20 3c 3d 20 66 6f  substitute <= fo
23cf0 72 20 3c 20 61 6e 64 20 3e 20 66 6f 72 20 3e 3d  r < and > for >=
23d00 2e 20 20 2a 2f 0a 20 20 20 20 20 20 65 6c 73 65  .  */.      else
23d10 20 69 66 28 20 70 49 6e 33 2d 3e 75 2e 72 3e 28   if( pIn3->u.r>(
23d20 64 6f 75 62 6c 65 29 69 4b 65 79 20 29 7b 0a 20  double)iKey ){. 
23d30 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20 4f         assert( O
23d40 50 5f 53 65 65 6b 4c 45 3d 3d 28 4f 50 5f 53 65  P_SeekLE==(OP_Se
23d50 65 6b 4c 54 2b 31 29 20 29 3b 0a 20 20 20 20 20  ekLT+1) );.     
23d60 20 20 20 61 73 73 65 72 74 28 20 4f 50 5f 53 65     assert( OP_Se
23d70 65 6b 47 54 3d 3d 28 4f 50 5f 53 65 65 6b 47 45  ekGT==(OP_SeekGE
23d80 2b 31 29 20 29 3b 0a 20 20 20 20 20 20 20 20 61  +1) );.        a
23d90 73 73 65 72 74 28 20 28 4f 50 5f 53 65 65 6b 4c  ssert( (OP_SeekL
23da0 54 20 26 20 30 78 30 30 30 31 29 3d 3d 28 4f 50  T & 0x0001)==(OP
23db0 5f 53 65 65 6b 47 45 20 26 20 30 78 30 30 30 31  _SeekGE & 0x0001
23dc0 29 20 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28  ) );.        if(
23dd0 20 28 6f 63 20 26 20 30 78 30 30 30 31 29 3d 3d   (oc & 0x0001)==
23de0 28 4f 50 5f 53 65 65 6b 4c 54 20 26 20 30 78 30  (OP_SeekLT & 0x0
23df0 30 30 31 29 20 29 20 6f 63 2b 2b 3b 0a 20 20 20  001) ) oc++;.   
23e00 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 72     }.    }.    r
23e10 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
23e20 4d 6f 76 65 74 6f 55 6e 70 61 63 6b 65 64 28 70  MovetoUnpacked(p
23e30 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 2c 20 30  C->uc.pCursor, 0
23e40 2c 20 28 75 36 34 29 69 4b 65 79 2c 20 30 2c 20  , (u64)iKey, 0, 
23e50 26 72 65 73 29 3b 0a 20 20 20 20 70 43 2d 3e 6d  &res);.    pC->m
23e60 6f 76 65 74 6f 54 61 72 67 65 74 20 3d 20 69 4b  ovetoTarget = iK
23e70 65 79 3b 20 20 2f 2a 20 55 73 65 64 20 62 79 20  ey;  /* Used by 
23e80 4f 50 5f 44 65 6c 65 74 65 20 2a 2f 0a 20 20 20  OP_Delete */.   
23e90 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f   if( rc!=SQLITE_
23ea0 4f 4b 20 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f  OK ){.      goto
23eb0 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
23ec0 72 6f 72 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c  ror;.    }.  }el
23ed0 73 65 7b 0a 20 20 20 20 2f 2a 20 46 6f 72 20 61  se{.    /* For a
23ee0 20 63 75 72 73 6f 72 20 77 69 74 68 20 74 68 65   cursor with the
23ef0 20 42 54 52 45 45 5f 53 45 45 4b 5f 45 51 20 68   BTREE_SEEK_EQ h
23f00 69 6e 74 2c 20 6f 6e 6c 79 20 74 68 65 20 4f 50  int, only the OP
23f10 5f 53 65 65 6b 47 45 20 61 6e 64 0a 20 20 20 20  _SeekGE and.    
23f20 2a 2a 20 4f 50 5f 53 65 65 6b 4c 45 20 6f 70 63  ** OP_SeekLE opc
23f30 6f 64 65 73 20 61 72 65 20 61 6c 6c 6f 77 65 64  odes are allowed
23f40 2c 20 61 6e 64 20 74 68 65 73 65 20 6d 75 73 74  , and these must
23f50 20 62 65 20 69 6d 6d 65 64 69 61 74 65 6c 79 20   be immediately 
23f60 66 6f 6c 6c 6f 77 65 64 0a 20 20 20 20 2a 2a 20  followed.    ** 
23f70 62 79 20 61 6e 20 4f 50 5f 49 64 78 47 54 20 6f  by an OP_IdxGT o
23f80 72 20 4f 50 5f 49 64 78 4c 54 20 6f 70 63 6f 64  r OP_IdxLT opcod
23f90 65 2c 20 72 65 73 70 65 63 74 69 76 65 6c 79 2c  e, respectively,
23fa0 20 77 69 74 68 20 74 68 65 20 73 61 6d 65 20 6b   with the same k
23fb0 65 79 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 69  ey..    */.    i
23fc0 66 28 20 73 71 6c 69 74 65 33 42 74 72 65 65 43  f( sqlite3BtreeC
23fd0 75 72 73 6f 72 48 61 73 48 69 6e 74 28 70 43 2d  ursorHasHint(pC-
23fe0 3e 75 63 2e 70 43 75 72 73 6f 72 2c 20 42 54 52  >uc.pCursor, BTR
23ff0 45 45 5f 53 45 45 4b 5f 45 51 29 20 29 7b 0a 20  EE_SEEK_EQ) ){. 
24000 20 20 20 20 20 65 71 4f 6e 6c 79 20 3d 20 31 3b       eqOnly = 1;
24010 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70  .      assert( p
24020 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 53  Op->opcode==OP_S
24030 65 65 6b 47 45 20 7c 7c 20 70 4f 70 2d 3e 6f 70  eekGE || pOp->op
24040 63 6f 64 65 3d 3d 4f 50 5f 53 65 65 6b 4c 45 20  code==OP_SeekLE 
24050 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  );.      assert(
24060 20 70 4f 70 5b 31 5d 2e 6f 70 63 6f 64 65 3d 3d   pOp[1].opcode==
24070 4f 50 5f 49 64 78 4c 54 20 7c 7c 20 70 4f 70 5b  OP_IdxLT || pOp[
24080 31 5d 2e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 64  1].opcode==OP_Id
24090 78 47 54 20 29 3b 0a 20 20 20 20 20 20 61 73 73  xGT );.      ass
240a0 65 72 74 28 20 70 4f 70 5b 31 5d 2e 70 31 3d 3d  ert( pOp[1].p1==
240b0 70 4f 70 5b 30 5d 2e 70 31 20 29 3b 0a 20 20 20  pOp[0].p1 );.   
240c0 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 5b 31     assert( pOp[1
240d0 5d 2e 70 32 3d 3d 70 4f 70 5b 30 5d 2e 70 32 20  ].p2==pOp[0].p2 
240e0 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  );.      assert(
240f0 20 70 4f 70 5b 31 5d 2e 70 33 3d 3d 70 4f 70 5b   pOp[1].p3==pOp[
24100 30 5d 2e 70 33 20 29 3b 0a 20 20 20 20 20 20 61  0].p3 );.      a
24110 73 73 65 72 74 28 20 70 4f 70 5b 31 5d 2e 70 34  ssert( pOp[1].p4
24120 2e 69 3d 3d 70 4f 70 5b 30 5d 2e 70 34 2e 69 20  .i==pOp[0].p4.i 
24130 29 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 6e 46  );.    }..    nF
24140 69 65 6c 64 20 3d 20 70 4f 70 2d 3e 70 34 2e 69  ield = pOp->p4.i
24150 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4f  ;.    assert( pO
24160 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e  p->p4type==P4_IN
24170 54 33 32 20 29 3b 0a 20 20 20 20 61 73 73 65 72  T32 );.    asser
24180 74 28 20 6e 46 69 65 6c 64 3e 30 20 29 3b 0a 20  t( nField>0 );. 
24190 20 20 20 72 2e 70 4b 65 79 49 6e 66 6f 20 3d 20     r.pKeyInfo = 
241a0 70 43 2d 3e 70 4b 65 79 49 6e 66 6f 3b 0a 20 20  pC->pKeyInfo;.  
241b0 20 20 72 2e 6e 46 69 65 6c 64 20 3d 20 28 75 31    r.nField = (u1
241c0 36 29 6e 46 69 65 6c 64 3b 0a 0a 20 20 20 20 2f  6)nField;..    /
241d0 2a 20 54 68 65 20 6e 65 78 74 20 6c 69 6e 65 20  * The next line 
241e0 6f 66 20 63 6f 64 65 20 63 6f 6d 70 75 74 65 73  of code computes
241f0 20 61 73 20 66 6f 6c 6c 6f 77 73 2c 20 6f 6e 6c   as follows, onl
24200 79 20 66 61 73 74 65 72 3a 0a 20 20 20 20 2a 2a  y faster:.    **
24210 20 20 20 69 66 28 20 6f 63 3d 3d 4f 50 5f 53 65     if( oc==OP_Se
24220 65 6b 47 54 20 7c 7c 20 6f 63 3d 3d 4f 50 5f 53  ekGT || oc==OP_S
24230 65 65 6b 4c 45 20 29 7b 0a 20 20 20 20 2a 2a 20  eekLE ){.    ** 
24240 20 20 20 20 72 2e 64 65 66 61 75 6c 74 5f 72 63      r.default_rc
24250 20 3d 20 2d 31 3b 0a 20 20 20 20 2a 2a 20 20 20   = -1;.    **   
24260 7d 65 6c 73 65 7b 0a 20 20 20 20 2a 2a 20 20 20  }else{.    **   
24270 20 20 72 2e 64 65 66 61 75 6c 74 5f 72 63 20 3d    r.default_rc =
24280 20 2b 31 3b 0a 20 20 20 20 2a 2a 20 20 20 7d 0a   +1;.    **   }.
24290 20 20 20 20 2a 2f 0a 20 20 20 20 72 2e 64 65 66      */.    r.def
242a0 61 75 6c 74 5f 72 63 20 3d 20 28 28 31 20 26 20  ault_rc = ((1 & 
242b0 28 6f 63 20 2d 20 4f 50 5f 53 65 65 6b 4c 54 29  (oc - OP_SeekLT)
242c0 29 20 3f 20 2d 31 20 3a 20 2b 31 29 3b 0a 20 20  ) ? -1 : +1);.  
242d0 20 20 61 73 73 65 72 74 28 20 6f 63 21 3d 4f 50    assert( oc!=OP
242e0 5f 53 65 65 6b 47 54 20 7c 7c 20 72 2e 64 65 66  _SeekGT || r.def
242f0 61 75 6c 74 5f 72 63 3d 3d 2d 31 20 29 3b 0a 20  ault_rc==-1 );. 
24300 20 20 20 61 73 73 65 72 74 28 20 6f 63 21 3d 4f     assert( oc!=O
24310 50 5f 53 65 65 6b 4c 45 20 7c 7c 20 72 2e 64 65  P_SeekLE || r.de
24320 66 61 75 6c 74 5f 72 63 3d 3d 2d 31 20 29 3b 0a  fault_rc==-1 );.
24330 20 20 20 20 61 73 73 65 72 74 28 20 6f 63 21 3d      assert( oc!=
24340 4f 50 5f 53 65 65 6b 47 45 20 7c 7c 20 72 2e 64  OP_SeekGE || r.d
24350 65 66 61 75 6c 74 5f 72 63 3d 3d 2b 31 20 29 3b  efault_rc==+1 );
24360 0a 20 20 20 20 61 73 73 65 72 74 28 20 6f 63 21  .    assert( oc!
24370 3d 4f 50 5f 53 65 65 6b 4c 54 20 7c 7c 20 72 2e  =OP_SeekLT || r.
24380 64 65 66 61 75 6c 74 5f 72 63 3d 3d 2b 31 20 29  default_rc==+1 )
24390 3b 0a 0a 20 20 20 20 72 2e 61 4d 65 6d 20 3d 20  ;..    r.aMem = 
243a0 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a  &aMem[pOp->p3];.
243b0 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45  #ifdef SQLITE_DE
243c0 42 55 47 0a 20 20 20 20 7b 20 69 6e 74 20 69 3b  BUG.    { int i;
243d0 20 66 6f 72 28 69 3d 30 3b 20 69 3c 72 2e 6e 46   for(i=0; i<r.nF
243e0 69 65 6c 64 3b 20 69 2b 2b 29 20 61 73 73 65 72  ield; i++) asser
243f0 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 26 72  t( memIsValid(&r
24400 2e 61 4d 65 6d 5b 69 5d 29 20 29 3b 20 7d 0a 23  .aMem[i]) ); }.#
24410 65 6e 64 69 66 0a 20 20 20 20 72 2e 65 71 53 65  endif.    r.eqSe
24420 65 6e 20 3d 20 30 3b 0a 20 20 20 20 72 63 20 3d  en = 0;.    rc =
24430 20 73 71 6c 69 74 65 33 42 74 72 65 65 4d 6f 76   sqlite3BtreeMov
24440 65 74 6f 55 6e 70 61 63 6b 65 64 28 70 43 2d 3e  etoUnpacked(pC->
24450 75 63 2e 70 43 75 72 73 6f 72 2c 20 26 72 2c 20  uc.pCursor, &r, 
24460 30 2c 20 30 2c 20 26 72 65 73 29 3b 0a 20 20 20  0, 0, &res);.   
24470 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f   if( rc!=SQLITE_
24480 4f 4b 20 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f  OK ){.      goto
24490 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
244a0 72 6f 72 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69  ror;.    }.    i
244b0 66 28 20 65 71 4f 6e 6c 79 20 26 26 20 72 2e 65  f( eqOnly && r.e
244c0 71 53 65 65 6e 3d 3d 30 20 29 7b 0a 20 20 20 20  qSeen==0 ){.    
244d0 20 20 61 73 73 65 72 74 28 20 72 65 73 21 3d 30    assert( res!=0
244e0 20 29 3b 0a 20 20 20 20 20 20 67 6f 74 6f 20 73   );.      goto s
244f0 65 65 6b 5f 6e 6f 74 5f 66 6f 75 6e 64 3b 0a 20  eek_not_found;. 
24500 20 20 20 7d 0a 20 20 7d 0a 23 69 66 64 65 66 20     }.  }.#ifdef 
24510 53 51 4c 49 54 45 5f 54 45 53 54 0a 20 20 73 71  SQLITE_TEST.  sq
24520 6c 69 74 65 33 5f 73 65 61 72 63 68 5f 63 6f 75  lite3_search_cou
24530 6e 74 2b 2b 3b 0a 23 65 6e 64 69 66 0a 20 20 69  nt++;.#endif.  i
24540 66 28 20 6f 63 3e 3d 4f 50 5f 53 65 65 6b 47 45  f( oc>=OP_SeekGE
24550 20 29 7b 20 20 61 73 73 65 72 74 28 20 6f 63 3d   ){  assert( oc=
24560 3d 4f 50 5f 53 65 65 6b 47 45 20 7c 7c 20 6f 63  =OP_SeekGE || oc
24570 3d 3d 4f 50 5f 53 65 65 6b 47 54 20 29 3b 0a 20  ==OP_SeekGT );. 
24580 20 20 20 69 66 28 20 72 65 73 3c 30 20 7c 7c 20     if( res<0 || 
24590 28 72 65 73 3d 3d 30 20 26 26 20 6f 63 3d 3d 4f  (res==0 && oc==O
245a0 50 5f 53 65 65 6b 47 54 29 20 29 7b 0a 20 20 20  P_SeekGT) ){.   
245b0 20 20 20 72 65 73 20 3d 20 30 3b 0a 20 20 20 20     res = 0;.    
245c0 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
245d0 72 65 65 4e 65 78 74 28 70 43 2d 3e 75 63 2e 70  reeNext(pC->uc.p
245e0 43 75 72 73 6f 72 2c 20 30 29 3b 0a 20 20 20 20  Cursor, 0);.    
245f0 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45    if( rc!=SQLITE
24600 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 69  _OK ){.        i
24610 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 44 4f  f( rc==SQLITE_DO
24620 4e 45 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  NE ){.          
24630 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a  rc = SQLITE_OK;.
24640 20 20 20 20 20 20 20 20 20 20 72 65 73 20 3d 20            res = 
24650 31 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c 73 65  1;.        }else
24660 7b 0a 20 20 20 20 20 20 20 20 20 20 67 6f 74 6f  {.          goto
24670 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
24680 72 6f 72 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20  ror;.        }. 
24690 20 20 20 20 20 7d 0a 20 20 20 20 7d 65 6c 73 65       }.    }else
246a0 7b 0a 20 20 20 20 20 20 72 65 73 20 3d 20 30 3b  {.      res = 0;
246b0 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a  .    }.  }else{.
246c0 20 20 20 20 61 73 73 65 72 74 28 20 6f 63 3d 3d      assert( oc==
246d0 4f 50 5f 53 65 65 6b 4c 54 20 7c 7c 20 6f 63 3d  OP_SeekLT || oc=
246e0 3d 4f 50 5f 53 65 65 6b 4c 45 20 29 3b 0a 20 20  =OP_SeekLE );.  
246f0 20 20 69 66 28 20 72 65 73 3e 30 20 7c 7c 20 28    if( res>0 || (
24700 72 65 73 3d 3d 30 20 26 26 20 6f 63 3d 3d 4f 50  res==0 && oc==OP
24710 5f 53 65 65 6b 4c 54 29 20 29 7b 0a 20 20 20 20  _SeekLT) ){.    
24720 20 20 72 65 73 20 3d 20 30 3b 0a 20 20 20 20 20    res = 0;.     
24730 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
24740 65 65 50 72 65 76 69 6f 75 73 28 70 43 2d 3e 75  eePrevious(pC->u
24750 63 2e 70 43 75 72 73 6f 72 2c 20 30 29 3b 0a 20  c.pCursor, 0);. 
24760 20 20 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c       if( rc!=SQL
24770 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20  ITE_OK ){.      
24780 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45    if( rc==SQLITE
24790 5f 44 4f 4e 45 20 29 7b 0a 20 20 20 20 20 20 20  _DONE ){.       
247a0 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f     rc = SQLITE_O
247b0 4b 3b 0a 20 20 20 20 20 20 20 20 20 20 72 65 73  K;.          res
247c0 20 3d 20 31 3b 0a 20 20 20 20 20 20 20 20 7d 65   = 1;.        }e
247d0 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20 67  lse{.          g
247e0 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
247f0 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 20 20  _error;.        
24800 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 65  }.      }.    }e
24810 6c 73 65 7b 0a 20 20 20 20 20 20 2f 2a 20 72 65  lse{.      /* re
24820 73 20 6d 69 67 68 74 20 62 65 20 6e 65 67 61 74  s might be negat
24830 69 76 65 20 62 65 63 61 75 73 65 20 74 68 65 20  ive because the 
24840 74 61 62 6c 65 20 69 73 20 65 6d 70 74 79 2e 20  table is empty. 
24850 20 43 68 65 63 6b 20 74 6f 0a 20 20 20 20 20 20   Check to.      
24860 2a 2a 20 73 65 65 20 69 66 20 74 68 69 73 20 69  ** see if this i
24870 73 20 74 68 65 20 63 61 73 65 2e 0a 20 20 20 20  s the case..    
24880 20 20 2a 2f 0a 20 20 20 20 20 20 72 65 73 20 3d    */.      res =
24890 20 73 71 6c 69 74 65 33 42 74 72 65 65 45 6f 66   sqlite3BtreeEof
248a0 28 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 29  (pC->uc.pCursor)
248b0 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 73 65 65 6b  ;.    }.  }.seek
248c0 5f 6e 6f 74 5f 66 6f 75 6e 64 3a 0a 20 20 61 73  _not_found:.  as
248d0 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e 30 20  sert( pOp->p2>0 
248e0 29 3b 0a 20 20 56 64 62 65 42 72 61 6e 63 68 54  );.  VdbeBranchT
248f0 61 6b 65 6e 28 72 65 73 21 3d 30 2c 32 29 3b 0a  aken(res!=0,2);.
24900 20 20 69 66 28 20 72 65 73 20 29 7b 0a 20 20 20    if( res ){.   
24910 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32   goto jump_to_p2
24920 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 65 71  ;.  }else if( eq
24930 4f 6e 6c 79 20 29 7b 0a 20 20 20 20 61 73 73 65  Only ){.    asse
24940 72 74 28 20 70 4f 70 5b 31 5d 2e 6f 70 63 6f 64  rt( pOp[1].opcod
24950 65 3d 3d 4f 50 5f 49 64 78 4c 54 20 7c 7c 20 70  e==OP_IdxLT || p
24960 4f 70 5b 31 5d 2e 6f 70 63 6f 64 65 3d 3d 4f 50  Op[1].opcode==OP
24970 5f 49 64 78 47 54 20 29 3b 0a 20 20 20 20 70 4f  _IdxGT );.    pO
24980 70 2b 2b 3b 20 2f 2a 20 53 6b 69 70 20 74 68 65  p++; /* Skip the
24990 20 4f 50 5f 49 64 78 4c 74 20 6f 72 20 4f 50 5f   OP_IdxLt or OP_
249a0 49 64 78 47 54 20 74 68 61 74 20 66 6f 6c 6c 6f  IdxGT that follo
249b0 77 73 20 2a 2f 0a 20 20 7d 0a 20 20 62 72 65 61  ws */.  }.  brea
249c0 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
249d0 20 53 65 65 6b 48 69 74 20 50 31 20 50 32 20 2a   SeekHit P1 P2 *
249e0 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73   * *.** Synopsis
249f0 3a 20 73 65 65 6b 48 69 74 3d 50 32 0a 2a 2a 0a  : seekHit=P2.**.
24a00 2a 2a 20 53 65 74 20 74 68 65 20 73 65 65 6b 48  ** Set the seekH
24a10 69 74 20 66 6c 61 67 20 6f 6e 20 63 75 72 73 6f  it flag on curso
24a20 72 20 50 31 20 74 6f 20 74 68 65 20 76 61 6c 75  r P1 to the valu
24a30 65 20 69 6e 20 50 32 2e 0a 2a 2a 20 54 68 65 20  e in P2..** The 
24a40 73 65 65 6b 48 69 74 20 66 6c 61 67 20 69 73 20  seekHit flag is 
24a50 75 73 65 64 20 62 79 20 74 68 65 20 49 66 4e 6f  used by the IfNo
24a60 48 6f 70 65 20 6f 70 63 6f 64 65 2e 0a 2a 2a 0a  Hope opcode..**.
24a70 2a 2a 20 50 31 20 6d 75 73 74 20 62 65 20 61 20  ** P1 must be a 
24a80 76 61 6c 69 64 20 62 2d 74 72 65 65 20 63 75 72  valid b-tree cur
24a90 73 6f 72 2e 20 20 50 32 20 6d 75 73 74 20 62 65  sor.  P2 must be
24aa0 20 61 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65   a boolean value
24ab0 2c 0a 2a 2a 20 65 69 74 68 65 72 20 30 20 6f 72  ,.** either 0 or
24ac0 20 31 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53   1..*/.case OP_S
24ad0 65 65 6b 48 69 74 3a 20 7b 0a 20 20 56 64 62 65  eekHit: {.  Vdbe
24ae0 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 61 73  Cursor *pC;.  as
24af0 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30  sert( pOp->p1>=0
24b00 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e   && pOp->p1<p->n
24b10 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d  Cursor );.  pC =
24b20 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70   p->apCsr[pOp->p
24b30 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43  1];.  assert( pC
24b40 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  !=0 );.  assert(
24b50 20 70 4f 70 2d 3e 70 32 3d 3d 30 20 7c 7c 20 70   pOp->p2==0 || p
24b60 4f 70 2d 3e 70 32 3d 3d 31 20 29 3b 0a 20 20 70  Op->p2==1 );.  p
24b70 43 2d 3e 73 65 65 6b 48 69 74 20 3d 20 70 4f 70  C->seekHit = pOp
24b80 2d 3e 70 32 20 26 20 31 3b 0a 20 20 62 72 65 61  ->p2 & 1;.  brea
24b90 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
24ba0 20 46 6f 75 6e 64 20 50 31 20 50 32 20 50 33 20   Found P1 P2 P3 
24bb0 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73  P4 *.** Synopsis
24bc0 3a 20 6b 65 79 3d 72 5b 50 33 40 50 34 5d 0a 2a  : key=r[P3@P4].*
24bd0 2a 0a 2a 2a 20 49 66 20 50 34 3d 3d 30 20 74 68  *.** If P4==0 th
24be0 65 6e 20 72 65 67 69 73 74 65 72 20 50 33 20 68  en register P3 h
24bf0 6f 6c 64 73 20 61 20 62 6c 6f 62 20 63 6f 6e 73  olds a blob cons
24c00 74 72 75 63 74 65 64 20 62 79 20 4d 61 6b 65 52  tructed by MakeR
24c10 65 63 6f 72 64 2e 20 20 49 66 0a 2a 2a 20 50 34  ecord.  If.** P4
24c20 3e 30 20 74 68 65 6e 20 72 65 67 69 73 74 65 72  >0 then register
24c30 20 50 33 20 69 73 20 74 68 65 20 66 69 72 73 74   P3 is the first
24c40 20 6f 66 20 50 34 20 72 65 67 69 73 74 65 72 73   of P4 registers
24c50 20 74 68 61 74 20 66 6f 72 6d 20 61 6e 20 75 6e   that form an un
24c60 70 61 63 6b 65 64 0a 2a 2a 20 72 65 63 6f 72 64  packed.** record
24c70 2e 0a 2a 2a 0a 2a 2a 20 43 75 72 73 6f 72 20 50  ..**.** Cursor P
24c80 31 20 69 73 20 6f 6e 20 61 6e 20 69 6e 64 65 78  1 is on an index
24c90 20 62 74 72 65 65 2e 20 20 49 66 20 74 68 65 20   btree.  If the 
24ca0 72 65 63 6f 72 64 20 69 64 65 6e 74 69 66 69 65  record identifie
24cb0 64 20 62 79 20 50 33 20 61 6e 64 20 50 34 0a 2a  d by P3 and P4.*
24cc0 2a 20 69 73 20 61 20 70 72 65 66 69 78 20 6f 66  * is a prefix of
24cd0 20 61 6e 79 20 65 6e 74 72 79 20 69 6e 20 50 31   any entry in P1
24ce0 20 74 68 65 6e 20 61 20 6a 75 6d 70 20 69 73 20   then a jump is 
24cf0 6d 61 64 65 20 74 6f 20 50 32 20 61 6e 64 0a 2a  made to P2 and.*
24d00 2a 20 50 31 20 69 73 20 6c 65 66 74 20 70 6f 69  * P1 is left poi
24d10 6e 74 69 6e 67 20 61 74 20 74 68 65 20 6d 61 74  nting at the mat
24d20 63 68 69 6e 67 20 65 6e 74 72 79 2e 0a 2a 2a 0a  ching entry..**.
24d30 2a 2a 20 54 68 69 73 20 6f 70 65 72 61 74 69 6f  ** This operatio
24d40 6e 20 6c 65 61 76 65 73 20 74 68 65 20 63 75 72  n leaves the cur
24d50 73 6f 72 20 69 6e 20 61 20 73 74 61 74 65 20 77  sor in a state w
24d60 68 65 72 65 20 69 74 20 63 61 6e 20 62 65 0a 2a  here it can be.*
24d70 2a 20 61 64 76 61 6e 63 65 64 20 69 6e 20 74 68  * advanced in th
24d80 65 20 66 6f 72 77 61 72 64 20 64 69 72 65 63 74  e forward direct
24d90 69 6f 6e 2e 20 20 54 68 65 20 4e 65 78 74 20 69  ion.  The Next i
24da0 6e 73 74 72 75 63 74 69 6f 6e 20 77 69 6c 6c 20  nstruction will 
24db0 77 6f 72 6b 2c 0a 2a 2a 20 62 75 74 20 6e 6f 74  work,.** but not
24dc0 20 74 68 65 20 50 72 65 76 20 69 6e 73 74 72 75   the Prev instru
24dd0 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 53 65 65  ction..**.** See
24de0 20 61 6c 73 6f 3a 20 4e 6f 74 46 6f 75 6e 64 2c   also: NotFound,
24df0 20 4e 6f 43 6f 6e 66 6c 69 63 74 2c 20 4e 6f 74   NoConflict, Not
24e00 45 78 69 73 74 73 2e 20 53 65 65 6b 47 65 0a 2a  Exists. SeekGe.*
24e10 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 6f 74  /./* Opcode: Not
24e20 46 6f 75 6e 64 20 50 31 20 50 32 20 50 33 20 50  Found P1 P2 P3 P
24e30 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  4 *.** Synopsis:
24e40 20 6b 65 79 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a   key=r[P3@P4].**
24e50 0a 2a 2a 20 49 66 20 50 34 3d 3d 30 20 74 68 65  .** If P4==0 the
24e60 6e 20 72 65 67 69 73 74 65 72 20 50 33 20 68 6f  n register P3 ho
24e70 6c 64 73 20 61 20 62 6c 6f 62 20 63 6f 6e 73 74  lds a blob const
24e80 72 75 63 74 65 64 20 62 79 20 4d 61 6b 65 52 65  ructed by MakeRe
24e90 63 6f 72 64 2e 20 20 49 66 0a 2a 2a 20 50 34 3e  cord.  If.** P4>
24ea0 30 20 74 68 65 6e 20 72 65 67 69 73 74 65 72 20  0 then register 
24eb0 50 33 20 69 73 20 74 68 65 20 66 69 72 73 74 20  P3 is the first 
24ec0 6f 66 20 50 34 20 72 65 67 69 73 74 65 72 73 20  of P4 registers 
24ed0 74 68 61 74 20 66 6f 72 6d 20 61 6e 20 75 6e 70  that form an unp
24ee0 61 63 6b 65 64 0a 2a 2a 20 72 65 63 6f 72 64 2e  acked.** record.
24ef0 0a 2a 2a 20 0a 2a 2a 20 43 75 72 73 6f 72 20 50  .** .** Cursor P
24f00 31 20 69 73 20 6f 6e 20 61 6e 20 69 6e 64 65 78  1 is on an index
24f10 20 62 74 72 65 65 2e 20 20 49 66 20 74 68 65 20   btree.  If the 
24f20 72 65 63 6f 72 64 20 69 64 65 6e 74 69 66 69 65  record identifie
24f30 64 20 62 79 20 50 33 20 61 6e 64 20 50 34 0a 2a  d by P3 and P4.*
24f40 2a 20 69 73 20 6e 6f 74 20 74 68 65 20 70 72 65  * is not the pre
24f50 66 69 78 20 6f 66 20 61 6e 79 20 65 6e 74 72 79  fix of any entry
24f60 20 69 6e 20 50 31 20 74 68 65 6e 20 61 20 6a 75   in P1 then a ju
24f70 6d 70 20 69 73 20 6d 61 64 65 20 74 6f 20 50 32  mp is made to P2
24f80 2e 20 20 49 66 20 50 31 20 0a 2a 2a 20 64 6f 65  .  If P1 .** doe
24f90 73 20 63 6f 6e 74 61 69 6e 20 61 6e 20 65 6e 74  s contain an ent
24fa0 72 79 20 77 68 6f 73 65 20 70 72 65 66 69 78 20  ry whose prefix 
24fb0 6d 61 74 63 68 65 73 20 74 68 65 20 50 33 2f 50  matches the P3/P
24fc0 34 20 72 65 63 6f 72 64 20 74 68 65 6e 20 63 6f  4 record then co
24fd0 6e 74 72 6f 6c 0a 2a 2a 20 66 61 6c 6c 73 20 74  ntrol.** falls t
24fe0 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6e 65  hrough to the ne
24ff0 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 61  xt instruction a
25000 6e 64 20 50 31 20 69 73 20 6c 65 66 74 20 70 6f  nd P1 is left po
25010 69 6e 74 69 6e 67 20 61 74 20 74 68 65 0a 2a 2a  inting at the.**
25020 20 6d 61 74 63 68 69 6e 67 20 65 6e 74 72 79 2e   matching entry.
25030 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 65 72  .**.** This oper
25040 61 74 69 6f 6e 20 6c 65 61 76 65 73 20 74 68 65  ation leaves the
25050 20 63 75 72 73 6f 72 20 69 6e 20 61 20 73 74 61   cursor in a sta
25060 74 65 20 77 68 65 72 65 20 69 74 20 63 61 6e 6e  te where it cann
25070 6f 74 20 62 65 0a 2a 2a 20 61 64 76 61 6e 63 65  ot be.** advance
25080 64 20 69 6e 20 65 69 74 68 65 72 20 64 69 72 65  d in either dire
25090 63 74 69 6f 6e 2e 20 20 49 6e 20 6f 74 68 65 72  ction.  In other
250a0 20 77 6f 72 64 73 2c 20 74 68 65 20 4e 65 78 74   words, the Next
250b0 20 61 6e 64 20 50 72 65 76 0a 2a 2a 20 6f 70 63   and Prev.** opc
250c0 6f 64 65 73 20 64 6f 20 6e 6f 74 20 77 6f 72 6b  odes do not work
250d0 20 61 66 74 65 72 20 74 68 69 73 20 6f 70 65 72   after this oper
250e0 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 53 65 65  ation..**.** See
250f0 20 61 6c 73 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f   also: Found, No
25100 74 45 78 69 73 74 73 2c 20 4e 6f 43 6f 6e 66 6c  tExists, NoConfl
25110 69 63 74 2c 20 49 66 4e 6f 48 6f 70 65 0a 2a 2f  ict, IfNoHope.*/
25120 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 66 4e 6f  ./* Opcode: IfNo
25130 48 6f 70 65 20 50 31 20 50 32 20 50 33 20 50 34  Hope P1 P2 P3 P4
25140 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
25150 6b 65 79 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a  key=r[P3@P4].**.
25160 2a 2a 20 52 65 67 69 73 74 65 72 20 50 33 20 69  ** Register P3 i
25170 73 20 74 68 65 20 66 69 72 73 74 20 6f 66 20 50  s the first of P
25180 34 20 72 65 67 69 73 74 65 72 73 20 74 68 61 74  4 registers that
25190 20 66 6f 72 6d 20 61 6e 20 75 6e 70 61 63 6b 65   form an unpacke
251a0 64 0a 2a 2a 20 72 65 63 6f 72 64 2e 0a 2a 2a 0a  d.** record..**.
251b0 2a 2a 20 43 75 72 73 6f 72 20 50 31 20 69 73 20  ** Cursor P1 is 
251c0 6f 6e 20 61 6e 20 69 6e 64 65 78 20 62 74 72 65  on an index btre
251d0 65 2e 20 20 49 66 20 74 68 65 20 73 65 65 6b 48  e.  If the seekH
251e0 69 74 20 66 6c 61 67 20 69 73 20 73 65 74 20 6f  it flag is set o
251f0 6e 20 50 31 2c 20 74 68 65 6e 0a 2a 2a 20 74 68  n P1, then.** th
25200 69 73 20 6f 70 63 6f 64 65 20 69 73 20 61 20 6e  is opcode is a n
25210 6f 2d 6f 70 2e 20 20 42 75 74 20 69 66 20 74 68  o-op.  But if th
25220 65 20 73 65 65 6b 48 69 74 20 66 6c 61 67 20 6f  e seekHit flag o
25230 66 20 50 31 20 69 73 20 63 6c 65 61 72 2c 20 74  f P1 is clear, t
25240 68 65 6e 0a 2a 2a 20 63 68 65 63 6b 20 74 6f 20  hen.** check to 
25250 73 65 65 20 69 66 20 74 68 65 72 65 20 69 73 20  see if there is 
25260 61 6e 79 20 65 6e 74 72 79 20 69 6e 20 50 31 20  any entry in P1 
25270 74 68 61 74 20 6d 61 74 63 68 65 73 20 74 68 65  that matches the
25280 0a 2a 2a 20 70 72 65 66 69 78 20 69 64 65 6e 74  .** prefix ident
25290 69 66 69 65 64 20 62 79 20 50 33 20 61 6e 64 20  ified by P3 and 
252a0 50 34 2e 20 20 49 66 20 6e 6f 20 65 6e 74 72 79  P4.  If no entry
252b0 20 6d 61 74 63 68 65 73 20 74 68 65 20 70 72 65   matches the pre
252c0 66 69 78 2c 0a 2a 2a 20 6a 75 6d 70 20 74 6f 20  fix,.** jump to 
252d0 50 32 2e 20 20 4f 74 68 65 72 77 69 73 65 20 66  P2.  Otherwise f
252e0 61 6c 6c 20 74 68 72 6f 75 67 68 2e 0a 2a 2a 0a  all through..**.
252f0 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 62  ** This opcode b
25300 65 68 61 76 65 73 20 6c 69 6b 65 20 4f 50 5f 4e  ehaves like OP_N
25310 6f 74 46 6f 75 6e 64 20 69 66 20 74 68 65 20 73  otFound if the s
25320 65 65 6b 48 69 74 0a 2a 2a 20 66 6c 61 67 20 69  eekHit.** flag i
25330 73 20 63 6c 65 61 72 20 61 6e 64 20 69 74 20 62  s clear and it b
25340 65 68 61 76 65 73 20 6c 69 6b 65 20 4f 50 5f 4e  ehaves like OP_N
25350 6f 6f 70 20 69 66 20 74 68 65 20 73 65 65 6b 48  oop if the seekH
25360 69 74 20 66 6c 61 67 20 69 73 20 73 65 74 2e 0a  it flag is set..
25370 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64  **.** This opcod
25380 65 20 69 73 20 75 73 65 64 20 69 6e 20 49 4e 20  e is used in IN 
25390 63 6c 61 75 73 65 20 70 72 6f 63 65 73 73 69 6e  clause processin
253a0 67 20 66 6f 72 20 61 20 6d 75 6c 74 69 2d 63 6f  g for a multi-co
253b0 6c 75 6d 6e 20 6b 65 79 2e 0a 2a 2a 20 49 66 20  lumn key..** If 
253c0 61 6e 20 49 4e 20 63 6c 61 75 73 65 20 69 73 20  an IN clause is 
253d0 61 74 74 61 63 68 65 64 20 74 6f 20 61 6e 20 65  attached to an e
253e0 6c 65 6d 65 6e 74 20 6f 66 20 74 68 65 20 6b 65  lement of the ke
253f0 79 20 6f 74 68 65 72 20 74 68 61 6e 20 74 68 65  y other than the
25400 0a 2a 2a 20 6c 65 66 74 2d 6d 6f 73 74 20 65 6c  .** left-most el
25410 65 6d 65 6e 74 2c 20 61 6e 64 20 69 66 20 74 68  ement, and if th
25420 65 72 65 20 61 72 65 20 6e 6f 20 6d 61 74 63 68  ere are no match
25430 65 73 20 6f 6e 20 74 68 65 20 6d 6f 73 74 20 72  es on the most r
25440 65 63 65 6e 74 0a 2a 2a 20 73 65 65 6b 20 6f 76  ecent.** seek ov
25450 65 72 20 74 68 65 20 77 68 6f 6c 65 20 6b 65 79  er the whole key
25460 2c 20 74 68 65 6e 20 69 74 20 6d 69 67 68 74 20  , then it might 
25470 62 65 20 74 68 61 74 20 6f 6e 65 20 6f 66 20 74  be that one of t
25480 68 65 20 6b 65 79 20 65 6c 65 6d 65 6e 74 0a 2a  he key element.*
25490 2a 20 74 6f 20 74 68 65 20 6c 65 66 74 20 69 73  * to the left is
254a0 20 70 72 6f 68 69 62 69 74 69 6e 67 20 61 20 6d   prohibiting a m
254b0 61 74 63 68 2c 20 61 6e 64 20 68 65 6e 63 65 20  atch, and hence 
254c0 74 68 65 72 65 20 69 73 20 22 6e 6f 20 68 6f 70  there is "no hop
254d0 65 22 20 6f 66 0a 2a 2a 20 61 6e 79 20 6d 61 74  e" of.** any mat
254e0 63 68 20 72 65 67 61 72 64 6c 65 73 73 20 6f 66  ch regardless of
254f0 20 68 6f 77 20 6d 61 6e 79 20 49 4e 20 63 6c 61   how many IN cla
25500 75 73 65 20 65 6c 65 6d 65 6e 74 73 20 61 72 65  use elements are
25510 20 63 68 65 63 6b 65 64 2e 0a 2a 2a 20 49 6e 20   checked..** In 
25520 73 75 63 68 20 61 20 63 61 73 65 2c 20 77 65 20  such a case, we 
25530 61 62 61 6e 64 6f 6e 20 74 68 65 20 49 4e 20 63  abandon the IN c
25540 6c 61 75 73 65 20 73 65 61 72 63 68 20 65 61 72  lause search ear
25550 6c 79 2c 20 75 73 69 6e 67 20 74 68 69 73 0a 2a  ly, using this.*
25560 2a 20 6f 70 63 6f 64 65 2e 20 20 54 68 65 20 6f  * opcode.  The o
25570 70 63 6f 64 65 20 6e 61 6d 65 20 63 6f 6d 65 73  pcode name comes
25580 20 66 72 6f 6d 20 74 68 65 20 66 61 63 74 20 74   from the fact t
25590 68 61 74 20 74 68 65 0a 2a 2a 20 6a 75 6d 70 20  hat the.** jump 
255a0 69 73 20 74 61 6b 65 6e 20 69 66 20 74 68 65 72  is taken if ther
255b0 65 20 69 73 20 22 6e 6f 20 68 6f 70 65 22 20 6f  e is "no hope" o
255c0 66 20 61 63 68 69 65 76 69 6e 67 20 61 20 6d 61  f achieving a ma
255d0 74 63 68 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61  tch..**.** See a
255e0 6c 73 6f 3a 20 4e 6f 74 46 6f 75 6e 64 2c 20 53  lso: NotFound, S
255f0 65 65 6b 48 69 74 0a 2a 2f 0a 2f 2a 20 4f 70 63  eekHit.*/./* Opc
25600 6f 64 65 3a 20 4e 6f 43 6f 6e 66 6c 69 63 74 20  ode: NoConflict 
25610 50 31 20 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a  P1 P2 P3 P4 *.**
25620 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72   Synopsis: key=r
25630 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 49 66  [P3@P4].**.** If
25640 20 50 34 3d 3d 30 20 74 68 65 6e 20 72 65 67 69   P4==0 then regi
25650 73 74 65 72 20 50 33 20 68 6f 6c 64 73 20 61 20  ster P3 holds a 
25660 62 6c 6f 62 20 63 6f 6e 73 74 72 75 63 74 65 64  blob constructed
25670 20 62 79 20 4d 61 6b 65 52 65 63 6f 72 64 2e 20   by MakeRecord. 
25680 20 49 66 0a 2a 2a 20 50 34 3e 30 20 74 68 65 6e   If.** P4>0 then
25690 20 72 65 67 69 73 74 65 72 20 50 33 20 69 73 20   register P3 is 
256a0 74 68 65 20 66 69 72 73 74 20 6f 66 20 50 34 20  the first of P4 
256b0 72 65 67 69 73 74 65 72 73 20 74 68 61 74 20 66  registers that f
256c0 6f 72 6d 20 61 6e 20 75 6e 70 61 63 6b 65 64 0a  orm an unpacked.
256d0 2a 2a 20 72 65 63 6f 72 64 2e 0a 2a 2a 20 0a 2a  ** record..** .*
256e0 2a 20 43 75 72 73 6f 72 20 50 31 20 69 73 20 6f  * Cursor P1 is o
256f0 6e 20 61 6e 20 69 6e 64 65 78 20 62 74 72 65 65  n an index btree
25700 2e 20 20 49 66 20 74 68 65 20 72 65 63 6f 72 64  .  If the record
25710 20 69 64 65 6e 74 69 66 69 65 64 20 62 79 20 50   identified by P
25720 33 20 61 6e 64 20 50 34 0a 2a 2a 20 63 6f 6e 74  3 and P4.** cont
25730 61 69 6e 73 20 61 6e 79 20 4e 55 4c 4c 20 76 61  ains any NULL va
25740 6c 75 65 2c 20 6a 75 6d 70 20 69 6d 6d 65 64 69  lue, jump immedi
25750 61 74 65 6c 79 20 74 6f 20 50 32 2e 20 20 49 66  ately to P2.  If
25760 20 61 6c 6c 20 74 65 72 6d 73 20 6f 66 20 74 68   all terms of th
25770 65 0a 2a 2a 20 72 65 63 6f 72 64 20 61 72 65 20  e.** record are 
25780 6e 6f 74 2d 4e 55 4c 4c 20 74 68 65 6e 20 61 20  not-NULL then a 
25790 63 68 65 63 6b 20 69 73 20 64 6f 6e 65 20 74 6f  check is done to
257a0 20 64 65 74 65 72 6d 69 6e 65 20 69 66 20 61 6e   determine if an
257b0 79 20 72 6f 77 20 69 6e 20 74 68 65 0a 2a 2a 20  y row in the.** 
257c0 50 31 20 69 6e 64 65 78 20 62 74 72 65 65 20 68  P1 index btree h
257d0 61 73 20 61 20 6d 61 74 63 68 69 6e 67 20 6b 65  as a matching ke
257e0 79 20 70 72 65 66 69 78 2e 20 20 49 66 20 74 68  y prefix.  If th
257f0 65 72 65 20 61 72 65 20 6e 6f 20 6d 61 74 63 68  ere are no match
25800 65 73 2c 20 6a 75 6d 70 0a 2a 2a 20 69 6d 6d 65  es, jump.** imme
25810 64 69 61 74 65 6c 79 20 74 6f 20 50 32 2e 20 20  diately to P2.  
25820 49 66 20 74 68 65 72 65 20 69 73 20 61 20 6d 61  If there is a ma
25830 74 63 68 2c 20 66 61 6c 6c 20 74 68 72 6f 75 67  tch, fall throug
25840 68 20 61 6e 64 20 6c 65 61 76 65 20 74 68 65 20  h and leave the 
25850 50 31 0a 2a 2a 20 63 75 72 73 6f 72 20 70 6f 69  P1.** cursor poi
25860 6e 74 69 6e 67 20 74 6f 20 74 68 65 20 6d 61 74  nting to the mat
25870 63 68 69 6e 67 20 72 6f 77 2e 0a 2a 2a 0a 2a 2a  ching row..**.**
25880 20 54 68 69 73 20 6f 70 63 6f 64 65 20 69 73 20   This opcode is 
25890 73 69 6d 69 6c 61 72 20 74 6f 20 4f 50 5f 4e 6f  similar to OP_No
258a0 74 46 6f 75 6e 64 20 77 69 74 68 20 74 68 65 20  tFound with the 
258b0 65 78 63 65 70 74 69 6f 6e 73 20 74 68 61 74 20  exceptions that 
258c0 74 68 65 0a 2a 2a 20 62 72 61 6e 63 68 20 69 73  the.** branch is
258d0 20 61 6c 77 61 79 73 20 74 61 6b 65 6e 20 69 66   always taken if
258e0 20 61 6e 79 20 70 61 72 74 20 6f 66 20 74 68 65   any part of the
258f0 20 73 65 61 72 63 68 20 6b 65 79 20 69 6e 70 75   search key inpu
25900 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2a 0a 2a 2a  t is NULL..**.**
25910 20 54 68 69 73 20 6f 70 65 72 61 74 69 6f 6e 20   This operation 
25920 6c 65 61 76 65 73 20 74 68 65 20 63 75 72 73 6f  leaves the curso
25930 72 20 69 6e 20 61 20 73 74 61 74 65 20 77 68 65  r in a state whe
25940 72 65 20 69 74 20 63 61 6e 6e 6f 74 20 62 65 0a  re it cannot be.
25950 2a 2a 20 61 64 76 61 6e 63 65 64 20 69 6e 20 65  ** advanced in e
25960 69 74 68 65 72 20 64 69 72 65 63 74 69 6f 6e 2e  ither direction.
25970 20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73    In other words
25980 2c 20 74 68 65 20 4e 65 78 74 20 61 6e 64 20 50  , the Next and P
25990 72 65 76 0a 2a 2a 20 6f 70 63 6f 64 65 73 20 64  rev.** opcodes d
259a0 6f 20 6e 6f 74 20 77 6f 72 6b 20 61 66 74 65 72  o not work after
259b0 20 74 68 69 73 20 6f 70 65 72 61 74 69 6f 6e 2e   this operation.
259c0 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a  .**.** See also:
259d0 20 4e 6f 74 46 6f 75 6e 64 2c 20 46 6f 75 6e 64   NotFound, Found
259e0 2c 20 4e 6f 74 45 78 69 73 74 73 0a 2a 2f 0a 63  , NotExists.*/.c
259f0 61 73 65 20 4f 50 5f 49 66 4e 6f 48 6f 70 65 3a  ase OP_IfNoHope:
25a00 20 7b 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20   {     /* jump, 
25a10 69 6e 33 20 2a 2f 0a 20 20 56 64 62 65 43 75 72  in3 */.  VdbeCur
25a20 73 6f 72 20 2a 70 43 3b 0a 20 20 61 73 73 65 72  sor *pC;.  asser
25a30 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26  t( pOp->p1>=0 &&
25a40 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72   pOp->p1<p->nCur
25a50 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d  sor );.  pC = p-
25a60 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b  >apCsr[pOp->p1];
25a70 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30  .  assert( pC!=0
25a80 20 29 3b 0a 20 20 69 66 28 20 70 43 2d 3e 73 65   );.  if( pC->se
25a90 65 6b 48 69 74 20 29 20 62 72 65 61 6b 3b 0a 20  ekHit ) break;. 
25aa0 20 2f 2a 20 46 61 6c 6c 20 74 68 72 6f 75 67 68   /* Fall through
25ab0 20 69 6e 74 6f 20 4f 50 5f 4e 6f 74 46 6f 75 6e   into OP_NotFoun
25ac0 64 20 2a 2f 0a 7d 0a 63 61 73 65 20 4f 50 5f 4e  d */.}.case OP_N
25ad0 6f 43 6f 6e 66 6c 69 63 74 3a 20 20 20 20 20 2f  oConflict:     /
25ae0 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 63  * jump, in3 */.c
25af0 61 73 65 20 4f 50 5f 4e 6f 74 46 6f 75 6e 64 3a  ase OP_NotFound:
25b00 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20         /* jump, 
25b10 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 46  in3 */.case OP_F
25b20 6f 75 6e 64 3a 20 7b 20 20 20 20 20 20 20 20 2f  ound: {        /
25b30 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 20  * jump, in3 */. 
25b40 20 69 6e 74 20 61 6c 72 65 61 64 79 45 78 69 73   int alreadyExis
25b50 74 73 3b 0a 20 20 69 6e 74 20 74 61 6b 65 4a 75  ts;.  int takeJu
25b60 6d 70 3b 0a 20 20 69 6e 74 20 69 69 3b 0a 20 20  mp;.  int ii;.  
25b70 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a  VdbeCursor *pC;.
25b80 20 20 69 6e 74 20 72 65 73 3b 0a 20 20 55 6e 70    int res;.  Unp
25b90 61 63 6b 65 64 52 65 63 6f 72 64 20 2a 70 46 72  ackedRecord *pFr
25ba0 65 65 3b 0a 20 20 55 6e 70 61 63 6b 65 64 52 65  ee;.  UnpackedRe
25bb0 63 6f 72 64 20 2a 70 49 64 78 4b 65 79 3b 0a 20  cord *pIdxKey;. 
25bc0 20 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 20   UnpackedRecord 
25bd0 72 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54  r;..#ifdef SQLIT
25be0 45 5f 54 45 53 54 0a 20 20 69 66 28 20 70 4f 70  E_TEST.  if( pOp
25bf0 2d 3e 6f 70 63 6f 64 65 21 3d 4f 50 5f 4e 6f 43  ->opcode!=OP_NoC
25c00 6f 6e 66 6c 69 63 74 20 29 20 73 71 6c 69 74 65  onflict ) sqlite
25c10 33 5f 66 6f 75 6e 64 5f 63 6f 75 6e 74 2b 2b 3b  3_found_count++;
25c20 0a 23 65 6e 64 69 66 0a 0a 20 20 61 73 73 65 72  .#endif..  asser
25c30 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26  t( pOp->p1>=0 &&
25c40 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72   pOp->p1<p->nCur
25c50 73 6f 72 20 29 3b 0a 20 20 61 73 73 65 72 74 28  sor );.  assert(
25c60 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34   pOp->p4type==P4
25c70 5f 49 4e 54 33 32 20 29 3b 0a 20 20 70 43 20 3d  _INT32 );.  pC =
25c80 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70   p->apCsr[pOp->p
25c90 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43  1];.  assert( pC
25ca0 21 3d 30 20 29 3b 0a 23 69 66 64 65 66 20 53 51  !=0 );.#ifdef SQ
25cb0 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 70 43 2d  LITE_DEBUG.  pC-
25cc0 3e 73 65 65 6b 4f 70 20 3d 20 70 4f 70 2d 3e 6f  >seekOp = pOp->o
25cd0 70 63 6f 64 65 3b 0a 23 65 6e 64 69 66 0a 20 20  pcode;.#endif.  
25ce0 70 49 6e 33 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn3 = &aMem[pOp
25cf0 2d 3e 70 33 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p3];.  assert(
25d00 20 70 43 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43   pC->eCurType==C
25d10 55 52 54 59 50 45 5f 42 54 52 45 45 20 29 3b 0a  URTYPE_BTREE );.
25d20 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 75 63    assert( pC->uc
25d30 2e 70 43 75 72 73 6f 72 21 3d 30 20 29 3b 0a 20  .pCursor!=0 );. 
25d40 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73 54   assert( pC->isT
25d50 61 62 6c 65 3d 3d 30 20 29 3b 0a 20 20 69 66 28  able==0 );.  if(
25d60 20 70 4f 70 2d 3e 70 34 2e 69 3e 30 20 29 7b 0a   pOp->p4.i>0 ){.
25d70 20 20 20 20 72 2e 70 4b 65 79 49 6e 66 6f 20 3d      r.pKeyInfo =
25d80 20 70 43 2d 3e 70 4b 65 79 49 6e 66 6f 3b 0a 20   pC->pKeyInfo;. 
25d90 20 20 20 72 2e 6e 46 69 65 6c 64 20 3d 20 28 75     r.nField = (u
25da0 31 36 29 70 4f 70 2d 3e 70 34 2e 69 3b 0a 20 20  16)pOp->p4.i;.  
25db0 20 20 72 2e 61 4d 65 6d 20 3d 20 70 49 6e 33 3b    r.aMem = pIn3;
25dc0 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44  .#ifdef SQLITE_D
25dd0 45 42 55 47 0a 20 20 20 20 66 6f 72 28 69 69 3d  EBUG.    for(ii=
25de0 30 3b 20 69 69 3c 72 2e 6e 46 69 65 6c 64 3b 20  0; ii<r.nField; 
25df0 69 69 2b 2b 29 7b 0a 20 20 20 20 20 20 61 73 73  ii++){.      ass
25e00 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28  ert( memIsValid(
25e10 26 72 2e 61 4d 65 6d 5b 69 69 5d 29 20 29 3b 0a  &r.aMem[ii]) );.
25e20 20 20 20 20 20 20 61 73 73 65 72 74 28 20 28 72        assert( (r
25e30 2e 61 4d 65 6d 5b 69 69 5d 2e 66 6c 61 67 73 20  .aMem[ii].flags 
25e40 26 20 4d 45 4d 5f 5a 65 72 6f 29 3d 3d 30 20 7c  & MEM_Zero)==0 |
25e50 7c 20 72 2e 61 4d 65 6d 5b 69 69 5d 2e 6e 3d 3d  | r.aMem[ii].n==
25e60 30 20 29 3b 0a 20 20 20 20 20 20 69 66 28 20 69  0 );.      if( i
25e70 69 20 29 20 52 45 47 49 53 54 45 52 5f 54 52 41  i ) REGISTER_TRA
25e80 43 45 28 70 4f 70 2d 3e 70 33 2b 69 69 2c 20 26  CE(pOp->p3+ii, &
25e90 72 2e 61 4d 65 6d 5b 69 69 5d 29 3b 0a 20 20 20  r.aMem[ii]);.   
25ea0 20 7d 0a 23 65 6e 64 69 66 0a 20 20 20 20 70 49   }.#endif.    pI
25eb0 64 78 4b 65 79 20 3d 20 26 72 3b 0a 20 20 20 20  dxKey = &r;.    
25ec0 70 46 72 65 65 20 3d 20 30 3b 0a 20 20 7d 65 6c  pFree = 0;.  }el
25ed0 73 65 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20  se{.    assert( 
25ee0 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn3->flags & ME
25ef0 4d 5f 42 6c 6f 62 20 29 3b 0a 20 20 20 20 72 63  M_Blob );.    rc
25f00 20 3d 20 45 78 70 61 6e 64 42 6c 6f 62 28 70 49   = ExpandBlob(pI
25f10 6e 33 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  n3);.    assert(
25f20 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 7c   rc==SQLITE_OK |
25f30 7c 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4e 4f 4d  | rc==SQLITE_NOM
25f40 45 4d 20 29 3b 0a 20 20 20 20 69 66 28 20 72 63  EM );.    if( rc
25f50 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a   ) goto no_mem;.
25f60 20 20 20 20 70 46 72 65 65 20 3d 20 70 49 64 78      pFree = pIdx
25f70 4b 65 79 20 3d 20 73 71 6c 69 74 65 33 56 64 62  Key = sqlite3Vdb
25f80 65 41 6c 6c 6f 63 55 6e 70 61 63 6b 65 64 52 65  eAllocUnpackedRe
25f90 63 6f 72 64 28 70 43 2d 3e 70 4b 65 79 49 6e 66  cord(pC->pKeyInf
25fa0 6f 29 3b 0a 20 20 20 20 69 66 28 20 70 49 64 78  o);.    if( pIdx
25fb0 4b 65 79 3d 3d 30 20 29 20 67 6f 74 6f 20 6e 6f  Key==0 ) goto no
25fc0 5f 6d 65 6d 3b 0a 20 20 20 20 73 71 6c 69 74 65  _mem;.    sqlite
25fd0 33 56 64 62 65 52 65 63 6f 72 64 55 6e 70 61 63  3VdbeRecordUnpac
25fe0 6b 28 70 43 2d 3e 70 4b 65 79 49 6e 66 6f 2c 20  k(pC->pKeyInfo, 
25ff0 70 49 6e 33 2d 3e 6e 2c 20 70 49 6e 33 2d 3e 7a  pIn3->n, pIn3->z
26000 2c 20 70 49 64 78 4b 65 79 29 3b 0a 20 20 7d 0a  , pIdxKey);.  }.
26010 20 20 70 49 64 78 4b 65 79 2d 3e 64 65 66 61 75    pIdxKey->defau
26020 6c 74 5f 72 63 20 3d 20 30 3b 0a 20 20 74 61 6b  lt_rc = 0;.  tak
26030 65 4a 75 6d 70 20 3d 20 30 3b 0a 20 20 69 66 28  eJump = 0;.  if(
26040 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50   pOp->opcode==OP
26050 5f 4e 6f 43 6f 6e 66 6c 69 63 74 20 29 7b 0a 20  _NoConflict ){. 
26060 20 20 20 2f 2a 20 46 6f 72 20 74 68 65 20 4f 50     /* For the OP
26070 5f 4e 6f 43 6f 6e 66 6c 69 63 74 20 6f 70 63 6f  _NoConflict opco
26080 64 65 2c 20 74 61 6b 65 20 74 68 65 20 6a 75 6d  de, take the jum
26090 70 20 69 66 20 61 6e 79 20 6f 66 20 74 68 65 0a  p if any of the.
260a0 20 20 20 20 2a 2a 20 69 6e 70 75 74 20 66 69 65      ** input fie
260b0 6c 64 73 20 61 72 65 20 4e 55 4c 4c 2c 20 73 69  lds are NULL, si
260c0 6e 63 65 20 61 6e 79 20 6b 65 79 20 77 69 74 68  nce any key with
260d0 20 61 20 4e 55 4c 4c 20 77 69 6c 6c 20 6e 6f 74   a NULL will not
260e0 0a 20 20 20 20 2a 2a 20 63 6f 6e 66 6c 69 63 74  .    ** conflict
260f0 20 2a 2f 0a 20 20 20 20 66 6f 72 28 69 69 3d 30   */.    for(ii=0
26100 3b 20 69 69 3c 70 49 64 78 4b 65 79 2d 3e 6e 46  ; ii<pIdxKey->nF
26110 69 65 6c 64 3b 20 69 69 2b 2b 29 7b 0a 20 20 20  ield; ii++){.   
26120 20 20 20 69 66 28 20 70 49 64 78 4b 65 79 2d 3e     if( pIdxKey->
26130 61 4d 65 6d 5b 69 69 5d 2e 66 6c 61 67 73 20 26  aMem[ii].flags &
26140 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20   MEM_Null ){.   
26150 20 20 20 20 20 74 61 6b 65 4a 75 6d 70 20 3d 20       takeJump = 
26160 31 3b 0a 20 20 20 20 20 20 20 20 62 72 65 61 6b  1;.        break
26170 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a  ;.      }.    }.
26180 20 20 7d 0a 20 20 72 63 20 3d 20 73 71 6c 69 74    }.  rc = sqlit
26190 65 33 42 74 72 65 65 4d 6f 76 65 74 6f 55 6e 70  e3BtreeMovetoUnp
261a0 61 63 6b 65 64 28 70 43 2d 3e 75 63 2e 70 43 75  acked(pC->uc.pCu
261b0 72 73 6f 72 2c 20 70 49 64 78 4b 65 79 2c 20 30  rsor, pIdxKey, 0
261c0 2c 20 30 2c 20 26 72 65 73 29 3b 0a 20 20 69 66  , 0, &res);.  if
261d0 28 20 70 46 72 65 65 20 29 20 73 71 6c 69 74 65  ( pFree ) sqlite
261e0 33 44 62 46 72 65 65 4e 4e 28 64 62 2c 20 70 46  3DbFreeNN(db, pF
261f0 72 65 65 29 3b 0a 20 20 69 66 28 20 72 63 21 3d  ree);.  if( rc!=
26200 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20  SQLITE_OK ){.   
26210 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
26220 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 7d 0a 20 20  to_error;.  }.  
26230 70 43 2d 3e 73 65 65 6b 52 65 73 75 6c 74 20 3d  pC->seekResult =
26240 20 72 65 73 3b 0a 20 20 61 6c 72 65 61 64 79 45   res;.  alreadyE
26250 78 69 73 74 73 20 3d 20 28 72 65 73 3d 3d 30 29  xists = (res==0)
26260 3b 0a 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20  ;.  pC->nullRow 
26270 3d 20 31 2d 61 6c 72 65 61 64 79 45 78 69 73 74  = 1-alreadyExist
26280 73 3b 0a 20 20 70 43 2d 3e 64 65 66 65 72 72 65  s;.  pC->deferre
26290 64 4d 6f 76 65 74 6f 20 3d 20 30 3b 0a 20 20 70  dMoveto = 0;.  p
262a0 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d  C->cacheStatus =
262b0 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20   CACHE_STALE;.  
262c0 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d  if( pOp->opcode=
262d0 3d 4f 50 5f 46 6f 75 6e 64 20 29 7b 0a 20 20 20  =OP_Found ){.   
262e0 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e   VdbeBranchTaken
262f0 28 61 6c 72 65 61 64 79 45 78 69 73 74 73 21 3d  (alreadyExists!=
26300 30 2c 32 29 3b 0a 20 20 20 20 69 66 28 20 61 6c  0,2);.    if( al
26310 72 65 61 64 79 45 78 69 73 74 73 20 29 20 67 6f  readyExists ) go
26320 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20  to jump_to_p2;. 
26330 20 7d 65 6c 73 65 7b 0a 20 20 20 20 56 64 62 65   }else{.    Vdbe
26340 42 72 61 6e 63 68 54 61 6b 65 6e 28 74 61 6b 65  BranchTaken(take
26350 4a 75 6d 70 7c 7c 61 6c 72 65 61 64 79 45 78 69  Jump||alreadyExi
26360 73 74 73 3d 3d 30 2c 32 29 3b 0a 20 20 20 20 69  sts==0,2);.    i
26370 66 28 20 74 61 6b 65 4a 75 6d 70 20 7c 7c 20 21  f( takeJump || !
26380 61 6c 72 65 61 64 79 45 78 69 73 74 73 20 29 20  alreadyExists ) 
26390 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b  goto jump_to_p2;
263a0 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
263b0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 65 65 6b  ./* Opcode: Seek
263c0 52 6f 77 69 64 20 50 31 20 50 32 20 50 33 20 2a  Rowid P1 P2 P3 *
263d0 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
263e0 69 6e 74 6b 65 79 3d 72 5b 50 33 5d 0a 2a 2a 0a  intkey=r[P3].**.
263f0 2a 2a 20 50 31 20 69 73 20 74 68 65 20 69 6e 64  ** P1 is the ind
26400 65 78 20 6f 66 20 61 20 63 75 72 73 6f 72 20 6f  ex of a cursor o
26410 70 65 6e 20 6f 6e 20 61 6e 20 53 51 4c 20 74 61  pen on an SQL ta
26420 62 6c 65 20 62 74 72 65 65 20 28 77 69 74 68 20  ble btree (with 
26430 69 6e 74 65 67 65 72 0a 2a 2a 20 6b 65 79 73 29  integer.** keys)
26440 2e 20 20 49 66 20 72 65 67 69 73 74 65 72 20 50  .  If register P
26450 33 20 64 6f 65 73 20 6e 6f 74 20 63 6f 6e 74 61  3 does not conta
26460 69 6e 20 61 6e 20 69 6e 74 65 67 65 72 20 6f 72  in an integer or
26470 20 69 66 20 50 31 20 64 6f 65 73 20 6e 6f 74 0a   if P1 does not.
26480 2a 2a 20 63 6f 6e 74 61 69 6e 20 61 20 72 65 63  ** contain a rec
26490 6f 72 64 20 77 69 74 68 20 72 6f 77 69 64 20 50  ord with rowid P
264a0 33 20 74 68 65 6e 20 6a 75 6d 70 20 69 6d 6d 65  3 then jump imme
264b0 64 69 61 74 65 6c 79 20 74 6f 20 50 32 2e 20 20  diately to P2.  
264c0 0a 2a 2a 20 4f 72 2c 20 69 66 20 50 32 20 69 73  .** Or, if P2 is
264d0 20 30 2c 20 72 61 69 73 65 20 61 6e 20 53 51 4c   0, raise an SQL
264e0 49 54 45 5f 43 4f 52 52 55 50 54 20 65 72 72 6f  ITE_CORRUPT erro
264f0 72 2e 20 49 66 20 50 31 20 64 6f 65 73 20 63 6f  r. If P1 does co
26500 6e 74 61 69 6e 0a 2a 2a 20 61 20 72 65 63 6f 72  ntain.** a recor
26510 64 20 77 69 74 68 20 72 6f 77 69 64 20 50 33 20  d with rowid P3 
26520 74 68 65 6e 20 0a 2a 2a 20 6c 65 61 76 65 20 74  then .** leave t
26530 68 65 20 63 75 72 73 6f 72 20 70 6f 69 6e 74 69  he cursor pointi
26540 6e 67 20 61 74 20 74 68 61 74 20 72 65 63 6f 72  ng at that recor
26550 64 20 61 6e 64 20 66 61 6c 6c 20 74 68 72 6f 75  d and fall throu
26560 67 68 20 74 6f 20 74 68 65 20 6e 65 78 74 0a 2a  gh to the next.*
26570 2a 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a  * instruction..*
26580 2a 0a 2a 2a 20 54 68 65 20 4f 50 5f 4e 6f 74 45  *.** The OP_NotE
26590 78 69 73 74 73 20 6f 70 63 6f 64 65 20 70 65 72  xists opcode per
265a0 66 6f 72 6d 73 20 74 68 65 20 73 61 6d 65 20 6f  forms the same o
265b0 70 65 72 61 74 69 6f 6e 2c 20 62 75 74 20 77 69  peration, but wi
265c0 74 68 20 4f 50 5f 4e 6f 74 45 78 69 73 74 73 0a  th OP_NotExists.
265d0 2a 2a 20 74 68 65 20 50 33 20 72 65 67 69 73 74  ** the P3 regist
265e0 65 72 20 6d 75 73 74 20 62 65 20 67 75 61 72 61  er must be guara
265f0 6e 74 65 65 64 20 74 6f 20 63 6f 6e 74 61 69 6e  nteed to contain
26600 20 61 6e 20 69 6e 74 65 67 65 72 20 76 61 6c 75   an integer valu
26610 65 2e 20 20 57 69 74 68 20 74 68 69 73 0a 2a 2a  e.  With this.**
26620 20 6f 70 63 6f 64 65 2c 20 72 65 67 69 73 74 65   opcode, registe
26630 72 20 50 33 20 6d 69 67 68 74 20 6e 6f 74 20 63  r P3 might not c
26640 6f 6e 74 61 69 6e 20 61 6e 20 69 6e 74 65 67 65  ontain an intege
26650 72 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 4f 50 5f  r..**.** The OP_
26660 4e 6f 74 46 6f 75 6e 64 20 6f 70 63 6f 64 65 20  NotFound opcode 
26670 70 65 72 66 6f 72 6d 73 20 74 68 65 20 73 61 6d  performs the sam
26680 65 20 6f 70 65 72 61 74 69 6f 6e 20 6f 6e 20 69  e operation on i
26690 6e 64 65 78 20 62 74 72 65 65 73 0a 2a 2a 20 28  ndex btrees.** (
266a0 77 69 74 68 20 61 72 62 69 74 72 61 72 79 20 6d  with arbitrary m
266b0 75 6c 74 69 2d 76 61 6c 75 65 20 6b 65 79 73 29  ulti-value keys)
266c0 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63  ..**.** This opc
266d0 6f 64 65 20 6c 65 61 76 65 73 20 74 68 65 20 63  ode leaves the c
266e0 75 72 73 6f 72 20 69 6e 20 61 20 73 74 61 74 65  ursor in a state
266f0 20 77 68 65 72 65 20 69 74 20 63 61 6e 6e 6f 74   where it cannot
26700 20 62 65 20 61 64 76 61 6e 63 65 64 0a 2a 2a 20   be advanced.** 
26710 69 6e 20 65 69 74 68 65 72 20 64 69 72 65 63 74  in either direct
26720 69 6f 6e 2e 20 20 49 6e 20 6f 74 68 65 72 20 77  ion.  In other w
26730 6f 72 64 73 2c 20 74 68 65 20 4e 65 78 74 20 61  ords, the Next a
26740 6e 64 20 50 72 65 76 20 6f 70 63 6f 64 65 73 20  nd Prev opcodes 
26750 77 69 6c 6c 0a 2a 2a 20 6e 6f 74 20 77 6f 72 6b  will.** not work
26760 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 68 69 73 20   following this 
26770 6f 70 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 53 65  opcode..**.** Se
26780 65 20 61 6c 73 6f 3a 20 46 6f 75 6e 64 2c 20 4e  e also: Found, N
26790 6f 74 46 6f 75 6e 64 2c 20 4e 6f 43 6f 6e 66 6c  otFound, NoConfl
267a0 69 63 74 2c 20 53 65 65 6b 52 6f 77 69 64 0a 2a  ict, SeekRowid.*
267b0 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 6f 74  /./* Opcode: Not
267c0 45 78 69 73 74 73 20 50 31 20 50 32 20 50 33 20  Exists P1 P2 P3 
267d0 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  * *.** Synopsis:
267e0 20 69 6e 74 6b 65 79 3d 72 5b 50 33 5d 0a 2a 2a   intkey=r[P3].**
267f0 0a 2a 2a 20 50 31 20 69 73 20 74 68 65 20 69 6e  .** P1 is the in
26800 64 65 78 20 6f 66 20 61 20 63 75 72 73 6f 72 20  dex of a cursor 
26810 6f 70 65 6e 20 6f 6e 20 61 6e 20 53 51 4c 20 74  open on an SQL t
26820 61 62 6c 65 20 62 74 72 65 65 20 28 77 69 74 68  able btree (with
26830 20 69 6e 74 65 67 65 72 0a 2a 2a 20 6b 65 79 73   integer.** keys
26840 29 2e 20 20 50 33 20 69 73 20 61 6e 20 69 6e 74  ).  P3 is an int
26850 65 67 65 72 20 72 6f 77 69 64 2e 20 20 49 66 20  eger rowid.  If 
26860 50 31 20 64 6f 65 73 20 6e 6f 74 20 63 6f 6e 74  P1 does not cont
26870 61 69 6e 20 61 20 72 65 63 6f 72 64 20 77 69 74  ain a record wit
26880 68 0a 2a 2a 20 72 6f 77 69 64 20 50 33 20 74 68  h.** rowid P3 th
26890 65 6e 20 6a 75 6d 70 20 69 6d 6d 65 64 69 61 74  en jump immediat
268a0 65 6c 79 20 74 6f 20 50 32 2e 20 20 4f 72 2c 20  ely to P2.  Or, 
268b0 69 66 20 50 32 20 69 73 20 30 2c 20 72 61 69 73  if P2 is 0, rais
268c0 65 20 61 6e 0a 2a 2a 20 53 51 4c 49 54 45 5f 43  e an.** SQLITE_C
268d0 4f 52 52 55 50 54 20 65 72 72 6f 72 2e 20 49 66  ORRUPT error. If
268e0 20 50 31 20 64 6f 65 73 20 63 6f 6e 74 61 69 6e   P1 does contain
268f0 20 61 20 72 65 63 6f 72 64 20 77 69 74 68 20 72   a record with r
26900 6f 77 69 64 20 50 33 20 74 68 65 6e 20 0a 2a 2a  owid P3 then .**
26910 20 6c 65 61 76 65 20 74 68 65 20 63 75 72 73 6f   leave the curso
26920 72 20 70 6f 69 6e 74 69 6e 67 20 61 74 20 74 68  r pointing at th
26930 61 74 20 72 65 63 6f 72 64 20 61 6e 64 20 66 61  at record and fa
26940 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68  ll through to th
26950 65 20 6e 65 78 74 0a 2a 2a 20 69 6e 73 74 72 75  e next.** instru
26960 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  ction..**.** The
26970 20 4f 50 5f 53 65 65 6b 52 6f 77 69 64 20 6f 70   OP_SeekRowid op
26980 63 6f 64 65 20 70 65 72 66 6f 72 6d 73 20 74 68  code performs th
26990 65 20 73 61 6d 65 20 6f 70 65 72 61 74 69 6f 6e  e same operation
269a0 20 62 75 74 20 61 6c 73 6f 20 61 6c 6c 6f 77 73   but also allows
269b0 20 74 68 65 0a 2a 2a 20 50 33 20 72 65 67 69 73   the.** P3 regis
269c0 74 65 72 20 74 6f 20 63 6f 6e 74 61 69 6e 20 61  ter to contain a
269d0 20 6e 6f 6e 2d 69 6e 74 65 67 65 72 20 76 61 6c   non-integer val
269e0 75 65 2c 20 69 6e 20 77 68 69 63 68 20 63 61 73  ue, in which cas
269f0 65 20 74 68 65 20 6a 75 6d 70 20 69 73 0a 2a 2a  e the jump is.**
26a00 20 61 6c 77 61 79 73 20 74 61 6b 65 6e 2e 20 20   always taken.  
26a10 54 68 69 73 20 6f 70 63 6f 64 65 20 72 65 71 75  This opcode requ
26a20 69 72 65 73 20 74 68 61 74 20 50 33 20 61 6c 77  ires that P3 alw
26a30 61 79 73 20 63 6f 6e 74 61 69 6e 20 61 6e 20 69  ays contain an i
26a40 6e 74 65 67 65 72 2e 0a 2a 2a 0a 2a 2a 20 54 68  nteger..**.** Th
26a50 65 20 4f 50 5f 4e 6f 74 46 6f 75 6e 64 20 6f 70  e OP_NotFound op
26a60 63 6f 64 65 20 70 65 72 66 6f 72 6d 73 20 74 68  code performs th
26a70 65 20 73 61 6d 65 20 6f 70 65 72 61 74 69 6f 6e  e same operation
26a80 20 6f 6e 20 69 6e 64 65 78 20 62 74 72 65 65 73   on index btrees
26a90 0a 2a 2a 20 28 77 69 74 68 20 61 72 62 69 74 72  .** (with arbitr
26aa0 61 72 79 20 6d 75 6c 74 69 2d 76 61 6c 75 65 20  ary multi-value 
26ab0 6b 65 79 73 29 2e 0a 2a 2a 0a 2a 2a 20 54 68 69  keys)..**.** Thi
26ac0 73 20 6f 70 63 6f 64 65 20 6c 65 61 76 65 73 20  s opcode leaves 
26ad0 74 68 65 20 63 75 72 73 6f 72 20 69 6e 20 61 20  the cursor in a 
26ae0 73 74 61 74 65 20 77 68 65 72 65 20 69 74 20 63  state where it c
26af0 61 6e 6e 6f 74 20 62 65 20 61 64 76 61 6e 63 65  annot be advance
26b00 64 0a 2a 2a 20 69 6e 20 65 69 74 68 65 72 20 64  d.** in either d
26b10 69 72 65 63 74 69 6f 6e 2e 20 20 49 6e 20 6f 74  irection.  In ot
26b20 68 65 72 20 77 6f 72 64 73 2c 20 74 68 65 20 4e  her words, the N
26b30 65 78 74 20 61 6e 64 20 50 72 65 76 20 6f 70 63  ext and Prev opc
26b40 6f 64 65 73 20 77 69 6c 6c 0a 2a 2a 20 6e 6f 74  odes will.** not
26b50 20 77 6f 72 6b 20 66 6f 6c 6c 6f 77 69 6e 67 20   work following 
26b60 74 68 69 73 20 6f 70 63 6f 64 65 2e 0a 2a 2a 0a  this opcode..**.
26b70 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 46 6f 75  ** See also: Fou
26b80 6e 64 2c 20 4e 6f 74 46 6f 75 6e 64 2c 20 4e 6f  nd, NotFound, No
26b90 43 6f 6e 66 6c 69 63 74 2c 20 53 65 65 6b 52 6f  Conflict, SeekRo
26ba0 77 69 64 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53  wid.*/.case OP_S
26bb0 65 65 6b 52 6f 77 69 64 3a 20 7b 20 20 20 20 20  eekRowid: {     
26bc0 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 20     /* jump, in3 
26bd0 2a 2f 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20  */.  VdbeCursor 
26be0 2a 70 43 3b 0a 20 20 42 74 43 75 72 73 6f 72 20  *pC;.  BtCursor 
26bf0 2a 70 43 72 73 72 3b 0a 20 20 69 6e 74 20 72 65  *pCrsr;.  int re
26c00 73 3b 0a 20 20 75 36 34 20 69 4b 65 79 3b 0a 0a  s;.  u64 iKey;..
26c10 20 20 70 49 6e 33 20 3d 20 26 61 4d 65 6d 5b 70    pIn3 = &aMem[p
26c20 4f 70 2d 3e 70 33 5d 3b 0a 20 20 74 65 73 74 63  Op->p3];.  testc
26c30 61 73 65 28 20 70 49 6e 33 2d 3e 66 6c 61 67 73  ase( pIn3->flags
26c40 20 26 20 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20   & MEM_Int );.  
26c50 74 65 73 74 63 61 73 65 28 20 70 49 6e 33 2d 3e  testcase( pIn3->
26c60 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 52  flags & MEM_IntR
26c70 65 61 6c 20 29 3b 0a 20 20 69 66 28 20 28 70 49  eal );.  if( (pI
26c80 6e 33 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d  n3->flags & (MEM
26c90 5f 49 6e 74 7c 4d 45 4d 5f 49 6e 74 52 65 61 6c  _Int|MEM_IntReal
26ca0 29 29 3d 3d 30 20 29 7b 0a 20 20 20 20 2f 2a 20  ))==0 ){.    /* 
26cb0 4d 61 6b 65 20 73 75 72 65 20 70 49 6e 33 2d 3e  Make sure pIn3->
26cc0 75 2e 69 20 63 6f 6e 74 61 69 6e 73 20 61 20 76  u.i contains a v
26cd0 61 6c 69 64 20 69 6e 74 65 67 65 72 20 72 65 70  alid integer rep
26ce0 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66 0a 20  resentation of. 
26cf0 20 20 20 2a 2a 20 74 68 65 20 6b 65 79 20 76 61     ** the key va
26d00 6c 75 65 2c 20 62 75 74 20 64 6f 20 6e 6f 74 20  lue, but do not 
26d10 63 68 61 6e 67 65 20 74 68 65 20 64 61 74 61 74  change the datat
26d20 79 70 65 20 6f 66 20 74 68 65 20 72 65 67 69 73  ype of the regis
26d30 74 65 72 2c 20 61 73 0a 20 20 20 20 2a 2a 20 6f  ter, as.    ** o
26d40 74 68 65 72 20 70 61 72 74 73 20 6f 66 20 74 68  ther parts of th
26d50 65 20 70 65 72 70 61 72 65 64 20 73 74 61 74 65  e perpared state
26d60 6d 65 6e 74 20 6d 69 67 68 74 20 62 65 20 64 65  ment might be de
26d70 70 65 6e 64 69 6e 67 20 6f 6e 20 74 68 65 0a 20  pending on the. 
26d80 20 20 20 2a 2a 20 63 75 72 72 65 6e 74 20 64 61     ** current da
26d90 74 61 74 79 70 65 2e 20 2a 2f 0a 20 20 20 20 75  tatype. */.    u
26da0 31 36 20 6f 72 69 67 46 6c 61 67 73 20 3d 20 70  16 origFlags = p
26db0 49 6e 33 2d 3e 66 6c 61 67 73 3b 0a 20 20 20 20  In3->flags;.    
26dc0 69 6e 74 20 69 73 4e 6f 74 49 6e 74 3b 0a 20 20  int isNotInt;.  
26dd0 20 20 61 70 70 6c 79 41 66 66 69 6e 69 74 79 28    applyAffinity(
26de0 70 49 6e 33 2c 20 53 51 4c 49 54 45 5f 41 46 46  pIn3, SQLITE_AFF
26df0 5f 4e 55 4d 45 52 49 43 2c 20 65 6e 63 6f 64 69  _NUMERIC, encodi
26e00 6e 67 29 3b 0a 20 20 20 20 69 73 4e 6f 74 49 6e  ng);.    isNotIn
26e10 74 20 3d 20 28 70 49 6e 33 2d 3e 66 6c 61 67 73  t = (pIn3->flags
26e20 20 26 20 4d 45 4d 5f 49 6e 74 29 3d 3d 30 3b 0a   & MEM_Int)==0;.
26e30 20 20 20 20 70 49 6e 33 2d 3e 66 6c 61 67 73 20      pIn3->flags 
26e40 3d 20 6f 72 69 67 46 6c 61 67 73 3b 0a 20 20 20  = origFlags;.   
26e50 20 69 66 28 20 69 73 4e 6f 74 49 6e 74 20 29 20   if( isNotInt ) 
26e60 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b  goto jump_to_p2;
26e70 0a 20 20 7d 0a 20 20 2f 2a 20 46 61 6c 6c 20 74  .  }.  /* Fall t
26e80 68 72 6f 75 67 68 20 69 6e 74 6f 20 4f 50 5f 4e  hrough into OP_N
26e90 6f 74 45 78 69 73 74 73 20 2a 2f 0a 63 61 73 65  otExists */.case
26ea0 20 4f 50 5f 4e 6f 74 45 78 69 73 74 73 3a 20 20   OP_NotExists:  
26eb0 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c          /* jump,
26ec0 20 69 6e 33 20 2a 2f 0a 20 20 70 49 6e 33 20 3d   in3 */.  pIn3 =
26ed0 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b   &aMem[pOp->p3];
26ee0 0a 20 20 61 73 73 65 72 74 28 20 28 70 49 6e 33  .  assert( (pIn3
26ef0 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e  ->flags & MEM_In
26f00 74 29 21 3d 30 20 7c 7c 20 70 4f 70 2d 3e 6f 70  t)!=0 || pOp->op
26f10 63 6f 64 65 3d 3d 4f 50 5f 53 65 65 6b 52 6f 77  code==OP_SeekRow
26f20 69 64 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  id );.  assert( 
26f30 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f  pOp->p1>=0 && pO
26f40 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72  p->p1<p->nCursor
26f50 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70   );.  pC = p->ap
26f60 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Csr[pOp->p1];.  
26f70 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b  assert( pC!=0 );
26f80 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44  .#ifdef SQLITE_D
26f90 45 42 55 47 0a 20 20 69 66 28 20 70 4f 70 2d 3e  EBUG.  if( pOp->
26fa0 6f 70 63 6f 64 65 3d 3d 4f 50 5f 53 65 65 6b 52  opcode==OP_SeekR
26fb0 6f 77 69 64 20 29 20 70 43 2d 3e 73 65 65 6b 4f  owid ) pC->seekO
26fc0 70 20 3d 20 4f 50 5f 53 65 65 6b 52 6f 77 69 64  p = OP_SeekRowid
26fd0 3b 0a 23 65 6e 64 69 66 0a 20 20 61 73 73 65 72  ;.#endif.  asser
26fe0 74 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 20 29  t( pC->isTable )
26ff0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  ;.  assert( pC->
27000 65 43 75 72 54 79 70 65 3d 3d 43 55 52 54 59 50  eCurType==CURTYP
27010 45 5f 42 54 52 45 45 20 29 3b 0a 20 20 70 43 72  E_BTREE );.  pCr
27020 73 72 20 3d 20 70 43 2d 3e 75 63 2e 70 43 75 72  sr = pC->uc.pCur
27030 73 6f 72 3b 0a 20 20 61 73 73 65 72 74 28 20 70  sor;.  assert( p
27040 43 72 73 72 21 3d 30 20 29 3b 0a 20 20 72 65 73  Crsr!=0 );.  res
27050 20 3d 20 30 3b 0a 20 20 69 4b 65 79 20 3d 20 70   = 0;.  iKey = p
27060 49 6e 33 2d 3e 75 2e 69 3b 0a 20 20 72 63 20 3d  In3->u.i;.  rc =
27070 20 73 71 6c 69 74 65 33 42 74 72 65 65 4d 6f 76   sqlite3BtreeMov
27080 65 74 6f 55 6e 70 61 63 6b 65 64 28 70 43 72 73  etoUnpacked(pCrs
27090 72 2c 20 30 2c 20 69 4b 65 79 2c 20 30 2c 20 26  r, 0, iKey, 0, &
270a0 72 65 73 29 3b 0a 20 20 61 73 73 65 72 74 28 20  res);.  assert( 
270b0 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 7c 7c  rc==SQLITE_OK ||
270c0 20 72 65 73 3d 3d 30 20 29 3b 0a 20 20 70 43 2d   res==0 );.  pC-
270d0 3e 6d 6f 76 65 74 6f 54 61 72 67 65 74 20 3d 20  >movetoTarget = 
270e0 69 4b 65 79 3b 20 20 2f 2a 20 55 73 65 64 20 62  iKey;  /* Used b
270f0 79 20 4f 50 5f 44 65 6c 65 74 65 20 2a 2f 0a 20  y OP_Delete */. 
27100 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 30   pC->nullRow = 0
27110 3b 0a 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61  ;.  pC->cacheSta
27120 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c  tus = CACHE_STAL
27130 45 3b 0a 20 20 70 43 2d 3e 64 65 66 65 72 72 65  E;.  pC->deferre
27140 64 4d 6f 76 65 74 6f 20 3d 20 30 3b 0a 20 20 56  dMoveto = 0;.  V
27150 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 72  dbeBranchTaken(r
27160 65 73 21 3d 30 2c 32 29 3b 0a 20 20 70 43 2d 3e  es!=0,2);.  pC->
27170 73 65 65 6b 52 65 73 75 6c 74 20 3d 20 72 65 73  seekResult = res
27180 3b 0a 20 20 69 66 28 20 72 65 73 21 3d 30 20 29  ;.  if( res!=0 )
27190 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 72 63  {.    assert( rc
271a0 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 3b 0a 20  ==SQLITE_OK );. 
271b0 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 32 3d 3d     if( pOp->p2==
271c0 30 20 29 7b 0a 20 20 20 20 20 20 72 63 20 3d 20  0 ){.      rc = 
271d0 53 51 4c 49 54 45 5f 43 4f 52 52 55 50 54 5f 42  SQLITE_CORRUPT_B
271e0 4b 50 54 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a  KPT;.    }else{.
271f0 20 20 20 20 20 20 67 6f 74 6f 20 6a 75 6d 70 5f        goto jump_
27200 74 6f 5f 70 32 3b 0a 20 20 20 20 7d 0a 20 20 7d  to_p2;.    }.  }
27210 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f  .  if( rc ) goto
27220 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
27230 72 6f 72 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  ror;.  break;.}.
27240 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 65 71 75  ./* Opcode: Sequ
27250 65 6e 63 65 20 50 31 20 50 32 20 2a 20 2a 20 2a  ence P1 P2 * * *
27260 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b  .** Synopsis: r[
27270 50 32 5d 3d 63 75 72 73 6f 72 5b 50 31 5d 2e 63  P2]=cursor[P1].c
27280 74 72 2b 2b 0a 2a 2a 0a 2a 2a 20 46 69 6e 64 20  tr++.**.** Find 
27290 74 68 65 20 6e 65 78 74 20 61 76 61 69 6c 61 62  the next availab
272a0 6c 65 20 73 65 71 75 65 6e 63 65 20 6e 75 6d 62  le sequence numb
272b0 65 72 20 66 6f 72 20 63 75 72 73 6f 72 20 50 31  er for cursor P1
272c0 2e 0a 2a 2a 20 57 72 69 74 65 20 74 68 65 20 73  ..** Write the s
272d0 65 71 75 65 6e 63 65 20 6e 75 6d 62 65 72 20 69  equence number i
272e0 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 32 2e  nto register P2.
272f0 0a 2a 2a 20 54 68 65 20 73 65 71 75 65 6e 63 65  .** The sequence
27300 20 6e 75 6d 62 65 72 20 6f 6e 20 74 68 65 20 63   number on the c
27310 75 72 73 6f 72 20 69 73 20 69 6e 63 72 65 6d 65  ursor is increme
27320 6e 74 65 64 20 61 66 74 65 72 20 74 68 69 73 0a  nted after this.
27330 2a 2a 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20  ** instruction. 
27340 20 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 65 71   .*/.case OP_Seq
27350 75 65 6e 63 65 3a 20 7b 20 20 20 20 20 20 20 20  uence: {        
27360 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20 20     /* out2 */.  
27370 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
27380 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d  =0 && pOp->p1<p-
27390 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 61 73  >nCursor );.  as
273a0 73 65 72 74 28 20 70 2d 3e 61 70 43 73 72 5b 70  sert( p->apCsr[p
273b0 4f 70 2d 3e 70 31 5d 21 3d 30 20 29 3b 0a 20 20  Op->p1]!=0 );.  
273c0 61 73 73 65 72 74 28 20 70 2d 3e 61 70 43 73 72  assert( p->apCsr
273d0 5b 70 4f 70 2d 3e 70 31 5d 2d 3e 65 43 75 72 54  [pOp->p1]->eCurT
273e0 79 70 65 21 3d 43 55 52 54 59 50 45 5f 56 54 41  ype!=CURTYPE_VTA
273f0 42 20 29 3b 0a 20 20 70 4f 75 74 20 3d 20 6f 75  B );.  pOut = ou
27400 74 32 50 72 65 72 65 6c 65 61 73 65 28 70 2c 20  t2Prerelease(p, 
27410 70 4f 70 29 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e  pOp);.  pOut->u.
27420 69 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70  i = p->apCsr[pOp
27430 2d 3e 70 31 5d 2d 3e 73 65 71 43 6f 75 6e 74 2b  ->p1]->seqCount+
27440 2b 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 0a  +;.  break;.}...
27450 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 65 77 52 6f  /* Opcode: NewRo
27460 77 69 64 20 50 31 20 50 32 20 50 33 20 2a 20 2a  wid P1 P2 P3 * *
27470 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b  .** Synopsis: r[
27480 50 32 5d 3d 72 6f 77 69 64 0a 2a 2a 0a 2a 2a 20  P2]=rowid.**.** 
27490 47 65 74 20 61 20 6e 65 77 20 69 6e 74 65 67 65  Get a new intege
274a0 72 20 72 65 63 6f 72 64 20 6e 75 6d 62 65 72 20  r record number 
274b0 28 61 2e 6b 2e 61 20 22 72 6f 77 69 64 22 29 20  (a.k.a "rowid") 
274c0 75 73 65 64 20 61 73 20 74 68 65 20 6b 65 79 20  used as the key 
274d0 74 6f 20 61 20 74 61 62 6c 65 2e 0a 2a 2a 20 54  to a table..** T
274e0 68 65 20 72 65 63 6f 72 64 20 6e 75 6d 62 65 72  he record number
274f0 20 69 73 20 6e 6f 74 20 70 72 65 76 69 6f 75 73   is not previous
27500 6c 79 20 75 73 65 64 20 61 73 20 61 20 6b 65 79  ly used as a key
27510 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65   in the database
27520 0a 2a 2a 20 74 61 62 6c 65 20 74 68 61 74 20 63  .** table that c
27530 75 72 73 6f 72 20 50 31 20 70 6f 69 6e 74 73 20  ursor P1 points 
27540 74 6f 2e 20 20 54 68 65 20 6e 65 77 20 72 65 63  to.  The new rec
27550 6f 72 64 20 6e 75 6d 62 65 72 20 69 73 20 77 72  ord number is wr
27560 69 74 74 65 6e 0a 2a 2a 20 77 72 69 74 74 65 6e  itten.** written
27570 20 74 6f 20 72 65 67 69 73 74 65 72 20 50 32 2e   to register P2.
27580 0a 2a 2a 0a 2a 2a 20 49 66 20 50 33 3e 30 20 74  .**.** If P3>0 t
27590 68 65 6e 20 50 33 20 69 73 20 61 20 72 65 67 69  hen P3 is a regi
275a0 73 74 65 72 20 69 6e 20 74 68 65 20 72 6f 6f 74  ster in the root
275b0 20 66 72 61 6d 65 20 6f 66 20 74 68 69 73 20 56   frame of this V
275c0 44 42 45 20 74 68 61 74 20 68 6f 6c 64 73 20 0a  DBE that holds .
275d0 2a 2a 20 74 68 65 20 6c 61 72 67 65 73 74 20 70  ** the largest p
275e0 72 65 76 69 6f 75 73 6c 79 20 67 65 6e 65 72 61  reviously genera
275f0 74 65 64 20 72 65 63 6f 72 64 20 6e 75 6d 62 65  ted record numbe
27600 72 2e 20 4e 6f 20 6e 65 77 20 72 65 63 6f 72 64  r. No new record
27610 20 6e 75 6d 62 65 72 73 20 61 72 65 0a 2a 2a 20   numbers are.** 
27620 61 6c 6c 6f 77 65 64 20 74 6f 20 62 65 20 6c 65  allowed to be le
27630 73 73 20 74 68 61 6e 20 74 68 69 73 20 76 61 6c  ss than this val
27640 75 65 2e 20 57 68 65 6e 20 74 68 69 73 20 76 61  ue. When this va
27650 6c 75 65 20 72 65 61 63 68 65 73 20 69 74 73 20  lue reaches its 
27660 6d 61 78 69 6d 75 6d 2c 20 0a 2a 2a 20 61 6e 20  maximum, .** an 
27670 53 51 4c 49 54 45 5f 46 55 4c 4c 20 65 72 72 6f  SQLITE_FULL erro
27680 72 20 69 73 20 67 65 6e 65 72 61 74 65 64 2e 20  r is generated. 
27690 54 68 65 20 50 33 20 72 65 67 69 73 74 65 72 20  The P3 register 
276a0 69 73 20 75 70 64 61 74 65 64 20 77 69 74 68 20  is updated with 
276b0 74 68 65 20 27 0a 2a 2a 20 67 65 6e 65 72 61 74  the '.** generat
276c0 65 64 20 72 65 63 6f 72 64 20 6e 75 6d 62 65 72  ed record number
276d0 2e 20 54 68 69 73 20 50 33 20 6d 65 63 68 61 6e  . This P3 mechan
276e0 69 73 6d 20 69 73 20 75 73 65 64 20 74 6f 20 68  ism is used to h
276f0 65 6c 70 20 69 6d 70 6c 65 6d 65 6e 74 20 74 68  elp implement th
27700 65 0a 2a 2a 20 41 55 54 4f 49 4e 43 52 45 4d 45  e.** AUTOINCREME
27710 4e 54 20 66 65 61 74 75 72 65 2e 0a 2a 2f 0a 63  NT feature..*/.c
27720 61 73 65 20 4f 50 5f 4e 65 77 52 6f 77 69 64 3a  ase OP_NewRowid:
27730 20 7b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20   {           /* 
27740 6f 75 74 32 20 2a 2f 0a 20 20 69 36 34 20 76 3b  out2 */.  i64 v;
27750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27760 20 2f 2a 20 54 68 65 20 6e 65 77 20 72 6f 77 69   /* The new rowi
27770 64 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73 6f  d */.  VdbeCurso
27780 72 20 2a 70 43 3b 20 20 20 20 20 20 20 20 2f 2a  r *pC;        /*
27790 20 43 75 72 73 6f 72 20 6f 66 20 74 61 62 6c 65   Cursor of table
277a0 20 74 6f 20 67 65 74 20 74 68 65 20 6e 65 77 20   to get the new 
277b0 72 6f 77 69 64 20 2a 2f 0a 20 20 69 6e 74 20 72  rowid */.  int r
277c0 65 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  es;             
277d0 20 20 2f 2a 20 52 65 73 75 6c 74 20 6f 66 20 61    /* Result of a
277e0 6e 20 73 71 6c 69 74 65 33 42 74 72 65 65 4c 61  n sqlite3BtreeLa
277f0 73 74 28 29 20 2a 2f 0a 20 20 69 6e 74 20 63 6e  st() */.  int cn
27800 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  t;              
27810 20 2f 2a 20 43 6f 75 6e 74 65 72 20 74 6f 20 6c   /* Counter to l
27820 69 6d 69 74 20 74 68 65 20 6e 75 6d 62 65 72 20  imit the number 
27830 6f 66 20 73 65 61 72 63 68 65 73 20 2a 2f 0a 20  of searches */. 
27840 20 4d 65 6d 20 2a 70 4d 65 6d 3b 20 20 20 20 20   Mem *pMem;     
27850 20 20 20 20 20 20 20 20 2f 2a 20 52 65 67 69 73          /* Regis
27860 74 65 72 20 68 6f 6c 64 69 6e 67 20 6c 61 72 67  ter holding larg
27870 65 73 74 20 72 6f 77 69 64 20 66 6f 72 20 41 55  est rowid for AU
27880 54 4f 49 4e 43 52 45 4d 45 4e 54 20 2a 2f 0a 20  TOINCREMENT */. 
27890 20 56 64 62 65 46 72 61 6d 65 20 2a 70 46 72 61   VdbeFrame *pFra
278a0 6d 65 3b 20 20 20 20 20 2f 2a 20 52 6f 6f 74 20  me;     /* Root 
278b0 66 72 61 6d 65 20 6f 66 20 56 44 42 45 20 2a 2f  frame of VDBE */
278c0 0a 0a 20 20 76 20 3d 20 30 3b 0a 20 20 72 65 73  ..  v = 0;.  res
278d0 20 3d 20 30 3b 0a 20 20 70 4f 75 74 20 3d 20 6f   = 0;.  pOut = o
278e0 75 74 32 50 72 65 72 65 6c 65 61 73 65 28 70 2c  ut2Prerelease(p,
278f0 20 70 4f 70 29 3b 0a 20 20 61 73 73 65 72 74 28   pOp);.  assert(
27900 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70   pOp->p1>=0 && p
27910 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f  Op->p1<p->nCurso
27920 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61  r );.  pC = p->a
27930 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  pCsr[pOp->p1];. 
27940 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29   assert( pC!=0 )
27950 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  ;.  assert( pC->
27960 69 73 54 61 62 6c 65 20 29 3b 0a 20 20 61 73 73  isTable );.  ass
27970 65 72 74 28 20 70 43 2d 3e 65 43 75 72 54 79 70  ert( pC->eCurTyp
27980 65 3d 3d 43 55 52 54 59 50 45 5f 42 54 52 45 45  e==CURTYPE_BTREE
27990 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43   );.  assert( pC
279a0 2d 3e 75 63 2e 70 43 75 72 73 6f 72 21 3d 30 20  ->uc.pCursor!=0 
279b0 29 3b 0a 20 20 7b 0a 20 20 20 20 2f 2a 20 54 68  );.  {.    /* Th
279c0 65 20 6e 65 78 74 20 72 6f 77 69 64 20 6f 72 20  e next rowid or 
279d0 72 65 63 6f 72 64 20 6e 75 6d 62 65 72 20 28 64  record number (d
279e0 69 66 66 65 72 65 6e 74 20 74 65 72 6d 73 20 66  ifferent terms f
279f0 6f 72 20 74 68 65 20 73 61 6d 65 0a 20 20 20 20  or the same.    
27a00 2a 2a 20 74 68 69 6e 67 29 20 69 73 20 6f 62 74  ** thing) is obt
27a10 61 69 6e 65 64 20 69 6e 20 61 20 74 77 6f 2d 73  ained in a two-s
27a20 74 65 70 20 61 6c 67 6f 72 69 74 68 6d 2e 0a 20  tep algorithm.. 
27a30 20 20 20 2a 2a 0a 20 20 20 20 2a 2a 20 46 69 72     **.    ** Fir
27a40 73 74 20 77 65 20 61 74 74 65 6d 70 74 20 74 6f  st we attempt to
27a50 20 66 69 6e 64 20 74 68 65 20 6c 61 72 67 65 73   find the larges
27a60 74 20 65 78 69 73 74 69 6e 67 20 72 6f 77 69 64  t existing rowid
27a70 20 61 6e 64 20 61 64 64 20 6f 6e 65 0a 20 20 20   and add one.   
27a80 20 2a 2a 20 74 6f 20 74 68 61 74 2e 20 20 42 75   ** to that.  Bu
27a90 74 20 69 66 20 74 68 65 20 6c 61 72 67 65 73 74  t if the largest
27aa0 20 65 78 69 73 74 69 6e 67 20 72 6f 77 69 64 20   existing rowid 
27ab0 69 73 20 61 6c 72 65 61 64 79 20 74 68 65 20 6d  is already the m
27ac0 61 78 69 6d 75 6d 0a 20 20 20 20 2a 2a 20 70 6f  aximum.    ** po
27ad0 73 69 74 69 76 65 20 69 6e 74 65 67 65 72 2c 20  sitive integer, 
27ae0 77 65 20 68 61 76 65 20 74 6f 20 66 61 6c 6c 20  we have to fall 
27af0 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20 73  through to the s
27b00 65 63 6f 6e 64 0a 20 20 20 20 2a 2a 20 70 72 6f  econd.    ** pro
27b10 62 61 62 69 6c 69 73 74 69 63 20 61 6c 67 6f 72  babilistic algor
27b20 69 74 68 6d 0a 20 20 20 20 2a 2a 0a 20 20 20 20  ithm.    **.    
27b30 2a 2a 20 54 68 65 20 73 65 63 6f 6e 64 20 61 6c  ** The second al
27b40 67 6f 72 69 74 68 6d 20 69 73 20 74 6f 20 73 65  gorithm is to se
27b50 6c 65 63 74 20 61 20 72 6f 77 69 64 20 61 74 20  lect a rowid at 
27b60 72 61 6e 64 6f 6d 20 61 6e 64 20 73 65 65 20 69  random and see i
27b70 66 0a 20 20 20 20 2a 2a 20 69 74 20 61 6c 72 65  f.    ** it alre
27b80 61 64 79 20 65 78 69 73 74 73 20 69 6e 20 74 68  ady exists in th
27b90 65 20 74 61 62 6c 65 2e 20 20 49 66 20 69 74 20  e table.  If it 
27ba0 64 6f 65 73 20 6e 6f 74 20 65 78 69 73 74 2c 20  does not exist, 
27bb0 77 65 20 68 61 76 65 0a 20 20 20 20 2a 2a 20 73  we have.    ** s
27bc0 75 63 63 65 65 64 65 64 2e 20 20 49 66 20 74 68  ucceeded.  If th
27bd0 65 20 72 61 6e 64 6f 6d 20 72 6f 77 69 64 20 64  e random rowid d
27be0 6f 65 73 20 65 78 69 73 74 2c 20 77 65 20 73 65  oes exist, we se
27bf0 6c 65 63 74 20 61 20 6e 65 77 20 6f 6e 65 0a 20  lect a new one. 
27c00 20 20 20 2a 2a 20 61 6e 64 20 74 72 79 20 61 67     ** and try ag
27c10 61 69 6e 2c 20 75 70 20 74 6f 20 31 30 30 20 74  ain, up to 100 t
27c20 69 6d 65 73 2e 0a 20 20 20 20 2a 2f 0a 20 20 20  imes..    */.   
27c30 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73 54   assert( pC->isT
27c40 61 62 6c 65 20 29 3b 0a 0a 23 69 66 64 65 66 20  able );..#ifdef 
27c50 53 51 4c 49 54 45 5f 33 32 42 49 54 5f 52 4f 57  SQLITE_32BIT_ROW
27c60 49 44 0a 23 20 20 20 64 65 66 69 6e 65 20 4d 41  ID.#   define MA
27c70 58 5f 52 4f 57 49 44 20 30 78 37 66 66 66 66 66  X_ROWID 0x7fffff
27c80 66 66 0a 23 65 6c 73 65 0a 20 20 20 20 2f 2a 20  ff.#else.    /* 
27c90 53 6f 6d 65 20 63 6f 6d 70 69 6c 65 72 73 20 63  Some compilers c
27ca0 6f 6d 70 6c 61 69 6e 20 61 62 6f 75 74 20 63 6f  omplain about co
27cb0 6e 73 74 61 6e 74 73 20 6f 66 20 74 68 65 20 66  nstants of the f
27cc0 6f 72 6d 20 30 78 37 66 66 66 66 66 66 66 66 66  orm 0x7fffffffff
27cd0 66 66 66 66 66 66 2e 0a 20 20 20 20 2a 2a 20 4f  ffffff..    ** O
27ce0 74 68 65 72 73 20 63 6f 6d 70 6c 61 69 6e 20 61  thers complain a
27cf0 62 6f 75 74 20 30 78 37 66 66 66 66 66 66 66 66  bout 0x7ffffffff
27d00 66 66 66 66 66 66 66 66 4c 4c 2e 20 20 54 68 65  ffffffffLL.  The
27d10 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63 72 6f   following macro
27d20 20 73 65 65 6d 73 0a 20 20 20 20 2a 2a 20 74 6f   seems.    ** to
27d30 20 70 72 6f 76 69 64 65 20 74 68 65 20 63 6f 6e   provide the con
27d40 73 74 61 6e 74 20 77 68 69 6c 65 20 6d 61 6b 69  stant while maki
27d50 6e 67 20 61 6c 6c 20 63 6f 6d 70 69 6c 65 72 73  ng all compilers
27d60 20 68 61 70 70 79 2e 0a 20 20 20 20 2a 2f 0a 23   happy..    */.#
27d70 20 20 20 64 65 66 69 6e 65 20 4d 41 58 5f 52 4f     define MAX_RO
27d80 57 49 44 20 20 28 69 36 34 29 28 20 28 28 28 75  WID  (i64)( (((u
27d90 36 34 29 30 78 37 66 66 66 66 66 66 66 29 3c 3c  64)0x7fffffff)<<
27da0 33 32 29 20 7c 20 28 75 36 34 29 30 78 66 66 66  32) | (u64)0xfff
27db0 66 66 66 66 66 20 29 0a 23 65 6e 64 69 66 0a 0a  fffff ).#endif..
27dc0 20 20 20 20 69 66 28 20 21 70 43 2d 3e 75 73 65      if( !pC->use
27dd0 52 61 6e 64 6f 6d 52 6f 77 69 64 20 29 7b 0a 20  RandomRowid ){. 
27de0 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65       rc = sqlite
27df0 33 42 74 72 65 65 4c 61 73 74 28 70 43 2d 3e 75  3BtreeLast(pC->u
27e00 63 2e 70 43 75 72 73 6f 72 2c 20 26 72 65 73 29  c.pCursor, &res)
27e10 3b 0a 20 20 20 20 20 20 69 66 28 20 72 63 21 3d  ;.      if( rc!=
27e20 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20  SQLITE_OK ){.   
27e30 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f       goto abort_
27e40 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
27e50 20 20 20 20 7d 0a 20 20 20 20 20 20 69 66 28 20      }.      if( 
27e60 72 65 73 20 29 7b 0a 20 20 20 20 20 20 20 20 76  res ){.        v
27e70 20 3d 20 31 3b 20 20 20 2f 2a 20 49 4d 50 3a 20   = 1;   /* IMP: 
27e80 52 2d 36 31 39 31 34 2d 34 38 30 37 34 20 2a 2f  R-61914-48074 */
27e90 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  .      }else{.  
27ea0 20 20 20 20 20 20 61 73 73 65 72 74 28 20 73 71        assert( sq
27eb0 6c 69 74 65 33 42 74 72 65 65 43 75 72 73 6f 72  lite3BtreeCursor
27ec0 49 73 56 61 6c 69 64 28 70 43 2d 3e 75 63 2e 70  IsValid(pC->uc.p
27ed0 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 20 20 20  Cursor) );.     
27ee0 20 20 20 76 20 3d 20 73 71 6c 69 74 65 33 42 74     v = sqlite3Bt
27ef0 72 65 65 49 6e 74 65 67 65 72 4b 65 79 28 70 43  reeIntegerKey(pC
27f00 2d 3e 75 63 2e 70 43 75 72 73 6f 72 29 3b 0a 20  ->uc.pCursor);. 
27f10 20 20 20 20 20 20 20 69 66 28 20 76 3e 3d 4d 41         if( v>=MA
27f20 58 5f 52 4f 57 49 44 20 29 7b 0a 20 20 20 20 20  X_ROWID ){.     
27f30 20 20 20 20 20 70 43 2d 3e 75 73 65 52 61 6e 64       pC->useRand
27f40 6f 6d 52 6f 77 69 64 20 3d 20 31 3b 0a 20 20 20  omRowid = 1;.   
27f50 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
27f60 20 20 20 20 20 20 76 2b 2b 3b 20 20 20 2f 2a 20        v++;   /* 
27f70 49 4d 50 3a 20 52 2d 32 39 35 33 38 2d 33 34 39  IMP: R-29538-349
27f80 38 37 20 2a 2f 0a 20 20 20 20 20 20 20 20 7d 0a  87 */.        }.
27f90 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 0a 23        }.    }..#
27fa0 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
27fb0 49 54 5f 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54  IT_AUTOINCREMENT
27fc0 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 33  .    if( pOp->p3
27fd0 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 41 73 73   ){.      /* Ass
27fe0 65 72 74 20 74 68 61 74 20 50 33 20 69 73 20 61  ert that P3 is a
27ff0 20 76 61 6c 69 64 20 6d 65 6d 6f 72 79 20 63 65   valid memory ce
28000 6c 6c 2e 20 2a 2f 0a 20 20 20 20 20 20 61 73 73  ll. */.      ass
28010 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20 29  ert( pOp->p3>0 )
28020 3b 0a 20 20 20 20 20 20 69 66 28 20 70 2d 3e 70  ;.      if( p->p
28030 46 72 61 6d 65 20 29 7b 0a 20 20 20 20 20 20 20  Frame ){.       
28040 20 66 6f 72 28 70 46 72 61 6d 65 3d 70 2d 3e 70   for(pFrame=p->p
28050 46 72 61 6d 65 3b 20 70 46 72 61 6d 65 2d 3e 70  Frame; pFrame->p
28060 50 61 72 65 6e 74 3b 20 70 46 72 61 6d 65 3d 70  Parent; pFrame=p
28070 46 72 61 6d 65 2d 3e 70 50 61 72 65 6e 74 29 3b  Frame->pParent);
28080 0a 20 20 20 20 20 20 20 20 2f 2a 20 41 73 73 65  .        /* Asse
28090 72 74 20 74 68 61 74 20 50 33 20 69 73 20 61 20  rt that P3 is a 
280a0 76 61 6c 69 64 20 6d 65 6d 6f 72 79 20 63 65 6c  valid memory cel
280b0 6c 2e 20 2a 2f 0a 20 20 20 20 20 20 20 20 61 73  l. */.        as
280c0 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c 3d 70  sert( pOp->p3<=p
280d0 46 72 61 6d 65 2d 3e 6e 4d 65 6d 20 29 3b 0a 20  Frame->nMem );. 
280e0 20 20 20 20 20 20 20 70 4d 65 6d 20 3d 20 26 70         pMem = &p
280f0 46 72 61 6d 65 2d 3e 61 4d 65 6d 5b 70 4f 70 2d  Frame->aMem[pOp-
28100 3e 70 33 5d 3b 0a 20 20 20 20 20 20 7d 65 6c 73  >p3];.      }els
28110 65 7b 0a 20 20 20 20 20 20 20 20 2f 2a 20 41 73  e{.        /* As
28120 73 65 72 74 20 74 68 61 74 20 50 33 20 69 73 20  sert that P3 is 
28130 61 20 76 61 6c 69 64 20 6d 65 6d 6f 72 79 20 63  a valid memory c
28140 65 6c 6c 2e 20 2a 2f 0a 20 20 20 20 20 20 20 20  ell. */.        
28150 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c  assert( pOp->p3<
28160 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d  =(p->nMem+1 - p-
28170 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 20  >nCursor) );.   
28180 20 20 20 20 20 70 4d 65 6d 20 3d 20 26 61 4d 65       pMem = &aMe
28190 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 20 20  m[pOp->p3];.    
281a0 20 20 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68      memAboutToCh
281b0 61 6e 67 65 28 70 2c 20 70 4d 65 6d 29 3b 0a 20  ange(p, pMem);. 
281c0 20 20 20 20 20 7d 0a 20 20 20 20 20 20 61 73 73       }.      ass
281d0 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28  ert( memIsValid(
281e0 70 4d 65 6d 29 20 29 3b 0a 0a 20 20 20 20 20 20  pMem) );..      
281f0 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70  REGISTER_TRACE(p
28200 4f 70 2d 3e 70 33 2c 20 70 4d 65 6d 29 3b 0a 20  Op->p3, pMem);. 
28210 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
28220 4d 65 6d 49 6e 74 65 67 65 72 69 66 79 28 70 4d  MemIntegerify(pM
28230 65 6d 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72  em);.      asser
28240 74 28 20 28 70 4d 65 6d 2d 3e 66 6c 61 67 73 20  t( (pMem->flags 
28250 26 20 4d 45 4d 5f 49 6e 74 29 21 3d 30 20 29 3b  & MEM_Int)!=0 );
28260 20 20 2f 2a 20 6d 65 6d 28 50 33 29 20 68 6f 6c    /* mem(P3) hol
28270 64 73 20 61 6e 20 69 6e 74 65 67 65 72 20 2a 2f  ds an integer */
28280 0a 20 20 20 20 20 20 69 66 28 20 70 4d 65 6d 2d  .      if( pMem-
28290 3e 75 2e 69 3d 3d 4d 41 58 5f 52 4f 57 49 44 20  >u.i==MAX_ROWID 
282a0 7c 7c 20 70 43 2d 3e 75 73 65 52 61 6e 64 6f 6d  || pC->useRandom
282b0 52 6f 77 69 64 20 29 7b 0a 20 20 20 20 20 20 20  Rowid ){.       
282c0 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 46 55 4c   rc = SQLITE_FUL
282d0 4c 3b 20 20 20 2f 2a 20 49 4d 50 3a 20 52 2d 31  L;   /* IMP: R-1
282e0 37 38 31 37 2d 30 30 36 33 30 20 2a 2f 0a 20 20  7817-00630 */.  
282f0 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74        goto abort
28300 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20  _due_to_error;. 
28310 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69 66 28       }.      if(
28320 20 76 3c 70 4d 65 6d 2d 3e 75 2e 69 2b 31 20 29   v<pMem->u.i+1 )
28330 7b 0a 20 20 20 20 20 20 20 20 76 20 3d 20 70 4d  {.        v = pM
28340 65 6d 2d 3e 75 2e 69 20 2b 20 31 3b 0a 20 20 20  em->u.i + 1;.   
28350 20 20 20 7d 0a 20 20 20 20 20 20 70 4d 65 6d 2d     }.      pMem-
28360 3e 75 2e 69 20 3d 20 76 3b 0a 20 20 20 20 7d 0a  >u.i = v;.    }.
28370 23 65 6e 64 69 66 0a 20 20 20 20 69 66 28 20 70  #endif.    if( p
28380 43 2d 3e 75 73 65 52 61 6e 64 6f 6d 52 6f 77 69  C->useRandomRowi
28390 64 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 49 4d  d ){.      /* IM
283a0 50 4c 45 4d 45 4e 54 41 54 49 4f 4e 2d 4f 46 3a  PLEMENTATION-OF:
283b0 20 52 2d 30 37 36 37 37 2d 34 31 38 38 31 20 49   R-07677-41881 I
283c0 66 20 74 68 65 20 6c 61 72 67 65 73 74 20 52 4f  f the largest RO
283d0 57 49 44 20 69 73 20 65 71 75 61 6c 20 74 6f 20  WID is equal to 
283e0 74 68 65 0a 20 20 20 20 20 20 2a 2a 20 6c 61 72  the.      ** lar
283f0 67 65 73 74 20 70 6f 73 73 69 62 6c 65 20 69 6e  gest possible in
28400 74 65 67 65 72 20 28 39 32 32 33 33 37 32 30 33  teger (922337203
28410 36 38 35 34 37 37 35 38 30 37 29 20 74 68 65 6e  6854775807) then
28420 20 74 68 65 20 64 61 74 61 62 61 73 65 0a 20 20   the database.  
28430 20 20 20 20 2a 2a 20 65 6e 67 69 6e 65 20 73 74      ** engine st
28440 61 72 74 73 20 70 69 63 6b 69 6e 67 20 70 6f 73  arts picking pos
28450 69 74 69 76 65 20 63 61 6e 64 69 64 61 74 65 20  itive candidate 
28460 52 4f 57 49 44 73 20 61 74 20 72 61 6e 64 6f 6d  ROWIDs at random
28470 20 75 6e 74 69 6c 0a 20 20 20 20 20 20 2a 2a 20   until.      ** 
28480 69 74 20 66 69 6e 64 73 20 6f 6e 65 20 74 68 61  it finds one tha
28490 74 20 69 73 20 6e 6f 74 20 70 72 65 76 69 6f 75  t is not previou
284a0 73 6c 79 20 75 73 65 64 2e 20 2a 2f 0a 20 20 20  sly used. */.   
284b0 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e     assert( pOp->
284c0 70 33 3d 3d 30 20 29 3b 20 20 2f 2a 20 57 65 20  p3==0 );  /* We 
284d0 63 61 6e 6e 6f 74 20 62 65 20 69 6e 20 72 61 6e  cannot be in ran
284e0 64 6f 6d 20 72 6f 77 69 64 20 6d 6f 64 65 20 69  dom rowid mode i
284f0 66 20 74 68 69 73 20 69 73 0a 20 20 20 20 20 20  f this is.      
28500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28510 20 20 20 20 20 20 20 2a 2a 20 61 6e 20 41 55 54         ** an AUT
28520 4f 49 4e 43 52 45 4d 45 4e 54 20 74 61 62 6c 65  OINCREMENT table
28530 2e 20 2a 2f 0a 20 20 20 20 20 20 63 6e 74 20 3d  . */.      cnt =
28540 20 30 3b 0a 20 20 20 20 20 20 64 6f 7b 0a 20 20   0;.      do{.  
28550 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 72 61        sqlite3_ra
28560 6e 64 6f 6d 6e 65 73 73 28 73 69 7a 65 6f 66 28  ndomness(sizeof(
28570 76 29 2c 20 26 76 29 3b 0a 20 20 20 20 20 20 20  v), &v);.       
28580 20 76 20 26 3d 20 28 4d 41 58 5f 52 4f 57 49 44   v &= (MAX_ROWID
28590 3e 3e 31 29 3b 20 76 2b 2b 3b 20 20 2f 2a 20 45  >>1); v++;  /* E
285a0 6e 73 75 72 65 20 74 68 61 74 20 76 20 69 73 20  nsure that v is 
285b0 67 72 65 61 74 65 72 20 74 68 61 6e 20 7a 65 72  greater than zer
285c0 6f 20 2a 2f 0a 20 20 20 20 20 20 7d 77 68 69 6c  o */.      }whil
285d0 65 28 20 20 28 28 72 63 20 3d 20 73 71 6c 69 74  e(  ((rc = sqlit
285e0 65 33 42 74 72 65 65 4d 6f 76 65 74 6f 55 6e 70  e3BtreeMovetoUnp
285f0 61 63 6b 65 64 28 70 43 2d 3e 75 63 2e 70 43 75  acked(pC->uc.pCu
28600 72 73 6f 72 2c 20 30 2c 20 28 75 36 34 29 76 2c  rsor, 0, (u64)v,
28610 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
28620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28640 20 20 30 2c 20 26 72 65 73 29 29 3d 3d 53 51 4c    0, &res))==SQL
28650 49 54 45 5f 4f 4b 29 0a 20 20 20 20 20 20 20 20  ITE_OK).        
28660 20 20 20 20 26 26 20 28 72 65 73 3d 3d 30 29 0a      && (res==0).
28670 20 20 20 20 20 20 20 20 20 20 20 20 26 26 20 28              && (
28680 2b 2b 63 6e 74 3c 31 30 30 29 29 3b 0a 20 20 20  ++cnt<100));.   
28690 20 20 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f     if( rc ) goto
286a0 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
286b0 72 6f 72 3b 0a 20 20 20 20 20 20 69 66 28 20 72  ror;.      if( r
286c0 65 73 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20  es==0 ){.       
286d0 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 46 55 4c   rc = SQLITE_FUL
286e0 4c 3b 20 20 20 2f 2a 20 49 4d 50 3a 20 52 2d 33  L;   /* IMP: R-3
286f0 38 32 31 39 2d 35 33 30 30 32 20 2a 2f 0a 20 20  8219-53002 */.  
28700 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74        goto abort
28710 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20  _due_to_error;. 
28720 20 20 20 20 20 7d 0a 20 20 20 20 20 20 61 73 73       }.      ass
28730 65 72 74 28 20 76 3e 30 20 29 3b 20 20 2f 2a 20  ert( v>0 );  /* 
28740 45 56 3a 20 52 2d 34 30 38 31 32 2d 30 33 35 37  EV: R-40812-0357
28750 30 20 2a 2f 0a 20 20 20 20 7d 0a 20 20 20 20 70  0 */.    }.    p
28760 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74  C->deferredMovet
28770 6f 20 3d 20 30 3b 0a 20 20 20 20 70 43 2d 3e 63  o = 0;.    pC->c
28780 61 63 68 65 53 74 61 74 75 73 20 3d 20 43 41 43  acheStatus = CAC
28790 48 45 5f 53 54 41 4c 45 3b 0a 20 20 7d 0a 20 20  HE_STALE;.  }.  
287a0 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 76 3b 0a 20  pOut->u.i = v;. 
287b0 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
287c0 63 6f 64 65 3a 20 49 6e 73 65 72 74 20 50 31 20  code: Insert P1 
287d0 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53  P2 P3 P4 P5.** S
287e0 79 6e 6f 70 73 69 73 3a 20 69 6e 74 6b 65 79 3d  ynopsis: intkey=
287f0 72 5b 50 33 5d 20 64 61 74 61 3d 72 5b 50 32 5d  r[P3] data=r[P2]
28800 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 61 6e 20  .**.** Write an 
28810 65 6e 74 72 79 20 69 6e 74 6f 20 74 68 65 20 74  entry into the t
28820 61 62 6c 65 20 6f 66 20 63 75 72 73 6f 72 20 50  able of cursor P
28830 31 2e 20 20 41 20 6e 65 77 20 65 6e 74 72 79 20  1.  A new entry 
28840 69 73 0a 2a 2a 20 63 72 65 61 74 65 64 20 69 66  is.** created if
28850 20 69 74 20 64 6f 65 73 6e 27 74 20 61 6c 72 65   it doesn't alre
28860 61 64 79 20 65 78 69 73 74 20 6f 72 20 74 68 65  ady exist or the
28870 20 64 61 74 61 20 66 6f 72 20 61 6e 20 65 78 69   data for an exi
28880 73 74 69 6e 67 0a 2a 2a 20 65 6e 74 72 79 20 69  sting.** entry i
28890 73 20 6f 76 65 72 77 72 69 74 74 65 6e 2e 20 20  s overwritten.  
288a0 54 68 65 20 64 61 74 61 20 69 73 20 74 68 65 20  The data is the 
288b0 76 61 6c 75 65 20 4d 45 4d 5f 42 6c 6f 62 20 73  value MEM_Blob s
288c0 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74 65  tored in registe
288d0 72 0a 2a 2a 20 6e 75 6d 62 65 72 20 50 32 2e 20  r.** number P2. 
288e0 54 68 65 20 6b 65 79 20 69 73 20 73 74 6f 72 65  The key is store
288f0 64 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33  d in register P3
28900 2e 20 54 68 65 20 6b 65 79 20 6d 75 73 74 0a 2a  . The key must.*
28910 2a 20 62 65 20 61 20 4d 45 4d 5f 49 6e 74 2e 0a  * be a MEM_Int..
28920 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 4f 50 46  **.** If the OPF
28930 4c 41 47 5f 4e 43 48 41 4e 47 45 20 66 6c 61 67  LAG_NCHANGE flag
28940 20 6f 66 20 50 35 20 69 73 20 73 65 74 2c 20 74   of P5 is set, t
28950 68 65 6e 20 74 68 65 20 72 6f 77 20 63 68 61 6e  hen the row chan
28960 67 65 20 63 6f 75 6e 74 20 69 73 0a 2a 2a 20 69  ge count is.** i
28970 6e 63 72 65 6d 65 6e 74 65 64 20 28 6f 74 68 65  ncremented (othe
28980 72 77 69 73 65 20 6e 6f 74 29 2e 20 20 49 66 20  rwise not).  If 
28990 74 68 65 20 4f 50 46 4c 41 47 5f 4c 41 53 54 52  the OPFLAG_LASTR
289a0 4f 57 49 44 20 66 6c 61 67 20 6f 66 20 50 35 20  OWID flag of P5 
289b0 69 73 20 73 65 74 2c 0a 2a 2a 20 74 68 65 6e 20  is set,.** then 
289c0 72 6f 77 69 64 20 69 73 20 73 74 6f 72 65 64 20  rowid is stored 
289d0 66 6f 72 20 73 75 62 73 65 71 75 65 6e 74 20 72  for subsequent r
289e0 65 74 75 72 6e 20 62 79 20 74 68 65 0a 2a 2a 20  eturn by the.** 
289f0 73 71 6c 69 74 65 33 5f 6c 61 73 74 5f 69 6e 73  sqlite3_last_ins
28a00 65 72 74 5f 72 6f 77 69 64 28 29 20 66 75 6e 63  ert_rowid() func
28a10 74 69 6f 6e 20 28 6f 74 68 65 72 77 69 73 65 20  tion (otherwise 
28a20 69 74 20 69 73 20 75 6e 6d 6f 64 69 66 69 65 64  it is unmodified
28a30 29 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20  )..**.** If the 
28a40 4f 50 46 4c 41 47 5f 55 53 45 53 45 45 4b 52 45  OPFLAG_USESEEKRE
28a50 53 55 4c 54 20 66 6c 61 67 20 6f 66 20 50 35 20  SULT flag of P5 
28a60 69 73 20 73 65 74 2c 20 74 68 65 20 69 6d 70 6c  is set, the impl
28a70 65 6d 65 6e 74 61 74 69 6f 6e 20 6d 69 67 68 74  ementation might
28a80 0a 2a 2a 20 72 75 6e 20 66 61 73 74 65 72 20 62  .** run faster b
28a90 79 20 61 76 6f 69 64 69 6e 67 20 61 6e 20 75 6e  y avoiding an un
28aa0 6e 65 63 65 73 73 61 72 79 20 73 65 65 6b 20 6f  necessary seek o
28ab0 6e 20 63 75 72 73 6f 72 20 50 31 2e 20 20 48 6f  n cursor P1.  Ho
28ac0 77 65 76 65 72 2c 0a 2a 2a 20 74 68 65 20 4f 50  wever,.** the OP
28ad0 46 4c 41 47 5f 55 53 45 53 45 45 4b 52 45 53 55  FLAG_USESEEKRESU
28ae0 4c 54 20 66 6c 61 67 20 6d 75 73 74 20 6f 6e 6c  LT flag must onl
28af0 79 20 62 65 20 73 65 74 20 69 66 20 74 68 65 72  y be set if ther
28b00 65 20 68 61 76 65 20 62 65 65 6e 20 6e 6f 20 70  e have been no p
28b10 72 69 6f 72 0a 2a 2a 20 73 65 65 6b 73 20 6f 6e  rior.** seeks on
28b20 20 74 68 65 20 63 75 72 73 6f 72 20 6f 72 20 69   the cursor or i
28b30 66 20 74 68 65 20 6d 6f 73 74 20 72 65 63 65 6e  f the most recen
28b40 74 20 73 65 65 6b 20 75 73 65 64 20 61 20 6b 65  t seek used a ke
28b50 79 20 65 71 75 61 6c 20 74 6f 20 50 33 2e 0a 2a  y equal to P3..*
28b60 2a 0a 2a 2a 20 49 66 20 74 68 65 20 4f 50 46 4c  *.** If the OPFL
28b70 41 47 5f 49 53 55 50 44 41 54 45 20 66 6c 61 67  AG_ISUPDATE flag
28b80 20 69 73 20 73 65 74 2c 20 74 68 65 6e 20 74 68   is set, then th
28b90 69 73 20 6f 70 63 6f 64 65 20 69 73 20 70 61 72  is opcode is par
28ba0 74 20 6f 66 20 61 6e 0a 2a 2a 20 55 50 44 41 54  t of an.** UPDAT
28bb0 45 20 6f 70 65 72 61 74 69 6f 6e 2e 20 20 4f 74  E operation.  Ot
28bc0 68 65 72 77 69 73 65 20 28 69 66 20 74 68 65 20  herwise (if the 
28bd0 66 6c 61 67 20 69 73 20 63 6c 65 61 72 29 20 74  flag is clear) t
28be0 68 65 6e 20 74 68 69 73 20 6f 70 63 6f 64 65 0a  hen this opcode.
28bf0 2a 2a 20 69 73 20 70 61 72 74 20 6f 66 20 61 6e  ** is part of an
28c00 20 49 4e 53 45 52 54 20 6f 70 65 72 61 74 69 6f   INSERT operatio
28c10 6e 2e 20 20 54 68 65 20 64 69 66 66 65 72 65 6e  n.  The differen
28c20 63 65 20 69 73 20 6f 6e 6c 79 20 69 6d 70 6f 72  ce is only impor
28c30 74 61 6e 74 20 74 6f 0a 2a 2a 20 74 68 65 20 75  tant to.** the u
28c40 70 64 61 74 65 20 68 6f 6f 6b 2e 0a 2a 2a 0a 2a  pdate hook..**.*
28c50 2a 20 50 61 72 61 6d 65 74 65 72 20 50 34 20 6d  * Parameter P4 m
28c60 61 79 20 70 6f 69 6e 74 20 74 6f 20 61 20 54 61  ay point to a Ta
28c70 62 6c 65 20 73 74 72 75 63 74 75 72 65 2c 20 6f  ble structure, o
28c80 72 20 6d 61 79 20 62 65 20 4e 55 4c 4c 2e 20 49  r may be NULL. I
28c90 66 20 69 74 20 69 73 20 0a 2a 2a 20 6e 6f 74 20  f it is .** not 
28ca0 4e 55 4c 4c 2c 20 74 68 65 6e 20 74 68 65 20 75  NULL, then the u
28cb0 70 64 61 74 65 2d 68 6f 6f 6b 20 28 73 71 6c 69  pdate-hook (sqli
28cc0 74 65 33 2e 78 55 70 64 61 74 65 43 61 6c 6c 62  te3.xUpdateCallb
28cd0 61 63 6b 29 20 69 73 20 69 6e 76 6f 6b 65 64 20  ack) is invoked 
28ce0 0a 2a 2a 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 20  .** following a 
28cf0 73 75 63 63 65 73 73 66 75 6c 20 69 6e 73 65 72  successful inser
28d00 74 2e 0a 2a 2a 0a 2a 2a 20 28 57 41 52 4e 49 4e  t..**.** (WARNIN
28d10 47 2f 54 4f 44 4f 3a 20 49 66 20 50 31 20 69 73  G/TODO: If P1 is
28d20 20 61 20 70 73 65 75 64 6f 2d 63 75 72 73 6f 72   a pseudo-cursor
28d30 20 61 6e 64 20 50 32 20 69 73 20 64 79 6e 61 6d   and P2 is dynam
28d40 69 63 61 6c 6c 79 0a 2a 2a 20 61 6c 6c 6f 63 61  ically.** alloca
28d50 74 65 64 2c 20 74 68 65 6e 20 6f 77 6e 65 72 73  ted, then owners
28d60 68 69 70 20 6f 66 20 50 32 20 69 73 20 74 72 61  hip of P2 is tra
28d70 6e 73 66 65 72 72 65 64 20 74 6f 20 74 68 65 20  nsferred to the 
28d80 70 73 65 75 64 6f 2d 63 75 72 73 6f 72 0a 2a 2a  pseudo-cursor.**
28d90 20 61 6e 64 20 72 65 67 69 73 74 65 72 20 50 32   and register P2
28da0 20 62 65 63 6f 6d 65 73 20 65 70 68 65 6d 65 72   becomes ephemer
28db0 61 6c 2e 20 20 49 66 20 74 68 65 20 63 75 72 73  al.  If the curs
28dc0 6f 72 20 69 73 20 63 68 61 6e 67 65 64 2c 20 74  or is changed, t
28dd0 68 65 0a 2a 2a 20 76 61 6c 75 65 20 6f 66 20 72  he.** value of r
28de0 65 67 69 73 74 65 72 20 50 32 20 77 69 6c 6c 20  egister P2 will 
28df0 74 68 65 6e 20 63 68 61 6e 67 65 2e 20 20 4d 61  then change.  Ma
28e00 6b 65 20 73 75 72 65 20 74 68 69 73 20 64 6f 65  ke sure this doe
28e10 73 20 6e 6f 74 0a 2a 2a 20 63 61 75 73 65 20 61  s not.** cause a
28e20 6e 79 20 70 72 6f 62 6c 65 6d 73 2e 29 0a 2a 2a  ny problems.).**
28e30 0a 2a 2a 20 54 68 69 73 20 69 6e 73 74 72 75 63  .** This instruc
28e40 74 69 6f 6e 20 6f 6e 6c 79 20 77 6f 72 6b 73 20  tion only works 
28e50 6f 6e 20 74 61 62 6c 65 73 2e 20 20 54 68 65 20  on tables.  The 
28e60 65 71 75 69 76 61 6c 65 6e 74 20 69 6e 73 74 72  equivalent instr
28e70 75 63 74 69 6f 6e 0a 2a 2a 20 66 6f 72 20 69 6e  uction.** for in
28e80 64 69 63 65 73 20 69 73 20 4f 50 5f 49 64 78 49  dices is OP_IdxI
28e90 6e 73 65 72 74 2e 0a 2a 2f 0a 63 61 73 65 20 4f  nsert..*/.case O
28ea0 50 5f 49 6e 73 65 72 74 3a 20 7b 0a 20 20 4d 65  P_Insert: {.  Me
28eb0 6d 20 2a 70 44 61 74 61 3b 20 20 20 20 20 20 20  m *pData;       
28ec0 2f 2a 20 4d 45 4d 20 63 65 6c 6c 20 68 6f 6c 64  /* MEM cell hold
28ed0 69 6e 67 20 64 61 74 61 20 66 6f 72 20 74 68 65  ing data for the
28ee0 20 72 65 63 6f 72 64 20 74 6f 20 62 65 20 69 6e   record to be in
28ef0 73 65 72 74 65 64 20 2a 2f 0a 20 20 4d 65 6d 20  serted */.  Mem 
28f00 2a 70 4b 65 79 3b 20 20 20 20 20 20 20 20 2f 2a  *pKey;        /*
28f10 20 4d 45 4d 20 63 65 6c 6c 20 68 6f 6c 64 69 6e   MEM cell holdin
28f20 67 20 6b 65 79 20 20 66 6f 72 20 74 68 65 20 72  g key  for the r
28f30 65 63 6f 72 64 20 2a 2f 0a 20 20 56 64 62 65 43  ecord */.  VdbeC
28f40 75 72 73 6f 72 20 2a 70 43 3b 20 20 20 2f 2a 20  ursor *pC;   /* 
28f50 43 75 72 73 6f 72 20 74 6f 20 74 61 62 6c 65 20  Cursor to table 
28f60 69 6e 74 6f 20 77 68 69 63 68 20 69 6e 73 65 72  into which inser
28f70 74 20 69 73 20 77 72 69 74 74 65 6e 20 2a 2f 0a  t is written */.
28f80 20 20 69 6e 74 20 73 65 65 6b 52 65 73 75 6c 74    int seekResult
28f90 3b 20 20 20 2f 2a 20 52 65 73 75 6c 74 20 6f 66  ;   /* Result of
28fa0 20 70 72 69 6f 72 20 73 65 65 6b 20 6f 72 20 30   prior seek or 0
28fb0 20 69 66 20 6e 6f 20 55 53 45 53 45 45 4b 52 45   if no USESEEKRE
28fc0 53 55 4c 54 20 66 6c 61 67 20 2a 2f 0a 20 20 63  SULT flag */.  c
28fd0 6f 6e 73 74 20 63 68 61 72 20 2a 7a 44 62 3b 20  onst char *zDb; 
28fe0 20 2f 2a 20 64 61 74 61 62 61 73 65 20 6e 61 6d   /* database nam
28ff0 65 20 2d 20 75 73 65 64 20 62 79 20 74 68 65 20  e - used by the 
29000 75 70 64 61 74 65 20 68 6f 6f 6b 20 2a 2f 0a 20  update hook */. 
29010 20 54 61 62 6c 65 20 2a 70 54 61 62 3b 20 20 20   Table *pTab;   
29020 20 20 20 2f 2a 20 54 61 62 6c 65 20 73 74 72 75     /* Table stru
29030 63 74 75 72 65 20 2d 20 75 73 65 64 20 62 79 20  cture - used by 
29040 75 70 64 61 74 65 20 61 6e 64 20 70 72 65 2d 75  update and pre-u
29050 70 64 61 74 65 20 68 6f 6f 6b 73 20 2a 2f 0a 20  pdate hooks */. 
29060 20 42 74 72 65 65 50 61 79 6c 6f 61 64 20 78 3b   BtreePayload x;
29070 20 20 20 2f 2a 20 50 61 79 6c 6f 61 64 20 74 6f     /* Payload to
29080 20 62 65 20 69 6e 73 65 72 74 65 64 20 2a 2f 0a   be inserted */.
29090 0a 20 20 70 44 61 74 61 20 3d 20 26 61 4d 65 6d  .  pData = &aMem
290a0 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 61 73 73  [pOp->p2];.  ass
290b0 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20  ert( pOp->p1>=0 
290c0 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43  && pOp->p1<p->nC
290d0 75 72 73 6f 72 20 29 3b 0a 20 20 61 73 73 65 72  ursor );.  asser
290e0 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 70 44  t( memIsValid(pD
290f0 61 74 61 29 20 29 3b 0a 20 20 70 43 20 3d 20 70  ata) );.  pC = p
29100 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d  ->apCsr[pOp->p1]
29110 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d  ;.  assert( pC!=
29120 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  0 );.  assert( p
29130 43 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43 55 52  C->eCurType==CUR
29140 54 59 50 45 5f 42 54 52 45 45 20 29 3b 0a 20 20  TYPE_BTREE );.  
29150 61 73 73 65 72 74 28 20 70 43 2d 3e 75 63 2e 70  assert( pC->uc.p
29160 43 75 72 73 6f 72 21 3d 30 20 29 3b 0a 20 20 61  Cursor!=0 );.  a
29170 73 73 65 72 74 28 20 28 70 4f 70 2d 3e 70 35 20  ssert( (pOp->p5 
29180 26 20 4f 50 46 4c 41 47 5f 49 53 4e 4f 4f 50 29  & OPFLAG_ISNOOP)
29190 20 7c 7c 20 70 43 2d 3e 69 73 54 61 62 6c 65 20   || pC->isTable 
291a0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  );.  assert( pOp
291b0 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 54 41 42  ->p4type==P4_TAB
291c0 4c 45 20 7c 7c 20 70 4f 70 2d 3e 70 34 74 79 70  LE || pOp->p4typ
291d0 65 3e 3d 50 34 5f 53 54 41 54 49 43 20 29 3b 0a  e>=P4_STATIC );.
291e0 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45    REGISTER_TRACE
291f0 28 70 4f 70 2d 3e 70 32 2c 20 70 44 61 74 61 29  (pOp->p2, pData)
29200 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 49  ;.  sqlite3VdbeI
29210 6e 63 72 57 72 69 74 65 43 6f 75 6e 74 65 72 28  ncrWriteCounter(
29220 70 2c 20 70 43 29 3b 0a 0a 20 20 70 4b 65 79 20  p, pC);..  pKey 
29230 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  = &aMem[pOp->p3]
29240 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4b 65 79  ;.  assert( pKey
29250 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e  ->flags & MEM_In
29260 74 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 6d  t );.  assert( m
29270 65 6d 49 73 56 61 6c 69 64 28 70 4b 65 79 29 20  emIsValid(pKey) 
29280 29 3b 0a 20 20 52 45 47 49 53 54 45 52 5f 54 52  );.  REGISTER_TR
29290 41 43 45 28 70 4f 70 2d 3e 70 33 2c 20 70 4b 65  ACE(pOp->p3, pKe
292a0 79 29 3b 0a 20 20 78 2e 6e 4b 65 79 20 3d 20 70  y);.  x.nKey = p
292b0 4b 65 79 2d 3e 75 2e 69 3b 0a 0a 20 20 69 66 28  Key->u.i;..  if(
292c0 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34   pOp->p4type==P4
292d0 5f 54 41 42 4c 45 20 26 26 20 48 41 53 5f 55 50  _TABLE && HAS_UP
292e0 44 41 54 45 5f 48 4f 4f 4b 28 64 62 29 20 29 7b  DATE_HOOK(db) ){
292f0 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 43 2d  .    assert( pC-
29300 3e 69 44 62 3e 3d 30 20 29 3b 0a 20 20 20 20 7a  >iDb>=0 );.    z
29310 44 62 20 3d 20 64 62 2d 3e 61 44 62 5b 70 43 2d  Db = db->aDb[pC-
29320 3e 69 44 62 5d 2e 7a 44 62 53 4e 61 6d 65 3b 0a  >iDb].zDbSName;.
29330 20 20 20 20 70 54 61 62 20 3d 20 70 4f 70 2d 3e      pTab = pOp->
29340 70 34 2e 70 54 61 62 3b 0a 20 20 20 20 61 73 73  p4.pTab;.    ass
29350 65 72 74 28 20 28 70 4f 70 2d 3e 70 35 20 26 20  ert( (pOp->p5 & 
29360 4f 50 46 4c 41 47 5f 49 53 4e 4f 4f 50 29 20 7c  OPFLAG_ISNOOP) |
29370 7c 20 48 61 73 52 6f 77 69 64 28 70 54 61 62 29  | HasRowid(pTab)
29380 20 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20   );.  }else{.   
29390 20 70 54 61 62 20 3d 20 30 3b 0a 20 20 20 20 7a   pTab = 0;.    z
293a0 44 62 20 3d 20 30 3b 20 20 2f 2a 20 4e 6f 74 20  Db = 0;  /* Not 
293b0 6e 65 65 64 65 64 2e 20 20 53 69 6c 65 6e 63 65  needed.  Silence
293c0 20 61 20 63 6f 6d 70 69 6c 65 72 20 77 61 72 6e   a compiler warn
293d0 69 6e 67 2e 20 2a 2f 0a 20 20 7d 0a 0a 23 69 66  ing. */.  }..#if
293e0 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  def SQLITE_ENABL
293f0 45 5f 50 52 45 55 50 44 41 54 45 5f 48 4f 4f 4b  E_PREUPDATE_HOOK
29400 0a 20 20 2f 2a 20 49 6e 76 6f 6b 65 20 74 68 65  .  /* Invoke the
29410 20 70 72 65 2d 75 70 64 61 74 65 20 68 6f 6f 6b   pre-update hook
29420 2c 20 69 66 20 61 6e 79 20 2a 2f 0a 20 20 69 66  , if any */.  if
29430 28 20 70 54 61 62 20 29 7b 0a 20 20 20 20 69 66  ( pTab ){.    if
29440 28 20 64 62 2d 3e 78 50 72 65 55 70 64 61 74 65  ( db->xPreUpdate
29450 43 61 6c 6c 62 61 63 6b 20 26 26 20 21 28 70 4f  Callback && !(pO
29460 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 49  p->p5 & OPFLAG_I
29470 53 55 50 44 41 54 45 29 20 29 7b 0a 20 20 20 20  SUPDATE) ){.    
29480 20 20 73 71 6c 69 74 65 33 56 64 62 65 50 72 65    sqlite3VdbePre
29490 55 70 64 61 74 65 48 6f 6f 6b 28 70 2c 20 70 43  UpdateHook(p, pC
294a0 2c 20 53 51 4c 49 54 45 5f 49 4e 53 45 52 54 2c  , SQLITE_INSERT,
294b0 20 7a 44 62 2c 20 70 54 61 62 2c 20 78 2e 6e 4b   zDb, pTab, x.nK
294c0 65 79 2c 70 4f 70 2d 3e 70 32 29 3b 0a 20 20 20  ey,pOp->p2);.   
294d0 20 7d 0a 20 20 20 20 69 66 28 20 64 62 2d 3e 78   }.    if( db->x
294e0 55 70 64 61 74 65 43 61 6c 6c 62 61 63 6b 3d 3d  UpdateCallback==
294f0 30 20 7c 7c 20 70 54 61 62 2d 3e 61 43 6f 6c 3d  0 || pTab->aCol=
29500 3d 30 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 50  =0 ){.      /* P
29510 72 65 76 65 6e 74 20 70 6f 73 74 2d 75 70 64 61  revent post-upda
29520 74 65 20 68 6f 6f 6b 20 66 72 6f 6d 20 72 75 6e  te hook from run
29530 6e 69 6e 67 20 69 6e 20 63 61 73 65 73 20 77 68  ning in cases wh
29540 65 6e 20 69 74 20 73 68 6f 75 6c 64 20 6e 6f 74  en it should not
29550 20 2a 2f 0a 20 20 20 20 20 20 70 54 61 62 20 3d   */.      pTab =
29560 20 30 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20   0;.    }.  }.  
29570 69 66 28 20 70 4f 70 2d 3e 70 35 20 26 20 4f 50  if( pOp->p5 & OP
29580 46 4c 41 47 5f 49 53 4e 4f 4f 50 20 29 20 62 72  FLAG_ISNOOP ) br
29590 65 61 6b 3b 0a 23 65 6e 64 69 66 0a 0a 20 20 69  eak;.#endif..  i
295a0 66 28 20 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46  f( pOp->p5 & OPF
295b0 4c 41 47 5f 4e 43 48 41 4e 47 45 20 29 20 70 2d  LAG_NCHANGE ) p-
295c0 3e 6e 43 68 61 6e 67 65 2b 2b 3b 0a 20 20 69 66  >nChange++;.  if
295d0 28 20 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c  ( pOp->p5 & OPFL
295e0 41 47 5f 4c 41 53 54 52 4f 57 49 44 20 29 20 64  AG_LASTROWID ) d
295f0 62 2d 3e 6c 61 73 74 52 6f 77 69 64 20 3d 20 78  b->lastRowid = x
29600 2e 6e 4b 65 79 3b 0a 20 20 61 73 73 65 72 74 28  .nKey;.  assert(
29610 20 70 44 61 74 61 2d 3e 66 6c 61 67 73 20 26 20   pData->flags & 
29620 28 4d 45 4d 5f 42 6c 6f 62 7c 4d 45 4d 5f 53 74  (MEM_Blob|MEM_St
29630 72 29 20 29 3b 0a 20 20 78 2e 70 44 61 74 61 20  r) );.  x.pData 
29640 3d 20 70 44 61 74 61 2d 3e 7a 3b 0a 20 20 78 2e  = pData->z;.  x.
29650 6e 44 61 74 61 20 3d 20 70 44 61 74 61 2d 3e 6e  nData = pData->n
29660 3b 0a 20 20 73 65 65 6b 52 65 73 75 6c 74 20 3d  ;.  seekResult =
29670 20 28 28 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46   ((pOp->p5 & OPF
29680 4c 41 47 5f 55 53 45 53 45 45 4b 52 45 53 55 4c  LAG_USESEEKRESUL
29690 54 29 20 3f 20 70 43 2d 3e 73 65 65 6b 52 65 73  T) ? pC->seekRes
296a0 75 6c 74 20 3a 20 30 29 3b 0a 20 20 69 66 28 20  ult : 0);.  if( 
296b0 70 44 61 74 61 2d 3e 66 6c 61 67 73 20 26 20 4d  pData->flags & M
296c0 45 4d 5f 5a 65 72 6f 20 29 7b 0a 20 20 20 20 78  EM_Zero ){.    x
296d0 2e 6e 5a 65 72 6f 20 3d 20 70 44 61 74 61 2d 3e  .nZero = pData->
296e0 75 2e 6e 5a 65 72 6f 3b 0a 20 20 7d 65 6c 73 65  u.nZero;.  }else
296f0 7b 0a 20 20 20 20 78 2e 6e 5a 65 72 6f 20 3d 20  {.    x.nZero = 
29700 30 3b 0a 20 20 7d 0a 20 20 78 2e 70 4b 65 79 20  0;.  }.  x.pKey 
29710 3d 20 30 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69  = 0;.  rc = sqli
29720 74 65 33 42 74 72 65 65 49 6e 73 65 72 74 28 70  te3BtreeInsert(p
29730 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 2c 20 26  C->uc.pCursor, &
29740 78 2c 0a 20 20 20 20 20 20 28 70 4f 70 2d 3e 70  x,.      (pOp->p
29750 35 20 26 20 28 4f 50 46 4c 41 47 5f 41 50 50 45  5 & (OPFLAG_APPE
29760 4e 44 7c 4f 50 46 4c 41 47 5f 53 41 56 45 50 4f  ND|OPFLAG_SAVEPO
29770 53 49 54 49 4f 4e 29 29 2c 20 73 65 65 6b 52 65  SITION)), seekRe
29780 73 75 6c 74 0a 20 20 29 3b 0a 20 20 70 43 2d 3e  sult.  );.  pC->
29790 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d  deferredMoveto =
297a0 20 30 3b 0a 20 20 70 43 2d 3e 63 61 63 68 65 53   0;.  pC->cacheS
297b0 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54  tatus = CACHE_ST
297c0 41 4c 45 3b 0a 0a 20 20 2f 2a 20 49 6e 76 6f 6b  ALE;..  /* Invok
297d0 65 20 74 68 65 20 75 70 64 61 74 65 2d 68 6f 6f  e the update-hoo
297e0 6b 20 69 66 20 72 65 71 75 69 72 65 64 2e 20 2a  k if required. *
297f0 2f 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f 74  /.  if( rc ) got
29800 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
29810 72 72 6f 72 3b 0a 20 20 69 66 28 20 70 54 61 62  rror;.  if( pTab
29820 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20   ){.    assert( 
29830 64 62 2d 3e 78 55 70 64 61 74 65 43 61 6c 6c 62  db->xUpdateCallb
29840 61 63 6b 21 3d 30 20 29 3b 0a 20 20 20 20 61 73  ack!=0 );.    as
29850 73 65 72 74 28 20 70 54 61 62 2d 3e 61 43 6f 6c  sert( pTab->aCol
29860 21 3d 30 20 29 3b 0a 20 20 20 20 64 62 2d 3e 78  !=0 );.    db->x
29870 55 70 64 61 74 65 43 61 6c 6c 62 61 63 6b 28 64  UpdateCallback(d
29880 62 2d 3e 70 55 70 64 61 74 65 41 72 67 2c 0a 20  b->pUpdateArg,. 
29890 20 20 20 20 20 20 20 20 20 20 28 70 4f 70 2d 3e            (pOp->
298a0 70 35 20 26 20 4f 50 46 4c 41 47 5f 49 53 55 50  p5 & OPFLAG_ISUP
298b0 44 41 54 45 29 20 3f 20 53 51 4c 49 54 45 5f 55  DATE) ? SQLITE_U
298c0 50 44 41 54 45 20 3a 20 53 51 4c 49 54 45 5f 49  PDATE : SQLITE_I
298d0 4e 53 45 52 54 2c 0a 20 20 20 20 20 20 20 20 20  NSERT,.         
298e0 20 20 7a 44 62 2c 20 70 54 61 62 2d 3e 7a 4e 61    zDb, pTab->zNa
298f0 6d 65 2c 20 78 2e 6e 4b 65 79 29 3b 0a 20 20 7d  me, x.nKey);.  }
29900 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
29910 4f 70 63 6f 64 65 3a 20 44 65 6c 65 74 65 20 50  Opcode: Delete P
29920 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a  1 P2 P3 P4 P5.**
29930 0a 2a 2a 20 44 65 6c 65 74 65 20 74 68 65 20 72  .** Delete the r
29940 65 63 6f 72 64 20 61 74 20 77 68 69 63 68 20 74  ecord at which t
29950 68 65 20 50 31 20 63 75 72 73 6f 72 20 69 73 20  he P1 cursor is 
29960 63 75 72 72 65 6e 74 6c 79 20 70 6f 69 6e 74 69  currently pointi
29970 6e 67 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65  ng..**.** If the
29980 20 4f 50 46 4c 41 47 5f 53 41 56 45 50 4f 53 49   OPFLAG_SAVEPOSI
29990 54 49 4f 4e 20 62 69 74 20 6f 66 20 74 68 65 20  TION bit of the 
299a0 50 35 20 70 61 72 61 6d 65 74 65 72 20 69 73 20  P5 parameter is 
299b0 73 65 74 2c 20 74 68 65 6e 0a 2a 2a 20 74 68 65  set, then.** the
299c0 20 63 75 72 73 6f 72 20 77 69 6c 6c 20 62 65 20   cursor will be 
299d0 6c 65 66 74 20 70 6f 69 6e 74 69 6e 67 20 61 74  left pointing at
299e0 20 20 65 69 74 68 65 72 20 74 68 65 20 6e 65 78    either the nex
299f0 74 20 6f 72 20 74 68 65 20 70 72 65 76 69 6f 75  t or the previou
29a00 73 0a 2a 2a 20 72 65 63 6f 72 64 20 69 6e 20 74  s.** record in t
29a10 68 65 20 74 61 62 6c 65 2e 20 49 66 20 69 74 20  he table. If it 
29a20 69 73 20 6c 65 66 74 20 70 6f 69 6e 74 69 6e 67  is left pointing
29a30 20 61 74 20 74 68 65 20 6e 65 78 74 20 72 65 63   at the next rec
29a40 6f 72 64 2c 20 74 68 65 6e 0a 2a 2a 20 74 68 65  ord, then.** the
29a50 20 6e 65 78 74 20 4e 65 78 74 20 69 6e 73 74 72   next Next instr
29a60 75 63 74 69 6f 6e 20 77 69 6c 6c 20 62 65 20 61  uction will be a
29a70 20 6e 6f 2d 6f 70 2e 20 41 73 20 61 20 72 65 73   no-op. As a res
29a80 75 6c 74 2c 20 69 6e 20 74 68 69 73 20 63 61 73  ult, in this cas
29a90 65 0a 2a 2a 20 69 74 20 69 73 20 6f 6b 20 74 6f  e.** it is ok to
29aa0 20 64 65 6c 65 74 65 20 61 20 72 65 63 6f 72 64   delete a record
29ab0 20 66 72 6f 6d 20 77 69 74 68 69 6e 20 61 20 4e   from within a N
29ac0 65 78 74 20 6c 6f 6f 70 2e 20 49 66 20 0a 2a 2a  ext loop. If .**
29ad0 20 4f 50 46 4c 41 47 5f 53 41 56 45 50 4f 53 49   OPFLAG_SAVEPOSI
29ae0 54 49 4f 4e 20 62 69 74 20 6f 66 20 50 35 20 69  TION bit of P5 i
29af0 73 20 63 6c 65 61 72 2c 20 74 68 65 6e 20 74 68  s clear, then th
29b00 65 20 63 75 72 73 6f 72 20 77 69 6c 6c 20 62 65  e cursor will be
29b10 0a 2a 2a 20 6c 65 66 74 20 69 6e 20 61 6e 20 75  .** left in an u
29b20 6e 64 65 66 69 6e 65 64 20 73 74 61 74 65 2e 0a  ndefined state..
29b30 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 4f 50 46  **.** If the OPF
29b40 4c 41 47 5f 41 55 58 44 45 4c 45 54 45 20 62 69  LAG_AUXDELETE bi
29b50 74 20 69 73 20 73 65 74 20 6f 6e 20 50 35 2c 20  t is set on P5, 
29b60 74 68 61 74 20 69 6e 64 69 63 61 74 65 73 20 74  that indicates t
29b70 68 61 74 20 74 68 69 73 0a 2a 2a 20 64 65 6c 65  hat this.** dele
29b80 74 65 20 6f 6e 65 20 6f 66 20 73 65 76 65 72 61  te one of severa
29b90 6c 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74  l associated wit
29ba0 68 20 64 65 6c 65 74 69 6e 67 20 61 20 74 61 62  h deleting a tab
29bb0 6c 65 20 72 6f 77 20 61 6e 64 20 61 6c 6c 20 69  le row and all i
29bc0 74 73 0a 2a 2a 20 61 73 73 6f 63 69 61 74 65 64  ts.** associated
29bd0 20 69 6e 64 65 78 20 65 6e 74 72 69 65 73 2e 20   index entries. 
29be0 20 45 78 61 63 74 6c 79 20 6f 6e 65 20 6f 66 20   Exactly one of 
29bf0 74 68 6f 73 65 20 64 65 6c 65 74 65 73 20 69 73  those deletes is
29c00 20 74 68 65 20 22 70 72 69 6d 61 72 79 22 0a 2a   the "primary".*
29c10 2a 20 64 65 6c 65 74 65 2e 20 20 54 68 65 20 6f  * delete.  The o
29c20 74 68 65 72 73 20 61 72 65 20 61 6c 6c 20 6f 6e  thers are all on
29c30 20 4f 50 46 4c 41 47 5f 46 4f 52 44 45 4c 45 54   OPFLAG_FORDELET
29c40 45 20 63 75 72 73 6f 72 73 20 6f 72 20 65 6c 73  E cursors or els
29c50 65 20 61 72 65 0a 2a 2a 20 6d 61 72 6b 65 64 20  e are.** marked 
29c60 77 69 74 68 20 74 68 65 20 41 55 58 44 45 4c 45  with the AUXDELE
29c70 54 45 20 66 6c 61 67 2e 0a 2a 2a 0a 2a 2a 20 49  TE flag..**.** I
29c80 66 20 74 68 65 20 4f 50 46 4c 41 47 5f 4e 43 48  f the OPFLAG_NCH
29c90 41 4e 47 45 20 66 6c 61 67 20 6f 66 20 50 32 20  ANGE flag of P2 
29ca0 28 4e 42 3a 20 50 32 20 6e 6f 74 20 50 35 29 20  (NB: P2 not P5) 
29cb0 69 73 20 73 65 74 2c 20 74 68 65 6e 20 74 68 65  is set, then the
29cc0 20 72 6f 77 0a 2a 2a 20 63 68 61 6e 67 65 20 63   row.** change c
29cd0 6f 75 6e 74 20 69 73 20 69 6e 63 72 65 6d 65 6e  ount is incremen
29ce0 74 65 64 20 28 6f 74 68 65 72 77 69 73 65 20 6e  ted (otherwise n
29cf0 6f 74 29 2e 0a 2a 2a 0a 2a 2a 20 50 31 20 6d 75  ot)..**.** P1 mu
29d00 73 74 20 6e 6f 74 20 62 65 20 70 73 65 75 64 6f  st not be pseudo
29d10 2d 74 61 62 6c 65 2e 20 20 49 74 20 68 61 73 20  -table.  It has 
29d20 74 6f 20 62 65 20 61 20 72 65 61 6c 20 74 61 62  to be a real tab
29d30 6c 65 20 77 69 74 68 0a 2a 2a 20 6d 75 6c 74 69  le with.** multi
29d40 70 6c 65 20 72 6f 77 73 2e 0a 2a 2a 0a 2a 2a 20  ple rows..**.** 
29d50 49 66 20 50 34 20 69 73 20 6e 6f 74 20 4e 55 4c  If P4 is not NUL
29d60 4c 20 74 68 65 6e 20 69 74 20 70 6f 69 6e 74 73  L then it points
29d70 20 74 6f 20 61 20 54 61 62 6c 65 20 6f 62 6a 65   to a Table obje
29d80 63 74 2e 20 49 6e 20 74 68 69 73 20 63 61 73 65  ct. In this case
29d90 20 65 69 74 68 65 72 20 0a 2a 2a 20 74 68 65 20   either .** the 
29da0 75 70 64 61 74 65 20 6f 72 20 70 72 65 2d 75 70  update or pre-up
29db0 64 61 74 65 20 68 6f 6f 6b 2c 20 6f 72 20 62 6f  date hook, or bo
29dc0 74 68 2c 20 6d 61 79 20 62 65 20 69 6e 76 6f 6b  th, may be invok
29dd0 65 64 2e 20 54 68 65 20 50 31 20 63 75 72 73 6f  ed. The P1 curso
29de0 72 20 6d 75 73 74 0a 2a 2a 20 68 61 76 65 20 62  r must.** have b
29df0 65 65 6e 20 70 6f 73 69 74 69 6f 6e 65 64 20 75  een positioned u
29e00 73 69 6e 67 20 4f 50 5f 4e 6f 74 46 6f 75 6e 64  sing OP_NotFound
29e10 20 70 72 69 6f 72 20 74 6f 20 69 6e 76 6f 6b 69   prior to invoki
29e20 6e 67 20 74 68 69 73 20 6f 70 63 6f 64 65 20 69  ng this opcode i
29e30 6e 20 0a 2a 2a 20 74 68 69 73 20 63 61 73 65 2e  n .** this case.
29e40 20 53 70 65 63 69 66 69 63 61 6c 6c 79 2c 20 69   Specifically, i
29e50 66 20 6f 6e 65 20 69 73 20 63 6f 6e 66 69 67 75  f one is configu
29e60 72 65 64 2c 20 74 68 65 20 70 72 65 2d 75 70 64  red, the pre-upd
29e70 61 74 65 20 68 6f 6f 6b 20 69 73 20 0a 2a 2a 20  ate hook is .** 
29e80 69 6e 76 6f 6b 65 64 20 69 66 20 50 34 20 69 73  invoked if P4 is
29e90 20 6e 6f 74 20 4e 55 4c 4c 2e 20 54 68 65 20 75   not NULL. The u
29ea0 70 64 61 74 65 2d 68 6f 6f 6b 20 69 73 20 69 6e  pdate-hook is in
29eb0 76 6f 6b 65 64 20 69 66 20 6f 6e 65 20 69 73 20  voked if one is 
29ec0 63 6f 6e 66 69 67 75 72 65 64 2c 20 0a 2a 2a 20  configured, .** 
29ed0 50 34 20 69 73 20 6e 6f 74 20 4e 55 4c 4c 2c 20  P4 is not NULL, 
29ee0 61 6e 64 20 74 68 65 20 4f 50 46 4c 41 47 5f 4e  and the OPFLAG_N
29ef0 43 48 41 4e 47 45 20 66 6c 61 67 20 69 73 20 73  CHANGE flag is s
29f00 65 74 20 69 6e 20 50 32 2e 0a 2a 2a 0a 2a 2a 20  et in P2..**.** 
29f10 49 66 20 74 68 65 20 4f 50 46 4c 41 47 5f 49 53  If the OPFLAG_IS
29f20 55 50 44 41 54 45 20 66 6c 61 67 20 69 73 20 73  UPDATE flag is s
29f30 65 74 20 69 6e 20 50 32 2c 20 74 68 65 6e 20 50  et in P2, then P
29f40 33 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 61  3 contains the a
29f50 64 64 72 65 73 73 0a 2a 2a 20 6f 66 20 74 68 65  ddress.** of the
29f60 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 74 68 61   memory cell tha
29f70 74 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 76  t contains the v
29f80 61 6c 75 65 20 74 68 61 74 20 74 68 65 20 72 6f  alue that the ro
29f90 77 69 64 20 6f 66 20 74 68 65 20 72 6f 77 20 77  wid of the row w
29fa0 69 6c 6c 0a 2a 2a 20 62 65 20 73 65 74 20 74 6f  ill.** be set to
29fb0 20 62 79 20 74 68 65 20 75 70 64 61 74 65 2e 0a   by the update..
29fc0 2a 2f 0a 63 61 73 65 20 4f 50 5f 44 65 6c 65 74  */.case OP_Delet
29fd0 65 3a 20 7b 0a 20 20 56 64 62 65 43 75 72 73 6f  e: {.  VdbeCurso
29fe0 72 20 2a 70 43 3b 0a 20 20 63 6f 6e 73 74 20 63  r *pC;.  const c
29ff0 68 61 72 20 2a 7a 44 62 3b 0a 20 20 54 61 62 6c  har *zDb;.  Tabl
2a000 65 20 2a 70 54 61 62 3b 0a 20 20 69 6e 74 20 6f  e *pTab;.  int o
2a010 70 66 6c 61 67 73 3b 0a 0a 20 20 6f 70 66 6c 61  pflags;..  opfla
2a020 67 73 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20  gs = pOp->p2;.  
2a030 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
2a040 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d  =0 && pOp->p1<p-
2a050 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43  >nCursor );.  pC
2a060 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d   = p->apCsr[pOp-
2a070 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p1];.  assert( 
2a080 70 43 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  pC!=0 );.  asser
2a090 74 28 20 70 43 2d 3e 65 43 75 72 54 79 70 65 3d  t( pC->eCurType=
2a0a0 3d 43 55 52 54 59 50 45 5f 42 54 52 45 45 20 29  =CURTYPE_BTREE )
2a0b0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  ;.  assert( pC->
2a0c0 75 63 2e 70 43 75 72 73 6f 72 21 3d 30 20 29 3b  uc.pCursor!=0 );
2a0d0 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 64  .  assert( pC->d
2a0e0 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 3d 3d 30  eferredMoveto==0
2a0f0 20 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62   );.  sqlite3Vdb
2a100 65 49 6e 63 72 57 72 69 74 65 43 6f 75 6e 74 65  eIncrWriteCounte
2a110 72 28 70 2c 20 70 43 29 3b 0a 0a 23 69 66 64 65  r(p, pC);..#ifde
2a120 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20  f SQLITE_DEBUG. 
2a130 20 69 66 28 20 70 4f 70 2d 3e 70 34 74 79 70 65   if( pOp->p4type
2a140 3d 3d 50 34 5f 54 41 42 4c 45 20 26 26 20 48 61  ==P4_TABLE && Ha
2a150 73 52 6f 77 69 64 28 70 4f 70 2d 3e 70 34 2e 70  sRowid(pOp->p4.p
2a160 54 61 62 29 20 26 26 20 70 4f 70 2d 3e 70 35 3d  Tab) && pOp->p5=
2a170 3d 30 20 29 7b 0a 20 20 20 20 2f 2a 20 49 66 20  =0 ){.    /* If 
2a180 70 35 20 69 73 20 7a 65 72 6f 2c 20 74 68 65 20  p5 is zero, the 
2a190 73 65 65 6b 20 6f 70 65 72 61 74 69 6f 6e 20 74  seek operation t
2a1a0 68 61 74 20 70 6f 73 69 74 69 6f 6e 65 64 20 74  hat positioned t
2a1b0 68 65 20 63 75 72 73 6f 72 20 70 72 69 6f 72 20  he cursor prior 
2a1c0 74 6f 0a 20 20 20 20 2a 2a 20 4f 50 5f 44 65 6c  to.    ** OP_Del
2a1d0 65 74 65 20 77 69 6c 6c 20 68 61 76 65 20 61 6c  ete will have al
2a1e0 73 6f 20 73 65 74 20 74 68 65 20 70 43 2d 3e 6d  so set the pC->m
2a1f0 6f 76 65 74 6f 54 61 72 67 65 74 20 66 69 65 6c  ovetoTarget fiel
2a200 64 20 74 6f 20 74 68 65 20 72 6f 77 69 64 20 6f  d to the rowid o
2a210 66 0a 20 20 20 20 2a 2a 20 74 68 65 20 72 6f 77  f.    ** the row
2a220 20 74 68 61 74 20 69 73 20 62 65 69 6e 67 20 64   that is being d
2a230 65 6c 65 74 65 64 20 2a 2f 0a 20 20 20 20 69 36  eleted */.    i6
2a240 34 20 69 4b 65 79 20 3d 20 73 71 6c 69 74 65 33  4 iKey = sqlite3
2a250 42 74 72 65 65 49 6e 74 65 67 65 72 4b 65 79 28  BtreeIntegerKey(
2a260 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 29 3b  pC->uc.pCursor);
2a270 0a 20 20 20 20 61 73 73 65 72 74 28 20 43 4f 52  .    assert( COR
2a280 52 55 50 54 5f 44 42 20 7c 7c 20 70 43 2d 3e 6d  RUPT_DB || pC->m
2a290 6f 76 65 74 6f 54 61 72 67 65 74 3d 3d 69 4b 65  ovetoTarget==iKe
2a2a0 79 20 29 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 0a  y );.  }.#endif.
2a2b0 0a 20 20 2f 2a 20 49 66 20 74 68 65 20 75 70 64  .  /* If the upd
2a2c0 61 74 65 2d 68 6f 6f 6b 20 6f 72 20 70 72 65 2d  ate-hook or pre-
2a2d0 75 70 64 61 74 65 2d 68 6f 6f 6b 20 77 69 6c 6c  update-hook will
2a2e0 20 62 65 20 69 6e 76 6f 6b 65 64 2c 20 73 65 74   be invoked, set
2a2f0 20 7a 44 62 20 74 6f 0a 20 20 2a 2a 20 74 68 65   zDb to.  ** the
2a300 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 64 62 20   name of the db 
2a310 74 6f 20 70 61 73 73 20 61 73 20 74 6f 20 69 74  to pass as to it
2a320 2e 20 41 6c 73 6f 20 73 65 74 20 6c 6f 63 61 6c  . Also set local
2a330 20 70 54 61 62 20 74 6f 20 61 20 63 6f 70 79 0a   pTab to a copy.
2a340 20 20 2a 2a 20 6f 66 20 70 34 2e 70 54 61 62 2e    ** of p4.pTab.
2a350 20 46 69 6e 61 6c 6c 79 2c 20 69 66 20 70 35 20   Finally, if p5 
2a360 69 73 20 74 72 75 65 2c 20 69 6e 64 69 63 61 74  is true, indicat
2a370 69 6e 67 20 74 68 61 74 20 74 68 69 73 20 63 75  ing that this cu
2a380 72 73 6f 72 20 77 61 73 0a 20 20 2a 2a 20 6c 61  rsor was.  ** la
2a390 73 74 20 6d 6f 76 65 64 20 77 69 74 68 20 4f 50  st moved with OP
2a3a0 5f 4e 65 78 74 20 6f 72 20 4f 50 5f 50 72 65 76  _Next or OP_Prev
2a3b0 2c 20 6e 6f 74 20 53 65 65 6b 20 6f 72 20 4e 6f  , not Seek or No
2a3c0 74 46 6f 75 6e 64 2c 20 73 65 74 20 0a 20 20 2a  tFound, set .  *
2a3d0 2a 20 56 64 62 65 43 75 72 73 6f 72 2e 6d 6f 76  * VdbeCursor.mov
2a3e0 65 74 6f 54 61 72 67 65 74 20 74 6f 20 74 68 65  etoTarget to the
2a3f0 20 63 75 72 72 65 6e 74 20 72 6f 77 69 64 2e 20   current rowid. 
2a400 20 2a 2f 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70   */.  if( pOp->p
2a410 34 74 79 70 65 3d 3d 50 34 5f 54 41 42 4c 45 20  4type==P4_TABLE 
2a420 26 26 20 48 41 53 5f 55 50 44 41 54 45 5f 48 4f  && HAS_UPDATE_HO
2a430 4f 4b 28 64 62 29 20 29 7b 0a 20 20 20 20 61 73  OK(db) ){.    as
2a440 73 65 72 74 28 20 70 43 2d 3e 69 44 62 3e 3d 30  sert( pC->iDb>=0
2a450 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20   );.    assert( 
2a460 70 4f 70 2d 3e 70 34 2e 70 54 61 62 21 3d 30 20  pOp->p4.pTab!=0 
2a470 29 3b 0a 20 20 20 20 7a 44 62 20 3d 20 64 62 2d  );.    zDb = db-
2a480 3e 61 44 62 5b 70 43 2d 3e 69 44 62 5d 2e 7a 44  >aDb[pC->iDb].zD
2a490 62 53 4e 61 6d 65 3b 0a 20 20 20 20 70 54 61 62  bSName;.    pTab
2a4a0 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 54 61 62 3b   = pOp->p4.pTab;
2a4b0 0a 20 20 20 20 69 66 28 20 28 70 4f 70 2d 3e 70  .    if( (pOp->p
2a4c0 35 20 26 20 4f 50 46 4c 41 47 5f 53 41 56 45 50  5 & OPFLAG_SAVEP
2a4d0 4f 53 49 54 49 4f 4e 29 21 3d 30 20 26 26 20 70  OSITION)!=0 && p
2a4e0 43 2d 3e 69 73 54 61 62 6c 65 20 29 7b 0a 20 20  C->isTable ){.  
2a4f0 20 20 20 20 70 43 2d 3e 6d 6f 76 65 74 6f 54 61      pC->movetoTa
2a500 72 67 65 74 20 3d 20 73 71 6c 69 74 65 33 42 74  rget = sqlite3Bt
2a510 72 65 65 49 6e 74 65 67 65 72 4b 65 79 28 70 43  reeIntegerKey(pC
2a520 2d 3e 75 63 2e 70 43 75 72 73 6f 72 29 3b 0a 20  ->uc.pCursor);. 
2a530 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20 20     }.  }else{.  
2a540 20 20 7a 44 62 20 3d 20 30 3b 20 20 20 2f 2a 20    zDb = 0;   /* 
2a550 4e 6f 74 20 6e 65 65 64 65 64 2e 20 20 53 69 6c  Not needed.  Sil
2a560 65 6e 63 65 20 61 20 63 6f 6d 70 69 6c 65 72 20  ence a compiler 
2a570 77 61 72 6e 69 6e 67 2e 20 2a 2f 0a 20 20 20 20  warning. */.    
2a580 70 54 61 62 20 3d 20 30 3b 20 20 2f 2a 20 4e 6f  pTab = 0;  /* No
2a590 74 20 6e 65 65 64 65 64 2e 20 20 53 69 6c 65 6e  t needed.  Silen
2a5a0 63 65 20 61 20 63 6f 6d 70 69 6c 65 72 20 77 61  ce a compiler wa
2a5b0 72 6e 69 6e 67 2e 20 2a 2f 0a 20 20 7d 0a 0a 23  rning. */.  }..#
2a5c0 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41  ifdef SQLITE_ENA
2a5d0 42 4c 45 5f 50 52 45 55 50 44 41 54 45 5f 48 4f  BLE_PREUPDATE_HO
2a5e0 4f 4b 0a 20 20 2f 2a 20 49 6e 76 6f 6b 65 20 74  OK.  /* Invoke t
2a5f0 68 65 20 70 72 65 2d 75 70 64 61 74 65 2d 68 6f  he pre-update-ho
2a600 6f 6b 20 69 66 20 72 65 71 75 69 72 65 64 2e 20  ok if required. 
2a610 2a 2f 0a 20 20 69 66 28 20 64 62 2d 3e 78 50 72  */.  if( db->xPr
2a620 65 55 70 64 61 74 65 43 61 6c 6c 62 61 63 6b 20  eUpdateCallback 
2a630 26 26 20 70 4f 70 2d 3e 70 34 2e 70 54 61 62 20  && pOp->p4.pTab 
2a640 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 21  ){.    assert( !
2a650 28 6f 70 66 6c 61 67 73 20 26 20 4f 50 46 4c 41  (opflags & OPFLA
2a660 47 5f 49 53 55 50 44 41 54 45 29 20 0a 20 20 20  G_ISUPDATE) .   
2a670 20 20 20 20 20 20 7c 7c 20 48 61 73 52 6f 77 69        || HasRowi
2a680 64 28 70 54 61 62 29 3d 3d 30 20 0a 20 20 20 20  d(pTab)==0 .    
2a690 20 20 20 20 20 7c 7c 20 28 61 4d 65 6d 5b 70 4f       || (aMem[pO
2a6a0 70 2d 3e 70 33 5d 2e 66 6c 61 67 73 20 26 20 4d  p->p3].flags & M
2a6b0 45 4d 5f 49 6e 74 29 20 0a 20 20 20 20 29 3b 0a  EM_Int) .    );.
2a6c0 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 50      sqlite3VdbeP
2a6d0 72 65 55 70 64 61 74 65 48 6f 6f 6b 28 70 2c 20  reUpdateHook(p, 
2a6e0 70 43 2c 0a 20 20 20 20 20 20 20 20 28 6f 70 66  pC,.        (opf
2a6f0 6c 61 67 73 20 26 20 4f 50 46 4c 41 47 5f 49 53  lags & OPFLAG_IS
2a700 55 50 44 41 54 45 29 20 3f 20 53 51 4c 49 54 45  UPDATE) ? SQLITE
2a710 5f 55 50 44 41 54 45 20 3a 20 53 51 4c 49 54 45  _UPDATE : SQLITE
2a720 5f 44 45 4c 45 54 45 2c 20 0a 20 20 20 20 20 20  _DELETE, .      
2a730 20 20 7a 44 62 2c 20 70 54 61 62 2c 20 70 43 2d    zDb, pTab, pC-
2a740 3e 6d 6f 76 65 74 6f 54 61 72 67 65 74 2c 0a 20  >movetoTarget,. 
2a750 20 20 20 20 20 20 20 70 4f 70 2d 3e 70 33 0a 20         pOp->p3. 
2a760 20 20 20 29 3b 0a 20 20 7d 0a 20 20 69 66 28 20     );.  }.  if( 
2a770 6f 70 66 6c 61 67 73 20 26 20 4f 50 46 4c 41 47  opflags & OPFLAG
2a780 5f 49 53 4e 4f 4f 50 20 29 20 62 72 65 61 6b 3b  _ISNOOP ) break;
2a790 0a 23 65 6e 64 69 66 0a 20 0a 20 20 2f 2a 20 4f  .#endif. .  /* O
2a7a0 6e 6c 79 20 66 6c 61 67 73 20 74 68 61 74 20 63  nly flags that c
2a7b0 61 6e 20 62 65 20 73 65 74 20 61 72 65 20 53 41  an be set are SA
2a7c0 56 45 50 4f 49 53 54 49 4f 4e 20 61 6e 64 20 41  VEPOISTION and A
2a7d0 55 58 44 45 4c 45 54 45 20 2a 2f 20 0a 20 20 61  UXDELETE */ .  a
2a7e0 73 73 65 72 74 28 20 28 70 4f 70 2d 3e 70 35 20  ssert( (pOp->p5 
2a7f0 26 20 7e 28 4f 50 46 4c 41 47 5f 53 41 56 45 50  & ~(OPFLAG_SAVEP
2a800 4f 53 49 54 49 4f 4e 7c 4f 50 46 4c 41 47 5f 41  OSITION|OPFLAG_A
2a810 55 58 44 45 4c 45 54 45 29 29 3d 3d 30 20 29 3b  UXDELETE))==0 );
2a820 0a 20 20 61 73 73 65 72 74 28 20 4f 50 46 4c 41  .  assert( OPFLA
2a830 47 5f 53 41 56 45 50 4f 53 49 54 49 4f 4e 3d 3d  G_SAVEPOSITION==
2a840 42 54 52 45 45 5f 53 41 56 45 50 4f 53 49 54 49  BTREE_SAVEPOSITI
2a850 4f 4e 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  ON );.  assert( 
2a860 4f 50 46 4c 41 47 5f 41 55 58 44 45 4c 45 54 45  OPFLAG_AUXDELETE
2a870 3d 3d 42 54 52 45 45 5f 41 55 58 44 45 4c 45 54  ==BTREE_AUXDELET
2a880 45 20 29 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c  E );..#ifdef SQL
2a890 49 54 45 5f 44 45 42 55 47 0a 20 20 69 66 28 20  ITE_DEBUG.  if( 
2a8a0 70 2d 3e 70 46 72 61 6d 65 3d 3d 30 20 29 7b 0a  p->pFrame==0 ){.
2a8b0 20 20 20 20 69 66 28 20 70 43 2d 3e 69 73 45 70      if( pC->isEp
2a8c0 68 65 6d 65 72 61 6c 3d 3d 30 0a 20 20 20 20 20  hemeral==0.     
2a8d0 20 20 20 26 26 20 28 70 4f 70 2d 3e 70 35 20 26     && (pOp->p5 &
2a8e0 20 4f 50 46 4c 41 47 5f 41 55 58 44 45 4c 45 54   OPFLAG_AUXDELET
2a8f0 45 29 3d 3d 30 0a 20 20 20 20 20 20 20 20 26 26  E)==0.        &&
2a900 20 28 70 43 2d 3e 77 72 46 6c 61 67 20 26 20 4f   (pC->wrFlag & O
2a910 50 46 4c 41 47 5f 46 4f 52 44 45 4c 45 54 45 29  PFLAG_FORDELETE)
2a920 3d 3d 30 0a 20 20 20 20 20 20 29 7b 0a 20 20 20  ==0.      ){.   
2a930 20 20 20 6e 45 78 74 72 61 44 65 6c 65 74 65 2b     nExtraDelete+
2a940 2b 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28  +;.    }.    if(
2a950 20 70 4f 70 2d 3e 70 32 20 26 20 4f 50 46 4c 41   pOp->p2 & OPFLA
2a960 47 5f 4e 43 48 41 4e 47 45 20 29 7b 0a 20 20 20  G_NCHANGE ){.   
2a970 20 20 20 6e 45 78 74 72 61 44 65 6c 65 74 65 2d     nExtraDelete-
2a980 2d 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 23 65 6e  -;.    }.  }.#en
2a990 64 69 66 0a 0a 20 20 72 63 20 3d 20 73 71 6c 69  dif..  rc = sqli
2a9a0 74 65 33 42 74 72 65 65 44 65 6c 65 74 65 28 70  te3BtreeDelete(p
2a9b0 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 2c 20 70  C->uc.pCursor, p
2a9c0 4f 70 2d 3e 70 35 29 3b 0a 20 20 70 43 2d 3e 63  Op->p5);.  pC->c
2a9d0 61 63 68 65 53 74 61 74 75 73 20 3d 20 43 41 43  acheStatus = CAC
2a9e0 48 45 5f 53 54 41 4c 45 3b 0a 20 20 70 43 2d 3e  HE_STALE;.  pC->
2a9f0 73 65 65 6b 52 65 73 75 6c 74 20 3d 20 30 3b 0a  seekResult = 0;.
2aa00 20 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20    if( rc ) goto 
2aa10 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
2aa20 6f 72 3b 0a 0a 20 20 2f 2a 20 49 6e 76 6f 6b 65  or;..  /* Invoke
2aa30 20 74 68 65 20 75 70 64 61 74 65 2d 68 6f 6f 6b   the update-hook
2aa40 20 69 66 20 72 65 71 75 69 72 65 64 2e 20 2a 2f   if required. */
2aa50 0a 20 20 69 66 28 20 6f 70 66 6c 61 67 73 20 26  .  if( opflags &
2aa60 20 4f 50 46 4c 41 47 5f 4e 43 48 41 4e 47 45 20   OPFLAG_NCHANGE 
2aa70 29 7b 0a 20 20 20 20 70 2d 3e 6e 43 68 61 6e 67  ){.    p->nChang
2aa80 65 2b 2b 3b 0a 20 20 20 20 69 66 28 20 64 62 2d  e++;.    if( db-
2aa90 3e 78 55 70 64 61 74 65 43 61 6c 6c 62 61 63 6b  >xUpdateCallback
2aaa0 20 26 26 20 48 61 73 52 6f 77 69 64 28 70 54 61   && HasRowid(pTa
2aab0 62 29 20 29 7b 0a 20 20 20 20 20 20 64 62 2d 3e  b) ){.      db->
2aac0 78 55 70 64 61 74 65 43 61 6c 6c 62 61 63 6b 28  xUpdateCallback(
2aad0 64 62 2d 3e 70 55 70 64 61 74 65 41 72 67 2c 20  db->pUpdateArg, 
2aae0 53 51 4c 49 54 45 5f 44 45 4c 45 54 45 2c 20 7a  SQLITE_DELETE, z
2aaf0 44 62 2c 20 70 54 61 62 2d 3e 7a 4e 61 6d 65 2c  Db, pTab->zName,
2ab00 0a 20 20 20 20 20 20 20 20 20 20 70 43 2d 3e 6d  .          pC->m
2ab10 6f 76 65 74 6f 54 61 72 67 65 74 29 3b 0a 20 20  ovetoTarget);.  
2ab20 20 20 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e      assert( pC->
2ab30 69 44 62 3e 3d 30 20 29 3b 0a 20 20 20 20 7d 0a  iDb>=0 );.    }.
2ab40 20 20 7d 0a 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a    }..  break;.}.
2ab50 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65 73 65 74  /* Opcode: Reset
2ab60 43 6f 75 6e 74 20 2a 20 2a 20 2a 20 2a 20 2a 0a  Count * * * * *.
2ab70 2a 2a 0a 2a 2a 20 54 68 65 20 76 61 6c 75 65 20  **.** The value 
2ab80 6f 66 20 74 68 65 20 63 68 61 6e 67 65 20 63 6f  of the change co
2ab90 75 6e 74 65 72 20 69 73 20 63 6f 70 69 65 64 20  unter is copied 
2aba0 74 6f 20 74 68 65 20 64 61 74 61 62 61 73 65 20  to the database 
2abb0 68 61 6e 64 6c 65 0a 2a 2a 20 63 68 61 6e 67 65  handle.** change
2abc0 20 63 6f 75 6e 74 65 72 20 28 72 65 74 75 72 6e   counter (return
2abd0 65 64 20 62 79 20 73 75 62 73 65 71 75 65 6e 74  ed by subsequent
2abe0 20 63 61 6c 6c 73 20 74 6f 20 73 71 6c 69 74 65   calls to sqlite
2abf0 33 5f 63 68 61 6e 67 65 73 28 29 29 2e 0a 2a 2a  3_changes())..**
2ac00 20 54 68 65 6e 20 74 68 65 20 56 4d 73 20 69 6e   Then the VMs in
2ac10 74 65 72 6e 61 6c 20 63 68 61 6e 67 65 20 63 6f  ternal change co
2ac20 75 6e 74 65 72 20 72 65 73 65 74 73 20 74 6f 20  unter resets to 
2ac30 30 2e 0a 2a 2a 20 54 68 69 73 20 69 73 20 75 73  0..** This is us
2ac40 65 64 20 62 79 20 74 72 69 67 67 65 72 20 70 72  ed by trigger pr
2ac50 6f 67 72 61 6d 73 2e 0a 2a 2f 0a 63 61 73 65 20  ograms..*/.case 
2ac60 4f 50 5f 52 65 73 65 74 43 6f 75 6e 74 3a 20 7b  OP_ResetCount: {
2ac70 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65  .  sqlite3VdbeSe
2ac80 74 43 68 61 6e 67 65 73 28 64 62 2c 20 70 2d 3e  tChanges(db, p->
2ac90 6e 43 68 61 6e 67 65 29 3b 0a 20 20 70 2d 3e 6e  nChange);.  p->n
2aca0 43 68 61 6e 67 65 20 3d 20 30 3b 0a 20 20 62 72  Change = 0;.  br
2acb0 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
2acc0 65 3a 20 53 6f 72 74 65 72 43 6f 6d 70 61 72 65  e: SorterCompare
2acd0 20 50 31 20 50 32 20 50 33 20 50 34 0a 2a 2a 20   P1 P2 P3 P4.** 
2ace0 53 79 6e 6f 70 73 69 73 3a 20 69 66 20 6b 65 79  Synopsis: if key
2acf0 28 50 31 29 21 3d 74 72 69 6d 28 72 5b 50 33 5d  (P1)!=trim(r[P3]
2ad00 2c 50 34 29 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a  ,P4) goto P2.**.
2ad10 2a 2a 20 50 31 20 69 73 20 61 20 73 6f 72 74 65  ** P1 is a sorte
2ad20 72 20 63 75 72 73 6f 72 2e 20 54 68 69 73 20 69  r cursor. This i
2ad30 6e 73 74 72 75 63 74 69 6f 6e 20 63 6f 6d 70 61  nstruction compa
2ad40 72 65 73 20 61 20 70 72 65 66 69 78 20 6f 66 20  res a prefix of 
2ad50 74 68 65 0a 2a 2a 20 72 65 63 6f 72 64 20 62 6c  the.** record bl
2ad60 6f 62 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ob in register P
2ad70 33 20 61 67 61 69 6e 73 74 20 61 20 70 72 65 66  3 against a pref
2ad80 69 78 20 6f 66 20 74 68 65 20 65 6e 74 72 79 20  ix of the entry 
2ad90 74 68 61 74 20 0a 2a 2a 20 74 68 65 20 73 6f 72  that .** the sor
2ada0 74 65 72 20 63 75 72 73 6f 72 20 63 75 72 72 65  ter cursor curre
2adb0 6e 74 6c 79 20 70 6f 69 6e 74 73 20 74 6f 2e 20  ntly points to. 
2adc0 20 4f 6e 6c 79 20 74 68 65 20 66 69 72 73 74 20   Only the first 
2add0 50 34 20 66 69 65 6c 64 73 0a 2a 2a 20 6f 66 20  P4 fields.** of 
2ade0 72 5b 50 33 5d 20 61 6e 64 20 74 68 65 20 73 6f  r[P3] and the so
2adf0 72 74 65 72 20 72 65 63 6f 72 64 20 61 72 65 20  rter record are 
2ae00 63 6f 6d 70 61 72 65 64 2e 0a 2a 2a 0a 2a 2a 20  compared..**.** 
2ae10 49 66 20 65 69 74 68 65 72 20 50 33 20 6f 72 20  If either P3 or 
2ae20 74 68 65 20 73 6f 72 74 65 72 20 63 6f 6e 74 61  the sorter conta
2ae30 69 6e 73 20 61 20 4e 55 4c 4c 20 69 6e 20 6f 6e  ins a NULL in on
2ae40 65 20 6f 66 20 74 68 65 69 72 20 73 69 67 6e 69  e of their signi
2ae50 66 69 63 61 6e 74 0a 2a 2a 20 66 69 65 6c 64 73  ficant.** fields
2ae60 20 28 6e 6f 74 20 63 6f 75 6e 74 69 6e 67 20 74   (not counting t
2ae70 68 65 20 50 34 20 66 69 65 6c 64 73 20 61 74 20  he P4 fields at 
2ae80 74 68 65 20 65 6e 64 20 77 68 69 63 68 20 61 72  the end which ar
2ae90 65 20 69 67 6e 6f 72 65 64 29 20 74 68 65 6e 0a  e ignored) then.
2aea0 2a 2a 20 74 68 65 20 63 6f 6d 70 61 72 69 73 6f  ** the compariso
2aeb0 6e 20 69 73 20 61 73 73 75 6d 65 64 20 74 6f 20  n is assumed to 
2aec0 62 65 20 65 71 75 61 6c 2e 0a 2a 2a 0a 2a 2a 20  be equal..**.** 
2aed0 46 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20  Fall through to 
2aee0 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e  next instruction
2aef0 20 69 66 20 74 68 65 20 74 77 6f 20 72 65 63 6f   if the two reco
2af00 72 64 73 20 63 6f 6d 70 61 72 65 20 65 71 75 61  rds compare equa
2af10 6c 20 74 6f 0a 2a 2a 20 65 61 63 68 20 6f 74 68  l to.** each oth
2af20 65 72 2e 20 20 4a 75 6d 70 20 74 6f 20 50 32 20  er.  Jump to P2 
2af30 69 66 20 74 68 65 79 20 61 72 65 20 64 69 66 66  if they are diff
2af40 65 72 65 6e 74 2e 0a 2a 2f 0a 63 61 73 65 20 4f  erent..*/.case O
2af50 50 5f 53 6f 72 74 65 72 43 6f 6d 70 61 72 65 3a  P_SorterCompare:
2af60 20 7b 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20   {.  VdbeCursor 
2af70 2a 70 43 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a  *pC;.  int res;.
2af80 20 20 69 6e 74 20 6e 4b 65 79 43 6f 6c 3b 0a 0a    int nKeyCol;..
2af90 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b    pC = p->apCsr[
2afa0 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65  pOp->p1];.  asse
2afb0 72 74 28 20 69 73 53 6f 72 74 65 72 28 70 43 29  rt( isSorter(pC)
2afc0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   );.  assert( pO
2afd0 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e  p->p4type==P4_IN
2afe0 54 33 32 20 29 3b 0a 20 20 70 49 6e 33 20 3d 20  T32 );.  pIn3 = 
2aff0 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a  &aMem[pOp->p3];.
2b000 20 20 6e 4b 65 79 43 6f 6c 20 3d 20 70 4f 70 2d    nKeyCol = pOp-
2b010 3e 70 34 2e 69 3b 0a 20 20 72 65 73 20 3d 20 30  >p4.i;.  res = 0
2b020 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  ;.  rc = sqlite3
2b030 56 64 62 65 53 6f 72 74 65 72 43 6f 6d 70 61 72  VdbeSorterCompar
2b040 65 28 70 43 2c 20 70 49 6e 33 2c 20 6e 4b 65 79  e(pC, pIn3, nKey
2b050 43 6f 6c 2c 20 26 72 65 73 29 3b 0a 20 20 56 64  Col, &res);.  Vd
2b060 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 72 65  beBranchTaken(re
2b070 73 21 3d 30 2c 32 29 3b 0a 20 20 69 66 28 20 72  s!=0,2);.  if( r
2b080 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64  c ) goto abort_d
2b090 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 69  ue_to_error;.  i
2b0a0 66 28 20 72 65 73 20 29 20 67 6f 74 6f 20 6a 75  f( res ) goto ju
2b0b0 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 62 72 65 61  mp_to_p2;.  brea
2b0c0 6b 3b 0a 7d 3b 0a 0a 2f 2a 20 4f 70 63 6f 64 65  k;.};../* Opcode
2b0d0 3a 20 53 6f 72 74 65 72 44 61 74 61 20 50 31 20  : SorterData P1 
2b0e0 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e  P2 P3 * *.** Syn
2b0f0 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 64 61 74  opsis: r[P2]=dat
2b100 61 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 69 6e  a.**.** Write in
2b110 74 6f 20 72 65 67 69 73 74 65 72 20 50 32 20 74  to register P2 t
2b120 68 65 20 63 75 72 72 65 6e 74 20 73 6f 72 74 65  he current sorte
2b130 72 20 64 61 74 61 20 66 6f 72 20 73 6f 72 74 65  r data for sorte
2b140 72 20 63 75 72 73 6f 72 20 50 31 2e 0a 2a 2a 20  r cursor P1..** 
2b150 54 68 65 6e 20 63 6c 65 61 72 20 74 68 65 20 63  Then clear the c
2b160 6f 6c 75 6d 6e 20 68 65 61 64 65 72 20 63 61 63  olumn header cac
2b170 68 65 20 6f 6e 20 63 75 72 73 6f 72 20 50 33 2e  he on cursor P3.
2b180 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f  .**.** This opco
2b190 64 65 20 69 73 20 6e 6f 72 6d 61 6c 6c 79 20 75  de is normally u
2b1a0 73 65 20 74 6f 20 6d 6f 76 65 20 61 20 72 65 63  se to move a rec
2b1b0 6f 72 64 20 6f 75 74 20 6f 66 20 74 68 65 20 73  ord out of the s
2b1c0 6f 72 74 65 72 20 61 6e 64 20 69 6e 74 6f 0a 2a  orter and into.*
2b1d0 2a 20 61 20 72 65 67 69 73 74 65 72 20 74 68 61  * a register tha
2b1e0 74 20 69 73 20 74 68 65 20 73 6f 75 72 63 65 20  t is the source 
2b1f0 66 6f 72 20 61 20 70 73 65 75 64 6f 2d 74 61 62  for a pseudo-tab
2b200 6c 65 20 63 75 72 73 6f 72 20 63 72 65 61 74 65  le cursor create
2b210 64 20 75 73 69 6e 67 0a 2a 2a 20 4f 70 65 6e 50  d using.** OpenP
2b220 73 65 75 64 6f 2e 20 20 54 68 61 74 20 70 73 65  seudo.  That pse
2b230 75 64 6f 2d 74 61 62 6c 65 20 63 75 72 73 6f 72  udo-table cursor
2b240 20 69 73 20 74 68 65 20 6f 6e 65 20 74 68 61 74   is the one that
2b250 20 69 73 20 69 64 65 6e 74 69 66 69 65 64 20 62   is identified b
2b260 79 0a 2a 2a 20 70 61 72 61 6d 65 74 65 72 20 50  y.** parameter P
2b270 33 2e 20 20 43 6c 65 61 72 69 6e 67 20 74 68 65  3.  Clearing the
2b280 20 50 33 20 63 6f 6c 75 6d 6e 20 63 61 63 68 65   P3 column cache
2b290 20 61 73 20 70 61 72 74 20 6f 66 20 74 68 69 73   as part of this
2b2a0 20 6f 70 63 6f 64 65 20 73 61 76 65 73 0a 2a 2a   opcode saves.**
2b2b0 20 75 73 20 66 72 6f 6d 20 68 61 76 69 6e 67 20   us from having 
2b2c0 74 6f 20 69 73 73 75 65 20 61 20 73 65 70 61 72  to issue a separ
2b2d0 61 74 65 20 4e 75 6c 6c 52 6f 77 20 69 6e 73 74  ate NullRow inst
2b2e0 72 75 63 74 69 6f 6e 20 74 6f 20 63 6c 65 61 72  ruction to clear
2b2f0 20 74 68 61 74 20 63 61 63 68 65 2e 0a 2a 2f 0a   that cache..*/.
2b300 63 61 73 65 20 4f 50 5f 53 6f 72 74 65 72 44 61  case OP_SorterDa
2b310 74 61 3a 20 7b 0a 20 20 56 64 62 65 43 75 72 73  ta: {.  VdbeCurs
2b320 6f 72 20 2a 70 43 3b 0a 0a 20 20 70 4f 75 74 20  or *pC;..  pOut 
2b330 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d  = &aMem[pOp->p2]
2b340 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73  ;.  pC = p->apCs
2b350 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  r[pOp->p1];.  as
2b360 73 65 72 74 28 20 69 73 53 6f 72 74 65 72 28 70  sert( isSorter(p
2b370 43 29 20 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c  C) );.  rc = sql
2b380 69 74 65 33 56 64 62 65 53 6f 72 74 65 72 52 6f  ite3VdbeSorterRo
2b390 77 6b 65 79 28 70 43 2c 20 70 4f 75 74 29 3b 0a  wkey(pC, pOut);.
2b3a0 20 20 61 73 73 65 72 74 28 20 72 63 21 3d 53 51    assert( rc!=SQ
2b3b0 4c 49 54 45 5f 4f 4b 20 7c 7c 20 28 70 4f 75 74  LITE_OK || (pOut
2b3c0 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 42 6c  ->flags & MEM_Bl
2b3d0 6f 62 29 20 29 3b 0a 20 20 61 73 73 65 72 74 28  ob) );.  assert(
2b3e0 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70   pOp->p1>=0 && p
2b3f0 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f  Op->p1<p->nCurso
2b400 72 20 29 3b 0a 20 20 69 66 28 20 72 63 20 29 20  r );.  if( rc ) 
2b410 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
2b420 6f 5f 65 72 72 6f 72 3b 0a 20 20 70 2d 3e 61 70  o_error;.  p->ap
2b430 43 73 72 5b 70 4f 70 2d 3e 70 33 5d 2d 3e 63 61  Csr[pOp->p3]->ca
2b440 63 68 65 53 74 61 74 75 73 20 3d 20 43 41 43 48  cheStatus = CACH
2b450 45 5f 53 54 41 4c 45 3b 0a 20 20 62 72 65 61 6b  E_STALE;.  break
2b460 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
2b470 52 6f 77 44 61 74 61 20 50 31 20 50 32 20 50 33  RowData P1 P2 P3
2b480 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73   * *.** Synopsis
2b490 3a 20 72 5b 50 32 5d 3d 64 61 74 61 0a 2a 2a 0a  : r[P2]=data.**.
2b4a0 2a 2a 20 57 72 69 74 65 20 69 6e 74 6f 20 72 65  ** Write into re
2b4b0 67 69 73 74 65 72 20 50 32 20 74 68 65 20 63 6f  gister P2 the co
2b4c0 6d 70 6c 65 74 65 20 72 6f 77 20 63 6f 6e 74 65  mplete row conte
2b4d0 6e 74 20 66 6f 72 20 74 68 65 20 72 6f 77 20 61  nt for the row a
2b4e0 74 20 0a 2a 2a 20 77 68 69 63 68 20 63 75 72 73  t .** which curs
2b4f0 6f 72 20 50 31 20 69 73 20 63 75 72 72 65 6e 74  or P1 is current
2b500 6c 79 20 70 6f 69 6e 74 69 6e 67 2e 0a 2a 2a 20  ly pointing..** 
2b510 54 68 65 72 65 20 69 73 20 6e 6f 20 69 6e 74 65  There is no inte
2b520 72 70 72 65 74 61 74 69 6f 6e 20 6f 66 20 74 68  rpretation of th
2b530 65 20 64 61 74 61 2e 20 20 0a 2a 2a 20 49 74 20  e data.  .** It 
2b540 69 73 20 6a 75 73 74 20 63 6f 70 69 65 64 20 6f  is just copied o
2b550 6e 74 6f 20 74 68 65 20 50 32 20 72 65 67 69 73  nto the P2 regis
2b560 74 65 72 20 65 78 61 63 74 6c 79 20 61 73 20 0a  ter exactly as .
2b570 2a 2a 20 69 74 20 69 73 20 66 6f 75 6e 64 20 69  ** it is found i
2b580 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66  n the database f
2b590 69 6c 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 63 75  ile..**.** If cu
2b5a0 72 73 6f 72 20 50 31 20 69 73 20 61 6e 20 69 6e  rsor P1 is an in
2b5b0 64 65 78 2c 20 74 68 65 6e 20 74 68 65 20 63 6f  dex, then the co
2b5c0 6e 74 65 6e 74 20 69 73 20 74 68 65 20 6b 65 79  ntent is the key
2b5d0 20 6f 66 20 74 68 65 20 72 6f 77 2e 0a 2a 2a 20   of the row..** 
2b5e0 49 66 20 63 75 72 73 6f 72 20 50 32 20 69 73 20  If cursor P2 is 
2b5f0 61 20 74 61 62 6c 65 2c 20 74 68 65 6e 20 74 68  a table, then th
2b600 65 20 63 6f 6e 74 65 6e 74 20 65 78 74 72 61 63  e content extrac
2b610 74 65 64 20 69 73 20 74 68 65 20 64 61 74 61 2e  ted is the data.
2b620 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 50 31  .**.** If the P1
2b630 20 63 75 72 73 6f 72 20 6d 75 73 74 20 62 65 20   cursor must be 
2b640 70 6f 69 6e 74 69 6e 67 20 74 6f 20 61 20 76 61  pointing to a va
2b650 6c 69 64 20 72 6f 77 20 28 6e 6f 74 20 61 20 4e  lid row (not a N
2b660 55 4c 4c 20 72 6f 77 29 0a 2a 2a 20 6f 66 20 61  ULL row).** of a
2b670 20 72 65 61 6c 20 74 61 62 6c 65 2c 20 6e 6f 74   real table, not
2b680 20 61 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 2e   a pseudo-table.
2b690 0a 2a 2a 0a 2a 2a 20 49 66 20 50 33 21 3d 30 20  .**.** If P3!=0 
2b6a0 74 68 65 6e 20 74 68 69 73 20 6f 70 63 6f 64 65  then this opcode
2b6b0 20 69 73 20 61 6c 6c 6f 77 65 64 20 74 6f 20 6d   is allowed to m
2b6c0 61 6b 65 20 61 6e 20 65 70 68 65 6d 65 72 61 6c  ake an ephemeral
2b6d0 20 70 6f 69 6e 74 65 72 0a 2a 2a 20 69 6e 74 6f   pointer.** into
2b6e0 20 74 68 65 20 64 61 74 61 62 61 73 65 20 70 61   the database pa
2b6f0 67 65 2e 20 20 54 68 61 74 20 6d 65 61 6e 73 20  ge.  That means 
2b700 74 68 61 74 20 74 68 65 20 63 6f 6e 74 65 6e 74  that the content
2b710 20 6f 66 20 74 68 65 20 6f 75 74 70 75 74 0a 2a   of the output.*
2b720 2a 20 72 65 67 69 73 74 65 72 20 77 69 6c 6c 20  * register will 
2b730 62 65 20 69 6e 76 61 6c 69 64 61 74 65 64 20 61  be invalidated a
2b740 73 20 73 6f 6f 6e 20 61 73 20 74 68 65 20 63 75  s soon as the cu
2b750 72 73 6f 72 20 6d 6f 76 65 73 20 2d 20 69 6e 63  rsor moves - inc
2b760 6c 75 64 69 6e 67 0a 2a 2a 20 6d 6f 76 65 73 20  luding.** moves 
2b770 63 61 75 73 65 64 20 62 79 20 6f 74 68 65 72 20  caused by other 
2b780 63 75 72 73 6f 72 73 20 74 68 61 74 20 22 73 61  cursors that "sa
2b790 76 65 22 20 74 68 65 20 63 75 72 72 65 6e 74 20  ve" the current 
2b7a0 63 75 72 73 6f 72 73 0a 2a 2a 20 70 6f 73 69 74  cursors.** posit
2b7b0 69 6f 6e 20 69 6e 20 6f 72 64 65 72 20 74 68 61  ion in order tha
2b7c0 74 20 74 68 65 79 20 63 61 6e 20 77 72 69 74 65  t they can write
2b7d0 20 74 6f 20 74 68 65 20 73 61 6d 65 20 74 61 62   to the same tab
2b7e0 6c 65 2e 20 20 49 66 20 50 33 3d 3d 30 0a 2a 2a  le.  If P3==0.**
2b7f0 20 74 68 65 6e 20 61 20 63 6f 70 79 20 6f 66 20   then a copy of 
2b800 74 68 65 20 64 61 74 61 20 69 73 20 6d 61 64 65  the data is made
2b810 20 69 6e 74 6f 20 6d 65 6d 6f 72 79 2e 20 20 50   into memory.  P
2b820 33 21 3d 30 20 69 73 20 66 61 73 74 65 72 2c 20  3!=0 is faster, 
2b830 62 75 74 0a 2a 2a 20 50 33 3d 3d 30 20 69 73 20  but.** P3==0 is 
2b840 73 61 66 65 72 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  safer..**.** If 
2b850 50 33 21 3d 30 20 74 68 65 6e 20 74 68 65 20 63  P3!=0 then the c
2b860 6f 6e 74 65 6e 74 20 6f 66 20 74 68 65 20 50 32  ontent of the P2
2b870 20 72 65 67 69 73 74 65 72 20 69 73 20 75 6e 73   register is uns
2b880 75 69 74 61 62 6c 65 20 66 6f 72 20 75 73 65 0a  uitable for use.
2b890 2a 2a 20 69 6e 20 4f 50 5f 52 65 73 75 6c 74 20  ** in OP_Result 
2b8a0 61 6e 64 20 61 6e 79 20 4f 50 5f 52 65 73 75 6c  and any OP_Resul
2b8b0 74 20 77 69 6c 6c 20 69 6e 76 61 6c 69 64 61 74  t will invalidat
2b8c0 65 20 74 68 65 20 50 32 20 72 65 67 69 73 74 65  e the P2 registe
2b8d0 72 20 63 6f 6e 74 65 6e 74 2e 0a 2a 2a 20 54 68  r content..** Th
2b8e0 65 20 50 32 20 72 65 67 69 73 74 65 72 20 63 6f  e P2 register co
2b8f0 6e 74 65 6e 74 20 69 73 20 69 6e 76 61 6c 69 64  ntent is invalid
2b900 61 74 65 64 20 62 79 20 6f 70 63 6f 64 65 73 20  ated by opcodes 
2b910 6c 69 6b 65 20 4f 50 5f 46 75 6e 63 74 69 6f 6e  like OP_Function
2b920 20 6f 72 0a 2a 2a 20 62 79 20 61 6e 79 20 75 73   or.** by any us
2b930 65 20 6f 66 20 61 6e 6f 74 68 65 72 20 63 75 72  e of another cur
2b940 73 6f 72 20 70 6f 69 6e 74 69 6e 67 20 74 6f 20  sor pointing to 
2b950 74 68 65 20 73 61 6d 65 20 74 61 62 6c 65 2e 0a  the same table..
2b960 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 6f 77 44 61  */.case OP_RowDa
2b970 74 61 3a 20 7b 0a 20 20 56 64 62 65 43 75 72 73  ta: {.  VdbeCurs
2b980 6f 72 20 2a 70 43 3b 0a 20 20 42 74 43 75 72 73  or *pC;.  BtCurs
2b990 6f 72 20 2a 70 43 72 73 72 3b 0a 20 20 75 33 32  or *pCrsr;.  u32
2b9a0 20 6e 3b 0a 0a 20 20 70 4f 75 74 20 3d 20 6f 75   n;..  pOut = ou
2b9b0 74 32 50 72 65 72 65 6c 65 61 73 65 28 70 2c 20  t2Prerelease(p, 
2b9c0 70 4f 70 29 3b 0a 0a 20 20 61 73 73 65 72 74 28  pOp);..  assert(
2b9d0 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70   pOp->p1>=0 && p
2b9e0 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f  Op->p1<p->nCurso
2b9f0 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61  r );.  pC = p->a
2ba00 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  pCsr[pOp->p1];. 
2ba10 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29   assert( pC!=0 )
2ba20 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  ;.  assert( pC->
2ba30 65 43 75 72 54 79 70 65 3d 3d 43 55 52 54 59 50  eCurType==CURTYP
2ba40 45 5f 42 54 52 45 45 20 29 3b 0a 20 20 61 73 73  E_BTREE );.  ass
2ba50 65 72 74 28 20 69 73 53 6f 72 74 65 72 28 70 43  ert( isSorter(pC
2ba60 29 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  )==0 );.  assert
2ba70 28 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 3d 3d 30  ( pC->nullRow==0
2ba80 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43   );.  assert( pC
2ba90 2d 3e 75 63 2e 70 43 75 72 73 6f 72 21 3d 30 20  ->uc.pCursor!=0 
2baa0 29 3b 0a 20 20 70 43 72 73 72 20 3d 20 70 43 2d  );.  pCrsr = pC-
2bab0 3e 75 63 2e 70 43 75 72 73 6f 72 3b 0a 0a 20 20  >uc.pCursor;..  
2bac0 2f 2a 20 54 68 65 20 4f 50 5f 52 6f 77 44 61 74  /* The OP_RowDat
2bad0 61 20 6f 70 63 6f 64 65 73 20 61 6c 77 61 79 73  a opcodes always
2bae0 20 66 6f 6c 6c 6f 77 20 4f 50 5f 4e 6f 74 45 78   follow OP_NotEx
2baf0 69 73 74 73 20 6f 72 0a 20 20 2a 2a 20 4f 50 5f  ists or.  ** OP_
2bb00 53 65 65 6b 52 6f 77 69 64 20 6f 72 20 4f 50 5f  SeekRowid or OP_
2bb10 52 65 77 69 6e 64 2f 4f 70 5f 4e 65 78 74 20 77  Rewind/Op_Next w
2bb20 69 74 68 20 6e 6f 20 69 6e 74 65 72 76 65 6e 69  ith no interveni
2bb30 6e 67 20 69 6e 73 74 72 75 63 74 69 6f 6e 73 0a  ng instructions.
2bb40 20 20 2a 2a 20 74 68 61 74 20 6d 69 67 68 74 20    ** that might 
2bb50 69 6e 76 61 6c 69 64 61 74 65 20 74 68 65 20 63  invalidate the c
2bb60 75 72 73 6f 72 2e 0a 20 20 2a 2a 20 49 66 20 74  ursor..  ** If t
2bb70 68 69 73 20 77 68 65 72 65 20 6e 6f 74 20 74 68  his where not th
2bb80 65 20 63 61 73 65 2c 20 6f 6e 20 6f 66 20 74 68  e case, on of th
2bb90 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 73 73 65  e following asse
2bba0 72 74 28 29 73 0a 20 20 2a 2a 20 77 6f 75 6c 64  rt()s.  ** would
2bbb0 20 66 61 69 6c 2e 20 20 53 68 6f 75 6c 64 20 74   fail.  Should t
2bbc0 68 69 73 20 65 76 65 72 20 63 68 61 6e 67 65 20  his ever change 
2bbd0 28 62 65 63 61 75 73 65 20 6f 66 20 63 68 61 6e  (because of chan
2bbe0 67 65 73 20 69 6e 20 74 68 65 20 63 6f 64 65 0a  ges in the code.
2bbf0 20 20 2a 2a 20 67 65 6e 65 72 61 74 6f 72 29 20    ** generator) 
2bc00 74 68 65 6e 20 74 68 65 20 66 69 78 20 77 6f 75  then the fix wou
2bc10 6c 64 20 62 65 20 74 6f 20 69 6e 73 65 72 74 20  ld be to insert 
2bc20 61 20 63 61 6c 6c 20 74 6f 0a 20 20 2a 2a 20 73  a call to.  ** s
2bc30 71 6c 69 74 65 33 56 64 62 65 43 75 72 73 6f 72  qlite3VdbeCursor
2bc40 4d 6f 76 65 74 6f 28 29 2e 0a 20 20 2a 2f 0a 20  Moveto()..  */. 
2bc50 20 61 73 73 65 72 74 28 20 70 43 2d 3e 64 65 66   assert( pC->def
2bc60 65 72 72 65 64 4d 6f 76 65 74 6f 3d 3d 30 20 29  erredMoveto==0 )
2bc70 3b 0a 20 20 61 73 73 65 72 74 28 20 73 71 6c 69  ;.  assert( sqli
2bc80 74 65 33 42 74 72 65 65 43 75 72 73 6f 72 49 73  te3BtreeCursorIs
2bc90 56 61 6c 69 64 28 70 43 72 73 72 29 20 29 3b 0a  Valid(pCrsr) );.
2bca0 23 69 66 20 30 20 20 2f 2a 20 4e 6f 74 20 72 65  #if 0  /* Not re
2bcb0 71 75 69 72 65 64 20 64 75 65 20 74 6f 20 74 68  quired due to th
2bcc0 65 20 70 72 65 76 69 6f 75 73 20 74 6f 20 61 73  e previous to as
2bcd0 73 65 72 74 28 29 20 73 74 61 74 65 6d 65 6e 74  sert() statement
2bce0 73 20 2a 2f 0a 20 20 72 63 20 3d 20 73 71 6c 69  s */.  rc = sqli
2bcf0 74 65 33 56 64 62 65 43 75 72 73 6f 72 4d 6f 76  te3VdbeCursorMov
2bd00 65 74 6f 28 70 43 29 3b 0a 20 20 69 66 28 20 72  eto(pC);.  if( r
2bd10 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 20 67  c!=SQLITE_OK ) g
2bd20 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
2bd30 5f 65 72 72 6f 72 3b 0a 23 65 6e 64 69 66 0a 0a  _error;.#endif..
2bd40 20 20 6e 20 3d 20 73 71 6c 69 74 65 33 42 74 72    n = sqlite3Btr
2bd50 65 65 50 61 79 6c 6f 61 64 53 69 7a 65 28 70 43  eePayloadSize(pC
2bd60 72 73 72 29 3b 0a 20 20 69 66 28 20 6e 3e 28 75  rsr);.  if( n>(u
2bd70 33 32 29 64 62 2d 3e 61 4c 69 6d 69 74 5b 53 51  32)db->aLimit[SQ
2bd80 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54  LITE_LIMIT_LENGT
2bd90 48 5d 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 74  H] ){.    goto t
2bda0 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a 20 20 74 65  oo_big;.  }.  te
2bdb0 73 74 63 61 73 65 28 20 6e 3d 3d 30 20 29 3b 0a  stcase( n==0 );.
2bdc0 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64    rc = sqlite3Vd
2bdd0 62 65 4d 65 6d 46 72 6f 6d 42 74 72 65 65 28 70  beMemFromBtree(p
2bde0 43 72 73 72 2c 20 30 2c 20 6e 2c 20 70 4f 75 74  Crsr, 0, n, pOut
2bdf0 29 3b 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f  );.  if( rc ) go
2be00 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
2be10 65 72 72 6f 72 3b 0a 20 20 69 66 28 20 21 70 4f  error;.  if( !pO
2be20 70 2d 3e 70 33 20 29 20 44 65 65 70 68 65 6d 65  p->p3 ) Deepheme
2be30 72 61 6c 69 7a 65 28 70 4f 75 74 29 3b 0a 20 20  ralize(pOut);.  
2be40 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53  UPDATE_MAX_BLOBS
2be50 49 5a 45 28 70 4f 75 74 29 3b 0a 20 20 52 45 47  IZE(pOut);.  REG
2be60 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d  ISTER_TRACE(pOp-
2be70 3e 70 32 2c 20 70 4f 75 74 29 3b 0a 20 20 62 72  >p2, pOut);.  br
2be80 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
2be90 65 3a 20 52 6f 77 69 64 20 50 31 20 50 32 20 2a  e: Rowid P1 P2 *
2bea0 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73   * *.** Synopsis
2beb0 3a 20 72 5b 50 32 5d 3d 72 6f 77 69 64 0a 2a 2a  : r[P2]=rowid.**
2bec0 0a 2a 2a 20 53 74 6f 72 65 20 69 6e 20 72 65 67  .** Store in reg
2bed0 69 73 74 65 72 20 50 32 20 61 6e 20 69 6e 74 65  ister P2 an inte
2bee0 67 65 72 20 77 68 69 63 68 20 69 73 20 74 68 65  ger which is the
2bef0 20 6b 65 79 20 6f 66 20 74 68 65 20 74 61 62 6c   key of the tabl
2bf00 65 20 65 6e 74 72 79 20 74 68 61 74 0a 2a 2a 20  e entry that.** 
2bf10 50 31 20 69 73 20 63 75 72 72 65 6e 74 6c 79 20  P1 is currently 
2bf20 70 6f 69 6e 74 20 74 6f 2e 0a 2a 2a 0a 2a 2a 20  point to..**.** 
2bf30 50 31 20 63 61 6e 20 62 65 20 65 69 74 68 65 72  P1 can be either
2bf40 20 61 6e 20 6f 72 64 69 6e 61 72 79 20 74 61 62   an ordinary tab
2bf50 6c 65 20 6f 72 20 61 20 76 69 72 74 75 61 6c 20  le or a virtual 
2bf60 74 61 62 6c 65 2e 20 20 54 68 65 72 65 20 75 73  table.  There us
2bf70 65 64 20 74 6f 0a 2a 2a 20 62 65 20 61 20 73 65  ed to.** be a se
2bf80 70 61 72 61 74 65 20 4f 50 5f 56 52 6f 77 69 64  parate OP_VRowid
2bf90 20 6f 70 63 6f 64 65 20 66 6f 72 20 75 73 65 20   opcode for use 
2bfa0 77 69 74 68 20 76 69 72 74 75 61 6c 20 74 61 62  with virtual tab
2bfb0 6c 65 73 2c 20 62 75 74 20 74 68 69 73 0a 2a 2a  les, but this.**
2bfc0 20 6f 6e 65 20 6f 70 63 6f 64 65 20 6e 6f 77 20   one opcode now 
2bfd0 77 6f 72 6b 73 20 66 6f 72 20 62 6f 74 68 20 74  works for both t
2bfe0 61 62 6c 65 20 74 79 70 65 73 2e 0a 2a 2f 0a 63  able types..*/.c
2bff0 61 73 65 20 4f 50 5f 52 6f 77 69 64 3a 20 7b 20  ase OP_Rowid: { 
2c000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c010 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20 20 56 64 62  /* out2 */.  Vdb
2c020 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 69  eCursor *pC;.  i
2c030 36 34 20 76 3b 0a 20 20 73 71 6c 69 74 65 33 5f  64 v;.  sqlite3_
2c040 76 74 61 62 20 2a 70 56 74 61 62 3b 0a 20 20 63  vtab *pVtab;.  c
2c050 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d 6f 64  onst sqlite3_mod
2c060 75 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b 0a 0a 20  ule *pModule;.. 
2c070 20 70 4f 75 74 20 3d 20 6f 75 74 32 50 72 65 72   pOut = out2Prer
2c080 65 6c 65 61 73 65 28 70 2c 20 70 4f 70 29 3b 0a  elease(p, pOp);.
2c090 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
2c0a0 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c  1>=0 && pOp->p1<
2c0b0 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20  p->nCursor );.  
2c0c0 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f  pC = p->apCsr[pO
2c0d0 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74  p->p1];.  assert
2c0e0 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 61 73 73  ( pC!=0 );.  ass
2c0f0 65 72 74 28 20 70 43 2d 3e 65 43 75 72 54 79 70  ert( pC->eCurTyp
2c100 65 21 3d 43 55 52 54 59 50 45 5f 50 53 45 55 44  e!=CURTYPE_PSEUD
2c110 4f 20 7c 7c 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77  O || pC->nullRow
2c120 20 29 3b 0a 20 20 69 66 28 20 70 43 2d 3e 6e 75   );.  if( pC->nu
2c130 6c 6c 52 6f 77 20 29 7b 0a 20 20 20 20 70 4f 75  llRow ){.    pOu
2c140 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 4e  t->flags = MEM_N
2c150 75 6c 6c 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a  ull;.    break;.
2c160 20 20 7d 65 6c 73 65 20 69 66 28 20 70 43 2d 3e    }else if( pC->
2c170 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 20 29  deferredMoveto )
2c180 7b 0a 20 20 20 20 76 20 3d 20 70 43 2d 3e 6d 6f  {.    v = pC->mo
2c190 76 65 74 6f 54 61 72 67 65 74 3b 0a 23 69 66 6e  vetoTarget;.#ifn
2c1a0 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
2c1b0 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 20 20 7d  VIRTUALTABLE.  }
2c1c0 65 6c 73 65 20 69 66 28 20 70 43 2d 3e 65 43 75  else if( pC->eCu
2c1d0 72 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f 56  rType==CURTYPE_V
2c1e0 54 41 42 20 29 7b 0a 20 20 20 20 61 73 73 65 72  TAB ){.    asser
2c1f0 74 28 20 70 43 2d 3e 75 63 2e 70 56 43 75 72 21  t( pC->uc.pVCur!
2c200 3d 30 20 29 3b 0a 20 20 20 20 70 56 74 61 62 20  =0 );.    pVtab 
2c210 3d 20 70 43 2d 3e 75 63 2e 70 56 43 75 72 2d 3e  = pC->uc.pVCur->
2c220 70 56 74 61 62 3b 0a 20 20 20 20 70 4d 6f 64 75  pVtab;.    pModu
2c230 6c 65 20 3d 20 70 56 74 61 62 2d 3e 70 4d 6f 64  le = pVtab->pMod
2c240 75 6c 65 3b 0a 20 20 20 20 61 73 73 65 72 74 28  ule;.    assert(
2c250 20 70 4d 6f 64 75 6c 65 2d 3e 78 52 6f 77 69 64   pModule->xRowid
2c260 20 29 3b 0a 20 20 20 20 72 63 20 3d 20 70 4d 6f   );.    rc = pMo
2c270 64 75 6c 65 2d 3e 78 52 6f 77 69 64 28 70 43 2d  dule->xRowid(pC-
2c280 3e 75 63 2e 70 56 43 75 72 2c 20 26 76 29 3b 0a  >uc.pVCur, &v);.
2c290 20 20 20 20 73 71 6c 69 74 65 33 56 74 61 62 49      sqlite3VtabI
2c2a0 6d 70 6f 72 74 45 72 72 6d 73 67 28 70 2c 20 70  mportErrmsg(p, p
2c2b0 56 74 61 62 29 3b 0a 20 20 20 20 69 66 28 20 72  Vtab);.    if( r
2c2c0 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64  c ) goto abort_d
2c2d0 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 23 65 6e  ue_to_error;.#en
2c2e0 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d  dif /* SQLITE_OM
2c2f0 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 20  IT_VIRTUALTABLE 
2c300 2a 2f 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  */.  }else{.    
2c310 61 73 73 65 72 74 28 20 70 43 2d 3e 65 43 75 72  assert( pC->eCur
2c320 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f 42 54  Type==CURTYPE_BT
2c330 52 45 45 20 29 3b 0a 20 20 20 20 61 73 73 65 72  REE );.    asser
2c340 74 28 20 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f  t( pC->uc.pCurso
2c350 72 21 3d 30 20 29 3b 0a 20 20 20 20 72 63 20 3d  r!=0 );.    rc =
2c360 20 73 71 6c 69 74 65 33 56 64 62 65 43 75 72 73   sqlite3VdbeCurs
2c370 6f 72 52 65 73 74 6f 72 65 28 70 43 29 3b 0a 20  orRestore(pC);. 
2c380 20 20 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f     if( rc ) goto
2c390 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
2c3a0 72 6f 72 3b 0a 20 20 20 20 69 66 28 20 70 43 2d  ror;.    if( pC-
2c3b0 3e 6e 75 6c 6c 52 6f 77 20 29 7b 0a 20 20 20 20  >nullRow ){.    
2c3c0 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20    pOut->flags = 
2c3d0 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20 20 20 20 20 20  MEM_Null;.      
2c3e0 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 20 20 20  break;.    }.   
2c3f0 20 76 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65   v = sqlite3Btre
2c400 65 49 6e 74 65 67 65 72 4b 65 79 28 70 43 2d 3e  eIntegerKey(pC->
2c410 75 63 2e 70 43 75 72 73 6f 72 29 3b 0a 20 20 7d  uc.pCursor);.  }
2c420 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 76  .  pOut->u.i = v
2c430 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
2c440 20 4f 70 63 6f 64 65 3a 20 4e 75 6c 6c 52 6f 77   Opcode: NullRow
2c450 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a   P1 * * * *.**.*
2c460 2a 20 4d 6f 76 65 20 74 68 65 20 63 75 72 73 6f  * Move the curso
2c470 72 20 50 31 20 74 6f 20 61 20 6e 75 6c 6c 20 72  r P1 to a null r
2c480 6f 77 2e 20 20 41 6e 79 20 4f 50 5f 43 6f 6c 75  ow.  Any OP_Colu
2c490 6d 6e 20 6f 70 65 72 61 74 69 6f 6e 73 0a 2a 2a  mn operations.**
2c4a0 20 74 68 61 74 20 6f 63 63 75 72 20 77 68 69 6c   that occur whil
2c4b0 65 20 74 68 65 20 63 75 72 73 6f 72 20 69 73 20  e the cursor is 
2c4c0 6f 6e 20 74 68 65 20 6e 75 6c 6c 20 72 6f 77 20  on the null row 
2c4d0 77 69 6c 6c 20 61 6c 77 61 79 73 0a 2a 2a 20 77  will always.** w
2c4e0 72 69 74 65 20 61 20 4e 55 4c 4c 2e 0a 2a 2f 0a  rite a NULL..*/.
2c4f0 63 61 73 65 20 4f 50 5f 4e 75 6c 6c 52 6f 77 3a  case OP_NullRow:
2c500 20 7b 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20   {.  VdbeCursor 
2c510 2a 70 43 3b 0a 0a 20 20 61 73 73 65 72 74 28 20  *pC;..  assert( 
2c520 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f  pOp->p1>=0 && pO
2c530 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72  p->p1<p->nCursor
2c540 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70   );.  pC = p->ap
2c550 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Csr[pOp->p1];.  
2c560 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b  assert( pC!=0 );
2c570 0a 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d  .  pC->nullRow =
2c580 20 31 3b 0a 20 20 70 43 2d 3e 63 61 63 68 65 53   1;.  pC->cacheS
2c590 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54  tatus = CACHE_ST
2c5a0 41 4c 45 3b 0a 20 20 69 66 28 20 70 43 2d 3e 65  ALE;.  if( pC->e
2c5b0 43 75 72 54 79 70 65 3d 3d 43 55 52 54 59 50 45  CurType==CURTYPE
2c5c0 5f 42 54 52 45 45 20 29 7b 0a 20 20 20 20 61 73  _BTREE ){.    as
2c5d0 73 65 72 74 28 20 70 43 2d 3e 75 63 2e 70 43 75  sert( pC->uc.pCu
2c5e0 72 73 6f 72 21 3d 30 20 29 3b 0a 20 20 20 20 73  rsor!=0 );.    s
2c5f0 71 6c 69 74 65 33 42 74 72 65 65 43 6c 65 61 72  qlite3BtreeClear
2c600 43 75 72 73 6f 72 28 70 43 2d 3e 75 63 2e 70 43  Cursor(pC->uc.pC
2c610 75 72 73 6f 72 29 3b 0a 20 20 7d 0a 23 69 66 64  ursor);.  }.#ifd
2c620 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a  ef SQLITE_DEBUG.
2c630 20 20 69 66 28 20 70 43 2d 3e 73 65 65 6b 4f 70    if( pC->seekOp
2c640 3d 3d 30 20 29 20 70 43 2d 3e 73 65 65 6b 4f 70  ==0 ) pC->seekOp
2c650 20 3d 20 4f 50 5f 4e 75 6c 6c 52 6f 77 3b 0a 23   = OP_NullRow;.#
2c660 65 6e 64 69 66 0a 20 20 62 72 65 61 6b 3b 0a 7d  endif.  break;.}
2c670 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 65 65  ../* Opcode: See
2c680 6b 45 6e 64 20 50 31 20 2a 20 2a 20 2a 20 2a 0a  kEnd P1 * * * *.
2c690 2a 2a 0a 2a 2a 20 50 6f 73 69 74 69 6f 6e 20 63  **.** Position c
2c6a0 75 72 73 6f 72 20 50 31 20 61 74 20 74 68 65 20  ursor P1 at the 
2c6b0 65 6e 64 20 6f 66 20 74 68 65 20 62 74 72 65 65  end of the btree
2c6c0 20 66 6f 72 20 74 68 65 20 70 75 72 70 6f 73 65   for the purpose
2c6d0 20 6f 66 0a 2a 2a 20 61 70 70 65 6e 64 69 6e 67   of.** appending
2c6e0 20 61 20 6e 65 77 20 65 6e 74 72 79 20 6f 6e 74   a new entry ont
2c6f0 6f 20 74 68 65 20 62 74 72 65 65 2e 0a 2a 2a 0a  o the btree..**.
2c700 2a 2a 20 49 74 20 69 73 20 61 73 73 75 6d 65 64  ** It is assumed
2c710 20 74 68 61 74 20 74 68 65 20 63 75 72 73 6f 72   that the cursor
2c720 20 69 73 20 75 73 65 64 20 6f 6e 6c 79 20 66 6f   is used only fo
2c730 72 20 61 70 70 65 6e 64 69 6e 67 20 61 6e 64 20  r appending and 
2c740 73 6f 0a 2a 2a 20 69 66 20 74 68 65 20 63 75 72  so.** if the cur
2c750 73 6f 72 20 69 73 20 76 61 6c 69 64 2c 20 74 68  sor is valid, th
2c760 65 6e 20 74 68 65 20 63 75 72 73 6f 72 20 6d 75  en the cursor mu
2c770 73 74 20 61 6c 72 65 61 64 79 20 62 65 20 70 6f  st already be po
2c780 69 6e 74 69 6e 67 0a 2a 2a 20 61 74 20 74 68 65  inting.** at the
2c790 20 65 6e 64 20 6f 66 20 74 68 65 20 62 74 72 65   end of the btre
2c7a0 65 20 61 6e 64 20 73 6f 20 6e 6f 20 63 68 61 6e  e and so no chan
2c7b0 67 65 73 20 61 72 65 20 6d 61 64 65 20 74 6f 0a  ges are made to.
2c7c0 2a 2a 20 74 68 65 20 63 75 72 73 6f 72 2e 0a 2a  ** the cursor..*
2c7d0 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4c 61 73  /./* Opcode: Las
2c7e0 74 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  t P1 P2 * * *.**
2c7f0 0a 2a 2a 20 54 68 65 20 6e 65 78 74 20 75 73 65  .** The next use
2c800 20 6f 66 20 74 68 65 20 52 6f 77 69 64 20 6f 72   of the Rowid or
2c810 20 43 6f 6c 75 6d 6e 20 6f 72 20 50 72 65 76 20   Column or Prev 
2c820 69 6e 73 74 72 75 63 74 69 6f 6e 20 66 6f 72 20  instruction for 
2c830 50 31 20 0a 2a 2a 20 77 69 6c 6c 20 72 65 66 65  P1 .** will refe
2c840 72 20 74 6f 20 74 68 65 20 6c 61 73 74 20 65 6e  r to the last en
2c850 74 72 79 20 69 6e 20 74 68 65 20 64 61 74 61 62  try in the datab
2c860 61 73 65 20 74 61 62 6c 65 20 6f 72 20 69 6e 64  ase table or ind
2c870 65 78 2e 0a 2a 2a 20 49 66 20 74 68 65 20 74 61  ex..** If the ta
2c880 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 69 73 20  ble or index is 
2c890 65 6d 70 74 79 20 61 6e 64 20 50 32 3e 30 2c 20  empty and P2>0, 
2c8a0 74 68 65 6e 20 6a 75 6d 70 20 69 6d 6d 65 64 69  then jump immedi
2c8b0 61 74 65 6c 79 20 74 6f 20 50 32 2e 0a 2a 2a 20  ately to P2..** 
2c8c0 49 66 20 50 32 20 69 73 20 30 20 6f 72 20 69 66  If P2 is 0 or if
2c8d0 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20 69 6e   the table or in
2c8e0 64 65 78 20 69 73 20 6e 6f 74 20 65 6d 70 74 79  dex is not empty
2c8f0 2c 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 0a 2a  , fall through.*
2c900 2a 20 74 6f 20 74 68 65 20 66 6f 6c 6c 6f 77 69  * to the followi
2c910 6e 67 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a  ng instruction..
2c920 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64  **.** This opcod
2c930 65 20 6c 65 61 76 65 73 20 74 68 65 20 63 75 72  e leaves the cur
2c940 73 6f 72 20 63 6f 6e 66 69 67 75 72 65 64 20 74  sor configured t
2c950 6f 20 6d 6f 76 65 20 69 6e 20 72 65 76 65 72 73  o move in revers
2c960 65 20 6f 72 64 65 72 2c 0a 2a 2a 20 66 72 6f 6d  e order,.** from
2c970 20 74 68 65 20 65 6e 64 20 74 6f 77 61 72 64 20   the end toward 
2c980 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 2e 20 20  the beginning.  
2c990 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20  In other words, 
2c9a0 74 68 65 20 63 75 72 73 6f 72 20 69 73 0a 2a 2a  the cursor is.**
2c9b0 20 63 6f 6e 66 69 67 75 72 65 64 20 74 6f 20 75   configured to u
2c9c0 73 65 20 50 72 65 76 2c 20 6e 6f 74 20 4e 65 78  se Prev, not Nex
2c9d0 74 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 65  t..*/.case OP_Se
2c9e0 65 6b 45 6e 64 3a 0a 63 61 73 65 20 4f 50 5f 4c  ekEnd:.case OP_L
2c9f0 61 73 74 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a  ast: {        /*
2ca00 20 6a 75 6d 70 20 2a 2f 0a 20 20 56 64 62 65 43   jump */.  VdbeC
2ca10 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 42 74 43  ursor *pC;.  BtC
2ca20 75 72 73 6f 72 20 2a 70 43 72 73 72 3b 0a 20 20  ursor *pCrsr;.  
2ca30 69 6e 74 20 72 65 73 3b 0a 0a 20 20 61 73 73 65  int res;..  asse
2ca40 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26  rt( pOp->p1>=0 &
2ca50 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75  & pOp->p1<p->nCu
2ca60 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70  rsor );.  pC = p
2ca70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d  ->apCsr[pOp->p1]
2ca80 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d  ;.  assert( pC!=
2ca90 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  0 );.  assert( p
2caa0 43 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43 55 52  C->eCurType==CUR
2cab0 54 59 50 45 5f 42 54 52 45 45 20 29 3b 0a 20 20  TYPE_BTREE );.  
2cac0 70 43 72 73 72 20 3d 20 70 43 2d 3e 75 63 2e 70  pCrsr = pC->uc.p
2cad0 43 75 72 73 6f 72 3b 0a 20 20 72 65 73 20 3d 20  Cursor;.  res = 
2cae0 30 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 72  0;.  assert( pCr
2caf0 73 72 21 3d 30 20 29 3b 0a 23 69 66 64 65 66 20  sr!=0 );.#ifdef 
2cb00 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 70  SQLITE_DEBUG.  p
2cb10 43 2d 3e 73 65 65 6b 4f 70 20 3d 20 70 4f 70 2d  C->seekOp = pOp-
2cb20 3e 6f 70 63 6f 64 65 3b 0a 23 65 6e 64 69 66 0a  >opcode;.#endif.
2cb30 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64    if( pOp->opcod
2cb40 65 3d 3d 4f 50 5f 53 65 65 6b 45 6e 64 20 29 7b  e==OP_SeekEnd ){
2cb50 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70  .    assert( pOp
2cb60 2d 3e 70 32 3d 3d 30 20 29 3b 0a 20 20 20 20 70  ->p2==0 );.    p
2cb70 43 2d 3e 73 65 65 6b 52 65 73 75 6c 74 20 3d 20  C->seekResult = 
2cb80 2d 31 3b 0a 20 20 20 20 69 66 28 20 73 71 6c 69  -1;.    if( sqli
2cb90 74 65 33 42 74 72 65 65 43 75 72 73 6f 72 49 73  te3BtreeCursorIs
2cba0 56 61 6c 69 64 4e 4e 28 70 43 72 73 72 29 20 29  ValidNN(pCrsr) )
2cbb0 7b 0a 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20  {.      break;. 
2cbc0 20 20 20 7d 0a 20 20 7d 0a 20 20 72 63 20 3d 20     }.  }.  rc = 
2cbd0 73 71 6c 69 74 65 33 42 74 72 65 65 4c 61 73 74  sqlite3BtreeLast
2cbe0 28 70 43 72 73 72 2c 20 26 72 65 73 29 3b 0a 20  (pCrsr, &res);. 
2cbf0 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 28   pC->nullRow = (
2cc00 75 38 29 72 65 73 3b 0a 20 20 70 43 2d 3e 64 65  u8)res;.  pC->de
2cc10 66 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d 20 30  ferredMoveto = 0
2cc20 3b 0a 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61  ;.  pC->cacheSta
2cc30 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c  tus = CACHE_STAL
2cc40 45 3b 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f  E;.  if( rc ) go
2cc50 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
2cc60 65 72 72 6f 72 3b 0a 20 20 69 66 28 20 70 4f 70  error;.  if( pOp
2cc70 2d 3e 70 32 3e 30 20 29 7b 0a 20 20 20 20 56 64  ->p2>0 ){.    Vd
2cc80 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 72 65  beBranchTaken(re
2cc90 73 21 3d 30 2c 32 29 3b 0a 20 20 20 20 69 66 28  s!=0,2);.    if(
2cca0 20 72 65 73 20 29 20 67 6f 74 6f 20 6a 75 6d 70   res ) goto jump
2ccb0 5f 74 6f 5f 70 32 3b 0a 20 20 7d 0a 20 20 62 72  _to_p2;.  }.  br
2ccc0 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
2ccd0 65 3a 20 49 66 53 6d 61 6c 6c 65 72 20 50 31 20  e: IfSmaller P1 
2cce0 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20  P2 P3 * *.**.** 
2ccf0 45 73 74 69 6d 61 74 65 20 74 68 65 20 6e 75 6d  Estimate the num
2cd00 62 65 72 20 6f 66 20 72 6f 77 73 20 69 6e 20 74  ber of rows in t
2cd10 68 65 20 74 61 62 6c 65 20 50 31 2e 20 20 4a 75  he table P1.  Ju
2cd20 6d 70 20 74 6f 20 50 32 20 69 66 20 74 68 61 74  mp to P2 if that
2cd30 0a 2a 2a 20 65 73 74 69 6d 61 74 65 20 69 73 20  .** estimate is 
2cd40 6c 65 73 73 20 74 68 61 6e 20 61 70 70 72 6f 78  less than approx
2cd50 69 6d 61 74 65 6c 79 20 32 2a 2a 28 30 2e 31 2a  imately 2**(0.1*
2cd60 50 33 29 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  P3)..*/.case OP_
2cd70 49 66 53 6d 61 6c 6c 65 72 3a 20 7b 20 20 20 20  IfSmaller: {    
2cd80 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20      /* jump */. 
2cd90 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b   VdbeCursor *pC;
2cda0 0a 20 20 42 74 43 75 72 73 6f 72 20 2a 70 43 72  .  BtCursor *pCr
2cdb0 73 72 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a 20  sr;.  int res;. 
2cdc0 20 69 36 34 20 73 7a 3b 0a 0a 20 20 61 73 73 65   i64 sz;..  asse
2cdd0 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26  rt( pOp->p1>=0 &
2cde0 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75  & pOp->p1<p->nCu
2cdf0 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70  rsor );.  pC = p
2ce00 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d  ->apCsr[pOp->p1]
2ce10 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d  ;.  assert( pC!=
2ce20 30 20 29 3b 0a 20 20 70 43 72 73 72 20 3d 20 70  0 );.  pCrsr = p
2ce30 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 3b 0a 20  C->uc.pCursor;. 
2ce40 20 61 73 73 65 72 74 28 20 70 43 72 73 72 20 29   assert( pCrsr )
2ce50 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  ;.  rc = sqlite3
2ce60 42 74 72 65 65 46 69 72 73 74 28 70 43 72 73 72  BtreeFirst(pCrsr
2ce70 2c 20 26 72 65 73 29 3b 0a 20 20 69 66 28 20 72  , &res);.  if( r
2ce80 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64  c ) goto abort_d
2ce90 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 69  ue_to_error;.  i
2cea0 66 28 20 72 65 73 3d 3d 30 20 29 7b 0a 20 20 20  f( res==0 ){.   
2ceb0 20 73 7a 20 3d 20 73 71 6c 69 74 65 33 42 74 72   sz = sqlite3Btr
2cec0 65 65 52 6f 77 43 6f 75 6e 74 45 73 74 28 70 43  eeRowCountEst(pC
2ced0 72 73 72 29 3b 0a 20 20 20 20 69 66 28 20 41 4c  rsr);.    if( AL
2cee0 57 41 59 53 28 73 7a 3e 3d 30 29 20 26 26 20 73  WAYS(sz>=0) && s
2cef0 71 6c 69 74 65 33 4c 6f 67 45 73 74 28 28 75 36  qlite3LogEst((u6
2cf00 34 29 73 7a 29 3c 70 4f 70 2d 3e 70 33 20 29 20  4)sz)<pOp->p3 ) 
2cf10 72 65 73 20 3d 20 31 3b 0a 20 20 7d 0a 20 20 56  res = 1;.  }.  V
2cf20 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 72  dbeBranchTaken(r
2cf30 65 73 21 3d 30 2c 32 29 3b 0a 20 20 69 66 28 20  es!=0,2);.  if( 
2cf40 72 65 73 20 29 20 67 6f 74 6f 20 6a 75 6d 70 5f  res ) goto jump_
2cf50 74 6f 5f 70 32 3b 0a 20 20 62 72 65 61 6b 3b 0a  to_p2;.  break;.
2cf60 7d 0a 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53  }.../* Opcode: S
2cf70 6f 72 74 65 72 53 6f 72 74 20 50 31 20 50 32 20  orterSort P1 P2 
2cf80 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 41 66 74 65  * * *.**.** Afte
2cf90 72 20 61 6c 6c 20 72 65 63 6f 72 64 73 20 68 61  r all records ha
2cfa0 76 65 20 62 65 65 6e 20 69 6e 73 65 72 74 65 64  ve been inserted
2cfb0 20 69 6e 74 6f 20 74 68 65 20 53 6f 72 74 65 72   into the Sorter
2cfc0 20 6f 62 6a 65 63 74 0a 2a 2a 20 69 64 65 6e 74   object.** ident
2cfd0 69 66 69 65 64 20 62 79 20 50 31 2c 20 69 6e 76  ified by P1, inv
2cfe0 6f 6b 65 20 74 68 69 73 20 6f 70 63 6f 64 65 20  oke this opcode 
2cff0 74 6f 20 61 63 74 75 61 6c 6c 79 20 64 6f 20 74  to actually do t
2d000 68 65 20 73 6f 72 74 69 6e 67 2e 0a 2a 2a 20 4a  he sorting..** J
2d010 75 6d 70 20 74 6f 20 50 32 20 69 66 20 74 68 65  ump to P2 if the
2d020 72 65 20 61 72 65 20 6e 6f 20 72 65 63 6f 72 64  re are no record
2d030 73 20 74 6f 20 62 65 20 73 6f 72 74 65 64 2e 0a  s to be sorted..
2d040 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64  **.** This opcod
2d050 65 20 69 73 20 61 6e 20 61 6c 69 61 73 20 66 6f  e is an alias fo
2d060 72 20 4f 50 5f 53 6f 72 74 20 61 6e 64 20 4f 50  r OP_Sort and OP
2d070 5f 52 65 77 69 6e 64 20 74 68 61 74 20 69 73 20  _Rewind that is 
2d080 75 73 65 64 0a 2a 2a 20 66 6f 72 20 53 6f 72 74  used.** for Sort
2d090 65 72 20 6f 62 6a 65 63 74 73 2e 0a 2a 2f 0a 2f  er objects..*/./
2d0a0 2a 20 4f 70 63 6f 64 65 3a 20 53 6f 72 74 20 50  * Opcode: Sort P
2d0b0 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a  1 P2 * * *.**.**
2d0c0 20 54 68 69 73 20 6f 70 63 6f 64 65 20 64 6f 65   This opcode doe
2d0d0 73 20 65 78 61 63 74 6c 79 20 74 68 65 20 73 61  s exactly the sa
2d0e0 6d 65 20 74 68 69 6e 67 20 61 73 20 4f 50 5f 52  me thing as OP_R
2d0f0 65 77 69 6e 64 20 65 78 63 65 70 74 20 74 68 61  ewind except tha
2d100 74 0a 2a 2a 20 69 74 20 69 6e 63 72 65 6d 65 6e  t.** it incremen
2d110 74 73 20 61 6e 20 75 6e 64 6f 63 75 6d 65 6e 74  ts an undocument
2d120 65 64 20 67 6c 6f 62 61 6c 20 76 61 72 69 61 62  ed global variab
2d130 6c 65 20 75 73 65 64 20 66 6f 72 20 74 65 73 74  le used for test
2d140 69 6e 67 2e 0a 2a 2a 0a 2a 2a 20 53 6f 72 74 69  ing..**.** Sorti
2d150 6e 67 20 69 73 20 61 63 63 6f 6d 70 6c 69 73 68  ng is accomplish
2d160 65 64 20 62 79 20 77 72 69 74 69 6e 67 20 72 65  ed by writing re
2d170 63 6f 72 64 73 20 69 6e 74 6f 20 61 20 73 6f 72  cords into a sor
2d180 74 69 6e 67 20 69 6e 64 65 78 2c 0a 2a 2a 20 74  ting index,.** t
2d190 68 65 6e 20 72 65 77 69 6e 64 69 6e 67 20 74 68  hen rewinding th
2d1a0 61 74 20 69 6e 64 65 78 20 61 6e 64 20 70 6c 61  at index and pla
2d1b0 79 69 6e 67 20 69 74 20 62 61 63 6b 20 66 72 6f  ying it back fro
2d1c0 6d 20 62 65 67 69 6e 6e 69 6e 67 20 74 6f 0a 2a  m beginning to.*
2d1d0 2a 20 65 6e 64 2e 20 20 57 65 20 75 73 65 20 74  * end.  We use t
2d1e0 68 65 20 4f 50 5f 53 6f 72 74 20 6f 70 63 6f 64  he OP_Sort opcod
2d1f0 65 20 69 6e 73 74 65 61 64 20 6f 66 20 4f 50 5f  e instead of OP_
2d200 52 65 77 69 6e 64 20 74 6f 20 64 6f 20 74 68 65  Rewind to do the
2d210 0a 2a 2a 20 72 65 77 69 6e 64 69 6e 67 20 73 6f  .** rewinding so
2d220 20 74 68 61 74 20 74 68 65 20 67 6c 6f 62 61 6c   that the global
2d230 20 76 61 72 69 61 62 6c 65 20 77 69 6c 6c 20 62   variable will b
2d240 65 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 61 6e  e incremented an
2d250 64 0a 2a 2a 20 72 65 67 72 65 73 73 69 6f 6e 20  d.** regression 
2d260 74 65 73 74 73 20 63 61 6e 20 64 65 74 65 72 6d  tests can determ
2d270 69 6e 65 20 77 68 65 74 68 65 72 20 6f 72 20 6e  ine whether or n
2d280 6f 74 20 74 68 65 20 6f 70 74 69 6d 69 7a 65 72  ot the optimizer
2d290 20 69 73 0a 2a 2a 20 63 6f 72 72 65 63 74 6c 79   is.** correctly
2d2a0 20 6f 70 74 69 6d 69 7a 69 6e 67 20 6f 75 74 20   optimizing out 
2d2b0 73 6f 72 74 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f  sorts..*/.case O
2d2c0 50 5f 53 6f 72 74 65 72 53 6f 72 74 3a 20 20 20  P_SorterSort:   
2d2d0 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 63 61 73 65   /* jump */.case
2d2e0 20 4f 50 5f 53 6f 72 74 3a 20 7b 20 20 20 20 20   OP_Sort: {     
2d2f0 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 23 69     /* jump */.#i
2d300 66 64 65 66 20 53 51 4c 49 54 45 5f 54 45 53 54  fdef SQLITE_TEST
2d310 0a 20 20 73 71 6c 69 74 65 33 5f 73 6f 72 74 5f  .  sqlite3_sort_
2d320 63 6f 75 6e 74 2b 2b 3b 0a 20 20 73 71 6c 69 74  count++;.  sqlit
2d330 65 33 5f 73 65 61 72 63 68 5f 63 6f 75 6e 74 2d  e3_search_count-
2d340 2d 3b 0a 23 65 6e 64 69 66 0a 20 20 70 2d 3e 61  -;.#endif.  p->a
2d350 43 6f 75 6e 74 65 72 5b 53 51 4c 49 54 45 5f 53  Counter[SQLITE_S
2d360 54 4d 54 53 54 41 54 55 53 5f 53 4f 52 54 5d 2b  TMTSTATUS_SORT]+
2d370 2b 3b 0a 20 20 2f 2a 20 46 61 6c 6c 20 74 68 72  +;.  /* Fall thr
2d380 6f 75 67 68 20 69 6e 74 6f 20 4f 50 5f 52 65 77  ough into OP_Rew
2d390 69 6e 64 20 2a 2f 0a 7d 0a 2f 2a 20 4f 70 63 6f  ind */.}./* Opco
2d3a0 64 65 3a 20 52 65 77 69 6e 64 20 50 31 20 50 32  de: Rewind P1 P2
2d3b0 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 65   * * *.**.** The
2d3c0 20 6e 65 78 74 20 75 73 65 20 6f 66 20 74 68 65   next use of the
2d3d0 20 52 6f 77 69 64 20 6f 72 20 43 6f 6c 75 6d 6e   Rowid or Column
2d3e0 20 6f 72 20 4e 65 78 74 20 69 6e 73 74 72 75 63   or Next instruc
2d3f0 74 69 6f 6e 20 66 6f 72 20 50 31 20 0a 2a 2a 20  tion for P1 .** 
2d400 77 69 6c 6c 20 72 65 66 65 72 20 74 6f 20 74 68  will refer to th
2d410 65 20 66 69 72 73 74 20 65 6e 74 72 79 20 69 6e  e first entry in
2d420 20 74 68 65 20 64 61 74 61 62 61 73 65 20 74 61   the database ta
2d430 62 6c 65 20 6f 72 20 69 6e 64 65 78 2e 0a 2a 2a  ble or index..**
2d440 20 49 66 20 74 68 65 20 74 61 62 6c 65 20 6f 72   If the table or
2d450 20 69 6e 64 65 78 20 69 73 20 65 6d 70 74 79 2c   index is empty,
2d460 20 6a 75 6d 70 20 69 6d 6d 65 64 69 61 74 65 6c   jump immediatel
2d470 79 20 74 6f 20 50 32 2e 0a 2a 2a 20 49 66 20 74  y to P2..** If t
2d480 68 65 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65  he table or inde
2d490 78 20 69 73 20 6e 6f 74 20 65 6d 70 74 79 2c 20  x is not empty, 
2d4a0 66 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20  fall through to 
2d4b0 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 0a 2a  the following .*
2d4c0 2a 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a  * instruction..*
2d4d0 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65  *.** This opcode
2d4e0 20 6c 65 61 76 65 73 20 74 68 65 20 63 75 72 73   leaves the curs
2d4f0 6f 72 20 63 6f 6e 66 69 67 75 72 65 64 20 74 6f  or configured to
2d500 20 6d 6f 76 65 20 69 6e 20 66 6f 72 77 61 72 64   move in forward
2d510 20 6f 72 64 65 72 2c 0a 2a 2a 20 66 72 6f 6d 20   order,.** from 
2d520 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 20 74 6f  the beginning to
2d530 77 61 72 64 20 74 68 65 20 65 6e 64 2e 20 20 49  ward the end.  I
2d540 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 74  n other words, t
2d550 68 65 20 63 75 72 73 6f 72 20 69 73 0a 2a 2a 20  he cursor is.** 
2d560 63 6f 6e 66 69 67 75 72 65 64 20 74 6f 20 75 73  configured to us
2d570 65 20 4e 65 78 74 2c 20 6e 6f 74 20 50 72 65 76  e Next, not Prev
2d580 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65 77  ..*/.case OP_Rew
2d590 69 6e 64 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a  ind: {        /*
2d5a0 20 6a 75 6d 70 20 2a 2f 0a 20 20 56 64 62 65 43   jump */.  VdbeC
2d5b0 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 42 74 43  ursor *pC;.  BtC
2d5c0 75 72 73 6f 72 20 2a 70 43 72 73 72 3b 0a 20 20  ursor *pCrsr;.  
2d5d0 69 6e 74 20 72 65 73 3b 0a 0a 20 20 61 73 73 65  int res;..  asse
2d5e0 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26  rt( pOp->p1>=0 &
2d5f0 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75  & pOp->p1<p->nCu
2d600 72 73 6f 72 20 29 3b 0a 20 20 61 73 73 65 72 74  rsor );.  assert
2d610 28 20 70 4f 70 2d 3e 70 35 3d 3d 30 20 29 3b 0a  ( pOp->p5==0 );.
2d620 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b    pC = p->apCsr[
2d630 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65  pOp->p1];.  asse
2d640 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 61  rt( pC!=0 );.  a
2d650 73 73 65 72 74 28 20 69 73 53 6f 72 74 65 72 28  ssert( isSorter(
2d660 70 43 29 3d 3d 28 70 4f 70 2d 3e 6f 70 63 6f 64  pC)==(pOp->opcod
2d670 65 3d 3d 4f 50 5f 53 6f 72 74 65 72 53 6f 72 74  e==OP_SorterSort
2d680 29 20 29 3b 0a 20 20 72 65 73 20 3d 20 31 3b 0a  ) );.  res = 1;.
2d690 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45  #ifdef SQLITE_DE
2d6a0 42 55 47 0a 20 20 70 43 2d 3e 73 65 65 6b 4f 70  BUG.  pC->seekOp
2d6b0 20 3d 20 4f 50 5f 52 65 77 69 6e 64 3b 0a 23 65   = OP_Rewind;.#e
2d6c0 6e 64 69 66 0a 20 20 69 66 28 20 69 73 53 6f 72  ndif.  if( isSor
2d6d0 74 65 72 28 70 43 29 20 29 7b 0a 20 20 20 20 72  ter(pC) ){.    r
2d6e0 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 53  c = sqlite3VdbeS
2d6f0 6f 72 74 65 72 52 65 77 69 6e 64 28 70 43 2c 20  orterRewind(pC, 
2d700 26 72 65 73 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a  &res);.  }else{.
2d710 20 20 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e      assert( pC->
2d720 65 43 75 72 54 79 70 65 3d 3d 43 55 52 54 59 50  eCurType==CURTYP
2d730 45 5f 42 54 52 45 45 20 29 3b 0a 20 20 20 20 70  E_BTREE );.    p
2d740 43 72 73 72 20 3d 20 70 43 2d 3e 75 63 2e 70 43  Crsr = pC->uc.pC
2d750 75 72 73 6f 72 3b 0a 20 20 20 20 61 73 73 65 72  ursor;.    asser
2d760 74 28 20 70 43 72 73 72 20 29 3b 0a 20 20 20 20  t( pCrsr );.    
2d770 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
2d780 65 46 69 72 73 74 28 70 43 72 73 72 2c 20 26 72  eFirst(pCrsr, &r
2d790 65 73 29 3b 0a 20 20 20 20 70 43 2d 3e 64 65 66  es);.    pC->def
2d7a0 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d 20 30 3b  erredMoveto = 0;
2d7b0 0a 20 20 20 20 70 43 2d 3e 63 61 63 68 65 53 74  .    pC->cacheSt
2d7c0 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41  atus = CACHE_STA
2d7d0 4c 45 3b 0a 20 20 7d 0a 20 20 69 66 28 20 72 63  LE;.  }.  if( rc
2d7e0 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75   ) goto abort_du
2d7f0 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 70 43  e_to_error;.  pC
2d800 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 28 75 38 29  ->nullRow = (u8)
2d810 72 65 73 3b 0a 20 20 61 73 73 65 72 74 28 20 70  res;.  assert( p
2d820 4f 70 2d 3e 70 32 3e 30 20 26 26 20 70 4f 70 2d  Op->p2>0 && pOp-
2d830 3e 70 32 3c 70 2d 3e 6e 4f 70 20 29 3b 0a 20 20  >p2<p->nOp );.  
2d840 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28  VdbeBranchTaken(
2d850 72 65 73 21 3d 30 2c 32 29 3b 0a 20 20 69 66 28  res!=0,2);.  if(
2d860 20 72 65 73 20 29 20 67 6f 74 6f 20 6a 75 6d 70   res ) goto jump
2d870 5f 74 6f 5f 70 32 3b 0a 20 20 62 72 65 61 6b 3b  _to_p2;.  break;
2d880 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e  .}../* Opcode: N
2d890 65 78 74 20 50 31 20 50 32 20 50 33 20 50 34 20  ext P1 P2 P3 P4 
2d8a0 50 35 0a 2a 2a 0a 2a 2a 20 41 64 76 61 6e 63 65  P5.**.** Advance
2d8b0 20 63 75 72 73 6f 72 20 50 31 20 73 6f 20 74 68   cursor P1 so th
2d8c0 61 74 20 69 74 20 70 6f 69 6e 74 73 20 74 6f 20  at it points to 
2d8d0 74 68 65 20 6e 65 78 74 20 6b 65 79 2f 64 61 74  the next key/dat
2d8e0 61 20 70 61 69 72 20 69 6e 20 69 74 73 0a 2a 2a  a pair in its.**
2d8f0 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 2e   table or index.
2d900 20 20 49 66 20 74 68 65 72 65 20 61 72 65 20 6e    If there are n
2d910 6f 20 6d 6f 72 65 20 6b 65 79 2f 76 61 6c 75 65  o more key/value
2d920 20 70 61 69 72 73 20 74 68 65 6e 20 66 61 6c 6c   pairs then fall
2d930 20 74 68 72 6f 75 67 68 0a 2a 2a 20 74 6f 20 74   through.** to t
2d940 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 69 6e 73  he following ins
2d950 74 72 75 63 74 69 6f 6e 2e 20 20 42 75 74 20 69  truction.  But i
2d960 66 20 74 68 65 20 63 75 72 73 6f 72 20 61 64 76  f the cursor adv
2d970 61 6e 63 65 20 77 61 73 20 73 75 63 63 65 73 73  ance was success
2d980 66 75 6c 2c 0a 2a 2a 20 6a 75 6d 70 20 69 6d 6d  ful,.** jump imm
2d990 65 64 69 61 74 65 6c 79 20 74 6f 20 50 32 2e 0a  ediately to P2..
2d9a0 2a 2a 0a 2a 2a 20 54 68 65 20 4e 65 78 74 20 6f  **.** The Next o
2d9b0 70 63 6f 64 65 20 69 73 20 6f 6e 6c 79 20 76 61  pcode is only va
2d9c0 6c 69 64 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 6e  lid following an
2d9d0 20 53 65 65 6b 47 54 2c 20 53 65 65 6b 47 45 2c   SeekGT, SeekGE,
2d9e0 20 6f 72 0a 2a 2a 20 4f 50 5f 52 65 77 69 6e 64   or.** OP_Rewind
2d9f0 20 6f 70 63 6f 64 65 20 75 73 65 64 20 74 6f 20   opcode used to 
2da00 70 6f 73 69 74 69 6f 6e 20 74 68 65 20 63 75 72  position the cur
2da10 73 6f 72 2e 20 20 4e 65 78 74 20 69 73 20 6e 6f  sor.  Next is no
2da20 74 20 61 6c 6c 6f 77 65 64 0a 2a 2a 20 74 6f 20  t allowed.** to 
2da30 66 6f 6c 6c 6f 77 20 53 65 65 6b 4c 54 2c 20 53  follow SeekLT, S
2da40 65 65 6b 4c 45 2c 20 6f 72 20 4f 50 5f 4c 61 73  eekLE, or OP_Las
2da50 74 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 31 20  t..**.** The P1 
2da60 63 75 72 73 6f 72 20 6d 75 73 74 20 62 65 20 66  cursor must be f
2da70 6f 72 20 61 20 72 65 61 6c 20 74 61 62 6c 65 2c  or a real table,
2da80 20 6e 6f 74 20 61 20 70 73 65 75 64 6f 2d 74 61   not a pseudo-ta
2da90 62 6c 65 2e 20 20 50 31 20 6d 75 73 74 20 68 61  ble.  P1 must ha
2daa0 76 65 0a 2a 2a 20 62 65 65 6e 20 6f 70 65 6e 65  ve.** been opene
2dab0 64 20 70 72 69 6f 72 20 74 6f 20 74 68 69 73 20  d prior to this 
2dac0 6f 70 63 6f 64 65 20 6f 72 20 74 68 65 20 70 72  opcode or the pr
2dad0 6f 67 72 61 6d 20 77 69 6c 6c 20 73 65 67 66 61  ogram will segfa
2dae0 75 6c 74 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50  ult..**.** The P
2daf0 33 20 76 61 6c 75 65 20 69 73 20 61 20 68 69 6e  3 value is a hin
2db00 74 20 74 6f 20 74 68 65 20 62 74 72 65 65 20 69  t to the btree i
2db10 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 2e 20 49  mplementation. I
2db20 66 20 50 33 3d 3d 31 2c 20 74 68 61 74 0a 2a 2a  f P3==1, that.**
2db30 20 6d 65 61 6e 73 20 50 31 20 69 73 20 61 6e 20   means P1 is an 
2db40 53 51 4c 20 69 6e 64 65 78 20 61 6e 64 20 74 68  SQL index and th
2db50 61 74 20 74 68 69 73 20 69 6e 73 74 72 75 63 74  at this instruct
2db60 69 6f 6e 20 63 6f 75 6c 64 20 68 61 76 65 20 62  ion could have b
2db70 65 65 6e 0a 2a 2a 20 6f 6d 69 74 74 65 64 20 69  een.** omitted i
2db80 66 20 74 68 61 74 20 69 6e 64 65 78 20 68 61 64  f that index had
2db90 20 62 65 65 6e 20 75 6e 69 71 75 65 2e 20 20 50   been unique.  P
2dba0 33 20 69 73 20 75 73 75 61 6c 6c 79 20 30 2e 20  3 is usually 0. 
2dbb0 20 50 33 20 69 73 0a 2a 2a 20 61 6c 77 61 79 73   P3 is.** always
2dbc0 20 65 69 74 68 65 72 20 30 20 6f 72 20 31 2e 0a   either 0 or 1..
2dbd0 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61 6c 77 61  **.** P4 is alwa
2dbe0 79 73 20 6f 66 20 74 79 70 65 20 50 34 5f 41 44  ys of type P4_AD
2dbf0 56 41 4e 43 45 2e 20 54 68 65 20 66 75 6e 63 74  VANCE. The funct
2dc00 69 6f 6e 20 70 6f 69 6e 74 65 72 20 70 6f 69 6e  ion pointer poin
2dc10 74 73 20 74 6f 0a 2a 2a 20 73 71 6c 69 74 65 33  ts to.** sqlite3
2dc20 42 74 72 65 65 4e 65 78 74 28 29 2e 0a 2a 2a 0a  BtreeNext()..**.
2dc30 2a 2a 20 49 66 20 50 35 20 69 73 20 70 6f 73 69  ** If P5 is posi
2dc40 74 69 76 65 20 61 6e 64 20 74 68 65 20 6a 75 6d  tive and the jum
2dc50 70 20 69 73 20 74 61 6b 65 6e 2c 20 74 68 65 6e  p is taken, then
2dc60 20 65 76 65 6e 74 20 63 6f 75 6e 74 65 72 0a 2a   event counter.*
2dc70 2a 20 6e 75 6d 62 65 72 20 50 35 2d 31 20 69 6e  * number P5-1 in
2dc80 20 74 68 65 20 70 72 65 70 61 72 65 64 20 73 74   the prepared st
2dc90 61 74 65 6d 65 6e 74 20 69 73 20 69 6e 63 72 65  atement is incre
2dca0 6d 65 6e 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 53 65  mented..**.** Se
2dcb0 65 20 61 6c 73 6f 3a 20 50 72 65 76 0a 2a 2f 0a  e also: Prev.*/.
2dcc0 2f 2a 20 4f 70 63 6f 64 65 3a 20 50 72 65 76 20  /* Opcode: Prev 
2dcd0 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a  P1 P2 P3 P4 P5.*
2dce0 2a 0a 2a 2a 20 42 61 63 6b 20 75 70 20 63 75 72  *.** Back up cur
2dcf0 73 6f 72 20 50 31 20 73 6f 20 74 68 61 74 20 69  sor P1 so that i
2dd00 74 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 20  t points to the 
2dd10 70 72 65 76 69 6f 75 73 20 6b 65 79 2f 64 61 74  previous key/dat
2dd20 61 20 70 61 69 72 20 69 6e 20 69 74 73 0a 2a 2a  a pair in its.**
2dd30 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 2e   table or index.
2dd40 20 20 49 66 20 74 68 65 72 65 20 69 73 20 6e 6f    If there is no
2dd50 20 70 72 65 76 69 6f 75 73 20 6b 65 79 2f 76 61   previous key/va
2dd60 6c 75 65 20 70 61 69 72 73 20 74 68 65 6e 20 66  lue pairs then f
2dd70 61 6c 6c 20 74 68 72 6f 75 67 68 0a 2a 2a 20 74  all through.** t
2dd80 6f 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  o the following 
2dd90 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20 20 42 75  instruction.  Bu
2dda0 74 20 69 66 20 74 68 65 20 63 75 72 73 6f 72 20  t if the cursor 
2ddb0 62 61 63 6b 75 70 20 77 61 73 20 73 75 63 63 65  backup was succe
2ddc0 73 73 66 75 6c 2c 0a 2a 2a 20 6a 75 6d 70 20 69  ssful,.** jump i
2ddd0 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f 20 50 32  mmediately to P2
2dde0 2e 0a 2a 2a 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50  ..**.**.** The P
2ddf0 72 65 76 20 6f 70 63 6f 64 65 20 69 73 20 6f 6e  rev opcode is on
2de00 6c 79 20 76 61 6c 69 64 20 66 6f 6c 6c 6f 77 69  ly valid followi
2de10 6e 67 20 61 6e 20 53 65 65 6b 4c 54 2c 20 53 65  ng an SeekLT, Se
2de20 65 6b 4c 45 2c 20 6f 72 0a 2a 2a 20 4f 50 5f 4c  ekLE, or.** OP_L
2de30 61 73 74 20 6f 70 63 6f 64 65 20 75 73 65 64 20  ast opcode used 
2de40 74 6f 20 70 6f 73 69 74 69 6f 6e 20 74 68 65 20  to position the 
2de50 63 75 72 73 6f 72 2e 20 20 50 72 65 76 20 69 73  cursor.  Prev is
2de60 20 6e 6f 74 20 61 6c 6c 6f 77 65 64 0a 2a 2a 20   not allowed.** 
2de70 74 6f 20 66 6f 6c 6c 6f 77 20 53 65 65 6b 47 54  to follow SeekGT
2de80 2c 20 53 65 65 6b 47 45 2c 20 6f 72 20 4f 50 5f  , SeekGE, or OP_
2de90 52 65 77 69 6e 64 2e 0a 2a 2a 0a 2a 2a 20 54 68  Rewind..**.** Th
2dea0 65 20 50 31 20 63 75 72 73 6f 72 20 6d 75 73 74  e P1 cursor must
2deb0 20 62 65 20 66 6f 72 20 61 20 72 65 61 6c 20 74   be for a real t
2dec0 61 62 6c 65 2c 20 6e 6f 74 20 61 20 70 73 65 75  able, not a pseu
2ded0 64 6f 2d 74 61 62 6c 65 2e 20 20 49 66 20 50 31  do-table.  If P1
2dee0 20 69 73 0a 2a 2a 20 6e 6f 74 20 6f 70 65 6e 20   is.** not open 
2def0 74 68 65 6e 20 74 68 65 20 62 65 68 61 76 69 6f  then the behavio
2df00 72 20 69 73 20 75 6e 64 65 66 69 6e 65 64 2e 0a  r is undefined..
2df10 2a 2a 0a 2a 2a 20 54 68 65 20 50 33 20 76 61 6c  **.** The P3 val
2df20 75 65 20 69 73 20 61 20 68 69 6e 74 20 74 6f 20  ue is a hint to 
2df30 74 68 65 20 62 74 72 65 65 20 69 6d 70 6c 65 6d  the btree implem
2df40 65 6e 74 61 74 69 6f 6e 2e 20 49 66 20 50 33 3d  entation. If P3=
2df50 3d 31 2c 20 74 68 61 74 0a 2a 2a 20 6d 65 61 6e  =1, that.** mean
2df60 73 20 50 31 20 69 73 20 61 6e 20 53 51 4c 20 69  s P1 is an SQL i
2df70 6e 64 65 78 20 61 6e 64 20 74 68 61 74 20 74 68  ndex and that th
2df80 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 63  is instruction c
2df90 6f 75 6c 64 20 68 61 76 65 20 62 65 65 6e 0a 2a  ould have been.*
2dfa0 2a 20 6f 6d 69 74 74 65 64 20 69 66 20 74 68 61  * omitted if tha
2dfb0 74 20 69 6e 64 65 78 20 68 61 64 20 62 65 65 6e  t index had been
2dfc0 20 75 6e 69 71 75 65 2e 20 20 50 33 20 69 73 20   unique.  P3 is 
2dfd0 75 73 75 61 6c 6c 79 20 30 2e 20 20 50 33 20 69  usually 0.  P3 i
2dfe0 73 0a 2a 2a 20 61 6c 77 61 79 73 20 65 69 74 68  s.** always eith
2dff0 65 72 20 30 20 6f 72 20 31 2e 0a 2a 2a 0a 2a 2a  er 0 or 1..**.**
2e000 20 50 34 20 69 73 20 61 6c 77 61 79 73 20 6f 66   P4 is always of
2e010 20 74 79 70 65 20 50 34 5f 41 44 56 41 4e 43 45   type P4_ADVANCE
2e020 2e 20 54 68 65 20 66 75 6e 63 74 69 6f 6e 20 70  . The function p
2e030 6f 69 6e 74 65 72 20 70 6f 69 6e 74 73 20 74 6f  ointer points to
2e040 0a 2a 2a 20 73 71 6c 69 74 65 33 42 74 72 65 65  .** sqlite3Btree
2e050 50 72 65 76 69 6f 75 73 28 29 2e 0a 2a 2a 0a 2a  Previous()..**.*
2e060 2a 20 49 66 20 50 35 20 69 73 20 70 6f 73 69 74  * If P5 is posit
2e070 69 76 65 20 61 6e 64 20 74 68 65 20 6a 75 6d 70  ive and the jump
2e080 20 69 73 20 74 61 6b 65 6e 2c 20 74 68 65 6e 20   is taken, then 
2e090 65 76 65 6e 74 20 63 6f 75 6e 74 65 72 0a 2a 2a  event counter.**
2e0a0 20 6e 75 6d 62 65 72 20 50 35 2d 31 20 69 6e 20   number P5-1 in 
2e0b0 74 68 65 20 70 72 65 70 61 72 65 64 20 73 74 61  the prepared sta
2e0c0 74 65 6d 65 6e 74 20 69 73 20 69 6e 63 72 65 6d  tement is increm
2e0d0 65 6e 74 65 64 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63  ented..*/./* Opc
2e0e0 6f 64 65 3a 20 53 6f 72 74 65 72 4e 65 78 74 20  ode: SorterNext 
2e0f0 50 31 20 50 32 20 2a 20 2a 20 50 35 0a 2a 2a 0a  P1 P2 * * P5.**.
2e100 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 77  ** This opcode w
2e110 6f 72 6b 73 20 6a 75 73 74 20 6c 69 6b 65 20 4f  orks just like O
2e120 50 5f 4e 65 78 74 20 65 78 63 65 70 74 20 74 68  P_Next except th
2e130 61 74 20 50 31 20 6d 75 73 74 20 62 65 20 61 0a  at P1 must be a.
2e140 2a 2a 20 73 6f 72 74 65 72 20 6f 62 6a 65 63 74  ** sorter object
2e150 20 66 6f 72 20 77 68 69 63 68 20 74 68 65 20 4f   for which the O
2e160 50 5f 53 6f 72 74 65 72 53 6f 72 74 20 6f 70 63  P_SorterSort opc
2e170 6f 64 65 20 68 61 73 20 62 65 65 6e 0a 2a 2a 20  ode has been.** 
2e180 69 6e 76 6f 6b 65 64 2e 20 20 54 68 69 73 20 6f  invoked.  This o
2e190 70 63 6f 64 65 20 61 64 76 61 6e 63 65 73 20 74  pcode advances t
2e1a0 68 65 20 63 75 72 73 6f 72 20 74 6f 20 74 68 65  he cursor to the
2e1b0 20 6e 65 78 74 20 73 6f 72 74 65 64 0a 2a 2a 20   next sorted.** 
2e1c0 72 65 63 6f 72 64 2c 20 6f 72 20 6a 75 6d 70 73  record, or jumps
2e1d0 20 74 6f 20 50 32 20 69 66 20 74 68 65 72 65 20   to P2 if there 
2e1e0 61 72 65 20 6e 6f 20 6d 6f 72 65 20 73 6f 72 74  are no more sort
2e1f0 65 64 20 72 65 63 6f 72 64 73 2e 0a 2a 2f 0a 63  ed records..*/.c
2e200 61 73 65 20 4f 50 5f 53 6f 72 74 65 72 4e 65 78  ase OP_SorterNex
2e210 74 3a 20 7b 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f  t: {  /* jump */
2e220 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70  .  VdbeCursor *p
2e230 43 3b 0a 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70  C;..  pC = p->ap
2e240 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Csr[pOp->p1];.  
2e250 61 73 73 65 72 74 28 20 69 73 53 6f 72 74 65 72  assert( isSorter
2e260 28 70 43 29 20 29 3b 0a 20 20 72 63 20 3d 20 73  (pC) );.  rc = s
2e270 71 6c 69 74 65 33 56 64 62 65 53 6f 72 74 65 72  qlite3VdbeSorter
2e280 4e 65 78 74 28 64 62 2c 20 70 43 29 3b 0a 20 20  Next(db, pC);.  
2e290 67 6f 74 6f 20 6e 65 78 74 5f 74 61 69 6c 3b 0a  goto next_tail;.
2e2a0 63 61 73 65 20 4f 50 5f 50 72 65 76 3a 20 20 20  case OP_Prev:   
2e2b0 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a         /* jump *
2e2c0 2f 0a 63 61 73 65 20 4f 50 5f 4e 65 78 74 3a 20  /.case OP_Next: 
2e2d0 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70           /* jump
2e2e0 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f   */.  assert( pO
2e2f0 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d  p->p1>=0 && pOp-
2e300 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29  >p1<p->nCursor )
2e310 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
2e320 3e 70 35 3c 41 72 72 61 79 53 69 7a 65 28 70 2d  >p5<ArraySize(p-
2e330 3e 61 43 6f 75 6e 74 65 72 29 20 29 3b 0a 20 20  >aCounter) );.  
2e340 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f  pC = p->apCsr[pO
2e350 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74  p->p1];.  assert
2e360 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 61 73 73  ( pC!=0 );.  ass
2e370 65 72 74 28 20 70 43 2d 3e 64 65 66 65 72 72 65  ert( pC->deferre
2e380 64 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a 20 20  dMoveto==0 );.  
2e390 61 73 73 65 72 74 28 20 70 43 2d 3e 65 43 75 72  assert( pC->eCur
2e3a0 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f 42 54  Type==CURTYPE_BT
2e3b0 52 45 45 20 29 3b 0a 20 20 61 73 73 65 72 74 28  REE );.  assert(
2e3c0 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 21 3d 4f 50   pOp->opcode!=OP
2e3d0 5f 4e 65 78 74 20 7c 7c 20 70 4f 70 2d 3e 70 34  _Next || pOp->p4
2e3e0 2e 78 41 64 76 61 6e 63 65 3d 3d 73 71 6c 69 74  .xAdvance==sqlit
2e3f0 65 33 42 74 72 65 65 4e 65 78 74 20 29 3b 0a 20  e3BtreeNext );. 
2e400 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70   assert( pOp->op
2e410 63 6f 64 65 21 3d 4f 50 5f 50 72 65 76 20 7c 7c  code!=OP_Prev ||
2e420 20 70 4f 70 2d 3e 70 34 2e 78 41 64 76 61 6e 63   pOp->p4.xAdvanc
2e430 65 3d 3d 73 71 6c 69 74 65 33 42 74 72 65 65 50  e==sqlite3BtreeP
2e440 72 65 76 69 6f 75 73 20 29 3b 0a 0a 20 20 2f 2a  revious );..  /*
2e450 20 54 68 65 20 4e 65 78 74 20 6f 70 63 6f 64 65   The Next opcode
2e460 20 69 73 20 6f 6e 6c 79 20 75 73 65 64 20 61 66   is only used af
2e470 74 65 72 20 53 65 65 6b 47 54 2c 20 53 65 65 6b  ter SeekGT, Seek
2e480 47 45 2c 20 52 65 77 69 6e 64 2c 20 61 6e 64 20  GE, Rewind, and 
2e490 46 6f 75 6e 64 2e 0a 20 20 2a 2a 20 54 68 65 20  Found..  ** The 
2e4a0 50 72 65 76 20 6f 70 63 6f 64 65 20 69 73 20 6f  Prev opcode is o
2e4b0 6e 6c 79 20 75 73 65 64 20 61 66 74 65 72 20 53  nly used after S
2e4c0 65 65 6b 4c 54 2c 20 53 65 65 6b 4c 45 2c 20 61  eekLT, SeekLE, a
2e4d0 6e 64 20 4c 61 73 74 2e 20 2a 2f 0a 20 20 61 73  nd Last. */.  as
2e4e0 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64  sert( pOp->opcod
2e4f0 65 21 3d 4f 50 5f 4e 65 78 74 0a 20 20 20 20 20  e!=OP_Next.     
2e500 20 20 7c 7c 20 70 43 2d 3e 73 65 65 6b 4f 70 3d    || pC->seekOp=
2e510 3d 4f 50 5f 53 65 65 6b 47 54 20 7c 7c 20 70 43  =OP_SeekGT || pC
2e520 2d 3e 73 65 65 6b 4f 70 3d 3d 4f 50 5f 53 65 65  ->seekOp==OP_See
2e530 6b 47 45 0a 20 20 20 20 20 20 20 7c 7c 20 70 43  kGE.       || pC
2e540 2d 3e 73 65 65 6b 4f 70 3d 3d 4f 50 5f 52 65 77  ->seekOp==OP_Rew
2e550 69 6e 64 20 7c 7c 20 70 43 2d 3e 73 65 65 6b 4f  ind || pC->seekO
2e560 70 3d 3d 4f 50 5f 46 6f 75 6e 64 0a 20 20 20 20  p==OP_Found.    
2e570 20 20 20 7c 7c 20 70 43 2d 3e 73 65 65 6b 4f 70     || pC->seekOp
2e580 3d 3d 4f 50 5f 4e 75 6c 6c 52 6f 77 7c 7c 20 70  ==OP_NullRow|| p
2e590 43 2d 3e 73 65 65 6b 4f 70 3d 3d 4f 50 5f 53 65  C->seekOp==OP_Se
2e5a0 65 6b 52 6f 77 69 64 0a 20 20 20 20 20 20 20 7c  ekRowid.       |
2e5b0 7c 20 70 43 2d 3e 73 65 65 6b 4f 70 3d 3d 4f 50  | pC->seekOp==OP
2e5c0 5f 49 66 4e 6f 48 6f 70 65 29 3b 0a 20 20 61 73  _IfNoHope);.  as
2e5d0 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64  sert( pOp->opcod
2e5e0 65 21 3d 4f 50 5f 50 72 65 76 0a 20 20 20 20 20  e!=OP_Prev.     
2e5f0 20 20 7c 7c 20 70 43 2d 3e 73 65 65 6b 4f 70 3d    || pC->seekOp=
2e600 3d 4f 50 5f 53 65 65 6b 4c 54 20 7c 7c 20 70 43  =OP_SeekLT || pC
2e610 2d 3e 73 65 65 6b 4f 70 3d 3d 4f 50 5f 53 65 65  ->seekOp==OP_See
2e620 6b 4c 45 0a 20 20 20 20 20 20 20 7c 7c 20 70 43  kLE.       || pC
2e630 2d 3e 73 65 65 6b 4f 70 3d 3d 4f 50 5f 4c 61 73  ->seekOp==OP_Las
2e640 74 20 20 20 7c 7c 20 70 43 2d 3e 73 65 65 6b 4f  t   || pC->seekO
2e650 70 3d 3d 4f 50 5f 49 66 4e 6f 48 6f 70 65 0a 20  p==OP_IfNoHope. 
2e660 20 20 20 20 20 20 7c 7c 20 70 43 2d 3e 73 65 65        || pC->see
2e670 6b 4f 70 3d 3d 4f 50 5f 4e 75 6c 6c 52 6f 77 29  kOp==OP_NullRow)
2e680 3b 0a 0a 20 20 72 63 20 3d 20 70 4f 70 2d 3e 70  ;..  rc = pOp->p
2e690 34 2e 78 41 64 76 61 6e 63 65 28 70 43 2d 3e 75  4.xAdvance(pC->u
2e6a0 63 2e 70 43 75 72 73 6f 72 2c 20 70 4f 70 2d 3e  c.pCursor, pOp->
2e6b0 70 33 29 3b 0a 6e 65 78 74 5f 74 61 69 6c 3a 0a  p3);.next_tail:.
2e6c0 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75    pC->cacheStatu
2e6d0 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b  s = CACHE_STALE;
2e6e0 0a 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b  .  VdbeBranchTak
2e6f0 65 6e 28 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  en(rc==SQLITE_OK
2e700 2c 32 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53  ,2);.  if( rc==S
2e710 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20  QLITE_OK ){.    
2e720 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 30 3b  pC->nullRow = 0;
2e730 0a 20 20 20 20 70 2d 3e 61 43 6f 75 6e 74 65 72  .    p->aCounter
2e740 5b 70 4f 70 2d 3e 70 35 5d 2b 2b 3b 0a 23 69 66  [pOp->p5]++;.#if
2e750 64 65 66 20 53 51 4c 49 54 45 5f 54 45 53 54 0a  def SQLITE_TEST.
2e760 20 20 20 20 73 71 6c 69 74 65 33 5f 73 65 61 72      sqlite3_sear
2e770 63 68 5f 63 6f 75 6e 74 2b 2b 3b 0a 23 65 6e 64  ch_count++;.#end
2e780 69 66 0a 20 20 20 20 67 6f 74 6f 20 6a 75 6d 70  if.    goto jump
2e790 5f 74 6f 5f 70 32 5f 61 6e 64 5f 63 68 65 63 6b  _to_p2_and_check
2e7a0 5f 66 6f 72 5f 69 6e 74 65 72 72 75 70 74 3b 0a  _for_interrupt;.
2e7b0 20 20 7d 0a 20 20 69 66 28 20 72 63 21 3d 53 51    }.  if( rc!=SQ
2e7c0 4c 49 54 45 5f 44 4f 4e 45 20 29 20 67 6f 74 6f  LITE_DONE ) goto
2e7d0 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
2e7e0 72 6f 72 3b 0a 20 20 72 63 20 3d 20 53 51 4c 49  ror;.  rc = SQLI
2e7f0 54 45 5f 4f 4b 3b 0a 20 20 70 43 2d 3e 6e 75 6c  TE_OK;.  pC->nul
2e800 6c 52 6f 77 20 3d 20 31 3b 0a 20 20 67 6f 74 6f  lRow = 1;.  goto
2e810 20 63 68 65 63 6b 5f 66 6f 72 5f 69 6e 74 65 72   check_for_inter
2e820 72 75 70 74 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  rupt;.}../* Opco
2e830 64 65 3a 20 49 64 78 49 6e 73 65 72 74 20 50 31  de: IdxInsert P1
2e840 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20   P2 P3 P4 P5.** 
2e850 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b  Synopsis: key=r[
2e860 50 32 5d 0a 2a 2a 0a 2a 2a 20 52 65 67 69 73 74  P2].**.** Regist
2e870 65 72 20 50 32 20 68 6f 6c 64 73 20 61 6e 20 53  er P2 holds an S
2e880 51 4c 20 69 6e 64 65 78 20 6b 65 79 20 6d 61 64  QL index key mad
2e890 65 20 75 73 69 6e 67 20 74 68 65 0a 2a 2a 20 4d  e using the.** M
2e8a0 61 6b 65 52 65 63 6f 72 64 20 69 6e 73 74 72 75  akeRecord instru
2e8b0 63 74 69 6f 6e 73 2e 20 20 54 68 69 73 20 6f 70  ctions.  This op
2e8c0 63 6f 64 65 20 77 72 69 74 65 73 20 74 68 61 74  code writes that
2e8d0 20 6b 65 79 0a 2a 2a 20 69 6e 74 6f 20 74 68 65   key.** into the
2e8e0 20 69 6e 64 65 78 20 50 31 2e 20 20 44 61 74 61   index P1.  Data
2e8f0 20 66 6f 72 20 74 68 65 20 65 6e 74 72 79 20 69   for the entry i
2e900 73 20 6e 69 6c 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  s nil..**.** If 
2e910 50 34 20 69 73 20 6e 6f 74 20 7a 65 72 6f 2c 20  P4 is not zero, 
2e920 74 68 65 6e 20 69 74 20 69 73 20 74 68 65 20 6e  then it is the n
2e930 75 6d 62 65 72 20 6f 66 20 76 61 6c 75 65 73 20  umber of values 
2e940 69 6e 20 74 68 65 20 75 6e 70 61 63 6b 65 64 0a  in the unpacked.
2e950 2a 2a 20 6b 65 79 20 6f 66 20 72 65 67 28 50 32  ** key of reg(P2
2e960 29 2e 20 20 49 6e 20 74 68 61 74 20 63 61 73 65  ).  In that case
2e970 2c 20 50 33 20 69 73 20 74 68 65 20 69 6e 64 65  , P3 is the inde
2e980 78 20 6f 66 20 74 68 65 20 66 69 72 73 74 20 72  x of the first r
2e990 65 67 69 73 74 65 72 0a 2a 2a 20 66 6f 72 20 74  egister.** for t
2e9a0 68 65 20 75 6e 70 61 63 6b 65 64 20 6b 65 79 2e  he unpacked key.
2e9b0 20 20 54 68 65 20 61 76 61 69 6c 61 62 69 6c 69    The availabili
2e9c0 74 79 20 6f 66 20 74 68 65 20 75 6e 70 61 63 6b  ty of the unpack
2e9d0 65 64 20 6b 65 79 20 63 61 6e 20 73 6f 6d 65 74  ed key can somet
2e9e0 69 6d 65 73 0a 2a 2a 20 62 65 20 61 6e 20 6f 70  imes.** be an op
2e9f0 74 69 6d 69 7a 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a  timization..**.*
2ea00 2a 20 49 66 20 50 35 20 68 61 73 20 74 68 65 20  * If P5 has the 
2ea10 4f 50 46 4c 41 47 5f 41 50 50 45 4e 44 20 62 69  OPFLAG_APPEND bi
2ea20 74 20 73 65 74 2c 20 74 68 61 74 20 69 73 20 61  t set, that is a
2ea30 20 68 69 6e 74 20 74 6f 20 74 68 65 20 62 2d 74   hint to the b-t
2ea40 72 65 65 20 6c 61 79 65 72 0a 2a 2a 20 74 68 61  ree layer.** tha
2ea50 74 20 74 68 69 73 20 69 6e 73 65 72 74 20 69 73  t this insert is
2ea60 20 6c 69 6b 65 6c 79 20 74 6f 20 62 65 20 61 6e   likely to be an
2ea70 20 61 70 70 65 6e 64 2e 0a 2a 2a 0a 2a 2a 20 49   append..**.** I
2ea80 66 20 50 35 20 68 61 73 20 74 68 65 20 4f 50 46  f P5 has the OPF
2ea90 4c 41 47 5f 4e 43 48 41 4e 47 45 20 62 69 74 20  LAG_NCHANGE bit 
2eaa0 73 65 74 2c 20 74 68 65 6e 20 74 68 65 20 63 68  set, then the ch
2eab0 61 6e 67 65 20 63 6f 75 6e 74 65 72 20 69 73 0a  ange counter is.
2eac0 2a 2a 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 62  ** incremented b
2ead0 79 20 74 68 69 73 20 69 6e 73 74 72 75 63 74 69  y this instructi
2eae0 6f 6e 2e 20 20 49 66 20 74 68 65 20 4f 50 46 4c  on.  If the OPFL
2eaf0 41 47 5f 4e 43 48 41 4e 47 45 20 62 69 74 20 69  AG_NCHANGE bit i
2eb00 73 20 63 6c 65 61 72 2c 0a 2a 2a 20 74 68 65 6e  s clear,.** then
2eb10 20 74 68 65 20 63 68 61 6e 67 65 20 63 6f 75 6e   the change coun
2eb20 74 65 72 20 69 73 20 75 6e 63 68 61 6e 67 65 64  ter is unchanged
2eb30 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 4f  ..**.** If the O
2eb40 50 46 4c 41 47 5f 55 53 45 53 45 45 4b 52 45 53  PFLAG_USESEEKRES
2eb50 55 4c 54 20 66 6c 61 67 20 6f 66 20 50 35 20 69  ULT flag of P5 i
2eb60 73 20 73 65 74 2c 20 74 68 65 20 69 6d 70 6c 65  s set, the imple
2eb70 6d 65 6e 74 61 74 69 6f 6e 20 6d 69 67 68 74 0a  mentation might.
2eb80 2a 2a 20 72 75 6e 20 66 61 73 74 65 72 20 62 79  ** run faster by
2eb90 20 61 76 6f 69 64 69 6e 67 20 61 6e 20 75 6e 6e   avoiding an unn
2eba0 65 63 65 73 73 61 72 79 20 73 65 65 6b 20 6f 6e  ecessary seek on
2ebb0 20 63 75 72 73 6f 72 20 50 31 2e 20 20 48 6f 77   cursor P1.  How
2ebc0 65 76 65 72 2c 0a 2a 2a 20 74 68 65 20 4f 50 46  ever,.** the OPF
2ebd0 4c 41 47 5f 55 53 45 53 45 45 4b 52 45 53 55 4c  LAG_USESEEKRESUL
2ebe0 54 20 66 6c 61 67 20 6d 75 73 74 20 6f 6e 6c 79  T flag must only
2ebf0 20 62 65 20 73 65 74 20 69 66 20 74 68 65 72 65   be set if there
2ec00 20 68 61 76 65 20 62 65 65 6e 20 6e 6f 20 70 72   have been no pr
2ec10 69 6f 72 0a 2a 2a 20 73 65 65 6b 73 20 6f 6e 20  ior.** seeks on 
2ec20 74 68 65 20 63 75 72 73 6f 72 20 6f 72 20 69 66  the cursor or if
2ec30 20 74 68 65 20 6d 6f 73 74 20 72 65 63 65 6e 74   the most recent
2ec40 20 73 65 65 6b 20 75 73 65 64 20 61 20 6b 65 79   seek used a key
2ec50 20 65 71 75 69 76 61 6c 65 6e 74 0a 2a 2a 20 74   equivalent.** t
2ec60 6f 20 50 32 2e 20 0a 2a 2a 0a 2a 2a 20 54 68 69  o P2. .**.** Thi
2ec70 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 6f 6e  s instruction on
2ec80 6c 79 20 77 6f 72 6b 73 20 66 6f 72 20 69 6e 64  ly works for ind
2ec90 69 63 65 73 2e 20 20 54 68 65 20 65 71 75 69 76  ices.  The equiv
2eca0 61 6c 65 6e 74 20 69 6e 73 74 72 75 63 74 69 6f  alent instructio
2ecb0 6e 0a 2a 2a 20 66 6f 72 20 74 61 62 6c 65 73 20  n.** for tables 
2ecc0 69 73 20 4f 50 5f 49 6e 73 65 72 74 2e 0a 2a 2f  is OP_Insert..*/
2ecd0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 6f 72 74  ./* Opcode: Sort
2ece0 65 72 49 6e 73 65 72 74 20 50 31 20 50 32 20 2a  erInsert P1 P2 *
2ecf0 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73   * *.** Synopsis
2ed00 3a 20 6b 65 79 3d 72 5b 50 32 5d 0a 2a 2a 0a 2a  : key=r[P2].**.*
2ed10 2a 20 52 65 67 69 73 74 65 72 20 50 32 20 68 6f  * Register P2 ho
2ed20 6c 64 73 20 61 6e 20 53 51 4c 20 69 6e 64 65 78  lds an SQL index
2ed30 20 6b 65 79 20 6d 61 64 65 20 75 73 69 6e 67 20   key made using 
2ed40 74 68 65 0a 2a 2a 20 4d 61 6b 65 52 65 63 6f 72  the.** MakeRecor
2ed50 64 20 69 6e 73 74 72 75 63 74 69 6f 6e 73 2e 20  d instructions. 
2ed60 20 54 68 69 73 20 6f 70 63 6f 64 65 20 77 72 69   This opcode wri
2ed70 74 65 73 20 74 68 61 74 20 6b 65 79 0a 2a 2a 20  tes that key.** 
2ed80 69 6e 74 6f 20 74 68 65 20 73 6f 72 74 65 72 20  into the sorter 
2ed90 50 31 2e 20 20 44 61 74 61 20 66 6f 72 20 74 68  P1.  Data for th
2eda0 65 20 65 6e 74 72 79 20 69 73 20 6e 69 6c 2e 0a  e entry is nil..
2edb0 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 6f 72 74 65  */.case OP_Sorte
2edc0 72 49 6e 73 65 72 74 3a 20 20 20 20 20 20 20 2f  rInsert:       /
2edd0 2a 20 69 6e 32 20 2a 2f 0a 63 61 73 65 20 4f 50  * in2 */.case OP
2ede0 5f 49 64 78 49 6e 73 65 72 74 3a 20 7b 20 20 20  _IdxInsert: {   
2edf0 20 20 20 20 20 2f 2a 20 69 6e 32 20 2a 2f 0a 20       /* in2 */. 
2ee00 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b   VdbeCursor *pC;
2ee10 0a 20 20 42 74 72 65 65 50 61 79 6c 6f 61 64 20  .  BtreePayload 
2ee20 78 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f  x;..  assert( pO
2ee30 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d  p->p1>=0 && pOp-
2ee40 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29  >p1<p->nCursor )
2ee50 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73  ;.  pC = p->apCs
2ee60 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 73 71  r[pOp->p1];.  sq
2ee70 6c 69 74 65 33 56 64 62 65 49 6e 63 72 57 72 69  lite3VdbeIncrWri
2ee80 74 65 43 6f 75 6e 74 65 72 28 70 2c 20 70 43 29  teCounter(p, pC)
2ee90 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d  ;.  assert( pC!=
2eea0 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 69  0 );.  assert( i
2eeb0 73 53 6f 72 74 65 72 28 70 43 29 3d 3d 28 70 4f  sSorter(pC)==(pO
2eec0 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 53 6f  p->opcode==OP_So
2eed0 72 74 65 72 49 6e 73 65 72 74 29 20 29 3b 0a 20  rterInsert) );. 
2eee0 20 70 49 6e 32 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn2 = &aMem[pO
2eef0 70 2d 3e 70 32 5d 3b 0a 20 20 61 73 73 65 72 74  p->p2];.  assert
2ef00 28 20 70 49 6e 32 2d 3e 66 6c 61 67 73 20 26 20  ( pIn2->flags & 
2ef10 4d 45 4d 5f 42 6c 6f 62 20 29 3b 0a 20 20 69 66  MEM_Blob );.  if
2ef20 28 20 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c  ( pOp->p5 & OPFL
2ef30 41 47 5f 4e 43 48 41 4e 47 45 20 29 20 70 2d 3e  AG_NCHANGE ) p->
2ef40 6e 43 68 61 6e 67 65 2b 2b 3b 0a 20 20 61 73 73  nChange++;.  ass
2ef50 65 72 74 28 20 70 43 2d 3e 65 43 75 72 54 79 70  ert( pC->eCurTyp
2ef60 65 3d 3d 43 55 52 54 59 50 45 5f 42 54 52 45 45  e==CURTYPE_BTREE
2ef70 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d   || pOp->opcode=
2ef80 3d 4f 50 5f 53 6f 72 74 65 72 49 6e 73 65 72 74  =OP_SorterInsert
2ef90 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43   );.  assert( pC
2efa0 2d 3e 69 73 54 61 62 6c 65 3d 3d 30 20 29 3b 0a  ->isTable==0 );.
2efb0 20 20 72 63 20 3d 20 45 78 70 61 6e 64 42 6c 6f    rc = ExpandBlo
2efc0 62 28 70 49 6e 32 29 3b 0a 20 20 69 66 28 20 72  b(pIn2);.  if( r
2efd0 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64  c ) goto abort_d
2efe0 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 69  ue_to_error;.  i
2eff0 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d  f( pOp->opcode==
2f000 4f 50 5f 53 6f 72 74 65 72 49 6e 73 65 72 74 20  OP_SorterInsert 
2f010 29 7b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69  ){.    rc = sqli
2f020 74 65 33 56 64 62 65 53 6f 72 74 65 72 57 72 69  te3VdbeSorterWri
2f030 74 65 28 70 43 2c 20 70 49 6e 32 29 3b 0a 20 20  te(pC, pIn2);.  
2f040 7d 65 6c 73 65 7b 0a 20 20 20 20 78 2e 6e 4b 65  }else{.    x.nKe
2f050 79 20 3d 20 70 49 6e 32 2d 3e 6e 3b 0a 20 20 20  y = pIn2->n;.   
2f060 20 78 2e 70 4b 65 79 20 3d 20 70 49 6e 32 2d 3e   x.pKey = pIn2->
2f070 7a 3b 0a 20 20 20 20 78 2e 61 4d 65 6d 20 3d 20  z;.    x.aMem = 
2f080 61 4d 65 6d 20 2b 20 70 4f 70 2d 3e 70 33 3b 0a  aMem + pOp->p3;.
2f090 20 20 20 20 78 2e 6e 4d 65 6d 20 3d 20 28 75 31      x.nMem = (u1
2f0a0 36 29 70 4f 70 2d 3e 70 34 2e 69 3b 0a 20 20 20  6)pOp->p4.i;.   
2f0b0 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
2f0c0 65 65 49 6e 73 65 72 74 28 70 43 2d 3e 75 63 2e  eeInsert(pC->uc.
2f0d0 70 43 75 72 73 6f 72 2c 20 26 78 2c 0a 20 20 20  pCursor, &x,.   
2f0e0 20 20 20 20 20 20 28 70 4f 70 2d 3e 70 35 20 26        (pOp->p5 &
2f0f0 20 28 4f 50 46 4c 41 47 5f 41 50 50 45 4e 44 7c   (OPFLAG_APPEND|
2f100 4f 50 46 4c 41 47 5f 53 41 56 45 50 4f 53 49 54  OPFLAG_SAVEPOSIT
2f110 49 4f 4e 29 29 2c 20 0a 20 20 20 20 20 20 20 20  ION)), .        
2f120 28 28 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c  ((pOp->p5 & OPFL
2f130 41 47 5f 55 53 45 53 45 45 4b 52 45 53 55 4c 54  AG_USESEEKRESULT
2f140 29 20 3f 20 70 43 2d 3e 73 65 65 6b 52 65 73 75  ) ? pC->seekResu
2f150 6c 74 20 3a 20 30 29 0a 20 20 20 20 20 20 20 20  lt : 0).        
2f160 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  );.    assert( p
2f170 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74  C->deferredMovet
2f180 6f 3d 3d 30 20 29 3b 0a 20 20 20 20 70 43 2d 3e  o==0 );.    pC->
2f190 63 61 63 68 65 53 74 61 74 75 73 20 3d 20 43 41  cacheStatus = CA
2f1a0 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20 7d 0a 20  CHE_STALE;.  }. 
2f1b0 20 69 66 28 20 72 63 29 20 67 6f 74 6f 20 61 62   if( rc) goto ab
2f1c0 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
2f1d0 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
2f1e0 20 4f 70 63 6f 64 65 3a 20 49 64 78 44 65 6c 65   Opcode: IdxDele
2f1f0 74 65 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a  te P1 P2 P3 * *.
2f200 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79  ** Synopsis: key
2f210 3d 72 5b 50 32 40 50 33 5d 0a 2a 2a 0a 2a 2a 20  =r[P2@P3].**.** 
2f220 54 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 50  The content of P
2f230 33 20 72 65 67 69 73 74 65 72 73 20 73 74 61 72  3 registers star
2f240 74 69 6e 67 20 61 74 20 72 65 67 69 73 74 65 72  ting at register
2f250 20 50 32 20 66 6f 72 6d 0a 2a 2a 20 61 6e 20 75   P2 form.** an u
2f260 6e 70 61 63 6b 65 64 20 69 6e 64 65 78 20 6b 65  npacked index ke
2f270 79 2e 20 54 68 69 73 20 6f 70 63 6f 64 65 20 72  y. This opcode r
2f280 65 6d 6f 76 65 73 20 74 68 61 74 20 65 6e 74 72  emoves that entr
2f290 79 20 66 72 6f 6d 20 74 68 65 20 0a 2a 2a 20 69  y from the .** i
2f2a0 6e 64 65 78 20 6f 70 65 6e 65 64 20 62 79 20 63  ndex opened by c
2f2b0 75 72 73 6f 72 20 50 31 2e 0a 2a 2f 0a 63 61 73  ursor P1..*/.cas
2f2c0 65 20 4f 50 5f 49 64 78 44 65 6c 65 74 65 3a 20  e OP_IdxDelete: 
2f2d0 7b 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a  {.  VdbeCursor *
2f2e0 70 43 3b 0a 20 20 42 74 43 75 72 73 6f 72 20 2a  pC;.  BtCursor *
2f2f0 70 43 72 73 72 3b 0a 20 20 69 6e 74 20 72 65 73  pCrsr;.  int res
2f300 3b 0a 20 20 55 6e 70 61 63 6b 65 64 52 65 63 6f  ;.  UnpackedReco
2f310 72 64 20 72 3b 0a 0a 20 20 61 73 73 65 72 74 28  rd r;..  assert(
2f320 20 70 4f 70 2d 3e 70 33 3e 30 20 29 3b 0a 20 20   pOp->p3>0 );.  
2f330 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e  assert( pOp->p2>
2f340 30 20 26 26 20 70 4f 70 2d 3e 70 32 2b 70 4f 70  0 && pOp->p2+pOp
2f350 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31  ->p3<=(p->nMem+1
2f360 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29 2b 31   - p->nCursor)+1
2f370 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   );.  assert( pO
2f380 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d  p->p1>=0 && pOp-
2f390 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29  >p1<p->nCursor )
2f3a0 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73  ;.  pC = p->apCs
2f3b0 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  r[pOp->p1];.  as
2f3c0 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20  sert( pC!=0 );. 
2f3d0 20 61 73 73 65 72 74 28 20 70 43 2d 3e 65 43 75   assert( pC->eCu
2f3e0 72 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f 42  rType==CURTYPE_B
2f3f0 54 52 45 45 20 29 3b 0a 20 20 73 71 6c 69 74 65  TREE );.  sqlite
2f400 33 56 64 62 65 49 6e 63 72 57 72 69 74 65 43 6f  3VdbeIncrWriteCo
2f410 75 6e 74 65 72 28 70 2c 20 70 43 29 3b 0a 20 20  unter(p, pC);.  
2f420 70 43 72 73 72 20 3d 20 70 43 2d 3e 75 63 2e 70  pCrsr = pC->uc.p
2f430 43 75 72 73 6f 72 3b 0a 20 20 61 73 73 65 72 74  Cursor;.  assert
2f440 28 20 70 43 72 73 72 21 3d 30 20 29 3b 0a 20 20  ( pCrsr!=0 );.  
2f450 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 35 3d  assert( pOp->p5=
2f460 3d 30 20 29 3b 0a 20 20 72 2e 70 4b 65 79 49 6e  =0 );.  r.pKeyIn
2f470 66 6f 20 3d 20 70 43 2d 3e 70 4b 65 79 49 6e 66  fo = pC->pKeyInf
2f480 6f 3b 0a 20 20 72 2e 6e 46 69 65 6c 64 20 3d 20  o;.  r.nField = 
2f490 28 75 31 36 29 70 4f 70 2d 3e 70 33 3b 0a 20 20  (u16)pOp->p3;.  
2f4a0 72 2e 64 65 66 61 75 6c 74 5f 72 63 20 3d 20 30  r.default_rc = 0
2f4b0 3b 0a 20 20 72 2e 61 4d 65 6d 20 3d 20 26 61 4d  ;.  r.aMem = &aM
2f4c0 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 72  em[pOp->p2];.  r
2f4d0 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
2f4e0 4d 6f 76 65 74 6f 55 6e 70 61 63 6b 65 64 28 70  MovetoUnpacked(p
2f4f0 43 72 73 72 2c 20 26 72 2c 20 30 2c 20 30 2c 20  Crsr, &r, 0, 0, 
2f500 26 72 65 73 29 3b 0a 20 20 69 66 28 20 72 63 20  &res);.  if( rc 
2f510 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65  ) goto abort_due
2f520 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 69 66 28  _to_error;.  if(
2f530 20 72 65 73 3d 3d 30 20 29 7b 0a 20 20 20 20 72   res==0 ){.    r
2f540 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
2f550 44 65 6c 65 74 65 28 70 43 72 73 72 2c 20 42 54  Delete(pCrsr, BT
2f560 52 45 45 5f 41 55 58 44 45 4c 45 54 45 29 3b 0a  REE_AUXDELETE);.
2f570 20 20 20 20 69 66 28 20 72 63 20 29 20 67 6f 74      if( rc ) got
2f580 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
2f590 72 72 6f 72 3b 0a 20 20 7d 0a 20 20 61 73 73 65  rror;.  }.  asse
2f5a0 72 74 28 20 70 43 2d 3e 64 65 66 65 72 72 65 64  rt( pC->deferred
2f5b0 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a 20 20 70  Moveto==0 );.  p
2f5c0 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d  C->cacheStatus =
2f5d0 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20   CACHE_STALE;.  
2f5e0 70 43 2d 3e 73 65 65 6b 52 65 73 75 6c 74 20 3d  pC->seekResult =
2f5f0 20 30 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a   0;.  break;.}..
2f600 2f 2a 20 4f 70 63 6f 64 65 3a 20 44 65 66 65 72  /* Opcode: Defer
2f610 72 65 64 53 65 65 6b 20 50 31 20 2a 20 50 33 20  redSeek P1 * P3 
2f620 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73  P4 *.** Synopsis
2f630 3a 20 4d 6f 76 65 20 50 33 20 74 6f 20 50 31 2e  : Move P3 to P1.
2f640 72 6f 77 69 64 20 69 66 20 6e 65 65 64 65 64 0a  rowid if needed.
2f650 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 61 6e 20 6f  **.** P1 is an o
2f660 70 65 6e 20 69 6e 64 65 78 20 63 75 72 73 6f 72  pen index cursor
2f670 20 61 6e 64 20 50 33 20 69 73 20 61 20 63 75 72   and P3 is a cur
2f680 73 6f 72 20 6f 6e 20 74 68 65 20 63 6f 72 72 65  sor on the corre
2f690 73 70 6f 6e 64 69 6e 67 0a 2a 2a 20 74 61 62 6c  sponding.** tabl
2f6a0 65 2e 20 20 54 68 69 73 20 6f 70 63 6f 64 65 20  e.  This opcode 
2f6b0 64 6f 65 73 20 61 20 64 65 66 65 72 72 65 64 20  does a deferred 
2f6c0 73 65 65 6b 20 6f 66 20 74 68 65 20 50 33 20 74  seek of the P3 t
2f6d0 61 62 6c 65 20 63 75 72 73 6f 72 0a 2a 2a 20 74  able cursor.** t
2f6e0 6f 20 74 68 65 20 72 6f 77 20 74 68 61 74 20 63  o the row that c
2f6f0 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f 20 74 68  orresponds to th
2f700 65 20 63 75 72 72 65 6e 74 20 72 6f 77 20 6f 66  e current row of
2f710 20 50 31 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20   P1..**.** This 
2f720 69 73 20 61 20 64 65 66 65 72 72 65 64 20 73 65  is a deferred se
2f730 65 6b 2e 20 20 4e 6f 74 68 69 6e 67 20 61 63 74  ek.  Nothing act
2f740 75 61 6c 6c 79 20 68 61 70 70 65 6e 73 20 75 6e  ually happens un
2f750 74 69 6c 0a 2a 2a 20 74 68 65 20 63 75 72 73 6f  til.** the curso
2f760 72 20 69 73 20 75 73 65 64 20 74 6f 20 72 65 61  r is used to rea
2f770 64 20 61 20 72 65 63 6f 72 64 2e 20 20 54 68 61  d a record.  Tha
2f780 74 20 77 61 79 2c 20 69 66 20 6e 6f 20 72 65 61  t way, if no rea
2f790 64 73 0a 2a 2a 20 6f 63 63 75 72 2c 20 6e 6f 20  ds.** occur, no 
2f7a0 75 6e 6e 65 63 65 73 73 61 72 79 20 49 2f 4f 20  unnecessary I/O 
2f7b0 68 61 70 70 65 6e 73 2e 0a 2a 2a 0a 2a 2a 20 50  happens..**.** P
2f7c0 34 20 6d 61 79 20 62 65 20 61 6e 20 61 72 72 61  4 may be an arra
2f7d0 79 20 6f 66 20 69 6e 74 65 67 65 72 73 20 28 74  y of integers (t
2f7e0 79 70 65 20 50 34 5f 49 4e 54 41 52 52 41 59 29  ype P4_INTARRAY)
2f7f0 20 63 6f 6e 74 61 69 6e 69 6e 67 0a 2a 2a 20 6f   containing.** o
2f800 6e 65 20 65 6e 74 72 79 20 66 6f 72 20 65 61 63  ne entry for eac
2f810 68 20 63 6f 6c 75 6d 6e 20 69 6e 20 74 68 65 20  h column in the 
2f820 50 33 20 74 61 62 6c 65 2e 20 20 49 66 20 61 72  P3 table.  If ar
2f830 72 61 79 20 65 6e 74 72 79 20 61 28 69 29 0a 2a  ray entry a(i).*
2f840 2a 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74  * is non-zero, t
2f850 68 65 6e 20 72 65 61 64 69 6e 67 20 63 6f 6c 75  hen reading colu
2f860 6d 6e 20 61 28 69 29 2d 31 20 66 72 6f 6d 20 63  mn a(i)-1 from c
2f870 75 72 73 6f 72 20 50 33 20 69 73 20 0a 2a 2a 20  ursor P3 is .** 
2f880 65 71 75 69 76 61 6c 65 6e 74 20 74 6f 20 70 65  equivalent to pe
2f890 72 66 6f 72 6d 69 6e 67 20 74 68 65 20 64 65 66  rforming the def
2f8a0 65 72 72 65 64 20 73 65 65 6b 20 61 6e 64 20 74  erred seek and t
2f8b0 68 65 6e 20 72 65 61 64 69 6e 67 20 63 6f 6c 75  hen reading colu
2f8c0 6d 6e 20 69 20 0a 2a 2a 20 66 72 6f 6d 20 50 31  mn i .** from P1
2f8d0 2e 20 20 54 68 69 73 20 69 6e 66 6f 72 6d 61 74  .  This informat
2f8e0 69 6f 6e 20 69 73 20 73 74 6f 72 65 64 20 69 6e  ion is stored in
2f8f0 20 50 33 20 61 6e 64 20 75 73 65 64 20 74 6f 20   P3 and used to 
2f900 72 65 64 69 72 65 63 74 0a 2a 2a 20 72 65 61 64  redirect.** read
2f910 73 20 61 67 61 69 6e 73 74 20 50 33 20 6f 76 65  s against P3 ove
2f920 72 20 74 6f 20 50 31 2c 20 74 68 75 73 20 70 6f  r to P1, thus po
2f930 73 73 69 62 6c 79 20 61 76 6f 69 64 69 6e 67 20  ssibly avoiding 
2f940 74 68 65 20 6e 65 65 64 20 74 6f 0a 2a 2a 20 73  the need to.** s
2f950 65 65 6b 20 61 6e 64 20 72 65 61 64 20 63 75 72  eek and read cur
2f960 73 6f 72 20 50 33 2e 0a 2a 2f 0a 2f 2a 20 4f 70  sor P3..*/./* Op
2f970 63 6f 64 65 3a 20 49 64 78 52 6f 77 69 64 20 50  code: IdxRowid P
2f980 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79  1 P2 * * *.** Sy
2f990 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 72 6f  nopsis: r[P2]=ro
2f9a0 77 69 64 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20  wid.**.** Write 
2f9b0 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 32  into register P2
2f9c0 20 61 6e 20 69 6e 74 65 67 65 72 20 77 68 69 63   an integer whic
2f9d0 68 20 69 73 20 74 68 65 20 6c 61 73 74 20 65 6e  h is the last en
2f9e0 74 72 79 20 69 6e 20 74 68 65 20 72 65 63 6f 72  try in the recor
2f9f0 64 20 61 74 0a 2a 2a 20 74 68 65 20 65 6e 64 20  d at.** the end 
2fa00 6f 66 20 74 68 65 20 69 6e 64 65 78 20 6b 65 79  of the index key
2fa10 20 70 6f 69 6e 74 65 64 20 74 6f 20 62 79 20 63   pointed to by c
2fa20 75 72 73 6f 72 20 50 31 2e 20 20 54 68 69 73 20  ursor P1.  This 
2fa30 69 6e 74 65 67 65 72 20 73 68 6f 75 6c 64 20 62  integer should b
2fa40 65 0a 2a 2a 20 74 68 65 20 72 6f 77 69 64 20 6f  e.** the rowid o
2fa50 66 20 74 68 65 20 74 61 62 6c 65 20 65 6e 74 72  f the table entr
2fa60 79 20 74 6f 20 77 68 69 63 68 20 74 68 69 73 20  y to which this 
2fa70 69 6e 64 65 78 20 65 6e 74 72 79 20 70 6f 69 6e  index entry poin
2fa80 74 73 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c  ts..**.** See al
2fa90 73 6f 3a 20 52 6f 77 69 64 2c 20 4d 61 6b 65 52  so: Rowid, MakeR
2faa0 65 63 6f 72 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f  ecord..*/.case O
2fab0 50 5f 44 65 66 65 72 72 65 64 53 65 65 6b 3a 0a  P_DeferredSeek:.
2fac0 63 61 73 65 20 4f 50 5f 49 64 78 52 6f 77 69 64  case OP_IdxRowid
2fad0 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  : {           /*
2fae0 20 6f 75 74 32 20 2a 2f 0a 20 20 56 64 62 65 43   out2 */.  VdbeC
2faf0 75 72 73 6f 72 20 2a 70 43 3b 20 20 20 20 20 20  ursor *pC;      
2fb00 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 50 31         /* The P1
2fb10 20 69 6e 64 65 78 20 63 75 72 73 6f 72 20 2a 2f   index cursor */
2fb20 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70  .  VdbeCursor *p
2fb30 54 61 62 43 75 72 3b 20 20 20 20 20 20 20 20 2f  TabCur;        /
2fb40 2a 20 54 68 65 20 50 32 20 74 61 62 6c 65 20 63  * The P2 table c
2fb50 75 72 73 6f 72 20 28 4f 50 5f 44 65 66 65 72 72  ursor (OP_Deferr
2fb60 65 64 53 65 65 6b 20 6f 6e 6c 79 29 20 2a 2f 0a  edSeek only) */.
2fb70 20 20 69 36 34 20 72 6f 77 69 64 3b 20 20 20 20    i64 rowid;    
2fb80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
2fb90 20 52 6f 77 69 64 20 74 68 61 74 20 50 31 20 63   Rowid that P1 c
2fba0 75 72 72 65 6e 74 20 70 6f 69 6e 74 73 20 74 6f  urrent points to
2fbb0 20 2a 2f 0a 0a 20 20 61 73 73 65 72 74 28 20 70   */..  assert( p
2fbc0 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70  Op->p1>=0 && pOp
2fbd0 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20  ->p1<p->nCursor 
2fbe0 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43  );.  pC = p->apC
2fbf0 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  sr[pOp->p1];.  a
2fc00 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a  ssert( pC!=0 );.
2fc10 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 65 43    assert( pC->eC
2fc20 75 72 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f  urType==CURTYPE_
2fc30 42 54 52 45 45 20 29 3b 0a 20 20 61 73 73 65 72  BTREE );.  asser
2fc40 74 28 20 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f  t( pC->uc.pCurso
2fc50 72 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  r!=0 );.  assert
2fc60 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 3d 3d 30  ( pC->isTable==0
2fc70 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43   );.  assert( pC
2fc80 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f  ->deferredMoveto
2fc90 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  ==0 );.  assert(
2fca0 20 21 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 7c 7c   !pC->nullRow ||
2fcb0 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50   pOp->opcode==OP
2fcc0 5f 49 64 78 52 6f 77 69 64 20 29 3b 0a 0a 20 20  _IdxRowid );..  
2fcd0 2f 2a 20 54 68 65 20 49 64 78 52 6f 77 69 64 20  /* The IdxRowid 
2fce0 61 6e 64 20 53 65 65 6b 20 6f 70 63 6f 64 65 73  and Seek opcodes
2fcf0 20 61 72 65 20 63 6f 6d 62 69 6e 65 64 20 62 65   are combined be
2fd00 63 61 75 73 65 20 6f 66 20 74 68 65 20 63 6f 6d  cause of the com
2fd10 6d 6f 6e 61 6c 69 74 79 0a 20 20 2a 2a 20 6f 66  monality.  ** of
2fd20 20 73 71 6c 69 74 65 33 56 64 62 65 43 75 72 73   sqlite3VdbeCurs
2fd30 6f 72 52 65 73 74 6f 72 65 28 29 20 61 6e 64 20  orRestore() and 
2fd40 73 71 6c 69 74 65 33 56 64 62 65 49 64 78 52 6f  sqlite3VdbeIdxRo
2fd50 77 69 64 28 29 2e 20 2a 2f 0a 20 20 72 63 20 3d  wid(). */.  rc =
2fd60 20 73 71 6c 69 74 65 33 56 64 62 65 43 75 72 73   sqlite3VdbeCurs
2fd70 6f 72 52 65 73 74 6f 72 65 28 70 43 29 3b 0a 0a  orRestore(pC);..
2fd80 20 20 2f 2a 20 73 71 6c 69 74 65 33 56 62 65 43    /* sqlite3VbeC
2fd90 75 72 73 6f 72 52 65 73 74 6f 72 65 28 29 20 63  ursorRestore() c
2fda0 61 6e 20 6f 6e 6c 79 20 66 61 69 6c 20 69 66 20  an only fail if 
2fdb0 74 68 65 20 72 65 63 6f 72 64 20 68 61 73 20 62  the record has b
2fdc0 65 65 6e 20 64 65 6c 65 74 65 64 0a 20 20 2a 2a  een deleted.  **
2fdd0 20 6f 75 74 20 66 72 6f 6d 20 75 6e 64 65 72 20   out from under 
2fde0 74 68 65 20 63 75 72 73 6f 72 2e 20 20 54 68 61  the cursor.  Tha
2fdf0 74 20 77 69 6c 6c 20 6e 65 76 65 72 20 68 61 70  t will never hap
2fe00 70 65 6e 73 20 66 6f 72 20 61 6e 20 49 64 78 52  pens for an IdxR
2fe10 6f 77 69 64 0a 20 20 2a 2a 20 6f 72 20 53 65 65  owid.  ** or See
2fe20 6b 20 6f 70 63 6f 64 65 20 2a 2f 0a 20 20 69 66  k opcode */.  if
2fe30 28 20 4e 45 56 45 52 28 72 63 21 3d 53 51 4c 49  ( NEVER(rc!=SQLI
2fe40 54 45 5f 4f 4b 29 20 29 20 67 6f 74 6f 20 61 62  TE_OK) ) goto ab
2fe50 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
2fe60 3b 0a 0a 20 20 69 66 28 20 21 70 43 2d 3e 6e 75  ;..  if( !pC->nu
2fe70 6c 6c 52 6f 77 20 29 7b 0a 20 20 20 20 72 6f 77  llRow ){.    row
2fe80 69 64 20 3d 20 30 3b 20 20 2f 2a 20 4e 6f 74 20  id = 0;  /* Not 
2fe90 6e 65 65 64 65 64 2e 20 20 4f 6e 6c 79 20 75 73  needed.  Only us
2fea0 65 64 20 74 6f 20 73 69 6c 65 6e 63 65 20 61 20  ed to silence a 
2feb0 77 61 72 6e 69 6e 67 2e 20 2a 2f 0a 20 20 20 20  warning. */.    
2fec0 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  rc = sqlite3Vdbe
2fed0 49 64 78 52 6f 77 69 64 28 64 62 2c 20 70 43 2d  IdxRowid(db, pC-
2fee0 3e 75 63 2e 70 43 75 72 73 6f 72 2c 20 26 72 6f  >uc.pCursor, &ro
2fef0 77 69 64 29 3b 0a 20 20 20 20 69 66 28 20 72 63  wid);.    if( rc
2ff00 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20  !=SQLITE_OK ){. 
2ff10 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f       goto abort_
2ff20 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
2ff30 20 20 7d 0a 20 20 20 20 69 66 28 20 70 4f 70 2d    }.    if( pOp-
2ff40 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 44 65 66 65  >opcode==OP_Defe
2ff50 72 72 65 64 53 65 65 6b 20 29 7b 0a 20 20 20 20  rredSeek ){.    
2ff60 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
2ff70 33 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 33 3c  3>=0 && pOp->p3<
2ff80 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20  p->nCursor );.  
2ff90 20 20 20 20 70 54 61 62 43 75 72 20 3d 20 70 2d      pTabCur = p-
2ffa0 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 33 5d 3b  >apCsr[pOp->p3];
2ffb0 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70  .      assert( p
2ffc0 54 61 62 43 75 72 21 3d 30 20 29 3b 0a 20 20 20  TabCur!=0 );.   
2ffd0 20 20 20 61 73 73 65 72 74 28 20 70 54 61 62 43     assert( pTabC
2ffe0 75 72 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43 55  ur->eCurType==CU
2fff0 52 54 59 50 45 5f 42 54 52 45 45 20 29 3b 0a 20  RTYPE_BTREE );. 
30000 20 20 20 20 20 61 73 73 65 72 74 28 20 70 54 61       assert( pTa
30010 62 43 75 72 2d 3e 75 63 2e 70 43 75 72 73 6f 72  bCur->uc.pCursor
30020 21 3d 30 20 29 3b 0a 20 20 20 20 20 20 61 73 73  !=0 );.      ass
30030 65 72 74 28 20 70 54 61 62 43 75 72 2d 3e 69 73  ert( pTabCur->is
30040 54 61 62 6c 65 20 29 3b 0a 20 20 20 20 20 20 70  Table );.      p
30050 54 61 62 43 75 72 2d 3e 6e 75 6c 6c 52 6f 77 20  TabCur->nullRow 
30060 3d 20 30 3b 0a 20 20 20 20 20 20 70 54 61 62 43  = 0;.      pTabC
30070 75 72 2d 3e 6d 6f 76 65 74 6f 54 61 72 67 65 74  ur->movetoTarget
30080 20 3d 20 72 6f 77 69 64 3b 0a 20 20 20 20 20 20   = rowid;.      
30090 70 54 61 62 43 75 72 2d 3e 64 65 66 65 72 72 65  pTabCur->deferre
300a0 64 4d 6f 76 65 74 6f 20 3d 20 31 3b 0a 20 20 20  dMoveto = 1;.   
300b0 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e     assert( pOp->
300c0 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54 41 52  p4type==P4_INTAR
300d0 52 41 59 20 7c 7c 20 70 4f 70 2d 3e 70 34 2e 61  RAY || pOp->p4.a
300e0 69 3d 3d 30 20 29 3b 0a 20 20 20 20 20 20 70 54  i==0 );.      pT
300f0 61 62 43 75 72 2d 3e 61 41 6c 74 4d 61 70 20 3d  abCur->aAltMap =
30100 20 70 4f 70 2d 3e 70 34 2e 61 69 3b 0a 20 20 20   pOp->p4.ai;.   
30110 20 20 20 70 54 61 62 43 75 72 2d 3e 70 41 6c 74     pTabCur->pAlt
30120 43 75 72 73 6f 72 20 3d 20 70 43 3b 0a 20 20 20  Cursor = pC;.   
30130 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 70 4f   }else{.      pO
30140 75 74 20 3d 20 6f 75 74 32 50 72 65 72 65 6c 65  ut = out2Prerele
30150 61 73 65 28 70 2c 20 70 4f 70 29 3b 0a 20 20 20  ase(p, pOp);.   
30160 20 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 72     pOut->u.i = r
30170 6f 77 69 64 3b 0a 20 20 20 20 7d 0a 20 20 7d 65  owid;.    }.  }e
30180 6c 73 65 7b 0a 20 20 20 20 61 73 73 65 72 74 28  lse{.    assert(
30190 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50   pOp->opcode==OP
301a0 5f 49 64 78 52 6f 77 69 64 20 29 3b 0a 20 20 20  _IdxRowid );.   
301b0 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53   sqlite3VdbeMemS
301c0 65 74 4e 75 6c 6c 28 26 61 4d 65 6d 5b 70 4f 70  etNull(&aMem[pOp
301d0 2d 3e 70 32 5d 29 3b 0a 20 20 7d 0a 20 20 62 72  ->p2]);.  }.  br
301e0 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
301f0 65 3a 20 49 64 78 47 45 20 50 31 20 50 32 20 50  e: IdxGE P1 P2 P
30200 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70  3 P4 P5.** Synop
30210 73 69 73 3a 20 6b 65 79 3d 72 5b 50 33 40 50 34  sis: key=r[P3@P4
30220 5d 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 34 20 72  ].**.** The P4 r
30230 65 67 69 73 74 65 72 20 76 61 6c 75 65 73 20 62  egister values b
30240 65 67 69 6e 6e 69 6e 67 20 77 69 74 68 20 50 33  eginning with P3
30250 20 66 6f 72 6d 20 61 6e 20 75 6e 70 61 63 6b 65   form an unpacke
30260 64 20 69 6e 64 65 78 20 0a 2a 2a 20 6b 65 79 20  d index .** key 
30270 74 68 61 74 20 6f 6d 69 74 73 20 74 68 65 20 50  that omits the P
30280 52 49 4d 41 52 59 20 4b 45 59 2e 20 20 43 6f 6d  RIMARY KEY.  Com
30290 70 61 72 65 20 74 68 69 73 20 6b 65 79 20 76 61  pare this key va
302a0 6c 75 65 20 61 67 61 69 6e 73 74 20 74 68 65 20  lue against the 
302b0 69 6e 64 65 78 20 0a 2a 2a 20 74 68 61 74 20 50  index .** that P
302c0 31 20 69 73 20 63 75 72 72 65 6e 74 6c 79 20 70  1 is currently p
302d0 6f 69 6e 74 69 6e 67 20 74 6f 2c 20 69 67 6e 6f  ointing to, igno
302e0 72 69 6e 67 20 74 68 65 20 50 52 49 4d 41 52 59  ring the PRIMARY
302f0 20 4b 45 59 20 6f 72 20 52 4f 57 49 44 20 0a 2a   KEY or ROWID .*
30300 2a 20 66 69 65 6c 64 73 20 61 74 20 74 68 65 20  * fields at the 
30310 65 6e 64 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68  end..**.** If th
30320 65 20 50 31 20 69 6e 64 65 78 20 65 6e 74 72 79  e P1 index entry
30330 20 69 73 20 67 72 65 61 74 65 72 20 74 68 61 6e   is greater than
30340 20 6f 72 20 65 71 75 61 6c 20 74 6f 20 74 68 65   or equal to the
30350 20 6b 65 79 20 76 61 6c 75 65 0a 2a 2a 20 74 68   key value.** th
30360 65 6e 20 6a 75 6d 70 20 74 6f 20 50 32 2e 20 20  en jump to P2.  
30370 4f 74 68 65 72 77 69 73 65 20 66 61 6c 6c 20 74  Otherwise fall t
30380 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6e 65  hrough to the ne
30390 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a  xt instruction..
303a0 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 64  */./* Opcode: Id
303b0 78 47 54 20 50 31 20 50 32 20 50 33 20 50 34 20  xGT P1 P2 P3 P4 
303c0 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20  P5.** Synopsis: 
303d0 6b 65 79 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a  key=r[P3@P4].**.
303e0 2a 2a 20 54 68 65 20 50 34 20 72 65 67 69 73 74  ** The P4 regist
303f0 65 72 20 76 61 6c 75 65 73 20 62 65 67 69 6e 6e  er values beginn
30400 69 6e 67 20 77 69 74 68 20 50 33 20 66 6f 72 6d  ing with P3 form
30410 20 61 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e 64   an unpacked ind
30420 65 78 20 0a 2a 2a 20 6b 65 79 20 74 68 61 74 20  ex .** key that 
30430 6f 6d 69 74 73 20 74 68 65 20 50 52 49 4d 41 52  omits the PRIMAR
30440 59 20 4b 45 59 2e 20 20 43 6f 6d 70 61 72 65 20  Y KEY.  Compare 
30450 74 68 69 73 20 6b 65 79 20 76 61 6c 75 65 20 61  this key value a
30460 67 61 69 6e 73 74 20 74 68 65 20 69 6e 64 65 78  gainst the index
30470 20 0a 2a 2a 20 74 68 61 74 20 50 31 20 69 73 20   .** that P1 is 
30480 63 75 72 72 65 6e 74 6c 79 20 70 6f 69 6e 74 69  currently pointi
30490 6e 67 20 74 6f 2c 20 69 67 6e 6f 72 69 6e 67 20  ng to, ignoring 
304a0 74 68 65 20 50 52 49 4d 41 52 59 20 4b 45 59 20  the PRIMARY KEY 
304b0 6f 72 20 52 4f 57 49 44 20 0a 2a 2a 20 66 69 65  or ROWID .** fie
304c0 6c 64 73 20 61 74 20 74 68 65 20 65 6e 64 2e 0a  lds at the end..
304d0 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 50 31 20  **.** If the P1 
304e0 69 6e 64 65 78 20 65 6e 74 72 79 20 69 73 20 67  index entry is g
304f0 72 65 61 74 65 72 20 74 68 61 6e 20 74 68 65 20  reater than the 
30500 6b 65 79 20 76 61 6c 75 65 0a 2a 2a 20 74 68 65  key value.** the
30510 6e 20 6a 75 6d 70 20 74 6f 20 50 32 2e 20 20 4f  n jump to P2.  O
30520 74 68 65 72 77 69 73 65 20 66 61 6c 6c 20 74 68  therwise fall th
30530 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6e 65 78  rough to the nex
30540 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a  t instruction..*
30550 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 64 78  /./* Opcode: Idx
30560 4c 54 20 50 31 20 50 32 20 50 33 20 50 34 20 50  LT P1 P2 P3 P4 P
30570 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b  5.** Synopsis: k
30580 65 79 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a  ey=r[P3@P4].**.*
30590 2a 20 54 68 65 20 50 34 20 72 65 67 69 73 74 65  * The P4 registe
305a0 72 20 76 61 6c 75 65 73 20 62 65 67 69 6e 6e 69  r values beginni
305b0 6e 67 20 77 69 74 68 20 50 33 20 66 6f 72 6d 20  ng with P3 form 
305c0 61 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e 64 65  an unpacked inde
305d0 78 20 0a 2a 2a 20 6b 65 79 20 74 68 61 74 20 6f  x .** key that o
305e0 6d 69 74 73 20 74 68 65 20 50 52 49 4d 41 52 59  mits the PRIMARY
305f0 20 4b 45 59 20 6f 72 20 52 4f 57 49 44 2e 20 20   KEY or ROWID.  
30600 43 6f 6d 70 61 72 65 20 74 68 69 73 20 6b 65 79  Compare this key
30610 20 76 61 6c 75 65 20 61 67 61 69 6e 73 74 0a 2a   value against.*
30620 2a 20 74 68 65 20 69 6e 64 65 78 20 74 68 61 74  * the index that
30630 20 50 31 20 69 73 20 63 75 72 72 65 6e 74 6c 79   P1 is currently
30640 20 70 6f 69 6e 74 69 6e 67 20 74 6f 2c 20 69 67   pointing to, ig
30650 6e 6f 72 69 6e 67 20 74 68 65 20 50 52 49 4d 41  noring the PRIMA
30660 52 59 20 4b 45 59 20 6f 72 0a 2a 2a 20 52 4f 57  RY KEY or.** ROW
30670 49 44 20 6f 6e 20 74 68 65 20 50 31 20 69 6e 64  ID on the P1 ind
30680 65 78 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65  ex..**.** If the
30690 20 50 31 20 69 6e 64 65 78 20 65 6e 74 72 79 20   P1 index entry 
306a0 69 73 20 6c 65 73 73 20 74 68 61 6e 20 74 68 65  is less than the
306b0 20 6b 65 79 20 76 61 6c 75 65 20 74 68 65 6e 20   key value then 
306c0 6a 75 6d 70 20 74 6f 20 50 32 2e 0a 2a 2a 20 4f  jump to P2..** O
306d0 74 68 65 72 77 69 73 65 20 66 61 6c 6c 20 74 68  therwise fall th
306e0 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6e 65 78  rough to the nex
306f0 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a  t instruction..*
30700 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 64 78  /./* Opcode: Idx
30710 4c 45 20 50 31 20 50 32 20 50 33 20 50 34 20 50  LE P1 P2 P3 P4 P
30720 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b  5.** Synopsis: k
30730 65 79 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a  ey=r[P3@P4].**.*
30740 2a 20 54 68 65 20 50 34 20 72 65 67 69 73 74 65  * The P4 registe
30750 72 20 76 61 6c 75 65 73 20 62 65 67 69 6e 6e 69  r values beginni
30760 6e 67 20 77 69 74 68 20 50 33 20 66 6f 72 6d 20  ng with P3 form 
30770 61 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e 64 65  an unpacked inde
30780 78 20 0a 2a 2a 20 6b 65 79 20 74 68 61 74 20 6f  x .** key that o
30790 6d 69 74 73 20 74 68 65 20 50 52 49 4d 41 52 59  mits the PRIMARY
307a0 20 4b 45 59 20 6f 72 20 52 4f 57 49 44 2e 20 20   KEY or ROWID.  
307b0 43 6f 6d 70 61 72 65 20 74 68 69 73 20 6b 65 79  Compare this key
307c0 20 76 61 6c 75 65 20 61 67 61 69 6e 73 74 0a 2a   value against.*
307d0 2a 20 74 68 65 20 69 6e 64 65 78 20 74 68 61 74  * the index that
307e0 20 50 31 20 69 73 20 63 75 72 72 65 6e 74 6c 79   P1 is currently
307f0 20 70 6f 69 6e 74 69 6e 67 20 74 6f 2c 20 69 67   pointing to, ig
30800 6e 6f 72 69 6e 67 20 74 68 65 20 50 52 49 4d 41  noring the PRIMA
30810 52 59 20 4b 45 59 20 6f 72 0a 2a 2a 20 52 4f 57  RY KEY or.** ROW
30820 49 44 20 6f 6e 20 74 68 65 20 50 31 20 69 6e 64  ID on the P1 ind
30830 65 78 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65  ex..**.** If the
30840 20 50 31 20 69 6e 64 65 78 20 65 6e 74 72 79 20   P1 index entry 
30850 69 73 20 6c 65 73 73 20 74 68 61 6e 20 6f 72 20  is less than or 
30860 65 71 75 61 6c 20 74 6f 20 74 68 65 20 6b 65 79  equal to the key
30870 20 76 61 6c 75 65 20 74 68 65 6e 20 6a 75 6d 70   value then jump
30880 0a 2a 2a 20 74 6f 20 50 32 2e 20 4f 74 68 65 72  .** to P2. Other
30890 77 69 73 65 20 66 61 6c 6c 20 74 68 72 6f 75 67  wise fall throug
308a0 68 20 74 6f 20 74 68 65 20 6e 65 78 74 20 69 6e  h to the next in
308b0 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61  struction..*/.ca
308c0 73 65 20 4f 50 5f 49 64 78 4c 45 3a 20 20 20 20  se OP_IdxLE:    
308d0 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f        /* jump */
308e0 0a 63 61 73 65 20 4f 50 5f 49 64 78 47 54 3a 20  .case OP_IdxGT: 
308f0 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70           /* jump
30900 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 64 78 4c   */.case OP_IdxL
30910 54 3a 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a  T:          /* j
30920 75 6d 70 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 49  ump */.case OP_I
30930 64 78 47 45 3a 20 20 7b 20 20 20 20 20 20 20 2f  dxGE:  {       /
30940 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 56 64 62 65  * jump */.  Vdbe
30950 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 69 6e  Cursor *pC;.  in
30960 74 20 72 65 73 3b 0a 20 20 55 6e 70 61 63 6b 65  t res;.  Unpacke
30970 64 52 65 63 6f 72 64 20 72 3b 0a 0a 20 20 61 73  dRecord r;..  as
30980 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30  sert( pOp->p1>=0
30990 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e   && pOp->p1<p->n
309a0 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d  Cursor );.  pC =
309b0 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70   p->apCsr[pOp->p
309c0 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43  1];.  assert( pC
309d0 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  !=0 );.  assert(
309e0 20 70 43 2d 3e 69 73 4f 72 64 65 72 65 64 20 29   pC->isOrdered )
309f0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  ;.  assert( pC->
30a00 65 43 75 72 54 79 70 65 3d 3d 43 55 52 54 59 50  eCurType==CURTYP
30a10 45 5f 42 54 52 45 45 20 29 3b 0a 20 20 61 73 73  E_BTREE );.  ass
30a20 65 72 74 28 20 70 43 2d 3e 75 63 2e 70 43 75 72  ert( pC->uc.pCur
30a30 73 6f 72 21 3d 30 29 3b 0a 20 20 61 73 73 65 72  sor!=0);.  asser
30a40 74 28 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d  t( pC->deferredM
30a50 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a 20 20 61 73  oveto==0 );.  as
30a60 73 65 72 74 28 20 70 4f 70 2d 3e 70 35 3d 3d 30  sert( pOp->p5==0
30a70 20 7c 7c 20 70 4f 70 2d 3e 70 35 3d 3d 31 20 29   || pOp->p5==1 )
30a80 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
30a90 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54 33  >p4type==P4_INT3
30aa0 32 20 29 3b 0a 20 20 72 2e 70 4b 65 79 49 6e 66  2 );.  r.pKeyInf
30ab0 6f 20 3d 20 70 43 2d 3e 70 4b 65 79 49 6e 66 6f  o = pC->pKeyInfo
30ac0 3b 0a 20 20 72 2e 6e 46 69 65 6c 64 20 3d 20 28  ;.  r.nField = (
30ad0 75 31 36 29 70 4f 70 2d 3e 70 34 2e 69 3b 0a 20  u16)pOp->p4.i;. 
30ae0 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65   if( pOp->opcode
30af0 3c 4f 50 5f 49 64 78 4c 54 20 29 7b 0a 20 20 20  <OP_IdxLT ){.   
30b00 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70   assert( pOp->op
30b10 63 6f 64 65 3d 3d 4f 50 5f 49 64 78 4c 45 20 7c  code==OP_IdxLE |
30b20 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f  | pOp->opcode==O
30b30 50 5f 49 64 78 47 54 20 29 3b 0a 20 20 20 20 72  P_IdxGT );.    r
30b40 2e 64 65 66 61 75 6c 74 5f 72 63 20 3d 20 2d 31  .default_rc = -1
30b50 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61  ;.  }else{.    a
30b60 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f  ssert( pOp->opco
30b70 64 65 3d 3d 4f 50 5f 49 64 78 47 45 20 7c 7c 20  de==OP_IdxGE || 
30b80 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  pOp->opcode==OP_
30b90 49 64 78 4c 54 20 29 3b 0a 20 20 20 20 72 2e 64  IdxLT );.    r.d
30ba0 65 66 61 75 6c 74 5f 72 63 20 3d 20 30 3b 0a 20  efault_rc = 0;. 
30bb0 20 7d 0a 20 20 72 2e 61 4d 65 6d 20 3d 20 26 61   }.  r.aMem = &a
30bc0 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 23 69  Mem[pOp->p3];.#i
30bd0 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55  fdef SQLITE_DEBU
30be0 47 0a 20 20 7b 0a 20 20 20 20 69 6e 74 20 69 3b  G.  {.    int i;
30bf0 0a 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c  .    for(i=0; i<
30c00 72 2e 6e 46 69 65 6c 64 3b 20 69 2b 2b 29 7b 0a  r.nField; i++){.
30c10 20 20 20 20 20 20 61 73 73 65 72 74 28 20 6d 65        assert( me
30c20 6d 49 73 56 61 6c 69 64 28 26 72 2e 61 4d 65 6d  mIsValid(&r.aMem
30c30 5b 69 5d 29 20 29 3b 0a 20 20 20 20 20 20 52 45  [i]) );.      RE
30c40 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70  GISTER_TRACE(pOp
30c50 2d 3e 70 33 2b 69 2c 20 26 61 4d 65 6d 5b 70 4f  ->p3+i, &aMem[pO
30c60 70 2d 3e 70 33 2b 69 5d 29 3b 0a 20 20 20 20 7d  p->p3+i]);.    }
30c70 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20 72 65  .  }.#endif.  re
30c80 73 20 3d 20 30 3b 20 20 2f 2a 20 4e 6f 74 20 6e  s = 0;  /* Not n
30c90 65 65 64 65 64 2e 20 20 4f 6e 6c 79 20 75 73 65  eeded.  Only use
30ca0 64 20 74 6f 20 73 69 6c 65 6e 63 65 20 61 20 77  d to silence a w
30cb0 61 72 6e 69 6e 67 2e 20 2a 2f 0a 20 20 72 63 20  arning. */.  rc 
30cc0 3d 20 73 71 6c 69 74 65 33 56 64 62 65 49 64 78  = sqlite3VdbeIdx
30cd0 4b 65 79 43 6f 6d 70 61 72 65 28 64 62 2c 20 70  KeyCompare(db, p
30ce0 43 2c 20 26 72 2c 20 26 72 65 73 29 3b 0a 20 20  C, &r, &res);.  
30cf0 61 73 73 65 72 74 28 20 28 4f 50 5f 49 64 78 4c  assert( (OP_IdxL
30d00 45 26 31 29 3d 3d 28 4f 50 5f 49 64 78 4c 54 26  E&1)==(OP_IdxLT&
30d10 31 29 20 26 26 20 28 4f 50 5f 49 64 78 47 45 26  1) && (OP_IdxGE&
30d20 31 29 3d 3d 28 4f 50 5f 49 64 78 47 54 26 31 29  1)==(OP_IdxGT&1)
30d30 20 29 3b 0a 20 20 69 66 28 20 28 70 4f 70 2d 3e   );.  if( (pOp->
30d40 6f 70 63 6f 64 65 26 31 29 3d 3d 28 4f 50 5f 49  opcode&1)==(OP_I
30d50 64 78 4c 54 26 31 29 20 29 7b 0a 20 20 20 20 61  dxLT&1) ){.    a
30d60 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f  ssert( pOp->opco
30d70 64 65 3d 3d 4f 50 5f 49 64 78 4c 45 20 7c 7c 20  de==OP_IdxLE || 
30d80 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  pOp->opcode==OP_
30d90 49 64 78 4c 54 20 29 3b 0a 20 20 20 20 72 65 73  IdxLT );.    res
30da0 20 3d 20 2d 72 65 73 3b 0a 20 20 7d 65 6c 73 65   = -res;.  }else
30db0 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4f  {.    assert( pO
30dc0 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 64  p->opcode==OP_Id
30dd0 78 47 45 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f  xGE || pOp->opco
30de0 64 65 3d 3d 4f 50 5f 49 64 78 47 54 20 29 3b 0a  de==OP_IdxGT );.
30df0 20 20 20 20 72 65 73 2b 2b 3b 0a 20 20 7d 0a 20      res++;.  }. 
30e00 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e   VdbeBranchTaken
30e10 28 72 65 73 3e 30 2c 32 29 3b 0a 20 20 69 66 28  (res>0,2);.  if(
30e20 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74   rc ) goto abort
30e30 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20  _due_to_error;. 
30e40 20 69 66 28 20 72 65 73 3e 30 20 29 20 67 6f 74   if( res>0 ) got
30e50 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20  o jump_to_p2;.  
30e60 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
30e70 6f 64 65 3a 20 44 65 73 74 72 6f 79 20 50 31 20  ode: Destroy P1 
30e80 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20  P2 P3 * *.**.** 
30e90 44 65 6c 65 74 65 20 61 6e 20 65 6e 74 69 72 65  Delete an entire
30ea0 20 64 61 74 61 62 61 73 65 20 74 61 62 6c 65 20   database table 
30eb0 6f 72 20 69 6e 64 65 78 20 77 68 6f 73 65 20 72  or index whose r
30ec0 6f 6f 74 20 70 61 67 65 20 69 6e 20 74 68 65 20  oot page in the 
30ed0 64 61 74 61 62 61 73 65 0a 2a 2a 20 66 69 6c 65  database.** file
30ee0 20 69 73 20 67 69 76 65 6e 20 62 79 20 50 31 2e   is given by P1.
30ef0 0a 2a 2a 0a 2a 2a 20 54 68 65 20 74 61 62 6c 65  .**.** The table
30f00 20 62 65 69 6e 67 20 64 65 73 74 72 6f 79 65 64   being destroyed
30f10 20 69 73 20 69 6e 20 74 68 65 20 6d 61 69 6e 20   is in the main 
30f20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 69 66  database file if
30f30 20 50 33 3d 3d 30 2e 20 20 49 66 0a 2a 2a 20 50   P3==0.  If.** P
30f40 33 3d 3d 31 20 74 68 65 6e 20 74 68 65 20 74 61  3==1 then the ta
30f50 62 6c 65 20 74 6f 20 62 65 20 63 6c 65 61 72 20  ble to be clear 
30f60 69 73 20 69 6e 20 74 68 65 20 61 75 78 69 6c 69  is in the auxili
30f70 61 72 79 20 64 61 74 61 62 61 73 65 20 66 69 6c  ary database fil
30f80 65 0a 2a 2a 20 74 68 61 74 20 69 73 20 75 73 65  e.** that is use
30f90 64 20 74 6f 20 73 74 6f 72 65 20 74 61 62 6c 65  d to store table
30fa0 73 20 63 72 65 61 74 65 20 75 73 69 6e 67 20 43  s create using C
30fb0 52 45 41 54 45 20 54 45 4d 50 4f 52 41 52 59 20  REATE TEMPORARY 
30fc0 54 41 42 4c 45 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  TABLE..**.** If 
30fd0 41 55 54 4f 56 41 43 55 55 4d 20 69 73 20 65 6e  AUTOVACUUM is en
30fe0 61 62 6c 65 64 20 74 68 65 6e 20 69 74 20 69 73  abled then it is
30ff0 20 70 6f 73 73 69 62 6c 65 20 74 68 61 74 20 61   possible that a
31000 6e 6f 74 68 65 72 20 72 6f 6f 74 20 70 61 67 65  nother root page
31010 0a 2a 2a 20 6d 69 67 68 74 20 62 65 20 6d 6f 76  .** might be mov
31020 65 64 20 69 6e 74 6f 20 74 68 65 20 6e 65 77 6c  ed into the newl
31030 79 20 64 65 6c 65 74 65 64 20 72 6f 6f 74 20 70  y deleted root p
31040 61 67 65 20 69 6e 20 6f 72 64 65 72 20 74 6f 20  age in order to 
31050 6b 65 65 70 20 61 6c 6c 0a 2a 2a 20 72 6f 6f 74  keep all.** root
31060 20 70 61 67 65 73 20 63 6f 6e 74 69 67 75 6f 75   pages contiguou
31070 73 20 61 74 20 74 68 65 20 62 65 67 69 6e 6e 69  s at the beginni
31080 6e 67 20 6f 66 20 74 68 65 20 64 61 74 61 62 61  ng of the databa
31090 73 65 2e 20 20 54 68 65 20 66 6f 72 6d 65 72 0a  se.  The former.
310a0 2a 2a 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20  ** value of the 
310b0 72 6f 6f 74 20 70 61 67 65 20 74 68 61 74 20 6d  root page that m
310c0 6f 76 65 64 20 2d 20 69 74 73 20 76 61 6c 75 65  oved - its value
310d0 20 62 65 66 6f 72 65 20 74 68 65 20 6d 6f 76 65   before the move
310e0 20 6f 63 63 75 72 72 65 64 20 2d 0a 2a 2a 20 69   occurred -.** i
310f0 73 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69  s stored in regi
31100 73 74 65 72 20 50 32 2e 20 49 66 20 6e 6f 20 70  ster P2. If no p
31110 61 67 65 20 6d 6f 76 65 6d 65 6e 74 20 77 61 73  age movement was
31120 20 72 65 71 75 69 72 65 64 20 28 62 65 63 61 75   required (becau
31130 73 65 20 74 68 65 0a 2a 2a 20 74 61 62 6c 65 20  se the.** table 
31140 62 65 69 6e 67 20 64 72 6f 70 70 65 64 20 77 61  being dropped wa
31150 73 20 61 6c 72 65 61 64 79 20 74 68 65 20 6c 61  s already the la
31160 73 74 20 6f 6e 65 20 69 6e 20 74 68 65 20 64 61  st one in the da
31170 74 61 62 61 73 65 29 20 74 68 65 6e 20 61 20 0a  tabase) then a .
31180 2a 2a 20 7a 65 72 6f 20 69 73 20 73 74 6f 72 65  ** zero is store
31190 64 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32  d in register P2
311a0 2e 20 20 49 66 20 41 55 54 4f 56 41 43 55 55 4d  .  If AUTOVACUUM
311b0 20 69 73 20 64 69 73 61 62 6c 65 64 20 74 68 65   is disabled the
311c0 6e 20 61 20 7a 65 72 6f 20 0a 2a 2a 20 69 73 20  n a zero .** is 
311d0 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74  stored in regist
311e0 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54 68 69  er P2..**.** Thi
311f0 73 20 6f 70 63 6f 64 65 20 74 68 72 6f 77 73 20  s opcode throws 
31200 61 6e 20 65 72 72 6f 72 20 69 66 20 74 68 65 72  an error if ther
31210 65 20 61 72 65 20 61 6e 79 20 61 63 74 69 76 65  e are any active
31220 20 72 65 61 64 65 72 20 56 4d 73 20 77 68 65 6e   reader VMs when
31230 0a 2a 2a 20 69 74 20 69 73 20 69 6e 76 6f 6b 65  .** it is invoke
31240 64 2e 20 54 68 69 73 20 69 73 20 64 6f 6e 65 20  d. This is done 
31250 74 6f 20 61 76 6f 69 64 20 74 68 65 20 64 69 66  to avoid the dif
31260 66 69 63 75 6c 74 79 20 61 73 73 6f 63 69 61 74  ficulty associat
31270 65 64 20 77 69 74 68 20 0a 2a 2a 20 75 70 64 61  ed with .** upda
31280 74 69 6e 67 20 65 78 69 73 74 69 6e 67 20 63 75  ting existing cu
31290 72 73 6f 72 73 20 77 68 65 6e 20 61 20 72 6f 6f  rsors when a roo
312a0 74 20 70 61 67 65 20 69 73 20 6d 6f 76 65 64 20  t page is moved 
312b0 69 6e 20 61 6e 20 41 55 54 4f 56 41 43 55 55 4d  in an AUTOVACUUM
312c0 20 0a 2a 2a 20 64 61 74 61 62 61 73 65 2e 20 54   .** database. T
312d0 68 69 73 20 65 72 72 6f 72 20 69 73 20 74 68 72  his error is thr
312e0 6f 77 6e 20 65 76 65 6e 20 69 66 20 74 68 65 20  own even if the 
312f0 64 61 74 61 62 61 73 65 20 69 73 20 6e 6f 74 20  database is not 
31300 61 6e 20 41 55 54 4f 56 41 43 55 55 4d 20 0a 2a  an AUTOVACUUM .*
31310 2a 20 64 62 20 69 6e 20 6f 72 64 65 72 20 74 6f  * db in order to
31320 20 61 76 6f 69 64 20 69 6e 74 72 6f 64 75 63 69   avoid introduci
31330 6e 67 20 61 6e 20 69 6e 63 6f 6d 70 61 74 69 62  ng an incompatib
31340 69 6c 69 74 79 20 62 65 74 77 65 65 6e 20 61 75  ility between au
31350 74 6f 76 61 63 75 75 6d 20 0a 2a 2a 20 61 6e 64  tovacuum .** and
31360 20 6e 6f 6e 2d 61 75 74 6f 76 61 63 75 75 6d 20   non-autovacuum 
31370 6d 6f 64 65 73 2e 0a 2a 2a 0a 2a 2a 20 53 65 65  modes..**.** See
31380 20 61 6c 73 6f 3a 20 43 6c 65 61 72 0a 2a 2f 0a   also: Clear.*/.
31390 63 61 73 65 20 4f 50 5f 44 65 73 74 72 6f 79 3a  case OP_Destroy:
313a0 20 7b 20 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a   {     /* out2 *
313b0 2f 0a 20 20 69 6e 74 20 69 4d 6f 76 65 64 3b 0a  /.  int iMoved;.
313c0 20 20 69 6e 74 20 69 44 62 3b 0a 0a 20 20 73 71    int iDb;..  sq
313d0 6c 69 74 65 33 56 64 62 65 49 6e 63 72 57 72 69  lite3VdbeIncrWri
313e0 74 65 43 6f 75 6e 74 65 72 28 70 2c 20 30 29 3b  teCounter(p, 0);
313f0 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 72 65  .  assert( p->re
31400 61 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 20 20 61  adOnly==0 );.  a
31410 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 31  ssert( pOp->p1>1
31420 20 29 3b 0a 20 20 70 4f 75 74 20 3d 20 6f 75 74   );.  pOut = out
31430 32 50 72 65 72 65 6c 65 61 73 65 28 70 2c 20 70  2Prerelease(p, p
31440 4f 70 29 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c 61  Op);.  pOut->fla
31450 67 73 20 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20  gs = MEM_Null;. 
31460 20 69 66 28 20 64 62 2d 3e 6e 56 64 62 65 52 65   if( db->nVdbeRe
31470 61 64 20 3e 20 64 62 2d 3e 6e 56 44 65 73 74 72  ad > db->nVDestr
31480 6f 79 2b 31 20 29 7b 0a 20 20 20 20 72 63 20 3d  oy+1 ){.    rc =
31490 20 53 51 4c 49 54 45 5f 4c 4f 43 4b 45 44 3b 0a   SQLITE_LOCKED;.
314a0 20 20 20 20 70 2d 3e 65 72 72 6f 72 41 63 74 69      p->errorActi
314b0 6f 6e 20 3d 20 4f 45 5f 41 62 6f 72 74 3b 0a 20  on = OE_Abort;. 
314c0 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75     goto abort_du
314d0 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 7d 65  e_to_error;.  }e
314e0 6c 73 65 7b 0a 20 20 20 20 69 44 62 20 3d 20 70  lse{.    iDb = p
314f0 4f 70 2d 3e 70 33 3b 0a 20 20 20 20 61 73 73 65  Op->p3;.    asse
31500 72 74 28 20 44 62 4d 61 73 6b 54 65 73 74 28 70  rt( DbMaskTest(p
31510 2d 3e 62 74 72 65 65 4d 61 73 6b 2c 20 69 44 62  ->btreeMask, iDb
31520 29 20 29 3b 0a 20 20 20 20 69 4d 6f 76 65 64 20  ) );.    iMoved 
31530 3d 20 30 3b 20 20 2f 2a 20 4e 6f 74 20 6e 65 65  = 0;  /* Not nee
31540 64 65 64 2e 20 20 4f 6e 6c 79 20 74 6f 20 73 69  ded.  Only to si
31550 6c 65 6e 63 65 20 61 20 77 61 72 6e 69 6e 67 2e  lence a warning.
31560 20 2a 2f 0a 20 20 20 20 72 63 20 3d 20 73 71 6c   */.    rc = sql
31570 69 74 65 33 42 74 72 65 65 44 72 6f 70 54 61 62  ite3BtreeDropTab
31580 6c 65 28 64 62 2d 3e 61 44 62 5b 69 44 62 5d 2e  le(db->aDb[iDb].
31590 70 42 74 2c 20 70 4f 70 2d 3e 70 31 2c 20 26 69  pBt, pOp->p1, &i
315a0 4d 6f 76 65 64 29 3b 0a 20 20 20 20 70 4f 75 74  Moved);.    pOut
315b0 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 49 6e  ->flags = MEM_In
315c0 74 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e 69  t;.    pOut->u.i
315d0 20 3d 20 69 4d 6f 76 65 64 3b 0a 20 20 20 20 69   = iMoved;.    i
315e0 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f  f( rc ) goto abo
315f0 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
31600 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
31610 4f 4d 49 54 5f 41 55 54 4f 56 41 43 55 55 4d 0a  OMIT_AUTOVACUUM.
31620 20 20 20 20 69 66 28 20 69 4d 6f 76 65 64 21 3d      if( iMoved!=
31630 30 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74  0 ){.      sqlit
31640 65 33 52 6f 6f 74 50 61 67 65 4d 6f 76 65 64 28  e3RootPageMoved(
31650 64 62 2c 20 69 44 62 2c 20 69 4d 6f 76 65 64 2c  db, iDb, iMoved,
31660 20 70 4f 70 2d 3e 70 31 29 3b 0a 20 20 20 20 20   pOp->p1);.     
31670 20 2f 2a 20 41 6c 6c 20 4f 50 5f 44 65 73 74 72   /* All OP_Destr
31680 6f 79 20 6f 70 65 72 61 74 69 6f 6e 73 20 6f 63  oy operations oc
31690 63 75 72 20 6f 6e 20 74 68 65 20 73 61 6d 65 20  cur on the same 
316a0 62 74 72 65 65 20 2a 2f 0a 20 20 20 20 20 20 61  btree */.      a
316b0 73 73 65 72 74 28 20 72 65 73 65 74 53 63 68 65  ssert( resetSche
316c0 6d 61 4f 6e 46 61 75 6c 74 3d 3d 30 20 7c 7c 20  maOnFault==0 || 
316d0 72 65 73 65 74 53 63 68 65 6d 61 4f 6e 46 61 75  resetSchemaOnFau
316e0 6c 74 3d 3d 69 44 62 2b 31 20 29 3b 0a 20 20 20  lt==iDb+1 );.   
316f0 20 20 20 72 65 73 65 74 53 63 68 65 6d 61 4f 6e     resetSchemaOn
31700 46 61 75 6c 74 20 3d 20 69 44 62 2b 31 3b 0a 20  Fault = iDb+1;. 
31710 20 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20 7d 0a     }.#endif.  }.
31720 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
31730 70 63 6f 64 65 3a 20 43 6c 65 61 72 20 50 31 20  pcode: Clear P1 
31740 50 32 20 50 33 0a 2a 2a 0a 2a 2a 20 44 65 6c 65  P2 P3.**.** Dele
31750 74 65 20 61 6c 6c 20 63 6f 6e 74 65 6e 74 73 20  te all contents 
31760 6f 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20  of the database 
31770 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 77  table or index w
31780 68 6f 73 65 20 72 6f 6f 74 20 70 61 67 65 0a 2a  hose root page.*
31790 2a 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73  * in the databas
317a0 65 20 66 69 6c 65 20 69 73 20 67 69 76 65 6e 20  e file is given 
317b0 62 79 20 50 31 2e 20 20 42 75 74 2c 20 75 6e 6c  by P1.  But, unl
317c0 69 6b 65 20 44 65 73 74 72 6f 79 2c 20 64 6f 20  ike Destroy, do 
317d0 6e 6f 74 0a 2a 2a 20 72 65 6d 6f 76 65 20 74 68  not.** remove th
317e0 65 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78  e table or index
317f0 20 66 72 6f 6d 20 74 68 65 20 64 61 74 61 62 61   from the databa
31800 73 65 20 66 69 6c 65 2e 0a 2a 2a 0a 2a 2a 20 54  se file..**.** T
31810 68 65 20 74 61 62 6c 65 20 62 65 69 6e 67 20 63  he table being c
31820 6c 65 61 72 20 69 73 20 69 6e 20 74 68 65 20 6d  lear is in the m
31830 61 69 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c  ain database fil
31840 65 20 69 66 20 50 32 3d 3d 30 2e 20 20 49 66 0a  e if P2==0.  If.
31850 2a 2a 20 50 32 3d 3d 31 20 74 68 65 6e 20 74 68  ** P2==1 then th
31860 65 20 74 61 62 6c 65 20 74 6f 20 62 65 20 63 6c  e table to be cl
31870 65 61 72 20 69 73 20 69 6e 20 74 68 65 20 61 75  ear is in the au
31880 78 69 6c 69 61 72 79 20 64 61 74 61 62 61 73 65  xiliary database
31890 20 66 69 6c 65 0a 2a 2a 20 74 68 61 74 20 69 73   file.** that is
318a0 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20 74   used to store t
318b0 61 62 6c 65 73 20 63 72 65 61 74 65 20 75 73 69  ables create usi
318c0 6e 67 20 43 52 45 41 54 45 20 54 45 4d 50 4f 52  ng CREATE TEMPOR
318d0 41 52 59 20 54 41 42 4c 45 2e 0a 2a 2a 0a 2a 2a  ARY TABLE..**.**
318e0 20 49 66 20 74 68 65 20 50 33 20 76 61 6c 75 65   If the P3 value
318f0 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68   is non-zero, th
31900 65 6e 20 74 68 65 20 74 61 62 6c 65 20 72 65 66  en the table ref
31910 65 72 72 65 64 20 74 6f 20 6d 75 73 74 20 62 65  erred to must be
31920 20 61 6e 0a 2a 2a 20 69 6e 74 6b 65 79 20 74 61   an.** intkey ta
31930 62 6c 65 20 28 61 6e 20 53 51 4c 20 74 61 62 6c  ble (an SQL tabl
31940 65 2c 20 6e 6f 74 20 61 6e 20 69 6e 64 65 78 29  e, not an index)
31950 2e 20 49 6e 20 74 68 69 73 20 63 61 73 65 20 74  . In this case t
31960 68 65 20 72 6f 77 20 63 68 61 6e 67 65 20 0a 2a  he row change .*
31970 2a 20 63 6f 75 6e 74 20 69 73 20 69 6e 63 72 65  * count is incre
31980 6d 65 6e 74 65 64 20 62 79 20 74 68 65 20 6e 75  mented by the nu
31990 6d 62 65 72 20 6f 66 20 72 6f 77 73 20 69 6e 20  mber of rows in 
319a0 74 68 65 20 74 61 62 6c 65 20 62 65 69 6e 67 20  the table being 
319b0 63 6c 65 61 72 65 64 2e 20 0a 2a 2a 20 49 66 20  cleared. .** If 
319c0 50 33 20 69 73 20 67 72 65 61 74 65 72 20 74 68  P3 is greater th
319d0 61 6e 20 7a 65 72 6f 2c 20 74 68 65 6e 20 74 68  an zero, then th
319e0 65 20 76 61 6c 75 65 20 73 74 6f 72 65 64 20 69  e value stored i
319f0 6e 20 72 65 67 69 73 74 65 72 20 50 33 20 69 73  n register P3 is
31a00 0a 2a 2a 20 61 6c 73 6f 20 69 6e 63 72 65 6d 65  .** also increme
31a10 6e 74 65 64 20 62 79 20 74 68 65 20 6e 75 6d 62  nted by the numb
31a20 65 72 20 6f 66 20 72 6f 77 73 20 69 6e 20 74 68  er of rows in th
31a30 65 20 74 61 62 6c 65 20 62 65 69 6e 67 20 63 6c  e table being cl
31a40 65 61 72 65 64 2e 0a 2a 2a 0a 2a 2a 20 53 65 65  eared..**.** See
31a50 20 61 6c 73 6f 3a 20 44 65 73 74 72 6f 79 0a 2a   also: Destroy.*
31a60 2f 0a 63 61 73 65 20 4f 50 5f 43 6c 65 61 72 3a  /.case OP_Clear:
31a70 20 7b 0a 20 20 69 6e 74 20 6e 43 68 61 6e 67 65   {.  int nChange
31a80 3b 0a 20 0a 20 20 73 71 6c 69 74 65 33 56 64 62  ;. .  sqlite3Vdb
31a90 65 49 6e 63 72 57 72 69 74 65 43 6f 75 6e 74 65  eIncrWriteCounte
31aa0 72 28 70 2c 20 30 29 3b 0a 20 20 6e 43 68 61 6e  r(p, 0);.  nChan
31ab0 67 65 20 3d 20 30 3b 0a 20 20 61 73 73 65 72 74  ge = 0;.  assert
31ac0 28 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30  ( p->readOnly==0
31ad0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 44 62   );.  assert( Db
31ae0 4d 61 73 6b 54 65 73 74 28 70 2d 3e 62 74 72 65  MaskTest(p->btre
31af0 65 4d 61 73 6b 2c 20 70 4f 70 2d 3e 70 32 29 20  eMask, pOp->p2) 
31b00 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65  );.  rc = sqlite
31b10 33 42 74 72 65 65 43 6c 65 61 72 54 61 62 6c 65  3BtreeClearTable
31b20 28 0a 20 20 20 20 20 20 64 62 2d 3e 61 44 62 5b  (.      db->aDb[
31b30 70 4f 70 2d 3e 70 32 5d 2e 70 42 74 2c 20 70 4f  pOp->p2].pBt, pO
31b40 70 2d 3e 70 31 2c 20 28 70 4f 70 2d 3e 70 33 20  p->p1, (pOp->p3 
31b50 3f 20 26 6e 43 68 61 6e 67 65 20 3a 20 30 29 0a  ? &nChange : 0).
31b60 20 20 29 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e    );.  if( pOp->
31b70 70 33 20 29 7b 0a 20 20 20 20 70 2d 3e 6e 43 68  p3 ){.    p->nCh
31b80 61 6e 67 65 20 2b 3d 20 6e 43 68 61 6e 67 65 3b  ange += nChange;
31b90 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 33  .    if( pOp->p3
31ba0 3e 30 20 29 7b 0a 20 20 20 20 20 20 61 73 73 65  >0 ){.      asse
31bb0 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 26  rt( memIsValid(&
31bc0 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 29 20 29  aMem[pOp->p3]) )
31bd0 3b 0a 20 20 20 20 20 20 6d 65 6d 41 62 6f 75 74  ;.      memAbout
31be0 54 6f 43 68 61 6e 67 65 28 70 2c 20 26 61 4d 65  ToChange(p, &aMe
31bf0 6d 5b 70 4f 70 2d 3e 70 33 5d 29 3b 0a 20 20 20  m[pOp->p3]);.   
31c00 20 20 20 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d     aMem[pOp->p3]
31c10 2e 75 2e 69 20 2b 3d 20 6e 43 68 61 6e 67 65 3b  .u.i += nChange;
31c20 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 69 66 28  .    }.  }.  if(
31c30 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74   rc ) goto abort
31c40 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20  _due_to_error;. 
31c50 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
31c60 63 6f 64 65 3a 20 52 65 73 65 74 53 6f 72 74 65  code: ResetSorte
31c70 72 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a  r P1 * * * *.**.
31c80 2a 2a 20 44 65 6c 65 74 65 20 61 6c 6c 20 63 6f  ** Delete all co
31c90 6e 74 65 6e 74 73 20 66 72 6f 6d 20 74 68 65 20  ntents from the 
31ca0 65 70 68 65 6d 65 72 61 6c 20 74 61 62 6c 65 20  ephemeral table 
31cb0 6f 72 20 73 6f 72 74 65 72 0a 2a 2a 20 74 68 61  or sorter.** tha
31cc0 74 20 69 73 20 6f 70 65 6e 20 6f 6e 20 63 75 72  t is open on cur
31cd0 73 6f 72 20 50 31 2e 0a 2a 2a 0a 2a 2a 20 54 68  sor P1..**.** Th
31ce0 69 73 20 6f 70 63 6f 64 65 20 6f 6e 6c 79 20 77  is opcode only w
31cf0 6f 72 6b 73 20 66 6f 72 20 63 75 72 73 6f 72 73  orks for cursors
31d00 20 75 73 65 64 20 66 6f 72 20 73 6f 72 74 69 6e   used for sortin
31d10 67 20 61 6e 64 0a 2a 2a 20 6f 70 65 6e 65 64 20  g and.** opened 
31d20 77 69 74 68 20 4f 50 5f 4f 70 65 6e 45 70 68 65  with OP_OpenEphe
31d30 6d 65 72 61 6c 20 6f 72 20 4f 50 5f 53 6f 72 74  meral or OP_Sort
31d40 65 72 4f 70 65 6e 2e 0a 2a 2f 0a 63 61 73 65 20  erOpen..*/.case 
31d50 4f 50 5f 52 65 73 65 74 53 6f 72 74 65 72 3a 20  OP_ResetSorter: 
31d60 7b 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a  {.  VdbeCursor *
31d70 70 43 3b 0a 20 0a 20 20 61 73 73 65 72 74 28 20  pC;. .  assert( 
31d80 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f  pOp->p1>=0 && pO
31d90 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72  p->p1<p->nCursor
31da0 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70   );.  pC = p->ap
31db0 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Csr[pOp->p1];.  
31dc0 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b  assert( pC!=0 );
31dd0 0a 20 20 69 66 28 20 69 73 53 6f 72 74 65 72 28  .  if( isSorter(
31de0 70 43 29 20 29 7b 0a 20 20 20 20 73 71 6c 69 74  pC) ){.    sqlit
31df0 65 33 56 64 62 65 53 6f 72 74 65 72 52 65 73 65  e3VdbeSorterRese
31e00 74 28 64 62 2c 20 70 43 2d 3e 75 63 2e 70 53 6f  t(db, pC->uc.pSo
31e10 72 74 65 72 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a  rter);.  }else{.
31e20 20 20 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e      assert( pC->
31e30 65 43 75 72 54 79 70 65 3d 3d 43 55 52 54 59 50  eCurType==CURTYP
31e40 45 5f 42 54 52 45 45 20 29 3b 0a 20 20 20 20 61  E_BTREE );.    a
31e50 73 73 65 72 74 28 20 70 43 2d 3e 69 73 45 70 68  ssert( pC->isEph
31e60 65 6d 65 72 61 6c 20 29 3b 0a 20 20 20 20 72 63  emeral );.    rc
31e70 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 43   = sqlite3BtreeC
31e80 6c 65 61 72 54 61 62 6c 65 4f 66 43 75 72 73 6f  learTableOfCurso
31e90 72 28 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72  r(pC->uc.pCursor
31ea0 29 3b 0a 20 20 20 20 69 66 28 20 72 63 20 29 20  );.    if( rc ) 
31eb0 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
31ec0 6f 5f 65 72 72 6f 72 3b 0a 20 20 7d 0a 20 20 62  o_error;.  }.  b
31ed0 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
31ee0 64 65 3a 20 43 72 65 61 74 65 42 74 72 65 65 20  de: CreateBtree 
31ef0 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20  P1 P2 P3 * *.** 
31f00 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d  Synopsis: r[P2]=
31f10 72 6f 6f 74 20 69 44 62 3d 50 31 20 66 6c 61 67  root iDb=P1 flag
31f20 73 3d 50 33 0a 2a 2a 0a 2a 2a 20 41 6c 6c 6f 63  s=P3.**.** Alloc
31f30 61 74 65 20 61 20 6e 65 77 20 62 2d 74 72 65 65  ate a new b-tree
31f40 20 69 6e 20 74 68 65 20 6d 61 69 6e 20 64 61 74   in the main dat
31f50 61 62 61 73 65 20 66 69 6c 65 20 69 66 20 50 31  abase file if P1
31f60 3d 3d 30 20 6f 72 20 69 6e 20 74 68 65 0a 2a 2a  ==0 or in the.**
31f70 20 54 45 4d 50 20 64 61 74 61 62 61 73 65 20 66   TEMP database f
31f80 69 6c 65 20 69 66 20 50 31 3d 3d 31 20 6f 72 20  ile if P1==1 or 
31f90 69 6e 20 61 6e 20 61 74 74 61 63 68 65 64 20 64  in an attached d
31fa0 61 74 61 62 61 73 65 20 69 66 0a 2a 2a 20 50 31  atabase if.** P1
31fb0 3e 31 2e 20 20 54 68 65 20 50 33 20 61 72 67 75  >1.  The P3 argu
31fc0 6d 65 6e 74 20 6d 75 73 74 20 62 65 20 31 20 28  ment must be 1 (
31fd0 42 54 52 45 45 5f 49 4e 54 4b 45 59 29 20 66 6f  BTREE_INTKEY) fo
31fe0 72 20 61 20 72 6f 77 69 64 20 74 61 62 6c 65 0a  r a rowid table.
31ff0 2a 2a 20 69 74 20 6d 75 73 74 20 62 65 20 32 20  ** it must be 2 
32000 28 42 54 52 45 45 5f 42 4c 4f 42 4b 45 59 29 20  (BTREE_BLOBKEY) 
32010 66 6f 72 20 61 6e 20 69 6e 64 65 78 20 6f 72 20  for an index or 
32020 57 49 54 48 4f 55 54 20 52 4f 57 49 44 20 74 61  WITHOUT ROWID ta
32030 62 6c 65 2e 0a 2a 2a 20 54 68 65 20 72 6f 6f 74  ble..** The root
32040 20 70 61 67 65 20 6e 75 6d 62 65 72 20 6f 66 20   page number of 
32050 74 68 65 20 6e 65 77 20 62 2d 74 72 65 65 20 69  the new b-tree i
32060 73 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69  s stored in regi
32070 73 74 65 72 20 50 32 2e 0a 2a 2f 0a 63 61 73 65  ster P2..*/.case
32080 20 4f 50 5f 43 72 65 61 74 65 42 74 72 65 65 3a   OP_CreateBtree:
32090 20 7b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f   {          /* o
320a0 75 74 32 20 2a 2f 0a 20 20 69 6e 74 20 70 67 6e  ut2 */.  int pgn
320b0 6f 3b 0a 20 20 44 62 20 2a 70 44 62 3b 0a 0a 20  o;.  Db *pDb;.. 
320c0 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e 63 72   sqlite3VdbeIncr
320d0 57 72 69 74 65 43 6f 75 6e 74 65 72 28 70 2c 20  WriteCounter(p, 
320e0 30 29 3b 0a 20 20 70 4f 75 74 20 3d 20 6f 75 74  0);.  pOut = out
320f0 32 50 72 65 72 65 6c 65 61 73 65 28 70 2c 20 70  2Prerelease(p, p
32100 4f 70 29 3b 0a 20 20 70 67 6e 6f 20 3d 20 30 3b  Op);.  pgno = 0;
32110 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
32120 70 33 3d 3d 42 54 52 45 45 5f 49 4e 54 4b 45 59  p3==BTREE_INTKEY
32130 20 7c 7c 20 70 4f 70 2d 3e 70 33 3d 3d 42 54 52   || pOp->p3==BTR
32140 45 45 5f 42 4c 4f 42 4b 45 59 20 29 3b 0a 20 20  EE_BLOBKEY );.  
32150 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
32160 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 64 62  =0 && pOp->p1<db
32170 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73 65 72  ->nDb );.  asser
32180 74 28 20 44 62 4d 61 73 6b 54 65 73 74 28 70 2d  t( DbMaskTest(p-
32190 3e 62 74 72 65 65 4d 61 73 6b 2c 20 70 4f 70 2d  >btreeMask, pOp-
321a0 3e 70 31 29 20 29 3b 0a 20 20 61 73 73 65 72 74  >p1) );.  assert
321b0 28 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30  ( p->readOnly==0
321c0 20 29 3b 0a 20 20 70 44 62 20 3d 20 26 64 62 2d   );.  pDb = &db-
321d0 3e 61 44 62 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  >aDb[pOp->p1];. 
321e0 20 61 73 73 65 72 74 28 20 70 44 62 2d 3e 70 42   assert( pDb->pB
321f0 74 21 3d 30 20 29 3b 0a 20 20 72 63 20 3d 20 73  t!=0 );.  rc = s
32200 71 6c 69 74 65 33 42 74 72 65 65 43 72 65 61 74  qlite3BtreeCreat
32210 65 54 61 62 6c 65 28 70 44 62 2d 3e 70 42 74 2c  eTable(pDb->pBt,
32220 20 26 70 67 6e 6f 2c 20 70 4f 70 2d 3e 70 33 29   &pgno, pOp->p3)
32230 3b 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f 74  ;.  if( rc ) got
32240 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
32250 72 72 6f 72 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e  rror;.  pOut->u.
32260 69 20 3d 20 70 67 6e 6f 3b 0a 20 20 62 72 65 61  i = pgno;.  brea
32270 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
32280 20 53 71 6c 45 78 65 63 20 2a 20 2a 20 2a 20 50   SqlExec * * * P
32290 34 20 2a 0a 2a 2a 0a 2a 2a 20 52 75 6e 20 74 68  4 *.**.** Run th
322a0 65 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 20  e SQL statement 
322b0 6f 72 20 73 74 61 74 65 6d 65 6e 74 73 20 73 70  or statements sp
322c0 65 63 69 66 69 65 64 20 69 6e 20 74 68 65 20 50  ecified in the P
322d0 34 20 73 74 72 69 6e 67 2e 0a 2a 2f 0a 63 61 73  4 string..*/.cas
322e0 65 20 4f 50 5f 53 71 6c 45 78 65 63 3a 20 7b 0a  e OP_SqlExec: {.
322f0 20 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e 63    sqlite3VdbeInc
32300 72 57 72 69 74 65 43 6f 75 6e 74 65 72 28 70 2c  rWriteCounter(p,
32310 20 30 29 3b 0a 20 20 64 62 2d 3e 6e 53 71 6c 45   0);.  db->nSqlE
32320 78 65 63 2b 2b 3b 0a 20 20 72 63 20 3d 20 73 71  xec++;.  rc = sq
32330 6c 69 74 65 33 5f 65 78 65 63 28 64 62 2c 20 70  lite3_exec(db, p
32340 4f 70 2d 3e 70 34 2e 7a 2c 20 30 2c 20 30 2c 20  Op->p4.z, 0, 0, 
32350 30 29 3b 0a 20 20 64 62 2d 3e 6e 53 71 6c 45 78  0);.  db->nSqlEx
32360 65 63 2d 2d 3b 0a 20 20 69 66 28 20 72 63 20 29  ec--;.  if( rc )
32370 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
32380 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 62 72 65 61  to_error;.  brea
32390 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
323a0 20 50 61 72 73 65 53 63 68 65 6d 61 20 50 31 20   ParseSchema P1 
323b0 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 52  * * P4 *.**.** R
323c0 65 61 64 20 61 6e 64 20 70 61 72 73 65 20 61 6c  ead and parse al
323d0 6c 20 65 6e 74 72 69 65 73 20 66 72 6f 6d 20 74  l entries from t
323e0 68 65 20 53 51 4c 49 54 45 5f 4d 41 53 54 45 52  he SQLITE_MASTER
323f0 20 74 61 62 6c 65 20 6f 66 20 64 61 74 61 62 61   table of databa
32400 73 65 20 50 31 0a 2a 2a 20 74 68 61 74 20 6d 61  se P1.** that ma
32410 74 63 68 20 74 68 65 20 57 48 45 52 45 20 63 6c  tch the WHERE cl
32420 61 75 73 65 20 50 34 2e 20 20 49 66 20 50 34 20  ause P4.  If P4 
32430 69 73 20 61 20 4e 55 4c 4c 20 70 6f 69 6e 74 65  is a NULL pointe
32440 72 2c 20 74 68 65 6e 20 74 68 65 0a 2a 2a 20 65  r, then the.** e
32450 6e 74 69 72 65 20 73 63 68 65 6d 61 20 66 6f 72  ntire schema for
32460 20 50 31 20 69 73 20 72 65 70 61 72 73 65 64 2e   P1 is reparsed.
32470 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f  .**.** This opco
32480 64 65 20 69 6e 76 6f 6b 65 73 20 74 68 65 20 70  de invokes the p
32490 61 72 73 65 72 20 74 6f 20 63 72 65 61 74 65 20  arser to create 
324a0 61 20 6e 65 77 20 76 69 72 74 75 61 6c 20 6d 61  a new virtual ma
324b0 63 68 69 6e 65 2c 0a 2a 2a 20 74 68 65 6e 20 72  chine,.** then r
324c0 75 6e 73 20 74 68 65 20 6e 65 77 20 76 69 72 74  uns the new virt
324d0 75 61 6c 20 6d 61 63 68 69 6e 65 2e 20 20 49 74  ual machine.  It
324e0 20 69 73 20 74 68 75 73 20 61 20 72 65 2d 65 6e   is thus a re-en
324f0 74 72 61 6e 74 20 6f 70 63 6f 64 65 2e 0a 2a 2f  trant opcode..*/
32500 0a 63 61 73 65 20 4f 50 5f 50 61 72 73 65 53 63  .case OP_ParseSc
32510 68 65 6d 61 3a 20 7b 0a 20 20 69 6e 74 20 69 44  hema: {.  int iD
32520 62 3b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20  b;.  const char 
32530 2a 7a 4d 61 73 74 65 72 3b 0a 20 20 63 68 61 72  *zMaster;.  char
32540 20 2a 7a 53 71 6c 3b 0a 20 20 49 6e 69 74 44 61   *zSql;.  InitDa
32550 74 61 20 69 6e 69 74 44 61 74 61 3b 0a 0a 20 20  ta initData;..  
32560 2f 2a 20 41 6e 79 20 70 72 65 70 61 72 65 64 20  /* Any prepared 
32570 73 74 61 74 65 6d 65 6e 74 20 74 68 61 74 20 69  statement that i
32580 6e 76 6f 6b 65 73 20 74 68 69 73 20 6f 70 63 6f  nvokes this opco
32590 64 65 20 77 69 6c 6c 20 68 6f 6c 64 20 6d 75 74  de will hold mut
325a0 65 78 65 73 0a 20 20 2a 2a 20 6f 6e 20 65 76 65  exes.  ** on eve
325b0 72 79 20 62 74 72 65 65 2e 20 20 54 68 69 73 20  ry btree.  This 
325c0 69 73 20 61 20 70 72 65 72 65 71 75 69 73 69 74  is a prerequisit
325d0 65 20 66 6f 72 20 69 6e 76 6f 6b 69 6e 67 20 0a  e for invoking .
325e0 20 20 2a 2a 20 73 71 6c 69 74 65 33 49 6e 69 74    ** sqlite3Init
325f0 43 61 6c 6c 62 61 63 6b 28 29 2e 0a 20 20 2a 2f  Callback()..  */
32600 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44  .#ifdef SQLITE_D
32610 45 42 55 47 0a 20 20 66 6f 72 28 69 44 62 3d 30  EBUG.  for(iDb=0
32620 3b 20 69 44 62 3c 64 62 2d 3e 6e 44 62 3b 20 69  ; iDb<db->nDb; i
32630 44 62 2b 2b 29 7b 0a 20 20 20 20 61 73 73 65 72  Db++){.    asser
32640 74 28 20 69 44 62 3d 3d 31 20 7c 7c 20 73 71 6c  t( iDb==1 || sql
32650 69 74 65 33 42 74 72 65 65 48 6f 6c 64 73 4d 75  ite3BtreeHoldsMu
32660 74 65 78 28 64 62 2d 3e 61 44 62 5b 69 44 62 5d  tex(db->aDb[iDb]
32670 2e 70 42 74 29 20 29 3b 0a 20 20 7d 0a 23 65 6e  .pBt) );.  }.#en
32680 64 69 66 0a 0a 20 20 69 44 62 20 3d 20 70 4f 70  dif..  iDb = pOp
32690 2d 3e 70 31 3b 0a 20 20 61 73 73 65 72 74 28 20  ->p1;.  assert( 
326a0 69 44 62 3e 3d 30 20 26 26 20 69 44 62 3c 64 62  iDb>=0 && iDb<db
326b0 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73 65 72  ->nDb );.  asser
326c0 74 28 20 44 62 48 61 73 50 72 6f 70 65 72 74 79  t( DbHasProperty
326d0 28 64 62 2c 20 69 44 62 2c 20 44 42 5f 53 63 68  (db, iDb, DB_Sch
326e0 65 6d 61 4c 6f 61 64 65 64 29 20 29 3b 0a 0a 23  emaLoaded) );..#
326f0 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
32700 49 54 5f 41 4c 54 45 52 54 41 42 4c 45 0a 20 20  IT_ALTERTABLE.  
32710 69 66 28 20 70 4f 70 2d 3e 70 34 2e 7a 3d 3d 30  if( pOp->p4.z==0
32720 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 53   ){.    sqlite3S
32730 63 68 65 6d 61 43 6c 65 61 72 28 64 62 2d 3e 61  chemaClear(db->a
32740 44 62 5b 69 44 62 5d 2e 70 53 63 68 65 6d 61 29  Db[iDb].pSchema)
32750 3b 0a 20 20 20 20 64 62 2d 3e 6d 44 62 46 6c 61  ;.    db->mDbFla
32760 67 73 20 26 3d 20 7e 44 42 46 4c 41 47 5f 53 63  gs &= ~DBFLAG_Sc
32770 68 65 6d 61 4b 6e 6f 77 6e 4f 6b 3b 0a 20 20 20  hemaKnownOk;.   
32780 20 72 63 20 3d 20 73 71 6c 69 74 65 33 49 6e 69   rc = sqlite3Ini
32790 74 4f 6e 65 28 64 62 2c 20 69 44 62 2c 20 26 70  tOne(db, iDb, &p
327a0 2d 3e 7a 45 72 72 4d 73 67 2c 20 49 4e 49 54 46  ->zErrMsg, INITF
327b0 4c 41 47 5f 41 6c 74 65 72 54 61 62 6c 65 29 3b  LAG_AlterTable);
327c0 0a 20 20 20 20 64 62 2d 3e 6d 44 62 46 6c 61 67  .    db->mDbFlag
327d0 73 20 7c 3d 20 44 42 46 4c 41 47 5f 53 63 68 65  s |= DBFLAG_Sche
327e0 6d 61 43 68 61 6e 67 65 3b 0a 20 20 20 20 70 2d  maChange;.    p-
327f0 3e 65 78 70 69 72 65 64 20 3d 20 30 3b 0a 20 20  >expired = 0;.  
32800 7d 65 6c 73 65 0a 23 65 6e 64 69 66 0a 20 20 7b  }else.#endif.  {
32810 0a 20 20 20 20 7a 4d 61 73 74 65 72 20 3d 20 4d  .    zMaster = M
32820 41 53 54 45 52 5f 4e 41 4d 45 3b 0a 20 20 20 20  ASTER_NAME;.    
32830 69 6e 69 74 44 61 74 61 2e 64 62 20 3d 20 64 62  initData.db = db
32840 3b 0a 20 20 20 20 69 6e 69 74 44 61 74 61 2e 69  ;.    initData.i
32850 44 62 20 3d 20 69 44 62 3b 0a 20 20 20 20 69 6e  Db = iDb;.    in
32860 69 74 44 61 74 61 2e 70 7a 45 72 72 4d 73 67 20  itData.pzErrMsg 
32870 3d 20 26 70 2d 3e 7a 45 72 72 4d 73 67 3b 0a 20  = &p->zErrMsg;. 
32880 20 20 20 69 6e 69 74 44 61 74 61 2e 6d 49 6e 69     initData.mIni
32890 74 46 6c 61 67 73 20 3d 20 30 3b 0a 20 20 20 20  tFlags = 0;.    
328a0 7a 53 71 6c 20 3d 20 73 71 6c 69 74 65 33 4d 50  zSql = sqlite3MP
328b0 72 69 6e 74 66 28 64 62 2c 0a 20 20 20 20 20 20  rintf(db,.      
328c0 20 22 53 45 4c 45 43 54 2a 46 52 4f 4d 5c 22 25   "SELECT*FROM\"%
328d0 77 5c 22 2e 25 73 20 57 48 45 52 45 20 25 73 20  w\".%s WHERE %s 
328e0 4f 52 44 45 52 20 42 59 20 72 6f 77 69 64 22 2c  ORDER BY rowid",
328f0 0a 20 20 20 20 20 20 20 64 62 2d 3e 61 44 62 5b  .       db->aDb[
32900 69 44 62 5d 2e 7a 44 62 53 4e 61 6d 65 2c 20 7a  iDb].zDbSName, z
32910 4d 61 73 74 65 72 2c 20 70 4f 70 2d 3e 70 34 2e  Master, pOp->p4.
32920 7a 29 3b 0a 20 20 20 20 69 66 28 20 7a 53 71 6c  z);.    if( zSql
32930 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 72 63 20  ==0 ){.      rc 
32940 3d 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 5f 42  = SQLITE_NOMEM_B
32950 4b 50 54 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a  KPT;.    }else{.
32960 20 20 20 20 20 20 61 73 73 65 72 74 28 20 64 62        assert( db
32970 2d 3e 69 6e 69 74 2e 62 75 73 79 3d 3d 30 20 29  ->init.busy==0 )
32980 3b 0a 20 20 20 20 20 20 64 62 2d 3e 69 6e 69 74  ;.      db->init
32990 2e 62 75 73 79 20 3d 20 31 3b 0a 20 20 20 20 20  .busy = 1;.     
329a0 20 69 6e 69 74 44 61 74 61 2e 72 63 20 3d 20 53   initData.rc = S
329b0 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20 20 20 20 20  QLITE_OK;.      
329c0 69 6e 69 74 44 61 74 61 2e 6e 49 6e 69 74 52 6f  initData.nInitRo
329d0 77 20 3d 20 30 3b 0a 20 20 20 20 20 20 61 73 73  w = 0;.      ass
329e0 65 72 74 28 20 21 64 62 2d 3e 6d 61 6c 6c 6f 63  ert( !db->malloc
329f0 46 61 69 6c 65 64 20 29 3b 0a 20 20 20 20 20 20  Failed );.      
32a00 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 65 78 65  rc = sqlite3_exe
32a10 63 28 64 62 2c 20 7a 53 71 6c 2c 20 73 71 6c 69  c(db, zSql, sqli
32a20 74 65 33 49 6e 69 74 43 61 6c 6c 62 61 63 6b 2c  te3InitCallback,
32a30 20 26 69 6e 69 74 44 61 74 61 2c 20 30 29 3b 0a   &initData, 0);.
32a40 20 20 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51        if( rc==SQ
32a50 4c 49 54 45 5f 4f 4b 20 29 20 72 63 20 3d 20 69  LITE_OK ) rc = i
32a60 6e 69 74 44 61 74 61 2e 72 63 3b 0a 20 20 20 20  nitData.rc;.    
32a70 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45    if( rc==SQLITE
32a80 5f 4f 4b 20 26 26 20 69 6e 69 74 44 61 74 61 2e  _OK && initData.
32a90 6e 49 6e 69 74 52 6f 77 3d 3d 30 20 29 7b 0a 20  nInitRow==0 ){. 
32aa0 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 4f 50         /* The OP
32ab0 5f 50 61 72 73 65 53 63 68 65 6d 61 20 6f 70 63  _ParseSchema opc
32ac0 6f 64 65 20 77 69 74 68 20 61 20 6e 6f 6e 2d 4e  ode with a non-N
32ad0 55 4c 4c 20 50 34 20 61 72 67 75 6d 65 6e 74 20  ULL P4 argument 
32ae0 73 68 6f 75 6c 64 20 70 61 72 73 65 0a 20 20 20  should parse.   
32af0 20 20 20 20 20 2a 2a 20 61 74 20 6c 65 61 73 74       ** at least
32b00 20 6f 6e 65 20 53 51 4c 20 73 74 61 74 65 6d 65   one SQL stateme
32b10 6e 74 2e 20 41 6e 79 20 6c 65 73 73 20 74 68 61  nt. Any less tha
32b20 6e 20 74 68 61 74 20 69 6e 64 69 63 61 74 65 73  n that indicates
32b30 20 74 68 61 74 0a 20 20 20 20 20 20 20 20 2a 2a   that.        **
32b40 20 74 68 65 20 73 71 6c 69 74 65 5f 6d 61 73 74   the sqlite_mast
32b50 65 72 20 74 61 62 6c 65 20 69 73 20 63 6f 72 72  er table is corr
32b60 75 70 74 2e 20 2a 2f 0a 20 20 20 20 20 20 20 20  upt. */.        
32b70 72 63 20 3d 20 53 51 4c 49 54 45 5f 43 4f 52 52  rc = SQLITE_CORR
32b80 55 50 54 5f 42 4b 50 54 3b 0a 20 20 20 20 20 20  UPT_BKPT;.      
32b90 7d 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 44  }.      sqlite3D
32ba0 62 46 72 65 65 4e 4e 28 64 62 2c 20 7a 53 71 6c  bFreeNN(db, zSql
32bb0 29 3b 0a 20 20 20 20 20 20 64 62 2d 3e 69 6e 69  );.      db->ini
32bc0 74 2e 62 75 73 79 20 3d 20 30 3b 0a 20 20 20 20  t.busy = 0;.    
32bd0 7d 0a 20 20 7d 0a 20 20 69 66 28 20 72 63 20 29  }.  }.  if( rc )
32be0 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 52 65 73  {.    sqlite3Res
32bf0 65 74 41 6c 6c 53 63 68 65 6d 61 73 4f 66 43 6f  etAllSchemasOfCo
32c00 6e 6e 65 63 74 69 6f 6e 28 64 62 29 3b 0a 20 20  nnection(db);.  
32c10 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45    if( rc==SQLITE
32c20 5f 4e 4f 4d 45 4d 20 29 7b 0a 20 20 20 20 20 20  _NOMEM ){.      
32c30 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 20  goto no_mem;.   
32c40 20 7d 0a 20 20 20 20 67 6f 74 6f 20 61 62 6f 72   }.    goto abor
32c50 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
32c60 20 20 7d 0a 20 20 62 72 65 61 6b 3b 20 20 0a 7d    }.  break;  .}
32c70 0a 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53  ..#if !defined(S
32c80 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 4e 41 4c 59  QLITE_OMIT_ANALY
32c90 5a 45 29 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4c  ZE)./* Opcode: L
32ca0 6f 61 64 41 6e 61 6c 79 73 69 73 20 50 31 20 2a  oadAnalysis P1 *
32cb0 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 52 65 61   * * *.**.** Rea
32cc0 64 20 74 68 65 20 73 71 6c 69 74 65 5f 73 74 61  d the sqlite_sta
32cd0 74 31 20 74 61 62 6c 65 20 66 6f 72 20 64 61 74  t1 table for dat
32ce0 61 62 61 73 65 20 50 31 20 61 6e 64 20 6c 6f 61  abase P1 and loa
32cf0 64 20 74 68 65 20 63 6f 6e 74 65 6e 74 0a 2a 2a  d the content.**
32d00 20 6f 66 20 74 68 61 74 20 74 61 62 6c 65 20 69   of that table i
32d10 6e 74 6f 20 74 68 65 20 69 6e 74 65 72 6e 61 6c  nto the internal
32d20 20 69 6e 64 65 78 20 68 61 73 68 20 74 61 62 6c   index hash tabl
32d30 65 2e 20 20 54 68 69 73 20 77 69 6c 6c 20 63 61  e.  This will ca
32d40 75 73 65 0a 2a 2a 20 74 68 65 20 61 6e 61 6c 79  use.** the analy
32d50 73 69 73 20 74 6f 20 62 65 20 75 73 65 64 20 77  sis to be used w
32d60 68 65 6e 20 70 72 65 70 61 72 69 6e 67 20 61 6c  hen preparing al
32d70 6c 20 73 75 62 73 65 71 75 65 6e 74 20 71 75 65  l subsequent que
32d80 72 69 65 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  ries..*/.case OP
32d90 5f 4c 6f 61 64 41 6e 61 6c 79 73 69 73 3a 20 7b  _LoadAnalysis: {
32da0 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
32db0 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31  p1>=0 && pOp->p1
32dc0 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 72 63  <db->nDb );.  rc
32dd0 20 3d 20 73 71 6c 69 74 65 33 41 6e 61 6c 79 73   = sqlite3Analys
32de0 69 73 4c 6f 61 64 28 64 62 2c 20 70 4f 70 2d 3e  isLoad(db, pOp->
32df0 70 31 29 3b 0a 20 20 69 66 28 20 72 63 20 29 20  p1);.  if( rc ) 
32e00 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
32e10 6f 5f 65 72 72 6f 72 3b 0a 20 20 62 72 65 61 6b  o_error;.  break
32e20 3b 20 20 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20  ;  .}.#endif /* 
32e30 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
32e40 4f 4d 49 54 5f 41 4e 41 4c 59 5a 45 29 20 2a 2f  OMIT_ANALYZE) */
32e50 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 44 72 6f  ../* Opcode: Dro
32e60 70 54 61 62 6c 65 20 50 31 20 2a 20 2a 20 50 34  pTable P1 * * P4
32e70 20 2a 0a 2a 2a 0a 2a 2a 20 52 65 6d 6f 76 65 20   *.**.** Remove 
32e80 74 68 65 20 69 6e 74 65 72 6e 61 6c 20 28 69 6e  the internal (in
32e90 2d 6d 65 6d 6f 72 79 29 20 64 61 74 61 20 73 74  -memory) data st
32ea0 72 75 63 74 75 72 65 73 20 74 68 61 74 20 64 65  ructures that de
32eb0 73 63 72 69 62 65 0a 2a 2a 20 74 68 65 20 74 61  scribe.** the ta
32ec0 62 6c 65 20 6e 61 6d 65 64 20 50 34 20 69 6e 20  ble named P4 in 
32ed0 64 61 74 61 62 61 73 65 20 50 31 2e 20 20 54 68  database P1.  Th
32ee0 69 73 20 69 73 20 63 61 6c 6c 65 64 20 61 66 74  is is called aft
32ef0 65 72 20 61 20 74 61 62 6c 65 0a 2a 2a 20 69 73  er a table.** is
32f00 20 64 72 6f 70 70 65 64 20 66 72 6f 6d 20 64 69   dropped from di
32f10 73 6b 20 28 75 73 69 6e 67 20 74 68 65 20 44 65  sk (using the De
32f20 73 74 72 6f 79 20 6f 70 63 6f 64 65 29 20 69 6e  stroy opcode) in
32f30 20 6f 72 64 65 72 20 74 6f 20 6b 65 65 70 20 0a   order to keep .
32f40 2a 2a 20 74 68 65 20 69 6e 74 65 72 6e 61 6c 20  ** the internal 
32f50 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f  representation o
32f60 66 20 74 68 65 0a 2a 2a 20 73 63 68 65 6d 61 20  f the.** schema 
32f70 63 6f 6e 73 69 73 74 65 6e 74 20 77 69 74 68 20  consistent with 
32f80 77 68 61 74 20 69 73 20 6f 6e 20 64 69 73 6b 2e  what is on disk.
32f90 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 44 72 6f 70  .*/.case OP_Drop
32fa0 54 61 62 6c 65 3a 20 7b 0a 20 20 73 71 6c 69 74  Table: {.  sqlit
32fb0 65 33 56 64 62 65 49 6e 63 72 57 72 69 74 65 43  e3VdbeIncrWriteC
32fc0 6f 75 6e 74 65 72 28 70 2c 20 30 29 3b 0a 20 20  ounter(p, 0);.  
32fd0 73 71 6c 69 74 65 33 55 6e 6c 69 6e 6b 41 6e 64  sqlite3UnlinkAnd
32fe0 44 65 6c 65 74 65 54 61 62 6c 65 28 64 62 2c 20  DeleteTable(db, 
32ff0 70 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70 34  pOp->p1, pOp->p4
33000 2e 7a 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .z);.  break;.}.
33010 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 44 72 6f 70  ./* Opcode: Drop
33020 49 6e 64 65 78 20 50 31 20 2a 20 2a 20 50 34 20  Index P1 * * P4 
33030 2a 0a 2a 2a 0a 2a 2a 20 52 65 6d 6f 76 65 20 74  *.**.** Remove t
33040 68 65 20 69 6e 74 65 72 6e 61 6c 20 28 69 6e 2d  he internal (in-
33050 6d 65 6d 6f 72 79 29 20 64 61 74 61 20 73 74 72  memory) data str
33060 75 63 74 75 72 65 73 20 74 68 61 74 20 64 65 73  uctures that des
33070 63 72 69 62 65 0a 2a 2a 20 74 68 65 20 69 6e 64  cribe.** the ind
33080 65 78 20 6e 61 6d 65 64 20 50 34 20 69 6e 20 64  ex named P4 in d
33090 61 74 61 62 61 73 65 20 50 31 2e 20 20 54 68 69  atabase P1.  Thi
330a0 73 20 69 73 20 63 61 6c 6c 65 64 20 61 66 74 65  s is called afte
330b0 72 20 61 6e 20 69 6e 64 65 78 0a 2a 2a 20 69 73  r an index.** is
330c0 20 64 72 6f 70 70 65 64 20 66 72 6f 6d 20 64 69   dropped from di
330d0 73 6b 20 28 75 73 69 6e 67 20 74 68 65 20 44 65  sk (using the De
330e0 73 74 72 6f 79 20 6f 70 63 6f 64 65 29 0a 2a 2a  stroy opcode).**
330f0 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 6b 65 65   in order to kee
33100 70 20 74 68 65 20 69 6e 74 65 72 6e 61 6c 20 72  p the internal r
33110 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66  epresentation of
33120 20 74 68 65 0a 2a 2a 20 73 63 68 65 6d 61 20 63   the.** schema c
33130 6f 6e 73 69 73 74 65 6e 74 20 77 69 74 68 20 77  onsistent with w
33140 68 61 74 20 69 73 20 6f 6e 20 64 69 73 6b 2e 0a  hat is on disk..
33150 2a 2f 0a 63 61 73 65 20 4f 50 5f 44 72 6f 70 49  */.case OP_DropI
33160 6e 64 65 78 3a 20 7b 0a 20 20 73 71 6c 69 74 65  ndex: {.  sqlite
33170 33 56 64 62 65 49 6e 63 72 57 72 69 74 65 43 6f  3VdbeIncrWriteCo
33180 75 6e 74 65 72 28 70 2c 20 30 29 3b 0a 20 20 73  unter(p, 0);.  s
33190 71 6c 69 74 65 33 55 6e 6c 69 6e 6b 41 6e 64 44  qlite3UnlinkAndD
331a0 65 6c 65 74 65 49 6e 64 65 78 28 64 62 2c 20 70  eleteIndex(db, p
331b0 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70 34 2e  Op->p1, pOp->p4.
331c0 7a 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  z);.  break;.}..
331d0 2f 2a 20 4f 70 63 6f 64 65 3a 20 44 72 6f 70 54  /* Opcode: DropT
331e0 72 69 67 67 65 72 20 50 31 20 2a 20 2a 20 50 34  rigger P1 * * P4
331f0 20 2a 0a 2a 2a 0a 2a 2a 20 52 65 6d 6f 76 65 20   *.**.** Remove 
33200 74 68 65 20 69 6e 74 65 72 6e 61 6c 20 28 69 6e  the internal (in
33210 2d 6d 65 6d 6f 72 79 29 20 64 61 74 61 20 73 74  -memory) data st
33220 72 75 63 74 75 72 65 73 20 74 68 61 74 20 64 65  ructures that de
33230 73 63 72 69 62 65 0a 2a 2a 20 74 68 65 20 74 72  scribe.** the tr
33240 69 67 67 65 72 20 6e 61 6d 65 64 20 50 34 20 69  igger named P4 i
33250 6e 20 64 61 74 61 62 61 73 65 20 50 31 2e 20 20  n database P1.  
33260 54 68 69 73 20 69 73 20 63 61 6c 6c 65 64 20 61  This is called a
33270 66 74 65 72 20 61 20 74 72 69 67 67 65 72 0a 2a  fter a trigger.*
33280 2a 20 69 73 20 64 72 6f 70 70 65 64 20 66 72 6f  * is dropped fro
33290 6d 20 64 69 73 6b 20 28 75 73 69 6e 67 20 74 68  m disk (using th
332a0 65 20 44 65 73 74 72 6f 79 20 6f 70 63 6f 64 65  e Destroy opcode
332b0 29 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 6b 65  ) in order to ke
332c0 65 70 20 0a 2a 2a 20 74 68 65 20 69 6e 74 65 72  ep .** the inter
332d0 6e 61 6c 20 72 65 70 72 65 73 65 6e 74 61 74 69  nal representati
332e0 6f 6e 20 6f 66 20 74 68 65 0a 2a 2a 20 73 63 68  on of the.** sch
332f0 65 6d 61 20 63 6f 6e 73 69 73 74 65 6e 74 20 77  ema consistent w
33300 69 74 68 20 77 68 61 74 20 69 73 20 6f 6e 20 64  ith what is on d
33310 69 73 6b 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  isk..*/.case OP_
33320 44 72 6f 70 54 72 69 67 67 65 72 3a 20 7b 0a 20  DropTrigger: {. 
33330 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e 63 72   sqlite3VdbeIncr
33340 57 72 69 74 65 43 6f 75 6e 74 65 72 28 70 2c 20  WriteCounter(p, 
33350 30 29 3b 0a 20 20 73 71 6c 69 74 65 33 55 6e 6c  0);.  sqlite3Unl
33360 69 6e 6b 41 6e 64 44 65 6c 65 74 65 54 72 69 67  inkAndDeleteTrig
33370 67 65 72 28 64 62 2c 20 70 4f 70 2d 3e 70 31 2c  ger(db, pOp->p1,
33380 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20 62   pOp->p4.z);.  b
33390 72 65 61 6b 3b 0a 7d 0a 0a 0a 23 69 66 6e 64 65  reak;.}...#ifnde
333a0 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 49 4e  f SQLITE_OMIT_IN
333b0 54 45 47 52 49 54 59 5f 43 48 45 43 4b 0a 2f 2a  TEGRITY_CHECK./*
333c0 20 4f 70 63 6f 64 65 3a 20 49 6e 74 65 67 72 69   Opcode: Integri
333d0 74 79 43 6b 20 50 31 20 50 32 20 50 33 20 50 34  tyCk P1 P2 P3 P4
333e0 20 50 35 0a 2a 2a 0a 2a 2a 20 44 6f 20 61 6e 20   P5.**.** Do an 
333f0 61 6e 61 6c 79 73 69 73 20 6f 66 20 74 68 65 20  analysis of the 
33400 63 75 72 72 65 6e 74 6c 79 20 6f 70 65 6e 20 64  currently open d
33410 61 74 61 62 61 73 65 2e 20 20 53 74 6f 72 65 20  atabase.  Store 
33420 69 6e 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 50  in.** register P
33430 31 20 74 68 65 20 74 65 78 74 20 6f 66 20 61 6e  1 the text of an
33440 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 20 64   error message d
33450 65 73 63 72 69 62 69 6e 67 20 61 6e 79 20 70 72  escribing any pr
33460 6f 62 6c 65 6d 73 2e 0a 2a 2a 20 49 66 20 6e 6f  oblems..** If no
33470 20 70 72 6f 62 6c 65 6d 73 20 61 72 65 20 66 6f   problems are fo
33480 75 6e 64 2c 20 73 74 6f 72 65 20 61 20 4e 55 4c  und, store a NUL
33490 4c 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31  L in register P1
334a0 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 72 65 67 69  ..**.** The regi
334b0 73 74 65 72 20 50 33 20 63 6f 6e 74 61 69 6e 73  ster P3 contains
334c0 20 6f 6e 65 20 6c 65 73 73 20 74 68 61 6e 20 74   one less than t
334d0 68 65 20 6d 61 78 69 6d 75 6d 20 6e 75 6d 62 65  he maximum numbe
334e0 72 20 6f 66 20 61 6c 6c 6f 77 65 64 20 65 72 72  r of allowed err
334f0 6f 72 73 2e 0a 2a 2a 20 41 74 20 6d 6f 73 74 20  ors..** At most 
33500 72 65 67 28 50 33 29 20 65 72 72 6f 72 73 20 77  reg(P3) errors w
33510 69 6c 6c 20 62 65 20 72 65 70 6f 72 74 65 64 2e  ill be reported.
33520 0a 2a 2a 20 49 6e 20 6f 74 68 65 72 20 77 6f 72  .** In other wor
33530 64 73 2c 20 74 68 65 20 61 6e 61 6c 79 73 69 73  ds, the analysis
33540 20 73 74 6f 70 73 20 61 73 20 73 6f 6f 6e 20 61   stops as soon a
33550 73 20 72 65 67 28 50 31 29 20 65 72 72 6f 72 73  s reg(P1) errors
33560 20 61 72 65 20 0a 2a 2a 20 73 65 65 6e 2e 20 20   are .** seen.  
33570 52 65 67 28 50 31 29 20 69 73 20 75 70 64 61 74  Reg(P1) is updat
33580 65 64 20 77 69 74 68 20 74 68 65 20 6e 75 6d 62  ed with the numb
33590 65 72 20 6f 66 20 65 72 72 6f 72 73 20 72 65 6d  er of errors rem
335a0 61 69 6e 69 6e 67 2e 0a 2a 2a 0a 2a 2a 20 54 68  aining..**.** Th
335b0 65 20 72 6f 6f 74 20 70 61 67 65 20 6e 75 6d 62  e root page numb
335c0 65 72 73 20 6f 66 20 61 6c 6c 20 74 61 62 6c 65  ers of all table
335d0 73 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73  s in the databas
335e0 65 20 61 72 65 20 69 6e 74 65 67 65 72 73 0a 2a  e are integers.*
335f0 2a 20 73 74 6f 72 65 64 20 69 6e 20 50 34 5f 49  * stored in P4_I
33600 4e 54 41 52 52 41 59 20 61 72 67 75 6d 65 6e 74  NTARRAY argument
33610 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 20 69 73  ..**.** If P5 is
33620 20 6e 6f 74 20 7a 65 72 6f 2c 20 74 68 65 20 63   not zero, the c
33630 68 65 63 6b 20 69 73 20 64 6f 6e 65 20 6f 6e 20  heck is done on 
33640 74 68 65 20 61 75 78 69 6c 69 61 72 79 20 64 61  the auxiliary da
33650 74 61 62 61 73 65 0a 2a 2a 20 66 69 6c 65 2c 20  tabase.** file, 
33660 6e 6f 74 20 74 68 65 20 6d 61 69 6e 20 64 61 74  not the main dat
33670 61 62 61 73 65 20 66 69 6c 65 2e 0a 2a 2a 0a 2a  abase file..**.*
33680 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 69 73  * This opcode is
33690 20 75 73 65 64 20 74 6f 20 69 6d 70 6c 65 6d 65   used to impleme
336a0 6e 74 20 74 68 65 20 69 6e 74 65 67 72 69 74 79  nt the integrity
336b0 5f 63 68 65 63 6b 20 70 72 61 67 6d 61 2e 0a 2a  _check pragma..*
336c0 2f 0a 63 61 73 65 20 4f 50 5f 49 6e 74 65 67 72  /.case OP_Integr
336d0 69 74 79 43 6b 3a 20 7b 0a 20 20 69 6e 74 20 6e  ityCk: {.  int n
336e0 52 6f 6f 74 3b 20 20 20 20 20 20 2f 2a 20 4e 75  Root;      /* Nu
336f0 6d 62 65 72 20 6f 66 20 74 61 62 6c 65 73 20 74  mber of tables t
33700 6f 20 63 68 65 63 6b 2e 20 20 28 4e 75 6d 62 65  o check.  (Numbe
33710 72 20 6f 66 20 72 6f 6f 74 20 70 61 67 65 73 2e  r of root pages.
33720 29 20 2a 2f 0a 20 20 69 6e 74 20 2a 61 52 6f 6f  ) */.  int *aRoo
33730 74 3b 20 20 20 20 20 2f 2a 20 41 72 72 61 79 20  t;     /* Array 
33740 6f 66 20 72 6f 6f 74 70 61 67 65 20 6e 75 6d 62  of rootpage numb
33750 65 72 73 20 66 6f 72 20 74 61 62 6c 65 73 20 74  ers for tables t
33760 6f 20 62 65 20 63 68 65 63 6b 65 64 20 2a 2f 0a  o be checked */.
33770 20 20 69 6e 74 20 6e 45 72 72 3b 20 20 20 20 20    int nErr;     
33780 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65    /* Number of e
33790 72 72 6f 72 73 20 72 65 70 6f 72 74 65 64 20 2a  rrors reported *
337a0 2f 0a 20 20 63 68 61 72 20 2a 7a 3b 20 20 20 20  /.  char *z;    
337b0 20 20 20 20 2f 2a 20 54 65 78 74 20 6f 66 20 74      /* Text of t
337c0 68 65 20 65 72 72 6f 72 20 72 65 70 6f 72 74 20  he error report 
337d0 2a 2f 0a 20 20 4d 65 6d 20 2a 70 6e 45 72 72 3b  */.  Mem *pnErr;
337e0 20 20 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72       /* Register
337f0 20 6b 65 65 70 69 6e 67 20 74 72 61 63 6b 20 6f   keeping track o
33800 66 20 65 72 72 6f 72 73 20 72 65 6d 61 69 6e 69  f errors remaini
33810 6e 67 20 2a 2f 0a 0a 20 20 61 73 73 65 72 74 28  ng */..  assert(
33820 20 70 2d 3e 62 49 73 52 65 61 64 65 72 20 29 3b   p->bIsReader );
33830 0a 20 20 6e 52 6f 6f 74 20 3d 20 70 4f 70 2d 3e  .  nRoot = pOp->
33840 70 32 3b 0a 20 20 61 52 6f 6f 74 20 3d 20 70 4f  p2;.  aRoot = pO
33850 70 2d 3e 70 34 2e 61 69 3b 0a 20 20 61 73 73 65  p->p4.ai;.  asse
33860 72 74 28 20 6e 52 6f 6f 74 3e 30 20 29 3b 0a 20  rt( nRoot>0 );. 
33870 20 61 73 73 65 72 74 28 20 61 52 6f 6f 74 5b 30   assert( aRoot[0
33880 5d 3d 3d 6e 52 6f 6f 74 20 29 3b 0a 20 20 61 73  ]==nRoot );.  as
33890 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20  sert( pOp->p3>0 
338a0 26 26 20 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e  && pOp->p3<=(p->
338b0 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72  nMem+1 - p->nCur
338c0 73 6f 72 29 20 29 3b 0a 20 20 70 6e 45 72 72 20  sor) );.  pnErr 
338d0 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  = &aMem[pOp->p3]
338e0 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70 6e 45  ;.  assert( (pnE
338f0 72 72 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  rr->flags & MEM_
33900 49 6e 74 29 21 3d 30 20 29 3b 0a 20 20 61 73 73  Int)!=0 );.  ass
33910 65 72 74 28 20 28 70 6e 45 72 72 2d 3e 66 6c 61  ert( (pnErr->fla
33920 67 73 20 26 20 28 4d 45 4d 5f 53 74 72 7c 4d 45  gs & (MEM_Str|ME
33930 4d 5f 42 6c 6f 62 29 29 3d 3d 30 20 29 3b 0a 20  M_Blob))==0 );. 
33940 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn1 = &aMem[pO
33950 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74  p->p1];.  assert
33960 28 20 70 4f 70 2d 3e 70 35 3c 64 62 2d 3e 6e 44  ( pOp->p5<db->nD
33970 62 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 44  b );.  assert( D
33980 62 4d 61 73 6b 54 65 73 74 28 70 2d 3e 62 74 72  bMaskTest(p->btr
33990 65 65 4d 61 73 6b 2c 20 70 4f 70 2d 3e 70 35 29  eeMask, pOp->p5)
339a0 20 29 3b 0a 20 20 7a 20 3d 20 73 71 6c 69 74 65   );.  z = sqlite
339b0 33 42 74 72 65 65 49 6e 74 65 67 72 69 74 79 43  3BtreeIntegrityC
339c0 68 65 63 6b 28 64 62 2d 3e 61 44 62 5b 70 4f 70  heck(db->aDb[pOp
339d0 2d 3e 70 35 5d 2e 70 42 74 2c 20 26 61 52 6f 6f  ->p5].pBt, &aRoo
339e0 74 5b 31 5d 2c 20 6e 52 6f 6f 74 2c 0a 20 20 20  t[1], nRoot,.   
339f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33a00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 69                (i
33a10 6e 74 29 70 6e 45 72 72 2d 3e 75 2e 69 2b 31 2c  nt)pnErr->u.i+1,
33a20 20 26 6e 45 72 72 29 3b 0a 20 20 73 71 6c 69 74   &nErr);.  sqlit
33a30 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c  e3VdbeMemSetNull
33a40 28 70 49 6e 31 29 3b 0a 20 20 69 66 28 20 6e 45  (pIn1);.  if( nE
33a50 72 72 3d 3d 30 20 29 7b 0a 20 20 20 20 61 73 73  rr==0 ){.    ass
33a60 65 72 74 28 20 7a 3d 3d 30 20 29 3b 0a 20 20 7d  ert( z==0 );.  }
33a70 65 6c 73 65 20 69 66 28 20 7a 3d 3d 30 20 29 7b  else if( z==0 ){
33a80 0a 20 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d  .    goto no_mem
33a90 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70  ;.  }else{.    p
33aa0 6e 45 72 72 2d 3e 75 2e 69 20 2d 3d 20 6e 45 72  nErr->u.i -= nEr
33ab0 72 2d 31 3b 0a 20 20 20 20 73 71 6c 69 74 65 33  r-1;.    sqlite3
33ac0 56 64 62 65 4d 65 6d 53 65 74 53 74 72 28 70 49  VdbeMemSetStr(pI
33ad0 6e 31 2c 20 7a 2c 20 2d 31 2c 20 53 51 4c 49 54  n1, z, -1, SQLIT
33ae0 45 5f 55 54 46 38 2c 20 73 71 6c 69 74 65 33 5f  E_UTF8, sqlite3_
33af0 66 72 65 65 29 3b 0a 20 20 7d 0a 20 20 55 50 44  free);.  }.  UPD
33b00 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45  ATE_MAX_BLOBSIZE
33b10 28 70 49 6e 31 29 3b 0a 20 20 73 71 6c 69 74 65  (pIn1);.  sqlite
33b20 33 56 64 62 65 43 68 61 6e 67 65 45 6e 63 6f 64  3VdbeChangeEncod
33b30 69 6e 67 28 70 49 6e 31 2c 20 65 6e 63 6f 64 69  ing(pIn1, encodi
33b40 6e 67 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  ng);.  break;.}.
33b50 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45  #endif /* SQLITE
33b60 5f 4f 4d 49 54 5f 49 4e 54 45 47 52 49 54 59 5f  _OMIT_INTEGRITY_
33b70 43 48 45 43 4b 20 2a 2f 0a 0a 2f 2a 20 4f 70 63  CHECK */../* Opc
33b80 6f 64 65 3a 20 52 6f 77 53 65 74 41 64 64 20 50  ode: RowSetAdd P
33b90 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79  1 P2 * * *.** Sy
33ba0 6e 6f 70 73 69 73 3a 20 72 6f 77 73 65 74 28 50  nopsis: rowset(P
33bb0 31 29 3d 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20 49  1)=r[P2].**.** I
33bc0 6e 73 65 72 74 20 74 68 65 20 69 6e 74 65 67 65  nsert the intege
33bd0 72 20 76 61 6c 75 65 20 68 65 6c 64 20 62 79 20  r value held by 
33be0 72 65 67 69 73 74 65 72 20 50 32 20 69 6e 74 6f  register P2 into
33bf0 20 61 20 52 6f 77 53 65 74 20 6f 62 6a 65 63 74   a RowSet object
33c00 0a 2a 2a 20 68 65 6c 64 20 69 6e 20 72 65 67 69  .** held in regi
33c10 73 74 65 72 20 50 31 2e 0a 2a 2a 0a 2a 2a 20 41  ster P1..**.** A
33c20 6e 20 61 73 73 65 72 74 69 6f 6e 20 66 61 69 6c  n assertion fail
33c30 73 20 69 66 20 50 32 20 69 73 20 6e 6f 74 20 61  s if P2 is not a
33c40 6e 20 69 6e 74 65 67 65 72 2e 0a 2a 2f 0a 63 61  n integer..*/.ca
33c50 73 65 20 4f 50 5f 52 6f 77 53 65 74 41 64 64 3a  se OP_RowSetAdd:
33c60 20 7b 20 20 20 20 20 20 20 2f 2a 20 69 6e 31 2c   {       /* in1,
33c70 20 69 6e 32 20 2a 2f 0a 20 20 70 49 6e 31 20 3d   in2 */.  pIn1 =
33c80 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b   &aMem[pOp->p1];
33c90 0a 20 20 70 49 6e 32 20 3d 20 26 61 4d 65 6d 5b  .  pIn2 = &aMem[
33ca0 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 61 73 73 65  pOp->p2];.  asse
33cb0 72 74 28 20 28 70 49 6e 32 2d 3e 66 6c 61 67 73  rt( (pIn2->flags
33cc0 20 26 20 4d 45 4d 5f 49 6e 74 29 21 3d 30 20 29   & MEM_Int)!=0 )
33cd0 3b 0a 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66  ;.  if( (pIn1->f
33ce0 6c 61 67 73 20 26 20 4d 45 4d 5f 42 6c 6f 62 29  lags & MEM_Blob)
33cf0 3d 3d 30 20 29 7b 0a 20 20 20 20 69 66 28 20 73  ==0 ){.    if( s
33d00 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74  qlite3VdbeMemSet
33d10 52 6f 77 53 65 74 28 70 49 6e 31 29 20 29 20 67  RowSet(pIn1) ) g
33d20 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a  oto no_mem;.  }.
33d30 20 20 61 73 73 65 72 74 28 20 73 71 6c 69 74 65    assert( sqlite
33d40 33 56 64 62 65 4d 65 6d 49 73 52 6f 77 53 65 74  3VdbeMemIsRowSet
33d50 28 70 49 6e 31 29 20 29 3b 0a 20 20 73 71 6c 69  (pIn1) );.  sqli
33d60 74 65 33 52 6f 77 53 65 74 49 6e 73 65 72 74 28  te3RowSetInsert(
33d70 28 52 6f 77 53 65 74 2a 29 70 49 6e 31 2d 3e 7a  (RowSet*)pIn1->z
33d80 2c 20 70 49 6e 32 2d 3e 75 2e 69 29 3b 0a 20 20  , pIn2->u.i);.  
33d90 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
33da0 6f 64 65 3a 20 52 6f 77 53 65 74 52 65 61 64 20  ode: RowSetRead 
33db0 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20  P1 P2 P3 * *.** 
33dc0 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 33 5d 3d  Synopsis: r[P3]=
33dd0 72 6f 77 73 65 74 28 50 31 29 0a 2a 2a 0a 2a 2a  rowset(P1).**.**
33de0 20 45 78 74 72 61 63 74 20 74 68 65 20 73 6d 61   Extract the sma
33df0 6c 6c 65 73 74 20 76 61 6c 75 65 20 66 72 6f 6d  llest value from
33e00 20 74 68 65 20 52 6f 77 53 65 74 20 6f 62 6a 65   the RowSet obje
33e10 63 74 20 69 6e 20 50 31 0a 2a 2a 20 61 6e 64 20  ct in P1.** and 
33e20 70 75 74 20 74 68 61 74 20 76 61 6c 75 65 20 69  put that value i
33e30 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 33 2e  nto register P3.
33e40 0a 2a 2a 20 4f 72 2c 20 69 66 20 52 6f 77 53 65  .** Or, if RowSe
33e50 74 20 6f 62 6a 65 63 74 20 50 31 20 69 73 20 69  t object P1 is i
33e60 6e 69 74 69 61 6c 6c 79 20 65 6d 70 74 79 2c 20  nitially empty, 
33e70 6c 65 61 76 65 20 50 33 0a 2a 2a 20 75 6e 63 68  leave P3.** unch
33e80 61 6e 67 65 64 20 61 6e 64 20 6a 75 6d 70 20 74  anged and jump t
33e90 6f 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 50 32  o instruction P2
33ea0 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 6f 77  ..*/.case OP_Row
33eb0 53 65 74 52 65 61 64 3a 20 7b 20 20 20 20 20 20  SetRead: {      
33ec0 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 2c 20 6f   /* jump, in1, o
33ed0 75 74 33 20 2a 2f 0a 20 20 69 36 34 20 76 61 6c  ut3 */.  i64 val
33ee0 3b 0a 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65  ;..  pIn1 = &aMe
33ef0 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  m[pOp->p1];.  as
33f00 73 65 72 74 28 20 28 70 49 6e 31 2d 3e 66 6c 61  sert( (pIn1->fla
33f10 67 73 20 26 20 4d 45 4d 5f 42 6c 6f 62 29 3d 3d  gs & MEM_Blob)==
33f20 30 20 7c 7c 20 73 71 6c 69 74 65 33 56 64 62 65  0 || sqlite3Vdbe
33f30 4d 65 6d 49 73 52 6f 77 53 65 74 28 70 49 6e 31  MemIsRowSet(pIn1
33f40 29 20 29 3b 0a 20 20 69 66 28 20 28 70 49 6e 31  ) );.  if( (pIn1
33f50 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 42 6c  ->flags & MEM_Bl
33f60 6f 62 29 3d 3d 30 20 0a 20 20 20 7c 7c 20 73 71  ob)==0 .   || sq
33f70 6c 69 74 65 33 52 6f 77 53 65 74 4e 65 78 74 28  lite3RowSetNext(
33f80 28 52 6f 77 53 65 74 2a 29 70 49 6e 31 2d 3e 7a  (RowSet*)pIn1->z
33f90 2c 20 26 76 61 6c 29 3d 3d 30 0a 20 20 29 7b 0a  , &val)==0.  ){.
33fa0 20 20 20 20 2f 2a 20 54 68 65 20 62 6f 6f 6c 65      /* The boole
33fb0 61 6e 20 69 6e 64 65 78 20 69 73 20 65 6d 70 74  an index is empt
33fc0 79 20 2a 2f 0a 20 20 20 20 73 71 6c 69 74 65 33  y */.    sqlite3
33fd0 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70  VdbeMemSetNull(p
33fe0 49 6e 31 29 3b 0a 20 20 20 20 56 64 62 65 42 72  In1);.    VdbeBr
33ff0 61 6e 63 68 54 61 6b 65 6e 28 31 2c 32 29 3b 0a  anchTaken(1,2);.
34000 20 20 20 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f      goto jump_to
34010 5f 70 32 5f 61 6e 64 5f 63 68 65 63 6b 5f 66 6f  _p2_and_check_fo
34020 72 5f 69 6e 74 65 72 72 75 70 74 3b 0a 20 20 7d  r_interrupt;.  }
34030 65 6c 73 65 7b 0a 20 20 20 20 2f 2a 20 41 20 76  else{.    /* A v
34040 61 6c 75 65 20 77 61 73 20 70 75 6c 6c 65 64 20  alue was pulled 
34050 66 72 6f 6d 20 74 68 65 20 69 6e 64 65 78 20 2a  from the index *
34060 2f 0a 20 20 20 20 56 64 62 65 42 72 61 6e 63 68  /.    VdbeBranch
34070 54 61 6b 65 6e 28 30 2c 32 29 3b 0a 20 20 20 20  Taken(0,2);.    
34080 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65  sqlite3VdbeMemSe
34090 74 49 6e 74 36 34 28 26 61 4d 65 6d 5b 70 4f 70  tInt64(&aMem[pOp
340a0 2d 3e 70 33 5d 2c 20 76 61 6c 29 3b 0a 20 20 7d  ->p3], val);.  }
340b0 0a 20 20 67 6f 74 6f 20 63 68 65 63 6b 5f 66 6f  .  goto check_fo
340c0 72 5f 69 6e 74 65 72 72 75 70 74 3b 0a 7d 0a 0a  r_interrupt;.}..
340d0 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 6f 77 53 65  /* Opcode: RowSe
340e0 74 54 65 73 74 20 50 31 20 50 32 20 50 33 20 50  tTest P1 P2 P3 P
340f0 34 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69  4.** Synopsis: i
34100 66 20 72 5b 50 33 5d 20 69 6e 20 72 6f 77 73 65  f r[P3] in rowse
34110 74 28 50 31 29 20 67 6f 74 6f 20 50 32 0a 2a 2a  t(P1) goto P2.**
34120 0a 2a 2a 20 52 65 67 69 73 74 65 72 20 50 33 20  .** Register P3 
34130 69 73 20 61 73 73 75 6d 65 64 20 74 6f 20 68 6f  is assumed to ho
34140 6c 64 20 61 20 36 34 2d 62 69 74 20 69 6e 74 65  ld a 64-bit inte
34150 67 65 72 20 76 61 6c 75 65 2e 20 49 66 20 72 65  ger value. If re
34160 67 69 73 74 65 72 20 50 31 0a 2a 2a 20 63 6f 6e  gister P1.** con
34170 74 61 69 6e 73 20 61 20 52 6f 77 53 65 74 20 6f  tains a RowSet o
34180 62 6a 65 63 74 20 61 6e 64 20 74 68 61 74 20 52  bject and that R
34190 6f 77 53 65 74 20 6f 62 6a 65 63 74 20 63 6f 6e  owSet object con
341a0 74 61 69 6e 73 0a 2a 2a 20 74 68 65 20 76 61 6c  tains.** the val
341b0 75 65 20 68 65 6c 64 20 69 6e 20 50 33 2c 20 6a  ue held in P3, j
341c0 75 6d 70 20 74 6f 20 72 65 67 69 73 74 65 72 20  ump to register 
341d0 50 32 2e 20 4f 74 68 65 72 77 69 73 65 2c 20 69  P2. Otherwise, i
341e0 6e 73 65 72 74 20 74 68 65 0a 2a 2a 20 69 6e 74  nsert the.** int
341f0 65 67 65 72 20 69 6e 20 50 33 20 69 6e 74 6f 20  eger in P3 into 
34200 74 68 65 20 52 6f 77 53 65 74 20 61 6e 64 20 63  the RowSet and c
34210 6f 6e 74 69 6e 75 65 20 6f 6e 20 74 6f 20 74 68  ontinue on to th
34220 65 0a 2a 2a 20 6e 65 78 74 20 6f 70 63 6f 64 65  e.** next opcode
34230 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 52 6f 77 53  ..**.** The RowS
34240 65 74 20 6f 62 6a 65 63 74 20 69 73 20 6f 70 74  et object is opt
34250 69 6d 69 7a 65 64 20 66 6f 72 20 74 68 65 20 63  imized for the c
34260 61 73 65 20 77 68 65 72 65 20 73 65 74 73 20 6f  ase where sets o
34270 66 20 69 6e 74 65 67 65 72 73 0a 2a 2a 20 61 72  f integers.** ar
34280 65 20 69 6e 73 65 72 74 65 64 20 69 6e 20 64 69  e inserted in di
34290 73 74 69 6e 63 74 20 70 68 61 73 65 73 2c 20 77  stinct phases, w
342a0 68 69 63 68 20 65 61 63 68 20 73 65 74 20 63 6f  hich each set co
342b0 6e 74 61 69 6e 73 20 6e 6f 20 64 75 70 6c 69 63  ntains no duplic
342c0 61 74 65 73 2e 0a 2a 2a 20 45 61 63 68 20 73 65  ates..** Each se
342d0 74 20 69 73 20 69 64 65 6e 74 69 66 69 65 64 20  t is identified 
342e0 62 79 20 61 20 75 6e 69 71 75 65 20 50 34 20 76  by a unique P4 v
342f0 61 6c 75 65 2e 20 54 68 65 20 66 69 72 73 74 20  alue. The first 
34300 73 65 74 0a 2a 2a 20 6d 75 73 74 20 68 61 76 65  set.** must have
34310 20 50 34 3d 3d 30 2c 20 74 68 65 20 66 69 6e 61   P4==0, the fina
34320 6c 20 73 65 74 20 6d 75 73 74 20 68 61 76 65 20  l set must have 
34330 50 34 3d 3d 2d 31 2c 20 61 6e 64 20 66 6f 72 20  P4==-1, and for 
34340 61 6c 6c 20 6f 74 68 65 72 20 73 65 74 73 0a 2a  all other sets.*
34350 2a 20 6d 75 73 74 20 68 61 76 65 20 50 34 3e 30  * must have P4>0
34360 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 61 6c 6c  ..**.** This all
34370 6f 77 73 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e  ows optimization
34380 73 3a 20 28 61 29 20 77 68 65 6e 20 50 34 3d 3d  s: (a) when P4==
34390 30 20 74 68 65 72 65 20 69 73 20 6e 6f 20 6e 65  0 there is no ne
343a0 65 64 20 74 6f 20 74 65 73 74 0a 2a 2a 20 74 68  ed to test.** th
343b0 65 20 52 6f 77 53 65 74 20 6f 62 6a 65 63 74 20  e RowSet object 
343c0 66 6f 72 20 50 33 2c 20 61 73 20 69 74 20 69 73  for P3, as it is
343d0 20 67 75 61 72 61 6e 74 65 65 64 20 6e 6f 74 20   guaranteed not 
343e0 74 6f 20 63 6f 6e 74 61 69 6e 20 69 74 2c 0a 2a  to contain it,.*
343f0 2a 20 28 62 29 20 77 68 65 6e 20 50 34 3d 3d 2d  * (b) when P4==-
34400 31 20 74 68 65 72 65 20 69 73 20 6e 6f 20 6e 65  1 there is no ne
34410 65 64 20 74 6f 20 69 6e 73 65 72 74 20 74 68 65  ed to insert the
34420 20 76 61 6c 75 65 2c 20 61 73 20 69 74 20 77 69   value, as it wi
34430 6c 6c 0a 2a 2a 20 6e 65 76 65 72 20 62 65 20 74  ll.** never be t
34440 65 73 74 65 64 20 66 6f 72 2c 20 61 6e 64 20 28  ested for, and (
34450 63 29 20 77 68 65 6e 20 61 20 76 61 6c 75 65 20  c) when a value 
34460 74 68 61 74 20 69 73 20 70 61 72 74 20 6f 66 20  that is part of 
34470 73 65 74 20 58 20 69 73 0a 2a 2a 20 69 6e 73 65  set X is.** inse
34480 72 74 65 64 2c 20 74 68 65 72 65 20 69 73 20 6e  rted, there is n
34490 6f 20 6e 65 65 64 20 74 6f 20 73 65 61 72 63 68  o need to search
344a0 20 74 6f 20 73 65 65 20 69 66 20 74 68 65 20 73   to see if the s
344b0 61 6d 65 20 76 61 6c 75 65 20 77 61 73 0a 2a 2a  ame value was.**
344c0 20 70 72 65 76 69 6f 75 73 6c 79 20 69 6e 73 65   previously inse
344d0 72 74 65 64 20 61 73 20 70 61 72 74 20 6f 66 20  rted as part of 
344e0 73 65 74 20 58 20 28 6f 6e 6c 79 20 69 66 20 69  set X (only if i
344f0 74 20 77 61 73 20 70 72 65 76 69 6f 75 73 6c 79  t was previously
34500 0a 2a 2a 20 69 6e 73 65 72 74 65 64 20 61 73 20  .** inserted as 
34510 70 61 72 74 20 6f 66 20 73 6f 6d 65 20 6f 74 68  part of some oth
34520 65 72 20 73 65 74 29 2e 0a 2a 2f 0a 63 61 73 65  er set)..*/.case
34530 20 4f 50 5f 52 6f 77 53 65 74 54 65 73 74 3a 20   OP_RowSetTest: 
34540 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  {               
34550 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69        /* jump, i
34560 6e 31 2c 20 69 6e 33 20 2a 2f 0a 20 20 69 6e 74  n1, in3 */.  int
34570 20 69 53 65 74 3b 0a 20 20 69 6e 74 20 65 78 69   iSet;.  int exi
34580 73 74 73 3b 0a 0a 20 20 70 49 6e 31 20 3d 20 26  sts;..  pIn1 = &
34590 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  aMem[pOp->p1];. 
345a0 20 70 49 6e 33 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn3 = &aMem[pO
345b0 70 2d 3e 70 33 5d 3b 0a 20 20 69 53 65 74 20 3d  p->p3];.  iSet =
345c0 20 70 4f 70 2d 3e 70 34 2e 69 3b 0a 20 20 61 73   pOp->p4.i;.  as
345d0 73 65 72 74 28 20 70 49 6e 33 2d 3e 66 6c 61 67  sert( pIn3->flag
345e0 73 26 4d 45 4d 5f 49 6e 74 20 29 3b 0a 0a 20 20  s&MEM_Int );..  
345f0 2f 2a 20 49 66 20 74 68 65 72 65 20 69 73 20 61  /* If there is a
34600 6e 79 74 68 69 6e 67 20 6f 74 68 65 72 20 74 68  nything other th
34610 61 6e 20 61 20 72 6f 77 73 65 74 20 6f 62 6a 65  an a rowset obje
34620 63 74 20 69 6e 20 6d 65 6d 6f 72 79 20 63 65 6c  ct in memory cel
34630 6c 20 50 31 2c 0a 20 20 2a 2a 20 64 65 6c 65 74  l P1,.  ** delet
34640 65 20 69 74 20 6e 6f 77 20 61 6e 64 20 69 6e 69  e it now and ini
34650 74 69 61 6c 69 7a 65 20 50 31 20 77 69 74 68 20  tialize P1 with 
34660 61 6e 20 65 6d 70 74 79 20 72 6f 77 73 65 74 0a  an empty rowset.
34670 20 20 2a 2f 0a 20 20 69 66 28 20 28 70 49 6e 31    */.  if( (pIn1
34680 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 42 6c  ->flags & MEM_Bl
34690 6f 62 29 3d 3d 30 20 29 7b 0a 20 20 20 20 69 66  ob)==0 ){.    if
346a0 28 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d  ( sqlite3VdbeMem
346b0 53 65 74 52 6f 77 53 65 74 28 70 49 6e 31 29 20  SetRowSet(pIn1) 
346c0 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20  ) goto no_mem;. 
346d0 20 7d 0a 20 20 61 73 73 65 72 74 28 20 73 71 6c   }.  assert( sql
346e0 69 74 65 33 56 64 62 65 4d 65 6d 49 73 52 6f 77  ite3VdbeMemIsRow
346f0 53 65 74 28 70 49 6e 31 29 20 29 3b 0a 20 20 61  Set(pIn1) );.  a
34700 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79  ssert( pOp->p4ty
34710 70 65 3d 3d 50 34 5f 49 4e 54 33 32 20 29 3b 0a  pe==P4_INT32 );.
34720 20 20 61 73 73 65 72 74 28 20 69 53 65 74 3d 3d    assert( iSet==
34730 2d 31 20 7c 7c 20 69 53 65 74 3e 3d 30 20 29 3b  -1 || iSet>=0 );
34740 0a 20 20 69 66 28 20 69 53 65 74 20 29 7b 0a 20  .  if( iSet ){. 
34750 20 20 20 65 78 69 73 74 73 20 3d 20 73 71 6c 69     exists = sqli
34760 74 65 33 52 6f 77 53 65 74 54 65 73 74 28 28 52  te3RowSetTest((R
34770 6f 77 53 65 74 2a 29 70 49 6e 31 2d 3e 7a 2c 20  owSet*)pIn1->z, 
34780 69 53 65 74 2c 20 70 49 6e 33 2d 3e 75 2e 69 29  iSet, pIn3->u.i)
34790 3b 0a 20 20 20 20 56 64 62 65 42 72 61 6e 63 68  ;.    VdbeBranch
347a0 54 61 6b 65 6e 28 65 78 69 73 74 73 21 3d 30 2c  Taken(exists!=0,
347b0 32 29 3b 0a 20 20 20 20 69 66 28 20 65 78 69 73  2);.    if( exis
347c0 74 73 20 29 20 67 6f 74 6f 20 6a 75 6d 70 5f 74  ts ) goto jump_t
347d0 6f 5f 70 32 3b 0a 20 20 7d 0a 20 20 69 66 28 20  o_p2;.  }.  if( 
347e0 69 53 65 74 3e 3d 30 20 29 7b 0a 20 20 20 20 73  iSet>=0 ){.    s
347f0 71 6c 69 74 65 33 52 6f 77 53 65 74 49 6e 73 65  qlite3RowSetInse
34800 72 74 28 28 52 6f 77 53 65 74 2a 29 70 49 6e 31  rt((RowSet*)pIn1
34810 2d 3e 7a 2c 20 70 49 6e 33 2d 3e 75 2e 69 29 3b  ->z, pIn3->u.i);
34820 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
34830 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
34840 5f 4f 4d 49 54 5f 54 52 49 47 47 45 52 0a 0a 2f  _OMIT_TRIGGER../
34850 2a 20 4f 70 63 6f 64 65 3a 20 50 72 6f 67 72 61  * Opcode: Progra
34860 6d 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35  m P1 P2 P3 P4 P5
34870 0a 2a 2a 0a 2a 2a 20 45 78 65 63 75 74 65 20 74  .**.** Execute t
34880 68 65 20 74 72 69 67 67 65 72 20 70 72 6f 67 72  he trigger progr
34890 61 6d 20 70 61 73 73 65 64 20 61 73 20 50 34 20  am passed as P4 
348a0 28 74 79 70 65 20 50 34 5f 53 55 42 50 52 4f 47  (type P4_SUBPROG
348b0 52 41 4d 29 2e 20 0a 2a 2a 0a 2a 2a 20 50 31 20  RAM). .**.** P1 
348c0 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 61 64 64  contains the add
348d0 72 65 73 73 20 6f 66 20 74 68 65 20 6d 65 6d 6f  ress of the memo
348e0 72 79 20 63 65 6c 6c 20 74 68 61 74 20 63 6f 6e  ry cell that con
348f0 74 61 69 6e 73 20 74 68 65 20 66 69 72 73 74 20  tains the first 
34900 6d 65 6d 6f 72 79 20 0a 2a 2a 20 63 65 6c 6c 20  memory .** cell 
34910 69 6e 20 61 6e 20 61 72 72 61 79 20 6f 66 20 76  in an array of v
34920 61 6c 75 65 73 20 75 73 65 64 20 61 73 20 61 72  alues used as ar
34930 67 75 6d 65 6e 74 73 20 74 6f 20 74 68 65 20 73  guments to the s
34940 75 62 2d 70 72 6f 67 72 61 6d 2e 20 50 32 20 0a  ub-program. P2 .
34950 2a 2a 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20  ** contains the 
34960 61 64 64 72 65 73 73 20 74 6f 20 6a 75 6d 70 20  address to jump 
34970 74 6f 20 69 66 20 74 68 65 20 73 75 62 2d 70 72  to if the sub-pr
34980 6f 67 72 61 6d 20 74 68 72 6f 77 73 20 61 6e 20  ogram throws an 
34990 49 47 4e 4f 52 45 20 0a 2a 2a 20 65 78 63 65 70  IGNORE .** excep
349a0 74 69 6f 6e 20 75 73 69 6e 67 20 74 68 65 20 52  tion using the R
349b0 41 49 53 45 28 29 20 66 75 6e 63 74 69 6f 6e 2e  AISE() function.
349c0 20 52 65 67 69 73 74 65 72 20 50 33 20 63 6f 6e   Register P3 con
349d0 74 61 69 6e 73 20 74 68 65 20 61 64 64 72 65 73  tains the addres
349e0 73 20 0a 2a 2a 20 6f 66 20 61 20 6d 65 6d 6f 72  s .** of a memor
349f0 79 20 63 65 6c 6c 20 69 6e 20 74 68 69 73 20 28  y cell in this (
34a00 74 68 65 20 70 61 72 65 6e 74 29 20 56 4d 20 74  the parent) VM t
34a10 68 61 74 20 69 73 20 75 73 65 64 20 74 6f 20 61  hat is used to a
34a20 6c 6c 6f 63 61 74 65 20 74 68 65 20 0a 2a 2a 20  llocate the .** 
34a30 6d 65 6d 6f 72 79 20 72 65 71 75 69 72 65 64 20  memory required 
34a40 62 79 20 74 68 65 20 73 75 62 2d 76 64 62 65 20  by the sub-vdbe 
34a50 61 74 20 72 75 6e 74 69 6d 65 2e 0a 2a 2a 0a 2a  at runtime..**.*
34a60 2a 20 50 34 20 69 73 20 61 20 70 6f 69 6e 74 65  * P4 is a pointe
34a70 72 20 74 6f 20 74 68 65 20 56 4d 20 63 6f 6e 74  r to the VM cont
34a80 61 69 6e 69 6e 67 20 74 68 65 20 74 72 69 67 67  aining the trigg
34a90 65 72 20 70 72 6f 67 72 61 6d 2e 0a 2a 2a 0a 2a  er program..**.*
34aa0 2a 20 49 66 20 50 35 20 69 73 20 6e 6f 6e 2d 7a  * If P5 is non-z
34ab0 65 72 6f 2c 20 74 68 65 6e 20 72 65 63 75 72 73  ero, then recurs
34ac0 69 76 65 20 70 72 6f 67 72 61 6d 20 69 6e 76 6f  ive program invo
34ad0 63 61 74 69 6f 6e 20 69 73 20 65 6e 61 62 6c 65  cation is enable
34ae0 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 50 72  d..*/.case OP_Pr
34af0 6f 67 72 61 6d 3a 20 7b 20 20 20 20 20 20 20 20  ogram: {        
34b00 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 69 6e 74  /* jump */.  int
34b10 20 6e 4d 65 6d 3b 20 20 20 20 20 20 20 20 20 20   nMem;          
34b20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
34b30 66 20 6d 65 6d 6f 72 79 20 72 65 67 69 73 74 65  f memory registe
34b40 72 73 20 66 6f 72 20 73 75 62 2d 70 72 6f 67 72  rs for sub-progr
34b50 61 6d 20 2a 2f 0a 20 20 69 6e 74 20 6e 42 79 74  am */.  int nByt
34b60 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e;              
34b70 2f 2a 20 42 79 74 65 73 20 6f 66 20 72 75 6e 74  /* Bytes of runt
34b80 69 6d 65 20 73 70 61 63 65 20 72 65 71 75 69 72  ime space requir
34b90 65 64 20 66 6f 72 20 73 75 62 2d 70 72 6f 67 72  ed for sub-progr
34ba0 61 6d 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 52 74  am */.  Mem *pRt
34bb0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
34bc0 2f 2a 20 52 65 67 69 73 74 65 72 20 74 6f 20 61  /* Register to a
34bd0 6c 6c 6f 63 61 74 65 20 72 75 6e 74 69 6d 65 20  llocate runtime 
34be0 73 70 61 63 65 20 2a 2f 0a 20 20 4d 65 6d 20 2a  space */.  Mem *
34bf0 70 4d 65 6d 3b 20 20 20 20 20 20 20 20 20 20 20  pMem;           
34c00 20 20 20 2f 2a 20 55 73 65 64 20 74 6f 20 69 74     /* Used to it
34c10 65 72 61 74 65 20 74 68 72 6f 75 67 68 20 6d 65  erate through me
34c20 6d 6f 72 79 20 63 65 6c 6c 73 20 2a 2f 0a 20 20  mory cells */.  
34c30 4d 65 6d 20 2a 70 45 6e 64 3b 20 20 20 20 20 20  Mem *pEnd;      
34c40 20 20 20 20 20 20 20 20 2f 2a 20 4c 61 73 74 20          /* Last 
34c50 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 69 6e 20 6e  memory cell in n
34c60 65 77 20 61 72 72 61 79 20 2a 2f 0a 20 20 56 64  ew array */.  Vd
34c70 62 65 46 72 61 6d 65 20 2a 70 46 72 61 6d 65 3b  beFrame *pFrame;
34c80 20 20 20 20 20 20 2f 2a 20 4e 65 77 20 76 64 62        /* New vdb
34c90 65 20 66 72 61 6d 65 20 74 6f 20 65 78 65 63 75  e frame to execu
34ca0 74 65 20 69 6e 20 2a 2f 0a 20 20 53 75 62 50 72  te in */.  SubPr
34cb0 6f 67 72 61 6d 20 2a 70 50 72 6f 67 72 61 6d 3b  ogram *pProgram;
34cc0 20 20 20 2f 2a 20 53 75 62 2d 70 72 6f 67 72 61     /* Sub-progra
34cd0 6d 20 74 6f 20 65 78 65 63 75 74 65 20 2a 2f 0a  m to execute */.
34ce0 20 20 76 6f 69 64 20 2a 74 3b 20 20 20 20 20 20    void *t;      
34cf0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 6f 6b            /* Tok
34d00 65 6e 20 69 64 65 6e 74 69 66 79 69 6e 67 20 74  en identifying t
34d10 72 69 67 67 65 72 20 2a 2f 0a 0a 20 20 70 50 72  rigger */..  pPr
34d20 6f 67 72 61 6d 20 3d 20 70 4f 70 2d 3e 70 34 2e  ogram = pOp->p4.
34d30 70 50 72 6f 67 72 61 6d 3b 0a 20 20 70 52 74 20  pProgram;.  pRt 
34d40 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  = &aMem[pOp->p3]
34d50 3b 0a 20 20 61 73 73 65 72 74 28 20 70 50 72 6f  ;.  assert( pPro
34d60 67 72 61 6d 2d 3e 6e 4f 70 3e 30 20 29 3b 0a 20  gram->nOp>0 );. 
34d70 20 0a 20 20 2f 2a 20 49 66 20 74 68 65 20 70 35   .  /* If the p5
34d80 20 66 6c 61 67 20 69 73 20 63 6c 65 61 72 2c 20   flag is clear, 
34d90 74 68 65 6e 20 72 65 63 75 72 73 69 76 65 20 69  then recursive i
34da0 6e 76 6f 63 61 74 69 6f 6e 20 6f 66 20 74 72 69  nvocation of tri
34db0 67 67 65 72 73 20 69 73 20 0a 20 20 2a 2a 20 64  ggers is .  ** d
34dc0 69 73 61 62 6c 65 64 20 66 6f 72 20 62 61 63 6b  isabled for back
34dd0 77 61 72 64 73 20 63 6f 6d 70 61 74 69 62 69 6c  wards compatibil
34de0 69 74 79 20 28 70 35 20 69 73 20 73 65 74 20 69  ity (p5 is set i
34df0 66 20 74 68 69 73 20 73 75 62 2d 70 72 6f 67 72  f this sub-progr
34e00 61 6d 0a 20 20 2a 2a 20 69 73 20 72 65 61 6c 6c  am.  ** is reall
34e10 79 20 61 20 74 72 69 67 67 65 72 2c 20 6e 6f 74  y a trigger, not
34e20 20 61 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 61   a foreign key a
34e30 63 74 69 6f 6e 2c 20 61 6e 64 20 74 68 65 20 66  ction, and the f
34e40 6c 61 67 20 73 65 74 0a 20 20 2a 2a 20 61 6e 64  lag set.  ** and
34e50 20 63 6c 65 61 72 65 64 20 62 79 20 74 68 65 20   cleared by the 
34e60 22 50 52 41 47 4d 41 20 72 65 63 75 72 73 69 76  "PRAGMA recursiv
34e70 65 5f 74 72 69 67 67 65 72 73 22 20 63 6f 6d 6d  e_triggers" comm
34e80 61 6e 64 20 69 73 20 63 6c 65 61 72 29 2e 0a 20  and is clear).. 
34e90 20 2a 2a 20 0a 20 20 2a 2a 20 49 74 20 69 73 20   ** .  ** It is 
34ea0 72 65 63 75 72 73 69 76 65 20 69 6e 76 6f 63 61  recursive invoca
34eb0 74 69 6f 6e 20 6f 66 20 74 72 69 67 67 65 72 73  tion of triggers
34ec0 2c 20 61 74 20 74 68 65 20 53 51 4c 20 6c 65 76  , at the SQL lev
34ed0 65 6c 2c 20 74 68 61 74 20 69 73 20 0a 20 20 2a  el, that is .  *
34ee0 2a 20 64 69 73 61 62 6c 65 64 2e 20 49 6e 20 73  * disabled. In s
34ef0 6f 6d 65 20 63 61 73 65 73 20 61 20 73 69 6e 67  ome cases a sing
34f00 6c 65 20 74 72 69 67 67 65 72 20 6d 61 79 20 67  le trigger may g
34f10 65 6e 65 72 61 74 65 20 6d 6f 72 65 20 74 68 61  enerate more tha
34f20 6e 20 6f 6e 65 20 0a 20 20 2a 2a 20 53 75 62 50  n one .  ** SubP
34f30 72 6f 67 72 61 6d 20 28 69 66 20 74 68 65 20 74  rogram (if the t
34f40 72 69 67 67 65 72 20 6d 61 79 20 62 65 20 65 78  rigger may be ex
34f50 65 63 75 74 65 64 20 77 69 74 68 20 6d 6f 72 65  ecuted with more
34f60 20 74 68 61 6e 20 6f 6e 65 20 64 69 66 66 65 72   than one differ
34f70 65 6e 74 20 0a 20 20 2a 2a 20 4f 4e 20 43 4f 4e  ent .  ** ON CON
34f80 46 4c 49 43 54 20 61 6c 67 6f 72 69 74 68 6d 29  FLICT algorithm)
34f90 2e 20 53 75 62 50 72 6f 67 72 61 6d 20 73 74 72  . SubProgram str
34fa0 75 63 74 75 72 65 73 20 61 73 73 6f 63 69 61 74  uctures associat
34fb0 65 64 20 77 69 74 68 20 61 0a 20 20 2a 2a 20 73  ed with a.  ** s
34fc0 69 6e 67 6c 65 20 74 72 69 67 67 65 72 20 61 6c  ingle trigger al
34fd0 6c 20 68 61 76 65 20 74 68 65 20 73 61 6d 65 20  l have the same 
34fe0 76 61 6c 75 65 20 66 6f 72 20 74 68 65 20 53 75  value for the Su
34ff0 62 50 72 6f 67 72 61 6d 2e 74 6f 6b 65 6e 20 0a  bProgram.token .
35000 20 20 2a 2a 20 76 61 72 69 61 62 6c 65 2e 20 20    ** variable.  
35010 2a 2f 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 35  */.  if( pOp->p5
35020 20 29 7b 0a 20 20 20 20 74 20 3d 20 70 50 72 6f   ){.    t = pPro
35030 67 72 61 6d 2d 3e 74 6f 6b 65 6e 3b 0a 20 20 20  gram->token;.   
35040 20 66 6f 72 28 70 46 72 61 6d 65 3d 70 2d 3e 70   for(pFrame=p->p
35050 46 72 61 6d 65 3b 20 70 46 72 61 6d 65 20 26 26  Frame; pFrame &&
35060 20 70 46 72 61 6d 65 2d 3e 74 6f 6b 65 6e 21 3d   pFrame->token!=
35070 74 3b 20 70 46 72 61 6d 65 3d 70 46 72 61 6d 65  t; pFrame=pFrame
35080 2d 3e 70 50 61 72 65 6e 74 29 3b 0a 20 20 20 20  ->pParent);.    
35090 69 66 28 20 70 46 72 61 6d 65 20 29 20 62 72 65  if( pFrame ) bre
350a0 61 6b 3b 0a 20 20 7d 0a 0a 20 20 69 66 28 20 70  ak;.  }..  if( p
350b0 2d 3e 6e 46 72 61 6d 65 3e 3d 64 62 2d 3e 61 4c  ->nFrame>=db->aL
350c0 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4c 49 4d 49  imit[SQLITE_LIMI
350d0 54 5f 54 52 49 47 47 45 52 5f 44 45 50 54 48 5d  T_TRIGGER_DEPTH]
350e0 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c   ){.    rc = SQL
350f0 49 54 45 5f 45 52 52 4f 52 3b 0a 20 20 20 20 73  ITE_ERROR;.    s
35100 71 6c 69 74 65 33 56 64 62 65 45 72 72 6f 72 28  qlite3VdbeError(
35110 70 2c 20 22 74 6f 6f 20 6d 61 6e 79 20 6c 65 76  p, "too many lev
35120 65 6c 73 20 6f 66 20 74 72 69 67 67 65 72 20 72  els of trigger r
35130 65 63 75 72 73 69 6f 6e 22 29 3b 0a 20 20 20 20  ecursion");.    
35140 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
35150 6f 5f 65 72 72 6f 72 3b 0a 20 20 7d 0a 0a 20 20  o_error;.  }..  
35160 2f 2a 20 52 65 67 69 73 74 65 72 20 70 52 74 20  /* Register pRt 
35170 69 73 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65  is used to store
35180 20 74 68 65 20 6d 65 6d 6f 72 79 20 72 65 71 75   the memory requ
35190 69 72 65 64 20 74 6f 20 73 61 76 65 20 74 68 65  ired to save the
351a0 20 73 74 61 74 65 0a 20 20 2a 2a 20 6f 66 20 74   state.  ** of t
351b0 68 65 20 63 75 72 72 65 6e 74 20 70 72 6f 67 72  he current progr
351c0 61 6d 2c 20 61 6e 64 20 74 68 65 20 6d 65 6d 6f  am, and the memo
351d0 72 79 20 72 65 71 75 69 72 65 64 20 61 74 20 72  ry required at r
351e0 75 6e 74 69 6d 65 20 74 6f 20 65 78 65 63 75 74  untime to execut
351f0 65 0a 20 20 2a 2a 20 74 68 65 20 74 72 69 67 67  e.  ** the trigg
35200 65 72 20 70 72 6f 67 72 61 6d 2e 20 49 66 20 74  er program. If t
35210 68 69 73 20 74 72 69 67 67 65 72 20 68 61 73 20  his trigger has 
35220 62 65 65 6e 20 66 69 72 65 64 20 62 65 66 6f 72  been fired befor
35230 65 2c 20 74 68 65 6e 20 70 52 74 20 0a 20 20 2a  e, then pRt .  *
35240 2a 20 69 73 20 61 6c 72 65 61 64 79 20 61 6c 6c  * is already all
35250 6f 63 61 74 65 64 2e 20 4f 74 68 65 72 77 69 73  ocated. Otherwis
35260 65 2c 20 69 74 20 6d 75 73 74 20 62 65 20 69 6e  e, it must be in
35270 69 74 69 61 6c 69 7a 65 64 2e 20 20 2a 2f 0a 20  itialized.  */. 
35280 20 69 66 28 20 28 70 52 74 2d 3e 66 6c 61 67 73   if( (pRt->flags
35290 26 4d 45 4d 5f 42 6c 6f 62 29 3d 3d 30 20 29 7b  &MEM_Blob)==0 ){
352a0 0a 20 20 20 20 2f 2a 20 53 75 62 50 72 6f 67 72  .    /* SubProgr
352b0 61 6d 2e 6e 4d 65 6d 20 69 73 20 73 65 74 20 74  am.nMem is set t
352c0 6f 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  o the number of 
352d0 6d 65 6d 6f 72 79 20 63 65 6c 6c 73 20 75 73 65  memory cells use
352e0 64 20 62 79 20 74 68 65 20 0a 20 20 20 20 2a 2a  d by the .    **
352f0 20 70 72 6f 67 72 61 6d 20 73 74 6f 72 65 64 20   program stored 
35300 69 6e 20 53 75 62 50 72 6f 67 72 61 6d 2e 61 4f  in SubProgram.aO
35310 70 2e 20 41 73 20 77 65 6c 6c 20 61 73 20 74 68  p. As well as th
35320 65 73 65 2c 20 6f 6e 65 20 6d 65 6d 6f 72 79 0a  ese, one memory.
35330 20 20 20 20 2a 2a 20 63 65 6c 6c 20 69 73 20 72      ** cell is r
35340 65 71 75 69 72 65 64 20 66 6f 72 20 65 61 63 68  equired for each
35350 20 63 75 72 73 6f 72 20 75 73 65 64 20 62 79 20   cursor used by 
35360 74 68 65 20 70 72 6f 67 72 61 6d 2e 20 53 65 74  the program. Set
35370 20 6c 6f 63 61 6c 0a 20 20 20 20 2a 2a 20 76 61   local.    ** va
35380 72 69 61 62 6c 65 20 6e 4d 65 6d 20 28 61 6e 64  riable nMem (and
35390 20 6c 61 74 65 72 2c 20 56 64 62 65 46 72 61 6d   later, VdbeFram
353a0 65 2e 6e 43 68 69 6c 64 4d 65 6d 29 20 74 6f 20  e.nChildMem) to 
353b0 74 68 69 73 20 76 61 6c 75 65 2e 0a 20 20 20 20  this value..    
353c0 2a 2f 0a 20 20 20 20 6e 4d 65 6d 20 3d 20 70 50  */.    nMem = pP
353d0 72 6f 67 72 61 6d 2d 3e 6e 4d 65 6d 20 2b 20 70  rogram->nMem + p
353e0 50 72 6f 67 72 61 6d 2d 3e 6e 43 73 72 3b 0a 20  Program->nCsr;. 
353f0 20 20 20 61 73 73 65 72 74 28 20 6e 4d 65 6d 3e     assert( nMem>
35400 30 20 29 3b 0a 20 20 20 20 69 66 28 20 70 50 72  0 );.    if( pPr
35410 6f 67 72 61 6d 2d 3e 6e 43 73 72 3d 3d 30 20 29  ogram->nCsr==0 )
35420 20 6e 4d 65 6d 2b 2b 3b 0a 20 20 20 20 6e 42 79   nMem++;.    nBy
35430 74 65 20 3d 20 52 4f 55 4e 44 38 28 73 69 7a 65  te = ROUND8(size
35440 6f 66 28 56 64 62 65 46 72 61 6d 65 29 29 0a 20  of(VdbeFrame)). 
35450 20 20 20 20 20 20 20 20 20 20 20 20 20 2b 20 6e               + n
35460 4d 65 6d 20 2a 20 73 69 7a 65 6f 66 28 4d 65 6d  Mem * sizeof(Mem
35470 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ).              
35480 2b 20 70 50 72 6f 67 72 61 6d 2d 3e 6e 43 73 72  + pProgram->nCsr
35490 20 2a 20 73 69 7a 65 6f 66 28 56 64 62 65 43 75   * sizeof(VdbeCu
354a0 72 73 6f 72 2a 29 0a 20 20 20 20 20 20 20 20 20  rsor*).         
354b0 20 20 20 20 20 2b 20 28 70 50 72 6f 67 72 61 6d       + (pProgram
354c0 2d 3e 6e 4f 70 20 2b 20 37 29 2f 38 3b 0a 20 20  ->nOp + 7)/8;.  
354d0 20 20 70 46 72 61 6d 65 20 3d 20 73 71 6c 69 74    pFrame = sqlit
354e0 65 33 44 62 4d 61 6c 6c 6f 63 5a 65 72 6f 28 64  e3DbMallocZero(d
354f0 62 2c 20 6e 42 79 74 65 29 3b 0a 20 20 20 20 69  b, nByte);.    i
35500 66 28 20 21 70 46 72 61 6d 65 20 29 7b 0a 20 20  f( !pFrame ){.  
35510 20 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b      goto no_mem;
35520 0a 20 20 20 20 7d 0a 20 20 20 20 73 71 6c 69 74  .    }.    sqlit
35530 65 33 56 64 62 65 4d 65 6d 52 65 6c 65 61 73 65  e3VdbeMemRelease
35540 28 70 52 74 29 3b 0a 20 20 20 20 70 52 74 2d 3e  (pRt);.    pRt->
35550 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 42 6c 6f 62  flags = MEM_Blob
35560 7c 4d 45 4d 5f 44 79 6e 3b 0a 20 20 20 20 70 52  |MEM_Dyn;.    pR
35570 74 2d 3e 7a 20 3d 20 28 63 68 61 72 2a 29 70 46  t->z = (char*)pF
35580 72 61 6d 65 3b 0a 20 20 20 20 70 52 74 2d 3e 6e  rame;.    pRt->n
35590 20 3d 20 6e 42 79 74 65 3b 0a 20 20 20 20 70 52   = nByte;.    pR
355a0 74 2d 3e 78 44 65 6c 20 3d 20 73 71 6c 69 74 65  t->xDel = sqlite
355b0 33 56 64 62 65 46 72 61 6d 65 4d 65 6d 44 65 6c  3VdbeFrameMemDel
355c0 3b 0a 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 76  ;..    pFrame->v
355d0 20 3d 20 70 3b 0a 20 20 20 20 70 46 72 61 6d 65   = p;.    pFrame
355e0 2d 3e 6e 43 68 69 6c 64 4d 65 6d 20 3d 20 6e 4d  ->nChildMem = nM
355f0 65 6d 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e  em;.    pFrame->
35600 6e 43 68 69 6c 64 43 73 72 20 3d 20 70 50 72 6f  nChildCsr = pPro
35610 67 72 61 6d 2d 3e 6e 43 73 72 3b 0a 20 20 20 20  gram->nCsr;.    
35620 70 46 72 61 6d 65 2d 3e 70 63 20 3d 20 28 69 6e  pFrame->pc = (in
35630 74 29 28 70 4f 70 20 2d 20 61 4f 70 29 3b 0a 20  t)(pOp - aOp);. 
35640 20 20 20 70 46 72 61 6d 65 2d 3e 61 4d 65 6d 20     pFrame->aMem 
35650 3d 20 70 2d 3e 61 4d 65 6d 3b 0a 20 20 20 20 70  = p->aMem;.    p
35660 46 72 61 6d 65 2d 3e 6e 4d 65 6d 20 3d 20 70 2d  Frame->nMem = p-
35670 3e 6e 4d 65 6d 3b 0a 20 20 20 20 70 46 72 61 6d  >nMem;.    pFram
35680 65 2d 3e 61 70 43 73 72 20 3d 20 70 2d 3e 61 70  e->apCsr = p->ap
35690 43 73 72 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d  Csr;.    pFrame-
356a0 3e 6e 43 75 72 73 6f 72 20 3d 20 70 2d 3e 6e 43  >nCursor = p->nC
356b0 75 72 73 6f 72 3b 0a 20 20 20 20 70 46 72 61 6d  ursor;.    pFram
356c0 65 2d 3e 61 4f 70 20 3d 20 70 2d 3e 61 4f 70 3b  e->aOp = p->aOp;
356d0 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 6e 4f 70  .    pFrame->nOp
356e0 20 3d 20 70 2d 3e 6e 4f 70 3b 0a 20 20 20 20 70   = p->nOp;.    p
356f0 46 72 61 6d 65 2d 3e 74 6f 6b 65 6e 20 3d 20 70  Frame->token = p
35700 50 72 6f 67 72 61 6d 2d 3e 74 6f 6b 65 6e 3b 0a  Program->token;.
35710 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e  #ifdef SQLITE_EN
35720 41 42 4c 45 5f 53 54 4d 54 5f 53 43 41 4e 53 54  ABLE_STMT_SCANST
35730 41 54 55 53 0a 20 20 20 20 70 46 72 61 6d 65 2d  ATUS.    pFrame-
35740 3e 61 6e 45 78 65 63 20 3d 20 70 2d 3e 61 6e 45  >anExec = p->anE
35750 78 65 63 3b 0a 23 65 6e 64 69 66 0a 23 69 66 64  xec;.#endif.#ifd
35760 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a  ef SQLITE_DEBUG.
35770 20 20 20 20 70 46 72 61 6d 65 2d 3e 69 46 72 61      pFrame->iFra
35780 6d 65 4d 61 67 69 63 20 3d 20 53 51 4c 49 54 45  meMagic = SQLITE
35790 5f 46 52 41 4d 45 5f 4d 41 47 49 43 3b 0a 23 65  _FRAME_MAGIC;.#e
357a0 6e 64 69 66 0a 0a 20 20 20 20 70 45 6e 64 20 3d  ndif..    pEnd =
357b0 20 26 56 64 62 65 46 72 61 6d 65 4d 65 6d 28 70   &VdbeFrameMem(p
357c0 46 72 61 6d 65 29 5b 70 46 72 61 6d 65 2d 3e 6e  Frame)[pFrame->n
357d0 43 68 69 6c 64 4d 65 6d 5d 3b 0a 20 20 20 20 66  ChildMem];.    f
357e0 6f 72 28 70 4d 65 6d 3d 56 64 62 65 46 72 61 6d  or(pMem=VdbeFram
357f0 65 4d 65 6d 28 70 46 72 61 6d 65 29 3b 20 70 4d  eMem(pFrame); pM
35800 65 6d 21 3d 70 45 6e 64 3b 20 70 4d 65 6d 2b 2b  em!=pEnd; pMem++
35810 29 7b 0a 20 20 20 20 20 20 70 4d 65 6d 2d 3e 66  ){.      pMem->f
35820 6c 61 67 73 20 3d 20 4d 45 4d 5f 55 6e 64 65 66  lags = MEM_Undef
35830 69 6e 65 64 3b 0a 20 20 20 20 20 20 70 4d 65 6d  ined;.      pMem
35840 2d 3e 64 62 20 3d 20 64 62 3b 0a 20 20 20 20 7d  ->db = db;.    }
35850 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70 46  .  }else{.    pF
35860 72 61 6d 65 20 3d 20 28 56 64 62 65 46 72 61 6d  rame = (VdbeFram
35870 65 2a 29 70 52 74 2d 3e 7a 3b 0a 20 20 20 20 61  e*)pRt->z;.    a
35880 73 73 65 72 74 28 20 70 52 74 2d 3e 78 44 65 6c  ssert( pRt->xDel
35890 3d 3d 73 71 6c 69 74 65 33 56 64 62 65 46 72 61  ==sqlite3VdbeFra
358a0 6d 65 4d 65 6d 44 65 6c 20 29 3b 0a 20 20 20 20  meMemDel );.    
358b0 61 73 73 65 72 74 28 20 70 50 72 6f 67 72 61 6d  assert( pProgram
358c0 2d 3e 6e 4d 65 6d 2b 70 50 72 6f 67 72 61 6d 2d  ->nMem+pProgram-
358d0 3e 6e 43 73 72 3d 3d 70 46 72 61 6d 65 2d 3e 6e  >nCsr==pFrame->n
358e0 43 68 69 6c 64 4d 65 6d 20 0a 20 20 20 20 20 20  ChildMem .      
358f0 20 20 7c 7c 20 28 70 50 72 6f 67 72 61 6d 2d 3e    || (pProgram->
35900 6e 43 73 72 3d 3d 30 20 26 26 20 70 50 72 6f 67  nCsr==0 && pProg
35910 72 61 6d 2d 3e 6e 4d 65 6d 2b 31 3d 3d 70 46 72  ram->nMem+1==pFr
35920 61 6d 65 2d 3e 6e 43 68 69 6c 64 4d 65 6d 29 20  ame->nChildMem) 
35930 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  );.    assert( p
35940 50 72 6f 67 72 61 6d 2d 3e 6e 43 73 72 3d 3d 70  Program->nCsr==p
35950 46 72 61 6d 65 2d 3e 6e 43 68 69 6c 64 43 73 72  Frame->nChildCsr
35960 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20   );.    assert( 
35970 28 69 6e 74 29 28 70 4f 70 20 2d 20 61 4f 70 29  (int)(pOp - aOp)
35980 3d 3d 70 46 72 61 6d 65 2d 3e 70 63 20 29 3b 0a  ==pFrame->pc );.
35990 20 20 7d 0a 0a 20 20 70 2d 3e 6e 46 72 61 6d 65    }..  p->nFrame
359a0 2b 2b 3b 0a 20 20 70 46 72 61 6d 65 2d 3e 70 50  ++;.  pFrame->pP
359b0 61 72 65 6e 74 20 3d 20 70 2d 3e 70 46 72 61 6d  arent = p->pFram
359c0 65 3b 0a 20 20 70 46 72 61 6d 65 2d 3e 6c 61 73  e;.  pFrame->las
359d0 74 52 6f 77 69 64 20 3d 20 64 62 2d 3e 6c 61 73  tRowid = db->las
359e0 74 52 6f 77 69 64 3b 0a 20 20 70 46 72 61 6d 65  tRowid;.  pFrame
359f0 2d 3e 6e 43 68 61 6e 67 65 20 3d 20 70 2d 3e 6e  ->nChange = p->n
35a00 43 68 61 6e 67 65 3b 0a 20 20 70 46 72 61 6d 65  Change;.  pFrame
35a10 2d 3e 6e 44 62 43 68 61 6e 67 65 20 3d 20 70 2d  ->nDbChange = p-
35a20 3e 64 62 2d 3e 6e 43 68 61 6e 67 65 3b 0a 20 20  >db->nChange;.  
35a30 61 73 73 65 72 74 28 20 70 46 72 61 6d 65 2d 3e  assert( pFrame->
35a40 70 41 75 78 44 61 74 61 3d 3d 30 20 29 3b 0a 20  pAuxData==0 );. 
35a50 20 70 46 72 61 6d 65 2d 3e 70 41 75 78 44 61 74   pFrame->pAuxDat
35a60 61 20 3d 20 70 2d 3e 70 41 75 78 44 61 74 61 3b  a = p->pAuxData;
35a70 0a 20 20 70 2d 3e 70 41 75 78 44 61 74 61 20 3d  .  p->pAuxData =
35a80 20 30 3b 0a 20 20 70 2d 3e 6e 43 68 61 6e 67 65   0;.  p->nChange
35a90 20 3d 20 30 3b 0a 20 20 70 2d 3e 70 46 72 61 6d   = 0;.  p->pFram
35aa0 65 20 3d 20 70 46 72 61 6d 65 3b 0a 20 20 70 2d  e = pFrame;.  p-
35ab0 3e 61 4d 65 6d 20 3d 20 61 4d 65 6d 20 3d 20 56  >aMem = aMem = V
35ac0 64 62 65 46 72 61 6d 65 4d 65 6d 28 70 46 72 61  dbeFrameMem(pFra
35ad0 6d 65 29 3b 0a 20 20 70 2d 3e 6e 4d 65 6d 20 3d  me);.  p->nMem =
35ae0 20 70 46 72 61 6d 65 2d 3e 6e 43 68 69 6c 64 4d   pFrame->nChildM
35af0 65 6d 3b 0a 20 20 70 2d 3e 6e 43 75 72 73 6f 72  em;.  p->nCursor
35b00 20 3d 20 28 75 31 36 29 70 46 72 61 6d 65 2d 3e   = (u16)pFrame->
35b10 6e 43 68 69 6c 64 43 73 72 3b 0a 20 20 70 2d 3e  nChildCsr;.  p->
35b20 61 70 43 73 72 20 3d 20 28 56 64 62 65 43 75 72  apCsr = (VdbeCur
35b30 73 6f 72 20 2a 2a 29 26 61 4d 65 6d 5b 70 2d 3e  sor **)&aMem[p->
35b40 6e 4d 65 6d 5d 3b 0a 20 20 70 46 72 61 6d 65 2d  nMem];.  pFrame-
35b50 3e 61 4f 6e 63 65 20 3d 20 28 75 38 2a 29 26 70  >aOnce = (u8*)&p
35b60 2d 3e 61 70 43 73 72 5b 70 50 72 6f 67 72 61 6d  ->apCsr[pProgram
35b70 2d 3e 6e 43 73 72 5d 3b 0a 20 20 6d 65 6d 73 65  ->nCsr];.  memse
35b80 74 28 70 46 72 61 6d 65 2d 3e 61 4f 6e 63 65 2c  t(pFrame->aOnce,
35b90 20 30 2c 20 28 70 50 72 6f 67 72 61 6d 2d 3e 6e   0, (pProgram->n
35ba0 4f 70 20 2b 20 37 29 2f 38 29 3b 0a 20 20 70 2d  Op + 7)/8);.  p-
35bb0 3e 61 4f 70 20 3d 20 61 4f 70 20 3d 20 70 50 72  >aOp = aOp = pPr
35bc0 6f 67 72 61 6d 2d 3e 61 4f 70 3b 0a 20 20 70 2d  ogram->aOp;.  p-
35bd0 3e 6e 4f 70 20 3d 20 70 50 72 6f 67 72 61 6d 2d  >nOp = pProgram-
35be0 3e 6e 4f 70 3b 0a 23 69 66 64 65 66 20 53 51 4c  >nOp;.#ifdef SQL
35bf0 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 4d 54 5f  ITE_ENABLE_STMT_
35c00 53 43 41 4e 53 54 41 54 55 53 0a 20 20 70 2d 3e  SCANSTATUS.  p->
35c10 61 6e 45 78 65 63 20 3d 20 30 3b 0a 23 65 6e 64  anExec = 0;.#end
35c20 69 66 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  if.#ifdef SQLITE
35c30 5f 44 45 42 55 47 0a 20 20 2f 2a 20 56 65 72 69  _DEBUG.  /* Veri
35c40 66 79 20 74 68 61 74 20 73 65 63 6f 6e 64 20 61  fy that second a
35c50 6e 64 20 73 75 62 73 65 71 75 65 6e 74 20 65 78  nd subsequent ex
35c60 65 63 75 74 69 6f 6e 73 20 6f 66 20 74 68 65 20  ecutions of the 
35c70 73 61 6d 65 20 74 72 69 67 67 65 72 20 64 6f 20  same trigger do 
35c80 6e 6f 74 0a 20 20 2a 2a 20 74 72 79 20 74 6f 20  not.  ** try to 
35c90 72 65 75 73 65 20 72 65 67 69 73 74 65 72 20 76  reuse register v
35ca0 61 6c 75 65 73 20 66 72 6f 6d 20 74 68 65 20 66  alues from the f
35cb0 69 72 73 74 20 75 73 65 2e 20 2a 2f 0a 20 20 7b  irst use. */.  {
35cc0 0a 20 20 20 20 69 6e 74 20 69 3b 0a 20 20 20 20  .    int i;.    
35cd0 66 6f 72 28 69 3d 30 3b 20 69 3c 70 2d 3e 6e 4d  for(i=0; i<p->nM
35ce0 65 6d 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20  em; i++){.      
35cf0 61 4d 65 6d 5b 69 5d 2e 70 53 63 6f 70 79 46 72  aMem[i].pScopyFr
35d00 6f 6d 20 3d 20 30 3b 20 20 2f 2a 20 50 72 65 76  om = 0;  /* Prev
35d10 65 6e 74 20 66 61 6c 73 65 2d 70 6f 73 69 74 69  ent false-positi
35d20 76 65 20 41 62 6f 75 74 54 6f 43 68 61 6e 67 65  ve AboutToChange
35d30 28 29 20 65 72 72 73 20 2a 2f 0a 20 20 20 20 20  () errs */.     
35d40 20 61 4d 65 6d 5b 69 5d 2e 66 6c 61 67 73 20 7c   aMem[i].flags |
35d50 3d 20 4d 45 4d 5f 55 6e 64 65 66 69 6e 65 64 3b  = MEM_Undefined;
35d60 20 2f 2a 20 43 61 75 73 65 20 61 20 66 61 75 6c   /* Cause a faul
35d70 74 20 69 66 20 74 68 69 73 20 72 65 67 20 69 73  t if this reg is
35d80 20 72 65 75 73 65 64 20 2a 2f 0a 20 20 20 20 7d   reused */.    }
35d90 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20 70 4f  .  }.#endif.  pO
35da0 70 20 3d 20 26 61 4f 70 5b 2d 31 5d 3b 0a 20 20  p = &aOp[-1];.  
35db0 67 6f 74 6f 20 63 68 65 63 6b 5f 66 6f 72 5f 69  goto check_for_i
35dc0 6e 74 65 72 72 75 70 74 3b 0a 7d 0a 0a 2f 2a 20  nterrupt;.}../* 
35dd0 4f 70 63 6f 64 65 3a 20 50 61 72 61 6d 20 50 31  Opcode: Param P1
35de0 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20   P2 * * *.**.** 
35df0 54 68 69 73 20 6f 70 63 6f 64 65 20 69 73 20 6f  This opcode is o
35e00 6e 6c 79 20 65 76 65 72 20 70 72 65 73 65 6e 74  nly ever present
35e10 20 69 6e 20 73 75 62 2d 70 72 6f 67 72 61 6d 73   in sub-programs
35e20 20 63 61 6c 6c 65 64 20 76 69 61 20 74 68 65 20   called via the 
35e30 0a 2a 2a 20 4f 50 5f 50 72 6f 67 72 61 6d 20 69  .** OP_Program i
35e40 6e 73 74 72 75 63 74 69 6f 6e 2e 20 43 6f 70 79  nstruction. Copy
35e50 20 61 20 76 61 6c 75 65 20 63 75 72 72 65 6e 74   a value current
35e60 6c 79 20 73 74 6f 72 65 64 20 69 6e 20 61 20 6d  ly stored in a m
35e70 65 6d 6f 72 79 20 0a 2a 2a 20 63 65 6c 6c 20 6f  emory .** cell o
35e80 66 20 74 68 65 20 63 61 6c 6c 69 6e 67 20 28 70  f the calling (p
35e90 61 72 65 6e 74 29 20 66 72 61 6d 65 20 74 6f 20  arent) frame to 
35ea0 63 65 6c 6c 20 50 32 20 69 6e 20 74 68 65 20 63  cell P2 in the c
35eb0 75 72 72 65 6e 74 20 66 72 61 6d 65 73 20 0a 2a  urrent frames .*
35ec0 2a 20 61 64 64 72 65 73 73 20 73 70 61 63 65 2e  * address space.
35ed0 20 54 68 69 73 20 69 73 20 75 73 65 64 20 62 79   This is used by
35ee0 20 74 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d   trigger program
35ef0 73 20 74 6f 20 61 63 63 65 73 73 20 74 68 65 20  s to access the 
35f00 6e 65 77 2e 2a 20 0a 2a 2a 20 61 6e 64 20 6f 6c  new.* .** and ol
35f10 64 2e 2a 20 76 61 6c 75 65 73 2e 0a 2a 2a 0a 2a  d.* values..**.*
35f20 2a 20 54 68 65 20 61 64 64 72 65 73 73 20 6f 66  * The address of
35f30 20 74 68 65 20 63 65 6c 6c 20 69 6e 20 74 68 65   the cell in the
35f40 20 70 61 72 65 6e 74 20 66 72 61 6d 65 20 69 73   parent frame is
35f50 20 64 65 74 65 72 6d 69 6e 65 64 20 62 79 20 61   determined by a
35f60 64 64 69 6e 67 0a 2a 2a 20 74 68 65 20 76 61 6c  dding.** the val
35f70 75 65 20 6f 66 20 74 68 65 20 50 31 20 61 72 67  ue of the P1 arg
35f80 75 6d 65 6e 74 20 74 6f 20 74 68 65 20 76 61 6c  ument to the val
35f90 75 65 20 6f 66 20 74 68 65 20 50 31 20 61 72 67  ue of the P1 arg
35fa0 75 6d 65 6e 74 20 74 6f 20 74 68 65 0a 2a 2a 20  ument to the.** 
35fb0 63 61 6c 6c 69 6e 67 20 4f 50 5f 50 72 6f 67 72  calling OP_Progr
35fc0 61 6d 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a  am instruction..
35fd0 2a 2f 0a 63 61 73 65 20 4f 50 5f 50 61 72 61 6d  */.case OP_Param
35fe0 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  : {           /*
35ff0 20 6f 75 74 32 20 2a 2f 0a 20 20 56 64 62 65 46   out2 */.  VdbeF
36000 72 61 6d 65 20 2a 70 46 72 61 6d 65 3b 0a 20 20  rame *pFrame;.  
36010 4d 65 6d 20 2a 70 49 6e 3b 0a 20 20 70 4f 75 74  Mem *pIn;.  pOut
36020 20 3d 20 6f 75 74 32 50 72 65 72 65 6c 65 61 73   = out2Prereleas
36030 65 28 70 2c 20 70 4f 70 29 3b 0a 20 20 70 46 72  e(p, pOp);.  pFr
36040 61 6d 65 20 3d 20 70 2d 3e 70 46 72 61 6d 65 3b  ame = p->pFrame;
36050 0a 20 20 70 49 6e 20 3d 20 26 70 46 72 61 6d 65  .  pIn = &pFrame
36060 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 20 2b  ->aMem[pOp->p1 +
36070 20 70 46 72 61 6d 65 2d 3e 61 4f 70 5b 70 46 72   pFrame->aOp[pFr
36080 61 6d 65 2d 3e 70 63 5d 2e 70 31 5d 3b 20 20 20  ame->pc].p1];   
36090 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65  .  sqlite3VdbeMe
360a0 6d 53 68 61 6c 6c 6f 77 43 6f 70 79 28 70 4f 75  mShallowCopy(pOu
360b0 74 2c 20 70 49 6e 2c 20 4d 45 4d 5f 45 70 68 65  t, pIn, MEM_Ephe
360c0 6d 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  m);.  break;.}..
360d0 23 65 6e 64 69 66 20 2f 2a 20 23 69 66 6e 64 65  #endif /* #ifnde
360e0 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52  f SQLITE_OMIT_TR
360f0 49 47 47 45 52 20 2a 2f 0a 0a 23 69 66 6e 64 65  IGGER */..#ifnde
36100 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4f  f SQLITE_OMIT_FO
36110 52 45 49 47 4e 5f 4b 45 59 0a 2f 2a 20 4f 70 63  REIGN_KEY./* Opc
36120 6f 64 65 3a 20 46 6b 43 6f 75 6e 74 65 72 20 50  ode: FkCounter P
36130 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79  1 P2 * * *.** Sy
36140 6e 6f 70 73 69 73 3a 20 66 6b 63 74 72 5b 50 31  nopsis: fkctr[P1
36150 5d 2b 3d 50 32 0a 2a 2a 0a 2a 2a 20 49 6e 63 72  ]+=P2.**.** Incr
36160 65 6d 65 6e 74 20 61 20 22 63 6f 6e 73 74 72 61  ement a "constra
36170 69 6e 74 20 63 6f 75 6e 74 65 72 22 20 62 79 20  int counter" by 
36180 50 32 20 28 50 32 20 6d 61 79 20 62 65 20 6e 65  P2 (P2 may be ne
36190 67 61 74 69 76 65 20 6f 72 20 70 6f 73 69 74 69  gative or positi
361a0 76 65 29 2e 0a 2a 2a 20 49 66 20 50 31 20 69 73  ve)..** If P1 is
361b0 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65 20 64   non-zero, the d
361c0 61 74 61 62 61 73 65 20 63 6f 6e 73 74 72 61 69  atabase constrai
361d0 6e 74 20 63 6f 75 6e 74 65 72 20 69 73 20 69 6e  nt counter is in
361e0 63 72 65 6d 65 6e 74 65 64 20 0a 2a 2a 20 28 64  cremented .** (d
361f0 65 66 65 72 72 65 64 20 66 6f 72 65 69 67 6e 20  eferred foreign 
36200 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e 74 73 29  key constraints)
36210 2e 20 4f 74 68 65 72 77 69 73 65 2c 20 69 66 20  . Otherwise, if 
36220 50 31 20 69 73 20 7a 65 72 6f 2c 20 74 68 65 20  P1 is zero, the 
36230 0a 2a 2a 20 73 74 61 74 65 6d 65 6e 74 20 63 6f  .** statement co
36240 75 6e 74 65 72 20 69 73 20 69 6e 63 72 65 6d 65  unter is increme
36250 6e 74 65 64 20 28 69 6d 6d 65 64 69 61 74 65 20  nted (immediate 
36260 66 6f 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73  foreign key cons
36270 74 72 61 69 6e 74 73 29 2e 0a 2a 2f 0a 63 61 73  traints)..*/.cas
36280 65 20 4f 50 5f 46 6b 43 6f 75 6e 74 65 72 3a 20  e OP_FkCounter: 
36290 7b 0a 20 20 69 66 28 20 64 62 2d 3e 66 6c 61 67  {.  if( db->flag
362a0 73 20 26 20 53 51 4c 49 54 45 5f 44 65 66 65 72  s & SQLITE_Defer
362b0 46 4b 73 20 29 7b 0a 20 20 20 20 64 62 2d 3e 6e  FKs ){.    db->n
362c0 44 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73 20  DeferredImmCons 
362d0 2b 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 7d 65  += pOp->p2;.  }e
362e0 6c 73 65 20 69 66 28 20 70 4f 70 2d 3e 70 31 20  lse if( pOp->p1 
362f0 29 7b 0a 20 20 20 20 64 62 2d 3e 6e 44 65 66 65  ){.    db->nDefe
36300 72 72 65 64 43 6f 6e 73 20 2b 3d 20 70 4f 70 2d  rredCons += pOp-
36310 3e 70 32 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  >p2;.  }else{.  
36320 20 20 70 2d 3e 6e 46 6b 43 6f 6e 73 74 72 61 69    p->nFkConstrai
36330 6e 74 20 2b 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20  nt += pOp->p2;. 
36340 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f   }.  break;.}../
36350 2a 20 4f 70 63 6f 64 65 3a 20 46 6b 49 66 5a 65  * Opcode: FkIfZe
36360 72 6f 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  ro P1 P2 * * *.*
36370 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 66 20 66  * Synopsis: if f
36380 6b 63 74 72 5b 50 31 5d 3d 3d 30 20 67 6f 74 6f  kctr[P1]==0 goto
36390 20 50 32 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f   P2.**.** This o
363a0 70 63 6f 64 65 20 74 65 73 74 73 20 69 66 20 61  pcode tests if a
363b0 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e   foreign key con
363c0 73 74 72 61 69 6e 74 2d 63 6f 75 6e 74 65 72 20  straint-counter 
363d0 69 73 20 63 75 72 72 65 6e 74 6c 79 20 7a 65 72  is currently zer
363e0 6f 2e 0a 2a 2a 20 49 66 20 73 6f 2c 20 6a 75 6d  o..** If so, jum
363f0 70 20 74 6f 20 69 6e 73 74 72 75 63 74 69 6f 6e  p to instruction
36400 20 50 32 2e 20 4f 74 68 65 72 77 69 73 65 2c 20   P2. Otherwise, 
36410 66 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20  fall through to 
36420 74 68 65 20 6e 65 78 74 20 0a 2a 2a 20 69 6e 73  the next .** ins
36430 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20  truction..**.** 
36440 49 66 20 50 31 20 69 73 20 6e 6f 6e 2d 7a 65 72  If P1 is non-zer
36450 6f 2c 20 74 68 65 6e 20 74 68 65 20 6a 75 6d 70  o, then the jump
36460 20 69 73 20 74 61 6b 65 6e 20 69 66 20 74 68 65   is taken if the
36470 20 64 61 74 61 62 61 73 65 20 63 6f 6e 73 74 72   database constr
36480 61 69 6e 74 2d 63 6f 75 6e 74 65 72 0a 2a 2a 20  aint-counter.** 
36490 69 73 20 7a 65 72 6f 20 28 74 68 65 20 6f 6e 65  is zero (the one
364a0 20 74 68 61 74 20 63 6f 75 6e 74 73 20 64 65 66   that counts def
364b0 65 72 72 65 64 20 63 6f 6e 73 74 72 61 69 6e 74  erred constraint
364c0 20 76 69 6f 6c 61 74 69 6f 6e 73 29 2e 20 49 66   violations). If
364d0 20 50 31 20 69 73 0a 2a 2a 20 7a 65 72 6f 2c 20   P1 is.** zero, 
364e0 74 68 65 20 6a 75 6d 70 20 69 73 20 74 61 6b 65  the jump is take
364f0 6e 20 69 66 20 74 68 65 20 73 74 61 74 65 6d 65  n if the stateme
36500 6e 74 20 63 6f 6e 73 74 72 61 69 6e 74 2d 63 6f  nt constraint-co
36510 75 6e 74 65 72 20 69 73 20 7a 65 72 6f 0a 2a 2a  unter is zero.**
36520 20 28 69 6d 6d 65 64 69 61 74 65 20 66 6f 72 65   (immediate fore
36530 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61 69  ign key constrai
36540 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 73 29 2e 0a  nt violations)..
36550 2a 2f 0a 63 61 73 65 20 4f 50 5f 46 6b 49 66 5a  */.case OP_FkIfZ
36560 65 72 6f 3a 20 7b 20 20 20 20 20 20 20 20 20 2f  ero: {         /
36570 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 69 66 28 20  * jump */.  if( 
36580 70 4f 70 2d 3e 70 31 20 29 7b 0a 20 20 20 20 56  pOp->p1 ){.    V
36590 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 64  dbeBranchTaken(d
365a0 62 2d 3e 6e 44 65 66 65 72 72 65 64 43 6f 6e 73  b->nDeferredCons
365b0 3d 3d 30 20 26 26 20 64 62 2d 3e 6e 44 65 66 65  ==0 && db->nDefe
365c0 72 72 65 64 49 6d 6d 43 6f 6e 73 3d 3d 30 2c 20  rredImmCons==0, 
365d0 32 29 3b 0a 20 20 20 20 69 66 28 20 64 62 2d 3e  2);.    if( db->
365e0 6e 44 65 66 65 72 72 65 64 43 6f 6e 73 3d 3d 30  nDeferredCons==0
365f0 20 26 26 20 64 62 2d 3e 6e 44 65 66 65 72 72 65   && db->nDeferre
36600 64 49 6d 6d 43 6f 6e 73 3d 3d 30 20 29 20 67 6f  dImmCons==0 ) go
36610 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20  to jump_to_p2;. 
36620 20 7d 65 6c 73 65 7b 0a 20 20 20 20 56 64 62 65   }else{.    Vdbe
36630 42 72 61 6e 63 68 54 61 6b 65 6e 28 70 2d 3e 6e  BranchTaken(p->n
36640 46 6b 43 6f 6e 73 74 72 61 69 6e 74 3d 3d 30 20  FkConstraint==0 
36650 26 26 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64  && db->nDeferred
36660 49 6d 6d 43 6f 6e 73 3d 3d 30 2c 20 32 29 3b 0a  ImmCons==0, 2);.
36670 20 20 20 20 69 66 28 20 70 2d 3e 6e 46 6b 43 6f      if( p->nFkCo
36680 6e 73 74 72 61 69 6e 74 3d 3d 30 20 26 26 20 64  nstraint==0 && d
36690 62 2d 3e 6e 44 65 66 65 72 72 65 64 49 6d 6d 43  b->nDeferredImmC
366a0 6f 6e 73 3d 3d 30 20 29 20 67 6f 74 6f 20 6a 75  ons==0 ) goto ju
366b0 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 7d 0a 20 20  mp_to_p2;.  }.  
366c0 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20  break;.}.#endif 
366d0 2f 2a 20 23 69 66 6e 64 65 66 20 53 51 4c 49 54  /* #ifndef SQLIT
366e0 45 5f 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b  E_OMIT_FOREIGN_K
366f0 45 59 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53  EY */..#ifndef S
36700 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 49  QLITE_OMIT_AUTOI
36710 4e 43 52 45 4d 45 4e 54 0a 2f 2a 20 4f 70 63 6f  NCREMENT./* Opco
36720 64 65 3a 20 4d 65 6d 4d 61 78 20 50 31 20 50 32  de: MemMax P1 P2
36730 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73   * * *.** Synops
36740 69 73 3a 20 72 5b 50 31 5d 3d 6d 61 78 28 72 5b  is: r[P1]=max(r[
36750 50 31 5d 2c 72 5b 50 32 5d 29 0a 2a 2a 0a 2a 2a  P1],r[P2]).**.**
36760 20 50 31 20 69 73 20 61 20 72 65 67 69 73 74 65   P1 is a registe
36770 72 20 69 6e 20 74 68 65 20 72 6f 6f 74 20 66 72  r in the root fr
36780 61 6d 65 20 6f 66 20 74 68 69 73 20 56 4d 20 28  ame of this VM (
36790 74 68 65 20 72 6f 6f 74 20 66 72 61 6d 65 20 69  the root frame i
367a0 73 0a 2a 2a 20 64 69 66 66 65 72 65 6e 74 20 66  s.** different f
367b0 72 6f 6d 20 74 68 65 20 63 75 72 72 65 6e 74 20  rom the current 
367c0 66 72 61 6d 65 20 69 66 20 74 68 69 73 20 69 6e  frame if this in
367d0 73 74 72 75 63 74 69 6f 6e 20 69 73 20 62 65 69  struction is bei
367e0 6e 67 20 65 78 65 63 75 74 65 64 0a 2a 2a 20 77  ng executed.** w
367f0 69 74 68 69 6e 20 61 20 73 75 62 2d 70 72 6f 67  ithin a sub-prog
36800 72 61 6d 29 2e 20 53 65 74 20 74 68 65 20 76 61  ram). Set the va
36810 6c 75 65 20 6f 66 20 72 65 67 69 73 74 65 72 20  lue of register 
36820 50 31 20 74 6f 20 74 68 65 20 6d 61 78 69 6d 75  P1 to the maximu
36830 6d 20 6f 66 20 0a 2a 2a 20 69 74 73 20 63 75 72  m of .** its cur
36840 72 65 6e 74 20 76 61 6c 75 65 20 61 6e 64 20 74  rent value and t
36850 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69  he value in regi
36860 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54  ster P2..**.** T
36870 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20  his instruction 
36880 74 68 72 6f 77 73 20 61 6e 20 65 72 72 6f 72 20  throws an error 
36890 69 66 20 74 68 65 20 6d 65 6d 6f 72 79 20 63 65  if the memory ce
368a0 6c 6c 20 69 73 20 6e 6f 74 20 69 6e 69 74 69 61  ll is not initia
368b0 6c 6c 79 0a 2a 2a 20 61 6e 20 69 6e 74 65 67 65  lly.** an intege
368c0 72 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4d 65  r..*/.case OP_Me
368d0 6d 4d 61 78 3a 20 7b 20 20 20 20 20 20 20 20 2f  mMax: {        /
368e0 2a 20 69 6e 32 20 2a 2f 0a 20 20 56 64 62 65 46  * in2 */.  VdbeF
368f0 72 61 6d 65 20 2a 70 46 72 61 6d 65 3b 0a 20 20  rame *pFrame;.  
36900 69 66 28 20 70 2d 3e 70 46 72 61 6d 65 20 29 7b  if( p->pFrame ){
36910 0a 20 20 20 20 66 6f 72 28 70 46 72 61 6d 65 3d  .    for(pFrame=
36920 70 2d 3e 70 46 72 61 6d 65 3b 20 70 46 72 61 6d  p->pFrame; pFram
36930 65 2d 3e 70 50 61 72 65 6e 74 3b 20 70 46 72 61  e->pParent; pFra
36940 6d 65 3d 70 46 72 61 6d 65 2d 3e 70 50 61 72 65  me=pFrame->pPare
36950 6e 74 29 3b 0a 20 20 20 20 70 49 6e 31 20 3d 20  nt);.    pIn1 = 
36960 26 70 46 72 61 6d 65 2d 3e 61 4d 65 6d 5b 70 4f  &pFrame->aMem[pO
36970 70 2d 3e 70 31 5d 3b 0a 20 20 7d 65 6c 73 65 7b  p->p1];.  }else{
36980 0a 20 20 20 20 70 49 6e 31 20 3d 20 26 61 4d 65  .    pIn1 = &aMe
36990 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 7d 0a  m[pOp->p1];.  }.
369a0 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56    assert( memIsV
369b0 61 6c 69 64 28 70 49 6e 31 29 20 29 3b 0a 20 20  alid(pIn1) );.  
369c0 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 49 6e  sqlite3VdbeMemIn
369d0 74 65 67 65 72 69 66 79 28 70 49 6e 31 29 3b 0a  tegerify(pIn1);.
369e0 20 20 70 49 6e 32 20 3d 20 26 61 4d 65 6d 5b 70    pIn2 = &aMem[p
369f0 4f 70 2d 3e 70 32 5d 3b 0a 20 20 73 71 6c 69 74  Op->p2];.  sqlit
36a00 65 33 56 64 62 65 4d 65 6d 49 6e 74 65 67 65 72  e3VdbeMemInteger
36a10 69 66 79 28 70 49 6e 32 29 3b 0a 20 20 69 66 28  ify(pIn2);.  if(
36a20 20 70 49 6e 31 2d 3e 75 2e 69 3c 70 49 6e 32 2d   pIn1->u.i<pIn2-
36a30 3e 75 2e 69 29 7b 0a 20 20 20 20 70 49 6e 31 2d  >u.i){.    pIn1-
36a40 3e 75 2e 69 20 3d 20 70 49 6e 32 2d 3e 75 2e 69  >u.i = pIn2->u.i
36a50 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
36a60 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54  .#endif /* SQLIT
36a70 45 5f 4f 4d 49 54 5f 41 55 54 4f 49 4e 43 52 45  E_OMIT_AUTOINCRE
36a80 4d 45 4e 54 20 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f  MENT */../* Opco
36a90 64 65 3a 20 49 66 50 6f 73 20 50 31 20 50 32 20  de: IfPos P1 P2 
36aa0 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73  P3 * *.** Synops
36ab0 69 73 3a 20 69 66 20 72 5b 50 31 5d 3e 30 20 74  is: if r[P1]>0 t
36ac0 68 65 6e 20 72 5b 50 31 5d 2d 3d 50 33 2c 20 67  hen r[P1]-=P3, g
36ad0 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 52 65 67  oto P2.**.** Reg
36ae0 69 73 74 65 72 20 50 31 20 6d 75 73 74 20 63 6f  ister P1 must co
36af0 6e 74 61 69 6e 20 61 6e 20 69 6e 74 65 67 65 72  ntain an integer
36b00 2e 0a 2a 2a 20 49 66 20 74 68 65 20 76 61 6c 75  ..** If the valu
36b10 65 20 6f 66 20 72 65 67 69 73 74 65 72 20 50 31  e of register P1
36b20 20 69 73 20 31 20 6f 72 20 67 72 65 61 74 65 72   is 1 or greater
36b30 2c 20 73 75 62 74 72 61 63 74 20 50 33 20 66 72  , subtract P3 fr
36b40 6f 6d 20 74 68 65 0a 2a 2a 20 76 61 6c 75 65 20  om the.** value 
36b50 69 6e 20 50 31 20 61 6e 64 20 6a 75 6d 70 20 74  in P1 and jump t
36b60 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74  o P2..**.** If t
36b70 68 65 20 69 6e 69 74 69 61 6c 20 76 61 6c 75 65  he initial value
36b80 20 6f 66 20 72 65 67 69 73 74 65 72 20 50 31 20   of register P1 
36b90 69 73 20 6c 65 73 73 20 74 68 61 6e 20 31 2c 20  is less than 1, 
36ba0 74 68 65 6e 20 74 68 65 0a 2a 2a 20 76 61 6c 75  then the.** valu
36bb0 65 20 69 73 20 75 6e 63 68 61 6e 67 65 64 20 61  e is unchanged a
36bc0 6e 64 20 63 6f 6e 74 72 6f 6c 20 70 61 73 73 65  nd control passe
36bd0 73 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65  s through to the
36be0 20 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f   next instructio
36bf0 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 66  n..*/.case OP_If
36c00 50 6f 73 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a  Pos: {        /*
36c10 20 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20   jump, in1 */.  
36c20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn1 = &aMem[pOp
36c30 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p1];.  assert(
36c40 20 70 49 6e 31 2d 3e 66 6c 61 67 73 26 4d 45 4d   pIn1->flags&MEM
36c50 5f 49 6e 74 20 29 3b 0a 20 20 56 64 62 65 42 72  _Int );.  VdbeBr
36c60 61 6e 63 68 54 61 6b 65 6e 28 20 70 49 6e 31 2d  anchTaken( pIn1-
36c70 3e 75 2e 69 3e 30 2c 20 32 29 3b 0a 20 20 69 66  >u.i>0, 2);.  if
36c80 28 20 70 49 6e 31 2d 3e 75 2e 69 3e 30 20 29 7b  ( pIn1->u.i>0 ){
36c90 0a 20 20 20 20 70 49 6e 31 2d 3e 75 2e 69 20 2d  .    pIn1->u.i -
36ca0 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 20 20 67  = pOp->p3;.    g
36cb0 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a  oto jump_to_p2;.
36cc0 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
36cd0 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f 66 66 73 65  /* Opcode: Offse
36ce0 74 4c 69 6d 69 74 20 50 31 20 50 32 20 50 33 20  tLimit P1 P2 P3 
36cf0 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  * *.** Synopsis:
36d00 20 69 66 20 72 5b 50 31 5d 3e 30 20 74 68 65 6e   if r[P1]>0 then
36d10 20 72 5b 50 32 5d 3d 72 5b 50 31 5d 2b 6d 61 78   r[P2]=r[P1]+max
36d20 28 30 2c 72 5b 50 33 5d 29 20 65 6c 73 65 20 72  (0,r[P3]) else r
36d30 5b 50 32 5d 3d 28 2d 31 29 0a 2a 2a 0a 2a 2a 20  [P2]=(-1).**.** 
36d40 54 68 69 73 20 6f 70 63 6f 64 65 20 70 65 72 66  This opcode perf
36d50 6f 72 6d 73 20 61 20 63 6f 6d 6d 6f 6e 6c 79 20  orms a commonly 
36d60 75 73 65 64 20 63 6f 6d 70 75 74 61 74 69 6f 6e  used computation
36d70 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68   associated with
36d80 0a 2a 2a 20 4c 49 4d 49 54 20 61 6e 64 20 4f 46  .** LIMIT and OF
36d90 46 53 45 54 20 70 72 6f 63 65 73 73 2e 20 20 72  FSET process.  r
36da0 5b 50 31 5d 20 68 6f 6c 64 73 20 74 68 65 20 6c  [P1] holds the l
36db0 69 6d 69 74 20 63 6f 75 6e 74 65 72 2e 20 20 72  imit counter.  r
36dc0 5b 50 33 5d 0a 2a 2a 20 68 6f 6c 64 73 20 74 68  [P3].** holds th
36dd0 65 20 6f 66 66 73 65 74 20 63 6f 75 6e 74 65 72  e offset counter
36de0 2e 20 20 54 68 65 20 6f 70 63 6f 64 65 20 63 6f  .  The opcode co
36df0 6d 70 75 74 65 73 20 74 68 65 20 63 6f 6d 62 69  mputes the combi
36e00 6e 65 64 20 76 61 6c 75 65 0a 2a 2a 20 6f 66 20  ned value.** of 
36e10 74 68 65 20 4c 49 4d 49 54 20 61 6e 64 20 4f 46  the LIMIT and OF
36e20 46 53 45 54 20 61 6e 64 20 73 74 6f 72 65 73 20  FSET and stores 
36e30 74 68 61 74 20 76 61 6c 75 65 20 69 6e 20 72 5b  that value in r[
36e40 50 32 5d 2e 20 20 54 68 65 20 72 5b 50 32 5d 0a  P2].  The r[P2].
36e50 2a 2a 20 76 61 6c 75 65 20 63 6f 6d 70 75 74 65  ** value compute
36e60 64 20 69 73 20 74 68 65 20 74 6f 74 61 6c 20 6e  d is the total n
36e70 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 20 74 68  umber of rows th
36e80 61 74 20 77 69 6c 6c 20 6e 65 65 64 20 74 6f 20  at will need to 
36e90 62 65 0a 2a 2a 20 76 69 73 69 74 65 64 20 69 6e  be.** visited in
36ea0 20 6f 72 64 65 72 20 74 6f 20 63 6f 6d 70 6c 65   order to comple
36eb0 74 65 20 74 68 65 20 71 75 65 72 79 2e 0a 2a 2a  te the query..**
36ec0 0a 2a 2a 20 49 66 20 72 5b 50 33 5d 20 69 73 20  .** If r[P3] is 
36ed0 7a 65 72 6f 20 6f 72 20 6e 65 67 61 74 69 76 65  zero or negative
36ee0 2c 20 74 68 61 74 20 6d 65 61 6e 73 20 74 68 65  , that means the
36ef0 72 65 20 69 73 20 6e 6f 20 4f 46 46 53 45 54 0a  re is no OFFSET.
36f00 2a 2a 20 61 6e 64 20 72 5b 50 32 5d 20 69 73 20  ** and r[P2] is 
36f10 73 65 74 20 74 6f 20 62 65 20 74 68 65 20 76 61  set to be the va
36f20 6c 75 65 20 6f 66 20 74 68 65 20 4c 49 4d 49 54  lue of the LIMIT
36f30 2c 20 72 5b 50 31 5d 2e 0a 2a 2a 0a 2a 2a 20 69  , r[P1]..**.** i
36f40 66 20 72 5b 50 31 5d 20 69 73 20 7a 65 72 6f 20  f r[P1] is zero 
36f50 6f 72 20 6e 65 67 61 74 69 76 65 2c 20 74 68 61  or negative, tha
36f60 74 20 6d 65 61 6e 73 20 74 68 65 72 65 20 69 73  t means there is
36f70 20 6e 6f 20 4c 49 4d 49 54 0a 2a 2a 20 61 6e 64   no LIMIT.** and
36f80 20 72 5b 50 32 5d 20 69 73 20 73 65 74 20 74 6f   r[P2] is set to
36f90 20 2d 31 2e 20 0a 2a 2a 0a 2a 2a 20 4f 74 68 65   -1. .**.** Othe
36fa0 72 77 69 73 65 2c 20 72 5b 50 32 5d 20 69 73 20  rwise, r[P2] is 
36fb0 73 65 74 20 74 6f 20 74 68 65 20 73 75 6d 20 6f  set to the sum o
36fc0 66 20 72 5b 50 31 5d 20 61 6e 64 20 72 5b 50 33  f r[P1] and r[P3
36fd0 5d 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4f 66  ]..*/.case OP_Of
36fe0 66 73 65 74 4c 69 6d 69 74 3a 20 7b 20 20 20 20  fsetLimit: {    
36ff0 2f 2a 20 69 6e 31 2c 20 6f 75 74 32 2c 20 69 6e  /* in1, out2, in
37000 33 20 2a 2f 0a 20 20 69 36 34 20 78 3b 0a 20 20  3 */.  i64 x;.  
37010 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn1 = &aMem[pOp
37020 2d 3e 70 31 5d 3b 0a 20 20 70 49 6e 33 20 3d 20  ->p1];.  pIn3 = 
37030 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a  &aMem[pOp->p3];.
37040 20 20 70 4f 75 74 20 3d 20 6f 75 74 32 50 72 65    pOut = out2Pre
37050 72 65 6c 65 61 73 65 28 70 2c 20 70 4f 70 29 3b  release(p, pOp);
37060 0a 20 20 61 73 73 65 72 74 28 20 70 49 6e 31 2d  .  assert( pIn1-
37070 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74  >flags & MEM_Int
37080 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 49   );.  assert( pI
37090 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  n3->flags & MEM_
370a0 49 6e 74 20 29 3b 0a 20 20 78 20 3d 20 70 49 6e  Int );.  x = pIn
370b0 31 2d 3e 75 2e 69 3b 0a 20 20 69 66 28 20 78 3c  1->u.i;.  if( x<
370c0 3d 30 20 7c 7c 20 73 71 6c 69 74 65 33 41 64 64  =0 || sqlite3Add
370d0 49 6e 74 36 34 28 26 78 2c 20 70 49 6e 33 2d 3e  Int64(&x, pIn3->
370e0 75 2e 69 3e 30 3f 70 49 6e 33 2d 3e 75 2e 69 3a  u.i>0?pIn3->u.i:
370f0 30 29 20 29 7b 0a 20 20 20 20 2f 2a 20 49 66 20  0) ){.    /* If 
37100 74 68 65 20 4c 49 4d 49 54 20 69 73 20 6c 65 73  the LIMIT is les
37110 73 20 74 68 61 6e 20 6f 72 20 65 71 75 61 6c 20  s than or equal 
37120 74 6f 20 7a 65 72 6f 2c 20 6c 6f 6f 70 20 66 6f  to zero, loop fo
37130 72 65 76 65 72 2e 20 20 54 68 69 73 0a 20 20 20  rever.  This.   
37140 20 2a 2a 20 69 73 20 64 6f 63 75 6d 65 6e 74 65   ** is documente
37150 64 2e 20 20 42 75 74 20 61 6c 73 6f 2c 20 69 66  d.  But also, if
37160 20 74 68 65 20 4c 49 4d 49 54 2b 4f 46 46 53 45   the LIMIT+OFFSE
37170 54 20 65 78 63 65 65 64 73 20 32 5e 36 33 20 74  T exceeds 2^63 t
37180 68 65 6e 0a 20 20 20 20 2a 2a 20 61 6c 73 6f 20  hen.    ** also 
37190 6c 6f 6f 70 20 66 6f 72 65 76 65 72 2e 20 20 54  loop forever.  T
371a0 68 69 73 20 69 73 20 75 6e 64 6f 63 75 6d 65 6e  his is undocumen
371b0 74 65 64 2e 20 20 49 6e 20 66 61 63 74 2c 20 6f  ted.  In fact, o
371c0 6e 65 20 63 6f 75 6c 64 20 61 72 67 75 65 0a 20  ne could argue. 
371d0 20 20 20 2a 2a 20 74 68 61 74 20 74 68 65 20 6c     ** that the l
371e0 6f 6f 70 20 73 68 6f 75 6c 64 20 74 65 72 6d 69  oop should termi
371f0 6e 61 74 65 2e 20 20 42 75 74 20 61 73 73 75 6d  nate.  But assum
37200 69 6e 67 20 31 20 62 69 6c 6c 69 6f 6e 20 69 74  ing 1 billion it
37210 65 72 61 74 69 6f 6e 73 0a 20 20 20 20 2a 2a 20  erations.    ** 
37220 70 65 72 20 73 65 63 6f 6e 64 20 28 66 61 72 20  per second (far 
37230 65 78 63 65 65 64 69 6e 67 20 74 68 65 20 63 61  exceeding the ca
37240 70 61 62 69 6c 69 74 69 65 73 20 6f 66 20 61 6e  pabilities of an
37250 79 20 63 75 72 72 65 6e 74 20 68 61 72 64 77 61  y current hardwa
37260 72 65 29 0a 20 20 20 20 2a 2a 20 69 74 20 77 6f  re).    ** it wo
37270 75 6c 64 20 74 61 6b 65 20 6e 65 61 72 6c 79 20  uld take nearly 
37280 33 30 30 20 79 65 61 72 73 20 74 6f 20 61 63 74  300 years to act
37290 75 61 6c 6c 79 20 72 65 61 63 68 20 74 68 65 20  ually reach the 
372a0 6c 69 6d 69 74 2e 20 20 53 6f 0a 20 20 20 20 2a  limit.  So.    *
372b0 2a 20 6c 6f 6f 70 69 6e 67 20 66 6f 72 65 76 65  * looping foreve
372c0 72 20 69 73 20 61 20 72 65 61 73 6f 6e 61 62 6c  r is a reasonabl
372d0 65 20 61 70 70 72 6f 78 69 6d 61 74 69 6f 6e 2e  e approximation.
372e0 20 2a 2f 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e   */.    pOut->u.
372f0 69 20 3d 20 2d 31 3b 0a 20 20 7d 65 6c 73 65 7b  i = -1;.  }else{
37300 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d  .    pOut->u.i =
37310 20 78 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b   x;.  }.  break;
37320 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49  .}../* Opcode: I
37330 66 4e 6f 74 5a 65 72 6f 20 50 31 20 50 32 20 2a  fNotZero P1 P2 *
37340 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73   * *.** Synopsis
37350 3a 20 69 66 20 72 5b 50 31 5d 21 3d 30 20 74 68  : if r[P1]!=0 th
37360 65 6e 20 72 5b 50 31 5d 2d 2d 2c 20 67 6f 74 6f  en r[P1]--, goto
37370 20 50 32 0a 2a 2a 0a 2a 2a 20 52 65 67 69 73 74   P2.**.** Regist
37380 65 72 20 50 31 20 6d 75 73 74 20 63 6f 6e 74 61  er P1 must conta
37390 69 6e 20 61 6e 20 69 6e 74 65 67 65 72 2e 20 20  in an integer.  
373a0 49 66 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f  If the content o
373b0 66 20 72 65 67 69 73 74 65 72 20 50 31 20 69 73  f register P1 is
373c0 0a 2a 2a 20 69 6e 69 74 69 61 6c 6c 79 20 67 72  .** initially gr
373d0 65 61 74 65 72 20 74 68 61 6e 20 7a 65 72 6f 2c  eater than zero,
373e0 20 74 68 65 6e 20 64 65 63 72 65 6d 65 6e 74 20   then decrement 
373f0 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67  the value in reg
37400 69 73 74 65 72 20 50 31 2e 0a 2a 2a 20 49 66 20  ister P1..** If 
37410 69 74 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 20 28  it is non-zero (
37420 6e 65 67 61 74 69 76 65 20 6f 72 20 70 6f 73 69  negative or posi
37430 74 69 76 65 29 20 61 6e 64 20 74 68 65 6e 20 61  tive) and then a
37440 6c 73 6f 20 6a 75 6d 70 20 74 6f 20 50 32 2e 20  lso jump to P2. 
37450 20 0a 2a 2a 20 49 66 20 72 65 67 69 73 74 65 72   .** If register
37460 20 50 31 20 69 73 20 69 6e 69 74 69 61 6c 6c 79   P1 is initially
37470 20 7a 65 72 6f 2c 20 6c 65 61 76 65 20 69 74 20   zero, leave it 
37480 75 6e 63 68 61 6e 67 65 64 20 61 6e 64 20 66 61  unchanged and fa
37490 6c 6c 20 74 68 72 6f 75 67 68 2e 0a 2a 2f 0a 63  ll through..*/.c
374a0 61 73 65 20 4f 50 5f 49 66 4e 6f 74 5a 65 72 6f  ase OP_IfNotZero
374b0 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a 75  : {        /* ju
374c0 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e  mp, in1 */.  pIn
374d0 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  1 = &aMem[pOp->p
374e0 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 49  1];.  assert( pI
374f0 6e 31 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 49 6e  n1->flags&MEM_In
37500 74 20 29 3b 0a 20 20 56 64 62 65 42 72 61 6e 63  t );.  VdbeBranc
37510 68 54 61 6b 65 6e 28 70 49 6e 31 2d 3e 75 2e 69  hTaken(pIn1->u.i
37520 3c 30 2c 20 32 29 3b 0a 20 20 69 66 28 20 70 49  <0, 2);.  if( pI
37530 6e 31 2d 3e 75 2e 69 20 29 7b 0a 20 20 20 20 20  n1->u.i ){.     
37540 69 66 28 20 70 49 6e 31 2d 3e 75 2e 69 3e 30 20  if( pIn1->u.i>0 
37550 29 20 70 49 6e 31 2d 3e 75 2e 69 2d 2d 3b 0a 20  ) pIn1->u.i--;. 
37560 20 20 20 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f      goto jump_to
37570 5f 70 32 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  _p2;.  }.  break
37580 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
37590 44 65 63 72 4a 75 6d 70 5a 65 72 6f 20 50 31 20  DecrJumpZero P1 
375a0 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f  P2 * * *.** Syno
375b0 70 73 69 73 3a 20 69 66 20 28 2d 2d 72 5b 50 31  psis: if (--r[P1
375c0 5d 29 3d 3d 30 20 67 6f 74 6f 20 50 32 0a 2a 2a  ])==0 goto P2.**
375d0 0a 2a 2a 20 52 65 67 69 73 74 65 72 20 50 31 20  .** Register P1 
375e0 6d 75 73 74 20 68 6f 6c 64 20 61 6e 20 69 6e 74  must hold an int
375f0 65 67 65 72 2e 20 20 44 65 63 72 65 6d 65 6e 74  eger.  Decrement
37600 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 50 31   the value in P1
37610 0a 2a 2a 20 61 6e 64 20 6a 75 6d 70 20 74 6f 20  .** and jump to 
37620 50 32 20 69 66 20 74 68 65 20 6e 65 77 20 76 61  P2 if the new va
37630 6c 75 65 20 69 73 20 65 78 61 63 74 6c 79 20 7a  lue is exactly z
37640 65 72 6f 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ero..*/.case OP_
37650 44 65 63 72 4a 75 6d 70 5a 65 72 6f 3a 20 7b 20  DecrJumpZero: { 
37660 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e       /* jump, in
37670 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61  1 */.  pIn1 = &a
37680 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
37690 61 73 73 65 72 74 28 20 70 49 6e 31 2d 3e 66 6c  assert( pIn1->fl
376a0 61 67 73 26 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20  ags&MEM_Int );. 
376b0 20 69 66 28 20 70 49 6e 31 2d 3e 75 2e 69 3e 53   if( pIn1->u.i>S
376c0 4d 41 4c 4c 45 53 54 5f 49 4e 54 36 34 20 29 20  MALLEST_INT64 ) 
376d0 70 49 6e 31 2d 3e 75 2e 69 2d 2d 3b 0a 20 20 56  pIn1->u.i--;.  V
376e0 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 70  dbeBranchTaken(p
376f0 49 6e 31 2d 3e 75 2e 69 3d 3d 30 2c 20 32 29 3b  In1->u.i==0, 2);
37700 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e 75 2e 69  .  if( pIn1->u.i
37710 3d 3d 30 20 29 20 67 6f 74 6f 20 6a 75 6d 70 5f  ==0 ) goto jump_
37720 74 6f 5f 70 32 3b 0a 20 20 62 72 65 61 6b 3b 0a  to_p2;.  break;.
37730 7d 0a 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 41  }.../* Opcode: A
37740 67 67 53 74 65 70 20 2a 20 50 32 20 50 33 20 50  ggStep * P2 P3 P
37750 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73  4 P5.** Synopsis
37760 3a 20 61 63 63 75 6d 3d 72 5b 50 33 5d 20 73 74  : accum=r[P3] st
37770 65 70 28 72 5b 50 32 40 50 35 5d 29 0a 2a 2a 0a  ep(r[P2@P5]).**.
37780 2a 2a 20 45 78 65 63 75 74 65 20 74 68 65 20 78  ** Execute the x
37790 53 74 65 70 20 66 75 6e 63 74 69 6f 6e 20 66 6f  Step function fo
377a0 72 20 61 6e 20 61 67 67 72 65 67 61 74 65 2e 0a  r an aggregate..
377b0 2a 2a 20 54 68 65 20 66 75 6e 63 74 69 6f 6e 20  ** The function 
377c0 68 61 73 20 50 35 20 61 72 67 75 6d 65 6e 74 73  has P5 arguments
377d0 2e 20 20 50 34 20 69 73 20 61 20 70 6f 69 6e 74  .  P4 is a point
377e0 65 72 20 74 6f 20 74 68 65 20 0a 2a 2a 20 46 75  er to the .** Fu
377f0 6e 63 44 65 66 20 73 74 72 75 63 74 75 72 65 20  ncDef structure 
37800 74 68 61 74 20 73 70 65 63 69 66 69 65 73 20 74  that specifies t
37810 68 65 20 66 75 6e 63 74 69 6f 6e 2e 20 20 52 65  he function.  Re
37820 67 69 73 74 65 72 20 50 33 20 69 73 20 74 68 65  gister P3 is the
37830 0a 2a 2a 20 61 63 63 75 6d 75 6c 61 74 6f 72 2e  .** accumulator.
37840 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 35 20 61 72  .**.** The P5 ar
37850 67 75 6d 65 6e 74 73 20 61 72 65 20 74 61 6b 65  guments are take
37860 6e 20 66 72 6f 6d 20 72 65 67 69 73 74 65 72 20  n from register 
37870 50 32 20 61 6e 64 20 69 74 73 0a 2a 2a 20 73 75  P2 and its.** su
37880 63 63 65 73 73 6f 72 73 2e 0a 2a 2f 0a 2f 2a 20  ccessors..*/./* 
37890 4f 70 63 6f 64 65 3a 20 41 67 67 49 6e 76 65 72  Opcode: AggInver
378a0 73 65 20 2a 20 50 32 20 50 33 20 50 34 20 50 35  se * P2 P3 P4 P5
378b0 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 61 63  .** Synopsis: ac
378c0 63 75 6d 3d 72 5b 50 33 5d 20 69 6e 76 65 72 73  cum=r[P3] invers
378d0 65 28 72 5b 50 32 40 50 35 5d 29 0a 2a 2a 0a 2a  e(r[P2@P5]).**.*
378e0 2a 20 45 78 65 63 75 74 65 20 74 68 65 20 78 49  * Execute the xI
378f0 6e 76 65 72 73 65 20 66 75 6e 63 74 69 6f 6e 20  nverse function 
37900 66 6f 72 20 61 6e 20 61 67 67 72 65 67 61 74 65  for an aggregate
37910 2e 0a 2a 2a 20 54 68 65 20 66 75 6e 63 74 69 6f  ..** The functio
37920 6e 20 68 61 73 20 50 35 20 61 72 67 75 6d 65 6e  n has P5 argumen
37930 74 73 2e 20 20 50 34 20 69 73 20 61 20 70 6f 69  ts.  P4 is a poi
37940 6e 74 65 72 20 74 6f 20 74 68 65 20 0a 2a 2a 20  nter to the .** 
37950 46 75 6e 63 44 65 66 20 73 74 72 75 63 74 75 72  FuncDef structur
37960 65 20 74 68 61 74 20 73 70 65 63 69 66 69 65 73  e that specifies
37970 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 2e 20 20   the function.  
37980 52 65 67 69 73 74 65 72 20 50 33 20 69 73 20 74  Register P3 is t
37990 68 65 0a 2a 2a 20 61 63 63 75 6d 75 6c 61 74 6f  he.** accumulato
379a0 72 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 35 20  r..**.** The P5 
379b0 61 72 67 75 6d 65 6e 74 73 20 61 72 65 20 74 61  arguments are ta
379c0 6b 65 6e 20 66 72 6f 6d 20 72 65 67 69 73 74 65  ken from registe
379d0 72 20 50 32 20 61 6e 64 20 69 74 73 0a 2a 2a 20  r P2 and its.** 
379e0 73 75 63 63 65 73 73 6f 72 73 2e 0a 2a 2f 0a 2f  successors..*/./
379f0 2a 20 4f 70 63 6f 64 65 3a 20 41 67 67 53 74 65  * Opcode: AggSte
37a00 70 31 20 50 31 20 50 32 20 50 33 20 50 34 20 50  p1 P1 P2 P3 P4 P
37a10 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 61  5.** Synopsis: a
37a20 63 63 75 6d 3d 72 5b 50 33 5d 20 73 74 65 70 28  ccum=r[P3] step(
37a30 72 5b 50 32 40 50 35 5d 29 0a 2a 2a 0a 2a 2a 20  r[P2@P5]).**.** 
37a40 45 78 65 63 75 74 65 20 74 68 65 20 78 53 74 65  Execute the xSte
37a50 70 20 28 69 66 20 50 31 3d 3d 30 29 20 6f 72 20  p (if P1==0) or 
37a60 78 49 6e 76 65 72 73 65 20 28 69 66 20 50 31 21  xInverse (if P1!
37a70 3d 30 29 20 66 75 6e 63 74 69 6f 6e 20 66 6f 72  =0) function for
37a80 20 61 6e 0a 2a 2a 20 61 67 67 72 65 67 61 74 65   an.** aggregate
37a90 2e 20 20 54 68 65 20 66 75 6e 63 74 69 6f 6e 20  .  The function 
37aa0 68 61 73 20 50 35 20 61 72 67 75 6d 65 6e 74 73  has P5 arguments
37ab0 2e 20 20 50 34 20 69 73 20 61 20 70 6f 69 6e 74  .  P4 is a point
37ac0 65 72 20 74 6f 20 74 68 65 20 0a 2a 2a 20 46 75  er to the .** Fu
37ad0 6e 63 44 65 66 20 73 74 72 75 63 74 75 72 65 20  ncDef structure 
37ae0 74 68 61 74 20 73 70 65 63 69 66 69 65 73 20 74  that specifies t
37af0 68 65 20 66 75 6e 63 74 69 6f 6e 2e 20 20 52 65  he function.  Re
37b00 67 69 73 74 65 72 20 50 33 20 69 73 20 74 68 65  gister P3 is the
37b10 0a 2a 2a 20 61 63 63 75 6d 75 6c 61 74 6f 72 2e  .** accumulator.
37b20 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 35 20 61 72  .**.** The P5 ar
37b30 67 75 6d 65 6e 74 73 20 61 72 65 20 74 61 6b 65  guments are take
37b40 6e 20 66 72 6f 6d 20 72 65 67 69 73 74 65 72 20  n from register 
37b50 50 32 20 61 6e 64 20 69 74 73 0a 2a 2a 20 73 75  P2 and its.** su
37b60 63 63 65 73 73 6f 72 73 2e 0a 2a 2a 0a 2a 2a 20  ccessors..**.** 
37b70 54 68 69 73 20 6f 70 63 6f 64 65 20 69 73 20 69  This opcode is i
37b80 6e 69 74 69 61 6c 6c 79 20 63 6f 64 65 64 20 61  nitially coded a
37b90 73 20 4f 50 5f 41 67 67 53 74 65 70 30 2e 20 20  s OP_AggStep0.  
37ba0 4f 6e 20 66 69 72 73 74 20 65 76 61 6c 75 61 74  On first evaluat
37bb0 69 6f 6e 2c 0a 2a 2a 20 74 68 65 20 46 75 6e 63  ion,.** the Func
37bc0 44 65 66 20 73 74 6f 72 65 64 20 69 6e 20 50 34  Def stored in P4
37bd0 20 69 73 20 63 6f 6e 76 65 72 74 65 64 20 69 6e   is converted in
37be0 74 6f 20 61 6e 20 73 71 6c 69 74 65 33 5f 63 6f  to an sqlite3_co
37bf0 6e 74 65 78 74 20 61 6e 64 0a 2a 2a 20 74 68 65  ntext and.** the
37c00 20 6f 70 63 6f 64 65 20 69 73 20 63 68 61 6e 67   opcode is chang
37c10 65 64 2e 20 20 49 6e 20 74 68 69 73 20 77 61 79  ed.  In this way
37c20 2c 20 74 68 65 20 69 6e 69 74 69 61 6c 69 7a 61  , the initializa
37c30 74 69 6f 6e 20 6f 66 20 74 68 65 0a 2a 2a 20 73  tion of the.** s
37c40 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 20 6f  qlite3_context o
37c50 6e 6c 79 20 68 61 70 70 65 6e 73 20 6f 6e 63 65  nly happens once
37c60 2c 20 69 6e 73 74 65 61 64 20 6f 66 20 6f 6e 20  , instead of on 
37c70 65 61 63 68 20 63 61 6c 6c 20 74 6f 20 74 68 65  each call to the
37c80 0a 2a 2a 20 73 74 65 70 20 66 75 6e 63 74 69 6f  .** step functio
37c90 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 41 67  n..*/.case OP_Ag
37ca0 67 49 6e 76 65 72 73 65 3a 0a 63 61 73 65 20 4f  gInverse:.case O
37cb0 50 5f 41 67 67 53 74 65 70 3a 20 7b 0a 20 20 69  P_AggStep: {.  i
37cc0 6e 74 20 6e 3b 0a 20 20 73 71 6c 69 74 65 33 5f  nt n;.  sqlite3_
37cd0 63 6f 6e 74 65 78 74 20 2a 70 43 74 78 3b 0a 0a  context *pCtx;..
37ce0 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
37cf0 34 74 79 70 65 3d 3d 50 34 5f 46 55 4e 43 44 45  4type==P4_FUNCDE
37d00 46 20 29 3b 0a 20 20 6e 20 3d 20 70 4f 70 2d 3e  F );.  n = pOp->
37d10 70 35 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f  p5;.  assert( pO
37d20 70 2d 3e 70 33 3e 30 20 26 26 20 70 4f 70 2d 3e  p->p3>0 && pOp->
37d30 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d  p3<=(p->nMem+1 -
37d40 20 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a   p->nCursor) );.
37d50 20 20 61 73 73 65 72 74 28 20 6e 3d 3d 30 20 7c    assert( n==0 |
37d60 7c 20 28 70 4f 70 2d 3e 70 32 3e 30 20 26 26 20  | (pOp->p2>0 && 
37d70 70 4f 70 2d 3e 70 32 2b 6e 3c 3d 28 70 2d 3e 6e  pOp->p2+n<=(p->n
37d80 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73  Mem+1 - p->nCurs
37d90 6f 72 29 2b 31 29 20 29 3b 0a 20 20 61 73 73 65  or)+1) );.  asse
37da0 72 74 28 20 70 4f 70 2d 3e 70 33 3c 70 4f 70 2d  rt( pOp->p3<pOp-
37db0 3e 70 32 20 7c 7c 20 70 4f 70 2d 3e 70 33 3e 3d  >p2 || pOp->p3>=
37dc0 70 4f 70 2d 3e 70 32 2b 6e 20 29 3b 0a 20 20 70  pOp->p2+n );.  p
37dd0 43 74 78 20 3d 20 73 71 6c 69 74 65 33 44 62 4d  Ctx = sqlite3DbM
37de0 61 6c 6c 6f 63 52 61 77 4e 4e 28 64 62 2c 20 6e  allocRawNN(db, n
37df0 2a 73 69 7a 65 6f 66 28 73 71 6c 69 74 65 33 5f  *sizeof(sqlite3_
37e00 76 61 6c 75 65 2a 29 20 2b 0a 20 20 20 20 20 20  value*) +.      
37e10 20 20 20 20 20 20 20 20 20 28 73 69 7a 65 6f 66           (sizeof
37e20 28 70 43 74 78 5b 30 5d 29 20 2b 20 73 69 7a 65  (pCtx[0]) + size
37e30 6f 66 28 4d 65 6d 29 20 2d 20 73 69 7a 65 6f 66  of(Mem) - sizeof
37e40 28 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 29  (sqlite3_value*)
37e50 29 29 3b 0a 20 20 69 66 28 20 70 43 74 78 3d 3d  ));.  if( pCtx==
37e60 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b  0 ) goto no_mem;
37e70 0a 20 20 70 43 74 78 2d 3e 70 4d 65 6d 20 3d 20  .  pCtx->pMem = 
37e80 30 3b 0a 20 20 70 43 74 78 2d 3e 70 4f 75 74 20  0;.  pCtx->pOut 
37e90 3d 20 28 4d 65 6d 2a 29 26 28 70 43 74 78 2d 3e  = (Mem*)&(pCtx->
37ea0 61 72 67 76 5b 6e 5d 29 3b 0a 20 20 73 71 6c 69  argv[n]);.  sqli
37eb0 74 65 33 56 64 62 65 4d 65 6d 49 6e 69 74 28 70  te3VdbeMemInit(p
37ec0 43 74 78 2d 3e 70 4f 75 74 2c 20 64 62 2c 20 4d  Ctx->pOut, db, M
37ed0 45 4d 5f 4e 75 6c 6c 29 3b 0a 20 20 70 43 74 78  EM_Null);.  pCtx
37ee0 2d 3e 70 46 75 6e 63 20 3d 20 70 4f 70 2d 3e 70  ->pFunc = pOp->p
37ef0 34 2e 70 46 75 6e 63 3b 0a 20 20 70 43 74 78 2d  4.pFunc;.  pCtx-
37f00 3e 69 4f 70 20 3d 20 28 69 6e 74 29 28 70 4f 70  >iOp = (int)(pOp
37f10 20 2d 20 61 4f 70 29 3b 0a 20 20 70 43 74 78 2d   - aOp);.  pCtx-
37f20 3e 70 56 64 62 65 20 3d 20 70 3b 0a 20 20 70 43  >pVdbe = p;.  pC
37f30 74 78 2d 3e 73 6b 69 70 46 6c 61 67 20 3d 20 30  tx->skipFlag = 0
37f40 3b 0a 20 20 70 43 74 78 2d 3e 69 73 45 72 72 6f  ;.  pCtx->isErro
37f50 72 20 3d 20 30 3b 0a 20 20 70 43 74 78 2d 3e 61  r = 0;.  pCtx->a
37f60 72 67 63 20 3d 20 6e 3b 0a 20 20 70 4f 70 2d 3e  rgc = n;.  pOp->
37f70 70 34 74 79 70 65 20 3d 20 50 34 5f 46 55 4e 43  p4type = P4_FUNC
37f80 43 54 58 3b 0a 20 20 70 4f 70 2d 3e 70 34 2e 70  CTX;.  pOp->p4.p
37f90 43 74 78 20 3d 20 70 43 74 78 3b 0a 0a 20 20 2f  Ctx = pCtx;..  /
37fa0 2a 20 4f 50 5f 41 67 67 49 6e 76 65 72 73 65 20  * OP_AggInverse 
37fb0 6d 75 73 74 20 68 61 76 65 20 50 31 3d 3d 31 20  must have P1==1 
37fc0 61 6e 64 20 4f 50 5f 41 67 67 53 74 65 70 20 6d  and OP_AggStep m
37fd0 75 73 74 20 68 61 76 65 20 50 31 3d 3d 30 20 2a  ust have P1==0 *
37fe0 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  /.  assert( pOp-
37ff0 3e 70 31 3d 3d 28 70 4f 70 2d 3e 6f 70 63 6f 64  >p1==(pOp->opcod
38000 65 3d 3d 4f 50 5f 41 67 67 49 6e 76 65 72 73 65  e==OP_AggInverse
38010 29 20 29 3b 0a 0a 20 20 70 4f 70 2d 3e 6f 70 63  ) );..  pOp->opc
38020 6f 64 65 20 3d 20 4f 50 5f 41 67 67 53 74 65 70  ode = OP_AggStep
38030 31 3b 0a 20 20 2f 2a 20 46 61 6c 6c 20 74 68 72  1;.  /* Fall thr
38040 6f 75 67 68 20 69 6e 74 6f 20 4f 50 5f 41 67 67  ough into OP_Agg
38050 53 74 65 70 20 2a 2f 0a 7d 0a 63 61 73 65 20 4f  Step */.}.case O
38060 50 5f 41 67 67 53 74 65 70 31 3a 20 7b 0a 20 20  P_AggStep1: {.  
38070 69 6e 74 20 69 3b 0a 20 20 73 71 6c 69 74 65 33  int i;.  sqlite3
38080 5f 63 6f 6e 74 65 78 74 20 2a 70 43 74 78 3b 0a  _context *pCtx;.
38090 20 20 4d 65 6d 20 2a 70 4d 65 6d 3b 0a 0a 20 20    Mem *pMem;..  
380a0 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74  assert( pOp->p4t
380b0 79 70 65 3d 3d 50 34 5f 46 55 4e 43 43 54 58 20  ype==P4_FUNCCTX 
380c0 29 3b 0a 20 20 70 43 74 78 20 3d 20 70 4f 70 2d  );.  pCtx = pOp-
380d0 3e 70 34 2e 70 43 74 78 3b 0a 20 20 70 4d 65 6d  >p4.pCtx;.  pMem
380e0 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33   = &aMem[pOp->p3
380f0 5d 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54  ];..#ifdef SQLIT
38100 45 5f 44 45 42 55 47 0a 20 20 69 66 28 20 70 4f  E_DEBUG.  if( pO
38110 70 2d 3e 70 31 20 29 7b 0a 20 20 20 20 2f 2a 20  p->p1 ){.    /* 
38120 54 68 69 73 20 69 73 20 61 6e 20 4f 50 5f 41 67  This is an OP_Ag
38130 67 49 6e 76 65 72 73 65 20 63 61 6c 6c 2e 20 20  gInverse call.  
38140 56 65 72 69 66 79 20 74 68 61 74 20 78 53 74 65  Verify that xSte
38150 70 20 68 61 73 20 61 6c 77 61 79 73 0a 20 20 20  p has always.   
38160 20 2a 2a 20 62 65 65 6e 20 63 61 6c 6c 65 64 20   ** been called 
38170 61 74 20 6c 65 61 73 74 20 6f 6e 63 65 20 70 72  at least once pr
38180 69 6f 72 20 74 6f 20 61 6e 79 20 78 49 6e 76 65  ior to any xInve
38190 72 73 65 20 63 61 6c 6c 2e 20 2a 2f 0a 20 20 20  rse call. */.   
381a0 20 61 73 73 65 72 74 28 20 70 4d 65 6d 2d 3e 75   assert( pMem->u
381b0 54 65 6d 70 3d 3d 30 78 31 31 32 32 65 30 65 33  Temp==0x1122e0e3
381c0 20 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20   );.  }else{.   
381d0 20 2f 2a 20 54 68 69 73 20 69 73 20 61 6e 20 4f   /* This is an O
381e0 50 5f 41 67 67 53 74 65 70 20 63 61 6c 6c 2e 20  P_AggStep call. 
381f0 20 4d 61 72 6b 20 69 74 20 61 73 20 73 75 63 68   Mark it as such
38200 2e 20 2a 2f 0a 20 20 20 20 70 4d 65 6d 2d 3e 75  . */.    pMem->u
38210 54 65 6d 70 20 3d 20 30 78 31 31 32 32 65 30 65  Temp = 0x1122e0e
38220 33 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 20  3;.  }.#endif.. 
38230 20 2f 2a 20 49 66 20 74 68 69 73 20 66 75 6e 63   /* If this func
38240 74 69 6f 6e 20 69 73 20 69 6e 73 69 64 65 20 6f  tion is inside o
38250 66 20 61 20 74 72 69 67 67 65 72 2c 20 74 68 65  f a trigger, the
38260 20 72 65 67 69 73 74 65 72 20 61 72 72 61 79 20   register array 
38270 69 6e 20 61 4d 65 6d 5b 5d 0a 20 20 2a 2a 20 6d  in aMem[].  ** m
38280 69 67 68 74 20 63 68 61 6e 67 65 20 66 72 6f 6d  ight change from
38290 20 6f 6e 65 20 65 76 61 6c 75 61 74 69 6f 6e 20   one evaluat