/ Hex Artifact Content
Login

Artifact cdfafd2dea7b96e7b5f7dbbdc2ace9c2549c1b4f4e2e2b7c233451c5faf39e5c:


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: 67 22 2c 20 70 2d 3e 75 2e 72 29 3b 0a 23 65 6e  g", p->u.r);.#en
4e90: 64 69 66 0a 20 20 7d 65 6c 73 65 20 69 66 28 20  dif.  }else if( 
4ea0: 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 49 73  sqlite3VdbeMemIs
4eb0: 52 6f 77 53 65 74 28 70 29 20 29 7b 0a 20 20 20  RowSet(p) ){.   
4ec0: 20 70 72 69 6e 74 66 28 22 20 28 72 6f 77 73 65   printf(" (rowse
4ed0: 74 29 22 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  t)");.  }else{. 
4ee0: 20 20 20 63 68 61 72 20 7a 42 75 66 5b 32 30 30     char zBuf[200
4ef0: 5d 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  ];.    sqlite3Vd
4f00: 62 65 4d 65 6d 50 72 65 74 74 79 50 72 69 6e 74  beMemPrettyPrint
4f10: 28 70 2c 20 7a 42 75 66 29 3b 0a 20 20 20 20 70  (p, zBuf);.    p
4f20: 72 69 6e 74 66 28 22 20 25 73 22 2c 20 7a 42 75  rintf(" %s", zBu
4f30: 66 29 3b 0a 20 20 7d 0a 20 20 69 66 28 20 70 2d  f);.  }.  if( p-
4f40: 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 53 75 62  >flags & MEM_Sub
4f50: 74 79 70 65 20 29 20 70 72 69 6e 74 66 28 22 20  type ) printf(" 
4f60: 73 75 62 74 79 70 65 3d 30 78 25 30 32 78 22 2c  subtype=0x%02x",
4f70: 20 70 2d 3e 65 53 75 62 74 79 70 65 29 3b 0a 7d   p->eSubtype);.}
4f80: 0a 73 74 61 74 69 63 20 76 6f 69 64 20 72 65 67  .static void reg
4f90: 69 73 74 65 72 54 72 61 63 65 28 69 6e 74 20 69  isterTrace(int i
4fa0: 52 65 67 2c 20 4d 65 6d 20 2a 70 29 7b 0a 20 20  Reg, Mem *p){.  
4fb0: 70 72 69 6e 74 66 28 22 52 45 47 5b 25 64 5d 20  printf("REG[%d] 
4fc0: 3d 20 22 2c 20 69 52 65 67 29 3b 0a 20 20 6d 65  = ", iReg);.  me
4fd0: 6d 54 72 61 63 65 50 72 69 6e 74 28 70 29 3b 0a  mTracePrint(p);.
4fe0: 20 20 70 72 69 6e 74 66 28 22 5c 6e 22 29 3b 0a    printf("\n");.
4ff0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 43 68 65    sqlite3VdbeChe
5000: 63 6b 4d 65 6d 49 6e 76 61 72 69 61 6e 74 73 28  ckMemInvariants(
5010: 70 29 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 23 69  p);.}.#endif..#i
5020: 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55  fdef SQLITE_DEBU
5030: 47 0a 23 20 20 64 65 66 69 6e 65 20 52 45 47 49  G.#  define REGI
5040: 53 54 45 52 5f 54 52 41 43 45 28 52 2c 4d 29 20  STER_TRACE(R,M) 
5050: 69 66 28 64 62 2d 3e 66 6c 61 67 73 26 53 51 4c  if(db->flags&SQL
5060: 49 54 45 5f 56 64 62 65 54 72 61 63 65 29 72 65  ITE_VdbeTrace)re
5070: 67 69 73 74 65 72 54 72 61 63 65 28 52 2c 4d 29  gisterTrace(R,M)
5080: 0a 23 65 6c 73 65 0a 23 20 20 64 65 66 69 6e 65  .#else.#  define
5090: 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28   REGISTER_TRACE(
50a0: 52 2c 4d 29 0a 23 65 6e 64 69 66 0a 0a 0a 23 69  R,M).#endif...#i
50b0: 66 64 65 66 20 56 44 42 45 5f 50 52 4f 46 49 4c  fdef VDBE_PROFIL
50c0: 45 0a 0a 2f 2a 20 0a 2a 2a 20 68 77 74 69 6d 65  E../* .** hwtime
50d0: 2e 68 20 63 6f 6e 74 61 69 6e 73 20 69 6e 6c 69  .h contains inli
50e0: 6e 65 20 61 73 73 65 6d 62 6c 65 72 20 63 6f 64  ne assembler cod
50f0: 65 20 66 6f 72 20 69 6d 70 6c 65 6d 65 6e 74 69  e for implementi
5100: 6e 67 20 0a 2a 2a 20 68 69 67 68 2d 70 65 72 66  ng .** high-perf
5110: 6f 72 6d 61 6e 63 65 20 74 69 6d 69 6e 67 20 72  ormance timing r
5120: 6f 75 74 69 6e 65 73 2e 0a 2a 2f 0a 23 69 6e 63  outines..*/.#inc
5130: 6c 75 64 65 20 22 68 77 74 69 6d 65 2e 68 22 0a  lude "hwtime.h".
5140: 0a 23 65 6e 64 69 66 0a 0a 23 69 66 6e 64 65 66  .#endif..#ifndef
5150: 20 4e 44 45 42 55 47 0a 2f 2a 0a 2a 2a 20 54 68   NDEBUG./*.** Th
5160: 69 73 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 6f  is function is o
5170: 6e 6c 79 20 63 61 6c 6c 65 64 20 66 72 6f 6d 20  nly called from 
5180: 77 69 74 68 69 6e 20 61 6e 20 61 73 73 65 72 74  within an assert
5190: 28 29 20 65 78 70 72 65 73 73 69 6f 6e 2e 20 49  () expression. I
51a0: 74 0a 2a 2a 20 63 68 65 63 6b 73 20 74 68 61 74  t.** checks that
51b0: 20 74 68 65 20 73 71 6c 69 74 65 33 2e 6e 54 72   the sqlite3.nTr
51c0: 61 6e 73 61 63 74 69 6f 6e 20 76 61 72 69 61 62  ansaction variab
51d0: 6c 65 20 69 73 20 63 6f 72 72 65 63 74 6c 79 20  le is correctly 
51e0: 73 65 74 20 74 6f 0a 2a 2a 20 74 68 65 20 6e 75  set to.** the nu
51f0: 6d 62 65 72 20 6f 66 20 6e 6f 6e 2d 74 72 61 6e  mber of non-tran
5200: 73 61 63 74 69 6f 6e 20 73 61 76 65 70 6f 69 6e  saction savepoin
5210: 74 73 20 63 75 72 72 65 6e 74 6c 79 20 69 6e 20  ts currently in 
5220: 74 68 65 20 0a 2a 2a 20 6c 69 6e 6b 65 64 20 6c  the .** linked l
5230: 69 73 74 20 73 74 61 72 74 69 6e 67 20 61 74 20  ist starting at 
5240: 73 71 6c 69 74 65 33 2e 70 53 61 76 65 70 6f 69  sqlite3.pSavepoi
5250: 6e 74 2e 0a 2a 2a 20 0a 2a 2a 20 55 73 61 67 65  nt..** .** Usage
5260: 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 61 73 73 65  :.**.**     asse
5270: 72 74 28 20 63 68 65 63 6b 53 61 76 65 70 6f 69  rt( checkSavepoi
5280: 6e 74 43 6f 75 6e 74 28 64 62 29 20 29 3b 0a 2a  ntCount(db) );.*
5290: 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 63 68 65  /.static int che
52a0: 63 6b 53 61 76 65 70 6f 69 6e 74 43 6f 75 6e 74  ckSavepointCount
52b0: 28 73 71 6c 69 74 65 33 20 2a 64 62 29 7b 0a 20  (sqlite3 *db){. 
52c0: 20 69 6e 74 20 6e 20 3d 20 30 3b 0a 20 20 53 61   int n = 0;.  Sa
52d0: 76 65 70 6f 69 6e 74 20 2a 70 3b 0a 20 20 66 6f  vepoint *p;.  fo
52e0: 72 28 70 3d 64 62 2d 3e 70 53 61 76 65 70 6f 69  r(p=db->pSavepoi
52f0: 6e 74 3b 20 70 3b 20 70 3d 70 2d 3e 70 4e 65 78  nt; p; p=p->pNex
5300: 74 29 20 6e 2b 2b 3b 0a 20 20 61 73 73 65 72 74  t) n++;.  assert
5310: 28 20 6e 3d 3d 28 64 62 2d 3e 6e 53 61 76 65 70  ( n==(db->nSavep
5320: 6f 69 6e 74 20 2b 20 64 62 2d 3e 69 73 54 72 61  oint + db->isTra
5330: 6e 73 61 63 74 69 6f 6e 53 61 76 65 70 6f 69 6e  nsactionSavepoin
5340: 74 29 20 29 3b 0a 20 20 72 65 74 75 72 6e 20 31  t) );.  return 1
5350: 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  ;.}.#endif../*.*
5360: 2a 20 52 65 74 75 72 6e 20 74 68 65 20 72 65 67  * Return the reg
5370: 69 73 74 65 72 20 6f 66 20 70 4f 70 2d 3e 70 32  ister of pOp->p2
5380: 20 61 66 74 65 72 20 66 69 72 73 74 20 70 72 65   after first pre
5390: 70 61 72 69 6e 67 20 69 74 20 74 6f 20 62 65 0a  paring it to be.
53a0: 2a 2a 20 6f 76 65 72 77 72 69 74 74 65 6e 20 77  ** overwritten w
53b0: 69 74 68 20 61 6e 20 69 6e 74 65 67 65 72 20 76  ith an integer v
53c0: 61 6c 75 65 2e 0a 2a 2f 0a 73 74 61 74 69 63 20  alue..*/.static 
53d0: 53 51 4c 49 54 45 5f 4e 4f 49 4e 4c 49 4e 45 20  SQLITE_NOINLINE 
53e0: 4d 65 6d 20 2a 6f 75 74 32 50 72 65 72 65 6c 65  Mem *out2Prerele
53f0: 61 73 65 57 69 74 68 43 6c 65 61 72 28 4d 65 6d  aseWithClear(Mem
5400: 20 2a 70 4f 75 74 29 7b 0a 20 20 73 71 6c 69 74   *pOut){.  sqlit
5410: 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c  e3VdbeMemSetNull
5420: 28 70 4f 75 74 29 3b 0a 20 20 70 4f 75 74 2d 3e  (pOut);.  pOut->
5430: 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b  flags = MEM_Int;
5440: 0a 20 20 72 65 74 75 72 6e 20 70 4f 75 74 3b 0a  .  return pOut;.
5450: 7d 0a 73 74 61 74 69 63 20 4d 65 6d 20 2a 6f 75  }.static Mem *ou
5460: 74 32 50 72 65 72 65 6c 65 61 73 65 28 56 64 62  t2Prerelease(Vdb
5470: 65 20 2a 70 2c 20 56 64 62 65 4f 70 20 2a 70 4f  e *p, VdbeOp *pO
5480: 70 29 7b 0a 20 20 4d 65 6d 20 2a 70 4f 75 74 3b  p){.  Mem *pOut;
5490: 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
54a0: 70 32 3e 30 20 29 3b 0a 20 20 61 73 73 65 72 74  p2>0 );.  assert
54b0: 28 20 70 4f 70 2d 3e 70 32 3c 3d 28 70 2d 3e 6e  ( pOp->p2<=(p->n
54c0: 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73  Mem+1 - p->nCurs
54d0: 6f 72 29 20 29 3b 0a 20 20 70 4f 75 74 20 3d 20  or) );.  pOut = 
54e0: 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32  &p->aMem[pOp->p2
54f0: 5d 3b 0a 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43  ];.  memAboutToC
5500: 68 61 6e 67 65 28 70 2c 20 70 4f 75 74 29 3b 0a  hange(p, pOut);.
5510: 20 20 69 66 28 20 56 64 62 65 4d 65 6d 44 79 6e    if( VdbeMemDyn
5520: 61 6d 69 63 28 70 4f 75 74 29 20 29 7b 20 2f 2a  amic(pOut) ){ /*
5530: 4f 50 54 49 4d 49 5a 41 54 49 4f 4e 2d 49 46 2d  OPTIMIZATION-IF-
5540: 46 41 4c 53 45 2a 2f 0a 20 20 20 20 72 65 74 75  FALSE*/.    retu
5550: 72 6e 20 6f 75 74 32 50 72 65 72 65 6c 65 61 73  rn out2Prereleas
5560: 65 57 69 74 68 43 6c 65 61 72 28 70 4f 75 74 29  eWithClear(pOut)
5570: 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70  ;.  }else{.    p
5580: 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d  Out->flags = MEM
5590: 5f 49 6e 74 3b 0a 20 20 20 20 72 65 74 75 72 6e  _Int;.    return
55a0: 20 70 4f 75 74 3b 0a 20 20 7d 0a 7d 0a 0a 0a 2f   pOut;.  }.}.../
55b0: 2a 0a 2a 2a 20 45 78 65 63 75 74 65 20 61 73 20  *.** Execute as 
55c0: 6d 75 63 68 20 6f 66 20 61 20 56 44 42 45 20 70  much of a VDBE p
55d0: 72 6f 67 72 61 6d 20 61 73 20 77 65 20 63 61 6e  rogram as we can
55e0: 2e 0a 2a 2a 20 54 68 69 73 20 69 73 20 74 68 65  ..** This is the
55f0: 20 63 6f 72 65 20 6f 66 20 73 71 6c 69 74 65 33   core of sqlite3
5600: 5f 73 74 65 70 28 29 2e 20 20 0a 2a 2f 0a 69 6e  _step().  .*/.in
5610: 74 20 73 71 6c 69 74 65 33 56 64 62 65 45 78 65  t sqlite3VdbeExe
5620: 63 28 0a 20 20 56 64 62 65 20 2a 70 20 20 20 20  c(.  Vdbe *p    
5630: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5640: 2f 2a 20 54 68 65 20 56 44 42 45 20 2a 2f 0a 29  /* The VDBE */.)
5650: 7b 0a 20 20 4f 70 20 2a 61 4f 70 20 3d 20 70 2d  {.  Op *aOp = p-
5660: 3e 61 4f 70 3b 20 20 20 20 20 20 20 20 20 20 2f  >aOp;          /
5670: 2a 20 43 6f 70 79 20 6f 66 20 70 2d 3e 61 4f 70  * Copy of p->aOp
5680: 20 2a 2f 0a 20 20 4f 70 20 2a 70 4f 70 20 3d 20   */.  Op *pOp = 
5690: 61 4f 70 3b 20 20 20 20 20 20 20 20 20 20 20 20  aOp;            
56a0: 20 2f 2a 20 43 75 72 72 65 6e 74 20 6f 70 65 72   /* Current oper
56b0: 61 74 69 6f 6e 20 2a 2f 0a 23 69 66 20 64 65 66  ation */.#if def
56c0: 69 6e 65 64 28 53 51 4c 49 54 45 5f 44 45 42 55  ined(SQLITE_DEBU
56d0: 47 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 56 44  G) || defined(VD
56e0: 42 45 5f 50 52 4f 46 49 4c 45 29 0a 20 20 4f 70  BE_PROFILE).  Op
56f0: 20 2a 70 4f 72 69 67 4f 70 3b 20 20 20 20 20 20   *pOrigOp;      
5700: 20 20 20 20 20 20 20 20 20 2f 2a 20 56 61 6c 75           /* Valu
5710: 65 20 6f 66 20 70 4f 70 20 61 74 20 74 68 65 20  e of pOp at the 
5720: 74 6f 70 20 6f 66 20 74 68 65 20 6c 6f 6f 70 20  top of the loop 
5730: 2a 2f 0a 23 65 6e 64 69 66 0a 23 69 66 64 65 66  */.#endif.#ifdef
5740: 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20   SQLITE_DEBUG.  
5750: 69 6e 74 20 6e 45 78 74 72 61 44 65 6c 65 74 65  int nExtraDelete
5760: 20 3d 20 30 3b 20 20 20 20 20 20 2f 2a 20 56 65   = 0;      /* Ve
5770: 72 69 66 69 65 73 20 46 4f 52 44 45 4c 45 54 45  rifies FORDELETE
5780: 20 61 6e 64 20 41 55 58 44 45 4c 45 54 45 20 66   and AUXDELETE f
5790: 6c 61 67 73 20 2a 2f 0a 23 65 6e 64 69 66 0a 20  lags */.#endif. 
57a0: 20 69 6e 74 20 72 63 20 3d 20 53 51 4c 49 54 45   int rc = SQLITE
57b0: 5f 4f 4b 3b 20 20 20 20 20 20 20 20 2f 2a 20 56  _OK;        /* V
57c0: 61 6c 75 65 20 74 6f 20 72 65 74 75 72 6e 20 2a  alue to return *
57d0: 2f 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62 20  /.  sqlite3 *db 
57e0: 3d 20 70 2d 3e 64 62 3b 20 20 20 20 20 20 20 2f  = p->db;       /
57f0: 2a 20 54 68 65 20 64 61 74 61 62 61 73 65 20 2a  * The database *
5800: 2f 0a 20 20 75 38 20 72 65 73 65 74 53 63 68 65  /.  u8 resetSche
5810: 6d 61 4f 6e 46 61 75 6c 74 20 3d 20 30 3b 20 2f  maOnFault = 0; /
5820: 2a 20 52 65 73 65 74 20 73 63 68 65 6d 61 20 61  * Reset schema a
5830: 66 74 65 72 20 61 6e 20 65 72 72 6f 72 20 69 66  fter an error if
5840: 20 70 6f 73 69 74 69 76 65 20 2a 2f 0a 20 20 75   positive */.  u
5850: 38 20 65 6e 63 6f 64 69 6e 67 20 3d 20 45 4e 43  8 encoding = ENC
5860: 28 64 62 29 3b 20 20 20 20 20 2f 2a 20 54 68 65  (db);     /* The
5870: 20 64 61 74 61 62 61 73 65 20 65 6e 63 6f 64 69   database encodi
5880: 6e 67 20 2a 2f 0a 20 20 69 6e 74 20 69 43 6f 6d  ng */.  int iCom
5890: 70 61 72 65 20 3d 20 30 3b 20 20 20 20 20 20 20  pare = 0;       
58a0: 20 20 20 2f 2a 20 52 65 73 75 6c 74 20 6f 66 20     /* Result of 
58b0: 6c 61 73 74 20 63 6f 6d 70 61 72 69 73 6f 6e 20  last comparison 
58c0: 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 6e 56  */.  unsigned nV
58d0: 6d 53 74 65 70 20 3d 20 30 3b 20 20 20 20 20 20  mStep = 0;      
58e0: 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 76 69 72  /* Number of vir
58f0: 74 75 61 6c 20 6d 61 63 68 69 6e 65 20 73 74 65  tual machine ste
5900: 70 73 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51  ps */.#ifndef SQ
5910: 4c 49 54 45 5f 4f 4d 49 54 5f 50 52 4f 47 52 45  LITE_OMIT_PROGRE
5920: 53 53 5f 43 41 4c 4c 42 41 43 4b 0a 20 20 75 6e  SS_CALLBACK.  un
5930: 73 69 67 6e 65 64 20 6e 50 72 6f 67 72 65 73 73  signed nProgress
5940: 4c 69 6d 69 74 3b 20 20 20 2f 2a 20 49 6e 76 6f  Limit;   /* Invo
5950: 6b 65 20 78 50 72 6f 67 72 65 73 73 28 29 20 77  ke xProgress() w
5960: 68 65 6e 20 6e 56 6d 53 74 65 70 20 72 65 61 63  hen nVmStep reac
5970: 68 65 73 20 74 68 69 73 20 2a 2f 0a 23 65 6e 64  hes this */.#end
5980: 69 66 0a 20 20 4d 65 6d 20 2a 61 4d 65 6d 20 3d  if.  Mem *aMem =
5990: 20 70 2d 3e 61 4d 65 6d 3b 20 20 20 20 20 20 20   p->aMem;       
59a0: 2f 2a 20 43 6f 70 79 20 6f 66 20 70 2d 3e 61 4d  /* Copy of p->aM
59b0: 65 6d 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 49 6e  em */.  Mem *pIn
59c0: 31 20 3d 20 30 3b 20 20 20 20 20 20 20 20 20 20  1 = 0;          
59d0: 20 20 20 2f 2a 20 31 73 74 20 69 6e 70 75 74 20     /* 1st input 
59e0: 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20 4d 65 6d  operand */.  Mem
59f0: 20 2a 70 49 6e 32 20 3d 20 30 3b 20 20 20 20 20   *pIn2 = 0;     
5a00: 20 20 20 20 20 20 20 20 2f 2a 20 32 6e 64 20 69          /* 2nd i
5a10: 6e 70 75 74 20 6f 70 65 72 61 6e 64 20 2a 2f 0a  nput operand */.
5a20: 20 20 4d 65 6d 20 2a 70 49 6e 33 20 3d 20 30 3b    Mem *pIn3 = 0;
5a30: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
5a40: 33 72 64 20 69 6e 70 75 74 20 6f 70 65 72 61 6e  3rd input operan
5a50: 64 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 4f 75 74  d */.  Mem *pOut
5a60: 20 3d 20 30 3b 20 20 20 20 20 20 20 20 20 20 20   = 0;           
5a70: 20 20 2f 2a 20 4f 75 74 70 75 74 20 6f 70 65 72    /* Output oper
5a80: 61 6e 64 20 2a 2f 0a 23 69 66 64 65 66 20 56 44  and */.#ifdef VD
5a90: 42 45 5f 50 52 4f 46 49 4c 45 0a 20 20 75 36 34  BE_PROFILE.  u64
5aa0: 20 73 74 61 72 74 3b 20 20 20 20 20 20 20 20 20   start;         
5ab0: 20 20 20 20 20 20 20 20 2f 2a 20 43 50 55 20 63          /* CPU c
5ac0: 6c 6f 63 6b 20 63 6f 75 6e 74 20 61 74 20 73 74  lock count at st
5ad0: 61 72 74 20 6f 66 20 6f 70 63 6f 64 65 20 2a 2f  art of opcode */
5ae0: 0a 23 65 6e 64 69 66 0a 20 20 2f 2a 2a 2a 20 49  .#endif.  /*** I
5af0: 4e 53 45 52 54 20 53 54 41 43 4b 20 55 4e 49 4f  NSERT STACK UNIO
5b00: 4e 20 48 45 52 45 20 2a 2a 2a 2f 0a 0a 20 20 61  N HERE ***/..  a
5b10: 73 73 65 72 74 28 20 70 2d 3e 6d 61 67 69 63 3d  ssert( p->magic=
5b20: 3d 56 44 42 45 5f 4d 41 47 49 43 5f 52 55 4e 20  =VDBE_MAGIC_RUN 
5b30: 29 3b 20 20 2f 2a 20 73 71 6c 69 74 65 33 5f 73  );  /* sqlite3_s
5b40: 74 65 70 28 29 20 76 65 72 69 66 69 65 73 20 74  tep() verifies t
5b50: 68 69 73 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33  his */.  sqlite3
5b60: 56 64 62 65 45 6e 74 65 72 28 70 29 3b 0a 23 69  VdbeEnter(p);.#i
5b70: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
5b80: 54 5f 50 52 4f 47 52 45 53 53 5f 43 41 4c 4c 42  T_PROGRESS_CALLB
5b90: 41 43 4b 0a 20 20 69 66 28 20 64 62 2d 3e 78 50  ACK.  if( db->xP
5ba0: 72 6f 67 72 65 73 73 20 29 7b 0a 20 20 20 20 75  rogress ){.    u
5bb0: 33 32 20 69 50 72 69 6f 72 20 3d 20 70 2d 3e 61  32 iPrior = p->a
5bc0: 43 6f 75 6e 74 65 72 5b 53 51 4c 49 54 45 5f 53  Counter[SQLITE_S
5bd0: 54 4d 54 53 54 41 54 55 53 5f 56 4d 5f 53 54 45  TMTSTATUS_VM_STE
5be0: 50 5d 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20  P];.    assert( 
5bf0: 30 20 3c 20 64 62 2d 3e 6e 50 72 6f 67 72 65 73  0 < db->nProgres
5c00: 73 4f 70 73 20 29 3b 0a 20 20 20 20 6e 50 72 6f  sOps );.    nPro
5c10: 67 72 65 73 73 4c 69 6d 69 74 20 3d 20 64 62 2d  gressLimit = db-
5c20: 3e 6e 50 72 6f 67 72 65 73 73 4f 70 73 20 2d 20  >nProgressOps - 
5c30: 28 69 50 72 69 6f 72 20 25 20 64 62 2d 3e 6e 50  (iPrior % db->nP
5c40: 72 6f 67 72 65 73 73 4f 70 73 29 3b 0a 20 20 7d  rogressOps);.  }
5c50: 65 6c 73 65 7b 0a 20 20 20 20 6e 50 72 6f 67 72  else{.    nProgr
5c60: 65 73 73 4c 69 6d 69 74 20 3d 20 30 78 66 66 66  essLimit = 0xfff
5c70: 66 66 66 66 66 3b 0a 20 20 7d 0a 23 65 6e 64 69  fffff;.  }.#endi
5c80: 66 0a 20 20 69 66 28 20 70 2d 3e 72 63 3d 3d 53  f.  if( p->rc==S
5c90: 51 4c 49 54 45 5f 4e 4f 4d 45 4d 20 29 7b 0a 20  QLITE_NOMEM ){. 
5ca0: 20 20 20 2f 2a 20 54 68 69 73 20 68 61 70 70 65     /* This happe
5cb0: 6e 73 20 69 66 20 61 20 6d 61 6c 6c 6f 63 28 29  ns if a malloc()
5cc0: 20 69 6e 73 69 64 65 20 61 20 63 61 6c 6c 20 74   inside a call t
5cd0: 6f 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e  o sqlite3_column
5ce0: 5f 74 65 78 74 28 29 20 6f 72 0a 20 20 20 20 2a  _text() or.    *
5cf0: 2a 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e  * sqlite3_column
5d00: 5f 74 65 78 74 31 36 28 29 20 66 61 69 6c 65 64  _text16() failed
5d10: 2e 20 20 2a 2f 0a 20 20 20 20 67 6f 74 6f 20 6e  .  */.    goto n
5d20: 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 20 20 61 73 73  o_mem;.  }.  ass
5d30: 65 72 74 28 20 70 2d 3e 72 63 3d 3d 53 51 4c 49  ert( p->rc==SQLI
5d40: 54 45 5f 4f 4b 20 7c 7c 20 28 70 2d 3e 72 63 26  TE_OK || (p->rc&
5d50: 30 78 66 66 29 3d 3d 53 51 4c 49 54 45 5f 42 55  0xff)==SQLITE_BU
5d60: 53 59 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  SY );.  assert( 
5d70: 70 2d 3e 62 49 73 52 65 61 64 65 72 20 7c 7c 20  p->bIsReader || 
5d80: 70 2d 3e 72 65 61 64 4f 6e 6c 79 21 3d 30 20 29  p->readOnly!=0 )
5d90: 3b 0a 20 20 70 2d 3e 69 43 75 72 72 65 6e 74 54  ;.  p->iCurrentT
5da0: 69 6d 65 20 3d 20 30 3b 0a 20 20 61 73 73 65 72  ime = 0;.  asser
5db0: 74 28 20 70 2d 3e 65 78 70 6c 61 69 6e 3d 3d 30  t( p->explain==0
5dc0: 20 29 3b 0a 20 20 70 2d 3e 70 52 65 73 75 6c 74   );.  p->pResult
5dd0: 53 65 74 20 3d 20 30 3b 0a 20 20 64 62 2d 3e 62  Set = 0;.  db->b
5de0: 75 73 79 48 61 6e 64 6c 65 72 2e 6e 42 75 73 79  usyHandler.nBusy
5df0: 20 3d 20 30 3b 0a 20 20 69 66 28 20 64 62 2d 3e   = 0;.  if( db->
5e00: 75 31 2e 69 73 49 6e 74 65 72 72 75 70 74 65 64  u1.isInterrupted
5e10: 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75   ) goto abort_du
5e20: 65 5f 74 6f 5f 69 6e 74 65 72 72 75 70 74 3b 0a  e_to_interrupt;.
5e30: 20 20 73 71 6c 69 74 65 33 56 64 62 65 49 4f 54    sqlite3VdbeIOT
5e40: 72 61 63 65 53 71 6c 28 70 29 3b 0a 23 69 66 64  raceSql(p);.#ifd
5e50: 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a  ef SQLITE_DEBUG.
5e60: 20 20 73 71 6c 69 74 65 33 42 65 67 69 6e 42 65    sqlite3BeginBe
5e70: 6e 69 67 6e 4d 61 6c 6c 6f 63 28 29 3b 0a 20 20  nignMalloc();.  
5e80: 69 66 28 20 70 2d 3e 70 63 3d 3d 30 0a 20 20 20  if( p->pc==0.   
5e90: 26 26 20 28 70 2d 3e 64 62 2d 3e 66 6c 61 67 73  && (p->db->flags
5ea0: 20 26 20 28 53 51 4c 49 54 45 5f 56 64 62 65 4c   & (SQLITE_VdbeL
5eb0: 69 73 74 69 6e 67 7c 53 51 4c 49 54 45 5f 56 64  isting|SQLITE_Vd
5ec0: 62 65 45 51 50 7c 53 51 4c 49 54 45 5f 56 64 62  beEQP|SQLITE_Vdb
5ed0: 65 54 72 61 63 65 29 29 21 3d 30 0a 20 20 29 7b  eTrace))!=0.  ){
5ee0: 0a 20 20 20 20 69 6e 74 20 69 3b 0a 20 20 20 20  .    int i;.    
5ef0: 69 6e 74 20 6f 6e 63 65 20 3d 20 31 3b 0a 20 20  int once = 1;.  
5f00: 20 20 73 71 6c 69 74 65 33 56 64 62 65 50 72 69    sqlite3VdbePri
5f10: 6e 74 53 71 6c 28 70 29 3b 0a 20 20 20 20 69 66  ntSql(p);.    if
5f20: 28 20 70 2d 3e 64 62 2d 3e 66 6c 61 67 73 20 26  ( p->db->flags &
5f30: 20 53 51 4c 49 54 45 5f 56 64 62 65 4c 69 73 74   SQLITE_VdbeList
5f40: 69 6e 67 20 29 7b 0a 20 20 20 20 20 20 70 72 69  ing ){.      pri
5f50: 6e 74 66 28 22 56 44 42 45 20 50 72 6f 67 72 61  ntf("VDBE Progra
5f60: 6d 20 4c 69 73 74 69 6e 67 3a 5c 6e 22 29 3b 0a  m Listing:\n");.
5f70: 20 20 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 69        for(i=0; i
5f80: 3c 70 2d 3e 6e 4f 70 3b 20 69 2b 2b 29 7b 0a 20  <p->nOp; i++){. 
5f90: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
5fa0: 62 65 50 72 69 6e 74 4f 70 28 73 74 64 6f 75 74  bePrintOp(stdout
5fb0: 2c 20 69 2c 20 26 61 4f 70 5b 69 5d 29 3b 0a 20  , i, &aOp[i]);. 
5fc0: 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20       }.    }.   
5fd0: 20 69 66 28 20 70 2d 3e 64 62 2d 3e 66 6c 61 67   if( p->db->flag
5fe0: 73 20 26 20 53 51 4c 49 54 45 5f 56 64 62 65 45  s & SQLITE_VdbeE
5ff0: 51 50 20 29 7b 0a 20 20 20 20 20 20 66 6f 72 28  QP ){.      for(
6000: 69 3d 30 3b 20 69 3c 70 2d 3e 6e 4f 70 3b 20 69  i=0; i<p->nOp; i
6010: 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 69 66 28  ++){.        if(
6020: 20 61 4f 70 5b 69 5d 2e 6f 70 63 6f 64 65 3d 3d   aOp[i].opcode==
6030: 4f 50 5f 45 78 70 6c 61 69 6e 20 29 7b 0a 20 20  OP_Explain ){.  
6040: 20 20 20 20 20 20 20 20 69 66 28 20 6f 6e 63 65          if( once
6050: 20 29 20 70 72 69 6e 74 66 28 22 56 44 42 45 20   ) printf("VDBE 
6060: 51 75 65 72 79 20 50 6c 61 6e 3a 5c 6e 22 29 3b  Query Plan:\n");
6070: 0a 20 20 20 20 20 20 20 20 20 20 70 72 69 6e 74  .          print
6080: 66 28 22 25 73 5c 6e 22 2c 20 61 4f 70 5b 69 5d  f("%s\n", aOp[i]
6090: 2e 70 34 2e 7a 29 3b 0a 20 20 20 20 20 20 20 20  .p4.z);.        
60a0: 20 20 6f 6e 63 65 20 3d 20 30 3b 0a 20 20 20 20    once = 0;.    
60b0: 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20      }.      }.  
60c0: 20 20 7d 0a 20 20 20 20 69 66 28 20 70 2d 3e 64    }.    if( p->d
60d0: 62 2d 3e 66 6c 61 67 73 20 26 20 53 51 4c 49 54  b->flags & SQLIT
60e0: 45 5f 56 64 62 65 54 72 61 63 65 20 29 20 20 70  E_VdbeTrace )  p
60f0: 72 69 6e 74 66 28 22 56 44 42 45 20 54 72 61 63  rintf("VDBE Trac
6100: 65 3a 5c 6e 22 29 3b 0a 20 20 7d 0a 20 20 73 71  e:\n");.  }.  sq
6110: 6c 69 74 65 33 45 6e 64 42 65 6e 69 67 6e 4d 61  lite3EndBenignMa
6120: 6c 6c 6f 63 28 29 3b 0a 23 65 6e 64 69 66 0a 20  lloc();.#endif. 
6130: 20 66 6f 72 28 70 4f 70 3d 26 61 4f 70 5b 70 2d   for(pOp=&aOp[p-
6140: 3e 70 63 5d 3b 20 31 3b 20 70 4f 70 2b 2b 29 7b  >pc]; 1; pOp++){
6150: 0a 20 20 20 20 2f 2a 20 45 72 72 6f 72 73 20 61  .    /* Errors a
6160: 72 65 20 64 65 74 65 63 74 65 64 20 62 79 20 69  re detected by i
6170: 6e 64 69 76 69 64 75 61 6c 20 6f 70 63 6f 64 65  ndividual opcode
6180: 73 2c 20 77 69 74 68 20 61 6e 20 69 6d 6d 65 64  s, with an immed
6190: 69 61 74 65 0a 20 20 20 20 2a 2a 20 6a 75 6d 70  iate.    ** jump
61a0: 73 20 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  s to abort_due_t
61b0: 6f 5f 65 72 72 6f 72 2e 20 2a 2f 0a 20 20 20 20  o_error. */.    
61c0: 61 73 73 65 72 74 28 20 72 63 3d 3d 53 51 4c 49  assert( rc==SQLI
61d0: 54 45 5f 4f 4b 20 29 3b 0a 0a 20 20 20 20 61 73  TE_OK );..    as
61e0: 73 65 72 74 28 20 70 4f 70 3e 3d 61 4f 70 20 26  sert( pOp>=aOp &
61f0: 26 20 70 4f 70 3c 26 61 4f 70 5b 70 2d 3e 6e 4f  & pOp<&aOp[p->nO
6200: 70 5d 29 3b 0a 23 69 66 64 65 66 20 56 44 42 45  p]);.#ifdef VDBE
6210: 5f 50 52 4f 46 49 4c 45 0a 20 20 20 20 73 74 61  _PROFILE.    sta
6220: 72 74 20 3d 20 73 71 6c 69 74 65 33 4e 50 72 6f  rt = sqlite3NPro
6230: 66 69 6c 65 43 6e 74 20 3f 20 73 71 6c 69 74 65  fileCnt ? sqlite
6240: 33 4e 50 72 6f 66 69 6c 65 43 6e 74 20 3a 20 73  3NProfileCnt : s
6250: 71 6c 69 74 65 33 48 77 74 69 6d 65 28 29 3b 0a  qlite3Hwtime();.
6260: 23 65 6e 64 69 66 0a 20 20 20 20 6e 56 6d 53 74  #endif.    nVmSt
6270: 65 70 2b 2b 3b 0a 23 69 66 64 65 66 20 53 51 4c  ep++;.#ifdef SQL
6280: 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 4d 54 5f  ITE_ENABLE_STMT_
6290: 53 43 41 4e 53 54 41 54 55 53 0a 20 20 20 20 69  SCANSTATUS.    i
62a0: 66 28 20 70 2d 3e 61 6e 45 78 65 63 20 29 20 70  f( p->anExec ) p
62b0: 2d 3e 61 6e 45 78 65 63 5b 28 69 6e 74 29 28 70  ->anExec[(int)(p
62c0: 4f 70 2d 61 4f 70 29 5d 2b 2b 3b 0a 23 65 6e 64  Op-aOp)]++;.#end
62d0: 69 66 0a 0a 20 20 20 20 2f 2a 20 4f 6e 6c 79 20  if..    /* Only 
62e0: 61 6c 6c 6f 77 20 74 72 61 63 69 6e 67 20 69 66  allow tracing if
62f0: 20 53 51 4c 49 54 45 5f 44 45 42 55 47 20 69 73   SQLITE_DEBUG is
6300: 20 64 65 66 69 6e 65 64 2e 0a 20 20 20 20 2a 2f   defined..    */
6310: 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44  .#ifdef SQLITE_D
6320: 45 42 55 47 0a 20 20 20 20 69 66 28 20 64 62 2d  EBUG.    if( db-
6330: 3e 66 6c 61 67 73 20 26 20 53 51 4c 49 54 45 5f  >flags & SQLITE_
6340: 56 64 62 65 54 72 61 63 65 20 29 7b 0a 20 20 20  VdbeTrace ){.   
6350: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 50 72     sqlite3VdbePr
6360: 69 6e 74 4f 70 28 73 74 64 6f 75 74 2c 20 28 69  intOp(stdout, (i
6370: 6e 74 29 28 70 4f 70 20 2d 20 61 4f 70 29 2c 20  nt)(pOp - aOp), 
6380: 70 4f 70 29 3b 0a 20 20 20 20 7d 0a 23 65 6e 64  pOp);.    }.#end
6390: 69 66 0a 20 20 20 20 20 20 0a 0a 20 20 20 20 2f  if.      ..    /
63a0: 2a 20 43 68 65 63 6b 20 74 6f 20 73 65 65 20 69  * Check to see i
63b0: 66 20 77 65 20 6e 65 65 64 20 74 6f 20 73 69 6d  f we need to sim
63c0: 75 6c 61 74 65 20 61 6e 20 69 6e 74 65 72 72 75  ulate an interru
63d0: 70 74 2e 20 20 54 68 69 73 20 6f 6e 6c 79 20 68  pt.  This only h
63e0: 61 70 70 65 6e 73 0a 20 20 20 20 2a 2a 20 69 66  appens.    ** if
63f0: 20 77 65 20 68 61 76 65 20 61 20 73 70 65 63 69   we have a speci
6400: 61 6c 20 74 65 73 74 20 62 75 69 6c 64 2e 0a 20  al test build.. 
6410: 20 20 20 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c     */.#ifdef SQL
6420: 49 54 45 5f 54 45 53 54 0a 20 20 20 20 69 66 28  ITE_TEST.    if(
6430: 20 73 71 6c 69 74 65 33 5f 69 6e 74 65 72 72 75   sqlite3_interru
6440: 70 74 5f 63 6f 75 6e 74 3e 30 20 29 7b 0a 20 20  pt_count>0 ){.  
6450: 20 20 20 20 73 71 6c 69 74 65 33 5f 69 6e 74 65      sqlite3_inte
6460: 72 72 75 70 74 5f 63 6f 75 6e 74 2d 2d 3b 0a 20  rrupt_count--;. 
6470: 20 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33       if( sqlite3
6480: 5f 69 6e 74 65 72 72 75 70 74 5f 63 6f 75 6e 74  _interrupt_count
6490: 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 73  ==0 ){.        s
64a0: 71 6c 69 74 65 33 5f 69 6e 74 65 72 72 75 70 74  qlite3_interrupt
64b0: 28 64 62 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20  (db);.      }.  
64c0: 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 20 20 20 20    }.#endif..    
64d0: 2f 2a 20 53 61 6e 69 74 79 20 63 68 65 63 6b 69  /* Sanity checki
64e0: 6e 67 20 6f 6e 20 6f 74 68 65 72 20 6f 70 65 72  ng on other oper
64f0: 61 6e 64 73 20 2a 2f 0a 23 69 66 64 65 66 20 53  ands */.#ifdef S
6500: 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 20 20  QLITE_DEBUG.    
6510: 7b 0a 20 20 20 20 20 20 75 38 20 6f 70 50 72 6f  {.      u8 opPro
6520: 70 65 72 74 79 20 3d 20 73 71 6c 69 74 65 33 4f  perty = sqlite3O
6530: 70 63 6f 64 65 50 72 6f 70 65 72 74 79 5b 70 4f  pcodeProperty[pO
6540: 70 2d 3e 6f 70 63 6f 64 65 5d 3b 0a 20 20 20 20  p->opcode];.    
6550: 20 20 69 66 28 20 28 6f 70 50 72 6f 70 65 72 74    if( (opPropert
6560: 79 20 26 20 4f 50 46 4c 47 5f 49 4e 31 29 21 3d  y & OPFLG_IN1)!=
6570: 30 20 29 7b 0a 20 20 20 20 20 20 20 20 61 73 73  0 ){.        ass
6580: 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 30 20 29  ert( pOp->p1>0 )
6590: 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74  ;.        assert
65a0: 28 20 70 4f 70 2d 3e 70 31 3c 3d 28 70 2d 3e 6e  ( pOp->p1<=(p->n
65b0: 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73  Mem+1 - p->nCurs
65c0: 6f 72 29 20 29 3b 0a 20 20 20 20 20 20 20 20 61  or) );.        a
65d0: 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69  ssert( memIsVali
65e0: 64 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  d(&aMem[pOp->p1]
65f0: 29 20 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73  ) );.        ass
6600: 65 72 74 28 20 73 71 6c 69 74 65 33 56 64 62 65  ert( sqlite3Vdbe
6610: 43 68 65 63 6b 4d 65 6d 49 6e 76 61 72 69 61 6e  CheckMemInvarian
6620: 74 73 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31  ts(&aMem[pOp->p1
6630: 5d 29 20 29 3b 0a 20 20 20 20 20 20 20 20 52 45  ]) );.        RE
6640: 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70  GISTER_TRACE(pOp
6650: 2d 3e 70 31 2c 20 26 61 4d 65 6d 5b 70 4f 70 2d  ->p1, &aMem[pOp-
6660: 3e 70 31 5d 29 3b 0a 20 20 20 20 20 20 7d 0a 20  >p1]);.      }. 
6670: 20 20 20 20 20 69 66 28 20 28 6f 70 50 72 6f 70       if( (opProp
6680: 65 72 74 79 20 26 20 4f 50 46 4c 47 5f 49 4e 32  erty & OPFLG_IN2
6690: 29 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20  )!=0 ){.        
66a0: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e  assert( pOp->p2>
66b0: 30 20 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73  0 );.        ass
66c0: 65 72 74 28 20 70 4f 70 2d 3e 70 32 3c 3d 28 70  ert( pOp->p2<=(p
66d0: 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43  ->nMem+1 - p->nC
66e0: 75 72 73 6f 72 29 20 29 3b 0a 20 20 20 20 20 20  ursor) );.      
66f0: 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56    assert( memIsV
6700: 61 6c 69 64 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e  alid(&aMem[pOp->
6710: 70 32 5d 29 20 29 3b 0a 20 20 20 20 20 20 20 20  p2]) );.        
6720: 61 73 73 65 72 74 28 20 73 71 6c 69 74 65 33 56  assert( sqlite3V
6730: 64 62 65 43 68 65 63 6b 4d 65 6d 49 6e 76 61 72  dbeCheckMemInvar
6740: 69 61 6e 74 73 28 26 61 4d 65 6d 5b 70 4f 70 2d  iants(&aMem[pOp-
6750: 3e 70 32 5d 29 20 29 3b 0a 20 20 20 20 20 20 20  >p2]) );.       
6760: 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28   REGISTER_TRACE(
6770: 70 4f 70 2d 3e 70 32 2c 20 26 61 4d 65 6d 5b 70  pOp->p2, &aMem[p
6780: 4f 70 2d 3e 70 32 5d 29 3b 0a 20 20 20 20 20 20  Op->p2]);.      
6790: 7d 0a 20 20 20 20 20 20 69 66 28 20 28 6f 70 50  }.      if( (opP
67a0: 72 6f 70 65 72 74 79 20 26 20 4f 50 46 4c 47 5f  roperty & OPFLG_
67b0: 49 4e 33 29 21 3d 30 20 29 7b 0a 20 20 20 20 20  IN3)!=0 ){.     
67c0: 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e     assert( pOp->
67d0: 70 33 3e 30 20 29 3b 0a 20 20 20 20 20 20 20 20  p3>0 );.        
67e0: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c  assert( pOp->p3<
67f0: 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d  =(p->nMem+1 - p-
6800: 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 20  >nCursor) );.   
6810: 20 20 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d       assert( mem
6820: 49 73 56 61 6c 69 64 28 26 61 4d 65 6d 5b 70 4f  IsValid(&aMem[pO
6830: 70 2d 3e 70 33 5d 29 20 29 3b 0a 20 20 20 20 20  p->p3]) );.     
6840: 20 20 20 61 73 73 65 72 74 28 20 73 71 6c 69 74     assert( sqlit
6850: 65 33 56 64 62 65 43 68 65 63 6b 4d 65 6d 49 6e  e3VdbeCheckMemIn
6860: 76 61 72 69 61 6e 74 73 28 26 61 4d 65 6d 5b 70  variants(&aMem[p
6870: 4f 70 2d 3e 70 33 5d 29 20 29 3b 0a 20 20 20 20  Op->p3]) );.    
6880: 20 20 20 20 52 45 47 49 53 54 45 52 5f 54 52 41      REGISTER_TRA
6890: 43 45 28 70 4f 70 2d 3e 70 33 2c 20 26 61 4d 65  CE(pOp->p3, &aMe
68a0: 6d 5b 70 4f 70 2d 3e 70 33 5d 29 3b 0a 20 20 20  m[pOp->p3]);.   
68b0: 20 20 20 7d 0a 20 20 20 20 20 20 69 66 28 20 28     }.      if( (
68c0: 6f 70 50 72 6f 70 65 72 74 79 20 26 20 4f 50 46  opProperty & OPF
68d0: 4c 47 5f 4f 55 54 32 29 21 3d 30 20 29 7b 0a 20  LG_OUT2)!=0 ){. 
68e0: 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70         assert( p
68f0: 4f 70 2d 3e 70 32 3e 30 20 29 3b 0a 20 20 20 20  Op->p2>0 );.    
6900: 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d      assert( pOp-
6910: 3e 70 32 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20  >p2<=(p->nMem+1 
6920: 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b  - p->nCursor) );
6930: 0a 20 20 20 20 20 20 20 20 6d 65 6d 41 62 6f 75  .        memAbou
6940: 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 26 61 4d  tToChange(p, &aM
6950: 65 6d 5b 70 4f 70 2d 3e 70 32 5d 29 3b 0a 20 20  em[pOp->p2]);.  
6960: 20 20 20 20 7d 0a 20 20 20 20 20 20 69 66 28 20      }.      if( 
6970: 28 6f 70 50 72 6f 70 65 72 74 79 20 26 20 4f 50  (opProperty & OP
6980: 46 4c 47 5f 4f 55 54 33 29 21 3d 30 20 29 7b 0a  FLG_OUT3)!=0 ){.
6990: 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20          assert( 
69a0: 70 4f 70 2d 3e 70 33 3e 30 20 29 3b 0a 20 20 20  pOp->p3>0 );.   
69b0: 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70       assert( pOp
69c0: 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31  ->p3<=(p->nMem+1
69d0: 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29   - p->nCursor) )
69e0: 3b 0a 20 20 20 20 20 20 20 20 6d 65 6d 41 62 6f  ;.        memAbo
69f0: 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 26 61  utToChange(p, &a
6a00: 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 29 3b 0a 20  Mem[pOp->p3]);. 
6a10: 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 23 65 6e       }.    }.#en
6a20: 64 69 66 0a 23 69 66 20 64 65 66 69 6e 65 64 28  dif.#if defined(
6a30: 53 51 4c 49 54 45 5f 44 45 42 55 47 29 20 7c 7c  SQLITE_DEBUG) ||
6a40: 20 64 65 66 69 6e 65 64 28 56 44 42 45 5f 50 52   defined(VDBE_PR
6a50: 4f 46 49 4c 45 29 0a 20 20 20 20 70 4f 72 69 67  OFILE).    pOrig
6a60: 4f 70 20 3d 20 70 4f 70 3b 0a 23 65 6e 64 69 66  Op = pOp;.#endif
6a70: 0a 20 20 0a 20 20 20 20 73 77 69 74 63 68 28 20  .  .    switch( 
6a80: 70 4f 70 2d 3e 6f 70 63 6f 64 65 20 29 7b 0a 0a  pOp->opcode ){..
6a90: 2f 2a 2a 2a 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 0a 2a  **************.*
6ae0: 2a 20 57 68 61 74 20 66 6f 6c 6c 6f 77 73 20 69  * What follows i
6af0: 73 20 61 20 6d 61 73 73 69 76 65 20 73 77 69 74  s a massive swit
6b00: 63 68 20 73 74 61 74 65 6d 65 6e 74 20 77 68 65  ch statement whe
6b10: 72 65 20 65 61 63 68 20 63 61 73 65 20 69 6d 70  re each case imp
6b20: 6c 65 6d 65 6e 74 73 20 61 0a 2a 2a 20 73 65 70  lements a.** sep
6b30: 61 72 61 74 65 20 69 6e 73 74 72 75 63 74 69 6f  arate instructio
6b40: 6e 20 69 6e 20 74 68 65 20 76 69 72 74 75 61 6c  n in the virtual
6b50: 20 6d 61 63 68 69 6e 65 2e 20 20 49 66 20 77 65   machine.  If we
6b60: 20 66 6f 6c 6c 6f 77 20 74 68 65 20 75 73 75 61   follow the usua
6b70: 6c 0a 2a 2a 20 69 6e 64 65 6e 74 61 74 69 6f 6e  l.** indentation
6b80: 20 63 6f 6e 76 65 6e 74 69 6f 6e 73 2c 20 65 61   conventions, ea
6b90: 63 68 20 63 61 73 65 20 73 68 6f 75 6c 64 20 62  ch case should b
6ba0: 65 20 69 6e 64 65 6e 74 65 64 20 62 79 20 36 20  e indented by 6 
6bb0: 73 70 61 63 65 73 2e 20 20 42 75 74 0a 2a 2a 20  spaces.  But.** 
6bc0: 74 68 61 74 20 69 73 20 61 20 6c 6f 74 20 6f 66  that is a lot of
6bd0: 20 77 61 73 74 65 64 20 73 70 61 63 65 20 6f 6e   wasted space on
6be0: 20 74 68 65 20 6c 65 66 74 20 6d 61 72 67 69 6e   the left margin
6bf0: 2e 20 20 53 6f 20 74 68 65 20 63 6f 64 65 20 77  .  So the code w
6c00: 69 74 68 69 6e 0a 2a 2a 20 74 68 65 20 73 77 69  ithin.** the swi
6c10: 74 63 68 20 73 74 61 74 65 6d 65 6e 74 20 77 69  tch statement wi
6c20: 6c 6c 20 62 72 65 61 6b 20 77 69 74 68 20 63 6f  ll break with co
6c30: 6e 76 65 6e 74 69 6f 6e 20 61 6e 64 20 62 65 20  nvention and be 
6c40: 66 6c 75 73 68 2d 6c 65 66 74 2e 20 41 6e 6f 74  flush-left. Anot
6c50: 68 65 72 0a 2a 2a 20 62 69 67 20 63 6f 6d 6d 65  her.** big comme
6c60: 6e 74 20 28 73 69 6d 69 6c 61 72 20 74 6f 20 74  nt (similar to t
6c70: 68 69 73 20 6f 6e 65 29 20 77 69 6c 6c 20 6d 61  his one) will ma
6c80: 72 6b 20 74 68 65 20 70 6f 69 6e 74 20 69 6e 20  rk the point in 
6c90: 74 68 65 20 63 6f 64 65 20 77 68 65 72 65 0a 2a  the code where.*
6ca0: 2a 20 77 65 20 74 72 61 6e 73 69 74 69 6f 6e 20  * we transition 
6cb0: 62 61 63 6b 20 74 6f 20 6e 6f 72 6d 61 6c 20 69  back to normal i
6cc0: 6e 64 65 6e 74 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a  ndentation..**.*
6cd0: 2a 20 54 68 65 20 66 6f 72 6d 61 74 74 69 6e 67  * The formatting
6ce0: 20 6f 66 20 65 61 63 68 20 63 61 73 65 20 69 73   of each case is
6cf0: 20 69 6d 70 6f 72 74 61 6e 74 2e 20 20 54 68 65   important.  The
6d00: 20 6d 61 6b 65 66 69 6c 65 20 66 6f 72 20 53 51   makefile for SQ
6d10: 4c 69 74 65 0a 2a 2a 20 67 65 6e 65 72 61 74 65  Lite.** generate
6d20: 73 20 74 77 6f 20 43 20 66 69 6c 65 73 20 22 6f  s two C files "o
6d30: 70 63 6f 64 65 73 2e 68 22 20 61 6e 64 20 22 6f  pcodes.h" and "o
6d40: 70 63 6f 64 65 73 2e 63 22 20 62 79 20 73 63 61  pcodes.c" by sca
6d50: 6e 6e 69 6e 67 20 74 68 69 73 0a 2a 2a 20 66 69  nning this.** fi
6d60: 6c 65 20 6c 6f 6f 6b 69 6e 67 20 66 6f 72 20 6c  le looking for l
6d70: 69 6e 65 73 20 74 68 61 74 20 62 65 67 69 6e 20  ines that begin 
6d80: 77 69 74 68 20 22 63 61 73 65 20 4f 50 5f 22 2e  with "case OP_".
6d90: 20 20 54 68 65 20 6f 70 63 6f 64 65 73 2e 68 20    The opcodes.h 
6da0: 66 69 6c 65 73 0a 2a 2a 20 77 69 6c 6c 20 62 65  files.** will be
6db0: 20 66 69 6c 6c 65 64 20 77 69 74 68 20 23 64 65   filled with #de
6dc0: 66 69 6e 65 73 20 74 68 61 74 20 67 69 76 65 20  fines that give 
6dd0: 75 6e 69 71 75 65 20 69 6e 74 65 67 65 72 20 76  unique integer v
6de0: 61 6c 75 65 73 20 74 6f 20 65 61 63 68 0a 2a 2a  alues to each.**
6df0: 20 6f 70 63 6f 64 65 20 61 6e 64 20 74 68 65 20   opcode and the 
6e00: 6f 70 63 6f 64 65 73 2e 63 20 66 69 6c 65 20 69  opcodes.c file i
6e10: 73 20 66 69 6c 6c 65 64 20 77 69 74 68 20 61 6e  s filled with an
6e20: 20 61 72 72 61 79 20 6f 66 20 73 74 72 69 6e 67   array of string
6e30: 73 20 77 68 65 72 65 0a 2a 2a 20 65 61 63 68 20  s where.** each 
6e40: 73 74 72 69 6e 67 20 69 73 20 74 68 65 20 73 79  string is the sy
6e50: 6d 62 6f 6c 69 63 20 6e 61 6d 65 20 66 6f 72 20  mbolic name for 
6e60: 74 68 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e  the correspondin
6e70: 67 20 6f 70 63 6f 64 65 2e 20 20 49 66 20 74 68  g opcode.  If th
6e80: 65 0a 2a 2a 20 63 61 73 65 20 73 74 61 74 65 6d  e.** case statem
6e90: 65 6e 74 20 69 73 20 66 6f 6c 6c 6f 77 65 64 20  ent is followed 
6ea0: 62 79 20 61 20 63 6f 6d 6d 65 6e 74 20 6f 66 20  by a comment of 
6eb0: 74 68 65 20 66 6f 72 6d 20 22 2f 23 20 73 61 6d  the form "/# sam
6ec0: 65 20 61 73 20 2e 2e 2e 20 23 2f 22 0a 2a 2a 20  e as ... #/".** 
6ed0: 74 68 61 74 20 63 6f 6d 6d 65 6e 74 20 69 73 20  that comment is 
6ee0: 75 73 65 64 20 74 6f 20 64 65 74 65 72 6d 69 6e  used to determin
6ef0: 65 20 74 68 65 20 70 61 72 74 69 63 75 6c 61 72  e the particular
6f00: 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 6f 70   value of the op
6f10: 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 4f 74 68 65  code..**.** Othe
6f20: 72 20 6b 65 79 77 6f 72 64 73 20 69 6e 20 74 68  r keywords in th
6f30: 65 20 63 6f 6d 6d 65 6e 74 20 74 68 61 74 20 66  e comment that f
6f40: 6f 6c 6c 6f 77 73 20 65 61 63 68 20 63 61 73 65  ollows each case
6f50: 20 61 72 65 20 75 73 65 64 20 74 6f 0a 2a 2a 20   are used to.** 
6f60: 63 6f 6e 73 74 72 75 63 74 20 74 68 65 20 4f 50  construct the OP
6f70: 46 4c 47 5f 49 4e 49 54 49 41 4c 49 5a 45 52 20  FLG_INITIALIZER 
6f80: 76 61 6c 75 65 20 74 68 61 74 20 69 6e 69 74 69  value that initi
6f90: 61 6c 69 7a 65 73 20 6f 70 63 6f 64 65 50 72 6f  alizes opcodePro
6fa0: 70 65 72 74 79 5b 5d 2e 0a 2a 2a 20 4b 65 79 77  perty[]..** Keyw
6fb0: 6f 72 64 73 20 69 6e 63 6c 75 64 65 3a 20 69 6e  ords include: in
6fc0: 31 2c 20 69 6e 32 2c 20 69 6e 33 2c 20 6f 75 74  1, in2, in3, out
6fd0: 32 2c 20 6f 75 74 33 2e 20 20 53 65 65 0a 2a 2a  2, out3.  See.**
6fe0: 20 74 68 65 20 6d 6b 6f 70 63 6f 64 65 68 2e 61   the mkopcodeh.a
6ff0: 77 6b 20 73 63 72 69 70 74 20 66 6f 72 20 61 64  wk script for ad
7000: 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61  ditional informa
7010: 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 44 6f 63 75  tion..**.** Docu
7020: 6d 65 6e 74 61 74 69 6f 6e 20 61 62 6f 75 74 20  mentation about 
7030: 56 44 42 45 20 6f 70 63 6f 64 65 73 20 69 73 20  VDBE opcodes is 
7040: 67 65 6e 65 72 61 74 65 64 20 62 79 20 73 63 61  generated by sca
7050: 6e 6e 69 6e 67 20 74 68 69 73 20 66 69 6c 65 0a  nning this file.
7060: 2a 2a 20 66 6f 72 20 6c 69 6e 65 73 20 6f 66 20  ** for lines of 
7070: 74 68 61 74 20 63 6f 6e 74 61 69 6e 20 22 4f 70  that contain "Op
7080: 63 6f 64 65 3a 22 2e 20 20 54 68 61 74 20 6c 69  code:".  That li
7090: 6e 65 20 61 6e 64 20 61 6c 6c 20 73 75 62 73 65  ne and all subse
70a0: 71 75 65 6e 74 0a 2a 2a 20 63 6f 6d 6d 65 6e 74  quent.** comment
70b0: 20 6c 69 6e 65 73 20 61 72 65 20 75 73 65 64 20   lines are used 
70c0: 69 6e 20 74 68 65 20 67 65 6e 65 72 61 74 69 6f  in the generatio
70d0: 6e 20 6f 66 20 74 68 65 20 6f 70 63 6f 64 65 2e  n of the opcode.
70e0: 68 74 6d 6c 20 64 6f 63 75 6d 65 6e 74 61 74 69  html documentati
70f0: 6f 6e 0a 2a 2a 20 66 69 6c 65 2e 0a 2a 2a 0a 2a  on.** file..**.*
7100: 2a 20 53 55 4d 4d 41 52 59 3a 0a 2a 2a 0a 2a 2a  * SUMMARY:.**.**
7110: 20 20 20 20 20 46 6f 72 6d 61 74 74 69 6e 67 20       Formatting 
7120: 69 73 20 69 6d 70 6f 72 74 61 6e 74 20 74 6f 20  is important to 
7130: 73 63 72 69 70 74 73 20 74 68 61 74 20 73 63 61  scripts that sca
7140: 6e 20 74 68 69 73 20 66 69 6c 65 2e 0a 2a 2a 20  n this file..** 
7150: 20 20 20 20 44 6f 20 6e 6f 74 20 64 65 76 69 61      Do not devia
7160: 74 65 20 66 72 6f 6d 20 74 68 65 20 66 6f 72 6d  te from the form
7170: 61 74 74 69 6e 67 20 73 74 79 6c 65 20 63 75 72  atting style cur
7180: 72 65 6e 74 6c 79 20 69 6e 20 75 73 65 2e 0a 2a  rently in use..*
7190: 2a 0a 2a 2a 2a 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 2f  ***************/
71e0: 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 20 47 6f  ../* Opcode:  Go
71f0: 74 6f 20 2a 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  to * P2 * * *.**
7200: 0a 2a 2a 20 41 6e 20 75 6e 63 6f 6e 64 69 74 69  .** An unconditi
7210: 6f 6e 61 6c 20 6a 75 6d 70 20 74 6f 20 61 64 64  onal jump to add
7220: 72 65 73 73 20 50 32 2e 0a 2a 2a 20 54 68 65 20  ress P2..** The 
7230: 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e  next instruction
7240: 20 65 78 65 63 75 74 65 64 20 77 69 6c 6c 20 62   executed will b
7250: 65 20 0a 2a 2a 20 74 68 65 20 6f 6e 65 20 61 74  e .** the one at
7260: 20 69 6e 64 65 78 20 50 32 20 66 72 6f 6d 20 74   index P2 from t
7270: 68 65 20 62 65 67 69 6e 6e 69 6e 67 20 6f 66 0a  he beginning of.
7280: 2a 2a 20 74 68 65 20 70 72 6f 67 72 61 6d 2e 0a  ** the program..
7290: 2a 2a 0a 2a 2a 20 54 68 65 20 50 31 20 70 61 72  **.** The P1 par
72a0: 61 6d 65 74 65 72 20 69 73 20 6e 6f 74 20 61 63  ameter is not ac
72b0: 74 75 61 6c 6c 79 20 75 73 65 64 20 62 79 20 74  tually used by t
72c0: 68 69 73 20 6f 70 63 6f 64 65 2e 20 20 48 6f 77  his opcode.  How
72d0: 65 76 65 72 2c 20 69 74 0a 2a 2a 20 69 73 20 73  ever, it.** is s
72e0: 6f 6d 65 74 69 6d 65 73 20 73 65 74 20 74 6f 20  ometimes set to 
72f0: 31 20 69 6e 73 74 65 61 64 20 6f 66 20 30 20 61  1 instead of 0 a
7300: 73 20 61 20 68 69 6e 74 20 74 6f 20 74 68 65 20  s a hint to the 
7310: 63 6f 6d 6d 61 6e 64 2d 6c 69 6e 65 20 73 68 65  command-line she
7320: 6c 6c 0a 2a 2a 20 74 68 61 74 20 74 68 69 73 20  ll.** that this 
7330: 47 6f 74 6f 20 69 73 20 74 68 65 20 62 6f 74 74  Goto is the bott
7340: 6f 6d 20 6f 66 20 61 20 6c 6f 6f 70 20 61 6e 64  om of a loop and
7350: 20 74 68 61 74 20 74 68 65 20 6c 69 6e 65 73 20   that the lines 
7360: 66 72 6f 6d 20 50 32 20 64 6f 77 6e 0a 2a 2a 20  from P2 down.** 
7370: 74 6f 20 74 68 65 20 63 75 72 72 65 6e 74 20 6c  to the current l
7380: 69 6e 65 20 73 68 6f 75 6c 64 20 62 65 20 69 6e  ine should be in
7390: 64 65 6e 74 65 64 20 66 6f 72 20 45 58 50 4c 41  dented for EXPLA
73a0: 49 4e 20 6f 75 74 70 75 74 2e 0a 2a 2f 0a 63 61  IN output..*/.ca
73b0: 73 65 20 4f 50 5f 47 6f 74 6f 3a 20 7b 20 20 20  se OP_Goto: {   
73c0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d            /* jum
73d0: 70 20 2a 2f 0a 6a 75 6d 70 5f 74 6f 5f 70 32 5f  p */.jump_to_p2_
73e0: 61 6e 64 5f 63 68 65 63 6b 5f 66 6f 72 5f 69 6e  and_check_for_in
73f0: 74 65 72 72 75 70 74 3a 0a 20 20 70 4f 70 20 3d  terrupt:.  pOp =
7400: 20 26 61 4f 70 5b 70 4f 70 2d 3e 70 32 20 2d 20   &aOp[pOp->p2 - 
7410: 31 5d 3b 0a 0a 20 20 2f 2a 20 4f 70 63 6f 64 65  1];..  /* Opcode
7420: 73 20 74 68 61 74 20 61 72 65 20 75 73 65 64 20  s that are used 
7430: 61 73 20 74 68 65 20 62 6f 74 74 6f 6d 20 6f 66  as the bottom of
7440: 20 61 20 6c 6f 6f 70 20 28 4f 50 5f 4e 65 78 74   a loop (OP_Next
7450: 2c 20 4f 50 5f 50 72 65 76 2c 0a 20 20 2a 2a 20  , OP_Prev,.  ** 
7460: 4f 50 5f 56 4e 65 78 74 2c 20 6f 72 20 4f 50 5f  OP_VNext, or OP_
7470: 53 6f 72 74 65 72 4e 65 78 74 29 20 61 6c 6c 20  SorterNext) all 
7480: 6a 75 6d 70 20 68 65 72 65 20 75 70 6f 6e 0a 20  jump here upon. 
7490: 20 2a 2a 20 63 6f 6d 70 6c 65 74 69 6f 6e 2e 20   ** completion. 
74a0: 20 43 68 65 63 6b 20 74 6f 20 73 65 65 20 69 66   Check to see if
74b0: 20 73 71 6c 69 74 65 33 5f 69 6e 74 65 72 72 75   sqlite3_interru
74c0: 70 74 28 29 20 68 61 73 20 62 65 65 6e 20 63 61  pt() has been ca
74d0: 6c 6c 65 64 0a 20 20 2a 2a 20 6f 72 20 69 66 20  lled.  ** or if 
74e0: 74 68 65 20 70 72 6f 67 72 65 73 73 20 63 61 6c  the progress cal
74f0: 6c 62 61 63 6b 20 6e 65 65 64 73 20 74 6f 20 62  lback needs to b
7500: 65 20 69 6e 76 6f 6b 65 64 2e 20 0a 20 20 2a 2a  e invoked. .  **
7510: 0a 20 20 2a 2a 20 54 68 69 73 20 63 6f 64 65 20  .  ** This code 
7520: 75 73 65 73 20 75 6e 73 74 72 75 63 74 75 72 65  uses unstructure
7530: 64 20 22 67 6f 74 6f 22 20 73 74 61 74 65 6d 65  d "goto" stateme
7540: 6e 74 73 20 61 6e 64 20 64 6f 65 73 20 6e 6f 74  nts and does not
7550: 20 6c 6f 6f 6b 20 63 6c 65 61 6e 2e 0a 20 20 2a   look clean..  *
7560: 2a 20 42 75 74 20 74 68 61 74 20 69 73 20 6e 6f  * But that is no
7570: 74 20 64 75 65 20 74 6f 20 73 6c 6f 70 70 79 20  t due to sloppy 
7580: 63 6f 64 69 6e 67 20 68 61 62 69 74 73 2e 20 54  coding habits. T
7590: 68 65 20 63 6f 64 65 20 69 73 20 77 72 69 74 74  he code is writt
75a0: 65 6e 20 74 68 69 73 0a 20 20 2a 2a 20 77 61 79  en this.  ** way
75b0: 20 66 6f 72 20 70 65 72 66 6f 72 6d 61 6e 63 65   for performance
75c0: 2c 20 74 6f 20 61 76 6f 69 64 20 68 61 76 69 6e  , to avoid havin
75d0: 67 20 74 6f 20 72 75 6e 20 74 68 65 20 69 6e 74  g to run the int
75e0: 65 72 72 75 70 74 20 61 6e 64 20 70 72 6f 67 72  errupt and progr
75f0: 65 73 73 0a 20 20 2a 2a 20 63 68 65 63 6b 73 20  ess.  ** checks 
7600: 6f 6e 20 65 76 65 72 79 20 6f 70 63 6f 64 65 2e  on every opcode.
7610: 20 20 54 68 69 73 20 68 65 6c 70 73 20 73 71 6c    This helps sql
7620: 69 74 65 33 5f 73 74 65 70 28 29 20 74 6f 20 72  ite3_step() to r
7630: 75 6e 20 61 62 6f 75 74 20 31 2e 35 25 0a 20 20  un about 1.5%.  
7640: 2a 2a 20 66 61 73 74 65 72 20 61 63 63 6f 72 64  ** faster accord
7650: 69 6e 67 20 74 6f 20 22 76 61 6c 67 72 69 6e 64  ing to "valgrind
7660: 20 2d 2d 74 6f 6f 6c 3d 63 61 63 68 65 67 72 69   --tool=cachegri
7670: 6e 64 22 20 2a 2f 0a 63 68 65 63 6b 5f 66 6f 72  nd" */.check_for
7680: 5f 69 6e 74 65 72 72 75 70 74 3a 0a 20 20 69 66  _interrupt:.  if
7690: 28 20 64 62 2d 3e 75 31 2e 69 73 49 6e 74 65 72  ( db->u1.isInter
76a0: 72 75 70 74 65 64 20 29 20 67 6f 74 6f 20 61 62  rupted ) goto ab
76b0: 6f 72 74 5f 64 75 65 5f 74 6f 5f 69 6e 74 65 72  ort_due_to_inter
76c0: 72 75 70 74 3b 0a 23 69 66 6e 64 65 66 20 53 51  rupt;.#ifndef SQ
76d0: 4c 49 54 45 5f 4f 4d 49 54 5f 50 52 4f 47 52 45  LITE_OMIT_PROGRE
76e0: 53 53 5f 43 41 4c 4c 42 41 43 4b 0a 20 20 2f 2a  SS_CALLBACK.  /*
76f0: 20 43 61 6c 6c 20 74 68 65 20 70 72 6f 67 72 65   Call the progre
7700: 73 73 20 63 61 6c 6c 62 61 63 6b 20 69 66 20 69  ss callback if i
7710: 74 20 69 73 20 63 6f 6e 66 69 67 75 72 65 64 20  t is configured 
7720: 61 6e 64 20 74 68 65 20 72 65 71 75 69 72 65 64  and the required
7730: 20 6e 75 6d 62 65 72 0a 20 20 2a 2a 20 6f 66 20   number.  ** of 
7740: 56 44 42 45 20 6f 70 73 20 68 61 76 65 20 62 65  VDBE ops have be
7750: 65 6e 20 65 78 65 63 75 74 65 64 20 28 65 69 74  en executed (eit
7760: 68 65 72 20 73 69 6e 63 65 20 74 68 69 73 20 69  her since this i
7770: 6e 76 6f 63 61 74 69 6f 6e 20 6f 66 0a 20 20 2a  nvocation of.  *
7780: 2a 20 73 71 6c 69 74 65 33 56 64 62 65 45 78 65  * sqlite3VdbeExe
7790: 63 28 29 20 6f 72 20 73 69 6e 63 65 20 6c 61 73  c() or since las
77a0: 74 20 74 69 6d 65 20 74 68 65 20 70 72 6f 67 72  t time the progr
77b0: 65 73 73 20 63 61 6c 6c 62 61 63 6b 20 77 61 73  ess callback was
77c0: 20 63 61 6c 6c 65 64 29 2e 0a 20 20 2a 2a 20 49   called)..  ** I
77d0: 66 20 74 68 65 20 70 72 6f 67 72 65 73 73 20 63  f the progress c
77e0: 61 6c 6c 62 61 63 6b 20 72 65 74 75 72 6e 73 20  allback returns 
77f0: 6e 6f 6e 2d 7a 65 72 6f 2c 20 65 78 69 74 20 74  non-zero, exit t
7800: 68 65 20 76 69 72 74 75 61 6c 20 6d 61 63 68 69  he virtual machi
7810: 6e 65 20 77 69 74 68 0a 20 20 2a 2a 20 61 20 72  ne with.  ** a r
7820: 65 74 75 72 6e 20 63 6f 64 65 20 53 51 4c 49 54  eturn code SQLIT
7830: 45 5f 41 42 4f 52 54 2e 0a 20 20 2a 2f 0a 20 20  E_ABORT..  */.  
7840: 77 68 69 6c 65 28 20 6e 56 6d 53 74 65 70 3e 3d  while( nVmStep>=
7850: 6e 50 72 6f 67 72 65 73 73 4c 69 6d 69 74 20 26  nProgressLimit &
7860: 26 20 64 62 2d 3e 78 50 72 6f 67 72 65 73 73 21  & db->xProgress!
7870: 3d 30 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74  =0 ){.    assert
7880: 28 20 64 62 2d 3e 6e 50 72 6f 67 72 65 73 73 4f  ( db->nProgressO
7890: 70 73 21 3d 30 20 29 3b 0a 20 20 20 20 6e 50 72  ps!=0 );.    nPr
78a0: 6f 67 72 65 73 73 4c 69 6d 69 74 20 2b 3d 20 64  ogressLimit += d
78b0: 62 2d 3e 6e 50 72 6f 67 72 65 73 73 4f 70 73 3b  b->nProgressOps;
78c0: 0a 20 20 20 20 69 66 28 20 64 62 2d 3e 78 50 72  .    if( db->xPr
78d0: 6f 67 72 65 73 73 28 64 62 2d 3e 70 50 72 6f 67  ogress(db->pProg
78e0: 72 65 73 73 41 72 67 29 20 29 7b 0a 20 20 20 20  ressArg) ){.    
78f0: 20 20 6e 50 72 6f 67 72 65 73 73 4c 69 6d 69 74    nProgressLimit
7900: 20 3d 20 30 78 66 66 66 66 66 66 66 66 3b 0a 20   = 0xffffffff;. 
7910: 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45       rc = SQLITE
7920: 5f 49 4e 54 45 52 52 55 50 54 3b 0a 20 20 20 20  _INTERRUPT;.    
7930: 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65    goto abort_due
7940: 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 7d  _to_error;.    }
7950: 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20 0a 20  .  }.#endif.  . 
7960: 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
7970: 63 6f 64 65 3a 20 20 47 6f 73 75 62 20 50 31 20  code:  Gosub P1 
7980: 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 57  P2 * * *.**.** W
7990: 72 69 74 65 20 74 68 65 20 63 75 72 72 65 6e 74  rite the current
79a0: 20 61 64 64 72 65 73 73 20 6f 6e 74 6f 20 72 65   address onto re
79b0: 67 69 73 74 65 72 20 50 31 0a 2a 2a 20 61 6e 64  gister P1.** and
79c0: 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20 61 64   then jump to ad
79d0: 64 72 65 73 73 20 50 32 2e 0a 2a 2f 0a 63 61 73  dress P2..*/.cas
79e0: 65 20 4f 50 5f 47 6f 73 75 62 3a 20 7b 20 20 20  e OP_Gosub: {   
79f0: 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70           /* jump
7a00: 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f   */.  assert( pO
7a10: 70 2d 3e 70 31 3e 30 20 26 26 20 70 4f 70 2d 3e  p->p1>0 && pOp->
7a20: 70 31 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d  p1<=(p->nMem+1 -
7a30: 20 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a   p->nCursor) );.
7a40: 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70    pIn1 = &aMem[p
7a50: 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72  Op->p1];.  asser
7a60: 74 28 20 56 64 62 65 4d 65 6d 44 79 6e 61 6d 69  t( VdbeMemDynami
7a70: 63 28 70 49 6e 31 29 3d 3d 30 20 29 3b 0a 20 20  c(pIn1)==0 );.  
7a80: 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65  memAboutToChange
7a90: 28 70 2c 20 70 49 6e 31 29 3b 0a 20 20 70 49 6e  (p, pIn1);.  pIn
7aa0: 31 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 49  1->flags = MEM_I
7ab0: 6e 74 3b 0a 20 20 70 49 6e 31 2d 3e 75 2e 69 20  nt;.  pIn1->u.i 
7ac0: 3d 20 28 69 6e 74 29 28 70 4f 70 2d 61 4f 70 29  = (int)(pOp-aOp)
7ad0: 3b 0a 20 20 52 45 47 49 53 54 45 52 5f 54 52 41  ;.  REGISTER_TRA
7ae0: 43 45 28 70 4f 70 2d 3e 70 31 2c 20 70 49 6e 31  CE(pOp->p1, pIn1
7af0: 29 3b 0a 0a 20 20 2f 2a 20 4d 6f 73 74 20 6a 75  );..  /* Most ju
7b00: 6d 70 20 6f 70 65 72 61 74 69 6f 6e 73 20 64 6f  mp operations do
7b10: 20 61 20 67 6f 74 6f 20 74 6f 20 74 68 69 73 20   a goto to this 
7b20: 73 70 6f 74 20 69 6e 20 6f 72 64 65 72 20 74 6f  spot in order to
7b30: 20 75 70 64 61 74 65 0a 20 20 2a 2a 20 74 68 65   update.  ** the
7b40: 20 70 4f 70 20 70 6f 69 6e 74 65 72 2e 20 2a 2f   pOp pointer. */
7b50: 0a 6a 75 6d 70 5f 74 6f 5f 70 32 3a 0a 20 20 70  .jump_to_p2:.  p
7b60: 4f 70 20 3d 20 26 61 4f 70 5b 70 4f 70 2d 3e 70  Op = &aOp[pOp->p
7b70: 32 20 2d 20 31 5d 3b 0a 20 20 62 72 65 61 6b 3b  2 - 1];.  break;
7b80: 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 20  .}../* Opcode:  
7b90: 52 65 74 75 72 6e 20 50 31 20 2a 20 2a 20 2a 20  Return P1 * * * 
7ba0: 2a 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70 20 74 6f 20  *.**.** Jump to 
7bb0: 74 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63  the next instruc
7bc0: 74 69 6f 6e 20 61 66 74 65 72 20 74 68 65 20 61  tion after the a
7bd0: 64 64 72 65 73 73 20 69 6e 20 72 65 67 69 73 74  ddress in regist
7be0: 65 72 20 50 31 2e 20 20 41 66 74 65 72 0a 2a 2a  er P1.  After.**
7bf0: 20 74 68 65 20 6a 75 6d 70 2c 20 72 65 67 69 73   the jump, regis
7c00: 74 65 72 20 50 31 20 62 65 63 6f 6d 65 73 20 75  ter P1 becomes u
7c10: 6e 64 65 66 69 6e 65 64 2e 0a 2a 2f 0a 63 61 73  ndefined..*/.cas
7c20: 65 20 4f 50 5f 52 65 74 75 72 6e 3a 20 7b 20 20  e OP_Return: {  
7c30: 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 31 20           /* in1 
7c40: 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65  */.  pIn1 = &aMe
7c50: 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  m[pOp->p1];.  as
7c60: 73 65 72 74 28 20 70 49 6e 31 2d 3e 66 6c 61 67  sert( pIn1->flag
7c70: 73 3d 3d 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20  s==MEM_Int );.  
7c80: 70 4f 70 20 3d 20 26 61 4f 70 5b 70 49 6e 31 2d  pOp = &aOp[pIn1-
7c90: 3e 75 2e 69 5d 3b 0a 20 20 70 49 6e 31 2d 3e 66  >u.i];.  pIn1->f
7ca0: 6c 61 67 73 20 3d 20 4d 45 4d 5f 55 6e 64 65 66  lags = MEM_Undef
7cb0: 69 6e 65 64 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  ined;.  break;.}
7cc0: 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 6e 69  ../* Opcode: Ini
7cd0: 74 43 6f 72 6f 75 74 69 6e 65 20 50 31 20 50 32  tCoroutine P1 P2
7ce0: 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 53 65   P3 * *.**.** Se
7cf0: 74 20 75 70 20 72 65 67 69 73 74 65 72 20 50 31  t up register P1
7d00: 20 73 6f 20 74 68 61 74 20 69 74 20 77 69 6c 6c   so that it will
7d10: 20 59 69 65 6c 64 20 74 6f 20 74 68 65 20 63 6f   Yield to the co
7d20: 72 6f 75 74 69 6e 65 0a 2a 2a 20 6c 6f 63 61 74  routine.** locat
7d30: 65 64 20 61 74 20 61 64 64 72 65 73 73 20 50 33  ed at address P3
7d40: 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 32 21 3d 30  ..**.** If P2!=0
7d50: 20 74 68 65 6e 20 74 68 65 20 63 6f 72 6f 75 74   then the corout
7d60: 69 6e 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69  ine implementati
7d70: 6f 6e 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 66  on immediately f
7d80: 6f 6c 6c 6f 77 73 0a 2a 2a 20 74 68 69 73 20 6f  ollows.** this o
7d90: 70 63 6f 64 65 2e 20 20 53 6f 20 6a 75 6d 70 20  pcode.  So jump 
7da0: 6f 76 65 72 20 74 68 65 20 63 6f 72 6f 75 74 69  over the corouti
7db0: 6e 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f  ne implementatio
7dc0: 6e 20 74 6f 0a 2a 2a 20 61 64 64 72 65 73 73 20  n to.** address 
7dd0: 50 32 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c  P2..**.** See al
7de0: 73 6f 3a 20 45 6e 64 43 6f 72 6f 75 74 69 6e 65  so: EndCoroutine
7df0: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 6e 69 74  .*/.case OP_Init
7e00: 43 6f 72 6f 75 74 69 6e 65 3a 20 7b 20 20 20 20  Coroutine: {    
7e10: 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 61 73   /* jump */.  as
7e20: 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 30 20  sert( pOp->p1>0 
7e30: 26 26 20 20 70 4f 70 2d 3e 70 31 3c 3d 28 70 2d  &&  pOp->p1<=(p-
7e40: 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75  >nMem+1 - p->nCu
7e50: 72 73 6f 72 29 20 29 3b 0a 20 20 61 73 73 65 72  rsor) );.  asser
7e60: 74 28 20 70 4f 70 2d 3e 70 32 3e 3d 30 20 26 26  t( pOp->p2>=0 &&
7e70: 20 70 4f 70 2d 3e 70 32 3c 70 2d 3e 6e 4f 70 20   pOp->p2<p->nOp 
7e80: 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  );.  assert( pOp
7e90: 2d 3e 70 33 3e 3d 30 20 26 26 20 70 4f 70 2d 3e  ->p3>=0 && pOp->
7ea0: 70 33 3c 70 2d 3e 6e 4f 70 20 29 3b 0a 20 20 70  p3<p->nOp );.  p
7eb0: 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  Out = &aMem[pOp-
7ec0: 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p1];.  assert( 
7ed0: 21 56 64 62 65 4d 65 6d 44 79 6e 61 6d 69 63 28  !VdbeMemDynamic(
7ee0: 70 4f 75 74 29 20 29 3b 0a 20 20 70 4f 75 74 2d  pOut) );.  pOut-
7ef0: 3e 75 2e 69 20 3d 20 70 4f 70 2d 3e 70 33 20 2d  >u.i = pOp->p3 -
7f00: 20 31 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67   1;.  pOut->flag
7f10: 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20 69  s = MEM_Int;.  i
7f20: 66 28 20 70 4f 70 2d 3e 70 32 20 29 20 67 6f 74  f( pOp->p2 ) got
7f30: 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20  o jump_to_p2;.  
7f40: 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
7f50: 6f 64 65 3a 20 20 45 6e 64 43 6f 72 6f 75 74 69  ode:  EndCorouti
7f60: 6e 65 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a  ne P1 * * * *.**
7f70: 0a 2a 2a 20 54 68 65 20 69 6e 73 74 72 75 63 74  .** The instruct
7f80: 69 6f 6e 20 61 74 20 74 68 65 20 61 64 64 72 65  ion at the addre
7f90: 73 73 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ss in register P
7fa0: 31 20 69 73 20 61 20 59 69 65 6c 64 2e 0a 2a 2a  1 is a Yield..**
7fb0: 20 4a 75 6d 70 20 74 6f 20 74 68 65 20 50 32 20   Jump to the P2 
7fc0: 70 61 72 61 6d 65 74 65 72 20 6f 66 20 74 68 61  parameter of tha
7fd0: 74 20 59 69 65 6c 64 2e 0a 2a 2a 20 41 66 74 65  t Yield..** Afte
7fe0: 72 20 74 68 65 20 6a 75 6d 70 2c 20 72 65 67 69  r the jump, regi
7ff0: 73 74 65 72 20 50 31 20 62 65 63 6f 6d 65 73 20  ster P1 becomes 
8000: 75 6e 64 65 66 69 6e 65 64 2e 0a 2a 2a 0a 2a 2a  undefined..**.**
8010: 20 53 65 65 20 61 6c 73 6f 3a 20 49 6e 69 74 43   See also: InitC
8020: 6f 72 6f 75 74 69 6e 65 0a 2a 2f 0a 63 61 73 65  oroutine.*/.case
8030: 20 4f 50 5f 45 6e 64 43 6f 72 6f 75 74 69 6e 65   OP_EndCoroutine
8040: 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  : {           /*
8050: 20 69 6e 31 20 2a 2f 0a 20 20 56 64 62 65 4f 70   in1 */.  VdbeOp
8060: 20 2a 70 43 61 6c 6c 65 72 3b 0a 20 20 70 49 6e   *pCaller;.  pIn
8070: 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  1 = &aMem[pOp->p
8080: 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 49  1];.  assert( pI
8090: 6e 31 2d 3e 66 6c 61 67 73 3d 3d 4d 45 4d 5f 49  n1->flags==MEM_I
80a0: 6e 74 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  nt );.  assert( 
80b0: 70 49 6e 31 2d 3e 75 2e 69 3e 3d 30 20 26 26 20  pIn1->u.i>=0 && 
80c0: 70 49 6e 31 2d 3e 75 2e 69 3c 70 2d 3e 6e 4f 70  pIn1->u.i<p->nOp
80d0: 20 29 3b 0a 20 20 70 43 61 6c 6c 65 72 20 3d 20   );.  pCaller = 
80e0: 26 61 4f 70 5b 70 49 6e 31 2d 3e 75 2e 69 5d 3b  &aOp[pIn1->u.i];
80f0: 0a 20 20 61 73 73 65 72 74 28 20 70 43 61 6c 6c  .  assert( pCall
8100: 65 72 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 59  er->opcode==OP_Y
8110: 69 65 6c 64 20 29 3b 0a 20 20 61 73 73 65 72 74  ield );.  assert
8120: 28 20 70 43 61 6c 6c 65 72 2d 3e 70 32 3e 3d 30  ( pCaller->p2>=0
8130: 20 26 26 20 70 43 61 6c 6c 65 72 2d 3e 70 32 3c   && pCaller->p2<
8140: 70 2d 3e 6e 4f 70 20 29 3b 0a 20 20 70 4f 70 20  p->nOp );.  pOp 
8150: 3d 20 26 61 4f 70 5b 70 43 61 6c 6c 65 72 2d 3e  = &aOp[pCaller->
8160: 70 32 20 2d 20 31 5d 3b 0a 20 20 70 49 6e 31 2d  p2 - 1];.  pIn1-
8170: 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 55 6e 64  >flags = MEM_Und
8180: 65 66 69 6e 65 64 3b 0a 20 20 62 72 65 61 6b 3b  efined;.  break;
8190: 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 20  .}../* Opcode:  
81a0: 59 69 65 6c 64 20 50 31 20 50 32 20 2a 20 2a 20  Yield P1 P2 * * 
81b0: 2a 0a 2a 2a 0a 2a 2a 20 53 77 61 70 20 74 68 65  *.**.** Swap the
81c0: 20 70 72 6f 67 72 61 6d 20 63 6f 75 6e 74 65 72   program counter
81d0: 20 77 69 74 68 20 74 68 65 20 76 61 6c 75 65 20   with the value 
81e0: 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 2e 20  in register P1. 
81f0: 20 54 68 69 73 0a 2a 2a 20 68 61 73 20 74 68 65   This.** has the
8200: 20 65 66 66 65 63 74 20 6f 66 20 79 69 65 6c 64   effect of yield
8210: 69 6e 67 20 74 6f 20 61 20 63 6f 72 6f 75 74 69  ing to a corouti
8220: 6e 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65  ne..**.** If the
8230: 20 63 6f 72 6f 75 74 69 6e 65 20 74 68 61 74 20   coroutine that 
8240: 69 73 20 6c 61 75 6e 63 68 65 64 20 62 79 20 74  is launched by t
8250: 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20  his instruction 
8260: 65 6e 64 73 20 77 69 74 68 0a 2a 2a 20 59 69 65  ends with.** Yie
8270: 6c 64 20 6f 72 20 52 65 74 75 72 6e 20 74 68 65  ld or Return the
8280: 6e 20 63 6f 6e 74 69 6e 75 65 20 74 6f 20 74 68  n continue to th
8290: 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69  e next instructi
82a0: 6f 6e 2e 20 20 42 75 74 20 69 66 0a 2a 2a 20 74  on.  But if.** t
82b0: 68 65 20 63 6f 72 6f 75 74 69 6e 65 20 6c 61 75  he coroutine lau
82c0: 6e 63 68 65 64 20 62 79 20 74 68 69 73 20 69 6e  nched by this in
82d0: 73 74 72 75 63 74 69 6f 6e 20 65 6e 64 73 20 77  struction ends w
82e0: 69 74 68 0a 2a 2a 20 45 6e 64 43 6f 72 6f 75 74  ith.** EndCorout
82f0: 69 6e 65 2c 20 74 68 65 6e 20 6a 75 6d 70 20 74  ine, then jump t
8300: 6f 20 50 32 20 72 61 74 68 65 72 20 74 68 61 6e  o P2 rather than
8310: 20 63 6f 6e 74 69 6e 75 69 6e 67 20 77 69 74 68   continuing with
8320: 20 74 68 65 0a 2a 2a 20 6e 65 78 74 20 69 6e 73   the.** next ins
8330: 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20  truction..**.** 
8340: 53 65 65 20 61 6c 73 6f 3a 20 49 6e 69 74 43 6f  See also: InitCo
8350: 72 6f 75 74 69 6e 65 0a 2a 2f 0a 63 61 73 65 20  routine.*/.case 
8360: 4f 50 5f 59 69 65 6c 64 3a 20 7b 20 20 20 20 20  OP_Yield: {     
8370: 20 20 20 20 20 20 20 2f 2a 20 69 6e 31 2c 20 6a         /* in1, j
8380: 75 6d 70 20 2a 2f 0a 20 20 69 6e 74 20 70 63 44  ump */.  int pcD
8390: 65 73 74 3b 0a 20 20 70 49 6e 31 20 3d 20 26 61  est;.  pIn1 = &a
83a0: 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
83b0: 61 73 73 65 72 74 28 20 56 64 62 65 4d 65 6d 44  assert( VdbeMemD
83c0: 79 6e 61 6d 69 63 28 70 49 6e 31 29 3d 3d 30 20  ynamic(pIn1)==0 
83d0: 29 3b 0a 20 20 70 49 6e 31 2d 3e 66 6c 61 67 73  );.  pIn1->flags
83e0: 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20 70 63   = MEM_Int;.  pc
83f0: 44 65 73 74 20 3d 20 28 69 6e 74 29 70 49 6e 31  Dest = (int)pIn1
8400: 2d 3e 75 2e 69 3b 0a 20 20 70 49 6e 31 2d 3e 75  ->u.i;.  pIn1->u
8410: 2e 69 20 3d 20 28 69 6e 74 29 28 70 4f 70 20 2d  .i = (int)(pOp -
8420: 20 61 4f 70 29 3b 0a 20 20 52 45 47 49 53 54 45   aOp);.  REGISTE
8430: 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 31 2c  R_TRACE(pOp->p1,
8440: 20 70 49 6e 31 29 3b 0a 20 20 70 4f 70 20 3d 20   pIn1);.  pOp = 
8450: 26 61 4f 70 5b 70 63 44 65 73 74 5d 3b 0a 20 20  &aOp[pcDest];.  
8460: 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
8470: 6f 64 65 3a 20 20 48 61 6c 74 49 66 4e 75 6c 6c  ode:  HaltIfNull
8480: 20 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35    P1 P2 P3 P4 P5
8490: 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 66  .** Synopsis: if
84a0: 20 72 5b 50 33 5d 3d 6e 75 6c 6c 20 68 61 6c 74   r[P3]=null halt
84b0: 0a 2a 2a 0a 2a 2a 20 43 68 65 63 6b 20 74 68 65  .**.** Check the
84c0: 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
84d0: 65 72 20 50 33 2e 20 20 49 66 20 69 74 20 69 73  er P3.  If it is
84e0: 20 4e 55 4c 4c 20 74 68 65 6e 20 48 61 6c 74 20   NULL then Halt 
84f0: 75 73 69 6e 67 0a 2a 2a 20 70 61 72 61 6d 65 74  using.** paramet
8500: 65 72 20 50 31 2c 20 50 32 2c 20 61 6e 64 20 50  er P1, P2, and P
8510: 34 20 61 73 20 69 66 20 74 68 69 73 20 77 65 72  4 as if this wer
8520: 65 20 61 20 48 61 6c 74 20 69 6e 73 74 72 75 63  e a Halt instruc
8530: 74 69 6f 6e 2e 20 20 49 66 20 74 68 65 0a 2a 2a  tion.  If the.**
8540: 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
8550: 65 72 20 50 33 20 69 73 20 6e 6f 74 20 4e 55 4c  er P3 is not NUL
8560: 4c 2c 20 74 68 65 6e 20 74 68 69 73 20 72 6f 75  L, then this rou
8570: 74 69 6e 65 20 69 73 20 61 20 6e 6f 2d 6f 70 2e  tine is a no-op.
8580: 0a 2a 2a 20 54 68 65 20 50 35 20 70 61 72 61 6d  .** The P5 param
8590: 65 74 65 72 20 73 68 6f 75 6c 64 20 62 65 20 31  eter should be 1
85a0: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 48 61 6c  ..*/.case OP_Hal
85b0: 74 49 66 4e 75 6c 6c 3a 20 7b 20 20 20 20 20 20  tIfNull: {      
85c0: 2f 2a 20 69 6e 33 20 2a 2f 0a 20 20 70 49 6e 33  /* in3 */.  pIn3
85d0: 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33   = &aMem[pOp->p3
85e0: 5d 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  ];.#ifdef SQLITE
85f0: 5f 44 45 42 55 47 0a 20 20 69 66 28 20 70 4f 70  _DEBUG.  if( pOp
8600: 2d 3e 70 32 3d 3d 4f 45 5f 41 62 6f 72 74 20 29  ->p2==OE_Abort )
8610: 7b 20 73 71 6c 69 74 65 33 56 64 62 65 41 73 73  { sqlite3VdbeAss
8620: 65 72 74 41 62 6f 72 74 61 62 6c 65 28 70 29 3b  ertAbortable(p);
8630: 20 7d 0a 23 65 6e 64 69 66 0a 20 20 69 66 28 20   }.#endif.  if( 
8640: 28 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d  (pIn3->flags & M
8650: 45 4d 5f 4e 75 6c 6c 29 3d 3d 30 20 29 20 62 72  EM_Null)==0 ) br
8660: 65 61 6b 3b 0a 20 20 2f 2a 20 46 61 6c 6c 20 74  eak;.  /* Fall t
8670: 68 72 6f 75 67 68 20 69 6e 74 6f 20 4f 50 5f 48  hrough into OP_H
8680: 61 6c 74 20 2a 2f 0a 7d 0a 0a 2f 2a 20 4f 70 63  alt */.}../* Opc
8690: 6f 64 65 3a 20 20 48 61 6c 74 20 50 31 20 50 32  ode:  Halt P1 P2
86a0: 20 2a 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 45   * P4 P5.**.** E
86b0: 78 69 74 20 69 6d 6d 65 64 69 61 74 65 6c 79 2e  xit immediately.
86c0: 20 20 41 6c 6c 20 6f 70 65 6e 20 63 75 72 73 6f    All open curso
86d0: 72 73 2c 20 65 74 63 20 61 72 65 20 63 6c 6f 73  rs, etc are clos
86e0: 65 64 0a 2a 2a 20 61 75 74 6f 6d 61 74 69 63 61  ed.** automatica
86f0: 6c 6c 79 2e 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73  lly..**.** P1 is
8700: 20 74 68 65 20 72 65 73 75 6c 74 20 63 6f 64 65   the result code
8710: 20 72 65 74 75 72 6e 65 64 20 62 79 20 73 71 6c   returned by sql
8720: 69 74 65 33 5f 65 78 65 63 28 29 2c 20 73 71 6c  ite3_exec(), sql
8730: 69 74 65 33 5f 72 65 73 65 74 28 29 2c 0a 2a 2a  ite3_reset(),.**
8740: 20 6f 72 20 73 71 6c 69 74 65 33 5f 66 69 6e 61   or sqlite3_fina
8750: 6c 69 7a 65 28 29 2e 20 20 46 6f 72 20 61 20 6e  lize().  For a n
8760: 6f 72 6d 61 6c 20 68 61 6c 74 2c 20 74 68 69 73  ormal halt, this
8770: 20 73 68 6f 75 6c 64 20 62 65 20 53 51 4c 49 54   should be SQLIT
8780: 45 5f 4f 4b 20 28 30 29 2e 0a 2a 2a 20 46 6f 72  E_OK (0)..** For
8790: 20 65 72 72 6f 72 73 2c 20 69 74 20 63 61 6e 20   errors, it can 
87a0: 62 65 20 73 6f 6d 65 20 6f 74 68 65 72 20 76 61  be some other va
87b0: 6c 75 65 2e 20 20 49 66 20 50 31 21 3d 30 20 74  lue.  If P1!=0 t
87c0: 68 65 6e 20 50 32 20 77 69 6c 6c 20 64 65 74 65  hen P2 will dete
87d0: 72 6d 69 6e 65 0a 2a 2a 20 77 68 65 74 68 65 72  rmine.** whether
87e0: 20 6f 72 20 6e 6f 74 20 74 6f 20 72 6f 6c 6c 62   or not to rollb
87f0: 61 63 6b 20 74 68 65 20 63 75 72 72 65 6e 74 20  ack the current 
8800: 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20 20 44 6f  transaction.  Do
8810: 20 6e 6f 74 20 72 6f 6c 6c 62 61 63 6b 0a 2a 2a   not rollback.**
8820: 20 69 66 20 50 32 3d 3d 4f 45 5f 46 61 69 6c 2e   if P2==OE_Fail.
8830: 20 44 6f 20 74 68 65 20 72 6f 6c 6c 62 61 63 6b   Do the rollback
8840: 20 69 66 20 50 32 3d 3d 4f 45 5f 52 6f 6c 6c 62   if P2==OE_Rollb
8850: 61 63 6b 2e 20 20 49 66 20 50 32 3d 3d 4f 45 5f  ack.  If P2==OE_
8860: 41 62 6f 72 74 2c 0a 2a 2a 20 74 68 65 6e 20 62  Abort,.** then b
8870: 61 63 6b 20 6f 75 74 20 61 6c 6c 20 63 68 61 6e  ack out all chan
8880: 67 65 73 20 74 68 61 74 20 68 61 76 65 20 6f 63  ges that have oc
8890: 63 75 72 72 65 64 20 64 75 72 69 6e 67 20 74 68  curred during th
88a0: 69 73 20 65 78 65 63 75 74 69 6f 6e 20 6f 66 20  is execution of 
88b0: 74 68 65 0a 2a 2a 20 56 44 42 45 2c 20 62 75 74  the.** VDBE, but
88c0: 20 64 6f 20 6e 6f 74 20 72 6f 6c 6c 62 61 63 6b   do not rollback
88d0: 20 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e   the transaction
88e0: 2e 20 0a 2a 2a 0a 2a 2a 20 49 66 20 50 34 20 69  . .**.** If P4 i
88f0: 73 20 6e 6f 74 20 6e 75 6c 6c 20 74 68 65 6e 20  s not null then 
8900: 69 74 20 69 73 20 61 6e 20 65 72 72 6f 72 20 6d  it is an error m
8910: 65 73 73 61 67 65 20 73 74 72 69 6e 67 2e 0a 2a  essage string..*
8920: 2a 0a 2a 2a 20 50 35 20 69 73 20 61 20 76 61 6c  *.** P5 is a val
8930: 75 65 20 62 65 74 77 65 65 6e 20 30 20 61 6e 64  ue between 0 and
8940: 20 34 2c 20 69 6e 63 6c 75 73 69 76 65 2c 20 74   4, inclusive, t
8950: 68 61 74 20 6d 6f 64 69 66 69 65 73 20 74 68 65  hat modifies the
8960: 20 50 34 20 73 74 72 69 6e 67 2e 0a 2a 2a 0a 2a   P4 string..**.*
8970: 2a 20 20 20 20 30 3a 20 20 28 6e 6f 20 63 68 61  *    0:  (no cha
8980: 6e 67 65 29 0a 2a 2a 20 20 20 20 31 3a 20 20 4e  nge).**    1:  N
8990: 4f 54 20 4e 55 4c 4c 20 63 6f 6e 74 72 61 69 6e  OT NULL contrain
89a0: 74 20 66 61 69 6c 65 64 3a 20 50 34 0a 2a 2a 20  t failed: P4.** 
89b0: 20 20 20 32 3a 20 20 55 4e 49 51 55 45 20 63 6f     2:  UNIQUE co
89c0: 6e 73 74 72 61 69 6e 74 20 66 61 69 6c 65 64 3a  nstraint failed:
89d0: 20 50 34 0a 2a 2a 20 20 20 20 33 3a 20 20 43 48   P4.**    3:  CH
89e0: 45 43 4b 20 63 6f 6e 73 74 72 61 69 6e 74 20 66  ECK constraint f
89f0: 61 69 6c 65 64 3a 20 50 34 0a 2a 2a 20 20 20 20  ailed: P4.**    
8a00: 34 3a 20 20 46 4f 52 45 49 47 4e 20 4b 45 59 20  4:  FOREIGN KEY 
8a10: 63 6f 6e 73 74 72 61 69 6e 74 20 66 61 69 6c 65  constraint faile
8a20: 64 3a 20 50 34 0a 2a 2a 0a 2a 2a 20 49 66 20 50  d: P4.**.** If P
8a30: 35 20 69 73 20 6e 6f 74 20 7a 65 72 6f 20 61 6e  5 is not zero an
8a40: 64 20 50 34 20 69 73 20 4e 55 4c 4c 2c 20 74 68  d P4 is NULL, th
8a50: 65 6e 20 65 76 65 72 79 74 68 69 6e 67 20 61 66  en everything af
8a60: 74 65 72 20 74 68 65 20 22 3a 22 20 69 73 0a 2a  ter the ":" is.*
8a70: 2a 20 6f 6d 69 74 74 65 64 2e 0a 2a 2a 0a 2a 2a  * omitted..**.**
8a80: 20 54 68 65 72 65 20 69 73 20 61 6e 20 69 6d 70   There is an imp
8a90: 6c 69 65 64 20 22 48 61 6c 74 20 30 20 30 20 30  lied "Halt 0 0 0
8aa0: 22 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 69 6e  " instruction in
8ab0: 73 65 72 74 65 64 20 61 74 20 74 68 65 20 76 65  serted at the ve
8ac0: 72 79 20 65 6e 64 20 6f 66 0a 2a 2a 20 65 76 65  ry end of.** eve
8ad0: 72 79 20 70 72 6f 67 72 61 6d 2e 20 20 53 6f 20  ry program.  So 
8ae0: 61 20 6a 75 6d 70 20 70 61 73 74 20 74 68 65 20  a jump past the 
8af0: 6c 61 73 74 20 69 6e 73 74 72 75 63 74 69 6f 6e  last instruction
8b00: 20 6f 66 20 74 68 65 20 70 72 6f 67 72 61 6d 0a   of the program.
8b10: 2a 2a 20 69 73 20 74 68 65 20 73 61 6d 65 20 61  ** is the same a
8b20: 73 20 65 78 65 63 75 74 69 6e 67 20 48 61 6c 74  s executing Halt
8b30: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 48 61 6c  ..*/.case OP_Hal
8b40: 74 3a 20 7b 0a 20 20 56 64 62 65 46 72 61 6d 65  t: {.  VdbeFrame
8b50: 20 2a 70 46 72 61 6d 65 3b 0a 20 20 69 6e 74 20   *pFrame;.  int 
8b60: 70 63 78 3b 0a 0a 20 20 70 63 78 20 3d 20 28 69  pcx;..  pcx = (i
8b70: 6e 74 29 28 70 4f 70 20 2d 20 61 4f 70 29 3b 0a  nt)(pOp - aOp);.
8b80: 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45  #ifdef SQLITE_DE
8b90: 42 55 47 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70  BUG.  if( pOp->p
8ba0: 32 3d 3d 4f 45 5f 41 62 6f 72 74 20 29 7b 20 73  2==OE_Abort ){ s
8bb0: 71 6c 69 74 65 33 56 64 62 65 41 73 73 65 72 74  qlite3VdbeAssert
8bc0: 41 62 6f 72 74 61 62 6c 65 28 70 29 3b 20 7d 0a  Abortable(p); }.
8bd0: 23 65 6e 64 69 66 0a 20 20 69 66 28 20 70 4f 70  #endif.  if( pOp
8be0: 2d 3e 70 31 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  ->p1==SQLITE_OK 
8bf0: 26 26 20 70 2d 3e 70 46 72 61 6d 65 20 29 7b 0a  && p->pFrame ){.
8c00: 20 20 20 20 2f 2a 20 48 61 6c 74 20 74 68 65 20      /* Halt the 
8c10: 73 75 62 2d 70 72 6f 67 72 61 6d 2e 20 52 65 74  sub-program. Ret
8c20: 75 72 6e 20 63 6f 6e 74 72 6f 6c 20 74 6f 20 74  urn control to t
8c30: 68 65 20 70 61 72 65 6e 74 20 66 72 61 6d 65 2e  he parent frame.
8c40: 20 2a 2f 0a 20 20 20 20 70 46 72 61 6d 65 20 3d   */.    pFrame =
8c50: 20 70 2d 3e 70 46 72 61 6d 65 3b 0a 20 20 20 20   p->pFrame;.    
8c60: 70 2d 3e 70 46 72 61 6d 65 20 3d 20 70 46 72 61  p->pFrame = pFra
8c70: 6d 65 2d 3e 70 50 61 72 65 6e 74 3b 0a 20 20 20  me->pParent;.   
8c80: 20 70 2d 3e 6e 46 72 61 6d 65 2d 2d 3b 0a 20 20   p->nFrame--;.  
8c90: 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74    sqlite3VdbeSet
8ca0: 43 68 61 6e 67 65 73 28 64 62 2c 20 70 2d 3e 6e  Changes(db, p->n
8cb0: 43 68 61 6e 67 65 29 3b 0a 20 20 20 20 70 63 78  Change);.    pcx
8cc0: 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 46 72   = sqlite3VdbeFr
8cd0: 61 6d 65 52 65 73 74 6f 72 65 28 70 46 72 61 6d  ameRestore(pFram
8ce0: 65 29 3b 0a 20 20 20 20 69 66 28 20 70 4f 70 2d  e);.    if( pOp-
8cf0: 3e 70 32 3d 3d 4f 45 5f 49 67 6e 6f 72 65 20 29  >p2==OE_Ignore )
8d00: 7b 0a 20 20 20 20 20 20 2f 2a 20 49 6e 73 74 72  {.      /* Instr
8d10: 75 63 74 69 6f 6e 20 70 63 78 20 69 73 20 74 68  uction pcx is th
8d20: 65 20 4f 50 5f 50 72 6f 67 72 61 6d 20 74 68 61  e OP_Program tha
8d30: 74 20 69 6e 76 6f 6b 65 64 20 74 68 65 20 73 75  t invoked the su
8d40: 62 2d 70 72 6f 67 72 61 6d 20 0a 20 20 20 20 20  b-program .     
8d50: 20 2a 2a 20 63 75 72 72 65 6e 74 6c 79 20 62 65   ** currently be
8d60: 69 6e 67 20 68 61 6c 74 65 64 2e 20 49 66 20 74  ing halted. If t
8d70: 68 65 20 70 32 20 69 6e 73 74 72 75 63 74 69 6f  he p2 instructio
8d80: 6e 20 6f 66 20 74 68 69 73 20 4f 50 5f 48 61 6c  n of this OP_Hal
8d90: 74 0a 20 20 20 20 20 20 2a 2a 20 69 6e 73 74 72  t.      ** instr
8da0: 75 63 74 69 6f 6e 20 69 73 20 73 65 74 20 74 6f  uction is set to
8db0: 20 4f 45 5f 49 67 6e 6f 72 65 2c 20 74 68 65 6e   OE_Ignore, then
8dc0: 20 74 68 65 20 73 75 62 2d 70 72 6f 67 72 61 6d   the sub-program
8dd0: 20 69 73 20 74 68 72 6f 77 69 6e 67 0a 20 20 20   is throwing.   
8de0: 20 20 20 2a 2a 20 61 6e 20 49 47 4e 4f 52 45 20     ** an IGNORE 
8df0: 65 78 63 65 70 74 69 6f 6e 2e 20 49 6e 20 74 68  exception. In th
8e00: 69 73 20 63 61 73 65 20 6a 75 6d 70 20 74 6f 20  is case jump to 
8e10: 74 68 65 20 61 64 64 72 65 73 73 20 73 70 65 63  the address spec
8e20: 69 66 69 65 64 0a 20 20 20 20 20 20 2a 2a 20 61  ified.      ** a
8e30: 73 20 74 68 65 20 70 32 20 6f 66 20 74 68 65 20  s the p2 of the 
8e40: 63 61 6c 6c 69 6e 67 20 4f 50 5f 50 72 6f 67 72  calling OP_Progr
8e50: 61 6d 2e 20 20 2a 2f 0a 20 20 20 20 20 20 70 63  am.  */.      pc
8e60: 78 20 3d 20 70 2d 3e 61 4f 70 5b 70 63 78 5d 2e  x = p->aOp[pcx].
8e70: 70 32 2d 31 3b 0a 20 20 20 20 7d 0a 20 20 20 20  p2-1;.    }.    
8e80: 61 4f 70 20 3d 20 70 2d 3e 61 4f 70 3b 0a 20 20  aOp = p->aOp;.  
8e90: 20 20 61 4d 65 6d 20 3d 20 70 2d 3e 61 4d 65 6d    aMem = p->aMem
8ea0: 3b 0a 20 20 20 20 70 4f 70 20 3d 20 26 61 4f 70  ;.    pOp = &aOp
8eb0: 5b 70 63 78 5d 3b 0a 20 20 20 20 62 72 65 61 6b  [pcx];.    break
8ec0: 3b 0a 20 20 7d 0a 20 20 70 2d 3e 72 63 20 3d 20  ;.  }.  p->rc = 
8ed0: 70 4f 70 2d 3e 70 31 3b 0a 20 20 70 2d 3e 65 72  pOp->p1;.  p->er
8ee0: 72 6f 72 41 63 74 69 6f 6e 20 3d 20 28 75 38 29  rorAction = (u8)
8ef0: 70 4f 70 2d 3e 70 32 3b 0a 20 20 70 2d 3e 70 63  pOp->p2;.  p->pc
8f00: 20 3d 20 70 63 78 3b 0a 20 20 61 73 73 65 72 74   = pcx;.  assert
8f10: 28 20 70 4f 70 2d 3e 70 35 3c 3d 34 20 29 3b 0a  ( pOp->p5<=4 );.
8f20: 20 20 69 66 28 20 70 2d 3e 72 63 20 29 7b 0a 20    if( p->rc ){. 
8f30: 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 29     if( pOp->p5 )
8f40: 7b 0a 20 20 20 20 20 20 73 74 61 74 69 63 20 63  {.      static c
8f50: 6f 6e 73 74 20 63 68 61 72 20 2a 20 63 6f 6e 73  onst char * cons
8f60: 74 20 61 7a 54 79 70 65 5b 5d 20 3d 20 7b 20 22  t azType[] = { "
8f70: 4e 4f 54 20 4e 55 4c 4c 22 2c 20 22 55 4e 49 51  NOT NULL", "UNIQ
8f80: 55 45 22 2c 20 22 43 48 45 43 4b 22 2c 0a 20 20  UE", "CHECK",.  
8f90: 20 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 22 46 4f 52 45             "FORE
8fc0: 49 47 4e 20 4b 45 59 22 20 7d 3b 0a 20 20 20 20  IGN KEY" };.    
8fd0: 20 20 74 65 73 74 63 61 73 65 28 20 70 4f 70 2d    testcase( pOp-
8fe0: 3e 70 35 3d 3d 31 20 29 3b 0a 20 20 20 20 20 20  >p5==1 );.      
8ff0: 74 65 73 74 63 61 73 65 28 20 70 4f 70 2d 3e 70  testcase( pOp->p
9000: 35 3d 3d 32 20 29 3b 0a 20 20 20 20 20 20 74 65  5==2 );.      te
9010: 73 74 63 61 73 65 28 20 70 4f 70 2d 3e 70 35 3d  stcase( pOp->p5=
9020: 3d 33 20 29 3b 0a 20 20 20 20 20 20 74 65 73 74  =3 );.      test
9030: 63 61 73 65 28 20 70 4f 70 2d 3e 70 35 3d 3d 34  case( pOp->p5==4
9040: 20 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65   );.      sqlite
9050: 33 56 64 62 65 45 72 72 6f 72 28 70 2c 20 22 25  3VdbeError(p, "%
9060: 73 20 63 6f 6e 73 74 72 61 69 6e 74 20 66 61 69  s constraint fai
9070: 6c 65 64 22 2c 20 61 7a 54 79 70 65 5b 70 4f 70  led", azType[pOp
9080: 2d 3e 70 35 2d 31 5d 29 3b 0a 20 20 20 20 20 20  ->p5-1]);.      
9090: 69 66 28 20 70 4f 70 2d 3e 70 34 2e 7a 20 29 7b  if( pOp->p4.z ){
90a0: 0a 20 20 20 20 20 20 20 20 70 2d 3e 7a 45 72 72  .        p->zErr
90b0: 4d 73 67 20 3d 20 73 71 6c 69 74 65 33 4d 50 72  Msg = sqlite3MPr
90c0: 69 6e 74 66 28 64 62 2c 20 22 25 7a 3a 20 25 73  intf(db, "%z: %s
90d0: 22 2c 20 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 70  ", p->zErrMsg, p
90e0: 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20 20 20 20  Op->p4.z);.     
90f0: 20 7d 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20   }.    }else{.  
9100: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 45      sqlite3VdbeE
9110: 72 72 6f 72 28 70 2c 20 22 25 73 22 2c 20 70 4f  rror(p, "%s", pO
9120: 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20 20 20 7d 0a  p->p4.z);.    }.
9130: 20 20 20 20 73 71 6c 69 74 65 33 5f 6c 6f 67 28      sqlite3_log(
9140: 70 4f 70 2d 3e 70 31 2c 20 22 61 62 6f 72 74 20  pOp->p1, "abort 
9150: 61 74 20 25 64 20 69 6e 20 5b 25 73 5d 3a 20 25  at %d in [%s]: %
9160: 73 22 2c 20 70 63 78 2c 20 70 2d 3e 7a 53 71 6c  s", pcx, p->zSql
9170: 2c 20 70 2d 3e 7a 45 72 72 4d 73 67 29 3b 0a 20  , p->zErrMsg);. 
9180: 20 7d 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65   }.  rc = sqlite
9190: 33 56 64 62 65 48 61 6c 74 28 70 29 3b 0a 20 20  3VdbeHalt(p);.  
91a0: 61 73 73 65 72 74 28 20 72 63 3d 3d 53 51 4c 49  assert( rc==SQLI
91b0: 54 45 5f 42 55 53 59 20 7c 7c 20 72 63 3d 3d 53  TE_BUSY || rc==S
91c0: 51 4c 49 54 45 5f 4f 4b 20 7c 7c 20 72 63 3d 3d  QLITE_OK || rc==
91d0: 53 51 4c 49 54 45 5f 45 52 52 4f 52 20 29 3b 0a  SQLITE_ERROR );.
91e0: 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45    if( rc==SQLITE
91f0: 5f 42 55 53 59 20 29 7b 0a 20 20 20 20 70 2d 3e  _BUSY ){.    p->
9200: 72 63 20 3d 20 53 51 4c 49 54 45 5f 42 55 53 59  rc = SQLITE_BUSY
9210: 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61  ;.  }else{.    a
9220: 73 73 65 72 74 28 20 72 63 3d 3d 53 51 4c 49 54  ssert( rc==SQLIT
9230: 45 5f 4f 4b 20 7c 7c 20 28 70 2d 3e 72 63 26 30  E_OK || (p->rc&0
9240: 78 66 66 29 3d 3d 53 51 4c 49 54 45 5f 43 4f 4e  xff)==SQLITE_CON
9250: 53 54 52 41 49 4e 54 20 29 3b 0a 20 20 20 20 61  STRAINT );.    a
9260: 73 73 65 72 74 28 20 72 63 3d 3d 53 51 4c 49 54  ssert( rc==SQLIT
9270: 45 5f 4f 4b 20 7c 7c 20 64 62 2d 3e 6e 44 65 66  E_OK || db->nDef
9280: 65 72 72 65 64 43 6f 6e 73 3e 30 20 7c 7c 20 64  erredCons>0 || d
9290: 62 2d 3e 6e 44 65 66 65 72 72 65 64 49 6d 6d 43  b->nDeferredImmC
92a0: 6f 6e 73 3e 30 20 29 3b 0a 20 20 20 20 72 63 20  ons>0 );.    rc 
92b0: 3d 20 70 2d 3e 72 63 20 3f 20 53 51 4c 49 54 45  = p->rc ? SQLITE
92c0: 5f 45 52 52 4f 52 20 3a 20 53 51 4c 49 54 45 5f  _ERROR : SQLITE_
92d0: 44 4f 4e 45 3b 0a 20 20 7d 0a 20 20 67 6f 74 6f  DONE;.  }.  goto
92e0: 20 76 64 62 65 5f 72 65 74 75 72 6e 3b 0a 7d 0a   vdbe_return;.}.
92f0: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 6e 74 65  ./* Opcode: Inte
9300: 67 65 72 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  ger P1 P2 * * *.
9310: 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50  ** Synopsis: r[P
9320: 32 5d 3d 50 31 0a 2a 2a 0a 2a 2a 20 54 68 65 20  2]=P1.**.** The 
9330: 33 32 2d 62 69 74 20 69 6e 74 65 67 65 72 20 76  32-bit integer v
9340: 61 6c 75 65 20 50 31 20 69 73 20 77 72 69 74 74  alue P1 is writt
9350: 65 6e 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72  en into register
9360: 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f   P2..*/.case OP_
9370: 49 6e 74 65 67 65 72 3a 20 7b 20 20 20 20 20 20  Integer: {      
9380: 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20 20     /* out2 */.  
9390: 70 4f 75 74 20 3d 20 6f 75 74 32 50 72 65 72 65  pOut = out2Prere
93a0: 6c 65 61 73 65 28 70 2c 20 70 4f 70 29 3b 0a 20  lease(p, pOp);. 
93b0: 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 70 4f 70   pOut->u.i = pOp
93c0: 2d 3e 70 31 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  ->p1;.  break;.}
93d0: 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 6e 74  ../* Opcode: Int
93e0: 36 34 20 2a 20 50 32 20 2a 20 50 34 20 2a 0a 2a  64 * P2 * P4 *.*
93f0: 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32  * Synopsis: r[P2
9400: 5d 3d 50 34 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73  ]=P4.**.** P4 is
9410: 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20   a pointer to a 
9420: 36 34 2d 62 69 74 20 69 6e 74 65 67 65 72 20 76  64-bit integer v
9430: 61 6c 75 65 2e 0a 2a 2a 20 57 72 69 74 65 20 74  alue..** Write t
9440: 68 61 74 20 76 61 6c 75 65 20 69 6e 74 6f 20 72  hat value into r
9450: 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2f 0a 63  egister P2..*/.c
9460: 61 73 65 20 4f 50 5f 49 6e 74 36 34 3a 20 7b 20  ase OP_Int64: { 
9470: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74            /* out
9480: 32 20 2a 2f 0a 20 20 70 4f 75 74 20 3d 20 6f 75  2 */.  pOut = ou
9490: 74 32 50 72 65 72 65 6c 65 61 73 65 28 70 2c 20  t2Prerelease(p, 
94a0: 70 4f 70 29 3b 0a 20 20 61 73 73 65 72 74 28 20  pOp);.  assert( 
94b0: 70 4f 70 2d 3e 70 34 2e 70 49 36 34 21 3d 30 20  pOp->p4.pI64!=0 
94c0: 29 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d  );.  pOut->u.i =
94d0: 20 2a 70 4f 70 2d 3e 70 34 2e 70 49 36 34 3b 0a   *pOp->p4.pI64;.
94e0: 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 23 69 66 6e    break;.}..#ifn
94f0: 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
9500: 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 0a 2f  FLOATING_POINT./
9510: 2a 20 4f 70 63 6f 64 65 3a 20 52 65 61 6c 20 2a  * Opcode: Real *
9520: 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 20 53 79   P2 * P4 *.** Sy
9530: 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 50 34  nopsis: r[P2]=P4
9540: 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20 70  .**.** P4 is a p
9550: 6f 69 6e 74 65 72 20 74 6f 20 61 20 36 34 2d 62  ointer to a 64-b
9560: 69 74 20 66 6c 6f 61 74 69 6e 67 20 70 6f 69 6e  it floating poin
9570: 74 20 76 61 6c 75 65 2e 0a 2a 2a 20 57 72 69 74  t value..** Writ
9580: 65 20 74 68 61 74 20 76 61 6c 75 65 20 69 6e 74  e that value int
9590: 6f 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a  o register P2..*
95a0: 2f 0a 63 61 73 65 20 4f 50 5f 52 65 61 6c 3a 20  /.case OP_Real: 
95b0: 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  {            /* 
95c0: 73 61 6d 65 20 61 73 20 54 4b 5f 46 4c 4f 41 54  same as TK_FLOAT
95d0: 2c 20 6f 75 74 32 20 2a 2f 0a 20 20 70 4f 75 74  , out2 */.  pOut
95e0: 20 3d 20 6f 75 74 32 50 72 65 72 65 6c 65 61 73   = out2Prereleas
95f0: 65 28 70 2c 20 70 4f 70 29 3b 0a 20 20 70 4f 75  e(p, pOp);.  pOu
9600: 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 52  t->flags = MEM_R
9610: 65 61 6c 3b 0a 20 20 61 73 73 65 72 74 28 20 21  eal;.  assert( !
9620: 73 71 6c 69 74 65 33 49 73 4e 61 4e 28 2a 70 4f  sqlite3IsNaN(*pO
9630: 70 2d 3e 70 34 2e 70 52 65 61 6c 29 20 29 3b 0a  p->p4.pReal) );.
9640: 20 20 70 4f 75 74 2d 3e 75 2e 72 20 3d 20 2a 70    pOut->u.r = *p
9650: 4f 70 2d 3e 70 34 2e 70 52 65 61 6c 3b 0a 20 20  Op->p4.pReal;.  
9660: 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a  break;.}.#endif.
9670: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 74 72 69  ./* Opcode: Stri
9680: 6e 67 38 20 2a 20 50 32 20 2a 20 50 34 20 2a 0a  ng8 * P2 * P4 *.
9690: 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50  ** Synopsis: r[P
96a0: 32 5d 3d 27 50 34 27 0a 2a 2a 0a 2a 2a 20 50 34  2]='P4'.**.** P4
96b0: 20 70 6f 69 6e 74 73 20 74 6f 20 61 20 6e 75 6c   points to a nul
96c0: 20 74 65 72 6d 69 6e 61 74 65 64 20 55 54 46 2d   terminated UTF-
96d0: 38 20 73 74 72 69 6e 67 2e 20 54 68 69 73 20 6f  8 string. This o
96e0: 70 63 6f 64 65 20 69 73 20 74 72 61 6e 73 66 6f  pcode is transfo
96f0: 72 6d 65 64 20 0a 2a 2a 20 69 6e 74 6f 20 61 20  rmed .** into a 
9700: 53 74 72 69 6e 67 20 6f 70 63 6f 64 65 20 62 65  String opcode be
9710: 66 6f 72 65 20 69 74 20 69 73 20 65 78 65 63 75  fore it is execu
9720: 74 65 64 20 66 6f 72 20 74 68 65 20 66 69 72 73  ted for the firs
9730: 74 20 74 69 6d 65 2e 20 20 44 75 72 69 6e 67 0a  t time.  During.
9740: 2a 2a 20 74 68 69 73 20 74 72 61 6e 73 66 6f 72  ** this transfor
9750: 6d 61 74 69 6f 6e 2c 20 74 68 65 20 6c 65 6e 67  mation, the leng
9760: 74 68 20 6f 66 20 73 74 72 69 6e 67 20 50 34 20  th of string P4 
9770: 69 73 20 63 6f 6d 70 75 74 65 64 20 61 6e 64 20  is computed and 
9780: 73 74 6f 72 65 64 0a 2a 2a 20 61 73 20 74 68 65  stored.** as the
9790: 20 50 31 20 70 61 72 61 6d 65 74 65 72 2e 0a 2a   P1 parameter..*
97a0: 2f 0a 63 61 73 65 20 4f 50 5f 53 74 72 69 6e 67  /.case OP_String
97b0: 38 3a 20 7b 20 20 20 20 20 20 20 20 20 2f 2a 20  8: {         /* 
97c0: 73 61 6d 65 20 61 73 20 54 4b 5f 53 54 52 49 4e  same as TK_STRIN
97d0: 47 2c 20 6f 75 74 32 20 2a 2f 0a 20 20 61 73 73  G, out2 */.  ass
97e0: 65 72 74 28 20 70 4f 70 2d 3e 70 34 2e 7a 21 3d  ert( pOp->p4.z!=
97f0: 30 20 29 3b 0a 20 20 70 4f 75 74 20 3d 20 6f 75  0 );.  pOut = ou
9800: 74 32 50 72 65 72 65 6c 65 61 73 65 28 70 2c 20  t2Prerelease(p, 
9810: 70 4f 70 29 3b 0a 20 20 70 4f 70 2d 3e 70 31 20  pOp);.  pOp->p1 
9820: 3d 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33  = sqlite3Strlen3
9830: 30 28 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 0a 23  0(pOp->p4.z);..#
9840: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
9850: 49 54 5f 55 54 46 31 36 0a 20 20 69 66 28 20 65  IT_UTF16.  if( e
9860: 6e 63 6f 64 69 6e 67 21 3d 53 51 4c 49 54 45 5f  ncoding!=SQLITE_
9870: 55 54 46 38 20 29 7b 0a 20 20 20 20 72 63 20 3d  UTF8 ){.    rc =
9880: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53   sqlite3VdbeMemS
9890: 65 74 53 74 72 28 70 4f 75 74 2c 20 70 4f 70 2d  etStr(pOut, pOp-
98a0: 3e 70 34 2e 7a 2c 20 2d 31 2c 20 53 51 4c 49 54  >p4.z, -1, SQLIT
98b0: 45 5f 55 54 46 38 2c 20 53 51 4c 49 54 45 5f 53  E_UTF8, SQLITE_S
98c0: 54 41 54 49 43 29 3b 0a 20 20 20 20 61 73 73 65  TATIC);.    asse
98d0: 72 74 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f  rt( rc==SQLITE_O
98e0: 4b 20 7c 7c 20 72 63 3d 3d 53 51 4c 49 54 45 5f  K || rc==SQLITE_
98f0: 54 4f 4f 42 49 47 20 29 3b 0a 20 20 20 20 69 66  TOOBIG );.    if
9900: 28 20 72 63 20 29 20 67 6f 74 6f 20 74 6f 6f 5f  ( rc ) goto too_
9910: 62 69 67 3b 0a 20 20 20 20 69 66 28 20 53 51 4c  big;.    if( SQL
9920: 49 54 45 5f 4f 4b 21 3d 73 71 6c 69 74 65 33 56  ITE_OK!=sqlite3V
9930: 64 62 65 43 68 61 6e 67 65 45 6e 63 6f 64 69 6e  dbeChangeEncodin
9940: 67 28 70 4f 75 74 2c 20 65 6e 63 6f 64 69 6e 67  g(pOut, encoding
9950: 29 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b  ) ) goto no_mem;
9960: 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 75  .    assert( pOu
9970: 74 2d 3e 73 7a 4d 61 6c 6c 6f 63 3e 30 20 26 26  t->szMalloc>0 &&
9980: 20 70 4f 75 74 2d 3e 7a 4d 61 6c 6c 6f 63 3d 3d   pOut->zMalloc==
9990: 70 4f 75 74 2d 3e 7a 20 29 3b 0a 20 20 20 20 61  pOut->z );.    a
99a0: 73 73 65 72 74 28 20 56 64 62 65 4d 65 6d 44 79  ssert( VdbeMemDy
99b0: 6e 61 6d 69 63 28 70 4f 75 74 29 3d 3d 30 20 29  namic(pOut)==0 )
99c0: 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 73 7a 4d 61  ;.    pOut->szMa
99d0: 6c 6c 6f 63 20 3d 20 30 3b 0a 20 20 20 20 70 4f  lloc = 0;.    pO
99e0: 75 74 2d 3e 66 6c 61 67 73 20 7c 3d 20 4d 45 4d  ut->flags |= MEM
99f0: 5f 53 74 61 74 69 63 3b 0a 20 20 20 20 69 66 28  _Static;.    if(
9a00: 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34   pOp->p4type==P4
9a10: 5f 44 59 4e 41 4d 49 43 20 29 7b 0a 20 20 20 20  _DYNAMIC ){.    
9a20: 20 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 28    sqlite3DbFree(
9a30: 64 62 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a  db, pOp->p4.z);.
9a40: 20 20 20 20 7d 0a 20 20 20 20 70 4f 70 2d 3e 70      }.    pOp->p
9a50: 34 74 79 70 65 20 3d 20 50 34 5f 44 59 4e 41 4d  4type = P4_DYNAM
9a60: 49 43 3b 0a 20 20 20 20 70 4f 70 2d 3e 70 34 2e  IC;.    pOp->p4.
9a70: 7a 20 3d 20 70 4f 75 74 2d 3e 7a 3b 0a 20 20 20  z = pOut->z;.   
9a80: 20 70 4f 70 2d 3e 70 31 20 3d 20 70 4f 75 74 2d   pOp->p1 = pOut-
9a90: 3e 6e 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 20  >n;.  }.#endif. 
9aa0: 20 69 66 28 20 70 4f 70 2d 3e 70 31 3e 64 62 2d   if( pOp->p1>db-
9ab0: 3e 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4c  >aLimit[SQLITE_L
9ac0: 49 4d 49 54 5f 4c 45 4e 47 54 48 5d 20 29 7b 0a  IMIT_LENGTH] ){.
9ad0: 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67      goto too_big
9ae0: 3b 0a 20 20 7d 0a 20 20 70 4f 70 2d 3e 6f 70 63  ;.  }.  pOp->opc
9af0: 6f 64 65 20 3d 20 4f 50 5f 53 74 72 69 6e 67 3b  ode = OP_String;
9b00: 0a 20 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53  .  assert( rc==S
9b10: 51 4c 49 54 45 5f 4f 4b 20 29 3b 0a 20 20 2f 2a  QLITE_OK );.  /*
9b20: 20 46 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f   Fall through to
9b30: 20 74 68 65 20 6e 65 78 74 20 63 61 73 65 2c 20   the next case, 
9b40: 4f 50 5f 53 74 72 69 6e 67 20 2a 2f 0a 7d 0a 20  OP_String */.}. 
9b50: 20 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 74 72   ./* Opcode: Str
9b60: 69 6e 67 20 50 31 20 50 32 20 50 33 20 50 34 20  ing P1 P2 P3 P4 
9b70: 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20  P5.** Synopsis: 
9b80: 72 5b 50 32 5d 3d 27 50 34 27 20 28 6c 65 6e 3d  r[P2]='P4' (len=
9b90: 50 31 29 0a 2a 2a 0a 2a 2a 20 54 68 65 20 73 74  P1).**.** The st
9ba0: 72 69 6e 67 20 76 61 6c 75 65 20 50 34 20 6f 66  ring value P4 of
9bb0: 20 6c 65 6e 67 74 68 20 50 31 20 28 62 79 74 65   length P1 (byte
9bc0: 73 29 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20  s) is stored in 
9bd0: 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a  register P2..**.
9be0: 2a 2a 20 49 66 20 50 33 20 69 73 20 6e 6f 74 20  ** If P3 is not 
9bf0: 7a 65 72 6f 20 61 6e 64 20 74 68 65 20 63 6f 6e  zero and the con
9c00: 74 65 6e 74 20 6f 66 20 72 65 67 69 73 74 65 72  tent of register
9c10: 20 50 33 20 69 73 20 65 71 75 61 6c 20 74 6f 20   P3 is equal to 
9c20: 50 35 2c 20 74 68 65 6e 0a 2a 2a 20 74 68 65 20  P5, then.** the 
9c30: 64 61 74 61 74 79 70 65 20 6f 66 20 74 68 65 20  datatype of the 
9c40: 72 65 67 69 73 74 65 72 20 50 32 20 69 73 20 63  register P2 is c
9c50: 6f 6e 76 65 72 74 65 64 20 74 6f 20 42 4c 4f 42  onverted to BLOB
9c60: 2e 20 20 54 68 65 20 63 6f 6e 74 65 6e 74 20 69  .  The content i
9c70: 73 0a 2a 2a 20 74 68 65 20 73 61 6d 65 20 73 65  s.** the same se
9c80: 71 75 65 6e 63 65 20 6f 66 20 62 79 74 65 73 2c  quence of bytes,
9c90: 20 69 74 20 69 73 20 6d 65 72 65 6c 79 20 69 6e   it is merely in
9ca0: 74 65 72 70 72 65 74 65 64 20 61 73 20 61 20 42  terpreted as a B
9cb0: 4c 4f 42 20 69 6e 73 74 65 61 64 0a 2a 2a 20 6f  LOB instead.** o
9cc0: 66 20 61 20 73 74 72 69 6e 67 2c 20 61 73 20 69  f a string, as i
9cd0: 66 20 69 74 20 68 61 64 20 62 65 65 6e 20 43 41  f it had been CA
9ce0: 53 54 2e 20 20 49 6e 20 6f 74 68 65 72 20 77 6f  ST.  In other wo
9cf0: 72 64 73 3a 0a 2a 2a 0a 2a 2a 20 69 66 28 20 50  rds:.**.** if( P
9d00: 33 21 3d 30 20 61 6e 64 20 72 65 67 5b 50 33 5d  3!=0 and reg[P3]
9d10: 3d 3d 50 35 20 29 20 72 65 67 5b 50 32 5d 20 3a  ==P5 ) reg[P2] :
9d20: 3d 20 43 41 53 54 28 72 65 67 5b 50 32 5d 20 61  = CAST(reg[P2] a
9d30: 73 20 42 4c 4f 42 29 0a 2a 2f 0a 63 61 73 65 20  s BLOB).*/.case 
9d40: 4f 50 5f 53 74 72 69 6e 67 3a 20 7b 20 20 20 20  OP_String: {    
9d50: 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f        /* out2 */
9d60: 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
9d70: 70 34 2e 7a 21 3d 30 20 29 3b 0a 20 20 70 4f 75  p4.z!=0 );.  pOu
9d80: 74 20 3d 20 6f 75 74 32 50 72 65 72 65 6c 65 61  t = out2Prerelea
9d90: 73 65 28 70 2c 20 70 4f 70 29 3b 0a 20 20 70 4f  se(p, pOp);.  pO
9da0: 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f  ut->flags = MEM_
9db0: 53 74 72 7c 4d 45 4d 5f 53 74 61 74 69 63 7c 4d  Str|MEM_Static|M
9dc0: 45 4d 5f 54 65 72 6d 3b 0a 20 20 70 4f 75 74 2d  EM_Term;.  pOut-
9dd0: 3e 7a 20 3d 20 70 4f 70 2d 3e 70 34 2e 7a 3b 0a  >z = pOp->p4.z;.
9de0: 20 20 70 4f 75 74 2d 3e 6e 20 3d 20 70 4f 70 2d    pOut->n = pOp-
9df0: 3e 70 31 3b 0a 20 20 70 4f 75 74 2d 3e 65 6e 63  >p1;.  pOut->enc
9e00: 20 3d 20 65 6e 63 6f 64 69 6e 67 3b 0a 20 20 55   = encoding;.  U
9e10: 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49  PDATE_MAX_BLOBSI
9e20: 5a 45 28 70 4f 75 74 29 3b 0a 23 69 66 6e 64 65  ZE(pOut);.#ifnde
9e30: 66 20 53 51 4c 49 54 45 5f 4c 49 4b 45 5f 44 4f  f SQLITE_LIKE_DO
9e40: 45 53 4e 54 5f 4d 41 54 43 48 5f 42 4c 4f 42 53  ESNT_MATCH_BLOBS
9e50: 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 33 3e 30  .  if( pOp->p3>0
9e60: 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20   ){.    assert( 
9e70: 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65  pOp->p3<=(p->nMe
9e80: 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72  m+1 - p->nCursor
9e90: 29 20 29 3b 0a 20 20 20 20 70 49 6e 33 20 3d 20  ) );.    pIn3 = 
9ea0: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a  &aMem[pOp->p3];.
9eb0: 20 20 20 20 61 73 73 65 72 74 28 20 70 49 6e 33      assert( pIn3
9ec0: 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e  ->flags & MEM_In
9ed0: 74 20 29 3b 0a 20 20 20 20 69 66 28 20 70 49 6e  t );.    if( pIn
9ee0: 33 2d 3e 75 2e 69 3d 3d 70 4f 70 2d 3e 70 35 20  3->u.i==pOp->p5 
9ef0: 29 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20  ) pOut->flags = 
9f00: 4d 45 4d 5f 42 6c 6f 62 7c 4d 45 4d 5f 53 74 61  MEM_Blob|MEM_Sta
9f10: 74 69 63 7c 4d 45 4d 5f 54 65 72 6d 3b 0a 20 20  tic|MEM_Term;.  
9f20: 7d 0a 23 65 6e 64 69 66 0a 20 20 62 72 65 61 6b  }.#endif.  break
9f30: 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
9f40: 4e 75 6c 6c 20 50 31 20 50 32 20 50 33 20 2a 20  Null P1 P2 P3 * 
9f50: 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72  *.** Synopsis: r
9f60: 5b 50 32 2e 2e 50 33 5d 3d 4e 55 4c 4c 0a 2a 2a  [P2..P3]=NULL.**
9f70: 0a 2a 2a 20 57 72 69 74 65 20 61 20 4e 55 4c 4c  .** Write a NULL
9f80: 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 73 20   into registers 
9f90: 50 32 2e 20 20 49 66 20 50 33 20 67 72 65 61 74  P2.  If P3 great
9fa0: 65 72 20 74 68 61 6e 20 50 32 2c 20 74 68 65 6e  er than P2, then
9fb0: 20 61 6c 73 6f 20 77 72 69 74 65 0a 2a 2a 20 4e   also write.** N
9fc0: 55 4c 4c 20 69 6e 74 6f 20 72 65 67 69 73 74 65  ULL into registe
9fd0: 72 20 50 33 20 61 6e 64 20 65 76 65 72 79 20 72  r P3 and every r
9fe0: 65 67 69 73 74 65 72 20 69 6e 20 62 65 74 77 65  egister in betwe
9ff0: 65 6e 20 50 32 20 61 6e 64 20 50 33 2e 20 20 49  en P2 and P3.  I
a000: 66 20 50 33 0a 2a 2a 20 69 73 20 6c 65 73 73 20  f P3.** is less 
a010: 74 68 61 6e 20 50 32 20 28 74 79 70 69 63 61 6c  than P2 (typical
a020: 6c 79 20 50 33 20 69 73 20 7a 65 72 6f 29 20 74  ly P3 is zero) t
a030: 68 65 6e 20 6f 6e 6c 79 20 72 65 67 69 73 74 65  hen only registe
a040: 72 20 50 32 20 69 73 0a 2a 2a 20 73 65 74 20 74  r P2 is.** set t
a050: 6f 20 4e 55 4c 4c 2e 0a 2a 2a 0a 2a 2a 20 49 66  o NULL..**.** If
a060: 20 74 68 65 20 50 31 20 76 61 6c 75 65 20 69 73   the P1 value is
a070: 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65 6e 20   non-zero, then 
a080: 61 6c 73 6f 20 73 65 74 20 74 68 65 20 4d 45 4d  also set the MEM
a090: 5f 43 6c 65 61 72 65 64 20 66 6c 61 67 20 73 6f  _Cleared flag so
a0a0: 20 74 68 61 74 0a 2a 2a 20 4e 55 4c 4c 20 76 61   that.** NULL va
a0b0: 6c 75 65 73 20 77 69 6c 6c 20 6e 6f 74 20 63 6f  lues will not co
a0c0: 6d 70 61 72 65 20 65 71 75 61 6c 20 65 76 65 6e  mpare equal even
a0d0: 20 69 66 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45   if SQLITE_NULLE
a0e0: 51 20 69 73 20 73 65 74 20 6f 6e 0a 2a 2a 20 4f  Q is set on.** O
a0f0: 50 5f 4e 65 20 6f 72 20 4f 50 5f 45 71 2e 0a 2a  P_Ne or OP_Eq..*
a100: 2f 0a 63 61 73 65 20 4f 50 5f 4e 75 6c 6c 3a 20  /.case OP_Null: 
a110: 7b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f  {           /* o
a120: 75 74 32 20 2a 2f 0a 20 20 69 6e 74 20 63 6e 74  ut2 */.  int cnt
a130: 3b 0a 20 20 75 31 36 20 6e 75 6c 6c 46 6c 61 67  ;.  u16 nullFlag
a140: 3b 0a 20 20 70 4f 75 74 20 3d 20 6f 75 74 32 50  ;.  pOut = out2P
a150: 72 65 72 65 6c 65 61 73 65 28 70 2c 20 70 4f 70  rerelease(p, pOp
a160: 29 3b 0a 20 20 63 6e 74 20 3d 20 70 4f 70 2d 3e  );.  cnt = pOp->
a170: 70 33 2d 70 4f 70 2d 3e 70 32 3b 0a 20 20 61 73  p3-pOp->p2;.  as
a180: 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c 3d 28  sert( pOp->p3<=(
a190: 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e  p->nMem+1 - p->n
a1a0: 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 70 4f 75  Cursor) );.  pOu
a1b0: 74 2d 3e 66 6c 61 67 73 20 3d 20 6e 75 6c 6c 46  t->flags = nullF
a1c0: 6c 61 67 20 3d 20 70 4f 70 2d 3e 70 31 20 3f 20  lag = pOp->p1 ? 
a1d0: 28 4d 45 4d 5f 4e 75 6c 6c 7c 4d 45 4d 5f 43 6c  (MEM_Null|MEM_Cl
a1e0: 65 61 72 65 64 29 20 3a 20 4d 45 4d 5f 4e 75 6c  eared) : MEM_Nul
a1f0: 6c 3b 0a 20 20 70 4f 75 74 2d 3e 6e 20 3d 20 30  l;.  pOut->n = 0
a200: 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ;.#ifdef SQLITE_
a210: 44 45 42 55 47 0a 20 20 70 4f 75 74 2d 3e 75 54  DEBUG.  pOut->uT
a220: 65 6d 70 20 3d 20 30 3b 0a 23 65 6e 64 69 66 0a  emp = 0;.#endif.
a230: 20 20 77 68 69 6c 65 28 20 63 6e 74 3e 30 20 29    while( cnt>0 )
a240: 7b 0a 20 20 20 20 70 4f 75 74 2b 2b 3b 0a 20 20  {.    pOut++;.  
a250: 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e    memAboutToChan
a260: 67 65 28 70 2c 20 70 4f 75 74 29 3b 0a 20 20 20  ge(p, pOut);.   
a270: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53   sqlite3VdbeMemS
a280: 65 74 4e 75 6c 6c 28 70 4f 75 74 29 3b 0a 20 20  etNull(pOut);.  
a290: 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20    pOut->flags = 
a2a0: 6e 75 6c 6c 46 6c 61 67 3b 0a 20 20 20 20 70 4f  nullFlag;.    pO
a2b0: 75 74 2d 3e 6e 20 3d 20 30 3b 0a 20 20 20 20 63  ut->n = 0;.    c
a2c0: 6e 74 2d 2d 3b 0a 20 20 7d 0a 20 20 62 72 65 61  nt--;.  }.  brea
a2d0: 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
a2e0: 20 53 6f 66 74 4e 75 6c 6c 20 50 31 20 2a 20 2a   SoftNull P1 * *
a2f0: 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73   * *.** Synopsis
a300: 3a 20 72 5b 50 31 5d 3d 4e 55 4c 4c 0a 2a 2a 0a  : r[P1]=NULL.**.
a310: 2a 2a 20 53 65 74 20 72 65 67 69 73 74 65 72 20  ** Set register 
a320: 50 31 20 74 6f 20 68 61 76 65 20 74 68 65 20 76  P1 to have the v
a330: 61 6c 75 65 20 4e 55 4c 4c 20 61 73 20 73 65 65  alue NULL as see
a340: 6e 20 62 79 20 74 68 65 20 4f 50 5f 4d 61 6b 65  n by the OP_Make
a350: 52 65 63 6f 72 64 0a 2a 2a 20 69 6e 73 74 72 75  Record.** instru
a360: 63 74 69 6f 6e 2c 20 62 75 74 20 64 6f 20 6e 6f  ction, but do no
a370: 74 20 66 72 65 65 20 61 6e 79 20 73 74 72 69 6e  t free any strin
a380: 67 20 6f 72 20 62 6c 6f 62 20 6d 65 6d 6f 72 79  g or blob memory
a390: 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68   associated with
a3a0: 0a 2a 2a 20 74 68 65 20 72 65 67 69 73 74 65 72  .** the register
a3b0: 2c 20 73 6f 20 74 68 61 74 20 69 66 20 74 68 65  , so that if the
a3c0: 20 76 61 6c 75 65 20 77 61 73 20 61 20 73 74 72   value was a str
a3d0: 69 6e 67 20 6f 72 20 62 6c 6f 62 20 74 68 61 74  ing or blob that
a3e0: 20 77 61 73 0a 2a 2a 20 70 72 65 76 69 6f 75 73   was.** previous
a3f0: 6c 79 20 63 6f 70 69 65 64 20 75 73 69 6e 67 20  ly copied using 
a400: 4f 50 5f 53 43 6f 70 79 2c 20 74 68 65 20 63 6f  OP_SCopy, the co
a410: 70 69 65 73 20 77 69 6c 6c 20 63 6f 6e 74 69 6e  pies will contin
a420: 75 65 20 74 6f 20 62 65 20 76 61 6c 69 64 2e 0a  ue to be valid..
a430: 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 6f 66 74 4e  */.case OP_SoftN
a440: 75 6c 6c 3a 20 7b 0a 20 20 61 73 73 65 72 74 28  ull: {.  assert(
a450: 20 70 4f 70 2d 3e 70 31 3e 30 20 26 26 20 70 4f   pOp->p1>0 && pO
a460: 70 2d 3e 70 31 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b  p->p1<=(p->nMem+
a470: 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29 20  1 - p->nCursor) 
a480: 29 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65  );.  pOut = &aMe
a490: 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 4f  m[pOp->p1];.  pO
a4a0: 75 74 2d 3e 66 6c 61 67 73 20 3d 20 28 70 4f 75  ut->flags = (pOu
a4b0: 74 2d 3e 66 6c 61 67 73 26 7e 28 4d 45 4d 5f 55  t->flags&~(MEM_U
a4c0: 6e 64 65 66 69 6e 65 64 7c 4d 45 4d 5f 41 66 66  ndefined|MEM_Aff
a4d0: 4d 61 73 6b 29 29 7c 4d 45 4d 5f 4e 75 6c 6c 3b  Mask))|MEM_Null;
a4e0: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
a4f0: 4f 70 63 6f 64 65 3a 20 42 6c 6f 62 20 50 31 20  Opcode: Blob P1 
a500: 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 20 53 79 6e  P2 * P4 *.** Syn
a510: 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 50 34 20  opsis: r[P2]=P4 
a520: 28 6c 65 6e 3d 50 31 29 0a 2a 2a 0a 2a 2a 20 50  (len=P1).**.** P
a530: 34 20 70 6f 69 6e 74 73 20 74 6f 20 61 20 62 6c  4 points to a bl
a540: 6f 62 20 6f 66 20 64 61 74 61 20 50 31 20 62 79  ob of data P1 by
a550: 74 65 73 20 6c 6f 6e 67 2e 20 20 53 74 6f 72 65  tes long.  Store
a560: 20 74 68 69 73 0a 2a 2a 20 62 6c 6f 62 20 69 6e   this.** blob in
a570: 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2f   register P2..*/
a580: 0a 63 61 73 65 20 4f 50 5f 42 6c 6f 62 3a 20 7b  .case OP_Blob: {
a590: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a5a0: 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20 20 61 73 73  /* out2 */.  ass
a5b0: 65 72 74 28 20 70 4f 70 2d 3e 70 31 20 3c 3d 20  ert( pOp->p1 <= 
a5c0: 53 51 4c 49 54 45 5f 4d 41 58 5f 4c 45 4e 47 54  SQLITE_MAX_LENGT
a5d0: 48 20 29 3b 0a 20 20 70 4f 75 74 20 3d 20 6f 75  H );.  pOut = ou
a5e0: 74 32 50 72 65 72 65 6c 65 61 73 65 28 70 2c 20  t2Prerelease(p, 
a5f0: 70 4f 70 29 3b 0a 20 20 73 71 6c 69 74 65 33 56  pOp);.  sqlite3V
a600: 64 62 65 4d 65 6d 53 65 74 53 74 72 28 70 4f 75  dbeMemSetStr(pOu
a610: 74 2c 20 70 4f 70 2d 3e 70 34 2e 7a 2c 20 70 4f  t, pOp->p4.z, pO
a620: 70 2d 3e 70 31 2c 20 30 2c 20 30 29 3b 0a 20 20  p->p1, 0, 0);.  
a630: 70 4f 75 74 2d 3e 65 6e 63 20 3d 20 65 6e 63 6f  pOut->enc = enco
a640: 64 69 6e 67 3b 0a 20 20 55 50 44 41 54 45 5f 4d  ding;.  UPDATE_M
a650: 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 4f 75 74  AX_BLOBSIZE(pOut
a660: 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  );.  break;.}../
a670: 2a 20 4f 70 63 6f 64 65 3a 20 56 61 72 69 61 62  * Opcode: Variab
a680: 6c 65 20 50 31 20 50 32 20 2a 20 50 34 20 2a 0a  le P1 P2 * P4 *.
a690: 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50  ** Synopsis: r[P
a6a0: 32 5d 3d 70 61 72 61 6d 65 74 65 72 28 50 31 2c  2]=parameter(P1,
a6b0: 50 34 29 0a 2a 2a 0a 2a 2a 20 54 72 61 6e 73 66  P4).**.** Transf
a6c0: 65 72 20 74 68 65 20 76 61 6c 75 65 73 20 6f 66  er the values of
a6d0: 20 62 6f 75 6e 64 20 70 61 72 61 6d 65 74 65 72   bound parameter
a6e0: 20 50 31 20 69 6e 74 6f 20 72 65 67 69 73 74 65   P1 into registe
a6f0: 72 20 50 32 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68  r P2.**.** If th
a700: 65 20 70 61 72 61 6d 65 74 65 72 20 69 73 20 6e  e parameter is n
a710: 61 6d 65 64 2c 20 74 68 65 6e 20 69 74 73 20 6e  amed, then its n
a720: 61 6d 65 20 61 70 70 65 61 72 73 20 69 6e 20 50  ame appears in P
a730: 34 2e 0a 2a 2a 20 54 68 65 20 50 34 20 76 61 6c  4..** The P4 val
a740: 75 65 20 69 73 20 75 73 65 64 20 62 79 20 73 71  ue is used by sq
a750: 6c 69 74 65 33 5f 62 69 6e 64 5f 70 61 72 61 6d  lite3_bind_param
a760: 65 74 65 72 5f 6e 61 6d 65 28 29 2e 0a 2a 2f 0a  eter_name()..*/.
a770: 63 61 73 65 20 4f 50 5f 56 61 72 69 61 62 6c 65  case OP_Variable
a780: 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f  : {            /
a790: 2a 20 6f 75 74 32 20 2a 2f 0a 20 20 4d 65 6d 20  * out2 */.  Mem 
a7a0: 2a 70 56 61 72 3b 20 20 20 20 20 20 20 2f 2a 20  *pVar;       /* 
a7b0: 56 61 6c 75 65 20 62 65 69 6e 67 20 74 72 61 6e  Value being tran
a7c0: 73 66 65 72 72 65 64 20 2a 2f 0a 0a 20 20 61 73  sferred */..  as
a7d0: 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 30 20  sert( pOp->p1>0 
a7e0: 26 26 20 70 4f 70 2d 3e 70 31 3c 3d 70 2d 3e 6e  && pOp->p1<=p->n
a7f0: 56 61 72 20 29 3b 0a 20 20 61 73 73 65 72 74 28  Var );.  assert(
a800: 20 70 4f 70 2d 3e 70 34 2e 7a 3d 3d 30 20 7c 7c   pOp->p4.z==0 ||
a810: 20 70 4f 70 2d 3e 70 34 2e 7a 3d 3d 73 71 6c 69   pOp->p4.z==sqli
a820: 74 65 33 56 4c 69 73 74 4e 75 6d 54 6f 4e 61 6d  te3VListNumToNam
a830: 65 28 70 2d 3e 70 56 4c 69 73 74 2c 70 4f 70 2d  e(p->pVList,pOp-
a840: 3e 70 31 29 20 29 3b 0a 20 20 70 56 61 72 20 3d  >p1) );.  pVar =
a850: 20 26 70 2d 3e 61 56 61 72 5b 70 4f 70 2d 3e 70   &p->aVar[pOp->p
a860: 31 20 2d 20 31 5d 3b 0a 20 20 69 66 28 20 73 71  1 - 1];.  if( sq
a870: 6c 69 74 65 33 56 64 62 65 4d 65 6d 54 6f 6f 42  lite3VdbeMemTooB
a880: 69 67 28 70 56 61 72 29 20 29 7b 0a 20 20 20 20  ig(pVar) ){.    
a890: 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20  goto too_big;.  
a8a0: 7d 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d  }.  pOut = &aMem
a8b0: 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 69 66 28  [pOp->p2];.  if(
a8c0: 20 56 64 62 65 4d 65 6d 44 79 6e 61 6d 69 63 28   VdbeMemDynamic(
a8d0: 70 4f 75 74 29 20 29 20 73 71 6c 69 74 65 33 56  pOut) ) sqlite3V
a8e0: 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 4f  dbeMemSetNull(pO
a8f0: 75 74 29 3b 0a 20 20 6d 65 6d 63 70 79 28 70 4f  ut);.  memcpy(pO
a900: 75 74 2c 20 70 56 61 72 2c 20 4d 45 4d 43 45 4c  ut, pVar, MEMCEL
a910: 4c 53 49 5a 45 29 3b 0a 20 20 70 4f 75 74 2d 3e  LSIZE);.  pOut->
a920: 66 6c 61 67 73 20 26 3d 20 7e 28 4d 45 4d 5f 44  flags &= ~(MEM_D
a930: 79 6e 7c 4d 45 4d 5f 45 70 68 65 6d 29 3b 0a 20  yn|MEM_Ephem);. 
a940: 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 7c 3d 20   pOut->flags |= 
a950: 4d 45 4d 5f 53 74 61 74 69 63 7c 4d 45 4d 5f 46  MEM_Static|MEM_F
a960: 72 6f 6d 42 69 6e 64 3b 0a 20 20 55 50 44 41 54  romBind;.  UPDAT
a970: 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70  E_MAX_BLOBSIZE(p
a980: 4f 75 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  Out);.  break;.}
a990: 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4d 6f 76  ../* Opcode: Mov
a9a0: 65 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a  e P1 P2 P3 * *.*
a9b0: 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32  * Synopsis: r[P2
a9c0: 40 50 33 5d 3d 72 5b 50 31 40 50 33 5d 0a 2a 2a  @P3]=r[P1@P3].**
a9d0: 0a 2a 2a 20 4d 6f 76 65 20 74 68 65 20 50 33 20  .** Move the P3 
a9e0: 76 61 6c 75 65 73 20 69 6e 20 72 65 67 69 73 74  values in regist
a9f0: 65 72 20 50 31 2e 2e 50 31 2b 50 33 2d 31 20 6f  er P1..P1+P3-1 o
aa00: 76 65 72 20 69 6e 74 6f 0a 2a 2a 20 72 65 67 69  ver into.** regi
aa10: 73 74 65 72 73 20 50 32 2e 2e 50 32 2b 50 33 2d  sters P2..P2+P3-
aa20: 31 2e 20 20 52 65 67 69 73 74 65 72 73 20 50 31  1.  Registers P1
aa30: 2e 2e 50 31 2b 50 33 2d 31 20 61 72 65 0a 2a 2a  ..P1+P3-1 are.**
aa40: 20 6c 65 66 74 20 68 6f 6c 64 69 6e 67 20 61 20   left holding a 
aa50: 4e 55 4c 4c 2e 20 20 49 74 20 69 73 20 61 6e 20  NULL.  It is an 
aa60: 65 72 72 6f 72 20 66 6f 72 20 72 65 67 69 73 74  error for regist
aa70: 65 72 20 72 61 6e 67 65 73 0a 2a 2a 20 50 31 2e  er ranges.** P1.
aa80: 2e 50 31 2b 50 33 2d 31 20 61 6e 64 20 50 32 2e  .P1+P3-1 and P2.
aa90: 2e 50 32 2b 50 33 2d 31 20 74 6f 20 6f 76 65 72  .P2+P3-1 to over
aaa0: 6c 61 70 2e 20 20 49 74 20 69 73 20 61 6e 20 65  lap.  It is an e
aab0: 72 72 6f 72 0a 2a 2a 20 66 6f 72 20 50 33 20 74  rror.** for P3 t
aac0: 6f 20 62 65 20 6c 65 73 73 20 74 68 61 6e 20 31  o be less than 1
aad0: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4d 6f 76  ..*/.case OP_Mov
aae0: 65 3a 20 7b 0a 20 20 69 6e 74 20 6e 3b 20 20 20  e: {.  int n;   
aaf0: 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
ab00: 72 20 6f 66 20 72 65 67 69 73 74 65 72 73 20 6c  r of registers l
ab10: 65 66 74 20 74 6f 20 63 6f 70 79 20 2a 2f 0a 20  eft to copy */. 
ab20: 20 69 6e 74 20 70 31 3b 20 20 20 20 20 20 20 20   int p1;        
ab30: 20 20 2f 2a 20 52 65 67 69 73 74 65 72 20 74 6f    /* Register to
ab40: 20 63 6f 70 79 20 66 72 6f 6d 20 2a 2f 0a 20 20   copy from */.  
ab50: 69 6e 74 20 70 32 3b 20 20 20 20 20 20 20 20 20  int p2;         
ab60: 20 2f 2a 20 52 65 67 69 73 74 65 72 20 74 6f 20   /* Register to 
ab70: 63 6f 70 79 20 74 6f 20 2a 2f 0a 0a 20 20 6e 20  copy to */..  n 
ab80: 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 70 31 20  = pOp->p3;.  p1 
ab90: 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 70 32 20  = pOp->p1;.  p2 
aba0: 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 61 73 73  = pOp->p2;.  ass
abb0: 65 72 74 28 20 6e 3e 30 20 26 26 20 70 31 3e 30  ert( n>0 && p1>0
abc0: 20 26 26 20 70 32 3e 30 20 29 3b 0a 20 20 61 73   && p2>0 );.  as
abd0: 73 65 72 74 28 20 70 31 2b 6e 3c 3d 70 32 20 7c  sert( p1+n<=p2 |
abe0: 7c 20 70 32 2b 6e 3c 3d 70 31 20 29 3b 0a 0a 20  | p2+n<=p1 );.. 
abf0: 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 31   pIn1 = &aMem[p1
ac00: 5d 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65  ];.  pOut = &aMe
ac10: 6d 5b 70 32 5d 3b 0a 20 20 64 6f 7b 0a 20 20 20  m[p2];.  do{.   
ac20: 20 61 73 73 65 72 74 28 20 70 4f 75 74 3c 3d 26   assert( pOut<=&
ac30: 61 4d 65 6d 5b 28 70 2d 3e 6e 4d 65 6d 2b 31 20  aMem[(p->nMem+1 
ac40: 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29 5d 20 29  - p->nCursor)] )
ac50: 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 49  ;.    assert( pI
ac60: 6e 31 3c 3d 26 61 4d 65 6d 5b 28 70 2d 3e 6e 4d  n1<=&aMem[(p->nM
ac70: 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f  em+1 - p->nCurso
ac80: 72 29 5d 20 29 3b 0a 20 20 20 20 61 73 73 65 72  r)] );.    asser
ac90: 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 70 49  t( memIsValid(pI
aca0: 6e 31 29 20 29 3b 0a 20 20 20 20 6d 65 6d 41 62  n1) );.    memAb
acb0: 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70  outToChange(p, p
acc0: 4f 75 74 29 3b 0a 20 20 20 20 73 71 6c 69 74 65  Out);.    sqlite
acd0: 33 56 64 62 65 4d 65 6d 4d 6f 76 65 28 70 4f 75  3VdbeMemMove(pOu
ace0: 74 2c 20 70 49 6e 31 29 3b 0a 23 69 66 64 65 66  t, pIn1);.#ifdef
acf0: 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20   SQLITE_DEBUG.  
ad00: 20 20 69 66 28 20 70 4f 75 74 2d 3e 70 53 63 6f    if( pOut->pSco
ad10: 70 79 46 72 6f 6d 3e 3d 26 61 4d 65 6d 5b 70 31  pyFrom>=&aMem[p1
ad20: 5d 20 26 26 20 70 4f 75 74 2d 3e 70 53 63 6f 70  ] && pOut->pScop
ad30: 79 46 72 6f 6d 3c 70 4f 75 74 20 29 7b 0a 20 20  yFrom<pOut ){.  
ad40: 20 20 20 20 70 4f 75 74 2d 3e 70 53 63 6f 70 79      pOut->pScopy
ad50: 46 72 6f 6d 20 2b 3d 20 70 4f 70 2d 3e 70 32 20  From += pOp->p2 
ad60: 2d 20 70 31 3b 0a 20 20 20 20 7d 0a 23 65 6e 64  - p1;.    }.#end
ad70: 69 66 0a 20 20 20 20 44 65 65 70 68 65 6d 65 72  if.    Deephemer
ad80: 61 6c 69 7a 65 28 70 4f 75 74 29 3b 0a 20 20 20  alize(pOut);.   
ad90: 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28   REGISTER_TRACE(
ada0: 70 32 2b 2b 2c 20 70 4f 75 74 29 3b 0a 20 20 20  p2++, pOut);.   
adb0: 20 70 49 6e 31 2b 2b 3b 0a 20 20 20 20 70 4f 75   pIn1++;.    pOu
adc0: 74 2b 2b 3b 0a 20 20 7d 77 68 69 6c 65 28 20 2d  t++;.  }while( -
add0: 2d 6e 20 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  -n );.  break;.}
ade0: 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6f 70  ../* Opcode: Cop
adf0: 79 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a  y P1 P2 P3 * *.*
ae00: 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32  * Synopsis: r[P2
ae10: 40 50 33 2b 31 5d 3d 72 5b 50 31 40 50 33 2b 31  @P3+1]=r[P1@P3+1
ae20: 5d 0a 2a 2a 0a 2a 2a 20 4d 61 6b 65 20 61 20 63  ].**.** Make a c
ae30: 6f 70 79 20 6f 66 20 72 65 67 69 73 74 65 72 73  opy of registers
ae40: 20 50 31 2e 2e 50 31 2b 50 33 20 69 6e 74 6f 20   P1..P1+P3 into 
ae50: 72 65 67 69 73 74 65 72 73 20 50 32 2e 2e 50 32  registers P2..P2
ae60: 2b 50 33 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20  +P3..**.** This 
ae70: 69 6e 73 74 72 75 63 74 69 6f 6e 20 6d 61 6b 65  instruction make
ae80: 73 20 61 20 64 65 65 70 20 63 6f 70 79 20 6f 66  s a deep copy of
ae90: 20 74 68 65 20 76 61 6c 75 65 2e 20 20 41 20 64   the value.  A d
aea0: 75 70 6c 69 63 61 74 65 0a 2a 2a 20 69 73 20 6d  uplicate.** is m
aeb0: 61 64 65 20 6f 66 20 61 6e 79 20 73 74 72 69 6e  ade of any strin
aec0: 67 20 6f 72 20 62 6c 6f 62 20 63 6f 6e 73 74 61  g or blob consta
aed0: 6e 74 2e 20 20 53 65 65 20 61 6c 73 6f 20 4f 50  nt.  See also OP
aee0: 5f 53 43 6f 70 79 2e 0a 2a 2f 0a 63 61 73 65 20  _SCopy..*/.case 
aef0: 4f 50 5f 43 6f 70 79 3a 20 7b 0a 20 20 69 6e 74  OP_Copy: {.  int
af00: 20 6e 3b 0a 0a 20 20 6e 20 3d 20 70 4f 70 2d 3e   n;..  n = pOp->
af10: 70 33 3b 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d  p3;.  pIn1 = &aM
af20: 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70  em[pOp->p1];.  p
af30: 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  Out = &aMem[pOp-
af40: 3e 70 32 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p2];.  assert( 
af50: 70 4f 75 74 21 3d 70 49 6e 31 20 29 3b 0a 20 20  pOut!=pIn1 );.  
af60: 77 68 69 6c 65 28 20 31 20 29 7b 0a 20 20 20 20  while( 1 ){.    
af70: 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65  memAboutToChange
af80: 28 70 2c 20 70 4f 75 74 29 3b 0a 20 20 20 20 73  (p, pOut);.    s
af90: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 68 61  qlite3VdbeMemSha
afa0: 6c 6c 6f 77 43 6f 70 79 28 70 4f 75 74 2c 20 70  llowCopy(pOut, p
afb0: 49 6e 31 2c 20 4d 45 4d 5f 45 70 68 65 6d 29 3b  In1, MEM_Ephem);
afc0: 0a 20 20 20 20 44 65 65 70 68 65 6d 65 72 61 6c  .    Deephemeral
afd0: 69 7a 65 28 70 4f 75 74 29 3b 0a 23 69 66 64 65  ize(pOut);.#ifde
afe0: 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20  f SQLITE_DEBUG. 
aff0: 20 20 20 70 4f 75 74 2d 3e 70 53 63 6f 70 79 46     pOut->pScopyF
b000: 72 6f 6d 20 3d 20 30 3b 0a 23 65 6e 64 69 66 0a  rom = 0;.#endif.
b010: 20 20 20 20 52 45 47 49 53 54 45 52 5f 54 52 41      REGISTER_TRA
b020: 43 45 28 70 4f 70 2d 3e 70 32 2b 70 4f 70 2d 3e  CE(pOp->p2+pOp->
b030: 70 33 2d 6e 2c 20 70 4f 75 74 29 3b 0a 20 20 20  p3-n, pOut);.   
b040: 20 69 66 28 20 28 6e 2d 2d 29 3d 3d 30 20 29 20   if( (n--)==0 ) 
b050: 62 72 65 61 6b 3b 0a 20 20 20 20 70 4f 75 74 2b  break;.    pOut+
b060: 2b 3b 0a 20 20 20 20 70 49 6e 31 2b 2b 3b 0a 20  +;.    pIn1++;. 
b070: 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f   }.  break;.}../
b080: 2a 20 4f 70 63 6f 64 65 3a 20 53 43 6f 70 79 20  * Opcode: SCopy 
b090: 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53  P1 P2 * * *.** S
b0a0: 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 72  ynopsis: r[P2]=r
b0b0: 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 4d 61 6b 65 20  [P1].**.** Make 
b0c0: 61 20 73 68 61 6c 6c 6f 77 20 63 6f 70 79 20 6f  a shallow copy o
b0d0: 66 20 72 65 67 69 73 74 65 72 20 50 31 20 69 6e  f register P1 in
b0e0: 74 6f 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a  to register P2..
b0f0: 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 6e 73 74 72  **.** This instr
b100: 75 63 74 69 6f 6e 20 6d 61 6b 65 73 20 61 20 73  uction makes a s
b110: 68 61 6c 6c 6f 77 20 63 6f 70 79 20 6f 66 20 74  hallow copy of t
b120: 68 65 20 76 61 6c 75 65 2e 20 20 49 66 20 74 68  he value.  If th
b130: 65 20 76 61 6c 75 65 0a 2a 2a 20 69 73 20 61 20  e value.** is a 
b140: 73 74 72 69 6e 67 20 6f 72 20 62 6c 6f 62 2c 20  string or blob, 
b150: 74 68 65 6e 20 74 68 65 20 63 6f 70 79 20 69 73  then the copy is
b160: 20 6f 6e 6c 79 20 61 20 70 6f 69 6e 74 65 72 20   only a pointer 
b170: 74 6f 20 74 68 65 0a 2a 2a 20 6f 72 69 67 69 6e  to the.** origin
b180: 61 6c 20 61 6e 64 20 68 65 6e 63 65 20 69 66 20  al and hence if 
b190: 74 68 65 20 6f 72 69 67 69 6e 61 6c 20 63 68 61  the original cha
b1a0: 6e 67 65 73 20 73 6f 20 77 69 6c 6c 20 74 68 65  nges so will the
b1b0: 20 63 6f 70 79 2e 0a 2a 2a 20 57 6f 72 73 65 2c   copy..** Worse,
b1c0: 20 69 66 20 74 68 65 20 6f 72 69 67 69 6e 61 6c   if the original
b1d0: 20 69 73 20 64 65 61 6c 6c 6f 63 61 74 65 64 2c   is deallocated,
b1e0: 20 74 68 65 20 63 6f 70 79 20 62 65 63 6f 6d 65   the copy become
b1f0: 73 20 69 6e 76 61 6c 69 64 2e 0a 2a 2a 20 54 68  s invalid..** Th
b200: 75 73 20 74 68 65 20 70 72 6f 67 72 61 6d 20 6d  us the program m
b210: 75 73 74 20 67 75 61 72 61 6e 74 65 65 20 74 68  ust guarantee th
b220: 61 74 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 20  at the original 
b230: 77 69 6c 6c 20 6e 6f 74 20 63 68 61 6e 67 65 0a  will not change.
b240: 2a 2a 20 64 75 72 69 6e 67 20 74 68 65 20 6c 69  ** during the li
b250: 66 65 74 69 6d 65 20 6f 66 20 74 68 65 20 63 6f  fetime of the co
b260: 70 79 2e 20 20 55 73 65 20 4f 50 5f 43 6f 70 79  py.  Use OP_Copy
b270: 20 74 6f 20 6d 61 6b 65 20 61 20 63 6f 6d 70 6c   to make a compl
b280: 65 74 65 0a 2a 2a 20 63 6f 70 79 2e 0a 2a 2f 0a  ete.** copy..*/.
b290: 63 61 73 65 20 4f 50 5f 53 43 6f 70 79 3a 20 7b  case OP_SCopy: {
b2a0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f              /* o
b2b0: 75 74 32 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20  ut2 */.  pIn1 = 
b2c0: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  &aMem[pOp->p1];.
b2d0: 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70    pOut = &aMem[p
b2e0: 4f 70 2d 3e 70 32 5d 3b 0a 20 20 61 73 73 65 72  Op->p2];.  asser
b2f0: 74 28 20 70 4f 75 74 21 3d 70 49 6e 31 20 29 3b  t( pOut!=pIn1 );
b300: 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65  .  sqlite3VdbeMe
b310: 6d 53 68 61 6c 6c 6f 77 43 6f 70 79 28 70 4f 75  mShallowCopy(pOu
b320: 74 2c 20 70 49 6e 31 2c 20 4d 45 4d 5f 45 70 68  t, pIn1, MEM_Eph
b330: 65 6d 29 3b 0a 23 69 66 64 65 66 20 53 51 4c 49  em);.#ifdef SQLI
b340: 54 45 5f 44 45 42 55 47 0a 20 20 70 4f 75 74 2d  TE_DEBUG.  pOut-
b350: 3e 70 53 63 6f 70 79 46 72 6f 6d 20 3d 20 70 49  >pScopyFrom = pI
b360: 6e 31 3b 0a 20 20 70 4f 75 74 2d 3e 6d 53 63 6f  n1;.  pOut->mSco
b370: 70 79 46 6c 61 67 73 20 3d 20 70 49 6e 31 2d 3e  pyFlags = pIn1->
b380: 66 6c 61 67 73 3b 0a 23 65 6e 64 69 66 0a 20 20  flags;.#endif.  
b390: 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
b3a0: 6f 64 65 3a 20 49 6e 74 43 6f 70 79 20 50 31 20  ode: IntCopy P1 
b3b0: 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f  P2 * * *.** Syno
b3c0: 70 73 69 73 3a 20 72 5b 50 32 5d 3d 72 5b 50 31  psis: r[P2]=r[P1
b3d0: 5d 0a 2a 2a 0a 2a 2a 20 54 72 61 6e 73 66 65 72  ].**.** Transfer
b3e0: 20 74 68 65 20 69 6e 74 65 67 65 72 20 76 61 6c   the integer val
b3f0: 75 65 20 68 65 6c 64 20 69 6e 20 72 65 67 69 73  ue held in regis
b400: 74 65 72 20 50 31 20 69 6e 74 6f 20 72 65 67 69  ter P1 into regi
b410: 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54  ster P2..**.** T
b420: 68 69 73 20 69 73 20 61 6e 20 6f 70 74 69 6d 69  his is an optimi
b430: 7a 65 64 20 76 65 72 73 69 6f 6e 20 6f 66 20 53  zed version of S
b440: 43 6f 70 79 20 74 68 61 74 20 77 6f 72 6b 73 20  Copy that works 
b450: 6f 6e 6c 79 20 66 6f 72 20 69 6e 74 65 67 65 72  only for integer
b460: 0a 2a 2a 20 76 61 6c 75 65 73 2e 0a 2a 2f 0a 63  .** values..*/.c
b470: 61 73 65 20 4f 50 5f 49 6e 74 43 6f 70 79 3a 20  ase OP_IntCopy: 
b480: 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  {            /* 
b490: 6f 75 74 32 20 2a 2f 0a 20 20 70 49 6e 31 20 3d  out2 */.  pIn1 =
b4a0: 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b   &aMem[pOp->p1];
b4b0: 0a 20 20 61 73 73 65 72 74 28 20 28 70 49 6e 31  .  assert( (pIn1
b4c0: 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e  ->flags & MEM_In
b4d0: 74 29 21 3d 30 20 29 3b 0a 20 20 70 4f 75 74 20  t)!=0 );.  pOut 
b4e0: 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d  = &aMem[pOp->p2]
b4f0: 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d  ;.  sqlite3VdbeM
b500: 65 6d 53 65 74 49 6e 74 36 34 28 70 4f 75 74 2c  emSetInt64(pOut,
b510: 20 70 49 6e 31 2d 3e 75 2e 69 29 3b 0a 20 20 62   pIn1->u.i);.  b
b520: 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
b530: 64 65 3a 20 52 65 73 75 6c 74 52 6f 77 20 50 31  de: ResultRow P1
b540: 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e   P2 * * *.** Syn
b550: 6f 70 73 69 73 3a 20 6f 75 74 70 75 74 3d 72 5b  opsis: output=r[
b560: 50 31 40 50 32 5d 0a 2a 2a 0a 2a 2a 20 54 68 65  P1@P2].**.** The
b570: 20 72 65 67 69 73 74 65 72 73 20 50 31 20 74 68   registers P1 th
b580: 72 6f 75 67 68 20 50 31 2b 50 32 2d 31 20 63 6f  rough P1+P2-1 co
b590: 6e 74 61 69 6e 20 61 20 73 69 6e 67 6c 65 20 72  ntain a single r
b5a0: 6f 77 20 6f 66 0a 2a 2a 20 72 65 73 75 6c 74 73  ow of.** results
b5b0: 2e 20 54 68 69 73 20 6f 70 63 6f 64 65 20 63 61  . This opcode ca
b5c0: 75 73 65 73 20 74 68 65 20 73 71 6c 69 74 65 33  uses the sqlite3
b5d0: 5f 73 74 65 70 28 29 20 63 61 6c 6c 20 74 6f 20  _step() call to 
b5e0: 74 65 72 6d 69 6e 61 74 65 0a 2a 2a 20 77 69 74  terminate.** wit
b5f0: 68 20 61 6e 20 53 51 4c 49 54 45 5f 52 4f 57 20  h an SQLITE_ROW 
b600: 72 65 74 75 72 6e 20 63 6f 64 65 20 61 6e 64 20  return code and 
b610: 69 74 20 73 65 74 73 20 75 70 20 74 68 65 20 73  it sets up the s
b620: 71 6c 69 74 65 33 5f 73 74 6d 74 0a 2a 2a 20 73  qlite3_stmt.** s
b630: 74 72 75 63 74 75 72 65 20 74 6f 20 70 72 6f 76  tructure to prov
b640: 69 64 65 20 61 63 63 65 73 73 20 74 6f 20 74 68  ide access to th
b650: 65 20 72 28 50 31 29 2e 2e 72 28 50 31 2b 50 32  e r(P1)..r(P1+P2
b660: 2d 31 29 20 76 61 6c 75 65 73 20 61 73 0a 2a 2a  -1) values as.**
b670: 20 74 68 65 20 72 65 73 75 6c 74 20 72 6f 77 2e   the result row.
b680: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65 73 75  .*/.case OP_Resu
b690: 6c 74 52 6f 77 3a 20 7b 0a 20 20 4d 65 6d 20 2a  ltRow: {.  Mem *
b6a0: 70 4d 65 6d 3b 0a 20 20 69 6e 74 20 69 3b 0a 20  pMem;.  int i;. 
b6b0: 20 61 73 73 65 72 74 28 20 70 2d 3e 6e 52 65 73   assert( p->nRes
b6c0: 43 6f 6c 75 6d 6e 3d 3d 70 4f 70 2d 3e 70 32 20  Column==pOp->p2 
b6d0: 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  );.  assert( pOp
b6e0: 2d 3e 70 31 3e 30 20 29 3b 0a 20 20 61 73 73 65  ->p1>0 );.  asse
b6f0: 72 74 28 20 70 4f 70 2d 3e 70 31 2b 70 4f 70 2d  rt( pOp->p1+pOp-
b700: 3e 70 32 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20  >p2<=(p->nMem+1 
b710: 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29 2b 31 20  - p->nCursor)+1 
b720: 29 3b 0a 0a 20 20 2f 2a 20 49 66 20 74 68 69 73  );..  /* If this
b730: 20 73 74 61 74 65 6d 65 6e 74 20 68 61 73 20 76   statement has v
b740: 69 6f 6c 61 74 65 64 20 69 6d 6d 65 64 69 61 74  iolated immediat
b750: 65 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 63 6f  e foreign key co
b760: 6e 73 74 72 61 69 6e 74 73 2c 20 64 6f 0a 20 20  nstraints, do.  
b770: 2a 2a 20 6e 6f 74 20 72 65 74 75 72 6e 20 74 68  ** not return th
b780: 65 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73  e number of rows
b790: 20 6d 6f 64 69 66 69 65 64 2e 20 41 6e 64 20 64   modified. And d
b7a0: 6f 20 6e 6f 74 20 52 45 4c 45 41 53 45 20 74 68  o not RELEASE th
b7b0: 65 20 73 74 61 74 65 6d 65 6e 74 0a 20 20 2a 2a  e statement.  **
b7c0: 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20 49 74   transaction. It
b7d0: 20 6e 65 65 64 73 20 74 6f 20 62 65 20 72 6f 6c   needs to be rol
b7e0: 6c 65 64 20 62 61 63 6b 2e 20 20 2a 2f 0a 20 20  led back.  */.  
b7f0: 69 66 28 20 53 51 4c 49 54 45 5f 4f 4b 21 3d 28  if( SQLITE_OK!=(
b800: 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  rc = sqlite3Vdbe
b810: 43 68 65 63 6b 46 6b 28 70 2c 20 30 29 29 20 29  CheckFk(p, 0)) )
b820: 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 64 62  {.    assert( db
b830: 2d 3e 66 6c 61 67 73 26 53 51 4c 49 54 45 5f 43  ->flags&SQLITE_C
b840: 6f 75 6e 74 52 6f 77 73 20 29 3b 0a 20 20 20 20  ountRows );.    
b850: 61 73 73 65 72 74 28 20 70 2d 3e 75 73 65 73 53  assert( p->usesS
b860: 74 6d 74 4a 6f 75 72 6e 61 6c 20 29 3b 0a 20 20  tmtJournal );.  
b870: 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65    goto abort_due
b880: 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 7d 0a 0a  _to_error;.  }..
b890: 20 20 2f 2a 20 49 66 20 74 68 65 20 53 51 4c 49    /* If the SQLI
b8a0: 54 45 5f 43 6f 75 6e 74 52 6f 77 73 20 66 6c 61  TE_CountRows fla
b8b0: 67 20 69 73 20 73 65 74 20 69 6e 20 73 71 6c 69  g is set in sqli
b8c0: 74 65 33 2e 66 6c 61 67 73 20 6d 61 73 6b 2c 20  te3.flags mask, 
b8d0: 74 68 65 6e 20 0a 20 20 2a 2a 20 44 4d 4c 20 73  then .  ** DML s
b8e0: 74 61 74 65 6d 65 6e 74 73 20 69 6e 76 6f 6b 65  tatements invoke
b8f0: 20 74 68 69 73 20 6f 70 63 6f 64 65 20 74 6f 20   this opcode to 
b900: 72 65 74 75 72 6e 20 74 68 65 20 6e 75 6d 62 65  return the numbe
b910: 72 20 6f 66 20 72 6f 77 73 20 0a 20 20 2a 2a 20  r of rows .  ** 
b920: 6d 6f 64 69 66 69 65 64 20 74 6f 20 74 68 65 20  modified to the 
b930: 75 73 65 72 2e 20 54 68 69 73 20 69 73 20 74 68  user. This is th
b940: 65 20 6f 6e 6c 79 20 77 61 79 20 74 68 61 74 20  e only way that 
b950: 61 20 56 4d 20 74 68 61 74 0a 20 20 2a 2a 20 6f  a VM that.  ** o
b960: 70 65 6e 73 20 61 20 73 74 61 74 65 6d 65 6e 74  pens a statement
b970: 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 6d 61 79   transaction may
b980: 20 69 6e 76 6f 6b 65 20 74 68 69 73 20 6f 70 63   invoke this opc
b990: 6f 64 65 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 49  ode..  **.  ** I
b9a0: 6e 20 63 61 73 65 20 74 68 69 73 20 69 73 20 73  n case this is s
b9b0: 75 63 68 20 61 20 73 74 61 74 65 6d 65 6e 74 2c  uch a statement,
b9c0: 20 63 6c 6f 73 65 20 61 6e 79 20 73 74 61 74 65   close any state
b9d0: 6d 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e  ment transaction
b9e0: 0a 20 20 2a 2a 20 6f 70 65 6e 65 64 20 62 79 20  .  ** opened by 
b9f0: 74 68 69 73 20 56 4d 20 62 65 66 6f 72 65 20 72  this VM before r
ba00: 65 74 75 72 6e 69 6e 67 20 63 6f 6e 74 72 6f 6c  eturning control
ba10: 20 74 6f 20 74 68 65 20 75 73 65 72 2e 20 54 68   to the user. Th
ba20: 69 73 20 69 73 20 74 6f 0a 20 20 2a 2a 20 65 6e  is is to.  ** en
ba30: 73 75 72 65 20 74 68 61 74 20 73 74 61 74 65 6d  sure that statem
ba40: 65 6e 74 2d 74 72 61 6e 73 61 63 74 69 6f 6e 73  ent-transactions
ba50: 20 61 72 65 20 61 6c 77 61 79 73 20 6e 65 73 74   are always nest
ba60: 65 64 2c 20 6e 6f 74 20 6f 76 65 72 6c 61 70 70  ed, not overlapp
ba70: 69 6e 67 2e 0a 20 20 2a 2a 20 49 66 20 74 68 65  ing..  ** If the
ba80: 20 6f 70 65 6e 20 73 74 61 74 65 6d 65 6e 74 2d   open statement-
ba90: 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 6e  transaction is n
baa0: 6f 74 20 63 6c 6f 73 65 64 20 68 65 72 65 2c 20  ot closed here, 
bab0: 74 68 65 6e 20 74 68 65 20 75 73 65 72 0a 20 20  then the user.  
bac0: 2a 2a 20 6d 61 79 20 73 74 65 70 20 61 6e 6f 74  ** may step anot
bad0: 68 65 72 20 56 4d 20 74 68 61 74 20 6f 70 65 6e  her VM that open
bae0: 73 20 69 74 73 20 6f 77 6e 20 73 74 61 74 65 6d  s its own statem
baf0: 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e  ent transaction.
bb00: 20 54 68 69 73 0a 20 20 2a 2a 20 6d 61 79 20 6c   This.  ** may l
bb10: 65 61 64 20 74 6f 20 6f 76 65 72 6c 61 70 70 69  ead to overlappi
bb20: 6e 67 20 73 74 61 74 65 6d 65 6e 74 20 74 72 61  ng statement tra
bb30: 6e 73 61 63 74 69 6f 6e 73 2e 0a 20 20 2a 2a 0a  nsactions..  **.
bb40: 20 20 2a 2a 20 54 68 65 20 73 74 61 74 65 6d 65    ** The stateme
bb50: 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69  nt transaction i
bb60: 73 20 6e 65 76 65 72 20 61 20 74 6f 70 2d 6c 65  s never a top-le
bb70: 76 65 6c 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e  vel transaction.
bb80: 20 20 48 65 6e 63 65 0a 20 20 2a 2a 20 74 68 65    Hence.  ** the
bb90: 20 52 45 4c 45 41 53 45 20 63 61 6c 6c 20 62 65   RELEASE call be
bba0: 6c 6f 77 20 63 61 6e 20 6e 65 76 65 72 20 66 61  low can never fa
bbb0: 69 6c 2e 0a 20 20 2a 2f 0a 20 20 61 73 73 65 72  il..  */.  asser
bbc0: 74 28 20 70 2d 3e 69 53 74 61 74 65 6d 65 6e 74  t( p->iStatement
bbd0: 3d 3d 30 20 7c 7c 20 64 62 2d 3e 66 6c 61 67 73  ==0 || db->flags
bbe0: 26 53 51 4c 49 54 45 5f 43 6f 75 6e 74 52 6f 77  &SQLITE_CountRow
bbf0: 73 20 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69  s );.  rc = sqli
bc00: 74 65 33 56 64 62 65 43 6c 6f 73 65 53 74 61 74  te3VdbeCloseStat
bc10: 65 6d 65 6e 74 28 70 2c 20 53 41 56 45 50 4f 49  ement(p, SAVEPOI
bc20: 4e 54 5f 52 45 4c 45 41 53 45 29 3b 0a 20 20 61  NT_RELEASE);.  a
bc30: 73 73 65 72 74 28 20 72 63 3d 3d 53 51 4c 49 54  ssert( rc==SQLIT
bc40: 45 5f 4f 4b 20 29 3b 0a 0a 20 20 2f 2a 20 49 6e  E_OK );..  /* In
bc50: 76 61 6c 69 64 61 74 65 20 61 6c 6c 20 65 70 68  validate all eph
bc60: 65 6d 65 72 61 6c 20 63 75 72 73 6f 72 20 72 6f  emeral cursor ro
bc70: 77 20 63 61 63 68 65 73 20 2a 2f 0a 20 20 70 2d  w caches */.  p-
bc80: 3e 63 61 63 68 65 43 74 72 20 3d 20 28 70 2d 3e  >cacheCtr = (p->
bc90: 63 61 63 68 65 43 74 72 20 2b 20 32 29 7c 31 3b  cacheCtr + 2)|1;
bca0: 0a 0a 20 20 2f 2a 20 4d 61 6b 65 20 73 75 72 65  ..  /* Make sure
bcb0: 20 74 68 65 20 72 65 73 75 6c 74 73 20 6f 66 20   the results of 
bcc0: 74 68 65 20 63 75 72 72 65 6e 74 20 72 6f 77 20  the current row 
bcd0: 61 72 65 20 5c 30 30 30 20 74 65 72 6d 69 6e 61  are \000 termina
bce0: 74 65 64 0a 20 20 2a 2a 20 61 6e 64 20 68 61 76  ted.  ** and hav
bcf0: 65 20 61 6e 20 61 73 73 69 67 6e 65 64 20 74 79  e an assigned ty
bd00: 70 65 2e 20 20 54 68 65 20 72 65 73 75 6c 74 73  pe.  The results
bd10: 20 61 72 65 20 64 65 2d 65 70 68 65 6d 65 72 61   are de-ephemera
bd20: 6c 69 7a 65 64 20 61 73 0a 20 20 2a 2a 20 61 20  lized as.  ** a 
bd30: 73 69 64 65 20 65 66 66 65 63 74 2e 0a 20 20 2a  side effect..  *
bd40: 2f 0a 20 20 70 4d 65 6d 20 3d 20 70 2d 3e 70 52  /.  pMem = p->pR
bd50: 65 73 75 6c 74 53 65 74 20 3d 20 26 61 4d 65 6d  esultSet = &aMem
bd60: 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 66 6f 72  [pOp->p1];.  for
bd70: 28 69 3d 30 3b 20 69 3c 70 4f 70 2d 3e 70 32 3b  (i=0; i<pOp->p2;
bd80: 20 69 2b 2b 29 7b 0a 20 20 20 20 61 73 73 65 72   i++){.    asser
bd90: 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 26 70  t( memIsValid(&p
bda0: 4d 65 6d 5b 69 5d 29 20 29 3b 0a 20 20 20 20 44  Mem[i]) );.    D
bdb0: 65 65 70 68 65 6d 65 72 61 6c 69 7a 65 28 26 70  eephemeralize(&p
bdc0: 4d 65 6d 5b 69 5d 29 3b 0a 20 20 20 20 61 73 73  Mem[i]);.    ass
bdd0: 65 72 74 28 20 28 70 4d 65 6d 5b 69 5d 2e 66 6c  ert( (pMem[i].fl
bde0: 61 67 73 20 26 20 4d 45 4d 5f 45 70 68 65 6d 29  ags & MEM_Ephem)
bdf0: 3d 3d 30 0a 20 20 20 20 20 20 20 20 20 20 20 20  ==0.            
be00: 7c 7c 20 28 70 4d 65 6d 5b 69 5d 2e 66 6c 61 67  || (pMem[i].flag
be10: 73 20 26 20 28 4d 45 4d 5f 53 74 72 7c 4d 45 4d  s & (MEM_Str|MEM
be20: 5f 42 6c 6f 62 29 29 3d 3d 30 20 29 3b 0a 20 20  _Blob))==0 );.  
be30: 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
be40: 4e 75 6c 54 65 72 6d 69 6e 61 74 65 28 26 70 4d  NulTerminate(&pM
be50: 65 6d 5b 69 5d 29 3b 0a 20 20 20 20 52 45 47 49  em[i]);.    REGI
be60: 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e  STER_TRACE(pOp->
be70: 70 31 2b 69 2c 20 26 70 4d 65 6d 5b 69 5d 29 3b  p1+i, &pMem[i]);
be80: 0a 20 20 7d 0a 20 20 69 66 28 20 64 62 2d 3e 6d  .  }.  if( db->m
be90: 61 6c 6c 6f 63 46 61 69 6c 65 64 20 29 20 67 6f  allocFailed ) go
bea0: 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 0a 20 20 69 66  to no_mem;..  if
beb0: 28 20 64 62 2d 3e 6d 54 72 61 63 65 20 26 20 53  ( db->mTrace & S
bec0: 51 4c 49 54 45 5f 54 52 41 43 45 5f 52 4f 57 20  QLITE_TRACE_ROW 
bed0: 29 7b 0a 20 20 20 20 64 62 2d 3e 78 54 72 61 63  ){.    db->xTrac
bee0: 65 28 53 51 4c 49 54 45 5f 54 52 41 43 45 5f 52  e(SQLITE_TRACE_R
bef0: 4f 57 2c 20 64 62 2d 3e 70 54 72 61 63 65 41 72  OW, db->pTraceAr
bf00: 67 2c 20 70 2c 20 30 29 3b 0a 20 20 7d 0a 0a 20  g, p, 0);.  }.. 
bf10: 20 2f 2a 20 52 65 74 75 72 6e 20 53 51 4c 49 54   /* Return SQLIT
bf20: 45 5f 52 4f 57 0a 20 20 2a 2f 0a 20 20 70 2d 3e  E_ROW.  */.  p->
bf30: 70 63 20 3d 20 28 69 6e 74 29 28 70 4f 70 20 2d  pc = (int)(pOp -
bf40: 20 61 4f 70 29 20 2b 20 31 3b 0a 20 20 72 63 20   aOp) + 1;.  rc 
bf50: 3d 20 53 51 4c 49 54 45 5f 52 4f 57 3b 0a 20 20  = SQLITE_ROW;.  
bf60: 67 6f 74 6f 20 76 64 62 65 5f 72 65 74 75 72 6e  goto vdbe_return
bf70: 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
bf80: 43 6f 6e 63 61 74 20 50 31 20 50 32 20 50 33 20  Concat P1 P2 P3 
bf90: 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  * *.** Synopsis:
bfa0: 20 72 5b 50 33 5d 3d 72 5b 50 32 5d 2b 72 5b 50   r[P3]=r[P2]+r[P
bfb0: 31 5d 0a 2a 2a 0a 2a 2a 20 41 64 64 20 74 68 65  1].**.** Add the
bfc0: 20 74 65 78 74 20 69 6e 20 72 65 67 69 73 74 65   text in registe
bfd0: 72 20 50 31 20 6f 6e 74 6f 20 74 68 65 20 65 6e  r P1 onto the en
bfe0: 64 20 6f 66 20 74 68 65 20 74 65 78 74 20 69 6e  d of the text in
bff0: 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 50 32 20  .** register P2 
c000: 61 6e 64 20 73 74 6f 72 65 20 74 68 65 20 72 65  and store the re
c010: 73 75 6c 74 20 69 6e 20 72 65 67 69 73 74 65 72  sult in register
c020: 20 50 33 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65   P3..** If eithe
c030: 72 20 74 68 65 20 50 31 20 6f 72 20 50 32 20 74  r the P1 or P2 t
c040: 65 78 74 20 61 72 65 20 4e 55 4c 4c 20 74 68 65  ext are NULL the
c050: 6e 20 73 74 6f 72 65 20 4e 55 4c 4c 20 69 6e 20  n store NULL in 
c060: 50 33 2e 0a 2a 2a 0a 2a 2a 20 20 20 50 33 20 3d  P3..**.**   P3 =
c070: 20 50 32 20 7c 7c 20 50 31 0a 2a 2a 0a 2a 2a 20   P2 || P1.**.** 
c080: 49 74 20 69 73 20 69 6c 6c 65 67 61 6c 20 66 6f  It is illegal fo
c090: 72 20 50 31 20 61 6e 64 20 50 33 20 74 6f 20 62  r P1 and P3 to b
c0a0: 65 20 74 68 65 20 73 61 6d 65 20 72 65 67 69 73  e the same regis
c0b0: 74 65 72 2e 20 53 6f 6d 65 74 69 6d 65 73 2c 0a  ter. Sometimes,.
c0c0: 2a 2a 20 69 66 20 50 33 20 69 73 20 74 68 65 20  ** if P3 is the 
c0d0: 73 61 6d 65 20 72 65 67 69 73 74 65 72 20 61 73  same register as
c0e0: 20 50 32 2c 20 74 68 65 20 69 6d 70 6c 65 6d 65   P2, the impleme
c0f0: 6e 74 61 74 69 6f 6e 20 69 73 20 61 62 6c 65 0a  ntation is able.
c100: 2a 2a 20 74 6f 20 61 76 6f 69 64 20 61 20 6d 65  ** to avoid a me
c110: 6d 63 70 79 28 29 2e 0a 2a 2f 0a 63 61 73 65 20  mcpy()..*/.case 
c120: 4f 50 5f 43 6f 6e 63 61 74 3a 20 7b 20 20 20 20  OP_Concat: {    
c130: 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61         /* same a
c140: 73 20 54 4b 5f 43 4f 4e 43 41 54 2c 20 69 6e 31  s TK_CONCAT, in1
c150: 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 20  , in2, out3 */. 
c160: 20 69 36 34 20 6e 42 79 74 65 3b 20 20 20 20 20   i64 nByte;     
c170: 20 20 20 20 20 2f 2a 20 54 6f 74 61 6c 20 73 69       /* Total si
c180: 7a 65 20 6f 66 20 74 68 65 20 6f 75 74 70 75 74  ze of the output
c190: 20 73 74 72 69 6e 67 20 6f 72 20 62 6c 6f 62 20   string or blob 
c1a0: 2a 2f 0a 20 20 75 31 36 20 66 6c 61 67 73 31 3b  */.  u16 flags1;
c1b0: 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 69 74           /* Init
c1c0: 69 61 6c 20 66 6c 61 67 73 20 66 6f 72 20 50 31  ial flags for P1
c1d0: 20 2a 2f 0a 20 20 75 31 36 20 66 6c 61 67 73 32   */.  u16 flags2
c1e0: 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 69  ;         /* Ini
c1f0: 74 69 61 6c 20 66 6c 61 67 73 20 66 6f 72 20 50  tial flags for P
c200: 32 20 2a 2f 0a 0a 20 20 70 49 6e 31 20 3d 20 26  2 */..  pIn1 = &
c210: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  aMem[pOp->p1];. 
c220: 20 70 49 6e 32 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn2 = &aMem[pO
c230: 70 2d 3e 70 32 5d 3b 0a 20 20 70 4f 75 74 20 3d  p->p2];.  pOut =
c240: 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b   &aMem[pOp->p3];
c250: 0a 20 20 74 65 73 74 63 61 73 65 28 20 70 49 6e  .  testcase( pIn
c260: 31 3d 3d 70 49 6e 32 20 29 3b 0a 20 20 74 65 73  1==pIn2 );.  tes
c270: 74 63 61 73 65 28 20 70 4f 75 74 3d 3d 70 49 6e  tcase( pOut==pIn
c280: 32 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  2 );.  assert( p
c290: 49 6e 31 21 3d 70 4f 75 74 20 29 3b 0a 20 20 66  In1!=pOut );.  f
c2a0: 6c 61 67 73 31 20 3d 20 70 49 6e 31 2d 3e 66 6c  lags1 = pIn1->fl
c2b0: 61 67 73 3b 0a 20 20 74 65 73 74 63 61 73 65 28  ags;.  testcase(
c2c0: 20 66 6c 61 67 73 31 20 26 20 4d 45 4d 5f 4e 75   flags1 & MEM_Nu
c2d0: 6c 6c 20 29 3b 0a 20 20 74 65 73 74 63 61 73 65  ll );.  testcase
c2e0: 28 20 70 49 6e 32 2d 3e 66 6c 61 67 73 20 26 20  ( pIn2->flags & 
c2f0: 4d 45 4d 5f 4e 75 6c 6c 20 29 3b 0a 20 20 69 66  MEM_Null );.  if
c300: 28 20 28 66 6c 61 67 73 31 20 7c 20 70 49 6e 32  ( (flags1 | pIn2
c310: 2d 3e 66 6c 61 67 73 29 20 26 20 4d 45 4d 5f 4e  ->flags) & MEM_N
c320: 75 6c 6c 20 29 7b 0a 20 20 20 20 73 71 6c 69 74  ull ){.    sqlit
c330: 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c  e3VdbeMemSetNull
c340: 28 70 4f 75 74 29 3b 0a 20 20 20 20 62 72 65 61  (pOut);.    brea
c350: 6b 3b 0a 20 20 7d 0a 20 20 69 66 28 20 28 66 6c  k;.  }.  if( (fl
c360: 61 67 73 31 20 26 20 28 4d 45 4d 5f 53 74 72 7c  ags1 & (MEM_Str|
c370: 4d 45 4d 5f 42 6c 6f 62 29 29 3d 3d 30 20 29 7b  MEM_Blob))==0 ){
c380: 0a 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33  .    if( sqlite3
c390: 56 64 62 65 4d 65 6d 53 74 72 69 6e 67 69 66 79  VdbeMemStringify
c3a0: 28 70 49 6e 31 2c 65 6e 63 6f 64 69 6e 67 2c 30  (pIn1,encoding,0
c3b0: 29 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b  ) ) goto no_mem;
c3c0: 0a 20 20 20 20 66 6c 61 67 73 31 20 3d 20 70 49  .    flags1 = pI
c3d0: 6e 31 2d 3e 66 6c 61 67 73 20 26 20 7e 4d 45 4d  n1->flags & ~MEM
c3e0: 5f 53 74 72 3b 0a 20 20 7d 65 6c 73 65 20 69 66  _Str;.  }else if
c3f0: 28 20 28 66 6c 61 67 73 31 20 26 20 4d 45 4d 5f  ( (flags1 & MEM_
c400: 5a 65 72 6f 29 21 3d 30 20 29 7b 0a 20 20 20 20  Zero)!=0 ){.    
c410: 69 66 28 20 73 71 6c 69 74 65 33 56 64 62 65 4d  if( sqlite3VdbeM
c420: 65 6d 45 78 70 61 6e 64 42 6c 6f 62 28 70 49 6e  emExpandBlob(pIn
c430: 31 29 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d  1) ) goto no_mem
c440: 3b 0a 20 20 20 20 66 6c 61 67 73 31 20 3d 20 70  ;.    flags1 = p
c450: 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 7e 4d 45  In1->flags & ~ME
c460: 4d 5f 53 74 72 3b 0a 20 20 7d 0a 20 20 66 6c 61  M_Str;.  }.  fla
c470: 67 73 32 20 3d 20 70 49 6e 32 2d 3e 66 6c 61 67  gs2 = pIn2->flag
c480: 73 3b 0a 20 20 69 66 28 20 28 66 6c 61 67 73 32  s;.  if( (flags2
c490: 20 26 20 28 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f   & (MEM_Str|MEM_
c4a0: 42 6c 6f 62 29 29 3d 3d 30 20 29 7b 0a 20 20 20  Blob))==0 ){.   
c4b0: 20 69 66 28 20 73 71 6c 69 74 65 33 56 64 62 65   if( sqlite3Vdbe
c4c0: 4d 65 6d 53 74 72 69 6e 67 69 66 79 28 70 49 6e  MemStringify(pIn
c4d0: 32 2c 65 6e 63 6f 64 69 6e 67 2c 30 29 20 29 20  2,encoding,0) ) 
c4e0: 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 20  goto no_mem;.   
c4f0: 20 66 6c 61 67 73 32 20 3d 20 70 49 6e 32 2d 3e   flags2 = pIn2->
c500: 66 6c 61 67 73 20 26 20 7e 4d 45 4d 5f 53 74 72  flags & ~MEM_Str
c510: 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 28 66  ;.  }else if( (f
c520: 6c 61 67 73 32 20 26 20 4d 45 4d 5f 5a 65 72 6f  lags2 & MEM_Zero
c530: 29 21 3d 30 20 29 7b 0a 20 20 20 20 69 66 28 20  )!=0 ){.    if( 
c540: 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 45 78  sqlite3VdbeMemEx
c550: 70 61 6e 64 42 6c 6f 62 28 70 49 6e 32 29 20 29  pandBlob(pIn2) )
c560: 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20   goto no_mem;.  
c570: 20 20 66 6c 61 67 73 32 20 3d 20 70 49 6e 32 2d    flags2 = pIn2-
c580: 3e 66 6c 61 67 73 20 26 20 7e 4d 45 4d 5f 53 74  >flags & ~MEM_St
c590: 72 3b 0a 20 20 7d 0a 20 20 6e 42 79 74 65 20 3d  r;.  }.  nByte =
c5a0: 20 70 49 6e 31 2d 3e 6e 20 2b 20 70 49 6e 32 2d   pIn1->n + pIn2-
c5b0: 3e 6e 3b 0a 20 20 69 66 28 20 6e 42 79 74 65 3e  >n;.  if( nByte>
c5c0: 64 62 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c 49 54  db->aLimit[SQLIT
c5d0: 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54 48 5d 20  E_LIMIT_LENGTH] 
c5e0: 29 7b 0a 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f  ){.    goto too_
c5f0: 62 69 67 3b 0a 20 20 7d 0a 20 20 69 66 28 20 73  big;.  }.  if( s
c600: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 47 72 6f  qlite3VdbeMemGro
c610: 77 28 70 4f 75 74 2c 20 28 69 6e 74 29 6e 42 79  w(pOut, (int)nBy
c620: 74 65 2b 33 2c 20 70 4f 75 74 3d 3d 70 49 6e 32  te+3, pOut==pIn2
c630: 29 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 6e 6f  ) ){.    goto no
c640: 5f 6d 65 6d 3b 0a 20 20 7d 0a 20 20 4d 65 6d 53  _mem;.  }.  MemS
c650: 65 74 54 79 70 65 46 6c 61 67 28 70 4f 75 74 2c  etTypeFlag(pOut,
c660: 20 4d 45 4d 5f 53 74 72 29 3b 0a 20 20 69 66 28   MEM_Str);.  if(
c670: 20 70 4f 75 74 21 3d 70 49 6e 32 20 29 7b 0a 20   pOut!=pIn2 ){. 
c680: 20 20 20 6d 65 6d 63 70 79 28 70 4f 75 74 2d 3e     memcpy(pOut->
c690: 7a 2c 20 70 49 6e 32 2d 3e 7a 2c 20 70 49 6e 32  z, pIn2->z, pIn2
c6a0: 2d 3e 6e 29 3b 0a 20 20 20 20 61 73 73 65 72 74  ->n);.    assert
c6b0: 28 20 28 70 49 6e 32 2d 3e 66 6c 61 67 73 20 26  ( (pIn2->flags &
c6c0: 20 4d 45 4d 5f 44 79 6e 29 20 3d 3d 20 28 66 6c   MEM_Dyn) == (fl
c6d0: 61 67 73 32 20 26 20 4d 45 4d 5f 44 79 6e 29 20  ags2 & MEM_Dyn) 
c6e0: 29 3b 0a 20 20 20 20 70 49 6e 32 2d 3e 66 6c 61  );.    pIn2->fla
c6f0: 67 73 20 3d 20 66 6c 61 67 73 32 3b 0a 20 20 7d  gs = flags2;.  }
c700: 0a 20 20 6d 65 6d 63 70 79 28 26 70 4f 75 74 2d  .  memcpy(&pOut-
c710: 3e 7a 5b 70 49 6e 32 2d 3e 6e 5d 2c 20 70 49 6e  >z[pIn2->n], pIn
c720: 31 2d 3e 7a 2c 20 70 49 6e 31 2d 3e 6e 29 3b 0a  1->z, pIn1->n);.
c730: 20 20 61 73 73 65 72 74 28 20 28 70 49 6e 31 2d    assert( (pIn1-
c740: 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 44 79 6e  >flags & MEM_Dyn
c750: 29 20 3d 3d 20 28 66 6c 61 67 73 31 20 26 20 4d  ) == (flags1 & M
c760: 45 4d 5f 44 79 6e 29 20 29 3b 0a 20 20 70 49 6e  EM_Dyn) );.  pIn
c770: 31 2d 3e 66 6c 61 67 73 20 3d 20 66 6c 61 67 73  1->flags = flags
c780: 31 3b 0a 20 20 70 4f 75 74 2d 3e 7a 5b 6e 42 79  1;.  pOut->z[nBy
c790: 74 65 5d 3d 30 3b 0a 20 20 70 4f 75 74 2d 3e 7a  te]=0;.  pOut->z
c7a0: 5b 6e 42 79 74 65 2b 31 5d 20 3d 20 30 3b 0a 20  [nByte+1] = 0;. 
c7b0: 20 70 4f 75 74 2d 3e 7a 5b 6e 42 79 74 65 2b 32   pOut->z[nByte+2
c7c0: 5d 20 3d 20 30 3b 0a 20 20 70 4f 75 74 2d 3e 66  ] = 0;.  pOut->f
c7d0: 6c 61 67 73 20 7c 3d 20 4d 45 4d 5f 54 65 72 6d  lags |= MEM_Term
c7e0: 3b 0a 20 20 70 4f 75 74 2d 3e 6e 20 3d 20 28 69  ;.  pOut->n = (i
c7f0: 6e 74 29 6e 42 79 74 65 3b 0a 20 20 70 4f 75 74  nt)nByte;.  pOut
c800: 2d 3e 65 6e 63 20 3d 20 65 6e 63 6f 64 69 6e 67  ->enc = encoding
c810: 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42  ;.  UPDATE_MAX_B
c820: 4c 4f 42 53 49 5a 45 28 70 4f 75 74 29 3b 0a 20  LOBSIZE(pOut);. 
c830: 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
c840: 63 6f 64 65 3a 20 41 64 64 20 50 31 20 50 32 20  code: Add P1 P2 
c850: 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73  P3 * *.** Synops
c860: 69 73 3a 20 72 5b 50 33 5d 3d 72 5b 50 31 5d 2b  is: r[P3]=r[P1]+
c870: 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20 41 64 64 20  r[P2].**.** Add 
c880: 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67  the value in reg
c890: 69 73 74 65 72 20 50 31 20 74 6f 20 74 68 65 20  ister P1 to the 
c8a0: 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65  value in registe
c8b0: 72 20 50 32 0a 2a 2a 20 61 6e 64 20 73 74 6f 72  r P2.** and stor
c8c0: 65 20 74 68 65 20 72 65 73 75 6c 74 20 69 6e 20  e the result in 
c8d0: 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a 20  register P3..** 
c8e0: 49 66 20 65 69 74 68 65 72 20 69 6e 70 75 74 20  If either input 
c8f0: 69 73 20 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73  is NULL, the res
c900: 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a  ult is NULL..*/.
c910: 2f 2a 20 4f 70 63 6f 64 65 3a 20 4d 75 6c 74 69  /* Opcode: Multi
c920: 70 6c 79 20 50 31 20 50 32 20 50 33 20 2a 20 2a  ply P1 P2 P3 * *
c930: 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b  .** Synopsis: r[
c940: 50 33 5d 3d 72 5b 50 31 5d 2a 72 5b 50 32 5d 0a  P3]=r[P1]*r[P2].
c950: 2a 2a 0a 2a 2a 0a 2a 2a 20 4d 75 6c 74 69 70 6c  **.**.** Multipl
c960: 79 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72  y the value in r
c970: 65 67 69 73 74 65 72 20 50 31 20 62 79 20 74 68  egister P1 by th
c980: 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73  e value in regis
c990: 74 65 72 20 50 32 0a 2a 2a 20 61 6e 64 20 73 74  ter P2.** and st
c9a0: 6f 72 65 20 74 68 65 20 72 65 73 75 6c 74 20 69  ore the result i
c9b0: 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a  n register P3..*
c9c0: 2a 20 49 66 20 65 69 74 68 65 72 20 69 6e 70 75  * If either inpu
c9d0: 74 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65 20 72  t is NULL, the r
c9e0: 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a  esult is NULL..*
c9f0: 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 75 62  /./* Opcode: Sub
ca00: 74 72 61 63 74 20 50 31 20 50 32 20 50 33 20 2a  tract P1 P2 P3 *
ca10: 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
ca20: 72 5b 50 33 5d 3d 72 5b 50 32 5d 2d 72 5b 50 31  r[P3]=r[P2]-r[P1
ca30: 5d 0a 2a 2a 0a 2a 2a 20 53 75 62 74 72 61 63 74  ].**.** Subtract
ca40: 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65   the value in re
ca50: 67 69 73 74 65 72 20 50 31 20 66 72 6f 6d 20 74  gister P1 from t
ca60: 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69  he value in regi
ca70: 73 74 65 72 20 50 32 0a 2a 2a 20 61 6e 64 20 73  ster P2.** and s
ca80: 74 6f 72 65 20 74 68 65 20 72 65 73 75 6c 74 20  tore the result 
ca90: 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a  in register P3..
caa0: 2a 2a 20 49 66 20 65 69 74 68 65 72 20 69 6e 70  ** If either inp
cab0: 75 74 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65 20  ut is NULL, the 
cac0: 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a  result is NULL..
cad0: 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 44 69  */./* Opcode: Di
cae0: 76 69 64 65 20 50 31 20 50 32 20 50 33 20 2a 20  vide P1 P2 P3 * 
caf0: 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72  *.** Synopsis: r
cb00: 5b 50 33 5d 3d 72 5b 50 32 5d 2f 72 5b 50 31 5d  [P3]=r[P2]/r[P1]
cb10: 0a 2a 2a 0a 2a 2a 20 44 69 76 69 64 65 20 74 68  .**.** Divide th
cb20: 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73  e value in regis
cb30: 74 65 72 20 50 31 20 62 79 20 74 68 65 20 76 61  ter P1 by the va
cb40: 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  lue in register 
cb50: 50 32 0a 2a 2a 20 61 6e 64 20 73 74 6f 72 65 20  P2.** and store 
cb60: 74 68 65 20 72 65 73 75 6c 74 20 69 6e 20 72 65  the result in re
cb70: 67 69 73 74 65 72 20 50 33 20 28 50 33 3d 50 32  gister P3 (P3=P2
cb80: 2f 50 31 29 2e 20 49 66 20 74 68 65 20 76 61 6c  /P1). If the val
cb90: 75 65 20 69 6e 20 0a 2a 2a 20 72 65 67 69 73 74  ue in .** regist
cba0: 65 72 20 50 31 20 69 73 20 7a 65 72 6f 2c 20 74  er P1 is zero, t
cbb0: 68 65 6e 20 74 68 65 20 72 65 73 75 6c 74 20 69  hen the result i
cbc0: 73 20 4e 55 4c 4c 2e 20 49 66 20 65 69 74 68 65  s NULL. If eithe
cbd0: 72 20 69 6e 70 75 74 20 69 73 20 0a 2a 2a 20 4e  r input is .** N
cbe0: 55 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c 74 20  ULL, the result 
cbf0: 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f  is NULL..*/./* O
cc00: 70 63 6f 64 65 3a 20 52 65 6d 61 69 6e 64 65 72  pcode: Remainder
cc10: 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a   P1 P2 P3 * *.**
cc20: 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 33 5d   Synopsis: r[P3]
cc30: 3d 72 5b 50 32 5d 25 72 5b 50 31 5d 0a 2a 2a 0a  =r[P2]%r[P1].**.
cc40: 2a 2a 20 43 6f 6d 70 75 74 65 20 74 68 65 20 72  ** Compute the r
cc50: 65 6d 61 69 6e 64 65 72 20 61 66 74 65 72 20 69  emainder after i
cc60: 6e 74 65 67 65 72 20 72 65 67 69 73 74 65 72 20  nteger register 
cc70: 50 32 20 69 73 20 64 69 76 69 64 65 64 20 62 79  P2 is divided by
cc80: 20 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 50 31   .** register P1
cc90: 20 61 6e 64 20 73 74 6f 72 65 20 74 68 65 20 72   and store the r
cca0: 65 73 75 6c 74 20 69 6e 20 72 65 67 69 73 74 65  esult in registe
ccb0: 72 20 50 33 2e 20 0a 2a 2a 20 49 66 20 74 68 65  r P3. .** If the
ccc0: 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
ccd0: 65 72 20 50 31 20 69 73 20 7a 65 72 6f 20 74 68  er P1 is zero th
cce0: 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c  e result is NULL
ccf0: 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20 6f  ..** If either o
cd00: 70 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c 2c 20  perand is NULL, 
cd10: 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55  the result is NU
cd20: 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 41  LL..*/.case OP_A
cd30: 64 64 3a 20 20 20 20 20 20 20 20 20 20 20 20 20  dd:             
cd40: 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73        /* same as
cd50: 20 54 4b 5f 50 4c 55 53 2c 20 69 6e 31 2c 20 69   TK_PLUS, in1, i
cd60: 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65  n2, out3 */.case
cd70: 20 4f 50 5f 53 75 62 74 72 61 63 74 3a 20 20 20   OP_Subtract:   
cd80: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61             /* sa
cd90: 6d 65 20 61 73 20 54 4b 5f 4d 49 4e 55 53 2c 20  me as TK_MINUS, 
cda0: 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a  in1, in2, out3 *
cdb0: 2f 0a 63 61 73 65 20 4f 50 5f 4d 75 6c 74 69 70  /.case OP_Multip
cdc0: 6c 79 3a 20 20 20 20 20 20 20 20 20 20 20 20 20  ly:             
cdd0: 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 53   /* same as TK_S
cde0: 54 41 52 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f  TAR, in1, in2, o
cdf0: 75 74 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 44  ut3 */.case OP_D
ce00: 69 76 69 64 65 3a 20 20 20 20 20 20 20 20 20 20  ivide:          
ce10: 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73        /* same as
ce20: 20 54 4b 5f 53 4c 41 53 48 2c 20 69 6e 31 2c 20   TK_SLASH, in1, 
ce30: 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 63 61 73  in2, out3 */.cas
ce40: 65 20 4f 50 5f 52 65 6d 61 69 6e 64 65 72 3a 20  e OP_Remainder: 
ce50: 7b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73  {           /* s
ce60: 61 6d 65 20 61 73 20 54 4b 5f 52 45 4d 2c 20 69  ame as TK_REM, i
ce70: 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f  n1, in2, out3 */
ce80: 0a 20 20 75 31 36 20 66 6c 61 67 73 3b 20 20 20  .  u16 flags;   
ce90: 20 20 20 2f 2a 20 43 6f 6d 62 69 6e 65 64 20 4d     /* Combined M
cea0: 45 4d 5f 2a 20 66 6c 61 67 73 20 66 72 6f 6d 20  EM_* flags from 
ceb0: 62 6f 74 68 20 69 6e 70 75 74 73 20 2a 2f 0a 20  both inputs */. 
cec0: 20 75 31 36 20 74 79 70 65 31 3b 20 20 20 20 20   u16 type1;     
ced0: 20 2f 2a 20 4e 75 6d 65 72 69 63 20 74 79 70 65   /* Numeric type
cee0: 20 6f 66 20 6c 65 66 74 20 6f 70 65 72 61 6e 64   of left operand
cef0: 20 2a 2f 0a 20 20 75 31 36 20 74 79 70 65 32 3b   */.  u16 type2;
cf00: 20 20 20 20 20 20 2f 2a 20 4e 75 6d 65 72 69 63        /* Numeric
cf10: 20 74 79 70 65 20 6f 66 20 72 69 67 68 74 20 6f   type of right o
cf20: 70 65 72 61 6e 64 20 2a 2f 0a 20 20 69 36 34 20  perand */.  i64 
cf30: 69 41 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 49  iA;         /* I
cf40: 6e 74 65 67 65 72 20 76 61 6c 75 65 20 6f 66 20  nteger value of 
cf50: 6c 65 66 74 20 6f 70 65 72 61 6e 64 20 2a 2f 0a  left operand */.
cf60: 20 20 69 36 34 20 69 42 3b 20 20 20 20 20 20 20    i64 iB;       
cf70: 20 20 2f 2a 20 49 6e 74 65 67 65 72 20 76 61 6c    /* Integer val
cf80: 75 65 20 6f 66 20 72 69 67 68 74 20 6f 70 65 72  ue of right oper
cf90: 61 6e 64 20 2a 2f 0a 20 20 64 6f 75 62 6c 65 20  and */.  double 
cfa0: 72 41 3b 20 20 20 20 20 20 2f 2a 20 52 65 61 6c  rA;      /* Real
cfb0: 20 76 61 6c 75 65 20 6f 66 20 6c 65 66 74 20 6f   value of left o
cfc0: 70 65 72 61 6e 64 20 2a 2f 0a 20 20 64 6f 75 62  perand */.  doub
cfd0: 6c 65 20 72 42 3b 20 20 20 20 20 20 2f 2a 20 52  le rB;      /* R
cfe0: 65 61 6c 20 76 61 6c 75 65 20 6f 66 20 72 69 67  eal value of rig
cff0: 68 74 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 0a 20  ht operand */.. 
d000: 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn1 = &aMem[pO
d010: 70 2d 3e 70 31 5d 3b 0a 20 20 74 79 70 65 31 20  p->p1];.  type1 
d020: 3d 20 6e 75 6d 65 72 69 63 54 79 70 65 28 70 49  = numericType(pI
d030: 6e 31 29 3b 0a 20 20 70 49 6e 32 20 3d 20 26 61  n1);.  pIn2 = &a
d040: 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20  Mem[pOp->p2];.  
d050: 74 79 70 65 32 20 3d 20 6e 75 6d 65 72 69 63 54  type2 = numericT
d060: 79 70 65 28 70 49 6e 32 29 3b 0a 20 20 70 4f 75  ype(pIn2);.  pOu
d070: 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  t = &aMem[pOp->p
d080: 33 5d 3b 0a 20 20 66 6c 61 67 73 20 3d 20 70 49  3];.  flags = pI
d090: 6e 31 2d 3e 66 6c 61 67 73 20 7c 20 70 49 6e 32  n1->flags | pIn2
d0a0: 2d 3e 66 6c 61 67 73 3b 0a 20 20 69 66 28 20 28  ->flags;.  if( (
d0b0: 74 79 70 65 31 20 26 20 74 79 70 65 32 20 26 20  type1 & type2 & 
d0c0: 4d 45 4d 5f 49 6e 74 29 21 3d 30 20 29 7b 0a 20  MEM_Int)!=0 ){. 
d0d0: 20 20 20 69 41 20 3d 20 70 49 6e 31 2d 3e 75 2e     iA = pIn1->u.
d0e0: 69 3b 0a 20 20 20 20 69 42 20 3d 20 70 49 6e 32  i;.    iB = pIn2
d0f0: 2d 3e 75 2e 69 3b 0a 20 20 20 20 73 77 69 74 63  ->u.i;.    switc
d100: 68 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 20 29  h( pOp->opcode )
d110: 7b 0a 20 20 20 20 20 20 63 61 73 65 20 4f 50 5f  {.      case OP_
d120: 41 64 64 3a 20 20 20 20 20 20 20 69 66 28 20 73  Add:       if( s
d130: 71 6c 69 74 65 33 41 64 64 49 6e 74 36 34 28 26  qlite3AddInt64(&
d140: 69 42 2c 69 41 29 20 29 20 67 6f 74 6f 20 66 70  iB,iA) ) goto fp
d150: 5f 6d 61 74 68 3b 20 20 62 72 65 61 6b 3b 0a 20  _math;  break;. 
d160: 20 20 20 20 20 63 61 73 65 20 4f 50 5f 53 75 62       case OP_Sub
d170: 74 72 61 63 74 3a 20 20 69 66 28 20 73 71 6c 69  tract:  if( sqli
d180: 74 65 33 53 75 62 49 6e 74 36 34 28 26 69 42 2c  te3SubInt64(&iB,
d190: 69 41 29 20 29 20 67 6f 74 6f 20 66 70 5f 6d 61  iA) ) goto fp_ma
d1a0: 74 68 3b 20 20 62 72 65 61 6b 3b 0a 20 20 20 20  th;  break;.    
d1b0: 20 20 63 61 73 65 20 4f 50 5f 4d 75 6c 74 69 70    case OP_Multip
d1c0: 6c 79 3a 20 20 69 66 28 20 73 71 6c 69 74 65 33  ly:  if( sqlite3
d1d0: 4d 75 6c 49 6e 74 36 34 28 26 69 42 2c 69 41 29  MulInt64(&iB,iA)
d1e0: 20 29 20 67 6f 74 6f 20 66 70 5f 6d 61 74 68 3b   ) goto fp_math;
d1f0: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 63    break;.      c
d200: 61 73 65 20 4f 50 5f 44 69 76 69 64 65 3a 20 7b  ase OP_Divide: {
d210: 0a 20 20 20 20 20 20 20 20 69 66 28 20 69 41 3d  .        if( iA=
d220: 3d 30 20 29 20 67 6f 74 6f 20 61 72 69 74 68 6d  =0 ) goto arithm
d230: 65 74 69 63 5f 72 65 73 75 6c 74 5f 69 73 5f 6e  etic_result_is_n
d240: 75 6c 6c 3b 0a 20 20 20 20 20 20 20 20 69 66 28  ull;.        if(
d250: 20 69 41 3d 3d 2d 31 20 26 26 20 69 42 3d 3d 53   iA==-1 && iB==S
d260: 4d 41 4c 4c 45 53 54 5f 49 4e 54 36 34 20 29 20  MALLEST_INT64 ) 
d270: 67 6f 74 6f 20 66 70 5f 6d 61 74 68 3b 0a 20 20  goto fp_math;.  
d280: 20 20 20 20 20 20 69 42 20 2f 3d 20 69 41 3b 0a        iB /= iA;.
d290: 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20          break;. 
d2a0: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 64 65 66       }.      def
d2b0: 61 75 6c 74 3a 20 7b 0a 20 20 20 20 20 20 20 20  ault: {.        
d2c0: 69 66 28 20 69 41 3d 3d 30 20 29 20 67 6f 74 6f  if( iA==0 ) goto
d2d0: 20 61 72 69 74 68 6d 65 74 69 63 5f 72 65 73 75   arithmetic_resu
d2e0: 6c 74 5f 69 73 5f 6e 75 6c 6c 3b 0a 20 20 20 20  lt_is_null;.    
d2f0: 20 20 20 20 69 66 28 20 69 41 3d 3d 2d 31 20 29      if( iA==-1 )
d300: 20 69 41 20 3d 20 31 3b 0a 20 20 20 20 20 20 20   iA = 1;.       
d310: 20 69 42 20 25 3d 20 69 41 3b 0a 20 20 20 20 20   iB %= iA;.     
d320: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20     break;.      
d330: 7d 0a 20 20 20 20 7d 0a 20 20 20 20 70 4f 75 74  }.    }.    pOut
d340: 2d 3e 75 2e 69 20 3d 20 69 42 3b 0a 20 20 20 20  ->u.i = iB;.    
d350: 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70  MemSetTypeFlag(p
d360: 4f 75 74 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a 20  Out, MEM_Int);. 
d370: 20 7d 65 6c 73 65 20 69 66 28 20 28 66 6c 61 67   }else if( (flag
d380: 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29 21 3d 30  s & MEM_Null)!=0
d390: 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 61 72 69   ){.    goto ari
d3a0: 74 68 6d 65 74 69 63 5f 72 65 73 75 6c 74 5f 69  thmetic_result_i
d3b0: 73 5f 6e 75 6c 6c 3b 0a 20 20 7d 65 6c 73 65 7b  s_null;.  }else{
d3c0: 0a 66 70 5f 6d 61 74 68 3a 0a 20 20 20 20 72 41  .fp_math:.    rA
d3d0: 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 52 65   = sqlite3VdbeRe
d3e0: 61 6c 56 61 6c 75 65 28 70 49 6e 31 29 3b 0a 20  alValue(pIn1);. 
d3f0: 20 20 20 72 42 20 3d 20 73 71 6c 69 74 65 33 56     rB = sqlite3V
d400: 64 62 65 52 65 61 6c 56 61 6c 75 65 28 70 49 6e  dbeRealValue(pIn
d410: 32 29 3b 0a 20 20 20 20 73 77 69 74 63 68 28 20  2);.    switch( 
d420: 70 4f 70 2d 3e 6f 70 63 6f 64 65 20 29 7b 0a 20  pOp->opcode ){. 
d430: 20 20 20 20 20 63 61 73 65 20 4f 50 5f 41 64 64       case OP_Add
d440: 3a 20 20 20 20 20 20 20 20 20 72 42 20 2b 3d 20  :         rB += 
d450: 72 41 3b 20 20 20 20 20 20 20 62 72 65 61 6b 3b  rA;       break;
d460: 0a 20 20 20 20 20 20 63 61 73 65 20 4f 50 5f 53  .      case OP_S
d470: 75 62 74 72 61 63 74 3a 20 20 20 20 72 42 20 2d  ubtract:    rB -
d480: 3d 20 72 41 3b 20 20 20 20 20 20 20 62 72 65 61  = rA;       brea
d490: 6b 3b 0a 20 20 20 20 20 20 63 61 73 65 20 4f 50  k;.      case OP
d4a0: 5f 4d 75 6c 74 69 70 6c 79 3a 20 20 20 20 72 42  _Multiply:    rB
d4b0: 20 2a 3d 20 72 41 3b 20 20 20 20 20 20 20 62 72   *= rA;       br
d4c0: 65 61 6b 3b 0a 20 20 20 20 20 20 63 61 73 65 20  eak;.      case 
d4d0: 4f 50 5f 44 69 76 69 64 65 3a 20 7b 0a 20 20 20  OP_Divide: {.   
d4e0: 20 20 20 20 20 2f 2a 20 28 64 6f 75 62 6c 65 29       /* (double)
d4f0: 30 20 49 6e 20 63 61 73 65 20 6f 66 20 53 51 4c  0 In case of SQL
d500: 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e  ITE_OMIT_FLOATIN
d510: 47 5f 50 4f 49 4e 54 2e 2e 2e 20 2a 2f 0a 20 20  G_POINT... */.  
d520: 20 20 20 20 20 20 69 66 28 20 72 41 3d 3d 28 64        if( rA==(d
d530: 6f 75 62 6c 65 29 30 20 29 20 67 6f 74 6f 20 61  ouble)0 ) goto a
d540: 72 69 74 68 6d 65 74 69 63 5f 72 65 73 75 6c 74  rithmetic_result
d550: 5f 69 73 5f 6e 75 6c 6c 3b 0a 20 20 20 20 20 20  _is_null;.      
d560: 20 20 72 42 20 2f 3d 20 72 41 3b 0a 20 20 20 20    rB /= rA;.    
d570: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20      break;.     
d580: 20 7d 0a 20 20 20 20 20 20 64 65 66 61 75 6c 74   }.      default
d590: 3a 20 7b 0a 20 20 20 20 20 20 20 20 69 41 20 3d  : {.        iA =
d5a0: 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74 56   sqlite3VdbeIntV
d5b0: 61 6c 75 65 28 70 49 6e 31 29 3b 0a 20 20 20 20  alue(pIn1);.    
d5c0: 20 20 20 20 69 42 20 3d 20 73 71 6c 69 74 65 33      iB = sqlite3
d5d0: 56 64 62 65 49 6e 74 56 61 6c 75 65 28 70 49 6e  VdbeIntValue(pIn
d5e0: 32 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20  2);.        if( 
d5f0: 69 41 3d 3d 30 20 29 20 67 6f 74 6f 20 61 72 69  iA==0 ) goto ari
d600: 74 68 6d 65 74 69 63 5f 72 65 73 75 6c 74 5f 69  thmetic_result_i
d610: 73 5f 6e 75 6c 6c 3b 0a 20 20 20 20 20 20 20 20  s_null;.        
d620: 69 66 28 20 69 41 3d 3d 2d 31 20 29 20 69 41 20  if( iA==-1 ) iA 
d630: 3d 20 31 3b 0a 20 20 20 20 20 20 20 20 72 42 20  = 1;.        rB 
d640: 3d 20 28 64 6f 75 62 6c 65 29 28 69 42 20 25 20  = (double)(iB % 
d650: 69 41 29 3b 0a 20 20 20 20 20 20 20 20 62 72 65  iA);.        bre
d660: 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  ak;.      }.    
d670: 7d 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  }.#ifdef SQLITE_
d680: 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f  OMIT_FLOATING_PO
d690: 49 4e 54 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e  INT.    pOut->u.
d6a0: 69 20 3d 20 72 42 3b 0a 20 20 20 20 4d 65 6d 53  i = rB;.    MemS
d6b0: 65 74 54 79 70 65 46 6c 61 67 28 70 4f 75 74 2c  etTypeFlag(pOut,
d6c0: 20 4d 45 4d 5f 49 6e 74 29 3b 0a 23 65 6c 73 65   MEM_Int);.#else
d6d0: 0a 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33  .    if( sqlite3
d6e0: 49 73 4e 61 4e 28 72 42 29 20 29 7b 0a 20 20 20  IsNaN(rB) ){.   
d6f0: 20 20 20 67 6f 74 6f 20 61 72 69 74 68 6d 65 74     goto arithmet
d700: 69 63 5f 72 65 73 75 6c 74 5f 69 73 5f 6e 75 6c  ic_result_is_nul
d710: 6c 3b 0a 20 20 20 20 7d 0a 20 20 20 20 70 4f 75  l;.    }.    pOu
d720: 74 2d 3e 75 2e 72 20 3d 20 72 42 3b 0a 20 20 20  t->u.r = rB;.   
d730: 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28   MemSetTypeFlag(
d740: 70 4f 75 74 2c 20 4d 45 4d 5f 52 65 61 6c 29 3b  pOut, MEM_Real);
d750: 0a 23 65 6e 64 69 66 0a 20 20 7d 0a 20 20 62 72  .#endif.  }.  br
d760: 65 61 6b 3b 0a 0a 61 72 69 74 68 6d 65 74 69 63  eak;..arithmetic
d770: 5f 72 65 73 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3a  _result_is_null:
d780: 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65  .  sqlite3VdbeMe
d790: 6d 53 65 74 4e 75 6c 6c 28 70 4f 75 74 29 3b 0a  mSetNull(pOut);.
d7a0: 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
d7b0: 70 63 6f 64 65 3a 20 43 6f 6c 6c 53 65 71 20 50  pcode: CollSeq P
d7c0: 31 20 2a 20 2a 20 50 34 0a 2a 2a 0a 2a 2a 20 50  1 * * P4.**.** P
d7d0: 34 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74  4 is a pointer t
d7e0: 6f 20 61 20 43 6f 6c 6c 53 65 71 20 6f 62 6a 65  o a CollSeq obje
d7f0: 63 74 2e 20 49 66 20 74 68 65 20 6e 65 78 74 20  ct. If the next 
d800: 63 61 6c 6c 20 74 6f 20 61 20 75 73 65 72 20 66  call to a user f
d810: 75 6e 63 74 69 6f 6e 0a 2a 2a 20 6f 72 20 61 67  unction.** or ag
d820: 67 72 65 67 61 74 65 20 63 61 6c 6c 73 20 73 71  gregate calls sq
d830: 6c 69 74 65 33 47 65 74 46 75 6e 63 43 6f 6c 6c  lite3GetFuncColl
d840: 53 65 71 28 29 2c 20 74 68 69 73 20 63 6f 6c 6c  Seq(), this coll
d850: 61 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 20 77  ation sequence w
d860: 69 6c 6c 0a 2a 2a 20 62 65 20 72 65 74 75 72 6e  ill.** be return
d870: 65 64 2e 20 54 68 69 73 20 69 73 20 75 73 65 64  ed. This is used
d880: 20 62 79 20 74 68 65 20 62 75 69 6c 74 2d 69 6e   by the built-in
d890: 20 6d 69 6e 28 29 2c 20 6d 61 78 28 29 20 61 6e   min(), max() an
d8a0: 64 20 6e 75 6c 6c 69 66 28 29 0a 2a 2a 20 66 75  d nullif().** fu
d8b0: 6e 63 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20 49  nctions..**.** I
d8c0: 66 20 50 31 20 69 73 20 6e 6f 74 20 7a 65 72 6f  f P1 is not zero
d8d0: 2c 20 74 68 65 6e 20 69 74 20 69 73 20 61 20 72  , then it is a r
d8e0: 65 67 69 73 74 65 72 20 74 68 61 74 20 61 20 73  egister that a s
d8f0: 75 62 73 65 71 75 65 6e 74 20 6d 69 6e 28 29 20  ubsequent min() 
d900: 6f 72 0a 2a 2a 20 6d 61 78 28 29 20 61 67 67 72  or.** max() aggr
d910: 65 67 61 74 65 20 77 69 6c 6c 20 73 65 74 20 74  egate will set t
d920: 6f 20 31 20 69 66 20 74 68 65 20 63 75 72 72 65  o 1 if the curre
d930: 6e 74 20 72 6f 77 20 69 73 20 6e 6f 74 20 74 68  nt row is not th
d940: 65 20 6d 69 6e 69 6d 75 6d 20 6f 72 0a 2a 2a 20  e minimum or.** 
d950: 6d 61 78 69 6d 75 6d 2e 20 20 54 68 65 20 50 31  maximum.  The P1
d960: 20 72 65 67 69 73 74 65 72 20 69 73 20 69 6e 69   register is ini
d970: 74 69 61 6c 69 7a 65 64 20 74 6f 20 30 20 62 79  tialized to 0 by
d980: 20 74 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f   this instructio
d990: 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 69 6e 74  n..**.** The int
d9a0: 65 72 66 61 63 65 20 75 73 65 64 20 62 79 20 74  erface used by t
d9b0: 68 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f  he implementatio
d9c0: 6e 20 6f 66 20 74 68 65 20 61 66 6f 72 65 6d 65  n of the aforeme
d9d0: 6e 74 69 6f 6e 65 64 20 66 75 6e 63 74 69 6f 6e  ntioned function
d9e0: 73 0a 2a 2a 20 74 6f 20 72 65 74 72 69 65 76 65  s.** to retrieve
d9f0: 20 74 68 65 20 63 6f 6c 6c 61 74 69 6f 6e 20 73   the collation s
da00: 65 71 75 65 6e 63 65 20 73 65 74 20 62 79 20 74  equence set by t
da10: 68 69 73 20 6f 70 63 6f 64 65 20 69 73 20 6e 6f  his opcode is no
da20: 74 20 61 76 61 69 6c 61 62 6c 65 0a 2a 2a 20 70  t available.** p
da30: 75 62 6c 69 63 6c 79 2e 20 20 4f 6e 6c 79 20 62  ublicly.  Only b
da40: 75 69 6c 74 2d 69 6e 20 66 75 6e 63 74 69 6f 6e  uilt-in function
da50: 73 20 68 61 76 65 20 61 63 63 65 73 73 20 74 6f  s have access to
da60: 20 74 68 69 73 20 66 65 61 74 75 72 65 2e 0a 2a   this feature..*
da70: 2f 0a 63 61 73 65 20 4f 50 5f 43 6f 6c 6c 53 65  /.case OP_CollSe
da80: 71 3a 20 7b 0a 20 20 61 73 73 65 72 74 28 20 70  q: {.  assert( p
da90: 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 43  Op->p4type==P4_C
daa0: 4f 4c 4c 53 45 51 20 29 3b 0a 20 20 69 66 28 20  OLLSEQ );.  if( 
dab0: 70 4f 70 2d 3e 70 31 20 29 7b 0a 20 20 20 20 73  pOp->p1 ){.    s
dac0: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74  qlite3VdbeMemSet
dad0: 49 6e 74 36 34 28 26 61 4d 65 6d 5b 70 4f 70 2d  Int64(&aMem[pOp-
dae0: 3e 70 31 5d 2c 20 30 29 3b 0a 20 20 7d 0a 20 20  >p1], 0);.  }.  
daf0: 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
db00: 6f 64 65 3a 20 42 69 74 41 6e 64 20 50 31 20 50  ode: BitAnd P1 P
db10: 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f  2 P3 * *.** Syno
db20: 70 73 69 73 3a 20 72 5b 50 33 5d 3d 72 5b 50 31  psis: r[P3]=r[P1
db30: 5d 26 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20 54 61  ]&r[P2].**.** Ta
db40: 6b 65 20 74 68 65 20 62 69 74 2d 77 69 73 65 20  ke the bit-wise 
db50: 41 4e 44 20 6f 66 20 74 68 65 20 76 61 6c 75 65  AND of the value
db60: 73 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31  s in register P1
db70: 20 61 6e 64 20 50 32 20 61 6e 64 0a 2a 2a 20 73   and P2 and.** s
db80: 74 6f 72 65 20 74 68 65 20 72 65 73 75 6c 74 20  tore the result 
db90: 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a  in register P3..
dba0: 2a 2a 20 49 66 20 65 69 74 68 65 72 20 69 6e 70  ** If either inp
dbb0: 75 74 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65 20  ut is NULL, the 
dbc0: 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a  result is NULL..
dbd0: 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 42 69  */./* Opcode: Bi
dbe0: 74 4f 72 20 50 31 20 50 32 20 50 33 20 2a 20 2a  tOr P1 P2 P3 * *
dbf0: 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b  .** Synopsis: r[
dc00: 50 33 5d 3d 72 5b 50 31 5d 7c 72 5b 50 32 5d 0a  P3]=r[P1]|r[P2].
dc10: 2a 2a 0a 2a 2a 20 54 61 6b 65 20 74 68 65 20 62  **.** Take the b
dc20: 69 74 2d 77 69 73 65 20 4f 52 20 6f 66 20 74 68  it-wise OR of th
dc30: 65 20 76 61 6c 75 65 73 20 69 6e 20 72 65 67 69  e values in regi
dc40: 73 74 65 72 20 50 31 20 61 6e 64 20 50 32 20 61  ster P1 and P2 a
dc50: 6e 64 0a 2a 2a 20 73 74 6f 72 65 20 74 68 65 20  nd.** store the 
dc60: 72 65 73 75 6c 74 20 69 6e 20 72 65 67 69 73 74  result in regist
dc70: 65 72 20 50 33 2e 0a 2a 2a 20 49 66 20 65 69 74  er P3..** If eit
dc80: 68 65 72 20 69 6e 70 75 74 20 69 73 20 4e 55 4c  her input is NUL
dc90: 4c 2c 20 74 68 65 20 72 65 73 75 6c 74 20 69 73  L, the result is
dca0: 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63   NULL..*/./* Opc
dcb0: 6f 64 65 3a 20 53 68 69 66 74 4c 65 66 74 20 50  ode: ShiftLeft P
dcc0: 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53  1 P2 P3 * *.** S
dcd0: 79 6e 6f 70 73 69 73 3a 20 72 5b 50 33 5d 3d 72  ynopsis: r[P3]=r
dce0: 5b 50 32 5d 3c 3c 72 5b 50 31 5d 0a 2a 2a 0a 2a  [P2]<<r[P1].**.*
dcf0: 2a 20 53 68 69 66 74 20 74 68 65 20 69 6e 74 65  * Shift the inte
dd00: 67 65 72 20 76 61 6c 75 65 20 69 6e 20 72 65 67  ger value in reg
dd10: 69 73 74 65 72 20 50 32 20 74 6f 20 74 68 65 20  ister P2 to the 
dd20: 6c 65 66 74 20 62 79 20 74 68 65 0a 2a 2a 20 6e  left by the.** n
dd30: 75 6d 62 65 72 20 6f 66 20 62 69 74 73 20 73 70  umber of bits sp
dd40: 65 63 69 66 69 65 64 20 62 79 20 74 68 65 20 69  ecified by the i
dd50: 6e 74 65 67 65 72 20 69 6e 20 72 65 67 69 73 74  nteger in regist
dd60: 65 72 20 50 31 2e 0a 2a 2a 20 53 74 6f 72 65 20  er P1..** Store 
dd70: 74 68 65 20 72 65 73 75 6c 74 20 69 6e 20 72 65  the result in re
dd80: 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a 20 49 66  gister P3..** If
dd90: 20 65 69 74 68 65 72 20 69 6e 70 75 74 20 69 73   either input is
dda0: 20 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c   NULL, the resul
ddb0: 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a  t is NULL..*/./*
ddc0: 20 4f 70 63 6f 64 65 3a 20 53 68 69 66 74 52 69   Opcode: ShiftRi
ddd0: 67 68 74 20 50 31 20 50 32 20 50 33 20 2a 20 2a  ght P1 P2 P3 * *
dde0: 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b  .** Synopsis: r[
ddf0: 50 33 5d 3d 72 5b 50 32 5d 3e 3e 72 5b 50 31 5d  P3]=r[P2]>>r[P1]
de00: 0a 2a 2a 0a 2a 2a 20 53 68 69 66 74 20 74 68 65  .**.** Shift the
de10: 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65 20 69   integer value i
de20: 6e 20 72 65 67 69 73 74 65 72 20 50 32 20 74 6f  n register P2 to
de30: 20 74 68 65 20 72 69 67 68 74 20 62 79 20 74 68   the right by th
de40: 65 0a 2a 2a 20 6e 75 6d 62 65 72 20 6f 66 20 62  e.** number of b
de50: 69 74 73 20 73 70 65 63 69 66 69 65 64 20 62 79  its specified by
de60: 20 74 68 65 20 69 6e 74 65 67 65 72 20 69 6e 20   the integer in 
de70: 72 65 67 69 73 74 65 72 20 50 31 2e 0a 2a 2a 20  register P1..** 
de80: 53 74 6f 72 65 20 74 68 65 20 72 65 73 75 6c 74  Store the result
de90: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e   in register P3.
dea0: 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20 69 6e  .** If either in
deb0: 70 75 74 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65  put is NULL, the
dec0: 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e   result is NULL.
ded0: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 42 69 74 41  .*/.case OP_BitA
dee0: 6e 64 3a 20 20 20 20 20 20 20 20 20 20 20 20 20  nd:             
def0: 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54      /* same as T
df00: 4b 5f 42 49 54 41 4e 44 2c 20 69 6e 31 2c 20 69  K_BITAND, in1, i
df10: 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65  n2, out3 */.case
df20: 20 4f 50 5f 42 69 74 4f 72 3a 20 20 20 20 20 20   OP_BitOr:      
df30: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73              /* s
df40: 61 6d 65 20 61 73 20 54 4b 5f 42 49 54 4f 52 2c  ame as TK_BITOR,
df50: 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20   in1, in2, out3 
df60: 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 68 69 66 74  */.case OP_Shift
df70: 4c 65 66 74 3a 20 20 20 20 20 20 20 20 20 20 20  Left:           
df80: 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b     /* same as TK
df90: 5f 4c 53 48 49 46 54 2c 20 69 6e 31 2c 20 69 6e  _LSHIFT, in1, in
dfa0: 32 2c 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20  2, out3 */.case 
dfb0: 4f 50 5f 53 68 69 66 74 52 69 67 68 74 3a 20 7b  OP_ShiftRight: {
dfc0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61             /* sa
dfd0: 6d 65 20 61 73 20 54 4b 5f 52 53 48 49 46 54 2c  me as TK_RSHIFT,
dfe0: 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20   in1, in2, out3 
dff0: 2a 2f 0a 20 20 69 36 34 20 69 41 3b 0a 20 20 75  */.  i64 iA;.  u
e000: 36 34 20 75 41 3b 0a 20 20 69 36 34 20 69 42 3b  64 uA;.  i64 iB;
e010: 0a 20 20 75 38 20 6f 70 3b 0a 0a 20 20 70 49 6e  .  u8 op;..  pIn
e020: 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  1 = &aMem[pOp->p
e030: 31 5d 3b 0a 20 20 70 49 6e 32 20 3d 20 26 61 4d  1];.  pIn2 = &aM
e040: 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 70  em[pOp->p2];.  p
e050: 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  Out = &aMem[pOp-
e060: 3e 70 33 5d 3b 0a 20 20 69 66 28 20 28 70 49 6e  >p3];.  if( (pIn
e070: 31 2d 3e 66 6c 61 67 73 20 7c 20 70 49 6e 32 2d  1->flags | pIn2-
e080: 3e 66 6c 61 67 73 29 20 26 20 4d 45 4d 5f 4e 75  >flags) & MEM_Nu
e090: 6c 6c 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  ll ){.    sqlite
e0a0: 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28  3VdbeMemSetNull(
e0b0: 70 4f 75 74 29 3b 0a 20 20 20 20 62 72 65 61 6b  pOut);.    break
e0c0: 3b 0a 20 20 7d 0a 20 20 69 41 20 3d 20 73 71 6c  ;.  }.  iA = sql
e0d0: 69 74 65 33 56 64 62 65 49 6e 74 56 61 6c 75 65  ite3VdbeIntValue
e0e0: 28 70 49 6e 32 29 3b 0a 20 20 69 42 20 3d 20 73  (pIn2);.  iB = s
e0f0: 71 6c 69 74 65 33 56 64 62 65 49 6e 74 56 61 6c  qlite3VdbeIntVal
e100: 75 65 28 70 49 6e 31 29 3b 0a 20 20 6f 70 20 3d  ue(pIn1);.  op =
e110: 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3b 0a 20 20   pOp->opcode;.  
e120: 69 66 28 20 6f 70 3d 3d 4f 50 5f 42 69 74 41 6e  if( op==OP_BitAn
e130: 64 20 29 7b 0a 20 20 20 20 69 41 20 26 3d 20 69  d ){.    iA &= i
e140: 42 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 6f  B;.  }else if( o
e150: 70 3d 3d 4f 50 5f 42 69 74 4f 72 20 29 7b 0a 20  p==OP_BitOr ){. 
e160: 20 20 20 69 41 20 7c 3d 20 69 42 3b 0a 20 20 7d     iA |= iB;.  }
e170: 65 6c 73 65 20 69 66 28 20 69 42 21 3d 30 20 29  else if( iB!=0 )
e180: 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 6f 70  {.    assert( op
e190: 3d 3d 4f 50 5f 53 68 69 66 74 52 69 67 68 74 20  ==OP_ShiftRight 
e1a0: 7c 7c 20 6f 70 3d 3d 4f 50 5f 53 68 69 66 74 4c  || op==OP_ShiftL
e1b0: 65 66 74 20 29 3b 0a 0a 20 20 20 20 2f 2a 20 49  eft );..    /* I
e1c0: 66 20 73 68 69 66 74 69 6e 67 20 62 79 20 61 20  f shifting by a 
e1d0: 6e 65 67 61 74 69 76 65 20 61 6d 6f 75 6e 74 2c  negative amount,
e1e0: 20 73 68 69 66 74 20 69 6e 20 74 68 65 20 6f 74   shift in the ot
e1f0: 68 65 72 20 64 69 72 65 63 74 69 6f 6e 20 2a 2f  her direction */
e200: 0a 20 20 20 20 69 66 28 20 69 42 3c 30 20 29 7b  .    if( iB<0 ){
e210: 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 4f  .      assert( O
e220: 50 5f 53 68 69 66 74 52 69 67 68 74 3d 3d 4f 50  P_ShiftRight==OP
e230: 5f 53 68 69 66 74 4c 65 66 74 2b 31 20 29 3b 0a  _ShiftLeft+1 );.
e240: 20 20 20 20 20 20 6f 70 20 3d 20 32 2a 4f 50 5f        op = 2*OP_
e250: 53 68 69 66 74 4c 65 66 74 20 2b 20 31 20 2d 20  ShiftLeft + 1 - 
e260: 6f 70 3b 0a 20 20 20 20 20 20 69 42 20 3d 20 69  op;.      iB = i
e270: 42 3e 28 2d 36 34 29 20 3f 20 2d 69 42 20 3a 20  B>(-64) ? -iB : 
e280: 36 34 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 69  64;.    }..    i
e290: 66 28 20 69 42 3e 3d 36 34 20 29 7b 0a 20 20 20  f( iB>=64 ){.   
e2a0: 20 20 20 69 41 20 3d 20 28 69 41 3e 3d 30 20 7c     iA = (iA>=0 |
e2b0: 7c 20 6f 70 3d 3d 4f 50 5f 53 68 69 66 74 4c 65  | op==OP_ShiftLe
e2c0: 66 74 29 20 3f 20 30 20 3a 20 2d 31 3b 0a 20 20  ft) ? 0 : -1;.  
e2d0: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 6d    }else{.      m
e2e0: 65 6d 63 70 79 28 26 75 41 2c 20 26 69 41 2c 20  emcpy(&uA, &iA, 
e2f0: 73 69 7a 65 6f 66 28 75 41 29 29 3b 0a 20 20 20  sizeof(uA));.   
e300: 20 20 20 69 66 28 20 6f 70 3d 3d 4f 50 5f 53 68     if( op==OP_Sh
e310: 69 66 74 4c 65 66 74 20 29 7b 0a 20 20 20 20 20  iftLeft ){.     
e320: 20 20 20 75 41 20 3c 3c 3d 20 69 42 3b 0a 20 20     uA <<= iB;.  
e330: 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
e340: 20 20 20 75 41 20 3e 3e 3d 20 69 42 3b 0a 20 20     uA >>= iB;.  
e350: 20 20 20 20 20 20 2f 2a 20 53 69 67 6e 2d 65 78        /* Sign-ex
e360: 74 65 6e 64 20 6f 6e 20 61 20 72 69 67 68 74 20  tend on a right 
e370: 73 68 69 66 74 20 6f 66 20 61 20 6e 65 67 61 74  shift of a negat
e380: 69 76 65 20 6e 75 6d 62 65 72 20 2a 2f 0a 20 20  ive number */.  
e390: 20 20 20 20 20 20 69 66 28 20 69 41 3c 30 20 29        if( iA<0 )
e3a0: 20 75 41 20 7c 3d 20 28 28 28 28 75 36 34 29 30   uA |= ((((u64)0
e3b0: 78 66 66 66 66 66 66 66 66 29 3c 3c 33 32 29 7c  xffffffff)<<32)|
e3c0: 30 78 66 66 66 66 66 66 66 66 29 20 3c 3c 20 28  0xffffffff) << (
e3d0: 36 34 2d 69 42 29 3b 0a 20 20 20 20 20 20 7d 0a  64-iB);.      }.
e3e0: 20 20 20 20 20 20 6d 65 6d 63 70 79 28 26 69 41        memcpy(&iA
e3f0: 2c 20 26 75 41 2c 20 73 69 7a 65 6f 66 28 69 41  , &uA, sizeof(iA
e400: 29 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20  ));.    }.  }.  
e410: 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 69 41 3b 0a  pOut->u.i = iA;.
e420: 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67    MemSetTypeFlag
e430: 28 70 4f 75 74 2c 20 4d 45 4d 5f 49 6e 74 29 3b  (pOut, MEM_Int);
e440: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
e450: 4f 70 63 6f 64 65 3a 20 41 64 64 49 6d 6d 20 20  Opcode: AddImm  
e460: 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53  P1 P2 * * *.** S
e470: 79 6e 6f 70 73 69 73 3a 20 72 5b 50 31 5d 3d 72  ynopsis: r[P1]=r
e480: 5b 50 31 5d 2b 50 32 0a 2a 2a 20 0a 2a 2a 20 41  [P1]+P2.** .** A
e490: 64 64 20 74 68 65 20 63 6f 6e 73 74 61 6e 74 20  dd the constant 
e4a0: 50 32 20 74 6f 20 74 68 65 20 76 61 6c 75 65 20  P2 to the value 
e4b0: 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 2e 0a  in register P1..
e4c0: 2a 2a 20 54 68 65 20 72 65 73 75 6c 74 20 69 73  ** The result is
e4d0: 20 61 6c 77 61 79 73 20 61 6e 20 69 6e 74 65 67   always an integ
e4e0: 65 72 2e 0a 2a 2a 0a 2a 2a 20 54 6f 20 66 6f 72  er..**.** To for
e4f0: 63 65 20 61 6e 79 20 72 65 67 69 73 74 65 72 20  ce any register 
e500: 74 6f 20 62 65 20 61 6e 20 69 6e 74 65 67 65 72  to be an integer
e510: 2c 20 6a 75 73 74 20 61 64 64 20 30 2e 0a 2a 2f  , just add 0..*/
e520: 0a 63 61 73 65 20 4f 50 5f 41 64 64 49 6d 6d 3a  .case OP_AddImm:
e530: 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a   {            /*
e540: 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d   in1 */.  pIn1 =
e550: 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b   &aMem[pOp->p1];
e560: 0a 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61  .  memAboutToCha
e570: 6e 67 65 28 70 2c 20 70 49 6e 31 29 3b 0a 20 20  nge(p, pIn1);.  
e580: 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 49 6e  sqlite3VdbeMemIn
e590: 74 65 67 65 72 69 66 79 28 70 49 6e 31 29 3b 0a  tegerify(pIn1);.
e5a0: 20 20 70 49 6e 31 2d 3e 75 2e 69 20 2b 3d 20 70    pIn1->u.i += p
e5b0: 4f 70 2d 3e 70 32 3b 0a 20 20 62 72 65 61 6b 3b  Op->p2;.  break;
e5c0: 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4d  .}../* Opcode: M
e5d0: 75 73 74 42 65 49 6e 74 20 50 31 20 50 32 20 2a  ustBeInt P1 P2 *
e5e0: 20 2a 20 2a 0a 2a 2a 20 0a 2a 2a 20 46 6f 72 63   * *.** .** Forc
e5f0: 65 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72  e the value in r
e600: 65 67 69 73 74 65 72 20 50 31 20 74 6f 20 62 65  egister P1 to be
e610: 20 61 6e 20 69 6e 74 65 67 65 72 2e 20 20 49 66   an integer.  If
e620: 20 74 68 65 20 76 61 6c 75 65 0a 2a 2a 20 69 6e   the value.** in
e630: 20 50 31 20 69 73 20 6e 6f 74 20 61 6e 20 69 6e   P1 is not an in
e640: 74 65 67 65 72 20 61 6e 64 20 63 61 6e 6e 6f 74  teger and cannot
e650: 20 62 65 20 63 6f 6e 76 65 72 74 65 64 20 69 6e   be converted in
e660: 74 6f 20 61 6e 20 69 6e 74 65 67 65 72 0a 2a 2a  to an integer.**
e670: 20 77 69 74 68 6f 75 74 20 64 61 74 61 20 6c 6f   without data lo
e680: 73 73 2c 20 74 68 65 6e 20 6a 75 6d 70 20 69 6d  ss, then jump im
e690: 6d 65 64 69 61 74 65 6c 79 20 74 6f 20 50 32 2c  mediately to P2,
e6a0: 20 6f 72 20 69 66 20 50 32 3d 3d 30 0a 2a 2a 20   or if P2==0.** 
e6b0: 72 61 69 73 65 20 61 6e 20 53 51 4c 49 54 45 5f  raise an SQLITE_
e6c0: 4d 49 53 4d 41 54 43 48 20 65 78 63 65 70 74 69  MISMATCH excepti
e6d0: 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4d  on..*/.case OP_M
e6e0: 75 73 74 42 65 49 6e 74 3a 20 7b 20 20 20 20 20  ustBeInt: {     
e6f0: 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20         /* jump, 
e700: 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20  in1 */.  pIn1 = 
e710: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  &aMem[pOp->p1];.
e720: 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61    if( (pIn1->fla
e730: 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29 3d 3d 30  gs & MEM_Int)==0
e740: 20 29 7b 0a 20 20 20 20 61 70 70 6c 79 41 66 66   ){.    applyAff
e750: 69 6e 69 74 79 28 70 49 6e 31 2c 20 53 51 4c 49  inity(pIn1, SQLI
e760: 54 45 5f 41 46 46 5f 4e 55 4d 45 52 49 43 2c 20  TE_AFF_NUMERIC, 
e770: 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 20 20 69  encoding);.    i
e780: 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20  f( (pIn1->flags 
e790: 26 20 4d 45 4d 5f 49 6e 74 29 3d 3d 30 20 29 7b  & MEM_Int)==0 ){
e7a0: 0a 20 20 20 20 20 20 56 64 62 65 42 72 61 6e 63  .      VdbeBranc
e7b0: 68 54 61 6b 65 6e 28 31 2c 20 32 29 3b 0a 20 20  hTaken(1, 2);.  
e7c0: 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 32 3d      if( pOp->p2=
e7d0: 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 72 63  =0 ){.        rc
e7e0: 20 3d 20 53 51 4c 49 54 45 5f 4d 49 53 4d 41 54   = SQLITE_MISMAT
e7f0: 43 48 3b 0a 20 20 20 20 20 20 20 20 67 6f 74 6f  CH;.        goto
e800: 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
e810: 72 6f 72 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65  ror;.      }else
e820: 7b 0a 20 20 20 20 20 20 20 20 67 6f 74 6f 20 6a  {.        goto j
e830: 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 20 20 20  ump_to_p2;.     
e840: 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 56   }.    }.  }.  V
e850: 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 30  dbeBranchTaken(0
e860: 2c 20 32 29 3b 0a 20 20 4d 65 6d 53 65 74 54 79  , 2);.  MemSetTy
e870: 70 65 46 6c 61 67 28 70 49 6e 31 2c 20 4d 45 4d  peFlag(pIn1, MEM
e880: 5f 49 6e 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a  _Int);.  break;.
e890: 7d 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  }..#ifndef SQLIT
e8a0: 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f  E_OMIT_FLOATING_
e8b0: 50 4f 49 4e 54 0a 2f 2a 20 4f 70 63 6f 64 65 3a  POINT./* Opcode:
e8c0: 20 52 65 61 6c 41 66 66 69 6e 69 74 79 20 50 31   RealAffinity P1
e8d0: 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 49   * * * *.**.** I
e8e0: 66 20 72 65 67 69 73 74 65 72 20 50 31 20 68 6f  f register P1 ho
e8f0: 6c 64 73 20 61 6e 20 69 6e 74 65 67 65 72 20 63  lds an integer c
e900: 6f 6e 76 65 72 74 20 69 74 20 74 6f 20 61 20 72  onvert it to a r
e910: 65 61 6c 20 76 61 6c 75 65 2e 0a 2a 2a 0a 2a 2a  eal value..**.**
e920: 20 54 68 69 73 20 6f 70 63 6f 64 65 20 69 73 20   This opcode is 
e930: 75 73 65 64 20 77 68 65 6e 20 65 78 74 72 61 63  used when extrac
e940: 74 69 6e 67 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  ting information
e950: 20 66 72 6f 6d 20 61 20 63 6f 6c 75 6d 6e 20 74   from a column t
e960: 68 61 74 0a 2a 2a 20 68 61 73 20 52 45 41 4c 20  hat.** has REAL 
e970: 61 66 66 69 6e 69 74 79 2e 20 20 53 75 63 68 20  affinity.  Such 
e980: 63 6f 6c 75 6d 6e 20 76 61 6c 75 65 73 20 6d 61  column values ma
e990: 79 20 73 74 69 6c 6c 20 62 65 20 73 74 6f 72 65  y still be store
e9a0: 64 20 61 73 0a 2a 2a 20 69 6e 74 65 67 65 72 73  d as.** integers
e9b0: 2c 20 66 6f 72 20 73 70 61 63 65 20 65 66 66 69  , for space effi
e9c0: 63 69 65 6e 63 79 2c 20 62 75 74 20 61 66 74 65  ciency, but afte
e9d0: 72 20 65 78 74 72 61 63 74 69 6f 6e 20 77 65 20  r extraction we 
e9e0: 77 61 6e 74 20 74 68 65 6d 0a 2a 2a 20 74 6f 20  want them.** to 
e9f0: 68 61 76 65 20 6f 6e 6c 79 20 61 20 72 65 61 6c  have only a real
ea00: 20 76 61 6c 75 65 2e 0a 2a 2f 0a 63 61 73 65 20   value..*/.case 
ea10: 4f 50 5f 52 65 61 6c 41 66 66 69 6e 69 74 79 3a  OP_RealAffinity:
ea20: 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 20   {              
ea30: 20 20 20 20 2f 2a 20 69 6e 31 20 2a 2f 0a 20 20      /* in1 */.  
ea40: 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn1 = &aMem[pOp
ea50: 2d 3e 70 31 5d 3b 0a 20 20 69 66 28 20 70 49 6e  ->p1];.  if( pIn
ea60: 31 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f  1->flags & (MEM_
ea70: 49 6e 74 7c 4d 45 4d 5f 49 6e 74 52 65 61 6c 29  Int|MEM_IntReal)
ea80: 20 29 7b 0a 20 20 20 20 74 65 73 74 63 61 73 65   ){.    testcase
ea90: 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20  ( pIn1->flags & 
eaa0: 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 20 20 74  MEM_Int );.    t
eab0: 65 73 74 63 61 73 65 28 20 70 49 6e 31 2d 3e 66  estcase( pIn1->f
eac0: 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 52 65  lags & MEM_IntRe
ead0: 61 6c 20 29 3b 0a 20 20 20 20 73 71 6c 69 74 65  al );.    sqlite
eae0: 33 56 64 62 65 4d 65 6d 52 65 61 6c 69 66 79 28  3VdbeMemRealify(
eaf0: 70 49 6e 31 29 3b 0a 20 20 20 20 52 45 47 49 53  pIn1);.    REGIS
eb00: 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70  TER_TRACE(pOp->p
eb10: 31 2c 20 70 49 6e 31 29 3b 0a 20 20 7d 0a 20 20  1, pIn1);.  }.  
eb20: 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a  break;.}.#endif.
eb30: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
eb40: 4f 4d 49 54 5f 43 41 53 54 0a 2f 2a 20 4f 70 63  OMIT_CAST./* Opc
eb50: 6f 64 65 3a 20 43 61 73 74 20 50 31 20 50 32 20  ode: Cast P1 P2 
eb60: 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69  * * *.** Synopsi
eb70: 73 3a 20 61 66 66 69 6e 69 74 79 28 72 5b 50 31  s: affinity(r[P1
eb80: 5d 29 0a 2a 2a 0a 2a 2a 20 46 6f 72 63 65 20 74  ]).**.** Force t
eb90: 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69  he value in regi
eba0: 73 74 65 72 20 50 31 20 74 6f 20 62 65 20 74 68  ster P1 to be th
ebb0: 65 20 74 79 70 65 20 64 65 66 69 6e 65 64 20 62  e type defined b
ebc0: 79 20 50 32 2e 0a 2a 2a 20 0a 2a 2a 20 3c 75 6c  y P2..** .** <ul
ebd0: 3e 0a 2a 2a 20 3c 6c 69 3e 20 50 32 3d 3d 27 41  >.** <li> P2=='A
ebe0: 27 20 26 72 61 72 72 3b 20 42 4c 4f 42 0a 2a 2a  ' &rarr; BLOB.**
ebf0: 20 3c 6c 69 3e 20 50 32 3d 3d 27 42 27 20 26 72   <li> P2=='B' &r
ec00: 61 72 72 3b 20 54 45 58 54 0a 2a 2a 20 3c 6c 69  arr; TEXT.** <li
ec10: 3e 20 50 32 3d 3d 27 43 27 20 26 72 61 72 72 3b  > P2=='C' &rarr;
ec20: 20 4e 55 4d 45 52 49 43 0a 2a 2a 20 3c 6c 69 3e   NUMERIC.** <li>
ec30: 20 50 32 3d 3d 27 44 27 20 26 72 61 72 72 3b 20   P2=='D' &rarr; 
ec40: 49 4e 54 45 47 45 52 0a 2a 2a 20 3c 6c 69 3e 20  INTEGER.** <li> 
ec50: 50 32 3d 3d 27 45 27 20 26 72 61 72 72 3b 20 52  P2=='E' &rarr; R
ec60: 45 41 4c 0a 2a 2a 20 3c 2f 75 6c 3e 0a 2a 2a 0a  EAL.** </ul>.**.
ec70: 2a 2a 20 41 20 4e 55 4c 4c 20 76 61 6c 75 65 20  ** A NULL value 
ec80: 69 73 20 6e 6f 74 20 63 68 61 6e 67 65 64 20 62  is not changed b
ec90: 79 20 74 68 69 73 20 72 6f 75 74 69 6e 65 2e 20  y this routine. 
eca0: 20 49 74 20 72 65 6d 61 69 6e 73 20 4e 55 4c 4c   It remains NULL
ecb0: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 61 73  ..*/.case OP_Cas
ecc0: 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20  t: {            
ecd0: 20 20 20 20 20 20 2f 2a 20 69 6e 31 20 2a 2f 0a        /* in1 */.
ece0: 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
ecf0: 32 3e 3d 53 51 4c 49 54 45 5f 41 46 46 5f 42 4c  2>=SQLITE_AFF_BL
ed00: 4f 42 20 26 26 20 70 4f 70 2d 3e 70 32 3c 3d 53  OB && pOp->p2<=S
ed10: 51 4c 49 54 45 5f 41 46 46 5f 52 45 41 4c 20 29  QLITE_AFF_REAL )
ed20: 3b 0a 20 20 74 65 73 74 63 61 73 65 28 20 70 4f  ;.  testcase( pO
ed30: 70 2d 3e 70 32 3d 3d 53 51 4c 49 54 45 5f 41 46  p->p2==SQLITE_AF
ed40: 46 5f 54 45 58 54 20 29 3b 0a 20 20 74 65 73 74  F_TEXT );.  test
ed50: 63 61 73 65 28 20 70 4f 70 2d 3e 70 32 3d 3d 53  case( pOp->p2==S
ed60: 51 4c 49 54 45 5f 41 46 46 5f 42 4c 4f 42 20 29  QLITE_AFF_BLOB )
ed70: 3b 0a 20 20 74 65 73 74 63 61 73 65 28 20 70 4f  ;.  testcase( pO
ed80: 70 2d 3e 70 32 3d 3d 53 51 4c 49 54 45 5f 41 46  p->p2==SQLITE_AF
ed90: 46 5f 4e 55 4d 45 52 49 43 20 29 3b 0a 20 20 74  F_NUMERIC );.  t
eda0: 65 73 74 63 61 73 65 28 20 70 4f 70 2d 3e 70 32  estcase( pOp->p2
edb0: 3d 3d 53 51 4c 49 54 45 5f 41 46 46 5f 49 4e 54  ==SQLITE_AFF_INT
edc0: 45 47 45 52 20 29 3b 0a 20 20 74 65 73 74 63 61  EGER );.  testca
edd0: 73 65 28 20 70 4f 70 2d 3e 70 32 3d 3d 53 51 4c  se( pOp->p2==SQL
ede0: 49 54 45 5f 41 46 46 5f 52 45 41 4c 20 29 3b 0a  ITE_AFF_REAL );.
edf0: 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70    pIn1 = &aMem[p
ee00: 4f 70 2d 3e 70 31 5d 3b 0a 20 20 6d 65 6d 41 62  Op->p1];.  memAb
ee10: 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70  outToChange(p, p
ee20: 49 6e 31 29 3b 0a 20 20 72 63 20 3d 20 45 78 70  In1);.  rc = Exp
ee30: 61 6e 64 42 6c 6f 62 28 70 49 6e 31 29 3b 0a 20  andBlob(pIn1);. 
ee40: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 43   sqlite3VdbeMemC
ee50: 61 73 74 28 70 49 6e 31 2c 20 70 4f 70 2d 3e 70  ast(pIn1, pOp->p
ee60: 32 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20  2, encoding);.  
ee70: 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53  UPDATE_MAX_BLOBS
ee80: 49 5a 45 28 70 49 6e 31 29 3b 0a 20 20 69 66 28  IZE(pIn1);.  if(
ee90: 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74   rc ) goto abort
eea0: 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20  _due_to_error;. 
eeb0: 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66   break;.}.#endif
eec0: 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f   /* SQLITE_OMIT_
eed0: 43 41 53 54 20 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f  CAST */../* Opco
eee0: 64 65 3a 20 45 71 20 50 31 20 50 32 20 50 33 20  de: Eq P1 P2 P3 
eef0: 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69  P4 P5.** Synopsi
ef00: 73 3a 20 49 46 20 72 5b 50 33 5d 3d 3d 72 5b 50  s: IF r[P3]==r[P
ef10: 31 5d 0a 2a 2a 0a 2a 2a 20 43 6f 6d 70 61 72 65  1].**.** Compare
ef20: 20 74 68 65 20 76 61 6c 75 65 73 20 69 6e 20 72   the values in r
ef30: 65 67 69 73 74 65 72 20 50 31 20 61 6e 64 20 50  egister P1 and P
ef40: 33 2e 20 20 49 66 20 72 65 67 28 50 33 29 3d 3d  3.  If reg(P3)==
ef50: 72 65 67 28 50 31 29 20 74 68 65 6e 0a 2a 2a 20  reg(P1) then.** 
ef60: 6a 75 6d 70 20 74 6f 20 61 64 64 72 65 73 73 20  jump to address 
ef70: 50 32 2e 20 20 4f 72 20 69 66 20 74 68 65 20 53  P2.  Or if the S
ef80: 51 4c 49 54 45 5f 53 54 4f 52 45 50 32 20 66 6c  QLITE_STOREP2 fl
ef90: 61 67 20 69 73 20 73 65 74 20 69 6e 20 50 35 2c  ag is set in P5,
efa0: 20 74 68 65 6e 0a 2a 2a 20 73 74 6f 72 65 20 74   then.** store t
efb0: 68 65 20 72 65 73 75 6c 74 20 6f 66 20 63 6f 6d  he result of com
efc0: 70 61 72 69 73 6f 6e 20 69 6e 20 72 65 67 69 73  parison in regis
efd0: 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54 68  ter P2..**.** Th
efe0: 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 4d 41 53  e SQLITE_AFF_MAS
eff0: 4b 20 70 6f 72 74 69 6f 6e 20 6f 66 20 50 35 20  K portion of P5 
f000: 6d 75 73 74 20 62 65 20 61 6e 20 61 66 66 69 6e  must be an affin
f010: 69 74 79 20 63 68 61 72 61 63 74 65 72 20 2d 0a  ity character -.
f020: 2a 2a 20 53 51 4c 49 54 45 5f 41 46 46 5f 54 45  ** SQLITE_AFF_TE
f030: 58 54 2c 20 53 51 4c 49 54 45 5f 41 46 46 5f 49  XT, SQLITE_AFF_I
f040: 4e 54 45 47 45 52 2c 20 61 6e 64 20 73 6f 20 66  NTEGER, and so f
f050: 6f 72 74 68 2e 20 41 6e 20 61 74 74 65 6d 70 74  orth. An attempt
f060: 20 69 73 20 6d 61 64 65 20 0a 2a 2a 20 74 6f 20   is made .** to 
f070: 63 6f 65 72 63 65 20 62 6f 74 68 20 69 6e 70 75  coerce both inpu
f080: 74 73 20 61 63 63 6f 72 64 69 6e 67 20 74 6f 20  ts according to 
f090: 74 68 69 73 20 61 66 66 69 6e 69 74 79 20 62 65  this affinity be
f0a0: 66 6f 72 65 20 74 68 65 0a 2a 2a 20 63 6f 6d 70  fore the.** comp
f0b0: 61 72 69 73 6f 6e 20 69 73 20 6d 61 64 65 2e 20  arison is made. 
f0c0: 49 66 20 74 68 65 20 53 51 4c 49 54 45 5f 41 46  If the SQLITE_AF
f0d0: 46 5f 4d 41 53 4b 20 69 73 20 30 78 30 30 2c 20  F_MASK is 0x00, 
f0e0: 74 68 65 6e 20 6e 75 6d 65 72 69 63 0a 2a 2a 20  then numeric.** 
f0f0: 61 66 66 69 6e 69 74 79 20 69 73 20 75 73 65 64  affinity is used
f100: 2e 20 4e 6f 74 65 20 74 68 61 74 20 74 68 65 20  . Note that the 
f110: 61 66 66 69 6e 69 74 79 20 63 6f 6e 76 65 72 73  affinity convers
f120: 69 6f 6e 73 20 61 72 65 20 73 74 6f 72 65 64 0a  ions are stored.
f130: 2a 2a 20 62 61 63 6b 20 69 6e 74 6f 20 74 68 65  ** back into the
f140: 20 69 6e 70 75 74 20 72 65 67 69 73 74 65 72 73   input registers
f150: 20 50 31 20 61 6e 64 20 50 33 2e 20 20 53 6f 20   P1 and P3.  So 
f160: 74 68 69 73 20 6f 70 63 6f 64 65 20 63 61 6e 20  this opcode can 
f170: 63 61 75 73 65 0a 2a 2a 20 70 65 72 73 69 73 74  cause.** persist
f180: 65 6e 74 20 63 68 61 6e 67 65 73 20 74 6f 20 72  ent changes to r
f190: 65 67 69 73 74 65 72 73 20 50 31 20 61 6e 64 20  egisters P1 and 
f1a0: 50 33 2e 0a 2a 2a 0a 2a 2a 20 4f 6e 63 65 20 61  P3..**.** Once a
f1b0: 6e 79 20 63 6f 6e 76 65 72 73 69 6f 6e 73 20 68  ny conversions h
f1c0: 61 76 65 20 74 61 6b 65 6e 20 70 6c 61 63 65 2c  ave taken place,
f1d0: 20 61 6e 64 20 6e 65 69 74 68 65 72 20 76 61 6c   and neither val
f1e0: 75 65 20 69 73 20 4e 55 4c 4c 2c 20 0a 2a 2a 20  ue is NULL, .** 
f1f0: 74 68 65 20 76 61 6c 75 65 73 20 61 72 65 20 63  the values are c
f200: 6f 6d 70 61 72 65 64 2e 20 49 66 20 62 6f 74 68  ompared. If both
f210: 20 76 61 6c 75 65 73 20 61 72 65 20 62 6c 6f 62   values are blob
f220: 73 20 74 68 65 6e 20 6d 65 6d 63 6d 70 28 29 20  s then memcmp() 
f230: 69 73 0a 2a 2a 20 75 73 65 64 20 74 6f 20 64 65  is.** used to de
f240: 74 65 72 6d 69 6e 65 20 74 68 65 20 72 65 73 75  termine the resu
f250: 6c 74 73 20 6f 66 20 74 68 65 20 63 6f 6d 70 61  lts of the compa
f260: 72 69 73 6f 6e 2e 20 20 49 66 20 62 6f 74 68 20  rison.  If both 
f270: 76 61 6c 75 65 73 0a 2a 2a 20 61 72 65 20 74 65  values.** are te
f280: 78 74 2c 20 74 68 65 6e 20 74 68 65 20 61 70 70  xt, then the app
f290: 72 6f 70 72 69 61 74 65 20 63 6f 6c 6c 61 74 69  ropriate collati
f2a0: 6e 67 20 66 75 6e 63 74 69 6f 6e 20 73 70 65 63  ng function spec
f2b0: 69 66 69 65 64 20 69 6e 0a 2a 2a 20 50 34 20 69  ified in.** P4 i
f2c0: 73 20 75 73 65 64 20 74 6f 20 64 6f 20 74 68 65  s used to do the
f2d0: 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 20 20 49 66   comparison.  If
f2e0: 20 50 34 20 69 73 20 6e 6f 74 20 73 70 65 63 69   P4 is not speci
f2f0: 66 69 65 64 20 74 68 65 6e 0a 2a 2a 20 6d 65 6d  fied then.** mem
f300: 63 6d 70 28 29 20 69 73 20 75 73 65 64 20 74 6f  cmp() is used to
f310: 20 63 6f 6d 70 61 72 65 20 74 65 78 74 20 73 74   compare text st
f320: 72 69 6e 67 2e 20 20 49 66 20 62 6f 74 68 20 76  ring.  If both v
f330: 61 6c 75 65 73 20 61 72 65 0a 2a 2a 20 6e 75 6d  alues are.** num
f340: 65 72 69 63 2c 20 74 68 65 6e 20 61 20 6e 75 6d  eric, then a num
f350: 65 72 69 63 20 63 6f 6d 70 61 72 69 73 6f 6e 20  eric comparison 
f360: 69 73 20 75 73 65 64 2e 20 49 66 20 74 68 65 20  is used. If the 
f370: 74 77 6f 20 76 61 6c 75 65 73 0a 2a 2a 20 61 72  two values.** ar
f380: 65 20 6f 66 20 64 69 66 66 65 72 65 6e 74 20 74  e of different t
f390: 79 70 65 73 2c 20 74 68 65 6e 20 6e 75 6d 62 65  ypes, then numbe
f3a0: 72 73 20 61 72 65 20 63 6f 6e 73 69 64 65 72 65  rs are considere
f3b0: 64 20 6c 65 73 73 20 74 68 61 6e 0a 2a 2a 20 73  d less than.** s
f3c0: 74 72 69 6e 67 73 20 61 6e 64 20 73 74 72 69 6e  trings and strin
f3d0: 67 73 20 61 72 65 20 63 6f 6e 73 69 64 65 72 65  gs are considere
f3e0: 64 20 6c 65 73 73 20 74 68 61 6e 20 62 6c 6f 62  d less than blob
f3f0: 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 53 51 4c 49  s..**.** If SQLI
f400: 54 45 5f 4e 55 4c 4c 45 51 20 69 73 20 73 65 74  TE_NULLEQ is set
f410: 20 69 6e 20 50 35 20 74 68 65 6e 20 74 68 65 20   in P5 then the 
f420: 72 65 73 75 6c 74 20 6f 66 20 63 6f 6d 70 61 72  result of compar
f430: 69 73 6f 6e 20 69 73 20 61 6c 77 61 79 73 20 65  ison is always e
f440: 69 74 68 65 72 0a 2a 2a 20 74 72 75 65 20 6f 72  ither.** true or
f450: 20 66 61 6c 73 65 20 61 6e 64 20 69 73 20 6e 65   false and is ne
f460: 76 65 72 20 4e 55 4c 4c 2e 20 20 49 66 20 62 6f  ver NULL.  If bo
f470: 74 68 20 6f 70 65 72 61 6e 64 73 20 61 72 65 20  th operands are 
f480: 4e 55 4c 4c 20 74 68 65 6e 20 74 68 65 20 72 65  NULL then the re
f490: 73 75 6c 74 0a 2a 2a 20 6f 66 20 63 6f 6d 70 61  sult.** of compa
f4a0: 72 69 73 6f 6e 20 69 73 20 74 72 75 65 2e 20 20  rison is true.  
f4b0: 49 66 20 65 69 74 68 65 72 20 6f 70 65 72 61 6e  If either operan
f4c0: 64 20 69 73 20 4e 55 4c 4c 20 74 68 65 6e 20 74  d is NULL then t
f4d0: 68 65 20 72 65 73 75 6c 74 20 69 73 20 66 61 6c  he result is fal
f4e0: 73 65 2e 0a 2a 2a 20 49 66 20 6e 65 69 74 68 65  se..** If neithe
f4f0: 72 20 6f 70 65 72 61 6e 64 20 69 73 20 4e 55 4c  r operand is NUL
f500: 4c 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20  L the result is 
f510: 74 68 65 20 73 61 6d 65 20 61 73 20 69 74 20 77  the same as it w
f520: 6f 75 6c 64 20 62 65 20 69 66 0a 2a 2a 20 74 68  ould be if.** th
f530: 65 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 20  e SQLITE_NULLEQ 
f540: 66 6c 61 67 20 77 65 72 65 20 6f 6d 69 74 74 65  flag were omitte
f550: 64 20 66 72 6f 6d 20 50 35 2e 0a 2a 2a 0a 2a 2a  d from P5..**.**
f560: 20 49 66 20 62 6f 74 68 20 53 51 4c 49 54 45 5f   If both SQLITE_
f570: 53 54 4f 52 45 50 32 20 61 6e 64 20 53 51 4c 49  STOREP2 and SQLI
f580: 54 45 5f 4b 45 45 50 4e 55 4c 4c 20 66 6c 61 67  TE_KEEPNULL flag
f590: 73 20 61 72 65 20 73 65 74 20 74 68 65 6e 20 74  s are set then t
f5a0: 68 65 0a 2a 2a 20 63 6f 6e 74 65 6e 74 20 6f 66  he.** content of
f5b0: 20 72 5b 50 32 5d 20 69 73 20 6f 6e 6c 79 20 63   r[P2] is only c
f5c0: 68 61 6e 67 65 64 20 69 66 20 74 68 65 20 6e 65  hanged if the ne
f5d0: 77 20 76 61 6c 75 65 20 69 73 20 4e 55 4c 4c 20  w value is NULL 
f5e0: 6f 72 20 30 20 28 66 61 6c 73 65 29 2e 0a 2a 2a  or 0 (false)..**
f5f0: 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c   In other words,
f600: 20 61 20 70 72 69 6f 72 20 72 5b 50 32 5d 20 76   a prior r[P2] v
f610: 61 6c 75 65 20 77 69 6c 6c 20 6e 6f 74 20 62 65  alue will not be
f620: 20 6f 76 65 72 77 72 69 74 74 65 6e 20 62 79 20   overwritten by 
f630: 31 20 28 74 72 75 65 29 2e 0a 2a 2f 0a 2f 2a 20  1 (true)..*/./* 
f640: 4f 70 63 6f 64 65 3a 20 4e 65 20 50 31 20 50 32  Opcode: Ne P1 P2
f650: 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e   P3 P4 P5.** Syn
f660: 6f 70 73 69 73 3a 20 49 46 20 72 5b 50 33 5d 21  opsis: IF r[P3]!
f670: 3d 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 54 68 69  =r[P1].**.** Thi
f680: 73 20 77 6f 72 6b 73 20 6a 75 73 74 20 6c 69 6b  s works just lik
f690: 65 20 74 68 65 20 45 71 20 6f 70 63 6f 64 65 20  e the Eq opcode 
f6a0: 65 78 63 65 70 74 20 74 68 61 74 20 74 68 65 20  except that the 
f6b0: 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e 20 69 66  jump is taken if
f6c0: 0a 2a 2a 20 74 68 65 20 6f 70 65 72 61 6e 64 73  .** the operands
f6d0: 20 69 6e 20 72 65 67 69 73 74 65 72 73 20 50 31   in registers P1
f6e0: 20 61 6e 64 20 50 33 20 61 72 65 20 6e 6f 74 20   and P3 are not 
f6f0: 65 71 75 61 6c 2e 20 20 53 65 65 20 74 68 65 20  equal.  See the 
f700: 45 71 20 6f 70 63 6f 64 65 20 66 6f 72 0a 2a 2a  Eq opcode for.**
f710: 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f   additional info
f720: 72 6d 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 49  rmation..**.** I
f730: 66 20 62 6f 74 68 20 53 51 4c 49 54 45 5f 53 54  f both SQLITE_ST
f740: 4f 52 45 50 32 20 61 6e 64 20 53 51 4c 49 54 45  OREP2 and SQLITE
f750: 5f 4b 45 45 50 4e 55 4c 4c 20 66 6c 61 67 73 20  _KEEPNULL flags 
f760: 61 72 65 20 73 65 74 20 74 68 65 6e 20 74 68 65  are set then the
f770: 0a 2a 2a 20 63 6f 6e 74 65 6e 74 20 6f 66 20 72  .** content of r
f780: 5b 50 32 5d 20 69 73 20 6f 6e 6c 79 20 63 68 61  [P2] is only cha
f790: 6e 67 65 64 20 69 66 20 74 68 65 20 6e 65 77 20  nged if the new 
f7a0: 76 61 6c 75 65 20 69 73 20 4e 55 4c 4c 20 6f 72  value is NULL or
f7b0: 20 31 20 28 74 72 75 65 29 2e 0a 2a 2a 20 49 6e   1 (true)..** In
f7c0: 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 61 20   other words, a 
f7d0: 70 72 69 6f 72 20 72 5b 50 32 5d 20 76 61 6c 75  prior r[P2] valu
f7e0: 65 20 77 69 6c 6c 20 6e 6f 74 20 62 65 20 6f 76  e will not be ov
f7f0: 65 72 77 72 69 74 74 65 6e 20 62 79 20 30 20 28  erwritten by 0 (
f800: 66 61 6c 73 65 29 2e 0a 2a 2f 0a 2f 2a 20 4f 70  false)..*/./* Op
f810: 63 6f 64 65 3a 20 4c 74 20 50 31 20 50 32 20 50  code: Lt P1 P2 P
f820: 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70  3 P4 P5.** Synop
f830: 73 69 73 3a 20 49 46 20 72 5b 50 33 5d 3c 72 5b  sis: IF r[P3]<r[
f840: 50 31 5d 0a 2a 2a 0a 2a 2a 20 43 6f 6d 70 61 72  P1].**.** Compar
f850: 65 20 74 68 65 20 76 61 6c 75 65 73 20 69 6e 20  e the values in 
f860: 72 65 67 69 73 74 65 72 20 50 31 20 61 6e 64 20  register P1 and 
f870: 50 33 2e 20 20 49 66 20 72 65 67 28 50 33 29 3c  P3.  If reg(P3)<
f880: 72 65 67 28 50 31 29 20 74 68 65 6e 0a 2a 2a 20  reg(P1) then.** 
f890: 6a 75 6d 70 20 74 6f 20 61 64 64 72 65 73 73 20  jump to address 
f8a0: 50 32 2e 20 20 4f 72 20 69 66 20 74 68 65 20 53  P2.  Or if the S
f8b0: 51 4c 49 54 45 5f 53 54 4f 52 45 50 32 20 66 6c  QLITE_STOREP2 fl
f8c0: 61 67 20 69 73 20 73 65 74 20 69 6e 20 50 35 20  ag is set in P5 
f8d0: 73 74 6f 72 65 0a 2a 2a 20 74 68 65 20 72 65 73  store.** the res
f8e0: 75 6c 74 20 6f 66 20 63 6f 6d 70 61 72 69 73 6f  ult of compariso
f8f0: 6e 20 28 30 20 6f 72 20 31 20 6f 72 20 4e 55 4c  n (0 or 1 or NUL
f900: 4c 29 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72  L) into register
f910: 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68   P2..**.** If th
f920: 65 20 53 51 4c 49 54 45 5f 4a 55 4d 50 49 46 4e  e SQLITE_JUMPIFN
f930: 55 4c 4c 20 62 69 74 20 6f 66 20 50 35 20 69 73  ULL bit of P5 is
f940: 20 73 65 74 20 61 6e 64 20 65 69 74 68 65 72 20   set and either 
f950: 72 65 67 28 50 31 29 20 6f 72 0a 2a 2a 20 72 65  reg(P1) or.** re
f960: 67 28 50 33 29 20 69 73 20 4e 55 4c 4c 20 74 68  g(P3) is NULL th
f970: 65 6e 20 74 68 65 20 74 61 6b 65 20 74 68 65 20  en the take the 
f980: 6a 75 6d 70 2e 20 20 49 66 20 74 68 65 20 53 51  jump.  If the SQ
f990: 4c 49 54 45 5f 4a 55 4d 50 49 46 4e 55 4c 4c 20  LITE_JUMPIFNULL 
f9a0: 0a 2a 2a 20 62 69 74 20 69 73 20 63 6c 65 61 72  .** bit is clear
f9b0: 20 74 68 65 6e 20 66 61 6c 6c 20 74 68 72 6f 75   then fall throu
f9c0: 67 68 20 69 66 20 65 69 74 68 65 72 20 6f 70 65  gh if either ope
f9d0: 72 61 6e 64 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2a  rand is NULL..**
f9e0: 0a 2a 2a 20 54 68 65 20 53 51 4c 49 54 45 5f 41  .** The SQLITE_A
f9f0: 46 46 5f 4d 41 53 4b 20 70 6f 72 74 69 6f 6e 20  FF_MASK portion 
fa00: 6f 66 20 50 35 20 6d 75 73 74 20 62 65 20 61 6e  of P5 must be an
fa10: 20 61 66 66 69 6e 69 74 79 20 63 68 61 72 61 63   affinity charac
fa20: 74 65 72 20 2d 0a 2a 2a 20 53 51 4c 49 54 45 5f  ter -.** SQLITE_
fa30: 41 46 46 5f 54 45 58 54 2c 20 53 51 4c 49 54 45  AFF_TEXT, SQLITE
fa40: 5f 41 46 46 5f 49 4e 54 45 47 45 52 2c 20 61 6e  _AFF_INTEGER, an
fa50: 64 20 73 6f 20 66 6f 72 74 68 2e 20 41 6e 20 61  d so forth. An a
fa60: 74 74 65 6d 70 74 20 69 73 20 6d 61 64 65 20 0a  ttempt is made .
fa70: 2a 2a 20 74 6f 20 63 6f 65 72 63 65 20 62 6f 74  ** to coerce bot
fa80: 68 20 69 6e 70 75 74 73 20 61 63 63 6f 72 64 69  h inputs accordi
fa90: 6e 67 20 74 6f 20 74 68 69 73 20 61 66 66 69 6e  ng to this affin
faa0: 69 74 79 20 62 65 66 6f 72 65 20 74 68 65 0a 2a  ity before the.*
fab0: 2a 20 63 6f 6d 70 61 72 69 73 6f 6e 20 69 73 20  * comparison is 
fac0: 6d 61 64 65 2e 20 49 66 20 74 68 65 20 53 51 4c  made. If the SQL
fad0: 49 54 45 5f 41 46 46 5f 4d 41 53 4b 20 69 73 20  ITE_AFF_MASK is 
fae0: 30 78 30 30 2c 20 74 68 65 6e 20 6e 75 6d 65 72  0x00, then numer
faf0: 69 63 0a 2a 2a 20 61 66 66 69 6e 69 74 79 20 69  ic.** affinity i
fb00: 73 20 75 73 65 64 2e 20 4e 6f 74 65 20 74 68 61  s used. Note tha
fb10: 74 20 74 68 65 20 61 66 66 69 6e 69 74 79 20 63  t the affinity c
fb20: 6f 6e 76 65 72 73 69 6f 6e 73 20 61 72 65 20 73  onversions are s
fb30: 74 6f 72 65 64 0a 2a 2a 20 62 61 63 6b 20 69 6e  tored.** back in
fb40: 74 6f 20 74 68 65 20 69 6e 70 75 74 20 72 65 67  to the input reg
fb50: 69 73 74 65 72 73 20 50 31 20 61 6e 64 20 50 33  isters P1 and P3
fb60: 2e 20 20 53 6f 20 74 68 69 73 20 6f 70 63 6f 64  .  So this opcod
fb70: 65 20 63 61 6e 20 63 61 75 73 65 0a 2a 2a 20 70  e can cause.** p
fb80: 65 72 73 69 73 74 65 6e 74 20 63 68 61 6e 67 65  ersistent change
fb90: 73 20 74 6f 20 72 65 67 69 73 74 65 72 73 20 50  s to registers P
fba0: 31 20 61 6e 64 20 50 33 2e 0a 2a 2a 0a 2a 2a 20  1 and P3..**.** 
fbb0: 4f 6e 63 65 20 61 6e 79 20 63 6f 6e 76 65 72 73  Once any convers
fbc0: 69 6f 6e 73 20 68 61 76 65 20 74 61 6b 65 6e 20  ions have taken 
fbd0: 70 6c 61 63 65 2c 20 61 6e 64 20 6e 65 69 74 68  place, and neith
fbe0: 65 72 20 76 61 6c 75 65 20 69 73 20 4e 55 4c 4c  er value is NULL
fbf0: 2c 20 0a 2a 2a 20 74 68 65 20 76 61 6c 75 65 73  , .** the values
fc00: 20 61 72 65 20 63 6f 6d 70 61 72 65 64 2e 20 49   are compared. I
fc10: 66 20 62 6f 74 68 20 76 61 6c 75 65 73 20 61 72  f both values ar
fc20: 65 20 62 6c 6f 62 73 20 74 68 65 6e 20 6d 65 6d  e blobs then mem
fc30: 63 6d 70 28 29 20 69 73 0a 2a 2a 20 75 73 65 64  cmp() is.** used
fc40: 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 20 74 68   to determine th
fc50: 65 20 72 65 73 75 6c 74 73 20 6f 66 20 74 68 65  e results of the
fc60: 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 20 20 49 66   comparison.  If
fc70: 20 62 6f 74 68 20 76 61 6c 75 65 73 0a 2a 2a 20   both values.** 
fc80: 61 72 65 20 74 65 78 74 2c 20 74 68 65 6e 20 74  are text, then t
fc90: 68 65 20 61 70 70 72 6f 70 72 69 61 74 65 20 63  he appropriate c
fca0: 6f 6c 6c 61 74 69 6e 67 20 66 75 6e 63 74 69 6f  ollating functio
fcb0: 6e 20 73 70 65 63 69 66 69 65 64 20 69 6e 0a 2a  n specified in.*
fcc0: 2a 20 50 34 20 69 73 20 20 75 73 65 64 20 74 6f  * P4 is  used to
fcd0: 20 64 6f 20 74 68 65 20 63 6f 6d 70 61 72 69 73   do the comparis
fce0: 6f 6e 2e 20 20 49 66 20 50 34 20 69 73 20 6e 6f  on.  If P4 is no
fcf0: 74 20 73 70 65 63 69 66 69 65 64 20 74 68 65 6e  t specified then
fd00: 0a 2a 2a 20 6d 65 6d 63 6d 70 28 29 20 69 73 20  .** memcmp() is 
fd10: 75 73 65 64 20 74 6f 20 63 6f 6d 70 61 72 65 20  used to compare 
fd20: 74 65 78 74 20 73 74 72 69 6e 67 2e 20 20 49 66  text string.  If
fd30: 20 62 6f 74 68 20 76 61 6c 75 65 73 20 61 72 65   both values are
fd40: 0a 2a 2a 20 6e 75 6d 65 72 69 63 2c 20 74 68 65  .** numeric, the
fd50: 6e 20 61 20 6e 75 6d 65 72 69 63 20 63 6f 6d 70  n a numeric comp
fd60: 61 72 69 73 6f 6e 20 69 73 20 75 73 65 64 2e 20  arison is used. 
fd70: 49 66 20 74 68 65 20 74 77 6f 20 76 61 6c 75 65  If the two value
fd80: 73 0a 2a 2a 20 61 72 65 20 6f 66 20 64 69 66 66  s.** are of diff
fd90: 65 72 65 6e 74 20 74 79 70 65 73 2c 20 74 68 65  erent types, the
fda0: 6e 20 6e 75 6d 62 65 72 73 20 61 72 65 20 63 6f  n numbers are co
fdb0: 6e 73 69 64 65 72 65 64 20 6c 65 73 73 20 74 68  nsidered less th
fdc0: 61 6e 0a 2a 2a 20 73 74 72 69 6e 67 73 20 61 6e  an.** strings an
fdd0: 64 20 73 74 72 69 6e 67 73 20 61 72 65 20 63 6f  d strings are co
fde0: 6e 73 69 64 65 72 65 64 20 6c 65 73 73 20 74 68  nsidered less th
fdf0: 61 6e 20 62 6c 6f 62 73 2e 0a 2a 2f 0a 2f 2a 20  an blobs..*/./* 
fe00: 4f 70 63 6f 64 65 3a 20 4c 65 20 50 31 20 50 32  Opcode: Le P1 P2
fe10: 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e   P3 P4 P5.** Syn
fe20: 6f 70 73 69 73 3a 20 49 46 20 72 5b 50 33 5d 3c  opsis: IF r[P3]<
fe30: 3d 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 54 68 69  =r[P1].**.** Thi
fe40: 73 20 77 6f 72 6b 73 20 6a 75 73 74 20 6c 69 6b  s works just lik
fe50: 65 20 74 68 65 20 4c 74 20 6f 70 63 6f 64 65 20  e the Lt opcode 
fe60: 65 78 63 65 70 74 20 74 68 61 74 20 74 68 65 20  except that the 
fe70: 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e 20 69 66  jump is taken if
fe80: 0a 2a 2a 20 74 68 65 20 63 6f 6e 74 65 6e 74 20  .** the content 
fe90: 6f 66 20 72 65 67 69 73 74 65 72 20 50 33 20 69  of register P3 i
fea0: 73 20 6c 65 73 73 20 74 68 61 6e 20 6f 72 20 65  s less than or e
feb0: 71 75 61 6c 20 74 6f 20 74 68 65 20 63 6f 6e 74  qual to the cont
fec0: 65 6e 74 20 6f 66 0a 2a 2a 20 72 65 67 69 73 74  ent of.** regist
fed0: 65 72 20 50 31 2e 20 20 53 65 65 20 74 68 65 20  er P1.  See the 
fee0: 4c 74 20 6f 70 63 6f 64 65 20 66 6f 72 20 61 64  Lt opcode for ad
fef0: 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61  ditional informa
ff00: 74 69 6f 6e 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f  tion..*/./* Opco
ff10: 64 65 3a 20 47 74 20 50 31 20 50 32 20 50 33 20  de: Gt P1 P2 P3 
ff20: 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69  P4 P5.** Synopsi
ff30: 73 3a 20 49 46 20 72 5b 50 33 5d 3e 72 5b 50 31  s: IF r[P3]>r[P1
ff40: 5d 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 77 6f 72  ].**.** This wor
ff50: 6b 73 20 6a 75 73 74 20 6c 69 6b 65 20 74 68 65  ks just like the
ff60: 20 4c 74 20 6f 70 63 6f 64 65 20 65 78 63 65 70   Lt opcode excep
ff70: 74 20 74 68 61 74 20 74 68 65 20 6a 75 6d 70 20  t that the jump 
ff80: 69 73 20 74 61 6b 65 6e 20 69 66 0a 2a 2a 20 74  is taken if.** t
ff90: 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 72 65  he content of re
ffa0: 67 69 73 74 65 72 20 50 33 20 69 73 20 67 72 65  gister P3 is gre
ffb0: 61 74 65 72 20 74 68 61 6e 20 74 68 65 20 63 6f  ater than the co
ffc0: 6e 74 65 6e 74 20 6f 66 0a 2a 2a 20 72 65 67 69  ntent of.** regi
ffd0: 73 74 65 72 20 50 31 2e 20 20 53 65 65 20 74 68  ster P1.  See th
ffe0: 65 20 4c 74 20 6f 70 63 6f 64 65 20 66 6f 72 20  e Lt opcode for 
fff0: 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72  additional infor
10000 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 2f 2a 20 4f 70  mation..*/./* Op
10010 63 6f 64 65 3a 20 47 65 20 50 31 20 50 32 20 50  code: Ge P1 P2 P
10020 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70  3 P4 P5.** Synop
10030 73 69 73 3a 20 49 46 20 72 5b 50 33 5d 3e 3d 72  sis: IF r[P3]>=r
10040 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20  [P1].**.** This 
10050 77 6f 72 6b 73 20 6a 75 73 74 20 6c 69 6b 65 20  works just like 
10060 74 68 65 20 4c 74 20 6f 70 63 6f 64 65 20 65 78  the Lt opcode ex
10070 63 65 70 74 20 74 68 61 74 20 74 68 65 20 6a 75  cept that the ju
10080 6d 70 20 69 73 20 74 61 6b 65 6e 20 69 66 0a 2a  mp is taken if.*
10090 2a 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66  * the content of
100a0 20 72 65 67 69 73 74 65 72 20 50 33 20 69 73 20   register P3 is 
100b0 67 72 65 61 74 65 72 20 74 68 61 6e 20 6f 72 20  greater than or 
100c0 65 71 75 61 6c 20 74 6f 20 74 68 65 20 63 6f 6e  equal to the con
100d0 74 65 6e 74 20 6f 66 0a 2a 2a 20 72 65 67 69 73  tent of.** regis
100e0 74 65 72 20 50 31 2e 20 20 53 65 65 20 74 68 65  ter P1.  See the
100f0 20 4c 74 20 6f 70 63 6f 64 65 20 66 6f 72 20 61   Lt opcode for a
10100 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d  dditional inform
10110 61 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f  ation..*/.case O
10120 50 5f 45 71 3a 20 20 20 20 20 20 20 20 20 20 20  P_Eq:           
10130 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54      /* same as T
10140 4b 5f 45 51 2c 20 6a 75 6d 70 2c 20 69 6e 31 2c  K_EQ, jump, in1,
10150 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f   in3 */.case OP_
10160 4e 65 3a 20 20 20 20 20 20 20 20 20 20 20 20 20  Ne:             
10170 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f    /* same as TK_
10180 4e 45 2c 20 6a 75 6d 70 2c 20 69 6e 31 2c 20 69  NE, jump, in1, i
10190 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 4c 74  n3 */.case OP_Lt
101a0 3a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  :               
101b0 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 4c 54  /* same as TK_LT
101c0 2c 20 6a 75 6d 70 2c 20 69 6e 31 2c 20 69 6e 33  , jump, in1, in3
101d0 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 4c 65 3a 20   */.case OP_Le: 
101e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
101f0 20 73 61 6d 65 20 61 73 20 54 4b 5f 4c 45 2c 20   same as TK_LE, 
10200 6a 75 6d 70 2c 20 69 6e 31 2c 20 69 6e 33 20 2a  jump, in1, in3 *
10210 2f 0a 63 61 73 65 20 4f 50 5f 47 74 3a 20 20 20  /.case OP_Gt:   
10220 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73              /* s
10230 61 6d 65 20 61 73 20 54 4b 5f 47 54 2c 20 6a 75  ame as TK_GT, ju
10240 6d 70 2c 20 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a  mp, in1, in3 */.
10250 63 61 73 65 20 4f 50 5f 47 65 3a 20 7b 20 20 20  case OP_Ge: {   
10260 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d            /* sam
10270 65 20 61 73 20 54 4b 5f 47 45 2c 20 6a 75 6d 70  e as TK_GE, jump
10280 2c 20 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a 20 20  , in1, in3 */.  
10290 69 6e 74 20 72 65 73 2c 20 72 65 73 32 3b 20 20  int res, res2;  
102a0 20 20 20 20 2f 2a 20 52 65 73 75 6c 74 20 6f 66      /* Result of
102b0 20 74 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e 20   the comparison 
102c0 6f 66 20 70 49 6e 31 20 61 67 61 69 6e 73 74 20  of pIn1 against 
102d0 70 49 6e 33 20 2a 2f 0a 20 20 63 68 61 72 20 61  pIn3 */.  char a
102e0 66 66 69 6e 69 74 79 3b 20 20 20 20 20 20 2f 2a  ffinity;      /*
102f0 20 41 66 66 69 6e 69 74 79 20 74 6f 20 75 73 65   Affinity to use
10300 20 66 6f 72 20 63 6f 6d 70 61 72 69 73 6f 6e 20   for comparison 
10310 2a 2f 0a 20 20 75 31 36 20 66 6c 61 67 73 31 3b  */.  u16 flags1;
10320 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 70 79           /* Copy
10330 20 6f 66 20 69 6e 69 74 69 61 6c 20 76 61 6c 75   of initial valu
10340 65 20 6f 66 20 70 49 6e 31 2d 3e 66 6c 61 67 73  e of pIn1->flags
10350 20 2a 2f 0a 20 20 75 31 36 20 66 6c 61 67 73 33   */.  u16 flags3
10360 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 70  ;         /* Cop
10370 79 20 6f 66 20 69 6e 69 74 69 61 6c 20 76 61 6c  y of initial val
10380 75 65 20 6f 66 20 70 49 6e 33 2d 3e 66 6c 61 67  ue of pIn3->flag
10390 73 20 2a 2f 0a 0a 20 20 70 49 6e 31 20 3d 20 26  s */..  pIn1 = &
103a0 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  aMem[pOp->p1];. 
103b0 20 70 49 6e 33 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn3 = &aMem[pO
103c0 70 2d 3e 70 33 5d 3b 0a 20 20 66 6c 61 67 73 31  p->p3];.  flags1
103d0 20 3d 20 70 49 6e 31 2d 3e 66 6c 61 67 73 3b 0a   = pIn1->flags;.
103e0 20 20 66 6c 61 67 73 33 20 3d 20 70 49 6e 33 2d    flags3 = pIn3-
103f0 3e 66 6c 61 67 73 3b 0a 20 20 69 66 28 20 28 66  >flags;.  if( (f
10400 6c 61 67 73 31 20 7c 20 66 6c 61 67 73 33 29 26  lags1 | flags3)&
10410 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20  MEM_Null ){.    
10420 2f 2a 20 4f 6e 65 20 6f 72 20 62 6f 74 68 20 6f  /* One or both o
10430 70 65 72 61 6e 64 73 20 61 72 65 20 4e 55 4c 4c  perands are NULL
10440 20 2a 2f 0a 20 20 20 20 69 66 28 20 70 4f 70 2d   */.    if( pOp-
10450 3e 70 35 20 26 20 53 51 4c 49 54 45 5f 4e 55 4c  >p5 & SQLITE_NUL
10460 4c 45 51 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20  LEQ ){.      /* 
10470 49 66 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51  If SQLITE_NULLEQ
10480 20 69 73 20 73 65 74 20 28 77 68 69 63 68 20 77   is set (which w
10490 69 6c 6c 20 6f 6e 6c 79 20 68 61 70 70 65 6e 20  ill only happen 
104a0 69 66 20 74 68 65 20 6f 70 65 72 61 74 6f 72 20  if the operator 
104b0 69 73 0a 20 20 20 20 20 20 2a 2a 20 4f 50 5f 45  is.      ** OP_E
104c0 71 20 6f 72 20 4f 50 5f 4e 65 29 20 74 68 65 6e  q or OP_Ne) then
104d0 20 74 61 6b 65 20 74 68 65 20 6a 75 6d 70 20 6f   take the jump o
104e0 72 20 6e 6f 74 20 64 65 70 65 6e 64 69 6e 67 20  r not depending 
104f0 6f 6e 20 77 68 65 74 68 65 72 0a 20 20 20 20 20  on whether.     
10500 20 2a 2a 20 6f 72 20 6e 6f 74 20 62 6f 74 68 20   ** or not both 
10510 6f 70 65 72 61 6e 64 73 20 61 72 65 20 6e 75 6c  operands are nul
10520 6c 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20  l..      */.    
10530 20 20 61 73 73 65 72 74 28 20 28 66 6c 61 67 73    assert( (flags
10540 31 20 26 20 4d 45 4d 5f 43 6c 65 61 72 65 64 29  1 & MEM_Cleared)
10550 3d 3d 30 20 29 3b 0a 20 20 20 20 20 20 61 73 73  ==0 );.      ass
10560 65 72 74 28 20 28 70 4f 70 2d 3e 70 35 20 26 20  ert( (pOp->p5 & 
10570 53 51 4c 49 54 45 5f 4a 55 4d 50 49 46 4e 55 4c  SQLITE_JUMPIFNUL
10580 4c 29 3d 3d 30 20 7c 7c 20 43 4f 52 52 55 50 54  L)==0 || CORRUPT
10590 5f 44 42 20 29 3b 0a 20 20 20 20 20 20 74 65 73  _DB );.      tes
105a0 74 63 61 73 65 28 20 28 70 4f 70 2d 3e 70 35 20  tcase( (pOp->p5 
105b0 26 20 53 51 4c 49 54 45 5f 4a 55 4d 50 49 46 4e  & SQLITE_JUMPIFN
105c0 55 4c 4c 29 21 3d 30 20 29 3b 0a 20 20 20 20 20  ULL)!=0 );.     
105d0 20 69 66 28 20 28 66 6c 61 67 73 31 26 66 6c 61   if( (flags1&fla
105e0 67 73 33 26 4d 45 4d 5f 4e 75 6c 6c 29 21 3d 30  gs3&MEM_Null)!=0
105f0 0a 20 20 20 20 20 20 20 26 26 20 28 66 6c 61 67  .       && (flag
10600 73 33 26 4d 45 4d 5f 43 6c 65 61 72 65 64 29 3d  s3&MEM_Cleared)=
10610 3d 30 0a 20 20 20 20 20 20 29 7b 0a 20 20 20 20  =0.      ){.    
10620 20 20 20 20 72 65 73 20 3d 20 30 3b 20 20 2f 2a      res = 0;  /*
10630 20 4f 70 65 72 61 6e 64 73 20 61 72 65 20 65 71   Operands are eq
10640 75 61 6c 20 2a 2f 0a 20 20 20 20 20 20 7d 65 6c  ual */.      }el
10650 73 65 7b 0a 20 20 20 20 20 20 20 20 72 65 73 20  se{.        res 
10660 3d 20 28 28 66 6c 61 67 73 33 20 26 20 4d 45 4d  = ((flags3 & MEM
10670 5f 4e 75 6c 6c 29 20 3f 20 2d 31 20 3a 20 2b 31  _Null) ? -1 : +1
10680 29 3b 20 20 2f 2a 20 4f 70 65 72 61 6e 64 73 20  );  /* Operands 
10690 61 72 65 20 6e 6f 74 20 65 71 75 61 6c 20 2a 2f  are not equal */
106a0 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 65 6c  .      }.    }el
106b0 73 65 7b 0a 20 20 20 20 20 20 2f 2a 20 53 51 4c  se{.      /* SQL
106c0 49 54 45 5f 4e 55 4c 4c 45 51 20 69 73 20 63 6c  ITE_NULLEQ is cl
106d0 65 61 72 20 61 6e 64 20 61 74 20 6c 65 61 73 74  ear and at least
106e0 20 6f 6e 65 20 6f 70 65 72 61 6e 64 20 69 73 20   one operand is 
106f0 4e 55 4c 4c 2c 0a 20 20 20 20 20 20 2a 2a 20 74  NULL,.      ** t
10700 68 65 6e 20 74 68 65 20 72 65 73 75 6c 74 20 69  hen the result i
10710 73 20 61 6c 77 61 79 73 20 4e 55 4c 4c 2e 0a 20  s always NULL.. 
10720 20 20 20 20 20 2a 2a 20 54 68 65 20 6a 75 6d 70       ** The jump
10730 20 69 73 20 74 61 6b 65 6e 20 69 66 20 74 68 65   is taken if the
10740 20 53 51 4c 49 54 45 5f 4a 55 4d 50 49 46 4e 55   SQLITE_JUMPIFNU
10750 4c 4c 20 62 69 74 20 69 73 20 73 65 74 2e 0a 20  LL bit is set.. 
10760 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 69 66       */.      if
10770 28 20 70 4f 70 2d 3e 70 35 20 26 20 53 51 4c 49  ( pOp->p5 & SQLI
10780 54 45 5f 53 54 4f 52 45 50 32 20 29 7b 0a 20 20  TE_STOREP2 ){.  
10790 20 20 20 20 20 20 70 4f 75 74 20 3d 20 26 61 4d        pOut = &aM
107a0 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 20  em[pOp->p2];.   
107b0 20 20 20 20 20 69 43 6f 6d 70 61 72 65 20 3d 20       iCompare = 
107c0 31 3b 20 20 20 20 2f 2a 20 4f 70 65 72 61 6e 64  1;    /* Operand
107d0 73 20 61 72 65 20 6e 6f 74 20 65 71 75 61 6c 20  s are not equal 
107e0 2a 2f 0a 20 20 20 20 20 20 20 20 6d 65 6d 41 62  */.        memAb
107f0 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70  outToChange(p, p
10800 4f 75 74 29 3b 0a 20 20 20 20 20 20 20 20 4d 65  Out);.        Me
10810 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70 4f 75  mSetTypeFlag(pOu
10820 74 2c 20 4d 45 4d 5f 4e 75 6c 6c 29 3b 0a 20 20  t, MEM_Null);.  
10830 20 20 20 20 20 20 52 45 47 49 53 54 45 52 5f 54        REGISTER_T
10840 52 41 43 45 28 70 4f 70 2d 3e 70 32 2c 20 70 4f  RACE(pOp->p2, pO
10850 75 74 29 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65  ut);.      }else
10860 7b 0a 20 20 20 20 20 20 20 20 56 64 62 65 42 72  {.        VdbeBr
10870 61 6e 63 68 54 61 6b 65 6e 28 32 2c 33 29 3b 0a  anchTaken(2,3);.
10880 20 20 20 20 20 20 20 20 69 66 28 20 70 4f 70 2d          if( pOp-
10890 3e 70 35 20 26 20 53 51 4c 49 54 45 5f 4a 55 4d  >p5 & SQLITE_JUM
108a0 50 49 46 4e 55 4c 4c 20 29 7b 0a 20 20 20 20 20  PIFNULL ){.     
108b0 20 20 20 20 20 67 6f 74 6f 20 6a 75 6d 70 5f 74       goto jump_t
108c0 6f 5f 70 32 3b 0a 20 20 20 20 20 20 20 20 7d 0a  o_p2;.        }.
108d0 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 62 72        }.      br
108e0 65 61 6b 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c  eak;.    }.  }el
108f0 73 65 7b 0a 20 20 20 20 2f 2a 20 4e 65 69 74 68  se{.    /* Neith
10900 65 72 20 6f 70 65 72 61 6e 64 20 69 73 20 4e 55  er operand is NU
10910 4c 4c 2e 20 20 44 6f 20 61 20 63 6f 6d 70 61 72  LL.  Do a compar
10920 69 73 6f 6e 2e 20 2a 2f 0a 20 20 20 20 61 66 66  ison. */.    aff
10930 69 6e 69 74 79 20 3d 20 70 4f 70 2d 3e 70 35 20  inity = pOp->p5 
10940 26 20 53 51 4c 49 54 45 5f 41 46 46 5f 4d 41 53  & SQLITE_AFF_MAS
10950 4b 3b 0a 20 20 20 20 69 66 28 20 61 66 66 69 6e  K;.    if( affin
10960 69 74 79 3e 3d 53 51 4c 49 54 45 5f 41 46 46 5f  ity>=SQLITE_AFF_
10970 4e 55 4d 45 52 49 43 20 29 7b 0a 20 20 20 20 20  NUMERIC ){.     
10980 20 69 66 28 20 28 66 6c 61 67 73 31 20 7c 20 66   if( (flags1 | f
10990 6c 61 67 73 33 29 26 4d 45 4d 5f 53 74 72 20 29  lags3)&MEM_Str )
109a0 7b 0a 20 20 20 20 20 20 20 20 69 66 28 20 28 66  {.        if( (f
109b0 6c 61 67 73 31 20 26 20 28 4d 45 4d 5f 49 6e 74  lags1 & (MEM_Int
109c0 7c 4d 45 4d 5f 49 6e 74 52 65 61 6c 7c 4d 45 4d  |MEM_IntReal|MEM
109d0 5f 52 65 61 6c 7c 4d 45 4d 5f 53 74 72 29 29 3d  _Real|MEM_Str))=
109e0 3d 4d 45 4d 5f 53 74 72 20 29 7b 0a 20 20 20 20  =MEM_Str ){.    
109f0 20 20 20 20 20 20 61 70 70 6c 79 4e 75 6d 65 72        applyNumer
10a00 69 63 41 66 66 69 6e 69 74 79 28 70 49 6e 31 2c  icAffinity(pIn1,
10a10 30 29 3b 0a 20 20 20 20 20 20 20 20 20 20 61 73  0);.          as
10a20 73 65 72 74 28 20 66 6c 61 67 73 33 3d 3d 70 49  sert( flags3==pI
10a30 6e 33 2d 3e 66 6c 61 67 73 20 29 3b 0a 20 20 20  n3->flags );.   
10a40 20 20 20 20 20 20 20 2f 2a 20 74 65 73 74 63 61         /* testca
10a50 73 65 28 20 66 6c 61 67 73 33 21 3d 70 49 6e 33  se( flags3!=pIn3
10a60 2d 3e 66 6c 61 67 73 20 29 3b 0a 20 20 20 20 20  ->flags );.     
10a70 20 20 20 20 20 2a 2a 20 74 68 69 73 20 75 73 65       ** this use
10a80 64 20 74 6f 20 62 65 20 70 6f 73 73 69 62 6c 65  d to be possible
10a90 20 77 69 74 68 20 70 49 6e 31 3d 3d 70 49 6e 33   with pIn1==pIn3
10aa0 2c 20 62 75 74 20 6e 6f 74 20 73 69 6e 63 65 0a  , but not since.
10ab0 20 20 20 20 20 20 20 20 20 20 2a 2a 20 74 68 65            ** the
10ac0 20 63 6f 6c 75 6d 6e 20 63 61 63 68 65 20 77 61   column cache wa
10ad0 73 20 72 65 6d 6f 76 65 64 2e 20 20 54 68 65 20  s removed.  The 
10ae0 66 6f 6c 6c 6f 77 69 6e 67 20 61 73 73 69 67 6e  following assign
10af0 6d 65 6e 74 0a 20 20 20 20 20 20 20 20 20 20 2a  ment.          *
10b00 2a 20 69 73 20 65 73 73 65 6e 74 69 61 6c 6c 79  * is essentially
10b10 20 61 20 6e 6f 2d 6f 70 2e 20 20 42 75 74 2c 20   a no-op.  But, 
10b20 69 74 20 70 72 6f 76 69 64 65 73 20 64 65 66 65  it provides defe
10b30 6e 73 65 2d 69 6e 2d 64 65 70 74 68 0a 20 20 20  nse-in-depth.   
10b40 20 20 20 20 20 20 20 2a 2a 20 69 6e 20 63 61 73         ** in cas
10b50 65 20 6f 75 72 20 61 6e 61 6c 79 73 69 73 20 69  e our analysis i
10b60 73 20 69 6e 63 6f 72 72 65 63 74 2c 20 73 6f 20  s incorrect, so 
10b70 69 74 20 69 73 20 6c 65 66 74 20 69 6e 2e 20 2a  it is left in. *
10b80 2f 0a 20 20 20 20 20 20 20 20 20 20 66 6c 61 67  /.          flag
10b90 73 33 20 3d 20 70 49 6e 33 2d 3e 66 6c 61 67 73  s3 = pIn3->flags
10ba0 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  ;.        }.    
10bb0 20 20 20 20 69 66 28 20 28 66 6c 61 67 73 33 20      if( (flags3 
10bc0 26 20 28 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 49  & (MEM_Int|MEM_I
10bd0 6e 74 52 65 61 6c 7c 4d 45 4d 5f 52 65 61 6c 7c  ntReal|MEM_Real|
10be0 4d 45 4d 5f 53 74 72 29 29 3d 3d 4d 45 4d 5f 53  MEM_Str))==MEM_S
10bf0 74 72 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  tr ){.          
10c00 61 70 70 6c 79 4e 75 6d 65 72 69 63 41 66 66 69  applyNumericAffi
10c10 6e 69 74 79 28 70 49 6e 33 2c 30 29 3b 0a 20 20  nity(pIn3,0);.  
10c20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a        }.      }.
10c30 20 20 20 20 20 20 2f 2a 20 48 61 6e 64 6c 65 20        /* Handle 
10c40 74 68 65 20 63 6f 6d 6d 6f 6e 20 63 61 73 65 20  the common case 
10c50 6f 66 20 69 6e 74 65 67 65 72 20 63 6f 6d 70 61  of integer compa
10c60 72 69 73 6f 6e 20 68 65 72 65 2c 20 61 73 20 61  rison here, as a
10c70 6e 0a 20 20 20 20 20 20 2a 2a 20 6f 70 74 69 6d  n.      ** optim
10c80 69 7a 61 74 69 6f 6e 2c 20 74 6f 20 61 76 6f 69  ization, to avoi
10c90 64 20 61 20 63 61 6c 6c 20 74 6f 20 73 71 6c 69  d a call to sqli
10ca0 74 65 33 4d 65 6d 43 6f 6d 70 61 72 65 28 29 20  te3MemCompare() 
10cb0 2a 2f 0a 20 20 20 20 20 20 69 66 28 20 28 70 49  */.      if( (pI
10cc0 6e 31 2d 3e 66 6c 61 67 73 20 26 20 70 49 6e 33  n1->flags & pIn3
10cd0 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e  ->flags & MEM_In
10ce0 74 29 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 20  t)!=0 ){.       
10cf0 20 69 66 28 20 70 49 6e 33 2d 3e 75 2e 69 20 3e   if( pIn3->u.i >
10d00 20 70 49 6e 31 2d 3e 75 2e 69 20 29 7b 20 72 65   pIn1->u.i ){ re
10d10 73 20 3d 20 2b 31 3b 20 67 6f 74 6f 20 63 6f 6d  s = +1; goto com
10d20 70 61 72 65 5f 6f 70 3b 20 7d 0a 20 20 20 20 20  pare_op; }.     
10d30 20 20 20 69 66 28 20 70 49 6e 33 2d 3e 75 2e 69     if( pIn3->u.i
10d40 20 3c 20 70 49 6e 31 2d 3e 75 2e 69 20 29 7b 20   < pIn1->u.i ){ 
10d50 72 65 73 20 3d 20 2d 31 3b 20 67 6f 74 6f 20 63  res = -1; goto c
10d60 6f 6d 70 61 72 65 5f 6f 70 3b 20 7d 0a 20 20 20  ompare_op; }.   
10d70 20 20 20 20 20 72 65 73 20 3d 20 30 3b 0a 20 20       res = 0;.  
10d80 20 20 20 20 20 20 67 6f 74 6f 20 63 6f 6d 70 61        goto compa
10d90 72 65 5f 6f 70 3b 0a 20 20 20 20 20 20 7d 0a 20  re_op;.      }. 
10da0 20 20 20 7d 65 6c 73 65 20 69 66 28 20 61 66 66     }else if( aff
10db0 69 6e 69 74 79 3d 3d 53 51 4c 49 54 45 5f 41 46  inity==SQLITE_AF
10dc0 46 5f 54 45 58 54 20 29 7b 0a 20 20 20 20 20 20  F_TEXT ){.      
10dd0 69 66 28 20 28 66 6c 61 67 73 31 20 26 20 4d 45  if( (flags1 & ME
10de0 4d 5f 53 74 72 29 3d 3d 30 20 26 26 20 28 66 6c  M_Str)==0 && (fl
10df0 61 67 73 31 26 28 4d 45 4d 5f 49 6e 74 7c 4d 45  ags1&(MEM_Int|ME
10e00 4d 5f 52 65 61 6c 7c 4d 45 4d 5f 49 6e 74 52 65  M_Real|MEM_IntRe
10e10 61 6c 29 29 21 3d 30 20 29 7b 0a 20 20 20 20 20  al))!=0 ){.     
10e20 20 20 20 74 65 73 74 63 61 73 65 28 20 70 49 6e     testcase( pIn
10e30 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49  1->flags & MEM_I
10e40 6e 74 20 29 3b 0a 20 20 20 20 20 20 20 20 74 65  nt );.        te
10e50 73 74 63 61 73 65 28 20 70 49 6e 31 2d 3e 66 6c  stcase( pIn1->fl
10e60 61 67 73 20 26 20 4d 45 4d 5f 52 65 61 6c 20 29  ags & MEM_Real )
10e70 3b 0a 20 20 20 20 20 20 20 20 74 65 73 74 63 61  ;.        testca
10e80 73 65 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20  se( pIn1->flags 
10e90 26 20 4d 45 4d 5f 49 6e 74 52 65 61 6c 20 29 3b  & MEM_IntReal );
10ea0 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
10eb0 56 64 62 65 4d 65 6d 53 74 72 69 6e 67 69 66 79  VdbeMemStringify
10ec0 28 70 49 6e 31 2c 20 65 6e 63 6f 64 69 6e 67 2c  (pIn1, encoding,
10ed0 20 31 29 3b 0a 20 20 20 20 20 20 20 20 74 65 73   1);.        tes
10ee0 74 63 61 73 65 28 20 28 66 6c 61 67 73 31 26 4d  tcase( (flags1&M
10ef0 45 4d 5f 44 79 6e 29 20 21 3d 20 28 70 49 6e 31  EM_Dyn) != (pIn1
10f00 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 44 79 6e 29  ->flags&MEM_Dyn)
10f10 20 29 3b 0a 20 20 20 20 20 20 20 20 66 6c 61 67   );.        flag
10f20 73 31 20 3d 20 28 70 49 6e 31 2d 3e 66 6c 61 67  s1 = (pIn1->flag
10f30 73 20 26 20 7e 4d 45 4d 5f 54 79 70 65 4d 61 73  s & ~MEM_TypeMas
10f40 6b 29 20 7c 20 28 66 6c 61 67 73 31 20 26 20 4d  k) | (flags1 & M
10f50 45 4d 5f 54 79 70 65 4d 61 73 6b 29 3b 0a 20 20  EM_TypeMask);.  
10f60 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70 49        assert( pI
10f70 6e 31 21 3d 70 49 6e 33 20 29 3b 0a 20 20 20 20  n1!=pIn3 );.    
10f80 20 20 7d 0a 20 20 20 20 20 20 69 66 28 20 28 66    }.      if( (f
10f90 6c 61 67 73 33 20 26 20 4d 45 4d 5f 53 74 72 29  lags3 & MEM_Str)
10fa0 3d 3d 30 20 26 26 20 28 66 6c 61 67 73 33 26 28  ==0 && (flags3&(
10fb0 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 52 65 61 6c  MEM_Int|MEM_Real
10fc0 7c 4d 45 4d 5f 49 6e 74 52 65 61 6c 29 29 21 3d  |MEM_IntReal))!=
10fd0 30 20 29 7b 0a 20 20 20 20 20 20 20 20 74 65 73  0 ){.        tes
10fe0 74 63 61 73 65 28 20 70 49 6e 33 2d 3e 66 6c 61  tcase( pIn3->fla
10ff0 67 73 20 26 20 4d 45 4d 5f 49 6e 74 20 29 3b 0a  gs & MEM_Int );.
11000 20 20 20 20 20 20 20 20 74 65 73 74 63 61 73 65          testcase
11010 28 20 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20  ( pIn3->flags & 
11020 4d 45 4d 5f 52 65 61 6c 20 29 3b 0a 20 20 20 20  MEM_Real );.    
11030 20 20 20 20 74 65 73 74 63 61 73 65 28 20 70 49      testcase( pI
11040 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  n3->flags & MEM_
11050 49 6e 74 52 65 61 6c 20 29 3b 0a 20 20 20 20 20  IntReal );.     
11060 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
11070 6d 53 74 72 69 6e 67 69 66 79 28 70 49 6e 33 2c  mStringify(pIn3,
11080 20 65 6e 63 6f 64 69 6e 67 2c 20 31 29 3b 0a 20   encoding, 1);. 
11090 20 20 20 20 20 20 20 74 65 73 74 63 61 73 65 28         testcase(
110a0 20 28 66 6c 61 67 73 33 26 4d 45 4d 5f 44 79 6e   (flags3&MEM_Dyn
110b0 29 20 21 3d 20 28 70 49 6e 33 2d 3e 66 6c 61 67  ) != (pIn3->flag
110c0 73 26 4d 45 4d 5f 44 79 6e 29 20 29 3b 0a 20 20  s&MEM_Dyn) );.  
110d0 20 20 20 20 20 20 66 6c 61 67 73 33 20 3d 20 28        flags3 = (
110e0 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20 7e 4d  pIn3->flags & ~M
110f0 45 4d 5f 54 79 70 65 4d 61 73 6b 29 20 7c 20 28  EM_TypeMask) | (
11100 66 6c 61 67 73 33 20 26 20 4d 45 4d 5f 54 79 70  flags3 & MEM_Typ
11110 65 4d 61 73 6b 29 3b 0a 20 20 20 20 20 20 7d 0a  eMask);.      }.
11120 20 20 20 20 7d 0a 20 20 20 20 61 73 73 65 72 74      }.    assert
11130 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50  ( pOp->p4type==P
11140 34 5f 43 4f 4c 4c 53 45 51 20 7c 7c 20 70 4f 70  4_COLLSEQ || pOp
11150 2d 3e 70 34 2e 70 43 6f 6c 6c 3d 3d 30 20 29 3b  ->p4.pColl==0 );
11160 0a 20 20 20 20 72 65 73 20 3d 20 73 71 6c 69 74  .    res = sqlit
11170 65 33 4d 65 6d 43 6f 6d 70 61 72 65 28 70 49 6e  e3MemCompare(pIn
11180 33 2c 20 70 49 6e 31 2c 20 70 4f 70 2d 3e 70 34  3, pIn1, pOp->p4
11190 2e 70 43 6f 6c 6c 29 3b 0a 20 20 7d 0a 63 6f 6d  .pColl);.  }.com
111a0 70 61 72 65 5f 6f 70 3a 0a 20 20 2f 2a 20 41 74  pare_op:.  /* At
111b0 20 74 68 69 73 20 70 6f 69 6e 74 2c 20 72 65 73   this point, res
111c0 20 69 73 20 6e 65 67 61 74 69 76 65 2c 20 7a 65   is negative, ze
111d0 72 6f 2c 20 6f 72 20 70 6f 73 69 74 69 76 65 20  ro, or positive 
111e0 69 66 20 72 65 67 5b 50 31 5d 20 69 73 0a 20 20  if reg[P1] is.  
111f0 2a 2a 20 6c 65 73 73 20 74 68 61 6e 2c 20 65 71  ** less than, eq
11200 75 61 6c 20 74 6f 2c 20 6f 72 20 67 72 65 61 74  ual to, or great
11210 65 72 20 74 68 61 6e 20 72 65 67 5b 50 33 5d 2c  er than reg[P3],
11220 20 72 65 73 70 65 63 74 69 76 65 6c 79 2e 20 20   respectively.  
11230 43 6f 6d 70 75 74 65 0a 20 20 2a 2a 20 74 68 65  Compute.  ** the
11240 20 61 6e 73 77 65 72 20 74 6f 20 74 68 69 73 20   answer to this 
11250 6f 70 65 72 61 74 6f 72 20 69 6e 20 72 65 73 32  operator in res2
11260 2c 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20 77  , depending on w
11270 68 61 74 20 74 68 65 20 63 6f 6d 70 61 72 69 73  hat the comparis
11280 6f 6e 0a 20 20 2a 2a 20 6f 70 65 72 61 74 6f 72  on.  ** operator
11290 20 61 63 74 75 61 6c 6c 79 20 69 73 2e 20 20 54   actually is.  T
112a0 68 65 20 6e 65 78 74 20 62 6c 6f 63 6b 20 6f 66  he next block of
112b0 20 63 6f 64 65 20 64 65 70 65 6e 64 73 20 6f 6e   code depends on
112c0 20 74 68 65 20 66 61 63 74 0a 20 20 2a 2a 20 74   the fact.  ** t
112d0 68 61 74 20 74 68 65 20 36 20 63 6f 6d 70 61 72  hat the 6 compar
112e0 69 73 6f 6e 20 6f 70 65 72 61 74 6f 72 73 20 61  ison operators a
112f0 72 65 20 63 6f 6e 73 65 63 75 74 69 76 65 20 69  re consecutive i
11300 6e 74 65 67 65 72 73 20 69 6e 20 74 68 69 73 0a  ntegers in this.
11310 20 20 2a 2a 20 6f 72 64 65 72 3a 20 20 4e 45 2c    ** order:  NE,
11320 20 45 51 2c 20 47 54 2c 20 4c 45 2c 20 4c 54 2c   EQ, GT, LE, LT,
11330 20 47 45 20 2a 2f 0a 20 20 61 73 73 65 72 74 28   GE */.  assert(
11340 20 4f 50 5f 45 71 3d 3d 4f 50 5f 4e 65 2b 31 20   OP_Eq==OP_Ne+1 
11350 29 3b 20 61 73 73 65 72 74 28 20 4f 50 5f 47 74  ); assert( OP_Gt
11360 3d 3d 4f 50 5f 4e 65 2b 32 20 29 3b 20 61 73 73  ==OP_Ne+2 ); ass
11370 65 72 74 28 20 4f 50 5f 4c 65 3d 3d 4f 50 5f 4e  ert( OP_Le==OP_N
11380 65 2b 33 20 29 3b 0a 20 20 61 73 73 65 72 74 28  e+3 );.  assert(
11390 20 4f 50 5f 4c 74 3d 3d 4f 50 5f 4e 65 2b 34 20   OP_Lt==OP_Ne+4 
113a0 29 3b 20 61 73 73 65 72 74 28 20 4f 50 5f 47 65  ); assert( OP_Ge
113b0 3d 3d 4f 50 5f 4e 65 2b 35 20 29 3b 0a 20 20 69  ==OP_Ne+5 );.  i
113c0 66 28 20 72 65 73 3c 30 20 29 7b 20 20 20 20 20  f( res<0 ){     
113d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
113e0 20 20 20 2f 2a 20 6e 65 2c 20 65 71 2c 20 67 74     /* ne, eq, gt
113f0 2c 20 6c 65 2c 20 6c 74 2c 20 67 65 20 2a 2f 0a  , le, lt, ge */.
11400 20 20 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74      static const
11410 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 61   unsigned char a
11420 4c 54 62 5b 5d 20 3d 20 7b 20 31 2c 20 20 30 2c  LTb[] = { 1,  0,
11430 20 20 30 2c 20 20 31 2c 20 20 31 2c 20 20 30 20    0,  1,  1,  0 
11440 7d 3b 0a 20 20 20 20 72 65 73 32 20 3d 20 61 4c  };.    res2 = aL
11450 54 62 5b 70 4f 70 2d 3e 6f 70 63 6f 64 65 20 2d  Tb[pOp->opcode -
11460 20 4f 50 5f 4e 65 5d 3b 0a 20 20 7d 65 6c 73 65   OP_Ne];.  }else
11470 20 69 66 28 20 72 65 73 3d 3d 30 20 29 7b 0a 20   if( res==0 ){. 
11480 20 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20     static const 
11490 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 61 45  unsigned char aE
114a0 51 62 5b 5d 20 3d 20 7b 20 30 2c 20 20 31 2c 20  Qb[] = { 0,  1, 
114b0 20 30 2c 20 20 31 2c 20 20 30 2c 20 20 31 20 7d   0,  1,  0,  1 }
114c0 3b 0a 20 20 20 20 72 65 73 32 20 3d 20 61 45 51  ;.    res2 = aEQ
114d0 62 5b 70 4f 70 2d 3e 6f 70 63 6f 64 65 20 2d 20  b[pOp->opcode - 
114e0 4f 50 5f 4e 65 5d 3b 0a 20 20 7d 65 6c 73 65 7b  OP_Ne];.  }else{
114f0 0a 20 20 20 20 73 74 61 74 69 63 20 63 6f 6e 73  .    static cons
11500 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20  t unsigned char 
11510 61 47 54 62 5b 5d 20 3d 20 7b 20 31 2c 20 20 30  aGTb[] = { 1,  0
11520 2c 20 20 31 2c 20 20 30 2c 20 20 30 2c 20 20 31  ,  1,  0,  0,  1
11530 20 7d 3b 0a 20 20 20 20 72 65 73 32 20 3d 20 61   };.    res2 = a
11540 47 54 62 5b 70 4f 70 2d 3e 6f 70 63 6f 64 65 20  GTb[pOp->opcode 
11550 2d 20 4f 50 5f 4e 65 5d 3b 0a 20 20 7d 0a 0a 20  - OP_Ne];.  }.. 
11560 20 2f 2a 20 55 6e 64 6f 20 61 6e 79 20 63 68 61   /* Undo any cha
11570 6e 67 65 73 20 6d 61 64 65 20 62 79 20 61 70 70  nges made by app
11580 6c 79 41 66 66 69 6e 69 74 79 28 29 20 74 6f 20  lyAffinity() to 
11590 74 68 65 20 69 6e 70 75 74 20 72 65 67 69 73 74  the input regist
115a0 65 72 73 2e 20 2a 2f 0a 20 20 61 73 73 65 72 74  ers. */.  assert
115b0 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26  ( (pIn1->flags &
115c0 20 4d 45 4d 5f 44 79 6e 29 20 3d 3d 20 28 66 6c   MEM_Dyn) == (fl
115d0 61 67 73 31 20 26 20 4d 45 4d 5f 44 79 6e 29 20  ags1 & MEM_Dyn) 
115e0 29 3b 0a 20 20 70 49 6e 31 2d 3e 66 6c 61 67 73  );.  pIn1->flags
115f0 20 3d 20 66 6c 61 67 73 31 3b 0a 20 20 61 73 73   = flags1;.  ass
11600 65 72 74 28 20 28 70 49 6e 33 2d 3e 66 6c 61 67  ert( (pIn3->flag
11610 73 20 26 20 4d 45 4d 5f 44 79 6e 29 20 3d 3d 20  s & MEM_Dyn) == 
11620 28 66 6c 61 67 73 33 20 26 20 4d 45 4d 5f 44 79  (flags3 & MEM_Dy
11630 6e 29 20 29 3b 0a 20 20 70 49 6e 33 2d 3e 66 6c  n) );.  pIn3->fl
11640 61 67 73 20 3d 20 66 6c 61 67 73 33 3b 0a 0a 20  ags = flags3;.. 
11650 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 26 20 53   if( pOp->p5 & S
11660 51 4c 49 54 45 5f 53 54 4f 52 45 50 32 20 29 7b  QLITE_STOREP2 ){
11670 0a 20 20 20 20 70 4f 75 74 20 3d 20 26 61 4d 65  .    pOut = &aMe
11680 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 20 20  m[pOp->p2];.    
11690 69 43 6f 6d 70 61 72 65 20 3d 20 72 65 73 3b 0a  iCompare = res;.
116a0 20 20 20 20 69 66 28 20 28 70 4f 70 2d 3e 70 35      if( (pOp->p5
116b0 20 26 20 53 51 4c 49 54 45 5f 4b 45 45 50 4e 55   & SQLITE_KEEPNU
116c0 4c 4c 29 21 3d 30 20 29 7b 0a 20 20 20 20 20 20  LL)!=0 ){.      
116d0 2f 2a 20 54 68 65 20 4b 45 45 50 4e 55 4c 4c 20  /* The KEEPNULL 
116e0 66 6c 61 67 20 70 72 65 76 65 6e 74 73 20 4f 50  flag prevents OP
116f0 5f 45 71 20 66 72 6f 6d 20 6f 76 65 72 77 72 69  _Eq from overwri
11700 74 69 6e 67 20 61 20 4e 55 4c 4c 20 77 69 74 68  ting a NULL with
11710 20 31 0a 20 20 20 20 20 20 2a 2a 20 61 6e 64 20   1.      ** and 
11720 70 72 65 76 65 6e 74 73 20 4f 50 5f 4e 65 20 66  prevents OP_Ne f
11730 72 6f 6d 20 6f 76 65 72 77 72 69 74 69 6e 67 20  rom overwriting 
11740 4e 55 4c 4c 20 77 69 74 68 20 30 2e 20 20 54 68  NULL with 0.  Th
11750 69 73 20 66 6c 61 67 0a 20 20 20 20 20 20 2a 2a  is flag.      **
11760 20 69 73 20 6f 6e 6c 79 20 75 73 65 64 20 69 6e   is only used in
11770 20 63 6f 6e 74 65 78 74 73 20 77 68 65 72 65 20   contexts where 
11780 65 69 74 68 65 72 3a 0a 20 20 20 20 20 20 2a 2a  either:.      **
11790 20 20 20 28 31 29 20 6f 70 3d 3d 4f 50 5f 45 71     (1) op==OP_Eq
117a0 20 26 26 20 28 72 5b 50 32 5d 3d 3d 4e 55 4c 4c   && (r[P2]==NULL
117b0 20 7c 7c 20 72 5b 50 32 5d 3d 3d 30 29 0a 20 20   || r[P2]==0).  
117c0 20 20 20 20 2a 2a 20 20 20 28 32 29 20 6f 70 3d      **   (2) op=
117d0 3d 4f 50 5f 4e 65 20 26 26 20 28 72 5b 50 32 5d  =OP_Ne && (r[P2]
117e0 3d 3d 4e 55 4c 4c 20 7c 7c 20 72 5b 50 32 5d 3d  ==NULL || r[P2]=
117f0 3d 31 29 0a 20 20 20 20 20 20 2a 2a 20 54 68 65  =1).      ** The
11800 72 65 66 6f 72 65 20 69 74 20 69 73 20 6e 6f 74  refore it is not
11810 20 6e 65 63 65 73 73 61 72 79 20 74 6f 20 63 68   necessary to ch
11820 65 63 6b 20 74 68 65 20 63 6f 6e 74 65 6e 74 20  eck the content 
11830 6f 66 20 72 5b 50 32 5d 20 66 6f 72 0a 20 20 20  of r[P2] for.   
11840 20 20 20 2a 2a 20 4e 55 4c 4c 2e 20 2a 2f 0a 20     ** NULL. */. 
11850 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70       assert( pOp
11860 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4e 65 20  ->opcode==OP_Ne 
11870 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d  || pOp->opcode==
11880 4f 50 5f 45 71 20 29 3b 0a 20 20 20 20 20 20 61  OP_Eq );.      a
11890 73 73 65 72 74 28 20 72 65 73 32 3d 3d 30 20 7c  ssert( res2==0 |
118a0 7c 20 72 65 73 32 3d 3d 31 20 29 3b 0a 20 20 20  | res2==1 );.   
118b0 20 20 20 74 65 73 74 63 61 73 65 28 20 72 65 73     testcase( res
118c0 32 3d 3d 30 20 26 26 20 70 4f 70 2d 3e 6f 70 63  2==0 && pOp->opc
118d0 6f 64 65 3d 3d 4f 50 5f 45 71 20 29 3b 0a 20 20  ode==OP_Eq );.  
118e0 20 20 20 20 74 65 73 74 63 61 73 65 28 20 72 65      testcase( re
118f0 73 32 3d 3d 31 20 26 26 20 70 4f 70 2d 3e 6f 70  s2==1 && pOp->op
11900 63 6f 64 65 3d 3d 4f 50 5f 45 71 20 29 3b 0a 20  code==OP_Eq );. 
11910 20 20 20 20 20 74 65 73 74 63 61 73 65 28 20 72       testcase( r
11920 65 73 32 3d 3d 30 20 26 26 20 70 4f 70 2d 3e 6f  es2==0 && pOp->o
11930 70 63 6f 64 65 3d 3d 4f 50 5f 4e 65 20 29 3b 0a  pcode==OP_Ne );.
11940 20 20 20 20 20 20 74 65 73 74 63 61 73 65 28 20        testcase( 
11950 72 65 73 32 3d 3d 31 20 26 26 20 70 4f 70 2d 3e  res2==1 && pOp->
11960 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4e 65 20 29 3b  opcode==OP_Ne );
11970 0a 20 20 20 20 20 20 69 66 28 20 28 70 4f 70 2d  .      if( (pOp-
11980 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 45 71 29 3d  >opcode==OP_Eq)=
11990 3d 72 65 73 32 20 29 20 62 72 65 61 6b 3b 0a 20  =res2 ) break;. 
119a0 20 20 20 7d 0a 20 20 20 20 6d 65 6d 41 62 6f 75     }.    memAbou
119b0 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 4f 75  tToChange(p, pOu
119c0 74 29 3b 0a 20 20 20 20 4d 65 6d 53 65 74 54 79  t);.    MemSetTy
119d0 70 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d  peFlag(pOut, MEM
119e0 5f 49 6e 74 29 3b 0a 20 20 20 20 70 4f 75 74 2d  _Int);.    pOut-
119f0 3e 75 2e 69 20 3d 20 72 65 73 32 3b 0a 20 20 20  >u.i = res2;.   
11a00 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28   REGISTER_TRACE(
11a10 70 4f 70 2d 3e 70 32 2c 20 70 4f 75 74 29 3b 0a  pOp->p2, pOut);.
11a20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 56 64 62    }else{.    Vdb
11a30 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 72 65 73  eBranchTaken(res
11a40 32 21 3d 30 2c 20 28 70 4f 70 2d 3e 70 35 20 26  2!=0, (pOp->p5 &
11a50 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 29 3f   SQLITE_NULLEQ)?
11a60 32 3a 33 29 3b 0a 20 20 20 20 69 66 28 20 72 65  2:3);.    if( re
11a70 73 32 20 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f  s2 ){.      goto
11a80 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 20   jump_to_p2;.   
11a90 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a   }.  }.  break;.
11aa0 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 45 6c  }../* Opcode: El
11ab0 73 65 4e 6f 74 45 71 20 2a 20 50 32 20 2a 20 2a  seNotEq * P2 * *
11ac0 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70   *.**.** This op
11ad0 63 6f 64 65 20 6d 75 73 74 20 69 6d 6d 65 64 69  code must immedi
11ae0 61 74 65 6c 79 20 66 6f 6c 6c 6f 77 20 61 6e 20  ately follow an 
11af0 4f 50 5f 4c 74 20 6f 72 20 4f 50 5f 47 74 20 63  OP_Lt or OP_Gt c
11b00 6f 6d 70 61 72 69 73 6f 6e 20 6f 70 65 72 61 74  omparison operat
11b10 6f 72 2e 0a 2a 2a 20 49 66 20 72 65 73 75 6c 74  or..** If result
11b20 20 6f 66 20 61 6e 20 4f 50 5f 45 71 20 63 6f 6d   of an OP_Eq com
11b30 70 61 72 69 73 6f 6e 20 6f 6e 20 74 68 65 20 73  parison on the s
11b40 61 6d 65 20 74 77 6f 20 6f 70 65 72 61 6e 64 73  ame two operands
11b50 0a 2a 2a 20 77 6f 75 6c 64 20 68 61 76 65 20 62  .** would have b
11b60 65 20 4e 55 4c 4c 20 6f 72 20 66 61 6c 73 65 20  e NULL or false 
11b70 28 30 29 2c 20 74 68 65 6e 20 74 68 65 6e 20 6a  (0), then then j
11b80 75 6d 70 20 74 6f 20 50 32 2e 20 0a 2a 2a 20 49  ump to P2. .** I
11b90 66 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66 20  f the result of 
11ba0 61 6e 20 4f 50 5f 45 71 20 63 6f 6d 70 61 72 69  an OP_Eq compari
11bb0 73 6f 6e 20 6f 6e 20 74 68 65 20 74 77 6f 20 70  son on the two p
11bc0 72 65 76 69 6f 75 73 20 6f 70 65 72 61 6e 64 73  revious operands
11bd0 0a 2a 2a 20 77 6f 75 6c 64 20 68 61 76 65 20 62  .** would have b
11be0 65 65 6e 20 74 72 75 65 20 28 31 29 2c 20 74 68  een true (1), th
11bf0 65 6e 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 2e  en fall through.
11c00 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 45 6c 73 65  .*/.case OP_Else
11c10 4e 6f 74 45 71 3a 20 7b 20 20 20 20 20 20 20 2f  NotEq: {       /
11c20 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 45 53 43  * same as TK_ESC
11c30 41 50 45 2c 20 6a 75 6d 70 20 2a 2f 0a 20 20 61  APE, jump */.  a
11c40 73 73 65 72 74 28 20 70 4f 70 3e 61 4f 70 20 29  ssert( pOp>aOp )
11c50 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 5b  ;.  assert( pOp[
11c60 2d 31 5d 2e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4c  -1].opcode==OP_L
11c70 74 20 7c 7c 20 70 4f 70 5b 2d 31 5d 2e 6f 70 63  t || pOp[-1].opc
11c80 6f 64 65 3d 3d 4f 50 5f 47 74 20 29 3b 0a 20 20  ode==OP_Gt );.  
11c90 61 73 73 65 72 74 28 20 70 4f 70 5b 2d 31 5d 2e  assert( pOp[-1].
11ca0 70 35 20 26 20 53 51 4c 49 54 45 5f 53 54 4f 52  p5 & SQLITE_STOR
11cb0 45 50 32 20 29 3b 0a 20 20 56 64 62 65 42 72 61  EP2 );.  VdbeBra
11cc0 6e 63 68 54 61 6b 65 6e 28 69 43 6f 6d 70 61 72  nchTaken(iCompar
11cd0 65 21 3d 30 2c 20 32 29 3b 0a 20 20 69 66 28 20  e!=0, 2);.  if( 
11ce0 69 43 6f 6d 70 61 72 65 21 3d 30 20 29 20 67 6f  iCompare!=0 ) go
11cf0 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20  to jump_to_p2;. 
11d00 20 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 2f 2a 20 4f   break;.}.../* O
11d10 70 63 6f 64 65 3a 20 50 65 72 6d 75 74 61 74 69  pcode: Permutati
11d20 6f 6e 20 2a 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a  on * * * P4 *.**
11d30 0a 2a 2a 20 53 65 74 20 74 68 65 20 70 65 72 6d  .** Set the perm
11d40 75 74 61 74 69 6f 6e 20 75 73 65 64 20 62 79 20  utation used by 
11d50 74 68 65 20 4f 50 5f 43 6f 6d 70 61 72 65 20 6f  the OP_Compare o
11d60 70 65 72 61 74 6f 72 20 69 6e 20 74 68 65 20 6e  perator in the n
11d70 65 78 74 0a 2a 2a 20 69 6e 73 74 72 75 63 74 69  ext.** instructi
11d80 6f 6e 2e 20 20 54 68 65 20 70 65 72 6d 75 74 61  on.  The permuta
11d90 74 69 6f 6e 20 69 73 20 73 74 6f 72 65 64 20 69  tion is stored i
11da0 6e 20 74 68 65 20 50 34 20 6f 70 65 72 61 6e 64  n the P4 operand
11db0 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 70 65 72 6d  ..**.** The perm
11dc0 75 74 61 74 69 6f 6e 20 69 73 20 6f 6e 6c 79 20  utation is only 
11dd0 76 61 6c 69 64 20 75 6e 74 69 6c 20 74 68 65 20  valid until the 
11de0 6e 65 78 74 20 4f 50 5f 43 6f 6d 70 61 72 65 20  next OP_Compare 
11df0 74 68 61 74 20 68 61 73 0a 2a 2a 20 74 68 65 20  that has.** the 
11e00 4f 50 46 4c 41 47 5f 50 45 52 4d 55 54 45 20 62  OPFLAG_PERMUTE b
11e10 69 74 20 73 65 74 20 69 6e 20 50 35 2e 20 54 79  it set in P5. Ty
11e20 70 69 63 61 6c 6c 79 20 74 68 65 20 4f 50 5f 50  pically the OP_P
11e30 65 72 6d 75 74 61 74 69 6f 6e 20 73 68 6f 75 6c  ermutation shoul
11e40 64 20 0a 2a 2a 20 6f 63 63 75 72 20 69 6d 6d 65  d .** occur imme
11e50 64 69 61 74 65 6c 79 20 70 72 69 6f 72 20 74 6f  diately prior to
11e60 20 74 68 65 20 4f 50 5f 43 6f 6d 70 61 72 65 2e   the OP_Compare.
11e70 0a 2a 2a 0a 2a 2a 20 54 68 65 20 66 69 72 73 74  .**.** The first
11e80 20 69 6e 74 65 67 65 72 20 69 6e 20 74 68 65 20   integer in the 
11e90 50 34 20 69 6e 74 65 67 65 72 20 61 72 72 61 79  P4 integer array
11ea0 20 69 73 20 74 68 65 20 6c 65 6e 67 74 68 20 6f   is the length o
11eb0 66 20 74 68 65 20 61 72 72 61 79 0a 2a 2a 20 61  f the array.** a
11ec0 6e 64 20 64 6f 65 73 20 6e 6f 74 20 62 65 63 6f  nd does not beco
11ed0 6d 65 20 70 61 72 74 20 6f 66 20 74 68 65 20 70  me part of the p
11ee0 65 72 6d 75 74 61 74 69 6f 6e 2e 0a 2a 2f 0a 63  ermutation..*/.c
11ef0 61 73 65 20 4f 50 5f 50 65 72 6d 75 74 61 74 69  ase OP_Permutati
11f00 6f 6e 3a 20 7b 0a 20 20 61 73 73 65 72 74 28 20  on: {.  assert( 
11f10 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f  pOp->p4type==P4_
11f20 49 4e 54 41 52 52 41 59 20 29 3b 0a 20 20 61 73  INTARRAY );.  as
11f30 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 2e 61 69  sert( pOp->p4.ai
11f40 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   );.  assert( pO
11f50 70 5b 31 5d 2e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  p[1].opcode==OP_
11f60 43 6f 6d 70 61 72 65 20 29 3b 0a 20 20 61 73 73  Compare );.  ass
11f70 65 72 74 28 20 70 4f 70 5b 31 5d 2e 70 35 20 26  ert( pOp[1].p5 &
11f80 20 4f 50 46 4c 41 47 5f 50 45 52 4d 55 54 45 20   OPFLAG_PERMUTE 
11f90 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  );.  break;.}../
11fa0 2a 20 4f 70 63 6f 64 65 3a 20 43 6f 6d 70 61 72  * Opcode: Compar
11fb0 65 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35  e P1 P2 P3 P4 P5
11fc0 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b  .** Synopsis: r[
11fd0 50 31 40 50 33 5d 20 3c 2d 3e 20 72 5b 50 32 40  P1@P3] <-> r[P2@
11fe0 50 33 5d 0a 2a 2a 0a 2a 2a 20 43 6f 6d 70 61 72  P3].**.** Compar
11ff0 65 20 74 77 6f 20 76 65 63 74 6f 72 73 20 6f 66  e two vectors of
12000 20 72 65 67 69 73 74 65 72 73 20 69 6e 20 72 65   registers in re
12010 67 28 50 31 29 2e 2e 72 65 67 28 50 31 2b 50 33  g(P1)..reg(P1+P3
12020 2d 31 29 20 28 63 61 6c 6c 20 74 68 69 73 0a 2a  -1) (call this.*
12030 2a 20 76 65 63 74 6f 72 20 22 41 22 29 20 61 6e  * vector "A") an
12040 64 20 69 6e 20 72 65 67 28 50 32 29 2e 2e 72 65  d in reg(P2)..re
12050 67 28 50 32 2b 50 33 2d 31 29 20 28 22 42 22 29  g(P2+P3-1) ("B")
12060 2e 20 20 53 61 76 65 20 74 68 65 20 72 65 73 75  .  Save the resu
12070 6c 74 20 6f 66 0a 2a 2a 20 74 68 65 20 63 6f 6d  lt of.** the com
12080 70 61 72 69 73 6f 6e 20 66 6f 72 20 75 73 65 20  parison for use 
12090 62 79 20 74 68 65 20 6e 65 78 74 20 4f 50 5f 4a  by the next OP_J
120a0 75 6d 70 20 69 6e 73 74 72 75 63 74 2e 0a 2a 2a  ump instruct..**
120b0 0a 2a 2a 20 49 66 20 50 35 20 68 61 73 20 74 68  .** If P5 has th
120c0 65 20 4f 50 46 4c 41 47 5f 50 45 52 4d 55 54 45  e OPFLAG_PERMUTE
120d0 20 62 69 74 20 73 65 74 2c 20 74 68 65 6e 20 74   bit set, then t
120e0 68 65 20 6f 72 64 65 72 20 6f 66 20 63 6f 6d 70  he order of comp
120f0 61 72 69 73 6f 6e 20 69 73 0a 2a 2a 20 64 65 74  arison is.** det
12100 65 72 6d 69 6e 65 64 20 62 79 20 74 68 65 20 6d  ermined by the m
12110 6f 73 74 20 72 65 63 65 6e 74 20 4f 50 5f 50 65  ost recent OP_Pe
12120 72 6d 75 74 61 74 69 6f 6e 20 6f 70 65 72 61 74  rmutation operat
12130 6f 72 2e 20 20 49 66 20 74 68 65 0a 2a 2a 20 4f  or.  If the.** O
12140 50 46 4c 41 47 5f 50 45 52 4d 55 54 45 20 62 69  PFLAG_PERMUTE bi
12150 74 20 69 73 20 63 6c 65 61 72 2c 20 74 68 65 6e  t is clear, then
12160 20 72 65 67 69 73 74 65 72 20 61 72 65 20 63 6f   register are co
12170 6d 70 61 72 65 64 20 69 6e 20 73 65 71 75 65 6e  mpared in sequen
12180 74 69 61 6c 0a 2a 2a 20 6f 72 64 65 72 2e 0a 2a  tial.** order..*
12190 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20 4b 65 79  *.** P4 is a Key
121a0 49 6e 66 6f 20 73 74 72 75 63 74 75 72 65 20 74  Info structure t
121b0 68 61 74 20 64 65 66 69 6e 65 73 20 63 6f 6c 6c  hat defines coll
121c0 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 73 20  ating sequences 
121d0 61 6e 64 20 73 6f 72 74 0a 2a 2a 20 6f 72 64 65  and sort.** orde
121e0 72 73 20 66 6f 72 20 74 68 65 20 63 6f 6d 70 61  rs for the compa
121f0 72 69 73 6f 6e 2e 20 20 54 68 65 20 70 65 72 6d  rison.  The perm
12200 75 74 61 74 69 6f 6e 20 61 70 70 6c 69 65 73 20  utation applies 
12210 74 6f 20 72 65 67 69 73 74 65 72 73 0a 2a 2a 20  to registers.** 
12220 6f 6e 6c 79 2e 20 20 54 68 65 20 4b 65 79 49 6e  only.  The KeyIn
12230 66 6f 20 65 6c 65 6d 65 6e 74 73 20 61 72 65 20  fo elements are 
12240 75 73 65 64 20 73 65 71 75 65 6e 74 69 61 6c 6c  used sequentiall
12250 79 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 63 6f 6d  y..**.** The com
12260 70 61 72 69 73 6f 6e 20 69 73 20 61 20 73 6f 72  parison is a sor
12270 74 20 63 6f 6d 70 61 72 69 73 6f 6e 2c 20 73 6f  t comparison, so
12280 20 4e 55 4c 4c 73 20 63 6f 6d 70 61 72 65 20 65   NULLs compare e
12290 71 75 61 6c 2c 0a 2a 2a 20 4e 55 4c 4c 73 20 61  qual,.** NULLs a
122a0 72 65 20 6c 65 73 73 20 74 68 61 6e 20 6e 75 6d  re less than num
122b0 62 65 72 73 2c 20 6e 75 6d 62 65 72 73 20 61 72  bers, numbers ar
122c0 65 20 6c 65 73 73 20 74 68 61 6e 20 73 74 72 69  e less than stri
122d0 6e 67 73 2c 0a 2a 2a 20 61 6e 64 20 73 74 72 69  ngs,.** and stri
122e0 6e 67 73 20 61 72 65 20 6c 65 73 73 20 74 68 61  ngs are less tha
122f0 6e 20 62 6c 6f 62 73 2e 0a 2a 2f 0a 63 61 73 65  n blobs..*/.case
12300 20 4f 50 5f 43 6f 6d 70 61 72 65 3a 20 7b 0a 20   OP_Compare: {. 
12310 20 69 6e 74 20 6e 3b 0a 20 20 69 6e 74 20 69 3b   int n;.  int i;
12320 0a 20 20 69 6e 74 20 70 31 3b 0a 20 20 69 6e 74  .  int p1;.  int
12330 20 70 32 3b 0a 20 20 63 6f 6e 73 74 20 4b 65 79   p2;.  const Key
12340 49 6e 66 6f 20 2a 70 4b 65 79 49 6e 66 6f 3b 0a  Info *pKeyInfo;.
12350 20 20 69 6e 74 20 69 64 78 3b 0a 20 20 43 6f 6c    int idx;.  Col
12360 6c 53 65 71 20 2a 70 43 6f 6c 6c 3b 20 20 20 20  lSeq *pColl;    
12370 2f 2a 20 43 6f 6c 6c 61 74 69 6e 67 20 73 65 71  /* Collating seq
12380 75 65 6e 63 65 20 74 6f 20 75 73 65 20 6f 6e 20  uence to use on 
12390 74 68 69 73 20 74 65 72 6d 20 2a 2f 0a 20 20 69  this term */.  i
123a0 6e 74 20 62 52 65 76 3b 20 20 20 20 20 20 20 20  nt bRev;        
123b0 20 20 2f 2a 20 54 72 75 65 20 66 6f 72 20 44 45    /* True for DE
123c0 53 43 45 4e 44 49 4e 47 20 73 6f 72 74 20 6f 72  SCENDING sort or
123d0 64 65 72 20 2a 2f 0a 20 20 69 6e 74 20 2a 61 50  der */.  int *aP
123e0 65 72 6d 75 74 65 3b 20 20 20 20 20 2f 2a 20 54  ermute;     /* T
123f0 68 65 20 70 65 72 6d 75 74 61 74 69 6f 6e 20 2a  he permutation *
12400 2f 0a 0a 20 20 69 66 28 20 28 70 4f 70 2d 3e 70  /..  if( (pOp->p
12410 35 20 26 20 4f 50 46 4c 41 47 5f 50 45 52 4d 55  5 & OPFLAG_PERMU
12420 54 45 29 3d 3d 30 20 29 7b 0a 20 20 20 20 61 50  TE)==0 ){.    aP
12430 65 72 6d 75 74 65 20 3d 20 30 3b 0a 20 20 7d 65  ermute = 0;.  }e
12440 6c 73 65 7b 0a 20 20 20 20 61 73 73 65 72 74 28  lse{.    assert(
12450 20 70 4f 70 3e 61 4f 70 20 29 3b 0a 20 20 20 20   pOp>aOp );.    
12460 61 73 73 65 72 74 28 20 70 4f 70 5b 2d 31 5d 2e  assert( pOp[-1].
12470 6f 70 63 6f 64 65 3d 3d 4f 50 5f 50 65 72 6d 75  opcode==OP_Permu
12480 74 61 74 69 6f 6e 20 29 3b 0a 20 20 20 20 61 73  tation );.    as
12490 73 65 72 74 28 20 70 4f 70 5b 2d 31 5d 2e 70 34  sert( pOp[-1].p4
124a0 74 79 70 65 3d 3d 50 34 5f 49 4e 54 41 52 52 41  type==P4_INTARRA
124b0 59 20 29 3b 0a 20 20 20 20 61 50 65 72 6d 75 74  Y );.    aPermut
124c0 65 20 3d 20 70 4f 70 5b 2d 31 5d 2e 70 34 2e 61  e = pOp[-1].p4.a
124d0 69 20 2b 20 31 3b 0a 20 20 20 20 61 73 73 65 72  i + 1;.    asser
124e0 74 28 20 61 50 65 72 6d 75 74 65 21 3d 30 20 29  t( aPermute!=0 )
124f0 3b 0a 20 20 7d 0a 20 20 6e 20 3d 20 70 4f 70 2d  ;.  }.  n = pOp-
12500 3e 70 33 3b 0a 20 20 70 4b 65 79 49 6e 66 6f 20  >p3;.  pKeyInfo 
12510 3d 20 70 4f 70 2d 3e 70 34 2e 70 4b 65 79 49 6e  = pOp->p4.pKeyIn
12520 66 6f 3b 0a 20 20 61 73 73 65 72 74 28 20 6e 3e  fo;.  assert( n>
12530 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  0 );.  assert( p
12540 4b 65 79 49 6e 66 6f 21 3d 30 20 29 3b 0a 20 20  KeyInfo!=0 );.  
12550 70 31 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20  p1 = pOp->p1;.  
12560 70 32 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 23 69  p2 = pOp->p2;.#i
12570 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55  fdef SQLITE_DEBU
12580 47 0a 20 20 69 66 28 20 61 50 65 72 6d 75 74 65  G.  if( aPermute
12590 20 29 7b 0a 20 20 20 20 69 6e 74 20 6b 2c 20 6d   ){.    int k, m
125a0 78 20 3d 20 30 3b 0a 20 20 20 20 66 6f 72 28 6b  x = 0;.    for(k
125b0 3d 30 3b 20 6b 3c 6e 3b 20 6b 2b 2b 29 20 69 66  =0; k<n; k++) if
125c0 28 20 61 50 65 72 6d 75 74 65 5b 6b 5d 3e 6d 78  ( aPermute[k]>mx
125d0 20 29 20 6d 78 20 3d 20 61 50 65 72 6d 75 74 65   ) mx = aPermute
125e0 5b 6b 5d 3b 0a 20 20 20 20 61 73 73 65 72 74 28  [k];.    assert(
125f0 20 70 31 3e 30 20 26 26 20 70 31 2b 6d 78 3c 3d   p1>0 && p1+mx<=
12600 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e  (p->nMem+1 - p->
12610 6e 43 75 72 73 6f 72 29 2b 31 20 29 3b 0a 20 20  nCursor)+1 );.  
12620 20 20 61 73 73 65 72 74 28 20 70 32 3e 30 20 26    assert( p2>0 &
12630 26 20 70 32 2b 6d 78 3c 3d 28 70 2d 3e 6e 4d 65  & p2+mx<=(p->nMe
12640 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72  m+1 - p->nCursor
12650 29 2b 31 20 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a  )+1 );.  }else{.
12660 20 20 20 20 61 73 73 65 72 74 28 20 70 31 3e 30      assert( p1>0
12670 20 26 26 20 70 31 2b 6e 3c 3d 28 70 2d 3e 6e 4d   && p1+n<=(p->nM
12680 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f  em+1 - p->nCurso
12690 72 29 2b 31 20 29 3b 0a 20 20 20 20 61 73 73 65  r)+1 );.    asse
126a0 72 74 28 20 70 32 3e 30 20 26 26 20 70 32 2b 6e  rt( p2>0 && p2+n
126b0 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70  <=(p->nMem+1 - p
126c0 2d 3e 6e 43 75 72 73 6f 72 29 2b 31 20 29 3b 0a  ->nCursor)+1 );.
126d0 20 20 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51    }.#endif /* SQ
126e0 4c 49 54 45 5f 44 45 42 55 47 20 2a 2f 0a 20 20  LITE_DEBUG */.  
126f0 66 6f 72 28 69 3d 30 3b 20 69 3c 6e 3b 20 69 2b  for(i=0; i<n; i+
12700 2b 29 7b 0a 20 20 20 20 69 64 78 20 3d 20 61 50  +){.    idx = aP
12710 65 72 6d 75 74 65 20 3f 20 61 50 65 72 6d 75 74  ermute ? aPermut
12720 65 5b 69 5d 20 3a 20 69 3b 0a 20 20 20 20 61 73  e[i] : i;.    as
12730 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64  sert( memIsValid
12740 28 26 61 4d 65 6d 5b 70 31 2b 69 64 78 5d 29 20  (&aMem[p1+idx]) 
12750 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 6d  );.    assert( m
12760 65 6d 49 73 56 61 6c 69 64 28 26 61 4d 65 6d 5b  emIsValid(&aMem[
12770 70 32 2b 69 64 78 5d 29 20 29 3b 0a 20 20 20 20  p2+idx]) );.    
12780 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70  REGISTER_TRACE(p
12790 31 2b 69 64 78 2c 20 26 61 4d 65 6d 5b 70 31 2b  1+idx, &aMem[p1+
127a0 69 64 78 5d 29 3b 0a 20 20 20 20 52 45 47 49 53  idx]);.    REGIS
127b0 54 45 52 5f 54 52 41 43 45 28 70 32 2b 69 64 78  TER_TRACE(p2+idx
127c0 2c 20 26 61 4d 65 6d 5b 70 32 2b 69 64 78 5d 29  , &aMem[p2+idx])
127d0 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 69 3c  ;.    assert( i<
127e0 70 4b 65 79 49 6e 66 6f 2d 3e 6e 4b 65 79 46 69  pKeyInfo->nKeyFi
127f0 65 6c 64 20 29 3b 0a 20 20 20 20 70 43 6f 6c 6c  eld );.    pColl
12800 20 3d 20 70 4b 65 79 49 6e 66 6f 2d 3e 61 43 6f   = pKeyInfo->aCo
12810 6c 6c 5b 69 5d 3b 0a 20 20 20 20 62 52 65 76 20  ll[i];.    bRev 
12820 3d 20 28 70 4b 65 79 49 6e 66 6f 2d 3e 61 53 6f  = (pKeyInfo->aSo
12830 72 74 46 6c 61 67 73 5b 69 5d 20 26 20 4b 45 59  rtFlags[i] & KEY
12840 49 4e 46 4f 5f 4f 52 44 45 52 5f 44 45 53 43 29  INFO_ORDER_DESC)
12850 3b 0a 20 20 20 20 69 43 6f 6d 70 61 72 65 20 3d  ;.    iCompare =
12860 20 73 71 6c 69 74 65 33 4d 65 6d 43 6f 6d 70 61   sqlite3MemCompa
12870 72 65 28 26 61 4d 65 6d 5b 70 31 2b 69 64 78 5d  re(&aMem[p1+idx]
12880 2c 20 26 61 4d 65 6d 5b 70 32 2b 69 64 78 5d 2c  , &aMem[p2+idx],
12890 20 70 43 6f 6c 6c 29 3b 0a 20 20 20 20 69 66 28   pColl);.    if(
128a0 20 69 43 6f 6d 70 61 72 65 20 29 7b 0a 20 20 20   iCompare ){.   
128b0 20 20 20 69 66 28 20 28 70 4b 65 79 49 6e 66 6f     if( (pKeyInfo
128c0 2d 3e 61 53 6f 72 74 46 6c 61 67 73 5b 69 5d 20  ->aSortFlags[i] 
128d0 26 20 4b 45 59 49 4e 46 4f 5f 4f 52 44 45 52 5f  & KEYINFO_ORDER_
128e0 42 49 47 4e 55 4c 4c 29 20 0a 20 20 20 20 20 20  BIGNULL) .      
128f0 20 26 26 20 28 28 61 4d 65 6d 5b 70 31 2b 69 64   && ((aMem[p1+id
12900 78 5d 2e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e  x].flags & MEM_N
12910 75 6c 6c 29 20 7c 7c 20 28 61 4d 65 6d 5b 70 32  ull) || (aMem[p2
12920 2b 69 64 78 5d 2e 66 6c 61 67 73 20 26 20 4d 45  +idx].flags & ME
12930 4d 5f 4e 75 6c 6c 29 29 0a 20 20 20 20 20 20 29  M_Null)).      )
12940 7b 0a 20 20 20 20 20 20 20 20 69 43 6f 6d 70 61  {.        iCompa
12950 72 65 20 3d 20 2d 69 43 6f 6d 70 61 72 65 3b 0a  re = -iCompare;.
12960 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69 66        }.      if
12970 28 20 62 52 65 76 20 29 20 69 43 6f 6d 70 61 72  ( bRev ) iCompar
12980 65 20 3d 20 2d 69 43 6f 6d 70 61 72 65 3b 0a 20  e = -iCompare;. 
12990 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
129a0 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  }.  }.  break;.}
129b0 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4a 75 6d  ../* Opcode: Jum
129c0 70 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a  p P1 P2 P3 * *.*
129d0 2a 0a 2a 2a 20 4a 75 6d 70 20 74 6f 20 74 68 65  *.** Jump to the
129e0 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 61 74 20   instruction at 
129f0 61 64 64 72 65 73 73 20 50 31 2c 20 50 32 2c 20  address P1, P2, 
12a00 6f 72 20 50 33 20 64 65 70 65 6e 64 69 6e 67 20  or P3 depending 
12a10 6f 6e 20 77 68 65 74 68 65 72 0a 2a 2a 20 69 6e  on whether.** in
12a20 20 74 68 65 20 6d 6f 73 74 20 72 65 63 65 6e 74   the most recent
12a30 20 4f 50 5f 43 6f 6d 70 61 72 65 20 69 6e 73 74   OP_Compare inst
12a40 72 75 63 74 69 6f 6e 20 74 68 65 20 50 31 20 76  ruction the P1 v
12a50 65 63 74 6f 72 20 77 61 73 20 6c 65 73 73 20 74  ector was less t
12a60 68 61 6e 0a 2a 2a 20 65 71 75 61 6c 20 74 6f 2c  han.** equal to,
12a70 20 6f 72 20 67 72 65 61 74 65 72 20 74 68 61 6e   or greater than
12a80 20 74 68 65 20 50 32 20 76 65 63 74 6f 72 2c 20   the P2 vector, 
12a90 72 65 73 70 65 63 74 69 76 65 6c 79 2e 0a 2a 2f  respectively..*/
12aa0 0a 63 61 73 65 20 4f 50 5f 4a 75 6d 70 3a 20 7b  .case OP_Jump: {
12ab0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
12ac0 6a 75 6d 70 20 2a 2f 0a 20 20 69 66 28 20 69 43  jump */.  if( iC
12ad0 6f 6d 70 61 72 65 3c 30 20 29 7b 0a 20 20 20 20  ompare<0 ){.    
12ae0 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28  VdbeBranchTaken(
12af0 30 2c 34 29 3b 20 70 4f 70 20 3d 20 26 61 4f 70  0,4); pOp = &aOp
12b00 5b 70 4f 70 2d 3e 70 31 20 2d 20 31 5d 3b 0a 20  [pOp->p1 - 1];. 
12b10 20 7d 65 6c 73 65 20 69 66 28 20 69 43 6f 6d 70   }else if( iComp
12b20 61 72 65 3d 3d 30 20 29 7b 0a 20 20 20 20 56 64  are==0 ){.    Vd
12b30 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 31 2c  beBranchTaken(1,
12b40 34 29 3b 20 70 4f 70 20 3d 20 26 61 4f 70 5b 70  4); pOp = &aOp[p
12b50 4f 70 2d 3e 70 32 20 2d 20 31 5d 3b 0a 20 20 7d  Op->p2 - 1];.  }
12b60 65 6c 73 65 7b 0a 20 20 20 20 56 64 62 65 42 72  else{.    VdbeBr
12b70 61 6e 63 68 54 61 6b 65 6e 28 32 2c 34 29 3b 20  anchTaken(2,4); 
12b80 70 4f 70 20 3d 20 26 61 4f 70 5b 70 4f 70 2d 3e  pOp = &aOp[pOp->
12b90 70 33 20 2d 20 31 5d 3b 0a 20 20 7d 0a 20 20 62  p3 - 1];.  }.  b
12ba0 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
12bb0 64 65 3a 20 41 6e 64 20 50 31 20 50 32 20 50 33  de: And P1 P2 P3
12bc0 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73   * *.** Synopsis
12bd0 3a 20 72 5b 50 33 5d 3d 28 72 5b 50 31 5d 20 26  : r[P3]=(r[P1] &
12be0 26 20 72 5b 50 32 5d 29 0a 2a 2a 0a 2a 2a 20 54  & r[P2]).**.** T
12bf0 61 6b 65 20 74 68 65 20 6c 6f 67 69 63 61 6c 20  ake the logical 
12c00 41 4e 44 20 6f 66 20 74 68 65 20 76 61 6c 75 65  AND of the value
12c10 73 20 69 6e 20 72 65 67 69 73 74 65 72 73 20 50  s in registers P
12c20 31 20 61 6e 64 20 50 32 20 61 6e 64 0a 2a 2a 20  1 and P2 and.** 
12c30 77 72 69 74 65 20 74 68 65 20 72 65 73 75 6c 74  write the result
12c40 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50   into register P
12c50 33 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 65 69 74 68  3..**.** If eith
12c60 65 72 20 50 31 20 6f 72 20 50 32 20 69 73 20 30  er P1 or P2 is 0
12c70 20 28 66 61 6c 73 65 29 20 74 68 65 6e 20 74 68   (false) then th
12c80 65 20 72 65 73 75 6c 74 20 69 73 20 30 20 65 76  e result is 0 ev
12c90 65 6e 20 69 66 0a 2a 2a 20 74 68 65 20 6f 74 68  en if.** the oth
12ca0 65 72 20 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c  er input is NULL
12cb0 2e 20 20 41 20 4e 55 4c 4c 20 61 6e 64 20 74 72  .  A NULL and tr
12cc0 75 65 20 6f 72 20 74 77 6f 20 4e 55 4c 4c 73 20  ue or two NULLs 
12cd0 67 69 76 65 0a 2a 2a 20 61 20 4e 55 4c 4c 20 6f  give.** a NULL o
12ce0 75 74 70 75 74 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63  utput..*/./* Opc
12cf0 6f 64 65 3a 20 4f 72 20 50 31 20 50 32 20 50 33  ode: Or P1 P2 P3
12d00 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73   * *.** Synopsis
12d10 3a 20 72 5b 50 33 5d 3d 28 72 5b 50 31 5d 20 7c  : r[P3]=(r[P1] |
12d20 7c 20 72 5b 50 32 5d 29 0a 2a 2a 0a 2a 2a 20 54  | r[P2]).**.** T
12d30 61 6b 65 20 74 68 65 20 6c 6f 67 69 63 61 6c 20  ake the logical 
12d40 4f 52 20 6f 66 20 74 68 65 20 76 61 6c 75 65 73  OR of the values
12d50 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20   in register P1 
12d60 61 6e 64 20 50 32 20 61 6e 64 0a 2a 2a 20 73 74  and P2 and.** st
12d70 6f 72 65 20 74 68 65 20 61 6e 73 77 65 72 20 69  ore the answer i
12d80 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a  n register P3..*
12d90 2a 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20 50  *.** If either P
12da0 31 20 6f 72 20 50 32 20 69 73 20 6e 6f 6e 7a 65  1 or P2 is nonze
12db0 72 6f 20 28 74 72 75 65 29 20 74 68 65 6e 20 74  ro (true) then t
12dc0 68 65 20 72 65 73 75 6c 74 20 69 73 20 31 20 28  he result is 1 (
12dd0 74 72 75 65 29 0a 2a 2a 20 65 76 65 6e 20 69 66  true).** even if
12de0 20 74 68 65 20 6f 74 68 65 72 20 69 6e 70 75 74   the other input
12df0 20 69 73 20 4e 55 4c 4c 2e 20 20 41 20 4e 55 4c   is NULL.  A NUL
12e00 4c 20 61 6e 64 20 66 61 6c 73 65 20 6f 72 20 74  L and false or t
12e10 77 6f 20 4e 55 4c 4c 73 0a 2a 2a 20 67 69 76 65  wo NULLs.** give
12e20 20 61 20 4e 55 4c 4c 20 6f 75 74 70 75 74 2e 0a   a NULL output..
12e30 2a 2f 0a 63 61 73 65 20 4f 50 5f 41 6e 64 3a 20  */.case OP_And: 
12e40 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
12e50 73 61 6d 65 20 61 73 20 54 4b 5f 41 4e 44 2c 20  same as TK_AND, 
12e60 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a  in1, in2, out3 *
12e70 2f 0a 63 61 73 65 20 4f 50 5f 4f 72 3a 20 7b 20  /.case OP_Or: { 
12e80 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73              /* s
12e90 61 6d 65 20 61 73 20 54 4b 5f 4f 52 2c 20 69 6e  ame as TK_OR, in
12ea0 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a  1, in2, out3 */.
12eb0 20 20 69 6e 74 20 76 31 3b 20 20 20 20 2f 2a 20    int v1;    /* 
12ec0 4c 65 66 74 20 6f 70 65 72 61 6e 64 3a 20 20 30  Left operand:  0
12ed0 3d 3d 46 41 4c 53 45 2c 20 31 3d 3d 54 52 55 45  ==FALSE, 1==TRUE
12ee0 2c 20 32 3d 3d 55 4e 4b 4e 4f 57 4e 20 6f 72 20  , 2==UNKNOWN or 
12ef0 4e 55 4c 4c 20 2a 2f 0a 20 20 69 6e 74 20 76 32  NULL */.  int v2
12f00 3b 20 20 20 20 2f 2a 20 52 69 67 68 74 20 6f 70  ;    /* Right op
12f10 65 72 61 6e 64 3a 20 30 3d 3d 46 41 4c 53 45 2c  erand: 0==FALSE,
12f20 20 31 3d 3d 54 52 55 45 2c 20 32 3d 3d 55 4e 4b   1==TRUE, 2==UNK
12f30 4e 4f 57 4e 20 6f 72 20 4e 55 4c 4c 20 2a 2f 0a  NOWN or NULL */.
12f40 0a 20 20 76 31 20 3d 20 73 71 6c 69 74 65 33 56  .  v1 = sqlite3V
12f50 64 62 65 42 6f 6f 6c 65 61 6e 56 61 6c 75 65 28  dbeBooleanValue(
12f60 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 2c 20  &aMem[pOp->p1], 
12f70 32 29 3b 0a 20 20 76 32 20 3d 20 73 71 6c 69 74  2);.  v2 = sqlit
12f80 65 33 56 64 62 65 42 6f 6f 6c 65 61 6e 56 61 6c  e3VdbeBooleanVal
12f90 75 65 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32  ue(&aMem[pOp->p2
12fa0 5d 2c 20 32 29 3b 0a 20 20 69 66 28 20 70 4f 70  ], 2);.  if( pOp
12fb0 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 41 6e 64  ->opcode==OP_And
12fc0 20 29 7b 0a 20 20 20 20 73 74 61 74 69 63 20 63   ){.    static c
12fd0 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68  onst unsigned ch
12fe0 61 72 20 61 6e 64 5f 6c 6f 67 69 63 5b 5d 20 3d  ar and_logic[] =
12ff0 20 7b 20 30 2c 20 30 2c 20 30 2c 20 30 2c 20 31   { 0, 0, 0, 0, 1
13000 2c 20 32 2c 20 30 2c 20 32 2c 20 32 20 7d 3b 0a  , 2, 0, 2, 2 };.
13010 20 20 20 20 76 31 20 3d 20 61 6e 64 5f 6c 6f 67      v1 = and_log
13020 69 63 5b 76 31 2a 33 2b 76 32 5d 3b 0a 20 20 7d  ic[v1*3+v2];.  }
13030 65 6c 73 65 7b 0a 20 20 20 20 73 74 61 74 69 63  else{.    static
13040 20 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20   const unsigned 
13050 63 68 61 72 20 6f 72 5f 6c 6f 67 69 63 5b 5d 20  char or_logic[] 
13060 3d 20 7b 20 30 2c 20 31 2c 20 32 2c 20 31 2c 20  = { 0, 1, 2, 1, 
13070 31 2c 20 31 2c 20 32 2c 20 31 2c 20 32 20 7d 3b  1, 1, 2, 1, 2 };
13080 0a 20 20 20 20 76 31 20 3d 20 6f 72 5f 6c 6f 67  .    v1 = or_log
13090 69 63 5b 76 31 2a 33 2b 76 32 5d 3b 0a 20 20 7d  ic[v1*3+v2];.  }
130a0 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b  .  pOut = &aMem[
130b0 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 69 66 28 20  pOp->p3];.  if( 
130c0 76 31 3d 3d 32 20 29 7b 0a 20 20 20 20 4d 65 6d  v1==2 ){.    Mem
130d0 53 65 74 54 79 70 65 46 6c 61 67 28 70 4f 75 74  SetTypeFlag(pOut
130e0 2c 20 4d 45 4d 5f 4e 75 6c 6c 29 3b 0a 20 20 7d  , MEM_Null);.  }
130f0 65 6c 73 65 7b 0a 20 20 20 20 70 4f 75 74 2d 3e  else{.    pOut->
13100 75 2e 69 20 3d 20 76 31 3b 0a 20 20 20 20 4d 65  u.i = v1;.    Me
13110 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70 4f 75  mSetTypeFlag(pOu
13120 74 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20 7d  t, MEM_Int);.  }
13130 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
13140 4f 70 63 6f 64 65 3a 20 49 73 54 72 75 65 20 50  Opcode: IsTrue P
13150 31 20 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a 20  1 P2 P3 P4 *.** 
13160 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 20  Synopsis: r[P2] 
13170 3d 20 63 6f 61 6c 65 73 63 65 28 72 5b 50 31 5d  = coalesce(r[P1]
13180 3d 3d 54 52 55 45 2c 50 33 29 20 5e 20 50 34 0a  ==TRUE,P3) ^ P4.
13190 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64  **.** This opcod
131a0 65 20 69 6d 70 6c 65 6d 65 6e 74 73 20 74 68 65  e implements the
131b0 20 49 53 20 54 52 55 45 2c 20 49 53 20 46 41 4c   IS TRUE, IS FAL
131c0 53 45 2c 20 49 53 20 4e 4f 54 20 54 52 55 45 2c  SE, IS NOT TRUE,
131d0 20 61 6e 64 0a 2a 2a 20 49 53 20 4e 4f 54 20 46   and.** IS NOT F
131e0 41 4c 53 45 20 6f 70 65 72 61 74 6f 72 73 2e 0a  ALSE operators..
131f0 2a 2a 0a 2a 2a 20 49 6e 74 65 72 70 72 65 74 20  **.** Interpret 
13200 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67  the value in reg
13210 69 73 74 65 72 20 50 31 20 61 73 20 61 20 62 6f  ister P1 as a bo
13220 6f 6c 65 61 6e 20 76 61 6c 75 65 2e 20 20 53 74  olean value.  St
13230 6f 72 65 20 74 68 61 74 0a 2a 2a 20 62 6f 6f 6c  ore that.** bool
13240 65 61 6e 20 28 61 20 30 20 6f 72 20 31 29 20 69  ean (a 0 or 1) i
13250 6e 20 72 65 67 69 73 74 65 72 20 50 32 2e 20 20  n register P2.  
13260 4f 72 20 69 66 20 74 68 65 20 76 61 6c 75 65 20  Or if the value 
13270 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 69  in register P1 i
13280 73 20 0a 2a 2a 20 4e 55 4c 4c 2c 20 74 68 65 6e  s .** NULL, then
13290 20 74 68 65 20 50 33 20 69 73 20 73 74 6f 72 65   the P3 is store
132a0 64 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32  d in register P2
132b0 2e 20 20 49 6e 76 65 72 74 20 74 68 65 20 61 6e  .  Invert the an
132c0 73 77 65 72 20 69 66 20 50 34 0a 2a 2a 20 69 73  swer if P4.** is
132d0 20 31 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6c 6f   1..**.** The lo
132e0 67 69 63 20 69 73 20 73 75 6d 6d 61 72 69 7a 65  gic is summarize
132f0 64 20 6c 69 6b 65 20 74 68 69 73 3a 0a 2a 2a 0a  d like this:.**.
13300 2a 2a 20 3c 75 6c 3e 20 0a 2a 2a 20 3c 6c 69 3e  ** <ul> .** <li>
13310 20 49 66 20 50 33 3d 3d 30 20 61 6e 64 20 50 34   If P3==0 and P4
13320 3d 3d 30 20 20 74 68 65 6e 20 20 72 5b 50 32 5d  ==0  then  r[P2]
13330 20 3a 3d 20 72 5b 50 31 5d 20 49 53 20 54 52 55   := r[P1] IS TRU
13340 45 0a 2a 2a 20 3c 6c 69 3e 20 49 66 20 50 33 3d  E.** <li> If P3=
13350 3d 31 20 61 6e 64 20 50 34 3d 3d 31 20 20 74 68  =1 and P4==1  th
13360 65 6e 20 20 72 5b 50 32 5d 20 3a 3d 20 72 5b 50  en  r[P2] := r[P
13370 31 5d 20 49 53 20 46 41 4c 53 45 0a 2a 2a 20 3c  1] IS FALSE.** <
13380 6c 69 3e 20 49 66 20 50 33 3d 3d 30 20 61 6e 64  li> If P3==0 and
13390 20 50 34 3d 3d 31 20 20 74 68 65 6e 20 20 72 5b   P4==1  then  r[
133a0 50 32 5d 20 3a 3d 20 72 5b 50 31 5d 20 49 53 20  P2] := r[P1] IS 
133b0 4e 4f 54 20 54 52 55 45 0a 2a 2a 20 3c 6c 69 3e  NOT TRUE.** <li>
133c0 20 49 66 20 50 33 3d 3d 31 20 61 6e 64 20 50 34   If P3==1 and P4
133d0 3d 3d 30 20 20 74 68 65 6e 20 20 72 5b 50 32 5d  ==0  then  r[P2]
133e0 20 3a 3d 20 72 5b 50 31 5d 20 49 53 20 4e 4f 54   := r[P1] IS NOT
133f0 20 46 41 4c 53 45 0a 2a 2a 20 3c 2f 75 6c 3e 0a   FALSE.** </ul>.
13400 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 73 54 72 75  */.case OP_IsTru
13410 65 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20  e: {            
13420 20 20 20 2f 2a 20 69 6e 31 2c 20 6f 75 74 32 20     /* in1, out2 
13430 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  */.  assert( pOp
13440 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54  ->p4type==P4_INT
13450 33 32 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  32 );.  assert( 
13460 70 4f 70 2d 3e 70 34 2e 69 3d 3d 30 20 7c 7c 20  pOp->p4.i==0 || 
13470 70 4f 70 2d 3e 70 34 2e 69 3d 3d 31 20 29 3b 0a  pOp->p4.i==1 );.
13480 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
13490 33 3d 3d 30 20 7c 7c 20 70 4f 70 2d 3e 70 33 3d  3==0 || pOp->p3=
134a0 3d 31 20 29 3b 0a 20 20 73 71 6c 69 74 65 33 56  =1 );.  sqlite3V
134b0 64 62 65 4d 65 6d 53 65 74 49 6e 74 36 34 28 26  dbeMemSetInt64(&
134c0 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 2c 0a 20  aMem[pOp->p2],. 
134d0 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
134e0 42 6f 6f 6c 65 61 6e 56 61 6c 75 65 28 26 61 4d  BooleanValue(&aM
134f0 65 6d 5b 70 4f 70 2d 3e 70 31 5d 2c 20 70 4f 70  em[pOp->p1], pOp
13500 2d 3e 70 33 29 20 5e 20 70 4f 70 2d 3e 70 34 2e  ->p3) ^ pOp->p4.
13510 69 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  i);.  break;.}..
13520 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 6f 74 20 50  /* Opcode: Not P
13530 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79  1 P2 * * *.** Sy
13540 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 20 21  nopsis: r[P2]= !
13550 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 49 6e 74 65  r[P1].**.** Inte
13560 72 70 72 65 74 20 74 68 65 20 76 61 6c 75 65 20  rpret the value 
13570 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 61  in register P1 a
13580 73 20 61 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75  s a boolean valu
13590 65 2e 20 20 53 74 6f 72 65 20 74 68 65 0a 2a 2a  e.  Store the.**
135a0 20 62 6f 6f 6c 65 61 6e 20 63 6f 6d 70 6c 65 6d   boolean complem
135b0 65 6e 74 20 69 6e 20 72 65 67 69 73 74 65 72 20  ent in register 
135c0 50 32 2e 20 20 49 66 20 74 68 65 20 76 61 6c 75  P2.  If the valu
135d0 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31  e in register P1
135e0 20 69 73 20 0a 2a 2a 20 4e 55 4c 4c 2c 20 74 68   is .** NULL, th
135f0 65 6e 20 61 20 4e 55 4c 4c 20 69 73 20 73 74 6f  en a NULL is sto
13600 72 65 64 20 69 6e 20 50 32 2e 0a 2a 2f 0a 63 61  red in P2..*/.ca
13610 73 65 20 4f 50 5f 4e 6f 74 3a 20 7b 20 20 20 20  se OP_Not: {    
13620 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73              /* s
13630 61 6d 65 20 61 73 20 54 4b 5f 4e 4f 54 2c 20 69  ame as TK_NOT, i
13640 6e 31 2c 20 6f 75 74 32 20 2a 2f 0a 20 20 70 49  n1, out2 */.  pI
13650 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n1 = &aMem[pOp->
13660 70 31 5d 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61  p1];.  pOut = &a
13670 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20  Mem[pOp->p2];.  
13680 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73  if( (pIn1->flags
13690 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29 3d 3d 30 20   & MEM_Null)==0 
136a0 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  ){.    sqlite3Vd
136b0 62 65 4d 65 6d 53 65 74 49 6e 74 36 34 28 70 4f  beMemSetInt64(pO
136c0 75 74 2c 20 21 73 71 6c 69 74 65 33 56 64 62 65  ut, !sqlite3Vdbe
136d0 42 6f 6f 6c 65 61 6e 56 61 6c 75 65 28 70 49 6e  BooleanValue(pIn
136e0 31 2c 30 29 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a  1,0));.  }else{.
136f0 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
13700 65 6d 53 65 74 4e 75 6c 6c 28 70 4f 75 74 29 3b  emSetNull(pOut);
13710 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
13720 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 42 69 74 4e  ./* Opcode: BitN
13730 6f 74 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  ot P1 P2 * * *.*
13740 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32  * Synopsis: r[P2
13750 5d 3d 20 7e 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20  ]= ~r[P1].**.** 
13760 49 6e 74 65 72 70 72 65 74 20 74 68 65 20 63 6f  Interpret the co
13770 6e 74 65 6e 74 20 6f 66 20 72 65 67 69 73 74 65  ntent of registe
13780 72 20 50 31 20 61 73 20 61 6e 20 69 6e 74 65 67  r P1 as an integ
13790 65 72 2e 20 20 53 74 6f 72 65 20 74 68 65 0a 2a  er.  Store the.*
137a0 2a 20 6f 6e 65 73 2d 63 6f 6d 70 6c 65 6d 65 6e  * ones-complemen
137b0 74 20 6f 66 20 74 68 65 20 50 31 20 76 61 6c 75  t of the P1 valu
137c0 65 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20  e into register 
137d0 50 32 2e 20 20 49 66 20 50 31 20 68 6f 6c 64 73  P2.  If P1 holds
137e0 0a 2a 2a 20 61 20 4e 55 4c 4c 20 74 68 65 6e 20  .** a NULL then 
137f0 73 74 6f 72 65 20 61 20 4e 55 4c 4c 20 69 6e 20  store a NULL in 
13800 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 42  P2..*/.case OP_B
13810 69 74 4e 6f 74 3a 20 7b 20 20 20 20 20 20 20 20  itNot: {        
13820 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20       /* same as 
13830 54 4b 5f 42 49 54 4e 4f 54 2c 20 69 6e 31 2c 20  TK_BITNOT, in1, 
13840 6f 75 74 32 20 2a 2f 0a 20 20 70 49 6e 31 20 3d  out2 */.  pIn1 =
13850 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b   &aMem[pOp->p1];
13860 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b  .  pOut = &aMem[
13870 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 73 71 6c 69  pOp->p2];.  sqli
13880 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c  te3VdbeMemSetNul
13890 6c 28 70 4f 75 74 29 3b 0a 20 20 69 66 28 20 28  l(pOut);.  if( (
138a0 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn1->flags & ME
138b0 4d 5f 4e 75 6c 6c 29 3d 3d 30 20 29 7b 0a 20 20  M_Null)==0 ){.  
138c0 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20    pOut->flags = 
138d0 4d 45 4d 5f 49 6e 74 3b 0a 20 20 20 20 70 4f 75  MEM_Int;.    pOu
138e0 74 2d 3e 75 2e 69 20 3d 20 7e 73 71 6c 69 74 65  t->u.i = ~sqlite
138f0 33 56 64 62 65 49 6e 74 56 61 6c 75 65 28 70 49  3VdbeIntValue(pI
13900 6e 31 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  n1);.  }.  break
13910 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
13920 4f 6e 63 65 20 50 31 20 50 32 20 2a 20 2a 20 2a  Once P1 P2 * * *
13930 0a 2a 2a 0a 2a 2a 20 46 61 6c 6c 20 74 68 72 6f  .**.** Fall thro
13940 75 67 68 20 74 6f 20 74 68 65 20 6e 65 78 74 20  ugh to the next 
13950 69 6e 73 74 72 75 63 74 69 6f 6e 20 74 68 65 20  instruction the 
13960 66 69 72 73 74 20 74 69 6d 65 20 74 68 69 73 20  first time this 
13970 6f 70 63 6f 64 65 20 69 73 0a 2a 2a 20 65 6e 63  opcode is.** enc
13980 6f 75 6e 74 65 72 65 64 20 6f 6e 20 65 61 63 68  ountered on each
13990 20 69 6e 76 6f 63 61 74 69 6f 6e 20 6f 66 20 74   invocation of t
139a0 68 65 20 62 79 74 65 2d 63 6f 64 65 20 70 72 6f  he byte-code pro
139b0 67 72 61 6d 2e 20 20 4a 75 6d 70 20 74 6f 20 50  gram.  Jump to P
139c0 32 0a 2a 2a 20 6f 6e 20 74 68 65 20 73 65 63 6f  2.** on the seco
139d0 6e 64 20 61 6e 64 20 61 6c 6c 20 73 75 62 73 65  nd and all subse
139e0 71 75 65 6e 74 20 65 6e 63 6f 75 6e 74 65 72 73  quent encounters
139f0 20 64 75 72 69 6e 67 20 74 68 65 20 73 61 6d 65   during the same
13a00 20 69 6e 76 6f 63 61 74 69 6f 6e 2e 0a 2a 2a 0a   invocation..**.
13a10 2a 2a 20 54 6f 70 2d 6c 65 76 65 6c 20 70 72 6f  ** Top-level pro
13a20 67 72 61 6d 73 20 64 65 74 65 72 6d 69 6e 65 20  grams determine 
13a30 66 69 72 73 74 20 69 6e 76 6f 63 61 74 69 6f 6e  first invocation
13a40 20 62 79 20 63 6f 6d 70 61 72 69 6e 67 20 74 68   by comparing th
13a50 65 20 50 31 0a 2a 2a 20 6f 70 65 72 61 6e 64 20  e P1.** operand 
13a60 61 67 61 69 6e 73 74 20 74 68 65 20 50 31 20 6f  against the P1 o
13a70 70 65 72 61 6e 64 20 6f 6e 20 74 68 65 20 4f 50  perand on the OP
13a80 5f 49 6e 69 74 20 6f 70 63 6f 64 65 20 61 74 20  _Init opcode at 
13a90 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 0a 2a 2a  the beginning.**
13aa0 20 6f 66 20 74 68 65 20 70 72 6f 67 72 61 6d 2e   of the program.
13ab0 20 20 49 66 20 74 68 65 20 50 31 20 76 61 6c 75    If the P1 valu
13ac0 65 73 20 64 69 66 66 65 72 2c 20 74 68 65 6e 20  es differ, then 
13ad0 66 61 6c 6c 20 74 68 72 6f 75 67 68 20 61 6e 64  fall through and
13ae0 20 6d 61 6b 65 0a 2a 2a 20 74 68 65 20 50 31 20   make.** the P1 
13af0 6f 66 20 74 68 69 73 20 6f 70 63 6f 64 65 20 65  of this opcode e
13b00 71 75 61 6c 20 74 6f 20 74 68 65 20 50 31 20 6f  qual to the P1 o
13b10 66 20 4f 50 5f 49 6e 69 74 2e 20 20 49 66 20 50  f OP_Init.  If P
13b20 31 20 76 61 6c 75 65 73 20 61 72 65 0a 2a 2a 20  1 values are.** 
13b30 74 68 65 20 73 61 6d 65 20 74 68 65 6e 20 74 61  the same then ta
13b40 6b 65 20 74 68 65 20 6a 75 6d 70 2e 0a 2a 2a 0a  ke the jump..**.
13b50 2a 2a 20 46 6f 72 20 73 75 62 70 72 6f 67 72 61  ** For subprogra
13b60 6d 73 2c 20 74 68 65 72 65 20 69 73 20 61 20 62  ms, there is a b
13b70 69 74 6d 61 73 6b 20 69 6e 20 74 68 65 20 56 64  itmask in the Vd
13b80 62 65 46 72 61 6d 65 20 74 68 61 74 20 64 65 74  beFrame that det
13b90 65 72 6d 69 6e 65 73 0a 2a 2a 20 77 68 65 74 68  ermines.** wheth
13ba0 65 72 20 6f 72 20 6e 6f 74 20 74 68 65 20 6a 75  er or not the ju
13bb0 6d 70 20 73 68 6f 75 6c 64 20 62 65 20 74 61 6b  mp should be tak
13bc0 65 6e 2e 20 20 54 68 65 20 62 69 74 6d 61 73 6b  en.  The bitmask
13bd0 20 69 73 20 6e 65 63 65 73 73 61 72 79 0a 2a 2a   is necessary.**
13be0 20 62 65 63 61 75 73 65 20 74 68 65 20 73 65 6c   because the sel
13bf0 66 2d 61 6c 74 65 72 69 6e 67 20 63 6f 64 65 20  f-altering code 
13c00 74 72 69 63 6b 20 64 6f 65 73 20 6e 6f 74 20 77  trick does not w
13c10 6f 72 6b 20 66 6f 72 20 72 65 63 75 72 73 69 76  ork for recursiv
13c20 65 0a 2a 2a 20 74 72 69 67 67 65 72 73 2e 0a 2a  e.** triggers..*
13c30 2f 0a 63 61 73 65 20 4f 50 5f 4f 6e 63 65 3a 20  /.case OP_Once: 
13c40 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  {             /*
13c50 20 6a 75 6d 70 20 2a 2f 0a 20 20 75 33 32 20 69   jump */.  u32 i
13c60 41 64 64 72 3b 20 20 20 20 20 20 20 20 20 20 20  Addr;           
13c70 20 20 20 20 20 2f 2a 20 41 64 64 72 65 73 73 20       /* Address 
13c80 6f 66 20 74 68 69 73 20 69 6e 73 74 72 75 63 74  of this instruct
13c90 69 6f 6e 20 2a 2f 0a 20 20 61 73 73 65 72 74 28  ion */.  assert(
13ca0 20 70 2d 3e 61 4f 70 5b 30 5d 2e 6f 70 63 6f 64   p->aOp[0].opcod
13cb0 65 3d 3d 4f 50 5f 49 6e 69 74 20 29 3b 0a 20 20  e==OP_Init );.  
13cc0 69 66 28 20 70 2d 3e 70 46 72 61 6d 65 20 29 7b  if( p->pFrame ){
13cd0 0a 20 20 20 20 69 41 64 64 72 20 3d 20 28 69 6e  .    iAddr = (in
13ce0 74 29 28 70 4f 70 20 2d 20 70 2d 3e 61 4f 70 29  t)(pOp - p->aOp)
13cf0 3b 0a 20 20 20 20 69 66 28 20 28 70 2d 3e 70 46  ;.    if( (p->pF
13d00 72 61 6d 65 2d 3e 61 4f 6e 63 65 5b 69 41 64 64  rame->aOnce[iAdd
13d10 72 2f 38 5d 20 26 20 28 31 3c 3c 28 69 41 64 64  r/8] & (1<<(iAdd
13d20 72 20 26 20 37 29 29 29 21 3d 30 20 29 7b 0a 20  r & 7)))!=0 ){. 
13d30 20 20 20 20 20 56 64 62 65 42 72 61 6e 63 68 54       VdbeBranchT
13d40 61 6b 65 6e 28 31 2c 20 32 29 3b 0a 20 20 20 20  aken(1, 2);.    
13d50 20 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70    goto jump_to_p
13d60 32 3b 0a 20 20 20 20 7d 0a 20 20 20 20 70 2d 3e  2;.    }.    p->
13d70 70 46 72 61 6d 65 2d 3e 61 4f 6e 63 65 5b 69 41  pFrame->aOnce[iA
13d80 64 64 72 2f 38 5d 20 7c 3d 20 31 3c 3c 28 69 41  ddr/8] |= 1<<(iA
13d90 64 64 72 20 26 20 37 29 3b 0a 20 20 7d 65 6c 73  ddr & 7);.  }els
13da0 65 7b 0a 20 20 20 20 69 66 28 20 70 2d 3e 61 4f  e{.    if( p->aO
13db0 70 5b 30 5d 2e 70 31 3d 3d 70 4f 70 2d 3e 70 31  p[0].p1==pOp->p1
13dc0 20 29 7b 0a 20 20 20 20 20 20 56 64 62 65 42 72   ){.      VdbeBr
13dd0 61 6e 63 68 54 61 6b 65 6e 28 31 2c 20 32 29 3b  anchTaken(1, 2);
13de0 0a 20 20 20 20 20 20 67 6f 74 6f 20 6a 75 6d 70  .      goto jump
13df0 5f 74 6f 5f 70 32 3b 0a 20 20 20 20 7d 0a 20 20  _to_p2;.    }.  
13e00 7d 0a 20 20 56 64 62 65 42 72 61 6e 63 68 54 61  }.  VdbeBranchTa
13e10 6b 65 6e 28 30 2c 20 32 29 3b 0a 20 20 70 4f 70  ken(0, 2);.  pOp
13e20 2d 3e 70 31 20 3d 20 70 2d 3e 61 4f 70 5b 30 5d  ->p1 = p->aOp[0]
13e30 2e 70 31 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .p1;.  break;.}.
13e40 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 66 20 50  ./* Opcode: If P
13e50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a  1 P2 P3 * *.**.*
13e60 2a 20 4a 75 6d 70 20 74 6f 20 50 32 20 69 66 20  * Jump to P2 if 
13e70 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67  the value in reg
13e80 69 73 74 65 72 20 50 31 20 69 73 20 74 72 75 65  ister P1 is true
13e90 2e 20 20 54 68 65 20 76 61 6c 75 65 0a 2a 2a 20  .  The value.** 
13ea0 69 73 20 63 6f 6e 73 69 64 65 72 65 64 20 74 72  is considered tr
13eb0 75 65 20 69 66 20 69 74 20 69 73 20 6e 75 6d 65  ue if it is nume
13ec0 72 69 63 20 61 6e 64 20 6e 6f 6e 2d 7a 65 72 6f  ric and non-zero
13ed0 2e 20 20 49 66 20 74 68 65 20 76 61 6c 75 65 0a  .  If the value.
13ee0 2a 2a 20 69 6e 20 50 31 20 69 73 20 4e 55 4c 4c  ** in P1 is NULL
13ef0 20 74 68 65 6e 20 74 61 6b 65 20 74 68 65 20 6a   then take the j
13f00 75 6d 70 20 69 66 20 61 6e 64 20 6f 6e 6c 79 20  ump if and only 
13f10 69 66 20 50 33 20 69 73 20 6e 6f 6e 2d 7a 65 72  if P3 is non-zer
13f20 6f 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 66  o..*/.case OP_If
13f30 3a 20 20 7b 20 20 20 20 20 20 20 20 20 20 20 20  :  {            
13f40 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 20     /* jump, in1 
13f50 2a 2f 0a 20 20 69 6e 74 20 63 3b 0a 20 20 63 20  */.  int c;.  c 
13f60 3d 20 73 71 6c 69 74 65 33 56 64 62 65 42 6f 6f  = sqlite3VdbeBoo
13f70 6c 65 61 6e 56 61 6c 75 65 28 26 61 4d 65 6d 5b  leanValue(&aMem[
13f80 70 4f 70 2d 3e 70 31 5d 2c 20 70 4f 70 2d 3e 70  pOp->p1], pOp->p
13f90 33 29 3b 0a 20 20 56 64 62 65 42 72 61 6e 63 68  3);.  VdbeBranch
13fa0 54 61 6b 65 6e 28 63 21 3d 30 2c 20 32 29 3b 0a  Taken(c!=0, 2);.
13fb0 20 20 69 66 28 20 63 20 29 20 67 6f 74 6f 20 6a    if( c ) goto j
13fc0 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 62 72 65  ump_to_p2;.  bre
13fd0 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
13fe0 3a 20 49 66 4e 6f 74 20 50 31 20 50 32 20 50 33  : IfNot P1 P2 P3
13ff0 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70 20   * *.**.** Jump 
14000 74 6f 20 50 32 20 69 66 20 74 68 65 20 76 61 6c  to P2 if the val
14010 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
14020 31 20 69 73 20 46 61 6c 73 65 2e 20 20 54 68 65  1 is False.  The
14030 20 76 61 6c 75 65 0a 2a 2a 20 69 73 20 63 6f 6e   value.** is con
14040 73 69 64 65 72 65 64 20 66 61 6c 73 65 20 69 66  sidered false if
14050 20 69 74 20 68 61 73 20 61 20 6e 75 6d 65 72 69   it has a numeri
14060 63 20 76 61 6c 75 65 20 6f 66 20 7a 65 72 6f 2e  c value of zero.
14070 20 20 49 66 20 74 68 65 20 76 61 6c 75 65 0a 2a    If the value.*
14080 2a 20 69 6e 20 50 31 20 69 73 20 4e 55 4c 4c 20  * in P1 is NULL 
14090 74 68 65 6e 20 74 61 6b 65 20 74 68 65 20 6a 75  then take the ju
140a0 6d 70 20 69 66 20 61 6e 64 20 6f 6e 6c 79 20 69  mp if and only i
140b0 66 20 50 33 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f  f P3 is non-zero
140c0 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 66 4e  ..*/.case OP_IfN
140d0 6f 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  ot: {           
140e0 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f   /* jump, in1 */
140f0 0a 20 20 69 6e 74 20 63 3b 0a 20 20 63 20 3d 20  .  int c;.  c = 
14100 21 73 71 6c 69 74 65 33 56 64 62 65 42 6f 6f 6c  !sqlite3VdbeBool
14110 65 61 6e 56 61 6c 75 65 28 26 61 4d 65 6d 5b 70  eanValue(&aMem[p
14120 4f 70 2d 3e 70 31 5d 2c 20 21 70 4f 70 2d 3e 70  Op->p1], !pOp->p
14130 33 29 3b 0a 20 20 56 64 62 65 42 72 61 6e 63 68  3);.  VdbeBranch
14140 54 61 6b 65 6e 28 63 21 3d 30 2c 20 32 29 3b 0a  Taken(c!=0, 2);.
14150 20 20 69 66 28 20 63 20 29 20 67 6f 74 6f 20 6a    if( c ) goto j
14160 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 62 72 65  ump_to_p2;.  bre
14170 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
14180 3a 20 49 73 4e 75 6c 6c 20 50 31 20 50 32 20 2a  : IsNull P1 P2 *
14190 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73   * *.** Synopsis
141a0 3a 20 69 66 20 72 5b 50 31 5d 3d 3d 4e 55 4c 4c  : if r[P1]==NULL
141b0 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 4a   goto P2.**.** J
141c0 75 6d 70 20 74 6f 20 50 32 20 69 66 20 74 68 65  ump to P2 if the
141d0 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
141e0 65 72 20 50 31 20 69 73 20 4e 55 4c 4c 2e 0a 2a  er P1 is NULL..*
141f0 2f 0a 63 61 73 65 20 4f 50 5f 49 73 4e 75 6c 6c  /.case OP_IsNull
14200 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f  : {            /
14210 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 49 53 4e  * same as TK_ISN
14220 55 4c 4c 2c 20 6a 75 6d 70 2c 20 69 6e 31 20 2a  ULL, jump, in1 *
14230 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d  /.  pIn1 = &aMem
14240 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 56 64 62  [pOp->p1];.  Vdb
14250 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 20 28 70  eBranchTaken( (p
14260 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  In1->flags & MEM
14270 5f 4e 75 6c 6c 29 21 3d 30 2c 20 32 29 3b 0a 20  _Null)!=0, 2);. 
14280 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67   if( (pIn1->flag
14290 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29 21 3d 30  s & MEM_Null)!=0
142a0 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 6a 75 6d   ){.    goto jum
142b0 70 5f 74 6f 5f 70 32 3b 0a 20 20 7d 0a 20 20 62  p_to_p2;.  }.  b
142c0 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
142d0 64 65 3a 20 4e 6f 74 4e 75 6c 6c 20 50 31 20 50  de: NotNull P1 P
142e0 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70  2 * * *.** Synop
142f0 73 69 73 3a 20 69 66 20 72 5b 50 31 5d 21 3d 4e  sis: if r[P1]!=N
14300 55 4c 4c 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a  ULL goto P2.**.*
14310 2a 20 4a 75 6d 70 20 74 6f 20 50 32 20 69 66 20  * Jump to P2 if 
14320 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67  the value in reg
14330 69 73 74 65 72 20 50 31 20 69 73 20 6e 6f 74 20  ister P1 is not 
14340 4e 55 4c 4c 2e 20 20 0a 2a 2f 0a 63 61 73 65 20  NULL.  .*/.case 
14350 4f 50 5f 4e 6f 74 4e 75 6c 6c 3a 20 7b 20 20 20  OP_NotNull: {   
14360 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65           /* same
14370 20 61 73 20 54 4b 5f 4e 4f 54 4e 55 4c 4c 2c 20   as TK_NOTNULL, 
14380 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20 70  jump, in1 */.  p
14390 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In1 = &aMem[pOp-
143a0 3e 70 31 5d 3b 0a 20 20 56 64 62 65 42 72 61 6e  >p1];.  VdbeBran
143b0 63 68 54 61 6b 65 6e 28 20 28 70 49 6e 31 2d 3e  chTaken( (pIn1->
143c0 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c  flags & MEM_Null
143d0 29 3d 3d 30 2c 20 32 29 3b 0a 20 20 69 66 28 20  )==0, 2);.  if( 
143e0 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d  (pIn1->flags & M
143f0 45 4d 5f 4e 75 6c 6c 29 3d 3d 30 20 29 7b 0a 20  EM_Null)==0 ){. 
14400 20 20 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f     goto jump_to_
14410 70 32 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  p2;.  }.  break;
14420 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49  .}../* Opcode: I
14430 66 4e 75 6c 6c 52 6f 77 20 50 31 20 50 32 20 50  fNullRow P1 P2 P
14440 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69  3 * *.** Synopsi
14450 73 3a 20 69 66 20 50 31 2e 6e 75 6c 6c 52 6f 77  s: if P1.nullRow
14460 20 74 68 65 6e 20 72 5b 50 33 5d 3d 4e 55 4c 4c   then r[P3]=NULL
14470 2c 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20  , goto P2.**.** 
14480 43 68 65 63 6b 20 74 68 65 20 63 75 72 73 6f 72  Check the cursor
14490 20 50 31 20 74 6f 20 73 65 65 20 69 66 20 69 74   P1 to see if it
144a0 20 69 73 20 63 75 72 72 65 6e 74 6c 79 20 70 6f   is currently po
144b0 69 6e 74 69 6e 67 20 61 74 20 61 20 4e 55 4c 4c  inting at a NULL
144c0 20 72 6f 77 2e 0a 2a 2a 20 49 66 20 69 74 20 69   row..** If it i
144d0 73 2c 20 74 68 65 6e 20 73 65 74 20 72 65 67 69  s, then set regi
144e0 73 74 65 72 20 50 33 20 74 6f 20 4e 55 4c 4c 20  ster P3 to NULL 
144f0 61 6e 64 20 6a 75 6d 70 20 69 6d 6d 65 64 69 61  and jump immedia
14500 74 65 6c 79 20 74 6f 20 50 32 2e 0a 2a 2a 20 49  tely to P2..** I
14510 66 20 50 31 20 69 73 20 6e 6f 74 20 6f 6e 20 61  f P1 is not on a
14520 20 4e 55 4c 4c 20 72 6f 77 2c 20 74 68 65 6e 20   NULL row, then 
14530 66 61 6c 6c 20 74 68 72 6f 75 67 68 20 77 69 74  fall through wit
14540 68 6f 75 74 20 6d 61 6b 69 6e 67 20 61 6e 79 0a  hout making any.
14550 2a 2a 20 63 68 61 6e 67 65 73 2e 0a 2a 2f 0a 63  ** changes..*/.c
14560 61 73 65 20 4f 50 5f 49 66 4e 75 6c 6c 52 6f 77  ase OP_IfNullRow
14570 3a 20 7b 20 20 20 20 20 20 20 20 20 2f 2a 20 6a  : {         /* j
14580 75 6d 70 20 2a 2f 0a 20 20 61 73 73 65 72 74 28  ump */.  assert(
14590 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70   pOp->p1>=0 && p
145a0 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f  Op->p1<p->nCurso
145b0 72 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  r );.  assert( p
145c0 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d  ->apCsr[pOp->p1]
145d0 21 3d 30 20 29 3b 0a 20 20 69 66 28 20 70 2d 3e  !=0 );.  if( p->
145e0 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 2d 3e  apCsr[pOp->p1]->
145f0 6e 75 6c 6c 52 6f 77 20 29 7b 0a 20 20 20 20 73  nullRow ){.    s
14600 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74  qlite3VdbeMemSet
14610 4e 75 6c 6c 28 61 4d 65 6d 20 2b 20 70 4f 70 2d  Null(aMem + pOp-
14620 3e 70 33 29 3b 0a 20 20 20 20 67 6f 74 6f 20 6a  >p3);.    goto j
14630 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 7d 0a 20  ump_to_p2;.  }. 
14640 20 62 72 65 61 6b 3b 0a 7d 0a 0a 23 69 66 64 65   break;.}..#ifde
14650 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  f SQLITE_ENABLE_
14660 4f 46 46 53 45 54 5f 53 51 4c 5f 46 55 4e 43 0a  OFFSET_SQL_FUNC.
14670 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f 66 66 73 65  /* Opcode: Offse
14680 74 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a  t P1 P2 P3 * *.*
14690 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 33  * Synopsis: r[P3
146a0 5d 20 3d 20 73 71 6c 69 74 65 5f 6f 66 66 73 65  ] = sqlite_offse
146b0 74 28 50 31 29 0a 2a 2a 0a 2a 2a 20 53 74 6f 72  t(P1).**.** Stor
146c0 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 72 5b  e in register r[
146d0 50 33 5d 20 74 68 65 20 62 79 74 65 20 6f 66 66  P3] the byte off
146e0 73 65 74 20 69 6e 74 6f 20 74 68 65 20 64 61 74  set into the dat
146f0 61 62 61 73 65 20 66 69 6c 65 20 74 68 61 74 20  abase file that 
14700 69 73 20 74 68 65 0a 2a 2a 20 73 74 61 72 74 20  is the.** start 
14710 6f 66 20 74 68 65 20 70 61 79 6c 6f 61 64 20 66  of the payload f
14720 6f 72 20 74 68 65 20 72 65 63 6f 72 64 20 61 74  or the record at
14730 20 77 68 69 63 68 20 74 68 61 74 20 63 75 72 73   which that curs
14740 6f 72 20 50 31 20 69 73 20 63 75 72 72 65 6e 74  or P1 is current
14750 6c 79 0a 2a 2a 20 70 6f 69 6e 74 69 6e 67 2e 0a  ly.** pointing..
14760 2a 2a 0a 2a 2a 20 50 32 20 69 73 20 74 68 65 20  **.** P2 is the 
14770 63 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72 20 66 6f  column number fo
14780 72 20 74 68 65 20 61 72 67 75 6d 65 6e 74 20 74  r the argument t
14790 6f 20 74 68 65 20 73 71 6c 69 74 65 5f 6f 66 66  o the sqlite_off
147a0 73 65 74 28 29 20 66 75 6e 63 74 69 6f 6e 2e 0a  set() function..
147b0 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 64  ** This opcode d
147c0 6f 65 73 20 6e 6f 74 20 75 73 65 20 50 32 20 69  oes not use P2 i
147d0 74 73 65 6c 66 2c 20 62 75 74 20 74 68 65 20 50  tself, but the P
147e0 32 20 76 61 6c 75 65 20 69 73 20 75 73 65 64 20  2 value is used 
147f0 62 79 20 74 68 65 0a 2a 2a 20 63 6f 64 65 20 67  by the.** code g
14800 65 6e 65 72 61 74 6f 72 2e 20 20 54 68 65 20 50  enerator.  The P
14810 31 2c 20 50 32 2c 20 61 6e 64 20 50 33 20 6f 70  1, P2, and P3 op
14820 65 72 61 6e 64 73 20 74 6f 20 74 68 69 73 20 6f  erands to this o
14830 70 63 6f 64 65 20 61 72 65 20 74 68 65 0a 2a 2a  pcode are the.**
14840 20 73 61 6d 65 20 61 73 20 66 6f 72 20 4f 50 5f   same as for OP_
14850 43 6f 6c 75 6d 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68  Column..**.** Th
14860 69 73 20 6f 70 63 6f 64 65 20 69 73 20 6f 6e 6c  is opcode is onl
14870 79 20 61 76 61 69 6c 61 62 6c 65 20 69 66 20 53  y available if S
14880 51 4c 69 74 65 20 69 73 20 63 6f 6d 70 69 6c 65  QLite is compile
14890 64 20 77 69 74 68 20 74 68 65 0a 2a 2a 20 2d 44  d with the.** -D
148a0 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 4f 46  SQLITE_ENABLE_OF
148b0 46 53 45 54 5f 53 51 4c 5f 46 55 4e 43 20 6f 70  FSET_SQL_FUNC op
148c0 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  tion..*/.case OP
148d0 5f 4f 66 66 73 65 74 3a 20 7b 20 20 20 20 20 20  _Offset: {      
148e0 20 20 20 20 2f 2a 20 6f 75 74 33 20 2a 2f 0a 20      /* out3 */. 
148f0 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b   VdbeCursor *pC;
14900 20 20 20 20 2f 2a 20 54 68 65 20 56 44 42 45 20      /* The VDBE 
14910 63 75 72 73 6f 72 20 2a 2f 0a 20 20 61 73 73 65  cursor */.  asse
14920 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26  rt( pOp->p1>=0 &
14930 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75  & pOp->p1<p->nCu
14940 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70  rsor );.  pC = p
14950 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d  ->apCsr[pOp->p1]
14960 3b 0a 20 20 70 4f 75 74 20 3d 20 26 70 2d 3e 61  ;.  pOut = &p->a
14970 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20  Mem[pOp->p3];.  
14980 69 66 28 20 4e 45 56 45 52 28 70 43 3d 3d 30 29  if( NEVER(pC==0)
14990 20 7c 7c 20 70 43 2d 3e 65 43 75 72 54 79 70 65   || pC->eCurType
149a0 21 3d 43 55 52 54 59 50 45 5f 42 54 52 45 45 20  !=CURTYPE_BTREE 
149b0 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  ){.    sqlite3Vd
149c0 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 4f 75  beMemSetNull(pOu
149d0 74 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  t);.  }else{.   
149e0 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53   sqlite3VdbeMemS
149f0 65 74 49 6e 74 36 34 28 70 4f 75 74 2c 20 73 71  etInt64(pOut, sq
14a00 6c 69 74 65 33 42 74 72 65 65 4f 66 66 73 65 74  lite3BtreeOffset
14a10 28 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 29  (pC->uc.pCursor)
14a20 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  );.  }.  break;.
14a30 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49  }.#endif /* SQLI
14a40 54 45 5f 45 4e 41 42 4c 45 5f 4f 46 46 53 45 54  TE_ENABLE_OFFSET
14a50 5f 53 51 4c 5f 46 55 4e 43 20 2a 2f 0a 0a 2f 2a  _SQL_FUNC */../*
14a60 20 4f 70 63 6f 64 65 3a 20 43 6f 6c 75 6d 6e 20   Opcode: Column 
14a70 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a  P1 P2 P3 P4 P5.*
14a80 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 33  * Synopsis: r[P3
14a90 5d 3d 50 58 0a 2a 2a 0a 2a 2a 20 49 6e 74 65 72  ]=PX.**.** Inter
14aa0 70 72 65 74 20 74 68 65 20 64 61 74 61 20 74 68  pret the data th
14ab0 61 74 20 63 75 72 73 6f 72 20 50 31 20 70 6f 69  at cursor P1 poi
14ac0 6e 74 73 20 74 6f 20 61 73 20 61 20 73 74 72 75  nts to as a stru
14ad0 63 74 75 72 65 20 62 75 69 6c 74 20 75 73 69 6e  cture built usin
14ae0 67 0a 2a 2a 20 74 68 65 20 4d 61 6b 65 52 65 63  g.** the MakeRec
14af0 6f 72 64 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e  ord instruction.
14b00 20 20 28 53 65 65 20 74 68 65 20 4d 61 6b 65 52    (See the MakeR
14b10 65 63 6f 72 64 20 6f 70 63 6f 64 65 20 66 6f 72  ecord opcode for
14b20 20 61 64 64 69 74 69 6f 6e 61 6c 0a 2a 2a 20 69   additional.** i
14b30 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74  nformation about
14b40 20 74 68 65 20 66 6f 72 6d 61 74 20 6f 66 20 74   the format of t
14b50 68 65 20 64 61 74 61 2e 29 20 20 45 78 74 72 61  he data.)  Extra
14b60 63 74 20 74 68 65 20 50 32 2d 74 68 20 63 6f 6c  ct the P2-th col
14b70 75 6d 6e 0a 2a 2a 20 66 72 6f 6d 20 74 68 69 73  umn.** from this
14b80 20 72 65 63 6f 72 64 2e 20 20 49 66 20 74 68 65   record.  If the
14b90 72 65 20 61 72 65 20 6c 65 73 73 20 74 68 61 74  re are less that
14ba0 20 28 50 32 2b 31 29 20 0a 2a 2a 20 76 61 6c 75   (P2+1) .** valu
14bb0 65 73 20 69 6e 20 74 68 65 20 72 65 63 6f 72 64  es in the record
14bc0 2c 20 65 78 74 72 61 63 74 20 61 20 4e 55 4c 4c  , extract a NULL
14bd0 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 76 61 6c 75  ..**.** The valu
14be0 65 20 65 78 74 72 61 63 74 65 64 20 69 73 20 73  e extracted is s
14bf0 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74 65  tored in registe
14c00 72 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74  r P3..**.** If t
14c10 68 65 20 72 65 63 6f 72 64 20 63 6f 6e 74 61 69  he record contai
14c20 6e 73 20 66 65 77 65 72 20 74 68 61 6e 20 50 32  ns fewer than P2
14c30 20 66 69 65 6c 64 73 2c 20 74 68 65 6e 20 65 78   fields, then ex
14c40 74 72 61 63 74 20 61 20 4e 55 4c 4c 2e 20 20 4f  tract a NULL.  O
14c50 72 2c 0a 2a 2a 20 69 66 20 74 68 65 20 50 34 20  r,.** if the P4 
14c60 61 72 67 75 6d 65 6e 74 20 69 73 20 61 20 50 34  argument is a P4
14c70 5f 4d 45 4d 20 75 73 65 20 74 68 65 20 76 61 6c  _MEM use the val
14c80 75 65 20 6f 66 20 74 68 65 20 50 34 20 61 72 67  ue of the P4 arg
14c90 75 6d 65 6e 74 20 61 73 0a 2a 2a 20 74 68 65 20  ument as.** the 
14ca0 72 65 73 75 6c 74 2e 0a 2a 2a 0a 2a 2a 20 49 66  result..**.** If
14cb0 20 74 68 65 20 4f 50 46 4c 41 47 5f 4c 45 4e 47   the OPFLAG_LENG
14cc0 54 48 41 52 47 20 61 6e 64 20 4f 50 46 4c 41 47  THARG and OPFLAG
14cd0 5f 54 59 50 45 4f 46 41 52 47 20 62 69 74 73 20  _TYPEOFARG bits 
14ce0 61 72 65 20 73 65 74 20 6f 6e 20 50 35 20 74 68  are set on P5 th
14cf0 65 6e 0a 2a 2a 20 74 68 65 20 72 65 73 75 6c 74  en.** the result
14d00 20 69 73 20 67 75 61 72 61 6e 74 65 65 64 20 74   is guaranteed t
14d10 6f 20 6f 6e 6c 79 20 62 65 20 75 73 65 64 20 61  o only be used a
14d20 73 20 74 68 65 20 61 72 67 75 6d 65 6e 74 20 6f  s the argument o
14d30 66 20 61 20 6c 65 6e 67 74 68 28 29 0a 2a 2a 20  f a length().** 
14d40 6f 72 20 74 79 70 65 6f 66 28 29 20 66 75 6e 63  or typeof() func
14d50 74 69 6f 6e 2c 20 72 65 73 70 65 63 74 69 76 65  tion, respective
14d60 6c 79 2e 20 20 54 68 65 20 6c 6f 61 64 69 6e 67  ly.  The loading
14d70 20 6f 66 20 6c 61 72 67 65 20 62 6c 6f 62 73 20   of large blobs 
14d80 63 61 6e 20 62 65 0a 2a 2a 20 73 6b 69 70 70 65  can be.** skippe
14d90 64 20 66 6f 72 20 6c 65 6e 67 74 68 28 29 20 61  d for length() a
14da0 6e 64 20 61 6c 6c 20 63 6f 6e 74 65 6e 74 20 6c  nd all content l
14db0 6f 61 64 69 6e 67 20 63 61 6e 20 62 65 20 73 6b  oading can be sk
14dc0 69 70 70 65 64 20 66 6f 72 20 74 79 70 65 6f 66  ipped for typeof
14dd0 28 29 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43  ()..*/.case OP_C
14de0 6f 6c 75 6d 6e 3a 20 7b 0a 20 20 69 6e 74 20 70  olumn: {.  int p
14df0 32 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  2;            /*
14e00 20 63 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72 20 74   column number t
14e10 6f 20 72 65 74 72 69 65 76 65 20 2a 2f 0a 20 20  o retrieve */.  
14e20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 20  VdbeCursor *pC; 
14e30 20 20 20 2f 2a 20 54 68 65 20 56 44 42 45 20 63     /* The VDBE c
14e40 75 72 73 6f 72 20 2a 2f 0a 20 20 42 74 43 75 72  ursor */.  BtCur
14e50 73 6f 72 20 2a 70 43 72 73 72 3b 20 20 20 2f 2a  sor *pCrsr;   /*
14e60 20 54 68 65 20 42 54 72 65 65 20 63 75 72 73 6f   The BTree curso
14e70 72 20 2a 2f 0a 20 20 75 33 32 20 2a 61 4f 66 66  r */.  u32 *aOff
14e80 73 65 74 3b 20 20 20 20 20 20 2f 2a 20 61 4f 66  set;      /* aOf
14e90 66 73 65 74 5b 69 5d 20 69 73 20 6f 66 66 73 65  fset[i] is offse
14ea0 74 20 74 6f 20 73 74 61 72 74 20 6f 66 20 64 61  t to start of da
14eb0 74 61 20 66 6f 72 20 69 2d 74 68 20 63 6f 6c 75  ta for i-th colu
14ec0 6d 6e 20 2a 2f 0a 20 20 69 6e 74 20 6c 65 6e 3b  mn */.  int len;
14ed0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68             /* Th
14ee0 65 20 6c 65 6e 67 74 68 20 6f 66 20 74 68 65 20  e length of the 
14ef0 73 65 72 69 61 6c 69 7a 65 64 20 64 61 74 61 20  serialized data 
14f00 66 6f 72 20 74 68 65 20 63 6f 6c 75 6d 6e 20 2a  for the column *
14f10 2f 0a 20 20 69 6e 74 20 69 3b 20 20 20 20 20 20  /.  int i;      
14f20 20 20 20 20 20 20 20 2f 2a 20 4c 6f 6f 70 20 63         /* Loop c
14f30 6f 75 6e 74 65 72 20 2a 2f 0a 20 20 4d 65 6d 20  ounter */.  Mem 
14f40 2a 70 44 65 73 74 3b 20 20 20 20 20 20 20 20 2f  *pDest;        /
14f50 2a 20 57 68 65 72 65 20 74 6f 20 77 72 69 74 65  * Where to write
14f60 20 74 68 65 20 65 78 74 72 61 63 74 65 64 20 76   the extracted v
14f70 61 6c 75 65 20 2a 2f 0a 20 20 4d 65 6d 20 73 4d  alue */.  Mem sM
14f80 65 6d 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  em;          /* 
14f90 46 6f 72 20 73 74 6f 72 69 6e 67 20 74 68 65 20  For storing the 
14fa0 72 65 63 6f 72 64 20 62 65 69 6e 67 20 64 65 63  record being dec
14fb0 6f 64 65 64 20 2a 2f 0a 20 20 63 6f 6e 73 74 20  oded */.  const 
14fc0 75 38 20 2a 7a 44 61 74 61 3b 20 20 20 2f 2a 20  u8 *zData;   /* 
14fd0 50 61 72 74 20 6f 66 20 74 68 65 20 72 65 63 6f  Part of the reco
14fe0 72 64 20 62 65 69 6e 67 20 64 65 63 6f 64 65 64  rd being decoded
14ff0 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 75 38 20 2a   */.  const u8 *
15000 7a 48 64 72 3b 20 20 20 20 2f 2a 20 4e 65 78 74  zHdr;    /* Next
15010 20 75 6e 70 61 72 73 65 64 20 62 79 74 65 20 6f   unparsed byte o
15020 66 20 74 68 65 20 68 65 61 64 65 72 20 2a 2f 0a  f the header */.
15030 20 20 63 6f 6e 73 74 20 75 38 20 2a 7a 45 6e 64    const u8 *zEnd
15040 48 64 72 3b 20 2f 2a 20 50 6f 69 6e 74 65 72 20  Hdr; /* Pointer 
15050 74 6f 20 66 69 72 73 74 20 62 79 74 65 20 61 66  to first byte af
15060 74 65 72 20 74 68 65 20 68 65 61 64 65 72 20 2a  ter the header *
15070 2f 0a 20 20 75 36 34 20 6f 66 66 73 65 74 36 34  /.  u64 offset64
15080 3b 20 20 20 20 20 20 2f 2a 20 36 34 2d 62 69 74  ;      /* 64-bit
15090 20 6f 66 66 73 65 74 20 2a 2f 0a 20 20 75 33 32   offset */.  u32
150a0 20 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20   t;             
150b0 2f 2a 20 41 20 74 79 70 65 20 63 6f 64 65 20 66  /* A type code f
150c0 72 6f 6d 20 74 68 65 20 72 65 63 6f 72 64 20 68  rom the record h
150d0 65 61 64 65 72 20 2a 2f 0a 20 20 4d 65 6d 20 2a  eader */.  Mem *
150e0 70 52 65 67 3b 20 20 20 20 20 20 20 20 20 2f 2a  pReg;         /*
150f0 20 50 73 65 75 64 6f 54 61 62 6c 65 20 69 6e 70   PseudoTable inp
15100 75 74 20 72 65 67 69 73 74 65 72 20 2a 2f 0a 0a  ut register */..
15110 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b    pC = p->apCsr[
15120 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 32 20 3d  pOp->p1];.  p2 =
15130 20 70 4f 70 2d 3e 70 32 3b 0a 0a 20 20 2f 2a 20   pOp->p2;..  /* 
15140 49 66 20 74 68 65 20 63 75 72 73 6f 72 20 63 61  If the cursor ca
15150 63 68 65 20 69 73 20 73 74 61 6c 65 20 28 6d 65  che is stale (me
15160 61 6e 69 6e 67 20 69 74 20 69 73 20 6e 6f 74 20  aning it is not 
15170 63 75 72 72 65 6e 74 6c 79 20 70 6f 69 6e 74 20  currently point 
15180 61 74 0a 20 20 2a 2a 20 74 68 65 20 63 6f 72 72  at.  ** the corr
15190 65 63 74 20 72 6f 77 29 20 74 68 65 6e 20 62 72  ect row) then br
151a0 69 6e 67 20 69 74 20 75 70 2d 74 6f 2d 64 61 74  ing it up-to-dat
151b0 65 20 62 79 20 64 6f 69 6e 67 20 74 68 65 20 6e  e by doing the n
151c0 65 63 65 73 73 61 72 79 20 0a 20 20 2a 2a 20 42  ecessary .  ** B
151d0 2d 54 72 65 65 20 73 65 65 6b 2e 20 2a 2f 0a 20  -Tree seek. */. 
151e0 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62   rc = sqlite3Vdb
151f0 65 43 75 72 73 6f 72 4d 6f 76 65 74 6f 28 26 70  eCursorMoveto(&p
15200 43 2c 20 26 70 32 29 3b 0a 20 20 69 66 28 20 72  C, &p2);.  if( r
15210 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64  c ) goto abort_d
15220 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 0a 20 20  ue_to_error;..  
15230 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e  assert( pOp->p3>
15240 30 20 26 26 20 70 4f 70 2d 3e 70 33 3c 3d 28 70  0 && pOp->p3<=(p
15250 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43  ->nMem+1 - p->nC
15260 75 72 73 6f 72 29 20 29 3b 0a 20 20 70 44 65 73  ursor) );.  pDes
15270 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  t = &aMem[pOp->p
15280 33 5d 3b 0a 20 20 6d 65 6d 41 62 6f 75 74 54 6f  3];.  memAboutTo
15290 43 68 61 6e 67 65 28 70 2c 20 70 44 65 73 74 29  Change(p, pDest)
152a0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
152b0 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70  >p1>=0 && pOp->p
152c0 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a  1<p->nCursor );.
152d0 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20    assert( pC!=0 
152e0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 32 3c  );.  assert( p2<
152f0 70 43 2d 3e 6e 46 69 65 6c 64 20 29 3b 0a 20 20  pC->nField );.  
15300 61 4f 66 66 73 65 74 20 3d 20 70 43 2d 3e 61 4f  aOffset = pC->aO
15310 66 66 73 65 74 3b 0a 20 20 61 73 73 65 72 74 28  ffset;.  assert(
15320 20 70 43 2d 3e 65 43 75 72 54 79 70 65 21 3d 43   pC->eCurType!=C
15330 55 52 54 59 50 45 5f 56 54 41 42 20 29 3b 0a 20  URTYPE_VTAB );. 
15340 20 61 73 73 65 72 74 28 20 70 43 2d 3e 65 43 75   assert( pC->eCu
15350 72 54 79 70 65 21 3d 43 55 52 54 59 50 45 5f 50  rType!=CURTYPE_P
15360 53 45 55 44 4f 20 7c 7c 20 70 43 2d 3e 6e 75 6c  SEUDO || pC->nul
15370 6c 52 6f 77 20 29 3b 0a 20 20 61 73 73 65 72 74  lRow );.  assert
15380 28 20 70 43 2d 3e 65 43 75 72 54 79 70 65 21 3d  ( pC->eCurType!=
15390 43 55 52 54 59 50 45 5f 53 4f 52 54 45 52 20 29  CURTYPE_SORTER )
153a0 3b 0a 0a 20 20 69 66 28 20 70 43 2d 3e 63 61 63  ;..  if( pC->cac
153b0 68 65 53 74 61 74 75 73 21 3d 70 2d 3e 63 61 63  heStatus!=p->cac
153c0 68 65 43 74 72 20 29 7b 20 20 20 20 20 20 20 20  heCtr ){        
153d0 20 20 20 20 20 20 20 20 2f 2a 4f 50 54 49 4d 49          /*OPTIMI
153e0 5a 41 54 49 4f 4e 2d 49 46 2d 46 41 4c 53 45 2a  ZATION-IF-FALSE*
153f0 2f 0a 20 20 20 20 69 66 28 20 70 43 2d 3e 6e 75  /.    if( pC->nu
15400 6c 6c 52 6f 77 20 29 7b 0a 20 20 20 20 20 20 69  llRow ){.      i
15410 66 28 20 70 43 2d 3e 65 43 75 72 54 79 70 65 3d  f( pC->eCurType=
15420 3d 43 55 52 54 59 50 45 5f 50 53 45 55 44 4f 20  =CURTYPE_PSEUDO 
15430 29 7b 0a 20 20 20 20 20 20 20 20 2f 2a 20 46 6f  ){.        /* Fo
15440 72 20 74 68 65 20 73 70 65 63 69 61 6c 20 63 61  r the special ca
15450 73 65 20 6f 66 20 61 73 20 70 73 65 75 64 6f 2d  se of as pseudo-
15460 63 75 72 73 6f 72 2c 20 74 68 65 20 73 65 65 6b  cursor, the seek
15470 52 65 73 75 6c 74 20 66 69 65 6c 64 0a 20 20 20  Result field.   
15480 20 20 20 20 20 2a 2a 20 69 64 65 6e 74 69 66 69       ** identifi
15490 65 73 20 74 68 65 20 72 65 67 69 73 74 65 72 20  es the register 
154a0 74 68 61 74 20 68 6f 6c 64 73 20 74 68 65 20 72  that holds the r
154b0 65 63 6f 72 64 20 2a 2f 0a 20 20 20 20 20 20 20  ecord */.       
154c0 20 61 73 73 65 72 74 28 20 70 43 2d 3e 73 65 65   assert( pC->see
154d0 6b 52 65 73 75 6c 74 3e 30 20 29 3b 0a 20 20 20  kResult>0 );.   
154e0 20 20 20 20 20 70 52 65 67 20 3d 20 26 61 4d 65       pReg = &aMe
154f0 6d 5b 70 43 2d 3e 73 65 65 6b 52 65 73 75 6c 74  m[pC->seekResult
15500 5d 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72  ];.        asser
15510 74 28 20 70 52 65 67 2d 3e 66 6c 61 67 73 20 26  t( pReg->flags &
15520 20 4d 45 4d 5f 42 6c 6f 62 20 29 3b 0a 20 20 20   MEM_Blob );.   
15530 20 20 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d       assert( mem
15540 49 73 56 61 6c 69 64 28 70 52 65 67 29 20 29 3b  IsValid(pReg) );
15550 0a 20 20 20 20 20 20 20 20 70 43 2d 3e 70 61 79  .        pC->pay
15560 6c 6f 61 64 53 69 7a 65 20 3d 20 70 43 2d 3e 73  loadSize = pC->s
15570 7a 52 6f 77 20 3d 20 70 52 65 67 2d 3e 6e 3b 0a  zRow = pReg->n;.
15580 20 20 20 20 20 20 20 20 70 43 2d 3e 61 52 6f 77          pC->aRow
15590 20 3d 20 28 75 38 2a 29 70 52 65 67 2d 3e 7a 3b   = (u8*)pReg->z;
155a0 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  .      }else{.  
155b0 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
155c0 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 44 65 73  eMemSetNull(pDes
155d0 74 29 3b 0a 20 20 20 20 20 20 20 20 67 6f 74 6f  t);.        goto
155e0 20 6f 70 5f 63 6f 6c 75 6d 6e 5f 6f 75 74 3b 0a   op_column_out;.
155f0 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 65 6c 73        }.    }els
15600 65 7b 0a 20 20 20 20 20 20 70 43 72 73 72 20 3d  e{.      pCrsr =
15610 20 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 3b   pC->uc.pCursor;
15620 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70  .      assert( p
15630 43 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43 55 52  C->eCurType==CUR
15640 54 59 50 45 5f 42 54 52 45 45 20 29 3b 0a 20 20  TYPE_BTREE );.  
15650 20 20 20 20 61 73 73 65 72 74 28 20 70 43 72 73      assert( pCrs
15660 72 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72  r );.      asser
15670 74 28 20 73 71 6c 69 74 65 33 42 74 72 65 65 43  t( sqlite3BtreeC
15680 75 72 73 6f 72 49 73 56 61 6c 69 64 28 70 43 72  ursorIsValid(pCr
15690 73 72 29 20 29 3b 0a 20 20 20 20 20 20 70 43 2d  sr) );.      pC-
156a0 3e 70 61 79 6c 6f 61 64 53 69 7a 65 20 3d 20 73  >payloadSize = s
156b0 71 6c 69 74 65 33 42 74 72 65 65 50 61 79 6c 6f  qlite3BtreePaylo
156c0 61 64 53 69 7a 65 28 70 43 72 73 72 29 3b 0a 20  adSize(pCrsr);. 
156d0 20 20 20 20 20 70 43 2d 3e 61 52 6f 77 20 3d 20       pC->aRow = 
156e0 73 71 6c 69 74 65 33 42 74 72 65 65 50 61 79 6c  sqlite3BtreePayl
156f0 6f 61 64 46 65 74 63 68 28 70 43 72 73 72 2c 20  oadFetch(pCrsr, 
15700 26 70 43 2d 3e 73 7a 52 6f 77 29 3b 0a 20 20 20  &pC->szRow);.   
15710 20 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 73     assert( pC->s
15720 7a 52 6f 77 3c 3d 70 43 2d 3e 70 61 79 6c 6f 61  zRow<=pC->payloa
15730 64 53 69 7a 65 20 29 3b 0a 20 20 20 20 20 20 61  dSize );.      a
15740 73 73 65 72 74 28 20 70 43 2d 3e 73 7a 52 6f 77  ssert( pC->szRow
15750 3c 3d 36 35 35 33 36 20 29 3b 20 20 2f 2a 20 4d  <=65536 );  /* M
15760 61 78 69 6d 75 6d 20 70 61 67 65 20 73 69 7a 65  aximum page size
15770 20 69 73 20 36 34 4b 69 42 20 2a 2f 0a 20 20 20   is 64KiB */.   
15780 20 20 20 69 66 28 20 70 43 2d 3e 70 61 79 6c 6f     if( pC->paylo
15790 61 64 53 69 7a 65 20 3e 20 28 75 33 32 29 64 62  adSize > (u32)db
157a0 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f  ->aLimit[SQLITE_
157b0 4c 49 4d 49 54 5f 4c 45 4e 47 54 48 5d 20 29 7b  LIMIT_LENGTH] ){
157c0 0a 20 20 20 20 20 20 20 20 67 6f 74 6f 20 74 6f  .        goto to
157d0 6f 5f 62 69 67 3b 0a 20 20 20 20 20 20 7d 0a 20  o_big;.      }. 
157e0 20 20 20 7d 0a 20 20 20 20 70 43 2d 3e 63 61 63     }.    pC->cac
157f0 68 65 53 74 61 74 75 73 20 3d 20 70 2d 3e 63 61  heStatus = p->ca
15800 63 68 65 43 74 72 3b 0a 20 20 20 20 70 43 2d 3e  cheCtr;.    pC->
15810 69 48 64 72 4f 66 66 73 65 74 20 3d 20 67 65 74  iHdrOffset = get
15820 56 61 72 69 6e 74 33 32 28 70 43 2d 3e 61 52 6f  Varint32(pC->aRo
15830 77 2c 20 61 4f 66 66 73 65 74 5b 30 5d 29 3b 0a  w, aOffset[0]);.
15840 20 20 20 20 70 43 2d 3e 6e 48 64 72 50 61 72 73      pC->nHdrPars
15850 65 64 20 3d 20 30 3b 0a 0a 0a 20 20 20 20 69 66  ed = 0;...    if
15860 28 20 70 43 2d 3e 73 7a 52 6f 77 3c 61 4f 66 66  ( pC->szRow<aOff
15870 73 65 74 5b 30 5d 20 29 7b 20 20 20 20 20 20 2f  set[0] ){      /
15880 2a 4f 50 54 49 4d 49 5a 41 54 49 4f 4e 2d 49 46  *OPTIMIZATION-IF
15890 2d 46 41 4c 53 45 2a 2f 0a 20 20 20 20 20 20 2f  -FALSE*/.      /
158a0 2a 20 70 43 2d 3e 61 52 6f 77 20 64 6f 65 73 20  * pC->aRow does 
158b0 6e 6f 74 20 68 61 76 65 20 74 6f 20 68 6f 6c 64  not have to hold
158c0 20 74 68 65 20 65 6e 74 69 72 65 20 72 6f 77 2c   the entire row,
158d0 20 62 75 74 20 69 74 20 64 6f 65 73 20 61 74 20   but it does at 
158e0 6c 65 61 73 74 0a 20 20 20 20 20 20 2a 2a 20 6e  least.      ** n
158f0 65 65 64 20 74 6f 20 63 6f 76 65 72 20 74 68 65  eed to cover the
15900 20 68 65 61 64 65 72 20 6f 66 20 74 68 65 20 72   header of the r
15910 65 63 6f 72 64 2e 20 20 49 66 20 70 43 2d 3e 61  ecord.  If pC->a
15920 52 6f 77 20 64 6f 65 73 20 6e 6f 74 20 63 6f 6e  Row does not con
15930 74 61 69 6e 0a 20 20 20 20 20 20 2a 2a 20 74 68  tain.      ** th
15940 65 20 63 6f 6d 70 6c 65 74 65 20 68 65 61 64 65  e complete heade
15950 72 2c 20 74 68 65 6e 20 73 65 74 20 69 74 20 74  r, then set it t
15960 6f 20 7a 65 72 6f 2c 20 66 6f 72 63 69 6e 67 20  o zero, forcing 
15970 74 68 65 20 68 65 61 64 65 72 20 74 6f 20 62 65  the header to be
15980 0a 20 20 20 20 20 20 2a 2a 20 64 79 6e 61 6d 69  .      ** dynami
15990 63 61 6c 6c 79 20 61 6c 6c 6f 63 61 74 65 64 2e  cally allocated.
159a0 20 2a 2f 0a 20 20 20 20 20 20 70 43 2d 3e 61 52   */.      pC->aR
159b0 6f 77 20 3d 20 30 3b 0a 20 20 20 20 20 20 70 43  ow = 0;.      pC
159c0 2d 3e 73 7a 52 6f 77 20 3d 20 30 3b 0a 0a 20 20  ->szRow = 0;..  
159d0 20 20 20 20 2f 2a 20 4d 61 6b 65 20 73 75 72 65      /* Make sure
159e0 20 61 20 63 6f 72 72 75 70 74 20 64 61 74 61 62   a corrupt datab
159f0 61 73 65 20 68 61 73 20 6e 6f 74 20 67 69 76 65  ase has not give
15a00 6e 20 75 73 20 61 6e 20 6f 76 65 72 73 69 7a 65  n us an oversize
15a10 20 68 65 61 64 65 72 2e 0a 20 20 20 20 20 20 2a   header..      *
15a20 2a 20 44 6f 20 74 68 69 73 20 6e 6f 77 20 74 6f  * Do this now to
15a30 20 61 76 6f 69 64 20 61 6e 20 6f 76 65 72 73 69   avoid an oversi
15a40 7a 65 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61  ze memory alloca
15a50 74 69 6f 6e 2e 0a 20 20 20 20 20 20 2a 2a 0a 20  tion..      **. 
15a60 20 20 20 20 20 2a 2a 20 54 79 70 65 20 65 6e 74       ** Type ent
15a70 72 69 65 73 20 63 61 6e 20 62 65 20 62 65 74 77  ries can be betw
15a80 65 65 6e 20 31 20 61 6e 64 20 35 20 62 79 74 65  een 1 and 5 byte
15a90 73 20 65 61 63 68 2e 20 20 42 75 74 20 34 20 61  s each.  But 4 a
15aa0 6e 64 20 35 20 62 79 74 65 0a 20 20 20 20 20 20  nd 5 byte.      
15ab0 2a 2a 20 74 79 70 65 73 20 75 73 65 20 73 6f 20  ** types use so 
15ac0 6d 75 63 68 20 64 61 74 61 20 73 70 61 63 65 20  much data space 
15ad0 74 68 61 74 20 74 68 65 72 65 20 63 61 6e 20 6f  that there can o
15ae0 6e 6c 79 20 62 65 20 34 30 39 36 20 61 6e 64 20  nly be 4096 and 
15af0 33 32 20 6f 66 0a 20 20 20 20 20 20 2a 2a 20 74  32 of.      ** t
15b00 68 65 6d 2c 20 72 65 73 70 65 63 74 69 76 65 6c  hem, respectivel
15b10 79 2e 20 20 53 6f 20 74 68 65 20 6d 61 78 69 6d  y.  So the maxim
15b20 75 6d 20 68 65 61 64 65 72 20 6c 65 6e 67 74 68  um header length
15b30 20 72 65 73 75 6c 74 73 20 66 72 6f 6d 20 61 0a   results from a.
15b40 20 20 20 20 20 20 2a 2a 20 33 2d 62 79 74 65 20        ** 3-byte 
15b50 74 79 70 65 20 66 6f 72 20 65 61 63 68 20 6f 66  type for each of
15b60 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 6f 66 20   the maximum of 
15b70 33 32 37 36 38 20 63 6f 6c 75 6d 6e 73 20 70 6c  32768 columns pl
15b80 75 73 20 74 68 72 65 65 0a 20 20 20 20 20 20 2a  us three.      *
15b90 2a 20 65 78 74 72 61 20 62 79 74 65 73 20 66 6f  * extra bytes fo
15ba0 72 20 74 68 65 20 68 65 61 64 65 72 20 6c 65 6e  r the header len
15bb0 67 74 68 20 69 74 73 65 6c 66 2e 20 20 33 32 37  gth itself.  327
15bc0 36 38 2a 33 20 2b 20 33 20 3d 20 39 38 33 30 37  68*3 + 3 = 98307
15bd0 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20  ..      */.     
15be0 20 69 66 28 20 61 4f 66 66 73 65 74 5b 30 5d 20   if( aOffset[0] 
15bf0 3e 20 39 38 33 30 37 20 7c 7c 20 61 4f 66 66 73  > 98307 || aOffs
15c00 65 74 5b 30 5d 20 3e 20 70 43 2d 3e 70 61 79 6c  et[0] > pC->payl
15c10 6f 61 64 53 69 7a 65 20 29 7b 0a 20 20 20 20 20  oadSize ){.     
15c20 20 20 20 67 6f 74 6f 20 6f 70 5f 63 6f 6c 75 6d     goto op_colum
15c30 6e 5f 63 6f 72 72 75 70 74 3b 0a 20 20 20 20 20  n_corrupt;.     
15c40 20 7d 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20   }.    }else{.  
15c50 20 20 20 20 2f 2a 20 54 68 69 73 20 69 73 20 61      /* This is a
15c60 6e 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 2e 20  n optimization. 
15c70 20 42 79 20 73 6b 69 70 70 69 6e 67 20 6f 76 65   By skipping ove
15c80 72 20 74 68 65 20 66 69 72 73 74 20 66 65 77 20  r the first few 
15c90 74 65 73 74 73 0a 20 20 20 20 20 20 2a 2a 20 28  tests.      ** (
15ca0 65 78 3a 20 70 43 2d 3e 6e 48 64 72 50 61 72 73  ex: pC->nHdrPars
15cb0 65 64 3c 3d 70 32 29 20 69 6e 20 74 68 65 20 6e  ed<=p2) in the n
15cc0 65 78 74 20 73 65 63 74 69 6f 6e 2c 20 77 65 20  ext section, we 
15cd0 61 63 68 69 65 76 65 20 61 0a 20 20 20 20 20 20  achieve a.      
15ce0 2a 2a 20 6d 65 61 73 75 72 61 62 6c 65 20 70 65  ** measurable pe
15cf0 72 66 6f 72 6d 61 6e 63 65 20 67 61 69 6e 2e 0a  rformance gain..
15d00 20 20 20 20 20 20 2a 2a 0a 20 20 20 20 20 20 2a        **.      *
15d10 2a 20 54 68 69 73 20 62 72 61 6e 63 68 20 69 73  * This branch is
15d20 20 74 61 6b 65 6e 20 65 76 65 6e 20 69 66 20 61   taken even if a
15d30 4f 66 66 73 65 74 5b 30 5d 3d 3d 30 2e 20 20 53  Offset[0]==0.  S
15d40 75 63 68 20 61 20 72 65 63 6f 72 64 20 69 73 20  uch a record is 
15d50 6e 65 76 65 72 0a 20 20 20 20 20 20 2a 2a 20 67  never.      ** g
15d60 65 6e 65 72 61 74 65 64 20 62 79 20 53 51 4c 69  enerated by SQLi
15d70 74 65 2c 20 61 6e 64 20 63 6f 75 6c 64 20 62 65  te, and could be
15d80 20 63 6f 6e 73 69 64 65 72 65 64 20 63 6f 72 72   considered corr
15d90 75 70 74 69 6f 6e 2c 20 62 75 74 20 77 65 0a 20  uption, but we. 
15da0 20 20 20 20 20 2a 2a 20 61 63 63 65 70 74 20 69       ** accept i
15db0 74 20 66 6f 72 20 68 69 73 74 6f 72 69 63 61 6c  t for historical
15dc0 20 72 65 61 73 6f 6e 73 2e 20 20 57 68 65 6e 20   reasons.  When 
15dd0 61 4f 66 66 73 65 74 5b 30 5d 3d 3d 30 2c 20 74  aOffset[0]==0, t
15de0 68 65 20 63 6f 64 65 20 74 68 69 73 0a 20 20 20  he code this.   
15df0 20 20 20 2a 2a 20 62 72 61 6e 63 68 20 6a 75 6d     ** branch jum
15e00 70 73 20 74 6f 20 72 65 61 64 73 20 70 61 73 74  ps to reads past
15e10 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20   the end of the 
15e20 72 65 63 6f 72 64 2c 20 62 75 74 20 6e 65 76 65  record, but neve
15e30 72 20 6d 6f 72 65 0a 20 20 20 20 20 20 2a 2a 20  r more.      ** 
15e40 74 68 61 6e 20 61 20 66 65 77 20 62 79 74 65 73  than a few bytes
15e50 2e 20 20 45 76 65 6e 20 69 66 20 74 68 65 20 72  .  Even if the r
15e60 65 63 6f 72 64 20 6f 63 63 75 72 73 20 61 74 20  ecord occurs at 
15e70 74 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20 70  the end of the p
15e80 61 67 65 0a 20 20 20 20 20 20 2a 2a 20 63 6f 6e  age.      ** con
15e90 74 65 6e 74 20 61 72 65 61 2c 20 74 68 65 20 22  tent area, the "
15ea0 70 61 67 65 20 68 65 61 64 65 72 22 20 63 6f 6d  page header" com
15eb0 65 73 20 61 66 74 65 72 20 74 68 65 20 70 61 67  es after the pag
15ec0 65 20 63 6f 6e 74 65 6e 74 20 61 6e 64 20 73 6f  e content and so
15ed0 0a 20 20 20 20 20 20 2a 2a 20 74 68 69 73 20 6f  .      ** this o
15ee0 76 65 72 72 65 61 64 20 69 73 20 68 61 72 6d 6c  verread is harml
15ef0 65 73 73 2e 20 20 53 69 6d 69 6c 61 72 20 6f 76  ess.  Similar ov
15f00 65 72 72 65 61 64 73 20 63 61 6e 20 6f 63 63 75  erreads can occu
15f10 72 20 66 6f 72 20 61 20 63 6f 72 72 75 70 74 0a  r for a corrupt.
15f20 20 20 20 20 20 20 2a 2a 20 64 61 74 61 62 61 73        ** databas
15f30 65 20 66 69 6c 65 2e 0a 20 20 20 20 20 20 2a 2f  e file..      */
15f40 0a 20 20 20 20 20 20 7a 44 61 74 61 20 3d 20 70  .      zData = p
15f50 43 2d 3e 61 52 6f 77 3b 0a 20 20 20 20 20 20 61  C->aRow;.      a
15f60 73 73 65 72 74 28 20 70 43 2d 3e 6e 48 64 72 50  ssert( pC->nHdrP
15f70 61 72 73 65 64 3c 3d 70 32 20 29 3b 20 20 20 20  arsed<=p2 );    
15f80 20 20 20 20 20 2f 2a 20 43 6f 6e 64 69 74 69 6f       /* Conditio
15f90 6e 61 6c 20 73 6b 69 70 70 65 64 20 2a 2f 0a 20  nal skipped */. 
15fa0 20 20 20 20 20 74 65 73 74 63 61 73 65 28 20 61       testcase( a
15fb0 4f 66 66 73 65 74 5b 30 5d 3d 3d 30 20 29 3b 0a  Offset[0]==0 );.
15fc0 20 20 20 20 20 20 67 6f 74 6f 20 6f 70 5f 63 6f        goto op_co
15fd0 6c 75 6d 6e 5f 72 65 61 64 5f 68 65 61 64 65 72  lumn_read_header
15fe0 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 0a 20 20 2f  ;.    }.  }..  /
15ff0 2a 20 4d 61 6b 65 20 73 75 72 65 20 61 74 20 6c  * Make sure at l
16000 65 61 73 74 20 74 68 65 20 66 69 72 73 74 20 70  east the first p
16010 32 2b 31 20 65 6e 74 72 69 65 73 20 6f 66 20 74  2+1 entries of t
16020 68 65 20 68 65 61 64 65 72 20 68 61 76 65 20 62  he header have b
16030 65 65 6e 0a 20 20 2a 2a 20 70 61 72 73 65 64 20  een.  ** parsed 
16040 61 6e 64 20 76 61 6c 69 64 20 69 6e 66 6f 72 6d  and valid inform
16050 61 74 69 6f 6e 20 69 73 20 69 6e 20 61 4f 66 66  ation is in aOff
16060 73 65 74 5b 5d 20 61 6e 64 20 70 43 2d 3e 61 54  set[] and pC->aT
16070 79 70 65 5b 5d 2e 0a 20 20 2a 2f 0a 20 20 69 66  ype[]..  */.  if
16080 28 20 70 43 2d 3e 6e 48 64 72 50 61 72 73 65 64  ( pC->nHdrParsed
16090 3c 3d 70 32 20 29 7b 0a 20 20 20 20 2f 2a 20 49  <=p2 ){.    /* I
160a0 66 20 74 68 65 72 65 20 69 73 20 6d 6f 72 65 20  f there is more 
160b0 68 65 61 64 65 72 20 61 76 61 69 6c 61 62 6c 65  header available
160c0 20 66 6f 72 20 70 61 72 73 69 6e 67 20 69 6e 20   for parsing in 
160d0 74 68 65 20 72 65 63 6f 72 64 2c 20 74 72 79 0a  the record, try.
160e0 20 20 20 20 2a 2a 20 74 6f 20 65 78 74 72 61 63      ** to extrac
160f0 74 20 61 64 64 69 74 69 6f 6e 61 6c 20 66 69 65  t additional fie
16100 6c 64 73 20 75 70 20 74 68 72 6f 75 67 68 20 74  lds up through t
16110 68 65 20 70 32 2b 31 2d 74 68 20 66 69 65 6c 64  he p2+1-th field
16120 20 0a 20 20 20 20 2a 2f 0a 20 20 20 20 69 66 28   .    */.    if(
16130 20 70 43 2d 3e 69 48 64 72 4f 66 66 73 65 74 3c   pC->iHdrOffset<
16140 61 4f 66 66 73 65 74 5b 30 5d 20 29 7b 0a 20 20  aOffset[0] ){.  
16150 20 20 20 20 2f 2a 20 4d 61 6b 65 20 73 75 72 65      /* Make sure
16160 20 7a 44 61 74 61 20 70 6f 69 6e 74 73 20 74 6f   zData points to
16170 20 65 6e 6f 75 67 68 20 6f 66 20 74 68 65 20 72   enough of the r
16180 65 63 6f 72 64 20 74 6f 20 63 6f 76 65 72 20 74  ecord to cover t
16190 68 65 20 68 65 61 64 65 72 2e 20 2a 2f 0a 20 20  he header. */.  
161a0 20 20 20 20 69 66 28 20 70 43 2d 3e 61 52 6f 77      if( pC->aRow
161b0 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 6d  ==0 ){.        m
161c0 65 6d 73 65 74 28 26 73 4d 65 6d 2c 20 30 2c 20  emset(&sMem, 0, 
161d0 73 69 7a 65 6f 66 28 73 4d 65 6d 29 29 3b 0a 20  sizeof(sMem));. 
161e0 20 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69         rc = sqli
161f0 74 65 33 56 64 62 65 4d 65 6d 46 72 6f 6d 42 74  te3VdbeMemFromBt
16200 72 65 65 28 70 43 2d 3e 75 63 2e 70 43 75 72 73  ree(pC->uc.pCurs
16210 6f 72 2c 20 30 2c 20 61 4f 66 66 73 65 74 5b 30  or, 0, aOffset[0
16220 5d 2c 20 26 73 4d 65 6d 29 3b 0a 20 20 20 20 20  ], &sMem);.     
16230 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54     if( rc!=SQLIT
16240 45 5f 4f 4b 20 29 20 67 6f 74 6f 20 61 62 6f 72  E_OK ) goto abor
16250 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
16260 20 20 20 20 20 20 20 20 7a 44 61 74 61 20 3d 20          zData = 
16270 28 75 38 2a 29 73 4d 65 6d 2e 7a 3b 0a 20 20 20  (u8*)sMem.z;.   
16280 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
16290 20 20 7a 44 61 74 61 20 3d 20 70 43 2d 3e 61 52    zData = pC->aR
162a0 6f 77 3b 0a 20 20 20 20 20 20 7d 0a 20 20 0a 20  ow;.      }.  . 
162b0 20 20 20 20 20 2f 2a 20 46 69 6c 6c 20 69 6e 20       /* Fill in 
162c0 70 43 2d 3e 61 54 79 70 65 5b 69 5d 20 61 6e 64  pC->aType[i] and
162d0 20 61 4f 66 66 73 65 74 5b 69 5d 20 76 61 6c 75   aOffset[i] valu
162e0 65 73 20 74 68 72 6f 75 67 68 20 74 68 65 20 70  es through the p
162f0 32 2d 74 68 20 66 69 65 6c 64 2e 20 2a 2f 0a 20  2-th field. */. 
16300 20 20 20 6f 70 5f 63 6f 6c 75 6d 6e 5f 72 65 61     op_column_rea
16310 64 5f 68 65 61 64 65 72 3a 0a 20 20 20 20 20 20  d_header:.      
16320 69 20 3d 20 70 43 2d 3e 6e 48 64 72 50 61 72 73  i = pC->nHdrPars
16330 65 64 3b 0a 20 20 20 20 20 20 6f 66 66 73 65 74  ed;.      offset
16340 36 34 20 3d 20 61 4f 66 66 73 65 74 5b 69 5d 3b  64 = aOffset[i];
16350 0a 20 20 20 20 20 20 7a 48 64 72 20 3d 20 7a 44  .      zHdr = zD
16360 61 74 61 20 2b 20 70 43 2d 3e 69 48 64 72 4f 66  ata + pC->iHdrOf
16370 66 73 65 74 3b 0a 20 20 20 20 20 20 7a 45 6e 64  fset;.      zEnd
16380 48 64 72 20 3d 20 7a 44 61 74 61 20 2b 20 61 4f  Hdr = zData + aO
16390 66 66 73 65 74 5b 30 5d 3b 0a 20 20 20 20 20 20  ffset[0];.      
163a0 74 65 73 74 63 61 73 65 28 20 7a 48 64 72 3e 3d  testcase( zHdr>=
163b0 7a 45 6e 64 48 64 72 20 29 3b 0a 20 20 20 20 20  zEndHdr );.     
163c0 20 64 6f 7b 0a 20 20 20 20 20 20 20 20 69 66 28   do{.        if(
163d0 20 28 70 43 2d 3e 61 54 79 70 65 5b 69 5d 20 3d   (pC->aType[i] =
163e0 20 74 20 3d 20 7a 48 64 72 5b 30 5d 29 3c 30 78   t = zHdr[0])<0x
163f0 38 30 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  80 ){.          
16400 7a 48 64 72 2b 2b 3b 0a 20 20 20 20 20 20 20 20  zHdr++;.        
16410 20 20 6f 66 66 73 65 74 36 34 20 2b 3d 20 73 71    offset64 += sq
16420 6c 69 74 65 33 56 64 62 65 4f 6e 65 42 79 74 65  lite3VdbeOneByte
16430 53 65 72 69 61 6c 54 79 70 65 4c 65 6e 28 74 29  SerialTypeLen(t)
16440 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b  ;.        }else{
16450 0a 20 20 20 20 20 20 20 20 20 20 7a 48 64 72 20  .          zHdr 
16460 2b 3d 20 73 71 6c 69 74 65 33 47 65 74 56 61 72  += sqlite3GetVar
16470 69 6e 74 33 32 28 7a 48 64 72 2c 20 26 74 29 3b  int32(zHdr, &t);
16480 0a 20 20 20 20 20 20 20 20 20 20 70 43 2d 3e 61  .          pC->a
16490 54 79 70 65 5b 69 5d 20 3d 20 74 3b 0a 20 20 20  Type[i] = t;.   
164a0 20 20 20 20 20 20 20 6f 66 66 73 65 74 36 34 20         offset64 
164b0 2b 3d 20 73 71 6c 69 74 65 33 56 64 62 65 53 65  += sqlite3VdbeSe
164c0 72 69 61 6c 54 79 70 65 4c 65 6e 28 74 29 3b 0a  rialTypeLen(t);.
164d0 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
164e0 20 20 61 4f 66 66 73 65 74 5b 2b 2b 69 5d 20 3d    aOffset[++i] =
164f0 20 28 75 33 32 29 28 6f 66 66 73 65 74 36 34 20   (u32)(offset64 
16500 26 20 30 78 66 66 66 66 66 66 66 66 29 3b 0a 20  & 0xffffffff);. 
16510 20 20 20 20 20 7d 77 68 69 6c 65 28 20 69 3c 3d       }while( i<=
16520 70 32 20 26 26 20 7a 48 64 72 3c 7a 45 6e 64 48  p2 && zHdr<zEndH
16530 64 72 20 29 3b 0a 0a 20 20 20 20 20 20 2f 2a 20  dr );..      /* 
16540 54 68 65 20 72 65 63 6f 72 64 20 69 73 20 63 6f  The record is co
16550 72 72 75 70 74 20 69 66 20 61 6e 79 20 6f 66 20  rrupt if any of 
16560 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 72  the following ar
16570 65 20 74 72 75 65 3a 0a 20 20 20 20 20 20 2a 2a  e true:.      **
16580 20 28 31 29 20 74 68 65 20 62 79 74 65 73 20 6f   (1) the bytes o
16590 66 20 74 68 65 20 68 65 61 64 65 72 20 65 78 74  f the header ext
165a0 65 6e 64 20 70 61 73 74 20 74 68 65 20 64 65 63  end past the dec
165b0 6c 61 72 65 64 20 68 65 61 64 65 72 20 73 69 7a  lared header siz
165c0 65 0a 20 20 20 20 20 20 2a 2a 20 28 32 29 20 74  e.      ** (2) t
165d0 68 65 20 65 6e 74 69 72 65 20 68 65 61 64 65 72  he entire header
165e0 20 77 61 73 20 75 73 65 64 20 62 75 74 20 6e 6f   was used but no
165f0 74 20 61 6c 6c 20 64 61 74 61 20 77 61 73 20 75  t all data was u
16600 73 65 64 0a 20 20 20 20 20 20 2a 2a 20 28 33 29  sed.      ** (3)
16610 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20   the end of the 
16620 64 61 74 61 20 65 78 74 65 6e 64 73 20 62 65 79  data extends bey
16630 6f 6e 64 20 74 68 65 20 65 6e 64 20 6f 66 20 74  ond the end of t
16640 68 65 20 72 65 63 6f 72 64 2e 0a 20 20 20 20 20  he record..     
16650 20 2a 2f 0a 20 20 20 20 20 20 69 66 28 20 28 7a   */.      if( (z
16660 48 64 72 3e 3d 7a 45 6e 64 48 64 72 20 26 26 20  Hdr>=zEndHdr && 
16670 28 7a 48 64 72 3e 7a 45 6e 64 48 64 72 20 7c 7c  (zHdr>zEndHdr ||
16680 20 6f 66 66 73 65 74 36 34 21 3d 70 43 2d 3e 70   offset64!=pC->p
16690 61 79 6c 6f 61 64 53 69 7a 65 29 29 0a 20 20 20  ayloadSize)).   
166a0 20 20 20 20 7c 7c 20 28 6f 66 66 73 65 74 36 34      || (offset64
166b0 20 3e 20 70 43 2d 3e 70 61 79 6c 6f 61 64 53 69   > pC->payloadSi
166c0 7a 65 29 0a 20 20 20 20 20 20 29 7b 0a 20 20 20  ze).      ){.   
166d0 20 20 20 20 20 69 66 28 20 61 4f 66 66 73 65 74       if( aOffset
166e0 5b 30 5d 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  [0]==0 ){.      
166f0 20 20 20 20 69 20 3d 20 30 3b 0a 20 20 20 20 20      i = 0;.     
16700 20 20 20 20 20 7a 48 64 72 20 3d 20 7a 45 6e 64       zHdr = zEnd
16710 48 64 72 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c  Hdr;.        }el
16720 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20 69 66  se{.          if
16730 28 20 70 43 2d 3e 61 52 6f 77 3d 3d 30 20 29 20  ( pC->aRow==0 ) 
16740 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 52 65  sqlite3VdbeMemRe
16750 6c 65 61 73 65 28 26 73 4d 65 6d 29 3b 0a 20 20  lease(&sMem);.  
16760 20 20 20 20 20 20 20 20 67 6f 74 6f 20 6f 70 5f          goto op_
16770 63 6f 6c 75 6d 6e 5f 63 6f 72 72 75 70 74 3b 0a  column_corrupt;.
16780 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
16790 7d 0a 0a 20 20 20 20 20 20 70 43 2d 3e 6e 48 64  }..      pC->nHd
167a0 72 50 61 72 73 65 64 20 3d 20 69 3b 0a 20 20 20  rParsed = i;.   
167b0 20 20 20 70 43 2d 3e 69 48 64 72 4f 66 66 73 65     pC->iHdrOffse
167c0 74 20 3d 20 28 75 33 32 29 28 7a 48 64 72 20 2d  t = (u32)(zHdr -
167d0 20 7a 44 61 74 61 29 3b 0a 20 20 20 20 20 20 69   zData);.      i
167e0 66 28 20 70 43 2d 3e 61 52 6f 77 3d 3d 30 20 29  f( pC->aRow==0 )
167f0 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 52   sqlite3VdbeMemR
16800 65 6c 65 61 73 65 28 26 73 4d 65 6d 29 3b 0a 20  elease(&sMem);. 
16810 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
16820 74 20 3d 20 30 3b 0a 20 20 20 20 7d 0a 0a 20 20  t = 0;.    }..  
16830 20 20 2f 2a 20 49 66 20 61 66 74 65 72 20 74 72    /* If after tr
16840 79 69 6e 67 20 74 6f 20 65 78 74 72 61 63 74 20  ying to extract 
16850 6e 65 77 20 65 6e 74 72 69 65 73 20 66 72 6f 6d  new entries from
16860 20 74 68 65 20 68 65 61 64 65 72 2c 20 6e 48 64   the header, nHd
16870 72 50 61 72 73 65 64 20 69 73 0a 20 20 20 20 2a  rParsed is.    *
16880 2a 20 73 74 69 6c 6c 20 6e 6f 74 20 75 70 20 74  * still not up t
16890 6f 20 70 32 2c 20 74 68 61 74 20 6d 65 61 6e 73  o p2, that means
168a0 20 74 68 61 74 20 74 68 65 20 72 65 63 6f 72 64   that the record
168b0 20 68 61 73 20 66 65 77 65 72 20 74 68 61 6e 20   has fewer than 
168c0 70 32 0a 20 20 20 20 2a 2a 20 63 6f 6c 75 6d 6e  p2.    ** column
168d0 73 2e 20 20 53 6f 20 74 68 65 20 72 65 73 75 6c  s.  So the resul
168e0 74 20 77 69 6c 6c 20 62 65 20 65 69 74 68 65 72  t will be either
168f0 20 74 68 65 20 64 65 66 61 75 6c 74 20 76 61 6c   the default val
16900 75 65 20 6f 72 20 61 20 4e 55 4c 4c 2e 0a 20 20  ue or a NULL..  
16910 20 20 2a 2f 0a 20 20 20 20 69 66 28 20 70 43 2d    */.    if( pC-
16920 3e 6e 48 64 72 50 61 72 73 65 64 3c 3d 70 32 20  >nHdrParsed<=p2 
16930 29 7b 0a 20 20 20 20 20 20 69 66 28 20 70 4f 70  ){.      if( pOp
16940 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 4d 45 4d  ->p4type==P4_MEM
16950 20 29 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69   ){.        sqli
16960 74 65 33 56 64 62 65 4d 65 6d 53 68 61 6c 6c 6f  te3VdbeMemShallo
16970 77 43 6f 70 79 28 70 44 65 73 74 2c 20 70 4f 70  wCopy(pDest, pOp
16980 2d 3e 70 34 2e 70 4d 65 6d 2c 20 4d 45 4d 5f 53  ->p4.pMem, MEM_S
16990 74 61 74 69 63 29 3b 0a 20 20 20 20 20 20 7d 65  tatic);.      }e
169a0 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 73 71 6c  lse{.        sql
169b0 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75  ite3VdbeMemSetNu
169c0 6c 6c 28 70 44 65 73 74 29 3b 0a 20 20 20 20 20  ll(pDest);.     
169d0 20 7d 0a 20 20 20 20 20 20 67 6f 74 6f 20 6f 70   }.      goto op
169e0 5f 63 6f 6c 75 6d 6e 5f 6f 75 74 3b 0a 20 20 20  _column_out;.   
169f0 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20   }.  }else{.    
16a00 74 20 3d 20 70 43 2d 3e 61 54 79 70 65 5b 70 32  t = pC->aType[p2
16a10 5d 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 45 78 74  ];.  }..  /* Ext
16a20 72 61 63 74 20 74 68 65 20 63 6f 6e 74 65 6e 74  ract the content
16a30 20 66 6f 72 20 74 68 65 20 70 32 2b 31 2d 74 68   for the p2+1-th
16a40 20 63 6f 6c 75 6d 6e 2e 20 20 43 6f 6e 74 72 6f   column.  Contro
16a50 6c 20 63 61 6e 20 6f 6e 6c 79 0a 20 20 2a 2a 20  l can only.  ** 
16a60 72 65 61 63 68 20 74 68 69 73 20 70 6f 69 6e 74  reach this point
16a70 20 69 66 20 61 4f 66 66 73 65 74 5b 70 32 5d 2c   if aOffset[p2],
16a80 20 61 4f 66 66 73 65 74 5b 70 32 2b 31 5d 2c 20   aOffset[p2+1], 
16a90 61 6e 64 20 70 43 2d 3e 61 54 79 70 65 5b 70 32  and pC->aType[p2
16aa0 5d 20 61 72 65 0a 20 20 2a 2a 20 61 6c 6c 20 76  ] are.  ** all v
16ab0 61 6c 69 64 2e 0a 20 20 2a 2f 0a 20 20 61 73 73  alid..  */.  ass
16ac0 65 72 74 28 20 70 32 3c 70 43 2d 3e 6e 48 64 72  ert( p2<pC->nHdr
16ad0 50 61 72 73 65 64 20 29 3b 0a 20 20 61 73 73 65  Parsed );.  asse
16ae0 72 74 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f  rt( rc==SQLITE_O
16af0 4b 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 73  K );.  assert( s
16b00 71 6c 69 74 65 33 56 64 62 65 43 68 65 63 6b 4d  qlite3VdbeCheckM
16b10 65 6d 49 6e 76 61 72 69 61 6e 74 73 28 70 44 65  emInvariants(pDe
16b20 73 74 29 20 29 3b 0a 20 20 69 66 28 20 56 64 62  st) );.  if( Vdb
16b30 65 4d 65 6d 44 79 6e 61 6d 69 63 28 70 44 65 73  eMemDynamic(pDes
16b40 74 29 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  t) ){.    sqlite
16b50 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28  3VdbeMemSetNull(
16b60 70 44 65 73 74 29 3b 0a 20 20 7d 0a 20 20 61 73  pDest);.  }.  as
16b70 73 65 72 74 28 20 74 3d 3d 70 43 2d 3e 61 54 79  sert( t==pC->aTy
16b80 70 65 5b 70 32 5d 20 29 3b 0a 20 20 69 66 28 20  pe[p2] );.  if( 
16b90 70 43 2d 3e 73 7a 52 6f 77 3e 3d 61 4f 66 66 73  pC->szRow>=aOffs
16ba0 65 74 5b 70 32 2b 31 5d 20 29 7b 0a 20 20 20 20  et[p2+1] ){.    
16bb0 2f 2a 20 54 68 69 73 20 69 73 20 74 68 65 20 63  /* This is the c
16bc0 6f 6d 6d 6f 6e 20 63 61 73 65 20 77 68 65 72 65  ommon case where
16bd0 20 74 68 65 20 64 65 73 69 72 65 64 20 63 6f 6e   the desired con
16be0 74 65 6e 74 20 66 69 74 73 20 6f 6e 20 74 68 65  tent fits on the
16bf0 20 6f 72 69 67 69 6e 61 6c 0a 20 20 20 20 2a 2a   original.    **
16c00 20 70 61 67 65 20 2d 20 77 68 65 72 65 20 74 68   page - where th
16c10 65 20 63 6f 6e 74 65 6e 74 20 69 73 20 6e 6f 74  e content is not
16c20 20 6f 6e 20 61 6e 20 6f 76 65 72 66 6c 6f 77 20   on an overflow 
16c30 70 61 67 65 20 2a 2f 0a 20 20 20 20 7a 44 61 74  page */.    zDat
16c40 61 20 3d 20 70 43 2d 3e 61 52 6f 77 20 2b 20 61  a = pC->aRow + a
16c50 4f 66 66 73 65 74 5b 70 32 5d 3b 0a 20 20 20 20  Offset[p2];.    
16c60 69 66 28 20 74 3c 31 32 20 29 7b 0a 20 20 20 20  if( t<12 ){.    
16c70 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 72    sqlite3VdbeSer
16c80 69 61 6c 47 65 74 28 7a 44 61 74 61 2c 20 74 2c  ialGet(zData, t,
16c90 20 70 44 65 73 74 29 3b 0a 20 20 20 20 7d 65 6c   pDest);.    }el
16ca0 73 65 7b 0a 20 20 20 20 20 20 2f 2a 20 49 66 20  se{.      /* If 
16cb0 74 68 65 20 63 6f 6c 75 6d 6e 20 76 61 6c 75 65  the column value
16cc0 20 69 73 20 61 20 73 74 72 69 6e 67 2c 20 77 65   is a string, we
16cd0 20 6e 65 65 64 20 61 20 70 65 72 73 69 73 74 65   need a persiste
16ce0 6e 74 20 76 61 6c 75 65 2c 20 6e 6f 74 0a 20 20  nt value, not.  
16cf0 20 20 20 20 2a 2a 20 61 20 4d 45 4d 5f 45 70 68      ** a MEM_Eph
16d00 65 6d 20 76 61 6c 75 65 2e 20 20 54 68 69 73 20  em value.  This 
16d10 62 72 61 6e 63 68 20 69 73 20 61 20 66 61 73 74  branch is a fast
16d20 20 73 68 6f 72 74 2d 63 75 74 20 74 68 61 74 20   short-cut that 
16d30 69 73 20 65 71 75 69 76 61 6c 65 6e 74 0a 20 20  is equivalent.  
16d40 20 20 20 20 2a 2a 20 74 6f 20 63 61 6c 6c 69 6e      ** to callin
16d50 67 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 72  g sqlite3VdbeSer
16d60 69 61 6c 47 65 74 28 29 20 61 6e 64 20 73 71 6c  ialGet() and sql
16d70 69 74 65 33 56 64 62 65 44 65 65 70 68 65 6d 65  ite3VdbeDeepheme
16d80 72 61 6c 69 7a 65 28 29 2e 0a 20 20 20 20 20 20  ralize()..      
16d90 2a 2f 0a 20 20 20 20 20 20 73 74 61 74 69 63 20  */.      static 
16da0 63 6f 6e 73 74 20 75 31 36 20 61 46 6c 61 67 5b  const u16 aFlag[
16db0 5d 20 3d 20 7b 20 4d 45 4d 5f 42 6c 6f 62 2c 20  ] = { MEM_Blob, 
16dc0 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f 54 65 72 6d  MEM_Str|MEM_Term
16dd0 20 7d 3b 0a 20 20 20 20 20 20 70 44 65 73 74 2d   };.      pDest-
16de0 3e 6e 20 3d 20 6c 65 6e 20 3d 20 28 74 2d 31 32  >n = len = (t-12
16df0 29 2f 32 3b 0a 20 20 20 20 20 20 70 44 65 73 74  )/2;.      pDest
16e00 2d 3e 65 6e 63 20 3d 20 65 6e 63 6f 64 69 6e 67  ->enc = encoding
16e10 3b 0a 20 20 20 20 20 20 69 66 28 20 70 44 65 73  ;.      if( pDes
16e20 74 2d 3e 73 7a 4d 61 6c 6c 6f 63 20 3c 20 6c 65  t->szMalloc < le
16e30 6e 2b 32 20 29 7b 0a 20 20 20 20 20 20 20 20 70  n+2 ){.        p
16e40 44 65 73 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45  Dest->flags = ME
16e50 4d 5f 4e 75 6c 6c 3b 0a 20 20 20 20 20 20 20 20  M_Null;.        
16e60 69 66 28 20 73 71 6c 69 74 65 33 56 64 62 65 4d  if( sqlite3VdbeM
16e70 65 6d 47 72 6f 77 28 70 44 65 73 74 2c 20 6c 65  emGrow(pDest, le
16e80 6e 2b 32 2c 20 30 29 20 29 20 67 6f 74 6f 20 6e  n+2, 0) ) goto n
16e90 6f 5f 6d 65 6d 3b 0a 20 20 20 20 20 20 7d 65 6c  o_mem;.      }el
16ea0 73 65 7b 0a 20 20 20 20 20 20 20 20 70 44 65 73  se{.        pDes
16eb0 74 2d 3e 7a 20 3d 20 70 44 65 73 74 2d 3e 7a 4d  t->z = pDest->zM
16ec0 61 6c 6c 6f 63 3b 0a 20 20 20 20 20 20 7d 0a 20  alloc;.      }. 
16ed0 20 20 20 20 20 6d 65 6d 63 70 79 28 70 44 65 73       memcpy(pDes
16ee0 74 2d 3e 7a 2c 20 7a 44 61 74 61 2c 20 6c 65 6e  t->z, zData, len
16ef0 29 3b 0a 20 20 20 20 20 20 70 44 65 73 74 2d 3e  );.      pDest->
16f00 7a 5b 6c 65 6e 5d 20 3d 20 30 3b 0a 20 20 20 20  z[len] = 0;.    
16f10 20 20 70 44 65 73 74 2d 3e 7a 5b 6c 65 6e 2b 31    pDest->z[len+1
16f20 5d 20 3d 20 30 3b 0a 20 20 20 20 20 20 70 44 65  ] = 0;.      pDe
16f30 73 74 2d 3e 66 6c 61 67 73 20 3d 20 61 46 6c 61  st->flags = aFla
16f40 67 5b 74 26 31 5d 3b 0a 20 20 20 20 7d 0a 20 20  g[t&1];.    }.  
16f50 7d 65 6c 73 65 7b 0a 20 20 20 20 70 44 65 73 74  }else{.    pDest
16f60 2d 3e 65 6e 63 20 3d 20 65 6e 63 6f 64 69 6e 67  ->enc = encoding
16f70 3b 0a 20 20 20 20 2f 2a 20 54 68 69 73 20 62 72  ;.    /* This br
16f80 61 6e 63 68 20 68 61 70 70 65 6e 73 20 6f 6e 6c  anch happens onl
16f90 79 20 77 68 65 6e 20 63 6f 6e 74 65 6e 74 20 69  y when content i
16fa0 73 20 6f 6e 20 6f 76 65 72 66 6c 6f 77 20 70 61  s on overflow pa
16fb0 67 65 73 20 2a 2f 0a 20 20 20 20 69 66 28 20 28  ges */.    if( (
16fc0 28 70 4f 70 2d 3e 70 35 20 26 20 28 4f 50 46 4c  (pOp->p5 & (OPFL
16fd0 41 47 5f 4c 45 4e 47 54 48 41 52 47 7c 4f 50 46  AG_LENGTHARG|OPF
16fe0 4c 41 47 5f 54 59 50 45 4f 46 41 52 47 29 29 21  LAG_TYPEOFARG))!
16ff0 3d 30 0a 20 20 20 20 20 20 20 20 20 20 26 26 20  =0.          && 
17000 28 28 74 3e 3d 31 32 20 26 26 20 28 74 26 31 29  ((t>=12 && (t&1)
17010 3d 3d 30 29 20 7c 7c 20 28 70 4f 70 2d 3e 70 35  ==0) || (pOp->p5
17020 20 26 20 4f 50 46 4c 41 47 5f 54 59 50 45 4f 46   & OPFLAG_TYPEOF
17030 41 52 47 29 21 3d 30 29 29 0a 20 20 20 20 20 7c  ARG)!=0)).     |
17040 7c 20 28 6c 65 6e 20 3d 20 73 71 6c 69 74 65 33  | (len = sqlite3
17050 56 64 62 65 53 65 72 69 61 6c 54 79 70 65 4c 65  VdbeSerialTypeLe
17060 6e 28 74 29 29 3d 3d 30 0a 20 20 20 20 29 7b 0a  n(t))==0.    ){.
17070 20 20 20 20 20 20 2f 2a 20 43 6f 6e 74 65 6e 74        /* Content
17080 20 69 73 20 69 72 72 65 6c 65 76 61 6e 74 20 66   is irrelevant f
17090 6f 72 0a 20 20 20 20 20 20 2a 2a 20 20 20 20 31  or.      **    1
170a0 2e 20 74 68 65 20 74 79 70 65 6f 66 28 29 20 66  . the typeof() f
170b0 75 6e 63 74 69 6f 6e 2c 0a 20 20 20 20 20 20 2a  unction,.      *
170c0 2a 20 20 20 20 32 2e 20 74 68 65 20 6c 65 6e 67  *    2. the leng
170d0 74 68 28 58 29 20 66 75 6e 63 74 69 6f 6e 20 69  th(X) function i
170e0 66 20 58 20 69 73 20 61 20 62 6c 6f 62 2c 20 61  f X is a blob, a
170f0 6e 64 0a 20 20 20 20 20 20 2a 2a 20 20 20 20 33  nd.      **    3
17100 2e 20 69 66 20 74 68 65 20 63 6f 6e 74 65 6e 74  . if the content
17110 20 6c 65 6e 67 74 68 20 69 73 20 7a 65 72 6f 2e   length is zero.
17120 0a 20 20 20 20 20 20 2a 2a 20 53 6f 20 77 65 20  .      ** So we 
17130 6d 69 67 68 74 20 61 73 20 77 65 6c 6c 20 75 73  might as well us
17140 65 20 62 6f 67 75 73 20 63 6f 6e 74 65 6e 74 20  e bogus content 
17150 72 61 74 68 65 72 20 74 68 61 6e 20 72 65 61 64  rather than read
17160 69 6e 67 0a 20 20 20 20 20 20 2a 2a 20 63 6f 6e  ing.      ** con
17170 74 65 6e 74 20 66 72 6f 6d 20 64 69 73 6b 2e 20  tent from disk. 
17180 0a 20 20 20 20 20 20 2a 2a 0a 20 20 20 20 20 20  .      **.      
17190 2a 2a 20 41 6c 74 68 6f 75 67 68 20 73 71 6c 69  ** Although sqli
171a0 74 65 33 56 64 62 65 53 65 72 69 61 6c 47 65 74  te3VdbeSerialGet
171b0 28 29 20 6d 61 79 20 72 65 61 64 20 61 74 20 6d  () may read at m
171c0 6f 73 74 20 38 20 62 79 74 65 73 20 66 72 6f 6d  ost 8 bytes from
171d0 20 74 68 65 0a 20 20 20 20 20 20 2a 2a 20 62 75   the.      ** bu
171e0 66 66 65 72 20 70 61 73 73 65 64 20 74 6f 20 69  ffer passed to i
171f0 74 2c 20 64 65 62 75 67 67 69 6e 67 20 66 75 6e  t, debugging fun
17200 63 74 69 6f 6e 20 56 64 62 65 4d 65 6d 50 72 65  ction VdbeMemPre
17210 74 74 79 50 72 69 6e 74 28 29 20 6d 61 79 0a 20  ttyPrint() may. 
17220 20 20 20 20 20 2a 2a 20 72 65 61 64 20 75 70 20       ** read up 
17230 74 6f 20 31 36 2e 20 53 6f 20 31 36 20 62 79 74  to 16. So 16 byt
17240 65 73 20 6f 66 20 62 6f 67 75 73 20 63 6f 6e 74  es of bogus cont
17250 65 6e 74 20 69 73 20 73 75 70 70 6c 69 65 64 2e  ent is supplied.
17260 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20  .      */.      
17270 73 74 61 74 69 63 20 75 38 20 61 5a 65 72 6f 5b  static u8 aZero[
17280 31 36 5d 3b 20 20 2f 2a 20 54 68 69 73 20 69 73  16];  /* This is
17290 20 74 68 65 20 62 6f 67 75 73 20 63 6f 6e 74 65   the bogus conte
172a0 6e 74 20 2a 2f 0a 20 20 20 20 20 20 73 71 6c 69  nt */.      sqli
172b0 74 65 33 56 64 62 65 53 65 72 69 61 6c 47 65 74  te3VdbeSerialGet
172c0 28 61 5a 65 72 6f 2c 20 74 2c 20 70 44 65 73 74  (aZero, t, pDest
172d0 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  );.    }else{.  
172e0 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
172f0 56 64 62 65 4d 65 6d 46 72 6f 6d 42 74 72 65 65  VdbeMemFromBtree
17300 28 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 2c  (pC->uc.pCursor,
17310 20 61 4f 66 66 73 65 74 5b 70 32 5d 2c 20 6c 65   aOffset[p2], le
17320 6e 2c 20 70 44 65 73 74 29 3b 0a 20 20 20 20 20  n, pDest);.     
17330 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f   if( rc!=SQLITE_
17340 4f 4b 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f  OK ) goto abort_
17350 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
17360 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53      sqlite3VdbeS
17370 65 72 69 61 6c 47 65 74 28 28 63 6f 6e 73 74 20  erialGet((const 
17380 75 38 2a 29 70 44 65 73 74 2d 3e 7a 2c 20 74 2c  u8*)pDest->z, t,
17390 20 70 44 65 73 74 29 3b 0a 20 20 20 20 20 20 70   pDest);.      p
173a0 44 65 73 74 2d 3e 66 6c 61 67 73 20 26 3d 20 7e  Dest->flags &= ~
173b0 4d 45 4d 5f 45 70 68 65 6d 3b 0a 20 20 20 20 7d  MEM_Ephem;.    }
173c0 0a 20 20 7d 0a 0a 6f 70 5f 63 6f 6c 75 6d 6e 5f  .  }..op_column_
173d0 6f 75 74 3a 0a 20 20 55 50 44 41 54 45 5f 4d 41  out:.  UPDATE_MA
173e0 58 5f 42 4c 4f 42 53 49 5a 45 28 70 44 65 73 74  X_BLOBSIZE(pDest
173f0 29 3b 0a 20 20 52 45 47 49 53 54 45 52 5f 54 52  );.  REGISTER_TR
17400 41 43 45 28 70 4f 70 2d 3e 70 33 2c 20 70 44 65  ACE(pOp->p3, pDe
17410 73 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 0a 6f  st);.  break;..o
17420 70 5f 63 6f 6c 75 6d 6e 5f 63 6f 72 72 75 70 74  p_column_corrupt
17430 3a 0a 20 20 69 66 28 20 61 4f 70 5b 30 5d 2e 70  :.  if( aOp[0].p
17440 33 3e 30 20 29 7b 0a 20 20 20 20 70 4f 70 20 3d  3>0 ){.    pOp =
17450 20 26 61 4f 70 5b 61 4f 70 5b 30 5d 2e 70 33 2d   &aOp[aOp[0].p3-
17460 31 5d 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20  1];.    break;. 
17470 20 7d 65 6c 73 65 7b 0a 20 20 20 20 72 63 20 3d   }else{.    rc =
17480 20 53 51 4c 49 54 45 5f 43 4f 52 52 55 50 54 5f   SQLITE_CORRUPT_
17490 42 4b 50 54 3b 0a 20 20 20 20 67 6f 74 6f 20 61  BKPT;.    goto a
174a0 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
174b0 72 3b 0a 20 20 7d 0a 7d 0a 0a 2f 2a 20 4f 70 63  r;.  }.}../* Opc
174c0 6f 64 65 3a 20 41 66 66 69 6e 69 74 79 20 50 31  ode: Affinity P1
174d0 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 20 53 79   P2 * P4 *.** Sy
174e0 6e 6f 70 73 69 73 3a 20 61 66 66 69 6e 69 74 79  nopsis: affinity
174f0 28 72 5b 50 31 40 50 32 5d 29 0a 2a 2a 0a 2a 2a  (r[P1@P2]).**.**
17500 20 41 70 70 6c 79 20 61 66 66 69 6e 69 74 69 65   Apply affinitie
17510 73 20 74 6f 20 61 20 72 61 6e 67 65 20 6f 66 20  s to a range of 
17520 50 32 20 72 65 67 69 73 74 65 72 73 20 73 74 61  P2 registers sta
17530 72 74 69 6e 67 20 77 69 74 68 20 50 31 2e 0a 2a  rting with P1..*
17540 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20 73 74 72  *.** P4 is a str
17550 69 6e 67 20 74 68 61 74 20 69 73 20 50 32 20 63  ing that is P2 c
17560 68 61 72 61 63 74 65 72 73 20 6c 6f 6e 67 2e 20  haracters long. 
17570 54 68 65 20 4e 2d 74 68 20 63 68 61 72 61 63 74  The N-th charact
17580 65 72 20 6f 66 20 74 68 65 0a 2a 2a 20 73 74 72  er of the.** str
17590 69 6e 67 20 69 6e 64 69 63 61 74 65 73 20 74 68  ing indicates th
175a0 65 20 63 6f 6c 75 6d 6e 20 61 66 66 69 6e 69 74  e column affinit
175b0 79 20 74 68 61 74 20 73 68 6f 75 6c 64 20 62 65  y that should be
175c0 20 75 73 65 64 20 66 6f 72 20 74 68 65 20 4e 2d   used for the N-
175d0 74 68 0a 2a 2a 20 6d 65 6d 6f 72 79 20 63 65 6c  th.** memory cel
175e0 6c 20 69 6e 20 74 68 65 20 72 61 6e 67 65 2e 0a  l in the range..
175f0 2a 2f 0a 63 61 73 65 20 4f 50 5f 41 66 66 69 6e  */.case OP_Affin
17600 69 74 79 3a 20 7b 0a 20 20 63 6f 6e 73 74 20 63  ity: {.  const c
17610 68 61 72 20 2a 7a 41 66 66 69 6e 69 74 79 3b 20  har *zAffinity; 
17620 20 20 2f 2a 20 54 68 65 20 61 66 66 69 6e 69 74    /* The affinit
17630 79 20 74 6f 20 62 65 20 61 70 70 6c 69 65 64 20  y to be applied 
17640 2a 2f 0a 0a 20 20 7a 41 66 66 69 6e 69 74 79 20  */..  zAffinity 
17650 3d 20 70 4f 70 2d 3e 70 34 2e 7a 3b 0a 20 20 61  = pOp->p4.z;.  a
17660 73 73 65 72 74 28 20 7a 41 66 66 69 6e 69 74 79  ssert( zAffinity
17670 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  !=0 );.  assert(
17680 20 70 4f 70 2d 3e 70 32 3e 30 20 29 3b 0a 20 20   pOp->p2>0 );.  
17690 61 73 73 65 72 74 28 20 7a 41 66 66 69 6e 69 74  assert( zAffinit
176a0 79 5b 70 4f 70 2d 3e 70 32 5d 3d 3d 30 20 29 3b  y[pOp->p2]==0 );
176b0 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b  .  pIn1 = &aMem[
176c0 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 77 68 69 6c  pOp->p1];.  whil
176d0 65 28 20 31 20 2f 2a 65 78 69 74 2d 62 79 2d 62  e( 1 /*exit-by-b
176e0 72 65 61 6b 2a 2f 20 29 7b 0a 20 20 20 20 61 73  reak*/ ){.    as
176f0 73 65 72 74 28 20 70 49 6e 31 20 3c 3d 20 26 70  sert( pIn1 <= &p
17700 2d 3e 61 4d 65 6d 5b 28 70 2d 3e 6e 4d 65 6d 2b  ->aMem[(p->nMem+
17710 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29 5d  1 - p->nCursor)]
17720 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20   );.    assert( 
17730 6d 65 6d 49 73 56 61 6c 69 64 28 70 49 6e 31 29  memIsValid(pIn1)
17740 20 29 3b 0a 20 20 20 20 61 70 70 6c 79 41 66 66   );.    applyAff
17750 69 6e 69 74 79 28 70 49 6e 31 2c 20 7a 41 66 66  inity(pIn1, zAff
17760 69 6e 69 74 79 5b 30 5d 2c 20 65 6e 63 6f 64 69  inity[0], encodi
17770 6e 67 29 3b 0a 20 20 20 20 69 66 28 20 7a 41 66  ng);.    if( zAf
17780 66 69 6e 69 74 79 5b 30 5d 3d 3d 53 51 4c 49 54  finity[0]==SQLIT
17790 45 5f 41 46 46 5f 52 45 41 4c 20 26 26 20 28 70  E_AFF_REAL && (p
177a0 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  In1->flags & MEM
177b0 5f 49 6e 74 29 21 3d 30 20 29 7b 0a 20 20 20 20  _Int)!=0 ){.    
177c0 20 20 2f 2a 20 57 68 65 6e 20 61 70 70 6c 79 69    /* When applyi
177d0 6e 67 20 52 45 41 4c 20 61 66 66 69 6e 69 74 79  ng REAL affinity
177e0 2c 20 69 66 20 74 68 65 20 72 65 73 75 6c 74 20  , if the result 
177f0 69 73 20 73 74 69 6c 6c 20 61 6e 20 4d 45 4d 5f  is still an MEM_
17800 49 6e 74 0a 20 20 20 20 20 20 2a 2a 20 74 68 61  Int.      ** tha
17810 74 20 77 69 6c 6c 20 66 69 74 20 69 6e 20 36 20  t will fit in 6 
17820 62 79 74 65 73 2c 20 74 68 65 6e 20 63 68 61 6e  bytes, then chan
17830 67 65 20 74 68 65 20 74 79 70 65 20 74 6f 20 4d  ge the type to M
17840 45 4d 5f 49 6e 74 52 65 61 6c 0a 20 20 20 20 20  EM_IntReal.     
17850 20 2a 2a 20 73 6f 20 74 68 61 74 20 77 65 20 6b   ** so that we k
17860 65 65 70 20 74 68 65 20 68 69 67 68 2d 72 65 73  eep the high-res
17870 6f 6c 75 74 69 6f 6e 20 69 6e 74 65 67 65 72 20  olution integer 
17880 76 61 6c 75 65 20 62 75 74 20 6b 6e 6f 77 20 74  value but know t
17890 68 61 74 0a 20 20 20 20 20 20 2a 2a 20 74 68 65  hat.      ** the
178a0 20 74 79 70 65 20 72 65 61 6c 6c 79 20 77 61 6e   type really wan
178b0 74 73 20 74 6f 20 62 65 20 52 45 41 4c 2e 20 2a  ts to be REAL. *
178c0 2f 0a 20 20 20 20 20 20 74 65 73 74 63 61 73 65  /.      testcase
178d0 28 20 70 49 6e 31 2d 3e 75 2e 69 3d 3d 31 34 30  ( pIn1->u.i==140
178e0 37 33 37 34 38 38 33 35 35 33 32 38 4c 4c 20 29  737488355328LL )
178f0 3b 0a 20 20 20 20 20 20 74 65 73 74 63 61 73 65  ;.      testcase
17900 28 20 70 49 6e 31 2d 3e 75 2e 69 3d 3d 31 34 30  ( pIn1->u.i==140
17910 37 33 37 34 38 38 33 35 35 33 32 37 4c 4c 20 29  737488355327LL )
17920 3b 0a 20 20 20 20 20 20 74 65 73 74 63 61 73 65  ;.      testcase
17930 28 20 70 49 6e 31 2d 3e 75 2e 69 3d 3d 2d 31 34  ( pIn1->u.i==-14
17940 30 37 33 37 34 38 38 33 35 35 33 32 38 4c 4c 20  0737488355328LL 
17950 29 3b 0a 20 20 20 20 20 20 74 65 73 74 63 61 73  );.      testcas
17960 65 28 20 70 49 6e 31 2d 3e 75 2e 69 3d 3d 2d 31  e( pIn1->u.i==-1
17970 34 30 37 33 37 34 38 38 33 35 35 33 32 39 4c 4c  40737488355329LL
17980 20 29 3b 0a 20 20 20 20 20 20 69 66 28 20 70 49   );.      if( pI
17990 6e 31 2d 3e 75 2e 69 3c 3d 31 34 30 37 33 37 34  n1->u.i<=1407374
179a0 38 38 33 35 35 33 32 37 4c 4c 20 26 26 20 70 49  88355327LL && pI
179b0 6e 31 2d 3e 75 2e 69 3e 3d 2d 31 34 30 37 33 37  n1->u.i>=-140737
179c0 34 38 38 33 35 35 33 32 38 4c 4c 20 29 7b 0a 20  488355328LL ){. 
179d0 20 20 20 20 20 20 20 70 49 6e 31 2d 3e 66 6c 61         pIn1->fla
179e0 67 73 20 7c 3d 20 4d 45 4d 5f 49 6e 74 52 65 61  gs |= MEM_IntRea
179f0 6c 3b 0a 20 20 20 20 20 20 20 20 70 49 6e 31 2d  l;.        pIn1-
17a00 3e 66 6c 61 67 73 20 26 3d 20 7e 4d 45 4d 5f 49  >flags &= ~MEM_I
17a10 6e 74 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b  nt;.      }else{
17a20 0a 20 20 20 20 20 20 20 20 70 49 6e 31 2d 3e 75  .        pIn1->u
17a30 2e 72 20 3d 20 28 64 6f 75 62 6c 65 29 70 49 6e  .r = (double)pIn
17a40 31 2d 3e 75 2e 69 3b 0a 20 20 20 20 20 20 20 20  1->u.i;.        
17a50 70 49 6e 31 2d 3e 66 6c 61 67 73 20 7c 3d 20 4d  pIn1->flags |= M
17a60 45 4d 5f 52 65 61 6c 3b 0a 20 20 20 20 20 20 20  EM_Real;.       
17a70 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 3d 20   pIn1->flags &= 
17a80 7e 4d 45 4d 5f 49 6e 74 3b 0a 20 20 20 20 20 20  ~MEM_Int;.      
17a90 7d 0a 20 20 20 20 7d 0a 20 20 20 20 52 45 47 49  }.    }.    REGI
17aa0 53 54 45 52 5f 54 52 41 43 45 28 28 69 6e 74 29  STER_TRACE((int)
17ab0 28 70 49 6e 31 2d 61 4d 65 6d 29 2c 20 70 49 6e  (pIn1-aMem), pIn
17ac0 31 29 3b 0a 20 20 20 20 7a 41 66 66 69 6e 69 74  1);.    zAffinit
17ad0 79 2b 2b 3b 0a 20 20 20 20 69 66 28 20 7a 41 66  y++;.    if( zAf
17ae0 66 69 6e 69 74 79 5b 30 5d 3d 3d 30 20 29 20 62  finity[0]==0 ) b
17af0 72 65 61 6b 3b 0a 20 20 20 20 70 49 6e 31 2b 2b  reak;.    pIn1++
17b00 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
17b10 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4d 61 6b  ../* Opcode: Mak
17b20 65 52 65 63 6f 72 64 20 50 31 20 50 32 20 50 33  eRecord P1 P2 P3
17b30 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69   P4 *.** Synopsi
17b40 73 3a 20 72 5b 50 33 5d 3d 6d 6b 72 65 63 28 72  s: r[P3]=mkrec(r
17b50 5b 50 31 40 50 32 5d 29 0a 2a 2a 0a 2a 2a 20 43  [P1@P2]).**.** C
17b60 6f 6e 76 65 72 74 20 50 32 20 72 65 67 69 73 74  onvert P2 regist
17b70 65 72 73 20 62 65 67 69 6e 6e 69 6e 67 20 77 69  ers beginning wi
17b80 74 68 20 50 31 20 69 6e 74 6f 20 74 68 65 20 5b  th P1 into the [
17b90 72 65 63 6f 72 64 20 66 6f 72 6d 61 74 5d 0a 2a  record format].*
17ba0 2a 20 75 73 65 20 61 73 20 61 20 64 61 74 61 20  * use as a data 
17bb0 72 65 63 6f 72 64 20 69 6e 20 61 20 64 61 74 61  record in a data
17bc0 62 61 73 65 20 74 61 62 6c 65 20 6f 72 20 61 73  base table or as
17bd0 20 61 20 6b 65 79 0a 2a 2a 20 69 6e 20 61 6e 20   a key.** in an 
17be0 69 6e 64 65 78 2e 20 20 54 68 65 20 4f 50 5f 43  index.  The OP_C
17bf0 6f 6c 75 6d 6e 20 6f 70 63 6f 64 65 20 63 61 6e  olumn opcode can
17c00 20 64 65 63 6f 64 65 20 74 68 65 20 72 65 63 6f   decode the reco
17c10 72 64 20 6c 61 74 65 72 2e 0a 2a 2a 0a 2a 2a 20  rd later..**.** 
17c20 50 34 20 6d 61 79 20 62 65 20 61 20 73 74 72 69  P4 may be a stri
17c30 6e 67 20 74 68 61 74 20 69 73 20 50 32 20 63 68  ng that is P2 ch
17c40 61 72 61 63 74 65 72 73 20 6c 6f 6e 67 2e 20 20  aracters long.  
17c50 54 68 65 20 4e 2d 74 68 20 63 68 61 72 61 63 74  The N-th charact
17c60 65 72 20 6f 66 20 74 68 65 0a 2a 2a 20 73 74 72  er of the.** str
17c70 69 6e 67 20 69 6e 64 69 63 61 74 65 73 20 74 68  ing indicates th
17c80 65 20 63 6f 6c 75 6d 6e 20 61 66 66 69 6e 69 74  e column affinit
17c90 79 20 74 68 61 74 20 73 68 6f 75 6c 64 20 62 65  y that should be
17ca0 20 75 73 65 64 20 66 6f 72 20 74 68 65 20 4e 2d   used for the N-
17cb0 74 68 0a 2a 2a 20 66 69 65 6c 64 20 6f 66 20 74  th.** field of t
17cc0 68 65 20 69 6e 64 65 78 20 6b 65 79 2e 0a 2a 2a  he index key..**
17cd0 0a 2a 2a 20 54 68 65 20 6d 61 70 70 69 6e 67 20  .** The mapping 
17ce0 66 72 6f 6d 20 63 68 61 72 61 63 74 65 72 20 74  from character t
17cf0 6f 20 61 66 66 69 6e 69 74 79 20 69 73 20 67 69  o affinity is gi
17d00 76 65 6e 20 62 79 20 74 68 65 20 53 51 4c 49 54  ven by the SQLIT
17d10 45 5f 41 46 46 5f 0a 2a 2a 20 6d 61 63 72 6f 73  E_AFF_.** macros
17d20 20 64 65 66 69 6e 65 64 20 69 6e 20 73 71 6c 69   defined in sqli
17d30 74 65 49 6e 74 2e 68 2e 0a 2a 2a 0a 2a 2a 20 49  teInt.h..**.** I
17d40 66 20 50 34 20 69 73 20 4e 55 4c 4c 20 74 68 65  f P4 is NULL the
17d50 6e 20 61 6c 6c 20 69 6e 64 65 78 20 66 69 65 6c  n all index fiel
17d60 64 73 20 68 61 76 65 20 74 68 65 20 61 66 66 69  ds have the affi
17d70 6e 69 74 79 20 42 4c 4f 42 2e 0a 2a 2f 0a 63 61  nity BLOB..*/.ca
17d80 73 65 20 4f 50 5f 4d 61 6b 65 52 65 63 6f 72 64  se OP_MakeRecord
17d90 3a 20 7b 0a 20 20 4d 65 6d 20 2a 70 52 65 63 3b  : {.  Mem *pRec;
17da0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
17db0 54 68 65 20 6e 65 77 20 72 65 63 6f 72 64 20 2a  The new record *
17dc0 2f 0a 20 20 75 36 34 20 6e 44 61 74 61 3b 20 20  /.  u64 nData;  
17dd0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
17de0 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20 6f 66  mber of bytes of
17df0 20 64 61 74 61 20 73 70 61 63 65 20 2a 2f 0a 20   data space */. 
17e00 20 69 6e 74 20 6e 48 64 72 3b 20 20 20 20 20 20   int nHdr;      
17e10 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
17e20 72 20 6f 66 20 62 79 74 65 73 20 6f 66 20 68 65  r of bytes of he
17e30 61 64 65 72 20 73 70 61 63 65 20 2a 2f 0a 20 20  ader space */.  
17e40 69 36 34 20 6e 42 79 74 65 3b 20 20 20 20 20 20  i64 nByte;      
17e50 20 20 20 20 20 20 20 2f 2a 20 44 61 74 61 20 73         /* Data s
17e60 70 61 63 65 20 72 65 71 75 69 72 65 64 20 66 6f  pace required fo
17e70 72 20 74 68 69 73 20 72 65 63 6f 72 64 20 2a 2f  r this record */
17e80 0a 20 20 69 36 34 20 6e 5a 65 72 6f 3b 20 20 20  .  i64 nZero;   
17e90 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
17ea0 62 65 72 20 6f 66 20 7a 65 72 6f 20 62 79 74 65  ber of zero byte
17eb0 73 20 61 74 20 74 68 65 20 65 6e 64 20 6f 66 20  s at the end of 
17ec0 74 68 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20  the record */.  
17ed0 69 6e 74 20 6e 56 61 72 69 6e 74 3b 20 20 20 20  int nVarint;    
17ee0 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
17ef0 20 6f 66 20 62 79 74 65 73 20 69 6e 20 61 20 76   of bytes in a v
17f00 61 72 69 6e 74 20 2a 2f 0a 20 20 75 33 32 20 73  arint */.  u32 s
17f10 65 72 69 61 6c 5f 74 79 70 65 3b 20 20 20 20 20  erial_type;     
17f20 20 20 2f 2a 20 54 79 70 65 20 66 69 65 6c 64 20    /* Type field 
17f30 2a 2f 0a 20 20 4d 65 6d 20 2a 70 44 61 74 61 30  */.  Mem *pData0
17f40 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46  ;           /* F
17f50 69 72 73 74 20 66 69 65 6c 64 20 74 6f 20 62 65  irst field to be
17f60 20 63 6f 6d 62 69 6e 65 64 20 69 6e 74 6f 20 74   combined into t
17f70 68 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 4d  he record */.  M
17f80 65 6d 20 2a 70 4c 61 73 74 3b 20 20 20 20 20 20  em *pLast;      
17f90 20 20 20 20 20 20 2f 2a 20 4c 61 73 74 20 66 69        /* Last fi
17fa0 65 6c 64 20 6f 66 20 74 68 65 20 72 65 63 6f 72  eld of the recor
17fb0 64 20 2a 2f 0a 20 20 69 6e 74 20 6e 46 69 65 6c  d */.  int nFiel
17fc0 64 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  d;            /*
17fd0 20 4e 75 6d 62 65 72 20 6f 66 20 66 69 65 6c 64   Number of field
17fe0 73 20 69 6e 20 74 68 65 20 72 65 63 6f 72 64 20  s in the record 
17ff0 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 41 66 66 69  */.  char *zAffi
18000 6e 69 74 79 3b 20 20 20 20 20 20 20 2f 2a 20 54  nity;       /* T
18010 68 65 20 61 66 66 69 6e 69 74 79 20 73 74 72 69  he affinity stri
18020 6e 67 20 66 6f 72 20 74 68 65 20 72 65 63 6f 72  ng for the recor
18030 64 20 2a 2f 0a 20 20 69 6e 74 20 66 69 6c 65 5f  d */.  int file_
18040 66 6f 72 6d 61 74 3b 20 20 20 20 20 20 20 2f 2a  format;       /*
18050 20 46 69 6c 65 20 66 6f 72 6d 61 74 20 74 6f 20   File format to 
18060 75 73 65 20 66 6f 72 20 65 6e 63 6f 64 69 6e 67  use for encoding
18070 20 2a 2f 0a 20 20 75 33 32 20 6c 65 6e 3b 20 20   */.  u32 len;  
18080 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
18090 4c 65 6e 67 74 68 20 6f 66 20 61 20 66 69 65 6c  Length of a fiel
180a0 64 20 2a 2f 0a 20 20 75 38 20 2a 7a 48 64 72 3b  d */.  u8 *zHdr;
180b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
180c0 20 57 68 65 72 65 20 74 6f 20 77 72 69 74 65 20   Where to write 
180d0 6e 65 78 74 20 62 79 74 65 20 6f 66 20 74 68 65  next byte of the
180e0 20 68 65 61 64 65 72 20 2a 2f 0a 20 20 75 38 20   header */.  u8 
180f0 2a 7a 50 61 79 6c 6f 61 64 3b 20 20 20 20 20 20  *zPayload;      
18100 20 20 20 20 2f 2a 20 57 68 65 72 65 20 74 6f 20      /* Where to 
18110 77 72 69 74 65 20 6e 65 78 74 20 62 79 74 65 20  write next byte 
18120 6f 66 20 74 68 65 20 70 61 79 6c 6f 61 64 20 2a  of the payload *
18130 2f 0a 0a 20 20 2f 2a 20 41 73 73 75 6d 69 6e 67  /..  /* Assuming
18140 20 74 68 65 20 72 65 63 6f 72 64 20 63 6f 6e 74   the record cont
18150 61 69 6e 73 20 4e 20 66 69 65 6c 64 73 2c 20 74  ains N fields, t
18160 68 65 20 72 65 63 6f 72 64 20 66 6f 72 6d 61 74  he record format
18170 20 6c 6f 6f 6b 73 0a 20 20 2a 2a 20 6c 69 6b 65   looks.  ** like
18180 20 74 68 69 73 3a 0a 20 20 2a 2a 0a 20 20 2a 2a   this:.  **.  **
18190 20 2d 2d 2d 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 0a 20 20 2a 2a 20 7c  ---------.  ** |
181e0 20 68 64 72 2d 73 69 7a 65 20 7c 20 74 79 70 65   hdr-size | type
181f0 20 30 20 7c 20 74 79 70 65 20 31 20 7c 20 2e 2e   0 | type 1 | ..
18200 2e 20 7c 20 74 79 70 65 20 4e 2d 31 20 7c 20 64  . | type N-1 | d
18210 61 74 61 30 20 7c 20 2e 2e 2e 20 7c 20 64 61 74  ata0 | ... | dat
18220 61 20 4e 2d 31 20 7c 20 0a 20 20 2a 2a 20 2d 2d  a N-1 | .  ** --
18230 2d 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 0a 20 20 2a 2a 0a 20 20 2a 2a  ------.  **.  **
18280 20 44 61 74 61 28 30 29 20 69 73 20 74 61 6b 65   Data(0) is take
18290 6e 20 66 72 6f 6d 20 72 65 67 69 73 74 65 72 20  n from register 
182a0 50 31 2e 20 20 44 61 74 61 28 31 29 20 63 6f 6d  P1.  Data(1) com
182b0 65 73 20 66 72 6f 6d 20 72 65 67 69 73 74 65 72  es from register
182c0 20 50 31 2b 31 0a 20 20 2a 2a 20 61 6e 64 20 73   P1+1.  ** and s
182d0 6f 20 66 6f 72 74 68 2e 0a 20 20 2a 2a 0a 20 20  o forth..  **.  
182e0 2a 2a 20 45 61 63 68 20 74 79 70 65 20 66 69 65  ** Each type fie
182f0 6c 64 20 69 73 20 61 20 76 61 72 69 6e 74 20 72  ld is a varint r
18300 65 70 72 65 73 65 6e 74 69 6e 67 20 74 68 65 20  epresenting the 
18310 73 65 72 69 61 6c 20 74 79 70 65 20 6f 66 20 74  serial type of t
18320 68 65 20 0a 20 20 2a 2a 20 63 6f 72 72 65 73 70  he .  ** corresp
18330 6f 6e 64 69 6e 67 20 64 61 74 61 20 65 6c 65 6d  onding data elem
18340 65 6e 74 20 28 73 65 65 20 73 71 6c 69 74 65 33  ent (see sqlite3
18350 56 64 62 65 53 65 72 69 61 6c 54 79 70 65 28 29  VdbeSerialType()
18360 29 2e 20 54 68 65 0a 20 20 2a 2a 20 68 64 72 2d  ). The.  ** hdr-
18370 73 69 7a 65 20 66 69 65 6c 64 20 69 73 20 61 6c  size field is al
18380 73 6f 20 61 20 76 61 72 69 6e 74 20 77 68 69 63  so a varint whic
18390 68 20 69 73 20 74 68 65 20 6f 66 66 73 65 74 20  h is the offset 
183a0 66 72 6f 6d 20 74 68 65 20 62 65 67 69 6e 6e 69  from the beginni
183b0 6e 67 0a 20 20 2a 2a 20 6f 66 20 74 68 65 20 72  ng.  ** of the r
183c0 65 63 6f 72 64 20 74 6f 20 64 61 74 61 30 2e 0a  ecord to data0..
183d0 20 20 2a 2f 0a 20 20 6e 44 61 74 61 20 3d 20 30    */.  nData = 0
183e0 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d  ;         /* Num
183f0 62 65 72 20 6f 66 20 62 79 74 65 73 20 6f 66 20  ber of bytes of 
18400 64 61 74 61 20 73 70 61 63 65 20 2a 2f 0a 20 20  data space */.  
18410 6e 48 64 72 20 3d 20 30 3b 20 20 20 20 20 20 20  nHdr = 0;       
18420 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
18430 62 79 74 65 73 20 6f 66 20 68 65 61 64 65 72 20  bytes of header 
18440 73 70 61 63 65 20 2a 2f 0a 20 20 6e 5a 65 72 6f  space */.  nZero
18450 20 3d 20 30 3b 20 20 20 20 20 20 20 20 20 2f 2a   = 0;         /*
18460 20 4e 75 6d 62 65 72 20 6f 66 20 7a 65 72 6f 20   Number of zero 
18470 62 79 74 65 73 20 61 74 20 74 68 65 20 65 6e 64  bytes at the end
18480 20 6f 66 20 74 68 65 20 72 65 63 6f 72 64 20 2a   of the record *
18490 2f 0a 20 20 6e 46 69 65 6c 64 20 3d 20 70 4f 70  /.  nField = pOp
184a0 2d 3e 70 31 3b 0a 20 20 7a 41 66 66 69 6e 69 74  ->p1;.  zAffinit
184b0 79 20 3d 20 70 4f 70 2d 3e 70 34 2e 7a 3b 0a 20  y = pOp->p4.z;. 
184c0 20 61 73 73 65 72 74 28 20 6e 46 69 65 6c 64 3e   assert( nField>
184d0 30 20 26 26 20 70 4f 70 2d 3e 70 32 3e 30 20 26  0 && pOp->p2>0 &
184e0 26 20 70 4f 70 2d 3e 70 32 2b 6e 46 69 65 6c 64  & pOp->p2+nField
184f0 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70  <=(p->nMem+1 - p
18500 2d 3e 6e 43 75 72 73 6f 72 29 2b 31 20 29 3b 0a  ->nCursor)+1 );.
18510 20 20 70 44 61 74 61 30 20 3d 20 26 61 4d 65 6d    pData0 = &aMem
18520 5b 6e 46 69 65 6c 64 5d 3b 0a 20 20 6e 46 69 65  [nField];.  nFie
18530 6c 64 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20  ld = pOp->p2;.  
18540 70 4c 61 73 74 20 3d 20 26 70 44 61 74 61 30 5b  pLast = &pData0[
18550 6e 46 69 65 6c 64 2d 31 5d 3b 0a 20 20 66 69 6c  nField-1];.  fil
18560 65 5f 66 6f 72 6d 61 74 20 3d 20 70 2d 3e 6d 69  e_format = p->mi
18570 6e 57 72 69 74 65 46 69 6c 65 46 6f 72 6d 61 74  nWriteFileFormat
18580 3b 0a 0a 20 20 2f 2a 20 49 64 65 6e 74 69 66 79  ;..  /* Identify
18590 20 74 68 65 20 6f 75 74 70 75 74 20 72 65 67 69   the output regi
185a0 73 74 65 72 20 2a 2f 0a 20 20 61 73 73 65 72 74  ster */.  assert
185b0 28 20 70 4f 70 2d 3e 70 33 3c 70 4f 70 2d 3e 70  ( pOp->p3<pOp->p
185c0 31 20 7c 7c 20 70 4f 70 2d 3e 70 33 3e 3d 70 4f  1 || pOp->p3>=pO
185d0 70 2d 3e 70 31 2b 70 4f 70 2d 3e 70 32 20 29 3b  p->p1+pOp->p2 );
185e0 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b  .  pOut = &aMem[
185f0 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 6d 65 6d 41  pOp->p3];.  memA
18600 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20  boutToChange(p, 
18610 70 4f 75 74 29 3b 0a 0a 20 20 2f 2a 20 41 70 70  pOut);..  /* App
18620 6c 79 20 74 68 65 20 72 65 71 75 65 73 74 65 64  ly the requested
18630 20 61 66 66 69 6e 69 74 79 20 74 6f 20 61 6c 6c   affinity to all
18640 20 69 6e 70 75 74 73 0a 20 20 2a 2f 0a 20 20 61   inputs.  */.  a
18650 73 73 65 72 74 28 20 70 44 61 74 61 30 3c 3d 70  ssert( pData0<=p
18660 4c 61 73 74 20 29 3b 0a 20 20 69 66 28 20 7a 41  Last );.  if( zA
18670 66 66 69 6e 69 74 79 20 29 7b 0a 20 20 20 20 70  ffinity ){.    p
18680 52 65 63 20 3d 20 70 44 61 74 61 30 3b 0a 20 20  Rec = pData0;.  
18690 20 20 64 6f 7b 0a 20 20 20 20 20 20 61 70 70 6c    do{.      appl
186a0 79 41 66 66 69 6e 69 74 79 28 70 52 65 63 2c 20  yAffinity(pRec, 
186b0 7a 41 66 66 69 6e 69 74 79 5b 30 5d 2c 20 65 6e  zAffinity[0], en
186c0 63 6f 64 69 6e 67 29 3b 0a 20 20 20 20 20 20 69  coding);.      i
186d0 66 28 20 7a 41 66 66 69 6e 69 74 79 5b 30 5d 3d  f( zAffinity[0]=
186e0 3d 53 51 4c 49 54 45 5f 41 46 46 5f 52 45 41 4c  =SQLITE_AFF_REAL
186f0 20 26 26 20 28 70 52 65 63 2d 3e 66 6c 61 67 73   && (pRec->flags
18700 20 26 20 4d 45 4d 5f 49 6e 74 29 20 29 7b 0a 20   & MEM_Int) ){. 
18710 20 20 20 20 20 20 20 70 52 65 63 2d 3e 66 6c 61         pRec->fla
18720 67 73 20 7c 3d 20 4d 45 4d 5f 49 6e 74 52 65 61  gs |= MEM_IntRea
18730 6c 3b 0a 20 20 20 20 20 20 20 20 70 52 65 63 2d  l;.        pRec-
18740 3e 66 6c 61 67 73 20 26 3d 20 7e 28 4d 45 4d 5f  >flags &= ~(MEM_
18750 49 6e 74 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20  Int);.      }.  
18760 20 20 20 20 52 45 47 49 53 54 45 52 5f 54 52 41      REGISTER_TRA
18770 43 45 28 28 69 6e 74 29 28 70 52 65 63 2d 61 4d  CE((int)(pRec-aM
18780 65 6d 29 2c 20 70 52 65 63 29 3b 0a 20 20 20 20  em), pRec);.    
18790 20 20 7a 41 66 66 69 6e 69 74 79 2b 2b 3b 0a 20    zAffinity++;. 
187a0 20 20 20 20 20 70 52 65 63 2b 2b 3b 0a 20 20 20       pRec++;.   
187b0 20 20 20 61 73 73 65 72 74 28 20 7a 41 66 66 69     assert( zAffi
187c0 6e 69 74 79 5b 30 5d 3d 3d 30 20 7c 7c 20 70 52  nity[0]==0 || pR
187d0 65 63 3c 3d 70 4c 61 73 74 20 29 3b 0a 20 20 20  ec<=pLast );.   
187e0 20 7d 77 68 69 6c 65 28 20 7a 41 66 66 69 6e 69   }while( zAffini
187f0 74 79 5b 30 5d 20 29 3b 0a 20 20 7d 0a 0a 23 69  ty[0] );.  }..#i
18800 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42  fdef SQLITE_ENAB
18810 4c 45 5f 4e 55 4c 4c 5f 54 52 49 4d 0a 20 20 2f  LE_NULL_TRIM.  /
18820 2a 20 4e 55 4c 4c 73 20 63 61 6e 20 62 65 20 73  * NULLs can be s
18830 61 66 65 6c 79 20 74 72 69 6d 6d 65 64 20 66 72  afely trimmed fr
18840 6f 6d 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68  om the end of th
18850 65 20 72 65 63 6f 72 64 2c 20 61 73 20 6c 6f 6e  e record, as lon
18860 67 20 61 73 0a 20 20 2a 2a 20 61 73 20 74 68 65  g as.  ** as the
18870 20 73 63 68 65 6d 61 20 66 6f 72 6d 61 74 20 69   schema format i
18880 73 20 32 20 6f 72 20 6d 6f 72 65 20 61 6e 64 20  s 2 or more and 
18890 6e 6f 6e 65 20 6f 66 20 74 68 65 20 6f 6d 69 74  none of the omit
188a0 74 65 64 20 63 6f 6c 75 6d 6e 73 0a 20 20 2a 2a  ted columns.  **
188b0 20 68 61 76 65 20 61 20 6e 6f 6e 2d 4e 55 4c 4c   have a non-NULL
188c0 20 64 65 66 61 75 6c 74 20 76 61 6c 75 65 2e 20   default value. 
188d0 20 41 6c 73 6f 2c 20 74 68 65 20 72 65 63 6f 72   Also, the recor
188e0 64 20 6d 75 73 74 20 62 65 20 6c 65 66 74 20 77  d must be left w
188f0 69 74 68 0a 20 20 2a 2a 20 61 74 20 6c 65 61 73  ith.  ** at leas
18900 74 20 6f 6e 65 20 66 69 65 6c 64 2e 20 20 49 66  t one field.  If
18910 20 50 35 3e 30 20 74 68 65 6e 20 69 74 20 77 69   P5>0 then it wi
18920 6c 6c 20 62 65 20 6f 6e 65 20 6d 6f 72 65 20 74  ll be one more t
18930 68 61 6e 20 74 68 65 0a 20 20 2a 2a 20 69 6e 64  han the.  ** ind
18940 65 78 20 6f 66 20 74 68 65 20 72 69 67 68 74 2d  ex of the right-
18950 6d 6f 73 74 20 63 6f 6c 75 6d 6e 20 77 69 74 68  most column with
18960 20 61 20 6e 6f 6e 2d 4e 55 4c 4c 20 64 65 66 61   a non-NULL defa
18970 75 6c 74 20 76 61 6c 75 65 20 2a 2f 0a 20 20 69  ult value */.  i
18980 66 28 20 70 4f 70 2d 3e 70 35 20 29 7b 0a 20 20  f( pOp->p5 ){.  
18990 20 20 77 68 69 6c 65 28 20 28 70 4c 61 73 74 2d    while( (pLast-
189a0 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c  >flags & MEM_Nul
189b0 6c 29 21 3d 30 20 26 26 20 6e 46 69 65 6c 64 3e  l)!=0 && nField>
189c0 70 4f 70 2d 3e 70 35 20 29 7b 0a 20 20 20 20 20  pOp->p5 ){.     
189d0 20 70 4c 61 73 74 2d 2d 3b 0a 20 20 20 20 20 20   pLast--;.      
189e0 6e 46 69 65 6c 64 2d 2d 3b 0a 20 20 20 20 7d 0a  nField--;.    }.
189f0 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 20 20 2f 2a    }.#endif..  /*
18a00 20 4c 6f 6f 70 20 74 68 72 6f 75 67 68 20 74 68   Loop through th
18a10 65 20 65 6c 65 6d 65 6e 74 73 20 74 68 61 74 20  e elements that 
18a20 77 69 6c 6c 20 6d 61 6b 65 20 75 70 20 74 68 65  will make up the
18a30 20 72 65 63 6f 72 64 20 74 6f 20 66 69 67 75 72   record to figur
18a40 65 0a 20 20 2a 2a 20 6f 75 74 20 68 6f 77 20 6d  e.  ** out how m
18a50 75 63 68 20 73 70 61 63 65 20 69 73 20 72 65 71  uch space is req
18a60 75 69 72 65 64 20 66 6f 72 20 74 68 65 20 6e 65  uired for the ne
18a70 77 20 72 65 63 6f 72 64 2e 20 20 41 66 74 65 72  w record.  After
18a80 20 74 68 69 73 20 6c 6f 6f 70 2c 0a 20 20 2a 2a   this loop,.  **
18a90 20 74 68 65 20 4d 65 6d 2e 75 54 65 6d 70 20 66   the Mem.uTemp f
18aa0 69 65 6c 64 20 6f 66 20 65 61 63 68 20 74 65 72  ield of each ter
18ab0 6d 20 73 68 6f 75 6c 64 20 68 6f 6c 64 20 74 68  m should hold th
18ac0 65 20 73 65 72 69 61 6c 2d 74 79 70 65 20 74 68  e serial-type th
18ad0 61 74 20 77 69 6c 6c 0a 20 20 2a 2a 20 62 65 20  at will.  ** be 
18ae0 75 73 65 64 20 66 6f 72 20 74 68 61 74 20 74 65  used for that te
18af0 72 6d 20 69 6e 20 74 68 65 20 67 65 6e 65 72 61  rm in the genera
18b00 74 65 64 20 72 65 63 6f 72 64 3a 0a 20 20 2a 2a  ted record:.  **
18b10 0a 20 20 2a 2a 20 20 20 4d 65 6d 2e 75 54 65 6d  .  **   Mem.uTem
18b20 70 20 76 61 6c 75 65 20 20 20 20 74 79 70 65 0a  p value    type.
18b30 20 20 2a 2a 20 20 20 2d 2d 2d 2d 2d 2d 2d 2d 2d    **   ---------
18b40 2d 2d 2d 2d 2d 2d 20 20 20 20 2d 2d 2d 2d 2d 2d  ------    ------
18b50 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 20 20 2a 2a 20 20  ---------.  **  
18b60 20 20 20 20 30 20 20 20 20 20 20 20 20 20 20 20      0           
18b70 20 20 20 20 4e 55 4c 4c 0a 20 20 2a 2a 20 20 20      NULL.  **   
18b80 20 20 20 31 20 20 20 20 20 20 20 20 20 20 20 20     1            
18b90 20 20 20 31 2d 62 79 74 65 20 73 69 67 6e 65 64     1-byte signed
18ba0 20 69 6e 74 65 67 65 72 0a 20 20 2a 2a 20 20 20   integer.  **   
18bb0 20 20 20 32 20 20 20 20 20 20 20 20 20 20 20 20     2            
18bc0 20 20 20 32 2d 62 79 74 65 20 73 69 67 6e 65 64     2-byte signed
18bd0 20 69 6e 74 65 67 65 72 0a 20 20 2a 2a 20 20 20   integer.  **   
18be0 20 20 20 33 20 20 20 20 20 20 20 20 20 20 20 20     3            
18bf0 20 20 20 33 2d 62 79 74 65 20 73 69 67 6e 65 64     3-byte signed
18c00 20 69 6e 74 65 67 65 72 0a 20 20 2a 2a 20 20 20   integer.  **   
18c10 20 20 20 34 20 20 20 20 20 20 20 20 20 20 20 20     4            
18c20 20 20 20 34 2d 62 79 74 65 20 73 69 67 6e 65 64     4-byte signed
18c30 20 69 6e 74 65 67 65 72 0a 20 20 2a 2a 20 20 20   integer.  **   
18c40 20 20 20 35 20 20 20 20 20 20 20 20 20 20 20 20     5            
18c50 20 20 20 36 2d 62 79 74 65 20 73 69 67 6e 65 64     6-byte signed
18c60 20 69 6e 74 65 67 65 72 0a 20 20 2a 2a 20 20 20   integer.  **   
18c70 20 20 20 36 20 20 20 20 20 20 20 20 20 20 20 20     6            
18c80 20 20 20 38 2d 62 79 74 65 20 73 69 67 6e 65 64     8-byte signed
18c90 20 69 6e 74 65 67 65 72 0a 20 20 2a 2a 20 20 20   integer.  **   
18ca0 20 20 20 37 20 20 20 20 20 20 20 20 20 20 20 20     7            
18cb0 20 20 20 49 45 45 45 20 66 6c 6f 61 74 0a 20 20     IEEE float.  
18cc0 2a 2a 20 20 20 20 20 20 38 20 20 20 20 20 20 20  **      8       
18cd0 20 20 20 20 20 20 20 20 49 6e 74 65 67 65 72 20          Integer 
18ce0 63 6f 6e 73 74 61 6e 74 20 30 0a 20 20 2a 2a 20  constant 0.  ** 
18cf0 20 20 20 20 20 39 20 20 20 20 20 20 20 20 20 20       9          
18d00 20 20 20 20 20 49 6e 74 65 67 65 72 20 63 6f 6e       Integer con
18d10 73 74 61 6e 74 20 31 0a 20 20 2a 2a 20 20 20 20  stant 1.  **    
18d20 20 31 30 2c 31 31 20 20 20 20 20 20 20 20 20 20   10,11          
18d30 20 20 72 65 73 65 72 76 65 64 20 66 6f 72 20 65    reserved for e
18d40 78 70 61 6e 73 69 6f 6e 0a 20 20 2a 2a 20 20 20  xpansion.  **   
18d50 20 4e 3e 3d 31 32 20 61 6e 64 20 65 76 65 6e 20   N>=12 and even 
18d60 20 20 20 42 4c 4f 42 0a 20 20 2a 2a 20 20 20 20     BLOB.  **    
18d70 4e 3e 3d 31 33 20 61 6e 64 20 6f 64 64 20 20 20  N>=13 and odd   
18d80 20 20 74 65 78 74 0a 20 20 2a 2a 0a 20 20 2a 2a    text.  **.  **
18d90 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 61   The following a
18da0 64 64 69 74 69 6f 6e 61 6c 20 76 61 6c 75 65 73  dditional values
18db0 20 61 72 65 20 63 6f 6d 70 75 74 65 64 3a 0a 20   are computed:. 
18dc0 20 2a 2a 20 20 20 20 20 6e 48 64 72 20 20 20 20   **     nHdr    
18dd0 20 20 20 20 4e 75 6d 62 65 72 20 6f 66 20 62 79      Number of by
18de0 74 65 73 20 6e 65 65 64 65 64 20 66 6f 72 20 74  tes needed for t
18df0 68 65 20 72 65 63 6f 72 64 20 68 65 61 64 65 72  he record header
18e00 0a 20 20 2a 2a 20 20 20 20 20 6e 44 61 74 61 20  .  **     nData 
18e10 20 20 20 20 20 20 4e 75 6d 62 65 72 20 6f 66 20        Number of 
18e20 62 79 74 65 73 20 6f 66 20 64 61 74 61 20 73 70  bytes of data sp
18e30 61 63 65 20 6e 65 65 64 65 64 20 66 6f 72 20 74  ace needed for t
18e40 68 65 20 72 65 63 6f 72 64 0a 20 20 2a 2a 20 20  he record.  **  
18e50 20 20 20 6e 5a 65 72 6f 20 20 20 20 20 20 20 5a     nZero       Z
18e60 65 72 6f 20 62 79 74 65 73 20 61 74 20 74 68 65  ero bytes at the
18e70 20 65 6e 64 20 6f 66 20 74 68 65 20 72 65 63 6f   end of the reco
18e80 72 64 0a 20 20 2a 2f 0a 20 20 70 52 65 63 20 3d  rd.  */.  pRec =
18e90 20 70 4c 61 73 74 3b 0a 20 20 64 6f 7b 0a 20 20   pLast;.  do{.  
18ea0 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56    assert( memIsV
18eb0 61 6c 69 64 28 70 52 65 63 29 20 29 3b 0a 20 20  alid(pRec) );.  
18ec0 20 20 69 66 28 20 70 52 65 63 2d 3e 66 6c 61 67    if( pRec->flag
18ed0 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a  s & MEM_Null ){.
18ee0 20 20 20 20 20 20 69 66 28 20 70 52 65 63 2d 3e        if( pRec->
18ef0 66 6c 61 67 73 20 26 20 4d 45 4d 5f 5a 65 72 6f  flags & MEM_Zero
18f00 20 29 7b 0a 20 20 20 20 20 20 20 20 2f 2a 20 56   ){.        /* V
18f10 61 6c 75 65 73 20 77 69 74 68 20 4d 45 4d 5f 4e  alues with MEM_N
18f20 75 6c 6c 20 61 6e 64 20 4d 45 4d 5f 5a 65 72 6f  ull and MEM_Zero
18f30 20 61 72 65 20 63 72 65 61 74 65 64 20 62 79 20   are created by 
18f40 78 43 6f 6c 75 6d 6e 20 76 69 72 74 75 61 6c 0a  xColumn virtual.
18f50 20 20 20 20 20 20 20 20 2a 2a 20 74 61 62 6c 65          ** table
18f60 20 6d 65 74 68 6f 64 73 20 74 68 61 74 20 6e 65   methods that ne
18f70 76 65 72 20 69 6e 76 6f 6b 65 20 73 71 6c 69 74  ver invoke sqlit
18f80 65 33 5f 72 65 73 75 6c 74 5f 78 78 78 78 78 28  e3_result_xxxxx(
18f90 29 20 77 68 69 6c 65 0a 20 20 20 20 20 20 20 20  ) while.        
18fa0 2a 2a 20 63 6f 6d 70 75 74 69 6e 67 20 61 6e 20  ** computing an 
18fb0 75 6e 63 68 61 6e 67 69 6e 67 20 63 6f 6c 75 6d  unchanging colum
18fc0 6e 20 76 61 6c 75 65 20 69 6e 20 61 6e 20 55 50  n value in an UP
18fd0 44 41 54 45 20 73 74 61 74 65 6d 65 6e 74 2e 0a  DATE statement..
18fe0 20 20 20 20 20 20 20 20 2a 2a 20 47 69 76 65 20          ** Give 
18ff0 73 75 63 68 20 76 61 6c 75 65 73 20 61 20 73 70  such values a sp
19000 65 63 69 61 6c 20 69 6e 74 65 72 6e 61 6c 2d 75  ecial internal-u
19010 73 65 2d 6f 6e 6c 79 20 73 65 72 69 61 6c 2d 74  se-only serial-t
19020 79 70 65 20 6f 66 20 31 30 0a 20 20 20 20 20 20  ype of 10.      
19030 20 20 2a 2a 20 73 6f 20 74 68 61 74 20 74 68 65    ** so that the
19040 79 20 63 61 6e 20 62 65 20 70 61 73 73 65 64 20  y can be passed 
19050 74 68 72 6f 75 67 68 20 74 6f 20 78 55 70 64 61  through to xUpda
19060 74 65 20 61 6e 64 20 68 61 76 65 0a 20 20 20 20  te and have.    
19070 20 20 20 20 2a 2a 20 61 20 74 72 75 65 20 73 71      ** a true sq
19080 6c 69 74 65 33 5f 76 61 6c 75 65 5f 6e 6f 63 68  lite3_value_noch
19090 61 6e 67 65 28 29 2e 20 2a 2f 0a 20 20 20 20 20  ange(). */.     
190a0 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e     assert( pOp->
190b0 70 35 3d 3d 4f 50 46 4c 41 47 5f 4e 4f 43 48 4e  p5==OPFLAG_NOCHN
190c0 47 5f 4d 41 47 49 43 20 7c 7c 20 43 4f 52 52 55  G_MAGIC || CORRU
190d0 50 54 5f 44 42 20 29 3b 0a 20 20 20 20 20 20 20  PT_DB );.       
190e0 20 70 52 65 63 2d 3e 75 54 65 6d 70 20 3d 20 31   pRec->uTemp = 1
190f0 30 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a  0;.      }else{.
19100 20 20 20 20 20 20 20 20 70 52 65 63 2d 3e 75 54          pRec->uT
19110 65 6d 70 20 3d 20 30 3b 0a 20 20 20 20 20 20 7d  emp = 0;.      }
19120 0a 20 20 20 20 20 20 6e 48 64 72 2b 2b 3b 0a 20  .      nHdr++;. 
19130 20 20 20 7d 65 6c 73 65 20 69 66 28 20 70 52 65     }else if( pRe
19140 63 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f  c->flags & (MEM_
19150 49 6e 74 7c 4d 45 4d 5f 49 6e 74 52 65 61 6c 29  Int|MEM_IntReal)
19160 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 46 69 67   ){.      /* Fig
19170 75 72 65 20 6f 75 74 20 77 68 65 74 68 65 72 20  ure out whether 
19180 74 6f 20 75 73 65 20 31 2c 20 32 2c 20 34 2c 20  to use 1, 2, 4, 
19190 36 20 6f 72 20 38 20 62 79 74 65 73 2e 20 2a 2f  6 or 8 bytes. */
191a0 0a 20 20 20 20 20 20 69 36 34 20 69 20 3d 20 70  .      i64 i = p
191b0 52 65 63 2d 3e 75 2e 69 3b 0a 20 20 20 20 20 20  Rec->u.i;.      
191c0 75 36 34 20 75 75 3b 0a 20 20 20 20 20 20 74 65  u64 uu;.      te
191d0 73 74 63 61 73 65 28 20 70 52 65 63 2d 3e 66 6c  stcase( pRec->fl
191e0 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 20 29 3b  ags & MEM_Int );
191f0 0a 20 20 20 20 20 20 74 65 73 74 63 61 73 65 28  .      testcase(
19200 20 70 52 65 63 2d 3e 66 6c 61 67 73 20 26 20 4d   pRec->flags & M
19210 45 4d 5f 49 6e 74 52 65 61 6c 20 29 3b 0a 20 20  EM_IntReal );.  
19220 20 20 20 20 69 66 28 20 69 3c 30 20 29 7b 0a 20      if( i<0 ){. 
19230 20 20 20 20 20 20 20 75 75 20 3d 20 7e 69 3b 0a         uu = ~i;.
19240 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20        }else{.   
19250 20 20 20 20 20 75 75 20 3d 20 69 3b 0a 20 20 20       uu = i;.   
19260 20 20 20 7d 0a 20 20 20 20 20 20 6e 48 64 72 2b     }.      nHdr+
19270 2b 3b 0a 20 20 20 20 20 20 74 65 73 74 63 61 73  +;.      testcas
19280 65 28 20 75 75 3d 3d 31 32 37 20 29 3b 20 20 20  e( uu==127 );   
19290 20 20 20 20 20 20 20 20 20 20 20 20 74 65 73 74              test
192a0 63 61 73 65 28 20 75 75 3d 3d 31 32 38 20 29 3b  case( uu==128 );
192b0 0a 20 20 20 20 20 20 74 65 73 74 63 61 73 65 28  .      testcase(
192c0 20 75 75 3d 3d 33 32 37 36 37 20 29 3b 20 20 20   uu==32767 );   
192d0 20 20 20 20 20 20 20 20 20 20 74 65 73 74 63 61            testca
192e0 73 65 28 20 75 75 3d 3d 33 32 37 36 38 20 29 3b  se( uu==32768 );
192f0 0a 20 20 20 20 20 20 74 65 73 74 63 61 73 65 28  .      testcase(
19300 20 75 75 3d 3d 38 33 38 38 36 30 37 20 29 3b 20   uu==8388607 ); 
19310 20 20 20 20 20 20 20 20 20 20 74 65 73 74 63 61            testca
19320 73 65 28 20 75 75 3d 3d 38 33 38 38 36 30 38 20  se( uu==8388608 
19330 29 3b 0a 20 20 20 20 20 20 74 65 73 74 63 61 73  );.      testcas
19340 65 28 20 75 75 3d 3d 32 31 34 37 34 38 33 36 34  e( uu==214748364
19350 37 20 29 3b 20 20 20 20 20 20 20 20 74 65 73 74  7 );        test
19360 63 61 73 65 28 20 75 75 3d 3d 32 31 34 37 34 38  case( uu==214748
19370 33 36 34 38 20 29 3b 0a 20 20 20 20 20 20 74 65  3648 );.      te
19380 73 74 63 61 73 65 28 20 75 75 3d 3d 31 34 30 37  stcase( uu==1407
19390 33 37 34 38 38 33 35 35 33 32 37 4c 4c 20 29 3b  37488355327LL );
193a0 20 74 65 73 74 63 61 73 65 28 20 75 75 3d 3d 31   testcase( uu==1
193b0 34 30 37 33 37 34 38 38 33 35 35 33 32 38 4c 4c  40737488355328LL
193c0 20 29 3b 0a 20 20 20 20 20 20 69 66 28 20 75 75   );.      if( uu
193d0 3c 3d 31 32 37 20 29 7b 0a 20 20 20 20 20 20 20  <=127 ){.       
193e0 20 69 66 28 20 28 69 26 31 29 3d 3d 69 20 26 26   if( (i&1)==i &&
193f0 20 66 69 6c 65 5f 66 6f 72 6d 61 74 3e 3d 34 20   file_format>=4 
19400 29 7b 0a 20 20 20 20 20 20 20 20 20 20 70 52 65  ){.          pRe
19410 63 2d 3e 75 54 65 6d 70 20 3d 20 38 2b 28 75 33  c->uTemp = 8+(u3
19420 32 29 75 75 3b 0a 20 20 20 20 20 20 20 20 7d 65  2)uu;.        }e
19430 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20 6e  lse{.          n
19440 44 61 74 61 2b 2b 3b 0a 20 20 20 20 20 20 20 20  Data++;.        
19450 20 20 70 52 65 63 2d 3e 75 54 65 6d 70 20 3d 20    pRec->uTemp = 
19460 31 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20  1;.        }.   
19470 20 20 20 7d 65 6c 73 65 20 69 66 28 20 75 75 3c     }else if( uu<
19480 3d 33 32 37 36 37 20 29 7b 0a 20 20 20 20 20 20  =32767 ){.      
19490 20 20 6e 44 61 74 61 20 2b 3d 20 32 3b 0a 20 20    nData += 2;.  
194a0 20 20 20 20 20 20 70 52 65 63 2d 3e 75 54 65 6d        pRec->uTem
194b0 70 20 3d 20 32 3b 0a 20 20 20 20 20 20 7d 65 6c  p = 2;.      }el
194c0 73 65 20 69 66 28 20 75 75 3c 3d 38 33 38 38 36  se if( uu<=83886
194d0 30 37 20 29 7b 0a 20 20 20 20 20 20 20 20 6e 44  07 ){.        nD
194e0 61 74 61 20 2b 3d 20 33 3b 0a 20 20 20 20 20 20  ata += 3;.      
194f0 20 20 70 52 65 63 2d 3e 75 54 65 6d 70 20 3d 20    pRec->uTemp = 
19500 33 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 20 69  3;.      }else i
19510 66 28 20 75 75 3c 3d 32 31 34 37 34 38 33 36 34  f( uu<=214748364
19520 37 20 29 7b 0a 20 20 20 20 20 20 20 20 6e 44 61  7 ){.        nDa
19530 74 61 20 2b 3d 20 34 3b 0a 20 20 20 20 20 20 20  ta += 4;.       
19540 20 70 52 65 63 2d 3e 75 54 65 6d 70 20 3d 20 34   pRec->uTemp = 4
19550 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 20 69 66  ;.      }else if
19560 28 20 75 75 3c 3d 31 34 30 37 33 37 34 38 38 33  ( uu<=1407374883
19570 35 35 33 32 37 4c 4c 20 29 7b 0a 20 20 20 20 20  55327LL ){.     
19580 20 20 20 6e 44 61 74 61 20 2b 3d 20 36 3b 0a 20     nData += 6;. 
19590 20 20 20 20 20 20 20 70 52 65 63 2d 3e 75 54 65         pRec->uTe
195a0 6d 70 20 3d 20 35 3b 0a 20 20 20 20 20 20 7d 65  mp = 5;.      }e
195b0 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 6e 44 61  lse{.        nDa
195c0 74 61 20 2b 3d 20 38 3b 0a 20 20 20 20 20 20 20  ta += 8;.       
195d0 20 69 66 28 20 70 52 65 63 2d 3e 66 6c 61 67 73   if( pRec->flags
195e0 20 26 20 4d 45 4d 5f 49 6e 74 52 65 61 6c 20 29   & MEM_IntReal )
195f0 7b 0a 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49  {.          /* I
19600 66 20 74 68 65 20 76 61 6c 75 65 20 69 73 20 49  f the value is I
19610 6e 74 52 65 61 6c 20 61 6e 64 20 69 73 20 67 6f  ntReal and is go
19620 69 6e 67 20 74 6f 20 74 61 6b 65 20 75 70 20 38  ing to take up 8
19630 20 62 79 74 65 73 20 74 6f 20 73 74 6f 72 65 0a   bytes to store.
19640 20 20 20 20 20 20 20 20 20 20 2a 2a 20 61 73 20            ** as 
19650 61 6e 20 69 6e 74 65 67 65 72 2c 20 74 68 65 6e  an integer, then
19660 20 77 65 20 6d 69 67 68 74 20 61 73 20 77 65 6c   we might as wel
19670 6c 20 6d 61 6b 65 20 69 74 20 61 6e 20 38 2d 62  l make it an 8-b
19680 79 74 65 20 66 6c 6f 61 74 69 6e 67 0a 20 20 20  yte floating.   
19690 20 20 20 20 20 20 20 2a 2a 20 70 6f 69 6e 74 20         ** point 
196a0 76 61 6c 75 65 20 2a 2f 0a 20 20 20 20 20 20 20  value */.       
196b0 20 20 20 70 52 65 63 2d 3e 75 2e 72 20 3d 20 28     pRec->u.r = (
196c0 64 6f 75 62 6c 65 29 70 52 65 63 2d 3e 75 2e 69  double)pRec->u.i
196d0 3b 0a 20 20 20 20 20 20 20 20 20 20 70 52 65 63  ;.          pRec
196e0 2d 3e 66 6c 61 67 73 20 26 3d 20 7e 4d 45 4d 5f  ->flags &= ~MEM_
196f0 49 6e 74 52 65 61 6c 3b 0a 20 20 20 20 20 20 20  IntReal;.       
19700 20 20 20 70 52 65 63 2d 3e 66 6c 61 67 73 20 7c     pRec->flags |
19710 3d 20 4d 45 4d 5f 52 65 61 6c 3b 0a 20 20 20 20  = MEM_Real;.    
19720 20 20 20 20 20 20 70 52 65 63 2d 3e 75 54 65 6d        pRec->uTem
19730 70 20 3d 20 37 3b 0a 20 20 20 20 20 20 20 20 7d  p = 7;.        }
19740 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20  else{.          
19750 70 52 65 63 2d 3e 75 54 65 6d 70 20 3d 20 36 3b  pRec->uTemp = 6;
19760 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20  .        }.     
19770 20 7d 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28   }.    }else if(
19780 20 70 52 65 63 2d 3e 66 6c 61 67 73 20 26 20 4d   pRec->flags & M
19790 45 4d 5f 52 65 61 6c 20 29 7b 0a 20 20 20 20 20  EM_Real ){.     
197a0 20 6e 48 64 72 2b 2b 3b 0a 20 20 20 20 20 20 6e   nHdr++;.      n
197b0 44 61 74 61 20 2b 3d 20 38 3b 0a 20 20 20 20 20  Data += 8;.     
197c0 20 70 52 65 63 2d 3e 75 54 65 6d 70 20 3d 20 37   pRec->uTemp = 7
197d0 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20  ;.    }else{.   
197e0 20 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e 6d     assert( db->m
197f0 61 6c 6c 6f 63 46 61 69 6c 65 64 20 7c 7c 20 70  allocFailed || p
19800 52 65 63 2d 3e 66 6c 61 67 73 26 28 4d 45 4d 5f  Rec->flags&(MEM_
19810 53 74 72 7c 4d 45 4d 5f 42 6c 6f 62 29 20 29 3b  Str|MEM_Blob) );
19820 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70  .      assert( p
19830 52 65 63 2d 3e 6e 3e 3d 30 20 29 3b 0a 20 20 20  Rec->n>=0 );.   
19840 20 20 20 6c 65 6e 20 3d 20 28 75 33 32 29 70 52     len = (u32)pR
19850 65 63 2d 3e 6e 3b 0a 20 20 20 20 20 20 73 65 72  ec->n;.      ser
19860 69 61 6c 5f 74 79 70 65 20 3d 20 28 6c 65 6e 2a  ial_type = (len*
19870 32 29 20 2b 20 31 32 20 2b 20 28 28 70 52 65 63  2) + 12 + ((pRec
19880 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 53 74  ->flags & MEM_St
19890 72 29 21 3d 30 29 3b 0a 20 20 20 20 20 20 69 66  r)!=0);.      if
198a0 28 20 70 52 65 63 2d 3e 66 6c 61 67 73 20 26 20  ( pRec->flags & 
198b0 4d 45 4d 5f 5a 65 72 6f 20 29 7b 0a 20 20 20 20  MEM_Zero ){.    
198c0 20 20 20 20 73 65 72 69 61 6c 5f 74 79 70 65 20      serial_type 
198d0 2b 3d 20 70 52 65 63 2d 3e 75 2e 6e 5a 65 72 6f  += pRec->u.nZero
198e0 2a 32 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20  *2;.        if( 
198f0 6e 44 61 74 61 20 29 7b 0a 20 20 20 20 20 20 20  nData ){.       
19900 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 56 64     if( sqlite3Vd
19910 62 65 4d 65 6d 45 78 70 61 6e 64 42 6c 6f 62 28  beMemExpandBlob(
19920 70 52 65 63 29 20 29 20 67 6f 74 6f 20 6e 6f 5f  pRec) ) goto no_
19930 6d 65 6d 3b 0a 20 20 20 20 20 20 20 20 20 20 6c  mem;.          l
19940 65 6e 20 2b 3d 20 70 52 65 63 2d 3e 75 2e 6e 5a  en += pRec->u.nZ
19950 65 72 6f 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c  ero;.        }el
19960 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20 6e 5a  se{.          nZ
19970 65 72 6f 20 2b 3d 20 70 52 65 63 2d 3e 75 2e 6e  ero += pRec->u.n
19980 5a 65 72 6f 3b 0a 20 20 20 20 20 20 20 20 7d 0a  Zero;.        }.
19990 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 6e 44        }.      nD
199a0 61 74 61 20 2b 3d 20 6c 65 6e 3b 0a 20 20 20 20  ata += len;.    
199b0 20 20 6e 48 64 72 20 2b 3d 20 73 71 6c 69 74 65    nHdr += sqlite
199c0 33 56 61 72 69 6e 74 4c 65 6e 28 73 65 72 69 61  3VarintLen(seria
199d0 6c 5f 74 79 70 65 29 3b 0a 20 20 20 20 20 20 70  l_type);.      p
199e0 52 65 63 2d 3e 75 54 65 6d 70 20 3d 20 73 65 72  Rec->uTemp = ser
199f0 69 61 6c 5f 74 79 70 65 3b 0a 20 20 20 20 7d 0a  ial_type;.    }.
19a00 20 20 20 20 69 66 28 20 70 52 65 63 3d 3d 70 44      if( pRec==pD
19a10 61 74 61 30 20 29 20 62 72 65 61 6b 3b 0a 20 20  ata0 ) break;.  
19a20 20 20 70 52 65 63 2d 2d 3b 0a 20 20 7d 77 68 69    pRec--;.  }whi
19a30 6c 65 28 31 29 3b 0a 0a 20 20 2f 2a 20 45 56 49  le(1);..  /* EVI
19a40 44 45 4e 43 45 2d 4f 46 3a 20 52 2d 32 32 35 36  DENCE-OF: R-2256
19a50 34 2d 31 31 36 34 37 20 54 68 65 20 68 65 61 64  4-11647 The head
19a60 65 72 20 62 65 67 69 6e 73 20 77 69 74 68 20 61  er begins with a
19a70 20 73 69 6e 67 6c 65 20 76 61 72 69 6e 74 0a 20   single varint. 
19a80 20 2a 2a 20 77 68 69 63 68 20 64 65 74 65 72 6d   ** which determ
19a90 69 6e 65 73 20 74 68 65 20 74 6f 74 61 6c 20 6e  ines the total n
19aa0 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20 69  umber of bytes i
19ab0 6e 20 74 68 65 20 68 65 61 64 65 72 2e 20 54 68  n the header. Th
19ac0 65 20 76 61 72 69 6e 74 0a 20 20 2a 2a 20 76 61  e varint.  ** va
19ad0 6c 75 65 20 69 73 20 74 68 65 20 73 69 7a 65 20  lue is the size 
19ae0 6f 66 20 74 68 65 20 68 65 61 64 65 72 20 69 6e  of the header in
19af0 20 62 79 74 65 73 20 69 6e 63 6c 75 64 69 6e 67   bytes including
19b00 20 74 68 65 20 73 69 7a 65 20 76 61 72 69 6e 74   the size varint
19b10 0a 20 20 2a 2a 20 69 74 73 65 6c 66 2e 20 2a 2f  .  ** itself. */
19b20 0a 20 20 74 65 73 74 63 61 73 65 28 20 6e 48 64  .  testcase( nHd
19b30 72 3d 3d 31 32 36 20 29 3b 0a 20 20 74 65 73 74  r==126 );.  test
19b40 63 61 73 65 28 20 6e 48 64 72 3d 3d 31 32 37 20  case( nHdr==127 
19b50 29 3b 0a 20 20 69 66 28 20 6e 48 64 72 3c 3d 31  );.  if( nHdr<=1
19b60 32 36 20 29 7b 0a 20 20 20 20 2f 2a 20 54 68 65  26 ){.    /* The
19b70 20 63 6f 6d 6d 6f 6e 20 63 61 73 65 20 2a 2f 0a   common case */.
19b80 20 20 20 20 6e 48 64 72 20 2b 3d 20 31 3b 0a 20      nHdr += 1;. 
19b90 20 7d 65 6c 73 65 7b 0a 20 20 20 20 2f 2a 20 52   }else{.    /* R
19ba0 61 72 65 20 63 61 73 65 20 6f 66 20 61 20 72 65  are case of a re
19bb0 61 6c 6c 79 20 6c 61 72 67 65 20 68 65 61 64 65  ally large heade
19bc0 72 20 2a 2f 0a 20 20 20 20 6e 56 61 72 69 6e 74  r */.    nVarint
19bd0 20 3d 20 73 71 6c 69 74 65 33 56 61 72 69 6e 74   = sqlite3Varint
19be0 4c 65 6e 28 6e 48 64 72 29 3b 0a 20 20 20 20 6e  Len(nHdr);.    n
19bf0 48 64 72 20 2b 3d 20 6e 56 61 72 69 6e 74 3b 0a  Hdr += nVarint;.
19c00 20 20 20 20 69 66 28 20 6e 56 61 72 69 6e 74 3c      if( nVarint<
19c10 73 71 6c 69 74 65 33 56 61 72 69 6e 74 4c 65 6e  sqlite3VarintLen
19c20 28 6e 48 64 72 29 20 29 20 6e 48 64 72 2b 2b 3b  (nHdr) ) nHdr++;
19c30 0a 20 20 7d 0a 20 20 6e 42 79 74 65 20 3d 20 6e  .  }.  nByte = n
19c40 48 64 72 2b 6e 44 61 74 61 3b 0a 0a 20 20 2f 2a  Hdr+nData;..  /*
19c50 20 4d 61 6b 65 20 73 75 72 65 20 74 68 65 20 6f   Make sure the o
19c60 75 74 70 75 74 20 72 65 67 69 73 74 65 72 20 68  utput register h
19c70 61 73 20 61 20 62 75 66 66 65 72 20 6c 61 72 67  as a buffer larg
19c80 65 20 65 6e 6f 75 67 68 20 74 6f 20 73 74 6f 72  e enough to stor
19c90 65 20 0a 20 20 2a 2a 20 74 68 65 20 6e 65 77 20  e .  ** the new 
19ca0 72 65 63 6f 72 64 2e 20 54 68 65 20 6f 75 74 70  record. The outp
19cb0 75 74 20 72 65 67 69 73 74 65 72 20 28 70 4f 70  ut register (pOp
19cc0 2d 3e 70 33 29 20 69 73 20 6e 6f 74 20 61 6c 6c  ->p3) is not all
19cd0 6f 77 65 64 20 74 6f 0a 20 20 2a 2a 20 62 65 20  owed to.  ** be 
19ce0 6f 6e 65 20 6f 66 20 74 68 65 20 69 6e 70 75 74  one of the input
19cf0 20 72 65 67 69 73 74 65 72 73 20 28 62 65 63 61   registers (beca
19d00 75 73 65 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e  use the followin
19d10 67 20 63 61 6c 6c 20 74 6f 0a 20 20 2a 2a 20 73  g call to.  ** s
19d20 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 43 6c 65  qlite3VdbeMemCle
19d30 61 72 41 6e 64 52 65 73 69 7a 65 28 29 20 63 6f  arAndResize() co
19d40 75 6c 64 20 63 6c 6f 62 62 65 72 20 74 68 65 20  uld clobber the 
19d50 76 61 6c 75 65 20 62 65 66 6f 72 65 20 69 74 20  value before it 
19d60 69 73 20 75 73 65 64 29 2e 0a 20 20 2a 2f 0a 20  is used)..  */. 
19d70 20 69 66 28 20 6e 42 79 74 65 2b 6e 5a 65 72 6f   if( nByte+nZero
19d80 3c 3d 70 4f 75 74 2d 3e 73 7a 4d 61 6c 6c 6f 63  <=pOut->szMalloc
19d90 20 29 7b 0a 20 20 20 20 2f 2a 20 54 68 65 20 6f   ){.    /* The o
19da0 75 74 70 75 74 20 72 65 67 69 73 74 65 72 20 69  utput register i
19db0 73 20 61 6c 72 65 61 64 79 20 6c 61 72 67 65 20  s already large 
19dc0 65 6e 6f 75 67 68 20 74 6f 20 68 6f 6c 64 20 74  enough to hold t
19dd0 68 65 20 72 65 63 6f 72 64 2e 0a 20 20 20 20 2a  he record..    *
19de0 2a 20 4e 6f 20 65 72 72 6f 72 20 63 68 65 63 6b  * No error check
19df0 73 20 6f 72 20 62 75 66 66 65 72 20 65 6e 6c 61  s or buffer enla
19e00 72 67 65 6d 65 6e 74 20 69 73 20 72 65 71 75 69  rgement is requi
19e10 72 65 64 20 2a 2f 0a 20 20 20 20 70 4f 75 74 2d  red */.    pOut-
19e20 3e 7a 20 3d 20 70 4f 75 74 2d 3e 7a 4d 61 6c 6c  >z = pOut->zMall
19e30 6f 63 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  oc;.  }else{.   
19e40 20 2f 2a 20 4e 65 65 64 20 74 6f 20 6d 61 6b 65   /* Need to make
19e50 20 73 75 72 65 20 74 68 61 74 20 74 68 65 20 6f   sure that the o
19e60 75 74 70 75 74 20 69 73 20 6e 6f 74 20 74 6f 6f  utput is not too
19e70 20 62 69 67 20 61 6e 64 20 74 68 65 6e 20 65 6e   big and then en
19e80 6c 61 72 67 65 0a 20 20 20 20 2a 2a 20 74 68 65  large.    ** the
19e90 20 6f 75 74 70 75 74 20 72 65 67 69 73 74 65 72   output register
19ea0 20 74 6f 20 68 6f 6c 64 20 74 68 65 20 66 75 6c   to hold the ful
19eb0 6c 20 72 65 73 75 6c 74 20 2a 2f 0a 20 20 20 20  l result */.    
19ec0 69 66 28 20 6e 42 79 74 65 2b 6e 5a 65 72 6f 3e  if( nByte+nZero>
19ed0 64 62 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c 49 54  db->aLimit[SQLIT
19ee0 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54 48 5d 20  E_LIMIT_LENGTH] 
19ef0 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20 74 6f  ){.      goto to
19f00 6f 5f 62 69 67 3b 0a 20 20 20 20 7d 0a 20 20 20  o_big;.    }.   
19f10 20 69 66 28 20 73 71 6c 69 74 65 33 56 64 62 65   if( sqlite3Vdbe
19f20 4d 65 6d 43 6c 65 61 72 41 6e 64 52 65 73 69 7a  MemClearAndResiz
19f30 65 28 70 4f 75 74 2c 20 28 69 6e 74 29 6e 42 79  e(pOut, (int)nBy
19f40 74 65 29 20 29 7b 0a 20 20 20 20 20 20 67 6f 74  te) ){.      got
19f50 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 20 20 7d 0a  o no_mem;.    }.
19f60 20 20 7d 0a 20 20 70 4f 75 74 2d 3e 6e 20 3d 20    }.  pOut->n = 
19f70 28 69 6e 74 29 6e 42 79 74 65 3b 0a 20 20 70 4f  (int)nByte;.  pO
19f80 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f  ut->flags = MEM_
19f90 42 6c 6f 62 3b 0a 20 20 69 66 28 20 6e 5a 65 72  Blob;.  if( nZer
19fa0 6f 20 29 7b 0a 20 20 20 20 70 4f 75 74 2d 3e 75  o ){.    pOut->u
19fb0 2e 6e 5a 65 72 6f 20 3d 20 6e 5a 65 72 6f 3b 0a  .nZero = nZero;.
19fc0 20 20 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20      pOut->flags 
19fd0 7c 3d 20 4d 45 4d 5f 5a 65 72 6f 3b 0a 20 20 7d  |= MEM_Zero;.  }
19fe0 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c  .  UPDATE_MAX_BL
19ff0 4f 42 53 49 5a 45 28 70 4f 75 74 29 3b 0a 20 20  OBSIZE(pOut);.  
1a000 7a 48 64 72 20 3d 20 28 75 38 20 2a 29 70 4f 75  zHdr = (u8 *)pOu
1a010 74 2d 3e 7a 3b 0a 20 20 7a 50 61 79 6c 6f 61 64  t->z;.  zPayload
1a020 20 3d 20 7a 48 64 72 20 2b 20 6e 48 64 72 3b 0a   = zHdr + nHdr;.
1a030 0a 20 20 2f 2a 20 57 72 69 74 65 20 74 68 65 20  .  /* Write the 
1a040 72 65 63 6f 72 64 20 2a 2f 0a 20 20 7a 48 64 72  record */.  zHdr
1a050 20 2b 3d 20 70 75 74 56 61 72 69 6e 74 33 32 28   += putVarint32(
1a060 7a 48 64 72 2c 20 6e 48 64 72 29 3b 0a 20 20 61  zHdr, nHdr);.  a
1a070 73 73 65 72 74 28 20 70 44 61 74 61 30 3c 3d 70  ssert( pData0<=p
1a080 4c 61 73 74 20 29 3b 0a 20 20 70 52 65 63 20 3d  Last );.  pRec =
1a090 20 70 44 61 74 61 30 3b 0a 20 20 64 6f 7b 0a 20   pData0;.  do{. 
1a0a0 20 20 20 73 65 72 69 61 6c 5f 74 79 70 65 20 3d     serial_type =
1a0b0 20 70 52 65 63 2d 3e 75 54 65 6d 70 3b 0a 20 20   pRec->uTemp;.  
1a0c0 20 20 2f 2a 20 45 56 49 44 45 4e 43 45 2d 4f 46    /* EVIDENCE-OF
1a0d0 3a 20 52 2d 30 36 35 32 39 2d 34 37 33 36 32 20  : R-06529-47362 
1a0e0 46 6f 6c 6c 6f 77 69 6e 67 20 74 68 65 20 73 69  Following the si
1a0f0 7a 65 20 76 61 72 69 6e 74 20 61 72 65 20 6f 6e  ze varint are on
1a100 65 20 6f 72 20 6d 6f 72 65 0a 20 20 20 20 2a 2a  e or more.    **
1a110 20 61 64 64 69 74 69 6f 6e 61 6c 20 76 61 72 69   additional vari
1a120 6e 74 73 2c 20 6f 6e 65 20 70 65 72 20 63 6f 6c  nts, one per col
1a130 75 6d 6e 2e 20 2a 2f 0a 20 20 20 20 7a 48 64 72  umn. */.    zHdr
1a140 20 2b 3d 20 70 75 74 56 61 72 69 6e 74 33 32 28   += putVarint32(
1a150 7a 48 64 72 2c 20 73 65 72 69 61 6c 5f 74 79 70  zHdr, serial_typ
1a160 65 29 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  e);            /
1a170 2a 20 73 65 72 69 61 6c 20 74 79 70 65 20 2a 2f  * serial type */
1a180 0a 20 20 20 20 2f 2a 20 45 56 49 44 45 4e 43 45  .    /* EVIDENCE
1a190 2d 4f 46 3a 20 52 2d 36 34 35 33 36 2d 35 31 37  -OF: R-64536-517
1a1a0 32 38 20 54 68 65 20 76 61 6c 75 65 73 20 66 6f  28 The values fo
1a1b0 72 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 69 6e  r each column in
1a1c0 20 74 68 65 20 72 65 63 6f 72 64 0a 20 20 20 20   the record.    
1a1d0 2a 2a 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 66  ** immediately f
1a1e0 6f 6c 6c 6f 77 20 74 68 65 20 68 65 61 64 65 72  ollow the header
1a1f0 2e 20 2a 2f 0a 20 20 20 20 7a 50 61 79 6c 6f 61  . */.    zPayloa
1a200 64 20 2b 3d 20 73 71 6c 69 74 65 33 56 64 62 65  d += sqlite3Vdbe
1a210 53 65 72 69 61 6c 50 75 74 28 7a 50 61 79 6c 6f  SerialPut(zPaylo
1a220 61 64 2c 20 70 52 65 63 2c 20 73 65 72 69 61 6c  ad, pRec, serial
1a230 5f 74 79 70 65 29 3b 20 2f 2a 20 63 6f 6e 74 65  _type); /* conte
1a240 6e 74 20 2a 2f 0a 20 20 7d 77 68 69 6c 65 28 20  nt */.  }while( 
1a250 28 2b 2b 70 52 65 63 29 3c 3d 70 4c 61 73 74 20  (++pRec)<=pLast 
1a260 29 3b 0a 20 20 61 73 73 65 72 74 28 20 6e 48 64  );.  assert( nHd
1a270 72 3d 3d 28 69 6e 74 29 28 7a 48 64 72 20 2d 20  r==(int)(zHdr - 
1a280 28 75 38 2a 29 70 4f 75 74 2d 3e 7a 29 20 29 3b  (u8*)pOut->z) );
1a290 0a 20 20 61 73 73 65 72 74 28 20 6e 42 79 74 65  .  assert( nByte
1a2a0 3d 3d 28 69 6e 74 29 28 7a 50 61 79 6c 6f 61 64  ==(int)(zPayload
1a2b0 20 2d 20 28 75 38 2a 29 70 4f 75 74 2d 3e 7a 29   - (u8*)pOut->z)
1a2c0 20 29 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70   );..  assert( p
1a2d0 4f 70 2d 3e 70 33 3e 30 20 26 26 20 70 4f 70 2d  Op->p3>0 && pOp-
1a2e0 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20  >p3<=(p->nMem+1 
1a2f0 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b  - p->nCursor) );
1a300 0a 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43  .  REGISTER_TRAC
1a310 45 28 70 4f 70 2d 3e 70 33 2c 20 70 4f 75 74 29  E(pOp->p3, pOut)
1a320 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
1a330 20 4f 70 63 6f 64 65 3a 20 43 6f 75 6e 74 20 50   Opcode: Count P
1a340 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79  1 P2 * * *.** Sy
1a350 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 63 6f  nopsis: r[P2]=co
1a360 75 6e 74 28 29 0a 2a 2a 0a 2a 2a 20 53 74 6f 72  unt().**.** Stor
1a370 65 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  e the number of 
1a380 65 6e 74 72 69 65 73 20 28 61 6e 20 69 6e 74 65  entries (an inte
1a390 67 65 72 20 76 61 6c 75 65 29 20 69 6e 20 74 68  ger value) in th
1a3a0 65 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78  e table or index
1a3b0 20 0a 2a 2a 20 6f 70 65 6e 65 64 20 62 79 20 63   .** opened by c
1a3c0 75 72 73 6f 72 20 50 31 20 69 6e 20 72 65 67 69  ursor P1 in regi
1a3d0 73 74 65 72 20 50 32 0a 2a 2f 0a 23 69 66 6e 64  ster P2.*/.#ifnd
1a3e0 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 42  ef SQLITE_OMIT_B
1a3f0 54 52 45 45 43 4f 55 4e 54 0a 63 61 73 65 20 4f  TREECOUNT.case O
1a400 50 5f 43 6f 75 6e 74 3a 20 7b 20 20 20 20 20 20  P_Count: {      
1a410 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20 20     /* out2 */.  
1a420 69 36 34 20 6e 45 6e 74 72 79 3b 0a 20 20 42 74  i64 nEntry;.  Bt
1a430 43 75 72 73 6f 72 20 2a 70 43 72 73 72 3b 0a 0a  Cursor *pCrsr;..
1a440 20 20 61 73 73 65 72 74 28 20 70 2d 3e 61 70 43    assert( p->apC
1a450 73 72 5b 70 4f 70 2d 3e 70 31 5d 2d 3e 65 43 75  sr[pOp->p1]->eCu
1a460 72 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f 42  rType==CURTYPE_B
1a470 54 52 45 45 20 29 3b 0a 20 20 70 43 72 73 72 20  TREE );.  pCrsr 
1a480 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e  = p->apCsr[pOp->
1a490 70 31 5d 2d 3e 75 63 2e 70 43 75 72 73 6f 72 3b  p1]->uc.pCursor;
1a4a0 0a 20 20 61 73 73 65 72 74 28 20 70 43 72 73 72  .  assert( pCrsr
1a4b0 20 29 3b 0a 20 20 6e 45 6e 74 72 79 20 3d 20 30   );.  nEntry = 0
1a4c0 3b 20 20 2f 2a 20 4e 6f 74 20 6e 65 65 64 65 64  ;  /* Not needed
1a4d0 2e 20 20 4f 6e 6c 79 20 75 73 65 64 20 74 6f 20  .  Only used to 
1a4e0 73 69 6c 65 6e 63 65 20 61 20 77 61 72 6e 69 6e  silence a warnin
1a4f0 67 2e 20 2a 2f 0a 20 20 72 63 20 3d 20 73 71 6c  g. */.  rc = sql
1a500 69 74 65 33 42 74 72 65 65 43 6f 75 6e 74 28 70  ite3BtreeCount(p
1a510 43 72 73 72 2c 20 26 6e 45 6e 74 72 79 29 3b 0a  Crsr, &nEntry);.
1a520 20 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20    if( rc ) goto 
1a530 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
1a540 6f 72 3b 0a 20 20 70 4f 75 74 20 3d 20 6f 75 74  or;.  pOut = out
1a550 32 50 72 65 72 65 6c 65 61 73 65 28 70 2c 20 70  2Prerelease(p, p
1a560 4f 70 29 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e 69  Op);.  pOut->u.i
1a570 20 3d 20 6e 45 6e 74 72 79 3b 0a 20 20 62 72 65   = nEntry;.  bre
1a580 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a  ak;.}.#endif../*
1a590 20 4f 70 63 6f 64 65 3a 20 53 61 76 65 70 6f 69   Opcode: Savepoi
1a5a0 6e 74 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a  nt P1 * * P4 *.*
1a5b0 2a 0a 2a 2a 20 4f 70 65 6e 2c 20 72 65 6c 65 61  *.** Open, relea
1a5c0 73 65 20 6f 72 20 72 6f 6c 6c 62 61 63 6b 20 74  se or rollback t
1a5d0 68 65 20 73 61 76 65 70 6f 69 6e 74 20 6e 61 6d  he savepoint nam
1a5e0 65 64 20 62 79 20 70 61 72 61 6d 65 74 65 72 20  ed by parameter 
1a5f0 50 34 2c 20 64 65 70 65 6e 64 69 6e 67 0a 2a 2a  P4, depending.**
1a600 20 6f 6e 20 74 68 65 20 76 61 6c 75 65 20 6f 66   on the value of
1a610 20 50 31 2e 20 54 6f 20 6f 70 65 6e 20 61 20 6e   P1. To open a n
1a620 65 77 20 73 61 76 65 70 6f 69 6e 74 20 73 65 74  ew savepoint set
1a630 20 50 31 3d 3d 30 20 28 53 41 56 45 50 4f 49 4e   P1==0 (SAVEPOIN
1a640 54 5f 42 45 47 49 4e 29 2e 0a 2a 2a 20 54 6f 20  T_BEGIN)..** To 
1a650 72 65 6c 65 61 73 65 20 28 63 6f 6d 6d 69 74 29  release (commit)
1a660 20 61 6e 20 65 78 69 73 74 69 6e 67 20 73 61 76   an existing sav
1a670 65 70 6f 69 6e 74 20 73 65 74 20 50 31 3d 3d 31  epoint set P1==1
1a680 20 28 53 41 56 45 50 4f 49 4e 54 5f 52 45 4c 45   (SAVEPOINT_RELE
1a690 41 53 45 29 2e 0a 2a 2a 20 54 6f 20 72 6f 6c 6c  ASE)..** To roll
1a6a0 62 61 63 6b 20 61 6e 20 65 78 69 73 74 69 6e 67  back an existing
1a6b0 20 73 61 76 65 70 6f 69 6e 74 20 73 65 74 20 50   savepoint set P
1a6c0 31 3d 3d 32 20 28 53 41 56 45 50 4f 49 4e 54 5f  1==2 (SAVEPOINT_
1a6d0 52 4f 4c 4c 42 41 43 4b 29 2e 0a 2a 2f 0a 63 61  ROLLBACK)..*/.ca
1a6e0 73 65 20 4f 50 5f 53 61 76 65 70 6f 69 6e 74 3a  se OP_Savepoint:
1a6f0 20 7b 0a 20 20 69 6e 74 20 70 31 3b 20 20 20 20   {.  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 2f 2a 20 56 61 6c 75 65 20 6f 66       /* Value of
1a720 20 50 31 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20   P1 operand */. 
1a730 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20   char *zName;   
1a740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a750 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 73 61 76 65   /* Name of save
1a760 70 6f 69 6e 74 20 2a 2f 0a 20 20 69 6e 74 20 6e  point */.  int n
1a770 4e 61 6d 65 3b 0a 20 20 53 61 76 65 70 6f 69 6e  Name;.  Savepoin
1a780 74 20 2a 70 4e 65 77 3b 0a 20 20 53 61 76 65 70  t *pNew;.  Savep
1a790 6f 69 6e 74 20 2a 70 53 61 76 65 70 6f 69 6e 74  oint *pSavepoint
1a7a0 3b 0a 20 20 53 61 76 65 70 6f 69 6e 74 20 2a 70  ;.  Savepoint *p
1a7b0 54 6d 70 3b 0a 20 20 69 6e 74 20 69 53 61 76 65  Tmp;.  int iSave
1a7c0 70 6f 69 6e 74 3b 0a 20 20 69 6e 74 20 69 69 3b  point;.  int ii;
1a7d0 0a 0a 20 20 70 31 20 3d 20 70 4f 70 2d 3e 70 31  ..  p1 = pOp->p1
1a7e0 3b 0a 20 20 7a 4e 61 6d 65 20 3d 20 70 4f 70 2d  ;.  zName = pOp-
1a7f0 3e 70 34 2e 7a 3b 0a 0a 20 20 2f 2a 20 41 73 73  >p4.z;..  /* Ass
1a800 65 72 74 20 74 68 61 74 20 74 68 65 20 70 31 20  ert that the p1 
1a810 70 61 72 61 6d 65 74 65 72 20 69 73 20 76 61 6c  parameter is val
1a820 69 64 2e 20 41 6c 73 6f 20 74 68 61 74 20 69 66  id. Also that if
1a830 20 74 68 65 72 65 20 69 73 20 6e 6f 20 6f 70 65   there is no ope
1a840 6e 0a 20 20 2a 2a 20 74 72 61 6e 73 61 63 74 69  n.  ** transacti
1a850 6f 6e 2c 20 74 68 65 6e 20 74 68 65 72 65 20 63  on, then there c
1a860 61 6e 6e 6f 74 20 62 65 20 61 6e 79 20 73 61 76  annot be any sav
1a870 65 70 6f 69 6e 74 73 2e 20 0a 20 20 2a 2f 0a 20  epoints. .  */. 
1a880 20 61 73 73 65 72 74 28 20 64 62 2d 3e 70 53 61   assert( db->pSa
1a890 76 65 70 6f 69 6e 74 3d 3d 30 20 7c 7c 20 64 62  vepoint==0 || db
1a8a0 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 3d 3d 30 20  ->autoCommit==0 
1a8b0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 31 3d  );.  assert( p1=
1a8c0 3d 53 41 56 45 50 4f 49 4e 54 5f 42 45 47 49 4e  =SAVEPOINT_BEGIN
1a8d0 7c 7c 70 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f  ||p1==SAVEPOINT_
1a8e0 52 45 4c 45 41 53 45 7c 7c 70 31 3d 3d 53 41 56  RELEASE||p1==SAV
1a8f0 45 50 4f 49 4e 54 5f 52 4f 4c 4c 42 41 43 4b 20  EPOINT_ROLLBACK 
1a900 29 3b 0a 20 20 61 73 73 65 72 74 28 20 64 62 2d  );.  assert( db-
1a910 3e 70 53 61 76 65 70 6f 69 6e 74 20 7c 7c 20 64  >pSavepoint || d
1a920 62 2d 3e 69 73 54 72 61 6e 73 61 63 74 69 6f 6e  b->isTransaction
1a930 53 61 76 65 70 6f 69 6e 74 3d 3d 30 20 29 3b 0a  Savepoint==0 );.
1a940 20 20 61 73 73 65 72 74 28 20 63 68 65 63 6b 53    assert( checkS
1a950 61 76 65 70 6f 69 6e 74 43 6f 75 6e 74 28 64 62  avepointCount(db
1a960 29 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  ) );.  assert( p
1a970 2d 3e 62 49 73 52 65 61 64 65 72 20 29 3b 0a 0a  ->bIsReader );..
1a980 20 20 69 66 28 20 70 31 3d 3d 53 41 56 45 50 4f    if( p1==SAVEPO
1a990 49 4e 54 5f 42 45 47 49 4e 20 29 7b 0a 20 20 20  INT_BEGIN ){.   
1a9a0 20 69 66 28 20 64 62 2d 3e 6e 56 64 62 65 57 72   if( db->nVdbeWr
1a9b0 69 74 65 3e 30 20 29 7b 0a 20 20 20 20 20 20 2f  ite>0 ){.      /
1a9c0 2a 20 41 20 6e 65 77 20 73 61 76 65 70 6f 69 6e  * A new savepoin
1a9d0 74 20 63 61 6e 6e 6f 74 20 62 65 20 63 72 65 61  t cannot be crea
1a9e0 74 65 64 20 69 66 20 74 68 65 72 65 20 61 72 65  ted if there are
1a9f0 20 61 63 74 69 76 65 20 77 72 69 74 65 20 0a 20   active write . 
1aa00 20 20 20 20 20 2a 2a 20 73 74 61 74 65 6d 65 6e       ** statemen
1aa10 74 73 20 28 69 2e 65 2e 20 6f 70 65 6e 20 72 65  ts (i.e. open re
1aa20 61 64 2f 77 72 69 74 65 20 69 6e 63 72 65 6d 65  ad/write increme
1aa30 6e 74 61 6c 20 62 6c 6f 62 20 68 61 6e 64 6c 65  ntal blob handle
1aa40 73 29 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20  s)..      */.   
1aa50 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 45 72     sqlite3VdbeEr
1aa60 72 6f 72 28 70 2c 20 22 63 61 6e 6e 6f 74 20 6f  ror(p, "cannot o
1aa70 70 65 6e 20 73 61 76 65 70 6f 69 6e 74 20 2d 20  pen savepoint - 
1aa80 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 73 20 69  SQL statements i
1aa90 6e 20 70 72 6f 67 72 65 73 73 22 29 3b 0a 20 20  n progress");.  
1aaa0 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f      rc = SQLITE_
1aab0 42 55 53 59 3b 0a 20 20 20 20 7d 65 6c 73 65 7b  BUSY;.    }else{
1aac0 0a 20 20 20 20 20 20 6e 4e 61 6d 65 20 3d 20 73  .      nName = s
1aad0 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28 7a  qlite3Strlen30(z
1aae0 4e 61 6d 65 29 3b 0a 0a 23 69 66 6e 64 65 66 20  Name);..#ifndef 
1aaf0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54  SQLITE_OMIT_VIRT
1ab00 55 41 4c 54 41 42 4c 45 0a 20 20 20 20 20 20 2f  UALTABLE.      /
1ab10 2a 20 54 68 69 73 20 63 61 6c 6c 20 69 73 20 4f  * This call is O
1ab20 6b 20 65 76 65 6e 20 69 66 20 74 68 69 73 20 73  k even if this s
1ab30 61 76 65 70 6f 69 6e 74 20 69 73 20 61 63 74 75  avepoint is actu
1ab40 61 6c 6c 79 20 61 20 74 72 61 6e 73 61 63 74 69  ally a transacti
1ab50 6f 6e 0a 20 20 20 20 20 20 2a 2a 20 73 61 76 65  on.      ** save
1ab60 70 6f 69 6e 74 20 28 61 6e 64 20 74 68 65 72 65  point (and there
1ab70 66 6f 72 65 20 73 68 6f 75 6c 64 20 6e 6f 74 20  fore should not 
1ab80 70 72 6f 6d 70 74 20 78 53 61 76 65 70 6f 69 6e  prompt xSavepoin
1ab90 74 28 29 29 20 63 61 6c 6c 62 61 63 6b 73 2e 0a  t()) callbacks..
1aba0 20 20 20 20 20 20 2a 2a 20 49 66 20 74 68 69 73        ** If this
1abb0 20 69 73 20 61 20 74 72 61 6e 73 61 63 74 69 6f   is a transactio
1abc0 6e 20 73 61 76 65 70 6f 69 6e 74 20 62 65 69 6e  n savepoint bein
1abd0 67 20 6f 70 65 6e 65 64 2c 20 69 74 20 69 73 20  g opened, it is 
1abe0 67 75 61 72 61 6e 74 65 65 64 0a 20 20 20 20 20  guaranteed.     
1abf0 20 2a 2a 20 74 68 61 74 20 74 68 65 20 64 62 2d   ** that the db-
1ac00 3e 61 56 54 72 61 6e 73 5b 5d 20 61 72 72 61 79  >aVTrans[] array
1ac10 20 69 73 20 65 6d 70 74 79 2e 20 20 2a 2f 0a 20   is empty.  */. 
1ac20 20 20 20 20 20 61 73 73 65 72 74 28 20 64 62 2d       assert( db-
1ac30 3e 61 75 74 6f 43 6f 6d 6d 69 74 3d 3d 30 20 7c  >autoCommit==0 |
1ac40 7c 20 64 62 2d 3e 6e 56 54 72 61 6e 73 3d 3d 30  | db->nVTrans==0
1ac50 20 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 73   );.      rc = s
1ac60 71 6c 69 74 65 33 56 74 61 62 53 61 76 65 70 6f  qlite3VtabSavepo
1ac70 69 6e 74 28 64 62 2c 20 53 41 56 45 50 4f 49 4e  int(db, SAVEPOIN
1ac80 54 5f 42 45 47 49 4e 2c 0a 20 20 20 20 20 20 20  T_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 64 62 2d 3e 6e 53 74           db->nSt
1acb0 61 74 65 6d 65 6e 74 2b 64 62 2d 3e 6e 53 61 76  atement+db->nSav
1acc0 65 70 6f 69 6e 74 29 3b 0a 20 20 20 20 20 20 69  epoint);.      i
1acd0 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc!=SQLITE_OK
1ace0 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75   ) goto abort_du
1acf0 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 23 65 6e 64  e_to_error;.#end
1ad00 69 66 0a 0a 20 20 20 20 20 20 2f 2a 20 43 72 65  if..      /* Cre
1ad10 61 74 65 20 61 20 6e 65 77 20 73 61 76 65 70 6f  ate a new savepo
1ad20 69 6e 74 20 73 74 72 75 63 74 75 72 65 2e 20 2a  int structure. *
1ad30 2f 0a 20 20 20 20 20 20 70 4e 65 77 20 3d 20 73  /.      pNew = s
1ad40 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 52 61  qlite3DbMallocRa
1ad50 77 4e 4e 28 64 62 2c 20 73 69 7a 65 6f 66 28 53  wNN(db, sizeof(S
1ad60 61 76 65 70 6f 69 6e 74 29 2b 6e 4e 61 6d 65 2b  avepoint)+nName+
1ad70 31 29 3b 0a 20 20 20 20 20 20 69 66 28 20 70 4e  1);.      if( pN
1ad80 65 77 20 29 7b 0a 20 20 20 20 20 20 20 20 70 4e  ew ){.        pN
1ad90 65 77 2d 3e 7a 4e 61 6d 65 20 3d 20 28 63 68 61  ew->zName = (cha
1ada0 72 20 2a 29 26 70 4e 65 77 5b 31 5d 3b 0a 20 20  r *)&pNew[1];.  
1adb0 20 20 20 20 20 20 6d 65 6d 63 70 79 28 70 4e 65        memcpy(pNe
1adc0 77 2d 3e 7a 4e 61 6d 65 2c 20 7a 4e 61 6d 65 2c  w->zName, zName,
1add0 20 6e 4e 61 6d 65 2b 31 29 3b 0a 20 20 20 20 0a   nName+1);.    .
1ade0 20 20 20 20 20 20 20 20 2f 2a 20 49 66 20 74 68          /* If th
1adf0 65 72 65 20 69 73 20 6e 6f 20 6f 70 65 6e 20 74  ere is no open t
1ae00 72 61 6e 73 61 63 74 69 6f 6e 2c 20 74 68 65 6e  ransaction, then
1ae10 20 6d 61 72 6b 20 74 68 69 73 20 61 73 20 61 20   mark this as a 
1ae20 73 70 65 63 69 61 6c 0a 20 20 20 20 20 20 20 20  special.        
1ae30 2a 2a 20 22 74 72 61 6e 73 61 63 74 69 6f 6e 20  ** "transaction 
1ae40 73 61 76 65 70 6f 69 6e 74 22 2e 20 2a 2f 0a 20  savepoint". */. 
1ae50 20 20 20 20 20 20 20 69 66 28 20 64 62 2d 3e 61         if( db->a
1ae60 75 74 6f 43 6f 6d 6d 69 74 20 29 7b 0a 20 20 20  utoCommit ){.   
1ae70 20 20 20 20 20 20 20 64 62 2d 3e 61 75 74 6f 43         db->autoC
1ae80 6f 6d 6d 69 74 20 3d 20 30 3b 0a 20 20 20 20 20  ommit = 0;.     
1ae90 20 20 20 20 20 64 62 2d 3e 69 73 54 72 61 6e 73       db->isTrans
1aea0 61 63 74 69 6f 6e 53 61 76 65 70 6f 69 6e 74 20  actionSavepoint 
1aeb0 3d 20 31 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c  = 1;.        }el
1aec0 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20 64 62  se{.          db
1aed0 2d 3e 6e 53 61 76 65 70 6f 69 6e 74 2b 2b 3b 0a  ->nSavepoint++;.
1aee0 20 20 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20          }..     
1aef0 20 20 20 2f 2a 20 4c 69 6e 6b 20 74 68 65 20 6e     /* Link the n
1af00 65 77 20 73 61 76 65 70 6f 69 6e 74 20 69 6e 74  ew savepoint int
1af10 6f 20 74 68 65 20 64 61 74 61 62 61 73 65 20 68  o the database h
1af20 61 6e 64 6c 65 27 73 20 6c 69 73 74 2e 20 2a 2f  andle's list. */
1af30 0a 20 20 20 20 20 20 20 20 70 4e 65 77 2d 3e 70  .        pNew->p
1af40 4e 65 78 74 20 3d 20 64 62 2d 3e 70 53 61 76 65  Next = db->pSave
1af50 70 6f 69 6e 74 3b 0a 20 20 20 20 20 20 20 20 64  point;.        d
1af60 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74 20 3d 20  b->pSavepoint = 
1af70 70 4e 65 77 3b 0a 20 20 20 20 20 20 20 20 70 4e  pNew;.        pN
1af80 65 77 2d 3e 6e 44 65 66 65 72 72 65 64 43 6f 6e  ew->nDeferredCon
1af90 73 20 3d 20 64 62 2d 3e 6e 44 65 66 65 72 72 65  s = db->nDeferre
1afa0 64 43 6f 6e 73 3b 0a 20 20 20 20 20 20 20 20 70  dCons;.        p
1afb0 4e 65 77 2d 3e 6e 44 65 66 65 72 72 65 64 49 6d  New->nDeferredIm
1afc0 6d 43 6f 6e 73 20 3d 20 64 62 2d 3e 6e 44 65 66  mCons = db->nDef
1afd0 65 72 72 65 64 49 6d 6d 43 6f 6e 73 3b 0a 20 20  erredImmCons;.  
1afe0 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 65      }.    }.  }e
1aff0 6c 73 65 7b 0a 20 20 20 20 61 73 73 65 72 74 28  lse{.    assert(
1b000 20 70 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 52   p1==SAVEPOINT_R
1b010 45 4c 45 41 53 45 20 7c 7c 20 70 31 3d 3d 53 41  ELEASE || p1==SA
1b020 56 45 50 4f 49 4e 54 5f 52 4f 4c 4c 42 41 43 4b  VEPOINT_ROLLBACK
1b030 20 29 3b 0a 20 20 20 20 69 53 61 76 65 70 6f 69   );.    iSavepoi
1b040 6e 74 20 3d 20 30 3b 0a 0a 20 20 20 20 2f 2a 20  nt = 0;..    /* 
1b050 46 69 6e 64 20 74 68 65 20 6e 61 6d 65 64 20 73  Find the named s
1b060 61 76 65 70 6f 69 6e 74 2e 20 49 66 20 74 68 65  avepoint. If the
1b070 72 65 20 69 73 20 6e 6f 20 73 75 63 68 20 73 61  re is no such sa
1b080 76 65 70 6f 69 6e 74 2c 20 74 68 65 6e 20 61 6e  vepoint, then an
1b090 0a 20 20 20 20 2a 2a 20 61 6e 20 65 72 72 6f 72  .    ** an error
1b0a0 20 69 73 20 72 65 74 75 72 6e 65 64 20 74 6f 20   is returned to 
1b0b0 74 68 65 20 75 73 65 72 2e 20 20 2a 2f 0a 20 20  the user.  */.  
1b0c0 20 20 66 6f 72 28 0a 20 20 20 20 20 20 70 53 61    for(.      pSa
1b0d0 76 65 70 6f 69 6e 74 20 3d 20 64 62 2d 3e 70 53  vepoint = db->pS
1b0e0 61 76 65 70 6f 69 6e 74 3b 20 0a 20 20 20 20 20  avepoint; .     
1b0f0 20 70 53 61 76 65 70 6f 69 6e 74 20 26 26 20 73   pSavepoint && s
1b100 71 6c 69 74 65 33 53 74 72 49 43 6d 70 28 70 53  qlite3StrICmp(pS
1b110 61 76 65 70 6f 69 6e 74 2d 3e 7a 4e 61 6d 65 2c  avepoint->zName,
1b120 20 7a 4e 61 6d 65 29 3b 0a 20 20 20 20 20 20 70   zName);.      p
1b130 53 61 76 65 70 6f 69 6e 74 20 3d 20 70 53 61 76  Savepoint = pSav
1b140 65 70 6f 69 6e 74 2d 3e 70 4e 65 78 74 0a 20 20  epoint->pNext.  
1b150 20 20 29 7b 0a 20 20 20 20 20 20 69 53 61 76 65    ){.      iSave
1b160 70 6f 69 6e 74 2b 2b 3b 0a 20 20 20 20 7d 0a 20  point++;.    }. 
1b170 20 20 20 69 66 28 20 21 70 53 61 76 65 70 6f 69     if( !pSavepoi
1b180 6e 74 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69  nt ){.      sqli
1b190 74 65 33 56 64 62 65 45 72 72 6f 72 28 70 2c 20  te3VdbeError(p, 
1b1a0 22 6e 6f 20 73 75 63 68 20 73 61 76 65 70 6f 69  "no such savepoi
1b1b0 6e 74 3a 20 25 73 22 2c 20 7a 4e 61 6d 65 29 3b  nt: %s", zName);
1b1c0 0a 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49  .      rc = SQLI
1b1d0 54 45 5f 45 52 52 4f 52 3b 0a 20 20 20 20 7d 65  TE_ERROR;.    }e
1b1e0 6c 73 65 20 69 66 28 20 64 62 2d 3e 6e 56 64 62  lse if( db->nVdb
1b1f0 65 57 72 69 74 65 3e 30 20 26 26 20 70 31 3d 3d  eWrite>0 && p1==
1b200 53 41 56 45 50 4f 49 4e 54 5f 52 45 4c 45 41 53  SAVEPOINT_RELEAS
1b210 45 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 49 74  E ){.      /* It
1b220 20 69 73 20 6e 6f 74 20 70 6f 73 73 69 62 6c 65   is not possible
1b230 20 74 6f 20 72 65 6c 65 61 73 65 20 28 63 6f 6d   to release (com
1b240 6d 69 74 29 20 61 20 73 61 76 65 70 6f 69 6e 74  mit) a savepoint
1b250 20 69 66 20 74 68 65 72 65 20 61 72 65 20 0a 20   if there are . 
1b260 20 20 20 20 20 2a 2a 20 61 63 74 69 76 65 20 77       ** active w
1b270 72 69 74 65 20 73 74 61 74 65 6d 65 6e 74 73 2e  rite statements.
1b280 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20  .      */.      
1b290 73 71 6c 69 74 65 33 56 64 62 65 45 72 72 6f 72  sqlite3VdbeError
1b2a0 28 70 2c 20 22 63 61 6e 6e 6f 74 20 72 65 6c 65  (p, "cannot rele
1b2b0 61 73 65 20 73 61 76 65 70 6f 69 6e 74 20 2d 20  ase savepoint - 
1b2c0 22 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ".              
1b2d0 20 20 20 20 20 20 20 20 20 20 20 20 22 53 51 4c              "SQL
1b2e0 20 73 74 61 74 65 6d 65 6e 74 73 20 69 6e 20 70   statements in p
1b2f0 72 6f 67 72 65 73 73 22 29 3b 0a 20 20 20 20 20  rogress");.     
1b300 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 42 55 53   rc = SQLITE_BUS
1b310 59 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 0a 20  Y;.    }else{.. 
1b320 20 20 20 20 20 2f 2a 20 44 65 74 65 72 6d 69 6e       /* Determin
1b330 65 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74  e whether or not
1b340 20 74 68 69 73 20 69 73 20 61 20 74 72 61 6e 73   this is a trans
1b350 61 63 74 69 6f 6e 20 73 61 76 65 70 6f 69 6e 74  action savepoint
1b360 2e 20 49 66 20 73 6f 2c 0a 20 20 20 20 20 20 2a  . If so,.      *
1b370 2a 20 61 6e 64 20 74 68 69 73 20 69 73 20 61 20  * and this is a 
1b380 52 45 4c 45 41 53 45 20 63 6f 6d 6d 61 6e 64 2c  RELEASE command,
1b390 20 74 68 65 6e 20 74 68 65 20 63 75 72 72 65 6e   then the curren
1b3a0 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 0a 20  t transaction . 
1b3b0 20 20 20 20 20 2a 2a 20 69 73 20 63 6f 6d 6d 69       ** is commi
1b3c0 74 74 65 64 2e 20 0a 20 20 20 20 20 20 2a 2f 0a  tted. .      */.
1b3d0 20 20 20 20 20 20 69 6e 74 20 69 73 54 72 61 6e        int isTran
1b3e0 73 61 63 74 69 6f 6e 20 3d 20 70 53 61 76 65 70  saction = pSavep
1b3f0 6f 69 6e 74 2d 3e 70 4e 65 78 74 3d 3d 30 20 26  oint->pNext==0 &
1b400 26 20 64 62 2d 3e 69 73 54 72 61 6e 73 61 63 74  & db->isTransact
1b410 69 6f 6e 53 61 76 65 70 6f 69 6e 74 3b 0a 20 20  ionSavepoint;.  
1b420 20 20 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e      assert( db->
1b430 62 43 6f 6e 63 75 72 72 65 6e 74 3d 3d 30 20 7c  bConcurrent==0 |
1b440 7c 20 64 62 2d 3e 69 73 54 72 61 6e 73 61 63 74  | db->isTransact
1b450 69 6f 6e 53 61 76 65 70 6f 69 6e 74 3d 3d 30 20  ionSavepoint==0 
1b460 29 3b 0a 20 20 20 20 20 20 69 66 28 20 69 73 54  );.      if( isT
1b470 72 61 6e 73 61 63 74 69 6f 6e 20 26 26 20 70 31  ransaction && p1
1b480 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 52 45 4c 45  ==SAVEPOINT_RELE
1b490 41 53 45 20 29 7b 0a 20 20 20 20 20 20 20 20 69  ASE ){.        i
1b4a0 66 28 20 28 72 63 20 3d 20 73 71 6c 69 74 65 33  f( (rc = sqlite3
1b4b0 56 64 62 65 43 68 65 63 6b 46 6b 28 70 2c 20 31  VdbeCheckFk(p, 1
1b4c0 29 29 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b  ))!=SQLITE_OK ){
1b4d0 0a 20 20 20 20 20 20 20 20 20 20 67 6f 74 6f 20  .          goto 
1b4e0 76 64 62 65 5f 72 65 74 75 72 6e 3b 0a 20 20 20  vdbe_return;.   
1b4f0 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 64       }.        d
1b500 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 3d 20  b->autoCommit = 
1b510 31 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 73  1;.        if( s
1b520 71 6c 69 74 65 33 56 64 62 65 48 61 6c 74 28 70  qlite3VdbeHalt(p
1b530 29 3d 3d 53 51 4c 49 54 45 5f 42 55 53 59 20 29  )==SQLITE_BUSY )
1b540 7b 0a 20 20 20 20 20 20 20 20 20 20 70 2d 3e 70  {.          p->p
1b550 63 20 3d 20 28 69 6e 74 29 28 70 4f 70 20 2d 20  c = (int)(pOp - 
1b560 61 4f 70 29 3b 0a 20 20 20 20 20 20 20 20 20 20  aOp);.          
1b570 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 3d  db->autoCommit =
1b580 20 30 3b 0a 20 20 20 20 20 20 20 20 20 20 70 2d   0;.          p-
1b590 3e 72 63 20 3d 20 72 63 20 3d 20 53 51 4c 49 54  >rc = rc = SQLIT
1b5a0 45 5f 42 55 53 59 3b 0a 20 20 20 20 20 20 20 20  E_BUSY;.        
1b5b0 20 20 67 6f 74 6f 20 76 64 62 65 5f 72 65 74 75    goto vdbe_retu
1b5c0 72 6e 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20  rn;.        }.  
1b5d0 20 20 20 20 20 20 64 62 2d 3e 69 73 54 72 61 6e        db->isTran
1b5e0 73 61 63 74 69 6f 6e 53 61 76 65 70 6f 69 6e 74  sactionSavepoint
1b5f0 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 72 63   = 0;.        rc
1b600 20 3d 20 70 2d 3e 72 63 3b 0a 20 20 20 20 20 20   = p->rc;.      
1b610 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 69  }else{.        i
1b620 6e 74 20 69 73 53 63 68 65 6d 61 43 68 61 6e 67  nt isSchemaChang
1b630 65 3b 0a 20 20 20 20 20 20 20 20 69 53 61 76 65  e;.        iSave
1b640 70 6f 69 6e 74 20 3d 20 64 62 2d 3e 6e 53 61 76  point = db->nSav
1b650 65 70 6f 69 6e 74 20 2d 20 69 53 61 76 65 70 6f  epoint - iSavepo
1b660 69 6e 74 20 2d 20 31 3b 0a 20 20 20 20 20 20 20  int - 1;.       
1b670 20 69 66 28 20 70 31 3d 3d 53 41 56 45 50 4f 49   if( p1==SAVEPOI
1b680 4e 54 5f 52 4f 4c 4c 42 41 43 4b 20 29 7b 0a 20  NT_ROLLBACK ){. 
1b690 20 20 20 20 20 20 20 20 20 69 73 53 63 68 65 6d           isSchem
1b6a0 61 43 68 61 6e 67 65 20 3d 20 28 64 62 2d 3e 6d  aChange = (db->m
1b6b0 44 62 46 6c 61 67 73 20 26 20 44 42 46 4c 41 47  DbFlags & DBFLAG
1b6c0 5f 53 63 68 65 6d 61 43 68 61 6e 67 65 29 21 3d  _SchemaChange)!=
1b6d0 30 3b 0a 20 20 20 20 20 20 20 20 20 20 66 6f 72  0;.          for
1b6e0 28 69 69 3d 30 3b 20 69 69 3c 64 62 2d 3e 6e 44  (ii=0; ii<db->nD
1b6f0 62 3b 20 69 69 2b 2b 29 7b 0a 20 20 20 20 20 20  b; ii++){.      
1b700 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74        rc = sqlit
1b710 65 33 42 74 72 65 65 54 72 69 70 41 6c 6c 43 75  e3BtreeTripAllCu
1b720 72 73 6f 72 73 28 64 62 2d 3e 61 44 62 5b 69 69  rsors(db->aDb[ii
1b730 5d 2e 70 42 74 2c 0a 20 20 20 20 20 20 20 20 20  ].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 53 51                SQ
1b760 4c 49 54 45 5f 41 42 4f 52 54 5f 52 4f 4c 4c 42  LITE_ABORT_ROLLB
1b770 41 43 4b 2c 0a 20 20 20 20 20 20 20 20 20 20 20  ACK,.           
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 69 73 53 63              isSc
1b7a0 68 65 6d 61 43 68 61 6e 67 65 3d 3d 30 29 3b 0a  hemaChange==0);.
1b7b0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 28 20              if( 
1b7c0 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 20  rc!=SQLITE_OK ) 
1b7d0 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
1b7e0 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 20  o_error;.       
1b7f0 20 20 20 7d 0a 20 20 20 20 20 20 20 20 7d 65 6c     }.        }el
1b800 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20 61 73  se{.          as
1b810 73 65 72 74 28 20 70 31 3d 3d 53 41 56 45 50 4f  sert( p1==SAVEPO
1b820 49 4e 54 5f 52 45 4c 45 41 53 45 20 29 3b 0a 20  INT_RELEASE );. 
1b830 20 20 20 20 20 20 20 20 20 69 73 53 63 68 65 6d           isSchem
1b840 61 43 68 61 6e 67 65 20 3d 20 30 3b 0a 20 20 20  aChange = 0;.   
1b850 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 66       }.        f
1b860 6f 72 28 69 69 3d 30 3b 20 69 69 3c 64 62 2d 3e  or(ii=0; ii<db->
1b870 6e 44 62 3b 20 69 69 2b 2b 29 7b 0a 20 20 20 20  nDb; ii++){.    
1b880 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74        rc = sqlit
1b890 65 33 42 74 72 65 65 53 61 76 65 70 6f 69 6e 74  e3BtreeSavepoint
1b8a0 28 64 62 2d 3e 61 44 62 5b 69 69 5d 2e 70 42 74  (db->aDb[ii].pBt
1b8b0 2c 20 70 31 2c 20 69 53 61 76 65 70 6f 69 6e 74  , p1, iSavepoint
1b8c0 29 3b 0a 20 20 20 20 20 20 20 20 20 20 69 66 28  );.          if(
1b8d0 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc!=SQLITE_OK )
1b8e0 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 67 6f  {.            go
1b8f0 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
1b900 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 20 20 20  error;.         
1b910 20 7d 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20   }.        }.   
1b920 20 20 20 20 20 69 66 28 20 69 73 53 63 68 65 6d       if( isSchem
1b930 61 43 68 61 6e 67 65 20 29 7b 0a 20 20 20 20 20  aChange ){.     
1b940 20 20 20 20 20 73 71 6c 69 74 65 33 45 78 70 69       sqlite3Expi
1b950 72 65 50 72 65 70 61 72 65 64 53 74 61 74 65 6d  rePreparedStatem
1b960 65 6e 74 73 28 64 62 2c 20 30 29 3b 0a 20 20 20  ents(db, 0);.   
1b970 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 52 65         sqlite3Re
1b980 73 65 74 41 6c 6c 53 63 68 65 6d 61 73 4f 66 43  setAllSchemasOfC
1b990 6f 6e 6e 65 63 74 69 6f 6e 28 64 62 29 3b 0a 20  onnection(db);. 
1b9a0 20 20 20 20 20 20 20 20 20 64 62 2d 3e 6d 44 62           db->mDb
1b9b0 46 6c 61 67 73 20 7c 3d 20 44 42 46 4c 41 47 5f  Flags |= DBFLAG_
1b9c0 53 63 68 65 6d 61 43 68 61 6e 67 65 3b 0a 20 20  SchemaChange;.  
1b9d0 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a        }.      }.
1b9e0 20 20 0a 20 20 20 20 20 20 2f 2a 20 52 65 67 61    .      /* Rega
1b9f0 72 64 6c 65 73 73 20 6f 66 20 77 68 65 74 68 65  rdless of whethe
1ba00 72 20 74 68 69 73 20 69 73 20 61 20 52 45 4c 45  r this is a RELE
1ba10 41 53 45 20 6f 72 20 52 4f 4c 4c 42 41 43 4b 2c  ASE or ROLLBACK,
1ba20 20 64 65 73 74 72 6f 79 20 61 6c 6c 20 0a 20 20   destroy all .  
1ba30 20 20 20 20 2a 2a 20 73 61 76 65 70 6f 69 6e 74      ** savepoint
1ba40 73 20 6e 65 73 74 65 64 20 69 6e 73 69 64 65 20  s nested inside 
1ba50 6f 66 20 74 68 65 20 73 61 76 65 70 6f 69 6e 74  of the savepoint
1ba60 20 62 65 69 6e 67 20 6f 70 65 72 61 74 65 64 20   being operated 
1ba70 6f 6e 2e 20 2a 2f 0a 20 20 20 20 20 20 77 68 69  on. */.      whi
1ba80 6c 65 28 20 64 62 2d 3e 70 53 61 76 65 70 6f 69  le( db->pSavepoi
1ba90 6e 74 21 3d 70 53 61 76 65 70 6f 69 6e 74 20 29  nt!=pSavepoint )
1baa0 7b 0a 20 20 20 20 20 20 20 20 70 54 6d 70 20 3d  {.        pTmp =
1bab0 20 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74 3b   db->pSavepoint;
1bac0 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 70 53 61  .        db->pSa
1bad0 76 65 70 6f 69 6e 74 20 3d 20 70 54 6d 70 2d 3e  vepoint = pTmp->
1bae0 70 4e 65 78 74 3b 0a 20 20 20 20 20 20 20 20 73  pNext;.        s
1baf0 71 6c 69 74 65 33 44 62 46 72 65 65 28 64 62 2c  qlite3DbFree(db,
1bb00 20 70 54 6d 70 29 3b 0a 20 20 20 20 20 20 20 20   pTmp);.        
1bb10 64 62 2d 3e 6e 53 61 76 65 70 6f 69 6e 74 2d 2d  db->nSavepoint--
1bb20 3b 0a 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20  ;.      }..     
1bb30 20 2f 2a 20 49 66 20 69 74 20 69 73 20 61 20 52   /* If it is a R
1bb40 45 4c 45 41 53 45 2c 20 74 68 65 6e 20 64 65 73  ELEASE, then des
1bb50 74 72 6f 79 20 74 68 65 20 73 61 76 65 70 6f 69  troy the savepoi
1bb60 6e 74 20 62 65 69 6e 67 20 6f 70 65 72 61 74 65  nt being operate
1bb70 64 20 6f 6e 20 0a 20 20 20 20 20 20 2a 2a 20 74  d on .      ** t
1bb80 6f 6f 2e 20 49 66 20 69 74 20 69 73 20 61 20 52  oo. If it is a R
1bb90 4f 4c 4c 42 41 43 4b 20 54 4f 2c 20 74 68 65 6e  OLLBACK TO, then
1bba0 20 73 65 74 20 74 68 65 20 6e 75 6d 62 65 72 20   set the number 
1bbb0 6f 66 20 64 65 66 65 72 72 65 64 20 0a 20 20 20  of deferred .   
1bbc0 20 20 20 2a 2a 20 63 6f 6e 73 74 72 61 69 6e 74     ** constraint
1bbd0 20 76 69 6f 6c 61 74 69 6f 6e 73 20 70 72 65 73   violations pres
1bbe0 65 6e 74 20 69 6e 20 74 68 65 20 64 61 74 61 62  ent in the datab
1bbf0 61 73 65 20 74 6f 20 74 68 65 20 76 61 6c 75 65  ase to the value
1bc00 20 73 74 6f 72 65 64 0a 20 20 20 20 20 20 2a 2a   stored.      **
1bc10 20 77 68 65 6e 20 74 68 65 20 73 61 76 65 70 6f   when the savepo
1bc20 69 6e 74 20 77 61 73 20 63 72 65 61 74 65 64 2e  int was created.
1bc30 20 20 2a 2f 0a 20 20 20 20 20 20 69 66 28 20 70    */.      if( p
1bc40 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 52 45 4c  1==SAVEPOINT_REL
1bc50 45 41 53 45 20 29 7b 0a 20 20 20 20 20 20 20 20  EASE ){.        
1bc60 61 73 73 65 72 74 28 20 70 53 61 76 65 70 6f 69  assert( pSavepoi
1bc70 6e 74 3d 3d 64 62 2d 3e 70 53 61 76 65 70 6f 69  nt==db->pSavepoi
1bc80 6e 74 20 29 3b 0a 20 20 20 20 20 20 20 20 64 62  nt );.        db
1bc90 2d 3e 70 53 61 76 65 70 6f 69 6e 74 20 3d 20 70  ->pSavepoint = p
1bca0 53 61 76 65 70 6f 69 6e 74 2d 3e 70 4e 65 78 74  Savepoint->pNext
1bcb0 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  ;.        sqlite
1bcc0 33 44 62 46 72 65 65 28 64 62 2c 20 70 53 61 76  3DbFree(db, pSav
1bcd0 65 70 6f 69 6e 74 29 3b 0a 20 20 20 20 20 20 20  epoint);.       
1bce0 20 69 66 28 20 21 69 73 54 72 61 6e 73 61 63 74   if( !isTransact
1bcf0 69 6f 6e 20 29 7b 0a 20 20 20 20 20 20 20 20 20  ion ){.         
1bd00 20 64 62 2d 3e 6e 53 61 76 65 70 6f 69 6e 74 2d   db->nSavepoint-
1bd10 2d 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20  -;.        }.   
1bd20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
1bd30 20 20 61 73 73 65 72 74 28 20 70 31 3d 3d 53 41    assert( p1==SA
1bd40 56 45 50 4f 49 4e 54 5f 52 4f 4c 4c 42 41 43 4b  VEPOINT_ROLLBACK
1bd50 20 29 3b 0a 20 20 20 20 20 20 20 20 64 62 2d 3e   );.        db->
1bd60 6e 44 65 66 65 72 72 65 64 43 6f 6e 73 20 3d 20  nDeferredCons = 
1bd70 70 53 61 76 65 70 6f 69 6e 74 2d 3e 6e 44 65 66  pSavepoint->nDef
1bd80 65 72 72 65 64 43 6f 6e 73 3b 0a 20 20 20 20 20  erredCons;.     
1bd90 20 20 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64     db->nDeferred
1bda0 49 6d 6d 43 6f 6e 73 20 3d 20 70 53 61 76 65 70  ImmCons = pSavep
1bdb0 6f 69 6e 74 2d 3e 6e 44 65 66 65 72 72 65 64 49  oint->nDeferredI
1bdc0 6d 6d 43 6f 6e 73 3b 0a 20 20 20 20 20 20 7d 0a  mmCons;.      }.
1bdd0 0a 20 20 20 20 20 20 69 66 28 20 21 69 73 54 72  .      if( !isTr
1bde0 61 6e 73 61 63 74 69 6f 6e 20 7c 7c 20 70 31 3d  ansaction || p1=
1bdf0 3d 53 41 56 45 50 4f 49 4e 54 5f 52 4f 4c 4c 42  =SAVEPOINT_ROLLB
1be00 41 43 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 72  ACK ){.        r
1be10 63 20 3d 20 73 71 6c 69 74 65 33 56 74 61 62 53  c = sqlite3VtabS
1be20 61 76 65 70 6f 69 6e 74 28 64 62 2c 20 70 31 2c  avepoint(db, p1,
1be30 20 69 53 61 76 65 70 6f 69 6e 74 29 3b 0a 20 20   iSavepoint);.  
1be40 20 20 20 20 20 20 69 66 28 20 72 63 21 3d 53 51        if( rc!=SQ
1be50 4c 49 54 45 5f 4f 4b 20 29 20 67 6f 74 6f 20 61  LITE_OK ) goto a
1be60 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
1be70 72 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  r;.      }.    }
1be80 0a 20 20 7d 0a 20 20 69 66 28 20 72 63 20 29 20  .  }.  if( rc ) 
1be90 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
1bea0 6f 5f 65 72 72 6f 72 3b 0a 0a 20 20 62 72 65 61  o_error;..  brea
1beb0 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
1bec0 20 41 75 74 6f 43 6f 6d 6d 69 74 20 50 31 20 50   AutoCommit P1 P
1bed0 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 53  2 P3 * *.**.** S
1bee0 65 74 20 74 68 65 20 64 61 74 61 62 61 73 65 20  et the database 
1bef0 61 75 74 6f 2d 63 6f 6d 6d 69 74 20 66 6c 61 67  auto-commit flag
1bf00 20 74 6f 20 50 31 20 28 31 20 6f 72 20 30 29 2e   to P1 (1 or 0).
1bf10 20 49 66 20 50 32 20 69 73 20 74 72 75 65 2c 20   If P2 is true, 
1bf20 72 6f 6c 6c 0a 2a 2a 20 62 61 63 6b 20 61 6e 79  roll.** back any
1bf30 20 63 75 72 72 65 6e 74 6c 79 20 61 63 74 69 76   currently activ
1bf40 65 20 62 74 72 65 65 20 74 72 61 6e 73 61 63 74  e btree transact
1bf50 69 6f 6e 73 2e 20 49 66 20 74 68 65 72 65 20 61  ions. If there a
1bf60 72 65 20 61 6e 79 20 61 63 74 69 76 65 0a 2a 2a  re any active.**
1bf70 20 56 4d 73 20 28 61 70 61 72 74 20 66 72 6f 6d   VMs (apart from
1bf80 20 74 68 69 73 20 6f 6e 65 29 2c 20 74 68 65 6e   this one), then
1bf90 20 61 20 52 4f 4c 4c 42 41 43 4b 20 66 61 69 6c   a ROLLBACK fail
1bfa0 73 2e 20 20 41 20 43 4f 4d 4d 49 54 20 66 61 69  s.  A COMMIT fai
1bfb0 6c 73 20 69 66 0a 2a 2a 20 74 68 65 72 65 20 61  ls if.** there a
1bfc0 72 65 20 61 63 74 69 76 65 20 77 72 69 74 69 6e  re active writin
1bfd0 67 20 56 4d 73 20 6f 72 20 61 63 74 69 76 65 20  g VMs or active 
1bfe0 56 4d 73 20 74 68 61 74 20 75 73 65 20 73 68 61  VMs that use sha
1bff0 72 65 64 20 63 61 63 68 65 2e 0a 2a 2a 0a 2a 2a  red cache..**.**
1c000 20 49 66 20 50 33 20 69 73 20 6e 6f 6e 2d 7a 65   If P3 is non-ze
1c010 72 6f 2c 20 74 68 65 6e 20 74 68 69 73 20 69 6e  ro, then this in
1c020 73 74 72 75 63 74 69 6f 6e 20 69 73 20 62 65 69  struction is bei
1c030 6e 67 20 65 78 65 63 75 74 65 64 20 61 73 20 70  ng executed as p
1c040 61 72 74 20 6f 66 0a 2a 2a 20 61 20 22 42 45 47  art of.** a "BEG
1c050 49 4e 20 43 4f 4e 43 55 52 52 45 4e 54 22 20 63  IN CONCURRENT" c
1c060 6f 6d 6d 61 6e 64 2e 0a 2a 2a 0a 2a 2a 20 54 68  ommand..**.** Th
1c070 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 63  is instruction c
1c080 61 75 73 65 73 20 74 68 65 20 56 4d 20 74 6f 20  auses the VM to 
1c090 68 61 6c 74 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  halt..*/.case OP
1c0a0 5f 41 75 74 6f 43 6f 6d 6d 69 74 3a 20 7b 0a 20  _AutoCommit: {. 
1c0b0 20 69 6e 74 20 64 65 73 69 72 65 64 41 75 74 6f   int desiredAuto
1c0c0 43 6f 6d 6d 69 74 3b 0a 20 20 69 6e 74 20 69 52  Commit;.  int iR
1c0d0 6f 6c 6c 62 61 63 6b 3b 0a 20 20 69 6e 74 20 62  ollback;.  int b
1c0e0 43 6f 6e 63 75 72 72 65 6e 74 3b 0a 20 20 69 6e  Concurrent;.  in
1c0f0 74 20 68 72 63 3b 0a 0a 20 20 64 65 73 69 72 65  t hrc;..  desire
1c100 64 41 75 74 6f 43 6f 6d 6d 69 74 20 3d 20 70 4f  dAutoCommit = pO
1c110 70 2d 3e 70 31 3b 0a 20 20 69 52 6f 6c 6c 62 61  p->p1;.  iRollba
1c120 63 6b 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20  ck = pOp->p2;.  
1c130 62 43 6f 6e 63 75 72 72 65 6e 74 20 3d 20 70 4f  bConcurrent = pO
1c140 70 2d 3e 70 33 3b 0a 20 20 61 73 73 65 72 74 28  p->p3;.  assert(
1c150 20 64 65 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d   desiredAutoComm
1c160 69 74 3d 3d 31 20 7c 7c 20 64 65 73 69 72 65 64  it==1 || desired
1c170 41 75 74 6f 43 6f 6d 6d 69 74 3d 3d 30 20 29 3b  AutoCommit==0 );
1c180 0a 20 20 61 73 73 65 72 74 28 20 64 65 73 69 72  .  assert( desir
1c190 65 64 41 75 74 6f 43 6f 6d 6d 69 74 3d 3d 31 20  edAutoCommit==1 
1c1a0 7c 7c 20 69 52 6f 6c 6c 62 61 63 6b 3d 3d 30 20  || iRollback==0 
1c1b0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 64 65 73  );.  assert( des
1c1c0 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74 3d 3d  iredAutoCommit==
1c1d0 30 20 7c 7c 20 62 43 6f 6e 63 75 72 72 65 6e 74  0 || bConcurrent
1c1e0 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  ==0 );.  assert(
1c1f0 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 3d   db->autoCommit=
1c200 3d 30 20 7c 7c 20 64 62 2d 3e 62 43 6f 6e 63 75  =0 || db->bConcu
1c210 72 72 65 6e 74 3d 3d 30 20 29 3b 0a 20 20 61 73  rrent==0 );.  as
1c220 73 65 72 74 28 20 64 62 2d 3e 6e 56 64 62 65 41  sert( db->nVdbeA
1c230 63 74 69 76 65 3e 30 20 29 3b 20 20 2f 2a 20 41  ctive>0 );  /* A
1c240 74 20 6c 65 61 73 74 20 74 68 69 73 20 6f 6e 65  t least this one
1c250 20 56 4d 20 69 73 20 61 63 74 69 76 65 20 2a 2f   VM is active */
1c260 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 62 49  .  assert( p->bI
1c270 73 52 65 61 64 65 72 20 29 3b 0a 0a 20 20 69 66  sReader );..  if
1c280 28 20 64 65 73 69 72 65 64 41 75 74 6f 43 6f 6d  ( desiredAutoCom
1c290 6d 69 74 21 3d 64 62 2d 3e 61 75 74 6f 43 6f 6d  mit!=db->autoCom
1c2a0 6d 69 74 20 29 7b 0a 20 20 20 20 69 66 28 20 69  mit ){.    if( i
1c2b0 52 6f 6c 6c 62 61 63 6b 20 29 7b 0a 20 20 20 20  Rollback ){.    
1c2c0 20 20 61 73 73 65 72 74 28 20 64 65 73 69 72 65    assert( desire
1c2d0 64 41 75 74 6f 43 6f 6d 6d 69 74 3d 3d 31 20 29  dAutoCommit==1 )
1c2e0 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 52  ;.      sqlite3R
1c2f0 6f 6c 6c 62 61 63 6b 41 6c 6c 28 64 62 2c 20 53  ollbackAll(db, S
1c300 51 4c 49 54 45 5f 41 42 4f 52 54 5f 52 4f 4c 4c  QLITE_ABORT_ROLL
1c310 42 41 43 4b 29 3b 0a 20 20 20 20 20 20 64 62 2d  BACK);.      db-
1c320 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 3d 20 31 3b  >autoCommit = 1;
1c330 0a 20 20 20 20 20 20 64 62 2d 3e 62 43 6f 6e 63  .      db->bConc
1c340 75 72 72 65 6e 74 20 3d 20 30 3b 0a 20 20 20 20  urrent = 0;.    
1c350 7d 65 6c 73 65 20 69 66 28 20 64 65 73 69 72 65  }else if( desire
1c360 64 41 75 74 6f 43 6f 6d 6d 69 74 0a 20 20 20 20  dAutoCommit.    
1c370 20 20 20 20 20 20 20 20 26 26 20 28 64 62 2d 3e          && (db->
1c380 6e 56 64 62 65 57 72 69 74 65 3e 30 20 7c 7c 20  nVdbeWrite>0 || 
1c390 28 64 62 2d 3e 62 43 6f 6e 63 75 72 72 65 6e 74  (db->bConcurrent
1c3a0 20 26 26 20 64 62 2d 3e 6e 56 64 62 65 41 63 74   && db->nVdbeAct
1c3b0 69 76 65 3e 31 29 29 20 29 7b 0a 20 20 20 20 20  ive>1)) ){.     
1c3c0 20 2f 2a 20 41 20 74 72 61 6e 73 61 63 74 69 6f   /* A transactio
1c3d0 6e 20 6d 61 79 20 6f 6e 6c 79 20 62 65 20 63 6f  n may only be co
1c3e0 6d 6d 69 74 74 65 64 20 69 66 20 74 68 65 72 65  mmitted if there
1c3f0 20 61 72 65 20 6e 6f 20 6f 74 68 65 72 20 61 63   are no other ac
1c400 74 69 76 65 0a 20 20 20 20 20 20 2a 2a 20 77 72  tive.      ** wr
1c410 69 74 65 72 20 56 4d 73 2e 20 49 66 20 74 68 65  iter VMs. If the
1c420 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20   transaction is 
1c430 43 4f 4e 43 55 52 52 45 4e 54 2c 20 74 68 65 6e  CONCURRENT, then
1c440 20 69 74 20 6d 61 79 20 6f 6e 6c 79 20 62 65 0a   it may only be.
1c450 20 20 20 20 20 20 2a 2a 20 63 6f 6d 6d 69 74 74        ** committ
1c460 65 64 20 69 66 20 74 68 65 72 65 20 61 72 65 20  ed if there are 
1c470 6e 6f 20 61 63 74 69 76 65 20 56 4d 73 20 61 74  no active VMs at
1c480 20 61 6c 6c 20 28 72 65 61 64 65 72 73 20 6f 72   all (readers or
1c490 20 77 72 69 74 65 72 73 29 2e 0a 20 20 20 20 20   writers)..     
1c4a0 20 2a 2a 0a 20 20 20 20 20 20 2a 2a 20 49 66 20   **.      ** If 
1c4b0 74 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e  this instruction
1c4c0 20 69 73 20 61 20 43 4f 4d 4d 49 54 20 61 6e 64   is a COMMIT and
1c4d0 20 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e   the transaction
1c4e0 20 6d 61 79 20 6e 6f 74 20 62 65 0a 20 20 20 20   may not be.    
1c4f0 20 20 2a 2a 20 63 6f 6d 6d 69 74 74 65 64 20 64    ** committed d
1c500 75 65 20 74 6f 20 6f 6e 65 20 6f 66 20 74 68 65  ue to one of the
1c510 20 63 6f 6e 64 69 74 69 6f 6e 73 20 61 62 6f 76   conditions abov
1c520 65 2c 20 72 65 74 75 72 6e 20 61 6e 20 65 72 72  e, return an err
1c530 6f 72 0a 20 20 20 20 20 20 2a 2a 20 69 6e 64 69  or.      ** indi
1c540 63 61 74 69 6e 67 20 74 68 61 74 20 6f 74 68 65  cating that othe
1c550 72 20 56 4d 73 20 6d 75 73 74 20 63 6f 6d 70 6c  r VMs must compl
1c560 65 74 65 20 62 65 66 6f 72 65 20 74 68 65 20 43  ete before the C
1c570 4f 4d 4d 49 54 20 63 61 6e 20 0a 20 20 20 20 20  OMMIT can .     
1c580 20 2a 2a 20 62 65 20 70 72 6f 63 65 73 73 65 64   ** be processed
1c590 2e 20 20 2a 2f 0a 20 20 20 20 20 20 73 71 6c 69  .  */.      sqli
1c5a0 74 65 33 56 64 62 65 45 72 72 6f 72 28 70 2c 20  te3VdbeError(p, 
1c5b0 22 63 61 6e 6e 6f 74 20 63 6f 6d 6d 69 74 20 74  "cannot commit t
1c5c0 72 61 6e 73 61 63 74 69 6f 6e 20 2d 20 22 0a 20  ransaction - ". 
1c5d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c5e0 20 20 20 20 20 20 20 20 20 22 53 51 4c 20 73 74           "SQL st
1c5f0 61 74 65 6d 65 6e 74 73 20 69 6e 20 70 72 6f 67  atements in prog
1c600 72 65 73 73 22 29 3b 0a 20 20 20 20 20 20 72 63  ress");.      rc
1c610 20 3d 20 53 51 4c 49 54 45 5f 42 55 53 59 3b 0a   = SQLITE_BUSY;.
1c620 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74        goto abort
1c630 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20  _due_to_error;. 
1c640 20 20 20 7d 65 6c 73 65 20 69 66 28 20 28 72 63     }else if( (rc
1c650 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 43 68   = sqlite3VdbeCh
1c660 65 63 6b 46 6b 28 70 2c 20 31 29 29 21 3d 53 51  eckFk(p, 1))!=SQ
1c670 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20  LITE_OK ){.     
1c680 20 67 6f 74 6f 20 76 64 62 65 5f 72 65 74 75 72   goto vdbe_retur
1c690 6e 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  n;.    }else{.  
1c6a0 20 20 20 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d      db->autoComm
1c6b0 69 74 20 3d 20 28 75 38 29 64 65 73 69 72 65 64  it = (u8)desired
1c6c0 41 75 74 6f 43 6f 6d 6d 69 74 3b 0a 20 20 20 20  AutoCommit;.    
1c6d0 7d 0a 20 20 20 20 68 72 63 20 3d 20 73 71 6c 69  }.    hrc = sqli
1c6e0 74 65 33 56 64 62 65 48 61 6c 74 28 70 29 3b 0a  te3VdbeHalt(p);.
1c6f0 20 20 20 20 69 66 28 20 28 68 72 63 20 26 20 30      if( (hrc & 0
1c700 78 46 46 29 3d 3d 53 51 4c 49 54 45 5f 42 55 53  xFF)==SQLITE_BUS
1c710 59 20 29 7b 0a 20 20 20 20 20 20 70 2d 3e 70 63  Y ){.      p->pc
1c720 20 3d 20 28 69 6e 74 29 28 70 4f 70 20 2d 20 61   = (int)(pOp - a
1c730 4f 70 29 3b 0a 20 20 20 20 20 20 64 62 2d 3e 61  Op);.      db->a
1c740 75 74 6f 43 6f 6d 6d 69 74 20 3d 20 28 75 38 29  utoCommit = (u8)
1c750 28 31 2d 64 65 73 69 72 65 64 41 75 74 6f 43 6f  (1-desiredAutoCo
1c760 6d 6d 69 74 29 3b 0a 20 20 20 20 20 20 70 2d 3e  mmit);.      p->
1c770 72 63 20 3d 20 68 72 63 3b 0a 20 20 20 20 20 20  rc = hrc;.      
1c780 72 63 20 3d 20 53 51 4c 49 54 45 5f 42 55 53 59  rc = SQLITE_BUSY
1c790 3b 0a 20 20 20 20 20 20 67 6f 74 6f 20 76 64 62  ;.      goto vdb
1c7a0 65 5f 72 65 74 75 72 6e 3b 0a 20 20 20 20 7d 0a  e_return;.    }.
1c7b0 20 20 20 20 64 62 2d 3e 62 43 6f 6e 63 75 72 72      db->bConcurr
1c7c0 65 6e 74 20 3d 20 28 75 38 29 62 43 6f 6e 63 75  ent = (u8)bConcu
1c7d0 72 72 65 6e 74 3b 0a 20 20 20 20 61 73 73 65 72  rrent;.    asser
1c7e0 74 28 20 64 62 2d 3e 6e 53 74 61 74 65 6d 65 6e  t( db->nStatemen
1c7f0 74 3d 3d 30 20 29 3b 0a 20 20 20 20 73 71 6c 69  t==0 );.    sqli
1c800 74 65 33 43 6c 6f 73 65 53 61 76 65 70 6f 69 6e  te3CloseSavepoin
1c810 74 73 28 64 62 29 3b 0a 20 20 20 20 69 66 28 20  ts(db);.    if( 
1c820 70 2d 3e 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  p->rc==SQLITE_OK
1c830 20 29 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 53   ){.      rc = S
1c840 51 4c 49 54 45 5f 44 4f 4e 45 3b 0a 20 20 20 20  QLITE_DONE;.    
1c850 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 72 63 20  }else{.      rc 
1c860 3d 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 3b 0a  = SQLITE_ERROR;.
1c870 20 20 20 20 7d 0a 20 20 20 20 67 6f 74 6f 20 76      }.    goto v
1c880 64 62 65 5f 72 65 74 75 72 6e 3b 0a 20 20 7d 65  dbe_return;.  }e
1c890 6c 73 65 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  lse{.    sqlite3
1c8a0 56 64 62 65 45 72 72 6f 72 28 70 2c 0a 20 20 20  VdbeError(p,.   
1c8b0 20 20 20 20 20 28 21 64 65 73 69 72 65 64 41 75       (!desiredAu
1c8c0 74 6f 43 6f 6d 6d 69 74 29 3f 22 63 61 6e 6e 6f  toCommit)?"canno
1c8d0 74 20 73 74 61 72 74 20 61 20 74 72 61 6e 73 61  t start a transa
1c8e0 63 74 69 6f 6e 20 77 69 74 68 69 6e 20 61 20 74  ction within a t
1c8f0 72 61 6e 73 61 63 74 69 6f 6e 22 3a 28 0a 20 20  ransaction":(.  
1c900 20 20 20 20 20 20 28 69 52 6f 6c 6c 62 61 63 6b        (iRollback
1c910 29 3f 22 63 61 6e 6e 6f 74 20 72 6f 6c 6c 62 61  )?"cannot rollba
1c920 63 6b 20 2d 20 6e 6f 20 74 72 61 6e 73 61 63 74  ck - no transact
1c930 69 6f 6e 20 69 73 20 61 63 74 69 76 65 22 3a 0a  ion is active":.
1c940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c950 20 20 20 22 63 61 6e 6e 6f 74 20 63 6f 6d 6d 69     "cannot commi
1c960 74 20 2d 20 6e 6f 20 74 72 61 6e 73 61 63 74 69  t - no transacti
1c970 6f 6e 20 69 73 20 61 63 74 69 76 65 22 29 29 3b  on is active"));
1c980 0a 20 20 20 20 20 20 20 20 20 0a 20 20 20 20 72  .         .    r
1c990 63 20 3d 20 53 51 4c 49 54 45 5f 45 52 52 4f 52  c = SQLITE_ERROR
1c9a0 3b 0a 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74  ;.    goto abort
1c9b0 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20  _due_to_error;. 
1c9c0 20 7d 0a 20 20 2f 2a 4e 4f 54 52 45 41 43 48 45   }.  /*NOTREACHE
1c9d0 44 2a 2f 20 61 73 73 65 72 74 28 30 29 3b 0a 7d  D*/ assert(0);.}
1c9e0 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 54 72 61  ../* Opcode: Tra
1c9f0 6e 73 61 63 74 69 6f 6e 20 50 31 20 50 32 20 50  nsaction P1 P2 P
1ca00 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 42 65  3 P4 P5.**.** Be
1ca10 67 69 6e 20 61 20 74 72 61 6e 73 61 63 74 69 6f  gin a transactio
1ca20 6e 20 6f 6e 20 64 61 74 61 62 61 73 65 20 50 31  n on database P1
1ca30 20 69 66 20 61 20 74 72 61 6e 73 61 63 74 69 6f   if a transactio
1ca40 6e 20 69 73 20 6e 6f 74 20 61 6c 72 65 61 64 79  n is not already
1ca50 0a 2a 2a 20 61 63 74 69 76 65 2e 0a 2a 2a 20 49  .** active..** I
1ca60 66 20 50 32 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f  f P2 is non-zero
1ca70 2c 20 74 68 65 6e 20 61 20 77 72 69 74 65 2d 74  , then a write-t
1ca80 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 73 74  ransaction is st
1ca90 61 72 74 65 64 2c 20 6f 72 20 69 66 20 61 20 0a  arted, or if a .
1caa0 2a 2a 20 72 65 61 64 2d 74 72 61 6e 73 61 63 74  ** read-transact
1cab0 69 6f 6e 20 69 73 20 61 6c 72 65 61 64 79 20 61  ion is already a
1cac0 63 74 69 76 65 2c 20 69 74 20 69 73 20 75 70 67  ctive, it is upg
1cad0 72 61 64 65 64 20 74 6f 20 61 20 77 72 69 74 65  raded to a write
1cae0 2d 74 72 61 6e 73 61 63 74 69 6f 6e 2e 0a 2a 2a  -transaction..**
1caf0 20 49 66 20 50 32 20 69 73 20 7a 65 72 6f 2c 20   If P2 is zero, 
1cb00 74 68 65 6e 20 61 20 72 65 61 64 2d 74 72 61 6e  then a read-tran
1cb10 73 61 63 74 69 6f 6e 20 69 73 20 73 74 61 72 74  saction is start
1cb20 65 64 2e 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20  ed..**.** P1 is 
1cb30 74 68 65 20 69 6e 64 65 78 20 6f 66 20 74 68 65  the index of the
1cb40 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 6f   database file o
1cb50 6e 20 77 68 69 63 68 20 74 68 65 20 74 72 61 6e  n which the tran
1cb60 73 61 63 74 69 6f 6e 20 69 73 0a 2a 2a 20 73 74  saction is.** st
1cb70 61 72 74 65 64 2e 20 20 49 6e 64 65 78 20 30 20  arted.  Index 0 
1cb80 69 73 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61  is the main data
1cb90 62 61 73 65 20 66 69 6c 65 20 61 6e 64 20 69 6e  base file and in
1cba0 64 65 78 20 31 20 69 73 20 74 68 65 0a 2a 2a 20  dex 1 is the.** 
1cbb0 66 69 6c 65 20 75 73 65 64 20 66 6f 72 20 74 65  file used for te
1cbc0 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 73 2e 20  mporary tables. 
1cbd0 20 49 6e 64 69 63 65 73 20 6f 66 20 32 20 6f 72   Indices of 2 or
1cbe0 20 6d 6f 72 65 20 61 72 65 20 75 73 65 64 20 66   more are used f
1cbf0 6f 72 0a 2a 2a 20 61 74 74 61 63 68 65 64 20 64  or.** attached d
1cc00 61 74 61 62 61 73 65 73 2e 0a 2a 2a 0a 2a 2a 20  atabases..**.** 
1cc10 49 66 20 61 20 77 72 69 74 65 2d 74 72 61 6e 73  If a write-trans
1cc20 61 63 74 69 6f 6e 20 69 73 20 73 74 61 72 74 65  action is starte
1cc30 64 20 61 6e 64 20 74 68 65 20 56 64 62 65 2e 75  d and the Vdbe.u
1cc40 73 65 73 53 74 6d 74 4a 6f 75 72 6e 61 6c 20 66  sesStmtJournal f
1cc50 6c 61 67 20 69 73 0a 2a 2a 20 74 72 75 65 20 28  lag is.** true (
1cc60 74 68 69 73 20 66 6c 61 67 20 69 73 20 73 65 74  this flag is set
1cc70 20 69 66 20 74 68 65 20 56 64 62 65 20 6d 61 79   if the Vdbe may
1cc80 20 6d 6f 64 69 66 79 20 6d 6f 72 65 20 74 68 61   modify more tha
1cc90 6e 20 6f 6e 65 20 72 6f 77 20 61 6e 64 20 6d 61  n one row and ma
1cca0 79 0a 2a 2a 20 74 68 72 6f 77 20 61 6e 20 41 42  y.** throw an AB
1ccb0 4f 52 54 20 65 78 63 65 70 74 69 6f 6e 29 2c 20  ORT exception), 
1ccc0 61 20 73 74 61 74 65 6d 65 6e 74 20 74 72 61 6e  a statement tran
1ccd0 73 61 63 74 69 6f 6e 20 6d 61 79 20 61 6c 73 6f  saction may also
1cce0 20 62 65 20 6f 70 65 6e 65 64 2e 0a 2a 2a 20 4d   be opened..** M
1ccf0 6f 72 65 20 73 70 65 63 69 66 69 63 61 6c 6c 79  ore specifically
1cd00 2c 20 61 20 73 74 61 74 65 6d 65 6e 74 20 74 72  , a statement tr
1cd10 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 6f 70 65  ansaction is ope
1cd20 6e 65 64 20 69 66 66 20 74 68 65 20 64 61 74 61  ned iff the data
1cd30 62 61 73 65 0a 2a 2a 20 63 6f 6e 6e 65 63 74 69  base.** connecti
1cd40 6f 6e 20 69 73 20 63 75 72 72 65 6e 74 6c 79 20  on is currently 
1cd50 6e 6f 74 20 69 6e 20 61 75 74 6f 63 6f 6d 6d 69  not in autocommi
1cd60 74 20 6d 6f 64 65 2c 20 6f 72 20 69 66 20 74 68  t mode, or if th
1cd70 65 72 65 20 61 72 65 20 6f 74 68 65 72 0a 2a 2a  ere are other.**
1cd80 20 61 63 74 69 76 65 20 73 74 61 74 65 6d 65 6e   active statemen
1cd90 74 73 2e 20 41 20 73 74 61 74 65 6d 65 6e 74 20  ts. A statement 
1cda0 74 72 61 6e 73 61 63 74 69 6f 6e 20 61 6c 6c 6f  transaction allo
1cdb0 77 73 20 74 68 65 20 63 68 61 6e 67 65 73 20 6d  ws the changes m
1cdc0 61 64 65 20 62 79 20 74 68 69 73 0a 2a 2a 20 56  ade by this.** V
1cdd0 44 42 45 20 74 6f 20 62 65 20 72 6f 6c 6c 65 64  DBE to be rolled
1cde0 20 62 61 63 6b 20 61 66 74 65 72 20 61 6e 20 65   back after an e
1cdf0 72 72 6f 72 20 77 69 74 68 6f 75 74 20 68 61 76  rror without hav
1ce00 69 6e 67 20 74 6f 20 72 6f 6c 6c 20 62 61 63 6b  ing to roll back
1ce10 20 74 68 65 0a 2a 2a 20 65 6e 74 69 72 65 20 74   the.** entire t
1ce20 72 61 6e 73 61 63 74 69 6f 6e 2e 20 49 66 20 6e  ransaction. If n
1ce30 6f 20 65 72 72 6f 72 20 69 73 20 65 6e 63 6f 75  o error is encou
1ce40 6e 74 65 72 65 64 2c 20 74 68 65 20 73 74 61 74  ntered, the stat
1ce50 65 6d 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f  ement transactio
1ce60 6e 0a 2a 2a 20 77 69 6c 6c 20 61 75 74 6f 6d 61  n.** will automa
1ce70 74 69 63 61 6c 6c 79 20 63 6f 6d 6d 69 74 20 77  tically commit w
1ce80 68 65 6e 20 74 68 65 20 56 44 42 45 20 68 61 6c  hen the VDBE hal
1ce90 74 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 21  ts..**.** If P5!
1cea0 3d 30 20 74 68 65 6e 20 74 68 69 73 20 6f 70 63  =0 then this opc
1ceb0 6f 64 65 20 61 6c 73 6f 20 63 68 65 63 6b 73 20  ode also checks 
1cec0 74 68 65 20 73 63 68 65 6d 61 20 63 6f 6f 6b 69  the schema cooki
1ced0 65 20 61 67 61 69 6e 73 74 20 50 33 0a 2a 2a 20  e against P3.** 
1cee0 61 6e 64 20 74 68 65 20 73 63 68 65 6d 61 20 67  and the schema g
1cef0 65 6e 65 72 61 74 69 6f 6e 20 63 6f 75 6e 74 65  eneration counte
1cf00 72 20 61 67 61 69 6e 73 74 20 50 34 2e 0a 2a 2a  r against P4..**
1cf10 20 54 68 65 20 63 6f 6f 6b 69 65 20 63 68 61 6e   The cookie chan
1cf20 67 65 73 20 69 74 73 20 76 61 6c 75 65 20 77 68  ges its value wh
1cf30 65 6e 65 76 65 72 20 74 68 65 20 64 61 74 61 62  enever the datab
1cf40 61 73 65 20 73 63 68 65 6d 61 20 63 68 61 6e 67  ase schema chang
1cf50 65 73 2e 0a 2a 2a 20 54 68 69 73 20 6f 70 65 72  es..** This oper
1cf60 61 74 69 6f 6e 20 69 73 20 75 73 65 64 20 74 6f  ation is used to
1cf70 20 64 65 74 65 63 74 20 77 68 65 6e 20 74 68 61   detect when tha
1cf80 74 20 74 68 65 20 63 6f 6f 6b 69 65 20 68 61 73  t the cookie has
1cf90 20 63 68 61 6e 67 65 64 0a 2a 2a 20 61 6e 64 20   changed.** and 
1cfa0 74 68 61 74 20 74 68 65 20 63 75 72 72 65 6e 74  that the current
1cfb0 20 70 72 6f 63 65 73 73 20 6e 65 65 64 73 20 74   process needs t
1cfc0 6f 20 72 65 72 65 61 64 20 74 68 65 20 73 63 68  o reread the sch
1cfd0 65 6d 61 2e 20 20 49 66 20 74 68 65 20 73 63 68  ema.  If the sch
1cfe0 65 6d 61 0a 2a 2a 20 63 6f 6f 6b 69 65 20 69 6e  ema.** cookie in
1cff0 20 50 33 20 64 69 66 66 65 72 73 20 66 72 6f 6d   P3 differs from
1d000 20 74 68 65 20 73 63 68 65 6d 61 20 63 6f 6f 6b   the schema cook
1d010 69 65 20 69 6e 20 74 68 65 20 64 61 74 61 62 61  ie in the databa
1d020 73 65 20 68 65 61 64 65 72 20 6f 72 0a 2a 2a 20  se header or.** 
1d030 69 66 20 74 68 65 20 73 63 68 65 6d 61 20 67 65  if the schema ge
1d040 6e 65 72 61 74 69 6f 6e 20 63 6f 75 6e 74 65 72  neration counter
1d050 20 69 6e 20 50 34 20 64 69 66 66 65 72 73 20 66   in P4 differs f
1d060 72 6f 6d 20 74 68 65 20 63 75 72 72 65 6e 74 0a  rom the current.
1d070 2a 2a 20 67 65 6e 65 72 61 74 69 6f 6e 20 63 6f  ** generation co
1d080 75 6e 74 65 72 2c 20 74 68 65 6e 20 61 6e 20 53  unter, then an S
1d090 51 4c 49 54 45 5f 53 43 48 45 4d 41 20 65 72 72  QLITE_SCHEMA err
1d0a0 6f 72 20 69 73 20 72 61 69 73 65 64 20 61 6e 64  or is raised and
1d0b0 20 65 78 65 63 75 74 69 6f 6e 0a 2a 2a 20 68 61   execution.** ha
1d0c0 6c 74 73 2e 20 20 54 68 65 20 73 71 6c 69 74 65  lts.  The sqlite
1d0d0 33 5f 73 74 65 70 28 29 20 77 72 61 70 70 65 72  3_step() wrapper
1d0e0 20 66 75 6e 63 74 69 6f 6e 20 6d 69 67 68 74 20   function might 
1d0f0 74 68 65 6e 20 72 65 70 72 65 70 61 72 65 20 74  then reprepare t
1d100 68 65 0a 2a 2a 20 73 74 61 74 65 6d 65 6e 74 20  he.** statement 
1d110 61 6e 64 20 72 65 72 75 6e 20 69 74 20 66 72 6f  and rerun it fro
1d120 6d 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 2e  m the beginning.
1d130 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 54 72 61 6e  .*/.case OP_Tran
1d140 73 61 63 74 69 6f 6e 3a 20 7b 0a 20 20 42 74 72  saction: {.  Btr
1d150 65 65 20 2a 70 42 74 3b 0a 20 20 69 6e 74 20 69  ee *pBt;.  int i
1d160 4d 65 74 61 20 3d 20 30 3b 0a 0a 20 20 61 73 73  Meta = 0;..  ass
1d170 65 72 74 28 20 70 2d 3e 62 49 73 52 65 61 64 65  ert( p->bIsReade
1d180 72 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  r );.  assert( p
1d190 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30 20 7c 7c  ->readOnly==0 ||
1d1a0 20 70 4f 70 2d 3e 70 32 3d 3d 30 20 29 3b 0a 20   pOp->p2==0 );. 
1d1b0 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
1d1c0 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 64  >=0 && pOp->p1<d
1d1d0 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73 65  b->nDb );.  asse
1d1e0 72 74 28 20 44 62 4d 61 73 6b 54 65 73 74 28 70  rt( DbMaskTest(p
1d1f0 2d 3e 62 74 72 65 65 4d 61 73 6b 2c 20 70 4f 70  ->btreeMask, pOp
1d200 2d 3e 70 31 29 20 29 3b 0a 20 20 69 66 28 20 70  ->p1) );.  if( p
1d210 4f 70 2d 3e 70 32 20 26 26 20 28 64 62 2d 3e 66  Op->p2 && (db->f
1d220 6c 61 67 73 20 26 20 53 51 4c 49 54 45 5f 51 75  lags & SQLITE_Qu
1d230 65 72 79 4f 6e 6c 79 29 21 3d 30 20 29 7b 0a 20  eryOnly)!=0 ){. 
1d240 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 52     rc = SQLITE_R
1d250 45 41 44 4f 4e 4c 59 3b 0a 20 20 20 20 67 6f 74  EADONLY;.    got
1d260 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
1d270 72 72 6f 72 3b 0a 20 20 7d 0a 20 20 70 42 74 20  rror;.  }.  pBt 
1d280 3d 20 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70  = db->aDb[pOp->p
1d290 31 5d 2e 70 42 74 3b 0a 0a 20 20 69 66 28 20 70  1].pBt;..  if( p
1d2a0 42 74 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 73  Bt ){.    rc = s
1d2b0 71 6c 69 74 65 33 42 74 72 65 65 42 65 67 69 6e  qlite3BtreeBegin
1d2c0 54 72 61 6e 73 28 70 42 74 2c 20 70 4f 70 2d 3e  Trans(pBt, pOp->
1d2d0 70 32 2c 20 26 69 4d 65 74 61 29 3b 0a 20 20 20  p2, &iMeta);.   
1d2e0 20 74 65 73 74 63 61 73 65 28 20 72 63 3d 3d 53   testcase( rc==S
1d2f0 51 4c 49 54 45 5f 42 55 53 59 5f 53 4e 41 50 53  QLITE_BUSY_SNAPS
1d300 48 4f 54 20 29 3b 0a 20 20 20 20 74 65 73 74 63  HOT );.    testc
1d310 61 73 65 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f  ase( rc==SQLITE_
1d320 42 55 53 59 5f 52 45 43 4f 56 45 52 59 20 29 3b  BUSY_RECOVERY );
1d330 0a 20 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c  .    if( rc!=SQL
1d340 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20  ITE_OK ){.      
1d350 69 66 28 20 28 72 63 26 30 78 66 66 29 3d 3d 53  if( (rc&0xff)==S
1d360 51 4c 49 54 45 5f 42 55 53 59 20 29 7b 0a 20 20  QLITE_BUSY ){.  
1d370 20 20 20 20 20 20 70 2d 3e 70 63 20 3d 20 28 69        p->pc = (i
1d380 6e 74 29 28 70 4f 70 20 2d 20 61 4f 70 29 3b 0a  nt)(pOp - aOp);.
1d390 20 20 20 20 20 20 20 20 70 2d 3e 72 63 20 3d 20          p->rc = 
1d3a0 72 63 3b 0a 20 20 20 20 20 20 20 20 67 6f 74 6f  rc;.        goto
1d3b0 20 76 64 62 65 5f 72 65 74 75 72 6e 3b 0a 20 20   vdbe_return;.  
1d3c0 20 20 20 20 7d 0a 20 20 20 20 20 20 67 6f 74 6f      }.      goto
1d3d0 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
1d3e0 72 6f 72 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20  ror;.    }..    
1d3f0 69 66 28 20 70 4f 70 2d 3e 70 32 20 26 26 20 70  if( pOp->p2 && p
1d400 2d 3e 75 73 65 73 53 74 6d 74 4a 6f 75 72 6e 61  ->usesStmtJourna
1d410 6c 20 0a 20 20 20 20 20 26 26 20 28 64 62 2d 3e  l .     && (db->
1d420 61 75 74 6f 43 6f 6d 6d 69 74 3d 3d 30 20 7c 7c  autoCommit==0 ||
1d430 20 64 62 2d 3e 6e 56 64 62 65 52 65 61 64 3e 31   db->nVdbeRead>1
1d440 29 20 0a 20 20 20 20 29 7b 0a 20 20 20 20 20 20  ) .    ){.      
1d450 61 73 73 65 72 74 28 20 73 71 6c 69 74 65 33 42  assert( sqlite3B
1d460 74 72 65 65 49 73 49 6e 54 72 61 6e 73 28 70 42  treeIsInTrans(pB
1d470 74 29 20 29 3b 0a 20 20 20 20 20 20 69 66 28 20  t) );.      if( 
1d480 70 2d 3e 69 53 74 61 74 65 6d 65 6e 74 3d 3d 30  p->iStatement==0
1d490 20 29 7b 0a 20 20 20 20 20 20 20 20 61 73 73 65   ){.        asse
1d4a0 72 74 28 20 64 62 2d 3e 6e 53 74 61 74 65 6d 65  rt( db->nStateme
1d4b0 6e 74 3e 3d 30 20 26 26 20 64 62 2d 3e 6e 53 61  nt>=0 && db->nSa
1d4c0 76 65 70 6f 69 6e 74 3e 3d 30 20 29 3b 0a 20 20  vepoint>=0 );.  
1d4d0 20 20 20 20 20 20 64 62 2d 3e 6e 53 74 61 74 65        db->nState
1d4e0 6d 65 6e 74 2b 2b 3b 20 0a 20 20 20 20 20 20 20  ment++; .       
1d4f0 20 70 2d 3e 69 53 74 61 74 65 6d 65 6e 74 20 3d   p->iStatement =
1d500 20 64 62 2d 3e 6e 53 61 76 65 70 6f 69 6e 74 20   db->nSavepoint 
1d510 2b 20 64 62 2d 3e 6e 53 74 61 74 65 6d 65 6e 74  + db->nStatement
1d520 3b 0a 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20  ;.      }..     
1d530 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 74 61   rc = sqlite3Vta
1d540 62 53 61 76 65 70 6f 69 6e 74 28 64 62 2c 20 53  bSavepoint(db, S
1d550 41 56 45 50 4f 49 4e 54 5f 42 45 47 49 4e 2c 20  AVEPOINT_BEGIN, 
1d560 70 2d 3e 69 53 74 61 74 65 6d 65 6e 74 2d 31 29  p->iStatement-1)
1d570 3b 0a 20 20 20 20 20 20 69 66 28 20 72 63 3d 3d  ;.      if( rc==
1d580 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20  SQLITE_OK ){.   
1d590 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65       rc = sqlite
1d5a0 33 42 74 72 65 65 42 65 67 69 6e 53 74 6d 74 28  3BtreeBeginStmt(
1d5b0 70 42 74 2c 20 70 2d 3e 69 53 74 61 74 65 6d 65  pBt, p->iStateme
1d5c0 6e 74 29 3b 0a 20 20 20 20 20 20 7d 0a 0a 20 20  nt);.      }..  
1d5d0 20 20 20 20 2f 2a 20 53 74 6f 72 65 20 74 68 65      /* Store the
1d5e0 20 63 75 72 72 65 6e 74 20 76 61 6c 75 65 20 6f   current value o
1d5f0 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20 68  f the database h
1d600 61 6e 64 6c 65 73 20 64 65 66 65 72 72 65 64 20  andles deferred 
1d610 63 6f 6e 73 74 72 61 69 6e 74 0a 20 20 20 20 20  constraint.     
1d620 20 2a 2a 20 63 6f 75 6e 74 65 72 2e 20 49 66 20   ** counter. If 
1d630 74 68 65 20 73 74 61 74 65 6d 65 6e 74 20 74 72  the statement tr
1d640 61 6e 73 61 63 74 69 6f 6e 20 6e 65 65 64 73 20  ansaction needs 
1d650 74 6f 20 62 65 20 72 6f 6c 6c 65 64 20 62 61 63  to be rolled bac
1d660 6b 2c 0a 20 20 20 20 20 20 2a 2a 20 74 68 65 20  k,.      ** the 
1d670 76 61 6c 75 65 20 6f 66 20 74 68 69 73 20 63 6f  value of this co
1d680 75 6e 74 65 72 20 6e 65 65 64 73 20 74 6f 20 62  unter needs to b
1d690 65 20 72 65 73 74 6f 72 65 64 20 74 6f 6f 2e 20  e restored too. 
1d6a0 20 2a 2f 0a 20 20 20 20 20 20 70 2d 3e 6e 53 74   */.      p->nSt
1d6b0 6d 74 44 65 66 43 6f 6e 73 20 3d 20 64 62 2d 3e  mtDefCons = db->
1d6c0 6e 44 65 66 65 72 72 65 64 43 6f 6e 73 3b 0a 20  nDeferredCons;. 
1d6d0 20 20 20 20 20 70 2d 3e 6e 53 74 6d 74 44 65 66       p->nStmtDef
1d6e0 49 6d 6d 43 6f 6e 73 20 3d 20 64 62 2d 3e 6e 44  ImmCons = db->nD
1d6f0 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73 3b 0a  eferredImmCons;.
1d700 20 20 20 20 7d 0a 20 20 7d 0a 20 20 61 73 73 65      }.  }.  asse
1d710 72 74 28 20 70 4f 70 2d 3e 70 35 3d 3d 30 20 7c  rt( pOp->p5==0 |
1d720 7c 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50  | pOp->p4type==P
1d730 34 5f 49 4e 54 33 32 20 29 3b 0a 20 20 69 66 28  4_INT32 );.  if(
1d740 20 70 4f 70 2d 3e 70 35 0a 20 20 20 26 26 20 28   pOp->p5.   && (
1d750 69 4d 65 74 61 21 3d 70 4f 70 2d 3e 70 33 0a 20  iMeta!=pOp->p3. 
1d760 20 20 20 20 20 7c 7c 20 64 62 2d 3e 61 44 62 5b       || db->aDb[
1d770 70 4f 70 2d 3e 70 31 5d 2e 70 53 63 68 65 6d 61  pOp->p1].pSchema
1d780 2d 3e 69 47 65 6e 65 72 61 74 69 6f 6e 21 3d 70  ->iGeneration!=p
1d790 4f 70 2d 3e 70 34 2e 69 29 0a 20 20 29 7b 0a 20  Op->p4.i).  ){. 
1d7a0 20 20 20 2f 2a 0a 20 20 20 20 2a 2a 20 49 4d 50     /*.    ** IMP
1d7b0 4c 45 4d 45 4e 54 41 54 49 4f 4e 2d 4f 46 3a 20  LEMENTATION-OF: 
1d7c0 52 2d 30 33 31 38 39 2d 35 31 31 33 35 20 41 73  R-03189-51135 As
1d7d0 20 65 61 63 68 20 53 51 4c 20 73 74 61 74 65 6d   each SQL statem
1d7e0 65 6e 74 20 72 75 6e 73 2c 20 74 68 65 20 73 63  ent runs, the sc
1d7f0 68 65 6d 61 0a 20 20 20 20 2a 2a 20 76 65 72 73  hema.    ** vers
1d800 69 6f 6e 20 69 73 20 63 68 65 63 6b 65 64 20 74  ion is checked t
1d810 6f 20 65 6e 73 75 72 65 20 74 68 61 74 20 74 68  o ensure that th
1d820 65 20 73 63 68 65 6d 61 20 68 61 73 20 6e 6f 74  e schema has not
1d830 20 63 68 61 6e 67 65 64 20 73 69 6e 63 65 20 74   changed since t
1d840 68 65 0a 20 20 20 20 2a 2a 20 53 51 4c 20 73 74  he.    ** SQL st
1d850 61 74 65 6d 65 6e 74 20 77 61 73 20 70 72 65 70  atement was prep
1d860 61 72 65 64 2e 0a 20 20 20 20 2a 2f 0a 20 20 20  ared..    */.   
1d870 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 28 64   sqlite3DbFree(d
1d880 62 2c 20 70 2d 3e 7a 45 72 72 4d 73 67 29 3b 0a  b, p->zErrMsg);.
1d890 20 20 20 20 70 2d 3e 7a 45 72 72 4d 73 67 20 3d      p->zErrMsg =
1d8a0 20 73 71 6c 69 74 65 33 44 62 53 74 72 44 75 70   sqlite3DbStrDup
1d8b0 28 64 62 2c 20 22 64 61 74 61 62 61 73 65 20 73  (db, "database s
1d8c0 63 68 65 6d 61 20 68 61 73 20 63 68 61 6e 67 65  chema has change
1d8d0 64 22 29 3b 0a 20 20 20 20 2f 2a 20 49 66 20 74  d");.    /* If t
1d8e0 68 65 20 73 63 68 65 6d 61 2d 63 6f 6f 6b 69 65  he schema-cookie
1d8f0 20 66 72 6f 6d 20 74 68 65 20 64 61 74 61 62 61   from the databa
1d900 73 65 20 66 69 6c 65 20 6d 61 74 63 68 65 73 20  se file matches 
1d910 74 68 65 20 63 6f 6f 6b 69 65 20 0a 20 20 20 20  the cookie .    
1d920 2a 2a 20 73 74 6f 72 65 64 20 77 69 74 68 20 74  ** stored with t
1d930 68 65 20 69 6e 2d 6d 65 6d 6f 72 79 20 72 65 70  he in-memory rep
1d940 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74  resentation of t
1d950 68 65 20 73 63 68 65 6d 61 2c 20 64 6f 0a 20 20  he schema, do.  
1d960 20 20 2a 2a 20 6e 6f 74 20 72 65 6c 6f 61 64 20    ** not reload 
1d970 74 68 65 20 73 63 68 65 6d 61 20 66 72 6f 6d 20  the schema from 
1d980 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c  the database fil
1d990 65 2e 0a 20 20 20 20 2a 2a 0a 20 20 20 20 2a 2a  e..    **.    **
1d9a0 20 49 66 20 76 69 72 74 75 61 6c 2d 74 61 62 6c   If virtual-tabl
1d9b0 65 73 20 61 72 65 20 69 6e 20 75 73 65 2c 20 74  es are in use, t
1d9c0 68 69 73 20 69 73 20 6e 6f 74 20 6a 75 73 74 20  his is not just 
1d9d0 61 6e 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 2e  an optimization.
1d9e0 0a 20 20 20 20 2a 2a 20 4f 66 74 65 6e 2c 20 76  .    ** Often, v
1d9f0 2d 74 61 62 6c 65 73 20 73 74 6f 72 65 20 74 68  -tables store th
1da00 65 69 72 20 64 61 74 61 20 69 6e 20 6f 74 68 65  eir data in othe
1da10 72 20 53 51 4c 69 74 65 20 74 61 62 6c 65 73 2c  r SQLite tables,
1da20 20 77 68 69 63 68 0a 20 20 20 20 2a 2a 20 61 72   which.    ** ar
1da30 65 20 71 75 65 72 69 65 64 20 66 72 6f 6d 20 77  e queried from w
1da40 69 74 68 69 6e 20 78 4e 65 78 74 28 29 20 61 6e  ithin xNext() an
1da50 64 20 6f 74 68 65 72 20 76 2d 74 61 62 6c 65 20  d other v-table 
1da60 6d 65 74 68 6f 64 73 20 75 73 69 6e 67 0a 20 20  methods using.  
1da70 20 20 2a 2a 20 70 72 65 70 61 72 65 64 20 71 75    ** prepared qu
1da80 65 72 69 65 73 2e 20 49 66 20 73 75 63 68 20 61  eries. If such a
1da90 20 71 75 65 72 79 20 69 73 20 6f 75 74 2d 6f 66   query is out-of
1daa0 2d 64 61 74 65 2c 20 77 65 20 64 6f 20 6e 6f 74  -date, we do not
1dab0 20 77 61 6e 74 20 74 6f 0a 20 20 20 20 2a 2a 20   want to.    ** 
1dac0 64 69 73 63 61 72 64 20 74 68 65 20 64 61 74 61  discard the data
1dad0 62 61 73 65 20 73 63 68 65 6d 61 2c 20 61 73 20  base schema, as 
1dae0 74 68 65 20 75 73 65 72 20 63 6f 64 65 20 69 6d  the user code im
1daf0 70 6c 65 6d 65 6e 74 69 6e 67 20 74 68 65 0a 20  plementing the. 
1db00 20 20 20 2a 2a 20 76 2d 74 61 62 6c 65 20 77 6f     ** v-table wo
1db10 75 6c 64 20 68 61 76 65 20 74 6f 20 62 65 20 72  uld have to be r
1db20 65 61 64 79 20 66 6f 72 20 74 68 65 20 73 71 6c  eady for the sql
1db30 69 74 65 33 5f 76 74 61 62 20 73 74 72 75 63 74  ite3_vtab struct
1db40 75 72 65 20 69 74 73 65 6c 66 0a 20 20 20 20 2a  ure itself.    *
1db50 2a 20 74 6f 20 62 65 20 69 6e 76 61 6c 69 64 61  * to be invalida
1db60 74 65 64 20 77 68 65 6e 65 76 65 72 20 73 71 6c  ted whenever sql
1db70 69 74 65 33 5f 73 74 65 70 28 29 20 69 73 20 63  ite3_step() is c
1db80 61 6c 6c 65 64 20 66 72 6f 6d 20 77 69 74 68 69  alled from withi
1db90 6e 20 0a 20 20 20 20 2a 2a 20 61 20 76 2d 74 61  n .    ** a v-ta
1dba0 62 6c 65 20 6d 65 74 68 6f 64 2e 0a 20 20 20 20  ble method..    
1dbb0 2a 2f 0a 20 20 20 20 69 66 28 20 64 62 2d 3e 61  */.    if( db->a
1dbc0 44 62 5b 70 4f 70 2d 3e 70 31 5d 2e 70 53 63 68  Db[pOp->p1].pSch
1dbd0 65 6d 61 2d 3e 73 63 68 65 6d 61 5f 63 6f 6f 6b  ema->schema_cook
1dbe0 69 65 21 3d 69 4d 65 74 61 20 29 7b 0a 20 20 20  ie!=iMeta ){.   
1dbf0 20 20 20 73 71 6c 69 74 65 33 52 65 73 65 74 4f     sqlite3ResetO
1dc00 6e 65 53 63 68 65 6d 61 28 64 62 2c 20 70 4f 70  neSchema(db, pOp
1dc10 2d 3e 70 31 29 3b 0a 20 20 20 20 7d 0a 20 20 20  ->p1);.    }.   
1dc20 20 70 2d 3e 65 78 70 69 72 65 64 20 3d 20 31 3b   p->expired = 1;
1dc30 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45  .    rc = SQLITE
1dc40 5f 53 43 48 45 4d 41 3b 0a 20 20 7d 0a 20 20 69  _SCHEMA;.  }.  i
1dc50 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f  f( rc ) goto abo
1dc60 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
1dc70 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
1dc80 4f 70 63 6f 64 65 3a 20 52 65 61 64 43 6f 6f 6b  Opcode: ReadCook
1dc90 69 65 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a  ie P1 P2 P3 * *.
1dca0 2a 2a 0a 2a 2a 20 52 65 61 64 20 63 6f 6f 6b 69  **.** Read cooki
1dcb0 65 20 6e 75 6d 62 65 72 20 50 33 20 66 72 6f 6d  e number P3 from
1dcc0 20 64 61 74 61 62 61 73 65 20 50 31 20 61 6e 64   database P1 and
1dcd0 20 77 72 69 74 65 20 69 74 20 69 6e 74 6f 20 72   write it into r
1dce0 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 20 50  egister P2..** P
1dcf0 33 3d 3d 31 20 69 73 20 74 68 65 20 73 63 68 65  3==1 is the sche
1dd00 6d 61 20 76 65 72 73 69 6f 6e 2e 20 20 50 33 3d  ma version.  P3=
1dd10 3d 32 20 69 73 20 74 68 65 20 64 61 74 61 62 61  =2 is the databa
1dd20 73 65 20 66 6f 72 6d 61 74 2e 0a 2a 2a 20 50 33  se format..** P3
1dd30 3d 3d 33 20 69 73 20 74 68 65 20 72 65 63 6f 6d  ==3 is the recom
1dd40 6d 65 6e 64 65 64 20 70 61 67 65 72 20 63 61 63  mended pager cac
1dd50 68 65 20 73 69 7a 65 2c 20 61 6e 64 20 73 6f 20  he size, and so 
1dd60 66 6f 72 74 68 2e 20 20 50 31 3d 3d 30 20 69 73  forth.  P1==0 is
1dd70 0a 2a 2a 20 74 68 65 20 6d 61 69 6e 20 64 61 74  .** the main dat
1dd80 61 62 61 73 65 20 66 69 6c 65 20 61 6e 64 20 50  abase file and P
1dd90 31 3d 3d 31 20 69 73 20 74 68 65 20 64 61 74 61  1==1 is the data
1dda0 62 61 73 65 20 66 69 6c 65 20 75 73 65 64 20 74  base file used t
1ddb0 6f 20 73 74 6f 72 65 0a 2a 2a 20 74 65 6d 70 6f  o store.** tempo
1ddc0 72 61 72 79 20 74 61 62 6c 65 73 2e 0a 2a 2a 0a  rary tables..**.
1ddd0 2a 2a 20 54 68 65 72 65 20 6d 75 73 74 20 62 65  ** There must be
1dde0 20 61 20 72 65 61 64 2d 6c 6f 63 6b 20 6f 6e 20   a read-lock on 
1ddf0 74 68 65 20 64 61 74 61 62 61 73 65 20 28 65 69  the database (ei
1de00 74 68 65 72 20 61 20 74 72 61 6e 73 61 63 74 69  ther a transacti
1de10 6f 6e 0a 2a 2a 20 6d 75 73 74 20 62 65 20 73 74  on.** must be st
1de20 61 72 74 65 64 20 6f 72 20 74 68 65 72 65 20 6d  arted or there m
1de30 75 73 74 20 62 65 20 61 6e 20 6f 70 65 6e 20 63  ust be an open c
1de40 75 72 73 6f 72 29 20 62 65 66 6f 72 65 0a 2a 2a  ursor) before.**
1de50 20 65 78 65 63 75 74 69 6e 67 20 74 68 69 73 20   executing this 
1de60 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a  instruction..*/.
1de70 63 61 73 65 20 4f 50 5f 52 65 61 64 43 6f 6f 6b  case OP_ReadCook
1de80 69 65 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  ie: {           
1de90 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20      /* out2 */. 
1dea0 20 69 6e 74 20 69 4d 65 74 61 3b 0a 20 20 69 6e   int iMeta;.  in
1deb0 74 20 69 44 62 3b 0a 20 20 69 6e 74 20 69 43 6f  t iDb;.  int iCo
1dec0 6f 6b 69 65 3b 0a 0a 20 20 61 73 73 65 72 74 28  okie;..  assert(
1ded0 20 70 2d 3e 62 49 73 52 65 61 64 65 72 20 29 3b   p->bIsReader );
1dee0 0a 20 20 69 44 62 20 3d 20 70 4f 70 2d 3e 70 31  .  iDb = pOp->p1
1def0 3b 0a 20 20 69 43 6f 6f 6b 69 65 20 3d 20 70 4f  ;.  iCookie = pO
1df00 70 2d 3e 70 33 3b 0a 20 20 61 73 73 65 72 74 28  p->p3;.  assert(
1df10 20 70 4f 70 2d 3e 70 33 3c 53 51 4c 49 54 45 5f   pOp->p3<SQLITE_
1df20 4e 5f 42 54 52 45 45 5f 4d 45 54 41 20 29 3b 0a  N_BTREE_META );.
1df30 20 20 61 73 73 65 72 74 28 20 69 44 62 3e 3d 30    assert( iDb>=0
1df40 20 26 26 20 69 44 62 3c 64 62 2d 3e 6e 44 62 20   && iDb<db->nDb 
1df50 29 3b 0a 20 20 61 73 73 65 72 74 28 20 64 62 2d  );.  assert( db-
1df60 3e 61 44 62 5b 69 44 62 5d 2e 70 42 74 21 3d 30  >aDb[iDb].pBt!=0
1df70 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 44 62   );.  assert( Db
1df80 4d 61 73 6b 54 65 73 74 28 70 2d 3e 62 74 72 65  MaskTest(p->btre
1df90 65 4d 61 73 6b 2c 20 69 44 62 29 20 29 3b 0a 0a  eMask, iDb) );..
1dfa0 20 20 73 71 6c 69 74 65 33 42 74 72 65 65 47 65    sqlite3BtreeGe
1dfb0 74 4d 65 74 61 28 64 62 2d 3e 61 44 62 5b 69 44  tMeta(db->aDb[iD
1dfc0 62 5d 2e 70 42 74 2c 20 69 43 6f 6f 6b 69 65 2c  b].pBt, iCookie,
1dfd0 20 28 75 33 32 20 2a 29 26 69 4d 65 74 61 29 3b   (u32 *)&iMeta);
1dfe0 0a 20 20 70 4f 75 74 20 3d 20 6f 75 74 32 50 72  .  pOut = out2Pr
1dff0 65 72 65 6c 65 61 73 65 28 70 2c 20 70 4f 70 29  erelease(p, pOp)
1e000 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20  ;.  pOut->u.i = 
1e010 69 4d 65 74 61 3b 0a 20 20 62 72 65 61 6b 3b 0a  iMeta;.  break;.
1e020 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 65  }../* Opcode: Se
1e030 74 43 6f 6f 6b 69 65 20 50 31 20 50 32 20 50 33  tCookie P1 P2 P3
1e040 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65   * *.**.** Write
1e050 20 74 68 65 20 69 6e 74 65 67 65 72 20 76 61 6c   the integer val
1e060 75 65 20 50 33 20 69 6e 74 6f 20 63 6f 6f 6b 69  ue P3 into cooki
1e070 65 20 6e 75 6d 62 65 72 20 50 32 20 6f 66 20 64  e number P2 of d
1e080 61 74 61 62 61 73 65 20 50 31 2e 0a 2a 2a 20 50  atabase P1..** P
1e090 32 3d 3d 31 20 69 73 20 74 68 65 20 73 63 68 65  2==1 is the sche
1e0a0 6d 61 20 76 65 72 73 69 6f 6e 2e 20 20 50 32 3d  ma version.  P2=
1e0b0 3d 32 20 69 73 20 74 68 65 20 64 61 74 61 62 61  =2 is the databa
1e0c0 73 65 20 66 6f 72 6d 61 74 2e 0a 2a 2a 20 50 32  se format..** P2
1e0d0 3d 3d 33 20 69 73 20 74 68 65 20 72 65 63 6f 6d  ==3 is the recom
1e0e0 6d 65 6e 64 65 64 20 70 61 67 65 72 20 63 61 63  mended pager cac
1e0f0 68 65 20 0a 2a 2a 20 73 69 7a 65 2c 20 61 6e 64  he .** size, and
1e100 20 73 6f 20 66 6f 72 74 68 2e 20 20 50 31 3d 3d   so forth.  P1==
1e110 30 20 69 73 20 74 68 65 20 6d 61 69 6e 20 64 61  0 is the main da
1e120 74 61 62 61 73 65 20 66 69 6c 65 20 61 6e 64 20  tabase file and 
1e130 50 31 3d 3d 31 20 69 73 20 74 68 65 20 0a 2a 2a  P1==1 is the .**
1e140 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 75   database file u
1e150 73 65 64 20 74 6f 20 73 74 6f 72 65 20 74 65 6d  sed to store tem
1e160 70 6f 72 61 72 79 20 74 61 62 6c 65 73 2e 0a 2a  porary tables..*
1e170 2a 0a 2a 2a 20 41 20 74 72 61 6e 73 61 63 74 69  *.** A transacti
1e180 6f 6e 20 6d 75 73 74 20 62 65 20 73 74 61 72 74  on must be start
1e190 65 64 20 62 65 66 6f 72 65 20 65 78 65 63 75 74  ed before execut
1e1a0 69 6e 67 20 74 68 69 73 20 6f 70 63 6f 64 65 2e  ing this opcode.
1e1b0 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 65 74 43  .*/.case OP_SetC
1e1c0 6f 6f 6b 69 65 3a 20 7b 0a 20 20 44 62 20 2a 70  ookie: {.  Db *p
1e1d0 44 62 3b 0a 0a 20 20 73 71 6c 69 74 65 33 56 64  Db;..  sqlite3Vd
1e1e0 62 65 49 6e 63 72 57 72 69 74 65 43 6f 75 6e 74  beIncrWriteCount
1e1f0 65 72 28 70 2c 20 30 29 3b 0a 20 20 61 73 73 65  er(p, 0);.  asse
1e200 72 74 28 20 70 4f 70 2d 3e 70 32 3c 53 51 4c 49  rt( pOp->p2<SQLI
1e210 54 45 5f 4e 5f 42 54 52 45 45 5f 4d 45 54 41 20  TE_N_BTREE_META 
1e220 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  );.  assert( pOp
1e230 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e  ->p1>=0 && pOp->
1e240 70 31 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20  p1<db->nDb );.  
1e250 61 73 73 65 72 74 28 20 44 62 4d 61 73 6b 54 65  assert( DbMaskTe
1e260 73 74 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b 2c  st(p->btreeMask,
1e270 20 70 4f 70 2d 3e 70 31 29 20 29 3b 0a 20 20 61   pOp->p1) );.  a
1e280 73 73 65 72 74 28 20 70 2d 3e 72 65 61 64 4f 6e  ssert( p->readOn
1e290 6c 79 3d 3d 30 20 29 3b 0a 20 20 70 44 62 20 3d  ly==0 );.  pDb =
1e2a0 20 26 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70   &db->aDb[pOp->p
1e2b0 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 44  1];.  assert( pD
1e2c0 62 2d 3e 70 42 74 21 3d 30 20 29 3b 0a 20 20 61  b->pBt!=0 );.  a
1e2d0 73 73 65 72 74 28 20 73 71 6c 69 74 65 33 53 63  ssert( sqlite3Sc
1e2e0 68 65 6d 61 4d 75 74 65 78 48 65 6c 64 28 64 62  hemaMutexHeld(db
1e2f0 2c 20 70 4f 70 2d 3e 70 31 2c 20 30 29 20 29 3b  , pOp->p1, 0) );
1e300 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
1e310 4f 4d 49 54 5f 43 4f 4e 43 55 52 52 45 4e 54 0a  OMIT_CONCURRENT.
1e320 20 20 69 66 28 20 64 62 2d 3e 62 43 6f 6e 63 75    if( db->bConcu
1e330 72 72 65 6e 74 20 0a 20 20 20 26 26 20 28 70 4f  rrent .   && (pO
1e340 70 2d 3e 70 32 3d 3d 42 54 52 45 45 5f 55 53 45  p->p2==BTREE_USE
1e350 52 5f 56 45 52 53 49 4f 4e 20 7c 7c 20 70 4f 70  R_VERSION || pOp
1e360 2d 3e 70 32 3d 3d 42 54 52 45 45 5f 41 50 50 4c  ->p2==BTREE_APPL
1e370 49 43 41 54 49 4f 4e 5f 49 44 29 0a 20 20 29 7b  ICATION_ID).  ){
1e380 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45  .    rc = SQLITE
1e390 5f 45 52 52 4f 52 3b 0a 20 20 20 20 73 71 6c 69  _ERROR;.    sqli
1e3a0 74 65 33 56 64 62 65 45 72 72 6f 72 28 70 2c 20  te3VdbeError(p, 
1e3b0 22 63 61 6e 6e 6f 74 20 6d 6f 64 69 66 79 20 25  "cannot modify %
1e3c0 73 20 77 69 74 68 69 6e 20 43 4f 4e 43 55 52 52  s within CONCURR
1e3d0 45 4e 54 20 74 72 61 6e 73 61 63 74 69 6f 6e 22  ENT transaction"
1e3e0 2c 0a 20 20 20 20 20 20 20 20 70 4f 70 2d 3e 70  ,.        pOp->p
1e3f0 32 3d 3d 42 54 52 45 45 5f 55 53 45 52 5f 56 45  2==BTREE_USER_VE
1e400 52 53 49 4f 4e 20 3f 20 22 75 73 65 72 5f 76 65  RSION ? "user_ve
1e410 72 73 69 6f 6e 22 20 3a 20 22 61 70 70 6c 69 63  rsion" : "applic
1e420 61 74 69 6f 6e 5f 69 64 22 0a 20 20 20 20 29 3b  ation_id".    );
1e430 0a 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f  .    goto abort_
1e440 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
1e450 7d 0a 23 65 6e 64 69 66 0a 20 20 2f 2a 20 53 65  }.#endif.  /* Se
1e460 65 20 6e 6f 74 65 20 61 62 6f 75 74 20 69 6e 64  e note about ind
1e470 65 78 20 73 68 69 66 74 69 6e 67 20 6f 6e 20 4f  ex shifting on O
1e480 50 5f 52 65 61 64 43 6f 6f 6b 69 65 20 2a 2f 0a  P_ReadCookie */.
1e490 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
1e4a0 72 65 65 55 70 64 61 74 65 4d 65 74 61 28 70 44  reeUpdateMeta(pD
1e4b0 62 2d 3e 70 42 74 2c 20 70 4f 70 2d 3e 70 32 2c  b->pBt, pOp->p2,
1e4c0 20 70 4f 70 2d 3e 70 33 29 3b 0a 20 20 69 66 28   pOp->p3);.  if(
1e4d0 20 70 4f 70 2d 3e 70 32 3d 3d 42 54 52 45 45 5f   pOp->p2==BTREE_
1e4e0 53 43 48 45 4d 41 5f 56 45 52 53 49 4f 4e 20 29  SCHEMA_VERSION )
1e4f0 7b 0a 20 20 20 20 2f 2a 20 57 68 65 6e 20 74 68  {.    /* When th
1e500 65 20 73 63 68 65 6d 61 20 63 6f 6f 6b 69 65 20  e schema cookie 
1e510 63 68 61 6e 67 65 73 2c 20 72 65 63 6f 72 64 20  changes, record 
1e520 74 68 65 20 6e 65 77 20 63 6f 6f 6b 69 65 20 69  the new cookie i
1e530 6e 74 65 72 6e 61 6c 6c 79 20 2a 2f 0a 20 20 20  nternally */.   
1e540 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
1e550 3d 3d 31 20 7c 7c 20 64 62 2d 3e 62 43 6f 6e 63  ==1 || db->bConc
1e560 75 72 72 65 6e 74 3d 3d 30 20 29 3b 0a 20 20 20  urrent==0 );.   
1e570 20 70 44 62 2d 3e 70 53 63 68 65 6d 61 2d 3e 73   pDb->pSchema->s
1e580 63 68 65 6d 61 5f 63 6f 6f 6b 69 65 20 3d 20 70  chema_cookie = p
1e590 4f 70 2d 3e 70 33 3b 0a 20 20 20 20 64 62 2d 3e  Op->p3;.    db->
1e5a0 6d 44 62 46 6c 61 67 73 20 7c 3d 20 44 42 46 4c  mDbFlags |= DBFL
1e5b0 41 47 5f 53 63 68 65 6d 61 43 68 61 6e 67 65 3b  AG_SchemaChange;
1e5c0 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 70 4f 70  .  }else if( pOp
1e5d0 2d 3e 70 32 3d 3d 42 54 52 45 45 5f 46 49 4c 45  ->p2==BTREE_FILE
1e5e0 5f 46 4f 52 4d 41 54 20 29 7b 0a 20 20 20 20 2f  _FORMAT ){.    /
1e5f0 2a 20 52 65 63 6f 72 64 20 63 68 61 6e 67 65 73  * Record changes
1e600 20 69 6e 20 74 68 65 20 66 69 6c 65 20 66 6f 72   in the file for
1e610 6d 61 74 20 2a 2f 0a 20 20 20 20 70 44 62 2d 3e  mat */.    pDb->
1e620 70 53 63 68 65 6d 61 2d 3e 66 69 6c 65 5f 66 6f  pSchema->file_fo
1e630 72 6d 61 74 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a  rmat = pOp->p3;.
1e640 20 20 7d 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70    }.  if( pOp->p
1e650 31 3d 3d 31 20 29 7b 0a 20 20 20 20 2f 2a 20 49  1==1 ){.    /* I
1e660 6e 76 61 6c 69 64 61 74 65 20 61 6c 6c 20 70 72  nvalidate all pr
1e670 65 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74  epared statement
1e680 73 20 77 68 65 6e 65 76 65 72 20 74 68 65 20 54  s whenever the T
1e690 45 4d 50 20 64 61 74 61 62 61 73 65 0a 20 20 20  EMP database.   
1e6a0 20 2a 2a 20 73 63 68 65 6d 61 20 69 73 20 63 68   ** schema is ch
1e6b0 61 6e 67 65 64 2e 20 20 54 69 63 6b 65 74 20 23  anged.  Ticket #
1e6c0 31 36 34 34 20 2a 2f 0a 20 20 20 20 73 71 6c 69  1644 */.    sqli
1e6d0 74 65 33 45 78 70 69 72 65 50 72 65 70 61 72 65  te3ExpirePrepare
1e6e0 64 53 74 61 74 65 6d 65 6e 74 73 28 64 62 2c 20  dStatements(db, 
1e6f0 30 29 3b 0a 20 20 20 20 70 2d 3e 65 78 70 69 72  0);.    p->expir
1e700 65 64 20 3d 20 30 3b 0a 20 20 7d 0a 20 20 69 66  ed = 0;.  }.  if
1e710 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72  ( rc ) goto abor
1e720 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
1e730 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
1e740 70 63 6f 64 65 3a 20 4f 70 65 6e 52 65 61 64 20  pcode: OpenRead 
1e750 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a  P1 P2 P3 P4 P5.*
1e760 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 6f 6f 74  * Synopsis: root
1e770 3d 50 32 20 69 44 62 3d 50 33 0a 2a 2a 0a 2a 2a  =P2 iDb=P3.**.**
1e780 20 4f 70 65 6e 20 61 20 72 65 61 64 2d 6f 6e 6c   Open a read-onl
1e790 79 20 63 75 72 73 6f 72 20 66 6f 72 20 74 68 65  y cursor for the
1e7a0 20 64 61 74 61 62 61 73 65 20 74 61 62 6c 65 20   database table 
1e7b0 77 68 6f 73 65 20 72 6f 6f 74 20 70 61 67 65 20  whose root page 
1e7c0 69 73 0a 2a 2a 20 50 32 20 69 6e 20 61 20 64 61  is.** P2 in a da
1e7d0 74 61 62 61 73 65 20 66 69 6c 65 2e 20 20 54 68  tabase file.  Th
1e7e0 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  e database file 
1e7f0 69 73 20 64 65 74 65 72 6d 69 6e 65 64 20 62 79  is determined by
1e800 20 50 33 2e 20 0a 2a 2a 20 50 33 3d 3d 30 20 6d   P3. .** P3==0 m
1e810 65 61 6e 73 20 74 68 65 20 6d 61 69 6e 20 64 61  eans the main da
1e820 74 61 62 61 73 65 2c 20 50 33 3d 3d 31 20 6d 65  tabase, P3==1 me
1e830 61 6e 73 20 74 68 65 20 64 61 74 61 62 61 73 65  ans the database
1e840 20 75 73 65 64 20 66 6f 72 20 0a 2a 2a 20 74 65   used for .** te
1e850 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 73 2c 20  mporary tables, 
1e860 61 6e 64 20 50 33 3e 31 20 6d 65 61 6e 73 20 75  and P3>1 means u
1e870 73 65 64 20 74 68 65 20 63 6f 72 72 65 73 70 6f  sed the correspo
1e880 6e 64 69 6e 67 20 61 74 74 61 63 68 65 64 0a 2a  nding attached.*
1e890 2a 20 64 61 74 61 62 61 73 65 2e 20 20 47 69 76  * database.  Giv
1e8a0 65 20 74 68 65 20 6e 65 77 20 63 75 72 73 6f 72  e the new cursor
1e8b0 20 61 6e 20 69 64 65 6e 74 69 66 69 65 72 20 6f   an identifier o
1e8c0 66 20 50 31 2e 20 20 54 68 65 20 50 31 0a 2a 2a  f P1.  The P1.**
1e8d0 20 76 61 6c 75 65 73 20 6e 65 65 64 20 6e 6f 74   values need not
1e8e0 20 62 65 20 63 6f 6e 74 69 67 75 6f 75 73 20 62   be contiguous b
1e8f0 75 74 20 61 6c 6c 20 50 31 20 76 61 6c 75 65 73  ut all P1 values
1e900 20 73 68 6f 75 6c 64 20 62 65 20 73 6d 61 6c 6c   should be small
1e910 20 69 6e 74 65 67 65 72 73 2e 0a 2a 2a 20 49 74   integers..** It
1e920 20 69 73 20 61 6e 20 65 72 72 6f 72 20 66 6f 72   is an error for
1e930 20 50 31 20 74 6f 20 62 65 20 6e 65 67 61 74 69   P1 to be negati
1e940 76 65 2e 0a 2a 2a 0a 2a 2a 20 41 6c 6c 6f 77 65  ve..**.** Allowe
1e950 64 20 50 35 20 62 69 74 73 3a 0a 2a 2a 20 3c 75  d P5 bits:.** <u
1e960 6c 3e 0a 2a 2a 20 3c 6c 69 3e 20 20 3c 62 3e 30  l>.** <li>  <b>0
1e970 78 30 32 20 4f 50 46 4c 41 47 5f 53 45 45 4b 45  x02 OPFLAG_SEEKE
1e980 51 3c 2f 62 3e 3a 20 54 68 69 73 20 63 75 72 73  Q</b>: This curs
1e990 6f 72 20 77 69 6c 6c 20 6f 6e 6c 79 20 62 65 20  or will only be 
1e9a0 75 73 65 64 20 66 6f 72 0a 2a 2a 20 20 20 20 20  used for.**     
1e9b0 20 20 65 71 75 61 6c 69 74 79 20 6c 6f 6f 6b 75    equality looku
1e9c0 70 73 20 28 69 6d 70 6c 65 6d 65 6e 74 65 64 20  ps (implemented 
1e9d0 61 73 20 61 20 70 61 69 72 20 6f 66 20 6f 70 63  as a pair of opc
1e9e0 6f 64 65 73 20 4f 50 5f 53 65 65 6b 47 45 2f 4f  odes OP_SeekGE/O
1e9f0 50 5f 49 64 78 47 54 0a 2a 2a 20 20 20 20 20 20  P_IdxGT.**      
1ea00 20 6f 66 20 4f 50 5f 53 65 65 6b 4c 45 2f 4f 50   of OP_SeekLE/OP
1ea10 5f 49 64 78 47 54 29 0a 2a 2a 20 3c 2f 75 6c 3e  _IdxGT).** </ul>
1ea20 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 34 20 76 61  .**.** The P4 va
1ea30 6c 75 65 20 6d 61 79 20 62 65 20 65 69 74 68 65  lue may be eithe
1ea40 72 20 61 6e 20 69 6e 74 65 67 65 72 20 28 50 34  r an integer (P4
1ea50 5f 49 4e 54 33 32 29 20 6f 72 20 61 20 70 6f 69  _INT32) or a poi
1ea60 6e 74 65 72 20 74 6f 0a 2a 2a 20 61 20 4b 65 79  nter to.** a Key
1ea70 49 6e 66 6f 20 73 74 72 75 63 74 75 72 65 20 28  Info structure (
1ea80 50 34 5f 4b 45 59 49 4e 46 4f 29 2e 20 49 66 20  P4_KEYINFO). If 
1ea90 69 74 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20  it is a pointer 
1eaa0 74 6f 20 61 20 4b 65 79 49 6e 66 6f 20 0a 2a 2a  to a KeyInfo .**
1eab0 20 6f 62 6a 65 63 74 2c 20 74 68 65 6e 20 74 61   object, then ta
1eac0 62 6c 65 20 62 65 69 6e 67 20 6f 70 65 6e 65 64  ble being opened
1ead0 20 6d 75 73 74 20 62 65 20 61 6e 20 5b 69 6e 64   must be an [ind
1eae0 65 78 20 62 2d 74 72 65 65 5d 20 77 68 65 72 65  ex b-tree] where
1eaf0 20 74 68 65 0a 2a 2a 20 4b 65 79 49 6e 66 6f 20   the.** KeyInfo 
1eb00 6f 62 6a 65 63 74 20 64 65 66 69 6e 65 73 20 74  object defines t
1eb10 68 65 20 63 6f 6e 74 65 6e 74 20 61 6e 64 20 63  he content and c
1eb20 6f 6c 6c 61 74 69 6e 67 20 0a 2a 2a 20 73 65 71  ollating .** seq
1eb30 75 65 6e 63 65 20 6f 66 20 74 68 61 74 20 69 6e  uence of that in
1eb40 64 65 78 20 62 2d 74 72 65 65 2e 20 4f 74 68 65  dex b-tree. Othe
1eb50 72 77 69 73 65 2c 20 69 66 20 50 34 20 69 73 20  rwise, if P4 is 
1eb60 61 6e 20 69 6e 74 65 67 65 72 20 0a 2a 2a 20 76  an integer .** v
1eb70 61 6c 75 65 2c 20 74 68 65 6e 20 74 68 65 20 74  alue, then the t
1eb80 61 62 6c 65 20 62 65 69 6e 67 20 6f 70 65 6e 65  able being opene
1eb90 64 20 6d 75 73 74 20 62 65 20 61 20 5b 74 61 62  d must be a [tab
1eba0 6c 65 20 62 2d 74 72 65 65 5d 20 77 69 74 68 20  le b-tree] with 
1ebb0 61 0a 2a 2a 20 6e 75 6d 62 65 72 20 6f 66 20 63  a.** number of c
1ebc0 6f 6c 75 6d 6e 73 20 6e 6f 20 6c 65 73 73 20 74  olumns no less t
1ebd0 68 61 6e 20 74 68 65 20 76 61 6c 75 65 20 6f 66  han the value of
1ebe0 20 50 34 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61   P4..**.** See a
1ebf0 6c 73 6f 3a 20 4f 70 65 6e 57 72 69 74 65 2c 20  lso: OpenWrite, 
1ec00 52 65 6f 70 65 6e 49 64 78 0a 2a 2f 0a 2f 2a 20  ReopenIdx.*/./* 
1ec10 4f 70 63 6f 64 65 3a 20 52 65 6f 70 65 6e 49 64  Opcode: ReopenId
1ec20 78 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35  x P1 P2 P3 P4 P5
1ec30 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 6f  .** Synopsis: ro
1ec40 6f 74 3d 50 32 20 69 44 62 3d 50 33 0a 2a 2a 0a  ot=P2 iDb=P3.**.
1ec50 2a 2a 20 54 68 65 20 52 65 6f 70 65 6e 49 64 78  ** The ReopenIdx
1ec60 20 6f 70 63 6f 64 65 20 77 6f 72 6b 73 20 6c 69   opcode works li
1ec70 6b 65 20 4f 50 5f 4f 70 65 6e 52 65 61 64 20 65  ke OP_OpenRead e
1ec80 78 63 65 70 74 20 74 68 61 74 20 69 74 20 66 69  xcept that it fi
1ec90 72 73 74 0a 2a 2a 20 63 68 65 63 6b 73 20 74 6f  rst.** checks to
1eca0 20 73 65 65 20 69 66 20 74 68 65 20 63 75 72 73   see if the curs
1ecb0 6f 72 20 6f 6e 20 50 31 20 69 73 20 61 6c 72 65  or on P1 is alre
1ecc0 61 64 79 20 6f 70 65 6e 20 6f 6e 20 74 68 65 20  ady open on the 
1ecd0 73 61 6d 65 0a 2a 2a 20 62 2d 74 72 65 65 20 61  same.** b-tree a
1ece0 6e 64 20 69 66 20 69 74 20 69 73 20 74 68 69 73  nd if it is this
1ecf0 20 6f 70 63 6f 64 65 20 62 65 63 6f 6d 65 73 20   opcode becomes 
1ed00 61 20 6e 6f 2d 6f 70 2e 20 20 49 6e 20 6f 74 68  a no-op.  In oth
1ed10 65 72 20 77 6f 72 64 73 2c 0a 2a 2a 20 69 66 20  er words,.** if 
1ed20 74 68 65 20 63 75 72 73 6f 72 20 69 73 20 61 6c  the cursor is al
1ed30 72 65 61 64 79 20 6f 70 65 6e 2c 20 64 6f 20 6e  ready open, do n
1ed40 6f 74 20 72 65 6f 70 65 6e 20 69 74 2e 0a 2a 2a  ot reopen it..**
1ed50 0a 2a 2a 20 54 68 65 20 52 65 6f 70 65 6e 49 64  .** The ReopenId
1ed60 78 20 6f 70 63 6f 64 65 20 6d 61 79 20 6f 6e 6c  x opcode may onl
1ed70 79 20 62 65 20 75 73 65 64 20 77 69 74 68 20 50  y be used with P
1ed80 35 3d 3d 30 20 6f 72 20 50 35 3d 3d 4f 50 46 4c  5==0 or P5==OPFL
1ed90 41 47 5f 53 45 45 4b 45 51 0a 2a 2a 20 61 6e 64  AG_SEEKEQ.** and
1eda0 20 77 69 74 68 20 50 34 20 62 65 69 6e 67 20 61   with P4 being a
1edb0 20 50 34 5f 4b 45 59 49 4e 46 4f 20 6f 62 6a 65   P4_KEYINFO obje
1edc0 63 74 2e 20 20 46 75 72 74 68 65 72 6d 6f 72 65  ct.  Furthermore
1edd0 2c 20 74 68 65 20 50 33 20 76 61 6c 75 65 20 6d  , the P3 value m
1ede0 75 73 74 0a 2a 2a 20 62 65 20 74 68 65 20 73 61  ust.** be the sa
1edf0 6d 65 20 61 73 20 65 76 65 72 79 20 6f 74 68 65  me as every othe
1ee00 72 20 52 65 6f 70 65 6e 49 64 78 20 6f 72 20 4f  r ReopenIdx or O
1ee10 70 65 6e 52 65 61 64 20 66 6f 72 20 74 68 65 20  penRead for the 
1ee20 73 61 6d 65 20 63 75 72 73 6f 72 0a 2a 2a 20 6e  same cursor.** n
1ee30 75 6d 62 65 72 2e 0a 2a 2a 0a 2a 2a 20 41 6c 6c  umber..**.** All
1ee40 6f 77 65 64 20 50 35 20 62 69 74 73 3a 0a 2a 2a  owed P5 bits:.**
1ee50 20 3c 75 6c 3e 0a 2a 2a 20 3c 6c 69 3e 20 20 3c   <ul>.** <li>  <
1ee60 62 3e 30 78 30 32 20 4f 50 46 4c 41 47 5f 53 45  b>0x02 OPFLAG_SE
1ee70 45 4b 45 51 3c 2f 62 3e 3a 20 54 68 69 73 20 63  EKEQ</b>: This c
1ee80 75 72 73 6f 72 20 77 69 6c 6c 20 6f 6e 6c 79 20  ursor will only 
1ee90 62 65 20 75 73 65 64 20 66 6f 72 0a 2a 2a 20 20  be used for.**  
1eea0 20 20 20 20 20 65 71 75 61 6c 69 74 79 20 6c 6f       equality lo
1eeb0 6f 6b 75 70 73 20 28 69 6d 70 6c 65 6d 65 6e 74  okups (implement
1eec0 65 64 20 61 73 20 61 20 70 61 69 72 20 6f 66 20  ed as a pair of 
1eed0 6f 70 63 6f 64 65 73 20 4f 50 5f 53 65 65 6b 47  opcodes OP_SeekG
1eee0 45 2f 4f 50 5f 49 64 78 47 54 0a 2a 2a 20 20 20  E/OP_IdxGT.**   
1eef0 20 20 20 20 6f 66 20 4f 50 5f 53 65 65 6b 4c 45      of OP_SeekLE
1ef00 2f 4f 50 5f 49 64 78 47 54 29 0a 2a 2a 20 3c 2f  /OP_IdxGT).** </
1ef10 75 6c 3e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c  ul>.**.** See al
1ef20 73 6f 3a 20 4f 50 5f 4f 70 65 6e 52 65 61 64 2c  so: OP_OpenRead,
1ef30 20 4f 50 5f 4f 70 65 6e 57 72 69 74 65 0a 2a 2f   OP_OpenWrite.*/
1ef40 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f 70 65 6e  ./* Opcode: Open
1ef50 57 72 69 74 65 20 50 31 20 50 32 20 50 33 20 50  Write P1 P2 P3 P
1ef60 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73  4 P5.** Synopsis
1ef70 3a 20 72 6f 6f 74 3d 50 32 20 69 44 62 3d 50 33  : root=P2 iDb=P3
1ef80 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e 20 61 20 72 65  .**.** Open a re
1ef90 61 64 2f 77 72 69 74 65 20 63 75 72 73 6f 72 20  ad/write cursor 
1efa0 6e 61 6d 65 64 20 50 31 20 6f 6e 20 74 68 65 20  named P1 on the 
1efb0 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 77  table or index w
1efc0 68 6f 73 65 20 72 6f 6f 74 0a 2a 2a 20 70 61 67  hose root.** pag
1efd0 65 20 69 73 20 50 32 20 28 6f 72 20 77 68 6f 73  e is P2 (or whos
1efe0 65 20 72 6f 6f 74 20 70 61 67 65 20 69 73 20 68  e root page is h
1eff0 65 6c 64 20 69 6e 20 72 65 67 69 73 74 65 72 20  eld in register 
1f000 50 32 20 69 66 20 74 68 65 0a 2a 2a 20 4f 50 46  P2 if the.** OPF
1f010 4c 41 47 5f 50 32 49 53 52 45 47 20 62 69 74 20  LAG_P2ISREG bit 
1f020 69 73 20 73 65 74 20 69 6e 20 50 35 20 2d 20 73  is set in P5 - s
1f030 65 65 20 62 65 6c 6f 77 29 2e 0a 2a 2a 0a 2a 2a  ee below)..**.**
1f040 20 54 68 65 20 50 34 20 76 61 6c 75 65 20 6d 61   The P4 value ma
1f050 79 20 62 65 20 65 69 74 68 65 72 20 61 6e 20 69  y be either an i
1f060 6e 74 65 67 65 72 20 28 50 34 5f 49 4e 54 33 32  nteger (P4_INT32
1f070 29 20 6f 72 20 61 20 70 6f 69 6e 74 65 72 20 74  ) or a pointer t
1f080 6f 0a 2a 2a 20 61 20 4b 65 79 49 6e 66 6f 20 73  o.** a KeyInfo s
1f090 74 72 75 63 74 75 72 65 20 28 50 34 5f 4b 45 59  tructure (P4_KEY
1f0a0 49 4e 46 4f 29 2e 20 49 66 20 69 74 20 69 73 20  INFO). If it is 
1f0b0 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 4b  a pointer to a K
1f0c0 65 79 49 6e 66 6f 20 0a 2a 2a 20 6f 62 6a 65 63  eyInfo .** objec
1f0d0 74 2c 20 74 68 65 6e 20 74 61 62 6c 65 20 62 65  t, then table be
1f0e0 69 6e 67 20 6f 70 65 6e 65 64 20 6d 75 73 74 20  ing opened must 
1f0f0 62 65 20 61 6e 20 5b 69 6e 64 65 78 20 62 2d 74  be an [index b-t
1f100 72 65 65 5d 20 77 68 65 72 65 20 74 68 65 0a 2a  ree] where the.*
1f110 2a 20 4b 65 79 49 6e 66 6f 20 6f 62 6a 65 63 74  * KeyInfo object
1f120 20 64 65 66 69 6e 65 73 20 74 68 65 20 63 6f 6e   defines the con
1f130 74 65 6e 74 20 61 6e 64 20 63 6f 6c 6c 61 74 69  tent and collati
1f140 6e 67 20 0a 2a 2a 20 73 65 71 75 65 6e 63 65 20  ng .** sequence 
1f150 6f 66 20 74 68 61 74 20 69 6e 64 65 78 20 62 2d  of that index b-
1f160 74 72 65 65 2e 20 4f 74 68 65 72 77 69 73 65 2c  tree. Otherwise,
1f170 20 69 66 20 50 34 20 69 73 20 61 6e 20 69 6e 74   if P4 is an int
1f180 65 67 65 72 20 0a 2a 2a 20 76 61 6c 75 65 2c 20  eger .** value, 
1f190 74 68 65 6e 20 74 68 65 20 74 61 62 6c 65 20 62  then the table b
1f1a0 65 69 6e 67 20 6f 70 65 6e 65 64 20 6d 75 73 74  eing opened must
1f1b0 20 62 65 20 61 20 5b 74 61 62 6c 65 20 62 2d 74   be a [table b-t
1f1c0 72 65 65 5d 20 77 69 74 68 20 61 0a 2a 2a 20 6e  ree] with a.** n
1f1d0 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73  umber of columns
1f1e0 20 6e 6f 20 6c 65 73 73 20 74 68 61 6e 20 74 68   no less than th
1f1f0 65 20 76 61 6c 75 65 20 6f 66 20 50 34 2e 0a 2a  e value of P4..*
1f200 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 50 35 20  *.** Allowed P5 
1f210 62 69 74 73 3a 0a 2a 2a 20 3c 75 6c 3e 0a 2a 2a  bits:.** <ul>.**
1f220 20 3c 6c 69 3e 20 20 3c 62 3e 30 78 30 32 20 4f   <li>  <b>0x02 O
1f230 50 46 4c 41 47 5f 53 45 45 4b 45 51 3c 2f 62 3e  PFLAG_SEEKEQ</b>
1f240 3a 20 54 68 69 73 20 63 75 72 73 6f 72 20 77 69  : This cursor wi
1f250 6c 6c 20 6f 6e 6c 79 20 62 65 20 75 73 65 64 20  ll only be used 
1f260 66 6f 72 0a 2a 2a 20 20 20 20 20 20 20 65 71 75  for.**       equ
1f270 61 6c 69 74 79 20 6c 6f 6f 6b 75 70 73 20 28 69  ality lookups (i
1f280 6d 70 6c 65 6d 65 6e 74 65 64 20 61 73 20 61 20  mplemented as a 
1f290 70 61 69 72 20 6f 66 20 6f 70 63 6f 64 65 73 20  pair of opcodes 
1f2a0 4f 50 5f 53 65 65 6b 47 45 2f 4f 50 5f 49 64 78  OP_SeekGE/OP_Idx
1f2b0 47 54 0a 2a 2a 20 20 20 20 20 20 20 6f 66 20 4f  GT.**       of O
1f2c0 50 5f 53 65 65 6b 4c 45 2f 4f 50 5f 49 64 78 47  P_SeekLE/OP_IdxG
1f2d0 54 29 0a 2a 2a 20 3c 6c 69 3e 20 20 3c 62 3e 30  T).** <li>  <b>0
1f2e0 78 30 38 20 4f 50 46 4c 41 47 5f 46 4f 52 44 45  x08 OPFLAG_FORDE
1f2f0 4c 45 54 45 3c 2f 62 3e 3a 20 54 68 69 73 20 63  LETE</b>: This c
1f300 75 72 73 6f 72 20 69 73 20 75 73 65 64 20 6f 6e  ursor is used on
1f310 6c 79 20 74 6f 20 73 65 65 6b 0a 2a 2a 20 20 20  ly to seek.**   
1f320 20 20 20 20 61 6e 64 20 73 75 62 73 65 71 75 65      and subseque
1f330 6e 74 6c 79 20 64 65 6c 65 74 65 20 65 6e 74 72  ntly delete entr
1f340 69 65 73 20 69 6e 20 61 6e 20 69 6e 64 65 78 20  ies in an index 
1f350 62 74 72 65 65 2e 20 20 54 68 69 73 20 69 73 20  btree.  This is 
1f360 61 0a 2a 2a 20 20 20 20 20 20 20 68 69 6e 74 20  a.**       hint 
1f370 74 6f 20 74 68 65 20 73 74 6f 72 61 67 65 20 65  to the storage e
1f380 6e 67 69 6e 65 20 74 68 61 74 20 74 68 65 20 73  ngine that the s
1f390 74 6f 72 61 67 65 20 65 6e 67 69 6e 65 20 69 73  torage engine is
1f3a0 20 61 6c 6c 6f 77 65 64 20 74 6f 0a 2a 2a 20 20   allowed to.**  
1f3b0 20 20 20 20 20 69 67 6e 6f 72 65 2e 20 20 54 68       ignore.  Th
1f3c0 65 20 68 69 6e 74 20 69 73 20 6e 6f 74 20 75 73  e hint is not us
1f3d0 65 64 20 62 79 20 74 68 65 20 6f 66 66 69 63 69  ed by the offici
1f3e0 61 6c 20 53 51 4c 69 74 65 20 62 2a 74 72 65 65  al SQLite b*tree
1f3f0 20 73 74 6f 72 61 67 65 0a 2a 2a 20 20 20 20 20   storage.**     
1f400 20 20 65 6e 67 69 6e 65 2c 20 62 75 74 20 69 73    engine, but is
1f410 20 75 73 65 64 20 62 79 20 43 4f 4d 44 42 32 2e   used by COMDB2.
1f420 0a 2a 2a 20 3c 6c 69 3e 20 20 3c 62 3e 30 78 31  .** <li>  <b>0x1
1f430 30 20 4f 50 46 4c 41 47 5f 50 32 49 53 52 45 47  0 OPFLAG_P2ISREG
1f440 3c 2f 62 3e 3a 20 55 73 65 20 74 68 65 20 63 6f  </b>: Use the co
1f450 6e 74 65 6e 74 20 6f 66 20 72 65 67 69 73 74 65  ntent of registe
1f460 72 20 50 32 0a 2a 2a 20 20 20 20 20 20 20 61 73  r P2.**       as
1f470 20 74 68 65 20 72 6f 6f 74 20 70 61 67 65 2c 20   the root page, 
1f480 6e 6f 74 20 74 68 65 20 76 61 6c 75 65 20 6f 66  not the value of
1f490 20 50 32 20 69 74 73 65 6c 66 2e 0a 2a 2a 20 3c   P2 itself..** <
1f4a0 2f 75 6c 3e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20  /ul>.**.** This 
1f4b0 69 6e 73 74 72 75 63 74 69 6f 6e 20 77 6f 72 6b  instruction work
1f4c0 73 20 6c 69 6b 65 20 4f 70 65 6e 52 65 61 64 20  s like OpenRead 
1f4d0 65 78 63 65 70 74 20 74 68 61 74 20 69 74 20 6f  except that it o
1f4e0 70 65 6e 73 20 74 68 65 20 63 75 72 73 6f 72 0a  pens the cursor.
1f4f0 2a 2a 20 69 6e 20 72 65 61 64 2f 77 72 69 74 65  ** in read/write
1f500 20 6d 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 53 65 65   mode..**.** See
1f510 20 61 6c 73 6f 3a 20 4f 50 5f 4f 70 65 6e 52 65   also: OP_OpenRe
1f520 61 64 2c 20 4f 50 5f 52 65 6f 70 65 6e 49 64 78  ad, OP_ReopenIdx
1f530 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65 6f 70  .*/.case OP_Reop
1f540 65 6e 49 64 78 3a 20 7b 0a 20 20 69 6e 74 20 6e  enIdx: {.  int n
1f550 46 69 65 6c 64 3b 0a 20 20 4b 65 79 49 6e 66 6f  Field;.  KeyInfo
1f560 20 2a 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 69 6e   *pKeyInfo;.  in
1f570 74 20 70 32 3b 0a 20 20 69 6e 74 20 69 44 62 3b  t p2;.  int iDb;
1f580 0a 20 20 69 6e 74 20 77 72 46 6c 61 67 3b 0a 20  .  int wrFlag;. 
1f590 20 42 74 72 65 65 20 2a 70 58 3b 0a 20 20 56 64   Btree *pX;.  Vd
1f5a0 62 65 43 75 72 73 6f 72 20 2a 70 43 75 72 3b 0a  beCursor *pCur;.
1f5b0 20 20 44 62 20 2a 70 44 62 3b 0a 0a 20 20 61 73    Db *pDb;..  as
1f5c0 73 65 72 74 28 20 70 4f 70 2d 3e 70 35 3d 3d 30  sert( pOp->p5==0
1f5d0 20 7c 7c 20 70 4f 70 2d 3e 70 35 3d 3d 4f 50 46   || pOp->p5==OPF
1f5e0 4c 41 47 5f 53 45 45 4b 45 51 20 29 3b 0a 20 20  LAG_SEEKEQ );.  
1f5f0 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74  assert( pOp->p4t
1f600 79 70 65 3d 3d 50 34 5f 4b 45 59 49 4e 46 4f 20  ype==P4_KEYINFO 
1f610 29 3b 0a 20 20 70 43 75 72 20 3d 20 70 2d 3e 61  );.  pCur = p->a
1f620 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  pCsr[pOp->p1];. 
1f630 20 69 66 28 20 70 43 75 72 20 26 26 20 70 43 75   if( pCur && pCu
1f640 72 2d 3e 70 67 6e 6f 52 6f 6f 74 3d 3d 28 75 33  r->pgnoRoot==(u3
1f650 32 29 70 4f 70 2d 3e 70 32 20 29 7b 0a 20 20 20  2)pOp->p2 ){.   
1f660 20 61 73 73 65 72 74 28 20 70 43 75 72 2d 3e 69   assert( pCur->i
1f670 44 62 3d 3d 70 4f 70 2d 3e 70 33 20 29 3b 20 20  Db==pOp->p3 );  
1f680 20 20 20 20 2f 2a 20 47 75 61 72 61 6e 74 65 65      /* Guarantee
1f690 64 20 62 79 20 74 68 65 20 63 6f 64 65 20 67 65  d by the code ge
1f6a0 6e 65 72 61 74 6f 72 20 2a 2f 0a 20 20 20 20 67  nerator */.    g
1f6b0 6f 74 6f 20 6f 70 65 6e 5f 63 75 72 73 6f 72 5f  oto open_cursor_
1f6c0 73 65 74 5f 68 69 6e 74 73 3b 0a 20 20 7d 0a 20  set_hints;.  }. 
1f6d0 20 2f 2a 20 49 66 20 74 68 65 20 63 75 72 73 6f   /* If the curso
1f6e0 72 20 69 73 20 6e 6f 74 20 63 75 72 72 65 6e 74  r is not current
1f6f0 6c 79 20 6f 70 65 6e 20 6f 72 20 69 73 20 6f 70  ly open or is op
1f700 65 6e 20 6f 6e 20 61 20 64 69 66 66 65 72 65 6e  en on a differen
1f710 74 0a 20 20 2a 2a 20 69 6e 64 65 78 2c 20 74 68  t.  ** index, th
1f720 65 6e 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 20  en fall through 
1f730 69 6e 74 6f 20 4f 50 5f 4f 70 65 6e 52 65 61 64  into OP_OpenRead
1f740 20 74 6f 20 66 6f 72 63 65 20 61 20 72 65 6f 70   to force a reop
1f750 65 6e 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 4f 70  en */.case OP_Op
1f760 65 6e 52 65 61 64 3a 0a 63 61 73 65 20 4f 50 5f  enRead:.case OP_
1f770 4f 70 65 6e 57 72 69 74 65 3a 0a 0a 20 20 61 73  OpenWrite:..  as
1f780 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64  sert( pOp->opcod
1f790 65 3d 3d 4f 50 5f 4f 70 65 6e 57 72 69 74 65 20  e==OP_OpenWrite 
1f7a0 7c 7c 20 70 4f 70 2d 3e 70 35 3d 3d 30 20 7c 7c  || pOp->p5==0 ||
1f7b0 20 70 4f 70 2d 3e 70 35 3d 3d 4f 50 46 4c 41 47   pOp->p5==OPFLAG
1f7c0 5f 53 45 45 4b 45 51 20 29 3b 0a 20 20 61 73 73  _SEEKEQ );.  ass
1f7d0 65 72 74 28 20 70 2d 3e 62 49 73 52 65 61 64 65  ert( p->bIsReade
1f7e0 72 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  r );.  assert( p
1f7f0 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4f  Op->opcode==OP_O
1f800 70 65 6e 52 65 61 64 20 7c 7c 20 70 4f 70 2d 3e  penRead || pOp->
1f810 6f 70 63 6f 64 65 3d 3d 4f 50 5f 52 65 6f 70 65  opcode==OP_Reope
1f820 6e 49 64 78 0a 20 20 20 20 20 20 20 20 20 20 7c  nIdx.          |
1f830 7c 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30  | p->readOnly==0
1f840 20 29 3b 0a 0a 20 20 69 66 28 20 70 2d 3e 65 78   );..  if( p->ex
1f850 70 69 72 65 64 3d 3d 31 20 29 7b 0a 20 20 20 20  pired==1 ){.    
1f860 72 63 20 3d 20 53 51 4c 49 54 45 5f 41 42 4f 52  rc = SQLITE_ABOR
1f870 54 5f 52 4f 4c 4c 42 41 43 4b 3b 0a 20 20 20 20  T_ROLLBACK;.    
1f880 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
1f890 6f 5f 65 72 72 6f 72 3b 0a 20 20 7d 0a 0a 20 20  o_error;.  }..  
1f8a0 6e 46 69 65 6c 64 20 3d 20 30 3b 0a 20 20 70 4b  nField = 0;.  pK
1f8b0 65 79 49 6e 66 6f 20 3d 20 30 3b 0a 20 20 70 32  eyInfo = 0;.  p2
1f8c0 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 69 44   = pOp->p2;.  iD
1f8d0 62 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 61  b = pOp->p3;.  a
1f8e0 73 73 65 72 74 28 20 69 44 62 3e 3d 30 20 26 26  ssert( iDb>=0 &&
1f8f0 20 69 44 62 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a   iDb<db->nDb );.
1f900 20 20 61 73 73 65 72 74 28 20 44 62 4d 61 73 6b    assert( DbMask
1f910 54 65 73 74 28 70 2d 3e 62 74 72 65 65 4d 61 73  Test(p->btreeMas
1f920 6b 2c 20 69 44 62 29 20 29 3b 0a 20 20 70 44 62  k, iDb) );.  pDb
1f930 20 3d 20 26 64 62 2d 3e 61 44 62 5b 69 44 62 5d   = &db->aDb[iDb]
1f940 3b 0a 20 20 70 58 20 3d 20 70 44 62 2d 3e 70 42  ;.  pX = pDb->pB
1f950 74 3b 0a 20 20 61 73 73 65 72 74 28 20 70 58 21  t;.  assert( pX!
1f960 3d 30 20 29 3b 0a 20 20 69 66 28 20 70 4f 70 2d  =0 );.  if( pOp-
1f970 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4f 70 65 6e  >opcode==OP_Open
1f980 57 72 69 74 65 20 29 7b 0a 20 20 20 20 61 73 73  Write ){.    ass
1f990 65 72 74 28 20 4f 50 46 4c 41 47 5f 46 4f 52 44  ert( OPFLAG_FORD
1f9a0 45 4c 45 54 45 3d 3d 42 54 52 45 45 5f 46 4f 52  ELETE==BTREE_FOR
1f9b0 44 45 4c 45 54 45 20 29 3b 0a 20 20 20 20 77 72  DELETE );.    wr
1f9c0 46 6c 61 67 20 3d 20 42 54 52 45 45 5f 57 52 43  Flag = BTREE_WRC
1f9d0 53 52 20 7c 20 28 70 4f 70 2d 3e 70 35 20 26 20  SR | (pOp->p5 & 
1f9e0 4f 50 46 4c 41 47 5f 46 4f 52 44 45 4c 45 54 45  OPFLAG_FORDELETE
1f9f0 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 73  );.    assert( s
1fa00 71 6c 69 74 65 33 53 63 68 65 6d 61 4d 75 74 65  qlite3SchemaMute
1fa10 78 48 65 6c 64 28 64 62 2c 20 69 44 62 2c 20 30  xHeld(db, iDb, 0
1fa20 29 20 29 3b 0a 20 20 20 20 69 66 28 20 70 44 62  ) );.    if( pDb
1fa30 2d 3e 70 53 63 68 65 6d 61 2d 3e 66 69 6c 65 5f  ->pSchema->file_
1fa40 66 6f 72 6d 61 74 20 3c 20 70 2d 3e 6d 69 6e 57  format < p->minW
1fa50 72 69 74 65 46 69 6c 65 46 6f 72 6d 61 74 20 29  riteFileFormat )
1fa60 7b 0a 20 20 20 20 20 20 70 2d 3e 6d 69 6e 57 72  {.      p->minWr
1fa70 69 74 65 46 69 6c 65 46 6f 72 6d 61 74 20 3d 20  iteFileFormat = 
1fa80 70 44 62 2d 3e 70 53 63 68 65 6d 61 2d 3e 66 69  pDb->pSchema->fi
1fa90 6c 65 5f 66 6f 72 6d 61 74 3b 0a 20 20 20 20 7d  le_format;.    }
1faa0 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 77 72  .  }else{.    wr
1fab0 46 6c 61 67 20 3d 20 30 3b 0a 20 20 7d 0a 20 20  Flag = 0;.  }.  
1fac0 69 66 28 20 70 4f 70 2d 3e 70 35 20 26 20 4f 50  if( pOp->p5 & OP
1fad0 46 4c 41 47 5f 50 32 49 53 52 45 47 20 29 7b 0a  FLAG_P2ISREG ){.
1fae0 20 20 20 20 61 73 73 65 72 74 28 20 70 32 3e 30      assert( p2>0
1faf0 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20   );.    assert( 
1fb00 70 32 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d  p2<=(p->nMem+1 -
1fb10 20 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a   p->nCursor) );.
1fb20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d      assert( pOp-
1fb30 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4f 70 65 6e  >opcode==OP_Open
1fb40 57 72 69 74 65 20 29 3b 0a 20 20 20 20 70 49 6e  Write );.    pIn
1fb50 32 20 3d 20 26 61 4d 65 6d 5b 70 32 5d 3b 0a 20  2 = &aMem[p2];. 
1fb60 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73     assert( memIs
1fb70 56 61 6c 69 64 28 70 49 6e 32 29 20 29 3b 0a 20  Valid(pIn2) );. 
1fb80 20 20 20 61 73 73 65 72 74 28 20 28 70 49 6e 32     assert( (pIn2
1fb90 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e  ->flags & MEM_In
1fba0 74 29 21 3d 30 20 29 3b 0a 20 20 20 20 73 71 6c  t)!=0 );.    sql
1fbb0 69 74 65 33 56 64 62 65 4d 65 6d 49 6e 74 65 67  ite3VdbeMemInteg
1fbc0 65 72 69 66 79 28 70 49 6e 32 29 3b 0a 20 20 20  erify(pIn2);.   
1fbd0 20 70 32 20 3d 20 28 69 6e 74 29 70 49 6e 32 2d   p2 = (int)pIn2-
1fbe0 3e 75 2e 69 3b 0a 20 20 20 20 2f 2a 20 54 68 65  >u.i;.    /* The
1fbf0 20 70 32 20 76 61 6c 75 65 20 61 6c 77 61 79 73   p2 value always
1fc00 20 63 6f 6d 65 73 20 66 72 6f 6d 20 61 20 70 72   comes from a pr
1fc10 69 6f 72 20 4f 50 5f 43 72 65 61 74 65 42 74 72  ior OP_CreateBtr
1fc20 65 65 20 6f 70 63 6f 64 65 20 61 6e 64 0a 20 20  ee opcode and.  
1fc30 20 20 2a 2a 20 74 68 61 74 20 6f 70 63 6f 64 65    ** that opcode
1fc40 20 77 69 6c 6c 20 61 6c 77 61 79 73 20 73 65 74   will always set
1fc50 20 74 68 65 20 70 32 20 76 61 6c 75 65 20 74 6f   the p2 value to
1fc60 20 32 20 6f 72 20 6d 6f 72 65 20 6f 72 20 65 6c   2 or more or el
1fc70 73 65 20 66 61 69 6c 2e 0a 20 20 20 20 2a 2a 20  se fail..    ** 
1fc80 49 66 20 74 68 65 72 65 20 77 65 72 65 20 61 20  If there were a 
1fc90 66 61 69 6c 75 72 65 2c 20 74 68 65 20 70 72 65  failure, the pre
1fca0 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74 20  pared statement 
1fcb0 77 6f 75 6c 64 20 68 61 76 65 20 68 61 6c 74 65  would have halte
1fcc0 64 0a 20 20 20 20 2a 2a 20 62 65 66 6f 72 65 20  d.    ** before 
1fcd0 72 65 61 63 68 69 6e 67 20 74 68 69 73 20 69 6e  reaching this in
1fce0 73 74 72 75 63 74 69 6f 6e 2e 20 2a 2f 0a 20 20  struction. */.  
1fcf0 20 20 61 73 73 65 72 74 28 20 70 32 3e 3d 32 20    assert( p2>=2 
1fd00 29 3b 0a 20 20 7d 0a 20 20 69 66 28 20 70 4f 70  );.  }.  if( pOp
1fd10 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 4b 45 59  ->p4type==P4_KEY
1fd20 49 4e 46 4f 20 29 7b 0a 20 20 20 20 70 4b 65 79  INFO ){.    pKey
1fd30 49 6e 66 6f 20 3d 20 70 4f 70 2d 3e 70 34 2e 70  Info = pOp->p4.p
1fd40 4b 65 79 49 6e 66 6f 3b 0a 20 20 20 20 61 73 73  KeyInfo;.    ass
1fd50 65 72 74 28 20 70 4b 65 79 49 6e 66 6f 2d 3e 65  ert( pKeyInfo->e
1fd60 6e 63 3d 3d 45 4e 43 28 64 62 29 20 29 3b 0a 20  nc==ENC(db) );. 
1fd70 20 20 20 61 73 73 65 72 74 28 20 70 4b 65 79 49     assert( pKeyI
1fd80 6e 66 6f 2d 3e 64 62 3d 3d 64 62 20 29 3b 0a 20  nfo->db==db );. 
1fd90 20 20 20 6e 46 69 65 6c 64 20 3d 20 70 4b 65 79     nField = pKey
1fda0 49 6e 66 6f 2d 3e 6e 41 6c 6c 46 69 65 6c 64 3b  Info->nAllField;
1fdb0 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 70 4f 70  .  }else if( pOp
1fdc0 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54  ->p4type==P4_INT
1fdd0 33 32 20 29 7b 0a 20 20 20 20 6e 46 69 65 6c 64  32 ){.    nField
1fde0 20 3d 20 70 4f 70 2d 3e 70 34 2e 69 3b 0a 20 20   = pOp->p4.i;.  
1fdf0 7d 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  }.  assert( pOp-
1fe00 3e 70 31 3e 3d 30 20 29 3b 0a 20 20 61 73 73 65  >p1>=0 );.  asse
1fe10 72 74 28 20 6e 46 69 65 6c 64 3e 3d 30 20 29 3b  rt( nField>=0 );
1fe20 0a 20 20 74 65 73 74 63 61 73 65 28 20 6e 46 69  .  testcase( nFi
1fe30 65 6c 64 3d 3d 30 20 29 3b 20 20 2f 2a 20 54 61  eld==0 );  /* Ta
1fe40 62 6c 65 20 77 69 74 68 20 49 4e 54 45 47 45 52  ble with INTEGER
1fe50 20 50 52 49 4d 41 52 59 20 4b 45 59 20 61 6e 64   PRIMARY KEY and
1fe60 20 6e 6f 74 68 69 6e 67 20 65 6c 73 65 20 2a 2f   nothing else */
1fe70 0a 20 20 70 43 75 72 20 3d 20 61 6c 6c 6f 63 61  .  pCur = alloca
1fe80 74 65 43 75 72 73 6f 72 28 70 2c 20 70 4f 70 2d  teCursor(p, pOp-
1fe90 3e 70 31 2c 20 6e 46 69 65 6c 64 2c 20 69 44 62  >p1, nField, iDb
1fea0 2c 20 43 55 52 54 59 50 45 5f 42 54 52 45 45 29  , CURTYPE_BTREE)
1feb0 3b 0a 20 20 69 66 28 20 70 43 75 72 3d 3d 30 20  ;.  if( pCur==0 
1fec0 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20  ) goto no_mem;. 
1fed0 20 70 43 75 72 2d 3e 6e 75 6c 6c 52 6f 77 20 3d   pCur->nullRow =
1fee0 20 31 3b 0a 20 20 70 43 75 72 2d 3e 69 73 4f 72   1;.  pCur->isOr
1fef0 64 65 72 65 64 20 3d 20 31 3b 0a 20 20 70 43 75  dered = 1;.  pCu
1ff00 72 2d 3e 70 67 6e 6f 52 6f 6f 74 20 3d 20 70 32  r->pgnoRoot = p2
1ff10 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ;.#ifdef SQLITE_
1ff20 44 45 42 55 47 0a 20 20 70 43 75 72 2d 3e 77 72  DEBUG.  pCur->wr
1ff30 46 6c 61 67 20 3d 20 77 72 46 6c 61 67 3b 0a 23  Flag = wrFlag;.#
1ff40 65 6e 64 69 66 0a 20 20 72 63 20 3d 20 73 71 6c  endif.  rc = sql
1ff50 69 74 65 33 42 74 72 65 65 43 75 72 73 6f 72 28  ite3BtreeCursor(
1ff60 70 58 2c 20 70 32 2c 20 77 72 46 6c 61 67 2c 20  pX, p2, wrFlag, 
1ff70 70 4b 65 79 49 6e 66 6f 2c 20 70 43 75 72 2d 3e  pKeyInfo, pCur->
1ff80 75 63 2e 70 43 75 72 73 6f 72 29 3b 0a 20 20 70  uc.pCursor);.  p
1ff90 43 75 72 2d 3e 70 4b 65 79 49 6e 66 6f 20 3d 20  Cur->pKeyInfo = 
1ffa0 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 2f 2a 20 53  pKeyInfo;.  /* S
1ffb0 65 74 20 74 68 65 20 56 64 62 65 43 75 72 73 6f  et the VdbeCurso
1ffc0 72 2e 69 73 54 61 62 6c 65 20 76 61 72 69 61 62  r.isTable variab
1ffd0 6c 65 2e 20 50 72 65 76 69 6f 75 73 20 76 65 72  le. Previous ver
1ffe0 73 69 6f 6e 73 20 6f 66 0a 20 20 2a 2a 20 53 51  sions of.  ** SQ
1fff0 4c 69 74 65 20 75 73 65 64 20 74 6f 20 63 68 65  Lite used to che
20000 63 6b 20 69 66 20 74 68 65 20 72 6f 6f 74 2d 70  ck if the root-p
20010 61 67 65 20 66 6c 61 67 73 20 77 65 72 65 20 73  age flags were s
20020 61 6e 65 20 61 74 20 74 68 69 73 20 70 6f 69 6e  ane at this poin
20030 74 0a 20 20 2a 2a 20 61 6e 64 20 72 65 70 6f 72  t.  ** and repor
20040 74 20 64 61 74 61 62 61 73 65 20 63 6f 72 72 75  t database corru
20050 70 74 69 6f 6e 20 69 66 20 74 68 65 79 20 77 65  ption if they we
20060 72 65 20 6e 6f 74 2c 20 62 75 74 20 74 68 69 73  re not, but this
20070 20 63 68 65 63 6b 20 68 61 73 0a 20 20 2a 2a 20   check has.  ** 
20080 73 69 6e 63 65 20 6d 6f 76 65 64 20 69 6e 74 6f  since moved into
20090 20 74 68 65 20 62 74 72 65 65 20 6c 61 79 65 72   the btree layer
200a0 2e 20 20 2a 2f 20 20 0a 20 20 70 43 75 72 2d 3e  .  */  .  pCur->
200b0 69 73 54 61 62 6c 65 20 3d 20 70 4f 70 2d 3e 70  isTable = pOp->p
200c0 34 74 79 70 65 21 3d 50 34 5f 4b 45 59 49 4e 46  4type!=P4_KEYINF
200d0 4f 3b 0a 0a 6f 70 65 6e 5f 63 75 72 73 6f 72 5f  O;..open_cursor_
200e0 73 65 74 5f 68 69 6e 74 73 3a 0a 20 20 61 73 73  set_hints:.  ass
200f0 65 72 74 28 20 4f 50 46 4c 41 47 5f 42 55 4c 4b  ert( OPFLAG_BULK
20100 43 53 52 3d 3d 42 54 52 45 45 5f 42 55 4c 4b 4c  CSR==BTREE_BULKL
20110 4f 41 44 20 29 3b 0a 20 20 61 73 73 65 72 74 28  OAD );.  assert(
20120 20 4f 50 46 4c 41 47 5f 53 45 45 4b 45 51 3d 3d   OPFLAG_SEEKEQ==
20130 42 54 52 45 45 5f 53 45 45 4b 5f 45 51 20 29 3b  BTREE_SEEK_EQ );
20140 0a 20 20 74 65 73 74 63 61 73 65 28 20 70 4f 70  .  testcase( pOp
20150 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 42 55  ->p5 & OPFLAG_BU
20160 4c 4b 43 53 52 20 29 3b 0a 23 69 66 64 65 66 20  LKCSR );.#ifdef 
20170 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 43 55  SQLITE_ENABLE_CU
20180 52 53 4f 52 5f 48 49 4e 54 53 0a 20 20 74 65 73  RSOR_HINTS.  tes
20190 74 63 61 73 65 28 20 70 4f 70 2d 3e 70 32 20 26  tcase( pOp->p2 &
201a0 20 4f 50 46 4c 41 47 5f 53 45 45 4b 45 51 20 29   OPFLAG_SEEKEQ )
201b0 3b 0a 23 65 6e 64 69 66 0a 20 20 73 71 6c 69 74  ;.#endif.  sqlit
201c0 65 33 42 74 72 65 65 43 75 72 73 6f 72 48 69 6e  e3BtreeCursorHin
201d0 74 46 6c 61 67 73 28 70 43 75 72 2d 3e 75 63 2e  tFlags(pCur->uc.
201e0 70 43 75 72 73 6f 72 2c 0a 20 20 20 20 20 20 20  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 28 70 4f 70 2d 3e 70 35          (pOp->p5
20210 20 26 20 28 4f 50 46 4c 41 47 5f 42 55 4c 4b 43   & (OPFLAG_BULKC
20220 53 52 7c 4f 50 46 4c 41 47 5f 53 45 45 4b 45 51  SR|OPFLAG_SEEKEQ
20230 29 29 29 3b 0a 20 20 69 66 28 20 72 63 20 29 20  )));.  if( rc ) 
20240 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
20250 6f 5f 65 72 72 6f 72 3b 0a 20 20 62 72 65 61 6b  o_error;.  break
20260 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
20270 4f 70 65 6e 44 75 70 20 50 31 20 50 32 20 2a 20  OpenDup P1 P2 * 
20280 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e 20 61  * *.**.** Open a
20290 20 6e 65 77 20 63 75 72 73 6f 72 20 50 31 20 74   new cursor P1 t
202a0 68 61 74 20 70 6f 69 6e 74 73 20 74 6f 20 74 68  hat points to th
202b0 65 20 73 61 6d 65 20 65 70 68 65 6d 65 72 61 6c  e same ephemeral
202c0 20 74 61 62 6c 65 20 61 73 0a 2a 2a 20 63 75 72   table as.** cur
202d0 73 6f 72 20 50 32 2e 20 20 54 68 65 20 50 32 20  sor P2.  The P2 
202e0 63 75 72 73 6f 72 20 6d 75 73 74 20 68 61 76 65  cursor must have
202f0 20 62 65 65 6e 20 6f 70 65 6e 65 64 20 62 79 20   been opened by 
20300 61 20 70 72 69 6f 72 20 4f 50 5f 4f 70 65 6e 45  a prior OP_OpenE
20310 70 68 65 6d 65 72 61 6c 0a 2a 2a 20 6f 70 63 6f  phemeral.** opco
20320 64 65 2e 20 20 4f 6e 6c 79 20 65 70 68 65 6d 65  de.  Only epheme
20330 72 61 6c 20 63 75 72 73 6f 72 73 20 6d 61 79 20  ral cursors may 
20340 62 65 20 64 75 70 6c 69 63 61 74 65 64 2e 0a 2a  be duplicated..*
20350 2a 0a 2a 2a 20 44 75 70 6c 69 63 61 74 65 20 65  *.** Duplicate e
20360 70 68 65 6d 65 72 61 6c 20 63 75 72 73 6f 72 73  phemeral cursors
20370 20 61 72 65 20 75 73 65 64 20 66 6f 72 20 73 65   are used for se
20380 6c 66 2d 6a 6f 69 6e 73 20 6f 66 20 6d 61 74 65  lf-joins of mate
20390 72 69 61 6c 69 7a 65 64 20 76 69 65 77 73 2e 0a  rialized views..
203a0 2a 2f 0a 63 61 73 65 20 4f 50 5f 4f 70 65 6e 44  */.case OP_OpenD
203b0 75 70 3a 20 7b 0a 20 20 56 64 62 65 43 75 72 73  up: {.  VdbeCurs
203c0 6f 72 20 2a 70 4f 72 69 67 3b 20 20 20 20 2f 2a  or *pOrig;    /*
203d0 20 54 68 65 20 6f 72 69 67 69 6e 61 6c 20 63 75   The original cu
203e0 72 73 6f 72 20 74 6f 20 62 65 20 64 75 70 6c 69  rsor to be dupli
203f0 63 61 74 65 64 20 2a 2f 0a 20 20 56 64 62 65 43  cated */.  VdbeC
20400 75 72 73 6f 72 20 2a 70 43 78 3b 20 20 20 20 20  ursor *pCx;     
20410 20 2f 2a 20 54 68 65 20 6e 65 77 20 63 75 72 73   /* The new curs
20420 6f 72 20 2a 2f 0a 0a 20 20 70 4f 72 69 67 20 3d  or */..  pOrig =
20430 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70   p->apCsr[pOp->p
20440 32 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f  2];.  assert( pO
20450 72 69 67 2d 3e 70 42 74 78 21 3d 30 20 29 3b 20  rig->pBtx!=0 ); 
20460 20 2f 2a 20 4f 6e 6c 79 20 65 70 68 65 6d 65 72   /* Only ephemer
20470 61 6c 20 63 75 72 73 6f 72 73 20 63 61 6e 20 62  al cursors can b
20480 65 20 64 75 70 6c 69 63 61 74 65 64 20 2a 2f 0a  e duplicated */.
20490 0a 20 20 70 43 78 20 3d 20 61 6c 6c 6f 63 61 74  .  pCx = allocat
204a0 65 43 75 72 73 6f 72 28 70 2c 20 70 4f 70 2d 3e  eCursor(p, pOp->
204b0 70 31 2c 20 70 4f 72 69 67 2d 3e 6e 46 69 65 6c  p1, pOrig->nFiel
204c0 64 2c 20 2d 31 2c 20 43 55 52 54 59 50 45 5f 42  d, -1, CURTYPE_B
204d0 54 52 45 45 29 3b 0a 20 20 69 66 28 20 70 43 78  TREE);.  if( pCx
204e0 3d 3d 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65  ==0 ) goto no_me
204f0 6d 3b 0a 20 20 70 43 78 2d 3e 6e 75 6c 6c 52 6f  m;.  pCx->nullRo
20500 77 20 3d 20 31 3b 0a 20 20 70 43 78 2d 3e 69 73  w = 1;.  pCx->is
20510 45 70 68 65 6d 65 72 61 6c 20 3d 20 31 3b 0a 20  Ephemeral = 1;. 
20520 20 70 43 78 2d 3e 70 4b 65 79 49 6e 66 6f 20 3d   pCx->pKeyInfo =
20530 20 70 4f 72 69 67 2d 3e 70 4b 65 79 49 6e 66 6f   pOrig->pKeyInfo
20540 3b 0a 20 20 70 43 78 2d 3e 69 73 54 61 62 6c 65  ;.  pCx->isTable
20550 20 3d 20 70 4f 72 69 67 2d 3e 69 73 54 61 62 6c   = pOrig->isTabl
20560 65 3b 0a 20 20 70 43 78 2d 3e 70 67 6e 6f 52 6f  e;.  pCx->pgnoRo
20570 6f 74 20 3d 20 70 4f 72 69 67 2d 3e 70 67 6e 6f  ot = pOrig->pgno
20580 52 6f 6f 74 3b 0a 20 20 70 43 78 2d 3e 69 73 4f  Root;.  pCx->isO
20590 72 64 65 72 65 64 20 3d 20 70 4f 72 69 67 2d 3e  rdered = pOrig->
205a0 69 73 4f 72 64 65 72 65 64 3b 0a 20 20 72 63 20  isOrdered;.  rc 
205b0 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 75  = sqlite3BtreeCu
205c0 72 73 6f 72 28 70 4f 72 69 67 2d 3e 70 42 74 78  rsor(pOrig->pBtx
205d0 2c 20 70 43 78 2d 3e 70 67 6e 6f 52 6f 6f 74 2c  , pCx->pgnoRoot,
205e0 20 42 54 52 45 45 5f 57 52 43 53 52 2c 0a 20 20   BTREE_WRCSR,.  
205f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20600 20 20 20 20 20 20 20 20 70 43 78 2d 3e 70 4b 65          pCx->pKe
20610 79 49 6e 66 6f 2c 20 70 43 78 2d 3e 75 63 2e 70  yInfo, pCx->uc.p
20620 43 75 72 73 6f 72 29 3b 0a 20 20 2f 2a 20 54 68  Cursor);.  /* Th
20630 65 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 75  e sqlite3BtreeCu
20640 72 73 6f 72 28 29 20 72 6f 75 74 69 6e 65 20 63  rsor() routine c
20650 61 6e 20 6f 6e 6c 79 20 66 61 69 6c 20 66 6f 72  an only fail for
20660 20 74 68 65 20 66 69 72 73 74 20 63 75 72 73 6f   the first curso
20670 72 0a 20 20 2a 2a 20 6f 70 65 6e 65 64 20 66 6f  r.  ** opened fo
20680 72 20 61 20 64 61 74 61 62 61 73 65 2e 20 20 53  r a database.  S
20690 69 6e 63 65 20 74 68 65 72 65 20 69 73 20 61 6c  ince there is al
206a0 72 65 61 64 79 20 61 6e 20 6f 70 65 6e 20 63 75  ready an open cu
206b0 72 73 6f 72 20 77 68 65 6e 20 74 68 69 73 0a 20  rsor when this. 
206c0 20 2a 2a 20 6f 70 63 6f 64 65 20 69 73 20 72 75   ** opcode is ru
206d0 6e 2c 20 74 68 65 20 73 71 6c 69 74 65 33 42 74  n, the sqlite3Bt
206e0 72 65 65 43 75 72 73 6f 72 28 29 20 63 61 6e 6e  reeCursor() cann
206f0 6f 74 20 66 61 69 6c 20 2a 2f 0a 20 20 61 73 73  ot fail */.  ass
20700 65 72 74 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f  ert( rc==SQLITE_
20710 4f 4b 20 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  OK );.  break;.}
20720 0a 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f 70  .../* Opcode: Op
20730 65 6e 45 70 68 65 6d 65 72 61 6c 20 50 31 20 50  enEphemeral P1 P
20740 32 20 2a 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e  2 * P4 P5.** Syn
20750 6f 70 73 69 73 3a 20 6e 43 6f 6c 75 6d 6e 3d 50  opsis: nColumn=P
20760 32 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e 20 61 20 6e  2.**.** Open a n
20770 65 77 20 63 75 72 73 6f 72 20 50 31 20 74 6f 20  ew cursor P1 to 
20780 61 20 74 72 61 6e 73 69 65 6e 74 20 74 61 62 6c  a transient tabl
20790 65 2e 0a 2a 2a 20 54 68 65 20 63 75 72 73 6f 72  e..** The cursor
207a0 20 69 73 20 61 6c 77 61 79 73 20 6f 70 65 6e 65   is always opene
207b0 64 20 72 65 61 64 2f 77 72 69 74 65 20 65 76 65  d read/write eve
207c0 6e 20 69 66 20 0a 2a 2a 20 74 68 65 20 6d 61 69  n if .** the mai
207d0 6e 20 64 61 74 61 62 61 73 65 20 69 73 20 72 65  n database is re
207e0 61 64 2d 6f 6e 6c 79 2e 20 20 54 68 65 20 65 70  ad-only.  The ep
207f0 68 65 6d 65 72 61 6c 0a 2a 2a 20 74 61 62 6c 65  hemeral.** table
20800 20 69 73 20 64 65 6c 65 74 65 64 20 61 75 74 6f   is deleted auto
20810 6d 61 74 69 63 61 6c 6c 79 20 77 68 65 6e 20 74  matically when t
20820 68 65 20 63 75 72 73 6f 72 20 69 73 20 63 6c 6f  he cursor is clo
20830 73 65 64 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68  sed..**.** If th
20840 65 20 63 75 72 73 6f 72 20 50 31 20 69 73 20 61  e cursor P1 is a
20850 6c 72 65 61 64 79 20 6f 70 65 6e 65 64 20 6f 6e  lready opened on
20860 20 61 6e 20 65 70 68 65 6d 65 72 61 6c 20 74 61   an ephemeral ta
20870 62 6c 65 2c 20 74 68 65 20 74 61 62 6c 65 0a 2a  ble, the table.*
20880 2a 20 69 73 20 63 6c 65 61 72 65 64 20 28 61 6c  * is cleared (al
20890 6c 20 63 6f 6e 74 65 6e 74 20 69 73 20 65 72 61  l content is era
208a0 73 65 64 29 2e 0a 2a 2a 0a 2a 2a 20 50 32 20 69  sed)..**.** P2 i
208b0 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  s the number of 
208c0 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 65  columns in the e
208d0 70 68 65 6d 65 72 61 6c 20 74 61 62 6c 65 2e 0a  phemeral table..
208e0 2a 2a 20 54 68 65 20 63 75 72 73 6f 72 20 70 6f  ** The cursor po
208f0 69 6e 74 73 20 74 6f 20 61 20 42 54 72 65 65 20  ints to a BTree 
20900 74 61 62 6c 65 20 69 66 20 50 34 3d 3d 30 20 61  table if P4==0 a
20910 6e 64 20 74 6f 20 61 20 42 54 72 65 65 20 69 6e  nd to a BTree in
20920 64 65 78 0a 2a 2a 20 69 66 20 50 34 20 69 73 20  dex.** if P4 is 
20930 6e 6f 74 20 30 2e 20 20 49 66 20 50 34 20 69 73  not 0.  If P4 is
20940 20 6e 6f 74 20 4e 55 4c 4c 2c 20 69 74 20 70 6f   not NULL, it po
20950 69 6e 74 73 20 74 6f 20 61 20 4b 65 79 49 6e 66  ints to a KeyInf
20960 6f 20 73 74 72 75 63 74 75 72 65 0a 2a 2a 20 74  o structure.** t
20970 68 61 74 20 64 65 66 69 6e 65 73 20 74 68 65 20  hat defines the 
20980 66 6f 72 6d 61 74 20 6f 66 20 6b 65 79 73 20 69  format of keys i
20990 6e 20 74 68 65 20 69 6e 64 65 78 2e 0a 2a 2a 0a  n the index..**.
209a0 2a 2a 20 54 68 65 20 50 35 20 70 61 72 61 6d 65  ** The P5 parame
209b0 74 65 72 20 63 61 6e 20 62 65 20 61 20 6d 61 73  ter can be a mas
209c0 6b 20 6f 66 20 74 68 65 20 42 54 52 45 45 5f 2a  k of the BTREE_*
209d0 20 66 6c 61 67 73 20 64 65 66 69 6e 65 64 0a 2a   flags defined.*
209e0 2a 20 69 6e 20 62 74 72 65 65 2e 68 2e 20 20 54  * in btree.h.  T
209f0 68 65 73 65 20 66 6c 61 67 73 20 63 6f 6e 74 72  hese flags contr
20a00 6f 6c 20 61 73 70 65 63 74 73 20 6f 66 20 74 68  ol aspects of th
20a10 65 20 6f 70 65 72 61 74 69 6f 6e 20 6f 66 0a 2a  e operation of.*
20a20 2a 20 74 68 65 20 62 74 72 65 65 2e 20 20 54 68  * the btree.  Th
20a30 65 20 42 54 52 45 45 5f 4f 4d 49 54 5f 4a 4f 55  e BTREE_OMIT_JOU
20a40 52 4e 41 4c 20 61 6e 64 20 42 54 52 45 45 5f 53  RNAL and BTREE_S
20a50 49 4e 47 4c 45 20 66 6c 61 67 73 20 61 72 65 0a  INGLE flags are.
20a60 2a 2a 20 61 64 64 65 64 20 61 75 74 6f 6d 61 74  ** added automat
20a70 69 63 61 6c 6c 79 2e 0a 2a 2f 0a 2f 2a 20 4f 70  ically..*/./* Op
20a80 63 6f 64 65 3a 20 4f 70 65 6e 41 75 74 6f 69 6e  code: OpenAutoin
20a90 64 65 78 20 50 31 20 50 32 20 2a 20 50 34 20 2a  dex P1 P2 * P4 *
20aa0 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6e 43  .** Synopsis: nC
20ab0 6f 6c 75 6d 6e 3d 50 32 0a 2a 2a 0a 2a 2a 20 54  olumn=P2.**.** T
20ac0 68 69 73 20 6f 70 63 6f 64 65 20 77 6f 72 6b 73  his opcode works
20ad0 20 74 68 65 20 73 61 6d 65 20 61 73 20 4f 50 5f   the same as OP_
20ae0 4f 70 65 6e 45 70 68 65 6d 65 72 61 6c 2e 20 20  OpenEphemeral.  
20af0 49 74 20 68 61 73 20 61 0a 2a 2a 20 64 69 66 66  It has a.** diff
20b00 65 72 65 6e 74 20 6e 61 6d 65 20 74 6f 20 64 69  erent name to di
20b10 73 74 69 6e 67 75 69 73 68 20 69 74 73 20 75 73  stinguish its us
20b20 65 2e 20 20 54 61 62 6c 65 73 20 63 72 65 61 74  e.  Tables creat
20b30 65 64 20 75 73 69 6e 67 0a 2a 2a 20 62 79 20 74  ed using.** by t
20b40 68 69 73 20 6f 70 63 6f 64 65 20 77 69 6c 6c 20  his opcode will 
20b50 62 65 20 75 73 65 64 20 66 6f 72 20 61 75 74 6f  be used for auto
20b60 6d 61 74 69 63 61 6c 6c 79 20 63 72 65 61 74 65  matically create
20b70 64 20 74 72 61 6e 73 69 65 6e 74 0a 2a 2a 20 69  d transient.** i
20b80 6e 64 69 63 65 73 20 69 6e 20 6a 6f 69 6e 73 2e  ndices in joins.
20b90 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4f 70 65 6e  .*/.case OP_Open
20ba0 41 75 74 6f 69 6e 64 65 78 3a 20 0a 63 61 73 65  Autoindex: .case
20bb0 20 4f 50 5f 4f 70 65 6e 45 70 68 65 6d 65 72 61   OP_OpenEphemera
20bc0 6c 3a 20 7b 0a 20 20 56 64 62 65 43 75 72 73 6f  l: {.  VdbeCurso
20bd0 72 20 2a 70 43 78 3b 0a 20 20 4b 65 79 49 6e 66  r *pCx;.  KeyInf
20be0 6f 20 2a 70 4b 65 79 49 6e 66 6f 3b 0a 0a 20 20  o *pKeyInfo;..  
20bf0 73 74 61 74 69 63 20 63 6f 6e 73 74 20 69 6e 74  static const int
20c00 20 76 66 73 46 6c 61 67 73 20 3d 20 0a 20 20 20   vfsFlags = .   
20c10 20 20 20 53 51 4c 49 54 45 5f 4f 50 45 4e 5f 52     SQLITE_OPEN_R
20c20 45 41 44 57 52 49 54 45 20 7c 0a 20 20 20 20 20  EADWRITE |.     
20c30 20 53 51 4c 49 54 45 5f 4f 50 45 4e 5f 43 52 45   SQLITE_OPEN_CRE
20c40 41 54 45 20 7c 0a 20 20 20 20 20 20 53 51 4c 49  ATE |.      SQLI
20c50 54 45 5f 4f 50 45 4e 5f 45 58 43 4c 55 53 49 56  TE_OPEN_EXCLUSIV
20c60 45 20 7c 0a 20 20 20 20 20 20 53 51 4c 49 54 45  E |.      SQLITE
20c70 5f 4f 50 45 4e 5f 44 45 4c 45 54 45 4f 4e 43 4c  _OPEN_DELETEONCL
20c80 4f 53 45 20 7c 0a 20 20 20 20 20 20 53 51 4c 49  OSE |.      SQLI
20c90 54 45 5f 4f 50 45 4e 5f 54 52 41 4e 53 49 45 4e  TE_OPEN_TRANSIEN
20ca0 54 5f 44 42 3b 0a 20 20 61 73 73 65 72 74 28 20  T_DB;.  assert( 
20cb0 70 4f 70 2d 3e 70 31 3e 3d 30 20 29 3b 0a 20 20  pOp->p1>=0 );.  
20cc0 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e  assert( pOp->p2>
20cd0 3d 30 20 29 3b 0a 20 20 70 43 78 20 3d 20 70 2d  =0 );.  pCx = p-
20ce0 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b  >apCsr[pOp->p1];
20cf0 0a 20 20 69 66 28 20 70 43 78 20 29 7b 0a 20 20  .  if( pCx ){.  
20d00 20 20 2f 2a 20 49 66 20 74 68 65 20 65 70 68 65    /* If the ephe
20d10 72 6d 65 72 61 6c 20 74 61 62 6c 65 20 69 73 20  rmeral table is 
20d20 61 6c 72 65 61 64 79 20 6f 70 65 6e 2c 20 65 72  already open, er
20d30 61 73 65 20 61 6c 6c 20 65 78 69 73 74 69 6e 67  ase all existing
20d40 20 63 6f 6e 74 65 6e 74 0a 20 20 20 20 2a 2a 20   content.    ** 
20d50 73 6f 20 74 68 61 74 20 74 68 65 20 74 61 62 6c  so that the tabl
20d60 65 20 69 73 20 65 6d 70 74 79 20 61 67 61 69 6e  e is empty again
20d70 2c 20 72 61 74 68 65 72 20 74 68 61 6e 20 63 72  , rather than cr
20d80 65 61 74 69 6e 67 20 61 20 6e 65 77 20 74 61 62  eating a new tab
20d90 6c 65 2e 20 2a 2f 0a 20 20 20 20 61 73 73 65 72  le. */.    asser
20da0 74 28 20 70 43 78 2d 3e 69 73 45 70 68 65 6d 65  t( pCx->isEpheme
20db0 72 61 6c 20 29 3b 0a 20 20 20 20 70 43 78 2d 3e  ral );.    pCx->
20dc0 73 65 71 43 6f 75 6e 74 20 3d 20 30 3b 0a 20 20  seqCount = 0;.  
20dd0 20 20 70 43 78 2d 3e 63 61 63 68 65 53 74 61 74    pCx->cacheStat
20de0 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45  us = CACHE_STALE
20df0 3b 0a 20 20 20 20 69 66 28 20 70 43 78 2d 3e 70  ;.    if( pCx->p
20e00 42 74 78 20 29 7b 0a 20 20 20 20 20 20 72 63 20  Btx ){.      rc 
20e10 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 6c  = sqlite3BtreeCl
20e20 65 61 72 54 61 62 6c 65 28 70 43 78 2d 3e 70 42  earTable(pCx->pB
20e30 74 78 2c 20 70 43 78 2d 3e 70 67 6e 6f 52 6f 6f  tx, pCx->pgnoRoo
20e40 74 2c 20 30 29 3b 0a 20 20 20 20 7d 0a 20 20 7d  t, 0);.    }.  }
20e50 65 6c 73 65 7b 0a 20 20 20 20 70 43 78 20 3d 20  else{.    pCx = 
20e60 61 6c 6c 6f 63 61 74 65 43 75 72 73 6f 72 28 70  allocateCursor(p
20e70 2c 20 70 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e  , pOp->p1, pOp->
20e80 70 32 2c 20 2d 31 2c 20 43 55 52 54 59 50 45 5f  p2, -1, CURTYPE_
20e90 42 54 52 45 45 29 3b 0a 20 20 20 20 69 66 28 20  BTREE);.    if( 
20ea0 70 43 78 3d 3d 30 20 29 20 67 6f 74 6f 20 6e 6f  pCx==0 ) goto no
20eb0 5f 6d 65 6d 3b 0a 20 20 20 20 70 43 78 2d 3e 69  _mem;.    pCx->i
20ec0 73 45 70 68 65 6d 65 72 61 6c 20 3d 20 31 3b 0a  sEphemeral = 1;.
20ed0 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
20ee0 42 74 72 65 65 4f 70 65 6e 28 64 62 2d 3e 70 56  BtreeOpen(db->pV
20ef0 66 73 2c 20 30 2c 20 64 62 2c 20 26 70 43 78 2d  fs, 0, db, &pCx-
20f00 3e 70 42 74 78 2c 20 0a 20 20 20 20 20 20 20 20  >pBtx, .        
20f10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20f20 20 20 42 54 52 45 45 5f 4f 4d 49 54 5f 4a 4f 55    BTREE_OMIT_JOU
20f30 52 4e 41 4c 20 7c 20 42 54 52 45 45 5f 53 49 4e  RNAL | BTREE_SIN
20f40 47 4c 45 20 7c 20 70 4f 70 2d 3e 70 35 2c 0a 20  GLE | pOp->p5,. 
20f50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20f60 20 20 20 20 20 20 20 20 20 76 66 73 46 6c 61 67           vfsFlag
20f70 73 29 3b 0a 20 20 20 20 69 66 28 20 72 63 3d 3d  s);.    if( rc==
20f80 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20  SQLITE_OK ){.   
20f90 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42     rc = sqlite3B
20fa0 74 72 65 65 42 65 67 69 6e 54 72 61 6e 73 28 70  treeBeginTrans(p
20fb0 43 78 2d 3e 70 42 74 78 2c 20 31 2c 20 30 29 3b  Cx->pBtx, 1, 0);
20fc0 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 72  .    }.    if( r
20fd0 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a  c==SQLITE_OK ){.
20fe0 20 20 20 20 20 20 2f 2a 20 49 66 20 61 20 74 72        /* If a tr
20ff0 61 6e 73 69 65 6e 74 20 69 6e 64 65 78 20 69 73  ansient index is
21000 20 72 65 71 75 69 72 65 64 2c 20 63 72 65 61 74   required, creat
21010 65 20 69 74 20 62 79 20 63 61 6c 6c 69 6e 67 0a  e it by calling.
21020 20 20 20 20 20 20 2a 2a 20 73 71 6c 69 74 65 33        ** sqlite3
21030 42 74 72 65 65 43 72 65 61 74 65 54 61 62 6c 65  BtreeCreateTable
21040 28 29 20 77 69 74 68 20 74 68 65 20 42 54 52 45  () with the BTRE
21050 45 5f 42 4c 4f 42 4b 45 59 20 66 6c 61 67 20 62  E_BLOBKEY flag b
21060 65 66 6f 72 65 0a 20 20 20 20 20 20 2a 2a 20 6f  efore.      ** o
21070 70 65 6e 69 6e 67 20 69 74 2e 20 49 66 20 61 20  pening it. If a 
21080 74 72 61 6e 73 69 65 6e 74 20 74 61 62 6c 65 20  transient table 
21090 69 73 20 72 65 71 75 69 72 65 64 2c 20 6a 75 73  is required, jus
210a0 74 20 75 73 65 20 74 68 65 0a 20 20 20 20 20 20  t use the.      
210b0 2a 2a 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79  ** automatically
210c0 20 63 72 65 61 74 65 64 20 74 61 62 6c 65 20 77   created table w
210d0 69 74 68 20 72 6f 6f 74 2d 70 61 67 65 20 31 20  ith root-page 1 
210e0 28 61 6e 20 42 4c 4f 42 5f 49 4e 54 4b 45 59 20  (an BLOB_INTKEY 
210f0 74 61 62 6c 65 29 2e 0a 20 20 20 20 20 20 2a 2f  table)..      */
21100 0a 20 20 20 20 20 20 69 66 28 20 28 70 43 78 2d  .      if( (pCx-
21110 3e 70 4b 65 79 49 6e 66 6f 20 3d 20 70 4b 65 79  >pKeyInfo = pKey
21120 49 6e 66 6f 20 3d 20 70 4f 70 2d 3e 70 34 2e 70  Info = pOp->p4.p
21130 4b 65 79 49 6e 66 6f 29 21 3d 30 20 29 7b 0a 20  KeyInfo)!=0 ){. 
21140 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70         assert( p
21150 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 4b  Op->p4type==P4_K
21160 45 59 49 4e 46 4f 20 29 3b 0a 20 20 20 20 20 20  EYINFO );.      
21170 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
21180 72 65 65 43 72 65 61 74 65 54 61 62 6c 65 28 70  reeCreateTable(p
21190 43 78 2d 3e 70 42 74 78 2c 20 28 69 6e 74 2a 29  Cx->pBtx, (int*)
211a0 26 70 43 78 2d 3e 70 67 6e 6f 52 6f 6f 74 2c 0a  &pCx->pgnoRoot,.
211b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
211c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
211d0 20 20 20 20 20 42 54 52 45 45 5f 42 4c 4f 42 4b       BTREE_BLOBK
211e0 45 59 20 7c 20 70 4f 70 2d 3e 70 35 29 3b 20 0a  EY | pOp->p5); .
211f0 20 20 20 20 20 20 20 20 69 66 28 20 72 63 3d 3d          if( rc==
21200 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20  SQLITE_OK ){.   
21210 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70         assert( p
21220 43 78 2d 3e 70 67 6e 6f 52 6f 6f 74 3d 3d 4d 41  Cx->pgnoRoot==MA
21230 53 54 45 52 5f 52 4f 4f 54 2b 31 20 29 3b 0a 20  STER_ROOT+1 );. 
21240 20 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28           assert(
21250 20 70 4b 65 79 49 6e 66 6f 2d 3e 64 62 3d 3d 64   pKeyInfo->db==d
21260 62 20 29 3b 0a 20 20 20 20 20 20 20 20 20 20 61  b );.          a
21270 73 73 65 72 74 28 20 70 4b 65 79 49 6e 66 6f 2d  ssert( pKeyInfo-
21280 3e 65 6e 63 3d 3d 45 4e 43 28 64 62 29 20 29 3b  >enc==ENC(db) );
21290 0a 20 20 20 20 20 20 20 20 20 20 72 63 20 3d 20  .          rc = 
212a0 73 71 6c 69 74 65 33 42 74 72 65 65 43 75 72 73  sqlite3BtreeCurs
212b0 6f 72 28 70 43 78 2d 3e 70 42 74 78 2c 20 70 43  or(pCx->pBtx, pC
212c0 78 2d 3e 70 67 6e 6f 52 6f 6f 74 2c 20 42 54 52  x->pgnoRoot, BTR
212d0 45 45 5f 57 52 43 53 52 2c 0a 20 20 20 20 20 20  EE_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 70 4b 65 79              pKey
21300 49 6e 66 6f 2c 20 70 43 78 2d 3e 75 63 2e 70 43  Info, pCx->uc.pC
21310 75 72 73 6f 72 29 3b 0a 20 20 20 20 20 20 20 20  ursor);.        
21320 7d 0a 20 20 20 20 20 20 20 20 70 43 78 2d 3e 69  }.        pCx->i
21330 73 54 61 62 6c 65 20 3d 20 30 3b 0a 20 20 20 20  sTable = 0;.    
21340 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20    }else{.       
21350 20 70 43 78 2d 3e 70 67 6e 6f 52 6f 6f 74 20 3d   pCx->pgnoRoot =
21360 20 4d 41 53 54 45 52 5f 52 4f 4f 54 3b 0a 20 20   MASTER_ROOT;.  
21370 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74        rc = sqlit
21380 65 33 42 74 72 65 65 43 75 72 73 6f 72 28 70 43  e3BtreeCursor(pC
21390 78 2d 3e 70 42 74 78 2c 20 4d 41 53 54 45 52 5f  x->pBtx, MASTER_
213a0 52 4f 4f 54 2c 20 42 54 52 45 45 5f 57 52 43 53  ROOT, BTREE_WRCS
213b0 52 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  R,.             
213c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
213d0 20 20 20 30 2c 20 70 43 78 2d 3e 75 63 2e 70 43     0, pCx->uc.pC
213e0 75 72 73 6f 72 29 3b 0a 20 20 20 20 20 20 20 20  ursor);.        
213f0 70 43 78 2d 3e 69 73 54 61 62 6c 65 20 3d 20 31  pCx->isTable = 1
21400 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a  ;.      }.    }.
21410 20 20 20 20 70 43 78 2d 3e 69 73 4f 72 64 65 72      pCx->isOrder
21420 65 64 20 3d 20 28 70 4f 70 2d 3e 70 35 21 3d 42  ed = (pOp->p5!=B
21430 54 52 45 45 5f 55 4e 4f 52 44 45 52 45 44 29 3b  TREE_UNORDERED);
21440 0a 20 20 7d 0a 20 20 69 66 28 20 72 63 20 29 20  .  }.  if( rc ) 
21450 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
21460 6f 5f 65 72 72 6f 72 3b 0a 20 20 70 43 78 2d 3e  o_error;.  pCx->
21470 6e 75 6c 6c 52 6f 77 20 3d 20 31 3b 0a 20 20 62  nullRow = 1;.  b
21480 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
21490 64 65 3a 20 53 6f 72 74 65 72 4f 70 65 6e 20 50  de: SorterOpen P
214a0 31 20 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a 0a  1 P2 P3 P4 *.**.
214b0 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 77  ** This opcode w
214c0 6f 72 6b 73 20 6c 69 6b 65 20 4f 50 5f 4f 70 65  orks like OP_Ope
214d0 6e 45 70 68 65 6d 65 72 61 6c 20 65 78 63 65 70  nEphemeral excep
214e0 74 20 74 68 61 74 20 69 74 20 6f 70 65 6e 73 0a  t that it opens.
214f0 2a 2a 20 61 20 74 72 61 6e 73 69 65 6e 74 20 69  ** a transient i
21500 6e 64 65 78 20 74 68 61 74 20 69 73 20 73 70 65  ndex that is spe
21510 63 69 66 69 63 61 6c 6c 79 20 64 65 73 69 67 6e  cifically design
21520 65 64 20 74 6f 20 73 6f 72 74 20 6c 61 72 67 65  ed to sort large
21530 0a 2a 2a 20 74 61 62 6c 65 73 20 75 73 69 6e 67  .** tables using
21540 20 61 6e 20 65 78 74 65 72 6e 61 6c 20 6d 65 72   an external mer
21550 67 65 2d 73 6f 72 74 20 61 6c 67 6f 72 69 74 68  ge-sort algorith
21560 6d 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 61 72 67 75  m..**.** If argu
21570 6d 65 6e 74 20 50 33 20 69 73 20 6e 6f 6e 2d 7a  ment P3 is non-z
21580 65 72 6f 2c 20 74 68 65 6e 20 69 74 20 69 6e 64  ero, then it ind
21590 69 63 61 74 65 73 20 74 68 61 74 20 74 68 65 20  icates that the 
215a0 73 6f 72 74 65 72 20 6d 61 79 0a 2a 2a 20 61 73  sorter may.** as
215b0 73 75 6d 65 20 74 68 61 74 20 61 20 73 74 61 62  sume that a stab
215c0 6c 65 20 73 6f 72 74 20 63 6f 6e 73 69 64 65 72  le sort consider
215d0 69 6e 67 20 74 68 65 20 66 69 72 73 74 20 50 33  ing the first P3
215e0 20 66 69 65 6c 64 73 20 6f 66 20 65 61 63 68 0a   fields of each.
215f0 2a 2a 20 6b 65 79 20 69 73 20 73 75 66 66 69 63  ** key is suffic
21600 69 65 6e 74 20 74 6f 20 70 72 6f 64 75 63 65 20  ient to produce 
21610 74 68 65 20 72 65 71 75 69 72 65 64 20 72 65 73  the required res
21620 75 6c 74 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  ults..*/.case OP
21630 5f 53 6f 72 74 65 72 4f 70 65 6e 3a 20 7b 0a 20  _SorterOpen: {. 
21640 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 78   VdbeCursor *pCx
21650 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  ;..  assert( pOp
21660 2d 3e 70 31 3e 3d 30 20 29 3b 0a 20 20 61 73 73  ->p1>=0 );.  ass
21670 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e 3d 30 20  ert( pOp->p2>=0 
21680 29 3b 0a 20 20 70 43 78 20 3d 20 61 6c 6c 6f 63  );.  pCx = alloc
21690 61 74 65 43 75 72 73 6f 72 28 70 2c 20 70 4f 70  ateCursor(p, pOp
216a0 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70 32 2c 20 2d  ->p1, pOp->p2, -
216b0 31 2c 20 43 55 52 54 59 50 45 5f 53 4f 52 54 45  1, CURTYPE_SORTE
216c0 52 29 3b 0a 20 20 69 66 28 20 70 43 78 3d 3d 30  R);.  if( pCx==0
216d0 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a   ) goto no_mem;.
216e0 20 20 70 43 78 2d 3e 70 4b 65 79 49 6e 66 6f 20    pCx->pKeyInfo 
216f0 3d 20 70 4f 70 2d 3e 70 34 2e 70 4b 65 79 49 6e  = pOp->p4.pKeyIn
21700 66 6f 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43  fo;.  assert( pC
21710 78 2d 3e 70 4b 65 79 49 6e 66 6f 2d 3e 64 62 3d  x->pKeyInfo->db=
21720 3d 64 62 20 29 3b 0a 20 20 61 73 73 65 72 74 28  =db );.  assert(
21730 20 70 43 78 2d 3e 70 4b 65 79 49 6e 66 6f 2d 3e   pCx->pKeyInfo->
21740 65 6e 63 3d 3d 45 4e 43 28 64 62 29 20 29 3b 0a  enc==ENC(db) );.
21750 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64    rc = sqlite3Vd
21760 62 65 53 6f 72 74 65 72 49 6e 69 74 28 64 62 2c  beSorterInit(db,
21770 20 70 4f 70 2d 3e 70 33 2c 20 70 43 78 29 3b 0a   pOp->p3, pCx);.
21780 20 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20    if( rc ) goto 
21790 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
217a0 6f 72 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  or;.  break;.}..
217b0 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 65 71 75 65  /* Opcode: Seque
217c0 6e 63 65 54 65 73 74 20 50 31 20 50 32 20 2a 20  nceTest P1 P2 * 
217d0 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  * *.** Synopsis:
217e0 20 69 66 28 20 63 75 72 73 6f 72 5b 50 31 5d 2e   if( cursor[P1].
217f0 63 74 72 2b 2b 20 29 20 70 63 20 3d 20 50 32 0a  ctr++ ) pc = P2.
21800 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 61 20 73 6f  **.** P1 is a so
21810 72 74 65 72 20 63 75 72 73 6f 72 2e 20 49 66 20  rter cursor. If 
21820 74 68 65 20 73 65 71 75 65 6e 63 65 20 63 6f 75  the sequence cou
21830 6e 74 65 72 20 69 73 20 63 75 72 72 65 6e 74 6c  nter is currentl
21840 79 20 7a 65 72 6f 2c 20 6a 75 6d 70 0a 2a 2a 20  y zero, jump.** 
21850 74 6f 20 50 32 2e 20 52 65 67 61 72 64 6c 65 73  to P2. Regardles
21860 73 20 6f 66 20 77 68 65 74 68 65 72 20 6f 72 20  s of whether or 
21870 6e 6f 74 20 74 68 65 20 6a 75 6d 70 20 69 73 20  not the jump is 
21880 74 61 6b 65 6e 2c 20 69 6e 63 72 65 6d 65 6e 74  taken, increment
21890 20 74 68 65 0a 2a 2a 20 74 68 65 20 73 65 71 75   the.** the sequ
218a0 65 6e 63 65 20 76 61 6c 75 65 2e 0a 2a 2f 0a 63  ence value..*/.c
218b0 61 73 65 20 4f 50 5f 53 65 71 75 65 6e 63 65 54  ase OP_SequenceT
218c0 65 73 74 3a 20 7b 0a 20 20 56 64 62 65 43 75 72  est: {.  VdbeCur
218d0 73 6f 72 20 2a 70 43 3b 0a 20 20 61 73 73 65 72  sor *pC;.  asser
218e0 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26  t( pOp->p1>=0 &&
218f0 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72   pOp->p1<p->nCur
21900 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d  sor );.  pC = p-
21910 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b  >apCsr[pOp->p1];
21920 0a 20 20 61 73 73 65 72 74 28 20 69 73 53 6f 72  .  assert( isSor
21930 74 65 72 28 70 43 29 20 29 3b 0a 20 20 69 66 28  ter(pC) );.  if(
21940 20 28 70 43 2d 3e 73 65 71 43 6f 75 6e 74 2b 2b   (pC->seqCount++
21950 29 3d 3d 30 20 29 7b 0a 20 20 20 20 67 6f 74 6f  )==0 ){.    goto
21960 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 7d   jump_to_p2;.  }
21970 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
21980 4f 70 63 6f 64 65 3a 20 4f 70 65 6e 50 73 65 75  Opcode: OpenPseu
21990 64 6f 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a  do P1 P2 P3 * *.
219a0 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 50 33 20  ** Synopsis: P3 
219b0 63 6f 6c 75 6d 6e 73 20 69 6e 20 72 5b 50 32 5d  columns in r[P2]
219c0 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e 20 61 20 6e 65  .**.** Open a ne
219d0 77 20 63 75 72 73 6f 72 20 74 68 61 74 20 70 6f  w cursor that po
219e0 69 6e 74 73 20 74 6f 20 61 20 66 61 6b 65 20 74  ints to a fake t
219f0 61 62 6c 65 20 74 68 61 74 20 63 6f 6e 74 61 69  able that contai
21a00 6e 73 20 61 20 73 69 6e 67 6c 65 0a 2a 2a 20 72  ns a single.** r
21a10 6f 77 20 6f 66 20 64 61 74 61 2e 20 20 54 68 65  ow of data.  The
21a20 20 63 6f 6e 74 65 6e 74 20 6f 66 20 74 68 61 74   content of that
21a30 20 6f 6e 65 20 72 6f 77 20 69 73 20 74 68 65 20   one row is the 
21a40 63 6f 6e 74 65 6e 74 20 6f 66 20 6d 65 6d 6f 72  content of memor
21a50 79 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 50 32  y.** register P2
21a60 2e 20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64  .  In other word
21a70 73 2c 20 63 75 72 73 6f 72 20 50 31 20 62 65 63  s, cursor P1 bec
21a80 6f 6d 65 73 20 61 6e 20 61 6c 69 61 73 20 66 6f  omes an alias fo
21a90 72 20 74 68 65 20 0a 2a 2a 20 4d 45 4d 5f 42 6c  r the .** MEM_Bl
21aa0 6f 62 20 63 6f 6e 74 65 6e 74 20 63 6f 6e 74 61  ob content conta
21ab0 69 6e 65 64 20 69 6e 20 72 65 67 69 73 74 65 72  ined in register
21ac0 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 41 20 70 73 65   P2..**.** A pse
21ad0 75 64 6f 2d 74 61 62 6c 65 20 63 72 65 61 74 65  udo-table create
21ae0 64 20 62 79 20 74 68 69 73 20 6f 70 63 6f 64 65  d by this opcode
21af0 20 69 73 20 75 73 65 64 20 74 6f 20 68 6f 6c 64   is used to hold
21b00 20 61 20 73 69 6e 67 6c 65 0a 2a 2a 20 72 6f 77   a single.** row
21b10 20 6f 75 74 70 75 74 20 66 72 6f 6d 20 74 68 65   output from the
21b20 20 73 6f 72 74 65 72 20 73 6f 20 74 68 61 74 20   sorter so that 
21b30 74 68 65 20 72 6f 77 20 63 61 6e 20 62 65 20 64  the row can be d
21b40 65 63 6f 6d 70 6f 73 65 64 20 69 6e 74 6f 0a 2a  ecomposed into.*
21b50 2a 20 69 6e 64 69 76 69 64 75 61 6c 20 63 6f 6c  * individual col
21b60 75 6d 6e 73 20 75 73 69 6e 67 20 74 68 65 20 4f  umns using the O
21b70 50 5f 43 6f 6c 75 6d 6e 20 6f 70 63 6f 64 65 2e  P_Column opcode.
21b80 20 20 54 68 65 20 4f 50 5f 43 6f 6c 75 6d 6e 20    The OP_Column 
21b90 6f 70 63 6f 64 65 0a 2a 2a 20 69 73 20 74 68 65  opcode.** is the
21ba0 20 6f 6e 6c 79 20 63 75 72 73 6f 72 20 6f 70 63   only cursor opc
21bb0 6f 64 65 20 74 68 61 74 20 77 6f 72 6b 73 20 77  ode that works w
21bc0 69 74 68 20 61 20 70 73 65 75 64 6f 2d 74 61 62  ith a pseudo-tab
21bd0 6c 65 2e 0a 2a 2a 0a 2a 2a 20 50 33 20 69 73 20  le..**.** P3 is 
21be0 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 66 69  the number of fi
21bf0 65 6c 64 73 20 69 6e 20 74 68 65 20 72 65 63 6f  elds in the reco
21c00 72 64 73 20 74 68 61 74 20 77 69 6c 6c 20 62 65  rds that will be
21c10 20 73 74 6f 72 65 64 20 62 79 0a 2a 2a 20 74 68   stored by.** th
21c20 65 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 2e 0a  e pseudo-table..
21c30 2a 2f 0a 63 61 73 65 20 4f 50 5f 4f 70 65 6e 50  */.case OP_OpenP
21c40 73 65 75 64 6f 3a 20 7b 0a 20 20 56 64 62 65 43  seudo: {.  VdbeC
21c50 75 72 73 6f 72 20 2a 70 43 78 3b 0a 0a 20 20 61  ursor *pCx;..  a
21c60 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d  ssert( pOp->p1>=
21c70 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  0 );.  assert( p
21c80 4f 70 2d 3e 70 33 3e 3d 30 20 29 3b 0a 20 20 70  Op->p3>=0 );.  p
21c90 43 78 20 3d 20 61 6c 6c 6f 63 61 74 65 43 75 72  Cx = allocateCur
21ca0 73 6f 72 28 70 2c 20 70 4f 70 2d 3e 70 31 2c 20  sor(p, pOp->p1, 
21cb0 70 4f 70 2d 3e 70 33 2c 20 2d 31 2c 20 43 55 52  pOp->p3, -1, CUR
21cc0 54 59 50 45 5f 50 53 45 55 44 4f 29 3b 0a 20 20  TYPE_PSEUDO);.  
21cd0 69 66 28 20 70 43 78 3d 3d 30 20 29 20 67 6f 74  if( pCx==0 ) got
21ce0 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 70 43 78 2d  o no_mem;.  pCx-
21cf0 3e 6e 75 6c 6c 52 6f 77 20 3d 20 31 3b 0a 20 20  >nullRow = 1;.  
21d00 70 43 78 2d 3e 73 65 65 6b 52 65 73 75 6c 74 20  pCx->seekResult 
21d10 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 70 43 78  = pOp->p2;.  pCx
21d20 2d 3e 69 73 54 61 62 6c 65 20 3d 20 31 3b 0a 20  ->isTable = 1;. 
21d30 20 2f 2a 20 47 69 76 65 20 74 68 69 73 20 70 73   /* Give this ps
21d40 65 75 64 6f 2d 63 75 72 73 6f 72 20 61 20 66 61  eudo-cursor a fa
21d50 6b 65 20 42 74 43 75 72 73 6f 72 20 70 6f 69 6e  ke BtCursor poin
21d60 74 65 72 20 73 6f 20 74 68 61 74 20 70 43 78 0a  ter so that pCx.
21d70 20 20 2a 2a 20 63 61 6e 20 62 65 20 73 61 66 65    ** can be safe
21d80 6c 79 20 70 61 73 73 65 64 20 74 6f 20 73 71 6c  ly passed to sql
21d90 69 74 65 33 56 64 62 65 43 75 72 73 6f 72 4d 6f  ite3VdbeCursorMo
21da0 76 65 74 6f 28 29 2e 20 20 54 68 69 73 20 61 76  veto().  This av
21db0 6f 69 64 73 20 61 20 74 65 73 74 0a 20 20 2a 2a  oids a test.  **
21dc0 20 66 6f 72 20 70 43 78 2d 3e 65 43 75 72 54 79   for pCx->eCurTy
21dd0 70 65 3d 3d 43 55 52 54 59 50 45 5f 42 54 52 45  pe==CURTYPE_BTRE
21de0 45 20 69 6e 73 69 64 65 20 6f 66 20 73 71 6c 69  E inside of sqli
21df0 74 65 33 56 64 62 65 43 75 72 73 6f 72 4d 6f 76  te3VdbeCursorMov
21e00 65 74 6f 28 29 0a 20 20 2a 2a 20 77 68 69 63 68  eto().  ** which
21e10 20 69 73 20 61 20 70 65 72 66 6f 72 6d 61 6e 63   is a performanc
21e20 65 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 20 2a  e optimization *
21e30 2f 0a 20 20 70 43 78 2d 3e 75 63 2e 70 43 75 72  /.  pCx->uc.pCur
21e40 73 6f 72 20 3d 20 73 71 6c 69 74 65 33 42 74 72  sor = sqlite3Btr
21e50 65 65 46 61 6b 65 56 61 6c 69 64 43 75 72 73 6f  eeFakeValidCurso
21e60 72 28 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  r();.  assert( p
21e70 4f 70 2d 3e 70 35 3d 3d 30 20 29 3b 0a 20 20 62  Op->p5==0 );.  b
21e80 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
21e90 64 65 3a 20 43 6c 6f 73 65 20 50 31 20 2a 20 2a  de: Close P1 * *
21ea0 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 43 6c 6f 73 65   * *.**.** Close
21eb0 20 61 20 63 75 72 73 6f 72 20 70 72 65 76 69 6f   a cursor previo
21ec0 75 73 6c 79 20 6f 70 65 6e 65 64 20 61 73 20 50  usly opened as P
21ed0 31 2e 20 20 49 66 20 50 31 20 69 73 20 6e 6f 74  1.  If P1 is not
21ee0 0a 2a 2a 20 63 75 72 72 65 6e 74 6c 79 20 6f 70  .** currently op
21ef0 65 6e 2c 20 74 68 69 73 20 69 6e 73 74 72 75 63  en, this instruc
21f00 74 69 6f 6e 20 69 73 20 61 20 6e 6f 2d 6f 70 2e  tion is a no-op.
21f10 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 6c 6f 73  .*/.case OP_Clos
21f20 65 3a 20 7b 0a 20 20 61 73 73 65 72 74 28 20 70  e: {.  assert( p
21f30 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70  Op->p1>=0 && pOp
21f40 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20  ->p1<p->nCursor 
21f50 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65  );.  sqlite3Vdbe
21f60 46 72 65 65 43 75 72 73 6f 72 28 70 2c 20 70 2d  FreeCursor(p, p-
21f70 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 29  >apCsr[pOp->p1])
21f80 3b 0a 20 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70  ;.  p->apCsr[pOp
21f90 2d 3e 70 31 5d 20 3d 20 30 3b 0a 20 20 62 72 65  ->p1] = 0;.  bre
21fa0 61 6b 3b 0a 7d 0a 0a 23 69 66 64 65 66 20 53 51  ak;.}..#ifdef SQ
21fb0 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 43 4f 4c 55  LITE_ENABLE_COLU
21fc0 4d 4e 5f 55 53 45 44 5f 4d 41 53 4b 0a 2f 2a 20  MN_USED_MASK./* 
21fd0 4f 70 63 6f 64 65 3a 20 43 6f 6c 75 6d 6e 73 55  Opcode: ColumnsU
21fe0 73 65 64 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a  sed P1 * * P4 *.
21ff0 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64  **.** This opcod
22000 65 20 28 77 68 69 63 68 20 6f 6e 6c 79 20 65 78  e (which only ex
22010 69 73 74 73 20 69 66 20 53 51 4c 69 74 65 20 77  ists if SQLite w
22020 61 73 20 63 6f 6d 70 69 6c 65 64 20 77 69 74 68  as compiled with
22030 0a 2a 2a 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  .** SQLITE_ENABL
22040 45 5f 43 4f 4c 55 4d 4e 5f 55 53 45 44 5f 4d 41  E_COLUMN_USED_MA
22050 53 4b 29 20 69 64 65 6e 74 69 66 69 65 73 20 77  SK) identifies w
22060 68 69 63 68 20 63 6f 6c 75 6d 6e 73 20 6f 66 20  hich columns of 
22070 74 68 65 0a 2a 2a 20 74 61 62 6c 65 20 6f 72 20  the.** table or 
22080 69 6e 64 65 78 20 66 6f 72 20 63 75 72 73 6f 72  index for cursor
22090 20 50 31 20 61 72 65 20 75 73 65 64 2e 20 20 50   P1 are used.  P
220a0 34 20 69 73 20 61 20 36 34 2d 62 69 74 20 69 6e  4 is a 64-bit in
220b0 74 65 67 65 72 0a 2a 2a 20 28 50 34 5f 49 4e 54  teger.** (P4_INT
220c0 36 34 29 20 69 6e 20 77 68 69 63 68 20 74 68 65  64) in which the
220d0 20 66 69 72 73 74 20 36 33 20 62 69 74 73 20 61   first 63 bits a
220e0 72 65 20 6f 6e 65 20 66 6f 72 20 65 61 63 68 20  re one for each 
220f0 6f 66 20 74 68 65 0a 2a 2a 20 66 69 72 73 74 20  of the.** first 
22100 36 33 20 63 6f 6c 75 6d 6e 73 20 6f 66 20 74 68  63 columns of th
22110 65 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78  e table or index
22120 20 74 68 61 74 20 61 72 65 20 61 63 74 75 61 6c   that are actual
22130 6c 79 20 75 73 65 64 0a 2a 2a 20 62 79 20 74 68  ly used.** by th
22140 65 20 63 75 72 73 6f 72 2e 20 20 54 68 65 20 68  e cursor.  The h
22150 69 67 68 2d 6f 72 64 65 72 20 62 69 74 20 69 73  igh-order bit is
22160 20 73 65 74 20 69 66 20 61 6e 79 20 63 6f 6c 75   set if any colu
22170 6d 6e 20 61 66 74 65 72 0a 2a 2a 20 74 68 65 20  mn after.** the 
22180 36 34 74 68 20 69 73 20 75 73 65 64 2e 0a 2a 2f  64th is used..*/
22190 0a 63 61 73 65 20 4f 50 5f 43 6f 6c 75 6d 6e 73  .case OP_Columns
221a0 55 73 65 64 3a 20 7b 0a 20 20 56 64 62 65 43 75  Used: {.  VdbeCu
221b0 72 73 6f 72 20 2a 70 43 3b 0a 20 20 70 43 20 3d  rsor *pC;.  pC =
221c0 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70   p->apCsr[pOp->p
221d0 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43  1];.  assert( pC
221e0 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43 55 52 54  ->eCurType==CURT
221f0 59 50 45 5f 42 54 52 45 45 20 29 3b 0a 20 20 70  YPE_BTREE );.  p
22200 43 2d 3e 6d 61 73 6b 55 73 65 64 20 3d 20 2a 28  C->maskUsed = *(
22210 75 36 34 2a 29 70 4f 70 2d 3e 70 34 2e 70 49 36  u64*)pOp->p4.pI6
22220 34 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65  4;.  break;.}.#e
22230 6e 64 69 66 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  ndif../* Opcode:
22240 20 53 65 65 6b 47 45 20 50 31 20 50 32 20 50 33   SeekGE P1 P2 P3
22250 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69   P4 *.** Synopsi
22260 73 3a 20 6b 65 79 3d 72 5b 50 33 40 50 34 5d 0a  s: key=r[P3@P4].
22270 2a 2a 0a 2a 2a 20 49 66 20 63 75 72 73 6f 72 20  **.** If cursor 
22280 50 31 20 72 65 66 65 72 73 20 74 6f 20 61 6e 20  P1 refers to an 
22290 53 51 4c 20 74 61 62 6c 65 20 28 42 2d 54 72 65  SQL table (B-Tre
222a0 65 20 74 68 61 74 20 75 73 65 73 20 69 6e 74 65  e that uses inte
222b0 67 65 72 20 6b 65 79 73 29 2c 20 0a 2a 2a 20 75  ger keys), .** u
222c0 73 65 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20  se the value in 
222d0 72 65 67 69 73 74 65 72 20 50 33 20 61 73 20 74  register P3 as t
222e0 68 65 20 6b 65 79 2e 20 20 49 66 20 63 75 72 73  he key.  If curs
222f0 6f 72 20 50 31 20 72 65 66 65 72 73 20 0a 2a 2a  or P1 refers .**
22300 20 74 6f 20 61 6e 20 53 51 4c 20 69 6e 64 65 78   to an SQL index
22310 2c 20 74 68 65 6e 20 50 33 20 69 73 20 74 68 65  , then P3 is the
22320 20 66 69 72 73 74 20 69 6e 20 61 6e 20 61 72 72   first in an arr
22330 61 79 20 6f 66 20 50 34 20 72 65 67 69 73 74 65  ay of P4 registe
22340 72 73 20 0a 2a 2a 20 74 68 61 74 20 61 72 65 20  rs .** that are 
22350 75 73 65 64 20 61 73 20 61 6e 20 75 6e 70 61 63  used as an unpac
22360 6b 65 64 20 69 6e 64 65 78 20 6b 65 79 2e 20 0a  ked index key. .
22370 2a 2a 0a 2a 2a 20 52 65 70 6f 73 69 74 69 6f 6e  **.** Reposition
22380 20 63 75 72 73 6f 72 20 50 31 20 73 6f 20 74 68   cursor P1 so th
22390 61 74 20 20 69 74 20 70 6f 69 6e 74 73 20 74 6f  at  it points to
223a0 20 74 68 65 20 73 6d 61 6c 6c 65 73 74 20 65 6e   the smallest en
223b0 74 72 79 20 74 68 61 74 20 0a 2a 2a 20 69 73 20  try that .** is 
223c0 67 72 65 61 74 65 72 20 74 68 61 6e 20 6f 72 20  greater than or 
223d0 65 71 75 61 6c 20 74 6f 20 74 68 65 20 6b 65 79  equal to the key
223e0 20 76 61 6c 75 65 2e 20 49 66 20 74 68 65 72 65   value. If there
223f0 20 61 72 65 20 6e 6f 20 72 65 63 6f 72 64 73 20   are no records 
22400 0a 2a 2a 20 67 72 65 61 74 65 72 20 74 68 61 6e  .** greater than
22410 20 6f 72 20 65 71 75 61 6c 20 74 6f 20 74 68 65   or equal to the
22420 20 6b 65 79 20 61 6e 64 20 50 32 20 69 73 20 6e   key and P2 is n
22430 6f 74 20 7a 65 72 6f 2c 20 74 68 65 6e 20 6a 75  ot zero, then ju
22440 6d 70 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20  mp to P2..**.** 
22450 49 66 20 74 68 65 20 63 75 72 73 6f 72 20 50 31  If the cursor P1
22460 20 77 61 73 20 6f 70 65 6e 65 64 20 75 73 69 6e   was opened usin
22470 67 20 74 68 65 20 4f 50 46 4c 41 47 5f 53 45 45  g the OPFLAG_SEE
22480 4b 45 51 20 66 6c 61 67 2c 20 74 68 65 6e 20 74  KEQ flag, then t
22490 68 69 73 0a 2a 2a 20 6f 70 63 6f 64 65 20 77 69  his.** opcode wi
224a0 6c 6c 20 61 6c 77 61 79 73 20 6c 61 6e 64 20 6f  ll always land o
224b0 6e 20 61 20 72 65 63 6f 72 64 20 74 68 61 74 20  n a record that 
224c0 65 71 75 61 6c 6c 79 20 65 71 75 61 6c 73 20 74  equally equals t
224d0 68 65 20 6b 65 79 2c 20 6f 72 0a 2a 2a 20 65 6c  he key, or.** el
224e0 73 65 20 6a 75 6d 70 20 69 6d 6d 65 64 69 61 74  se jump immediat
224f0 65 6c 79 20 74 6f 20 50 32 2e 20 20 57 68 65 6e  ely to P2.  When
22500 20 74 68 65 20 63 75 72 73 6f 72 20 69 73 20 4f   the cursor is O
22510 50 46 4c 41 47 5f 53 45 45 4b 45 51 2c 20 74 68  PFLAG_SEEKEQ, th
22520 69 73 0a 2a 2a 20 6f 70 63 6f 64 65 20 6d 75 73  is.** opcode mus
22530 74 20 62 65 20 66 6f 6c 6c 6f 77 65 64 20 62 79  t be followed by
22540 20 61 6e 20 49 64 78 4c 45 20 6f 70 63 6f 64 65   an IdxLE opcode
22550 20 77 69 74 68 20 74 68 65 20 73 61 6d 65 20 61   with the same a
22560 72 67 75 6d 65 6e 74 73 2e 0a 2a 2a 20 54 68 65  rguments..** The
22570 20 49 64 78 4c 45 20 6f 70 63 6f 64 65 20 77 69   IdxLE opcode wi
22580 6c 6c 20 62 65 20 73 6b 69 70 70 65 64 20 69 66  ll be skipped if
22590 20 74 68 69 73 20 6f 70 63 6f 64 65 20 73 75 63   this opcode suc
225a0 63 65 65 64 73 2c 20 62 75 74 20 74 68 65 0a 2a  ceeds, but the.*
225b0 2a 20 49 64 78 4c 45 20 6f 70 63 6f 64 65 20 77  * IdxLE opcode w
225c0 69 6c 6c 20 62 65 20 75 73 65 64 20 6f 6e 20 73  ill be used on s
225d0 75 62 73 65 71 75 65 6e 74 20 6c 6f 6f 70 20 69  ubsequent loop i
225e0 74 65 72 61 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a  terations..**.**
225f0 20 54 68 69 73 20 6f 70 63 6f 64 65 20 6c 65 61   This opcode lea
22600 76 65 73 20 74 68 65 20 63 75 72 73 6f 72 20 63  ves the cursor c
22610 6f 6e 66 69 67 75 72 65 64 20 74 6f 20 6d 6f 76  onfigured to mov
22620 65 20 69 6e 20 66 6f 72 77 61 72 64 20 6f 72 64  e in forward ord
22630 65 72 2c 0a 2a 2a 20 66 72 6f 6d 20 74 68 65 20  er,.** from the 
22640 62 65 67 69 6e 6e 69 6e 67 20 74 6f 77 61 72 64  beginning toward
22650 20 74 68 65 20 65 6e 64 2e 20 20 49 6e 20 6f 74   the end.  In ot
22660 68 65 72 20 77 6f 72 64 73 2c 20 74 68 65 20 63  her words, the c
22670 75 72 73 6f 72 20 69 73 0a 2a 2a 20 63 6f 6e 66  ursor is.** conf
22680 69 67 75 72 65 64 20 74 6f 20 75 73 65 20 4e 65  igured to use Ne
22690 78 74 2c 20 6e 6f 74 20 50 72 65 76 2e 0a 2a 2a  xt, not Prev..**
226a0 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 46 6f  .** See also: Fo
226b0 75 6e 64 2c 20 4e 6f 74 46 6f 75 6e 64 2c 20 53  und, NotFound, S
226c0 65 65 6b 4c 74 2c 20 53 65 65 6b 47 74 2c 20 53  eekLt, SeekGt, S
226d0 65 65 6b 4c 65 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f  eekLe.*/./* Opco
226e0 64 65 3a 20 53 65 65 6b 47 54 20 50 31 20 50 32  de: SeekGT P1 P2
226f0 20 50 33 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f   P3 P4 *.** Syno
22700 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50 33 40 50  psis: key=r[P3@P
22710 34 5d 0a 2a 2a 0a 2a 2a 20 49 66 20 63 75 72 73  4].**.** If curs
22720 6f 72 20 50 31 20 72 65 66 65 72 73 20 74 6f 20  or P1 refers to 
22730 61 6e 20 53 51 4c 20 74 61 62 6c 65 20 28 42 2d  an SQL table (B-
22740 54 72 65 65 20 74 68 61 74 20 75 73 65 73 20 69  Tree that uses i
22750 6e 74 65 67 65 72 20 6b 65 79 73 29 2c 20 0a 2a  nteger keys), .*
22760 2a 20 75 73 65 20 74 68 65 20 76 61 6c 75 65 20  * use the value 
22770 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 20 61  in register P3 a
22780 73 20 61 20 6b 65 79 2e 20 49 66 20 63 75 72 73  s a key. If curs
22790 6f 72 20 50 31 20 72 65 66 65 72 73 20 0a 2a 2a  or P1 refers .**
227a0 20 74 6f 20 61 6e 20 53 51 4c 20 69 6e 64 65 78   to an SQL index
227b0 2c 20 74 68 65 6e 20 50 33 20 69 73 20 74 68 65  , then P3 is the
227c0 20 66 69 72 73 74 20 69 6e 20 61 6e 20 61 72 72   first in an arr
227d0 61 79 20 6f 66 20 50 34 20 72 65 67 69 73 74 65  ay of P4 registe
227e0 72 73 20 0a 2a 2a 20 74 68 61 74 20 61 72 65 20  rs .** that are 
227f0 75 73 65 64 20 61 73 20 61 6e 20 75 6e 70 61 63  used as an unpac
22800 6b 65 64 20 69 6e 64 65 78 20 6b 65 79 2e 20 0a  ked index key. .
22810 2a 2a 0a 2a 2a 20 52 65 70 6f 73 69 74 69 6f 6e  **.** Reposition
22820 20 63 75 72 73 6f 72 20 50 31 20 73 6f 20 74 68   cursor P1 so th
22830 61 74 20 20 69 74 20 70 6f 69 6e 74 73 20 74 6f  at  it points to
22840 20 74 68 65 20 73 6d 61 6c 6c 65 73 74 20 65 6e   the smallest en
22850 74 72 79 20 74 68 61 74 20 0a 2a 2a 20 69 73 20  try that .** is 
22860 67 72 65 61 74 65 72 20 74 68 61 6e 20 74 68 65  greater than the
22870 20 6b 65 79 20 76 61 6c 75 65 2e 20 49 66 20 74   key value. If t
22880 68 65 72 65 20 61 72 65 20 6e 6f 20 72 65 63 6f  here are no reco
22890 72 64 73 20 67 72 65 61 74 65 72 20 74 68 61 6e  rds greater than
228a0 20 0a 2a 2a 20 74 68 65 20 6b 65 79 20 61 6e 64   .** the key and
228b0 20 50 32 20 69 73 20 6e 6f 74 20 7a 65 72 6f 2c   P2 is not zero,
228c0 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20 50 32   then jump to P2
228d0 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63  ..**.** This opc
228e0 6f 64 65 20 6c 65 61 76 65 73 20 74 68 65 20 63  ode leaves the c
228f0 75 72 73 6f 72 20 63 6f 6e 66 69 67 75 72 65 64  ursor configured
22900 20 74 6f 20 6d 6f 76 65 20 69 6e 20 66 6f 72 77   to move in forw
22910 61 72 64 20 6f 72 64 65 72 2c 0a 2a 2a 20 66 72  ard order,.** fr
22920 6f 6d 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67  om the beginning
22930 20 74 6f 77 61 72 64 20 74 68 65 20 65 6e 64 2e   toward the end.
22940 20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73    In other words
22950 2c 20 74 68 65 20 63 75 72 73 6f 72 20 69 73 0a  , the cursor is.
22960 2a 2a 20 63 6f 6e 66 69 67 75 72 65 64 20 74 6f  ** configured to
22970 20 75 73 65 20 4e 65 78 74 2c 20 6e 6f 74 20 50   use Next, not P
22980 72 65 76 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61  rev..**.** See a
22990 6c 73 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f 74 46  lso: Found, NotF
229a0 6f 75 6e 64 2c 20 53 65 65 6b 4c 74 2c 20 53 65  ound, SeekLt, Se
229b0 65 6b 47 65 2c 20 53 65 65 6b 4c 65 0a 2a 2f 0a  ekGe, SeekLe.*/.
229c0 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 65 65 6b 4c  /* Opcode: SeekL
229d0 54 20 50 31 20 50 32 20 50 33 20 50 34 20 2a 20  T P1 P2 P3 P4 * 
229e0 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65  .** Synopsis: ke
229f0 79 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a  y=r[P3@P4].**.**
22a00 20 49 66 20 63 75 72 73 6f 72 20 50 31 20 72 65   If cursor P1 re
22a10 66 65 72 73 20 74 6f 20 61 6e 20 53 51 4c 20 74  fers to an SQL t
22a20 61 62 6c 65 20 28 42 2d 54 72 65 65 20 74 68 61  able (B-Tree tha
22a30 74 20 75 73 65 73 20 69 6e 74 65 67 65 72 20 6b  t uses integer k
22a40 65 79 73 29 2c 20 0a 2a 2a 20 75 73 65 20 74 68  eys), .** use th
22a50 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73  e value in regis
22a60 74 65 72 20 50 33 20 61 73 20 61 20 6b 65 79 2e  ter P3 as a key.
22a70 20 49 66 20 63 75 72 73 6f 72 20 50 31 20 72 65   If cursor P1 re
22a80 66 65 72 73 20 0a 2a 2a 20 74 6f 20 61 6e 20 53  fers .** to an S
22a90 51 4c 20 69 6e 64 65 78 2c 20 74 68 65 6e 20 50  QL index, then P
22aa0 33 20 69 73 20 74 68 65 20 66 69 72 73 74 20 69  3 is the first i
22ab0 6e 20 61 6e 20 61 72 72 61 79 20 6f 66 20 50 34  n an array of P4
22ac0 20 72 65 67 69 73 74 65 72 73 20 0a 2a 2a 20 74   registers .** t
22ad0 68 61 74 20 61 72 65 20 75 73 65 64 20 61 73 20  hat are used as 
22ae0 61 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e 64 65  an unpacked inde
22af0 78 20 6b 65 79 2e 20 0a 2a 2a 0a 2a 2a 20 52 65  x key. .**.** Re
22b00 70 6f 73 69 74 69 6f 6e 20 63 75 72 73 6f 72 20  position cursor 
22b10 50 31 20 73 6f 20 74 68 61 74 20 20 69 74 20 70  P1 so that  it p
22b20 6f 69 6e 74 73 20 74 6f 20 74 68 65 20 6c 61 72  oints to the lar
22b30 67 65 73 74 20 65 6e 74 72 79 20 74 68 61 74 20  gest entry that 
22b40 0a 2a 2a 20 69 73 20 6c 65 73 73 20 74 68 61 6e  .** is less than
22b50 20 74 68 65 20 6b 65 79 20 76 61 6c 75 65 2e 20   the key value. 
22b60 49 66 20 74 68 65 72 65 20 61 72 65 20 6e 6f 20  If there are no 
22b70 72 65 63 6f 72 64 73 20 6c 65 73 73 20 74 68 61  records less tha
22b80 6e 20 0a 2a 2a 20 74 68 65 20 6b 65 79 20 61 6e  n .** the key an
22b90 64 20 50 32 20 69 73 20 6e 6f 74 20 7a 65 72 6f  d P2 is not zero
22ba0 2c 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20 50  , then jump to P
22bb0 32 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70  2..**.** This op
22bc0 63 6f 64 65 20 6c 65 61 76 65 73 20 74 68 65 20  code leaves the 
22bd0 63 75 72 73 6f 72 20 63 6f 6e 66 69 67 75 72 65  cursor configure
22be0 64 20 74 6f 20 6d 6f 76 65 20 69 6e 20 72 65 76  d to move in rev
22bf0 65 72 73 65 20 6f 72 64 65 72 2c 0a 2a 2a 20 66  erse order,.** f
22c00 72 6f 6d 20 74 68 65 20 65 6e 64 20 74 6f 77 61  rom the end towa
22c10 72 64 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67  rd the beginning
22c20 2e 20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64  .  In other word
22c30 73 2c 20 74 68 65 20 63 75 72 73 6f 72 20 69 73  s, the cursor is
22c40 0a 2a 2a 20 63 6f 6e 66 69 67 75 72 65 64 20 74  .** configured t
22c50 6f 20 75 73 65 20 50 72 65 76 2c 20 6e 6f 74 20  o use Prev, not 
22c60 4e 65 78 74 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20  Next..**.** See 
22c70 61 6c 73 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f 74  also: Found, Not
22c80 46 6f 75 6e 64 2c 20 53 65 65 6b 47 74 2c 20 53  Found, SeekGt, S
22c90 65 65 6b 47 65 2c 20 53 65 65 6b 4c 65 0a 2a 2f  eekGe, SeekLe.*/
22ca0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 65 65 6b  ./* Opcode: Seek
22cb0 4c 45 20 50 31 20 50 32 20 50 33 20 50 34 20 2a  LE P1 P2 P3 P4 *
22cc0 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65  .** Synopsis: ke
22cd0 79 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a  y=r[P3@P4].**.**
22ce0 20 49 66 20 63 75 72 73 6f 72 20 50 31 20 72 65   If cursor P1 re
22cf0 66 65 72 73 20 74 6f 20 61 6e 20 53 51 4c 20 74  fers to an SQL t
22d00 61 62 6c 65 20 28 42 2d 54 72 65 65 20 74 68 61  able (B-Tree tha
22d10 74 20 75 73 65 73 20 69 6e 74 65 67 65 72 20 6b  t uses integer k
22d20 65 79 73 29 2c 20 0a 2a 2a 20 75 73 65 20 74 68  eys), .** use th
22d30 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73  e value in regis
22d40 74 65 72 20 50 33 20 61 73 20 61 20 6b 65 79 2e  ter P3 as a key.
22d50 20 49 66 20 63 75 72 73 6f 72 20 50 31 20 72 65   If cursor P1 re
22d60 66 65 72 73 20 0a 2a 2a 20 74 6f 20 61 6e 20 53  fers .** to an S
22d70 51 4c 20 69 6e 64 65 78 2c 20 74 68 65 6e 20 50  QL index, then P
22d80 33 20 69 73 20 74 68 65 20 66 69 72 73 74 20 69  3 is the first i
22d90 6e 20 61 6e 20 61 72 72 61 79 20 6f 66 20 50 34  n an array of P4
22da0 20 72 65 67 69 73 74 65 72 73 20 0a 2a 2a 20 74   registers .** t
22db0 68 61 74 20 61 72 65 20 75 73 65 64 20 61 73 20  hat are used as 
22dc0 61 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e 64 65  an unpacked inde
22dd0 78 20 6b 65 79 2e 20 0a 2a 2a 0a 2a 2a 20 52 65  x key. .**.** Re
22de0 70 6f 73 69 74 69 6f 6e 20 63 75 72 73 6f 72 20  position cursor 
22df0 50 31 20 73 6f 20 74 68 61 74 20 69 74 20 70 6f  P1 so that it po
22e00 69 6e 74 73 20 74 6f 20 74 68 65 20 6c 61 72 67  ints to the larg
22e10 65 73 74 20 65 6e 74 72 79 20 74 68 61 74 20 0a  est entry that .
22e20 2a 2a 20 69 73 20 6c 65 73 73 20 74 68 61 6e 20  ** is less than 
22e30 6f 72 20 65 71 75 61 6c 20 74 6f 20 74 68 65 20  or equal to the 
22e40 6b 65 79 20 76 61 6c 75 65 2e 20 49 66 20 74 68  key value. If th
22e50 65 72 65 20 61 72 65 20 6e 6f 20 72 65 63 6f 72  ere are no recor
22e60 64 73 20 0a 2a 2a 20 6c 65 73 73 20 74 68 61 6e  ds .** less than
22e70 20 6f 72 20 65 71 75 61 6c 20 74 6f 20 74 68 65   or equal to the
22e80 20 6b 65 79 20 61 6e 64 20 50 32 20 69 73 20 6e   key and P2 is n
22e90 6f 74 20 7a 65 72 6f 2c 20 74 68 65 6e 20 6a 75  ot zero, then ju
22ea0 6d 70 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20  mp to P2..**.** 
22eb0 54 68 69 73 20 6f 70 63 6f 64 65 20 6c 65 61 76  This opcode leav
22ec0 65 73 20 74 68 65 20 63 75 72 73 6f 72 20 63 6f  es the cursor co
22ed0 6e 66 69 67 75 72 65 64 20 74 6f 20 6d 6f 76 65  nfigured to move
22ee0 20 69 6e 20 72 65 76 65 72 73 65 20 6f 72 64 65   in reverse orde
22ef0 72 2c 0a 2a 2a 20 66 72 6f 6d 20 74 68 65 20 65  r,.** from the e
22f00 6e 64 20 74 6f 77 61 72 64 20 74 68 65 20 62 65  nd toward the be
22f10 67 69 6e 6e 69 6e 67 2e 20 20 49 6e 20 6f 74 68  ginning.  In oth
22f20 65 72 20 77 6f 72 64 73 2c 20 74 68 65 20 63 75  er words, the cu
22f30 72 73 6f 72 20 69 73 0a 2a 2a 20 63 6f 6e 66 69  rsor is.** confi
22f40 67 75 72 65 64 20 74 6f 20 75 73 65 20 50 72 65  gured to use Pre
22f50 76 2c 20 6e 6f 74 20 4e 65 78 74 2e 0a 2a 2a 0a  v, not Next..**.
22f60 2a 2a 20 49 66 20 74 68 65 20 63 75 72 73 6f 72  ** If the cursor
22f70 20 50 31 20 77 61 73 20 6f 70 65 6e 65 64 20 75   P1 was opened u
22f80 73 69 6e 67 20 74 68 65 20 4f 50 46 4c 41 47 5f  sing the OPFLAG_
22f90 53 45 45 4b 45 51 20 66 6c 61 67 2c 20 74 68 65  SEEKEQ flag, the
22fa0 6e 20 74 68 69 73 0a 2a 2a 20 6f 70 63 6f 64 65  n this.** opcode
22fb0 20 77 69 6c 6c 20 61 6c 77 61 79 73 20 6c 61 6e   will always lan
22fc0 64 20 6f 6e 20 61 20 72 65 63 6f 72 64 20 74 68  d on a record th
22fd0 61 74 20 65 71 75 61 6c 6c 79 20 65 71 75 61 6c  at equally equal
22fe0 73 20 74 68 65 20 6b 65 79 2c 20 6f 72 0a 2a 2a  s the key, or.**
22ff0 20 65 6c 73 65 20 6a 75 6d 70 20 69 6d 6d 65 64   else jump immed
23000 69 61 74 65 6c 79 20 74 6f 20 50 32 2e 20 20 57  iately to P2.  W
23010 68 65 6e 20 74 68 65 20 63 75 72 73 6f 72 20 69  hen the cursor i
23020 73 20 4f 50 46 4c 41 47 5f 53 45 45 4b 45 51 2c  s OPFLAG_SEEKEQ,
23030 20 74 68 69 73 0a 2a 2a 20 6f 70 63 6f 64 65 20   this.** opcode 
23040 6d 75 73 74 20 62 65 20 66 6f 6c 6c 6f 77 65 64  must be followed
23050 20 62 79 20 61 6e 20 49 64 78 47 45 20 6f 70 63   by an IdxGE opc
23060 6f 64 65 20 77 69 74 68 20 74 68 65 20 73 61 6d  ode with the sam
23070 65 20 61 72 67 75 6d 65 6e 74 73 2e 0a 2a 2a 20  e arguments..** 
23080 54 68 65 20 49 64 78 47 45 20 6f 70 63 6f 64 65  The IdxGE opcode
23090 20 77 69 6c 6c 20 62 65 20 73 6b 69 70 70 65 64   will be skipped
230a0 20 69 66 20 74 68 69 73 20 6f 70 63 6f 64 65 20   if this opcode 
230b0 73 75 63 63 65 65 64 73 2c 20 62 75 74 20 74 68  succeeds, but th
230c0 65 0a 2a 2a 20 49 64 78 47 45 20 6f 70 63 6f 64  e.** IdxGE opcod
230d0 65 20 77 69 6c 6c 20 62 65 20 75 73 65 64 20 6f  e will be used o
230e0 6e 20 73 75 62 73 65 71 75 65 6e 74 20 6c 6f 6f  n subsequent loo
230f0 70 20 69 74 65 72 61 74 69 6f 6e 73 2e 0a 2a 2a  p iterations..**
23100 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 46 6f  .** See also: Fo
23110 75 6e 64 2c 20 4e 6f 74 46 6f 75 6e 64 2c 20 53  und, NotFound, S
23120 65 65 6b 47 74 2c 20 53 65 65 6b 47 65 2c 20 53  eekGt, SeekGe, S
23130 65 65 6b 4c 74 0a 2a 2f 0a 63 61 73 65 20 4f 50  eekLt.*/.case OP
23140 5f 53 65 65 6b 4c 54 3a 20 20 20 20 20 20 20 20  _SeekLT:        
23150 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 2c 20 67   /* jump, in3, g
23160 72 6f 75 70 20 2a 2f 0a 63 61 73 65 20 4f 50 5f  roup */.case OP_
23170 53 65 65 6b 4c 45 3a 20 20 20 20 20 20 20 20 20  SeekLE:         
23180 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 2c 20 67 72  /* jump, in3, gr
23190 6f 75 70 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 53  oup */.case OP_S
231a0 65 65 6b 47 45 3a 20 20 20 20 20 20 20 20 20 2f  eekGE:         /
231b0 2a 20 6a 75 6d 70 2c 20 69 6e 33 2c 20 67 72 6f  * jump, in3, gro
231c0 75 70 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 65  up */.case OP_Se
231d0 65 6b 47 54 3a 20 7b 20 20 20 20 20 20 20 2f 2a  ekGT: {       /*
231e0 20 6a 75 6d 70 2c 20 69 6e 33 2c 20 67 72 6f 75   jump, in3, grou
231f0 70 20 2a 2f 0a 20 20 69 6e 74 20 72 65 73 3b 20  p */.  int res; 
23200 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 6d            /* Com
23210 70 61 72 69 73 6f 6e 20 72 65 73 75 6c 74 20 2a  parison result *
23220 2f 0a 20 20 69 6e 74 20 6f 63 3b 20 20 20 20 20  /.  int oc;     
23230 20 20 20 20 20 20 20 2f 2a 20 4f 70 63 6f 64 65         /* Opcode
23240 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73 6f 72   */.  VdbeCursor
23250 20 2a 70 43 3b 20 20 20 20 2f 2a 20 54 68 65 20   *pC;    /* The 
23260 63 75 72 73 6f 72 20 74 6f 20 73 65 65 6b 20 2a  cursor to seek *
23270 2f 0a 20 20 55 6e 70 61 63 6b 65 64 52 65 63 6f  /.  UnpackedReco
23280 72 64 20 72 3b 20 20 2f 2a 20 54 68 65 20 6b 65  rd r;  /* The ke
23290 79 20 74 6f 20 73 65 65 6b 20 66 6f 72 20 2a 2f  y to seek for */
232a0 0a 20 20 69 6e 74 20 6e 46 69 65 6c 64 3b 20 20  .  int nField;  
232b0 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
232c0 6f 66 20 63 6f 6c 75 6d 6e 73 20 6f 72 20 66 69  of columns or fi
232d0 65 6c 64 73 20 69 6e 20 74 68 65 20 6b 65 79 20  elds in the key 
232e0 2a 2f 0a 20 20 69 36 34 20 69 4b 65 79 3b 20 20  */.  i64 iKey;  
232f0 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 72          /* The r
23300 6f 77 69 64 20 77 65 20 61 72 65 20 74 6f 20 73  owid we are to s
23310 65 65 6b 20 74 6f 20 2a 2f 0a 20 20 69 6e 74 20  eek to */.  int 
23320 65 71 4f 6e 6c 79 3b 20 20 20 20 20 20 20 20 2f  eqOnly;        /
23330 2a 20 4f 6e 6c 79 20 69 6e 74 65 72 65 73 74 65  * Only intereste
23340 64 20 69 6e 20 3d 3d 20 72 65 73 75 6c 74 73 20  d in == results 
23350 2a 2f 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f  */..  assert( pO
23360 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d  p->p1>=0 && pOp-
23370 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29  >p1<p->nCursor )
23380 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
23390 3e 70 32 21 3d 30 20 29 3b 0a 20 20 70 43 20 3d  >p2!=0 );.  pC =
233a0 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70   p->apCsr[pOp->p
233b0 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43  1];.  assert( pC
233c0 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  !=0 );.  assert(
233d0 20 70 43 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43   pC->eCurType==C
233e0 55 52 54 59 50 45 5f 42 54 52 45 45 20 29 3b 0a  URTYPE_BTREE );.
233f0 20 20 61 73 73 65 72 74 28 20 4f 50 5f 53 65 65    assert( OP_See
23400 6b 4c 45 20 3d 3d 20 4f 50 5f 53 65 65 6b 4c 54  kLE == OP_SeekLT
23410 2b 31 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  +1 );.  assert( 
23420 4f 50 5f 53 65 65 6b 47 45 20 3d 3d 20 4f 50 5f  OP_SeekGE == OP_
23430 53 65 65 6b 4c 54 2b 32 20 29 3b 0a 20 20 61 73  SeekLT+2 );.  as
23440 73 65 72 74 28 20 4f 50 5f 53 65 65 6b 47 54 20  sert( OP_SeekGT 
23450 3d 3d 20 4f 50 5f 53 65 65 6b 4c 54 2b 33 20 29  == OP_SeekLT+3 )
23460 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  ;.  assert( pC->
23470 69 73 4f 72 64 65 72 65 64 20 29 3b 0a 20 20 61  isOrdered );.  a
23480 73 73 65 72 74 28 20 70 43 2d 3e 75 63 2e 70 43  ssert( pC->uc.pC
23490 75 72 73 6f 72 21 3d 30 20 29 3b 0a 20 20 6f 63  ursor!=0 );.  oc
234a0 20 3d 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3b 0a   = pOp->opcode;.
234b0 20 20 65 71 4f 6e 6c 79 20 3d 20 30 3b 0a 20 20    eqOnly = 0;.  
234c0 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 30 3b  pC->nullRow = 0;
234d0 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44  .#ifdef SQLITE_D
234e0 45 42 55 47 0a 20 20 70 43 2d 3e 73 65 65 6b 4f  EBUG.  pC->seekO
234f0 70 20 3d 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3b  p = pOp->opcode;
23500 0a 23 65 6e 64 69 66 0a 0a 20 20 70 43 2d 3e 64  .#endif..  pC->d
23510 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d 20  eferredMoveto = 
23520 30 3b 0a 20 20 70 43 2d 3e 63 61 63 68 65 53 74  0;.  pC->cacheSt
23530 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41  atus = CACHE_STA
23540 4c 45 3b 0a 20 20 69 66 28 20 70 43 2d 3e 69 73  LE;.  if( pC->is
23550 54 61 62 6c 65 20 29 7b 0a 20 20 20 20 75 31 36  Table ){.    u16
23560 20 66 6c 61 67 73 33 2c 20 6e 65 77 54 79 70 65   flags3, newType
23570 3b 0a 20 20 20 20 2f 2a 20 54 68 65 20 42 54 52  ;.    /* The BTR
23580 45 45 5f 53 45 45 4b 5f 45 51 20 66 6c 61 67 20  EE_SEEK_EQ flag 
23590 69 73 20 6f 6e 6c 79 20 73 65 74 20 6f 6e 20 69  is only set on i
235a0 6e 64 65 78 20 63 75 72 73 6f 72 73 20 2a 2f 0a  ndex cursors */.
235b0 20 20 20 20 61 73 73 65 72 74 28 20 73 71 6c 69      assert( sqli
235c0 74 65 33 42 74 72 65 65 43 75 72 73 6f 72 48 61  te3BtreeCursorHa
235d0 73 48 69 6e 74 28 70 43 2d 3e 75 63 2e 70 43 75  sHint(pC->uc.pCu
235e0 72 73 6f 72 2c 20 42 54 52 45 45 5f 53 45 45 4b  rsor, BTREE_SEEK
235f0 5f 45 51 29 3d 3d 30 0a 20 20 20 20 20 20 20 20  _EQ)==0.        
23600 20 20 20 20 20 20 7c 7c 20 43 4f 52 52 55 50 54        || CORRUPT
23610 5f 44 42 20 29 3b 0a 0a 20 20 20 20 2f 2a 20 54  _DB );..    /* T
23620 68 65 20 69 6e 70 75 74 20 76 61 6c 75 65 20 69  he input value i
23630 6e 20 50 33 20 6d 69 67 68 74 20 62 65 20 6f 66  n P3 might be of
23640 20 61 6e 79 20 74 79 70 65 3a 20 69 6e 74 65 67   any type: integ
23650 65 72 2c 20 72 65 61 6c 2c 20 73 74 72 69 6e 67  er, real, string
23660 2c 0a 20 20 20 20 2a 2a 20 62 6c 6f 62 2c 20 6f  ,.    ** blob, o
23670 72 20 4e 55 4c 4c 2e 20 20 42 75 74 20 69 74 20  r NULL.  But it 
23680 6e 65 65 64 73 20 74 6f 20 62 65 20 61 6e 20 69  needs to be an i
23690 6e 74 65 67 65 72 20 62 65 66 6f 72 65 20 77 65  nteger before we
236a0 20 63 61 6e 20 64 6f 0a 20 20 20 20 2a 2a 20 74   can do.    ** t
236b0 68 65 20 73 65 65 6b 2c 20 73 6f 20 63 6f 6e 76  he seek, so conv
236c0 65 72 74 20 69 74 2e 20 2a 2f 0a 20 20 20 20 70  ert it. */.    p
236d0 49 6e 33 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In3 = &aMem[pOp-
236e0 3e 70 33 5d 3b 0a 20 20 20 20 66 6c 61 67 73 33  >p3];.    flags3
236f0 20 3d 20 70 49 6e 33 2d 3e 66 6c 61 67 73 3b 0a   = pIn3->flags;.
23700 20 20 20 20 69 66 28 20 28 66 6c 61 67 73 33 20      if( (flags3 
23710 26 20 28 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 52  & (MEM_Int|MEM_R
23720 65 61 6c 7c 4d 45 4d 5f 49 6e 74 52 65 61 6c 7c  eal|MEM_IntReal|
23730 4d 45 4d 5f 53 74 72 29 29 3d 3d 4d 45 4d 5f 53  MEM_Str))==MEM_S
23740 74 72 20 29 7b 0a 20 20 20 20 20 20 61 70 70 6c  tr ){.      appl
23750 79 4e 75 6d 65 72 69 63 41 66 66 69 6e 69 74 79  yNumericAffinity
23760 28 70 49 6e 33 2c 20 30 29 3b 0a 20 20 20 20 7d  (pIn3, 0);.    }
23770 0a 20 20 20 20 69 4b 65 79 20 3d 20 73 71 6c 69  .    iKey = sqli
23780 74 65 33 56 64 62 65 49 6e 74 56 61 6c 75 65 28  te3VdbeIntValue(
23790 70 49 6e 33 29 3b 20 2f 2a 20 47 65 74 20 74 68  pIn3); /* Get th
237a0 65 20 69 6e 74 65 67 65 72 20 6b 65 79 20 76 61  e integer key va
237b0 6c 75 65 20 2a 2f 0a 20 20 20 20 6e 65 77 54 79  lue */.    newTy
237c0 70 65 20 3d 20 70 49 6e 33 2d 3e 66 6c 61 67 73  pe = pIn3->flags
237d0 3b 20 2f 2a 20 52 65 63 6f 72 64 20 74 68 65 20  ; /* Record the 
237e0 74 79 70 65 20 61 66 74 65 72 20 61 70 70 6c 79  type after apply
237f0 69 6e 67 20 6e 75 6d 65 72 69 63 20 61 66 66 69  ing numeric affi
23800 6e 69 74 79 20 2a 2f 0a 20 20 20 20 70 49 6e 33  nity */.    pIn3
23810 2d 3e 66 6c 61 67 73 20 3d 20 66 6c 61 67 73 33  ->flags = flags3
23820 3b 20 20 2f 2a 20 42 75 74 20 63 6f 6e 76 65 72  ;  /* But conver
23830 74 20 74 68 65 20 74 79 70 65 20 62 61 63 6b 20  t the type back 
23840 74 6f 20 69 74 73 20 6f 72 69 67 69 6e 61 6c 20  to its original 
23850 2a 2f 0a 0a 20 20 20 20 2f 2a 20 49 66 20 74 68  */..    /* If th
23860 65 20 50 33 20 76 61 6c 75 65 20 63 6f 75 6c 64  e P3 value could
23870 20 6e 6f 74 20 62 65 20 63 6f 6e 76 65 72 74 65   not be converte
23880 64 20 69 6e 74 6f 20 61 6e 20 69 6e 74 65 67 65  d into an intege
23890 72 20 77 69 74 68 6f 75 74 0a 20 20 20 20 2a 2a  r without.    **
238a0 20 6c 6f 73 73 20 6f 66 20 69 6e 66 6f 72 6d 61   loss of informa
238b0 74 69 6f 6e 2c 20 74 68 65 6e 20 73 70 65 63 69  tion, then speci
238c0 61 6c 20 70 72 6f 63 65 73 73 69 6e 67 20 69 73  al processing is
238d0 20 72 65 71 75 69 72 65 64 2e 2e 2e 20 2a 2f 0a   required... */.
238e0 20 20 20 20 69 66 28 20 28 6e 65 77 54 79 70 65      if( (newType
238f0 20 26 20 28 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f   & (MEM_Int|MEM_
23900 49 6e 74 52 65 61 6c 29 29 3d 3d 30 20 29 7b 0a  IntReal))==0 ){.
23910 20 20 20 20 20 20 69 66 28 20 28 6e 65 77 54 79        if( (newTy
23920 70 65 20 26 20 4d 45 4d 5f 52 65 61 6c 29 3d 3d  pe & MEM_Real)==
23930 30 20 29 7b 0a 20 20 20 20 20 20 20 20 69 66 28  0 ){.        if(
23940 20 28 6e 65 77 54 79 70 65 20 26 20 4d 45 4d 5f   (newType & MEM_
23950 4e 75 6c 6c 29 20 7c 7c 20 6f 63 3e 3d 4f 50 5f  Null) || oc>=OP_
23960 53 65 65 6b 47 45 20 29 7b 0a 20 20 20 20 20 20  SeekGE ){.      
23970 20 20 20 20 56 64 62 65 42 72 61 6e 63 68 54 61      VdbeBranchTa
23980 6b 65 6e 28 31 2c 32 29 3b 0a 20 20 20 20 20 20  ken(1,2);.      
23990 20 20 20 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f      goto jump_to
239a0 5f 70 32 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c  _p2;.        }el
239b0 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20 72 63  se{.          rc
239c0 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 4c   = sqlite3BtreeL
239d0 61 73 74 28 70 43 2d 3e 75 63 2e 70 43 75 72 73  ast(pC->uc.pCurs
239e0 6f 72 2c 20 26 72 65 73 29 3b 0a 20 20 20 20 20  or, &res);.     
239f0 20 20 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c       if( rc!=SQL
23a00 49 54 45 5f 4f 4b 20 29 20 67 6f 74 6f 20 61 62  ITE_OK ) goto ab
23a10 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
23a20 3b 0a 20 20 20 20 20 20 20 20 20 20 67 6f 74 6f  ;.          goto
23a30 20 73 65 65 6b 5f 6e 6f 74 5f 66 6f 75 6e 64 3b   seek_not_found;
23a40 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20  .        }.     
23a50 20 7d 65 6c 73 65 0a 0a 20 20 20 20 20 20 2f 2a   }else..      /*
23a60 20 49 66 20 74 68 65 20 61 70 70 72 6f 78 69 6d   If the approxim
23a70 61 74 69 6f 6e 20 69 4b 65 79 20 69 73 20 6c 61  ation iKey is la
23a80 72 67 65 72 20 74 68 61 6e 20 74 68 65 20 61 63  rger than the ac
23a90 74 75 61 6c 20 72 65 61 6c 20 73 65 61 72 63 68  tual real search
23aa0 0a 20 20 20 20 20 20 2a 2a 20 74 65 72 6d 2c 20  .      ** term, 
23ab0 73 75 62 73 74 69 74 75 74 65 20 3e 3d 20 66 6f  substitute >= fo
23ac0 72 20 3e 20 61 6e 64 20 3c 20 66 6f 72 20 3c 3d  r > and < for <=
23ad0 2e 20 65 2e 67 2e 20 69 66 20 74 68 65 20 73 65  . e.g. if the se
23ae0 61 72 63 68 20 74 65 72 6d 0a 20 20 20 20 20 20  arch term.      
23af0 2a 2a 20 69 73 20 34 2e 39 20 61 6e 64 20 74 68  ** is 4.9 and th
23b00 65 20 69 6e 74 65 67 65 72 20 61 70 70 72 6f 78  e integer approx
23b10 69 6d 61 74 69 6f 6e 20 35 3a 0a 20 20 20 20 20  imation 5:.     
23b20 20 2a 2a 0a 20 20 20 20 20 20 2a 2a 20 20 20 20   **.      **    
23b30 20 20 20 20 28 78 20 3e 20 20 34 2e 39 29 20 20      (x >  4.9)  
23b40 20 20 2d 3e 20 20 20 20 20 28 78 20 3e 3d 20 35    ->     (x >= 5
23b50 29 0a 20 20 20 20 20 20 2a 2a 20 20 20 20 20 20  ).      **      
23b60 20 20 28 78 20 3c 3d 20 34 2e 39 29 20 20 20 20    (x <= 4.9)    
23b70 2d 3e 20 20 20 20 20 28 78 20 3c 20 20 35 29 0a  ->     (x <  5).
23b80 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 69        */.      i
23b90 66 28 20 70 49 6e 33 2d 3e 75 2e 72 3c 28 64 6f  f( pIn3->u.r<(do
23ba0 75 62 6c 65 29 69 4b 65 79 20 29 7b 0a 20 20 20  uble)iKey ){.   
23bb0 20 20 20 20 20 61 73 73 65 72 74 28 20 4f 50 5f       assert( OP_
23bc0 53 65 65 6b 47 45 3d 3d 28 4f 50 5f 53 65 65 6b  SeekGE==(OP_Seek
23bd0 47 54 2d 31 29 20 29 3b 0a 20 20 20 20 20 20 20  GT-1) );.       
23be0 20 61 73 73 65 72 74 28 20 4f 50 5f 53 65 65 6b   assert( OP_Seek
23bf0 4c 54 3d 3d 28 4f 50 5f 53 65 65 6b 4c 45 2d 31  LT==(OP_SeekLE-1
23c00 29 20 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73  ) );.        ass
23c10 65 72 74 28 20 28 4f 50 5f 53 65 65 6b 4c 45 20  ert( (OP_SeekLE 
23c20 26 20 30 78 30 30 30 31 29 3d 3d 28 4f 50 5f 53  & 0x0001)==(OP_S
23c30 65 65 6b 47 54 20 26 20 30 78 30 30 30 31 29 20  eekGT & 0x0001) 
23c40 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 28  );.        if( (
23c50 6f 63 20 26 20 30 78 30 30 30 31 29 3d 3d 28 4f  oc & 0x0001)==(O
23c60 50 5f 53 65 65 6b 47 54 20 26 20 30 78 30 30 30  P_SeekGT & 0x000
23c70 31 29 20 29 20 6f 63 2d 2d 3b 0a 20 20 20 20 20  1) ) oc--;.     
23c80 20 7d 0a 0a 20 20 20 20 20 20 2f 2a 20 49 66 20   }..      /* If 
23c90 74 68 65 20 61 70 70 72 6f 78 69 6d 61 74 69 6f  the approximatio
23ca0 6e 20 69 4b 65 79 20 69 73 20 73 6d 61 6c 6c 65  n iKey is smalle
23cb0 72 20 74 68 61 6e 20 74 68 65 20 61 63 74 75 61  r than the actua
23cc0 6c 20 72 65 61 6c 20 73 65 61 72 63 68 0a 20 20  l real search.  
23cd0 20 20 20 20 2a 2a 20 74 65 72 6d 2c 20 73 75 62      ** term, sub
23ce0 73 74 69 74 75 74 65 20 3c 3d 20 66 6f 72 20 3c  stitute <= for <
23cf0 20 61 6e 64 20 3e 20 66 6f 72 20 3e 3d 2e 20 20   and > for >=.  
23d00 2a 2f 0a 20 20 20 20 20 20 65 6c 73 65 20 69 66  */.      else if
23d10 28 20 70 49 6e 33 2d 3e 75 2e 72 3e 28 64 6f 75  ( pIn3->u.r>(dou
23d20 62 6c 65 29 69 4b 65 79 20 29 7b 0a 20 20 20 20  ble)iKey ){.    
23d30 20 20 20 20 61 73 73 65 72 74 28 20 4f 50 5f 53      assert( OP_S
23d40 65 65 6b 4c 45 3d 3d 28 4f 50 5f 53 65 65 6b 4c  eekLE==(OP_SeekL
23d50 54 2b 31 29 20 29 3b 0a 20 20 20 20 20 20 20 20  T+1) );.        
23d60 61 73 73 65 72 74 28 20 4f 50 5f 53 65 65 6b 47  assert( OP_SeekG
23d70 54 3d 3d 28 4f 50 5f 53 65 65 6b 47 45 2b 31 29  T==(OP_SeekGE+1)
23d80 20 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65   );.        asse
23d90 72 74 28 20 28 4f 50 5f 53 65 65 6b 4c 54 20 26  rt( (OP_SeekLT &
23da0 20 30 78 30 30 30 31 29 3d 3d 28 4f 50 5f 53 65   0x0001)==(OP_Se
23db0 65 6b 47 45 20 26 20 30 78 30 30 30 31 29 20 29  ekGE & 0x0001) )
23dc0 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 28 6f  ;.        if( (o
23dd0 63 20 26 20 30 78 30 30 30 31 29 3d 3d 28 4f 50  c & 0x0001)==(OP
23de0 5f 53 65 65 6b 4c 54 20 26 20 30 78 30 30 30 31  _SeekLT & 0x0001
23df0 29 20 29 20 6f 63 2b 2b 3b 0a 20 20 20 20 20 20  ) ) oc++;.      
23e00 7d 0a 20 20 20 20 7d 0a 20 20 20 20 72 63 20 3d  }.    }.    rc =
23e10 20 73 71 6c 69 74 65 33 42 74 72 65 65 4d 6f 76   sqlite3BtreeMov
23e20 65 74 6f 55 6e 70 61 63 6b 65 64 28 70 43 2d 3e  etoUnpacked(pC->
23e30 75 63 2e 70 43 75 72 73 6f 72 2c 20 30 2c 20 28  uc.pCursor, 0, (
23e40 75 36 34 29 69 4b 65 79 2c 20 30 2c 20 26 72 65  u64)iKey, 0, &re
23e50 73 29 3b 0a 20 20 20 20 70 43 2d 3e 6d 6f 76 65  s);.    pC->move
23e60 74 6f 54 61 72 67 65 74 20 3d 20 69 4b 65 79 3b  toTarget = iKey;
23e70 20 20 2f 2a 20 55 73 65 64 20 62 79 20 4f 50 5f    /* Used by OP_
23e80 44 65 6c 65 74 65 20 2a 2f 0a 20 20 20 20 69 66  Delete */.    if
23e90 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc!=SQLITE_OK 
23ea0 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20 61 62  ){.      goto ab
23eb0 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
23ec0 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b  ;.    }.  }else{
23ed0 0a 20 20 20 20 2f 2a 20 46 6f 72 20 61 20 63 75  .    /* For a cu
23ee0 72 73 6f 72 20 77 69 74 68 20 74 68 65 20 42 54  rsor with the BT
23ef0 52 45 45 5f 53 45 45 4b 5f 45 51 20 68 69 6e 74  REE_SEEK_EQ hint
23f00 2c 20 6f 6e 6c 79 20 74 68 65 20 4f 50 5f 53 65  , only the OP_Se
23f10 65 6b 47 45 20 61 6e 64 0a 20 20 20 20 2a 2a 20  ekGE and.    ** 
23f20 4f 50 5f 53 65 65 6b 4c 45 20 6f 70 63 6f 64 65  OP_SeekLE opcode
23f30 73 20 61 72 65 20 61 6c 6c 6f 77 65 64 2c 20 61  s are allowed, a
23f40 6e 64 20 74 68 65 73 65 20 6d 75 73 74 20 62 65  nd these must be
23f50 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 66 6f 6c   immediately fol
23f60 6c 6f 77 65 64 0a 20 20 20 20 2a 2a 20 62 79 20  lowed.    ** by 
23f70 61 6e 20 4f 50 5f 49 64 78 47 54 20 6f 72 20 4f  an OP_IdxGT or O
23f80 50 5f 49 64 78 4c 54 20 6f 70 63 6f 64 65 2c 20  P_IdxLT opcode, 
23f90 72 65 73 70 65 63 74 69 76 65 6c 79 2c 20 77 69  respectively, wi
23fa0 74 68 20 74 68 65 20 73 61 6d 65 20 6b 65 79 2e  th the same key.
23fb0 0a 20 20 20 20 2a 2f 0a 20 20 20 20 69 66 28 20  .    */.    if( 
23fc0 73 71 6c 69 74 65 33 42 74 72 65 65 43 75 72 73  sqlite3BtreeCurs
23fd0 6f 72 48 61 73 48 69 6e 74 28 70 43 2d 3e 75 63  orHasHint(pC->uc
23fe0 2e 70 43 75 72 73 6f 72 2c 20 42 54 52 45 45 5f  .pCursor, BTREE_
23ff0 53 45 45 4b 5f 45 51 29 20 29 7b 0a 20 20 20 20  SEEK_EQ) ){.    
24000 20 20 65 71 4f 6e 6c 79 20 3d 20 31 3b 0a 20 20    eqOnly = 1;.  
24010 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d      assert( pOp-
24020 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 53 65 65 6b  >opcode==OP_Seek
24030 47 45 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64  GE || pOp->opcod
24040 65 3d 3d 4f 50 5f 53 65 65 6b 4c 45 20 29 3b 0a  e==OP_SeekLE );.
24050 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f        assert( pO
24060 70 5b 31 5d 2e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  p[1].opcode==OP_
24070 49 64 78 4c 54 20 7c 7c 20 70 4f 70 5b 31 5d 2e  IdxLT || pOp[1].
24080 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 64 78 47 54  opcode==OP_IdxGT
24090 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74   );.      assert
240a0 28 20 70 4f 70 5b 31 5d 2e 70 31 3d 3d 70 4f 70  ( pOp[1].p1==pOp
240b0 5b 30 5d 2e 70 31 20 29 3b 0a 20 20 20 20 20 20  [0].p1 );.      
240c0 61 73 73 65 72 74 28 20 70 4f 70 5b 31 5d 2e 70  assert( pOp[1].p
240d0 32 3d 3d 70 4f 70 5b 30 5d 2e 70 32 20 29 3b 0a  2==pOp[0].p2 );.
240e0 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f        assert( pO
240f0 70 5b 31 5d 2e 70 33 3d 3d 70 4f 70 5b 30 5d 2e  p[1].p3==pOp[0].
24100 70 33 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65  p3 );.      asse
24110 72 74 28 20 70 4f 70 5b 31 5d 2e 70 34 2e 69 3d  rt( pOp[1].p4.i=
24120 3d 70 4f 70 5b 30 5d 2e 70 34 2e 69 20 29 3b 0a  =pOp[0].p4.i );.
24130 20 20 20 20 7d 0a 0a 20 20 20 20 6e 46 69 65 6c      }..    nFiel
24140 64 20 3d 20 70 4f 70 2d 3e 70 34 2e 69 3b 0a 20  d = pOp->p4.i;. 
24150 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e     assert( pOp->
24160 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54 33 32  p4type==P4_INT32
24170 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20   );.    assert( 
24180 6e 46 69 65 6c 64 3e 30 20 29 3b 0a 20 20 20 20  nField>0 );.    
24190 72 2e 70 4b 65 79 49 6e 66 6f 20 3d 20 70 43 2d  r.pKeyInfo = pC-
241a0 3e 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 20 20 72  >pKeyInfo;.    r
241b0 2e 6e 46 69 65 6c 64 20 3d 20 28 75 31 36 29 6e  .nField = (u16)n
241c0 46 69 65 6c 64 3b 0a 0a 20 20 20 20 2f 2a 20 54  Field;..    /* T
241d0 68 65 20 6e 65 78 74 20 6c 69 6e 65 20 6f 66 20  he next line of 
241e0 63 6f 64 65 20 63 6f 6d 70 75 74 65 73 20 61 73  code computes as
241f0 20 66 6f 6c 6c 6f 77 73 2c 20 6f 6e 6c 79 20 66   follows, only f
24200 61 73 74 65 72 3a 0a 20 20 20 20 2a 2a 20 20 20  aster:.    **   
24210 69 66 28 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 47  if( oc==OP_SeekG
24220 54 20 7c 7c 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b  T || oc==OP_Seek
24230 4c 45 20 29 7b 0a 20 20 20 20 2a 2a 20 20 20 20  LE ){.    **    
24240 20 72 2e 64 65 66 61 75 6c 74 5f 72 63 20 3d 20   r.default_rc = 
24250 2d 31 3b 0a 20 20 20 20 2a 2a 20 20 20 7d 65 6c  -1;.    **   }el
24260 73 65 7b 0a 20 20 20 20 2a 2a 20 20 20 20 20 72  se{.    **     r
24270 2e 64 65 66 61 75 6c 74 5f 72 63 20 3d 20 2b 31  .default_rc = +1
24280 3b 0a 20 20 20 20 2a 2a 20 20 20 7d 0a 20 20 20  ;.    **   }.   
24290 20 2a 2f 0a 20 20 20 20 72 2e 64 65 66 61 75 6c   */.    r.defaul
242a0 74 5f 72 63 20 3d 20 28 28 31 20 26 20 28 6f 63  t_rc = ((1 & (oc
242b0 20 2d 20 4f 50 5f 53 65 65 6b 4c 54 29 29 20 3f   - OP_SeekLT)) ?
242c0 20 2d 31 20 3a 20 2b 31 29 3b 0a 20 20 20 20 61   -1 : +1);.    a
242d0 73 73 65 72 74 28 20 6f 63 21 3d 4f 50 5f 53 65  ssert( oc!=OP_Se
242e0 65 6b 47 54 20 7c 7c 20 72 2e 64 65 66 61 75 6c  ekGT || r.defaul
242f0 74 5f 72 63 3d 3d 2d 31 20 29 3b 0a 20 20 20 20  t_rc==-1 );.    
24300 61 73 73 65 72 74 28 20 6f 63 21 3d 4f 50 5f 53  assert( oc!=OP_S
24310 65 65 6b 4c 45 20 7c 7c 20 72 2e 64 65 66 61 75  eekLE || r.defau
24320 6c 74 5f 72 63 3d 3d 2d 31 20 29 3b 0a 20 20 20  lt_rc==-1 );.   
24330 20 61 73 73 65 72 74 28 20 6f 63 21 3d 4f 50 5f   assert( oc!=OP_
24340 53 65 65 6b 47 45 20 7c 7c 20 72 2e 64 65 66 61  SeekGE || r.defa
24350 75 6c 74 5f 72 63 3d 3d 2b 31 20 29 3b 0a 20 20  ult_rc==+1 );.  
24360 20 20 61 73 73 65 72 74 28 20 6f 63 21 3d 4f 50    assert( oc!=OP
24370 5f 53 65 65 6b 4c 54 20 7c 7c 20 72 2e 64 65 66  _SeekLT || r.def
24380 61 75 6c 74 5f 72 63 3d 3d 2b 31 20 29 3b 0a 0a  ault_rc==+1 );..
24390 20 20 20 20 72 2e 61 4d 65 6d 20 3d 20 26 61 4d      r.aMem = &aM
243a0 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 23 69 66  em[pOp->p3];.#if
243b0 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47  def SQLITE_DEBUG
243c0 0a 20 20 20 20 7b 20 69 6e 74 20 69 3b 20 66 6f  .    { int i; fo
243d0 72 28 69 3d 30 3b 20 69 3c 72 2e 6e 46 69 65 6c  r(i=0; i<r.nFiel
243e0 64 3b 20 69 2b 2b 29 20 61 73 73 65 72 74 28 20  d; i++) assert( 
243f0 6d 65 6d 49 73 56 61 6c 69 64 28 26 72 2e 61 4d  memIsValid(&r.aM
24400 65 6d 5b 69 5d 29 20 29 3b 20 7d 0a 23 65 6e 64  em[i]) ); }.#end
24410 69 66 0a 20 20 20 20 72 2e 65 71 53 65 65 6e 20  if.    r.eqSeen 
24420 3d 20 30 3b 0a 20 20 20 20 72 63 20 3d 20 73 71  = 0;.    rc = sq
24430 6c 69 74 65 33 42 74 72 65 65 4d 6f 76 65 74 6f  lite3BtreeMoveto
24440 55 6e 70 61 63 6b 65 64 28 70 43 2d 3e 75 63 2e  Unpacked(pC->uc.
24450 70 43 75 72 73 6f 72 2c 20 26 72 2c 20 30 2c 20  pCursor, &r, 0, 
24460 30 2c 20 26 72 65 73 29 3b 0a 20 20 20 20 69 66  0, &res);.    if
24470 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc!=SQLITE_OK 
24480 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20 61 62  ){.      goto ab
24490 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
244a0 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20  ;.    }.    if( 
244b0 65 71 4f 6e 6c 79 20 26 26 20 72 2e 65 71 53 65  eqOnly && r.eqSe
244c0 65 6e 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 61  en==0 ){.      a
244d0 73 73 65 72 74 28 20 72 65 73 21 3d 30 20 29 3b  ssert( res!=0 );
244e0 0a 20 20 20 20 20 20 67 6f 74 6f 20 73 65 65 6b  .      goto seek
244f0 5f 6e 6f 74 5f 66 6f 75 6e 64 3b 0a 20 20 20 20  _not_found;.    
24500 7d 0a 20 20 7d 0a 23 69 66 64 65 66 20 53 51 4c  }.  }.#ifdef SQL
24510 49 54 45 5f 54 45 53 54 0a 20 20 73 71 6c 69 74  ITE_TEST.  sqlit
24520 65 33 5f 73 65 61 72 63 68 5f 63 6f 75 6e 74 2b  e3_search_count+
24530 2b 3b 0a 23 65 6e 64 69 66 0a 20 20 69 66 28 20  +;.#endif.  if( 
24540 6f 63 3e 3d 4f 50 5f 53 65 65 6b 47 45 20 29 7b  oc>=OP_SeekGE ){
24550 20 20 61 73 73 65 72 74 28 20 6f 63 3d 3d 4f 50    assert( oc==OP
24560 5f 53 65 65 6b 47 45 20 7c 7c 20 6f 63 3d 3d 4f  _SeekGE || oc==O
24570 50 5f 53 65 65 6b 47 54 20 29 3b 0a 20 20 20 20  P_SeekGT );.    
24580 69 66 28 20 72 65 73 3c 30 20 7c 7c 20 28 72 65  if( res<0 || (re
24590 73 3d 3d 30 20 26 26 20 6f 63 3d 3d 4f 50 5f 53  s==0 && oc==OP_S
245a0 65 65 6b 47 54 29 20 29 7b 0a 20 20 20 20 20 20  eekGT) ){.      
245b0 72 65 73 20 3d 20 30 3b 0a 20 20 20 20 20 20 72  res = 0;.      r
245c0 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
245d0 4e 65 78 74 28 70 43 2d 3e 75 63 2e 70 43 75 72  Next(pC->uc.pCur
245e0 73 6f 72 2c 20 30 29 3b 0a 20 20 20 20 20 20 69  sor, 0);.      i
245f0 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc!=SQLITE_OK
24600 20 29 7b 0a 20 20 20 20 20 20 20 20 69 66 28 20   ){.        if( 
24610 72 63 3d 3d 53 51 4c 49 54 45 5f 44 4f 4e 45 20  rc==SQLITE_DONE 
24620 29 7b 0a 20 20 20 20 20 20 20 20 20 20 72 63 20  ){.          rc 
24630 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20 20  = SQLITE_OK;.   
24640 20 20 20 20 20 20 20 72 65 73 20 3d 20 31 3b 0a         res = 1;.
24650 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20          }else{. 
24660 20 20 20 20 20 20 20 20 20 67 6f 74 6f 20 61 62           goto ab
24670 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
24680 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  ;.        }.    
24690 20 20 7d 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20    }.    }else{. 
246a0 20 20 20 20 20 72 65 73 20 3d 20 30 3b 0a 20 20       res = 0;.  
246b0 20 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20    }.  }else{.   
246c0 20 61 73 73 65 72 74 28 20 6f 63 3d 3d 4f 50 5f   assert( oc==OP_
246d0 53 65 65 6b 4c 54 20 7c 7c 20 6f 63 3d 3d 4f 50  SeekLT || oc==OP
246e0 5f 53 65 65 6b 4c 45 20 29 3b 0a 20 20 20 20 69  _SeekLE );.    i
246f0 66 28 20 72 65 73 3e 30 20 7c 7c 20 28 72 65 73  f( res>0 || (res
24700 3d 3d 30 20 26 26 20 6f 63 3d 3d 4f 50 5f 53 65  ==0 && oc==OP_Se
24710 65 6b 4c 54 29 20 29 7b 0a 20 20 20 20 20 20 72  ekLT) ){.      r
24720 65 73 20 3d 20 30 3b 0a 20 20 20 20 20 20 72 63  es = 0;.      rc
24730 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 50   = sqlite3BtreeP
24740 72 65 76 69 6f 75 73 28 70 43 2d 3e 75 63 2e 70  revious(pC->uc.p
24750 43 75 72 73 6f 72 2c 20 30 29 3b 0a 20 20 20 20  Cursor, 0);.    
24760 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45    if( rc!=SQLITE
24770 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 69  _OK ){.        i
24780 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 44 4f  f( rc==SQLITE_DO
24790 4e 45 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  NE ){.          
247a0 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a  rc = SQLITE_OK;.
247b0 20 20 20 20 20 20 20 20 20 20 72 65 73 20 3d 20            res = 
247c0 31 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c 73 65  1;.        }else
247d0 7b 0a 20 20 20 20 20 20 20 20 20 20 67 6f 74 6f  {.          goto
247e0 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
247f0 72 6f 72 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20  ror;.        }. 
24800 20 20 20 20 20 7d 0a 20 20 20 20 7d 65 6c 73 65       }.    }else
24810 7b 0a 20 20 20 20 20 20 2f 2a 20 72 65 73 20 6d  {.      /* res m
24820 69 67 68 74 20 62 65 20 6e 65 67 61 74 69 76 65  ight be negative
24830 20 62 65 63 61 75 73 65 20 74 68 65 20 74 61 62   because the tab
24840 6c 65 20 69 73 20 65 6d 70 74 79 2e 20 20 43 68  le is empty.  Ch
24850 65 63 6b 20 74 6f 0a 20 20 20 20 20 20 2a 2a 20  eck to.      ** 
24860 73 65 65 20 69 66 20 74 68 69 73 20 69 73 20 74  see if this is t
24870 68 65 20 63 61 73 65 2e 0a 20 20 20 20 20 20 2a  he case..      *
24880 2f 0a 20 20 20 20 20 20 72 65 73 20 3d 20 73 71  /.      res = sq
24890 6c 69 74 65 33 42 74 72 65 65 45 6f 66 28 70 43  lite3BtreeEof(pC
248a0 2d 3e 75 63 2e 70 43 75 72 73 6f 72 29 3b 0a 20  ->uc.pCursor);. 
248b0 20 20 20 7d 0a 20 20 7d 0a 73 65 65 6b 5f 6e 6f     }.  }.seek_no
248c0 74 5f 66 6f 75 6e 64 3a 0a 20 20 61 73 73 65 72  t_found:.  asser
248d0 74 28 20 70 4f 70 2d 3e 70 32 3e 30 20 29 3b 0a  t( pOp->p2>0 );.
248e0 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65    VdbeBranchTake
248f0 6e 28 72 65 73 21 3d 30 2c 32 29 3b 0a 20 20 69  n(res!=0,2);.  i
24900 66 28 20 72 65 73 20 29 7b 0a 20 20 20 20 67 6f  f( res ){.    go
24910 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20  to jump_to_p2;. 
24920 20 7d 65 6c 73 65 20 69 66 28 20 65 71 4f 6e 6c   }else if( eqOnl
24930 79 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28  y ){.    assert(
24940 20 70 4f 70 5b 31 5d 2e 6f 70 63 6f 64 65 3d 3d   pOp[1].opcode==
24950 4f 50 5f 49 64 78 4c 54 20 7c 7c 20 70 4f 70 5b  OP_IdxLT || pOp[
24960 31 5d 2e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 64  1].opcode==OP_Id
24970 78 47 54 20 29 3b 0a 20 20 20 20 70 4f 70 2b 2b  xGT );.    pOp++
24980 3b 20 2f 2a 20 53 6b 69 70 20 74 68 65 20 4f 50  ; /* Skip the OP
24990 5f 49 64 78 4c 74 20 6f 72 20 4f 50 5f 49 64 78  _IdxLt or OP_Idx
249a0 47 54 20 74 68 61 74 20 66 6f 6c 6c 6f 77 73 20  GT that follows 
249b0 2a 2f 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  */.  }.  break;.
249c0 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 65  }../* Opcode: Se
249d0 65 6b 48 69 74 20 50 31 20 50 32 20 2a 20 2a 20  ekHit P1 P2 * * 
249e0 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 73  *.** Synopsis: s
249f0 65 65 6b 48 69 74 3d 50 32 0a 2a 2a 0a 2a 2a 20  eekHit=P2.**.** 
24a00 53 65 74 20 74 68 65 20 73 65 65 6b 48 69 74 20  Set the seekHit 
24a10 66 6c 61 67 20 6f 6e 20 63 75 72 73 6f 72 20 50  flag on cursor P
24a20 31 20 74 6f 20 74 68 65 20 76 61 6c 75 65 20 69  1 to the value i
24a30 6e 20 50 32 2e 0a 2a 2a 20 54 68 65 20 73 65 65  n P2..** The see
24a40 6b 48 69 74 20 66 6c 61 67 20 69 73 20 75 73 65  kHit flag is use
24a50 64 20 62 79 20 74 68 65 20 49 66 4e 6f 48 6f 70  d by the IfNoHop
24a60 65 20 6f 70 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20  e opcode..**.** 
24a70 50 31 20 6d 75 73 74 20 62 65 20 61 20 76 61 6c  P1 must be a val
24a80 69 64 20 62 2d 74 72 65 65 20 63 75 72 73 6f 72  id b-tree cursor
24a90 2e 20 20 50 32 20 6d 75 73 74 20 62 65 20 61 20  .  P2 must be a 
24aa0 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 2c 0a 2a  boolean value,.*
24ab0 2a 20 65 69 74 68 65 72 20 30 20 6f 72 20 31 2e  * either 0 or 1.
24ac0 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 65 65 6b  .*/.case OP_Seek
24ad0 48 69 74 3a 20 7b 0a 20 20 56 64 62 65 43 75 72  Hit: {.  VdbeCur
24ae0 73 6f 72 20 2a 70 43 3b 0a 20 20 61 73 73 65 72  sor *pC;.  asser
24af0 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26  t( pOp->p1>=0 &&
24b00 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72   pOp->p1<p->nCur
24b10 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d  sor );.  pC = p-
24b20 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b  >apCsr[pOp->p1];
24b30 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30  .  assert( pC!=0
24b40 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   );.  assert( pO
24b50 70 2d 3e 70 32 3d 3d 30 20 7c 7c 20 70 4f 70 2d  p->p2==0 || pOp-
24b60 3e 70 32 3d 3d 31 20 29 3b 0a 20 20 70 43 2d 3e  >p2==1 );.  pC->
24b70 73 65 65 6b 48 69 74 20 3d 20 70 4f 70 2d 3e 70  seekHit = pOp->p
24b80 32 20 26 20 31 3b 0a 20 20 62 72 65 61 6b 3b 0a  2 & 1;.  break;.
24b90 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 46 6f  }../* Opcode: Fo
24ba0 75 6e 64 20 50 31 20 50 32 20 50 33 20 50 34 20  und P1 P2 P3 P4 
24bb0 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b  *.** Synopsis: k
24bc0 65 79 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a  ey=r[P3@P4].**.*
24bd0 2a 20 49 66 20 50 34 3d 3d 30 20 74 68 65 6e 20  * If P4==0 then 
24be0 72 65 67 69 73 74 65 72 20 50 33 20 68 6f 6c 64  register P3 hold
24bf0 73 20 61 20 62 6c 6f 62 20 63 6f 6e 73 74 72 75  s a blob constru
24c00 63 74 65 64 20 62 79 20 4d 61 6b 65 52 65 63 6f  cted by MakeReco
24c10 72 64 2e 20 20 49 66 0a 2a 2a 20 50 34 3e 30 20  rd.  If.** P4>0 
24c20 74 68 65 6e 20 72 65 67 69 73 74 65 72 20 50 33  then register P3
24c30 20 69 73 20 74 68 65 20 66 69 72 73 74 20 6f 66   is the first of
24c40 20 50 34 20 72 65 67 69 73 74 65 72 73 20 74 68   P4 registers th
24c50 61 74 20 66 6f 72 6d 20 61 6e 20 75 6e 70 61 63  at form an unpac
24c60 6b 65 64 0a 2a 2a 20 72 65 63 6f 72 64 2e 0a 2a  ked.** record..*
24c70 2a 0a 2a 2a 20 43 75 72 73 6f 72 20 50 31 20 69  *.** Cursor P1 i
24c80 73 20 6f 6e 20 61 6e 20 69 6e 64 65 78 20 62 74  s on an index bt
24c90 72 65 65 2e 20 20 49 66 20 74 68 65 20 72 65 63  ree.  If the rec
24ca0 6f 72 64 20 69 64 65 6e 74 69 66 69 65 64 20 62  ord identified b
24cb0 79 20 50 33 20 61 6e 64 20 50 34 0a 2a 2a 20 69  y P3 and P4.** i
24cc0 73 20 61 20 70 72 65 66 69 78 20 6f 66 20 61 6e  s a prefix of an
24cd0 79 20 65 6e 74 72 79 20 69 6e 20 50 31 20 74 68  y entry in P1 th
24ce0 65 6e 20 61 20 6a 75 6d 70 20 69 73 20 6d 61 64  en a jump is mad
24cf0 65 20 74 6f 20 50 32 20 61 6e 64 0a 2a 2a 20 50  e to P2 and.** P
24d00 31 20 69 73 20 6c 65 66 74 20 70 6f 69 6e 74 69  1 is left pointi
24d10 6e 67 20 61 74 20 74 68 65 20 6d 61 74 63 68 69  ng at the matchi
24d20 6e 67 20 65 6e 74 72 79 2e 0a 2a 2a 0a 2a 2a 20  ng entry..**.** 
24d30 54 68 69 73 20 6f 70 65 72 61 74 69 6f 6e 20 6c  This operation l
24d40 65 61 76 65 73 20 74 68 65 20 63 75 72 73 6f 72  eaves the cursor
24d50 20 69 6e 20 61 20 73 74 61 74 65 20 77 68 65 72   in a state wher
24d60 65 20 69 74 20 63 61 6e 20 62 65 0a 2a 2a 20 61  e it can be.** a
24d70 64 76 61 6e 63 65 64 20 69 6e 20 74 68 65 20 66  dvanced in the f
24d80 6f 72 77 61 72 64 20 64 69 72 65 63 74 69 6f 6e  orward direction
24d90 2e 20 20 54 68 65 20 4e 65 78 74 20 69 6e 73 74  .  The Next inst
24da0 72 75 63 74 69 6f 6e 20 77 69 6c 6c 20 77 6f 72  ruction will wor
24db0 6b 2c 0a 2a 2a 20 62 75 74 20 6e 6f 74 20 74 68  k,.** but not th
24dc0 65 20 50 72 65 76 20 69 6e 73 74 72 75 63 74 69  e Prev instructi
24dd0 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c  on..**.** See al
24de0 73 6f 3a 20 4e 6f 74 46 6f 75 6e 64 2c 20 4e 6f  so: NotFound, No
24df0 43 6f 6e 66 6c 69 63 74 2c 20 4e 6f 74 45 78 69  Conflict, NotExi
24e00 73 74 73 2e 20 53 65 65 6b 47 65 0a 2a 2f 0a 2f  sts. SeekGe.*/./
24e10 2a 20 4f 70 63 6f 64 65 3a 20 4e 6f 74 46 6f 75  * Opcode: NotFou
24e20 6e 64 20 50 31 20 50 32 20 50 33 20 50 34 20 2a  nd P1 P2 P3 P4 *
24e30 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65  .** Synopsis: ke
24e40 79 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a  y=r[P3@P4].**.**
24e50 20 49 66 20 50 34 3d 3d 30 20 74 68 65 6e 20 72   If P4==0 then r
24e60 65 67 69 73 74 65 72 20 50 33 20 68 6f 6c 64 73  egister P3 holds
24e70 20 61 20 62 6c 6f 62 20 63 6f 6e 73 74 72 75 63   a blob construc
24e80 74 65 64 20 62 79 20 4d 61 6b 65 52 65 63 6f 72  ted by MakeRecor
24e90 64 2e 20 20 49 66 0a 2a 2a 20 50 34 3e 30 20 74  d.  If.** P4>0 t
24ea0 68 65 6e 20 72 65 67 69 73 74 65 72 20 50 33 20  hen register P3 
24eb0 69 73 20 74 68 65 20 66 69 72 73 74 20 6f 66 20  is the first of 
24ec0 50 34 20 72 65 67 69 73 74 65 72 73 20 74 68 61  P4 registers tha
24ed0 74 20 66 6f 72 6d 20 61 6e 20 75 6e 70 61 63 6b  t form an unpack
24ee0 65 64 0a 2a 2a 20 72 65 63 6f 72 64 2e 0a 2a 2a  ed.** record..**
24ef0 20 0a 2a 2a 20 43 75 72 73 6f 72 20 50 31 20 69   .** Cursor P1 i
24f00 73 20 6f 6e 20 61 6e 20 69 6e 64 65 78 20 62 74  s on an index bt
24f10 72 65 65 2e 20 20 49 66 20 74 68 65 20 72 65 63  ree.  If the rec
24f20 6f 72 64 20 69 64 65 6e 74 69 66 69 65 64 20 62  ord identified b
24f30 79 20 50 33 20 61 6e 64 20 50 34 0a 2a 2a 20 69  y P3 and P4.** i
24f40 73 20 6e 6f 74 20 74 68 65 20 70 72 65 66 69 78  s not the prefix
24f50 20 6f 66 20 61 6e 79 20 65 6e 74 72 79 20 69 6e   of any entry in
24f60 20 50 31 20 74 68 65 6e 20 61 20 6a 75 6d 70 20   P1 then a jump 
24f70 69 73 20 6d 61 64 65 20 74 6f 20 50 32 2e 20 20  is made to P2.  
24f80 49 66 20 50 31 20 0a 2a 2a 20 64 6f 65 73 20 63  If P1 .** does c
24f90 6f 6e 74 61 69 6e 20 61 6e 20 65 6e 74 72 79 20  ontain an entry 
24fa0 77 68 6f 73 65 20 70 72 65 66 69 78 20 6d 61 74  whose prefix mat
24fb0 63 68 65 73 20 74 68 65 20 50 33 2f 50 34 20 72  ches the P3/P4 r
24fc0 65 63 6f 72 64 20 74 68 65 6e 20 63 6f 6e 74 72  ecord then contr
24fd0 6f 6c 0a 2a 2a 20 66 61 6c 6c 73 20 74 68 72 6f  ol.** falls thro
24fe0 75 67 68 20 74 6f 20 74 68 65 20 6e 65 78 74 20  ugh to the next 
24ff0 69 6e 73 74 72 75 63 74 69 6f 6e 20 61 6e 64 20  instruction and 
25000 50 31 20 69 73 20 6c 65 66 74 20 70 6f 69 6e 74  P1 is left point
25010 69 6e 67 20 61 74 20 74 68 65 0a 2a 2a 20 6d 61  ing at the.** ma
25020 74 63 68 69 6e 67 20 65 6e 74 72 79 2e 0a 2a 2a  tching entry..**
25030 0a 2a 2a 20 54 68 69 73 20 6f 70 65 72 61 74 69  .** This operati
25040 6f 6e 20 6c 65 61 76 65 73 20 74 68 65 20 63 75  on leaves the cu
25050 72 73 6f 72 20 69 6e 20 61 20 73 74 61 74 65 20  rsor in a state 
25060 77 68 65 72 65 20 69 74 20 63 61 6e 6e 6f 74 20  where it cannot 
25070 62 65 0a 2a 2a 20 61 64 76 61 6e 63 65 64 20 69  be.** advanced i
25080 6e 20 65 69 74 68 65 72 20 64 69 72 65 63 74 69  n either directi
25090 6f 6e 2e 20 20 49 6e 20 6f 74 68 65 72 20 77 6f  on.  In other wo
250a0 72 64 73 2c 20 74 68 65 20 4e 65 78 74 20 61 6e  rds, the Next an
250b0 64 20 50 72 65 76 0a 2a 2a 20 6f 70 63 6f 64 65  d Prev.** opcode
250c0 73 20 64 6f 20 6e 6f 74 20 77 6f 72 6b 20 61 66  s do not work af
250d0 74 65 72 20 74 68 69 73 20 6f 70 65 72 61 74 69  ter this operati
250e0 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c  on..**.** See al
250f0 73 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f 74 45 78  so: Found, NotEx
25100 69 73 74 73 2c 20 4e 6f 43 6f 6e 66 6c 69 63 74  ists, NoConflict
25110 2c 20 49 66 4e 6f 48 6f 70 65 0a 2a 2f 0a 2f 2a  , IfNoHope.*/./*
25120 20 4f 70 63 6f 64 65 3a 20 49 66 4e 6f 48 6f 70   Opcode: IfNoHop
25130 65 20 50 31 20 50 32 20 50 33 20 50 34 20 2a 0a  e P1 P2 P3 P4 *.
25140 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79  ** Synopsis: key
25150 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20  =r[P3@P4].**.** 
25160 52 65 67 69 73 74 65 72 20 50 33 20 69 73 20 74  Register P3 is t
25170 68 65 20 66 69 72 73 74 20 6f 66 20 50 34 20 72  he first of P4 r
25180 65 67 69 73 74 65 72 73 20 74 68 61 74 20 66 6f  egisters that fo
25190 72 6d 20 61 6e 20 75 6e 70 61 63 6b 65 64 0a 2a  rm an unpacked.*
251a0 2a 20 72 65 63 6f 72 64 2e 0a 2a 2a 0a 2a 2a 20  * record..**.** 
251b0 43 75 72 73 6f 72 20 50 31 20 69 73 20 6f 6e 20  Cursor P1 is on 
251c0 61 6e 20 69 6e 64 65 78 20 62 74 72 65 65 2e 20  an index btree. 
251d0 20 49 66 20 74 68 65 20 73 65 65 6b 48 69 74 20   If the seekHit 
251e0 66 6c 61 67 20 69 73 20 73 65 74 20 6f 6e 20 50  flag is set on P
251f0 31 2c 20 74 68 65 6e 0a 2a 2a 20 74 68 69 73 20  1, then.** this 
25200 6f 70 63 6f 64 65 20 69 73 20 61 20 6e 6f 2d 6f  opcode is a no-o
25210 70 2e 20 20 42 75 74 20 69 66 20 74 68 65 20 73  p.  But if the s
25220 65 65 6b 48 69 74 20 66 6c 61 67 20 6f 66 20 50  eekHit flag of P
25230 31 20 69 73 20 63 6c 65 61 72 2c 20 74 68 65 6e  1 is clear, then
25240 0a 2a 2a 20 63 68 65 63 6b 20 74 6f 20 73 65 65  .** check to see
25250 20 69 66 20 74 68 65 72 65 20 69 73 20 61 6e 79   if there is any
25260 20 65 6e 74 72 79 20 69 6e 20 50 31 20 74 68 61   entry in P1 tha
25270 74 20 6d 61 74 63 68 65 73 20 74 68 65 0a 2a 2a  t matches the.**
25280 20 70 72 65 66 69 78 20 69 64 65 6e 74 69 66 69   prefix identifi
25290 65 64 20 62 79 20 50 33 20 61 6e 64 20 50 34 2e  ed by P3 and P4.
252a0 20 20 49 66 20 6e 6f 20 65 6e 74 72 79 20 6d 61    If no entry ma
252b0 74 63 68 65 73 20 74 68 65 20 70 72 65 66 69 78  tches the prefix
252c0 2c 0a 2a 2a 20 6a 75 6d 70 20 74 6f 20 50 32 2e  ,.** jump to P2.
252d0 20 20 4f 74 68 65 72 77 69 73 65 20 66 61 6c 6c    Otherwise fall
252e0 20 74 68 72 6f 75 67 68 2e 0a 2a 2a 0a 2a 2a 20   through..**.** 
252f0 54 68 69 73 20 6f 70 63 6f 64 65 20 62 65 68 61  This opcode beha
25300 76 65 73 20 6c 69 6b 65 20 4f 50 5f 4e 6f 74 46  ves like OP_NotF
25310 6f 75 6e 64 20 69 66 20 74 68 65 20 73 65 65 6b  ound if the seek
25320 48 69 74 0a 2a 2a 20 66 6c 61 67 20 69 73 20 63  Hit.** flag is c
25330 6c 65 61 72 20 61 6e 64 20 69 74 20 62 65 68 61  lear and it beha
25340 76 65 73 20 6c 69 6b 65 20 4f 50 5f 4e 6f 6f 70  ves like OP_Noop
25350 20 69 66 20 74 68 65 20 73 65 65 6b 48 69 74 20   if the seekHit 
25360 66 6c 61 67 20 69 73 20 73 65 74 2e 0a 2a 2a 0a  flag is set..**.
25370 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 69  ** This opcode i
25380 73 20 75 73 65 64 20 69 6e 20 49 4e 20 63 6c 61  s used in IN cla
25390 75 73 65 20 70 72 6f 63 65 73 73 69 6e 67 20 66  use processing f
253a0 6f 72 20 61 20 6d 75 6c 74 69 2d 63 6f 6c 75 6d  or a multi-colum
253b0 6e 20 6b 65 79 2e 0a 2a 2a 20 49 66 20 61 6e 20  n key..** If an 
253c0 49 4e 20 63 6c 61 75 73 65 20 69 73 20 61 74 74  IN clause is att
253d0 61 63 68 65 64 20 74 6f 20 61 6e 20 65 6c 65 6d  ached to an elem
253e0 65 6e 74 20 6f 66 20 74 68 65 20 6b 65 79 20 6f  ent of the key o
253f0 74 68 65 72 20 74 68 61 6e 20 74 68 65 0a 2a 2a  ther than the.**
25400 20 6c 65 66 74 2d 6d 6f 73 74 20 65 6c 65 6d 65   left-most eleme
25410 6e 74 2c 20 61 6e 64 20 69 66 20 74 68 65 72 65  nt, and if there
25420 20 61 72 65 20 6e 6f 20 6d 61 74 63 68 65 73 20   are no matches 
25430 6f 6e 20 74 68 65 20 6d 6f 73 74 20 72 65 63 65  on the most rece
25440 6e 74 0a 2a 2a 20 73 65 65 6b 20 6f 76 65 72 20  nt.** seek over 
25450 74 68 65 20 77 68 6f 6c 65 20 6b 65 79 2c 20 74  the whole key, t
25460 68 65 6e 20 69 74 20 6d 69 67 68 74 20 62 65 20  hen it might be 
25470 74 68 61 74 20 6f 6e 65 20 6f 66 20 74 68 65 20  that one of the 
25480 6b 65 79 20 65 6c 65 6d 65 6e 74 0a 2a 2a 20 74  key element.** t
25490 6f 20 74 68 65 20 6c 65 66 74 20 69 73 20 70 72  o the left is pr
254a0 6f 68 69 62 69 74 69 6e 67 20 61 20 6d 61 74 63  ohibiting a matc
254b0 68 2c 20 61 6e 64 20 68 65 6e 63 65 20 74 68 65  h, and hence the
254c0 72 65 20 69 73 20 22 6e 6f 20 68 6f 70 65 22 20  re is "no hope" 
254d0 6f 66 0a 2a 2a 20 61 6e 79 20 6d 61 74 63 68 20  of.** any match 
254e0 72 65 67 61 72 64 6c 65 73 73 20 6f 66 20 68 6f  regardless of ho
254f0 77 20 6d 61 6e 79 20 49 4e 20 63 6c 61 75 73 65  w many IN clause
25500 20 65 6c 65 6d 65 6e 74 73 20 61 72 65 20 63 68   elements are ch
25510 65 63 6b 65 64 2e 0a 2a 2a 20 49 6e 20 73 75 63  ecked..** In suc
25520 68 20 61 20 63 61 73 65 2c 20 77 65 20 61 62 61  h a case, we aba
25530 6e 64 6f 6e 20 74 68 65 20 49 4e 20 63 6c 61 75  ndon the IN clau
25540 73 65 20 73 65 61 72 63 68 20 65 61 72 6c 79 2c  se search early,
25550 20 75 73 69 6e 67 20 74 68 69 73 0a 2a 2a 20 6f   using this.** o
25560 70 63 6f 64 65 2e 20 20 54 68 65 20 6f 70 63 6f  pcode.  The opco
25570 64 65 20 6e 61 6d 65 20 63 6f 6d 65 73 20 66 72  de name comes fr
25580 6f 6d 20 74 68 65 20 66 61 63 74 20 74 68 61 74  om the fact that
25590 20 74 68 65 0a 2a 2a 20 6a 75 6d 70 20 69 73 20   the.** jump is 
255a0 74 61 6b 65 6e 20 69 66 20 74 68 65 72 65 20 69  taken if there i
255b0 73 20 22 6e 6f 20 68 6f 70 65 22 20 6f 66 20 61  s "no hope" of a
255c0 63 68 69 65 76 69 6e 67 20 61 20 6d 61 74 63 68  chieving a match
255d0 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f  ..**.** See also
255e0 3a 20 4e 6f 74 46 6f 75 6e 64 2c 20 53 65 65 6b  : NotFound, Seek
255f0 48 69 74 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65  Hit.*/./* Opcode
25600 3a 20 4e 6f 43 6f 6e 66 6c 69 63 74 20 50 31 20  : NoConflict P1 
25610 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a 20 53 79  P2 P3 P4 *.** Sy
25620 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50 33  nopsis: key=r[P3
25630 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 49 66 20 50 34  @P4].**.** If P4
25640 3d 3d 30 20 74 68 65 6e 20 72 65 67 69 73 74 65  ==0 then registe
25650 72 20 50 33 20 68 6f 6c 64 73 20 61 20 62 6c 6f  r P3 holds a blo
25660 62 20 63 6f 6e 73 74 72 75 63 74 65 64 20 62 79  b constructed by
25670 20 4d 61 6b 65 52 65 63 6f 72 64 2e 20 20 49 66   MakeRecord.  If
25680 0a 2a 2a 20 50 34 3e 30 20 74 68 65 6e 20 72 65  .** P4>0 then re
25690 67 69 73 74 65 72 20 50 33 20 69 73 20 74 68 65  gister P3 is the
256a0 20 66 69 72 73 74 20 6f 66 20 50 34 20 72 65 67   first of P4 reg
256b0 69 73 74 65 72 73 20 74 68 61 74 20 66 6f 72 6d  isters that form
256c0 20 61 6e 20 75 6e 70 61 63 6b 65 64 0a 2a 2a 20   an unpacked.** 
256d0 72 65 63 6f 72 64 2e 0a 2a 2a 20 0a 2a 2a 20 43  record..** .** C
256e0 75 72 73 6f 72 20 50 31 20 69 73 20 6f 6e 20 61  ursor P1 is on a
256f0 6e 20 69 6e 64 65 78 20 62 74 72 65 65 2e 20 20  n index btree.  
25700 49 66 20 74 68 65 20 72 65 63 6f 72 64 20 69 64  If the record id
25710 65 6e 74 69 66 69 65 64 20 62 79 20 50 33 20 61  entified by P3 a
25720 6e 64 20 50 34 0a 2a 2a 20 63 6f 6e 74 61 69 6e  nd P4.** contain
25730 73 20 61 6e 79 20 4e 55 4c 4c 20 76 61 6c 75 65  s any NULL value
25740 2c 20 6a 75 6d 70 20 69 6d 6d 65 64 69 61 74 65  , jump immediate
25750 6c 79 20 74 6f 20 50 32 2e 20 20 49 66 20 61 6c  ly to P2.  If al
25760 6c 20 74 65 72 6d 73 20 6f 66 20 74 68 65 0a 2a  l terms of the.*
25770 2a 20 72 65 63 6f 72 64 20 61 72 65 20 6e 6f 74  * record are not
25780 2d 4e 55 4c 4c 20 74 68 65 6e 20 61 20 63 68 65  -NULL then a che
25790 63 6b 20 69 73 20 64 6f 6e 65 20 74 6f 20 64 65  ck is done to de
257a0 74 65 72 6d 69 6e 65 20 69 66 20 61 6e 79 20 72  termine if any r
257b0 6f 77 20 69 6e 20 74 68 65 0a 2a 2a 20 50 31 20  ow in the.** P1 
257c0 69 6e 64 65 78 20 62 74 72 65 65 20 68 61 73 20  index btree has 
257d0 61 20 6d 61 74 63 68 69 6e 67 20 6b 65 79 20 70  a matching key p
257e0 72 65 66 69 78 2e 20 20 49 66 20 74 68 65 72 65  refix.  If there
257f0 20 61 72 65 20 6e 6f 20 6d 61 74 63 68 65 73 2c   are no matches,
25800 20 6a 75 6d 70 0a 2a 2a 20 69 6d 6d 65 64 69 61   jump.** immedia
25810 74 65 6c 79 20 74 6f 20 50 32 2e 20 20 49 66 20  tely to P2.  If 
25820 74 68 65 72 65 20 69 73 20 61 20 6d 61 74 63 68  there is a match
25830 2c 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 20 61  , fall through a
25840 6e 64 20 6c 65 61 76 65 20 74 68 65 20 50 31 0a  nd leave the P1.
25850 2a 2a 20 63 75 72 73 6f 72 20 70 6f 69 6e 74 69  ** cursor pointi
25860 6e 67 20 74 6f 20 74 68 65 20 6d 61 74 63 68 69  ng to the matchi
25870 6e 67 20 72 6f 77 2e 0a 2a 2a 0a 2a 2a 20 54 68  ng row..**.** Th
25880 69 73 20 6f 70 63 6f 64 65 20 69 73 20 73 69 6d  is opcode is sim
25890 69 6c 61 72 20 74 6f 20 4f 50 5f 4e 6f 74 46 6f  ilar to OP_NotFo
258a0 75 6e 64 20 77 69 74 68 20 74 68 65 20 65 78 63  und with the exc
258b0 65 70 74 69 6f 6e 73 20 74 68 61 74 20 74 68 65  eptions that the
258c0 0a 2a 2a 20 62 72 61 6e 63 68 20 69 73 20 61 6c  .** branch is al
258d0 77 61 79 73 20 74 61 6b 65 6e 20 69 66 20 61 6e  ways taken if an
258e0 79 20 70 61 72 74 20 6f 66 20 74 68 65 20 73 65  y part of the se
258f0 61 72 63 68 20 6b 65 79 20 69 6e 70 75 74 20 69  arch key input i
25900 73 20 4e 55 4c 4c 2e 0a 2a 2a 0a 2a 2a 20 54 68  s NULL..**.** Th
25910 69 73 20 6f 70 65 72 61 74 69 6f 6e 20 6c 65 61  is operation lea
25920 76 65 73 20 74 68 65 20 63 75 72 73 6f 72 20 69  ves the cursor i
25930 6e 20 61 20 73 74 61 74 65 20 77 68 65 72 65 20  n a state where 
25940 69 74 20 63 61 6e 6e 6f 74 20 62 65 0a 2a 2a 20  it cannot be.** 
25950 61 64 76 61 6e 63 65 64 20 69 6e 20 65 69 74 68  advanced in eith
25960 65 72 20 64 69 72 65 63 74 69 6f 6e 2e 20 20 49  er direction.  I
25970 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 74  n other words, t
25980 68 65 20 4e 65 78 74 20 61 6e 64 20 50 72 65 76  he Next and Prev
25990 0a 2a 2a 20 6f 70 63 6f 64 65 73 20 64 6f 20 6e  .** opcodes do n
259a0 6f 74 20 77 6f 72 6b 20 61 66 74 65 72 20 74 68  ot work after th
259b0 69 73 20 6f 70 65 72 61 74 69 6f 6e 2e 0a 2a 2a  is operation..**
259c0 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 4e 6f  .** See also: No
259d0 74 46 6f 75 6e 64 2c 20 46 6f 75 6e 64 2c 20 4e  tFound, Found, N
259e0 6f 74 45 78 69 73 74 73 0a 2a 2f 0a 63 61 73 65  otExists.*/.case
259f0 20 4f 50 5f 49 66 4e 6f 48 6f 70 65 3a 20 7b 20   OP_IfNoHope: { 
25a00 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33      /* jump, in3
25a10 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73 6f 72   */.  VdbeCursor
25a20 20 2a 70 43 3b 0a 20 20 61 73 73 65 72 74 28 20   *pC;.  assert( 
25a30 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f  pOp->p1>=0 && pO
25a40 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72  p->p1<p->nCursor
25a50 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70   );.  pC = p->ap
25a60 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Csr[pOp->p1];.  
25a70 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b  assert( pC!=0 );
25a80 0a 20 20 69 66 28 20 70 43 2d 3e 73 65 65 6b 48  .  if( pC->seekH
25a90 69 74 20 29 20 62 72 65 61 6b 3b 0a 20 20 2f 2a  it ) break;.  /*
25aa0 20 46 61 6c 6c 20 74 68 72 6f 75 67 68 20 69 6e   Fall through in
25ab0 74 6f 20 4f 50 5f 4e 6f 74 46 6f 75 6e 64 20 2a  to OP_NotFound *
25ac0 2f 0a 7d 0a 63 61 73 65 20 4f 50 5f 4e 6f 43 6f  /.}.case OP_NoCo
25ad0 6e 66 6c 69 63 74 3a 20 20 20 20 20 2f 2a 20 6a  nflict:     /* j
25ae0 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65  ump, in3 */.case
25af0 20 4f 50 5f 4e 6f 74 46 6f 75 6e 64 3a 20 20 20   OP_NotFound:   
25b00 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33      /* jump, in3
25b10 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 46 6f 75 6e   */.case OP_Foun
25b20 64 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a  d: {        /* j
25b30 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 20 20 69 6e  ump, in3 */.  in
25b40 74 20 61 6c 72 65 61 64 79 45 78 69 73 74 73 3b  t alreadyExists;
25b50 0a 20 20 69 6e 74 20 74 61 6b 65 4a 75 6d 70 3b  .  int takeJump;
25b60 0a 20 20 69 6e 74 20 69 69 3b 0a 20 20 56 64 62  .  int ii;.  Vdb
25b70 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 69  eCursor *pC;.  i
25b80 6e 74 20 72 65 73 3b 0a 20 20 55 6e 70 61 63 6b  nt res;.  Unpack
25b90 65 64 52 65 63 6f 72 64 20 2a 70 46 72 65 65 3b  edRecord *pFree;
25ba0 0a 20 20 55 6e 70 61 63 6b 65 64 52 65 63 6f 72  .  UnpackedRecor
25bb0 64 20 2a 70 49 64 78 4b 65 79 3b 0a 20 20 55 6e  d *pIdxKey;.  Un
25bc0 70 61 63 6b 65 64 52 65 63 6f 72 64 20 72 3b 0a  packedRecord r;.
25bd0 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 54  .#ifdef SQLITE_T
25be0 45 53 54 0a 20 20 69 66 28 20 70 4f 70 2d 3e 6f  EST.  if( pOp->o
25bf0 70 63 6f 64 65 21 3d 4f 50 5f 4e 6f 43 6f 6e 66  pcode!=OP_NoConf
25c00 6c 69 63 74 20 29 20 73 71 6c 69 74 65 33 5f 66  lict ) sqlite3_f
25c10 6f 75 6e 64 5f 63 6f 75 6e 74 2b 2b 3b 0a 23 65  ound_count++;.#e
25c20 6e 64 69 66 0a 0a 20 20 61 73 73 65 72 74 28 20  ndif..  assert( 
25c30 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f  pOp->p1>=0 && pO
25c40 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72  p->p1<p->nCursor
25c50 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   );.  assert( pO
25c60 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e  p->p4type==P4_IN
25c70 54 33 32 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d  T32 );.  pC = p-
25c80 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b  >apCsr[pOp->p1];
25c90 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30  .  assert( pC!=0
25ca0 20 29 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54   );.#ifdef SQLIT
25cb0 45 5f 44 45 42 55 47 0a 20 20 70 43 2d 3e 73 65  E_DEBUG.  pC->se
25cc0 65 6b 4f 70 20 3d 20 70 4f 70 2d 3e 6f 70 63 6f  ekOp = pOp->opco
25cd0 64 65 3b 0a 23 65 6e 64 69 66 0a 20 20 70 49 6e  de;.#endif.  pIn
25ce0 33 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  3 = &aMem[pOp->p
25cf0 33 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43  3];.  assert( pC
25d00 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43 55 52 54  ->eCurType==CURT
25d10 59 50 45 5f 42 54 52 45 45 20 29 3b 0a 20 20 61  YPE_BTREE );.  a
25d20 73 73 65 72 74 28 20 70 43 2d 3e 75 63 2e 70 43  ssert( pC->uc.pC
25d30 75 72 73 6f 72 21 3d 30 20 29 3b 0a 20 20 61 73  ursor!=0 );.  as
25d40 73 65 72 74 28 20 70 43 2d 3e 69 73 54 61 62 6c  sert( pC->isTabl
25d50 65 3d 3d 30 20 29 3b 0a 20 20 69 66 28 20 70 4f  e==0 );.  if( pO
25d60 70 2d 3e 70 34 2e 69 3e 30 20 29 7b 0a 20 20 20  p->p4.i>0 ){.   
25d70 20 72 2e 70 4b 65 79 49 6e 66 6f 20 3d 20 70 43   r.pKeyInfo = pC
25d80 2d 3e 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 20 20  ->pKeyInfo;.    
25d90 72 2e 6e 46 69 65 6c 64 20 3d 20 28 75 31 36 29  r.nField = (u16)
25da0 70 4f 70 2d 3e 70 34 2e 69 3b 0a 20 20 20 20 72  pOp->p4.i;.    r
25db0 2e 61 4d 65 6d 20 3d 20 70 49 6e 33 3b 0a 23 69  .aMem = pIn3;.#i
25dc0 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55  fdef SQLITE_DEBU
25dd0 47 0a 20 20 20 20 66 6f 72 28 69 69 3d 30 3b 20  G.    for(ii=0; 
25de0 69 69 3c 72 2e 6e 46 69 65 6c 64 3b 20 69 69 2b  ii<r.nField; ii+
25df0 2b 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74  +){.      assert
25e00 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 26 72 2e  ( memIsValid(&r.
25e10 61 4d 65 6d 5b 69 69 5d 29 20 29 3b 0a 20 20 20  aMem[ii]) );.   
25e20 20 20 20 61 73 73 65 72 74 28 20 28 72 2e 61 4d     assert( (r.aM
25e30 65 6d 5b 69 69 5d 2e 66 6c 61 67 73 20 26 20 4d  em[ii].flags & M
25e40 45 4d 5f 5a 65 72 6f 29 3d 3d 30 20 7c 7c 20 72  EM_Zero)==0 || r
25e50 2e 61 4d 65 6d 5b 69 69 5d 2e 6e 3d 3d 30 20 29  .aMem[ii].n==0 )
25e60 3b 0a 20 20 20 20 20 20 69 66 28 20 69 69 20 29  ;.      if( ii )
25e70 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28   REGISTER_TRACE(
25e80 70 4f 70 2d 3e 70 33 2b 69 69 2c 20 26 72 2e 61  pOp->p3+ii, &r.a
25e90 4d 65 6d 5b 69 69 5d 29 3b 0a 20 20 20 20 7d 0a  Mem[ii]);.    }.
25ea0 23 65 6e 64 69 66 0a 20 20 20 20 70 49 64 78 4b  #endif.    pIdxK
25eb0 65 79 20 3d 20 26 72 3b 0a 20 20 20 20 70 46 72  ey = &r;.    pFr
25ec0 65 65 20 3d 20 30 3b 0a 20 20 7d 65 6c 73 65 7b  ee = 0;.  }else{
25ed0 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 49 6e  .    assert( pIn
25ee0 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 42  3->flags & MEM_B
25ef0 6c 6f 62 20 29 3b 0a 20 20 20 20 72 63 20 3d 20  lob );.    rc = 
25f00 45 78 70 61 6e 64 42 6c 6f 62 28 70 49 6e 33 29  ExpandBlob(pIn3)
25f10 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 72 63  ;.    assert( rc
25f20 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 7c 7c 20 72  ==SQLITE_OK || r
25f30 63 3d 3d 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 20  c==SQLITE_NOMEM 
25f40 29 3b 0a 20 20 20 20 69 66 28 20 72 63 20 29 20  );.    if( rc ) 
25f50 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 20  goto no_mem;.   
25f60 20 70 46 72 65 65 20 3d 20 70 49 64 78 4b 65 79   pFree = pIdxKey
25f70 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 41 6c   = sqlite3VdbeAl
25f80 6c 6f 63 55 6e 70 61 63 6b 65 64 52 65 63 6f 72  locUnpackedRecor
25f90 64 28 70 43 2d 3e 70 4b 65 79 49 6e 66 6f 29 3b  d(pC->pKeyInfo);
25fa0 0a 20 20 20 20 69 66 28 20 70 49 64 78 4b 65 79  .    if( pIdxKey
25fb0 3d 3d 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65  ==0 ) goto no_me
25fc0 6d 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  m;.    sqlite3Vd
25fd0 62 65 52 65 63 6f 72 64 55 6e 70 61 63 6b 28 70  beRecordUnpack(p
25fe0 43 2d 3e 70 4b 65 79 49 6e 66 6f 2c 20 70 49 6e  C->pKeyInfo, pIn
25ff0 33 2d 3e 6e 2c 20 70 49 6e 33 2d 3e 7a 2c 20 70  3->n, pIn3->z, p
26000 49 64 78 4b 65 79 29 3b 0a 20 20 7d 0a 20 20 70  IdxKey);.  }.  p
26010 49 64 78 4b 65 79 2d 3e 64 65 66 61 75 6c 74 5f  IdxKey->default_
26020 72 63 20 3d 20 30 3b 0a 20 20 74 61 6b 65 4a 75  rc = 0;.  takeJu
26030 6d 70 20 3d 20 30 3b 0a 20 20 69 66 28 20 70 4f  mp = 0;.  if( pO
26040 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4e 6f  p->opcode==OP_No
26050 43 6f 6e 66 6c 69 63 74 20 29 7b 0a 20 20 20 20  Conflict ){.    
26060 2f 2a 20 46 6f 72 20 74 68 65 20 4f 50 5f 4e 6f  /* For the OP_No
26070 43 6f 6e 66 6c 69 63 74 20 6f 70 63 6f 64 65 2c  Conflict opcode,
26080 20 74 61 6b 65 20 74 68 65 20 6a 75 6d 70 20 69   take the jump i
26090 66 20 61 6e 79 20 6f 66 20 74 68 65 0a 20 20 20  f any of the.   
260a0 20 2a 2a 20 69 6e 70 75 74 20 66 69 65 6c 64 73   ** input fields
260b0 20 61 72 65 20 4e 55 4c 4c 2c 20 73 69 6e 63 65   are NULL, since
260c0 20 61 6e 79 20 6b 65 79 20 77 69 74 68 20 61 20   any key with a 
260d0 4e 55 4c 4c 20 77 69 6c 6c 20 6e 6f 74 0a 20 20  NULL will not.  
260e0 20 20 2a 2a 20 63 6f 6e 66 6c 69 63 74 20 2a 2f    ** conflict */
260f0 0a 20 20 20 20 66 6f 72 28 69 69 3d 30 3b 20 69  .    for(ii=0; i
26100 69 3c 70 49 64 78 4b 65 79 2d 3e 6e 46 69 65 6c  i<pIdxKey->nFiel
26110 64 3b 20 69 69 2b 2b 29 7b 0a 20 20 20 20 20 20  d; ii++){.      
26120 69 66 28 20 70 49 64 78 4b 65 79 2d 3e 61 4d 65  if( pIdxKey->aMe
26130 6d 5b 69 69 5d 2e 66 6c 61 67 73 20 26 20 4d 45  m[ii].flags & ME
26140 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 20 20  M_Null ){.      
26150 20 20 74 61 6b 65 4a 75 6d 70 20 3d 20 31 3b 0a    takeJump = 1;.
26160 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20          break;. 
26170 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d       }.    }.  }
26180 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42  .  rc = sqlite3B
26190 74 72 65 65 4d 6f 76 65 74 6f 55 6e 70 61 63 6b  treeMovetoUnpack
261a0 65 64 28 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f  ed(pC->uc.pCurso
261b0 72 2c 20 70 49 64 78 4b 65 79 2c 20 30 2c 20 30  r, pIdxKey, 0, 0
261c0 2c 20 26 72 65 73 29 3b 0a 20 20 69 66 28 20 70  , &res);.  if( p
261d0 46 72 65 65 20 29 20 73 71 6c 69 74 65 33 44 62  Free ) sqlite3Db
261e0 46 72 65 65 4e 4e 28 64 62 2c 20 70 46 72 65 65  FreeNN(db, pFree
261f0 29 3b 0a 20 20 69 66 28 20 72 63 21 3d 53 51 4c  );.  if( rc!=SQL
26200 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 67 6f  ITE_OK ){.    go
26210 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
26220 65 72 72 6f 72 3b 0a 20 20 7d 0a 20 20 70 43 2d  error;.  }.  pC-
26230 3e 73 65 65 6b 52 65 73 75 6c 74 20 3d 20 72 65  >seekResult = re
26240 73 3b 0a 20 20 61 6c 72 65 61 64 79 45 78 69 73  s;.  alreadyExis
26250 74 73 20 3d 20 28 72 65 73 3d 3d 30 29 3b 0a 20  ts = (res==0);. 
26260 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 31   pC->nullRow = 1
26270 2d 61 6c 72 65 61 64 79 45 78 69 73 74 73 3b 0a  -alreadyExists;.
26280 20 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f    pC->deferredMo
26290 76 65 74 6f 20 3d 20 30 3b 0a 20 20 70 43 2d 3e  veto = 0;.  pC->
262a0 63 61 63 68 65 53 74 61 74 75 73 20 3d 20 43 41  cacheStatus = CA
262b0 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20 69 66 28  CHE_STALE;.  if(
262c0 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50   pOp->opcode==OP
262d0 5f 46 6f 75 6e 64 20 29 7b 0a 20 20 20 20 56 64  _Found ){.    Vd
262e0 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 61 6c  beBranchTaken(al
262f0 72 65 61 64 79 45 78 69 73 74 73 21 3d 30 2c 32  readyExists!=0,2
26300 29 3b 0a 20 20 20 20 69 66 28 20 61 6c 72 65 61  );.    if( alrea
26310 64 79 45 78 69 73 74 73 20 29 20 67 6f 74 6f 20  dyExists ) goto 
26320 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 7d 65  jump_to_p2;.  }e
26330 6c 73 65 7b 0a 20 20 20 20 56 64 62 65 42 72 61  lse{.    VdbeBra
26340 6e 63 68 54 61 6b 65 6e 28 74 61 6b 65 4a 75 6d  nchTaken(takeJum
26350 70 7c 7c 61 6c 72 65 61 64 79 45 78 69 73 74 73  p||alreadyExists
26360 3d 3d 30 2c 32 29 3b 0a 20 20 20 20 69 66 28 20  ==0,2);.    if( 
26370 74 61 6b 65 4a 75 6d 70 20 7c 7c 20 21 61 6c 72  takeJump || !alr
26380 65 61 64 79 45 78 69 73 74 73 20 29 20 67 6f 74  eadyExists ) got
26390 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20  o jump_to_p2;.  
263a0 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  }.  break;.}../*
263b0 20 4f 70 63 6f 64 65 3a 20 53 65 65 6b 52 6f 77   Opcode: SeekRow
263c0 69 64 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a  id P1 P2 P3 * *.
263d0 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 6e 74  ** Synopsis: int
263e0 6b 65 79 3d 72 5b 50 33 5d 0a 2a 2a 0a 2a 2a 20  key=r[P3].**.** 
263f0 50 31 20 69 73 20 74 68 65 20 69 6e 64 65 78 20  P1 is the index 
26400 6f 66 20 61 20 63 75 72 73 6f 72 20 6f 70 65 6e  of a cursor open
26410 20 6f 6e 20 61 6e 20 53 51 4c 20 74 61 62 6c 65   on an SQL table
26420 20 62 74 72 65 65 20 28 77 69 74 68 20 69 6e 74   btree (with int
26430 65 67 65 72 0a 2a 2a 20 6b 65 79 73 29 2e 20 20  eger.** keys).  
26440 49 66 20 72 65 67 69 73 74 65 72 20 50 33 20 64  If register P3 d
26450 6f 65 73 20 6e 6f 74 20 63 6f 6e 74 61 69 6e 20  oes not contain 
26460 61 6e 20 69 6e 74 65 67 65 72 20 6f 72 20 69 66  an integer or if
26470 20 50 31 20 64 6f 65 73 20 6e 6f 74 0a 2a 2a 20   P1 does not.** 
26480 63 6f 6e 74 61 69 6e 20 61 20 72 65 63 6f 72 64  contain a record
26490 20 77 69 74 68 20 72 6f 77 69 64 20 50 33 20 74   with rowid P3 t
264a0 68 65 6e 20 6a 75 6d 70 20 69 6d 6d 65 64 69 61  hen jump immedia
264b0 74 65 6c 79 20 74 6f 20 50 32 2e 20 20 0a 2a 2a  tely to P2.  .**
264c0 20 4f 72 2c 20 69 66 20 50 32 20 69 73 20 30 2c   Or, if P2 is 0,
264d0 20 72 61 69 73 65 20 61 6e 20 53 51 4c 49 54 45   raise an SQLITE
264e0 5f 43 4f 52 52 55 50 54 20 65 72 72 6f 72 2e 20  _CORRUPT error. 
264f0 49 66 20 50 31 20 64 6f 65 73 20 63 6f 6e 74 61  If P1 does conta
26500 69 6e 0a 2a 2a 20 61 20 72 65 63 6f 72 64 20 77  in.** a record w
26510 69 74 68 20 72 6f 77 69 64 20 50 33 20 74 68 65  ith rowid P3 the
26520 6e 20 0a 2a 2a 20 6c 65 61 76 65 20 74 68 65 20  n .** leave the 
26530 63 75 72 73 6f 72 20 70 6f 69 6e 74 69 6e 67 20  cursor pointing 
26540 61 74 20 74 68 61 74 20 72 65 63 6f 72 64 20 61  at that record a
26550 6e 64 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 20  nd fall through 
26560 74 6f 20 74 68 65 20 6e 65 78 74 0a 2a 2a 20 69  to the next.** i
26570 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a  nstruction..**.*
26580 2a 20 54 68 65 20 4f 50 5f 4e 6f 74 45 78 69 73  * The OP_NotExis
26590 74 73 20 6f 70 63 6f 64 65 20 70 65 72 66 6f 72  ts opcode perfor
265a0 6d 73 20 74 68 65 20 73 61 6d 65 20 6f 70 65 72  ms the same oper
265b0 61 74 69 6f 6e 2c 20 62 75 74 20 77 69 74 68 20  ation, but with 
265c0 4f 50 5f 4e 6f 74 45 78 69 73 74 73 0a 2a 2a 20  OP_NotExists.** 
265d0 74 68 65 20 50 33 20 72 65 67 69 73 74 65 72 20  the P3 register 
265e0 6d 75 73 74 20 62 65 20 67 75 61 72 61 6e 74 65  must be guarante
265f0 65 64 20 74 6f 20 63 6f 6e 74 61 69 6e 20 61 6e  ed to contain an
26600 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65 2e 20   integer value. 
26610 20 57 69 74 68 20 74 68 69 73 0a 2a 2a 20 6f 70   With this.** op
26620 63 6f 64 65 2c 20 72 65 67 69 73 74 65 72 20 50  code, register P
26630 33 20 6d 69 67 68 74 20 6e 6f 74 20 63 6f 6e 74  3 might not cont
26640 61 69 6e 20 61 6e 20 69 6e 74 65 67 65 72 2e 0a  ain an integer..
26650 2a 2a 0a 2a 2a 20 54 68 65 20 4f 50 5f 4e 6f 74  **.** The OP_Not
26660 46 6f 75 6e 64 20 6f 70 63 6f 64 65 20 70 65 72  Found opcode per
26670 66 6f 72 6d 73 20 74 68 65 20 73 61 6d 65 20 6f  forms the same o
26680 70 65 72 61 74 69 6f 6e 20 6f 6e 20 69 6e 64 65  peration on inde
26690 78 20 62 74 72 65 65 73 0a 2a 2a 20 28 77 69 74  x btrees.** (wit
266a0 68 20 61 72 62 69 74 72 61 72 79 20 6d 75 6c 74  h arbitrary mult
266b0 69 2d 76 61 6c 75 65 20 6b 65 79 73 29 2e 0a 2a  i-value keys)..*
266c0 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65  *.** This opcode
266d0 20 6c 65 61 76 65 73 20 74 68 65 20 63 75 72 73   leaves the curs
266e0 6f 72 20 69 6e 20 61 20 73 74 61 74 65 20 77 68  or in a state wh
266f0 65 72 65 20 69 74 20 63 61 6e 6e 6f 74 20 62 65  ere it cannot be
26700 20 61 64 76 61 6e 63 65 64 0a 2a 2a 20 69 6e 20   advanced.** in 
26710 65 69 74 68 65 72 20 64 69 72 65 63 74 69 6f 6e  either direction
26720 2e 20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64  .  In other word
26730 73 2c 20 74 68 65 20 4e 65 78 74 20 61 6e 64 20  s, the Next and 
26740 50 72 65 76 20 6f 70 63 6f 64 65 73 20 77 69 6c  Prev opcodes wil
26750 6c 0a 2a 2a 20 6e 6f 74 20 77 6f 72 6b 20 66 6f  l.** not work fo
26760 6c 6c 6f 77 69 6e 67 20 74 68 69 73 20 6f 70 63  llowing this opc
26770 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61  ode..**.** See a
26780 6c 73 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f 74 46  lso: Found, NotF
26790 6f 75 6e 64 2c 20 4e 6f 43 6f 6e 66 6c 69 63 74  ound, NoConflict
267a0 2c 20 53 65 65 6b 52 6f 77 69 64 0a 2a 2f 0a 2f  , SeekRowid.*/./
267b0 2a 20 4f 70 63 6f 64 65 3a 20 4e 6f 74 45 78 69  * Opcode: NotExi
267c0 73 74 73 20 50 31 20 50 32 20 50 33 20 2a 20 2a  sts P1 P2 P3 * *
267d0 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 6e  .** Synopsis: in
267e0 74 6b 65 79 3d 72 5b 50 33 5d 0a 2a 2a 0a 2a 2a  tkey=r[P3].**.**
267f0 20 50 31 20 69 73 20 74 68 65 20 69 6e 64 65 78   P1 is the index
26800 20 6f 66 20 61 20 63 75 72 73 6f 72 20 6f 70 65   of a cursor ope
26810 6e 20 6f 6e 20 61 6e 20 53 51 4c 20 74 61 62 6c  n on an SQL tabl
26820 65 20 62 74 72 65 65 20 28 77 69 74 68 20 69 6e  e btree (with in
26830 74 65 67 65 72 0a 2a 2a 20 6b 65 79 73 29 2e 20  teger.** keys). 
26840 20 50 33 20 69 73 20 61 6e 20 69 6e 74 65 67 65   P3 is an intege
26850 72 20 72 6f 77 69 64 2e 20 20 49 66 20 50 31 20  r rowid.  If P1 
26860 64 6f 65 73 20 6e 6f 74 20 63 6f 6e 74 61 69 6e  does not contain
26870 20 61 20 72 65 63 6f 72 64 20 77 69 74 68 0a 2a   a record with.*
26880 2a 20 72 6f 77 69 64 20 50 33 20 74 68 65 6e 20  * rowid P3 then 
26890 6a 75 6d 70 20 69 6d 6d 65 64 69 61 74 65 6c 79  jump immediately
268a0 20 74 6f 20 50 32 2e 20 20 4f 72 2c 20 69 66 20   to P2.  Or, if 
268b0 50 32 20 69 73 20 30 2c 20 72 61 69 73 65 20 61  P2 is 0, raise a
268c0 6e 0a 2a 2a 20 53 51 4c 49 54 45 5f 43 4f 52 52  n.** SQLITE_CORR
268d0 55 50 54 20 65 72 72 6f 72 2e 20 49 66 20 50 31  UPT error. If P1
268e0 20 64 6f 65 73 20 63 6f 6e 74 61 69 6e 20 61 20   does contain a 
268f0 72 65 63 6f 72 64 20 77 69 74 68 20 72 6f 77 69  record with rowi
26900 64 20 50 33 20 74 68 65 6e 20 0a 2a 2a 20 6c 65  d P3 then .** le
26910 61 76 65 20 74 68 65 20 63 75 72 73 6f 72 20 70  ave the cursor p
26920 6f 69 6e 74 69 6e 67 20 61 74 20 74 68 61 74 20  ointing at that 
26930 72 65 63 6f 72 64 20 61 6e 64 20 66 61 6c 6c 20  record and fall 
26940 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6e  through to the n
26950 65 78 74 0a 2a 2a 20 69 6e 73 74 72 75 63 74 69  ext.** instructi
26960 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 4f 50  on..**.** The OP
26970 5f 53 65 65 6b 52 6f 77 69 64 20 6f 70 63 6f 64  _SeekRowid opcod
26980 65 20 70 65 72 66 6f 72 6d 73 20 74 68 65 20 73  e performs the s
26990 61 6d 65 20 6f 70 65 72 61 74 69 6f 6e 20 62 75  ame operation bu
269a0 74 20 61 6c 73 6f 20 61 6c 6c 6f 77 73 20 74 68  t also allows th
269b0 65 0a 2a 2a 20 50 33 20 72 65 67 69 73 74 65 72  e.** P3 register
269c0 20 74 6f 20 63 6f 6e 74 61 69 6e 20 61 20 6e 6f   to contain a no
269d0 6e 2d 69 6e 74 65 67 65 72 20 76 61 6c 75 65 2c  n-integer value,
269e0 20 69 6e 20 77 68 69 63 68 20 63 61 73 65 20 74   in which case t
269f0 68 65 20 6a 75 6d 70 20 69 73 0a 2a 2a 20 61 6c  he jump is.** al
26a00 77 61 79 73 20 74 61 6b 65 6e 2e 20 20 54 68 69  ways taken.  Thi
26a10 73 20 6f 70 63 6f 64 65 20 72 65 71 75 69 72 65  s opcode require
26a20 73 20 74 68 61 74 20 50 33 20 61 6c 77 61 79 73  s that P3 always
26a30 20 63 6f 6e 74 61 69 6e 20 61 6e 20 69 6e 74 65   contain an inte
26a40 67 65 72 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 4f  ger..**.** The O
26a50 50 5f 4e 6f 74 46 6f 75 6e 64 20 6f 70 63 6f 64  P_NotFound opcod
26a60 65 20 70 65 72 66 6f 72 6d 73 20 74 68 65 20 73  e performs the s
26a70 61 6d 65 20 6f 70 65 72 61 74 69 6f 6e 20 6f 6e  ame operation on
26a80 20 69 6e 64 65 78 20 62 74 72 65 65 73 0a 2a 2a   index btrees.**
26a90 20 28 77 69 74 68 20 61 72 62 69 74 72 61 72 79   (with arbitrary
26aa0 20 6d 75 6c 74 69 2d 76 61 6c 75 65 20 6b 65 79   multi-value key
26ab0 73 29 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f  s)..**.** This o
26ac0 70 63 6f 64 65 20 6c 65 61 76 65 73 20 74 68 65  pcode leaves the
26ad0 20 63 75 72 73 6f 72 20 69 6e 20 61 20 73 74 61   cursor in a sta
26ae0 74 65 20 77 68 65 72 65 20 69 74 20 63 61 6e 6e  te where it cann
26af0 6f 74 20 62 65 20 61 64 76 61 6e 63 65 64 0a 2a  ot be advanced.*
26b00 2a 20 69 6e 20 65 69 74 68 65 72 20 64 69 72 65  * in either dire
26b10 63 74 69 6f 6e 2e 20 20 49 6e 20 6f 74 68 65 72  ction.  In other
26b20 20 77 6f 72 64 73 2c 20 74 68 65 20 4e 65 78 74   words, the Next
26b30 20 61 6e 64 20 50 72 65 76 20 6f 70 63 6f 64 65   and Prev opcode
26b40 73 20 77 69 6c 6c 0a 2a 2a 20 6e 6f 74 20 77 6f  s will.** not wo
26b50 72 6b 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 68 69  rk following thi
26b60 73 20 6f 70 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20  s opcode..**.** 
26b70 53 65 65 20 61 6c 73 6f 3a 20 46 6f 75 6e 64 2c  See also: Found,
26b80 20 4e 6f 74 46 6f 75 6e 64 2c 20 4e 6f 43 6f 6e   NotFound, NoCon
26b90 66 6c 69 63 74 2c 20 53 65 65 6b 52 6f 77 69 64  flict, SeekRowid
26ba0 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 65 65 6b  .*/.case OP_Seek
26bb0 52 6f 77 69 64 3a 20 7b 20 20 20 20 20 20 20 20  Rowid: {        
26bc0 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a  /* jump, in3 */.
26bd0 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43    VdbeCursor *pC
26be0 3b 0a 20 20 42 74 43 75 72 73 6f 72 20 2a 70 43  ;.  BtCursor *pC
26bf0 72 73 72 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a  rsr;.  int res;.
26c00 20 20 75 36 34 20 69 4b 65 79 3b 0a 0a 20 20 70    u64 iKey;..  p
26c10 49 6e 33 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In3 = &aMem[pOp-
26c20 3e 70 33 5d 3b 0a 20 20 74 65 73 74 63 61 73 65  >p3];.  testcase
26c30 28 20 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20  ( pIn3->flags & 
26c40 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 74 65 73  MEM_Int );.  tes
26c50 74 63 61 73 65 28 20 70 49 6e 33 2d 3e 66 6c 61  tcase( pIn3->fla
26c60 67 73 20 26 20 4d 45 4d 5f 49 6e 74 52 65 61 6c  gs & MEM_IntReal
26c70 20 29 3b 0a 20 20 69 66 28 20 28 70 49 6e 33 2d   );.  if( (pIn3-
26c80 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f 49 6e  >flags & (MEM_In
26c90 74 7c 4d 45 4d 5f 49 6e 74 52 65 61 6c 29 29 3d  t|MEM_IntReal))=
26ca0 3d 30 20 29 7b 0a 20 20 20 20 2f 2a 20 4d 61 6b  =0 ){.    /* Mak
26cb0 65 20 73 75 72 65 20 70 49 6e 33 2d 3e 75 2e 69  e sure pIn3->u.i
26cc0 20 63 6f 6e 74 61 69 6e 73 20 61 20 76 61 6c 69   contains a vali
26cd0 64 20 69 6e 74 65 67 65 72 20 72 65 70 72 65 73  d integer repres
26ce0 65 6e 74 61 74 69 6f 6e 20 6f 66 0a 20 20 20 20  entation of.    
26cf0 2a 2a 20 74 68 65 20 6b 65 79 20 76 61 6c 75 65  ** the key value
26d00 2c 20 62 75 74 20 64 6f 20 6e 6f 74 20 63 68 61  , but do not cha
26d10 6e 67 65 20 74 68 65 20 64 61 74 61 74 79 70 65  nge the datatype
26d20 20 6f 66 20 74 68 65 20 72 65 67 69 73 74 65 72   of the register
26d30 2c 20 61 73 0a 20 20 20 20 2a 2a 20 6f 74 68 65  , as.    ** othe
26d40 72 20 70 61 72 74 73 20 6f 66 20 74 68 65 20 70  r parts of the p
26d50 65 72 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e  erpared statemen
26d60 74 20 6d 69 67 68 74 20 62 65 20 64 65 70 65 6e  t might be depen
26d70 64 69 6e 67 20 6f 6e 20 74 68 65 0a 20 20 20 20  ding on the.    
26d80 2a 2a 20 63 75 72 72 65 6e 74 20 64 61 74 61 74  ** current datat
26d90 79 70 65 2e 20 2a 2f 0a 20 20 20 20 75 31 36 20  ype. */.    u16 
26da0 6f 72 69 67 46 6c 61 67 73 20 3d 20 70 49 6e 33  origFlags = pIn3
26db0 2d 3e 66 6c 61 67 73 3b 0a 20 20 20 20 69 6e 74  ->flags;.    int
26dc0 20 69 73 4e 6f 74 49 6e 74 3b 0a 20 20 20 20 61   isNotInt;.    a
26dd0 70 70 6c 79 41 66 66 69 6e 69 74 79 28 70 49 6e  pplyAffinity(pIn
26de0 33 2c 20 53 51 4c 49 54 45 5f 41 46 46 5f 4e 55  3, SQLITE_AFF_NU
26df0 4d 45 52 49 43 2c 20 65 6e 63 6f 64 69 6e 67 29  MERIC, encoding)
26e00 3b 0a 20 20 20 20 69 73 4e 6f 74 49 6e 74 20 3d  ;.    isNotInt =
26e10 20 28 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20   (pIn3->flags & 
26e20 4d 45 4d 5f 49 6e 74 29 3d 3d 30 3b 0a 20 20 20  MEM_Int)==0;.   
26e30 20 70 49 6e 33 2d 3e 66 6c 61 67 73 20 3d 20 6f   pIn3->flags = o
26e40 72 69 67 46 6c 61 67 73 3b 0a 20 20 20 20 69 66  rigFlags;.    if
26e50 28 20 69 73 4e 6f 74 49 6e 74 20 29 20 67 6f 74  ( isNotInt ) got
26e60 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20  o jump_to_p2;.  
26e70 7d 0a 20 20 2f 2a 20 46 61 6c 6c 20 74 68 72 6f  }.  /* Fall thro
26e80 75 67 68 20 69 6e 74 6f 20 4f 50 5f 4e 6f 74 45  ugh into OP_NotE
26e90 78 69 73 74 73 20 2a 2f 0a 63 61 73 65 20 4f 50  xists */.case OP
26ea0 5f 4e 6f 74 45 78 69 73 74 73 3a 20 20 20 20 20  _NotExists:     
26eb0 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e       /* jump, in
26ec0 33 20 2a 2f 0a 20 20 70 49 6e 33 20 3d 20 26 61  3 */.  pIn3 = &a
26ed0 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20  Mem[pOp->p3];.  
26ee0 61 73 73 65 72 74 28 20 28 70 49 6e 33 2d 3e 66  assert( (pIn3->f
26ef0 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29 21  lags & MEM_Int)!
26f00 3d 30 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64  =0 || pOp->opcod
26f10 65 3d 3d 4f 50 5f 53 65 65 6b 52 6f 77 69 64 20  e==OP_SeekRowid 
26f20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  );.  assert( pOp
26f30 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e  ->p1>=0 && pOp->
26f40 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b  p1<p->nCursor );
26f50 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72  .  pC = p->apCsr
26f60 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
26f70 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 23 69  ert( pC!=0 );.#i
26f80 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55  fdef SQLITE_DEBU
26f90 47 0a 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63  G.  if( pOp->opc
26fa0 6f 64 65 3d 3d 4f 50 5f 53 65 65 6b 52 6f 77 69  ode==OP_SeekRowi
26fb0 64 20 29 20 70 43 2d 3e 73 65 65 6b 4f 70 20 3d  d ) pC->seekOp =
26fc0 20 4f 50 5f 53 65 65 6b 52 6f 77 69 64 3b 0a 23   OP_SeekRowid;.#
26fd0 65 6e 64 69 66 0a 20 20 61 73 73 65 72 74 28 20  endif.  assert( 
26fe0 70 43 2d 3e 69 73 54 61 62 6c 65 20 29 3b 0a 20  pC->isTable );. 
26ff0 20 61 73 73 65 72 74 28 20 70 43 2d 3e 65 43 75   assert( pC->eCu
27000 72 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f 42  rType==CURTYPE_B
27010 54 52 45 45 20 29 3b 0a 20 20 70 43 72 73 72 20  TREE );.  pCrsr 
27020 3d 20 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72  = pC->uc.pCursor
27030 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 72 73  ;.  assert( pCrs
27040 72 21 3d 30 20 29 3b 0a 20 20 72 65 73 20 3d 20  r!=0 );.  res = 
27050 30 3b 0a 20 20 69 4b 65 79 20 3d 20 70 49 6e 33  0;.  iKey = pIn3
27060 2d 3e 75 2e 69 3b 0a 20 20 72 63 20 3d 20 73 71  ->u.i;.  rc = sq
27070 6c 69 74 65 33 42 74 72 65 65 4d 6f 76 65 74 6f  lite3BtreeMoveto
27080 55 6e 70 61 63 6b 65 64 28 70 43 72 73 72 2c 20  Unpacked(pCrsr, 
27090 30 2c 20 69 4b 65 79 2c 20 30 2c 20 26 72 65 73  0, iKey, 0, &res
270a0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 72 63 3d  );.  assert( rc=
270b0 3d 53 51 4c 49 54 45 5f 4f 4b 20 7c 7c 20 72 65  =SQLITE_OK || re
270c0 73 3d 3d 30 20 29 3b 0a 20 20 70 43 2d 3e 6d 6f  s==0 );.  pC->mo
270d0 76 65 74 6f 54 61 72 67 65 74 20 3d 20 69 4b 65  vetoTarget = iKe
270e0 79 3b 20 20 2f 2a 20 55 73 65 64 20 62 79 20 4f  y;  /* Used by O
270f0 50 5f 44 65 6c 65 74 65 20 2a 2f 0a 20 20 70 43  P_Delete */.  pC
27100 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 30 3b 0a 20  ->nullRow = 0;. 
27110 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73   pC->cacheStatus
27120 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a   = CACHE_STALE;.
27130 20 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f    pC->deferredMo
27140 76 65 74 6f 20 3d 20 30 3b 0a 20 20 56 64 62 65  veto = 0;.  Vdbe
27150 42 72 61 6e 63 68 54 61 6b 65 6e 28 72 65 73 21  BranchTaken(res!
27160 3d 30 2c 32 29 3b 0a 20 20 70 43 2d 3e 73 65 65  =0,2);.  pC->see
27170 6b 52 65 73 75 6c 74 20 3d 20 72 65 73 3b 0a 20  kResult = res;. 
27180 20 69 66 28 20 72 65 73 21 3d 30 20 29 7b 0a 20   if( res!=0 ){. 
27190 20 20 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53     assert( rc==S
271a0 51 4c 49 54 45 5f 4f 4b 20 29 3b 0a 20 20 20 20  QLITE_OK );.    
271b0 69 66 28 20 70 4f 70 2d 3e 70 32 3d 3d 30 20 29  if( pOp->p2==0 )
271c0 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c  {.      rc = SQL
271d0 49 54 45 5f 43 4f 52 52 55 50 54 5f 42 4b 50 54  ITE_CORRUPT_BKPT
271e0 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20  ;.    }else{.   
271f0 20 20 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f     goto jump_to_
27200 70 32 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20  p2;.    }.  }.  
27210 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62  if( rc ) goto ab
27220 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
27230 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
27240 20 4f 70 63 6f 64 65 3a 20 53 65 71 75 65 6e 63   Opcode: Sequenc
27250 65 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  e P1 P2 * * *.**
27260 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d   Synopsis: r[P2]
27270 3d 63 75 72 73 6f 72 5b 50 31 5d 2e 63 74 72 2b  =cursor[P1].ctr+
27280 2b 0a 2a 2a 0a 2a 2a 20 46 69 6e 64 20 74 68 65  +.**.** Find the
27290 20 6e 65 78 74 20 61 76 61 69 6c 61 62 6c 65 20   next available 
272a0 73 65 71 75 65 6e 63 65 20 6e 75 6d 62 65 72 20  sequence number 
272b0 66 6f 72 20 63 75 72 73 6f 72 20 50 31 2e 0a 2a  for cursor P1..*
272c0 2a 20 57 72 69 74 65 20 74 68 65 20 73 65 71 75  * Write the sequ
272d0 65 6e 63 65 20 6e 75 6d 62 65 72 20 69 6e 74 6f  ence number into
272e0 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a   register P2..**
272f0 20 54 68 65 20 73 65 71 75 65 6e 63 65 20 6e 75   The sequence nu
27300 6d 62 65 72 20 6f 6e 20 74 68 65 20 63 75 72 73  mber on the curs
27310 6f 72 20 69 73 20 69 6e 63 72 65 6d 65 6e 74 65  or is incremente
27320 64 20 61 66 74 65 72 20 74 68 69 73 0a 2a 2a 20  d after this.** 
27330 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20 20 0a 2a  instruction.  .*
27340 2f 0a 63 61 73 65 20 4f 50 5f 53 65 71 75 65 6e  /.case OP_Sequen
27350 63 65 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  ce: {           
27360 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20 20 61 73 73  /* out2 */.  ass
27370 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20  ert( pOp->p1>=0 
27380 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43  && pOp->p1<p->nC
27390 75 72 73 6f 72 20 29 3b 0a 20 20 61 73 73 65 72  ursor );.  asser
273a0 74 28 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d  t( p->apCsr[pOp-
273b0 3e 70 31 5d 21 3d 30 20 29 3b 0a 20 20 61 73 73  >p1]!=0 );.  ass
273c0 65 72 74 28 20 70 2d 3e 61 70 43 73 72 5b 70 4f  ert( p->apCsr[pO
273d0 70 2d 3e 70 31 5d 2d 3e 65 43 75 72 54 79 70 65  p->p1]->eCurType
273e0 21 3d 43 55 52 54 59 50 45 5f 56 54 41 42 20 29  !=CURTYPE_VTAB )
273f0 3b 0a 20 20 70 4f 75 74 20 3d 20 6f 75 74 32 50  ;.  pOut = out2P
27400 72 65 72 65 6c 65 61 73 65 28 70 2c 20 70 4f 70  rerelease(p, pOp
27410 29 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d  );.  pOut->u.i =
27420 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70   p->apCsr[pOp->p
27430 31 5d 2d 3e 73 65 71 43 6f 75 6e 74 2b 2b 3b 0a  1]->seqCount++;.
27440 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 2f 2a 20    break;.}.../* 
27450 4f 70 63 6f 64 65 3a 20 4e 65 77 52 6f 77 69 64  Opcode: NewRowid
27460 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a   P1 P2 P3 * *.**
27470 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d   Synopsis: r[P2]
27480 3d 72 6f 77 69 64 0a 2a 2a 0a 2a 2a 20 47 65 74  =rowid.**.** Get
27490 20 61 20 6e 65 77 20 69 6e 74 65 67 65 72 20 72   a new integer r
274a0 65 63 6f 72 64 20 6e 75 6d 62 65 72 20 28 61 2e  ecord number (a.
274b0 6b 2e 61 20 22 72 6f 77 69 64 22 29 20 75 73 65  k.a "rowid") use
274c0 64 20 61 73 20 74 68 65 20 6b 65 79 20 74 6f 20  d as the key to 
274d0 61 20 74 61 62 6c 65 2e 0a 2a 2a 20 54 68 65 20  a table..** The 
274e0 72 65 63 6f 72 64 20 6e 75 6d 62 65 72 20 69 73  record number is
274f0 20 6e 6f 74 20 70 72 65 76 69 6f 75 73 6c 79 20   not previously 
27500 75 73 65 64 20 61 73 20 61 20 6b 65 79 20 69 6e  used as a key in
27510 20 74 68 65 20 64 61 74 61 62 61 73 65 0a 2a 2a   the database.**
27520 20 74 61 62 6c 65 20 74 68 61 74 20 63 75 72 73   table that curs
27530 6f 72 20 50 31 20 70 6f 69 6e 74 73 20 74 6f 2e  or P1 points to.
27540 20 20 54 68 65 20 6e 65 77 20 72 65 63 6f 72 64    The new record
27550 20 6e 75 6d 62 65 72 20 69 73 20 77 72 69 74 74   number is writt
27560 65 6e 0a 2a 2a 20 77 72 69 74 74 65 6e 20 74 6f  en.** written to
27570 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a   register P2..**
27580 0a 2a 2a 20 49 66 20 50 33 3e 30 20 74 68 65 6e  .** If P3>0 then
27590 20 50 33 20 69 73 20 61 20 72 65 67 69 73 74 65   P3 is a registe
275a0 72 20 69 6e 20 74 68 65 20 72 6f 6f 74 20 66 72  r in the root fr
275b0 61 6d 65 20 6f 66 20 74 68 69 73 20 56 44 42 45  ame of this VDBE
275c0 20 74 68 61 74 20 68 6f 6c 64 73 20 0a 2a 2a 20   that holds .** 
275d0 74 68 65 20 6c 61 72 67 65 73 74 20 70 72 65 76  the largest prev
275e0 69 6f 75 73 6c 79 20 67 65 6e 65 72 61 74 65 64  iously generated
275f0 20 72 65 63 6f 72 64 20 6e 75 6d 62 65 72 2e 20   record number. 
27600 4e 6f 20 6e 65 77 20 72 65 63 6f 72 64 20 6e 75  No new record nu
27610 6d 62 65 72 73 20 61 72 65 0a 2a 2a 20 61 6c 6c  mbers are.** all
27620 6f 77 65 64 20 74 6f 20 62 65 20 6c 65 73 73 20  owed to be less 
27630 74 68 61 6e 20 74 68 69 73 20 76 61 6c 75 65 2e  than this value.
27640 20 57 68 65 6e 20 74 68 69 73 20 76 61 6c 75 65   When this value
27650 20 72 65 61 63 68 65 73 20 69 74 73 20 6d 61 78   reaches its max
27660 69 6d 75 6d 2c 20 0a 2a 2a 20 61 6e 20 53 51 4c  imum, .** an SQL
27670 49 54 45 5f 46 55 4c 4c 20 65 72 72 6f 72 20 69  ITE_FULL error i
27680 73 20 67 65 6e 65 72 61 74 65 64 2e 20 54 68 65  s generated. The
27690 20 50 33 20 72 65 67 69 73 74 65 72 20 69 73 20   P3 register is 
276a0 75 70 64 61 74 65 64 20 77 69 74 68 20 74 68 65  updated with the
276b0 20 27 0a 2a 2a 20 67 65 6e 65 72 61 74 65 64 20   '.** generated 
276c0 72 65 63 6f 72 64 20 6e 75 6d 62 65 72 2e 20 54  record number. T
276d0 68 69 73 20 50 33 20 6d 65 63 68 61 6e 69 73 6d  his P3 mechanism
276e0 20 69 73 20 75 73 65 64 20 74 6f 20 68 65 6c 70   is used to help
276f0 20 69 6d 70 6c 65 6d 65 6e 74 20 74 68 65 0a 2a   implement the.*
27700 2a 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20  * AUTOINCREMENT 
27710 66 65 61 74 75 72 65 2e 0a 2a 2f 0a 63 61 73 65  feature..*/.case
27720 20 4f 50 5f 4e 65 77 52 6f 77 69 64 3a 20 7b 20   OP_NewRowid: { 
27730 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74            /* out
27740 32 20 2a 2f 0a 20 20 69 36 34 20 76 3b 20 20 20  2 */.  i64 v;   
27750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
27760 20 54 68 65 20 6e 65 77 20 72 6f 77 69 64 20 2a   The new rowid *
27770 2f 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a  /.  VdbeCursor *
27780 70 43 3b 20 20 20 20 20 20 20 20 2f 2a 20 43 75  pC;        /* Cu
27790 72 73 6f 72 20 6f 66 20 74 61 62 6c 65 20 74 6f  rsor of table to
277a0 20 67 65 74 20 74 68 65 20 6e 65 77 20 72 6f 77   get the new row
277b0 69 64 20 2a 2f 0a 20 20 69 6e 74 20 72 65 73 3b  id */.  int res;
277c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
277d0 2a 20 52 65 73 75 6c 74 20 6f 66 20 61 6e 20 73  * Result of an s
277e0 71 6c 69 74 65 33 42 74 72 65 65 4c 61 73 74 28  qlite3BtreeLast(
277f0 29 20 2a 2f 0a 20 20 69 6e 74 20 63 6e 74 3b 20  ) */.  int cnt; 
27800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
27810 20 43 6f 75 6e 74 65 72 20 74 6f 20 6c 69 6d 69   Counter to limi
27820 74 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  t the number of 
27830 73 65 61 72 63 68 65 73 20 2a 2f 0a 20 20 4d 65  searches */.  Me
27840 6d 20 2a 70 4d 65 6d 3b 20 20 20 20 20 20 20 20  m *pMem;        
27850 20 20 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72       /* Register
27860 20 68 6f 6c 64 69 6e 67 20 6c 61 72 67 65 73 74   holding largest
27870 20 72 6f 77 69 64 20 66 6f 72 20 41 55 54 4f 49   rowid for AUTOI
27880 4e 43 52 45 4d 45 4e 54 20 2a 2f 0a 20 20 56 64  NCREMENT */.  Vd
27890 62 65 46 72 61 6d 65 20 2a 70 46 72 61 6d 65 3b  beFrame *pFrame;
278a0 20 20 20 20 20 2f 2a 20 52 6f 6f 74 20 66 72 61       /* Root fra
278b0 6d 65 20 6f 66 20 56 44 42 45 20 2a 2f 0a 0a 20  me of VDBE */.. 
278c0 20 76 20 3d 20 30 3b 0a 20 20 72 65 73 20 3d 20   v = 0;.  res = 
278d0 30 3b 0a 20 20 70 4f 75 74 20 3d 20 6f 75 74 32  0;.  pOut = out2
278e0 50 72 65 72 65 6c 65 61 73 65 28 70 2c 20 70 4f  Prerelease(p, pO
278f0 70 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f  p);.  assert( pO
27900 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d  p->p1>=0 && pOp-
27910 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29  >p1<p->nCursor )
27920 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73  ;.  pC = p->apCs
27930 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  r[pOp->p1];.  as
27940 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20  sert( pC!=0 );. 
27950 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73 54   assert( pC->isT
27960 61 62 6c 65 20 29 3b 0a 20 20 61 73 73 65 72 74  able );.  assert
27970 28 20 70 43 2d 3e 65 43 75 72 54 79 70 65 3d 3d  ( pC->eCurType==
27980 43 55 52 54 59 50 45 5f 42 54 52 45 45 20 29 3b  CURTYPE_BTREE );
27990 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 75  .  assert( pC->u
279a0 63 2e 70 43 75 72 73 6f 72 21 3d 30 20 29 3b 0a  c.pCursor!=0 );.
279b0 20 20 7b 0a 20 20 20 20 2f 2a 20 54 68 65 20 6e    {.    /* The n
279c0 65 78 74 20 72 6f 77 69 64 20 6f 72 20 72 65 63  ext rowid or rec
279d0 6f 72 64 20 6e 75 6d 62 65 72 20 28 64 69 66 66  ord number (diff
279e0 65 72 65 6e 74 20 74 65 72 6d 73 20 66 6f 72 20  erent terms for 
279f0 74 68 65 20 73 61 6d 65 0a 20 20 20 20 2a 2a 20  the same.    ** 
27a00 74 68 69 6e 67 29 20 69 73 20 6f 62 74 61 69 6e  thing) is obtain
27a10 65 64 20 69 6e 20 61 20 74 77 6f 2d 73 74 65 70  ed in a two-step
27a20 20 61 6c 67 6f 72 69 74 68 6d 2e 0a 20 20 20 20   algorithm..    
27a30 2a 2a 0a 20 20 20 20 2a 2a 20 46 69 72 73 74 20  **.    ** First 
27a40 77 65 20 61 74 74 65 6d 70 74 20 74 6f 20 66 69  we attempt to fi
27a50 6e 64 20 74 68 65 20 6c 61 72 67 65 73 74 20 65  nd the largest e
27a60 78 69 73 74 69 6e 67 20 72 6f 77 69 64 20 61 6e  xisting rowid an
27a70 64 20 61 64 64 20 6f 6e 65 0a 20 20 20 20 2a 2a  d add one.    **
27a80 20 74 6f 20 74 68 61 74 2e 20 20 42 75 74 20 69   to that.  But i
27a90 66 20 74 68 65 20 6c 61 72 67 65 73 74 20 65 78  f the largest ex
27aa0 69 73 74 69 6e 67 20 72 6f 77 69 64 20 69 73 20  isting rowid is 
27ab0 61 6c 72 65 61 64 79 20 74 68 65 20 6d 61 78 69  already the maxi
27ac0 6d 75 6d 0a 20 20 20 20 2a 2a 20 70 6f 73 69 74  mum.    ** posit
27ad0 69 76 65 20 69 6e 74 65 67 65 72 2c 20 77 65 20  ive integer, we 
27ae0 68 61 76 65 20 74 6f 20 66 61 6c 6c 20 74 68 72  have to fall thr
27af0 6f 75 67 68 20 74 6f 20 74 68 65 20 73 65 63 6f  ough to the seco
27b00 6e 64 0a 20 20 20 20 2a 2a 20 70 72 6f 62 61 62  nd.    ** probab
27b10 69 6c 69 73 74 69 63 20 61 6c 67 6f 72 69 74 68  ilistic algorith
27b20 6d 0a 20 20 20 20 2a 2a 0a 20 20 20 20 2a 2a 20  m.    **.    ** 
27b30 54 68 65 20 73 65 63 6f 6e 64 20 61 6c 67 6f 72  The second algor
27b40 69 74 68 6d 20 69 73 20 74 6f 20 73 65 6c 65 63  ithm is to selec
27b50 74 20 61 20 72 6f 77 69 64 20 61 74 20 72 61 6e  t a rowid at ran
27b60 64 6f 6d 20 61 6e 64 20 73 65 65 20 69 66 0a 20  dom and see if. 
27b70 20 20 20 2a 2a 20 69 74 20 61 6c 72 65 61 64 79     ** it already
27b80 20 65 78 69 73 74 73 20 69 6e 20 74 68 65 20 74   exists in the t
27b90 61 62 6c 65 2e 20 20 49 66 20 69 74 20 64 6f 65  able.  If it doe
27ba0 73 20 6e 6f 74 20 65 78 69 73 74 2c 20 77 65 20  s not exist, we 
27bb0 68 61 76 65 0a 20 20 20 20 2a 2a 20 73 75 63 63  have.    ** succ
27bc0 65 65 64 65 64 2e 20 20 49 66 20 74 68 65 20 72  eeded.  If the r
27bd0 61 6e 64 6f 6d 20 72 6f 77 69 64 20 64 6f 65 73  andom rowid does
27be0 20 65 78 69 73 74 2c 20 77 65 20 73 65 6c 65 63   exist, we selec
27bf0 74 20 61 20 6e 65 77 20 6f 6e 65 0a 20 20 20 20  t a new one.    
27c00 2a 2a 20 61 6e 64 20 74 72 79 20 61 67 61 69 6e  ** and try again
27c10 2c 20 75 70 20 74 6f 20 31 30 30 20 74 69 6d 65  , up to 100 time
27c20 73 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 61 73  s..    */.    as
27c30 73 65 72 74 28 20 70 43 2d 3e 69 73 54 61 62 6c  sert( pC->isTabl
27c40 65 20 29 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c  e );..#ifdef SQL
27c50 49 54 45 5f 33 32 42 49 54 5f 52 4f 57 49 44 0a  ITE_32BIT_ROWID.
27c60 23 20 20 20 64 65 66 69 6e 65 20 4d 41 58 5f 52  #   define MAX_R
27c70 4f 57 49 44 20 30 78 37 66 66 66 66 66 66 66 0a  OWID 0x7fffffff.
27c80 23 65 6c 73 65 0a 20 20 20 20 2f 2a 20 53 6f 6d  #else.    /* Som
27c90 65 20 63 6f 6d 70 69 6c 65 72 73 20 63 6f 6d 70  e compilers comp
27ca0 6c 61 69 6e 20 61 62 6f 75 74 20 63 6f 6e 73 74  lain about const
27cb0 61 6e 74 73 20 6f 66 20 74 68 65 20 66 6f 72 6d  ants of the form
27cc0 20 30 78 37 66 66 66 66 66 66 66 66 66 66 66 66   0x7ffffffffffff
27cd0 66 66 66 2e 0a 20 20 20 20 2a 2a 20 4f 74 68 65  fff..    ** Othe
27ce0 72 73 20 63 6f 6d 70 6c 61 69 6e 20 61 62 6f 75  rs complain abou
27cf0 74 20 30 78 37 66 66 66 66 66 66 66 66 66 66 66  t 0x7fffffffffff
27d00 66 66 66 66 66 4c 4c 2e 20 20 54 68 65 20 66 6f  fffffLL.  The fo
27d10 6c 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 20 73 65  llowing macro se
27d20 65 6d 73 0a 20 20 20 20 2a 2a 20 74 6f 20 70 72  ems.    ** to pr
27d30 6f 76 69 64 65 20 74 68 65 20 63 6f 6e 73 74 61  ovide the consta
27d40 6e 74 20 77 68 69 6c 65 20 6d 61 6b 69 6e 67 20  nt while making 
27d50 61 6c 6c 20 63 6f 6d 70 69 6c 65 72 73 20 68 61  all compilers ha
27d60 70 70 79 2e 0a 20 20 20 20 2a 2f 0a 23 20 20 20  ppy..    */.#   
27d70 64 65 66 69 6e 65 20 4d 41 58 5f 52 4f 57 49 44  define MAX_ROWID
27d80 20 20 28 69 36 34 29 28 20 28 28 28 75 36 34 29    (i64)( (((u64)
27d90 30 78 37 66 66 66 66 66 66 66 29 3c 3c 33 32 29  0x7fffffff)<<32)
27da0 20 7c 20 28 75 36 34 29 30 78 66 66 66 66 66 66   | (u64)0xffffff
27db0 66 66 20 29 0a 23 65 6e 64 69 66 0a 0a 20 20 20  ff ).#endif..   
27dc0 20 69 66 28 20 21 70 43 2d 3e 75 73 65 52 61 6e   if( !pC->useRan
27dd0 64 6f 6d 52 6f 77 69 64 20 29 7b 0a 20 20 20 20  domRowid ){.    
27de0 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
27df0 72 65 65 4c 61 73 74 28 70 43 2d 3e 75 63 2e 70  reeLast(pC->uc.p
27e00 43 75 72 73 6f 72 2c 20 26 72 65 73 29 3b 0a 20  Cursor, &res);. 
27e10 20 20 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c       if( rc!=SQL
27e20 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20  ITE_OK ){.      
27e30 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65    goto abort_due
27e40 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20  _to_error;.     
27e50 20 7d 0a 20 20 20 20 20 20 69 66 28 20 72 65 73   }.      if( res
27e60 20 29 7b 0a 20 20 20 20 20 20 20 20 76 20 3d 20   ){.        v = 
27e70 31 3b 20 20 20 2f 2a 20 49 4d 50 3a 20 52 2d 36  1;   /* IMP: R-6
27e80 31 39 31 34 2d 34 38 30 37 34 20 2a 2f 0a 20 20  1914-48074 */.  
27e90 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
27ea0 20 20 20 61 73 73 65 72 74 28 20 73 71 6c 69 74     assert( sqlit
27eb0 65 33 42 74 72 65 65 43 75 72 73 6f 72 49 73 56  e3BtreeCursorIsV
27ec0 61 6c 69 64 28 70 43 2d 3e 75 63 2e 70 43 75 72  alid(pC->uc.pCur
27ed0 73 6f 72 29 20 29 3b 0a 20 20 20 20 20 20 20 20  sor) );.        
27ee0 76 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  v = sqlite3Btree
27ef0 49 6e 74 65 67 65 72 4b 65 79 28 70 43 2d 3e 75  IntegerKey(pC->u
27f00 63 2e 70 43 75 72 73 6f 72 29 3b 0a 20 20 20 20  c.pCursor);.    
27f10 20 20 20 20 69 66 28 20 76 3e 3d 4d 41 58 5f 52      if( v>=MAX_R
27f20 4f 57 49 44 20 29 7b 0a 20 20 20 20 20 20 20 20  OWID ){.        
27f30 20 20 70 43 2d 3e 75 73 65 52 61 6e 64 6f 6d 52    pC->useRandomR
27f40 6f 77 69 64 20 3d 20 31 3b 0a 20 20 20 20 20 20  owid = 1;.      
27f50 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20    }else{.       
27f60 20 20 20 76 2b 2b 3b 20 20 20 2f 2a 20 49 4d 50     v++;   /* IMP
27f70 3a 20 52 2d 32 39 35 33 38 2d 33 34 39 38 37 20  : R-29538-34987 
27f80 2a 2f 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20  */.        }.   
27f90 20 20 20 7d 0a 20 20 20 20 7d 0a 0a 23 69 66 6e     }.    }..#ifn
27fa0 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
27fb0 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 0a 20 20  AUTOINCREMENT.  
27fc0 20 20 69 66 28 20 70 4f 70 2d 3e 70 33 20 29 7b    if( pOp->p3 ){
27fd0 0a 20 20 20 20 20 20 2f 2a 20 41 73 73 65 72 74  .      /* Assert
27fe0 20 74 68 61 74 20 50 33 20 69 73 20 61 20 76 61   that P3 is a va
27ff0 6c 69 64 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 2e  lid memory cell.
28000 20 2a 2f 0a 20 20 20 20 20 20 61 73 73 65 72 74   */.      assert
28010 28 20 70 4f 70 2d 3e 70 33 3e 30 20 29 3b 0a 20  ( pOp->p3>0 );. 
28020 20 20 20 20 20 69 66 28 20 70 2d 3e 70 46 72 61       if( p->pFra
28030 6d 65 20 29 7b 0a 20 20 20 20 20 20 20 20 66 6f  me ){.        fo
28040 72 28 70 46 72 61 6d 65 3d 70 2d 3e 70 46 72 61  r(pFrame=p->pFra
28050 6d 65 3b 20 70 46 72 61 6d 65 2d 3e 70 50 61 72  me; pFrame->pPar
28060 65 6e 74 3b 20 70 46 72 61 6d 65 3d 70 46 72 61  ent; pFrame=pFra
28070 6d 65 2d 3e 70 50 61 72 65 6e 74 29 3b 0a 20 20  me->pParent);.  
28080 20 20 20 20 20 20 2f 2a 20 41 73 73 65 72 74 20        /* Assert 
28090 74 68 61 74 20 50 33 20 69 73 20 61 20 76 61 6c  that P3 is a val
280a0 69 64 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 2e 20  id memory cell. 
280b0 2a 2f 0a 20 20 20 20 20 20 20 20 61 73 73 65 72  */.        asser
280c0 74 28 20 70 4f 70 2d 3e 70 33 3c 3d 70 46 72 61  t( pOp->p3<=pFra
280d0 6d 65 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 20 20  me->nMem );.    
280e0 20 20 20 20 70 4d 65 6d 20 3d 20 26 70 46 72 61      pMem = &pFra
280f0 6d 65 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33  me->aMem[pOp->p3
28100 5d 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a  ];.      }else{.
28110 20 20 20 20 20 20 20 20 2f 2a 20 41 73 73 65 72          /* Asser
28120 74 20 74 68 61 74 20 50 33 20 69 73 20 61 20 76  t that P3 is a v
28130 61 6c 69 64 20 6d 65 6d 6f 72 79 20 63 65 6c 6c  alid memory cell
28140 2e 20 2a 2f 0a 20 20 20 20 20 20 20 20 61 73 73  . */.        ass
28150 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c 3d 28 70  ert( pOp->p3<=(p
28160 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43  ->nMem+1 - p->nC
28170 75 72 73 6f 72 29 20 29 3b 0a 20 20 20 20 20 20  ursor) );.      
28180 20 20 70 4d 65 6d 20 3d 20 26 61 4d 65 6d 5b 70    pMem = &aMem[p
28190 4f 70 2d 3e 70 33 5d 3b 0a 20 20 20 20 20 20 20  Op->p3];.       
281a0 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67   memAboutToChang
281b0 65 28 70 2c 20 70 4d 65 6d 29 3b 0a 20 20 20 20  e(p, pMem);.    
281c0 20 20 7d 0a 20 20 20 20 20 20 61 73 73 65 72 74    }.      assert
281d0 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 70 4d 65  ( memIsValid(pMe
281e0 6d 29 20 29 3b 0a 0a 20 20 20 20 20 20 52 45 47  m) );..      REG
281f0 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d  ISTER_TRACE(pOp-
28200 3e 70 33 2c 20 70 4d 65 6d 29 3b 0a 20 20 20 20  >p3, pMem);.    
28210 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
28220 49 6e 74 65 67 65 72 69 66 79 28 70 4d 65 6d 29  Integerify(pMem)
28230 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  ;.      assert( 
28240 28 70 4d 65 6d 2d 3e 66 6c 61 67 73 20 26 20 4d  (pMem->flags & M
28250 45 4d 5f 49 6e 74 29 21 3d 30 20 29 3b 20 20 2f  EM_Int)!=0 );  /
28260 2a 20 6d 65 6d 28 50 33 29 20 68 6f 6c 64 73 20  * mem(P3) holds 
28270 61 6e 20 69 6e 74 65 67 65 72 20 2a 2f 0a 20 20  an integer */.  
28280 20 20 20 20 69 66 28 20 70 4d 65 6d 2d 3e 75 2e      if( pMem->u.
28290 69 3d 3d 4d 41 58 5f 52 4f 57 49 44 20 7c 7c 20  i==MAX_ROWID || 
282a0 70 43 2d 3e 75 73 65 52 61 6e 64 6f 6d 52 6f 77  pC->useRandomRow
282b0 69 64 20 29 7b 0a 20 20 20 20 20 20 20 20 72 63  id ){.        rc
282c0 20 3d 20 53 51 4c 49 54 45 5f 46 55 4c 4c 3b 20   = SQLITE_FULL; 
282d0 20 20 2f 2a 20 49 4d 50 3a 20 52 2d 31 37 38 31    /* IMP: R-1781
282e0 37 2d 30 30 36 33 30 20 2a 2f 0a 20 20 20 20 20  7-00630 */.     
282f0 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75     goto abort_du
28300 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20  e_to_error;.    
28310 20 20 7d 0a 20 20 20 20 20 20 69 66 28 20 76 3c    }.      if( v<
28320 70 4d 65 6d 2d 3e 75 2e 69 2b 31 20 29 7b 0a 20  pMem->u.i+1 ){. 
28330 20 20 20 20 20 20 20 76 20 3d 20 70 4d 65 6d 2d         v = pMem-
28340 3e 75 2e 69 20 2b 20 31 3b 0a 20 20 20 20 20 20  >u.i + 1;.      
28350 7d 0a 20 20 20 20 20 20 70 4d 65 6d 2d 3e 75 2e  }.      pMem->u.
28360 69 20 3d 20 76 3b 0a 20 20 20 20 7d 0a 23 65 6e  i = v;.    }.#en
28370 64 69 66 0a 20 20 20 20 69 66 28 20 70 43 2d 3e  dif.    if( pC->
28380 75 73 65 52 61 6e 64 6f 6d 52 6f 77 69 64 20 29  useRandomRowid )
28390 7b 0a 20 20 20 20 20 20 2f 2a 20 49 4d 50 4c 45  {.      /* IMPLE
283a0 4d 45 4e 54 41 54 49 4f 4e 2d 4f 46 3a 20 52 2d  MENTATION-OF: R-
283b0 30 37 36 37 37 2d 34 31 38 38 31 20 49 66 20 74  07677-41881 If t
283c0 68 65 20 6c 61 72 67 65 73 74 20 52 4f 57 49 44  he largest ROWID
283d0 20 69 73 20 65 71 75 61 6c 20 74 6f 20 74 68 65   is equal to the
283e0 0a 20 20 20 20 20 20 2a 2a 20 6c 61 72 67 65 73  .      ** larges
283f0 74 20 70 6f 73 73 69 62 6c 65 20 69 6e 74 65 67  t possible integ
28400 65 72 20 28 39 32 32 33 33 37 32 30 33 36 38 35  er (922337203685
28410 34 37 37 35 38 30 37 29 20 74 68 65 6e 20 74 68  4775807) then th
28420 65 20 64 61 74 61 62 61 73 65 0a 20 20 20 20 20  e database.     
28430 20 2a 2a 20 65 6e 67 69 6e 65 20 73 74 61 72 74   ** engine start
28440 73 20 70 69 63 6b 69 6e 67 20 70 6f 73 69 74 69  s picking positi
28450 76 65 20 63 61 6e 64 69 64 61 74 65 20 52 4f 57  ve candidate ROW
28460 49 44 73 20 61 74 20 72 61 6e 64 6f 6d 20 75 6e  IDs at random un
28470 74 69 6c 0a 20 20 20 20 20 20 2a 2a 20 69 74 20  til.      ** it 
28480 66 69 6e 64 73 20 6f 6e 65 20 74 68 61 74 20 69  finds one that i
28490 73 20 6e 6f 74 20 70 72 65 76 69 6f 75 73 6c 79  s not previously
284a0 20 75 73 65 64 2e 20 2a 2f 0a 20 20 20 20 20 20   used. */.      
284b0 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3d  assert( pOp->p3=
284c0 3d 30 20 29 3b 20 20 2f 2a 20 57 65 20 63 61 6e  =0 );  /* We can
284d0 6e 6f 74 20 62 65 20 69 6e 20 72 61 6e 64 6f 6d  not be in random
284e0 20 72 6f 77 69 64 20 6d 6f 64 65 20 69 66 20 74   rowid mode if t
284f0 68 69 73 20 69 73 0a 20 20 20 20 20 20 20 20 20  his is.         
28500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28510 20 20 20 20 2a 2a 20 61 6e 20 41 55 54 4f 49 4e      ** an AUTOIN
28520 43 52 45 4d 45 4e 54 20 74 61 62 6c 65 2e 20 2a  CREMENT table. *
28530 2f 0a 20 20 20 20 20 20 63 6e 74 20 3d 20 30 3b  /.      cnt = 0;
28540 0a 20 20 20 20 20 20 64 6f 7b 0a 20 20 20 20 20  .      do{.     
28550 20 20 20 73 71 6c 69 74 65 33 5f 72 61 6e 64 6f     sqlite3_rando
28560 6d 6e 65 73 73 28 73 69 7a 65 6f 66 28 76 29 2c  mness(sizeof(v),
28570 20 26 76 29 3b 0a 20 20 20 20 20 20 20 20 76 20   &v);.        v 
28580 26 3d 20 28 4d 41 58 5f 52 4f 57 49 44 3e 3e 31  &= (MAX_ROWID>>1
28590 29 3b 20 76 2b 2b 3b 20 20 2f 2a 20 45 6e 73 75  ); v++;  /* Ensu
285a0 72 65 20 74 68 61 74 20 76 20 69 73 20 67 72 65  re that v is gre
285b0 61 74 65 72 20 74 68 61 6e 20 7a 65 72 6f 20 2a  ater than zero *
285c0 2f 0a 20 20 20 20 20 20 7d 77 68 69 6c 65 28 20  /.      }while( 
285d0 20 28 28 72 63 20 3d 20 73 71 6c 69 74 65 33 42   ((rc = sqlite3B
285e0 74 72 65 65 4d 6f 76 65 74 6f 55 6e 70 61 63 6b  treeMovetoUnpack
285f0 65 64 28 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f  ed(pC->uc.pCurso
28600 72 2c 20 30 2c 20 28 75 36 34 29 76 2c 0a 20 20  r, 0, (u64)v,.  
28610 20 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 30                 0
28640 2c 20 26 72 65 73 29 29 3d 3d 53 51 4c 49 54 45  , &res))==SQLITE
28650 5f 4f 4b 29 0a 20 20 20 20 20 20 20 20 20 20 20  _OK).           
28660 20 26 26 20 28 72 65 73 3d 3d 30 29 0a 20 20 20   && (res==0).   
28670 20 20 20 20 20 20 20 20 20 26 26 20 28 2b 2b 63           && (++c
28680 6e 74 3c 31 30 30 29 29 3b 0a 20 20 20 20 20 20  nt<100));.      
28690 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62  if( rc ) goto ab
286a0 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
286b0 3b 0a 20 20 20 20 20 20 69 66 28 20 72 65 73 3d  ;.      if( res=
286c0 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 72 63  =0 ){.        rc
286d0 20 3d 20 53 51 4c 49 54 45 5f 46 55 4c 4c 3b 20   = SQLITE_FULL; 
286e0 20 20 2f 2a 20 49 4d 50 3a 20 52 2d 33 38 32 31    /* IMP: R-3821
286f0 39 2d 35 33 30 30 32 20 2a 2f 0a 20 20 20 20 20  9-53002 */.     
28700 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75     goto abort_du
28710 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20  e_to_error;.    
28720 20 20 7d 0a 20 20 20 20 20 20 61 73 73 65 72 74    }.      assert
28730 28 20 76 3e 30 20 29 3b 20 20 2f 2a 20 45 56 3a  ( v>0 );  /* EV:
28740 20 52 2d 34 30 38 31 32 2d 30 33 35 37 30 20 2a   R-40812-03570 *
28750 2f 0a 20 20 20 20 7d 0a 20 20 20 20 70 43 2d 3e  /.    }.    pC->
28760 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d  deferredMoveto =
28770 20 30 3b 0a 20 20 20 20 70 43 2d 3e 63 61 63 68   0;.    pC->cach
28780 65 53 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f  eStatus = CACHE_
28790 53 54 41 4c 45 3b 0a 20 20 7d 0a 20 20 70 4f 75  STALE;.  }.  pOu
287a0 74 2d 3e 75 2e 69 20 3d 20 76 3b 0a 20 20 62 72  t->u.i = v;.  br
287b0 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
287c0 65 3a 20 49 6e 73 65 72 74 20 50 31 20 50 32 20  e: Insert P1 P2 
287d0 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f  P3 P4 P5.** Syno
287e0 70 73 69 73 3a 20 69 6e 74 6b 65 79 3d 72 5b 50  psis: intkey=r[P
287f0 33 5d 20 64 61 74 61 3d 72 5b 50 32 5d 0a 2a 2a  3] data=r[P2].**
28800 0a 2a 2a 20 57 72 69 74 65 20 61 6e 20 65 6e 74  .** Write an ent
28810 72 79 20 69 6e 74 6f 20 74 68 65 20 74 61 62 6c  ry into the tabl
28820 65 20 6f 66 20 63 75 72 73 6f 72 20 50 31 2e 20  e of cursor P1. 
28830 20 41 20 6e 65 77 20 65 6e 74 72 79 20 69 73 0a   A new entry is.
28840 2a 2a 20 63 72 65 61 74 65 64 20 69 66 20 69 74  ** created if it
28850 20 64 6f 65 73 6e 27 74 20 61 6c 72 65 61 64 79   doesn't already
28860 20 65 78 69 73 74 20 6f 72 20 74 68 65 20 64 61   exist or the da
28870 74 61 20 66 6f 72 20 61 6e 20 65 78 69 73 74 69  ta for an existi
28880 6e 67 0a 2a 2a 20 65 6e 74 72 79 20 69 73 20 6f  ng.** entry is o
28890 76 65 72 77 72 69 74 74 65 6e 2e 20 20 54 68 65  verwritten.  The
288a0 20 64 61 74 61 20 69 73 20 74 68 65 20 76 61 6c   data is the val
288b0 75 65 20 4d 45 4d 5f 42 6c 6f 62 20 73 74 6f 72  ue MEM_Blob stor
288c0 65 64 20 69 6e 20 72 65 67 69 73 74 65 72 0a 2a  ed in register.*
288d0 2a 20 6e 75 6d 62 65 72 20 50 32 2e 20 54 68 65  * number P2. The
288e0 20 6b 65 79 20 69 73 20 73 74 6f 72 65 64 20 69   key is stored i
288f0 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e 20 54  n register P3. T
28900 68 65 20 6b 65 79 20 6d 75 73 74 0a 2a 2a 20 62  he key must.** b
28910 65 20 61 20 4d 45 4d 5f 49 6e 74 2e 0a 2a 2a 0a  e a MEM_Int..**.
28920 2a 2a 20 49 66 20 74 68 65 20 4f 50 46 4c 41 47  ** If the OPFLAG
28930 5f 4e 43 48 41 4e 47 45 20 66 6c 61 67 20 6f 66  _NCHANGE flag of
28940 20 50 35 20 69 73 20 73 65 74 2c 20 74 68 65 6e   P5 is set, then
28950 20 74 68 65 20 72 6f 77 20 63 68 61 6e 67 65 20   the row change 
28960 63 6f 75 6e 74 20 69 73 0a 2a 2a 20 69 6e 63 72  count is.** incr
28970 65 6d 65 6e 74 65 64 20 28 6f 74 68 65 72 77 69  emented (otherwi
28980 73 65 20 6e 6f 74 29 2e 20 20 49 66 20 74 68 65  se not).  If the
28990 20 4f 50 46 4c 41 47 5f 4c 41 53 54 52 4f 57 49   OPFLAG_LASTROWI
289a0 44 20 66 6c 61 67 20 6f 66 20 50 35 20 69 73 20  D flag of P5 is 
289b0 73 65 74 2c 0a 2a 2a 20 74 68 65 6e 20 72 6f 77  set,.** then row
289c0 69 64 20 69 73 20 73 74 6f 72 65 64 20 66 6f 72  id is stored for
289d0 20 73 75 62 73 65 71 75 65 6e 74 20 72 65 74 75   subsequent retu
289e0 72 6e 20 62 79 20 74 68 65 0a 2a 2a 20 73 71 6c  rn by the.** sql
289f0 69 74 65 33 5f 6c 61 73 74 5f 69 6e 73 65 72 74  ite3_last_insert
28a00 5f 72 6f 77 69 64 28 29 20 66 75 6e 63 74 69 6f  _rowid() functio
28a10 6e 20 28 6f 74 68 65 72 77 69 73 65 20 69 74 20  n (otherwise it 
28a20 69 73 20 75 6e 6d 6f 64 69 66 69 65 64 29 2e 0a  is unmodified)..
28a30 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 4f 50 46  **.** If the OPF
28a40 4c 41 47 5f 55 53 45 53 45 45 4b 52 45 53 55 4c  LAG_USESEEKRESUL
28a50 54 20 66 6c 61 67 20 6f 66 20 50 35 20 69 73 20  T flag of P5 is 
28a60 73 65 74 2c 20 74 68 65 20 69 6d 70 6c 65 6d 65  set, the impleme
28a70 6e 74 61 74 69 6f 6e 20 6d 69 67 68 74 0a 2a 2a  ntation might.**
28a80 20 72 75 6e 20 66 61 73 74 65 72 20 62 79 20 61   run faster by a
28a90 76 6f 69 64 69 6e 67 20 61 6e 20 75 6e 6e 65 63  voiding an unnec
28aa0 65 73 73 61 72 79 20 73 65 65 6b 20 6f 6e 20 63  essary seek on c
28ab0 75 72 73 6f 72 20 50 31 2e 20 20 48 6f 77 65 76  ursor P1.  Howev
28ac0 65 72 2c 0a 2a 2a 20 74 68 65 20 4f 50 46 4c 41  er,.** the OPFLA
28ad0 47 5f 55 53 45 53 45 45 4b 52 45 53 55 4c 54 20  G_USESEEKRESULT 
28ae0 66 6c 61 67 20 6d 75 73 74 20 6f 6e 6c 79 20 62  flag must only b
28af0 65 20 73 65 74 20 69 66 20 74 68 65 72 65 20 68  e set if there h
28b00 61 76 65 20 62 65 65 6e 20 6e 6f 20 70 72 69 6f  ave been no prio
28b10 72 0a 2a 2a 20 73 65 65 6b 73 20 6f 6e 20 74 68  r.** seeks on th
28b20 65 20 63 75 72 73 6f 72 20 6f 72 20 69 66 20 74  e cursor or if t
28b30 68 65 20 6d 6f 73 74 20 72 65 63 65 6e 74 20 73  he most recent s
28b40 65 65 6b 20 75 73 65 64 20 61 20 6b 65 79 20 65  eek used a key e
28b50 71 75 61 6c 20 74 6f 20 50 33 2e 0a 2a 2a 0a 2a  qual to P3..**.*
28b60 2a 20 49 66 20 74 68 65 20 4f 50 46 4c 41 47 5f  * If the OPFLAG_
28b70 49 53 55 50 44 41 54 45 20 66 6c 61 67 20 69 73  ISUPDATE flag is
28b80 20 73 65 74 2c 20 74 68 65 6e 20 74 68 69 73 20   set, then this 
28b90 6f 70 63 6f 64 65 20 69 73 20 70 61 72 74 20 6f  opcode is part o
28ba0 66 20 61 6e 0a 2a 2a 20 55 50 44 41 54 45 20 6f  f an.** UPDATE o
28bb0 70 65 72 61 74 69 6f 6e 2e 20 20 4f 74 68 65 72  peration.  Other
28bc0 77 69 73 65 20 28 69 66 20 74 68 65 20 66 6c 61  wise (if the fla
28bd0 67 20 69 73 20 63 6c 65 61 72 29 20 74 68 65 6e  g is clear) then
28be0 20 74 68 69 73 20 6f 70 63 6f 64 65 0a 2a 2a 20   this opcode.** 
28bf0 69 73 20 70 61 72 74 20 6f 66 20 61 6e 20 49 4e  is part of an IN
28c00 53 45 52 54 20 6f 70 65 72 61 74 69 6f 6e 2e 20  SERT operation. 
28c10 20 54 68 65 20 64 69 66 66 65 72 65 6e 63 65 20   The difference 
28c20 69 73 20 6f 6e 6c 79 20 69 6d 70 6f 72 74 61 6e  is only importan
28c30 74 20 74 6f 0a 2a 2a 20 74 68 65 20 75 70 64 61  t to.** the upda
28c40 74 65 20 68 6f 6f 6b 2e 0a 2a 2a 0a 2a 2a 20 50  te hook..**.** P
28c50 61 72 61 6d 65 74 65 72 20 50 34 20 6d 61 79 20  arameter P4 may 
28c60 70 6f 69 6e 74 20 74 6f 20 61 20 54 61 62 6c 65  point to a Table
28c70 20 73 74 72 75 63 74 75 72 65 2c 20 6f 72 20 6d   structure, or m
28c80 61 79 20 62 65 20 4e 55 4c 4c 2e 20 49 66 20 69  ay be NULL. If i
28c90 74 20 69 73 20 0a 2a 2a 20 6e 6f 74 20 4e 55 4c  t is .** not NUL
28ca0 4c 2c 20 74 68 65 6e 20 74 68 65 20 75 70 64 61  L, then the upda
28cb0 74 65 2d 68 6f 6f 6b 20 28 73 71 6c 69 74 65 33  te-hook (sqlite3
28cc0 2e 78 55 70 64 61 74 65 43 61 6c 6c 62 61 63 6b  .xUpdateCallback
28cd0 29 20 69 73 20 69 6e 76 6f 6b 65 64 20 0a 2a 2a  ) is invoked .**
28ce0 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 20 73 75 63   following a suc
28cf0 63 65 73 73 66 75 6c 20 69 6e 73 65 72 74 2e 0a  cessful insert..
28d00 2a 2a 0a 2a 2a 20 28 57 41 52 4e 49 4e 47 2f 54  **.** (WARNING/T
28d10 4f 44 4f 3a 20 49 66 20 50 31 20 69 73 20 61 20  ODO: If P1 is a 
28d20 70 73 65 75 64 6f 2d 63 75 72 73 6f 72 20 61 6e  pseudo-cursor an
28d30 64 20 50 32 20 69 73 20 64 79 6e 61 6d 69 63 61  d P2 is dynamica
28d40 6c 6c 79 0a 2a 2a 20 61 6c 6c 6f 63 61 74 65 64  lly.** allocated
28d50 2c 20 74 68 65 6e 20 6f 77 6e 65 72 73 68 69 70  , then ownership
28d60 20 6f 66 20 50 32 20 69 73 20 74 72 61 6e 73 66   of P2 is transf
28d70 65 72 72 65 64 20 74 6f 20 74 68 65 20 70 73 65  erred to the pse
28d80 75 64 6f 2d 63 75 72 73 6f 72 0a 2a 2a 20 61 6e  udo-cursor.** an
28d90 64 20 72 65 67 69 73 74 65 72 20 50 32 20 62 65  d register P2 be
28da0 63 6f 6d 65 73 20 65 70 68 65 6d 65 72 61 6c 2e  comes ephemeral.
28db0 20 20 49 66 20 74 68 65 20 63 75 72 73 6f 72 20    If the cursor 
28dc0 69 73 20 63 68 61 6e 67 65 64 2c 20 74 68 65 0a  is changed, the.
28dd0 2a 2a 20 76 61 6c 75 65 20 6f 66 20 72 65 67 69  ** value of regi
28de0 73 74 65 72 20 50 32 20 77 69 6c 6c 20 74 68 65  ster P2 will the
28df0 6e 20 63 68 61 6e 67 65 2e 20 20 4d 61 6b 65 20  n change.  Make 
28e00 73 75 72 65 20 74 68 69 73 20 64 6f 65 73 20 6e  sure this does n
28e10 6f 74 0a 2a 2a 20 63 61 75 73 65 20 61 6e 79 20  ot.** cause any 
28e20 70 72 6f 62 6c 65 6d 73 2e 29 0a 2a 2a 0a 2a 2a  problems.).**.**
28e30 20 54 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f   This instructio
28e40 6e 20 6f 6e 6c 79 20 77 6f 72 6b 73 20 6f 6e 20  n only works on 
28e50 74 61 62 6c 65 73 2e 20 20 54 68 65 20 65 71 75  tables.  The equ
28e60 69 76 61 6c 65 6e 74 20 69 6e 73 74 72 75 63 74  ivalent instruct
28e70 69 6f 6e 0a 2a 2a 20 66 6f 72 20 69 6e 64 69 63  ion.** for indic
28e80 65 73 20 69 73 20 4f 50 5f 49 64 78 49 6e 73 65  es is OP_IdxInse
28e90 72 74 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49  rt..*/.case OP_I
28ea0 6e 73 65 72 74 3a 20 7b 0a 20 20 4d 65 6d 20 2a  nsert: {.  Mem *
28eb0 70 44 61 74 61 3b 20 20 20 20 20 20 20 2f 2a 20  pData;       /* 
28ec0 4d 45 4d 20 63 65 6c 6c 20 68 6f 6c 64 69 6e 67  MEM cell holding
28ed0 20 64 61 74 61 20 66 6f 72 20 74 68 65 20 72 65   data for the re
28ee0 63 6f 72 64 20 74 6f 20 62 65 20 69 6e 73 65 72  cord to be inser
28ef0 74 65 64 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 4b  ted */.  Mem *pK
28f00 65 79 3b 20 20 20 20 20 20 20 20 2f 2a 20 4d 45  ey;        /* ME
28f10 4d 20 63 65 6c 6c 20 68 6f 6c 64 69 6e 67 20 6b  M cell holding k
28f20 65 79 20 20 66 6f 72 20 74 68 65 20 72 65 63 6f  ey  for the reco
28f30 72 64 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73  rd */.  VdbeCurs
28f40 6f 72 20 2a 70 43 3b 20 20 20 2f 2a 20 43 75 72  or *pC;   /* Cur
28f50 73 6f 72 20 74 6f 20 74 61 62 6c 65 20 69 6e 74  sor to table int
28f60 6f 20 77 68 69 63 68 20 69 6e 73 65 72 74 20 69  o which insert i
28f70 73 20 77 72 69 74 74 65 6e 20 2a 2f 0a 20 20 69  s written */.  i
28f80 6e 74 20 73 65 65 6b 52 65 73 75 6c 74 3b 20 20  nt seekResult;  
28f90 20 2f 2a 20 52 65 73 75 6c 74 20 6f 66 20 70 72   /* Result of pr
28fa0 69 6f 72 20 73 65 65 6b 20 6f 72 20 30 20 69 66  ior seek or 0 if
28fb0 20 6e 6f 20 55 53 45 53 45 45 4b 52 45 53 55 4c   no USESEEKRESUL
28fc0 54 20 66 6c 61 67 20 2a 2f 0a 20 20 63 6f 6e 73  T flag */.  cons
28fd0 74 20 63 68 61 72 20 2a 7a 44 62 3b 20 20 2f 2a  t char *zDb;  /*
28fe0 20 64 61 74 61 62 61 73 65 20 6e 61 6d 65 20 2d   database name -
28ff0 20 75 73 65 64 20 62 79 20 74 68 65 20 75 70 64   used by the upd
29000 61 74 65 20 68 6f 6f 6b 20 2a 2f 0a 20 20 54 61  ate hook */.  Ta
29010 62 6c 65 20 2a 70 54 61 62 3b 20 20 20 20 20 20  ble *pTab;      
29020 2f 2a 20 54 61 62 6c 65 20 73 74 72 75 63 74 75  /* Table structu
29030 72 65 20 2d 20 75 73 65 64 20 62 79 20 75 70 64  re - used by upd
29040 61 74 65 20 61 6e 64 20 70 72 65 2d 75 70 64 61  ate and pre-upda
29050 74 65 20 68 6f 6f 6b 73 20 2a 2f 0a 20 20 42 74  te hooks */.  Bt
29060 72 65 65 50 61 79 6c 6f 61 64 20 78 3b 20 20 20  reePayload x;   
29070 2f 2a 20 50 61 79 6c 6f 61 64 20 74 6f 20 62 65  /* Payload to be
29080 20 69 6e 73 65 72 74 65 64 20 2a 2f 0a 0a 20 20   inserted */..  
29090 70 44 61 74 61 20 3d 20 26 61 4d 65 6d 5b 70 4f  pData = &aMem[pO
290a0 70 2d 3e 70 32 5d 3b 0a 20 20 61 73 73 65 72 74  p->p2];.  assert
290b0 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20  ( pOp->p1>=0 && 
290c0 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73  pOp->p1<p->nCurs
290d0 6f 72 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  or );.  assert( 
290e0 6d 65 6d 49 73 56 61 6c 69 64 28 70 44 61 74 61  memIsValid(pData
290f0 29 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61  ) );.  pC = p->a
29100 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  pCsr[pOp->p1];. 
29110 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29   assert( pC!=0 )
29120 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  ;.  assert( pC->
29130 65 43 75 72 54 79 70 65 3d 3d 43 55 52 54 59 50  eCurType==CURTYP
29140 45 5f 42 54 52 45 45 20 29 3b 0a 20 20 61 73 73  E_BTREE );.  ass
29150 65 72 74 28 20 70 43 2d 3e 75 63 2e 70 43 75 72  ert( pC->uc.pCur
29160 73 6f 72 21 3d 30 20 29 3b 0a 20 20 61 73 73 65  sor!=0 );.  asse
29170 72 74 28 20 28 70 4f 70 2d 3e 70 35 20 26 20 4f  rt( (pOp->p5 & O
29180 50 46 4c 41 47 5f 49 53 4e 4f 4f 50 29 20 7c 7c  PFLAG_ISNOOP) ||
29190 20 70 43 2d 3e 69 73 54 61 62 6c 65 20 29 3b 0a   pC->isTable );.
291a0 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
291b0 34 74 79 70 65 3d 3d 50 34 5f 54 41 42 4c 45 20  4type==P4_TABLE 
291c0 7c 7c 20 70 4f 70 2d 3e 70 34 74 79 70 65 3e 3d  || pOp->p4type>=
291d0 50 34 5f 53 54 41 54 49 43 20 29 3b 0a 20 20 52  P4_STATIC );.  R
291e0 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f  EGISTER_TRACE(pO
291f0 70 2d 3e 70 32 2c 20 70 44 61 74 61 29 3b 0a 20  p->p2, pData);. 
29200 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e 63 72   sqlite3VdbeIncr
29210 57 72 69 74 65 43 6f 75 6e 74 65 72 28 70 2c 20  WriteCounter(p, 
29220 70 43 29 3b 0a 0a 20 20 70 4b 65 79 20 3d 20 26  pC);..  pKey = &
29230 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20  aMem[pOp->p3];. 
29240 20 61 73 73 65 72 74 28 20 70 4b 65 79 2d 3e 66   assert( pKey->f
29250 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 20 29  lags & MEM_Int )
29260 3b 0a 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49  ;.  assert( memI
29270 73 56 61 6c 69 64 28 70 4b 65 79 29 20 29 3b 0a  sValid(pKey) );.
29280 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45    REGISTER_TRACE
29290 28 70 4f 70 2d 3e 70 33 2c 20 70 4b 65 79 29 3b  (pOp->p3, pKey);
292a0 0a 20 20 78 2e 6e 4b 65 79 20 3d 20 70 4b 65 79  .  x.nKey = pKey
292b0 2d 3e 75 2e 69 3b 0a 0a 20 20 69 66 28 20 70 4f  ->u.i;..  if( pO
292c0 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 54 41  p->p4type==P4_TA
292d0 42 4c 45 20 26 26 20 48 41 53 5f 55 50 44 41 54  BLE && HAS_UPDAT
292e0 45 5f 48 4f 4f 4b 28 64 62 29 20 29 7b 0a 20 20  E_HOOK(db) ){.  
292f0 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69 44    assert( pC->iD
29300 62 3e 3d 30 20 29 3b 0a 20 20 20 20 7a 44 62 20  b>=0 );.    zDb 
29310 3d 20 64 62 2d 3e 61 44 62 5b 70 43 2d 3e 69 44  = db->aDb[pC->iD
29320 62 5d 2e 7a 44 62 53 4e 61 6d 65 3b 0a 20 20 20  b].zDbSName;.   
29330 20 70 54 61 62 20 3d 20 70 4f 70 2d 3e 70 34 2e   pTab = pOp->p4.
29340 70 54 61 62 3b 0a 20 20 20 20 61 73 73 65 72 74  pTab;.    assert
29350 28 20 28 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46  ( (pOp->p5 & OPF
29360 4c 41 47 5f 49 53 4e 4f 4f 50 29 20 7c 7c 20 48  LAG_ISNOOP) || H
29370 61 73 52 6f 77 69 64 28 70 54 61 62 29 20 29 3b  asRowid(pTab) );
29380 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70 54  .  }else{.    pT
29390 61 62 20 3d 20 30 3b 0a 20 20 20 20 7a 44 62 20  ab = 0;.    zDb 
293a0 3d 20 30 3b 20 20 2f 2a 20 4e 6f 74 20 6e 65 65  = 0;  /* Not nee
293b0 64 65 64 2e 20 20 53 69 6c 65 6e 63 65 20 61 20  ded.  Silence a 
293c0 63 6f 6d 70 69 6c 65 72 20 77 61 72 6e 69 6e 67  compiler warning
293d0 2e 20 2a 2f 0a 20 20 7d 0a 0a 23 69 66 64 65 66  . */.  }..#ifdef
293e0 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 50   SQLITE_ENABLE_P
293f0 52 45 55 50 44 41 54 45 5f 48 4f 4f 4b 0a 20 20  REUPDATE_HOOK.  
29400 2f 2a 20 49 6e 76 6f 6b 65 20 74 68 65 20 70 72  /* Invoke the pr
29410 65 2d 75 70 64 61 74 65 20 68 6f 6f 6b 2c 20 69  e-update hook, i
29420 66 20 61 6e 79 20 2a 2f 0a 20 20 69 66 28 20 70  f any */.  if( p
29430 54 61 62 20 29 7b 0a 20 20 20 20 69 66 28 20 64  Tab ){.    if( d
29440 62 2d 3e 78 50 72 65 55 70 64 61 74 65 43 61 6c  b->xPreUpdateCal
29450 6c 62 61 63 6b 20 26 26 20 21 28 70 4f 70 2d 3e  lback && !(pOp->
29460 70 35 20 26 20 4f 50 46 4c 41 47 5f 49 53 55 50  p5 & OPFLAG_ISUP
29470 44 41 54 45 29 20 29 7b 0a 20 20 20 20 20 20 73  DATE) ){.      s
29480 71 6c 69 74 65 33 56 64 62 65 50 72 65 55 70 64  qlite3VdbePreUpd
29490 61 74 65 48 6f 6f 6b 28 70 2c 20 70 43 2c 20 53  ateHook(p, pC, S
294a0 51 4c 49 54 45 5f 49 4e 53 45 52 54 2c 20 7a 44  QLITE_INSERT, zD
294b0 62 2c 20 70 54 61 62 2c 20 78 2e 6e 4b 65 79 2c  b, pTab, x.nKey,
294c0 70 4f 70 2d 3e 70 32 29 3b 0a 20 20 20 20 7d 0a  pOp->p2);.    }.
294d0 20 20 20 20 69 66 28 20 64 62 2d 3e 78 55 70 64      if( db->xUpd
294e0 61 74 65 43 61 6c 6c 62 61 63 6b 3d 3d 30 20 7c  ateCallback==0 |
294f0 7c 20 70 54 61 62 2d 3e 61 43 6f 6c 3d 3d 30 20  | pTab->aCol==0 
29500 29 7b 0a 20 20 20 20 20 20 2f 2a 20 50 72 65 76  ){.      /* Prev
29510 65 6e 74 20 70 6f 73 74 2d 75 70 64 61 74 65 20  ent post-update 
29520 68 6f 6f 6b 20 66 72 6f 6d 20 72 75 6e 6e 69 6e  hook from runnin
29530 67 20 69 6e 20 63 61 73 65 73 20 77 68 65 6e 20  g in cases when 
29540 69 74 20 73 68 6f 75 6c 64 20 6e 6f 74 20 2a 2f  it should not */
29550 0a 20 20 20 20 20 20 70 54 61 62 20 3d 20 30 3b  .      pTab = 0;
29560 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 69 66 28  .    }.  }.  if(
29570 20 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41   pOp->p5 & OPFLA
29580 47 5f 49 53 4e 4f 4f 50 20 29 20 62 72 65 61 6b  G_ISNOOP ) break
29590 3b 0a 23 65 6e 64 69 66 0a 0a 20 20 69 66 28 20  ;.#endif..  if( 
295a0 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47  pOp->p5 & OPFLAG
295b0 5f 4e 43 48 41 4e 47 45 20 29 20 70 2d 3e 6e 43  _NCHANGE ) p->nC
295c0 68 61 6e 67 65 2b 2b 3b 0a 20 20 69 66 28 20 70  hange++;.  if( p
295d0 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f  Op->p5 & OPFLAG_
295e0 4c 41 53 54 52 4f 57 49 44 20 29 20 64 62 2d 3e  LASTROWID ) db->
295f0 6c 61 73 74 52 6f 77 69 64 20 3d 20 78 2e 6e 4b  lastRowid = x.nK
29600 65 79 3b 0a 20 20 61 73 73 65 72 74 28 20 70 44  ey;.  assert( pD
29610 61 74 61 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45  ata->flags & (ME
29620 4d 5f 42 6c 6f 62 7c 4d 45 4d 5f 53 74 72 29 20  M_Blob|MEM_Str) 
29630 29 3b 0a 20 20 78 2e 70 44 61 74 61 20 3d 20 70  );.  x.pData = p
29640 44 61 74 61 2d 3e 7a 3b 0a 20 20 78 2e 6e 44 61  Data->z;.  x.nDa
29650 74 61 20 3d 20 70 44 61 74 61 2d 3e 6e 3b 0a 20  ta = pData->n;. 
29660 20 73 65 65 6b 52 65 73 75 6c 74 20 3d 20 28 28   seekResult = ((
29670 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47  pOp->p5 & OPFLAG
29680 5f 55 53 45 53 45 45 4b 52 45 53 55 4c 54 29 20  _USESEEKRESULT) 
29690 3f 20 70 43 2d 3e 73 65 65 6b 52 65 73 75 6c 74  ? pC->seekResult
296a0 20 3a 20 30 29 3b 0a 20 20 69 66 28 20 70 44 61   : 0);.  if( pDa
296b0 74 61 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  ta->flags & MEM_
296c0 5a 65 72 6f 20 29 7b 0a 20 20 20 20 78 2e 6e 5a  Zero ){.    x.nZ
296d0 65 72 6f 20 3d 20 70 44 61 74 61 2d 3e 75 2e 6e  ero = pData->u.n
296e0 5a 65 72 6f 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  Zero;.  }else{. 
296f0 20 20 20 78 2e 6e 5a 65 72 6f 20 3d 20 30 3b 0a     x.nZero = 0;.
29700 20 20 7d 0a 20 20 78 2e 70 4b 65 79 20 3d 20 30    }.  x.pKey = 0
29710 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  ;.  rc = sqlite3
29720 42 74 72 65 65 49 6e 73 65 72 74 28 70 43 2d 3e  BtreeInsert(pC->
29730 75 63 2e 70 43 75 72 73 6f 72 2c 20 26 78 2c 0a  uc.pCursor, &x,.
29740 20 20 20 20 20 20 28 70 4f 70 2d 3e 70 35 20 26        (pOp->p5 &
29750 20 28 4f 50 46 4c 41 47 5f 41 50 50 45 4e 44 7c   (OPFLAG_APPEND|
29760 4f 50 46 4c 41 47 5f 53 41 56 45 50 4f 53 49 54  OPFLAG_SAVEPOSIT
29770 49 4f 4e 29 29 2c 20 73 65 65 6b 52 65 73 75 6c  ION)), seekResul
29780 74 0a 20 20 29 3b 0a 20 20 70 43 2d 3e 64 65 66  t.  );.  pC->def
29790 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d 20 30 3b  erredMoveto = 0;
297a0 0a 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74  .  pC->cacheStat
297b0 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45  us = CACHE_STALE
297c0 3b 0a 0a 20 20 2f 2a 20 49 6e 76 6f 6b 65 20 74  ;..  /* Invoke t
297d0 68 65 20 75 70 64 61 74 65 2d 68 6f 6f 6b 20 69  he update-hook i
297e0 66 20 72 65 71 75 69 72 65 64 2e 20 2a 2f 0a 20  f required. */. 
297f0 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61   if( rc ) goto a
29800 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
29810 72 3b 0a 20 20 69 66 28 20 70 54 61 62 20 29 7b  r;.  if( pTab ){
29820 0a 20 20 20 20 61 73 73 65 72 74 28 20 64 62 2d  .    assert( db-
29830 3e 78 55 70 64 61 74 65 43 61 6c 6c 62 61 63 6b  >xUpdateCallback
29840 21 3d 30 20 29 3b 0a 20 20 20 20 61 73 73 65 72  !=0 );.    asser
29850 74 28 20 70 54 61 62 2d 3e 61 43 6f 6c 21 3d 30  t( pTab->aCol!=0
29860 20 29 3b 0a 20 20 20 20 64 62 2d 3e 78 55 70 64   );.    db->xUpd
29870 61 74 65 43 61 6c 6c 62 61 63 6b 28 64 62 2d 3e  ateCallback(db->
29880 70 55 70 64 61 74 65 41 72 67 2c 0a 20 20 20 20  pUpdateArg,.    
29890 20 20 20 20 20 20 20 28 70 4f 70 2d 3e 70 35 20         (pOp->p5 
298a0 26 20 4f 50 46 4c 41 47 5f 49 53 55 50 44 41 54  & OPFLAG_ISUPDAT
298b0 45 29 20 3f 20 53 51 4c 49 54 45 5f 55 50 44 41  E) ? SQLITE_UPDA
298c0 54 45 20 3a 20 53 51 4c 49 54 45 5f 49 4e 53 45  TE : SQLITE_INSE
298d0 52 54 2c 0a 20 20 20 20 20 20 20 20 20 20 20 7a  RT,.           z
298e0 44 62 2c 20 70 54 61 62 2d 3e 7a 4e 61 6d 65 2c  Db, pTab->zName,
298f0 20 78 2e 6e 4b 65 79 29 3b 0a 20 20 7d 0a 20 20   x.nKey);.  }.  
29900 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
29910 6f 64 65 3a 20 44 65 6c 65 74 65 20 50 31 20 50  ode: Delete P1 P
29920 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a  2 P3 P4 P5.**.**
29930 20 44 65 6c 65 74 65 20 74 68 65 20 72 65 63 6f   Delete the reco
29940 72 64 20 61 74 20 77 68 69 63 68 20 74 68 65 20  rd at which the 
29950 50 31 20 63 75 72 73 6f 72 20 69 73 20 63 75 72  P1 cursor is cur
29960 72 65 6e 74 6c 79 20 70 6f 69 6e 74 69 6e 67 2e  rently pointing.
29970 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 4f 50  .**.** If the OP
29980 46 4c 41 47 5f 53 41 56 45 50 4f 53 49 54 49 4f  FLAG_SAVEPOSITIO
29990 4e 20 62 69 74 20 6f 66 20 74 68 65 20 50 35 20  N bit of the P5 
299a0 70 61 72 61 6d 65 74 65 72 20 69 73 20 73 65 74  parameter is set
299b0 2c 20 74 68 65 6e 0a 2a 2a 20 74 68 65 20 63 75  , then.** the cu
299c0 72 73 6f 72 20 77 69 6c 6c 20 62 65 20 6c 65 66  rsor will be lef
299d0 74 20 70 6f 69 6e 74 69 6e 67 20 61 74 20 20 65  t pointing at  e
299e0 69 74 68 65 72 20 74 68 65 20 6e 65 78 74 20 6f  ither the next o
299f0 72 20 74 68 65 20 70 72 65 76 69 6f 75 73 0a 2a  r the previous.*
29a00 2a 20 72 65 63 6f 72 64 20 69 6e 20 74 68 65 20  * record in the 
29a10 74 61 62 6c 65 2e 20 49 66 20 69 74 20 69 73 20  table. If it is 
29a20 6c 65 66 74 20 70 6f 69 6e 74 69 6e 67 20 61 74  left pointing at
29a30 20 74 68 65 20 6e 65 78 74 20 72 65 63 6f 72 64   the next record
29a40 2c 20 74 68 65 6e 0a 2a 2a 20 74 68 65 20 6e 65  , then.** the ne
29a50 78 74 20 4e 65 78 74 20 69 6e 73 74 72 75 63 74  xt Next instruct
29a60 69 6f 6e 20 77 69 6c 6c 20 62 65 20 61 20 6e 6f  ion will be a no
29a70 2d 6f 70 2e 20 41 73 20 61 20 72 65 73 75 6c 74  -op. As a result
29a80 2c 20 69 6e 20 74 68 69 73 20 63 61 73 65 0a 2a  , in this case.*
29a90 2a 20 69 74 20 69 73 20 6f 6b 20 74 6f 20 64 65  * it is ok to de
29aa0 6c 65 74 65 20 61 20 72 65 63 6f 72 64 20 66 72  lete a record fr
29ab0 6f 6d 20 77 69 74 68 69 6e 20 61 20 4e 65 78 74  om within a Next
29ac0 20 6c 6f 6f 70 2e 20 49 66 20 0a 2a 2a 20 4f 50   loop. If .** OP
29ad0 46 4c 41 47 5f 53 41 56 45 50 4f 53 49 54 49 4f  FLAG_SAVEPOSITIO
29ae0 4e 20 62 69 74 20 6f 66 20 50 35 20 69 73 20 63  N bit of P5 is c
29af0 6c 65 61 72 2c 20 74 68 65 6e 20 74 68 65 20 63  lear, then the c
29b00 75 72 73 6f 72 20 77 69 6c 6c 20 62 65 0a 2a 2a  ursor will be.**
29b10 20 6c 65 66 74 20 69 6e 20 61 6e 20 75 6e 64 65   left in an unde
29b20 66 69 6e 65 64 20 73 74 61 74 65 2e 0a 2a 2a 0a  fined state..**.
29b30 2a 2a 20 49 66 20 74 68 65 20 4f 50 46 4c 41 47  ** If the OPFLAG
29b40 5f 41 55 58 44 45 4c 45 54 45 20 62 69 74 20 69  _AUXDELETE bit i
29b50 73 20 73 65 74 20 6f 6e 20 50 35 2c 20 74 68 61  s set on P5, tha
29b60 74 20 69 6e 64 69 63 61 74 65 73 20 74 68 61 74  t indicates that
29b70 20 74 68 69 73 0a 2a 2a 20 64 65 6c 65 74 65 20   this.** delete 
29b80 6f 6e 65 20 6f 66 20 73 65 76 65 72 61 6c 20 61  one of several a
29b90 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 64  ssociated with d
29ba0 65 6c 65 74 69 6e 67 20 61 20 74 61 62 6c 65 20  eleting a table 
29bb0 72 6f 77 20 61 6e 64 20 61 6c 6c 20 69 74 73 0a  row and all its.
29bc0 2a 2a 20 61 73 73 6f 63 69 61 74 65 64 20 69 6e  ** associated in
29bd0 64 65 78 20 65 6e 74 72 69 65 73 2e 20 20 45 78  dex entries.  Ex
29be0 61 63 74 6c 79 20 6f 6e 65 20 6f 66 20 74 68 6f  actly one of tho
29bf0 73 65 20 64 65 6c 65 74 65 73 20 69 73 20 74 68  se deletes is th
29c00 65 20 22 70 72 69 6d 61 72 79 22 0a 2a 2a 20 64  e "primary".** d
29c10 65 6c 65 74 65 2e 20 20 54 68 65 20 6f 74 68 65  elete.  The othe
29c20 72 73 20 61 72 65 20 61 6c 6c 20 6f 6e 20 4f 50  rs are all on OP
29c30 46 4c 41 47 5f 46 4f 52 44 45 4c 45 54 45 20 63  FLAG_FORDELETE c
29c40 75 72 73 6f 72 73 20 6f 72 20 65 6c 73 65 20 61  ursors or else a
29c50 72 65 0a 2a 2a 20 6d 61 72 6b 65 64 20 77 69 74  re.** marked wit
29c60 68 20 74 68 65 20 41 55 58 44 45 4c 45 54 45 20  h the AUXDELETE 
29c70 66 6c 61 67 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74  flag..**.** If t
29c80 68 65 20 4f 50 46 4c 41 47 5f 4e 43 48 41 4e 47  he OPFLAG_NCHANG
29c90 45 20 66 6c 61 67 20 6f 66 20 50 32 20 28 4e 42  E flag of P2 (NB
29ca0 3a 20 50 32 20 6e 6f 74 20 50 35 29 20 69 73 20  : P2 not P5) is 
29cb0 73 65 74 2c 20 74 68 65 6e 20 74 68 65 20 72 6f  set, then the ro
29cc0 77 0a 2a 2a 20 63 68 61 6e 67 65 20 63 6f 75 6e  w.** change coun
29cd0 74 20 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64  t is incremented
29ce0 20 28 6f 74 68 65 72 77 69 73 65 20 6e 6f 74 29   (otherwise not)
29cf0 2e 0a 2a 2a 0a 2a 2a 20 50 31 20 6d 75 73 74 20  ..**.** P1 must 
29d00 6e 6f 74 20 62 65 20 70 73 65 75 64 6f 2d 74 61  not be pseudo-ta
29d10 62 6c 65 2e 20 20 49 74 20 68 61 73 20 74 6f 20  ble.  It has to 
29d20 62 65 20 61 20 72 65 61 6c 20 74 61 62 6c 65 20  be a real table 
29d30 77 69 74 68 0a 2a 2a 20 6d 75 6c 74 69 70 6c 65  with.** multiple
29d40 20 72 6f 77 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20   rows..**.** If 
29d50 50 34 20 69 73 20 6e 6f 74 20 4e 55 4c 4c 20 74  P4 is not NULL t
29d60 68 65 6e 20 69 74 20 70 6f 69 6e 74 73 20 74 6f  hen it points to
29d70 20 61 20 54 61 62 6c 65 20 6f 62 6a 65 63 74 2e   a Table object.
29d80 20 49 6e 20 74 68 69 73 20 63 61 73 65 20 65 69   In this case ei
29d90 74 68 65 72 20 0a 2a 2a 20 74 68 65 20 75 70 64  ther .** the upd
29da0 61 74 65 20 6f 72 20 70 72 65 2d 75 70 64 61 74  ate or pre-updat
29db0 65 20 68 6f 6f 6b 2c 20 6f 72 20 62 6f 74 68 2c  e hook, or both,
29dc0 20 6d 61 79 20 62 65 20 69 6e 76 6f 6b 65 64 2e   may be invoked.
29dd0 20 54 68 65 20 50 31 20 63 75 72 73 6f 72 20 6d   The P1 cursor m
29de0 75 73 74 0a 2a 2a 20 68 61 76 65 20 62 65 65 6e  ust.** have been
29df0 20 70 6f 73 69 74 69 6f 6e 65 64 20 75 73 69 6e   positioned usin
29e00 67 20 4f 50 5f 4e 6f 74 46 6f 75 6e 64 20 70 72  g OP_NotFound pr
29e10 69 6f 72 20 74 6f 20 69 6e 76 6f 6b 69 6e 67 20  ior to invoking 
29e20 74 68 69 73 20 6f 70 63 6f 64 65 20 69 6e 20 0a  this opcode in .
29e30 2a 2a 20 74 68 69 73 20 63 61 73 65 2e 20 53 70  ** this case. Sp
29e40 65 63 69 66 69 63 61 6c 6c 79 2c 20 69 66 20 6f  ecifically, if o
29e50 6e 65 20 69 73 20 63 6f 6e 66 69 67 75 72 65 64  ne is configured
29e60 2c 20 74 68 65 20 70 72 65 2d 75 70 64 61 74 65  , the pre-update
29e70 20 68 6f 6f 6b 20 69 73 20 0a 2a 2a 20 69 6e 76   hook is .** inv
29e80 6f 6b 65 64 20 69 66 20 50 34 20 69 73 20 6e 6f  oked if P4 is no
29e90 74 20 4e 55 4c 4c 2e 20 54 68 65 20 75 70 64 61  t NULL. The upda
29ea0 74 65 2d 68 6f 6f 6b 20 69 73 20 69 6e 76 6f 6b  te-hook is invok
29eb0 65 64 20 69 66 20 6f 6e 65 20 69 73 20 63 6f 6e  ed if one is con
29ec0 66 69 67 75 72 65 64 2c 20 0a 2a 2a 20 50 34 20  figured, .** P4 
29ed0 69 73 20 6e 6f 74 20 4e 55 4c 4c 2c 20 61 6e 64  is not NULL, and
29ee0 20 74 68 65 20 4f 50 46 4c 41 47 5f 4e 43 48 41   the OPFLAG_NCHA
29ef0 4e 47 45 20 66 6c 61 67 20 69 73 20 73 65 74 20  NGE flag is set 
29f00 69 6e 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  in P2..**.** If 
29f10 74 68 65 20 4f 50 46 4c 41 47 5f 49 53 55 50 44  the OPFLAG_ISUPD
29f20 41 54 45 20 66 6c 61 67 20 69 73 20 73 65 74 20  ATE flag is set 
29f30 69 6e 20 50 32 2c 20 74 68 65 6e 20 50 33 20 63  in P2, then P3 c
29f40 6f 6e 74 61 69 6e 73 20 74 68 65 20 61 64 64 72  ontains the addr
29f50 65 73 73 0a 2a 2a 20 6f 66 20 74 68 65 20 6d 65  ess.** of the me
29f60 6d 6f 72 79 20 63 65 6c 6c 20 74 68 61 74 20 63  mory cell that c
29f70 6f 6e 74 61 69 6e 73 20 74 68 65 20 76 61 6c 75  ontains the valu
29f80 65 20 74 68 61 74 20 74 68 65 20 72 6f 77 69 64  e that the rowid
29f90 20 6f 66 20 74 68 65 20 72 6f 77 20 77 69 6c 6c   of the row will
29fa0 0a 2a 2a 20 62 65 20 73 65 74 20 74 6f 20 62 79  .** be set to by
29fb0 20 74 68 65 20 75 70 64 61 74 65 2e 0a 2a 2f 0a   the update..*/.
29fc0 63 61 73 65 20 4f 50 5f 44 65 6c 65 74 65 3a 20  case OP_Delete: 
29fd0 7b 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a  {.  VdbeCursor *
29fe0 70 43 3b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72  pC;.  const char
29ff0 20 2a 7a 44 62 3b 0a 20 20 54 61 62 6c 65 20 2a   *zDb;.  Table *
2a000 70 54 61 62 3b 0a 20 20 69 6e 74 20 6f 70 66 6c  pTab;.  int opfl
2a010 61 67 73 3b 0a 0a 20 20 6f 70 66 6c 61 67 73 20  ags;..  opflags 
2a020 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 61 73 73  = pOp->p2;.  ass
2a030 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20  ert( pOp->p1>=0 
2a040 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43  && pOp->p1<p->nC
2a050 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20  ursor );.  pC = 
2a060 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31  p->apCsr[pOp->p1
2a070 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21  ];.  assert( pC!
2a080 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
2a090 70 43 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43 55  pC->eCurType==CU
2a0a0 52 54 59 50 45 5f 42 54 52 45 45 20 29 3b 0a 20  RTYPE_BTREE );. 
2a0b0 20 61 73 73 65 72 74 28 20 70 43 2d 3e 75 63 2e   assert( pC->uc.
2a0c0 70 43 75 72 73 6f 72 21 3d 30 20 29 3b 0a 20 20  pCursor!=0 );.  
2a0d0 61 73 73 65 72 74 28 20 70 43 2d 3e 64 65 66 65  assert( pC->defe
2a0e0 72 72 65 64 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b  rredMoveto==0 );
2a0f0 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e  .  sqlite3VdbeIn
2a100 63 72 57 72 69 74 65 43 6f 75 6e 74 65 72 28 70  crWriteCounter(p
2a110 2c 20 70 43 29 3b 0a 0a 23 69 66 64 65 66 20 53  , pC);..#ifdef S
2a120 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 69 66  QLITE_DEBUG.  if
2a130 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50  ( pOp->p4type==P
2a140 34 5f 54 41 42 4c 45 20 26 26 20 48 61 73 52 6f  4_TABLE && HasRo
2a150 77 69 64 28 70 4f 70 2d 3e 70 34 2e 70 54 61 62  wid(pOp->p4.pTab
2a160 29 20 26 26 20 70 4f 70 2d 3e 70 35 3d 3d 30 20  ) && pOp->p5==0 
2a170 29 7b 0a 20 20 20 20 2f 2a 20 49 66 20 70 35 20  ){.    /* If p5 
2a180 69 73 20 7a 65 72 6f 2c 20 74 68 65 20 73 65 65  is zero, the see
2a190 6b 20 6f 70 65 72 61 74 69 6f 6e 20 74 68 61 74  k operation that
2a1a0 20 70 6f 73 69 74 69 6f 6e 65 64 20 74 68 65 20   positioned the 
2a1b0 63 75 72 73 6f 72 20 70 72 69 6f 72 20 74 6f 0a  cursor prior to.
2a1c0 20 20 20 20 2a 2a 20 4f 50 5f 44 65 6c 65 74 65      ** OP_Delete
2a1d0 20 77 69 6c 6c 20 68 61 76 65 20 61 6c 73 6f 20   will have also 
2a1e0 73 65 74 20 74 68 65 20 70 43 2d 3e 6d 6f 76 65  set the pC->move
2a1f0 74 6f 54 61 72 67 65 74 20 66 69 65 6c 64 20 74  toTarget field t
2a200 6f 20 74 68 65 20 72 6f 77 69 64 20 6f 66 0a 20  o the rowid of. 
2a210 20 20 20 2a 2a 20 74 68 65 20 72 6f 77 20 74 68     ** the row th
2a220 61 74 20 69 73 20 62 65 69 6e 67 20 64 65 6c 65  at is being dele
2a230 74 65 64 20 2a 2f 0a 20 20 20 20 69 36 34 20 69  ted */.    i64 i
2a240 4b 65 79 20 3d 20 73 71 6c 69 74 65 33 42 74 72  Key = sqlite3Btr
2a250 65 65 49 6e 74 65 67 65 72 4b 65 79 28 70 43 2d  eeIntegerKey(pC-
2a260 3e 75 63 2e 70 43 75 72 73 6f 72 29 3b 0a 20 20  >uc.pCursor);.  
2a270 20 20 61 73 73 65 72 74 28 20 43 4f 52 52 55 50    assert( CORRUP
2a280 54 5f 44 42 20 7c 7c 20 70 43 2d 3e 6d 6f 76 65  T_DB || pC->move
2a290 74 6f 54 61 72 67 65 74 3d 3d 69 4b 65 79 20 29  toTarget==iKey )
2a2a0 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 20 20  ;.  }.#endif..  
2a2b0 2f 2a 20 49 66 20 74 68 65 20 75 70 64 61 74 65  /* If the update
2a2c0 2d 68 6f 6f 6b 20 6f 72 20 70 72 65 2d 75 70 64  -hook or pre-upd
2a2d0 61 74 65 2d 68 6f 6f 6b 20 77 69 6c 6c 20 62 65  ate-hook will be
2a2e0 20 69 6e 76 6f 6b 65 64 2c 20 73 65 74 20 7a 44   invoked, set zD
2a2f0 62 20 74 6f 0a 20 20 2a 2a 20 74 68 65 20 6e 61  b to.  ** the na
2a300 6d 65 20 6f 66 20 74 68 65 20 64 62 20 74 6f 20  me of the db to 
2a310 70 61 73 73 20 61 73 20 74 6f 20 69 74 2e 20 41  pass as to it. A
2a320 6c 73 6f 20 73 65 74 20 6c 6f 63 61 6c 20 70 54  lso set local pT
2a330 61 62 20 74 6f 20 61 20 63 6f 70 79 0a 20 20 2a  ab to a copy.  *
2a340 2a 20 6f 66 20 70 34 2e 70 54 61 62 2e 20 46 69  * of p4.pTab. Fi
2a350 6e 61 6c 6c 79 2c 20 69 66 20 70 35 20 69 73 20  nally, if p5 is 
2a360 74 72 75 65 2c 20 69 6e 64 69 63 61 74 69 6e 67  true, indicating
2a370 20 74 68 61 74 20 74 68 69 73 20 63 75 72 73 6f   that this curso
2a380 72 20 77 61 73 0a 20 20 2a 2a 20 6c 61 73 74 20  r was.  ** last 
2a390 6d 6f 76 65 64 20 77 69 74 68 20 4f 50 5f 4e 65  moved with OP_Ne
2a3a0 78 74 20 6f 72 20 4f 50 5f 50 72 65 76 2c 20 6e  xt or OP_Prev, n
2a3b0 6f 74 20 53 65 65 6b 20 6f 72 20 4e 6f 74 46 6f  ot Seek or NotFo
2a3c0 75 6e 64 2c 20 73 65 74 20 0a 20 20 2a 2a 20 56  und, set .  ** V
2a3d0 64 62 65 43 75 72 73 6f 72 2e 6d 6f 76 65 74 6f  dbeCursor.moveto
2a3e0 54 61 72 67 65 74 20 74 6f 20 74 68 65 20 63 75  Target to the cu
2a3f0 72 72 65 6e 74 20 72 6f 77 69 64 2e 20 20 2a 2f  rrent rowid.  */
2a400 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 34 74 79  .  if( pOp->p4ty
2a410 70 65 3d 3d 50 34 5f 54 41 42 4c 45 20 26 26 20  pe==P4_TABLE && 
2a420 48 41 53 5f 55 50 44 41 54 45 5f 48 4f 4f 4b 28  HAS_UPDATE_HOOK(
2a430 64 62 29 20 29 7b 0a 20 20 20 20 61 73 73 65 72  db) ){.    asser
2a440 74 28 20 70 43 2d 3e 69 44 62 3e 3d 30 20 29 3b  t( pC->iDb>=0 );
2a450 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70  .    assert( pOp
2a460 2d 3e 70 34 2e 70 54 61 62 21 3d 30 20 29 3b 0a  ->p4.pTab!=0 );.
2a470 20 20 20 20 7a 44 62 20 3d 20 64 62 2d 3e 61 44      zDb = db->aD
2a480 62 5b 70 43 2d 3e 69 44 62 5d 2e 7a 44 62 53 4e  b[pC->iDb].zDbSN
2a490 61 6d 65 3b 0a 20 20 20 20 70 54 61 62 20 3d 20  ame;.    pTab = 
2a4a0 70 4f 70 2d 3e 70 34 2e 70 54 61 62 3b 0a 20 20  pOp->p4.pTab;.  
2a4b0 20 20 69 66 28 20 28 70 4f 70 2d 3e 70 35 20 26    if( (pOp->p5 &
2a4c0 20 4f 50 46 4c 41 47 5f 53 41 56 45 50 4f 53 49   OPFLAG_SAVEPOSI
2a4d0 54 49 4f 4e 29 21 3d 30 20 26 26 20 70 43 2d 3e  TION)!=0 && pC->
2a4e0 69 73 54 61 62 6c 65 20 29 7b 0a 20 20 20 20 20  isTable ){.     
2a4f0 20 70 43 2d 3e 6d 6f 76 65 74 6f 54 61 72 67 65   pC->movetoTarge
2a500 74 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  t = sqlite3Btree
2a510 49 6e 74 65 67 65 72 4b 65 79 28 70 43 2d 3e 75  IntegerKey(pC->u
2a520 63 2e 70 43 75 72 73 6f 72 29 3b 0a 20 20 20 20  c.pCursor);.    
2a530 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 7a  }.  }else{.    z
2a540 44 62 20 3d 20 30 3b 20 20 20 2f 2a 20 4e 6f 74  Db = 0;   /* Not
2a550 20 6e 65 65 64 65 64 2e 20 20 53 69 6c 65 6e 63   needed.  Silenc
2a560 65 20 61 20 63 6f 6d 70 69 6c 65 72 20 77 61 72  e a compiler war
2a570 6e 69 6e 67 2e 20 2a 2f 0a 20 20 20 20 70 54 61  ning. */.    pTa
2a580 62 20 3d 20 30 3b 20 20 2f 2a 20 4e 6f 74 20 6e  b = 0;  /* Not n
2a590 65 65 64 65 64 2e 20 20 53 69 6c 65 6e 63 65 20  eeded.  Silence 
2a5a0 61 20 63 6f 6d 70 69 6c 65 72 20 77 61 72 6e 69  a compiler warni
2a5b0 6e 67 2e 20 2a 2f 0a 20 20 7d 0a 0a 23 69 66 64  ng. */.  }..#ifd
2a5c0 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ef SQLITE_ENABLE
2a5d0 5f 50 52 45 55 50 44 41 54 45 5f 48 4f 4f 4b 0a  _PREUPDATE_HOOK.
2a5e0 20 20 2f 2a 20 49 6e 76 6f 6b 65 20 74 68 65 20    /* Invoke the 
2a5f0 70 72 65 2d 75 70 64 61 74 65 2d 68 6f 6f 6b 20  pre-update-hook 
2a600 69 66 20 72 65 71 75 69 72 65 64 2e 20 2a 2f 0a  if required. */.
2a610 20 20 69 66 28 20 64 62 2d 3e 78 50 72 65 55 70    if( db->xPreUp
2a620 64 61 74 65 43 61 6c 6c 62 61 63 6b 20 26 26 20  dateCallback && 
2a630 70 4f 70 2d 3e 70 34 2e 70 54 61 62 20 29 7b 0a  pOp->p4.pTab ){.
2a640 20 20 20 20 61 73 73 65 72 74 28 20 21 28 6f 70      assert( !(op
2a650 66 6c 61 67 73 20 26 20 4f 50 46 4c 41 47 5f 49  flags & OPFLAG_I
2a660 53 55 50 44 41 54 45 29 20 0a 20 20 20 20 20 20  SUPDATE) .      
2a670 20 20 20 7c 7c 20 48 61 73 52 6f 77 69 64 28 70     || HasRowid(p
2a680 54 61 62 29 3d 3d 30 20 0a 20 20 20 20 20 20 20  Tab)==0 .       
2a690 20 20 7c 7c 20 28 61 4d 65 6d 5b 70 4f 70 2d 3e    || (aMem[pOp->
2a6a0 70 33 5d 2e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  p3].flags & MEM_
2a6b0 49 6e 74 29 20 0a 20 20 20 20 29 3b 0a 20 20 20  Int) .    );.   
2a6c0 20 73 71 6c 69 74 65 33 56 64 62 65 50 72 65 55   sqlite3VdbePreU
2a6d0 70 64 61 74 65 48 6f 6f 6b 28 70 2c 20 70 43 2c  pdateHook(p, pC,
2a6e0 0a 20 20 20 20 20 20 20 20 28 6f 70 66 6c 61 67  .        (opflag
2a6f0 73 20 26 20 4f 50 46 4c 41 47 5f 49 53 55 50 44  s & OPFLAG_ISUPD
2a700 41 54 45 29 20 3f 20 53 51 4c 49 54 45 5f 55 50  ATE) ? SQLITE_UP
2a710 44 41 54 45 20 3a 20 53 51 4c 49 54 45 5f 44 45  DATE : SQLITE_DE
2a720 4c 45 54 45 2c 20 0a 20 20 20 20 20 20 20 20 7a  LETE, .        z
2a730 44 62 2c 20 70 54 61 62 2c 20 70 43 2d 3e 6d 6f  Db, pTab, pC->mo
2a740 76 65 74 6f 54 61 72 67 65 74 2c 0a 20 20 20 20  vetoTarget,.    
2a750 20 20 20 20 70 4f 70 2d 3e 70 33 0a 20 20 20 20      pOp->p3.    
2a760 29 3b 0a 20 20 7d 0a 20 20 69 66 28 20 6f 70 66  );.  }.  if( opf
2a770 6c 61 67 73 20 26 20 4f 50 46 4c 41 47 5f 49 53  lags & OPFLAG_IS
2a780 4e 4f 4f 50 20 29 20 62 72 65 61 6b 3b 0a 23 65  NOOP ) break;.#e
2a790 6e 64 69 66 0a 20 0a 20 20 2f 2a 20 4f 6e 6c 79  ndif. .  /* Only
2a7a0 20 66 6c 61 67 73 20 74 68 61 74 20 63 61 6e 20   flags that can 
2a7b0 62 65 20 73 65 74 20 61 72 65 20 53 41 56 45 50  be set are SAVEP
2a7c0 4f 49 53 54 49 4f 4e 20 61 6e 64 20 41 55 58 44  OISTION and AUXD
2a7d0 45 4c 45 54 45 20 2a 2f 20 0a 20 20 61 73 73 65  ELETE */ .  asse
2a7e0 72 74 28 20 28 70 4f 70 2d 3e 70 35 20 26 20 7e  rt( (pOp->p5 & ~
2a7f0 28 4f 50 46 4c 41 47 5f 53 41 56 45 50 4f 53 49  (OPFLAG_SAVEPOSI
2a800 54 49 4f 4e 7c 4f 50 46 4c 41 47 5f 41 55 58 44  TION|OPFLAG_AUXD
2a810 45 4c 45 54 45 29 29 3d 3d 30 20 29 3b 0a 20 20  ELETE))==0 );.  
2a820 61 73 73 65 72 74 28 20 4f 50 46 4c 41 47 5f 53  assert( OPFLAG_S
2a830 41 56 45 50 4f 53 49 54 49 4f 4e 3d 3d 42 54 52  AVEPOSITION==BTR
2a840 45 45 5f 53 41 56 45 50 4f 53 49 54 49 4f 4e 20  EE_SAVEPOSITION 
2a850 29 3b 0a 20 20 61 73 73 65 72 74 28 20 4f 50 46  );.  assert( OPF
2a860 4c 41 47 5f 41 55 58 44 45 4c 45 54 45 3d 3d 42  LAG_AUXDELETE==B
2a870 54 52 45 45 5f 41 55 58 44 45 4c 45 54 45 20 29  TREE_AUXDELETE )
2a880 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  ;..#ifdef SQLITE
2a890 5f 44 45 42 55 47 0a 20 20 69 66 28 20 70 2d 3e  _DEBUG.  if( p->
2a8a0 70 46 72 61 6d 65 3d 3d 30 20 29 7b 0a 20 20 20  pFrame==0 ){.   
2a8b0 20 69 66 28 20 70 43 2d 3e 69 73 45 70 68 65 6d   if( pC->isEphem
2a8c0 65 72 61 6c 3d 3d 30 0a 20 20 20 20 20 20 20 20  eral==0.        
2a8d0 26 26 20 28 70 4f 70 2d 3e 70 35 20 26 20 4f 50  && (pOp->p5 & OP
2a8e0 46 4c 41 47 5f 41 55 58 44 45 4c 45 54 45 29 3d  FLAG_AUXDELETE)=
2a8f0 3d 30 0a 20 20 20 20 20 20 20 20 26 26 20 28 70  =0.        && (p
2a900 43 2d 3e 77 72 46 6c 61 67 20 26 20 4f 50 46 4c  C->wrFlag & OPFL
2a910 41 47 5f 46 4f 52 44 45 4c 45 54 45 29 3d 3d 30  AG_FORDELETE)==0
2a920 0a 20 20 20 20 20 20 29 7b 0a 20 20 20 20 20 20  .      ){.      
2a930 6e 45 78 74 72 61 44 65 6c 65 74 65 2b 2b 3b 0a  nExtraDelete++;.
2a940 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 70 4f      }.    if( pO
2a950 70 2d 3e 70 32 20 26 20 4f 50 46 4c 41 47 5f 4e  p->p2 & OPFLAG_N
2a960 43 48 41 4e 47 45 20 29 7b 0a 20 20 20 20 20 20  CHANGE ){.      
2a970 6e 45 78 74 72 61 44 65 6c 65 74 65 2d 2d 3b 0a  nExtraDelete--;.
2a980 20 20 20 20 7d 0a 20 20 7d 0a 23 65 6e 64 69 66      }.  }.#endif
2a990 0a 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  ..  rc = sqlite3
2a9a0 42 74 72 65 65 44 65 6c 65 74 65 28 70 43 2d 3e  BtreeDelete(pC->
2a9b0 75 63 2e 70 43 75 72 73 6f 72 2c 20 70 4f 70 2d  uc.pCursor, pOp-
2a9c0 3e 70 35 29 3b 0a 20 20 70 43 2d 3e 63 61 63 68  >p5);.  pC->cach
2a9d0 65 53 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f  eStatus = CACHE_
2a9e0 53 54 41 4c 45 3b 0a 20 20 70 43 2d 3e 73 65 65  STALE;.  pC->see
2a9f0 6b 52 65 73 75 6c 74 20 3d 20 30 3b 0a 20 20 69  kResult = 0;.  i
2aa00 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f  f( rc ) goto abo
2aa10 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
2aa20 0a 0a 20 20 2f 2a 20 49 6e 76 6f 6b 65 20 74 68  ..  /* Invoke th
2aa30 65 20 75 70 64 61 74 65 2d 68 6f 6f 6b 20 69 66  e update-hook if
2aa40 20 72 65 71 75 69 72 65 64 2e 20 2a 2f 0a 20 20   required. */.  
2aa50 69 66 28 20 6f 70 66 6c 61 67 73 20 26 20 4f 50  if( opflags & OP
2aa60 46 4c 41 47 5f 4e 43 48 41 4e 47 45 20 29 7b 0a  FLAG_NCHANGE ){.
2aa70 20 20 20 20 70 2d 3e 6e 43 68 61 6e 67 65 2b 2b      p->nChange++
2aa80 3b 0a 20 20 20 20 69 66 28 20 64 62 2d 3e 78 55  ;.    if( db->xU
2aa90 70 64 61 74 65 43 61 6c 6c 62 61 63 6b 20 26 26  pdateCallback &&
2aaa0 20 48 61 73 52 6f 77 69 64 28 70 54 61 62 29 20   HasRowid(pTab) 
2aab0 29 7b 0a 20 20 20 20 20 20 64 62 2d 3e 78 55 70  ){.      db->xUp
2aac0 64 61 74 65 43 61 6c 6c 62 61 63 6b 28 64 62 2d  dateCallback(db-
2aad0 3e 70 55 70 64 61 74 65 41 72 67 2c 20 53 51 4c  >pUpdateArg, SQL
2aae0 49 54 45 5f 44 45 4c 45 54 45 2c 20 7a 44 62 2c  ITE_DELETE, zDb,
2aaf0 20 70 54 61 62 2d 3e 7a 4e 61 6d 65 2c 0a 20 20   pTab->zName,.  
2ab00 20 20 20 20 20 20 20 20 70 43 2d 3e 6d 6f 76 65          pC->move
2ab10 74 6f 54 61 72 67 65 74 29 3b 0a 20 20 20 20 20  toTarget);.     
2ab20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69 44 62   assert( pC->iDb
2ab30 3e 3d 30 20 29 3b 0a 20 20 20 20 7d 0a 20 20 7d  >=0 );.    }.  }
2ab40 0a 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 2f 2a 20  ..  break;.}./* 
2ab50 4f 70 63 6f 64 65 3a 20 52 65 73 65 74 43 6f 75  Opcode: ResetCou
2ab60 6e 74 20 2a 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a  nt * * * * *.**.
2ab70 2a 2a 20 54 68 65 20 76 61 6c 75 65 20 6f 66 20  ** The value of 
2ab80 74 68 65 20 63 68 61 6e 67 65 20 63 6f 75 6e 74  the change count
2ab90 65 72 20 69 73 20 63 6f 70 69 65 64 20 74 6f 20  er is copied to 
2aba0 74 68 65 20 64 61 74 61 62 61 73 65 20 68 61 6e  the database han
2abb0 64 6c 65 0a 2a 2a 20 63 68 61 6e 67 65 20 63 6f  dle.** change co
2abc0 75 6e 74 65 72 20 28 72 65 74 75 72 6e 65 64 20  unter (returned 
2abd0 62 79 20 73 75 62 73 65 71 75 65 6e 74 20 63 61  by subsequent ca
2abe0 6c 6c 73 20 74 6f 20 73 71 6c 69 74 65 33 5f 63  lls to sqlite3_c
2abf0 68 61 6e 67 65 73 28 29 29 2e 0a 2a 2a 20 54 68  hanges())..** Th
2ac00 65 6e 20 74 68 65 20 56 4d 73 20 69 6e 74 65 72  en the VMs inter
2ac10 6e 61 6c 20 63 68 61 6e 67 65 20 63 6f 75 6e 74  nal change count
2ac20 65 72 20 72 65 73 65 74 73 20 74 6f 20 30 2e 0a  er resets to 0..
2ac30 2a 2a 20 54 68 69 73 20 69 73 20 75 73 65 64 20  ** This is used 
2ac40 62 79 20 74 72 69 67 67 65 72 20 70 72 6f 67 72  by trigger progr
2ac50 61 6d 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ams..*/.case OP_
2ac60 52 65 73 65 74 43 6f 75 6e 74 3a 20 7b 0a 20 20  ResetCount: {.  
2ac70 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 43 68  sqlite3VdbeSetCh
2ac80 61 6e 67 65 73 28 64 62 2c 20 70 2d 3e 6e 43 68  anges(db, p->nCh
2ac90 61 6e 67 65 29 3b 0a 20 20 70 2d 3e 6e 43 68 61  ange);.  p->nCha
2aca0 6e 67 65 20 3d 20 30 3b 0a 20 20 62 72 65 61 6b  nge = 0;.  break
2acb0 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
2acc0 53 6f 72 74 65 72 43 6f 6d 70 61 72 65 20 50 31  SorterCompare P1
2acd0 20 50 32 20 50 33 20 50 34 0a 2a 2a 20 53 79 6e   P2 P3 P4.** Syn
2ace0 6f 70 73 69 73 3a 20 69 66 20 6b 65 79 28 50 31  opsis: if key(P1
2acf0 29 21 3d 74 72 69 6d 28 72 5b 50 33 5d 2c 50 34  )!=trim(r[P3],P4
2ad00 29 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20  ) goto P2.**.** 
2ad10 50 31 20 69 73 20 61 20 73 6f 72 74 65 72 20 63  P1 is a sorter c
2ad20 75 72 73 6f 72 2e 20 54 68 69 73 20 69 6e 73 74  ursor. This inst
2ad30 72 75 63 74 69 6f 6e 20 63 6f 6d 70 61 72 65 73  ruction compares
2ad40 20 61 20 70 72 65 66 69 78 20 6f 66 20 74 68 65   a prefix of the
2ad50 0a 2a 2a 20 72 65 63 6f 72 64 20 62 6c 6f 62 20  .** record blob 
2ad60 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 20 61  in register P3 a
2ad70 67 61 69 6e 73 74 20 61 20 70 72 65 66 69 78 20  gainst a prefix 
2ad80 6f 66 20 74 68 65 20 65 6e 74 72 79 20 74 68 61  of the entry tha
2ad90 74 20 0a 2a 2a 20 74 68 65 20 73 6f 72 74 65 72  t .** the sorter
2ada0 20 63 75 72 73 6f 72 20 63 75 72 72 65 6e 74 6c   cursor currentl
2adb0 79 20 70 6f 69 6e 74 73 20 74 6f 2e 20 20 4f 6e  y points to.  On
2adc0 6c 79 20 74 68 65 20 66 69 72 73 74 20 50 34 20  ly the first P4 
2add0 66 69 65 6c 64 73 0a 2a 2a 20 6f 66 20 72 5b 50  fields.** of r[P
2ade0 33 5d 20 61 6e 64 20 74 68 65 20 73 6f 72 74 65  3] and the sorte
2adf0 72 20 72 65 63 6f 72 64 20 61 72 65 20 63 6f 6d  r record are com
2ae00 70 61 72 65 64 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  pared..**.** If 
2ae10 65 69 74 68 65 72 20 50 33 20 6f 72 20 74 68 65  either P3 or the
2ae20 20 73 6f 72 74 65 72 20 63 6f 6e 74 61 69 6e 73   sorter contains
2ae30 20 61 20 4e 55 4c 4c 20 69 6e 20 6f 6e 65 20 6f   a NULL in one o
2ae40 66 20 74 68 65 69 72 20 73 69 67 6e 69 66 69 63  f their signific
2ae50 61 6e 74 0a 2a 2a 20 66 69 65 6c 64 73 20 28 6e  ant.** fields (n
2ae60 6f 74 20 63 6f 75 6e 74 69 6e 67 20 74 68 65 20  ot counting the 
2ae70 50 34 20 66 69 65 6c 64 73 20 61 74 20 74 68 65  P4 fields at the
2ae80 20 65 6e 64 20 77 68 69 63 68 20 61 72 65 20 69   end which are i
2ae90 67 6e 6f 72 65 64 29 20 74 68 65 6e 0a 2a 2a 20  gnored) then.** 
2aea0 74 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e 20 69  the comparison i
2aeb0 73 20 61 73 73 75 6d 65 64 20 74 6f 20 62 65 20  s assumed to be 
2aec0 65 71 75 61 6c 2e 0a 2a 2a 0a 2a 2a 20 46 61 6c  equal..**.** Fal
2aed0 6c 20 74 68 72 6f 75 67 68 20 74 6f 20 6e 65 78  l through to nex
2aee0 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 69 66  t instruction if
2aef0 20 74 68 65 20 74 77 6f 20 72 65 63 6f 72 64 73   the two records
2af00 20 63 6f 6d 70 61 72 65 20 65 71 75 61 6c 20 74   compare equal t
2af10 6f 0a 2a 2a 20 65 61 63 68 20 6f 74 68 65 72 2e  o.** each other.
2af20 20 20 4a 75 6d 70 20 74 6f 20 50 32 20 69 66 20    Jump to P2 if 
2af30 74 68 65 79 20 61 72 65 20 64 69 66 66 65 72 65  they are differe
2af40 6e 74 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53  nt..*/.case OP_S
2af50 6f 72 74 65 72 43 6f 6d 70 61 72 65 3a 20 7b 0a  orterCompare: {.
2af60 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43    VdbeCursor *pC
2af70 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a 20 20 69  ;.  int res;.  i
2af80 6e 74 20 6e 4b 65 79 43 6f 6c 3b 0a 0a 20 20 70  nt nKeyCol;..  p
2af90 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70  C = p->apCsr[pOp
2afa0 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p1];.  assert(
2afb0 20 69 73 53 6f 72 74 65 72 28 70 43 29 20 29 3b   isSorter(pC) );
2afc0 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
2afd0 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54 33 32  p4type==P4_INT32
2afe0 20 29 3b 0a 20 20 70 49 6e 33 20 3d 20 26 61 4d   );.  pIn3 = &aM
2aff0 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 6e  em[pOp->p3];.  n
2b000 4b 65 79 43 6f 6c 20 3d 20 70 4f 70 2d 3e 70 34  KeyCol = pOp->p4
2b010 2e 69 3b 0a 20 20 72 65 73 20 3d 20 30 3b 0a 20  .i;.  res = 0;. 
2b020 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62   rc = sqlite3Vdb
2b030 65 53 6f 72 74 65 72 43 6f 6d 70 61 72 65 28 70  eSorterCompare(p
2b040 43 2c 20 70 49 6e 33 2c 20 6e 4b 65 79 43 6f 6c  C, pIn3, nKeyCol
2b050 2c 20 26 72 65 73 29 3b 0a 20 20 56 64 62 65 42  , &res);.  VdbeB
2b060 72 61 6e 63 68 54 61 6b 65 6e 28 72 65 73 21 3d  ranchTaken(res!=
2b070 30 2c 32 29 3b 0a 20 20 69 66 28 20 72 63 20 29  0,2);.  if( rc )
2b080 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
2b090 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 69 66 28 20  to_error;.  if( 
2b0a0 72 65 73 20 29 20 67 6f 74 6f 20 6a 75 6d 70 5f  res ) goto jump_
2b0b0 74 6f 5f 70 32 3b 0a 20 20 62 72 65 61 6b 3b 0a  to_p2;.  break;.
2b0c0 7d 3b 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53  };../* Opcode: S
2b0d0 6f 72 74 65 72 44 61 74 61 20 50 31 20 50 32 20  orterData P1 P2 
2b0e0 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73  P3 * *.** Synops
2b0f0 69 73 3a 20 72 5b 50 32 5d 3d 64 61 74 61 0a 2a  is: r[P2]=data.*
2b100 2a 0a 2a 2a 20 57 72 69 74 65 20 69 6e 74 6f 20  *.** Write into 
2b110 72 65 67 69 73 74 65 72 20 50 32 20 74 68 65 20  register P2 the 
2b120 63 75 72 72 65 6e 74 20 73 6f 72 74 65 72 20 64  current sorter d
2b130 61 74 61 20 66 6f 72 20 73 6f 72 74 65 72 20 63  ata for sorter c
2b140 75 72 73 6f 72 20 50 31 2e 0a 2a 2a 20 54 68 65  ursor P1..** The
2b150 6e 20 63 6c 65 61 72 20 74 68 65 20 63 6f 6c 75  n clear the colu
2b160 6d 6e 20 68 65 61 64 65 72 20 63 61 63 68 65 20  mn header cache 
2b170 6f 6e 20 63 75 72 73 6f 72 20 50 33 2e 0a 2a 2a  on cursor P3..**
2b180 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20  .** This opcode 
2b190 69 73 20 6e 6f 72 6d 61 6c 6c 79 20 75 73 65 20  is normally use 
2b1a0 74 6f 20 6d 6f 76 65 20 61 20 72 65 63 6f 72 64  to move a record
2b1b0 20 6f 75 74 20 6f 66 20 74 68 65 20 73 6f 72 74   out of the sort
2b1c0 65 72 20 61 6e 64 20 69 6e 74 6f 0a 2a 2a 20 61  er and into.** a
2b1d0 20 72 65 67 69 73 74 65 72 20 74 68 61 74 20 69   register that i
2b1e0 73 20 74 68 65 20 73 6f 75 72 63 65 20 66 6f 72  s the source for
2b1f0 20 61 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 20   a pseudo-table 
2b200 63 75 72 73 6f 72 20 63 72 65 61 74 65 64 20 75  cursor created u
2b210 73 69 6e 67 0a 2a 2a 20 4f 70 65 6e 50 73 65 75  sing.** OpenPseu
2b220 64 6f 2e 20 20 54 68 61 74 20 70 73 65 75 64 6f  do.  That pseudo
2b230 2d 74 61 62 6c 65 20 63 75 72 73 6f 72 20 69 73  -table cursor is
2b240 20 74 68 65 20 6f 6e 65 20 74 68 61 74 20 69 73   the one that is
2b250 20 69 64 65 6e 74 69 66 69 65 64 20 62 79 0a 2a   identified by.*
2b260 2a 20 70 61 72 61 6d 65 74 65 72 20 50 33 2e 20  * parameter P3. 
2b270 20 43 6c 65 61 72 69 6e 67 20 74 68 65 20 50 33   Clearing the P3
2b280 20 63 6f 6c 75 6d 6e 20 63 61 63 68 65 20 61 73   column cache as
2b290 20 70 61 72 74 20 6f 66 20 74 68 69 73 20 6f 70   part of this op
2b2a0 63 6f 64 65 20 73 61 76 65 73 0a 2a 2a 20 75 73  code saves.** us
2b2b0 20 66 72 6f 6d 20 68 61 76 69 6e 67 20 74 6f 20   from having to 
2b2c0 69 73 73 75 65 20 61 20 73 65 70 61 72 61 74 65  issue a separate
2b2d0 20 4e 75 6c 6c 52 6f 77 20 69 6e 73 74 72 75 63   NullRow instruc
2b2e0 74 69 6f 6e 20 74 6f 20 63 6c 65 61 72 20 74 68  tion to clear th
2b2f0 61 74 20 63 61 63 68 65 2e 0a 2a 2f 0a 63 61 73  at cache..*/.cas
2b300 65 20 4f 50 5f 53 6f 72 74 65 72 44 61 74 61 3a  e OP_SorterData:
2b310 20 7b 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20   {.  VdbeCursor 
2b320 2a 70 43 3b 0a 0a 20 20 70 4f 75 74 20 3d 20 26  *pC;..  pOut = &
2b330 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20  aMem[pOp->p2];. 
2b340 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70   pC = p->apCsr[p
2b350 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72  Op->p1];.  asser
2b360 74 28 20 69 73 53 6f 72 74 65 72 28 70 43 29 20  t( isSorter(pC) 
2b370 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65  );.  rc = sqlite
2b380 33 56 64 62 65 53 6f 72 74 65 72 52 6f 77 6b 65  3VdbeSorterRowke
2b390 79 28 70 43 2c 20 70 4f 75 74 29 3b 0a 20 20 61  y(pC, pOut);.  a
2b3a0 73 73 65 72 74 28 20 72 63 21 3d 53 51 4c 49 54  ssert( rc!=SQLIT
2b3b0 45 5f 4f 4b 20 7c 7c 20 28 70 4f 75 74 2d 3e 66  E_OK || (pOut->f
2b3c0 6c 61 67 73 20 26 20 4d 45 4d 5f 42 6c 6f 62 29  lags & MEM_Blob)
2b3d0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   );.  assert( pO
2b3e0 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d  p->p1>=0 && pOp-
2b3f0 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29  >p1<p->nCursor )
2b400 3b 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f 74  ;.  if( rc ) got
2b410 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
2b420 72 72 6f 72 3b 0a 20 20 70 2d 3e 61 70 43 73 72  rror;.  p->apCsr
2b430 5b 70 4f 70 2d 3e 70 33 5d 2d 3e 63 61 63 68 65  [pOp->p3]->cache
2b440 53 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53  Status = CACHE_S
2b450 54 41 4c 45 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  TALE;.  break;.}
2b460 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 6f 77  ../* Opcode: Row
2b470 44 61 74 61 20 50 31 20 50 32 20 50 33 20 2a 20  Data P1 P2 P3 * 
2b480 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72  *.** Synopsis: r
2b490 5b 50 32 5d 3d 64 61 74 61 0a 2a 2a 0a 2a 2a 20  [P2]=data.**.** 
2b4a0 57 72 69 74 65 20 69 6e 74 6f 20 72 65 67 69 73  Write into regis
2b4b0 74 65 72 20 50 32 20 74 68 65 20 63 6f 6d 70 6c  ter P2 the compl
2b4c0 65 74 65 20 72 6f 77 20 63 6f 6e 74 65 6e 74 20  ete row content 
2b4d0 66 6f 72 20 74 68 65 20 72 6f 77 20 61 74 20 0a  for the row at .
2b4e0 2a 2a 20 77 68 69 63 68 20 63 75 72 73 6f 72 20  ** which cursor 
2b4f0 50 31 20 69 73 20 63 75 72 72 65 6e 74 6c 79 20  P1 is currently 
2b500 70 6f 69 6e 74 69 6e 67 2e 0a 2a 2a 20 54 68 65  pointing..** The
2b510 72 65 20 69 73 20 6e 6f 20 69 6e 74 65 72 70 72  re is no interpr
2b520 65 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 64  etation of the d
2b530 61 74 61 2e 20 20 0a 2a 2a 20 49 74 20 69 73 20  ata.  .** It is 
2b540 6a 75 73 74 20 63 6f 70 69 65 64 20 6f 6e 74 6f  just copied onto
2b550 20 74 68 65 20 50 32 20 72 65 67 69 73 74 65 72   the P2 register
2b560 20 65 78 61 63 74 6c 79 20 61 73 20 0a 2a 2a 20   exactly as .** 
2b570 69 74 20 69 73 20 66 6f 75 6e 64 20 69 6e 20 74  it is found in t
2b580 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  he database file
2b590 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 63 75 72 73 6f  ..**.** If curso
2b5a0 72 20 50 31 20 69 73 20 61 6e 20 69 6e 64 65 78  r P1 is an index
2b5b0 2c 20 74 68 65 6e 20 74 68 65 20 63 6f 6e 74 65  , then the conte
2b5c0 6e 74 20 69 73 20 74 68 65 20 6b 65 79 20 6f 66  nt is the key of
2b5d0 20 74 68 65 20 72 6f 77 2e 0a 2a 2a 20 49 66 20   the row..** If 
2b5e0 63 75 72 73 6f 72 20 50 32 20 69 73 20 61 20 74  cursor P2 is a t
2b5f0 61 62 6c 65 2c 20 74 68 65 6e 20 74 68 65 20 63  able, then the c
2b600 6f 6e 74 65 6e 74 20 65 78 74 72 61 63 74 65 64  ontent extracted
2b610 20 69 73 20 74 68 65 20 64 61 74 61 2e 0a 2a 2a   is the data..**
2b620 0a 2a 2a 20 49 66 20 74 68 65 20 50 31 20 63 75  .** If the P1 cu
2b630 72 73 6f 72 20 6d 75 73 74 20 62 65 20 70 6f 69  rsor must be poi
2b640 6e 74 69 6e 67 20 74 6f 20 61 20 76 61 6c 69 64  nting to a valid
2b650 20 72 6f 77 20 28 6e 6f 74 20 61 20 4e 55 4c 4c   row (not a NULL
2b660 20 72 6f 77 29 0a 2a 2a 20 6f 66 20 61 20 72 65   row).** of a re
2b670 61 6c 20 74 61 62 6c 65 2c 20 6e 6f 74 20 61 20  al table, not a 
2b680 70 73 65 75 64 6f 2d 74 61 62 6c 65 2e 0a 2a 2a  pseudo-table..**
2b690 0a 2a 2a 20 49 66 20 50 33 21 3d 30 20 74 68 65  .** If P3!=0 the
2b6a0 6e 20 74 68 69 73 20 6f 70 63 6f 64 65 20 69 73  n this opcode is
2b6b0 20 61 6c 6c 6f 77 65 64 20 74 6f 20 6d 61 6b 65   allowed to make
2b6c0 20 61 6e 20 65 70 68 65 6d 65 72 61 6c 20 70 6f   an ephemeral po
2b6d0 69 6e 74 65 72 0a 2a 2a 20 69 6e 74 6f 20 74 68  inter.** into th
2b6e0 65 20 64 61 74 61 62 61 73 65 20 70 61 67 65 2e  e database page.
2b6f0 20 20 54 68 61 74 20 6d 65 61 6e 73 20 74 68 61    That means tha
2b700 74 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66  t the content of
2b710 20 74 68 65 20 6f 75 74 70 75 74 0a 2a 2a 20 72   the output.** r
2b720 65 67 69 73 74 65 72 20 77 69 6c 6c 20 62 65 20  egister will be 
2b730 69 6e 76 61 6c 69 64 61 74 65 64 20 61 73 20 73  invalidated as s
2b740 6f 6f 6e 20 61 73 20 74 68 65 20 63 75 72 73 6f  oon as the curso
2b750 72 20 6d 6f 76 65 73 20 2d 20 69 6e 63 6c 75 64  r moves - includ
2b760 69 6e 67 0a 2a 2a 20 6d 6f 76 65 73 20 63 61 75  ing.** moves cau
2b770 73 65 64 20 62 79 20 6f 74 68 65 72 20 63 75 72  sed by other cur
2b780 73 6f 72 73 20 74 68 61 74 20 22 73 61 76 65 22  sors that "save"
2b790 20 74 68 65 20 63 75 72 72 65 6e 74 20 63 75 72   the current cur
2b7a0 73 6f 72 73 0a 2a 2a 20 70 6f 73 69 74 69 6f 6e  sors.** position
2b7b0 20 69 6e 20 6f 72 64 65 72 20 74 68 61 74 20 74   in order that t
2b7c0 68 65 79 20 63 61 6e 20 77 72 69 74 65 20 74 6f  hey can write to
2b7d0 20 74 68 65 20 73 61 6d 65 20 74 61 62 6c 65 2e   the same table.
2b7e0 20 20 49 66 20 50 33 3d 3d 30 0a 2a 2a 20 74 68    If P3==0.** th
2b7f0 65 6e 20 61 20 63 6f 70 79 20 6f 66 20 74 68 65  en a copy of the
2b800 20 64 61 74 61 20 69 73 20 6d 61 64 65 20 69 6e   data is made in
2b810 74 6f 20 6d 65 6d 6f 72 79 2e 20 20 50 33 21 3d  to memory.  P3!=
2b820 30 20 69 73 20 66 61 73 74 65 72 2c 20 62 75 74  0 is faster, but
2b830 0a 2a 2a 20 50 33 3d 3d 30 20 69 73 20 73 61 66  .** P3==0 is saf
2b840 65 72 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 33 21  er..**.** If P3!
2b850 3d 30 20 74 68 65 6e 20 74 68 65 20 63 6f 6e 74  =0 then the cont
2b860 65 6e 74 20 6f 66 20 74 68 65 20 50 32 20 72 65  ent of the P2 re
2b870 67 69 73 74 65 72 20 69 73 20 75 6e 73 75 69 74  gister is unsuit
2b880 61 62 6c 65 20 66 6f 72 20 75 73 65 0a 2a 2a 20  able for use.** 
2b890 69 6e 20 4f 50 5f 52 65 73 75 6c 74 20 61 6e 64  in OP_Result and
2b8a0 20 61 6e 79 20 4f 50 5f 52 65 73 75 6c 74 20 77   any OP_Result w
2b8b0 69 6c 6c 20 69 6e 76 61 6c 69 64 61 74 65 20 74  ill invalidate t
2b8c0 68 65 20 50 32 20 72 65 67 69 73 74 65 72 20 63  he P2 register c
2b8d0 6f 6e 74 65 6e 74 2e 0a 2a 2a 20 54 68 65 20 50  ontent..** The P
2b8e0 32 20 72 65 67 69 73 74 65 72 20 63 6f 6e 74 65  2 register conte
2b8f0 6e 74 20 69 73 20 69 6e 76 61 6c 69 64 61 74 65  nt is invalidate
2b900 64 20 62 79 20 6f 70 63 6f 64 65 73 20 6c 69 6b  d by opcodes lik
2b910 65 20 4f 50 5f 46 75 6e 63 74 69 6f 6e 20 6f 72  e OP_Function or
2b920 0a 2a 2a 20 62 79 20 61 6e 79 20 75 73 65 20 6f  .** by any use o
2b930 66 20 61 6e 6f 74 68 65 72 20 63 75 72 73 6f 72  f another cursor
2b940 20 70 6f 69 6e 74 69 6e 67 20 74 6f 20 74 68 65   pointing to the
2b950 20 73 61 6d 65 20 74 61 62 6c 65 2e 0a 2a 2f 0a   same table..*/.
2b960 63 61 73 65 20 4f 50 5f 52 6f 77 44 61 74 61 3a  case OP_RowData:
2b970 20 7b 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20   {.  VdbeCursor 
2b980 2a 70 43 3b 0a 20 20 42 74 43 75 72 73 6f 72 20  *pC;.  BtCursor 
2b990 2a 70 43 72 73 72 3b 0a 20 20 75 33 32 20 6e 3b  *pCrsr;.  u32 n;
2b9a0 0a 0a 20 20 70 4f 75 74 20 3d 20 6f 75 74 32 50  ..  pOut = out2P
2b9b0 72 65 72 65 6c 65 61 73 65 28 70 2c 20 70 4f 70  rerelease(p, pOp
2b9c0 29 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f  );..  assert( pO
2b9d0 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d  p->p1>=0 && pOp-
2b9e0 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29  >p1<p->nCursor )
2b9f0 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73  ;.  pC = p->apCs
2ba00 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  r[pOp->p1];.  as
2ba10 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20  sert( pC!=0 );. 
2ba20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 65 43 75   assert( pC->eCu
2ba30 72 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f 42  rType==CURTYPE_B
2ba40 54 52 45 45 20 29 3b 0a 20 20 61 73 73 65 72 74  TREE );.  assert
2ba50 28 20 69 73 53 6f 72 74 65 72 28 70 43 29 3d 3d  ( isSorter(pC)==
2ba60 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  0 );.  assert( p
2ba70 43 2d 3e 6e 75 6c 6c 52 6f 77 3d 3d 30 20 29 3b  C->nullRow==0 );
2ba80 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 75  .  assert( pC->u
2ba90 63 2e 70 43 75 72 73 6f 72 21 3d 30 20 29 3b 0a  c.pCursor!=0 );.
2baa0 20 20 70 43 72 73 72 20 3d 20 70 43 2d 3e 75 63    pCrsr = pC->uc
2bab0 2e 70 43 75 72 73 6f 72 3b 0a 0a 20 20 2f 2a 20  .pCursor;..  /* 
2bac0 54 68 65 20 4f 50 5f 52 6f 77 44 61 74 61 20 6f  The OP_RowData o
2bad0 70 63 6f 64 65 73 20 61 6c 77 61 79 73 20 66 6f  pcodes always fo
2bae0 6c 6c 6f 77 20 4f 50 5f 4e 6f 74 45 78 69 73 74  llow OP_NotExist
2baf0 73 20 6f 72 0a 20 20 2a 2a 20 4f 50 5f 53 65 65  s or.  ** OP_See
2bb00 6b 52 6f 77 69 64 20 6f 72 20 4f 50 5f 52 65 77  kRowid or OP_Rew
2bb10 69 6e 64 2f 4f 70 5f 4e 65 78 74 20 77 69 74 68  ind/Op_Next with
2bb20 20 6e 6f 20 69 6e 74 65 72 76 65 6e 69 6e 67 20   no intervening 
2bb30 69 6e 73 74 72 75 63 74 69 6f 6e 73 0a 20 20 2a  instructions.  *
2bb40 2a 20 74 68 61 74 20 6d 69 67 68 74 20 69 6e 76  * that might inv
2bb50 61 6c 69 64 61 74 65 20 74 68 65 20 63 75 72 73  alidate the curs
2bb60 6f 72 2e 0a 20 20 2a 2a 20 49 66 20 74 68 69 73  or..  ** If this
2bb70 20 77 68 65 72 65 20 6e 6f 74 20 74 68 65 20 63   where not the c
2bb80 61 73 65 2c 20 6f 6e 20 6f 66 20 74 68 65 20 66  ase, on of the f
2bb90 6f 6c 6c 6f 77 69 6e 67 20 61 73 73 65 72 74 28  ollowing assert(
2bba0 29 73 0a 20 20 2a 2a 20 77 6f 75 6c 64 20 66 61  )s.  ** would fa
2bbb0 69 6c 2e 20 20 53 68 6f 75 6c 64 20 74 68 69 73  il.  Should this
2bbc0 20 65 76 65 72 20 63 68 61 6e 67 65 20 28 62 65   ever change (be
2bbd0 63 61 75 73 65 20 6f 66 20 63 68 61 6e 67 65 73  cause of changes
2bbe0 20 69 6e 20 74 68 65 20 63 6f 64 65 0a 20 20 2a   in the code.  *
2bbf0 2a 20 67 65 6e 65 72 61 74 6f 72 29 20 74 68 65  * generator) the
2bc00 6e 20 74 68 65 20 66 69 78 20 77 6f 75 6c 64 20  n the fix would 
2bc10 62 65 20 74 6f 20 69 6e 73 65 72 74 20 61 20 63  be to insert a c
2bc20 61 6c 6c 20 74 6f 0a 20 20 2a 2a 20 73 71 6c 69  all to.  ** sqli
2bc30 74 65 33 56 64 62 65 43 75 72 73 6f 72 4d 6f 76  te3VdbeCursorMov
2bc40 65 74 6f 28 29 2e 0a 20 20 2a 2f 0a 20 20 61 73  eto()..  */.  as
2bc50 73 65 72 74 28 20 70 43 2d 3e 64 65 66 65 72 72  sert( pC->deferr
2bc60 65 64 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a 20  edMoveto==0 );. 
2bc70 20 61 73 73 65 72 74 28 20 73 71 6c 69 74 65 33   assert( sqlite3
2bc80 42 74 72 65 65 43 75 72 73 6f 72 49 73 56 61 6c  BtreeCursorIsVal
2bc90 69 64 28 70 43 72 73 72 29 20 29 3b 0a 23 69 66  id(pCrsr) );.#if
2bca0 20 30 20 20 2f 2a 20 4e 6f 74 20 72 65 71 75 69   0  /* Not requi
2bcb0 72 65 64 20 64 75 65 20 74 6f 20 74 68 65 20 70  red due to the p
2bcc0 72 65 76 69 6f 75 73 20 74 6f 20 61 73 73 65 72  revious to asser
2bcd0 74 28 29 20 73 74 61 74 65 6d 65 6e 74 73 20 2a  t() statements *
2bce0 2f 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  /.  rc = sqlite3
2bcf0 56 64 62 65 43 75 72 73 6f 72 4d 6f 76 65 74 6f  VdbeCursorMoveto
2bd00 28 70 43 29 3b 0a 20 20 69 66 28 20 72 63 21 3d  (pC);.  if( rc!=
2bd10 53 51 4c 49 54 45 5f 4f 4b 20 29 20 67 6f 74 6f  SQLITE_OK ) goto
2bd20 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
2bd30 72 6f 72 3b 0a 23 65 6e 64 69 66 0a 0a 20 20 6e  ror;.#endif..  n
2bd40 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 50   = sqlite3BtreeP
2bd50 61 79 6c 6f 61 64 53 69 7a 65 28 70 43 72 73 72  ayloadSize(pCrsr
2bd60 29 3b 0a 20 20 69 66 28 20 6e 3e 28 75 33 32 29  );.  if( n>(u32)
2bd70 64 62 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c 49 54  db->aLimit[SQLIT
2bd80 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54 48 5d 20  E_LIMIT_LENGTH] 
2bd90 29 7b 0a 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f  ){.    goto too_
2bda0 62 69 67 3b 0a 20 20 7d 0a 20 20 74 65 73 74 63  big;.  }.  testc
2bdb0 61 73 65 28 20 6e 3d 3d 30 20 29 3b 0a 20 20 72  ase( n==0 );.  r
2bdc0 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 4d  c = sqlite3VdbeM
2bdd0 65 6d 46 72 6f 6d 42 74 72 65 65 28 70 43 72 73  emFromBtree(pCrs
2bde0 72 2c 20 30 2c 20 6e 2c 20 70 4f 75 74 29 3b 0a  r, 0, n, pOut);.
2bdf0 20 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20    if( rc ) goto 
2be00 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
2be10 6f 72 3b 0a 20 20 69 66 28 20 21 70 4f 70 2d 3e  or;.  if( !pOp->
2be20 70 33 20 29 20 44 65 65 70 68 65 6d 65 72 61 6c  p3 ) Deephemeral
2be30 69 7a 65 28 70 4f 75 74 29 3b 0a 20 20 55 50 44  ize(pOut);.  UPD
2be40 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45  ATE_MAX_BLOBSIZE
2be50 28 70 4f 75 74 29 3b 0a 20 20 52 45 47 49 53 54  (pOut);.  REGIST
2be60 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 32  ER_TRACE(pOp->p2
2be70 2c 20 70 4f 75 74 29 3b 0a 20 20 62 72 65 61 6b  , pOut);.  break
2be80 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
2be90 52 6f 77 69 64 20 50 31 20 50 32 20 2a 20 2a 20  Rowid P1 P2 * * 
2bea0 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72  *.** Synopsis: r
2beb0 5b 50 32 5d 3d 72 6f 77 69 64 0a 2a 2a 0a 2a 2a  [P2]=rowid.**.**
2bec0 20 53 74 6f 72 65 20 69 6e 20 72 65 67 69 73 74   Store in regist
2bed0 65 72 20 50 32 20 61 6e 20 69 6e 74 65 67 65 72  er P2 an integer
2bee0 20 77 68 69 63 68 20 69 73 20 74 68 65 20 6b 65   which is the ke
2bef0 79 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 65  y of the table e
2bf00 6e 74 72 79 20 74 68 61 74 0a 2a 2a 20 50 31 20  ntry that.** P1 
2bf10 69 73 20 63 75 72 72 65 6e 74 6c 79 20 70 6f 69  is currently poi
2bf20 6e 74 20 74 6f 2e 0a 2a 2a 0a 2a 2a 20 50 31 20  nt to..**.** P1 
2bf30 63 61 6e 20 62 65 20 65 69 74 68 65 72 20 61 6e  can be either an
2bf40 20 6f 72 64 69 6e 61 72 79 20 74 61 62 6c 65 20   ordinary table 
2bf50 6f 72 20 61 20 76 69 72 74 75 61 6c 20 74 61 62  or a virtual tab
2bf60 6c 65 2e 20 20 54 68 65 72 65 20 75 73 65 64 20  le.  There used 
2bf70 74 6f 0a 2a 2a 20 62 65 20 61 20 73 65 70 61 72  to.** be a separ
2bf80 61 74 65 20 4f 50 5f 56 52 6f 77 69 64 20 6f 70  ate OP_VRowid op
2bf90 63 6f 64 65 20 66 6f 72 20 75 73 65 20 77 69 74  code for use wit
2bfa0 68 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 73  h virtual tables
2bfb0 2c 20 62 75 74 20 74 68 69 73 0a 2a 2a 20 6f 6e  , but this.** on
2bfc0 65 20 6f 70 63 6f 64 65 20 6e 6f 77 20 77 6f 72  e opcode now wor
2bfd0 6b 73 20 66 6f 72 20 62 6f 74 68 20 74 61 62 6c  ks for both tabl
2bfe0 65 20 74 79 70 65 73 2e 0a 2a 2f 0a 63 61 73 65  e types..*/.case
2bff0 20 4f 50 5f 52 6f 77 69 64 3a 20 7b 20 20 20 20   OP_Rowid: {    
2c000 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
2c010 6f 75 74 32 20 2a 2f 0a 20 20 56 64 62 65 43 75  out2 */.  VdbeCu
2c020 72 73 6f 72 20 2a 70 43 3b 0a 20 20 69 36 34 20  rsor *pC;.  i64 
2c030 76 3b 0a 20 20 73 71 6c 69 74 65 33 5f 76 74 61  v;.  sqlite3_vta
2c040 62 20 2a 70 56 74 61 62 3b 0a 20 20 63 6f 6e 73  b *pVtab;.  cons
2c050 74 20 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65  t sqlite3_module
2c060 20 2a 70 4d 6f 64 75 6c 65 3b 0a 0a 20 20 70 4f   *pModule;..  pO
2c070 75 74 20 3d 20 6f 75 74 32 50 72 65 72 65 6c 65  ut = out2Prerele
2c080 61 73 65 28 70 2c 20 70 4f 70 29 3b 0a 20 20 61  ase(p, pOp);.  a
2c090 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d  ssert( pOp->p1>=
2c0a0 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e  0 && pOp->p1<p->
2c0b0 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20  nCursor );.  pC 
2c0c0 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e  = p->apCsr[pOp->
2c0d0 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p1];.  assert( p
2c0e0 43 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  C!=0 );.  assert
2c0f0 28 20 70 43 2d 3e 65 43 75 72 54 79 70 65 21 3d  ( pC->eCurType!=
2c100 43 55 52 54 59 50 45 5f 50 53 45 55 44 4f 20 7c  CURTYPE_PSEUDO |
2c110 7c 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 29 3b  | pC->nullRow );
2c120 0a 20 20 69 66 28 20 70 43 2d 3e 6e 75 6c 6c 52  .  if( pC->nullR
2c130 6f 77 20 29 7b 0a 20 20 20 20 70 4f 75 74 2d 3e  ow ){.    pOut->
2c140 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 4e 75 6c 6c  flags = MEM_Null
2c150 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d  ;.    break;.  }
2c160 65 6c 73 65 20 69 66 28 20 70 43 2d 3e 64 65 66  else if( pC->def
2c170 65 72 72 65 64 4d 6f 76 65 74 6f 20 29 7b 0a 20  erredMoveto ){. 
2c180 20 20 20 76 20 3d 20 70 43 2d 3e 6d 6f 76 65 74     v = pC->movet
2c190 6f 54 61 72 67 65 74 3b 0a 23 69 66 6e 64 65 66  oTarget;.#ifndef
2c1a0 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52   SQLITE_OMIT_VIR
2c1b0 54 55 41 4c 54 41 42 4c 45 0a 20 20 7d 65 6c 73  TUALTABLE.  }els
2c1c0 65 20 69 66 28 20 70 43 2d 3e 65 43 75 72 54 79  e if( pC->eCurTy
2c1d0 70 65 3d 3d 43 55 52 54 59 50 45 5f 56 54 41 42  pe==CURTYPE_VTAB
2c1e0 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20   ){.    assert( 
2c1f0 70 43 2d 3e 75 63 2e 70 56 43 75 72 21 3d 30 20  pC->uc.pVCur!=0 
2c200 29 3b 0a 20 20 20 20 70 56 74 61 62 20 3d 20 70  );.    pVtab = p
2c210 43 2d 3e 75 63 2e 70 56 43 75 72 2d 3e 70 56 74  C->uc.pVCur->pVt
2c220 61 62 3b 0a 20 20 20 20 70 4d 6f 64 75 6c 65 20  ab;.    pModule 
2c230 3d 20 70 56 74 61 62 2d 3e 70 4d 6f 64 75 6c 65  = pVtab->pModule
2c240 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4d  ;.    assert( pM
2c250 6f 64 75 6c 65 2d 3e 78 52 6f 77 69 64 20 29 3b  odule->xRowid );
2c260 0a 20 20 20 20 72 63 20 3d 20 70 4d 6f 64 75 6c  .    rc = pModul
2c270 65 2d 3e 78 52 6f 77 69 64 28 70 43 2d 3e 75 63  e->xRowid(pC->uc
2c280 2e 70 56 43 75 72 2c 20 26 76 29 3b 0a 20 20 20  .pVCur, &v);.   
2c290 20 73 71 6c 69 74 65 33 56 74 61 62 49 6d 70 6f   sqlite3VtabImpo
2c2a0 72 74 45 72 72 6d 73 67 28 70 2c 20 70 56 74 61  rtErrmsg(p, pVta
2c2b0 62 29 3b 0a 20 20 20 20 69 66 28 20 72 63 20 29  b);.    if( rc )
2c2c0 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
2c2d0 74 6f 5f 65 72 72 6f 72 3b 0a 23 65 6e 64 69 66  to_error;.#endif
2c2e0 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f   /* SQLITE_OMIT_
2c2f0 56 49 52 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a  VIRTUALTABLE */.
2c300 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73 73    }else{.    ass
2c310 65 72 74 28 20 70 43 2d 3e 65 43 75 72 54 79 70  ert( pC->eCurTyp
2c320 65 3d 3d 43 55 52 54 59 50 45 5f 42 54 52 45 45  e==CURTYPE_BTREE
2c330 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20   );.    assert( 
2c340 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 21 3d  pC->uc.pCursor!=
2c350 30 20 29 3b 0a 20 20 20 20 72 63 20 3d 20 73 71  0 );.    rc = sq
2c360 6c 69 74 65 33 56 64 62 65 43 75 72 73 6f 72 52  lite3VdbeCursorR
2c370 65 73 74 6f 72 65 28 70 43 29 3b 0a 20 20 20 20  estore(pC);.    
2c380 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62  if( rc ) goto ab
2c390 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
2c3a0 3b 0a 20 20 20 20 69 66 28 20 70 43 2d 3e 6e 75  ;.    if( pC->nu
2c3b0 6c 6c 52 6f 77 20 29 7b 0a 20 20 20 20 20 20 70  llRow ){.      p
2c3c0 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d  Out->flags = MEM
2c3d0 5f 4e 75 6c 6c 3b 0a 20 20 20 20 20 20 62 72 65  _Null;.      bre
2c3e0 61 6b 3b 0a 20 20 20 20 7d 0a 20 20 20 20 76 20  ak;.    }.    v 
2c3f0 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 49 6e  = sqlite3BtreeIn
2c400 74 65 67 65 72 4b 65 79 28 70 43 2d 3e 75 63 2e  tegerKey(pC->uc.
2c410 70 43 75 72 73 6f 72 29 3b 0a 20 20 7d 0a 20 20  pCursor);.  }.  
2c420 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 76 3b 0a 20  pOut->u.i = v;. 
2c430 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
2c440 63 6f 64 65 3a 20 4e 75 6c 6c 52 6f 77 20 50 31  code: NullRow P1
2c450 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4d   * * * *.**.** M
2c460 6f 76 65 20 74 68 65 20 63 75 72 73 6f 72 20 50  ove the cursor P
2c470 31 20 74 6f 20 61 20 6e 75 6c 6c 20 72 6f 77 2e  1 to a null row.
2c480 20 20 41 6e 79 20 4f 50 5f 43 6f 6c 75 6d 6e 20    Any OP_Column 
2c490 6f 70 65 72 61 74 69 6f 6e 73 0a 2a 2a 20 74 68  operations.** th
2c4a0 61 74 20 6f 63 63 75 72 20 77 68 69 6c 65 20 74  at occur while t
2c4b0 68 65 20 63 75 72 73 6f 72 20 69 73 20 6f 6e 20  he cursor is on 
2c4c0 74 68 65 20 6e 75 6c 6c 20 72 6f 77 20 77 69 6c  the null row wil
2c4d0 6c 20 61 6c 77 61 79 73 0a 2a 2a 20 77 72 69 74  l always.** writ
2c4e0 65 20 61 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73  e a NULL..*/.cas
2c4f0 65 20 4f 50 5f 4e 75 6c 6c 52 6f 77 3a 20 7b 0a  e OP_NullRow: {.
2c500 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43    VdbeCursor *pC
2c510 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  ;..  assert( pOp
2c520 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e  ->p1>=0 && pOp->
2c530 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b  p1<p->nCursor );
2c540 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72  .  pC = p->apCsr
2c550 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
2c560 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20  ert( pC!=0 );.  
2c570 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 31 3b  pC->nullRow = 1;
2c580 0a 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74  .  pC->cacheStat
2c590 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45  us = CACHE_STALE
2c5a0 3b 0a 20 20 69 66 28 20 70 43 2d 3e 65 43 75 72  ;.  if( pC->eCur
2c5b0 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f 42 54  Type==CURTYPE_BT
2c5c0 52 45 45 20 29 7b 0a 20 20 20 20 61 73 73 65 72  REE ){.    asser
2c5d0 74 28 20 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f  t( pC->uc.pCurso
2c5e0 72 21 3d 30 20 29 3b 0a 20 20 20 20 73 71 6c 69  r!=0 );.    sqli
2c5f0 74 65 33 42 74 72 65 65 43 6c 65 61 72 43 75 72  te3BtreeClearCur
2c600 73 6f 72 28 70 43 2d 3e 75 63 2e 70 43 75 72 73  sor(pC->uc.pCurs
2c610 6f 72 29 3b 0a 20 20 7d 0a 23 69 66 64 65 66 20  or);.  }.#ifdef 
2c620 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 69  SQLITE_DEBUG.  i
2c630 66 28 20 70 43 2d 3e 73 65 65 6b 4f 70 3d 3d 30  f( pC->seekOp==0
2c640 20 29 20 70 43 2d 3e 73 65 65 6b 4f 70 20 3d 20   ) pC->seekOp = 
2c650 4f 50 5f 4e 75 6c 6c 52 6f 77 3b 0a 23 65 6e 64  OP_NullRow;.#end
2c660 69 66 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  if.  break;.}../
2c670 2a 20 4f 70 63 6f 64 65 3a 20 53 65 65 6b 45 6e  * Opcode: SeekEn
2c680 64 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a  d P1 * * * *.**.
2c690 2a 2a 20 50 6f 73 69 74 69 6f 6e 20 63 75 72 73  ** Position curs
2c6a0 6f 72 20 50 31 20 61 74 20 74 68 65 20 65 6e 64  or P1 at the end
2c6b0 20 6f 66 20 74 68 65 20 62 74 72 65 65 20 66 6f   of the btree fo
2c6c0 72 20 74 68 65 20 70 75 72 70 6f 73 65 20 6f 66  r the purpose of
2c6d0 0a 2a 2a 20 61 70 70 65 6e 64 69 6e 67 20 61 20  .** appending a 
2c6e0 6e 65 77 20 65 6e 74 72 79 20 6f 6e 74 6f 20 74  new entry onto t
2c6f0 68 65 20 62 74 72 65 65 2e 0a 2a 2a 0a 2a 2a 20  he btree..**.** 
2c700 49 74 20 69 73 20 61 73 73 75 6d 65 64 20 74 68  It is assumed th
2c710 61 74 20 74 68 65 20 63 75 72 73 6f 72 20 69 73  at the cursor is
2c720 20 75 73 65 64 20 6f 6e 6c 79 20 66 6f 72 20 61   used only for a
2c730 70 70 65 6e 64 69 6e 67 20 61 6e 64 20 73 6f 0a  ppending and so.
2c740 2a 2a 20 69 66 20 74 68 65 20 63 75 72 73 6f 72  ** if the cursor
2c750 20 69 73 20 76 61 6c 69 64 2c 20 74 68 65 6e 20   is valid, then 
2c760 74 68 65 20 63 75 72 73 6f 72 20 6d 75 73 74 20  the cursor must 
2c770 61 6c 72 65 61 64 79 20 62 65 20 70 6f 69 6e 74  already be point
2c780 69 6e 67 0a 2a 2a 20 61 74 20 74 68 65 20 65 6e  ing.** at the en
2c790 64 20 6f 66 20 74 68 65 20 62 74 72 65 65 20 61  d of the btree a
2c7a0 6e 64 20 73 6f 20 6e 6f 20 63 68 61 6e 67 65 73  nd so no changes
2c7b0 20 61 72 65 20 6d 61 64 65 20 74 6f 0a 2a 2a 20   are made to.** 
2c7c0 74 68 65 20 63 75 72 73 6f 72 2e 0a 2a 2f 0a 2f  the cursor..*/./
2c7d0 2a 20 4f 70 63 6f 64 65 3a 20 4c 61 73 74 20 50  * Opcode: Last P
2c7e0 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a  1 P2 * * *.**.**
2c7f0 20 54 68 65 20 6e 65 78 74 20 75 73 65 20 6f 66   The next use of
2c800 20 74 68 65 20 52 6f 77 69 64 20 6f 72 20 43 6f   the Rowid or Co
2c810 6c 75 6d 6e 20 6f 72 20 50 72 65 76 20 69 6e 73  lumn or Prev ins
2c820 74 72 75 63 74 69 6f 6e 20 66 6f 72 20 50 31 20  truction for P1 
2c830 0a 2a 2a 20 77 69 6c 6c 20 72 65 66 65 72 20 74  .** will refer t
2c840 6f 20 74 68 65 20 6c 61 73 74 20 65 6e 74 72 79  o the last entry
2c850 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65   in the database
2c860 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 2e   table or index.
2c870 0a 2a 2a 20 49 66 20 74 68 65 20 74 61 62 6c 65  .** If the table
2c880 20 6f 72 20 69 6e 64 65 78 20 69 73 20 65 6d 70   or index is emp
2c890 74 79 20 61 6e 64 20 50 32 3e 30 2c 20 74 68 65  ty and P2>0, the
2c8a0 6e 20 6a 75 6d 70 20 69 6d 6d 65 64 69 61 74 65  n jump immediate
2c8b0 6c 79 20 74 6f 20 50 32 2e 0a 2a 2a 20 49 66 20  ly to P2..** If 
2c8c0 50 32 20 69 73 20 30 20 6f 72 20 69 66 20 74 68  P2 is 0 or if th
2c8d0 65 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78  e table or index
2c8e0 20 69 73 20 6e 6f 74 20 65 6d 70 74 79 2c 20 66   is not empty, f
2c8f0 61 6c 6c 20 74 68 72 6f 75 67 68 0a 2a 2a 20 74  all through.** t
2c900 6f 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  o the following 
2c910 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a 0a  instruction..**.
2c920 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 6c  ** This opcode l
2c930 65 61 76 65 73 20 74 68 65 20 63 75 72 73 6f 72  eaves the cursor
2c940 20 63 6f 6e 66 69 67 75 72 65 64 20 74 6f 20 6d   configured to m
2c950 6f 76 65 20 69 6e 20 72 65 76 65 72 73 65 20 6f  ove in reverse o
2c960 72 64 65 72 2c 0a 2a 2a 20 66 72 6f 6d 20 74 68  rder,.** from th
2c970 65 20 65 6e 64 20 74 6f 77 61 72 64 20 74 68 65  e end toward the
2c980 20 62 65 67 69 6e 6e 69 6e 67 2e 20 20 49 6e 20   beginning.  In 
2c990 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 74 68 65  other words, the
2c9a0 20 63 75 72 73 6f 72 20 69 73 0a 2a 2a 20 63 6f   cursor is.** co
2c9b0 6e 66 69 67 75 72 65 64 20 74 6f 20 75 73 65 20  nfigured to use 
2c9c0 50 72 65 76 2c 20 6e 6f 74 20 4e 65 78 74 2e 0a  Prev, not Next..
2c9d0 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 65 65 6b 45  */.case OP_SeekE
2c9e0 6e 64 3a 0a 63 61 73 65 20 4f 50 5f 4c 61 73 74  nd:.case OP_Last
2c9f0 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a 75  : {        /* ju
2ca00 6d 70 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73  mp */.  VdbeCurs
2ca10 6f 72 20 2a 70 43 3b 0a 20 20 42 74 43 75 72 73  or *pC;.  BtCurs
2ca20 6f 72 20 2a 70 43 72 73 72 3b 0a 20 20 69 6e 74  or *pCrsr;.  int
2ca30 20 72 65 73 3b 0a 0a 20 20 61 73 73 65 72 74 28   res;..  assert(
2ca40 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70   pOp->p1>=0 && p
2ca50 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f  Op->p1<p->nCurso
2ca60 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61  r );.  pC = p->a
2ca70 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  pCsr[pOp->p1];. 
2ca80 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29   assert( pC!=0 )
2ca90 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  ;.  assert( pC->
2caa0 65 43 75 72 54 79 70 65 3d 3d 43 55 52 54 59 50  eCurType==CURTYP
2cab0 45 5f 42 54 52 45 45 20 29 3b 0a 20 20 70 43 72  E_BTREE );.  pCr
2cac0 73 72 20 3d 20 70 43 2d 3e 75 63 2e 70 43 75 72  sr = pC->uc.pCur
2cad0 73 6f 72 3b 0a 20 20 72 65 73 20 3d 20 30 3b 0a  sor;.  res = 0;.
2cae0 20 20 61 73 73 65 72 74 28 20 70 43 72 73 72 21    assert( pCrsr!
2caf0 3d 30 20 29 3b 0a 23 69 66 64 65 66 20 53 51 4c  =0 );.#ifdef SQL
2cb00 49 54 45 5f 44 45 42 55 47 0a 20 20 70 43 2d 3e  ITE_DEBUG.  pC->
2cb10 73 65 65 6b 4f 70 20 3d 20 70 4f 70 2d 3e 6f 70  seekOp = pOp->op
2cb20 63 6f 64 65 3b 0a 23 65 6e 64 69 66 0a 20 20 69  code;.#endif.  i
2cb30 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d  f( pOp->opcode==
2cb40 4f 50 5f 53 65 65 6b 45 6e 64 20 29 7b 0a 20 20  OP_SeekEnd ){.  
2cb50 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
2cb60 32 3d 3d 30 20 29 3b 0a 20 20 20 20 70 43 2d 3e  2==0 );.    pC->
2cb70 73 65 65 6b 52 65 73 75 6c 74 20 3d 20 2d 31 3b  seekResult = -1;
2cb80 0a 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33  .    if( sqlite3
2cb90 42 74 72 65 65 43 75 72 73 6f 72 49 73 56 61 6c  BtreeCursorIsVal
2cba0 69 64 4e 4e 28 70 43 72 73 72 29 20 29 7b 0a 20  idNN(pCrsr) ){. 
2cbb0 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
2cbc0 7d 0a 20 20 7d 0a 20 20 72 63 20 3d 20 73 71 6c  }.  }.  rc = sql
2cbd0 69 74 65 33 42 74 72 65 65 4c 61 73 74 28 70 43  ite3BtreeLast(pC
2cbe0 72 73 72 2c 20 26 72 65 73 29 3b 0a 20 20 70 43  rsr, &res);.  pC
2cbf0 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 28 75 38 29  ->nullRow = (u8)
2cc00 72 65 73 3b 0a 20 20 70 43 2d 3e 64 65 66 65 72  res;.  pC->defer
2cc10 72 65 64 4d 6f 76 65 74 6f 20 3d 20 30 3b 0a 20  redMoveto = 0;. 
2cc20 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73   pC->cacheStatus
2cc30 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a   = CACHE_STALE;.
2cc40 20 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20    if( rc ) goto 
2cc50 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
2cc60 6f 72 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70  or;.  if( pOp->p
2cc70 32 3e 30 20 29 7b 0a 20 20 20 20 56 64 62 65 42  2>0 ){.    VdbeB
2cc80 72 61 6e 63 68 54 61 6b 65 6e 28 72 65 73 21 3d  ranchTaken(res!=
2cc90 30 2c 32 29 3b 0a 20 20 20 20 69 66 28 20 72 65  0,2);.    if( re
2cca0 73 20 29 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f  s ) goto jump_to
2ccb0 5f 70 32 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  _p2;.  }.  break
2ccc0 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
2ccd0 49 66 53 6d 61 6c 6c 65 72 20 50 31 20 50 32 20  IfSmaller P1 P2 
2cce0 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 45 73 74  P3 * *.**.** Est
2ccf0 69 6d 61 74 65 20 74 68 65 20 6e 75 6d 62 65 72  imate the number
2cd00 20 6f 66 20 72 6f 77 73 20 69 6e 20 74 68 65 20   of rows in the 
2cd10 74 61 62 6c 65 20 50 31 2e 20 20 4a 75 6d 70 20  table P1.  Jump 
2cd20 74 6f 20 50 32 20 69 66 20 74 68 61 74 0a 2a 2a  to P2 if that.**
2cd30 20 65 73 74 69 6d 61 74 65 20 69 73 20 6c 65 73   estimate is les
2cd40 73 20 74 68 61 6e 20 61 70 70 72 6f 78 69 6d 61  s than approxima
2cd50 74 65 6c 79 20 32 2a 2a 28 30 2e 31 2a 50 33 29  tely 2**(0.1*P3)
2cd60 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 66 53  ..*/.case OP_IfS
2cd70 6d 61 6c 6c 65 72 3a 20 7b 20 20 20 20 20 20 20  maller: {       
2cd80 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 56 64   /* jump */.  Vd
2cd90 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20  beCursor *pC;.  
2cda0 42 74 43 75 72 73 6f 72 20 2a 70 43 72 73 72 3b  BtCursor *pCrsr;
2cdb0 0a 20 20 69 6e 74 20 72 65 73 3b 0a 20 20 69 36  .  int res;.  i6
2cdc0 34 20 73 7a 3b 0a 0a 20 20 61 73 73 65 72 74 28  4 sz;..  assert(
2cdd0 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70   pOp->p1>=0 && p
2cde0 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f  Op->p1<p->nCurso
2cdf0 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61  r );.  pC = p->a
2ce00 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  pCsr[pOp->p1];. 
2ce10 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29   assert( pC!=0 )
2ce20 3b 0a 20 20 70 43 72 73 72 20 3d 20 70 43 2d 3e  ;.  pCrsr = pC->
2ce30 75 63 2e 70 43 75 72 73 6f 72 3b 0a 20 20 61 73  uc.pCursor;.  as
2ce40 73 65 72 74 28 20 70 43 72 73 72 20 29 3b 0a 20  sert( pCrsr );. 
2ce50 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
2ce60 65 65 46 69 72 73 74 28 70 43 72 73 72 2c 20 26  eeFirst(pCrsr, &
2ce70 72 65 73 29 3b 0a 20 20 69 66 28 20 72 63 20 29  res);.  if( rc )
2ce80 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
2ce90 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 69 66 28 20  to_error;.  if( 
2cea0 72 65 73 3d 3d 30 20 29 7b 0a 20 20 20 20 73 7a  res==0 ){.    sz
2ceb0 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 52   = sqlite3BtreeR
2cec0 6f 77 43 6f 75 6e 74 45 73 74 28 70 43 72 73 72  owCountEst(pCrsr
2ced0 29 3b 0a 20 20 20 20 69 66 28 20 41 4c 57 41 59  );.    if( ALWAY
2cee0 53 28 73 7a 3e 3d 30 29 20 26 26 20 73 71 6c 69  S(sz>=0) && sqli
2cef0 74 65 33 4c 6f 67 45 73 74 28 28 75 36 34 29 73  te3LogEst((u64)s
2cf00 7a 29 3c 70 4f 70 2d 3e 70 33 20 29 20 72 65 73  z)<pOp->p3 ) res
2cf10 20 3d 20 31 3b 0a 20 20 7d 0a 20 20 56 64 62 65   = 1;.  }.  Vdbe
2cf20 42 72 61 6e 63 68 54 61 6b 65 6e 28 72 65 73 21  BranchTaken(res!
2cf30 3d 30 2c 32 29 3b 0a 20 20 69 66 28 20 72 65 73  =0,2);.  if( res
2cf40 20 29 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f   ) goto jump_to_
2cf50 70 32 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  p2;.  break;.}..
2cf60 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 6f 72 74  ./* Opcode: Sort
2cf70 65 72 53 6f 72 74 20 50 31 20 50 32 20 2a 20 2a  erSort P1 P2 * *
2cf80 20 2a 0a 2a 2a 0a 2a 2a 20 41 66 74 65 72 20 61   *.**.** After a
2cf90 6c 6c 20 72 65 63 6f 72 64 73 20 68 61 76 65 20  ll records have 
2cfa0 62 65 65 6e 20 69 6e 73 65 72 74 65 64 20 69 6e  been inserted in
2cfb0 74 6f 20 74 68 65 20 53 6f 72 74 65 72 20 6f 62  to the Sorter ob
2cfc0 6a 65 63 74 0a 2a 2a 20 69 64 65 6e 74 69 66 69  ject.** identifi
2cfd0 65 64 20 62 79 20 50 31 2c 20 69 6e 76 6f 6b 65  ed by P1, invoke
2cfe0 20 74 68 69 73 20 6f 70 63 6f 64 65 20 74 6f 20   this opcode to 
2cff0 61 63 74 75 61 6c 6c 79 20 64 6f 20 74 68 65 20  actually do the 
2d000 73 6f 72 74 69 6e 67 2e 0a 2a 2a 20 4a 75 6d 70  sorting..** Jump
2d010 20 74 6f 20 50 32 20 69 66 20 74 68 65 72 65 20   to P2 if there 
2d020 61 72 65 20 6e 6f 20 72 65 63 6f 72 64 73 20 74  are no records t
2d030 6f 20 62 65 20 73 6f 72 74 65 64 2e 0a 2a 2a 0a  o be sorted..**.
2d040 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 69  ** This opcode i
2d050 73 20 61 6e 20 61 6c 69 61 73 20 66 6f 72 20 4f  s an alias for O
2d060 50 5f 53 6f 72 74 20 61 6e 64 20 4f 50 5f 52 65  P_Sort and OP_Re
2d070 77 69 6e 64 20 74 68 61 74 20 69 73 20 75 73 65  wind that is use
2d080 64 0a 2a 2a 20 66 6f 72 20 53 6f 72 74 65 72 20  d.** for Sorter 
2d090 6f 62 6a 65 63 74 73 2e 0a 2a 2f 0a 2f 2a 20 4f  objects..*/./* O
2d0a0 70 63 6f 64 65 3a 20 53 6f 72 74 20 50 31 20 50  pcode: Sort P1 P
2d0b0 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68  2 * * *.**.** Th
2d0c0 69 73 20 6f 70 63 6f 64 65 20 64 6f 65 73 20 65  is opcode does e
2d0d0 78 61 63 74 6c 79 20 74 68 65 20 73 61 6d 65 20  xactly the same 
2d0e0 74 68 69 6e 67 20 61 73 20 4f 50 5f 52 65 77 69  thing as OP_Rewi
2d0f0 6e 64 20 65 78 63 65 70 74 20 74 68 61 74 0a 2a  nd except that.*
2d100 2a 20 69 74 20 69 6e 63 72 65 6d 65 6e 74 73 20  * it increments 
2d110 61 6e 20 75 6e 64 6f 63 75 6d 65 6e 74 65 64 20  an undocumented 
2d120 67 6c 6f 62 61 6c 20 76 61 72 69 61 62 6c 65 20  global variable 
2d130 75 73 65 64 20 66 6f 72 20 74 65 73 74 69 6e 67  used for testing
2d140 2e 0a 2a 2a 0a 2a 2a 20 53 6f 72 74 69 6e 67 20  ..**.** Sorting 
2d150 69 73 20 61 63 63 6f 6d 70 6c 69 73 68 65 64 20  is accomplished 
2d160 62 79 20 77 72 69 74 69 6e 67 20 72 65 63 6f 72  by writing recor
2d170 64 73 20 69 6e 74 6f 20 61 20 73 6f 72 74 69 6e  ds into a sortin
2d180 67 20 69 6e 64 65 78 2c 0a 2a 2a 20 74 68 65 6e  g index,.** then
2d190 20 72 65 77 69 6e 64 69 6e 67 20 74 68 61 74 20   rewinding that 
2d1a0 69 6e 64 65 78 20 61 6e 64 20 70 6c 61 79 69 6e  index and playin
2d1b0 67 20 69 74 20 62 61 63 6b 20 66 72 6f 6d 20 62  g it back from b
2d1c0 65 67 69 6e 6e 69 6e 67 20 74 6f 0a 2a 2a 20 65  eginning to.** e
2d1d0 6e 64 2e 20 20 57 65 20 75 73 65 20 74 68 65 20  nd.  We use the 
2d1e0 4f 50 5f 53 6f 72 74 20 6f 70 63 6f 64 65 20 69  OP_Sort opcode i
2d1f0 6e 73 74 65 61 64 20 6f 66 20 4f 50 5f 52 65 77  nstead of OP_Rew
2d200 69 6e 64 20 74 6f 20 64 6f 20 74 68 65 0a 2a 2a  ind to do the.**
2d210 20 72 65 77 69 6e 64 69 6e 67 20 73 6f 20 74 68   rewinding so th
2d220 61 74 20 74 68 65 20 67 6c 6f 62 61 6c 20 76 61  at the global va
2d230 72 69 61 62 6c 65 20 77 69 6c 6c 20 62 65 20 69  riable will be i
2d240 6e 63 72 65 6d 65 6e 74 65 64 20 61 6e 64 0a 2a  ncremented and.*
2d250 2a 20 72 65 67 72 65 73 73 69 6f 6e 20 74 65 73  * regression tes
2d260 74 73 20 63 61 6e 20 64 65 74 65 72 6d 69 6e 65  ts can determine
2d270 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20   whether or not 
2d280 74 68 65 20 6f 70 74 69 6d 69 7a 65 72 20 69 73  the optimizer is
2d290 0a 2a 2a 20 63 6f 72 72 65 63 74 6c 79 20 6f 70  .** correctly op
2d2a0 74 69 6d 69 7a 69 6e 67 20 6f 75 74 20 73 6f 72  timizing out sor
2d2b0 74 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53  ts..*/.case OP_S
2d2c0 6f 72 74 65 72 53 6f 72 74 3a 20 20 20 20 2f 2a  orterSort:    /*
2d2d0 20 6a 75 6d 70 20 2a 2f 0a 63 61 73 65 20 4f 50   jump */.case OP
2d2e0 5f 53 6f 72 74 3a 20 7b 20 20 20 20 20 20 20 20  _Sort: {        
2d2f0 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 23 69 66 64 65  /* jump */.#ifde
2d300 66 20 53 51 4c 49 54 45 5f 54 45 53 54 0a 20 20  f SQLITE_TEST.  
2d310 73 71 6c 69 74 65 33 5f 73 6f 72 74 5f 63 6f 75  sqlite3_sort_cou
2d320 6e 74 2b 2b 3b 0a 20 20 73 71 6c 69 74 65 33 5f  nt++;.  sqlite3_
2d330 73 65 61 72 63 68 5f 63 6f 75 6e 74 2d 2d 3b 0a  search_count--;.
2d340 23 65 6e 64 69 66 0a 20 20 70 2d 3e 61 43 6f 75  #endif.  p->aCou
2d350 6e 74 65 72 5b 53 51 4c 49 54 45 5f 53 54 4d 54  nter[SQLITE_STMT
2d360 53 54 41 54 55 53 5f 53 4f 52 54 5d 2b 2b 3b 0a  STATUS_SORT]++;.
2d370 20 20 2f 2a 20 46 61 6c 6c 20 74 68 72 6f 75 67    /* Fall throug
2d380 68 20 69 6e 74 6f 20 4f 50 5f 52 65 77 69 6e 64  h into OP_Rewind
2d390 20 2a 2f 0a 7d 0a 2f 2a 20 4f 70 63 6f 64 65 3a   */.}./* Opcode:
2d3a0 20 52 65 77 69 6e 64 20 50 31 20 50 32 20 2a 20   Rewind P1 P2 * 
2d3b0 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6e 65  * *.**.** The ne
2d3c0 78 74 20 75 73 65 20 6f 66 20 74 68 65 20 52 6f  xt use of the Ro
2d3d0 77 69 64 20 6f 72 20 43 6f 6c 75 6d 6e 20 6f 72  wid or Column or
2d3e0 20 4e 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f   Next instructio
2d3f0 6e 20 66 6f 72 20 50 31 20 0a 2a 2a 20 77 69 6c  n for P1 .** wil
2d400 6c 20 72 65 66 65 72 20 74 6f 20 74 68 65 20 66  l refer to the f
2d410 69 72 73 74 20 65 6e 74 72 79 20 69 6e 20 74 68  irst entry in th
2d420 65 20 64 61 74 61 62 61 73 65 20 74 61 62 6c 65  e database table
2d430 20 6f 72 20 69 6e 64 65 78 2e 0a 2a 2a 20 49 66   or index..** If
2d440 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20 69 6e   the table or in
2d450 64 65 78 20 69 73 20 65 6d 70 74 79 2c 20 6a 75  dex is empty, ju
2d460 6d 70 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 74  mp immediately t
2d470 6f 20 50 32 2e 0a 2a 2a 20 49 66 20 74 68 65 20  o P2..** If the 
2d480 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 69  table or index i
2d490 73 20 6e 6f 74 20 65 6d 70 74 79 2c 20 66 61 6c  s not empty, fal
2d4a0 6c 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65  l through to the
2d4b0 20 66 6f 6c 6c 6f 77 69 6e 67 20 0a 2a 2a 20 69   following .** i
2d4c0 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a  nstruction..**.*
2d4d0 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 6c 65  * This opcode le
2d4e0 61 76 65 73 20 74 68 65 20 63 75 72 73 6f 72 20  aves the cursor 
2d4f0 63 6f 6e 66 69 67 75 72 65 64 20 74 6f 20 6d 6f  configured to mo
2d500 76 65 20 69 6e 20 66 6f 72 77 61 72 64 20 6f 72  ve in forward or
2d510 64 65 72 2c 0a 2a 2a 20 66 72 6f 6d 20 74 68 65  der,.** from the
2d520 20 62 65 67 69 6e 6e 69 6e 67 20 74 6f 77 61 72   beginning towar
2d530 64 20 74 68 65 20 65 6e 64 2e 20 20 49 6e 20 6f  d the end.  In o
2d540 74 68 65 72 20 77 6f 72 64 73 2c 20 74 68 65 20  ther words, the 
2d550 63 75 72 73 6f 72 20 69 73 0a 2a 2a 20 63 6f 6e  cursor is.** con
2d560 66 69 67 75 72 65 64 20 74 6f 20 75 73 65 20 4e  figured to use N
2d570 65 78 74 2c 20 6e 6f 74 20 50 72 65 76 2e 0a 2a  ext, not Prev..*
2d580 2f 0a 63 61 73 65 20 4f 50 5f 52 65 77 69 6e 64  /.case OP_Rewind
2d590 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a 75  : {        /* ju
2d5a0 6d 70 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73  mp */.  VdbeCurs
2d5b0 6f 72 20 2a 70 43 3b 0a 20 20 42 74 43 75 72 73  or *pC;.  BtCurs
2d5c0 6f 72 20 2a 70 43 72 73 72 3b 0a 20 20 69 6e 74  or *pCrsr;.  int
2d5d0 20 72 65 73 3b 0a 0a 20 20 61 73 73 65 72 74 28   res;..  assert(
2d5e0 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70   pOp->p1>=0 && p
2d5f0 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f  Op->p1<p->nCurso
2d600 72 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  r );.  assert( p
2d610 4f 70 2d 3e 70 35 3d 3d 30 20 29 3b 0a 20 20 70  Op->p5==0 );.  p
2d620 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70  C = p->apCsr[pOp
2d630 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p1];.  assert(
2d640 20 70 43 21 3d 30 20 29 3b 0a 20 20 61 73 73 65   pC!=0 );.  asse
2d650 72 74 28 20 69 73 53 6f 72 74 65 72 28 70 43 29  rt( isSorter(pC)
2d660 3d 3d 28 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d  ==(pOp->opcode==
2d670 4f 50 5f 53 6f 72 74 65 72 53 6f 72 74 29 20 29  OP_SorterSort) )
2d680 3b 0a 20 20 72 65 73 20 3d 20 31 3b 0a 23 69 66  ;.  res = 1;.#if
2d690 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47  def SQLITE_DEBUG
2d6a0 0a 20 20 70 43 2d 3e 73 65 65 6b 4f 70 20 3d 20  .  pC->seekOp = 
2d6b0 4f 50 5f 52 65 77 69 6e 64 3b 0a 23 65 6e 64 69  OP_Rewind;.#endi
2d6c0 66 0a 20 20 69 66 28 20 69 73 53 6f 72 74 65 72  f.  if( isSorter
2d6d0 28 70 43 29 20 29 7b 0a 20 20 20 20 72 63 20 3d  (pC) ){.    rc =
2d6e0 20 73 71 6c 69 74 65 33 56 64 62 65 53 6f 72 74   sqlite3VdbeSort
2d6f0 65 72 52 65 77 69 6e 64 28 70 43 2c 20 26 72 65  erRewind(pC, &re
2d700 73 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  s);.  }else{.   
2d710 20 61 73 73 65 72 74 28 20 70 43 2d 3e 65 43 75   assert( pC->eCu
2d720 72 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f 42  rType==CURTYPE_B
2d730 54 52 45 45 20 29 3b 0a 20 20 20 20 70 43 72 73  TREE );.    pCrs
2d740 72 20 3d 20 70 43 2d 3e 75 63 2e 70 43 75 72 73  r = pC->uc.pCurs
2d750 6f 72 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20  or;.    assert( 
2d760 70 43 72 73 72 20 29 3b 0a 20 20 20 20 72 63 20  pCrsr );.    rc 
2d770 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 46 69  = sqlite3BtreeFi
2d780 72 73 74 28 70 43 72 73 72 2c 20 26 72 65 73 29  rst(pCrsr, &res)
2d790 3b 0a 20 20 20 20 70 43 2d 3e 64 65 66 65 72 72  ;.    pC->deferr
2d7a0 65 64 4d 6f 76 65 74 6f 20 3d 20 30 3b 0a 20 20  edMoveto = 0;.  
2d7b0 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75    pC->cacheStatu
2d7c0 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b  s = CACHE_STALE;
2d7d0 0a 20 20 7d 0a 20 20 69 66 28 20 72 63 20 29 20  .  }.  if( rc ) 
2d7e0 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
2d7f0 6f 5f 65 72 72 6f 72 3b 0a 20 20 70 43 2d 3e 6e  o_error;.  pC->n
2d800 75 6c 6c 52 6f 77 20 3d 20 28 75 38 29 72 65 73  ullRow = (u8)res
2d810 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
2d820 3e 70 32 3e 30 20 26 26 20 70 4f 70 2d 3e 70 32  >p2>0 && pOp->p2
2d830 3c 70 2d 3e 6e 4f 70 20 29 3b 0a 20 20 56 64 62  <p->nOp );.  Vdb
2d840 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 72 65 73  eBranchTaken(res
2d850 21 3d 30 2c 32 29 3b 0a 20 20 69 66 28 20 72 65  !=0,2);.  if( re
2d860 73 20 29 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f  s ) goto jump_to
2d870 5f 70 32 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  _p2;.  break;.}.
2d880 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 65 78 74  ./* Opcode: Next
2d890 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a   P1 P2 P3 P4 P5.
2d8a0 2a 2a 0a 2a 2a 20 41 64 76 61 6e 63 65 20 63 75  **.** Advance cu
2d8b0 72 73 6f 72 20 50 31 20 73 6f 20 74 68 61 74 20  rsor P1 so that 
2d8c0 69 74 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65  it points to the
2d8d0 20 6e 65 78 74 20 6b 65 79 2f 64 61 74 61 20 70   next key/data p
2d8e0 61 69 72 20 69 6e 20 69 74 73 0a 2a 2a 20 74 61  air in its.** ta
2d8f0 62 6c 65 20 6f 72 20 69 6e 64 65 78 2e 20 20 49  ble or index.  I
2d900 66 20 74 68 65 72 65 20 61 72 65 20 6e 6f 20 6d  f there are no m
2d910 6f 72 65 20 6b 65 79 2f 76 61 6c 75 65 20 70 61  ore key/value pa
2d920 69 72 73 20 74 68 65 6e 20 66 61 6c 6c 20 74 68  irs then fall th
2d930 72 6f 75 67 68 0a 2a 2a 20 74 6f 20 74 68 65 20  rough.** to the 
2d940 66 6f 6c 6c 6f 77 69 6e 67 20 69 6e 73 74 72 75  following instru
2d950 63 74 69 6f 6e 2e 20 20 42 75 74 20 69 66 20 74  ction.  But if t
2d960 68 65 20 63 75 72 73 6f 72 20 61 64 76 61 6e 63  he cursor advanc
2d970 65 20 77 61 73 20 73 75 63 63 65 73 73 66 75 6c  e was successful
2d980 2c 0a 2a 2a 20 6a 75 6d 70 20 69 6d 6d 65 64 69  ,.** jump immedi
2d990 61 74 65 6c 79 20 74 6f 20 50 32 2e 0a 2a 2a 0a  ately to P2..**.
2d9a0 2a 2a 20 54 68 65 20 4e 65 78 74 20 6f 70 63 6f  ** The Next opco
2d9b0 64 65 20 69 73 20 6f 6e 6c 79 20 76 61 6c 69 64  de is only valid
2d9c0 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 6e 20 53 65   following an Se
2d9d0 65 6b 47 54 2c 20 53 65 65 6b 47 45 2c 20 6f 72  ekGT, SeekGE, or
2d9e0 0a 2a 2a 20 4f 50 5f 52 65 77 69 6e 64 20 6f 70  .** OP_Rewind op
2d9f0 63 6f 64 65 20 75 73 65 64 20 74 6f 20 70 6f 73  code used to pos
2da00 69 74 69 6f 6e 20 74 68 65 20 63 75 72 73 6f 72  ition the cursor
2da10 2e 20 20 4e 65 78 74 20 69 73 20 6e 6f 74 20 61  .  Next is not a
2da20 6c 6c 6f 77 65 64 0a 2a 2a 20 74 6f 20 66 6f 6c  llowed.** to fol
2da30 6c 6f 77 20 53 65 65 6b 4c 54 2c 20 53 65 65 6b  low SeekLT, Seek
2da40 4c 45 2c 20 6f 72 20 4f 50 5f 4c 61 73 74 2e 0a  LE, or OP_Last..
2da50 2a 2a 0a 2a 2a 20 54 68 65 20 50 31 20 63 75 72  **.** The P1 cur
2da60 73 6f 72 20 6d 75 73 74 20 62 65 20 66 6f 72 20  sor must be for 
2da70 61 20 72 65 61 6c 20 74 61 62 6c 65 2c 20 6e 6f  a real table, no
2da80 74 20 61 20 70 73 65 75 64 6f 2d 74 61 62 6c 65  t a pseudo-table
2da90 2e 20 20 50 31 20 6d 75 73 74 20 68 61 76 65 0a  .  P1 must have.
2daa0 2a 2a 20 62 65 65 6e 20 6f 70 65 6e 65 64 20 70  ** been opened p
2dab0 72 69 6f 72 20 74 6f 20 74 68 69 73 20 6f 70 63  rior to this opc
2dac0 6f 64 65 20 6f 72 20 74 68 65 20 70 72 6f 67 72  ode or the progr
2dad0 61 6d 20 77 69 6c 6c 20 73 65 67 66 61 75 6c 74  am will segfault
2dae0 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 33 20 76  ..**.** The P3 v
2daf0 61 6c 75 65 20 69 73 20 61 20 68 69 6e 74 20 74  alue is a hint t
2db00 6f 20 74 68 65 20 62 74 72 65 65 20 69 6d 70 6c  o the btree impl
2db10 65 6d 65 6e 74 61 74 69 6f 6e 2e 20 49 66 20 50  ementation. If P
2db20 33 3d 3d 31 2c 20 74 68 61 74 0a 2a 2a 20 6d 65  3==1, that.** me
2db30 61 6e 73 20 50 31 20 69 73 20 61 6e 20 53 51 4c  ans P1 is an SQL
2db40 20 69 6e 64 65 78 20 61 6e 64 20 74 68 61 74 20   index and that 
2db50 74 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e  this instruction
2db60 20 63 6f 75 6c 64 20 68 61 76 65 20 62 65 65 6e   could have been
2db70 0a 2a 2a 20 6f 6d 69 74 74 65 64 20 69 66 20 74  .** omitted if t
2db80 68 61 74 20 69 6e 64 65 78 20 68 61 64 20 62 65  hat index had be
2db90 65 6e 20 75 6e 69 71 75 65 2e 20 20 50 33 20 69  en unique.  P3 i
2dba0 73 20 75 73 75 61 6c 6c 79 20 30 2e 20 20 50 33  s usually 0.  P3
2dbb0 20 69 73 0a 2a 2a 20 61 6c 77 61 79 73 20 65 69   is.** always ei
2dbc0 74 68 65 72 20 30 20 6f 72 20 31 2e 0a 2a 2a 0a  ther 0 or 1..**.
2dbd0 2a 2a 20 50 34 20 69 73 20 61 6c 77 61 79 73 20  ** P4 is always 
2dbe0 6f 66 20 74 79 70 65 20 50 34 5f 41 44 56 41 4e  of type P4_ADVAN
2dbf0 43 45 2e 20 54 68 65 20 66 75 6e 63 74 69 6f 6e  CE. The function
2dc00 20 70 6f 69 6e 74 65 72 20 70 6f 69 6e 74 73 20   pointer points 
2dc10 74 6f 0a 2a 2a 20 73 71 6c 69 74 65 33 42 74 72  to.** sqlite3Btr
2dc20 65 65 4e 65 78 74 28 29 2e 0a 2a 2a 0a 2a 2a 20  eeNext()..**.** 
2dc30 49 66 20 50 35 20 69 73 20 70 6f 73 69 74 69 76  If P5 is positiv
2dc40 65 20 61 6e 64 20 74 68 65 20 6a 75 6d 70 20 69  e and the jump i
2dc50 73 20 74 61 6b 65 6e 2c 20 74 68 65 6e 20 65 76  s taken, then ev
2dc60 65 6e 74 20 63 6f 75 6e 74 65 72 0a 2a 2a 20 6e  ent counter.** n
2dc70 75 6d 62 65 72 20 50 35 2d 31 20 69 6e 20 74 68  umber P5-1 in th
2dc80 65 20 70 72 65 70 61 72 65 64 20 73 74 61 74 65  e prepared state
2dc90 6d 65 6e 74 20 69 73 20 69 6e 63 72 65 6d 65 6e  ment is incremen
2dca0 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61  ted..**.** See a
2dcb0 6c 73 6f 3a 20 50 72 65 76 0a 2a 2f 0a 2f 2a 20  lso: Prev.*/./* 
2dcc0 4f 70 63 6f 64 65 3a 20 50 72 65 76 20 50 31 20  Opcode: Prev P1 
2dcd0 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a  P2 P3 P4 P5.**.*
2dce0 2a 20 42 61 63 6b 20 75 70 20 63 75 72 73 6f 72  * Back up cursor
2dcf0 20 50 31 20 73 6f 20 74 68 61 74 20 69 74 20 70   P1 so that it p
2dd00 6f 69 6e 74 73 20 74 6f 20 74 68 65 20 70 72 65  oints to the pre
2dd10 76 69 6f 75 73 20 6b 65 79 2f 64 61 74 61 20 70  vious key/data p
2dd20 61 69 72 20 69 6e 20 69 74 73 0a 2a 2a 20 74 61  air in its.** ta
2dd30 62 6c 65 20 6f 72 20 69 6e 64 65 78 2e 20 20 49  ble or index.  I
2dd40 66 20 74 68 65 72 65 20 69 73 20 6e 6f 20 70 72  f there is no pr
2dd50 65 76 69 6f 75 73 20 6b 65 79 2f 76 61 6c 75 65  evious key/value
2dd60 20 70 61 69 72 73 20 74 68 65 6e 20 66 61 6c 6c   pairs then fall
2dd70 20 74 68 72 6f 75 67 68 0a 2a 2a 20 74 6f 20 74   through.** to t
2dd80 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 69 6e 73  he following ins
2dd90 74 72 75 63 74 69 6f 6e 2e 20 20 42 75 74 20 69  truction.  But i
2dda0 66 20 74 68 65 20 63 75 72 73 6f 72 20 62 61 63  f the cursor bac
2ddb0 6b 75 70 20 77 61 73 20 73 75 63 63 65 73 73 66  kup was successf
2ddc0 75 6c 2c 0a 2a 2a 20 6a 75 6d 70 20 69 6d 6d 65  ul,.** jump imme
2ddd0 64 69 61 74 65 6c 79 20 74 6f 20 50 32 2e 0a 2a  diately to P2..*
2dde0 2a 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 72 65 76  *.**.** The Prev
2ddf0 20 6f 70 63 6f 64 65 20 69 73 20 6f 6e 6c 79 20   opcode is only 
2de00 76 61 6c 69 64 20 66 6f 6c 6c 6f 77 69 6e 67 20  valid following 
2de10 61 6e 20 53 65 65 6b 4c 54 2c 20 53 65 65 6b 4c  an SeekLT, SeekL
2de20 45 2c 20 6f 72 0a 2a 2a 20 4f 50 5f 4c 61 73 74  E, or.** OP_Last
2de30 20 6f 70 63 6f 64 65 20 75 73 65 64 20 74 6f 20   opcode used to 
2de40 70 6f 73 69 74 69 6f 6e 20 74 68 65 20 63 75 72  position the cur
2de50 73 6f 72 2e 20 20 50 72 65 76 20 69 73 20 6e 6f  sor.  Prev is no
2de60 74 20 61 6c 6c 6f 77 65 64 0a 2a 2a 20 74 6f 20  t allowed.** to 
2de70 66 6f 6c 6c 6f 77 20 53 65 65 6b 47 54 2c 20 53  follow SeekGT, S
2de80 65 65 6b 47 45 2c 20 6f 72 20 4f 50 5f 52 65 77  eekGE, or OP_Rew
2de90 69 6e 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50  ind..**.** The P
2dea0 31 20 63 75 72 73 6f 72 20 6d 75 73 74 20 62 65  1 cursor must be
2deb0 20 66 6f 72 20 61 20 72 65 61 6c 20 74 61 62 6c   for a real tabl
2dec0 65 2c 20 6e 6f 74 20 61 20 70 73 65 75 64 6f 2d  e, not a pseudo-
2ded0 74 61 62 6c 65 2e 20 20 49 66 20 50 31 20 69 73  table.  If P1 is
2dee0 0a 2a 2a 20 6e 6f 74 20 6f 70 65 6e 20 74 68 65  .** not open the
2def0 6e 20 74 68 65 20 62 65 68 61 76 69 6f 72 20 69  n the behavior i
2df00 73 20 75 6e 64 65 66 69 6e 65 64 2e 0a 2a 2a 0a  s undefined..**.
2df10 2a 2a 20 54 68 65 20 50 33 20 76 61 6c 75 65 20  ** The P3 value 
2df20 69 73 20 61 20 68 69 6e 74 20 74 6f 20 74 68 65  is a hint to the
2df30 20 62 74 72 65 65 20 69 6d 70 6c 65 6d 65 6e 74   btree implement
2df40 61 74 69 6f 6e 2e 20 49 66 20 50 33 3d 3d 31 2c  ation. If P3==1,
2df50 20 74 68 61 74 0a 2a 2a 20 6d 65 61 6e 73 20 50   that.** means P
2df60 31 20 69 73 20 61 6e 20 53 51 4c 20 69 6e 64 65  1 is an SQL inde
2df70 78 20 61 6e 64 20 74 68 61 74 20 74 68 69 73 20  x and that this 
2df80 69 6e 73 74 72 75 63 74 69 6f 6e 20 63 6f 75 6c  instruction coul
2df90 64 20 68 61 76 65 20 62 65 65 6e 0a 2a 2a 20 6f  d have been.** o
2dfa0 6d 69 74 74 65 64 20 69 66 20 74 68 61 74 20 69  mitted if that i
2dfb0 6e 64 65 78 20 68 61 64 20 62 65 65 6e 20 75 6e  ndex had been un
2dfc0 69 71 75 65 2e 20 20 50 33 20 69 73 20 75 73 75  ique.  P3 is usu
2dfd0 61 6c 6c 79 20 30 2e 20 20 50 33 20 69 73 0a 2a  ally 0.  P3 is.*
2dfe0 2a 20 61 6c 77 61 79 73 20 65 69 74 68 65 72 20  * always either 
2dff0 30 20 6f 72 20 31 2e 0a 2a 2a 0a 2a 2a 20 50 34  0 or 1..**.** P4
2e000 20 69 73 20 61 6c 77 61 79 73 20 6f 66 20 74 79   is always of ty
2e010 70 65 20 50 34 5f 41 44 56 41 4e 43 45 2e 20 54  pe P4_ADVANCE. T
2e020 68 65 20 66 75 6e 63 74 69 6f 6e 20 70 6f 69 6e  he function poin
2e030 74 65 72 20 70 6f 69 6e 74 73 20 74 6f 0a 2a 2a  ter points to.**
2e040 20 73 71 6c 69 74 65 33 42 74 72 65 65 50 72 65   sqlite3BtreePre
2e050 76 69 6f 75 73 28 29 2e 0a 2a 2a 0a 2a 2a 20 49  vious()..**.** I
2e060 66 20 50 35 20 69 73 20 70 6f 73 69 74 69 76 65  f P5 is positive
2e070 20 61 6e 64 20 74 68 65 20 6a 75 6d 70 20 69 73   and the jump is
2e080 20 74 61 6b 65 6e 2c 20 74 68 65 6e 20 65 76 65   taken, then eve
2e090 6e 74 20 63 6f 75 6e 74 65 72 0a 2a 2a 20 6e 75  nt counter.** nu
2e0a0 6d 62 65 72 20 50 35 2d 31 20 69 6e 20 74 68 65  mber P5-1 in the
2e0b0 20 70 72 65 70 61 72 65 64 20 73 74 61 74 65 6d   prepared statem
2e0c0 65 6e 74 20 69 73 20 69 6e 63 72 65 6d 65 6e 74  ent is increment
2e0d0 65 64 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65  ed..*/./* Opcode
2e0e0 3a 20 53 6f 72 74 65 72 4e 65 78 74 20 50 31 20  : SorterNext P1 
2e0f0 50 32 20 2a 20 2a 20 50 35 0a 2a 2a 0a 2a 2a 20  P2 * * P5.**.** 
2e100 54 68 69 73 20 6f 70 63 6f 64 65 20 77 6f 72 6b  This opcode work
2e110 73 20 6a 75 73 74 20 6c 69 6b 65 20 4f 50 5f 4e  s just like OP_N
2e120 65 78 74 20 65 78 63 65 70 74 20 74 68 61 74 20  ext except that 
2e130 50 31 20 6d 75 73 74 20 62 65 20 61 0a 2a 2a 20  P1 must be a.** 
2e140 73 6f 72 74 65 72 20 6f 62 6a 65 63 74 20 66 6f  sorter object fo
2e150 72 20 77 68 69 63 68 20 74 68 65 20 4f 50 5f 53  r which the OP_S
2e160 6f 72 74 65 72 53 6f 72 74 20 6f 70 63 6f 64 65  orterSort opcode
2e170 20 68 61 73 20 62 65 65 6e 0a 2a 2a 20 69 6e 76   has been.** inv
2e180 6f 6b 65 64 2e 20 20 54 68 69 73 20 6f 70 63 6f  oked.  This opco
2e190 64 65 20 61 64 76 61 6e 63 65 73 20 74 68 65 20  de advances the 
2e1a0 63 75 72 73 6f 72 20 74 6f 20 74 68 65 20 6e 65  cursor to the ne
2e1b0 78 74 20 73 6f 72 74 65 64 0a 2a 2a 20 72 65 63  xt sorted.** rec
2e1c0 6f 72 64 2c 20 6f 72 20 6a 75 6d 70 73 20 74 6f  ord, or jumps to
2e1d0 20 50 32 20 69 66 20 74 68 65 72 65 20 61 72 65   P2 if there are
2e1e0 20 6e 6f 20 6d 6f 72 65 20 73 6f 72 74 65 64 20   no more sorted 
2e1f0 72 65 63 6f 72 64 73 2e 0a 2a 2f 0a 63 61 73 65  records..*/.case
2e200 20 4f 50 5f 53 6f 72 74 65 72 4e 65 78 74 3a 20   OP_SorterNext: 
2e210 7b 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20  {  /* jump */.  
2e220 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a  VdbeCursor *pC;.
2e230 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72  .  pC = p->apCsr
2e240 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
2e250 65 72 74 28 20 69 73 53 6f 72 74 65 72 28 70 43  ert( isSorter(pC
2e260 29 20 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69  ) );.  rc = sqli
2e270 74 65 33 56 64 62 65 53 6f 72 74 65 72 4e 65 78  te3VdbeSorterNex
2e280 74 28 64 62 2c 20 70 43 29 3b 0a 20 20 67 6f 74  t(db, pC);.  got
2e290 6f 20 6e 65 78 74 5f 74 61 69 6c 3b 0a 63 61 73  o next_tail;.cas
2e2a0 65 20 4f 50 5f 50 72 65 76 3a 20 20 20 20 20 20  e OP_Prev:      
2e2b0 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 63      /* jump */.c
2e2c0 61 73 65 20 4f 50 5f 4e 65 78 74 3a 20 20 20 20  ase OP_Next:    
2e2d0 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f        /* jump */
2e2e0 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
2e2f0 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31  p1>=0 && pOp->p1
2e300 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20  <p->nCursor );. 
2e310 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 35   assert( pOp->p5
2e320 3c 41 72 72 61 79 53 69 7a 65 28 70 2d 3e 61 43  <ArraySize(p->aC
2e330 6f 75 6e 74 65 72 29 20 29 3b 0a 20 20 70 43 20  ounter) );.  pC 
2e340 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e  = p->apCsr[pOp->
2e350 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p1];.  assert( p
2e360 43 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  C!=0 );.  assert
2e370 28 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f  ( pC->deferredMo
2e380 76 65 74 6f 3d 3d 30 20 29 3b 0a 20 20 61 73 73  veto==0 );.  ass
2e390 65 72 74 28 20 70 43 2d 3e 65 43 75 72 54 79 70  ert( pC->eCurTyp
2e3a0 65 3d 3d 43 55 52 54 59 50 45 5f 42 54 52 45 45  e==CURTYPE_BTREE
2e3b0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   );.  assert( pO
2e3c0 70 2d 3e 6f 70 63 6f 64 65 21 3d 4f 50 5f 4e 65  p->opcode!=OP_Ne
2e3d0 78 74 20 7c 7c 20 70 4f 70 2d 3e 70 34 2e 78 41  xt || pOp->p4.xA
2e3e0 64 76 61 6e 63 65 3d 3d 73 71 6c 69 74 65 33 42  dvance==sqlite3B
2e3f0 74 72 65 65 4e 65 78 74 20 29 3b 0a 20 20 61 73  treeNext );.  as
2e400 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64  sert( pOp->opcod
2e410 65 21 3d 4f 50 5f 50 72 65 76 20 7c 7c 20 70 4f  e!=OP_Prev || pO
2e420 70 2d 3e 70 34 2e 78 41 64 76 61 6e 63 65 3d 3d  p->p4.xAdvance==
2e430 73 71 6c 69 74 65 33 42 74 72 65 65 50 72 65 76  sqlite3BtreePrev
2e440 69 6f 75 73 20 29 3b 0a 0a 20 20 2f 2a 20 54 68  ious );..  /* Th
2e450 65 20 4e 65 78 74 20 6f 70 63 6f 64 65 20 69 73  e Next opcode is
2e460 20 6f 6e 6c 79 20 75 73 65 64 20 61 66 74 65 72   only used after
2e470 20 53 65 65 6b 47 54 2c 20 53 65 65 6b 47 45 2c   SeekGT, SeekGE,
2e480 20 52 65 77 69 6e 64 2c 20 61 6e 64 20 46 6f 75   Rewind, and Fou
2e490 6e 64 2e 0a 20 20 2a 2a 20 54 68 65 20 50 72 65  nd..  ** The Pre
2e4a0 76 20 6f 70 63 6f 64 65 20 69 73 20 6f 6e 6c 79  v opcode is only
2e4b0 20 75 73 65 64 20 61 66 74 65 72 20 53 65 65 6b   used after Seek
2e4c0 4c 54 2c 20 53 65 65 6b 4c 45 2c 20 61 6e 64 20  LT, SeekLE, and 
2e4d0 4c 61 73 74 2e 20 2a 2f 0a 20 20 61 73 73 65 72  Last. */.  asser
2e4e0 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 21 3d  t( pOp->opcode!=
2e4f0 4f 50 5f 4e 65 78 74 0a 20 20 20 20 20 20 20 7c  OP_Next.       |
2e500 7c 20 70 43 2d 3e 73 65 65 6b 4f 70 3d 3d 4f 50  | pC->seekOp==OP
2e510 5f 53 65 65 6b 47 54 20 7c 7c 20 70 43 2d 3e 73  _SeekGT || pC->s
2e520 65 65 6b 4f 70 3d 3d 4f 50 5f 53 65 65 6b 47 45  eekOp==OP_SeekGE
2e530 0a 20 20 20 20 20 20 20 7c 7c 20 70 43 2d 3e 73  .       || pC->s
2e540 65 65 6b 4f 70 3d 3d 4f 50 5f 52 65 77 69 6e 64  eekOp==OP_Rewind
2e550 20 7c 7c 20 70 43 2d 3e 73 65 65 6b 4f 70 3d 3d   || pC->seekOp==
2e560 4f 50 5f 46 6f 75 6e 64 0a 20 20 20 20 20 20 20  OP_Found.       
2e570 7c 7c 20 70 43 2d 3e 73 65 65 6b 4f 70 3d 3d 4f  || pC->seekOp==O
2e580 50 5f 4e 75 6c 6c 52 6f 77 7c 7c 20 70 43 2d 3e  P_NullRow|| pC->
2e590 73 65 65 6b 4f 70 3d 3d 4f 50 5f 53 65 65 6b 52  seekOp==OP_SeekR
2e5a0 6f 77 69 64 0a 20 20 20 20 20 20 20 7c 7c 20 70  owid.       || p
2e5b0 43 2d 3e 73 65 65 6b 4f 70 3d 3d 4f 50 5f 49 66  C->seekOp==OP_If
2e5c0 4e 6f 48 6f 70 65 29 3b 0a 20 20 61 73 73 65 72  NoHope);.  asser
2e5d0 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 21 3d  t( pOp->opcode!=
2e5e0 4f 50 5f 50 72 65 76 0a 20 20 20 20 20 20 20 7c  OP_Prev.       |
2e5f0 7c 20 70 43 2d 3e 73 65 65 6b 4f 70 3d 3d 4f 50  | pC->seekOp==OP
2e600 5f 53 65 65 6b 4c 54 20 7c 7c 20 70 43 2d 3e 73  _SeekLT || pC->s
2e610 65 65 6b 4f 70 3d 3d 4f 50 5f 53 65 65 6b 4c 45  eekOp==OP_SeekLE
2e620 0a 20 20 20 20 20 20 20 7c 7c 20 70 43 2d 3e 73  .       || pC->s
2e630 65 65 6b 4f 70 3d 3d 4f 50 5f 4c 61 73 74 20 20  eekOp==OP_Last  
2e640 20 7c 7c 20 70 43 2d 3e 73 65 65 6b 4f 70 3d 3d   || pC->seekOp==
2e650 4f 50 5f 49 66 4e 6f 48 6f 70 65 0a 20 20 20 20  OP_IfNoHope.    
2e660 20 20 20 7c 7c 20 70 43 2d 3e 73 65 65 6b 4f 70     || pC->seekOp
2e670 3d 3d 4f 50 5f 4e 75 6c 6c 52 6f 77 29 3b 0a 0a  ==OP_NullRow);..
2e680 20 20 72 63 20 3d 20 70 4f 70 2d 3e 70 34 2e 78    rc = pOp->p4.x
2e690 41 64 76 61 6e 63 65 28 70 43 2d 3e 75 63 2e 70  Advance(pC->uc.p
2e6a0 43 75 72 73 6f 72 2c 20 70 4f 70 2d 3e 70 33 29  Cursor, pOp->p3)
2e6b0 3b 0a 6e 65 78 74 5f 74 61 69 6c 3a 0a 20 20 70  ;.next_tail:.  p
2e6c0 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d  C->cacheStatus =
2e6d0 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20   CACHE_STALE;.  
2e6e0 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28  VdbeBranchTaken(
2e6f0 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 2c 32 29  rc==SQLITE_OK,2)
2e700 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49  ;.  if( rc==SQLI
2e710 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 70 43 2d  TE_OK ){.    pC-
2e720 3e 6e 75 6c 6c 52 6f 77 20 3d 20 30 3b 0a 20 20  >nullRow = 0;.  
2e730 20 20 70 2d 3e 61 43 6f 75 6e 74 65 72 5b 70 4f    p->aCounter[pO
2e740 70 2d 3e 70 35 5d 2b 2b 3b 0a 23 69 66 64 65 66  p->p5]++;.#ifdef
2e750 20 53 51 4c 49 54 45 5f 54 45 53 54 0a 20 20 20   SQLITE_TEST.   
2e760 20 73 71 6c 69 74 65 33 5f 73 65 61 72 63 68 5f   sqlite3_search_
2e770 63 6f 75 6e 74 2b 2b 3b 0a 23 65 6e 64 69 66 0a  count++;.#endif.
2e780 20 20 20 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f      goto jump_to
2e790 5f 70 32 5f 61 6e 64 5f 63 68 65 63 6b 5f 66 6f  _p2_and_check_fo
2e7a0 72 5f 69 6e 74 65 72 72 75 70 74 3b 0a 20 20 7d  r_interrupt;.  }
2e7b0 0a 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54  .  if( rc!=SQLIT
2e7c0 45 5f 44 4f 4e 45 20 29 20 67 6f 74 6f 20 61 62  E_DONE ) goto ab
2e7d0 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
2e7e0 3b 0a 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f  ;.  rc = SQLITE_
2e7f0 4f 4b 3b 0a 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f  OK;.  pC->nullRo
2e800 77 20 3d 20 31 3b 0a 20 20 67 6f 74 6f 20 63 68  w = 1;.  goto ch
2e810 65 63 6b 5f 66 6f 72 5f 69 6e 74 65 72 72 75 70  eck_for_interrup
2e820 74 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  t;.}../* Opcode:
2e830 20 49 64 78 49 6e 73 65 72 74 20 50 31 20 50 32   IdxInsert P1 P2
2e840 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e   P3 P4 P5.** Syn
2e850 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50 32 5d  opsis: key=r[P2]
2e860 0a 2a 2a 0a 2a 2a 20 52 65 67 69 73 74 65 72 20  .**.** Register 
2e870 50 32 20 68 6f 6c 64 73 20 61 6e 20 53 51 4c 20  P2 holds an SQL 
2e880 69 6e 64 65 78 20 6b 65 79 20 6d 61 64 65 20 75  index key made u
2e890 73 69 6e 67 20 74 68 65 0a 2a 2a 20 4d 61 6b 65  sing the.** Make
2e8a0 52 65 63 6f 72 64 20 69 6e 73 74 72 75 63 74 69  Record instructi
2e8b0 6f 6e 73 2e 20 20 54 68 69 73 20 6f 70 63 6f 64  ons.  This opcod
2e8c0 65 20 77 72 69 74 65 73 20 74 68 61 74 20 6b 65  e writes that ke
2e8d0 79 0a 2a 2a 20 69 6e 74 6f 20 74 68 65 20 69 6e  y.** into the in
2e8e0 64 65 78 20 50 31 2e 20 20 44 61 74 61 20 66 6f  dex P1.  Data fo
2e8f0 72 20 74 68 65 20 65 6e 74 72 79 20 69 73 20 6e  r the entry is n
2e900 69 6c 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 34 20  il..**.** If P4 
2e910 69 73 20 6e 6f 74 20 7a 65 72 6f 2c 20 74 68 65  is not zero, the
2e920 6e 20 69 74 20 69 73 20 74 68 65 20 6e 75 6d 62  n it is the numb
2e930 65 72 20 6f 66 20 76 61 6c 75 65 73 20 69 6e 20  er of values in 
2e940 74 68 65 20 75 6e 70 61 63 6b 65 64 0a 2a 2a 20  the unpacked.** 
2e950 6b 65 79 20 6f 66 20 72 65 67 28 50 32 29 2e 20  key of reg(P2). 
2e960 20 49 6e 20 74 68 61 74 20 63 61 73 65 2c 20 50   In that case, P
2e970 33 20 69 73 20 74 68 65 20 69 6e 64 65 78 20 6f  3 is the index o
2e980 66 20 74 68 65 20 66 69 72 73 74 20 72 65 67 69  f the first regi
2e990 73 74 65 72 0a 2a 2a 20 66 6f 72 20 74 68 65 20  ster.** for the 
2e9a0 75 6e 70 61 63 6b 65 64 20 6b 65 79 2e 20 20 54  unpacked key.  T
2e9b0 68 65 20 61 76 61 69 6c 61 62 69 6c 69 74 79 20  he availability 
2e9c0 6f 66 20 74 68 65 20 75 6e 70 61 63 6b 65 64 20  of the unpacked 
2e9d0 6b 65 79 20 63 61 6e 20 73 6f 6d 65 74 69 6d 65  key can sometime
2e9e0 73 0a 2a 2a 20 62 65 20 61 6e 20 6f 70 74 69 6d  s.** be an optim
2e9f0 69 7a 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 49  ization..**.** I
2ea00 66 20 50 35 20 68 61 73 20 74 68 65 20 4f 50 46  f P5 has the OPF
2ea10 4c 41 47 5f 41 50 50 45 4e 44 20 62 69 74 20 73  LAG_APPEND bit s
2ea20 65 74 2c 20 74 68 61 74 20 69 73 20 61 20 68 69  et, that is a hi
2ea30 6e 74 20 74 6f 20 74 68 65 20 62 2d 74 72 65 65  nt to the b-tree
2ea40 20 6c 61 79 65 72 0a 2a 2a 20 74 68 61 74 20 74   layer.** that t
2ea50 68 69 73 20 69 6e 73 65 72 74 20 69 73 20 6c 69  his insert is li
2ea60 6b 65 6c 79 20 74 6f 20 62 65 20 61 6e 20 61 70  kely to be an ap
2ea70 70 65 6e 64 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50  pend..**.** If P
2ea80 35 20 68 61 73 20 74 68 65 20 4f 50 46 4c 41 47  5 has the OPFLAG
2ea90 5f 4e 43 48 41 4e 47 45 20 62 69 74 20 73 65 74  _NCHANGE bit set
2eaa0 2c 20 74 68 65 6e 20 74 68 65 20 63 68 61 6e 67  , then the chang
2eab0 65 20 63 6f 75 6e 74 65 72 20 69 73 0a 2a 2a 20  e counter is.** 
2eac0 69 6e 63 72 65 6d 65 6e 74 65 64 20 62 79 20 74  incremented by t
2ead0 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e  his instruction.
2eae0 20 20 49 66 20 74 68 65 20 4f 50 46 4c 41 47 5f    If the OPFLAG_
2eaf0 4e 43 48 41 4e 47 45 20 62 69 74 20 69 73 20 63  NCHANGE bit is c
2eb00 6c 65 61 72 2c 0a 2a 2a 20 74 68 65 6e 20 74 68  lear,.** then th
2eb10 65 20 63 68 61 6e 67 65 20 63 6f 75 6e 74 65 72  e change counter
2eb20 20 69 73 20 75 6e 63 68 61 6e 67 65 64 2e 0a 2a   is unchanged..*
2eb30 2a 0a 2a 2a 20 49 66 20 74 68 65 20 4f 50 46 4c  *.** If the OPFL
2eb40 41 47 5f 55 53 45 53 45 45 4b 52 45 53 55 4c 54  AG_USESEEKRESULT
2eb50 20 66 6c 61 67 20 6f 66 20 50 35 20 69 73 20 73   flag of P5 is s
2eb60 65 74 2c 20 74 68 65 20 69 6d 70 6c 65 6d 65 6e  et, the implemen
2eb70 74 61 74 69 6f 6e 20 6d 69 67 68 74 0a 2a 2a 20  tation might.** 
2eb80 72 75 6e 20 66 61 73 74 65 72 20 62 79 20 61 76  run faster by av
2eb90 6f 69 64 69 6e 67 20 61 6e 20 75 6e 6e 65 63 65  oiding an unnece
2eba0 73 73 61 72 79 20 73 65 65 6b 20 6f 6e 20 63 75  ssary seek on cu
2ebb0 72 73 6f 72 20 50 31 2e 20 20 48 6f 77 65 76 65  rsor P1.  Howeve
2ebc0 72 2c 0a 2a 2a 20 74 68 65 20 4f 50 46 4c 41 47  r,.** the OPFLAG
2ebd0 5f 55 53 45 53 45 45 4b 52 45 53 55 4c 54 20 66  _USESEEKRESULT f
2ebe0 6c 61 67 20 6d 75 73 74 20 6f 6e 6c 79 20 62 65  lag must only be
2ebf0 20 73 65 74 20 69 66 20 74 68 65 72 65 20 68 61   set if there ha
2ec00 76 65 20 62 65 65 6e 20 6e 6f 20 70 72 69 6f 72  ve been no prior
2ec10 0a 2a 2a 20 73 65 65 6b 73 20 6f 6e 20 74 68 65  .** seeks on the
2ec20 20 63 75 72 73 6f 72 20 6f 72 20 69 66 20 74 68   cursor or if th
2ec30 65 20 6d 6f 73 74 20 72 65 63 65 6e 74 20 73 65  e most recent se
2ec40 65 6b 20 75 73 65 64 20 61 20 6b 65 79 20 65 71  ek used a key eq
2ec50 75 69 76 61 6c 65 6e 74 0a 2a 2a 20 74 6f 20 50  uivalent.** to P
2ec60 32 2e 20 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 69  2. .**.** This i
2ec70 6e 73 74 72 75 63 74 69 6f 6e 20 6f 6e 6c 79 20  nstruction only 
2ec80 77 6f 72 6b 73 20 66 6f 72 20 69 6e 64 69 63 65  works for indice
2ec90 73 2e 20 20 54 68 65 20 65 71 75 69 76 61 6c 65  s.  The equivale
2eca0 6e 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 0a 2a  nt instruction.*
2ecb0 2a 20 66 6f 72 20 74 61 62 6c 65 73 20 69 73 20  * for tables is 
2ecc0 4f 50 5f 49 6e 73 65 72 74 2e 0a 2a 2f 0a 2f 2a  OP_Insert..*/./*
2ecd0 20 4f 70 63 6f 64 65 3a 20 53 6f 72 74 65 72 49   Opcode: SorterI
2ece0 6e 73 65 72 74 20 50 31 20 50 32 20 2a 20 2a 20  nsert P1 P2 * * 
2ecf0 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b  *.** Synopsis: k
2ed00 65 79 3d 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20 52  ey=r[P2].**.** R
2ed10 65 67 69 73 74 65 72 20 50 32 20 68 6f 6c 64 73  egister P2 holds
2ed20 20 61 6e 20 53 51 4c 20 69 6e 64 65 78 20 6b 65   an SQL index ke
2ed30 79 20 6d 61 64 65 20 75 73 69 6e 67 20 74 68 65  y made using the
2ed40 0a 2a 2a 20 4d 61 6b 65 52 65 63 6f 72 64 20 69  .** MakeRecord i
2ed50 6e 73 74 72 75 63 74 69 6f 6e 73 2e 20 20 54 68  nstructions.  Th
2ed60 69 73 20 6f 70 63 6f 64 65 20 77 72 69 74 65 73  is opcode writes
2ed70 20 74 68 61 74 20 6b 65 79 0a 2a 2a 20 69 6e 74   that key.** int
2ed80 6f 20 74 68 65 20 73 6f 72 74 65 72 20 50 31 2e  o the sorter P1.
2ed90 20 20 44 61 74 61 20 66 6f 72 20 74 68 65 20 65    Data for the e
2eda0 6e 74 72 79 20 69 73 20 6e 69 6c 2e 0a 2a 2f 0a  ntry is nil..*/.
2edb0 63 61 73 65 20 4f 50 5f 53 6f 72 74 65 72 49 6e  case OP_SorterIn
2edc0 73 65 72 74 3a 20 20 20 20 20 20 20 2f 2a 20 69  sert:       /* i
2edd0 6e 32 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 64  n2 */.case OP_Id
2ede0 78 49 6e 73 65 72 74 3a 20 7b 20 20 20 20 20 20  xInsert: {      
2edf0 20 20 2f 2a 20 69 6e 32 20 2a 2f 0a 20 20 56 64    /* in2 */.  Vd
2ee00 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20  beCursor *pC;.  
2ee10 42 74 72 65 65 50 61 79 6c 6f 61 64 20 78 3b 0a  BtreePayload x;.
2ee20 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
2ee30 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31  p1>=0 && pOp->p1
2ee40 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20  <p->nCursor );. 
2ee50 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70   pC = p->apCsr[p
2ee60 4f 70 2d 3e 70 31 5d 3b 0a 20 20 73 71 6c 69 74  Op->p1];.  sqlit
2ee70 65 33 56 64 62 65 49 6e 63 72 57 72 69 74 65 43  e3VdbeIncrWriteC
2ee80 6f 75 6e 74 65 72 28 70 2c 20 70 43 29 3b 0a 20  ounter(p, pC);. 
2ee90 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29   assert( pC!=0 )
2eea0 3b 0a 20 20 61 73 73 65 72 74 28 20 69 73 53 6f  ;.  assert( isSo
2eeb0 72 74 65 72 28 70 43 29 3d 3d 28 70 4f 70 2d 3e  rter(pC)==(pOp->
2eec0 6f 70 63 6f 64 65 3d 3d 4f 50 5f 53 6f 72 74 65  opcode==OP_Sorte
2eed0 72 49 6e 73 65 72 74 29 20 29 3b 0a 20 20 70 49  rInsert) );.  pI
2eee0 6e 32 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n2 = &aMem[pOp->
2eef0 70 32 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p2];.  assert( p
2ef00 49 6e 32 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  In2->flags & MEM
2ef10 5f 42 6c 6f 62 20 29 3b 0a 20 20 69 66 28 20 70  _Blob );.  if( p
2ef20 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f  Op->p5 & OPFLAG_
2ef30 4e 43 48 41 4e 47 45 20 29 20 70 2d 3e 6e 43 68  NCHANGE ) p->nCh
2ef40 61 6e 67 65 2b 2b 3b 0a 20 20 61 73 73 65 72 74  ange++;.  assert
2ef50 28 20 70 43 2d 3e 65 43 75 72 54 79 70 65 3d 3d  ( pC->eCurType==
2ef60 43 55 52 54 59 50 45 5f 42 54 52 45 45 20 7c 7c  CURTYPE_BTREE ||
2ef70 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50   pOp->opcode==OP
2ef80 5f 53 6f 72 74 65 72 49 6e 73 65 72 74 20 29 3b  _SorterInsert );
2ef90 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69  .  assert( pC->i
2efa0 73 54 61 62 6c 65 3d 3d 30 20 29 3b 0a 20 20 72  sTable==0 );.  r
2efb0 63 20 3d 20 45 78 70 61 6e 64 42 6c 6f 62 28 70  c = ExpandBlob(p
2efc0 49 6e 32 29 3b 0a 20 20 69 66 28 20 72 63 20 29  In2);.  if( rc )
2efd0 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
2efe0 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 69 66 28 20  to_error;.  if( 
2eff0 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  pOp->opcode==OP_
2f000 53 6f 72 74 65 72 49 6e 73 65 72 74 20 29 7b 0a  SorterInsert ){.
2f010 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
2f020 56 64 62 65 53 6f 72 74 65 72 57 72 69 74 65 28  VdbeSorterWrite(
2f030 70 43 2c 20 70 49 6e 32 29 3b 0a 20 20 7d 65 6c  pC, pIn2);.  }el
2f040 73 65 7b 0a 20 20 20 20 78 2e 6e 4b 65 79 20 3d  se{.    x.nKey =
2f050 20 70 49 6e 32 2d 3e 6e 3b 0a 20 20 20 20 78 2e   pIn2->n;.    x.
2f060 70 4b 65 79 20 3d 20 70 49 6e 32 2d 3e 7a 3b 0a  pKey = pIn2->z;.
2f070 20 20 20 20 78 2e 61 4d 65 6d 20 3d 20 61 4d 65      x.aMem = aMe
2f080 6d 20 2b 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 20  m + pOp->p3;.   
2f090 20 78 2e 6e 4d 65 6d 20 3d 20 28 75 31 36 29 70   x.nMem = (u16)p
2f0a0 4f 70 2d 3e 70 34 2e 69 3b 0a 20 20 20 20 72 63  Op->p4.i;.    rc
2f0b0 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 49   = sqlite3BtreeI
2f0c0 6e 73 65 72 74 28 70 43 2d 3e 75 63 2e 70 43 75  nsert(pC->uc.pCu
2f0d0 72 73 6f 72 2c 20 26 78 2c 0a 20 20 20 20 20 20  rsor, &x,.      
2f0e0 20 20 20 28 70 4f 70 2d 3e 70 35 20 26 20 28 4f     (pOp->p5 & (O
2f0f0 50 46 4c 41 47 5f 41 50 50 45 4e 44 7c 4f 50 46  PFLAG_APPEND|OPF
2f100 4c 41 47 5f 53 41 56 45 50 4f 53 49 54 49 4f 4e  LAG_SAVEPOSITION
2f110 29 29 2c 20 0a 20 20 20 20 20 20 20 20 28 28 70  )), .        ((p
2f120 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f  Op->p5 & OPFLAG_
2f130 55 53 45 53 45 45 4b 52 45 53 55 4c 54 29 20 3f  USESEEKRESULT) ?
2f140 20 70 43 2d 3e 73 65 65 6b 52 65 73 75 6c 74 20   pC->seekResult 
2f150 3a 20 30 29 0a 20 20 20 20 20 20 20 20 29 3b 0a  : 0).        );.
2f160 20 20 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e      assert( pC->
2f170 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 3d 3d  deferredMoveto==
2f180 30 20 29 3b 0a 20 20 20 20 70 43 2d 3e 63 61 63  0 );.    pC->cac
2f190 68 65 53 74 61 74 75 73 20 3d 20 43 41 43 48 45  heStatus = CACHE
2f1a0 5f 53 54 41 4c 45 3b 0a 20 20 7d 0a 20 20 69 66  _STALE;.  }.  if
2f1b0 28 20 72 63 29 20 67 6f 74 6f 20 61 62 6f 72 74  ( rc) goto abort
2f1c0 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20  _due_to_error;. 
2f1d0 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
2f1e0 63 6f 64 65 3a 20 49 64 78 44 65 6c 65 74 65 20  code: IdxDelete 
2f1f0 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20  P1 P2 P3 * *.** 
2f200 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b  Synopsis: key=r[
2f210 50 32 40 50 33 5d 0a 2a 2a 0a 2a 2a 20 54 68 65  P2@P3].**.** The
2f220 20 63 6f 6e 74 65 6e 74 20 6f 66 20 50 33 20 72   content of P3 r
2f230 65 67 69 73 74 65 72 73 20 73 74 61 72 74 69 6e  egisters startin
2f240 67 20 61 74 20 72 65 67 69 73 74 65 72 20 50 32  g at register P2
2f250 20 66 6f 72 6d 0a 2a 2a 20 61 6e 20 75 6e 70 61   form.** an unpa
2f260 63 6b 65 64 20 69 6e 64 65 78 20 6b 65 79 2e 20  cked index key. 
2f270 54 68 69 73 20 6f 70 63 6f 64 65 20 72 65 6d 6f  This opcode remo
2f280 76 65 73 20 74 68 61 74 20 65 6e 74 72 79 20 66  ves that entry f
2f290 72 6f 6d 20 74 68 65 20 0a 2a 2a 20 69 6e 64 65  rom the .** inde
2f2a0 78 20 6f 70 65 6e 65 64 20 62 79 20 63 75 72 73  x opened by curs
2f2b0 6f 72 20 50 31 2e 0a 2a 2f 0a 63 61 73 65 20 4f  or P1..*/.case O
2f2c0 50 5f 49 64 78 44 65 6c 65 74 65 3a 20 7b 0a 20  P_IdxDelete: {. 
2f2d0 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b   VdbeCursor *pC;
2f2e0 0a 20 20 42 74 43 75 72 73 6f 72 20 2a 70 43 72  .  BtCursor *pCr
2f2f0 73 72 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a 20  sr;.  int res;. 
2f300 20 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 20   UnpackedRecord 
2f310 72 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f  r;..  assert( pO
2f320 70 2d 3e 70 33 3e 30 20 29 3b 0a 20 20 61 73 73  p->p3>0 );.  ass
2f330 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e 30 20 26  ert( pOp->p2>0 &
2f340 26 20 70 4f 70 2d 3e 70 32 2b 70 4f 70 2d 3e 70  & pOp->p2+pOp->p
2f350 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20  3<=(p->nMem+1 - 
2f360 70 2d 3e 6e 43 75 72 73 6f 72 29 2b 31 20 29 3b  p->nCursor)+1 );
2f370 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
2f380 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31  p1>=0 && pOp->p1
2f390 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20  <p->nCursor );. 
2f3a0 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70   pC = p->apCsr[p
2f3b0 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72  Op->p1];.  asser
2f3c0 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 61 73  t( pC!=0 );.  as
2f3d0 73 65 72 74 28 20 70 43 2d 3e 65 43 75 72 54 79  sert( pC->eCurTy
2f3e0 70 65 3d 3d 43 55 52 54 59 50 45 5f 42 54 52 45  pe==CURTYPE_BTRE
2f3f0 45 20 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64  E );.  sqlite3Vd
2f400 62 65 49 6e 63 72 57 72 69 74 65 43 6f 75 6e 74  beIncrWriteCount
2f410 65 72 28 70 2c 20 70 43 29 3b 0a 20 20 70 43 72  er(p, pC);.  pCr
2f420 73 72 20 3d 20 70 43 2d 3e 75 63 2e 70 43 75 72  sr = pC->uc.pCur
2f430 73 6f 72 3b 0a 20 20 61 73 73 65 72 74 28 20 70  sor;.  assert( p
2f440 43 72 73 72 21 3d 30 20 29 3b 0a 20 20 61 73 73  Crsr!=0 );.  ass
2f450 65 72 74 28 20 70 4f 70 2d 3e 70 35 3d 3d 30 20  ert( pOp->p5==0 
2f460 29 3b 0a 20 20 72 2e 70 4b 65 79 49 6e 66 6f 20  );.  r.pKeyInfo 
2f470 3d 20 70 43 2d 3e 70 4b 65 79 49 6e 66 6f 3b 0a  = pC->pKeyInfo;.
2f480 20 20 72 2e 6e 46 69 65 6c 64 20 3d 20 28 75 31    r.nField = (u1
2f490 36 29 70 4f 70 2d 3e 70 33 3b 0a 20 20 72 2e 64  6)pOp->p3;.  r.d
2f4a0 65 66 61 75 6c 74 5f 72 63 20 3d 20 30 3b 0a 20  efault_rc = 0;. 
2f4b0 20 72 2e 61 4d 65 6d 20 3d 20 26 61 4d 65 6d 5b   r.aMem = &aMem[
2f4c0 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 72 63 20 3d  pOp->p2];.  rc =
2f4d0 20 73 71 6c 69 74 65 33 42 74 72 65 65 4d 6f 76   sqlite3BtreeMov
2f4e0 65 74 6f 55 6e 70 61 63 6b 65 64 28 70 43 72 73  etoUnpacked(pCrs
2f4f0 72 2c 20 26 72 2c 20 30 2c 20 30 2c 20 26 72 65  r, &r, 0, 0, &re
2f500 73 29 3b 0a 20 20 69 66 28 20 72 63 20 29 20 67  s);.  if( rc ) g
2f510 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
2f520 5f 65 72 72 6f 72 3b 0a 20 20 69 66 28 20 72 65  _error;.  if( re
2f530 73 3d 3d 30 20 29 7b 0a 20 20 20 20 72 63 20 3d  s==0 ){.    rc =
2f540 20 73 71 6c 69 74 65 33 42 74 72 65 65 44 65 6c   sqlite3BtreeDel
2f550 65 74 65 28 70 43 72 73 72 2c 20 42 54 52 45 45  ete(pCrsr, BTREE
2f560 5f 41 55 58 44 45 4c 45 54 45 29 3b 0a 20 20 20  _AUXDELETE);.   
2f570 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61   if( rc ) goto a
2f580 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
2f590 72 3b 0a 20 20 7d 0a 20 20 61 73 73 65 72 74 28  r;.  }.  assert(
2f5a0 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76   pC->deferredMov
2f5b0 65 74 6f 3d 3d 30 20 29 3b 0a 20 20 70 43 2d 3e  eto==0 );.  pC->
2f5c0 63 61 63 68 65 53 74 61 74 75 73 20 3d 20 43 41  cacheStatus = CA
2f5d0 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20 70 43 2d  CHE_STALE;.  pC-
2f5e0 3e 73 65 65 6b 52 65 73 75 6c 74 20 3d 20 30 3b  >seekResult = 0;
2f5f0 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
2f600 4f 70 63 6f 64 65 3a 20 44 65 66 65 72 72 65 64  Opcode: Deferred
2f610 53 65 65 6b 20 50 31 20 2a 20 50 33 20 50 34 20  Seek P1 * P3 P4 
2f620 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 4d  *.** Synopsis: M
2f630 6f 76 65 20 50 33 20 74 6f 20 50 31 2e 72 6f 77  ove P3 to P1.row
2f640 69 64 20 69 66 20 6e 65 65 64 65 64 0a 2a 2a 0a  id if needed.**.
2f650 2a 2a 20 50 31 20 69 73 20 61 6e 20 6f 70 65 6e  ** P1 is an open
2f660 20 69 6e 64 65 78 20 63 75 72 73 6f 72 20 61 6e   index cursor an
2f670 64 20 50 33 20 69 73 20 61 20 63 75 72 73 6f 72  d P3 is a cursor
2f680 20 6f 6e 20 74 68 65 20 63 6f 72 72 65 73 70 6f   on the correspo
2f690 6e 64 69 6e 67 0a 2a 2a 20 74 61 62 6c 65 2e 20  nding.** table. 
2f6a0 20 54 68 69 73 20 6f 70 63 6f 64 65 20 64 6f 65   This opcode doe
2f6b0 73 20 61 20 64 65 66 65 72 72 65 64 20 73 65 65  s a deferred see
2f6c0 6b 20 6f 66 20 74 68 65 20 50 33 20 74 61 62 6c  k of the P3 tabl
2f6d0 65 20 63 75 72 73 6f 72 0a 2a 2a 20 74 6f 20 74  e cursor.** to t
2f6e0 68 65 20 72 6f 77 20 74 68 61 74 20 63 6f 72 72  he row that corr
2f6f0 65 73 70 6f 6e 64 73 20 74 6f 20 74 68 65 20 63  esponds to the c
2f700 75 72 72 65 6e 74 20 72 6f 77 20 6f 66 20 50 31  urrent row of P1
2f710 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 73 20  ..**.** This is 
2f720 61 20 64 65 66 65 72 72 65 64 20 73 65 65 6b 2e  a deferred seek.
2f730 20 20 4e 6f 74 68 69 6e 67 20 61 63 74 75 61 6c    Nothing actual
2f740 6c 79 20 68 61 70 70 65 6e 73 20 75 6e 74 69 6c  ly happens until
2f750 0a 2a 2a 20 74 68 65 20 63 75 72 73 6f 72 20 69  .** the cursor i
2f760 73 20 75 73 65 64 20 74 6f 20 72 65 61 64 20 61  s used to read a
2f770 20 72 65 63 6f 72 64 2e 20 20 54 68 61 74 20 77   record.  That w
2f780 61 79 2c 20 69 66 20 6e 6f 20 72 65 61 64 73 0a  ay, if no reads.
2f790 2a 2a 20 6f 63 63 75 72 2c 20 6e 6f 20 75 6e 6e  ** occur, no unn
2f7a0 65 63 65 73 73 61 72 79 20 49 2f 4f 20 68 61 70  ecessary I/O hap
2f7b0 70 65 6e 73 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 6d  pens..**.** P4 m
2f7c0 61 79 20 62 65 20 61 6e 20 61 72 72 61 79 20 6f  ay be an array o
2f7d0 66 20 69 6e 74 65 67 65 72 73 20 28 74 79 70 65  f integers (type
2f7e0 20 50 34 5f 49 4e 54 41 52 52 41 59 29 20 63 6f   P4_INTARRAY) co
2f7f0 6e 74 61 69 6e 69 6e 67 0a 2a 2a 20 6f 6e 65 20  ntaining.** one 
2f800 65 6e 74 72 79 20 66 6f 72 20 65 61 63 68 20 63  entry for each c
2f810 6f 6c 75 6d 6e 20 69 6e 20 74 68 65 20 50 33 20  olumn in the P3 
2f820 74 61 62 6c 65 2e 20 20 49 66 20 61 72 72 61 79  table.  If array
2f830 20 65 6e 74 72 79 20 61 28 69 29 0a 2a 2a 20 69   entry a(i).** i
2f840 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65 6e  s non-zero, then
2f850 20 72 65 61 64 69 6e 67 20 63 6f 6c 75 6d 6e 20   reading column 
2f860 61 28 69 29 2d 31 20 66 72 6f 6d 20 63 75 72 73  a(i)-1 from curs
2f870 6f 72 20 50 33 20 69 73 20 0a 2a 2a 20 65 71 75  or P3 is .** equ
2f880 69 76 61 6c 65 6e 74 20 74 6f 20 70 65 72 66 6f  ivalent to perfo
2f890 72 6d 69 6e 67 20 74 68 65 20 64 65 66 65 72 72  rming the deferr
2f8a0 65 64 20 73 65 65 6b 20 61 6e 64 20 74 68 65 6e  ed seek and then
2f8b0 20 72 65 61 64 69 6e 67 20 63 6f 6c 75 6d 6e 20   reading column 
2f8c0 69 20 0a 2a 2a 20 66 72 6f 6d 20 50 31 2e 20 20  i .** from P1.  
2f8d0 54 68 69 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  This information
2f8e0 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 50 33   is stored in P3
2f8f0 20 61 6e 64 20 75 73 65 64 20 74 6f 20 72 65 64   and used to red
2f900 69 72 65 63 74 0a 2a 2a 20 72 65 61 64 73 20 61  irect.** reads a
2f910 67 61 69 6e 73 74 20 50 33 20 6f 76 65 72 20 74  gainst P3 over t
2f920 6f 20 50 31 2c 20 74 68 75 73 20 70 6f 73 73 69  o P1, thus possi
2f930 62 6c 79 20 61 76 6f 69 64 69 6e 67 20 74 68 65  bly avoiding the
2f940 20 6e 65 65 64 20 74 6f 0a 2a 2a 20 73 65 65 6b   need to.** seek
2f950 20 61 6e 64 20 72 65 61 64 20 63 75 72 73 6f 72   and read cursor
2f960 20 50 33 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64   P3..*/./* Opcod
2f970 65 3a 20 49 64 78 52 6f 77 69 64 20 50 31 20 50  e: IdxRowid P1 P
2f980 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70  2 * * *.** Synop
2f990 73 69 73 3a 20 72 5b 50 32 5d 3d 72 6f 77 69 64  sis: r[P2]=rowid
2f9a0 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 69 6e 74  .**.** Write int
2f9b0 6f 20 72 65 67 69 73 74 65 72 20 50 32 20 61 6e  o register P2 an
2f9c0 20 69 6e 74 65 67 65 72 20 77 68 69 63 68 20 69   integer which i
2f9d0 73 20 74 68 65 20 6c 61 73 74 20 65 6e 74 72 79  s the last entry
2f9e0 20 69 6e 20 74 68 65 20 72 65 63 6f 72 64 20 61   in the record a
2f9f0 74 0a 2a 2a 20 74 68 65 20 65 6e 64 20 6f 66 20  t.** the end of 
2fa00 74 68 65 20 69 6e 64 65 78 20 6b 65 79 20 70 6f  the index key po
2fa10 69 6e 74 65 64 20 74 6f 20 62 79 20 63 75 72 73  inted to by curs
2fa20 6f 72 20 50 31 2e 20 20 54 68 69 73 20 69 6e 74  or P1.  This int
2fa30 65 67 65 72 20 73 68 6f 75 6c 64 20 62 65 0a 2a  eger should be.*
2fa40 2a 20 74 68 65 20 72 6f 77 69 64 20 6f 66 20 74  * the rowid of t
2fa50 68 65 20 74 61 62 6c 65 20 65 6e 74 72 79 20 74  he table entry t
2fa60 6f 20 77 68 69 63 68 20 74 68 69 73 20 69 6e 64  o which this ind
2fa70 65 78 20 65 6e 74 72 79 20 70 6f 69 6e 74 73 2e  ex entry points.
2fa80 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a  .**.** See also:
2fa90 20 52 6f 77 69 64 2c 20 4d 61 6b 65 52 65 63 6f   Rowid, MakeReco
2faa0 72 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 44  rd..*/.case OP_D
2fab0 65 66 65 72 72 65 64 53 65 65 6b 3a 0a 63 61 73  eferredSeek:.cas
2fac0 65 20 4f 50 5f 49 64 78 52 6f 77 69 64 3a 20 7b  e OP_IdxRowid: {
2fad0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75             /* ou
2fae0 74 32 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73  t2 */.  VdbeCurs
2faf0 6f 72 20 2a 70 43 3b 20 20 20 20 20 20 20 20 20  or *pC;         
2fb00 20 20 20 20 2f 2a 20 54 68 65 20 50 31 20 69 6e      /* The P1 in
2fb10 64 65 78 20 63 75 72 73 6f 72 20 2a 2f 0a 20 20  dex cursor */.  
2fb20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 54 61 62  VdbeCursor *pTab
2fb30 43 75 72 3b 20 20 20 20 20 20 20 20 2f 2a 20 54  Cur;        /* T
2fb40 68 65 20 50 32 20 74 61 62 6c 65 20 63 75 72 73  he P2 table curs
2fb50 6f 72 20 28 4f 50 5f 44 65 66 65 72 72 65 64 53  or (OP_DeferredS
2fb60 65 65 6b 20 6f 6e 6c 79 29 20 2a 2f 0a 20 20 69  eek only) */.  i
2fb70 36 34 20 72 6f 77 69 64 3b 20 20 20 20 20 20 20  64 rowid;       
2fb80 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 6f             /* Ro
2fb90 77 69 64 20 74 68 61 74 20 50 31 20 63 75 72 72  wid that P1 curr
2fba0 65 6e 74 20 70 6f 69 6e 74 73 20 74 6f 20 2a 2f  ent points to */
2fbb0 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ..  assert( pOp-
2fbc0 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70  >p1>=0 && pOp->p
2fbd0 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a  1<p->nCursor );.
2fbe0 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b    pC = p->apCsr[
2fbf0 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65  pOp->p1];.  asse
2fc00 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 61  rt( pC!=0 );.  a
2fc10 73 73 65 72 74 28 20 70 43 2d 3e 65 43 75 72 54  ssert( pC->eCurT
2fc20 79 70 65 3d 3d 43 55 52 54 59 50 45 5f 42 54 52  ype==CURTYPE_BTR
2fc30 45 45 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  EE );.  assert( 
2fc40 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 21 3d  pC->uc.pCursor!=
2fc50 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  0 );.  assert( p
2fc60 43 2d 3e 69 73 54 61 62 6c 65 3d 3d 30 20 29 3b  C->isTable==0 );
2fc70 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 64  .  assert( pC->d
2fc80 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 3d 3d 30  eferredMoveto==0
2fc90 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 21 70   );.  assert( !p
2fca0 43 2d 3e 6e 75 6c 6c 52 6f 77 20 7c 7c 20 70 4f  C->nullRow || pO
2fcb0 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 64  p->opcode==OP_Id
2fcc0 78 52 6f 77 69 64 20 29 3b 0a 0a 20 20 2f 2a 20  xRowid );..  /* 
2fcd0 54 68 65 20 49 64 78 52 6f 77 69 64 20 61 6e 64  The IdxRowid and
2fce0 20 53 65 65 6b 20 6f 70 63 6f 64 65 73 20 61 72   Seek opcodes ar
2fcf0 65 20 63 6f 6d 62 69 6e 65 64 20 62 65 63 61 75  e combined becau
2fd00 73 65 20 6f 66 20 74 68 65 20 63 6f 6d 6d 6f 6e  se of the common
2fd10 61 6c 69 74 79 0a 20 20 2a 2a 20 6f 66 20 73 71  ality.  ** of sq
2fd20 6c 69 74 65 33 56 64 62 65 43 75 72 73 6f 72 52  lite3VdbeCursorR
2fd30 65 73 74 6f 72 65 28 29 20 61 6e 64 20 73 71 6c  estore() and sql
2fd40 69 74 65 33 56 64 62 65 49 64 78 52 6f 77 69 64  ite3VdbeIdxRowid
2fd50 28 29 2e 20 2a 2f 0a 20 20 72 63 20 3d 20 73 71  (). */.  rc = sq
2fd60 6c 69 74 65 33 56 64 62 65 43 75 72 73 6f 72 52  lite3VdbeCursorR
2fd70 65 73 74 6f 72 65 28 70 43 29 3b 0a 0a 20 20 2f  estore(pC);..  /
2fd80 2a 20 73 71 6c 69 74 65 33 56 62 65 43 75 72 73  * sqlite3VbeCurs
2fd90 6f 72 52 65 73 74 6f 72 65 28 29 20 63 61 6e 20  orRestore() can 
2fda0 6f 6e 6c 79 20 66 61 69 6c 20 69 66 20 74 68 65  only fail if the
2fdb0 20 72 65 63 6f 72 64 20 68 61 73 20 62 65 65 6e   record has been
2fdc0 20 64 65 6c 65 74 65 64 0a 20 20 2a 2a 20 6f 75   deleted.  ** ou
2fdd0 74 20 66 72 6f 6d 20 75 6e 64 65 72 20 74 68 65  t from under the
2fde0 20 63 75 72 73 6f 72 2e 20 20 54 68 61 74 20 77   cursor.  That w
2fdf0 69 6c 6c 20 6e 65 76 65 72 20 68 61 70 70 65 6e  ill never happen
2fe00 73 20 66 6f 72 20 61 6e 20 49 64 78 52 6f 77 69  s for an IdxRowi
2fe10 64 0a 20 20 2a 2a 20 6f 72 20 53 65 65 6b 20 6f  d.  ** or Seek o
2fe20 70 63 6f 64 65 20 2a 2f 0a 20 20 69 66 28 20 4e  pcode */.  if( N
2fe30 45 56 45 52 28 72 63 21 3d 53 51 4c 49 54 45 5f  EVER(rc!=SQLITE_
2fe40 4f 4b 29 20 29 20 67 6f 74 6f 20 61 62 6f 72 74  OK) ) goto abort
2fe50 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 0a  _due_to_error;..
2fe60 20 20 69 66 28 20 21 70 43 2d 3e 6e 75 6c 6c 52    if( !pC->nullR
2fe70 6f 77 20 29 7b 0a 20 20 20 20 72 6f 77 69 64 20  ow ){.    rowid 
2fe80 3d 20 30 3b 20 20 2f 2a 20 4e 6f 74 20 6e 65 65  = 0;  /* Not nee
2fe90 64 65 64 2e 20 20 4f 6e 6c 79 20 75 73 65 64 20  ded.  Only used 
2fea0 74 6f 20 73 69 6c 65 6e 63 65 20 61 20 77 61 72  to silence a war
2feb0 6e 69 6e 67 2e 20 2a 2f 0a 20 20 20 20 72 63 20  ning. */.    rc 
2fec0 3d 20 73 71 6c 69 74 65 33 56 64 62 65 49 64 78  = sqlite3VdbeIdx
2fed0 52 6f 77 69 64 28 64 62 2c 20 70 43 2d 3e 75 63  Rowid(db, pC->uc
2fee0 2e 70 43 75 72 73 6f 72 2c 20 26 72 6f 77 69 64  .pCursor, &rowid
2fef0 29 3b 0a 20 20 20 20 69 66 28 20 72 63 21 3d 53  );.    if( rc!=S
2ff00 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20  QLITE_OK ){.    
2ff10 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65    goto abort_due
2ff20 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 7d  _to_error;.    }
2ff30 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70  .    if( pOp->op
2ff40 63 6f 64 65 3d 3d 4f 50 5f 44 65 66 65 72 72 65  code==OP_Deferre
2ff50 64 53 65 65 6b 20 29 7b 0a 20 20 20 20 20 20 61  dSeek ){.      a
2ff60 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 3d  ssert( pOp->p3>=
2ff70 30 20 26 26 20 70 4f 70 2d 3e 70 33 3c 70 2d 3e  0 && pOp->p3<p->
2ff80 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 20 20 20  nCursor );.     
2ff90 20 70 54 61 62 43 75 72 20 3d 20 70 2d 3e 61 70   pTabCur = p->ap
2ffa0 43 73 72 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20  Csr[pOp->p3];.  
2ffb0 20 20 20 20 61 73 73 65 72 74 28 20 70 54 61 62      assert( pTab
2ffc0 43 75 72 21 3d 30 20 29 3b 0a 20 20 20 20 20 20  Cur!=0 );.      
2ffd0 61 73 73 65 72 74 28 20 70 54 61 62 43 75 72 2d  assert( pTabCur-
2ffe0 3e 65 43 75 72 54 79 70 65 3d 3d 43 55 52 54 59  >eCurType==CURTY
2fff0 50 45 5f 42 54 52 45 45 20 29 3b 0a 20 20 20 20  PE_BTREE );.    
30000 20 20 61 73 73 65 72 74 28 20 70 54 61 62 43 75    assert( pTabCu
30010 72 2d 3e 75 63 2e 70 43 75 72 73 6f 72 21 3d 30  r->uc.pCursor!=0
30020 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74   );.      assert
30030 28 20 70 54 61 62 43 75 72 2d 3e 69 73 54 61 62  ( pTabCur->isTab
30040 6c 65 20 29 3b 0a 20 20 20 20 20 20 70 54 61 62  le );.      pTab
30050 43 75 72 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 30  Cur->nullRow = 0
30060 3b 0a 20 20 20 20 20 20 70 54 61 62 43 75 72 2d  ;.      pTabCur-
30070 3e 6d 6f 76 65 74 6f 54 61 72 67 65 74 20 3d 20  >movetoTarget = 
30080 72 6f 77 69 64 3b 0a 20 20 20 20 20 20 70 54 61  rowid;.      pTa
30090 62 43 75 72 2d 3e 64 65 66 65 72 72 65 64 4d 6f  bCur->deferredMo
300a0 76 65 74 6f 20 3d 20 31 3b 0a 20 20 20 20 20 20  veto = 1;.      
300b0 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74  assert( pOp->p4t
300c0 79 70 65 3d 3d 50 34 5f 49 4e 54 41 52 52 41 59  ype==P4_INTARRAY
300d0 20 7c 7c 20 70 4f 70 2d 3e 70 34 2e 61 69 3d 3d   || pOp->p4.ai==
300e0 30 20 29 3b 0a 20 20 20 20 20 20 70 54 61 62 43  0 );.      pTabC
300f0 75 72 2d 3e 61 41 6c 74 4d 61 70 20 3d 20 70 4f  ur->aAltMap = pO
30100 70 2d 3e 70 34 2e 61 69 3b 0a 20 20 20 20 20 20  p->p4.ai;.      
30110 70 54 61 62 43 75 72 2d 3e 70 41 6c 74 43 75 72  pTabCur->pAltCur
30120 73 6f 72 20 3d 20 70 43 3b 0a 20 20 20 20 7d 65  sor = pC;.    }e
30130 6c 73 65 7b 0a 20 20 20 20 20 20 70 4f 75 74 20  lse{.      pOut 
30140 3d 20 6f 75 74 32 50 72 65 72 65 6c 65 61 73 65  = out2Prerelease
30150 28 70 2c 20 70 4f 70 29 3b 0a 20 20 20 20 20 20  (p, pOp);.      
30160 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 72 6f 77 69  pOut->u.i = rowi
30170 64 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65  d;.    }.  }else
30180 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4f  {.    assert( pO
30190 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 64  p->opcode==OP_Id
301a0 78 52 6f 77 69 64 20 29 3b 0a 20 20 20 20 73 71  xRowid );.    sq
301b0 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e  lite3VdbeMemSetN
301c0 75 6c 6c 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  ull(&aMem[pOp->p
301d0 32 5d 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  2]);.  }.  break
301e0 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
301f0 49 64 78 47 45 20 50 31 20 50 32 20 50 33 20 50  IdxGE P1 P2 P3 P
30200 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73  4 P5.** Synopsis
30210 3a 20 6b 65 79 3d 72 5b 50 33 40 50 34 5d 0a 2a  : key=r[P3@P4].*
30220 2a 0a 2a 2a 20 54 68 65 20 50 34 20 72 65 67 69  *.** The P4 regi
30230 73 74 65 72 20 76 61 6c 75 65 73 20 62 65 67 69  ster values begi
30240 6e 6e 69 6e 67 20 77 69 74 68 20 50 33 20 66 6f  nning with P3 fo
30250 72 6d 20 61 6e 20 75 6e 70 61 63 6b 65 64 20 69  rm an unpacked i
30260 6e 64 65 78 20 0a 2a 2a 20 6b 65 79 20 74 68 61  ndex .** key tha
30270 74 20 6f 6d 69 74 73 20 74 68 65 20 50 52 49 4d  t omits the PRIM
30280 41 52 59 20 4b 45 59 2e 20 20 43 6f 6d 70 61 72  ARY KEY.  Compar
30290 65 20 74 68 69 73 20 6b 65 79 20 76 61 6c 75 65  e this key value
302a0 20 61 67 61 69 6e 73 74 20 74 68 65 20 69 6e 64   against the ind
302b0 65 78 20 0a 2a 2a 20 74 68 61 74 20 50 31 20 69  ex .** that P1 i
302c0 73 20 63 75 72 72 65 6e 74 6c 79 20 70 6f 69 6e  s currently poin
302d0 74 69 6e 67 20 74 6f 2c 20 69 67 6e 6f 72 69 6e  ting to, ignorin
302e0 67 20 74 68 65 20 50 52 49 4d 41 52 59 20 4b 45  g the PRIMARY KE
302f0 59 20 6f 72 20 52 4f 57 49 44 20 0a 2a 2a 20 66  Y or ROWID .** f
30300 69 65 6c 64 73 20 61 74 20 74 68 65 20 65 6e 64  ields at the end
30310 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 50  ..**.** If the P
30320 31 20 69 6e 64 65 78 20 65 6e 74 72 79 20 69 73  1 index entry is
30330 20 67 72 65 61 74 65 72 20 74 68 61 6e 20 6f 72   greater than or
30340 20 65 71 75 61 6c 20 74 6f 20 74 68 65 20 6b 65   equal to the ke
30350 79 20 76 61 6c 75 65 0a 2a 2a 20 74 68 65 6e 20  y value.** then 
30360 6a 75 6d 70 20 74 6f 20 50 32 2e 20 20 4f 74 68  jump to P2.  Oth
30370 65 72 77 69 73 65 20 66 61 6c 6c 20 74 68 72 6f  erwise fall thro
30380 75 67 68 20 74 6f 20 74 68 65 20 6e 65 78 74 20  ugh to the next 
30390 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a  instruction..*/.
303a0 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 64 78 47 54  /* Opcode: IdxGT
303b0 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a   P1 P2 P3 P4 P5.
303c0 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79  ** Synopsis: key
303d0 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20  =r[P3@P4].**.** 
303e0 54 68 65 20 50 34 20 72 65 67 69 73 74 65 72 20  The P4 register 
303f0 76 61 6c 75 65 73 20 62 65 67 69 6e 6e 69 6e 67  values beginning
30400 20 77 69 74 68 20 50 33 20 66 6f 72 6d 20 61 6e   with P3 form an
30410 20 75 6e 70 61 63 6b 65 64 20 69 6e 64 65 78 20   unpacked index 
30420 0a 2a 2a 20 6b 65 79 20 74 68 61 74 20 6f 6d 69  .** key that omi
30430 74 73 20 74 68 65 20 50 52 49 4d 41 52 59 20 4b  ts the PRIMARY K
30440 45 59 2e 20 20 43 6f 6d 70 61 72 65 20 74 68 69  EY.  Compare thi
30450 73 20 6b 65 79 20 76 61 6c 75 65 20 61 67 61 69  s key value agai
30460 6e 73 74 20 74 68 65 20 69 6e 64 65 78 20 0a 2a  nst the index .*
30470 2a 20 74 68 61 74 20 50 31 20 69 73 20 63 75 72  * that P1 is cur
30480 72 65 6e 74 6c 79 20 70 6f 69 6e 74 69 6e 67 20  rently pointing 
30490 74 6f 2c 20 69 67 6e 6f 72 69 6e 67 20 74 68 65  to, ignoring the
304a0 20 50 52 49 4d 41 52 59 20 4b 45 59 20 6f 72 20   PRIMARY KEY or 
304b0 52 4f 57 49 44 20 0a 2a 2a 20 66 69 65 6c 64 73  ROWID .** fields
304c0 20 61 74 20 74 68 65 20 65 6e 64 2e 0a 2a 2a 0a   at the end..**.
304d0 2a 2a 20 49 66 20 74 68 65 20 50 31 20 69 6e 64  ** If the P1 ind
304e0 65 78 20 65 6e 74 72 79 20 69 73 20 67 72 65 61  ex entry is grea
304f0 74 65 72 20 74 68 61 6e 20 74 68 65 20 6b 65 79  ter than the key
30500 20 76 61 6c 75 65 0a 2a 2a 20 74 68 65 6e 20 6a   value.** then j
30510 75 6d 70 20 74 6f 20 50 32 2e 20 20 4f 74 68 65  ump to P2.  Othe
30520 72 77 69 73 65 20 66 61 6c 6c 20 74 68 72 6f 75  rwise fall throu
30530 67 68 20 74 6f 20 74 68 65 20 6e 65 78 74 20 69  gh to the next i
30540 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 2f  nstruction..*/./
30550 2a 20 4f 70 63 6f 64 65 3a 20 49 64 78 4c 54 20  * Opcode: IdxLT 
30560 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a  P1 P2 P3 P4 P5.*
30570 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d  * Synopsis: key=
30580 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 54  r[P3@P4].**.** T
30590 68 65 20 50 34 20 72 65 67 69 73 74 65 72 20 76  he P4 register v
305a0 61 6c 75 65 73 20 62 65 67 69 6e 6e 69 6e 67 20  alues beginning 
305b0 77 69 74 68 20 50 33 20 66 6f 72 6d 20 61 6e 20  with P3 form an 
305c0 75 6e 70 61 63 6b 65 64 20 69 6e 64 65 78 20 0a  unpacked index .
305d0 2a 2a 20 6b 65 79 20 74 68 61 74 20 6f 6d 69 74  ** key that omit
305e0 73 20 74 68 65 20 50 52 49 4d 41 52 59 20 4b 45  s the PRIMARY KE
305f0 59 20 6f 72 20 52 4f 57 49 44 2e 20 20 43 6f 6d  Y or ROWID.  Com
30600 70 61 72 65 20 74 68 69 73 20 6b 65 79 20 76 61  pare this key va
30610 6c 75 65 20 61 67 61 69 6e 73 74 0a 2a 2a 20 74  lue against.** t
30620 68 65 20 69 6e 64 65 78 20 74 68 61 74 20 50 31  he index that P1
30630 20 69 73 20 63 75 72 72 65 6e 74 6c 79 20 70 6f   is currently po
30640 69 6e 74 69 6e 67 20 74 6f 2c 20 69 67 6e 6f 72  inting to, ignor
30650 69 6e 67 20 74 68 65 20 50 52 49 4d 41 52 59 20  ing the PRIMARY 
30660 4b 45 59 20 6f 72 0a 2a 2a 20 52 4f 57 49 44 20  KEY or.** ROWID 
30670 6f 6e 20 74 68 65 20 50 31 20 69 6e 64 65 78 2e  on the P1 index.
30680 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 50 31  .**.** If the P1
30690 20 69 6e 64 65 78 20 65 6e 74 72 79 20 69 73 20   index entry is 
306a0 6c 65 73 73 20 74 68 61 6e 20 74 68 65 20 6b 65  less than the ke
306b0 79 20 76 61 6c 75 65 20 74 68 65 6e 20 6a 75 6d  y value then jum
306c0 70 20 74 6f 20 50 32 2e 0a 2a 2a 20 4f 74 68 65  p to P2..** Othe
306d0 72 77 69 73 65 20 66 61 6c 6c 20 74 68 72 6f 75  rwise fall throu
306e0 67 68 20 74 6f 20 74 68 65 20 6e 65 78 74 20 69  gh to the next i
306f0 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 2f  nstruction..*/./
30700 2a 20 4f 70 63 6f 64 65 3a 20 49 64 78 4c 45 20  * Opcode: IdxLE 
30710 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a  P1 P2 P3 P4 P5.*
30720 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d  * Synopsis: key=
30730 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 54  r[P3@P4].**.** T
30740 68 65 20 50 34 20 72 65 67 69 73 74 65 72 20 76  he P4 register v
30750 61 6c 75 65 73 20 62 65 67 69 6e 6e 69 6e 67 20  alues beginning 
30760 77 69 74 68 20 50 33 20 66 6f 72 6d 20 61 6e 20  with P3 form an 
30770 75 6e 70 61 63 6b 65 64 20 69 6e 64 65 78 20 0a  unpacked index .
30780 2a 2a 20 6b 65 79 20 74 68 61 74 20 6f 6d 69 74  ** key that omit
30790 73 20 74 68 65 20 50 52 49 4d 41 52 59 20 4b 45  s the PRIMARY KE
307a0 59 20 6f 72 20 52 4f 57 49 44 2e 20 20 43 6f 6d  Y or ROWID.  Com
307b0 70 61 72 65 20 74 68 69 73 20 6b 65 79 20 76 61  pare this key va
307c0 6c 75 65 20 61 67 61 69 6e 73 74 0a 2a 2a 20 74  lue against.** t
307d0 68 65 20 69 6e 64 65 78 20 74 68 61 74 20 50 31  he index that P1
307e0 20 69 73 20 63 75 72 72 65 6e 74 6c 79 20 70 6f   is currently po
307f0 69 6e 74 69 6e 67 20 74 6f 2c 20 69 67 6e 6f 72  inting to, ignor
30800 69 6e 67 20 74 68 65 20 50 52 49 4d 41 52 59 20  ing the PRIMARY 
30810 4b 45 59 20 6f 72 0a 2a 2a 20 52 4f 57 49 44 20  KEY or.** ROWID 
30820 6f 6e 20 74 68 65 20 50 31 20 69 6e 64 65 78 2e  on the P1 index.
30830 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 50 31  .**.** If the P1
30840 20 69 6e 64 65 78 20 65 6e 74 72 79 20 69 73 20   index entry is 
30850 6c 65 73 73 20 74 68 61 6e 20 6f 72 20 65 71 75  less than or equ
30860 61 6c 20 74 6f 20 74 68 65 20 6b 65 79 20 76 61  al to the key va
30870 6c 75 65 20 74 68 65 6e 20 6a 75 6d 70 0a 2a 2a  lue then jump.**
30880 20 74 6f 20 50 32 2e 20 4f 74 68 65 72 77 69 73   to P2. Otherwis
30890 65 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 20 74  e fall through t
308a0 6f 20 74 68 65 20 6e 65 78 74 20 69 6e 73 74 72  o the next instr
308b0 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20  uction..*/.case 
308c0 4f 50 5f 49 64 78 4c 45 3a 20 20 20 20 20 20 20  OP_IdxLE:       
308d0 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 63 61     /* jump */.ca
308e0 73 65 20 4f 50 5f 49 64 78 47 54 3a 20 20 20 20  se OP_IdxGT:    
308f0 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f        /* jump */
30900 0a 63 61 73 65 20 4f 50 5f 49 64 78 4c 54 3a 20  .case OP_IdxLT: 
30910 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70           /* jump
30920 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 64 78 47   */.case OP_IdxG
30930 45 3a 20 20 7b 20 20 20 20 20 20 20 2f 2a 20 6a  E:  {       /* j
30940 75 6d 70 20 2a 2f 0a 20 20 56 64 62 65 43 75 72  ump */.  VdbeCur
30950 73 6f 72 20 2a 70 43 3b 0a 20 20 69 6e 74 20 72  sor *pC;.  int r
30960 65 73 3b 0a 20 20 55 6e 70 61 63 6b 65 64 52 65  es;.  UnpackedRe
30970 63 6f 72 64 20 72 3b 0a 0a 20 20 61 73 73 65 72  cord r;..  asser
30980 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26  t( pOp->p1>=0 &&
30990 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72   pOp->p1<p->nCur
309a0 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d  sor );.  pC = p-
309b0 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b  >apCsr[pOp->p1];
309c0 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30  .  assert( pC!=0
309d0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43   );.  assert( pC
309e0 2d 3e 69 73 4f 72 64 65 72 65 64 20 29 3b 0a 20  ->isOrdered );. 
309f0 20 61 73 73 65 72 74 28 20 70 43 2d 3e 65 43 75   assert( pC->eCu
30a00 72 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f 42  rType==CURTYPE_B
30a10 54 52 45 45 20 29 3b 0a 20 20 61 73 73 65 72 74  TREE );.  assert
30a20 28 20 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72  ( pC->uc.pCursor
30a30 21 3d 30 29 3b 0a 20 20 61 73 73 65 72 74 28 20  !=0);.  assert( 
30a40 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65  pC->deferredMove
30a50 74 6f 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  to==0 );.  asser
30a60 74 28 20 70 4f 70 2d 3e 70 35 3d 3d 30 20 7c 7c  t( pOp->p5==0 ||
30a70 20 70 4f 70 2d 3e 70 35 3d 3d 31 20 29 3b 0a 20   pOp->p5==1 );. 
30a80 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34   assert( pOp->p4
30a90 74 79 70 65 3d 3d 50 34 5f 49 4e 54 33 32 20 29  type==P4_INT32 )
30aa0 3b 0a 20 20 72 2e 70 4b 65 79 49 6e 66 6f 20 3d  ;.  r.pKeyInfo =
30ab0 20 70 43 2d 3e 70 4b 65 79 49 6e 66 6f 3b 0a 20   pC->pKeyInfo;. 
30ac0 20 72 2e 6e 46 69 65 6c 64 20 3d 20 28 75 31 36   r.nField = (u16
30ad0 29 70 4f 70 2d 3e 70 34 2e 69 3b 0a 20 20 69 66  )pOp->p4.i;.  if
30ae0 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3c 4f 50  ( pOp->opcode<OP
30af0 5f 49 64 78 4c 54 20 29 7b 0a 20 20 20 20 61 73  _IdxLT ){.    as
30b00 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64  sert( pOp->opcod
30b10 65 3d 3d 4f 50 5f 49 64 78 4c 45 20 7c 7c 20 70  e==OP_IdxLE || p
30b20 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49  Op->opcode==OP_I
30b30 64 78 47 54 20 29 3b 0a 20 20 20 20 72 2e 64 65  dxGT );.    r.de
30b40 66 61 75 6c 74 5f 72 63 20 3d 20 2d 31 3b 0a 20  fault_rc = -1;. 
30b50 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73 73 65   }else{.    asse
30b60 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d  rt( pOp->opcode=
30b70 3d 4f 50 5f 49 64 78 47 45 20 7c 7c 20 70 4f 70  =OP_IdxGE || pOp
30b80 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 64 78  ->opcode==OP_Idx
30b90 4c 54 20 29 3b 0a 20 20 20 20 72 2e 64 65 66 61  LT );.    r.defa
30ba0 75 6c 74 5f 72 63 20 3d 20 30 3b 0a 20 20 7d 0a  ult_rc = 0;.  }.
30bb0 20 20 72 2e 61 4d 65 6d 20 3d 20 26 61 4d 65 6d    r.aMem = &aMem
30bc0 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 23 69 66 64 65  [pOp->p3];.#ifde
30bd0 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20  f SQLITE_DEBUG. 
30be0 20 7b 0a 20 20 20 20 69 6e 74 20 69 3b 0a 20 20   {.    int i;.  
30bf0 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 72 2e 6e    for(i=0; i<r.n
30c00 46 69 65 6c 64 3b 20 69 2b 2b 29 7b 0a 20 20 20  Field; i++){.   
30c10 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73     assert( memIs
30c20 56 61 6c 69 64 28 26 72 2e 61 4d 65 6d 5b 69 5d  Valid(&r.aMem[i]
30c30 29 20 29 3b 0a 20 20 20 20 20 20 52 45 47 49 53  ) );.      REGIS
30c40 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70  TER_TRACE(pOp->p
30c50 33 2b 69 2c 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  3+i, &aMem[pOp->
30c60 70 33 2b 69 5d 29 3b 0a 20 20 20 20 7d 0a 20 20  p3+i]);.    }.  
30c70 7d 0a 23 65 6e 64 69 66 0a 20 20 72 65 73 20 3d  }.#endif.  res =
30c80 20 30 3b 20 20 2f 2a 20 4e 6f 74 20 6e 65 65 64   0;  /* Not need
30c90 65 64 2e 20 20 4f 6e 6c 79 20 75 73 65 64 20 74  ed.  Only used t
30ca0 6f 20 73 69 6c 65 6e 63 65 20 61 20 77 61 72 6e  o silence a warn
30cb0 69 6e 67 2e 20 2a 2f 0a 20 20 72 63 20 3d 20 73  ing. */.  rc = s
30cc0 71 6c 69 74 65 33 56 64 62 65 49 64 78 4b 65 79  qlite3VdbeIdxKey
30cd0 43 6f 6d 70 61 72 65 28 64 62 2c 20 70 43 2c 20  Compare(db, pC, 
30ce0 26 72 2c 20 26 72 65 73 29 3b 0a 20 20 61 73 73  &r, &res);.  ass
30cf0 65 72 74 28 20 28 4f 50 5f 49 64 78 4c 45 26 31  ert( (OP_IdxLE&1
30d00 29 3d 3d 28 4f 50 5f 49 64 78 4c 54 26 31 29 20  )==(OP_IdxLT&1) 
30d10 26 26 20 28 4f 50 5f 49 64 78 47 45 26 31 29 3d  && (OP_IdxGE&1)=
30d20 3d 28 4f 50 5f 49 64 78 47 54 26 31 29 20 29 3b  =(OP_IdxGT&1) );
30d30 0a 20 20 69 66 28 20 28 70 4f 70 2d 3e 6f 70 63  .  if( (pOp->opc
30d40 6f 64 65 26 31 29 3d 3d 28 4f 50 5f 49 64 78 4c  ode&1)==(OP_IdxL
30d50 54 26 31 29 20 29 7b 0a 20 20 20 20 61 73 73 65  T&1) ){.    asse
30d60 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d  rt( pOp->opcode=
30d70 3d 4f 50 5f 49 64 78 4c 45 20 7c 7c 20 70 4f 70  =OP_IdxLE || pOp
30d80 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 64 78  ->opcode==OP_Idx
30d90 4c 54 20 29 3b 0a 20 20 20 20 72 65 73 20 3d 20  LT );.    res = 
30da0 2d 72 65 73 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  -res;.  }else{. 
30db0 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e     assert( pOp->
30dc0 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 64 78 47 45  opcode==OP_IdxGE
30dd0 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d   || pOp->opcode=
30de0 3d 4f 50 5f 49 64 78 47 54 20 29 3b 0a 20 20 20  =OP_IdxGT );.   
30df0 20 72 65 73 2b 2b 3b 0a 20 20 7d 0a 20 20 56 64   res++;.  }.  Vd
30e00 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 72 65  beBranchTaken(re
30e10 73 3e 30 2c 32 29 3b 0a 20 20 69 66 28 20 72 63  s>0,2);.  if( rc
30e20 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75   ) goto abort_du
30e30 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 69 66  e_to_error;.  if
30e40 28 20 72 65 73 3e 30 20 29 20 67 6f 74 6f 20 6a  ( res>0 ) goto j
30e50 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 62 72 65  ump_to_p2;.  bre
30e60 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
30e70 3a 20 44 65 73 74 72 6f 79 20 50 31 20 50 32 20  : Destroy P1 P2 
30e80 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 44 65 6c  P3 * *.**.** Del
30e90 65 74 65 20 61 6e 20 65 6e 74 69 72 65 20 64 61  ete an entire da
30ea0 74 61 62 61 73 65 20 74 61 62 6c 65 20 6f 72 20  tabase table or 
30eb0 69 6e 64 65 78 20 77 68 6f 73 65 20 72 6f 6f 74  index whose root
30ec0 20 70 61 67 65 20 69 6e 20 74 68 65 20 64 61 74   page in the dat
30ed0 61 62 61 73 65 0a 2a 2a 20 66 69 6c 65 20 69 73  abase.** file is
30ee0 20 67 69 76 65 6e 20 62 79 20 50 31 2e 0a 2a 2a   given by P1..**
30ef0 0a 2a 2a 20 54 68 65 20 74 61 62 6c 65 20 62 65  .** The table be
30f00 69 6e 67 20 64 65 73 74 72 6f 79 65 64 20 69 73  ing destroyed is
30f10 20 69 6e 20 74 68 65 20 6d 61 69 6e 20 64 61 74   in the main dat
30f20 61 62 61 73 65 20 66 69 6c 65 20 69 66 20 50 33  abase file if P3
30f30 3d 3d 30 2e 20 20 49 66 0a 2a 2a 20 50 33 3d 3d  ==0.  If.** P3==
30f40 31 20 74 68 65 6e 20 74 68 65 20 74 61 62 6c 65  1 then the table
30f50 20 74 6f 20 62 65 20 63 6c 65 61 72 20 69 73 20   to be clear is 
30f60 69 6e 20 74 68 65 20 61 75 78 69 6c 69 61 72 79  in the auxiliary
30f70 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 0a 2a   database file.*
30f80 2a 20 74 68 61 74 20 69 73 20 75 73 65 64 20 74  * that is used t
30f90 6f 20 73 74 6f 72 65 20 74 61 62 6c 65 73 20 63  o store tables c
30fa0 72 65 61 74 65 20 75 73 69 6e 67 20 43 52 45 41  reate using CREA
30fb0 54 45 20 54 45 4d 50 4f 52 41 52 59 20 54 41 42  TE TEMPORARY TAB
30fc0 4c 45 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 41 55 54  LE..**.** If AUT
30fd0 4f 56 41 43 55 55 4d 20 69 73 20 65 6e 61 62 6c  OVACUUM is enabl
30fe0 65 64 20 74 68 65 6e 20 69 74 20 69 73 20 70 6f  ed then it is po
30ff0 73 73 69 62 6c 65 20 74 68 61 74 20 61 6e 6f 74  ssible that anot
31000 68 65 72 20 72 6f 6f 74 20 70 61 67 65 0a 2a 2a  her root page.**
31010 20 6d 69 67 68 74 20 62 65 20 6d 6f 76 65 64 20   might be moved 
31020 69 6e 74 6f 20 74 68 65 20 6e 65 77 6c 79 20 64  into the newly d
31030 65 6c 65 74 65 64 20 72 6f 6f 74 20 70 61 67 65  eleted root page
31040 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 6b 65 65   in order to kee
31050 70 20 61 6c 6c 0a 2a 2a 20 72 6f 6f 74 20 70 61  p all.** root pa
31060 67 65 73 20 63 6f 6e 74 69 67 75 6f 75 73 20 61  ges contiguous a
31070 74 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 20  t the beginning 
31080 6f 66 20 74 68 65 20 64 61 74 61 62 61 73 65 2e  of the database.
31090 20 20 54 68 65 20 66 6f 72 6d 65 72 0a 2a 2a 20    The former.** 
310a0 76 61 6c 75 65 20 6f 66 20 74 68 65 20 72 6f 6f  value of the roo
310b0 74 20 70 61 67 65 20 74 68 61 74 20 6d 6f 76 65  t page that move
310c0 64 20 2d 20 69 74 73 20 76 61 6c 75 65 20 62 65  d - its value be
310d0 66 6f 72 65 20 74 68 65 20 6d 6f 76 65 20 6f 63  fore the move oc
310e0 63 75 72 72 65 64 20 2d 0a 2a 2a 20 69 73 20 73  curred -.** is s
310f0 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74 65  tored in registe
31100 72 20 50 32 2e 20 49 66 20 6e 6f 20 70 61 67 65  r P2. If no page
31110 20 6d 6f 76 65 6d 65 6e 74 20 77 61 73 20 72 65   movement was re
31120 71 75 69 72 65 64 20 28 62 65 63 61 75 73 65 20  quired (because 
31130 74 68 65 0a 2a 2a 20 74 61 62 6c 65 20 62 65 69  the.** table bei
31140 6e 67 20 64 72 6f 70 70 65 64 20 77 61 73 20 61  ng dropped was a
31150 6c 72 65 61 64 79 20 74 68 65 20 6c 61 73 74 20  lready the last 
31160 6f 6e 65 20 69 6e 20 74 68 65 20 64 61 74 61 62  one in the datab
31170 61 73 65 29 20 74 68 65 6e 20 61 20 0a 2a 2a 20  ase) then a .** 
31180 7a 65 72 6f 20 69 73 20 73 74 6f 72 65 64 20 69  zero is stored i
31190 6e 20 72 65 67 69 73 74 65 72 20 50 32 2e 20 20  n register P2.  
311a0 49 66 20 41 55 54 4f 56 41 43 55 55 4d 20 69 73  If AUTOVACUUM is
311b0 20 64 69 73 61 62 6c 65 64 20 74 68 65 6e 20 61   disabled then a
311c0 20 7a 65 72 6f 20 0a 2a 2a 20 69 73 20 73 74 6f   zero .** is sto
311d0 72 65 64 20 69 6e 20 72 65 67 69 73 74 65 72 20  red in register 
311e0 50 32 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f  P2..**.** This o
311f0 70 63 6f 64 65 20 74 68 72 6f 77 73 20 61 6e 20  pcode throws an 
31200 65 72 72 6f 72 20 69 66 20 74 68 65 72 65 20 61  error if there a
31210 72 65 20 61 6e 79 20 61 63 74 69 76 65 20 72 65  re any active re
31220 61 64 65 72 20 56 4d 73 20 77 68 65 6e 0a 2a 2a  ader VMs when.**
31230 20 69 74 20 69 73 20 69 6e 76 6f 6b 65 64 2e 20   it is invoked. 
31240 54 68 69 73 20 69 73 20 64 6f 6e 65 20 74 6f 20  This is done to 
31250 61 76 6f 69 64 20 74 68 65 20 64 69 66 66 69 63  avoid the diffic
31260 75 6c 74 79 20 61 73 73 6f 63 69 61 74 65 64 20  ulty associated 
31270 77 69 74 68 20 0a 2a 2a 20 75 70 64 61 74 69 6e  with .** updatin
31280 67 20 65 78 69 73 74 69 6e 67 20 63 75 72 73 6f  g existing curso
31290 72 73 20 77 68 65 6e 20 61 20 72 6f 6f 74 20 70  rs when a root p
312a0 61 67 65 20 69 73 20 6d 6f 76 65 64 20 69 6e 20  age is moved in 
312b0 61 6e 20 41 55 54 4f 56 41 43 55 55 4d 20 0a 2a  an AUTOVACUUM .*
312c0 2a 20 64 61 74 61 62 61 73 65 2e 20 54 68 69 73  * database. This
312d0 20 65 72 72 6f 72 20 69 73 20 74 68 72 6f 77 6e   error is thrown
312e0 20 65 76 65 6e 20 69 66 20 74 68 65 20 64 61 74   even if the dat
312f0 61 62 61 73 65 20 69 73 20 6e 6f 74 20 61 6e 20  abase is not an 
31300 41 55 54 4f 56 41 43 55 55 4d 20 0a 2a 2a 20 64  AUTOVACUUM .** d
31310 62 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 61 76  b in order to av
31320 6f 69 64 20 69 6e 74 72 6f 64 75 63 69 6e 67 20  oid introducing 
31330 61 6e 20 69 6e 63 6f 6d 70 61 74 69 62 69 6c 69  an incompatibili
31340 74 79 20 62 65 74 77 65 65 6e 20 61 75 74 6f 76  ty between autov
31350 61 63 75 75 6d 20 0a 2a 2a 20 61 6e 64 20 6e 6f  acuum .** and no
31360 6e 2d 61 75 74 6f 76 61 63 75 75 6d 20 6d 6f 64  n-autovacuum mod
31370 65 73 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c  es..**.** See al
31380 73 6f 3a 20 43 6c 65 61 72 0a 2a 2f 0a 63 61 73  so: Clear.*/.cas
31390 65 20 4f 50 5f 44 65 73 74 72 6f 79 3a 20 7b 20  e OP_Destroy: { 
313a0 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20      /* out2 */. 
313b0 20 69 6e 74 20 69 4d 6f 76 65 64 3b 0a 20 20 69   int iMoved;.  i
313c0 6e 74 20 69 44 62 3b 0a 0a 20 20 73 71 6c 69 74  nt iDb;..  sqlit
313d0 65 33 56 64 62 65 49 6e 63 72 57 72 69 74 65 43  e3VdbeIncrWriteC
313e0 6f 75 6e 74 65 72 28 70 2c 20 30 29 3b 0a 20 20  ounter(p, 0);.  
313f0 61 73 73 65 72 74 28 20 70 2d 3e 72 65 61 64 4f  assert( p->readO
31400 6e 6c 79 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65  nly==0 );.  asse
31410 72 74 28 20 70 4f 70 2d 3e 70 31 3e 31 20 29 3b  rt( pOp->p1>1 );
31420 0a 20 20 70 4f 75 74 20 3d 20 6f 75 74 32 50 72  .  pOut = out2Pr
31430 65 72 65 6c 65 61 73 65 28 70 2c 20 70 4f 70 29  erelease(p, pOp)
31440 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20  ;.  pOut->flags 
31450 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20 20 69 66  = MEM_Null;.  if
31460 28 20 64 62 2d 3e 6e 56 64 62 65 52 65 61 64 20  ( db->nVdbeRead 
31470 3e 20 64 62 2d 3e 6e 56 44 65 73 74 72 6f 79 2b  > db->nVDestroy+
31480 31 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 53 51  1 ){.    rc = SQ
31490 4c 49 54 45 5f 4c 4f 43 4b 45 44 3b 0a 20 20 20  LITE_LOCKED;.   
314a0 20 70 2d 3e 65 72 72 6f 72 41 63 74 69 6f 6e 20   p->errorAction 
314b0 3d 20 4f 45 5f 41 62 6f 72 74 3b 0a 20 20 20 20  = OE_Abort;.    
314c0 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
314d0 6f 5f 65 72 72 6f 72 3b 0a 20 20 7d 65 6c 73 65  o_error;.  }else
314e0 7b 0a 20 20 20 20 69 44 62 20 3d 20 70 4f 70 2d  {.    iDb = pOp-
314f0 3e 70 33 3b 0a 20 20 20 20 61 73 73 65 72 74 28  >p3;.    assert(
31500 20 44 62 4d 61 73 6b 54 65 73 74 28 70 2d 3e 62   DbMaskTest(p->b
31510 74 72 65 65 4d 61 73 6b 2c 20 69 44 62 29 20 29  treeMask, iDb) )
31520 3b 0a 20 20 20 20 69 4d 6f 76 65 64 20 3d 20 30  ;.    iMoved = 0
31530 3b 20 20 2f 2a 20 4e 6f 74 20 6e 65 65 64 65 64  ;  /* Not needed
31540 2e 20 20 4f 6e 6c 79 20 74 6f 20 73 69 6c 65 6e  .  Only to silen
31550 63 65 20 61 20 77 61 72 6e 69 6e 67 2e 20 2a 2f  ce a warning. */
31560 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65  .    rc = sqlite
31570 33 42 74 72 65 65 44 72 6f 70 54 61 62 6c 65 28  3BtreeDropTable(
31580 64 62 2d 3e 61 44 62 5b 69 44 62 5d 2e 70 42 74  db->aDb[iDb].pBt
31590 2c 20 70 4f 70 2d 3e 70 31 2c 20 26 69 4d 6f 76  , pOp->p1, &iMov
315a0 65 64 29 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 66  ed);.    pOut->f
315b0 6c 61 67 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a  lags = MEM_Int;.
315c0 20 20 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20      pOut->u.i = 
315d0 69 4d 6f 76 65 64 3b 0a 20 20 20 20 69 66 28 20  iMoved;.    if( 
315e0 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f  rc ) goto abort_
315f0 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 23 69  due_to_error;.#i
31600 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
31610 54 5f 41 55 54 4f 56 41 43 55 55 4d 0a 20 20 20  T_AUTOVACUUM.   
31620 20 69 66 28 20 69 4d 6f 76 65 64 21 3d 30 20 29   if( iMoved!=0 )
31630 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 52  {.      sqlite3R
31640 6f 6f 74 50 61 67 65 4d 6f 76 65 64 28 64 62 2c  ootPageMoved(db,
31650 20 69 44 62 2c 20 69 4d 6f 76 65 64 2c 20 70 4f   iDb, iMoved, pO
31660 70 2d 3e 70 31 29 3b 0a 20 20 20 20 20 20 2f 2a  p->p1);.      /*
31670 20 41 6c 6c 20 4f 50 5f 44 65 73 74 72 6f 79 20   All OP_Destroy 
31680 6f 70 65 72 61 74 69 6f 6e 73 20 6f 63 63 75 72  operations occur
31690 20 6f 6e 20 74 68 65 20 73 61 6d 65 20 62 74 72   on the same btr
316a0 65 65 20 2a 2f 0a 20 20 20 20 20 20 61 73 73 65  ee */.      asse
316b0 72 74 28 20 72 65 73 65 74 53 63 68 65 6d 61 4f  rt( resetSchemaO
316c0 6e 46 61 75 6c 74 3d 3d 30 20 7c 7c 20 72 65 73  nFault==0 || res
316d0 65 74 53 63 68 65 6d 61 4f 6e 46 61 75 6c 74 3d  etSchemaOnFault=
316e0 3d 69 44 62 2b 31 20 29 3b 0a 20 20 20 20 20 20  =iDb+1 );.      
316f0 72 65 73 65 74 53 63 68 65 6d 61 4f 6e 46 61 75  resetSchemaOnFau
31700 6c 74 20 3d 20 69 44 62 2b 31 3b 0a 20 20 20 20  lt = iDb+1;.    
31710 7d 0a 23 65 6e 64 69 66 0a 20 20 7d 0a 20 20 62  }.#endif.  }.  b
31720 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
31730 64 65 3a 20 43 6c 65 61 72 20 50 31 20 50 32 20  de: Clear P1 P2 
31740 50 33 0a 2a 2a 0a 2a 2a 20 44 65 6c 65 74 65 20  P3.**.** Delete 
31750 61 6c 6c 20 63 6f 6e 74 65 6e 74 73 20 6f 66 20  all contents of 
31760 74 68 65 20 64 61 74 61 62 61 73 65 20 74 61 62  the database tab
31770 6c 65 20 6f 72 20 69 6e 64 65 78 20 77 68 6f 73  le or index whos
31780 65 20 72 6f 6f 74 20 70 61 67 65 0a 2a 2a 20 69  e root page.** i
31790 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66  n the database f
317a0 69 6c 65 20 69 73 20 67 69 76 65 6e 20 62 79 20  ile is given by 
317b0 50 31 2e 20 20 42 75 74 2c 20 75 6e 6c 69 6b 65  P1.  But, unlike
317c0 20 44 65 73 74 72 6f 79 2c 20 64 6f 20 6e 6f 74   Destroy, do not
317d0 0a 2a 2a 20 72 65 6d 6f 76 65 20 74 68 65 20 74  .** remove the t
317e0 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 66 72  able or index fr
317f0 6f 6d 20 74 68 65 20 64 61 74 61 62 61 73 65 20  om the database 
31800 66 69 6c 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  file..**.** The 
31810 74 61 62 6c 65 20 62 65 69 6e 67 20 63 6c 65 61  table being clea
31820 72 20 69 73 20 69 6e 20 74 68 65 20 6d 61 69 6e  r is in the main
31830 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 69   database file i
31840 66 20 50 32 3d 3d 30 2e 20 20 49 66 0a 2a 2a 20  f P2==0.  If.** 
31850 50 32 3d 3d 31 20 74 68 65 6e 20 74 68 65 20 74  P2==1 then the t
31860 61 62 6c 65 20 74 6f 20 62 65 20 63 6c 65 61 72  able to be clear
31870 20 69 73 20 69 6e 20 74 68 65 20 61 75 78 69 6c   is in the auxil
31880 69 61 72 79 20 64 61 74 61 62 61 73 65 20 66 69  iary database fi
31890 6c 65 0a 2a 2a 20 74 68 61 74 20 69 73 20 75 73  le.** that is us
318a0 65 64 20 74 6f 20 73 74 6f 72 65 20 74 61 62 6c  ed to store tabl
318b0 65 73 20 63 72 65 61 74 65 20 75 73 69 6e 67 20  es create using 
318c0 43 52 45 41 54 45 20 54 45 4d 50 4f 52 41 52 59  CREATE TEMPORARY
318d0 20 54 41 42 4c 45 2e 0a 2a 2a 0a 2a 2a 20 49 66   TABLE..**.** If
318e0 20 74 68 65 20 50 33 20 76 61 6c 75 65 20 69 73   the P3 value is
318f0 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65 6e 20   non-zero, then 
31900 74 68 65 20 74 61 62 6c 65 20 72 65 66 65 72 72  the table referr
31910 65 64 20 74 6f 20 6d 75 73 74 20 62 65 20 61 6e  ed to must be an
31920 0a 2a 2a 20 69 6e 74 6b 65 79 20 74 61 62 6c 65  .** intkey table
31930 20 28 61 6e 20 53 51 4c 20 74 61 62 6c 65 2c 20   (an SQL table, 
31940 6e 6f 74 20 61 6e 20 69 6e 64 65 78 29 2e 20 49  not an index). I
31950 6e 20 74 68 69 73 20 63 61 73 65 20 74 68 65 20  n this case the 
31960 72 6f 77 20 63 68 61 6e 67 65 20 0a 2a 2a 20 63  row change .** c
31970 6f 75 6e 74 20 69 73 20 69 6e 63 72 65 6d 65 6e  ount is incremen
31980 74 65 64 20 62 79 20 74 68 65 20 6e 75 6d 62 65  ted by the numbe
31990 72 20 6f 66 20 72 6f 77 73 20 69 6e 20 74 68 65  r of rows in the
319a0 20 74 61 62 6c 65 20 62 65 69 6e 67 20 63 6c 65   table being cle
319b0 61 72 65 64 2e 20 0a 2a 2a 20 49 66 20 50 33 20  ared. .** If P3 
319c0 69 73 20 67 72 65 61 74 65 72 20 74 68 61 6e 20  is greater than 
319d0 7a 65 72 6f 2c 20 74 68 65 6e 20 74 68 65 20 76  zero, then the v
319e0 61 6c 75 65 20 73 74 6f 72 65 64 20 69 6e 20 72  alue stored in r
319f0 65 67 69 73 74 65 72 20 50 33 20 69 73 0a 2a 2a  egister P3 is.**
31a00 20 61 6c 73 6f 20 69 6e 63 72 65 6d 65 6e 74 65   also incremente
31a10 64 20 62 79 20 74 68 65 20 6e 75 6d 62 65 72 20  d by the number 
31a20 6f 66 20 72 6f 77 73 20 69 6e 20 74 68 65 20 74  of rows in the t
31a30 61 62 6c 65 20 62 65 69 6e 67 20 63 6c 65 61 72  able being clear
31a40 65 64 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c  ed..**.** See al
31a50 73 6f 3a 20 44 65 73 74 72 6f 79 0a 2a 2f 0a 63  so: Destroy.*/.c
31a60 61 73 65 20 4f 50 5f 43 6c 65 61 72 3a 20 7b 0a  ase OP_Clear: {.
31a70 20 20 69 6e 74 20 6e 43 68 61 6e 67 65 3b 0a 20    int nChange;. 
31a80 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e  .  sqlite3VdbeIn
31a90 63 72 57 72 69 74 65 43 6f 75 6e 74 65 72 28 70  crWriteCounter(p
31aa0 2c 20 30 29 3b 0a 20 20 6e 43 68 61 6e 67 65 20  , 0);.  nChange 
31ab0 3d 20 30 3b 0a 20 20 61 73 73 65 72 74 28 20 70  = 0;.  assert( p
31ac0 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30 20 29 3b  ->readOnly==0 );
31ad0 0a 20 20 61 73 73 65 72 74 28 20 44 62 4d 61 73  .  assert( DbMas
31ae0 6b 54 65 73 74 28 70 2d 3e 62 74 72 65 65 4d 61  kTest(p->btreeMa
31af0 73 6b 2c 20 70 4f 70 2d 3e 70 32 29 20 29 3b 0a  sk, pOp->p2) );.
31b00 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
31b10 72 65 65 43 6c 65 61 72 54 61 62 6c 65 28 0a 20  reeClearTable(. 
31b20 20 20 20 20 20 64 62 2d 3e 61 44 62 5b 70 4f 70       db->aDb[pOp
31b30 2d 3e 70 32 5d 2e 70 42 74 2c 20 70 4f 70 2d 3e  ->p2].pBt, pOp->
31b40 70 31 2c 20 28 70 4f 70 2d 3e 70 33 20 3f 20 26  p1, (pOp->p3 ? &
31b50 6e 43 68 61 6e 67 65 20 3a 20 30 29 0a 20 20 29  nChange : 0).  )
31b60 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 33 20  ;.  if( pOp->p3 
31b70 29 7b 0a 20 20 20 20 70 2d 3e 6e 43 68 61 6e 67  ){.    p->nChang
31b80 65 20 2b 3d 20 6e 43 68 61 6e 67 65 3b 0a 20 20  e += nChange;.  
31b90 20 20 69 66 28 20 70 4f 70 2d 3e 70 33 3e 30 20    if( pOp->p3>0 
31ba0 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  ){.      assert(
31bb0 20 6d 65 6d 49 73 56 61 6c 69 64 28 26 61 4d 65   memIsValid(&aMe
31bc0 6d 5b 70 4f 70 2d 3e 70 33 5d 29 20 29 3b 0a 20  m[pOp->p3]) );. 
31bd0 20 20 20 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43       memAboutToC
31be0 68 61 6e 67 65 28 70 2c 20 26 61 4d 65 6d 5b 70  hange(p, &aMem[p
31bf0 4f 70 2d 3e 70 33 5d 29 3b 0a 20 20 20 20 20 20  Op->p3]);.      
31c00 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 2e 75 2e  aMem[pOp->p3].u.
31c10 69 20 2b 3d 20 6e 43 68 61 6e 67 65 3b 0a 20 20  i += nChange;.  
31c20 20 20 7d 0a 20 20 7d 0a 20 20 69 66 28 20 72 63    }.  }.  if( rc
31c30 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75   ) goto abort_du
31c40 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 62 72  e_to_error;.  br
31c50 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
31c60 65 3a 20 52 65 73 65 74 53 6f 72 74 65 72 20 50  e: ResetSorter P
31c70 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20  1 * * * *.**.** 
31c80 44 65 6c 65 74 65 20 61 6c 6c 20 63 6f 6e 74 65  Delete all conte
31c90 6e 74 73 20 66 72 6f 6d 20 74 68 65 20 65 70 68  nts from the eph
31ca0 65 6d 65 72 61 6c 20 74 61 62 6c 65 20 6f 72 20  emeral table or 
31cb0 73 6f 72 74 65 72 0a 2a 2a 20 74 68 61 74 20 69  sorter.** that i
31cc0 73 20 6f 70 65 6e 20 6f 6e 20 63 75 72 73 6f 72  s open on cursor
31cd0 20 50 31 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20   P1..**.** This 
31ce0 6f 70 63 6f 64 65 20 6f 6e 6c 79 20 77 6f 72 6b  opcode only work
31cf0 73 20 66 6f 72 20 63 75 72 73 6f 72 73 20 75 73  s for cursors us
31d00 65 64 20 66 6f 72 20 73 6f 72 74 69 6e 67 20 61  ed for sorting a
31d10 6e 64 0a 2a 2a 20 6f 70 65 6e 65 64 20 77 69 74  nd.** opened wit
31d20 68 20 4f 50 5f 4f 70 65 6e 45 70 68 65 6d 65 72  h OP_OpenEphemer
31d30 61 6c 20 6f 72 20 4f 50 5f 53 6f 72 74 65 72 4f  al or OP_SorterO
31d40 70 65 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  pen..*/.case OP_
31d50 52 65 73 65 74 53 6f 72 74 65 72 3a 20 7b 0a 20  ResetSorter: {. 
31d60 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b   VdbeCursor *pC;
31d70 0a 20 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  . .  assert( pOp
31d80 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e  ->p1>=0 && pOp->
31d90 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b  p1<p->nCursor );
31da0 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72  .  pC = p->apCsr
31db0 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
31dc0 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20  ert( pC!=0 );.  
31dd0 69 66 28 20 69 73 53 6f 72 74 65 72 28 70 43 29  if( isSorter(pC)
31de0 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56   ){.    sqlite3V
31df0 64 62 65 53 6f 72 74 65 72 52 65 73 65 74 28 64  dbeSorterReset(d
31e00 62 2c 20 70 43 2d 3e 75 63 2e 70 53 6f 72 74 65  b, pC->uc.pSorte
31e10 72 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  r);.  }else{.   
31e20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 65 43 75   assert( pC->eCu
31e30 72 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f 42  rType==CURTYPE_B
31e40 54 52 45 45 20 29 3b 0a 20 20 20 20 61 73 73 65  TREE );.    asse
31e50 72 74 28 20 70 43 2d 3e 69 73 45 70 68 65 6d 65  rt( pC->isEpheme
31e60 72 61 6c 20 29 3b 0a 20 20 20 20 72 63 20 3d 20  ral );.    rc = 
31e70 73 71 6c 69 74 65 33 42 74 72 65 65 43 6c 65 61  sqlite3BtreeClea
31e80 72 54 61 62 6c 65 4f 66 43 75 72 73 6f 72 28 70  rTableOfCursor(p
31e90 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 29 3b 0a  C->uc.pCursor);.
31ea0 20 20 20 20 69 66 28 20 72 63 20 29 20 67 6f 74      if( rc ) got
31eb0 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
31ec0 72 72 6f 72 3b 0a 20 20 7d 0a 20 20 62 72 65 61  rror;.  }.  brea
31ed0 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
31ee0 20 43 72 65 61 74 65 42 74 72 65 65 20 50 31 20   CreateBtree P1 
31ef0 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e  P2 P3 * *.** Syn
31f00 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 72 6f 6f  opsis: r[P2]=roo
31f10 74 20 69 44 62 3d 50 31 20 66 6c 61 67 73 3d 50  t iDb=P1 flags=P
31f20 33 0a 2a 2a 0a 2a 2a 20 41 6c 6c 6f 63 61 74 65  3.**.** Allocate
31f30 20 61 20 6e 65 77 20 62 2d 74 72 65 65 20 69 6e   a new b-tree in
31f40 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61   the main databa
31f50 73 65 20 66 69 6c 65 20 69 66 20 50 31 3d 3d 30  se file if P1==0
31f60 20 6f 72 20 69 6e 20 74 68 65 0a 2a 2a 20 54 45   or in the.** TE
31f70 4d 50 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  MP database file
31f80 20 69 66 20 50 31 3d 3d 31 20 6f 72 20 69 6e 20   if P1==1 or in 
31f90 61 6e 20 61 74 74 61 63 68 65 64 20 64 61 74 61  an attached data
31fa0 62 61 73 65 20 69 66 0a 2a 2a 20 50 31 3e 31 2e  base if.** P1>1.
31fb0 20 20 54 68 65 20 50 33 20 61 72 67 75 6d 65 6e    The P3 argumen
31fc0 74 20 6d 75 73 74 20 62 65 20 31 20 28 42 54 52  t must be 1 (BTR
31fd0 45 45 5f 49 4e 54 4b 45 59 29 20 66 6f 72 20 61  EE_INTKEY) for a
31fe0 20 72 6f 77 69 64 20 74 61 62 6c 65 0a 2a 2a 20   rowid table.** 
31ff0 69 74 20 6d 75 73 74 20 62 65 20 32 20 28 42 54  it must be 2 (BT
32000 52 45 45 5f 42 4c 4f 42 4b 45 59 29 20 66 6f 72  REE_BLOBKEY) for
32010 20 61 6e 20 69 6e 64 65 78 20 6f 72 20 57 49 54   an index or WIT
32020 48 4f 55 54 20 52 4f 57 49 44 20 74 61 62 6c 65  HOUT ROWID table
32030 2e 0a 2a 2a 20 54 68 65 20 72 6f 6f 74 20 70 61  ..** The root pa
32040 67 65 20 6e 75 6d 62 65 72 20 6f 66 20 74 68 65  ge number of the
32050 20 6e 65 77 20 62 2d 74 72 65 65 20 69 73 20 73   new b-tree is s
32060 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74 65  tored in registe
32070 72 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  r P2..*/.case OP
32080 5f 43 72 65 61 74 65 42 74 72 65 65 3a 20 7b 20  _CreateBtree: { 
32090 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32           /* out2
320a0 20 2a 2f 0a 20 20 69 6e 74 20 70 67 6e 6f 3b 0a   */.  int pgno;.
320b0 20 20 44 62 20 2a 70 44 62 3b 0a 0a 20 20 73 71    Db *pDb;..  sq
320c0 6c 69 74 65 33 56 64 62 65 49 6e 63 72 57 72 69  lite3VdbeIncrWri
320d0 74 65 43 6f 75 6e 74 65 72 28 70 2c 20 30 29 3b  teCounter(p, 0);
320e0 0a 20 20 70 4f 75 74 20 3d 20 6f 75 74 32 50 72  .  pOut = out2Pr
320f0 65 72 65 6c 65 61 73 65 28 70 2c 20 70 4f 70 29  erelease(p, pOp)
32100 3b 0a 20 20 70 67 6e 6f 20 3d 20 30 3b 0a 20 20  ;.  pgno = 0;.  
32110 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3d  assert( pOp->p3=
32120 3d 42 54 52 45 45 5f 49 4e 54 4b 45 59 20 7c 7c  =BTREE_INTKEY ||
32130 20 70 4f 70 2d 3e 70 33 3d 3d 42 54 52 45 45 5f   pOp->p3==BTREE_
32140 42 4c 4f 42 4b 45 59 20 29 3b 0a 20 20 61 73 73  BLOBKEY );.  ass
32150 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20  ert( pOp->p1>=0 
32160 26 26 20 70 4f 70 2d 3e 70 31 3c 64 62 2d 3e 6e  && pOp->p1<db->n
32170 44 62 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  Db );.  assert( 
32180 44 62 4d 61 73 6b 54 65 73 74 28 70 2d 3e 62 74  DbMaskTest(p->bt
32190 72 65 65 4d 61 73 6b 2c 20 70 4f 70 2d 3e 70 31  reeMask, pOp->p1
321a0 29 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  ) );.  assert( p
321b0 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30 20 29 3b  ->readOnly==0 );
321c0 0a 20 20 70 44 62 20 3d 20 26 64 62 2d 3e 61 44  .  pDb = &db->aD
321d0 62 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  b[pOp->p1];.  as
321e0 73 65 72 74 28 20 70 44 62 2d 3e 70 42 74 21 3d  sert( pDb->pBt!=
321f0 30 20 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69  0 );.  rc = sqli
32200 74 65 33 42 74 72 65 65 43 72 65 61 74 65 54 61  te3BtreeCreateTa
32210 62 6c 65 28 70 44 62 2d 3e 70 42 74 2c 20 26 70  ble(pDb->pBt, &p
32220 67 6e 6f 2c 20 70 4f 70 2d 3e 70 33 29 3b 0a 20  gno, pOp->p3);. 
32230 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61   if( rc ) goto a
32240 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
32250 72 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d  r;.  pOut->u.i =
32260 20 70 67 6e 6f 3b 0a 20 20 62 72 65 61 6b 3b 0a   pgno;.  break;.
32270 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 71  }../* Opcode: Sq
32280 6c 45 78 65 63 20 2a 20 2a 20 2a 20 50 34 20 2a  lExec * * * P4 *
32290 0a 2a 2a 0a 2a 2a 20 52 75 6e 20 74 68 65 20 53  .**.** Run the S
322a0 51 4c 20 73 74 61 74 65 6d 65 6e 74 20 6f 72 20  QL statement or 
322b0 73 74 61 74 65 6d 65 6e 74 73 20 73 70 65 63 69  statements speci
322c0 66 69 65 64 20 69 6e 20 74 68 65 20 50 34 20 73  fied in the P4 s
322d0 74 72 69 6e 67 2e 0a 2a 2f 0a 63 61 73 65 20 4f  tring..*/.case O
322e0 50 5f 53 71 6c 45 78 65 63 3a 20 7b 0a 20 20 73  P_SqlExec: {.  s
322f0 71 6c 69 74 65 33 56 64 62 65 49 6e 63 72 57 72  qlite3VdbeIncrWr
32300 69 74 65 43 6f 75 6e 74 65 72 28 70 2c 20 30 29  iteCounter(p, 0)
32310 3b 0a 20 20 64 62 2d 3e 6e 53 71 6c 45 78 65 63  ;.  db->nSqlExec
32320 2b 2b 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74  ++;.  rc = sqlit
32330 65 33 5f 65 78 65 63 28 64 62 2c 20 70 4f 70 2d  e3_exec(db, pOp-
32340 3e 70 34 2e 7a 2c 20 30 2c 20 30 2c 20 30 29 3b  >p4.z, 0, 0, 0);
32350 0a 20 20 64 62 2d 3e 6e 53 71 6c 45 78 65 63 2d  .  db->nSqlExec-
32360 2d 3b 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f  -;.  if( rc ) go
32370 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
32380 65 72 72 6f 72 3b 0a 20 20 62 72 65 61 6b 3b 0a  error;.  break;.
32390 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 50 61  }../* Opcode: Pa
323a0 72 73 65 53 63 68 65 6d 61 20 50 31 20 2a 20 2a  rseSchema P1 * *
323b0 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 52 65 61 64   P4 *.**.** Read
323c0 20 61 6e 64 20 70 61 72 73 65 20 61 6c 6c 20 65   and parse all e
323d0 6e 74 72 69 65 73 20 66 72 6f 6d 20 74 68 65 20  ntries from the 
323e0 53 51 4c 49 54 45 5f 4d 41 53 54 45 52 20 74 61  SQLITE_MASTER ta
323f0 62 6c 65 20 6f 66 20 64 61 74 61 62 61 73 65 20  ble of database 
32400 50 31 0a 2a 2a 20 74 68 61 74 20 6d 61 74 63 68  P1.** that match
32410 20 74 68 65 20 57 48 45 52 45 20 63 6c 61 75 73   the WHERE claus
32420 65 20 50 34 2e 20 20 49 66 20 50 34 20 69 73 20  e P4.  If P4 is 
32430 61 20 4e 55 4c 4c 20 70 6f 69 6e 74 65 72 2c 20  a NULL pointer, 
32440 74 68 65 6e 20 74 68 65 0a 2a 2a 20 65 6e 74 69  then the.** enti
32450 72 65 20 73 63 68 65 6d 61 20 66 6f 72 20 50 31  re schema for P1
32460 20 69 73 20 72 65 70 61 72 73 65 64 2e 0a 2a 2a   is reparsed..**
32470 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20  .** This opcode 
32480 69 6e 76 6f 6b 65 73 20 74 68 65 20 70 61 72 73  invokes the pars
32490 65 72 20 74 6f 20 63 72 65 61 74 65 20 61 20 6e  er to create a n
324a0 65 77 20 76 69 72 74 75 61 6c 20 6d 61 63 68 69  ew virtual machi
324b0 6e 65 2c 0a 2a 2a 20 74 68 65 6e 20 72 75 6e 73  ne,.** then runs
324c0 20 74 68 65 20 6e 65 77 20 76 69 72 74 75 61 6c   the new virtual
324d0 20 6d 61 63 68 69 6e 65 2e 20 20 49 74 20 69 73   machine.  It is
324e0 20 74 68 75 73 20 61 20 72 65 2d 65 6e 74 72 61   thus a re-entra
324f0 6e 74 20 6f 70 63 6f 64 65 2e 0a 2a 2f 0a 63 61  nt opcode..*/.ca
32500 73 65 20 4f 50 5f 50 61 72 73 65 53 63 68 65 6d  se OP_ParseSchem
32510 61 3a 20 7b 0a 20 20 69 6e 74 20 69 44 62 3b 0a  a: {.  int iDb;.
32520 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4d    const char *zM
32530 61 73 74 65 72 3b 0a 20 20 63 68 61 72 20 2a 7a  aster;.  char *z
32540 53 71 6c 3b 0a 20 20 49 6e 69 74 44 61 74 61 20  Sql;.  InitData 
32550 69 6e 69 74 44 61 74 61 3b 0a 0a 20 20 2f 2a 20  initData;..  /* 
32560 41 6e 79 20 70 72 65 70 61 72 65 64 20 73 74 61  Any prepared sta
32570 74 65 6d 65 6e 74 20 74 68 61 74 20 69 6e 76 6f  tement that invo
32580 6b 65 73 20 74 68 69 73 20 6f 70 63 6f 64 65 20  kes this opcode 
32590 77 69 6c 6c 20 68 6f 6c 64 20 6d 75 74 65 78 65  will hold mutexe
325a0 73 0a 20 20 2a 2a 20 6f 6e 20 65 76 65 72 79 20  s.  ** on every 
325b0 62 74 72 65 65 2e 20 20 54 68 69 73 20 69 73 20  btree.  This is 
325c0 61 20 70 72 65 72 65 71 75 69 73 69 74 65 20 66  a prerequisite f
325d0 6f 72 20 69 6e 76 6f 6b 69 6e 67 20 0a 20 20 2a  or invoking .  *
325e0 2a 20 73 71 6c 69 74 65 33 49 6e 69 74 43 61 6c  * sqlite3InitCal
325f0 6c 62 61 63 6b 28 29 2e 0a 20 20 2a 2f 0a 23 69  lback()..  */.#i
32600 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55  fdef SQLITE_DEBU
32610 47 0a 20 20 66 6f 72 28 69 44 62 3d 30 3b 20 69  G.  for(iDb=0; i
32620 44 62 3c 64 62 2d 3e 6e 44 62 3b 20 69 44 62 2b  Db<db->nDb; iDb+
32630 2b 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20  +){.    assert( 
32640 69 44 62 3d 3d 31 20 7c 7c 20 73 71 6c 69 74 65  iDb==1 || sqlite
32650 33 42 74 72 65 65 48 6f 6c 64 73 4d 75 74 65 78  3BtreeHoldsMutex
32660 28 64 62 2d 3e 61 44 62 5b 69 44 62 5d 2e 70 42  (db->aDb[iDb].pB
32670 74 29 20 29 3b 0a 20 20 7d 0a 23 65 6e 64 69 66  t) );.  }.#endif
32680 0a 0a 20 20 69 44 62 20 3d 20 70 4f 70 2d 3e 70  ..  iDb = pOp->p
32690 31 3b 0a 20 20 61 73 73 65 72 74 28 20 69 44 62  1;.  assert( iDb
326a0 3e 3d 30 20 26 26 20 69 44 62 3c 64 62 2d 3e 6e  >=0 && iDb<db->n
326b0 44 62 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  Db );.  assert( 
326c0 44 62 48 61 73 50 72 6f 70 65 72 74 79 28 64 62  DbHasProperty(db
326d0 2c 20 69 44 62 2c 20 44 42 5f 53 63 68 65 6d 61  , iDb, DB_Schema
326e0 4c 6f 61 64 65 64 29 20 29 3b 0a 0a 23 69 66 6e  Loaded) );..#ifn
326f0 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
32700 41 4c 54 45 52 54 41 42 4c 45 0a 20 20 69 66 28  ALTERTABLE.  if(
32710 20 70 4f 70 2d 3e 70 34 2e 7a 3d 3d 30 20 29 7b   pOp->p4.z==0 ){
32720 0a 20 20 20 20 73 71 6c 69 74 65 33 53 63 68 65  .    sqlite3Sche
32730 6d 61 43 6c 65 61 72 28 64 62 2d 3e 61 44 62 5b  maClear(db->aDb[
32740 69 44 62 5d 2e 70 53 63 68 65 6d 61 29 3b 0a 20  iDb].pSchema);. 
32750 20 20 20 64 62 2d 3e 6d 44 62 46 6c 61 67 73 20     db->mDbFlags 
32760 26 3d 20 7e 44 42 46 4c 41 47 5f 53 63 68 65 6d  &= ~DBFLAG_Schem
32770 61 4b 6e 6f 77 6e 4f 6b 3b 0a 20 20 20 20 72 63  aKnownOk;.    rc
32780 20 3d 20 73 71 6c 69 74 65 33 49 6e 69 74 4f 6e   = sqlite3InitOn
32790 65 28 64 62 2c 20 69 44 62 2c 20 26 70 2d 3e 7a  e(db, iDb, &p->z
327a0 45 72 72 4d 73 67 2c 20 49 4e 49 54 46 4c 41 47  ErrMsg, INITFLAG
327b0 5f 41 6c 74 65 72 54 61 62 6c 65 29 3b 0a 20 20  _AlterTable);.  
327c0 20 20 64 62 2d 3e 6d 44 62 46 6c 61 67 73 20 7c    db->mDbFlags |
327d0 3d 20 44 42 46 4c 41 47 5f 53 63 68 65 6d 61 43  = DBFLAG_SchemaC
327e0 68 61 6e 67 65 3b 0a 20 20 20 20 70 2d 3e 65 78  hange;.    p->ex
327f0 70 69 72 65 64 20 3d 20 30 3b 0a 20 20 7d 65 6c  pired = 0;.  }el
32800 73 65 0a 23 65 6e 64 69 66 0a 20 20 7b 0a 20 20  se.#endif.  {.  
32810 20 20 7a 4d 61 73 74 65 72 20 3d 20 4d 41 53 54    zMaster = MAST
32820 45 52 5f 4e 41 4d 45 3b 0a 20 20 20 20 69 6e 69  ER_NAME;.    ini
32830 74 44 61 74 61 2e 64 62 20 3d 20 64 62 3b 0a 20  tData.db = db;. 
32840 20 20 20 69 6e 69 74 44 61 74 61 2e 69 44 62 20     initData.iDb 
32850 3d 20 69 44 62 3b 0a 20 20 20 20 69 6e 69 74 44  = iDb;.    initD
32860 61 74 61 2e 70 7a 45 72 72 4d 73 67 20 3d 20 26  ata.pzErrMsg = &
32870 70 2d 3e 7a 45 72 72 4d 73 67 3b 0a 20 20 20 20  p->zErrMsg;.    
32880 69 6e 69 74 44 61 74 61 2e 6d 49 6e 69 74 46 6c  initData.mInitFl
32890 61 67 73 20 3d 20 30 3b 0a 20 20 20 20 7a 53 71  ags = 0;.    zSq
328a0 6c 20 3d 20 73 71 6c 69 74 65 33 4d 50 72 69 6e  l = sqlite3MPrin
328b0 74 66 28 64 62 2c 0a 20 20 20 20 20 20 20 22 53  tf(db,.       "S
328c0 45 4c 45 43 54 2a 46 52 4f 4d 5c 22 25 77 5c 22  ELECT*FROM\"%w\"
328d0 2e 25 73 20 57 48 45 52 45 20 25 73 20 4f 52 44  .%s WHERE %s ORD
328e0 45 52 20 42 59 20 72 6f 77 69 64 22 2c 0a 20 20  ER BY rowid",.  
328f0 20 20 20 20 20 64 62 2d 3e 61 44 62 5b 69 44 62       db->aDb[iDb
32900 5d 2e 7a 44 62 53 4e 61 6d 65 2c 20 7a 4d 61 73  ].zDbSName, zMas
32910 74 65 72 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b  ter, pOp->p4.z);
32920 0a 20 20 20 20 69 66 28 20 7a 53 71 6c 3d 3d 30  .    if( zSql==0
32930 20 29 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 53   ){.      rc = S
32940 51 4c 49 54 45 5f 4e 4f 4d 45 4d 5f 42 4b 50 54  QLITE_NOMEM_BKPT
32950 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20  ;.    }else{.   
32960 20 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e 69     assert( db->i
32970 6e 69 74 2e 62 75 73 79 3d 3d 30 20 29 3b 0a 20  nit.busy==0 );. 
32980 20 20 20 20 20 64 62 2d 3e 69 6e 69 74 2e 62 75       db->init.bu
32990 73 79 20 3d 20 31 3b 0a 20 20 20 20 20 20 69 6e  sy = 1;.      in
329a0 69 74 44 61 74 61 2e 72 63 20 3d 20 53 51 4c 49  itData.rc = SQLI
329b0 54 45 5f 4f 4b 3b 0a 20 20 20 20 20 20 69 6e 69  TE_OK;.      ini
329c0 74 44 61 74 61 2e 6e 49 6e 69 74 52 6f 77 20 3d  tData.nInitRow =
329d0 20 30 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74   0;.      assert
329e0 28 20 21 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69  ( !db->mallocFai
329f0 6c 65 64 20 29 3b 0a 20 20 20 20 20 20 72 63 20  led );.      rc 
32a00 3d 20 73 71 6c 69 74 65 33 5f 65 78 65 63 28 64  = sqlite3_exec(d
32a10 62 2c 20 7a 53 71 6c 2c 20 73 71 6c 69 74 65 33  b, zSql, sqlite3
32a20 49 6e 69 74 43 61 6c 6c 62 61 63 6b 2c 20 26 69  InitCallback, &i
32a30 6e 69 74 44 61 74 61 2c 20 30 29 3b 0a 20 20 20  nitData, 0);.   
32a40 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54     if( rc==SQLIT
32a50 45 5f 4f 4b 20 29 20 72 63 20 3d 20 69 6e 69 74  E_OK ) rc = init
32a60 44 61 74 61 2e 72 63 3b 0a 20 20 20 20 20 20 69  Data.rc;.      i
32a70 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc==SQLITE_OK
32a80 20 26 26 20 69 6e 69 74 44 61 74 61 2e 6e 49 6e   && initData.nIn
32a90 69 74 52 6f 77 3d 3d 30 20 29 7b 0a 20 20 20 20  itRow==0 ){.    
32aa0 20 20 20 20 2f 2a 20 54 68 65 20 4f 50 5f 50 61      /* The OP_Pa
32ab0 72 73 65 53 63 68 65 6d 61 20 6f 70 63 6f 64 65  rseSchema opcode
32ac0 20 77 69 74 68 20 61 20 6e 6f 6e 2d 4e 55 4c 4c   with a non-NULL
32ad0 20 50 34 20 61 72 67 75 6d 65 6e 74 20 73 68 6f   P4 argument sho
32ae0 75 6c 64 20 70 61 72 73 65 0a 20 20 20 20 20 20  uld parse.      
32af0 20 20 2a 2a 20 61 74 20 6c 65 61 73 74 20 6f 6e    ** at least on
32b00 65 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 2e  e SQL statement.
32b10 20 41 6e 79 20 6c 65 73 73 20 74 68 61 6e 20 74   Any less than t
32b20 68 61 74 20 69 6e 64 69 63 61 74 65 73 20 74 68  hat indicates th
32b30 61 74 0a 20 20 20 20 20 20 20 20 2a 2a 20 74 68  at.        ** th
32b40 65 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 20  e sqlite_master 
32b50 74 61 62 6c 65 20 69 73 20 63 6f 72 72 75 70 74  table is corrupt
32b60 2e 20 2a 2f 0a 20 20 20 20 20 20 20 20 72 63 20  . */.        rc 
32b70 3d 20 53 51 4c 49 54 45 5f 43 4f 52 52 55 50 54  = SQLITE_CORRUPT
32b80 5f 42 4b 50 54 3b 0a 20 20 20 20 20 20 7d 0a 20  _BKPT;.      }. 
32b90 20 20 20 20 20 73 71 6c 69 74 65 33 44 62 46 72       sqlite3DbFr
32ba0 65 65 4e 4e 28 64 62 2c 20 7a 53 71 6c 29 3b 0a  eeNN(db, zSql);.
32bb0 20 20 20 20 20 20 64 62 2d 3e 69 6e 69 74 2e 62        db->init.b
32bc0 75 73 79 20 3d 20 30 3b 0a 20 20 20 20 7d 0a 20  usy = 0;.    }. 
32bd0 20 7d 0a 20 20 69 66 28 20 72 63 20 29 7b 0a 20   }.  if( rc ){. 
32be0 20 20 20 73 71 6c 69 74 65 33 52 65 73 65 74 41     sqlite3ResetA
32bf0 6c 6c 53 63 68 65 6d 61 73 4f 66 43 6f 6e 6e 65  llSchemasOfConne
32c00 63 74 69 6f 6e 28 64 62 29 3b 0a 20 20 20 20 69  ction(db);.    i
32c10 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4e 4f  f( rc==SQLITE_NO
32c20 4d 45 4d 20 29 7b 0a 20 20 20 20 20 20 67 6f 74  MEM ){.      got
32c30 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 20 20 7d 0a  o no_mem;.    }.
32c40 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64      goto abort_d
32c50 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 7d  ue_to_error;.  }
32c60 0a 20 20 62 72 65 61 6b 3b 20 20 0a 7d 0a 0a 23  .  break;  .}..#
32c70 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  if !defined(SQLI
32c80 54 45 5f 4f 4d 49 54 5f 41 4e 41 4c 59 5a 45 29  TE_OMIT_ANALYZE)
32c90 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4c 6f 61 64  ./* Opcode: Load
32ca0 41 6e 61 6c 79 73 69 73 20 50 31 20 2a 20 2a 20  Analysis P1 * * 
32cb0 2a 20 2a 0a 2a 2a 0a 2a 2a 20 52 65 61 64 20 74  * *.**.** Read t
32cc0 68 65 20 73 71 6c 69 74 65 5f 73 74 61 74 31 20  he sqlite_stat1 
32cd0 74 61 62 6c 65 20 66 6f 72 20 64 61 74 61 62 61  table for databa
32ce0 73 65 20 50 31 20 61 6e 64 20 6c 6f 61 64 20 74  se P1 and load t
32cf0 68 65 20 63 6f 6e 74 65 6e 74 0a 2a 2a 20 6f 66  he content.** of
32d00 20 74 68 61 74 20 74 61 62 6c 65 20 69 6e 74 6f   that table into
32d10 20 74 68 65 20 69 6e 74 65 72 6e 61 6c 20 69 6e   the internal in
32d20 64 65 78 20 68 61 73 68 20 74 61 62 6c 65 2e 20  dex hash table. 
32d30 20 54 68 69 73 20 77 69 6c 6c 20 63 61 75 73 65   This will cause
32d40 0a 2a 2a 20 74 68 65 20 61 6e 61 6c 79 73 69 73  .** the analysis
32d50 20 74 6f 20 62 65 20 75 73 65 64 20 77 68 65 6e   to be used when
32d60 20 70 72 65 70 61 72 69 6e 67 20 61 6c 6c 20 73   preparing all s
32d70 75 62 73 65 71 75 65 6e 74 20 71 75 65 72 69 65  ubsequent querie
32d80 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4c 6f  s..*/.case OP_Lo
32d90 61 64 41 6e 61 6c 79 73 69 73 3a 20 7b 0a 20 20  adAnalysis: {.  
32da0 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
32db0 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 64 62  =0 && pOp->p1<db
32dc0 2d 3e 6e 44 62 20 29 3b 0a 20 20 72 63 20 3d 20  ->nDb );.  rc = 
32dd0 73 71 6c 69 74 65 33 41 6e 61 6c 79 73 69 73 4c  sqlite3AnalysisL
32de0 6f 61 64 28 64 62 2c 20 70 4f 70 2d 3e 70 31 29  oad(db, pOp->p1)
32df0 3b 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f 74  ;.  if( rc ) got
32e00 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
32e10 72 72 6f 72 3b 0a 20 20 62 72 65 61 6b 3b 20 20  rror;.  break;  
32e20 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 21 64 65  .}.#endif /* !de
32e30 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49  fined(SQLITE_OMI
32e40 54 5f 41 4e 41 4c 59 5a 45 29 20 2a 2f 0a 0a 2f  T_ANALYZE) */../
32e50 2a 20 4f 70 63 6f 64 65 3a 20 44 72 6f 70 54 61  * Opcode: DropTa
32e60 62 6c 65 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a  ble P1 * * P4 *.
32e70 2a 2a 0a 2a 2a 20 52 65 6d 6f 76 65 20 74 68 65  **.** Remove the
32e80 20 69 6e 74 65 72 6e 61 6c 20 28 69 6e 2d 6d 65   internal (in-me
32e90 6d 6f 72 79 29 20 64 61 74 61 20 73 74 72 75 63  mory) data struc
32ea0 74 75 72 65 73 20 74 68 61 74 20 64 65 73 63 72  tures that descr
32eb0 69 62 65 0a 2a 2a 20 74 68 65 20 74 61 62 6c 65  ibe.** the table
32ec0 20 6e 61 6d 65 64 20 50 34 20 69 6e 20 64 61 74   named P4 in dat
32ed0 61 62 61 73 65 20 50 31 2e 20 20 54 68 69 73 20  abase P1.  This 
32ee0 69 73 20 63 61 6c 6c 65 64 20 61 66 74 65 72 20  is called after 
32ef0 61 20 74 61 62 6c 65 0a 2a 2a 20 69 73 20 64 72  a table.** is dr
32f00 6f 70 70 65 64 20 66 72 6f 6d 20 64 69 73 6b 20  opped from disk 
32f10 28 75 73 69 6e 67 20 74 68 65 20 44 65 73 74 72  (using the Destr
32f20 6f 79 20 6f 70 63 6f 64 65 29 20 69 6e 20 6f 72  oy opcode) in or
32f30 64 65 72 20 74 6f 20 6b 65 65 70 20 0a 2a 2a 20  der to keep .** 
32f40 74 68 65 20 69 6e 74 65 72 6e 61 6c 20 72 65 70  the internal rep
32f50 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74  resentation of t
32f60 68 65 0a 2a 2a 20 73 63 68 65 6d 61 20 63 6f 6e  he.** schema con
32f70 73 69 73 74 65 6e 74 20 77 69 74 68 20 77 68 61  sistent with wha
32f80 74 20 69 73 20 6f 6e 20 64 69 73 6b 2e 0a 2a 2f  t is on disk..*/
32f90 0a 63 61 73 65 20 4f 50 5f 44 72 6f 70 54 61 62  .case OP_DropTab
32fa0 6c 65 3a 20 7b 0a 20 20 73 71 6c 69 74 65 33 56  le: {.  sqlite3V
32fb0 64 62 65 49 6e 63 72 57 72 69 74 65 43 6f 75 6e  dbeIncrWriteCoun
32fc0 74 65 72 28 70 2c 20 30 29 3b 0a 20 20 73 71 6c  ter(p, 0);.  sql
32fd0 69 74 65 33 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c  ite3UnlinkAndDel
32fe0 65 74 65 54 61 62 6c 65 28 64 62 2c 20 70 4f 70  eteTable(db, pOp
32ff0 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29  ->p1, pOp->p4.z)
33000 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
33010 20 4f 70 63 6f 64 65 3a 20 44 72 6f 70 49 6e 64   Opcode: DropInd
33020 65 78 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a  ex P1 * * P4 *.*
33030 2a 0a 2a 2a 20 52 65 6d 6f 76 65 20 74 68 65 20  *.** Remove the 
33040 69 6e 74 65 72 6e 61 6c 20 28 69 6e 2d 6d 65 6d  internal (in-mem
33050 6f 72 79 29 20 64 61 74 61 20 73 74 72 75 63 74  ory) data struct
33060 75 72 65 73 20 74 68 61 74 20 64 65 73 63 72 69  ures that descri
33070 62 65 0a 2a 2a 20 74 68 65 20 69 6e 64 65 78 20  be.** the index 
33080 6e 61 6d 65 64 20 50 34 20 69 6e 20 64 61 74 61  named P4 in data
33090 62 61 73 65 20 50 31 2e 20 20 54 68 69 73 20 69  base P1.  This i
330a0 73 20 63 61 6c 6c 65 64 20 61 66 74 65 72 20 61  s called after a
330b0 6e 20 69 6e 64 65 78 0a 2a 2a 20 69 73 20 64 72  n index.** is dr
330c0 6f 70 70 65 64 20 66 72 6f 6d 20 64 69 73 6b 20  opped from disk 
330d0 28 75 73 69 6e 67 20 74 68 65 20 44 65 73 74 72  (using the Destr
330e0 6f 79 20 6f 70 63 6f 64 65 29 0a 2a 2a 20 69 6e  oy opcode).** in
330f0 20 6f 72 64 65 72 20 74 6f 20 6b 65 65 70 20 74   order to keep t
33100 68 65 20 69 6e 74 65 72 6e 61 6c 20 72 65 70 72  he internal repr
33110 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68  esentation of th
33120 65 0a 2a 2a 20 73 63 68 65 6d 61 20 63 6f 6e 73  e.** schema cons
33130 69 73 74 65 6e 74 20 77 69 74 68 20 77 68 61 74  istent with what
33140 20 69 73 20 6f 6e 20 64 69 73 6b 2e 0a 2a 2f 0a   is on disk..*/.
33150 63 61 73 65 20 4f 50 5f 44 72 6f 70 49 6e 64 65  case OP_DropInde
33160 78 3a 20 7b 0a 20 20 73 71 6c 69 74 65 33 56 64  x: {.  sqlite3Vd
33170 62 65 49 6e 63 72 57 72 69 74 65 43 6f 75 6e 74  beIncrWriteCount
33180 65 72 28 70 2c 20 30 29 3b 0a 20 20 73 71 6c 69  er(p, 0);.  sqli
33190 74 65 33 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65  te3UnlinkAndDele
331a0 74 65 49 6e 64 65 78 28 64 62 2c 20 70 4f 70 2d  teIndex(db, pOp-
331b0 3e 70 31 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b  >p1, pOp->p4.z);
331c0 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
331d0 4f 70 63 6f 64 65 3a 20 44 72 6f 70 54 72 69 67  Opcode: DropTrig
331e0 67 65 72 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a  ger P1 * * P4 *.
331f0 2a 2a 0a 2a 2a 20 52 65 6d 6f 76 65 20 74 68 65  **.** Remove the
33200 20 69 6e 74 65 72 6e 61 6c 20 28 69 6e 2d 6d 65   internal (in-me
33210 6d 6f 72 79 29 20 64 61 74 61 20 73 74 72 75 63  mory) data struc
33220 74 75 72 65 73 20 74 68 61 74 20 64 65 73 63 72  tures that descr
33230 69 62 65 0a 2a 2a 20 74 68 65 20 74 72 69 67 67  ibe.** the trigg
33240 65 72 20 6e 61 6d 65 64 20 50 34 20 69 6e 20 64  er named P4 in d
33250 61 74 61 62 61 73 65 20 50 31 2e 20 20 54 68 69  atabase P1.  Thi
33260 73 20 69 73 20 63 61 6c 6c 65 64 20 61 66 74 65  s is called afte
33270 72 20 61 20 74 72 69 67 67 65 72 0a 2a 2a 20 69  r a trigger.** i
33280 73 20 64 72 6f 70 70 65 64 20 66 72 6f 6d 20 64  s dropped from d
33290 69 73 6b 20 28 75 73 69 6e 67 20 74 68 65 20 44  isk (using the D
332a0 65 73 74 72 6f 79 20 6f 70 63 6f 64 65 29 20 69  estroy opcode) i
332b0 6e 20 6f 72 64 65 72 20 74 6f 20 6b 65 65 70 20  n order to keep 
332c0 0a 2a 2a 20 74 68 65 20 69 6e 74 65 72 6e 61 6c  .** the internal
332d0 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20   representation 
332e0 6f 66 20 74 68 65 0a 2a 2a 20 73 63 68 65 6d 61  of the.** schema
332f0 20 63 6f 6e 73 69 73 74 65 6e 74 20 77 69 74 68   consistent with
33300 20 77 68 61 74 20 69 73 20 6f 6e 20 64 69 73 6b   what is on disk
33310 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 44 72 6f  ..*/.case OP_Dro
33320 70 54 72 69 67 67 65 72 3a 20 7b 0a 20 20 73 71  pTrigger: {.  sq
33330 6c 69 74 65 33 56 64 62 65 49 6e 63 72 57 72 69  lite3VdbeIncrWri
33340 74 65 43 6f 75 6e 74 65 72 28 70 2c 20 30 29 3b  teCounter(p, 0);
33350 0a 20 20 73 71 6c 69 74 65 33 55 6e 6c 69 6e 6b  .  sqlite3Unlink
33360 41 6e 64 44 65 6c 65 74 65 54 72 69 67 67 65 72  AndDeleteTrigger
33370 28 64 62 2c 20 70 4f 70 2d 3e 70 31 2c 20 70 4f  (db, pOp->p1, pO
33380 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20 62 72 65 61  p->p4.z);.  brea
33390 6b 3b 0a 7d 0a 0a 0a 23 69 66 6e 64 65 66 20 53  k;.}...#ifndef S
333a0 51 4c 49 54 45 5f 4f 4d 49 54 5f 49 4e 54 45 47  QLITE_OMIT_INTEG
333b0 52 49 54 59 5f 43 48 45 43 4b 0a 2f 2a 20 4f 70  RITY_CHECK./* Op
333c0 63 6f 64 65 3a 20 49 6e 74 65 67 72 69 74 79 43  code: IntegrityC
333d0 6b 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35  k P1 P2 P3 P4 P5
333e0 0a 2a 2a 0a 2a 2a 20 44 6f 20 61 6e 20 61 6e 61  .**.** Do an ana
333f0 6c 79 73 69 73 20 6f 66 20 74 68 65 20 63 75 72  lysis of the cur
33400 72 65 6e 74 6c 79 20 6f 70 65 6e 20 64 61 74 61  rently open data
33410 62 61 73 65 2e 20 20 53 74 6f 72 65 20 69 6e 0a  base.  Store in.
33420 2a 2a 20 72 65 67 69 73 74 65 72 20 50 31 20 74  ** register P1 t
33430 68 65 20 74 65 78 74 20 6f 66 20 61 6e 20 65 72  he text of an er
33440 72 6f 72 20 6d 65 73 73 61 67 65 20 64 65 73 63  ror message desc
33450 72 69 62 69 6e 67 20 61 6e 79 20 70 72 6f 62 6c  ribing any probl
33460 65 6d 73 2e 0a 2a 2a 20 49 66 20 6e 6f 20 70 72  ems..** If no pr
33470 6f 62 6c 65 6d 73 20 61 72 65 20 66 6f 75 6e 64  oblems are found
33480 2c 20 73 74 6f 72 65 20 61 20 4e 55 4c 4c 20 69  , store a NULL i
33490 6e 20 72 65 67 69 73 74 65 72 20 50 31 2e 0a 2a  n register P1..*
334a0 2a 0a 2a 2a 20 54 68 65 20 72 65 67 69 73 74 65  *.** The registe
334b0 72 20 50 33 20 63 6f 6e 74 61 69 6e 73 20 6f 6e  r P3 contains on
334c0 65 20 6c 65 73 73 20 74 68 61 6e 20 74 68 65 20  e less than the 
334d0 6d 61 78 69 6d 75 6d 20 6e 75 6d 62 65 72 20 6f  maximum number o
334e0 66 20 61 6c 6c 6f 77 65 64 20 65 72 72 6f 72 73  f allowed errors
334f0 2e 0a 2a 2a 20 41 74 20 6d 6f 73 74 20 72 65 67  ..** At most reg
33500 28 50 33 29 20 65 72 72 6f 72 73 20 77 69 6c 6c  (P3) errors will
33510 20 62 65 20 72 65 70 6f 72 74 65 64 2e 0a 2a 2a   be reported..**
33520 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c   In other words,
33530 20 74 68 65 20 61 6e 61 6c 79 73 69 73 20 73 74   the analysis st
33540 6f 70 73 20 61 73 20 73 6f 6f 6e 20 61 73 20 72  ops as soon as r
33550 65 67 28 50 31 29 20 65 72 72 6f 72 73 20 61 72  eg(P1) errors ar
33560 65 20 0a 2a 2a 20 73 65 65 6e 2e 20 20 52 65 67  e .** seen.  Reg
33570 28 50 31 29 20 69 73 20 75 70 64 61 74 65 64 20  (P1) is updated 
33580 77 69 74 68 20 74 68 65 20 6e 75 6d 62 65 72 20  with the number 
33590 6f 66 20 65 72 72 6f 72 73 20 72 65 6d 61 69 6e  of errors remain
335a0 69 6e 67 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 72  ing..**.** The r
335b0 6f 6f 74 20 70 61 67 65 20 6e 75 6d 62 65 72 73  oot page numbers
335c0 20 6f 66 20 61 6c 6c 20 74 61 62 6c 65 73 20 69   of all tables i
335d0 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20 61  n the database a
335e0 72 65 20 69 6e 74 65 67 65 72 73 0a 2a 2a 20 73  re integers.** s
335f0 74 6f 72 65 64 20 69 6e 20 50 34 5f 49 4e 54 41  tored in P4_INTA
33600 52 52 41 59 20 61 72 67 75 6d 65 6e 74 2e 0a 2a  RRAY argument..*
33610 2a 0a 2a 2a 20 49 66 20 50 35 20 69 73 20 6e 6f  *.** If P5 is no
33620 74 20 7a 65 72 6f 2c 20 74 68 65 20 63 68 65 63  t zero, the chec
33630 6b 20 69 73 20 64 6f 6e 65 20 6f 6e 20 74 68 65  k is done on the
33640 20 61 75 78 69 6c 69 61 72 79 20 64 61 74 61 62   auxiliary datab
33650 61 73 65 0a 2a 2a 20 66 69 6c 65 2c 20 6e 6f 74  ase.** file, not
33660 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61   the main databa
33670 73 65 20 66 69 6c 65 2e 0a 2a 2a 0a 2a 2a 20 54  se file..**.** T
33680 68 69 73 20 6f 70 63 6f 64 65 20 69 73 20 75 73  his opcode is us
33690 65 64 20 74 6f 20 69 6d 70 6c 65 6d 65 6e 74 20  ed to implement 
336a0 74 68 65 20 69 6e 74 65 67 72 69 74 79 5f 63 68  the integrity_ch
336b0 65 63 6b 20 70 72 61 67 6d 61 2e 0a 2a 2f 0a 63  eck pragma..*/.c
336c0 61 73 65 20 4f 50 5f 49 6e 74 65 67 72 69 74 79  ase OP_Integrity
336d0 43 6b 3a 20 7b 0a 20 20 69 6e 74 20 6e 52 6f 6f  Ck: {.  int nRoo
336e0 74 3b 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65  t;      /* Numbe
336f0 72 20 6f 66 20 74 61 62 6c 65 73 20 74 6f 20 63  r of tables to c
33700 68 65 63 6b 2e 20 20 28 4e 75 6d 62 65 72 20 6f  heck.  (Number o
33710 66 20 72 6f 6f 74 20 70 61 67 65 73 2e 29 20 2a  f root pages.) *
33720 2f 0a 20 20 69 6e 74 20 2a 61 52 6f 6f 74 3b 20  /.  int *aRoot; 
33730 20 20 20 20 2f 2a 20 41 72 72 61 79 20 6f 66 20      /* Array of 
33740 72 6f 6f 74 70 61 67 65 20 6e 75 6d 62 65 72 73  rootpage numbers
33750 20 66 6f 72 20 74 61 62 6c 65 73 20 74 6f 20 62   for tables to b
33760 65 20 63 68 65 63 6b 65 64 20 2a 2f 0a 20 20 69  e checked */.  i
33770 6e 74 20 6e 45 72 72 3b 20 20 20 20 20 20 20 2f  nt nErr;       /
33780 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 72 72 6f  * Number of erro
33790 72 73 20 72 65 70 6f 72 74 65 64 20 2a 2f 0a 20  rs reported */. 
337a0 20 63 68 61 72 20 2a 7a 3b 20 20 20 20 20 20 20   char *z;       
337b0 20 2f 2a 20 54 65 78 74 20 6f 66 20 74 68 65 20   /* Text of the 
337c0 65 72 72 6f 72 20 72 65 70 6f 72 74 20 2a 2f 0a  error report */.
337d0 20 20 4d 65 6d 20 2a 70 6e 45 72 72 3b 20 20 20    Mem *pnErr;   
337e0 20 20 2f 2a 20 52 65 67 69 73 74 65 72 20 6b 65    /* Register ke
337f0 65 70 69 6e 67 20 74 72 61 63 6b 20 6f 66 20 65  eping track of e
33800 72 72 6f 72 73 20 72 65 6d 61 69 6e 69 6e 67 20  rrors remaining 
33810 2a 2f 0a 0a 20 20 61 73 73 65 72 74 28 20 70 2d  */..  assert( p-
33820 3e 62 49 73 52 65 61 64 65 72 20 29 3b 0a 20 20  >bIsReader );.  
33830 6e 52 6f 6f 74 20 3d 20 70 4f 70 2d 3e 70 32 3b  nRoot = pOp->p2;
33840 0a 20 20 61 52 6f 6f 74 20 3d 20 70 4f 70 2d 3e  .  aRoot = pOp->
33850 70 34 2e 61 69 3b 0a 20 20 61 73 73 65 72 74 28  p4.ai;.  assert(
33860 20 6e 52 6f 6f 74 3e 30 20 29 3b 0a 20 20 61 73   nRoot>0 );.  as
33870 73 65 72 74 28 20 61 52 6f 6f 74 5b 30 5d 3d 3d  sert( aRoot[0]==
33880 6e 52 6f 6f 74 20 29 3b 0a 20 20 61 73 73 65 72  nRoot );.  asser
33890 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20 26 26 20  t( pOp->p3>0 && 
338a0 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65  pOp->p3<=(p->nMe
338b0 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72  m+1 - p->nCursor
338c0 29 20 29 3b 0a 20 20 70 6e 45 72 72 20 3d 20 26  ) );.  pnErr = &
338d0 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20  aMem[pOp->p3];. 
338e0 20 61 73 73 65 72 74 28 20 28 70 6e 45 72 72 2d   assert( (pnErr-
338f0 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74  >flags & MEM_Int
33900 29 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  )!=0 );.  assert
33910 28 20 28 70 6e 45 72 72 2d 3e 66 6c 61 67 73 20  ( (pnErr->flags 
33920 26 20 28 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f 42  & (MEM_Str|MEM_B
33930 6c 6f 62 29 29 3d 3d 30 20 29 3b 0a 20 20 70 49  lob))==0 );.  pI
33940 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n1 = &aMem[pOp->
33950 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p1];.  assert( p
33960 4f 70 2d 3e 70 35 3c 64 62 2d 3e 6e 44 62 20 29  Op->p5<db->nDb )
33970 3b 0a 20 20 61 73 73 65 72 74 28 20 44 62 4d 61  ;.  assert( DbMa
33980 73 6b 54 65 73 74 28 70 2d 3e 62 74 72 65 65 4d  skTest(p->btreeM
33990 61 73 6b 2c 20 70 4f 70 2d 3e 70 35 29 20 29 3b  ask, pOp->p5) );
339a0 0a 20 20 7a 20 3d 20 73 71 6c 69 74 65 33 42 74  .  z = sqlite3Bt
339b0 72 65 65 49 6e 74 65 67 72 69 74 79 43 68 65 63  reeIntegrityChec
339c0 6b 28 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70  k(db->aDb[pOp->p
339d0 35 5d 2e 70 42 74 2c 20 26 61 52 6f 6f 74 5b 31  5].pBt, &aRoot[1
339e0 5d 2c 20 6e 52 6f 6f 74 2c 0a 20 20 20 20 20 20  ], 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 28 69 6e 74 29             (int)
33a10 70 6e 45 72 72 2d 3e 75 2e 69 2b 31 2c 20 26 6e  pnErr->u.i+1, &n
33a20 45 72 72 29 3b 0a 20 20 73 71 6c 69 74 65 33 56  Err);.  sqlite3V
33a30 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 49  dbeMemSetNull(pI
33a40 6e 31 29 3b 0a 20 20 69 66 28 20 6e 45 72 72 3d  n1);.  if( nErr=
33a50 3d 30 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74  =0 ){.    assert
33a60 28 20 7a 3d 3d 30 20 29 3b 0a 20 20 7d 65 6c 73  ( z==0 );.  }els
33a70 65 20 69 66 28 20 7a 3d 3d 30 20 29 7b 0a 20 20  e if( z==0 ){.  
33a80 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20    goto no_mem;. 
33a90 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70 6e 45 72   }else{.    pnEr
33aa0 72 2d 3e 75 2e 69 20 2d 3d 20 6e 45 72 72 2d 31  r->u.i -= nErr-1
33ab0 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  ;.    sqlite3Vdb
33ac0 65 4d 65 6d 53 65 74 53 74 72 28 70 49 6e 31 2c  eMemSetStr(pIn1,
33ad0 20 7a 2c 20 2d 31 2c 20 53 51 4c 49 54 45 5f 55   z, -1, SQLITE_U
33ae0 54 46 38 2c 20 73 71 6c 69 74 65 33 5f 66 72 65  TF8, sqlite3_fre
33af0 65 29 3b 0a 20 20 7d 0a 20 20 55 50 44 41 54 45  e);.  }.  UPDATE
33b00 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 49  _MAX_BLOBSIZE(pI
33b10 6e 31 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64  n1);.  sqlite3Vd
33b20 62 65 43 68 61 6e 67 65 45 6e 63 6f 64 69 6e 67  beChangeEncoding
33b30 28 70 49 6e 31 2c 20 65 6e 63 6f 64 69 6e 67 29  (pIn1, encoding)
33b40 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e  ;.  break;.}.#en
33b50 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d  dif /* SQLITE_OM
33b60 49 54 5f 49 4e 54 45 47 52 49 54 59 5f 43 48 45  IT_INTEGRITY_CHE
33b70 43 4b 20 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f 64 65  CK */../* Opcode
33b80 3a 20 52 6f 77 53 65 74 41 64 64 20 50 31 20 50  : RowSetAdd P1 P
33b90 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70  2 * * *.** Synop
33ba0 73 69 73 3a 20 72 6f 77 73 65 74 28 50 31 29 3d  sis: rowset(P1)=
33bb0 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20 49 6e 73 65  r[P2].**.** Inse
33bc0 72 74 20 74 68 65 20 69 6e 74 65 67 65 72 20 76  rt the integer v
33bd0 61 6c 75 65 20 68 65 6c 64 20 62 79 20 72 65 67  alue held by reg
33be0 69 73 74 65 72 20 50 32 20 69 6e 74 6f 20 61 20  ister P2 into a 
33bf0 52 6f 77 53 65 74 20 6f 62 6a 65 63 74 0a 2a 2a  RowSet object.**
33c00 20 68 65 6c 64 20 69 6e 20 72 65 67 69 73 74 65   held in registe
33c10 72 20 50 31 2e 0a 2a 2a 0a 2a 2a 20 41 6e 20 61  r P1..**.** An a
33c20 73 73 65 72 74 69 6f 6e 20 66 61 69 6c 73 20 69  ssertion fails i
33c30 66 20 50 32 20 69 73 20 6e 6f 74 20 61 6e 20 69  f P2 is not an i
33c40 6e 74 65 67 65 72 2e 0a 2a 2f 0a 63 61 73 65 20  nteger..*/.case 
33c50 4f 50 5f 52 6f 77 53 65 74 41 64 64 3a 20 7b 20  OP_RowSetAdd: { 
33c60 20 20 20 20 20 20 2f 2a 20 69 6e 31 2c 20 69 6e        /* in1, in
33c70 32 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61  2 */.  pIn1 = &a
33c80 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
33c90 70 49 6e 32 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn2 = &aMem[pOp
33ca0 2d 3e 70 32 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p2];.  assert(
33cb0 20 28 70 49 6e 32 2d 3e 66 6c 61 67 73 20 26 20   (pIn2->flags & 
33cc0 4d 45 4d 5f 49 6e 74 29 21 3d 30 20 29 3b 0a 20  MEM_Int)!=0 );. 
33cd0 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67   if( (pIn1->flag
33ce0 73 20 26 20 4d 45 4d 5f 42 6c 6f 62 29 3d 3d 30  s & MEM_Blob)==0
33cf0 20 29 7b 0a 20 20 20 20 69 66 28 20 73 71 6c 69   ){.    if( sqli
33d00 74 65 33 56 64 62 65 4d 65 6d 53 65 74 52 6f 77  te3VdbeMemSetRow
33d10 53 65 74 28 70 49 6e 31 29 20 29 20 67 6f 74 6f  Set(pIn1) ) goto
33d20 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 20 20 61   no_mem;.  }.  a
33d30 73 73 65 72 74 28 20 73 71 6c 69 74 65 33 56 64  ssert( sqlite3Vd
33d40 62 65 4d 65 6d 49 73 52 6f 77 53 65 74 28 70 49  beMemIsRowSet(pI
33d50 6e 31 29 20 29 3b 0a 20 20 73 71 6c 69 74 65 33  n1) );.  sqlite3
33d60 52 6f 77 53 65 74 49 6e 73 65 72 74 28 28 52 6f  RowSetInsert((Ro
33d70 77 53 65 74 2a 29 70 49 6e 31 2d 3e 7a 2c 20 70  wSet*)pIn1->z, p
33d80 49 6e 32 2d 3e 75 2e 69 29 3b 0a 20 20 62 72 65  In2->u.i);.  bre
33d90 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
33da0 3a 20 52 6f 77 53 65 74 52 65 61 64 20 50 31 20  : RowSetRead P1 
33db0 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e  P2 P3 * *.** Syn
33dc0 6f 70 73 69 73 3a 20 72 5b 50 33 5d 3d 72 6f 77  opsis: r[P3]=row
33dd0 73 65 74 28 50 31 29 0a 2a 2a 0a 2a 2a 20 45 78  set(P1).**.** Ex
33de0 74 72 61 63 74 20 74 68 65 20 73 6d 61 6c 6c 65  tract the smalle
33df0 73 74 20 76 61 6c 75 65 20 66 72 6f 6d 20 74 68  st value from th
33e00 65 20 52 6f 77 53 65 74 20 6f 62 6a 65 63 74 20  e RowSet object 
33e10 69 6e 20 50 31 0a 2a 2a 20 61 6e 64 20 70 75 74  in P1.** and put
33e20 20 74 68 61 74 20 76 61 6c 75 65 20 69 6e 74 6f   that value into
33e30 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a   register P3..**
33e40 20 4f 72 2c 20 69 66 20 52 6f 77 53 65 74 20 6f   Or, if RowSet o
33e50 62 6a 65 63 74 20 50 31 20 69 73 20 69 6e 69 74  bject P1 is init
33e60 69 61 6c 6c 79 20 65 6d 70 74 79 2c 20 6c 65 61  ially empty, lea
33e70 76 65 20 50 33 0a 2a 2a 20 75 6e 63 68 61 6e 67  ve P3.** unchang
33e80 65 64 20 61 6e 64 20 6a 75 6d 70 20 74 6f 20 69  ed and jump to i
33e90 6e 73 74 72 75 63 74 69 6f 6e 20 50 32 2e 0a 2a  nstruction P2..*
33ea0 2f 0a 63 61 73 65 20 4f 50 5f 52 6f 77 53 65 74  /.case OP_RowSet
33eb0 52 65 61 64 3a 20 7b 20 20 20 20 20 20 20 2f 2a  Read: {       /*
33ec0 20 6a 75 6d 70 2c 20 69 6e 31 2c 20 6f 75 74 33   jump, in1, out3
33ed0 20 2a 2f 0a 20 20 69 36 34 20 76 61 6c 3b 0a 0a   */.  i64 val;..
33ee0 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70    pIn1 = &aMem[p
33ef0 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72  Op->p1];.  asser
33f00 74 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20  t( (pIn1->flags 
33f10 26 20 4d 45 4d 5f 42 6c 6f 62 29 3d 3d 30 20 7c  & MEM_Blob)==0 |
33f20 7c 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d  | sqlite3VdbeMem
33f30 49 73 52 6f 77 53 65 74 28 70 49 6e 31 29 20 29  IsRowSet(pIn1) )
33f40 3b 0a 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66  ;.  if( (pIn1->f
33f50 6c 61 67 73 20 26 20 4d 45 4d 5f 42 6c 6f 62 29  lags & MEM_Blob)
33f60 3d 3d 30 20 0a 20 20 20 7c 7c 20 73 71 6c 69 74  ==0 .   || sqlit
33f70 65 33 52 6f 77 53 65 74 4e 65 78 74 28 28 52 6f  e3RowSetNext((Ro
33f80 77 53 65 74 2a 29 70 49 6e 31 2d 3e 7a 2c 20 26  wSet*)pIn1->z, &
33f90 76 61 6c 29 3d 3d 30 0a 20 20 29 7b 0a 20 20 20  val)==0.  ){.   
33fa0 20 2f 2a 20 54 68 65 20 62 6f 6f 6c 65 61 6e 20   /* The boolean 
33fb0 69 6e 64 65 78 20 69 73 20 65 6d 70 74 79 20 2a  index is empty *
33fc0 2f 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  /.    sqlite3Vdb
33fd0 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 49 6e 31  eMemSetNull(pIn1
33fe0 29 3b 0a 20 20 20 20 56 64 62 65 42 72 61 6e 63  );.    VdbeBranc
33ff0 68 54 61 6b 65 6e 28 31 2c 32 29 3b 0a 20 20 20  hTaken(1,2);.   
34000 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32   goto jump_to_p2
34010 5f 61 6e 64 5f 63 68 65 63 6b 5f 66 6f 72 5f 69  _and_check_for_i
34020 6e 74 65 72 72 75 70 74 3b 0a 20 20 7d 65 6c 73  nterrupt;.  }els
34030 65 7b 0a 20 20 20 20 2f 2a 20 41 20 76 61 6c 75  e{.    /* A valu
34040 65 20 77 61 73 20 70 75 6c 6c 65 64 20 66 72 6f  e was pulled fro
34050 6d 20 74 68 65 20 69 6e 64 65 78 20 2a 2f 0a 20  m the index */. 
34060 20 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b     VdbeBranchTak
34070 65 6e 28 30 2c 32 29 3b 0a 20 20 20 20 73 71 6c  en(0,2);.    sql
34080 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 49 6e  ite3VdbeMemSetIn
34090 74 36 34 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  t64(&aMem[pOp->p
340a0 33 5d 2c 20 76 61 6c 29 3b 0a 20 20 7d 0a 20 20  3], val);.  }.  
340b0 67 6f 74 6f 20 63 68 65 63 6b 5f 66 6f 72 5f 69  goto check_for_i
340c0 6e 74 65 72 72 75 70 74 3b 0a 7d 0a 0a 2f 2a 20  nterrupt;.}../* 
340d0 4f 70 63 6f 64 65 3a 20 52 6f 77 53 65 74 54 65  Opcode: RowSetTe
340e0 73 74 20 50 31 20 50 32 20 50 33 20 50 34 0a 2a  st P1 P2 P3 P4.*
340f0 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 66 20 72  * Synopsis: if r
34100 5b 50 33 5d 20 69 6e 20 72 6f 77 73 65 74 28 50  [P3] in rowset(P
34110 31 29 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a  1) goto P2.**.**
34120 20 52 65 67 69 73 74 65 72 20 50 33 20 69 73 20   Register P3 is 
34130 61 73 73 75 6d 65 64 20 74 6f 20 68 6f 6c 64 20  assumed to hold 
34140 61 20 36 34 2d 62 69 74 20 69 6e 74 65 67 65 72  a 64-bit integer
34150 20 76 61 6c 75 65 2e 20 49 66 20 72 65 67 69 73   value. If regis
34160 74 65 72 20 50 31 0a 2a 2a 20 63 6f 6e 74 61 69  ter P1.** contai
34170 6e 73 20 61 20 52 6f 77 53 65 74 20 6f 62 6a 65  ns a RowSet obje
34180 63 74 20 61 6e 64 20 74 68 61 74 20 52 6f 77 53  ct and that RowS
34190 65 74 20 6f 62 6a 65 63 74 20 63 6f 6e 74 61 69  et object contai
341a0 6e 73 0a 2a 2a 20 74 68 65 20 76 61 6c 75 65 20  ns.** the value 
341b0 68 65 6c 64 20 69 6e 20 50 33 2c 20 6a 75 6d 70  held in P3, jump
341c0 20 74 6f 20 72 65 67 69 73 74 65 72 20 50 32 2e   to register P2.
341d0 20 4f 74 68 65 72 77 69 73 65 2c 20 69 6e 73 65   Otherwise, inse
341e0 72 74 20 74 68 65 0a 2a 2a 20 69 6e 74 65 67 65  rt the.** intege
341f0 72 20 69 6e 20 50 33 20 69 6e 74 6f 20 74 68 65  r in P3 into the
34200 20 52 6f 77 53 65 74 20 61 6e 64 20 63 6f 6e 74   RowSet and cont
34210 69 6e 75 65 20 6f 6e 20 74 6f 20 74 68 65 0a 2a  inue on to the.*
34220 2a 20 6e 65 78 74 20 6f 70 63 6f 64 65 2e 0a 2a  * next opcode..*
34230 2a 0a 2a 2a 20 54 68 65 20 52 6f 77 53 65 74 20  *.** The RowSet 
34240 6f 62 6a 65 63 74 20 69 73 20 6f 70 74 69 6d 69  object is optimi
34250 7a 65 64 20 66 6f 72 20 74 68 65 20 63 61 73 65  zed for the case
34260 20 77 68 65 72 65 20 73 65 74 73 20 6f 66 20 69   where sets of i
34270 6e 74 65 67 65 72 73 0a 2a 2a 20 61 72 65 20 69  ntegers.** are i
34280 6e 73 65 72 74 65 64 20 69 6e 20 64 69 73 74 69  nserted in disti
34290 6e 63 74 20 70 68 61 73 65 73 2c 20 77 68 69 63  nct phases, whic
342a0 68 20 65 61 63 68 20 73 65 74 20 63 6f 6e 74 61  h each set conta
342b0 69 6e 73 20 6e 6f 20 64 75 70 6c 69 63 61 74 65  ins no duplicate
342c0 73 2e 0a 2a 2a 20 45 61 63 68 20 73 65 74 20 69  s..** Each set i
342d0 73 20 69 64 65 6e 74 69 66 69 65 64 20 62 79 20  s identified by 
342e0 61 20 75 6e 69 71 75 65 20 50 34 20 76 61 6c 75  a unique P4 valu
342f0 65 2e 20 54 68 65 20 66 69 72 73 74 20 73 65 74  e. The first set
34300 0a 2a 2a 20 6d 75 73 74 20 68 61 76 65 20 50 34  .** must have P4
34310 3d 3d 30 2c 20 74 68 65 20 66 69 6e 61 6c 20 73  ==0, the final s
34320 65 74 20 6d 75 73 74 20 68 61 76 65 20 50 34 3d  et must have P4=
34330 3d 2d 31 2c 20 61 6e 64 20 66 6f 72 20 61 6c 6c  =-1, and for all
34340 20 6f 74 68 65 72 20 73 65 74 73 0a 2a 2a 20 6d   other sets.** m
34350 75 73 74 20 68 61 76 65 20 50 34 3e 30 2e 0a 2a  ust have P4>0..*
34360 2a 0a 2a 2a 20 54 68 69 73 20 61 6c 6c 6f 77 73  *.** This allows
34370 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 73 3a 20   optimizations: 
34380 28 61 29 20 77 68 65 6e 20 50 34 3d 3d 30 20 74  (a) when P4==0 t
34390 68 65 72 65 20 69 73 20 6e 6f 20 6e 65 65 64 20  here is no need 
343a0 74 6f 20 74 65 73 74 0a 2a 2a 20 74 68 65 20 52  to test.** the R
343b0 6f 77 53 65 74 20 6f 62 6a 65 63 74 20 66 6f 72  owSet object for
343c0 20 50 33 2c 20 61 73 20 69 74 20 69 73 20 67 75   P3, as it is gu
343d0 61 72 61 6e 74 65 65 64 20 6e 6f 74 20 74 6f 20  aranteed not to 
343e0 63 6f 6e 74 61 69 6e 20 69 74 2c 0a 2a 2a 20 28  contain it,.** (
343f0 62 29 20 77 68 65 6e 20 50 34 3d 3d 2d 31 20 74  b) when P4==-1 t
34400 68 65 72 65 20 69 73 20 6e 6f 20 6e 65 65 64 20  here is no need 
34410 74 6f 20 69 6e 73 65 72 74 20 74 68 65 20 76 61  to insert the va
34420 6c 75 65 2c 20 61 73 20 69 74 20 77 69 6c 6c 0a  lue, as it will.
34430 2a 2a 20 6e 65 76 65 72 20 62 65 20 74 65 73 74  ** never be test
34440 65 64 20 66 6f 72 2c 20 61 6e 64 20 28 63 29 20  ed for, and (c) 
34450 77 68 65 6e 20 61 20 76 61 6c 75 65 20 74 68 61  when a value tha
34460 74 20 69 73 20 70 61 72 74 20 6f 66 20 73 65 74  t is part of set
34470 20 58 20 69 73 0a 2a 2a 20 69 6e 73 65 72 74 65   X is.** inserte
34480 64 2c 20 74 68 65 72 65 20 69 73 20 6e 6f 20 6e  d, there is no n
34490 65 65 64 20 74 6f 20 73 65 61 72 63 68 20 74 6f  eed to search to
344a0 20 73 65 65 20 69 66 20 74 68 65 20 73 61 6d 65   see if the same
344b0 20 76 61 6c 75 65 20 77 61 73 0a 2a 2a 20 70 72   value was.** pr
344c0 65 76 69 6f 75 73 6c 79 20 69 6e 73 65 72 74 65  eviously inserte
344d0 64 20 61 73 20 70 61 72 74 20 6f 66 20 73 65 74  d as part of set
344e0 20 58 20 28 6f 6e 6c 79 20 69 66 20 69 74 20 77   X (only if it w
344f0 61 73 20 70 72 65 76 69 6f 75 73 6c 79 0a 2a 2a  as previously.**
34500 20 69 6e 73 65 72 74 65 64 20 61 73 20 70 61 72   inserted as par
34510 74 20 6f 66 20 73 6f 6d 65 20 6f 74 68 65 72 20  t of some other 
34520 73 65 74 29 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  set)..*/.case OP
34530 5f 52 6f 77 53 65 74 54 65 73 74 3a 20 7b 20 20  _RowSetTest: {  
34540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34550 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 2c     /* jump, in1,
34560 20 69 6e 33 20 2a 2f 0a 20 20 69 6e 74 20 69 53   in3 */.  int iS
34570 65 74 3b 0a 20 20 69 6e 74 20 65 78 69 73 74 73  et;.  int exists
34580 3b 0a 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65  ;..  pIn1 = &aMe
34590 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 49  m[pOp->p1];.  pI
345a0 6e 33 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n3 = &aMem[pOp->
345b0 70 33 5d 3b 0a 20 20 69 53 65 74 20 3d 20 70 4f  p3];.  iSet = pO
345c0 70 2d 3e 70 34 2e 69 3b 0a 20 20 61 73 73 65 72  p->p4.i;.  asser
345d0 74 28 20 70 49 6e 33 2d 3e 66 6c 61 67 73 26 4d  t( pIn3->flags&M
345e0 45 4d 5f 49 6e 74 20 29 3b 0a 0a 20 20 2f 2a 20  EM_Int );..  /* 
345f0 49 66 20 74 68 65 72 65 20 69 73 20 61 6e 79 74  If there is anyt
34600 68 69 6e 67 20 6f 74 68 65 72 20 74 68 61 6e 20  hing other than 
34610 61 20 72 6f 77 73 65 74 20 6f 62 6a 65 63 74 20  a rowset object 
34620 69 6e 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 50  in memory cell P
34630 31 2c 0a 20 20 2a 2a 20 64 65 6c 65 74 65 20 69  1,.  ** delete i
34640 74 20 6e 6f 77 20 61 6e 64 20 69 6e 69 74 69 61  t now and initia
34650 6c 69 7a 65 20 50 31 20 77 69 74 68 20 61 6e 20  lize P1 with an 
34660 65 6d 70 74 79 20 72 6f 77 73 65 74 0a 20 20 2a  empty rowset.  *
34670 2f 0a 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66  /.  if( (pIn1->f
34680 6c 61 67 73 20 26 20 4d 45 4d 5f 42 6c 6f 62 29  lags & MEM_Blob)
34690 3d 3d 30 20 29 7b 0a 20 20 20 20 69 66 28 20 73  ==0 ){.    if( s
346a0 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74  qlite3VdbeMemSet
346b0 52 6f 77 53 65 74 28 70 49 6e 31 29 20 29 20 67  RowSet(pIn1) ) g
346c0 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a  oto no_mem;.  }.
346d0 20 20 61 73 73 65 72 74 28 20 73 71 6c 69 74 65    assert( sqlite
346e0 33 56 64 62 65 4d 65 6d 49 73 52 6f 77 53 65 74  3VdbeMemIsRowSet
346f0 28 70 49 6e 31 29 20 29 3b 0a 20 20 61 73 73 65  (pIn1) );.  asse
34700 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d  rt( pOp->p4type=
34710 3d 50 34 5f 49 4e 54 33 32 20 29 3b 0a 20 20 61  =P4_INT32 );.  a
34720 73 73 65 72 74 28 20 69 53 65 74 3d 3d 2d 31 20  ssert( iSet==-1 
34730 7c 7c 20 69 53 65 74 3e 3d 30 20 29 3b 0a 20 20  || iSet>=0 );.  
34740 69 66 28 20 69 53 65 74 20 29 7b 0a 20 20 20 20  if( iSet ){.    
34750 65 78 69 73 74 73 20 3d 20 73 71 6c 69 74 65 33  exists = sqlite3
34760 52 6f 77 53 65 74 54 65 73 74 28 28 52 6f 77 53  RowSetTest((RowS
34770 65 74 2a 29 70 49 6e 31 2d 3e 7a 2c 20 69 53 65  et*)pIn1->z, iSe
34780 74 2c 20 70 49 6e 33 2d 3e 75 2e 69 29 3b 0a 20  t, pIn3->u.i);. 
34790 20 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b     VdbeBranchTak
347a0 65 6e 28 65 78 69 73 74 73 21 3d 30 2c 32 29 3b  en(exists!=0,2);
347b0 0a 20 20 20 20 69 66 28 20 65 78 69 73 74 73 20  .    if( exists 
347c0 29 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70  ) goto jump_to_p
347d0 32 3b 0a 20 20 7d 0a 20 20 69 66 28 20 69 53 65  2;.  }.  if( iSe
347e0 74 3e 3d 30 20 29 7b 0a 20 20 20 20 73 71 6c 69  t>=0 ){.    sqli
347f0 74 65 33 52 6f 77 53 65 74 49 6e 73 65 72 74 28  te3RowSetInsert(
34800 28 52 6f 77 53 65 74 2a 29 70 49 6e 31 2d 3e 7a  (RowSet*)pIn1->z
34810 2c 20 70 49 6e 33 2d 3e 75 2e 69 29 3b 0a 20 20  , pIn3->u.i);.  
34820 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 23  }.  break;.}...#
34830 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
34840 49 54 5f 54 52 49 47 47 45 52 0a 0a 2f 2a 20 4f  IT_TRIGGER../* O
34850 70 63 6f 64 65 3a 20 50 72 6f 67 72 61 6d 20 50  pcode: Program P
34860 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a  1 P2 P3 P4 P5.**
34870 0a 2a 2a 20 45 78 65 63 75 74 65 20 74 68 65 20  .** Execute the 
34880 74 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d 20  trigger program 
34890 70 61 73 73 65 64 20 61 73 20 50 34 20 28 74 79  passed as P4 (ty
348a0 70 65 20 50 34 5f 53 55 42 50 52 4f 47 52 41 4d  pe P4_SUBPROGRAM
348b0 29 2e 20 0a 2a 2a 0a 2a 2a 20 50 31 20 63 6f 6e  ). .**.** P1 con
348c0 74 61 69 6e 73 20 74 68 65 20 61 64 64 72 65 73  tains the addres
348d0 73 20 6f 66 20 74 68 65 20 6d 65 6d 6f 72 79 20  s of the memory 
348e0 63 65 6c 6c 20 74 68 61 74 20 63 6f 6e 74 61 69  cell that contai
348f0 6e 73 20 74 68 65 20 66 69 72 73 74 20 6d 65 6d  ns the first mem
34900 6f 72 79 20 0a 2a 2a 20 63 65 6c 6c 20 69 6e 20  ory .** cell in 
34910 61 6e 20 61 72 72 61 79 20 6f 66 20 76 61 6c 75  an array of valu
34920 65 73 20 75 73 65 64 20 61 73 20 61 72 67 75 6d  es used as argum
34930 65 6e 74 73 20 74 6f 20 74 68 65 20 73 75 62 2d  ents to the sub-
34940 70 72 6f 67 72 61 6d 2e 20 50 32 20 0a 2a 2a 20  program. P2 .** 
34950 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 61 64 64  contains the add
34960 72 65 73 73 20 74 6f 20 6a 75 6d 70 20 74 6f 20  ress to jump to 
34970 69 66 20 74 68 65 20 73 75 62 2d 70 72 6f 67 72  if the sub-progr
34980 61 6d 20 74 68 72 6f 77 73 20 61 6e 20 49 47 4e  am throws an IGN
34990 4f 52 45 20 0a 2a 2a 20 65 78 63 65 70 74 69 6f  ORE .** exceptio
349a0 6e 20 75 73 69 6e 67 20 74 68 65 20 52 41 49 53  n using the RAIS
349b0 45 28 29 20 66 75 6e 63 74 69 6f 6e 2e 20 52 65  E() function. Re
349c0 67 69 73 74 65 72 20 50 33 20 63 6f 6e 74 61 69  gister P3 contai
349d0 6e 73 20 74 68 65 20 61 64 64 72 65 73 73 20 0a  ns the address .
349e0 2a 2a 20 6f 66 20 61 20 6d 65 6d 6f 72 79 20 63  ** of a memory c
349f0 65 6c 6c 20 69 6e 20 74 68 69 73 20 28 74 68 65  ell in this (the
34a00 20 70 61 72 65 6e 74 29 20 56 4d 20 74 68 61 74   parent) VM that
34a10 20 69 73 20 75 73 65 64 20 74 6f 20 61 6c 6c 6f   is used to allo
34a20 63 61 74 65 20 74 68 65 20 0a 2a 2a 20 6d 65 6d  cate the .** mem
34a30 6f 72 79 20 72 65 71 75 69 72 65 64 20 62 79 20  ory required by 
34a40 74 68 65 20 73 75 62 2d 76 64 62 65 20 61 74 20  the sub-vdbe at 
34a50 72 75 6e 74 69 6d 65 2e 0a 2a 2a 0a 2a 2a 20 50  runtime..**.** P
34a60 34 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74  4 is a pointer t
34a70 6f 20 74 68 65 20 56 4d 20 63 6f 6e 74 61 69 6e  o the VM contain
34a80 69 6e 67 20 74 68 65 20 74 72 69 67 67 65 72 20  ing the trigger 
34a90 70 72 6f 67 72 61 6d 2e 0a 2a 2a 0a 2a 2a 20 49  program..**.** I
34aa0 66 20 50 35 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f  f P5 is non-zero
34ab0 2c 20 74 68 65 6e 20 72 65 63 75 72 73 69 76 65  , then recursive
34ac0 20 70 72 6f 67 72 61 6d 20 69 6e 76 6f 63 61 74   program invocat
34ad0 69 6f 6e 20 69 73 20 65 6e 61 62 6c 65 64 2e 0a  ion is enabled..
34ae0 2a 2f 0a 63 61 73 65 20 4f 50 5f 50 72 6f 67 72  */.case OP_Progr
34af0 61 6d 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20  am: {        /* 
34b00 6a 75 6d 70 20 2a 2f 0a 20 20 69 6e 74 20 6e 4d  jump */.  int nM
34b10 65 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  em;             
34b20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6d    /* Number of m
34b30 65 6d 6f 72 79 20 72 65 67 69 73 74 65 72 73 20  emory registers 
34b40 66 6f 72 20 73 75 62 2d 70 72 6f 67 72 61 6d 20  for sub-program 
34b50 2a 2f 0a 20 20 69 6e 74 20 6e 42 79 74 65 3b 20  */.  int nByte; 
34b60 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
34b70 42 79 74 65 73 20 6f 66 20 72 75 6e 74 69 6d 65  Bytes of runtime
34b80 20 73 70 61 63 65 20 72 65 71 75 69 72 65 64 20   space required 
34b90 66 6f 72 20 73 75 62 2d 70 72 6f 67 72 61 6d 20  for sub-program 
34ba0 2a 2f 0a 20 20 4d 65 6d 20 2a 70 52 74 3b 20 20  */.  Mem *pRt;  
34bb0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
34bc0 52 65 67 69 73 74 65 72 20 74 6f 20 61 6c 6c 6f  Register to allo
34bd0 63 61 74 65 20 72 75 6e 74 69 6d 65 20 73 70 61  cate runtime spa
34be0 63 65 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 4d 65  ce */.  Mem *pMe
34bf0 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  m;              
34c00 2f 2a 20 55 73 65 64 20 74 6f 20 69 74 65 72 61  /* Used to itera
34c10 74 65 20 74 68 72 6f 75 67 68 20 6d 65 6d 6f 72  te through memor
34c20 79 20 63 65 6c 6c 73 20 2a 2f 0a 20 20 4d 65 6d  y cells */.  Mem
34c30 20 2a 70 45 6e 64 3b 20 20 20 20 20 20 20 20 20   *pEnd;         
34c40 20 20 20 20 20 2f 2a 20 4c 61 73 74 20 6d 65 6d       /* Last mem
34c50 6f 72 79 20 63 65 6c 6c 20 69 6e 20 6e 65 77 20  ory cell in new 
34c60 61 72 72 61 79 20 2a 2f 0a 20 20 56 64 62 65 46  array */.  VdbeF
34c70 72 61 6d 65 20 2a 70 46 72 61 6d 65 3b 20 20 20  rame *pFrame;   
34c80 20 20 20 2f 2a 20 4e 65 77 20 76 64 62 65 20 66     /* New vdbe f
34c90 72 61 6d 65 20 74 6f 20 65 78 65 63 75 74 65 20  rame to execute 
34ca0 69 6e 20 2a 2f 0a 20 20 53 75 62 50 72 6f 67 72  in */.  SubProgr
34cb0 61 6d 20 2a 70 50 72 6f 67 72 61 6d 3b 20 20 20  am *pProgram;   
34cc0 2f 2a 20 53 75 62 2d 70 72 6f 67 72 61 6d 20 74  /* Sub-program t
34cd0 6f 20 65 78 65 63 75 74 65 20 2a 2f 0a 20 20 76  o execute */.  v
34ce0 6f 69 64 20 2a 74 3b 20 20 20 20 20 20 20 20 20  oid *t;         
34cf0 20 20 20 20 20 20 20 2f 2a 20 54 6f 6b 65 6e 20         /* Token 
34d00 69 64 65 6e 74 69 66 79 69 6e 67 20 74 72 69 67  identifying trig
34d10 67 65 72 20 2a 2f 0a 0a 20 20 70 50 72 6f 67 72  ger */..  pProgr
34d20 61 6d 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 50 72  am = pOp->p4.pPr
34d30 6f 67 72 61 6d 3b 0a 20 20 70 52 74 20 3d 20 26  ogram;.  pRt = &
34d40 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20  aMem[pOp->p3];. 
34d50 20 61 73 73 65 72 74 28 20 70 50 72 6f 67 72 61   assert( pProgra
34d60 6d 2d 3e 6e 4f 70 3e 30 20 29 3b 0a 20 20 0a 20  m->nOp>0 );.  . 
34d70 20 2f 2a 20 49 66 20 74 68 65 20 70 35 20 66 6c   /* If the p5 fl
34d80 61 67 20 69 73 20 63 6c 65 61 72 2c 20 74 68 65  ag is clear, the
34d90 6e 20 72 65 63 75 72 73 69 76 65 20 69 6e 76 6f  n recursive invo
34da0 63 61 74 69 6f 6e 20 6f 66 20 74 72 69 67 67 65  cation of trigge
34db0 72 73 20 69 73 20 0a 20 20 2a 2a 20 64 69 73 61  rs is .  ** disa
34dc0 62 6c 65 64 20 66 6f 72 20 62 61 63 6b 77 61 72  bled for backwar
34dd0 64 73 20 63 6f 6d 70 61 74 69 62 69 6c 69 74 79  ds compatibility
34de0 20 28 70 35 20 69 73 20 73 65 74 20 69 66 20 74   (p5 is set if t
34df0 68 69 73 20 73 75 62 2d 70 72 6f 67 72 61 6d 0a  his sub-program.
34e00 20 20 2a 2a 20 69 73 20 72 65 61 6c 6c 79 20 61    ** is really a
34e10 20 74 72 69 67 67 65 72 2c 20 6e 6f 74 20 61 20   trigger, not a 
34e20 66 6f 72 65 69 67 6e 20 6b 65 79 20 61 63 74 69  foreign key acti
34e30 6f 6e 2c 20 61 6e 64 20 74 68 65 20 66 6c 61 67  on, and the flag
34e40 20 73 65 74 0a 20 20 2a 2a 20 61 6e 64 20 63 6c   set.  ** and cl
34e50 65 61 72 65 64 20 62 79 20 74 68 65 20 22 50 52  eared by the "PR
34e60 41 47 4d 41 20 72 65 63 75 72 73 69 76 65 5f 74  AGMA recursive_t
34e70 72 69 67 67 65 72 73 22 20 63 6f 6d 6d 61 6e 64  riggers" command
34e80 20 69 73 20 63 6c 65 61 72 29 2e 0a 20 20 2a 2a   is clear)..  **
34e90 20 0a 20 20 2a 2a 20 49 74 20 69 73 20 72 65 63   .  ** It is rec
34ea0 75 72 73 69 76 65 20 69 6e 76 6f 63 61 74 69 6f  ursive invocatio
34eb0 6e 20 6f 66 20 74 72 69 67 67 65 72 73 2c 20 61  n of triggers, a
34ec0 74 20 74 68 65 20 53 51 4c 20 6c 65 76 65 6c 2c  t the SQL level,
34ed0 20 74 68 61 74 20 69 73 20 0a 20 20 2a 2a 20 64   that is .  ** d
34ee0 69 73 61 62 6c 65 64 2e 20 49 6e 20 73 6f 6d 65  isabled. In some
34ef0 20 63 61 73 65 73 20 61 20 73 69 6e 67 6c 65 20   cases a single 
34f00 74 72 69 67 67 65 72 20 6d 61 79 20 67 65 6e 65  trigger may gene
34f10 72 61 74 65 20 6d 6f 72 65 20 74 68 61 6e 20 6f  rate more than o
34f20 6e 65 20 0a 20 20 2a 2a 20 53 75 62 50 72 6f 67  ne .  ** SubProg
34f30 72 61 6d 20 28 69 66 20 74 68 65 20 74 72 69 67  ram (if the trig
34f40 67 65 72 20 6d 61 79 20 62 65 20 65 78 65 63 75  ger may be execu
34f50 74 65 64 20 77 69 74 68 20 6d 6f 72 65 20 74 68  ted with more th
34f60 61 6e 20 6f 6e 65 20 64 69 66 66 65 72 65 6e 74  an one different
34f70 20 0a 20 20 2a 2a 20 4f 4e 20 43 4f 4e 46 4c 49   .  ** ON CONFLI
34f80 43 54 20 61 6c 67 6f 72 69 74 68 6d 29 2e 20 53  CT algorithm). S
34f90 75 62 50 72 6f 67 72 61 6d 20 73 74 72 75 63 74  ubProgram struct
34fa0 75 72 65 73 20 61 73 73 6f 63 69 61 74 65 64 20  ures associated 
34fb0 77 69 74 68 20 61 0a 20 20 2a 2a 20 73 69 6e 67  with a.  ** sing
34fc0 6c 65 20 74 72 69 67 67 65 72 20 61 6c 6c 20 68  le trigger all h
34fd0 61 76 65 20 74 68 65 20 73 61 6d 65 20 76 61 6c  ave the same val
34fe0 75 65 20 66 6f 72 20 74 68 65 20 53 75 62 50 72  ue for the SubPr
34ff0 6f 67 72 61 6d 2e 74 6f 6b 65 6e 20 0a 20 20 2a  ogram.token .  *
35000 2a 20 76 61 72 69 61 62 6c 65 2e 20 20 2a 2f 0a  * variable.  */.
35010 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 29 7b    if( pOp->p5 ){
35020 0a 20 20 20 20 74 20 3d 20 70 50 72 6f 67 72 61  .    t = pProgra
35030 6d 2d 3e 74 6f 6b 65 6e 3b 0a 20 20 20 20 66 6f  m->token;.    fo
35040 72 28 70 46 72 61 6d 65 3d 70 2d 3e 70 46 72 61  r(pFrame=p->pFra
35050 6d 65 3b 20 70 46 72 61 6d 65 20 26 26 20 70 46  me; pFrame && pF
35060 72 61 6d 65 2d 3e 74 6f 6b 65 6e 21 3d 74 3b 20  rame->token!=t; 
35070 70 46 72 61 6d 65 3d 70 46 72 61 6d 65 2d 3e 70  pFrame=pFrame->p
35080 50 61 72 65 6e 74 29 3b 0a 20 20 20 20 69 66 28  Parent);.    if(
35090 20 70 46 72 61 6d 65 20 29 20 62 72 65 61 6b 3b   pFrame ) break;
350a0 0a 20 20 7d 0a 0a 20 20 69 66 28 20 70 2d 3e 6e  .  }..  if( p->n
350b0 46 72 61 6d 65 3e 3d 64 62 2d 3e 61 4c 69 6d 69  Frame>=db->aLimi
350c0 74 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 54  t[SQLITE_LIMIT_T
350d0 52 49 47 47 45 52 5f 44 45 50 54 48 5d 20 29 7b  RIGGER_DEPTH] ){
350e0 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45  .    rc = SQLITE
350f0 5f 45 52 52 4f 52 3b 0a 20 20 20 20 73 71 6c 69  _ERROR;.    sqli
35100 74 65 33 56 64 62 65 45 72 72 6f 72 28 70 2c 20  te3VdbeError(p, 
35110 22 74 6f 6f 20 6d 61 6e 79 20 6c 65 76 65 6c 73  "too many levels
35120 20 6f 66 20 74 72 69 67 67 65 72 20 72 65 63 75   of trigger recu
35130 72 73 69 6f 6e 22 29 3b 0a 20 20 20 20 67 6f 74  rsion");.    got
35140 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
35150 72 72 6f 72 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20  rror;.  }..  /* 
35160 52 65 67 69 73 74 65 72 20 70 52 74 20 69 73 20  Register pRt is 
35170 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20 74 68  used to store th
35180 65 20 6d 65 6d 6f 72 79 20 72 65 71 75 69 72 65  e memory require
35190 64 20 74 6f 20 73 61 76 65 20 74 68 65 20 73 74  d to save the st
351a0 61 74 65 0a 20 20 2a 2a 20 6f 66 20 74 68 65 20  ate.  ** of the 
351b0 63 75 72 72 65 6e 74 20 70 72 6f 67 72 61 6d 2c  current program,
351c0 20 61 6e 64 20 74 68 65 20 6d 65 6d 6f 72 79 20   and the memory 
351d0 72 65 71 75 69 72 65 64 20 61 74 20 72 75 6e 74  required at runt
351e0 69 6d 65 20 74 6f 20 65 78 65 63 75 74 65 0a 20  ime to execute. 
351f0 20 2a 2a 20 74 68 65 20 74 72 69 67 67 65 72 20   ** the trigger 
35200 70 72 6f 67 72 61 6d 2e 20 49 66 20 74 68 69 73  program. If this
35210 20 74 72 69 67 67 65 72 20 68 61 73 20 62 65 65   trigger has bee
35220 6e 20 66 69 72 65 64 20 62 65 66 6f 72 65 2c 20  n fired before, 
35230 74 68 65 6e 20 70 52 74 20 0a 20 20 2a 2a 20 69  then pRt .  ** i
35240 73 20 61 6c 72 65 61 64 79 20 61 6c 6c 6f 63 61  s already alloca
35250 74 65 64 2e 20 4f 74 68 65 72 77 69 73 65 2c 20  ted. Otherwise, 
35260 69 74 20 6d 75 73 74 20 62 65 20 69 6e 69 74 69  it must be initi
35270 61 6c 69 7a 65 64 2e 20 20 2a 2f 0a 20 20 69 66  alized.  */.  if
35280 28 20 28 70 52 74 2d 3e 66 6c 61 67 73 26 4d 45  ( (pRt->flags&ME
35290 4d 5f 42 6c 6f 62 29 3d 3d 30 20 29 7b 0a 20 20  M_Blob)==0 ){.  
352a0 20 20 2f 2a 20 53 75 62 50 72 6f 67 72 61 6d 2e    /* SubProgram.
352b0 6e 4d 65 6d 20 69 73 20 73 65 74 20 74 6f 20 74  nMem is set to t
352c0 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 6d 65 6d  he number of mem
352d0 6f 72 79 20 63 65 6c 6c 73 20 75 73 65 64 20 62  ory cells used b
352e0 79 20 74 68 65 20 0a 20 20 20 20 2a 2a 20 70 72  y the .    ** pr
352f0 6f 67 72 61 6d 20 73 74 6f 72 65 64 20 69 6e 20  ogram stored in 
35300 53 75 62 50 72 6f 67 72 61 6d 2e 61 4f 70 2e 20  SubProgram.aOp. 
35310 41 73 20 77 65 6c 6c 20 61 73 20 74 68 65 73 65  As well as these
35320 2c 20 6f 6e 65 20 6d 65 6d 6f 72 79 0a 20 20 20  , one memory.   
35330 20 2a 2a 20 63 65 6c 6c 20 69 73 20 72 65 71 75   ** cell is requ
35340 69 72 65 64 20 66 6f 72 20 65 61 63 68 20 63 75  ired for each cu
35350 72 73 6f 72 20 75 73 65 64 20 62 79 20 74 68 65  rsor used by the
35360 20 70 72 6f 67 72 61 6d 2e 20 53 65 74 20 6c 6f   program. Set lo
35370 63 61 6c 0a 20 20 20 20 2a 2a 20 76 61 72 69 61  cal.    ** varia
35380 62 6c 65 20 6e 4d 65 6d 20 28 61 6e 64 20 6c 61  ble nMem (and la
35390 74 65 72 2c 20 56 64 62 65 46 72 61 6d 65 2e 6e  ter, VdbeFrame.n
353a0 43 68 69 6c 64 4d 65 6d 29 20 74 6f 20 74 68 69  ChildMem) to thi
353b0 73 20 76 61 6c 75 65 2e 0a 20 20 20 20 2a 2f 0a  s value..    */.
353c0 20 20 20 20 6e 4d 65 6d 20 3d 20 70 50 72 6f 67      nMem = pProg
353d0 72 61 6d 2d 3e 6e 4d 65 6d 20 2b 20 70 50 72 6f  ram->nMem + pPro
353e0 67 72 61 6d 2d 3e 6e 43 73 72 3b 0a 20 20 20 20  gram->nCsr;.    
353f0 61 73 73 65 72 74 28 20 6e 4d 65 6d 3e 30 20 29  assert( nMem>0 )
35400 3b 0a 20 20 20 20 69 66 28 20 70 50 72 6f 67 72  ;.    if( pProgr
35410 61 6d 2d 3e 6e 43 73 72 3d 3d 30 20 29 20 6e 4d  am->nCsr==0 ) nM
35420 65 6d 2b 2b 3b 0a 20 20 20 20 6e 42 79 74 65 20  em++;.    nByte 
35430 3d 20 52 4f 55 4e 44 38 28 73 69 7a 65 6f 66 28  = ROUND8(sizeof(
35440 56 64 62 65 46 72 61 6d 65 29 29 0a 20 20 20 20  VdbeFrame)).    
35450 20 20 20 20 20 20 20 20 20 20 2b 20 6e 4d 65 6d            + nMem
35460 20 2a 20 73 69 7a 65 6f 66 28 4d 65 6d 29 0a 20   * sizeof(Mem). 
35470 20 20 20 20 20 20 20 20 20 20 20 20 20 2b 20 70               + p
35480 50 72 6f 67 72 61 6d 2d 3e 6e 43 73 72 20 2a 20  Program->nCsr * 
35490 73 69 7a 65 6f 66 28 56 64 62 65 43 75 72 73 6f  sizeof(VdbeCurso
354a0 72 2a 29 0a 20 20 20 20 20 20 20 20 20 20 20 20  r*).            
354b0 20 20 2b 20 28 70 50 72 6f 67 72 61 6d 2d 3e 6e    + (pProgram->n
354c0 4f 70 20 2b 20 37 29 2f 38 3b 0a 20 20 20 20 70  Op + 7)/8;.    p
354d0 46 72 61 6d 65 20 3d 20 73 71 6c 69 74 65 33 44  Frame = sqlite3D
354e0 62 4d 61 6c 6c 6f 63 5a 65 72 6f 28 64 62 2c 20  bMallocZero(db, 
354f0 6e 42 79 74 65 29 3b 0a 20 20 20 20 69 66 28 20  nByte);.    if( 
35500 21 70 46 72 61 6d 65 20 29 7b 0a 20 20 20 20 20  !pFrame ){.     
35510 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20   goto no_mem;.  
35520 20 20 7d 0a 20 20 20 20 73 71 6c 69 74 65 33 56    }.    sqlite3V
35530 64 62 65 4d 65 6d 52 65 6c 65 61 73 65 28 70 52  dbeMemRelease(pR
35540 74 29 3b 0a 20 20 20 20 70 52 74 2d 3e 66 6c 61  t);.    pRt->fla
35550 67 73 20 3d 20 4d 45 4d 5f 42 6c 6f 62 7c 4d 45  gs = MEM_Blob|ME
35560 4d 5f 44 79 6e 3b 0a 20 20 20 20 70 52 74 2d 3e  M_Dyn;.    pRt->
35570 7a 20 3d 20 28 63 68 61 72 2a 29 70 46 72 61 6d  z = (char*)pFram
35580 65 3b 0a 20 20 20 20 70 52 74 2d 3e 6e 20 3d 20  e;.    pRt->n = 
35590 6e 42 79 74 65 3b 0a 20 20 20 20 70 52 74 2d 3e  nByte;.    pRt->
355a0 78 44 65 6c 20 3d 20 73 71 6c 69 74 65 33 56 64  xDel = sqlite3Vd
355b0 62 65 46 72 61 6d 65 4d 65 6d 44 65 6c 3b 0a 0a  beFrameMemDel;..
355c0 20 20 20 20 70 46 72 61 6d 65 2d 3e 76 20 3d 20      pFrame->v = 
355d0 70 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 6e  p;.    pFrame->n
355e0 43 68 69 6c 64 4d 65 6d 20 3d 20 6e 4d 65 6d 3b  ChildMem = nMem;
355f0 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 6e 43 68  .    pFrame->nCh
35600 69 6c 64 43 73 72 20 3d 20 70 50 72 6f 67 72 61  ildCsr = pProgra
35610 6d 2d 3e 6e 43 73 72 3b 0a 20 20 20 20 70 46 72  m->nCsr;.    pFr
35620 61 6d 65 2d 3e 70 63 20 3d 20 28 69 6e 74 29 28  ame->pc = (int)(
35630 70 4f 70 20 2d 20 61 4f 70 29 3b 0a 20 20 20 20  pOp - aOp);.    
35640 70 46 72 61 6d 65 2d 3e 61 4d 65 6d 20 3d 20 70  pFrame->aMem = p
35650 2d 3e 61 4d 65 6d 3b 0a 20 20 20 20 70 46 72 61  ->aMem;.    pFra
35660 6d 65 2d 3e 6e 4d 65 6d 20 3d 20 70 2d 3e 6e 4d  me->nMem = p->nM
35670 65 6d 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e  em;.    pFrame->
35680 61 70 43 73 72 20 3d 20 70 2d 3e 61 70 43 73 72  apCsr = p->apCsr
35690 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 6e 43  ;.    pFrame->nC
356a0 75 72 73 6f 72 20 3d 20 70 2d 3e 6e 43 75 72 73  ursor = p->nCurs
356b0 6f 72 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e  or;.    pFrame->
356c0 61 4f 70 20 3d 20 70 2d 3e 61 4f 70 3b 0a 20 20  aOp = p->aOp;.  
356d0 20 20 70 46 72 61 6d 65 2d 3e 6e 4f 70 20 3d 20    pFrame->nOp = 
356e0 70 2d 3e 6e 4f 70 3b 0a 20 20 20 20 70 46 72 61  p->nOp;.    pFra
356f0 6d 65 2d 3e 74 6f 6b 65 6e 20 3d 20 70 50 72 6f  me->token = pPro
35700 67 72 61 6d 2d 3e 74 6f 6b 65 6e 3b 0a 23 69 66  gram->token;.#if
35710 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  def SQLITE_ENABL
35720 45 5f 53 54 4d 54 5f 53 43 41 4e 53 54 41 54 55  E_STMT_SCANSTATU
35730 53 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 61 6e  S.    pFrame->an
35740 45 78 65 63 20 3d 20 70 2d 3e 61 6e 45 78 65 63  Exec = p->anExec
35750 3b 0a 23 65 6e 64 69 66 0a 23 69 66 64 65 66 20  ;.#endif.#ifdef 
35760 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 20  SQLITE_DEBUG.   
35770 20 70 46 72 61 6d 65 2d 3e 69 46 72 61 6d 65 4d   pFrame->iFrameM
35780 61 67 69 63 20 3d 20 53 51 4c 49 54 45 5f 46 52  agic = SQLITE_FR
35790 41 4d 45 5f 4d 41 47 49 43 3b 0a 23 65 6e 64 69  AME_MAGIC;.#endi
357a0 66 0a 0a 20 20 20 20 70 45 6e 64 20 3d 20 26 56  f..    pEnd = &V
357b0 64 62 65 46 72 61 6d 65 4d 65 6d 28 70 46 72 61  dbeFrameMem(pFra
357c0 6d 65 29 5b 70 46 72 61 6d 65 2d 3e 6e 43 68 69  me)[pFrame->nChi
357d0 6c 64 4d 65 6d 5d 3b 0a 20 20 20 20 66 6f 72 28  ldMem];.    for(
357e0 70 4d 65 6d 3d 56 64 62 65 46 72 61 6d 65 4d 65  pMem=VdbeFrameMe
357f0 6d 28 70 46 72 61 6d 65 29 3b 20 70 4d 65 6d 21  m(pFrame); pMem!
35800 3d 70 45 6e 64 3b 20 70 4d 65 6d 2b 2b 29 7b 0a  =pEnd; pMem++){.
35810 20 20 20 20 20 20 70 4d 65 6d 2d 3e 66 6c 61 67        pMem->flag
35820 73 20 3d 20 4d 45 4d 5f 55 6e 64 65 66 69 6e 65  s = MEM_Undefine
35830 64 3b 0a 20 20 20 20 20 20 70 4d 65 6d 2d 3e 64  d;.      pMem->d
35840 62 20 3d 20 64 62 3b 0a 20 20 20 20 7d 0a 20 20  b = db;.    }.  
35850 7d 65 6c 73 65 7b 0a 20 20 20 20 70 46 72 61 6d  }else{.    pFram
35860 65 20 3d 20 28 56 64 62 65 46 72 61 6d 65 2a 29  e = (VdbeFrame*)
35870 70 52 74 2d 3e 7a 3b 0a 20 20 20 20 61 73 73 65  pRt->z;.    asse
35880 72 74 28 20 70 52 74 2d 3e 78 44 65 6c 3d 3d 73  rt( pRt->xDel==s
35890 71 6c 69 74 65 33 56 64 62 65 46 72 61 6d 65 4d  qlite3VdbeFrameM
358a0 65 6d 44 65 6c 20 29 3b 0a 20 20 20 20 61 73 73  emDel );.    ass
358b0 65 72 74 28 20 70 50 72 6f 67 72 61 6d 2d 3e 6e  ert( pProgram->n
358c0 4d 65 6d 2b 70 50 72 6f 67 72 61 6d 2d 3e 6e 43  Mem+pProgram->nC
358d0 73 72 3d 3d 70 46 72 61 6d 65 2d 3e 6e 43 68 69  sr==pFrame->nChi
358e0 6c 64 4d 65 6d 20 0a 20 20 20 20 20 20 20 20 7c  ldMem .        |
358f0 7c 20 28 70 50 72 6f 67 72 61 6d 2d 3e 6e 43 73  | (pProgram->nCs
35900 72 3d 3d 30 20 26 26 20 70 50 72 6f 67 72 61 6d  r==0 && pProgram
35910 2d 3e 6e 4d 65 6d 2b 31 3d 3d 70 46 72 61 6d 65  ->nMem+1==pFrame
35920 2d 3e 6e 43 68 69 6c 64 4d 65 6d 29 20 29 3b 0a  ->nChildMem) );.
35930 20 20 20 20 61 73 73 65 72 74 28 20 70 50 72 6f      assert( pPro
35940 67 72 61 6d 2d 3e 6e 43 73 72 3d 3d 70 46 72 61  gram->nCsr==pFra
35950 6d 65 2d 3e 6e 43 68 69 6c 64 43 73 72 20 29 3b  me->nChildCsr );
35960 0a 20 20 20 20 61 73 73 65 72 74 28 20 28 69 6e  .    assert( (in
35970 74 29 28 70 4f 70 20 2d 20 61 4f 70 29 3d 3d 70  t)(pOp - aOp)==p
35980 46 72 61 6d 65 2d 3e 70 63 20 29 3b 0a 20 20 7d  Frame->pc );.  }
35990 0a 0a 20 20 70 2d 3e 6e 46 72 61 6d 65 2b 2b 3b  ..  p->nFrame++;
359a0 0a 20 20 70 46 72 61 6d 65 2d 3e 70 50 61 72 65  .  pFrame->pPare
359b0 6e 74 20 3d 20 70 2d 3e 70 46 72 61 6d 65 3b 0a  nt = p->pFrame;.
359c0 20 20 70 46 72 61 6d 65 2d 3e 6c 61 73 74 52 6f    pFrame->lastRo
359d0 77 69 64 20 3d 20 64 62 2d 3e 6c 61 73 74 52 6f  wid = db->lastRo
359e0 77 69 64 3b 0a 20 20 70 46 72 61 6d 65 2d 3e 6e  wid;.  pFrame->n
359f0 43 68 61 6e 67 65 20 3d 20 70 2d 3e 6e 43 68 61  Change = p->nCha
35a00 6e 67 65 3b 0a 20 20 70 46 72 61 6d 65 2d 3e 6e  nge;.  pFrame->n
35a10 44 62 43 68 61 6e 67 65 20 3d 20 70 2d 3e 64 62  DbChange = p->db
35a20 2d 3e 6e 43 68 61 6e 67 65 3b 0a 20 20 61 73 73  ->nChange;.  ass
35a30 65 72 74 28 20 70 46 72 61 6d 65 2d 3e 70 41 75  ert( pFrame->pAu
35a40 78 44 61 74 61 3d 3d 30 20 29 3b 0a 20 20 70 46  xData==0 );.  pF
35a50 72 61 6d 65 2d 3e 70 41 75 78 44 61 74 61 20 3d  rame->pAuxData =
35a60 20 70 2d 3e 70 41 75 78 44 61 74 61 3b 0a 20 20   p->pAuxData;.  
35a70 70 2d 3e 70 41 75 78 44 61 74 61 20 3d 20 30 3b  p->pAuxData = 0;
35a80 0a 20 20 70 2d 3e 6e 43 68 61 6e 67 65 20 3d 20  .  p->nChange = 
35a90 30 3b 0a 20 20 70 2d 3e 70 46 72 61 6d 65 20 3d  0;.  p->pFrame =
35aa0 20 70 46 72 61 6d 65 3b 0a 20 20 70 2d 3e 61 4d   pFrame;.  p->aM
35ab0 65 6d 20 3d 20 61 4d 65 6d 20 3d 20 56 64 62 65  em = aMem = Vdbe
35ac0 46 72 61 6d 65 4d 65 6d 28 70 46 72 61 6d 65 29  FrameMem(pFrame)
35ad0 3b 0a 20 20 70 2d 3e 6e 4d 65 6d 20 3d 20 70 46  ;.  p->nMem = pF
35ae0 72 61 6d 65 2d 3e 6e 43 68 69 6c 64 4d 65 6d 3b  rame->nChildMem;
35af0 0a 20 20 70 2d 3e 6e 43 75 72 73 6f 72 20 3d 20  .  p->nCursor = 
35b00 28 75 31 36 29 70 46 72 61 6d 65 2d 3e 6e 43 68  (u16)pFrame->nCh
35b10 69 6c 64 43 73 72 3b 0a 20 20 70 2d 3e 61 70 43  ildCsr;.  p->apC
35b20 73 72 20 3d 20 28 56 64 62 65 43 75 72 73 6f 72  sr = (VdbeCursor
35b30 20 2a 2a 29 26 61 4d 65 6d 5b 70 2d 3e 6e 4d 65   **)&aMem[p->nMe
35b40 6d 5d 3b 0a 20 20 70 46 72 61 6d 65 2d 3e 61 4f  m];.  pFrame->aO
35b50 6e 63 65 20 3d 20 28 75 38 2a 29 26 70 2d 3e 61  nce = (u8*)&p->a
35b60 70 43 73 72 5b 70 50 72 6f 67 72 61 6d 2d 3e 6e  pCsr[pProgram->n
35b70 43 73 72 5d 3b 0a 20 20 6d 65 6d 73 65 74 28 70  Csr];.  memset(p
35b80 46 72 61 6d 65 2d 3e 61 4f 6e 63 65 2c 20 30 2c  Frame->aOnce, 0,
35b90 20 28 70 50 72 6f 67 72 61 6d 2d 3e 6e 4f 70 20   (pProgram->nOp 
35ba0 2b 20 37 29 2f 38 29 3b 0a 20 20 70 2d 3e 61 4f  + 7)/8);.  p->aO
35bb0 70 20 3d 20 61 4f 70 20 3d 20 70 50 72 6f 67 72  p = aOp = pProgr
35bc0 61 6d 2d 3e 61 4f 70 3b 0a 20 20 70 2d 3e 6e 4f  am->aOp;.  p->nO
35bd0 70 20 3d 20 70 50 72 6f 67 72 61 6d 2d 3e 6e 4f  p = pProgram->nO
35be0 70 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  p;.#ifdef SQLITE
35bf0 5f 45 4e 41 42 4c 45 5f 53 54 4d 54 5f 53 43 41  _ENABLE_STMT_SCA
35c00 4e 53 54 41 54 55 53 0a 20 20 70 2d 3e 61 6e 45  NSTATUS.  p->anE
35c10 78 65 63 20 3d 20 30 3b 0a 23 65 6e 64 69 66 0a  xec = 0;.#endif.
35c20 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45  #ifdef SQLITE_DE
35c30 42 55 47 0a 20 20 2f 2a 20 56 65 72 69 66 79 20  BUG.  /* Verify 
35c40 74 68 61 74 20 73 65 63 6f 6e 64 20 61 6e 64 20  that second and 
35c50 73 75 62 73 65 71 75 65 6e 74 20 65 78 65 63 75  subsequent execu
35c60 74 69 6f 6e 73 20 6f 66 20 74 68 65 20 73 61 6d  tions of the sam
35c70 65 20 74 72 69 67 67 65 72 20 64 6f 20 6e 6f 74  e trigger do not
35c80 0a 20 20 2a 2a 20 74 72 79 20 74 6f 20 72 65 75  .  ** try to reu
35c90 73 65 20 72 65 67 69 73 74 65 72 20 76 61 6c 75  se register valu
35ca0 65 73 20 66 72 6f 6d 20 74 68 65 20 66 69 72 73  es from the firs
35cb0 74 20 75 73 65 2e 20 2a 2f 0a 20 20 7b 0a 20 20  t use. */.  {.  
35cc0 20 20 69 6e 74 20 69 3b 0a 20 20 20 20 66 6f 72    int i;.    for
35cd0 28 69 3d 30 3b 20 69 3c 70 2d 3e 6e 4d 65 6d 3b  (i=0; i<p->nMem;
35ce0 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 61 4d 65   i++){.      aMe
35cf0 6d 5b 69 5d 2e 70 53 63 6f 70 79 46 72 6f 6d 20  m[i].pScopyFrom 
35d00 3d 20 30 3b 20 20 2f 2a 20 50 72 65 76 65 6e 74  = 0;  /* Prevent
35d10 20 66 61 6c 73 65 2d 70 6f 73 69 74 69 76 65 20   false-positive 
35d20 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 29 20  AboutToChange() 
35d30 65 72 72 73 20 2a 2f 0a 20 20 20 20 20 20 61 4d  errs */.      aM
35d40 65 6d 5b 69 5d 2e 66 6c 61 67 73 20 7c 3d 20 4d  em[i].flags |= M
35d50 45 4d 5f 55 6e 64 65 66 69 6e 65 64 3b 20 2f 2a  EM_Undefined; /*
35d60 20 43 61 75 73 65 20 61 20 66 61 75 6c 74 20 69   Cause a fault i
35d70 66 20 74 68 69 73 20 72 65 67 20 69 73 20 72 65  f this reg is re
35d80 75 73 65 64 20 2a 2f 0a 20 20 20 20 7d 0a 20 20  used */.    }.  
35d90 7d 0a 23 65 6e 64 69 66 0a 20 20 70 4f 70 20 3d  }.#endif.  pOp =
35da0 20 26 61 4f 70 5b 2d 31 5d 3b 0a 20 20 67 6f 74   &aOp[-1];.  got
35db0 6f 20 63 68 65 63 6b 5f 66 6f 72 5f 69 6e 74 65  o check_for_inte
35dc0 72 72 75 70 74 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  rrupt;.}../* Opc
35dd0 6f 64 65 3a 20 50 61 72 61 6d 20 50 31 20 50 32  ode: Param P1 P2
35de0 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 69   * * *.**.** Thi
35df0 73 20 6f 70 63 6f 64 65 20 69 73 20 6f 6e 6c 79  s opcode is only
35e00 20 65 76 65 72 20 70 72 65 73 65 6e 74 20 69 6e   ever present in
35e10 20 73 75 62 2d 70 72 6f 67 72 61 6d 73 20 63 61   sub-programs ca
35e20 6c 6c 65 64 20 76 69 61 20 74 68 65 20 0a 2a 2a  lled via the .**
35e30 20 4f 50 5f 50 72 6f 67 72 61 6d 20 69 6e 73 74   OP_Program inst
35e40 72 75 63 74 69 6f 6e 2e 20 43 6f 70 79 20 61 20  ruction. Copy a 
35e50 76 61 6c 75 65 20 63 75 72 72 65 6e 74 6c 79 20  value currently 
35e60 73 74 6f 72 65 64 20 69 6e 20 61 20 6d 65 6d 6f  stored in a memo
35e70 72 79 20 0a 2a 2a 20 63 65 6c 6c 20 6f 66 20 74  ry .** cell of t
35e80 68 65 20 63 61 6c 6c 69 6e 67 20 28 70 61 72 65  he calling (pare
35e90 6e 74 29 20 66 72 61 6d 65 20 74 6f 20 63 65 6c  nt) frame to cel
35ea0 6c 20 50 32 20 69 6e 20 74 68 65 20 63 75 72 72  l P2 in the curr
35eb0 65 6e 74 20 66 72 61 6d 65 73 20 0a 2a 2a 20 61  ent frames .** a
35ec0 64 64 72 65 73 73 20 73 70 61 63 65 2e 20 54 68  ddress space. Th
35ed0 69 73 20 69 73 20 75 73 65 64 20 62 79 20 74 72  is is used by tr
35ee0 69 67 67 65 72 20 70 72 6f 67 72 61 6d 73 20 74  igger programs t
35ef0 6f 20 61 63 63 65 73 73 20 74 68 65 20 6e 65 77  o access the new
35f00 2e 2a 20 0a 2a 2a 20 61 6e 64 20 6f 6c 64 2e 2a  .* .** and old.*
35f10 20 76 61 6c 75 65 73 2e 0a 2a 2a 0a 2a 2a 20 54   values..**.** T
35f20 68 65 20 61 64 64 72 65 73 73 20 6f 66 20 74 68  he address of th
35f30 65 20 63 65 6c 6c 20 69 6e 20 74 68 65 20 70 61  e cell in the pa
35f40 72 65 6e 74 20 66 72 61 6d 65 20 69 73 20 64 65  rent frame is de
35f50 74 65 72 6d 69 6e 65 64 20 62 79 20 61 64 64 69  termined by addi
35f60 6e 67 0a 2a 2a 20 74 68 65 20 76 61 6c 75 65 20  ng.** the value 
35f70 6f 66 20 74 68 65 20 50 31 20 61 72 67 75 6d 65  of the P1 argume
35f80 6e 74 20 74 6f 20 74 68 65 20 76 61 6c 75 65 20  nt to the value 
35f90 6f 66 20 74 68 65 20 50 31 20 61 72 67 75 6d 65  of the P1 argume
35fa0 6e 74 20 74 6f 20 74 68 65 0a 2a 2a 20 63 61 6c  nt to the.** cal
35fb0 6c 69 6e 67 20 4f 50 5f 50 72 6f 67 72 61 6d 20  ling OP_Program 
35fc0 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a  instruction..*/.
35fd0 63 61 73 65 20 4f 50 5f 50 61 72 61 6d 3a 20 7b  case OP_Param: {
35fe0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75             /* ou
35ff0 74 32 20 2a 2f 0a 20 20 56 64 62 65 46 72 61 6d  t2 */.  VdbeFram
36000 65 20 2a 70 46 72 61 6d 65 3b 0a 20 20 4d 65 6d  e *pFrame;.  Mem
36010 20 2a 70 49 6e 3b 0a 20 20 70 4f 75 74 20 3d 20   *pIn;.  pOut = 
36020 6f 75 74 32 50 72 65 72 65 6c 65 61 73 65 28 70  out2Prerelease(p
36030 2c 20 70 4f 70 29 3b 0a 20 20 70 46 72 61 6d 65  , pOp);.  pFrame
36040 20 3d 20 70 2d 3e 70 46 72 61 6d 65 3b 0a 20 20   = p->pFrame;.  
36050 70 49 6e 20 3d 20 26 70 46 72 61 6d 65 2d 3e 61  pIn = &pFrame->a
36060 4d 65 6d 5b 70 4f 70 2d 3e 70 31 20 2b 20 70 46  Mem[pOp->p1 + pF
36070 72 61 6d 65 2d 3e 61 4f 70 5b 70 46 72 61 6d 65  rame->aOp[pFrame
36080 2d 3e 70 63 5d 2e 70 31 5d 3b 20 20 20 0a 20 20  ->pc].p1];   .  
36090 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 68  sqlite3VdbeMemSh
360a0 61 6c 6c 6f 77 43 6f 70 79 28 70 4f 75 74 2c 20  allowCopy(pOut, 
360b0 70 49 6e 2c 20 4d 45 4d 5f 45 70 68 65 6d 29 3b  pIn, MEM_Ephem);
360c0 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 23 65 6e  .  break;.}..#en
360d0 64 69 66 20 2f 2a 20 23 69 66 6e 64 65 66 20 53  dif /* #ifndef S
360e0 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 49 47 47  QLITE_OMIT_TRIGG
360f0 45 52 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53  ER */..#ifndef S
36100 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4f 52 45 49  QLITE_OMIT_FOREI
36110 47 4e 5f 4b 45 59 0a 2f 2a 20 4f 70 63 6f 64 65  GN_KEY./* Opcode
36120 3a 20 46 6b 43 6f 75 6e 74 65 72 20 50 31 20 50  : FkCounter P1 P
36130 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70  2 * * *.** Synop
36140 73 69 73 3a 20 66 6b 63 74 72 5b 50 31 5d 2b 3d  sis: fkctr[P1]+=
36150 50 32 0a 2a 2a 0a 2a 2a 20 49 6e 63 72 65 6d 65  P2.**.** Increme
36160 6e 74 20 61 20 22 63 6f 6e 73 74 72 61 69 6e 74  nt a "constraint
36170 20 63 6f 75 6e 74 65 72 22 20 62 79 20 50 32 20   counter" by P2 
36180 28 50 32 20 6d 61 79 20 62 65 20 6e 65 67 61 74  (P2 may be negat
36190 69 76 65 20 6f 72 20 70 6f 73 69 74 69 76 65 29  ive or positive)
361a0 2e 0a 2a 2a 20 49 66 20 50 31 20 69 73 20 6e 6f  ..** If P1 is no
361b0 6e 2d 7a 65 72 6f 2c 20 74 68 65 20 64 61 74 61  n-zero, the data
361c0 62 61 73 65 20 63 6f 6e 73 74 72 61 69 6e 74 20  base constraint 
361d0 63 6f 75 6e 74 65 72 20 69 73 20 69 6e 63 72 65  counter is incre
361e0 6d 65 6e 74 65 64 20 0a 2a 2a 20 28 64 65 66 65  mented .** (defe
361f0 72 72 65 64 20 66 6f 72 65 69 67 6e 20 6b 65 79  rred foreign key
36200 20 63 6f 6e 73 74 72 61 69 6e 74 73 29 2e 20 4f   constraints). O
36210 74 68 65 72 77 69 73 65 2c 20 69 66 20 50 31 20  therwise, if P1 
36220 69 73 20 7a 65 72 6f 2c 20 74 68 65 20 0a 2a 2a  is zero, the .**
36230 20 73 74 61 74 65 6d 65 6e 74 20 63 6f 75 6e 74   statement count
36240 65 72 20 69 73 20 69 6e 63 72 65 6d 65 6e 74 65  er is incremente
36250 64 20 28 69 6d 6d 65 64 69 61 74 65 20 66 6f 72  d (immediate for
36260 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61  eign key constra
36270 69 6e 74 73 29 2e 0a 2a 2f 0a 63 61 73 65 20 4f  ints)..*/.case O
36280 50 5f 46 6b 43 6f 75 6e 74 65 72 3a 20 7b 0a 20  P_FkCounter: {. 
36290 20 69 66 28 20 64 62 2d 3e 66 6c 61 67 73 20 26   if( db->flags &
362a0 20 53 51 4c 49 54 45 5f 44 65 66 65 72 46 4b 73   SQLITE_DeferFKs
362b0 20 29 7b 0a 20 20 20 20 64 62 2d 3e 6e 44 65 66   ){.    db->nDef
362c0 65 72 72 65 64 49 6d 6d 43 6f 6e 73 20 2b 3d 20  erredImmCons += 
362d0 70 4f 70 2d 3e 70 32 3b 0a 20 20 7d 65 6c 73 65  pOp->p2;.  }else
362e0 20 69 66 28 20 70 4f 70 2d 3e 70 31 20 29 7b 0a   if( pOp->p1 ){.
362f0 20 20 20 20 64 62 2d 3e 6e 44 65 66 65 72 72 65      db->nDeferre
36300 64 43 6f 6e 73 20 2b 3d 20 70 4f 70 2d 3e 70 32  dCons += pOp->p2
36310 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70  ;.  }else{.    p
36320 2d 3e 6e 46 6b 43 6f 6e 73 74 72 61 69 6e 74 20  ->nFkConstraint 
36330 2b 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 7d 0a  += pOp->p2;.  }.
36340 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
36350 70 63 6f 64 65 3a 20 46 6b 49 66 5a 65 72 6f 20  pcode: FkIfZero 
36360 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53  P1 P2 * * *.** S
36370 79 6e 6f 70 73 69 73 3a 20 69 66 20 66 6b 63 74  ynopsis: if fkct
36380 72 5b 50 31 5d 3d 3d 30 20 67 6f 74 6f 20 50 32  r[P1]==0 goto P2
36390 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f  .**.** This opco
363a0 64 65 20 74 65 73 74 73 20 69 66 20 61 20 66 6f  de tests if a fo
363b0 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72  reign key constr
363c0 61 69 6e 74 2d 63 6f 75 6e 74 65 72 20 69 73 20  aint-counter is 
363d0 63 75 72 72 65 6e 74 6c 79 20 7a 65 72 6f 2e 0a  currently zero..
363e0 2a 2a 20 49 66 20 73 6f 2c 20 6a 75 6d 70 20 74  ** If so, jump t
363f0 6f 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 50 32  o instruction P2
36400 2e 20 4f 74 68 65 72 77 69 73 65 2c 20 66 61 6c  . Otherwise, fal
36410 6c 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65  l through to the
36420 20 6e 65 78 74 20 0a 2a 2a 20 69 6e 73 74 72 75   next .** instru
36430 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  ction..**.** If 
36440 50 31 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20  P1 is non-zero, 
36450 74 68 65 6e 20 74 68 65 20 6a 75 6d 70 20 69 73  then the jump is
36460 20 74 61 6b 65 6e 20 69 66 20 74 68 65 20 64 61   taken if the da
36470 74 61 62 61 73 65 20 63 6f 6e 73 74 72 61 69 6e  tabase constrain
36480 74 2d 63 6f 75 6e 74 65 72 0a 2a 2a 20 69 73 20  t-counter.** is 
36490 7a 65 72 6f 20 28 74 68 65 20 6f 6e 65 20 74 68  zero (the one th
364a0 61 74 20 63 6f 75 6e 74 73 20 64 65 66 65 72 72  at counts deferr
364b0 65 64 20 63 6f 6e 73 74 72 61 69 6e 74 20 76 69  ed constraint vi
364c0 6f 6c 61 74 69 6f 6e 73 29 2e 20 49 66 20 50 31  olations). If P1
364d0 20 69 73 0a 2a 2a 20 7a 65 72 6f 2c 20 74 68 65   is.** zero, the
364e0 20 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e 20 69   jump is taken i
364f0 66 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74 20  f the statement 
36500 63 6f 6e 73 74 72 61 69 6e 74 2d 63 6f 75 6e 74  constraint-count
36510 65 72 20 69 73 20 7a 65 72 6f 0a 2a 2a 20 28 69  er is zero.** (i
36520 6d 6d 65 64 69 61 74 65 20 66 6f 72 65 69 67 6e  mmediate foreign
36530 20 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e 74 20   key constraint 
36540 76 69 6f 6c 61 74 69 6f 6e 73 29 2e 0a 2a 2f 0a  violations)..*/.
36550 63 61 73 65 20 4f 50 5f 46 6b 49 66 5a 65 72 6f  case OP_FkIfZero
36560 3a 20 7b 20 20 20 20 20 20 20 20 20 2f 2a 20 6a  : {         /* j
36570 75 6d 70 20 2a 2f 0a 20 20 69 66 28 20 70 4f 70  ump */.  if( pOp
36580 2d 3e 70 31 20 29 7b 0a 20 20 20 20 56 64 62 65  ->p1 ){.    Vdbe
36590 42 72 61 6e 63 68 54 61 6b 65 6e 28 64 62 2d 3e  BranchTaken(db->
365a0 6e 44 65 66 65 72 72 65 64 43 6f 6e 73 3d 3d 30  nDeferredCons==0
365b0 20 26 26 20 64 62 2d 3e 6e 44 65 66 65 72 72 65   && db->nDeferre
365c0 64 49 6d 6d 43 6f 6e 73 3d 3d 30 2c 20 32 29 3b  dImmCons==0, 2);
365d0 0a 20 20 20 20 69 66 28 20 64 62 2d 3e 6e 44 65  .    if( db->nDe
365e0 66 65 72 72 65 64 43 6f 6e 73 3d 3d 30 20 26 26  ferredCons==0 &&
365f0 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 49 6d   db->nDeferredIm
36600 6d 43 6f 6e 73 3d 3d 30 20 29 20 67 6f 74 6f 20  mCons==0 ) goto 
36610 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 7d 65  jump_to_p2;.  }e
36620 6c 73 65 7b 0a 20 20 20 20 56 64 62 65 42 72 61  lse{.    VdbeBra
36630 6e 63 68 54 61 6b 65 6e 28 70 2d 3e 6e 46 6b 43  nchTaken(p->nFkC
36640 6f 6e 73 74 72 61 69 6e 74 3d 3d 30 20 26 26 20  onstraint==0 && 
36650 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 49 6d 6d  db->nDeferredImm
36660 43 6f 6e 73 3d 3d 30 2c 20 32 29 3b 0a 20 20 20  Cons==0, 2);.   
36670 20 69 66 28 20 70 2d 3e 6e 46 6b 43 6f 6e 73 74   if( p->nFkConst
36680 72 61 69 6e 74 3d 3d 30 20 26 26 20 64 62 2d 3e  raint==0 && db->
36690 6e 44 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73  nDeferredImmCons
366a0 3d 3d 30 20 29 20 67 6f 74 6f 20 6a 75 6d 70 5f  ==0 ) goto jump_
366b0 74 6f 5f 70 32 3b 0a 20 20 7d 0a 20 20 62 72 65  to_p2;.  }.  bre
366c0 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20  ak;.}.#endif /* 
366d0 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
366e0 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 20  MIT_FOREIGN_KEY 
366f0 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  */..#ifndef SQLI
36700 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 49 4e 43 52  TE_OMIT_AUTOINCR
36710 45 4d 45 4e 54 0a 2f 2a 20 4f 70 63 6f 64 65 3a  EMENT./* Opcode:
36720 20 4d 65 6d 4d 61 78 20 50 31 20 50 32 20 2a 20   MemMax P1 P2 * 
36730 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  * *.** Synopsis:
36740 20 72 5b 50 31 5d 3d 6d 61 78 28 72 5b 50 31 5d   r[P1]=max(r[P1]
36750 2c 72 5b 50 32 5d 29 0a 2a 2a 0a 2a 2a 20 50 31  ,r[P2]).**.** P1
36760 20 69 73 20 61 20 72 65 67 69 73 74 65 72 20 69   is a register i
36770 6e 20 74 68 65 20 72 6f 6f 74 20 66 72 61 6d 65  n the root frame
36780 20 6f 66 20 74 68 69 73 20 56 4d 20 28 74 68 65   of this VM (the
36790 20 72 6f 6f 74 20 66 72 61 6d 65 20 69 73 0a 2a   root frame is.*
367a0 2a 20 64 69 66 66 65 72 65 6e 74 20 66 72 6f 6d  * different from
367b0 20 74 68 65 20 63 75 72 72 65 6e 74 20 66 72 61   the current fra
367c0 6d 65 20 69 66 20 74 68 69 73 20 69 6e 73 74 72  me if this instr
367d0 75 63 74 69 6f 6e 20 69 73 20 62 65 69 6e 67 20  uction is being 
367e0 65 78 65 63 75 74 65 64 0a 2a 2a 20 77 69 74 68  executed.** with
367f0 69 6e 20 61 20 73 75 62 2d 70 72 6f 67 72 61 6d  in a sub-program
36800 29 2e 20 53 65 74 20 74 68 65 20 76 61 6c 75 65  ). Set the value
36810 20 6f 66 20 72 65 67 69 73 74 65 72 20 50 31 20   of register P1 
36820 74 6f 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 6f  to the maximum o
36830 66 20 0a 2a 2a 20 69 74 73 20 63 75 72 72 65 6e  f .** its curren
36840 74 20 76 61 6c 75 65 20 61 6e 64 20 74 68 65 20  t value and the 
36850 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65  value in registe
36860 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73  r P2..**.** This
36870 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 74 68 72   instruction thr
36880 6f 77 73 20 61 6e 20 65 72 72 6f 72 20 69 66 20  ows an error if 
36890 74 68 65 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20  the memory cell 
368a0 69 73 20 6e 6f 74 20 69 6e 69 74 69 61 6c 6c 79  is not initially
368b0 0a 2a 2a 20 61 6e 20 69 6e 74 65 67 65 72 2e 0a  .** an integer..
368c0 2a 2f 0a 63 61 73 65 20 4f 50 5f 4d 65 6d 4d 61  */.case OP_MemMa
368d0 78 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 69  x: {        /* i
368e0 6e 32 20 2a 2f 0a 20 20 56 64 62 65 46 72 61 6d  n2 */.  VdbeFram
368f0 65 20 2a 70 46 72 61 6d 65 3b 0a 20 20 69 66 28  e *pFrame;.  if(
36900 20 70 2d 3e 70 46 72 61 6d 65 20 29 7b 0a 20 20   p->pFrame ){.  
36910 20 20 66 6f 72 28 70 46 72 61 6d 65 3d 70 2d 3e    for(pFrame=p->
36920 70 46 72 61 6d 65 3b 20 70 46 72 61 6d 65 2d 3e  pFrame; pFrame->
36930 70 50 61 72 65 6e 74 3b 20 70 46 72 61 6d 65 3d  pParent; pFrame=
36940 70 46 72 61 6d 65 2d 3e 70 50 61 72 65 6e 74 29  pFrame->pParent)
36950 3b 0a 20 20 20 20 70 49 6e 31 20 3d 20 26 70 46  ;.    pIn1 = &pF
36960 72 61 6d 65 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e  rame->aMem[pOp->
36970 70 31 5d 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  p1];.  }else{.  
36980 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70    pIn1 = &aMem[p
36990 4f 70 2d 3e 70 31 5d 3b 0a 20 20 7d 0a 20 20 61  Op->p1];.  }.  a
369a0 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69  ssert( memIsVali
369b0 64 28 70 49 6e 31 29 20 29 3b 0a 20 20 73 71 6c  d(pIn1) );.  sql
369c0 69 74 65 33 56 64 62 65 4d 65 6d 49 6e 74 65 67  ite3VdbeMemInteg
369d0 65 72 69 66 79 28 70 49 6e 31 29 3b 0a 20 20 70  erify(pIn1);.  p
369e0 49 6e 32 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In2 = &aMem[pOp-
369f0 3e 70 32 5d 3b 0a 20 20 73 71 6c 69 74 65 33 56  >p2];.  sqlite3V
36a00 64 62 65 4d 65 6d 49 6e 74 65 67 65 72 69 66 79  dbeMemIntegerify
36a10 28 70 49 6e 32 29 3b 0a 20 20 69 66 28 20 70 49  (pIn2);.  if( pI
36a20 6e 31 2d 3e 75 2e 69 3c 70 49 6e 32 2d 3e 75 2e  n1->u.i<pIn2->u.
36a30 69 29 7b 0a 20 20 20 20 70 49 6e 31 2d 3e 75 2e  i){.    pIn1->u.
36a40 69 20 3d 20 70 49 6e 32 2d 3e 75 2e 69 3b 0a 20  i = pIn2->u.i;. 
36a50 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65   }.  break;.}.#e
36a60 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f  ndif /* SQLITE_O
36a70 4d 49 54 5f 41 55 54 4f 49 4e 43 52 45 4d 45 4e  MIT_AUTOINCREMEN
36a80 54 20 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  T */../* Opcode:
36a90 20 49 66 50 6f 73 20 50 31 20 50 32 20 50 33 20   IfPos P1 P2 P3 
36aa0 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  * *.** Synopsis:
36ab0 20 69 66 20 72 5b 50 31 5d 3e 30 20 74 68 65 6e   if r[P1]>0 then
36ac0 20 72 5b 50 31 5d 2d 3d 50 33 2c 20 67 6f 74 6f   r[P1]-=P3, goto
36ad0 20 50 32 0a 2a 2a 0a 2a 2a 20 52 65 67 69 73 74   P2.**.** Regist
36ae0 65 72 20 50 31 20 6d 75 73 74 20 63 6f 6e 74 61  er P1 must conta
36af0 69 6e 20 61 6e 20 69 6e 74 65 67 65 72 2e 0a 2a  in an integer..*
36b00 2a 20 49 66 20 74 68 65 20 76 61 6c 75 65 20 6f  * If the value o
36b10 66 20 72 65 67 69 73 74 65 72 20 50 31 20 69 73  f register P1 is
36b20 20 31 20 6f 72 20 67 72 65 61 74 65 72 2c 20 73   1 or greater, s
36b30 75 62 74 72 61 63 74 20 50 33 20 66 72 6f 6d 20  ubtract P3 from 
36b40 74 68 65 0a 2a 2a 20 76 61 6c 75 65 20 69 6e 20  the.** value in 
36b50 50 31 20 61 6e 64 20 6a 75 6d 70 20 74 6f 20 50  P1 and jump to P
36b60 32 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20  2..**.** If the 
36b70 69 6e 69 74 69 61 6c 20 76 61 6c 75 65 20 6f 66  initial value of
36b80 20 72 65 67 69 73 74 65 72 20 50 31 20 69 73 20   register P1 is 
36b90 6c 65 73 73 20 74 68 61 6e 20 31 2c 20 74 68 65  less than 1, the
36ba0 6e 20 74 68 65 0a 2a 2a 20 76 61 6c 75 65 20 69  n the.** value i
36bb0 73 20 75 6e 63 68 61 6e 67 65 64 20 61 6e 64 20  s unchanged and 
36bc0 63 6f 6e 74 72 6f 6c 20 70 61 73 73 65 73 20 74  control passes t
36bd0 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6e 65  hrough to the ne
36be0 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a  xt instruction..
36bf0 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 66 50 6f 73  */.case OP_IfPos
36c00 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a 75  : {        /* ju
36c10 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e  mp, in1 */.  pIn
36c20 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  1 = &aMem[pOp->p
36c30 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 49  1];.  assert( pI
36c40 6e 31 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 49 6e  n1->flags&MEM_In
36c50 74 20 29 3b 0a 20 20 56 64 62 65 42 72 61 6e 63  t );.  VdbeBranc
36c60 68 54 61 6b 65 6e 28 20 70 49 6e 31 2d 3e 75 2e  hTaken( pIn1->u.
36c70 69 3e 30 2c 20 32 29 3b 0a 20 20 69 66 28 20 70  i>0, 2);.  if( p
36c80 49 6e 31 2d 3e 75 2e 69 3e 30 20 29 7b 0a 20 20  In1->u.i>0 ){.  
36c90 20 20 70 49 6e 31 2d 3e 75 2e 69 20 2d 3d 20 70    pIn1->u.i -= p
36ca0 4f 70 2d 3e 70 33 3b 0a 20 20 20 20 67 6f 74 6f  Op->p3;.    goto
36cb0 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 7d   jump_to_p2;.  }
36cc0 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
36cd0 4f 70 63 6f 64 65 3a 20 4f 66 66 73 65 74 4c 69  Opcode: OffsetLi
36ce0 6d 69 74 20 50 31 20 50 32 20 50 33 20 2a 20 2a  mit P1 P2 P3 * *
36cf0 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 66  .** Synopsis: if
36d00 20 72 5b 50 31 5d 3e 30 20 74 68 65 6e 20 72 5b   r[P1]>0 then r[
36d10 50 32 5d 3d 72 5b 50 31 5d 2b 6d 61 78 28 30 2c  P2]=r[P1]+max(0,
36d20 72 5b 50 33 5d 29 20 65 6c 73 65 20 72 5b 50 32  r[P3]) else r[P2
36d30 5d 3d 28 2d 31 29 0a 2a 2a 0a 2a 2a 20 54 68 69  ]=(-1).**.** Thi
36d40 73 20 6f 70 63 6f 64 65 20 70 65 72 66 6f 72 6d  s opcode perform
36d50 73 20 61 20 63 6f 6d 6d 6f 6e 6c 79 20 75 73 65  s a commonly use
36d60 64 20 63 6f 6d 70 75 74 61 74 69 6f 6e 20 61 73  d computation as
36d70 73 6f 63 69 61 74 65 64 20 77 69 74 68 0a 2a 2a  sociated with.**
36d80 20 4c 49 4d 49 54 20 61 6e 64 20 4f 46 46 53 45   LIMIT and OFFSE
36d90 54 20 70 72 6f 63 65 73 73 2e 20 20 72 5b 50 31  T process.  r[P1
36da0 5d 20 68 6f 6c 64 73 20 74 68 65 20 6c 69 6d 69  ] holds the limi
36db0 74 20 63 6f 75 6e 74 65 72 2e 20 20 72 5b 50 33  t counter.  r[P3
36dc0 5d 0a 2a 2a 20 68 6f 6c 64 73 20 74 68 65 20 6f  ].** holds the o
36dd0 66 66 73 65 74 20 63 6f 75 6e 74 65 72 2e 20 20  ffset counter.  
36de0 54 68 65 20 6f 70 63 6f 64 65 20 63 6f 6d 70 75  The opcode compu
36df0 74 65 73 20 74 68 65 20 63 6f 6d 62 69 6e 65 64  tes the combined
36e00 20 76 61 6c 75 65 0a 2a 2a 20 6f 66 20 74 68 65   value.** of the
36e10 20 4c 49 4d 49 54 20 61 6e 64 20 4f 46 46 53 45   LIMIT and OFFSE
36e20 54 20 61 6e 64 20 73 74 6f 72 65 73 20 74 68 61  T and stores tha
36e30 74 20 76 61 6c 75 65 20 69 6e 20 72 5b 50 32 5d  t value in r[P2]
36e40 2e 20 20 54 68 65 20 72 5b 50 32 5d 0a 2a 2a 20  .  The r[P2].** 
36e50 76 61 6c 75 65 20 63 6f 6d 70 75 74 65 64 20 69  value computed i
36e60 73 20 74 68 65 20 74 6f 74 61 6c 20 6e 75 6d 62  s the total numb
36e70 65 72 20 6f 66 20 72 6f 77 73 20 74 68 61 74 20  er of rows that 
36e80 77 69 6c 6c 20 6e 65 65 64 20 74 6f 20 62 65 0a  will need to be.
36e90 2a 2a 20 76 69 73 69 74 65 64 20 69 6e 20 6f 72  ** visited in or
36ea0 64 65 72 20 74 6f 20 63 6f 6d 70 6c 65 74 65 20  der to complete 
36eb0 74 68 65 20 71 75 65 72 79 2e 0a 2a 2a 0a 2a 2a  the query..**.**
36ec0 20 49 66 20 72 5b 50 33 5d 20 69 73 20 7a 65 72   If r[P3] is zer
36ed0 6f 20 6f 72 20 6e 65 67 61 74 69 76 65 2c 20 74  o or negative, t
36ee0 68 61 74 20 6d 65 61 6e 73 20 74 68 65 72 65 20  hat means there 
36ef0 69 73 20 6e 6f 20 4f 46 46 53 45 54 0a 2a 2a 20  is no OFFSET.** 
36f00 61 6e 64 20 72 5b 50 32 5d 20 69 73 20 73 65 74  and r[P2] is set
36f10 20 74 6f 20 62 65 20 74 68 65 20 76 61 6c 75 65   to be the value
36f20 20 6f 66 20 74 68 65 20 4c 49 4d 49 54 2c 20 72   of the LIMIT, r
36f30 5b 50 31 5d 2e 0a 2a 2a 0a 2a 2a 20 69 66 20 72  [P1]..**.** if r
36f40 5b 50 31 5d 20 69 73 20 7a 65 72 6f 20 6f 72 20  [P1] is zero or 
36f50 6e 65 67 61 74 69 76 65 2c 20 74 68 61 74 20 6d  negative, that m
36f60 65 61 6e 73 20 74 68 65 72 65 20 69 73 20 6e 6f  eans there is no
36f70 20 4c 49 4d 49 54 0a 2a 2a 20 61 6e 64 20 72 5b   LIMIT.** and r[
36f80 50 32 5d 20 69 73 20 73 65 74 20 74 6f 20 2d 31  P2] is set to -1
36f90 2e 20 0a 2a 2a 0a 2a 2a 20 4f 74 68 65 72 77 69  . .**.** Otherwi
36fa0 73 65 2c 20 72 5b 50 32 5d 20 69 73 20 73 65 74  se, r[P2] is set
36fb0 20 74 6f 20 74 68 65 20 73 75 6d 20 6f 66 20 72   to the sum of r
36fc0 5b 50 31 5d 20 61 6e 64 20 72 5b 50 33 5d 2e 0a  [P1] and r[P3]..
36fd0 2a 2f 0a 63 61 73 65 20 4f 50 5f 4f 66 66 73 65  */.case OP_Offse
36fe0 74 4c 69 6d 69 74 3a 20 7b 20 20 20 20 2f 2a 20  tLimit: {    /* 
36ff0 69 6e 31 2c 20 6f 75 74 32 2c 20 69 6e 33 20 2a  in1, out2, in3 *
37000 2f 0a 20 20 69 36 34 20 78 3b 0a 20 20 70 49 6e  /.  i64 x;.  pIn
37010 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  1 = &aMem[pOp->p
37020 31 5d 3b 0a 20 20 70 49 6e 33 20 3d 20 26 61 4d  1];.  pIn3 = &aM
37030 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 70  em[pOp->p3];.  p
37040 4f 75 74 20 3d 20 6f 75 74 32 50 72 65 72 65 6c  Out = out2Prerel
37050 65 61 73 65 28 70 2c 20 70 4f 70 29 3b 0a 20 20  ease(p, pOp);.  
37060 61 73 73 65 72 74 28 20 70 49 6e 31 2d 3e 66 6c  assert( pIn1->fl
37070 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 20 29 3b  ags & MEM_Int );
37080 0a 20 20 61 73 73 65 72 74 28 20 70 49 6e 33 2d  .  assert( pIn3-
37090 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74  >flags & MEM_Int
370a0 20 29 3b 0a 20 20 78 20 3d 20 70 49 6e 31 2d 3e   );.  x = pIn1->
370b0 75 2e 69 3b 0a 20 20 69 66 28 20 78 3c 3d 30 20  u.i;.  if( x<=0 
370c0 7c 7c 20 73 71 6c 69 74 65 33 41 64 64 49 6e 74  || sqlite3AddInt
370d0 36 34 28 26 78 2c 20 70 49 6e 33 2d 3e 75 2e 69  64(&x, pIn3->u.i
370e0 3e 30 3f 70 49 6e 33 2d 3e 75 2e 69 3a 30 29 20  >0?pIn3->u.i:0) 
370f0 29 7b 0a 20 20 20 20 2f 2a 20 49 66 20 74 68 65  ){.    /* If the
37100 20 4c 49 4d 49 54 20 69 73 20 6c 65 73 73 20 74   LIMIT is less t
37110 68 61 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f 20  han or equal to 
37120 7a 65 72 6f 2c 20 6c 6f 6f 70 20 66 6f 72 65 76  zero, loop forev
37130 65 72 2e 20 20 54 68 69 73 0a 20 20 20 20 2a 2a  er.  This.    **
37140 20 69 73 20 64 6f 63 75 6d 65 6e 74 65 64 2e 20   is documented. 
37150 20 42 75 74 20 61 6c 73 6f 2c 20 69 66 20 74 68   But also, if th
37160 65 20 4c 49 4d 49 54 2b 4f 46 46 53 45 54 20 65  e LIMIT+OFFSET e
37170 78 63 65 65 64 73 20 32 5e 36 33 20 74 68 65 6e  xceeds 2^63 then
37180 0a 20 20 20 20 2a 2a 20 61 6c 73 6f 20 6c 6f 6f  .    ** also loo
37190 70 20 66 6f 72 65 76 65 72 2e 20 20 54 68 69 73  p forever.  This
371a0 20 69 73 20 75 6e 64 6f 63 75 6d 65 6e 74 65 64   is undocumented
371b0 2e 20 20 49 6e 20 66 61 63 74 2c 20 6f 6e 65 20  .  In fact, one 
371c0 63 6f 75 6c 64 20 61 72 67 75 65 0a 20 20 20 20  could argue.    
371d0 2a 2a 20 74 68 61 74 20 74 68 65 20 6c 6f 6f 70  ** that the loop
371e0 20 73 68 6f 75 6c 64 20 74 65 72 6d 69 6e 61 74   should terminat
371f0 65 2e 20 20 42 75 74 20 61 73 73 75 6d 69 6e 67  e.  But assuming
37200 20 31 20 62 69 6c 6c 69 6f 6e 20 69 74 65 72 61   1 billion itera
37210 74 69 6f 6e 73 0a 20 20 20 20 2a 2a 20 70 65 72  tions.    ** per
37220 20 73 65 63 6f 6e 64 20 28 66 61 72 20 65 78 63   second (far exc
37230 65 65 64 69 6e 67 20 74 68 65 20 63 61 70 61 62  eeding the capab
37240 69 6c 69 74 69 65 73 20 6f 66 20 61 6e 79 20 63  ilities of any c
37250 75 72 72 65 6e 74 20 68 61 72 64 77 61 72 65 29  urrent hardware)
37260 0a 20 20 20 20 2a 2a 20 69 74 20 77 6f 75 6c 64  .    ** it would
37270 20 74 61 6b 65 20 6e 65 61 72 6c 79 20 33 30 30   take nearly 300
37280 20 79 65 61 72 73 20 74 6f 20 61 63 74 75 61 6c   years to actual
37290 6c 79 20 72 65 61 63 68 20 74 68 65 20 6c 69 6d  ly reach the lim
372a0 69 74 2e 20 20 53 6f 0a 20 20 20 20 2a 2a 20 6c  it.  So.    ** l
372b0 6f 6f 70 69 6e 67 20 66 6f 72 65 76 65 72 20 69  ooping forever i
372c0 73 20 61 20 72 65 61 73 6f 6e 61 62 6c 65 20 61  s a reasonable a
372d0 70 70 72 6f 78 69 6d 61 74 69 6f 6e 2e 20 2a 2f  pproximation. */
372e0 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d  .    pOut->u.i =
372f0 20 2d 31 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20   -1;.  }else{.  
37300 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 78 3b    pOut->u.i = x;
37310 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
37320 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 66 4e 6f  ./* Opcode: IfNo
37330 74 5a 65 72 6f 20 50 31 20 50 32 20 2a 20 2a 20  tZero P1 P2 * * 
37340 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69  *.** Synopsis: i
37350 66 20 72 5b 50 31 5d 21 3d 30 20 74 68 65 6e 20  f r[P1]!=0 then 
37360 72 5b 50 31 5d 2d 2d 2c 20 67 6f 74 6f 20 50 32  r[P1]--, goto P2
37370 0a 2a 2a 0a 2a 2a 20 52 65 67 69 73 74 65 72 20  .**.** Register 
37380 50 31 20 6d 75 73 74 20 63 6f 6e 74 61 69 6e 20  P1 must contain 
37390 61 6e 20 69 6e 74 65 67 65 72 2e 20 20 49 66 20  an integer.  If 
373a0 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 72  the content of r
373b0 65 67 69 73 74 65 72 20 50 31 20 69 73 0a 2a 2a  egister P1 is.**
373c0 20 69 6e 69 74 69 61 6c 6c 79 20 67 72 65 61 74   initially great
373d0 65 72 20 74 68 61 6e 20 7a 65 72 6f 2c 20 74 68  er than zero, th
373e0 65 6e 20 64 65 63 72 65 6d 65 6e 74 20 74 68 65  en decrement the
373f0 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
37400 65 72 20 50 31 2e 0a 2a 2a 20 49 66 20 69 74 20  er P1..** If it 
37410 69 73 20 6e 6f 6e 2d 7a 65 72 6f 20 28 6e 65 67  is non-zero (neg
37420 61 74 69 76 65 20 6f 72 20 70 6f 73 69 74 69 76  ative or positiv
37430 65 29 20 61 6e 64 20 74 68 65 6e 20 61 6c 73 6f  e) and then also
37440 20 6a 75 6d 70 20 74 6f 20 50 32 2e 20 20 0a 2a   jump to P2.  .*
37450 2a 20 49 66 20 72 65 67 69 73 74 65 72 20 50 31  * If register P1
37460 20 69 73 20 69 6e 69 74 69 61 6c 6c 79 20 7a 65   is initially ze
37470 72 6f 2c 20 6c 65 61 76 65 20 69 74 20 75 6e 63  ro, leave it unc
37480 68 61 6e 67 65 64 20 61 6e 64 20 66 61 6c 6c 20  hanged and fall 
37490 74 68 72 6f 75 67 68 2e 0a 2a 2f 0a 63 61 73 65  through..*/.case
374a0 20 4f 50 5f 49 66 4e 6f 74 5a 65 72 6f 3a 20 7b   OP_IfNotZero: {
374b0 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c          /* jump,
374c0 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d   in1 */.  pIn1 =
374d0 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b   &aMem[pOp->p1];
374e0 0a 20 20 61 73 73 65 72 74 28 20 70 49 6e 31 2d  .  assert( pIn1-
374f0 3e 66 6c 61 67 73 26 4d 45 4d 5f 49 6e 74 20 29  >flags&MEM_Int )
37500 3b 0a 20 20 56 64 62 65 42 72 61 6e 63 68 54 61  ;.  VdbeBranchTa
37510 6b 65 6e 28 70 49 6e 31 2d 3e 75 2e 69 3c 30 2c  ken(pIn1->u.i<0,
37520 20 32 29 3b 0a 20 20 69 66 28 20 70 49 6e 31 2d   2);.  if( pIn1-
37530 3e 75 2e 69 20 29 7b 0a 20 20 20 20 20 69 66 28  >u.i ){.     if(
37540 20 70 49 6e 31 2d 3e 75 2e 69 3e 30 20 29 20 70   pIn1->u.i>0 ) p
37550 49 6e 31 2d 3e 75 2e 69 2d 2d 3b 0a 20 20 20 20  In1->u.i--;.    
37560 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32   goto jump_to_p2
37570 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
37580 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 44 65 63  ../* Opcode: Dec
37590 72 4a 75 6d 70 5a 65 72 6f 20 50 31 20 50 32 20  rJumpZero P1 P2 
375a0 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69  * * *.** Synopsi
375b0 73 3a 20 69 66 20 28 2d 2d 72 5b 50 31 5d 29 3d  s: if (--r[P1])=
375c0 3d 30 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a  =0 goto P2.**.**
375d0 20 52 65 67 69 73 74 65 72 20 50 31 20 6d 75 73   Register P1 mus
375e0 74 20 68 6f 6c 64 20 61 6e 20 69 6e 74 65 67 65  t hold an intege
375f0 72 2e 20 20 44 65 63 72 65 6d 65 6e 74 20 74 68  r.  Decrement th
37600 65 20 76 61 6c 75 65 20 69 6e 20 50 31 0a 2a 2a  e value in P1.**
37610 20 61 6e 64 20 6a 75 6d 70 20 74 6f 20 50 32 20   and jump to P2 
37620 69 66 20 74 68 65 20 6e 65 77 20 76 61 6c 75 65  if the new value
37630 20 69 73 20 65 78 61 63 74 6c 79 20 7a 65 72 6f   is exactly zero
37640 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 44 65 63  ..*/.case OP_Dec
37650 72 4a 75 6d 70 5a 65 72 6f 3a 20 7b 20 20 20 20  rJumpZero: {    
37660 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 20 2a    /* jump, in1 *
37670 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d  /.  pIn1 = &aMem
37680 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
37690 65 72 74 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73  ert( pIn1->flags
376a0 26 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 69 66  &MEM_Int );.  if
376b0 28 20 70 49 6e 31 2d 3e 75 2e 69 3e 53 4d 41 4c  ( pIn1->u.i>SMAL
376c0 4c 45 53 54 5f 49 4e 54 36 34 20 29 20 70 49 6e  LEST_INT64 ) pIn
376d0 31 2d 3e 75 2e 69 2d 2d 3b 0a 20 20 56 64 62 65  1->u.i--;.  Vdbe
376e0 42 72 61 6e 63 68 54 61 6b 65 6e 28 70 49 6e 31  BranchTaken(pIn1
376f0 2d 3e 75 2e 69 3d 3d 30 2c 20 32 29 3b 0a 20 20  ->u.i==0, 2);.  
37700 69 66 28 20 70 49 6e 31 2d 3e 75 2e 69 3d 3d 30  if( pIn1->u.i==0
37710 20 29 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f   ) goto jump_to_
37720 70 32 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  p2;.  break;.}..
37730 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 41 67 67 53  ./* Opcode: AggS
37740 74 65 70 20 2a 20 50 32 20 50 33 20 50 34 20 50  tep * P2 P3 P4 P
37750 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 61  5.** Synopsis: a
37760 63 63 75 6d 3d 72 5b 50 33 5d 20 73 74 65 70 28  ccum=r[P3] step(
37770 72 5b 50 32 40 50 35 5d 29 0a 2a 2a 0a 2a 2a 20  r[P2@P5]).**.** 
37780 45 78 65 63 75 74 65 20 74 68 65 20 78 53 74 65  Execute the xSte
37790 70 20 66 75 6e 63 74 69 6f 6e 20 66 6f 72 20 61  p function for a
377a0 6e 20 61 67 67 72 65 67 61 74 65 2e 0a 2a 2a 20  n aggregate..** 
377b0 54 68 65 20 66 75 6e 63 74 69 6f 6e 20 68 61 73  The function has
377c0 20 50 35 20 61 72 67 75 6d 65 6e 74 73 2e 20 20   P5 arguments.  
377d0 50 34 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20  P4 is a pointer 
377e0 74 6f 20 74 68 65 20 0a 2a 2a 20 46 75 6e 63 44  to the .** FuncD
377f0 65 66 20 73 74 72 75 63 74 75 72 65 20 74 68 61  ef structure tha
37800 74 20 73 70 65 63 69 66 69 65 73 20 74 68 65 20  t specifies the 
37810 66 75 6e 63 74 69 6f 6e 2e 20 20 52 65 67 69 73  function.  Regis
37820 74 65 72 20 50 33 20 69 73 20 74 68 65 0a 2a 2a  ter P3 is the.**
37830 20 61 63 63 75 6d 75 6c 61 74 6f 72 2e 0a 2a 2a   accumulator..**
37840 0a 2a 2a 20 54 68 65 20 50 35 20 61 72 67 75 6d  .** The P5 argum
37850 65 6e 74 73 20 61 72 65 20 74 61 6b 65 6e 20 66  ents are taken f
37860 72 6f 6d 20 72 65 67 69 73 74 65 72 20 50 32 20  rom register P2 
37870 61 6e 64 20 69 74 73 0a 2a 2a 20 73 75 63 63 65  and its.** succe
37880 73 73 6f 72 73 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63  ssors..*/./* Opc
37890 6f 64 65 3a 20 41 67 67 49 6e 76 65 72 73 65 20  ode: AggInverse 
378a0 2a 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a  * P2 P3 P4 P5.**
378b0 20 53 79 6e 6f 70 73 69 73 3a 20 61 63 63 75 6d   Synopsis: accum
378c0 3d 72 5b 50 33 5d 20 69 6e 76 65 72 73 65 28 72  =r[P3] inverse(r
378d0 5b 50 32 40 50 35 5d 29 0a 2a 2a 0a 2a 2a 20 45  [P2@P5]).**.** E
378e0 78 65 63 75 74 65 20 74 68 65 20 78 49 6e 76 65  xecute the xInve
378f0 72 73 65 20 66 75 6e 63 74 69 6f 6e 20 66 6f 72  rse function for
37900 20 61 6e 20 61 67 67 72 65 67 61 74 65 2e 0a 2a   an aggregate..*
37910 2a 20 54 68 65 20 66 75 6e 63 74 69 6f 6e 20 68  * The function h
37920 61 73 20 50 35 20 61 72 67 75 6d 65 6e 74 73 2e  as P5 arguments.
37930 20 20 50 34 20 69 73 20 61 20 70 6f 69 6e 74 65    P4 is a pointe
37940 72 20 74 6f 20 74 68 65 20 0a 2a 2a 20 46 75 6e  r to the .** Fun
37950 63 44 65 66 20 73 74 72 75 63 74 75 72 65 20 74  cDef structure t
37960 68 61 74 20 73 70 65 63 69 66 69 65 73 20 74 68  hat specifies th
37970 65 20 66 75 6e 63 74 69 6f 6e 2e 20 20 52 65 67  e function.  Reg
37980 69 73 74 65 72 20 50 33 20 69 73 20 74 68 65 0a  ister P3 is the.
37990 2a 2a 20 61 63 63 75 6d 75 6c 61 74 6f 72 2e 0a  ** accumulator..
379a0 2a 2a 0a 2a 2a 20 54 68 65 20 50 35 20 61 72 67  **.** The P5 arg
379b0 75 6d 65 6e 74 73 20 61 72 65 20 74 61 6b 65 6e  uments are taken
379c0 20 66 72 6f 6d 20 72 65 67 69 73 74 65 72 20 50   from register P
379d0 32 20 61 6e 64 20 69 74 73 0a 2a 2a 20 73 75 63  2 and its.** suc
379e0 63 65 73 73 6f 72 73 2e 0a 2a 2f 0a 2f 2a 20 4f  cessors..*/./* O
379f0 70 63 6f 64 65 3a 20 41 67 67 53 74 65 70 31 20  pcode: AggStep1 
37a00 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a  P1 P2 P3 P4 P5.*
37a10 2a 20 53 79 6e 6f 70 73 69 73 3a 20 61 63 63 75  * Synopsis: accu
37a20 6d 3d 72 5b 50 33 5d 20 73 74 65 70 28 72 5b 50  m=r[P3] step(r[P
37a30 32 40 50 35 5d 29 0a 2a 2a 0a 2a 2a 20 45 78 65  2@P5]).**.** Exe
37a40 63 75 74 65 20 74 68 65 20 78 53 74 65 70 20 28  cute the xStep (
37a50 69 66 20 50 31 3d 3d 30 29 20 6f 72 20 78 49 6e  if P1==0) or xIn
37a60 76 65 72 73 65 20 28 69 66 20 50 31 21 3d 30 29  verse (if P1!=0)
37a70 20 66 75 6e 63 74 69 6f 6e 20 66 6f 72 20 61 6e   function for an
37a80 0a 2a 2a 20 61 67 67 72 65 67 61 74 65 2e 20 20  .** aggregate.  
37a90 54 68 65 20 66 75 6e 63 74 69 6f 6e 20 68 61 73  The function has
37aa0 20 50 35 20 61 72 67 75 6d 65 6e 74 73 2e 20 20   P5 arguments.  
37ab0 50 34 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20  P4 is a pointer 
37ac0 74 6f 20 74 68 65 20 0a 2a 2a 20 46 75 6e 63 44  to the .** FuncD
37ad0 65 66 20 73 74 72 75 63 74 75 72 65 20 74 68 61  ef structure tha
37ae0 74 20 73 70 65 63 69 66 69 65 73 20 74 68 65 20  t specifies the 
37af0 66 75 6e 63 74 69 6f 6e 2e 20 20 52 65 67 69 73  function.  Regis
37b00 74 65 72 20 50 33 20 69 73 20 74 68 65 0a 2a 2a  ter P3 is the.**
37b10 20 61 63 63 75 6d 75 6c 61 74 6f 72 2e 0a 2a 2a   accumulator..**
37b20 0a 2a 2a 20 54 68 65 20 50 35 20 61 72 67 75 6d  .** The P5 argum
37b30 65 6e 74 73 20 61 72 65 20 74 61 6b 65 6e 20 66  ents are taken f
37b40 72 6f 6d 20 72 65 67 69 73 74 65 72 20 50 32 20  rom register P2 
37b50 61 6e 64 20 69 74 73 0a 2a 2a 20 73 75 63 63 65  and its.** succe
37b60 73 73 6f 72 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 69  ssors..**.** Thi
37b70 73 20 6f 70 63 6f 64 65 20 69 73 20 69 6e 69 74  s opcode is init
37b80 69 61 6c 6c 79 20 63 6f 64 65 64 20 61 73 20 4f  ially coded as O
37b90 50 5f 41 67 67 53 74 65 70 30 2e 20 20 4f 6e 20  P_AggStep0.  On 
37ba0 66 69 72 73 74 20 65 76 61 6c 75 61 74 69 6f 6e  first evaluation
37bb0 2c 0a 2a 2a 20 74 68 65 20 46 75 6e 63 44 65 66  ,.** the FuncDef
37bc0 20 73 74 6f 72 65 64 20 69 6e 20 50 34 20 69 73   stored in P4 is
37bd0 20 63 6f 6e 76 65 72 74 65 64 20 69 6e 74 6f 20   converted into 
37be0 61 6e 20 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65  an sqlite3_conte
37bf0 78 74 20 61 6e 64 0a 2a 2a 20 74 68 65 20 6f 70  xt and.** the op
37c00 63 6f 64 65 20 69 73 20 63 68 61 6e 67 65 64 2e  code is changed.
37c10 20 20 49 6e 20 74 68 69 73 20 77 61 79 2c 20 74    In this way, t
37c20 68 65 20 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f  he initializatio
37c30 6e 20 6f 66 20 74 68 65 0a 2a 2a 20 73 71 6c 69  n of the.** sqli
37c40 74 65 33 5f 63 6f 6e 74 65 78 74 20 6f 6e 6c 79  te3_context only
37c50 20 68 61 70 70 65 6e 73 20 6f 6e 63 65 2c 20 69   happens once, i
37c60 6e 73 74 65 61 64 20 6f 66 20 6f 6e 20 65 61 63  nstead of on eac
37c70 68 20 63 61 6c 6c 20 74 6f 20 74 68 65 0a 2a 2a  h call to the.**
37c80 20 73 74 65 70 20 66 75 6e 63 74 69 6f 6e 2e 0a   step function..
37c90 2a 2f 0a 63 61 73 65 20 4f 50 5f 41 67 67 49 6e  */.case OP_AggIn
37ca0 76 65 72 73 65 3a 0a 63 61 73 65 20 4f 50 5f 41  verse:.case OP_A
37cb0 67 67 53 74 65 70 3a 20 7b 0a 20 20 69 6e 74 20  ggStep: {.  int 
37cc0 6e 3b 0a 20 20 73 71 6c 69 74 65 33 5f 63 6f 6e  n;.  sqlite3_con
37cd0 74 65 78 74 20 2a 70 43 74 78 3b 0a 0a 20 20 61  text *pCtx;..  a
37ce0 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79  ssert( pOp->p4ty
37cf0 70 65 3d 3d 50 34 5f 46 55 4e 43 44 45 46 20 29  pe==P4_FUNCDEF )
37d00 3b 0a 20 20 6e 20 3d 20 70 4f 70 2d 3e 70 35 3b  ;.  n = pOp->p5;
37d10 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
37d20 70 33 3e 30 20 26 26 20 70 4f 70 2d 3e 70 33 3c  p3>0 && pOp->p3<
37d30 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d  =(p->nMem+1 - p-
37d40 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 61  >nCursor) );.  a
37d50 73 73 65 72 74 28 20 6e 3d 3d 30 20 7c 7c 20 28  ssert( n==0 || (
37d60 70 4f 70 2d 3e 70 32 3e 30 20 26 26 20 70 4f 70  pOp->p2>0 && pOp
37d70 2d 3e 70 32 2b 6e 3c 3d 28 70 2d 3e 6e 4d 65 6d  ->p2+n<=(p->nMem
37d80 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29  +1 - p->nCursor)
37d90 2b 31 29 20 29 3b 0a 20 20 61 73 73 65 72 74 28  +1) );.  assert(
37da0 20 70 4f 70 2d 3e 70 33 3c 70 4f 70 2d 3e 70 32   pOp->p3<pOp->p2
37db0 20 7c 7c 20 70 4f 70 2d 3e 70 33 3e 3d 70 4f 70   || pOp->p3>=pOp
37dc0 2d 3e 70 32 2b 6e 20 29 3b 0a 20 20 70 43 74 78  ->p2+n );.  pCtx
37dd0 20 3d 20 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c   = sqlite3DbMall
37de0 6f 63 52 61 77 4e 4e 28 64 62 2c 20 6e 2a 73 69  ocRawNN(db, n*si
37df0 7a 65 6f 66 28 73 71 6c 69 74 65 33 5f 76 61 6c  zeof(sqlite3_val
37e00 75 65 2a 29 20 2b 0a 20 20 20 20 20 20 20 20 20  ue*) +.         
37e10 20 20 20 20 20 20 28 73 69 7a 65 6f 66 28 70 43        (sizeof(pC
37e20 74 78 5b 30 5d 29 20 2b 20 73 69 7a 65 6f 66 28  tx[0]) + sizeof(
37e30 4d 65 6d 29 20 2d 20 73 69 7a 65 6f 66 28 73 71  Mem) - sizeof(sq
37e40 6c 69 74 65 33 5f 76 61 6c 75 65 2a 29 29 29 3b  lite3_value*)));
37e50 0a 20 20 69 66 28 20 70 43 74 78 3d 3d 30 20 29  .  if( pCtx==0 )
37e60 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20   goto no_mem;.  
37e70 70 43 74 78 2d 3e 70 4d 65 6d 20 3d 20 30 3b 0a  pCtx->pMem = 0;.
37e80 20 20 70 43 74 78 2d 3e 70 4f 75 74 20 3d 20 28    pCtx->pOut = (
37e90 4d 65 6d 2a 29 26 28 70 43 74 78 2d 3e 61 72 67  Mem*)&(pCtx->arg
37ea0 76 5b 6e 5d 29 3b 0a 20 20 73 71 6c 69 74 65 33  v[n]);.  sqlite3
37eb0 56 64 62 65 4d 65 6d 49 6e 69 74 28 70 43 74 78  VdbeMemInit(pCtx
37ec0 2d 3e 70 4f 75 74 2c 20 64 62 2c 20 4d 45 4d 5f  ->pOut, db, MEM_
37ed0 4e 75 6c 6c 29 3b 0a 20 20 70 43 74 78 2d 3e 70  Null);.  pCtx->p
37ee0 46 75 6e 63 20 3d 20 70 4f 70 2d 3e 70 34 2e 70  Func = pOp->p4.p
37ef0 46 75 6e 63 3b 0a 20 20 70 43 74 78 2d 3e 69 4f  Func;.  pCtx->iO
37f00 70 20 3d 20 28 69 6e 74 29 28 70 4f 70 20 2d 20  p = (int)(pOp - 
37f10 61 4f 70 29 3b 0a 20 20 70 43 74 78 2d 3e 70 56  aOp);.  pCtx->pV
37f20 64 62 65 20 3d 20 70 3b 0a 20 20 70 43 74 78 2d  dbe = p;.  pCtx-
37f30 3e 73 6b 69 70 46 6c 61 67 20 3d 20 30 3b 0a 20  >skipFlag = 0;. 
37f40 20 70 43 74 78 2d 3e 69 73 45 72 72 6f 72 20 3d   pCtx->isError =
37f50 20 30 3b 0a 20 20 70 43 74 78 2d 3e 61 72 67 63   0;.  pCtx->argc
37f60 20 3d 20 6e 3b 0a 20 20 70 4f 70 2d 3e 70 34 74   = n;.  pOp->p4t
37f70 79 70 65 20 3d 20 50 34 5f 46 55 4e 43 43 54 58  ype = P4_FUNCCTX
37f80 3b 0a 20 20 70 4f 70 2d 3e 70 34 2e 70 43 74 78  ;.  pOp->p4.pCtx
37f90 20 3d 20 70 43 74 78 3b 0a 0a 20 20 2f 2a 20 4f   = pCtx;..  /* O
37fa0 50 5f 41 67 67 49 6e 76 65 72 73 65 20 6d 75 73  P_AggInverse mus
37fb0 74 20 68 61 76 65 20 50 31 3d 3d 31 20 61 6e 64  t have P1==1 and
37fc0 20 4f 50 5f 41 67 67 53 74 65 70 20 6d 75 73 74   OP_AggStep must
37fd0 20 68 61 76 65 20 50 31 3d 3d 30 20 2a 2f 0a 20   have P1==0 */. 
37fe0 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
37ff0 3d 3d 28 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d  ==(pOp->opcode==
38000 4f 50 5f 41 67 67 49 6e 76 65 72 73 65 29 20 29  OP_AggInverse) )
38010 3b 0a 0a 20 20 70 4f 70 2d 3e 6f 70 63 6f 64 65  ;..  pOp->opcode
38020 20 3d 20 4f 50 5f 41 67 67 53 74 65 70 31 3b 0a   = OP_AggStep1;.
38030 20 20 2f 2a 20 46 61 6c 6c 20 74 68 72 6f 75 67    /* Fall throug
38040 68 20 69 6e 74 6f 20 4f 50 5f 41 67 67 53 74 65  h into OP_AggSte
38050 70 20 2a 2f 0a 7d 0a 63 61 73 65 20 4f 50 5f 41  p */.}.case OP_A
38060 67 67 53 74 65 70 31 3a 20 7b 0a 20 20 69 6e 74  ggStep1: {.  int
38070 20 69 3b 0a 20 20 73 71 6c 69 74 65 33 5f 63 6f   i;.  sqlite3_co
38080 6e 74 65 78 74 20 2a 70 43 74 78 3b 0a 20 20 4d  ntext *pCtx;.  M
38090 65 6d 20 2a 70 4d 65 6d 3b 0a 0a 20 20 61 73 73  em *pMem;..  ass
380a0 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65  ert( pOp->p4type
380b0 3d 3d 50 34 5f 46 55 4e 43 43 54 58 20 29 3b 0a  ==P4_FUNCCTX );.
380c0 20 20 70 43 74 78 20 3d 20 70 4f 70 2d 3e 70 34    pCtx = pOp->p4
380d0 2e 70 43 74 78 3b 0a 20 20 70 4d 65 6d 20 3d 20  .pCtx;.  pMem = 
380e0 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a  &aMem[pOp->p3];.
380f0 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44  .#ifdef SQLITE_D
38100 45 42 55 47 0a 20 20 69 66 28 20 70 4f 70 2d 3e  EBUG.  if( pOp->
38110 70 31 20 29 7b 0a 20 20 20 20 2f 2a 20 54 68 69  p1 ){.    /* Thi
38120 73 20 69 73 20 61 6e 20 4f 50 5f 41 67 67 49 6e  s is an OP_AggIn
38130 76 65 72 73 65 20 63 61 6c 6c 2e 20 20 56 65 72  verse call.  Ver
38140 69 66 79 20 74 68 61 74 20 78 53 74 65 70 20 68  ify that xStep h
38150 61 73 20 61 6c 77 61 79 73 0a 20 20 20 20 2a 2a  as always.    **
38160 20 62 65 65 6e 20 63 61 6c 6c 65 64 20 61 74 20   been called at 
38170 6c 65 61 73 74 20 6f 6e 63 65 20 70 72 69 6f 72  least once prior
38180 20 74 6f 20 61 6e 79 20 78 49 6e 76 65 72 73 65   to any xInverse
38190 20 63 61 6c 6c 2e 20 2a 2f 0a 20 20 20 20 61 73   call. */.    as
381a0 73 65 72 74 28 20 70 4d 65 6d 2d 3e 75 54 65 6d  sert( pMem->uTem
381b0 70 3d 3d 30 78 31 31 32 32 65 30 65 33 20 29 3b  p==0x1122e0e3 );
381c0 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 2f 2a  .  }else{.    /*
381d0 20 54 68 69 73 20 69 73 20 61 6e 20 4f 50 5f 41   This is an OP_A
381e0 67 67 53 74 65 70 20 63 61 6c 6c 2e 20 20 4d 61  ggStep call.  Ma
381f0 72 6b 20 69 74 20 61 73 20 73 75 63 68 2e 20 2a  rk it as such. *
38200 2f 0a 20 20 20 20 70 4d 65 6d 2d 3e 75 54 65 6d  /.    pMem->uTem
38210 70 20 3d 20 30 78 31 31 32 32 65 30 65 33 3b 0a  p = 0x1122e0e3;.
38220 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 20 20 2f 2a    }.#endif..  /*
38230 20 49 66 20 74 68 69 73 20 66 75 6e 63 74 69 6f   If this functio
38240 6e 20 69 73 20 69 6e 73 69 64 65 20 6f 66 20 61  n is inside of a
38250 20 74 72 69 67 67 65 72 2c 20 74 68 65 20 72 65   trigger, the re
38260 67 69 73 74 65 72 20 61 72 72 61 79 20 69 6e 20  gister array in 
38270 61 4d 65 6d 5b 5d 0a 20 20 2a 2a 20 6d 69 67 68  aMem[].  ** migh
38280 74 20 63 68 61 6e 67 65 20 66 72 6f 6d 20 6f 6e  t change from on
38290 65 20 65 76 61 6c 75 61 74 69 6f 6e 20 74 6f 20  e evaluation to 
382a0 74 68 65 20 6e 65 78 74 2e 20